6.4 KiB
US-PROJ-009: Alertas de Fechas Críticas
Épica: MAI-002 - Proyectos y Estructura de Obra Sprint: Sprint 6 Story Points: 3 SP Prioridad: P1 (Alta) Estimación: 1-2 días
Historia de Usuario
Como Director de Proyectos Quiero registrar fechas críticas contractuales o regulatorias con alertas automáticas Para evitar incumplimientos, penalizaciones y asegurar entregas a tiempo
Criterios de Aceptación
✅ AC1: Listado de Fechas Críticas
Dado que accedo a "Fechas Críticas" Entonces veo tabla:
| Fecha | Descripción | Tipo | Entidad | Consecuencias | Días Restantes | Estado |
|---|---|---|---|---|---|---|
| 15/12/2025 | Entrega INFONAVIT | Contractual | INFONAVIT | $500,000 + 2% mes | 28 días | ⏱️ Próxima |
| 01/02/2026 | Renovación seguro | Regulatoria | Aseguradora | Pérdida de cobertura | 75 días | ⏸️ Pendiente |
| 15/05/2026 | Finiquito gobierno | Contractual | Municipio | Retención de garantía | 178 días | ⏸️ Pendiente |
Estados:
- ⏱️ Próxima (<30 días)
- ⏸️ Pendiente (>30 días)
- ⚠️ En riesgo (<7 días)
- ✅ Cumplida
- ❌ Incumplida
Ordenamiento: Por fecha (más próxima primero)
✅ AC2: Registrar Fecha Crítica
Formulario:
- Descripción: "Entrega primera etapa a INFONAVIT"
- Fecha: [15/12/2025]
- Es fecha límite inamovible: ☑
- Tipo de compromiso: Contractual / Regulatoria / Financiero / Cliente / Interno
- Entidad relacionada: "INFONAVIT"
- Consecuencias si se incumple:
Penalización de $500,000 MXN + Intereses del 2% mensual + Posible rescisión de contrato - Alerta (días antes): [30]
Validaciones:
- Fecha debe ser futura
- Descripción obligatoria
- Si es inamovible, marcar en rojo
✅ AC3: Sistema de Alertas Automáticas
Configuración de alertas:
- Primera alerta: 30 días antes
- Segunda alerta: 15 días antes
- Tercera alerta: 7 días antes
- Alertas diarias: últimos 3 días
Cuando llega el momento de alerta Entonces sistema envía:
- ✉️ Email al Director del proyecto
- 📱 Notificación in-app
- 📊 Actualiza dashboard con badge "⚠️ 2 fechas críticas próximas"
Ejemplo de email:
Asunto: ⚠️ Fecha crítica próxima: Entrega INFONAVIT en 30 días
Proyecto: Fraccionamiento Los Pinos
Fecha crítica: 15/12/2025 (en 30 días)
Descripción:
Entrega primera etapa a INFONAVIT
Consecuencias si se incumple:
Penalización de $500,000 MXN + intereses del 2% mensual
Entidad: INFONAVIT
Tipo: Contractual - FECHA LÍMITE INAMOVIBLE
Acciones recomendadas:
- Verificar avance físico actual: 82%
- Acelerar trabajos de acabados
- Coordinar inspección pre-entrega
[Ver Proyecto] [Marcar como Cumplida]
✅ AC4: Marcar Fecha como Cumplida/Incumplida
Dado fecha crítica "Entrega INFONAVIT" el 15/12/2025 Cuando llega el 15/12/2025 y se cumplió Entonces hago clic "Marcar como Cumplida" Y sistema pide:
- Fecha real de cumplimiento: [15/12/2025]
- Notas: "Entrega realizada sin observaciones"
Si NO se cumplió:
- Botón "Reportar Incumplimiento"
- Fecha de incumplimiento: [15/12/2025]
- Motivos del incumplimiento: [Textarea]
- Acciones correctivas: [Textarea]
- Sistema marca en rojo
- Notificación automática a Admin y Director
✅ AC5: Dashboard de Fechas Críticas
Widget en dashboard principal:
┌────────────────────────────────────────┐
│ ⚠️ Fechas Críticas Próximas (2) │
├────────────────────────────────────────┤
│ │
│ 🔴 En 7 días: Entrega INFONAVIT │
│ 15/12/2025 - Penalización $500K │
│ │
│ 🟡 En 28 días: Renovación de seguro │
│ 01/02/2026 - Pérdida de cobertura │
│ │
│ [Ver Todas las Fechas →] │
└────────────────────────────────────────┘
Colores:
- 🔴 Rojo: <7 días
- 🟡 Amarillo: 7-30 días
- 🟢 Verde: >30 días
Escenarios de Prueba
Escenario 1: Crear fecha crítica con penalización Given proyecto con contrato INFONAVIT When registro fecha crítica:
- Fecha: 15/12/2025
- Tipo: Contractual
- Entidad: INFONAVIT
- Consecuencias: Penalización $500,000 Then fecha se guarda y alertas se configuran
Escenario 2: Recibir alerta 30 días antes Given fecha crítica el 15/12/2025 And estamos el 15/11/2025 (30 días antes) When cron job se ejecuta a las 9:00 AM Then Director recibe email de alerta And dashboard muestra badge "⚠️ 1 fecha próxima"
Escenario 3: Marcar fecha como incumplida Given fecha crítica el 15/12/2025 And no se cumplió When marco como incumplida Then estado cambia a "Incumplida" And Admin y Director reciben notificación And registro queda en historial
Definición de Done
- CRUD de fechas críticas completo
- Sistema de alertas automáticas (cron job)
- Emails enviados correctamente
- Widget de dashboard funcional
- Marcar como cumplida/incumplida
- Cálculo de días restantes en tiempo real
- Notificaciones in-app
- Tests de envío de alertas
- Configuración de múltiples alertas por fecha
Notas Técnicas
Endpoints:
POST /api/projects/:projectId/critical-dates
GET /api/projects/:projectId/critical-dates
PUT /api/critical-dates/:id/mark-met
PUT /api/critical-dates/:id/mark-missed
DELETE /api/critical-dates/:id
Cron Job (diario 9:00 AM):
@Cron('0 9 * * *')
async checkCriticalDates() {
const today = new Date();
// Fechas próximas (30, 15, 7, 3, 2, 1 días)
const upcomingDates = await this.findUpcoming([30, 15, 7, 3, 2, 1]);
for (const date of upcomingDates) {
if (shouldSendAlert(date, today)) {
await this.sendAlert(date);
await this.updateLastAlertSent(date.id);
}
}
}
Email Template:
- Subject: "⚠️ Fecha crítica próxima: {descripcion} en {dias} días"
- Body: HTML template con detalles completos
- Botones de acción: Ver Proyecto, Marcar como Cumplida
Estado: ✅ Ready for Development