erp-construccion/docs/02-definicion-modulos/MAI-002-proyectos-estructura/historias-usuario/US-PROJ-008-calendario-hitos.md

207 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# US-PROJ-008: Calendario de Hitos del Proyecto
**É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** definir y dar seguimiento a los hitos clave del proyecto
**Para** controlar el avance contra el calendario planificado y detectar retrasos
---
## Criterios de Aceptación
### ✅ AC1: Timeline de Hitos
**Dado** que accedo a tab "Calendario" del proyecto
**Entonces** veo timeline visual:
```
┌────────────────────────────────────────────────────────────┐
│ Hitos del Proyecto [+ Nuevo Hito]│
├────────────────────────────────────────────────────────────┤
│ │
│ ●─────────────────────────────────────────────────────● │
│ │ │ │
│ ✅ Arranque 🔵 Permisos ⏱️ Cimiento│
│ 01/09/25 15/10/25 01/12/25 │
│ Completado En progreso Próximo (12d)│
│ │
│ ⏱️ Estructura ⏸️ Instalaciones ⏸️ Acabados │
│ 15/01/26 01/03/26 15/05/26 │
│ Próximo (45d) Pendiente Pendiente │
│ │
│ ⏸️ Primera Entrega ⏸️ Entrega Final ⏸️ Cierre │
│ 01/08/26 15/10/26 30/11/26 │
│ Pendiente Pendiente Pendiente │
│ │
└────────────────────────────────────────────────────────────┘
```
**Estados:**
- ✅ Completado (verde)
- 🔵 En progreso (azul)
- ⏱️ Próximo (amarillo, <30 días)
- Pendiente (gris)
- Retrasado (rojo, fecha pasada)
### ✅ AC2: Crear Hito
**Formulario:**
- Nombre: "Obtención de licencias"
- Tipo: Permisos obtenidos / Inicio construcción / Estructura completa / etc.
- Fecha planificada: [15/10/2025]
- Responsable: [Juan Pérez ▼]
- Depende de: [Hito anterior ▼] (opcional)
- Entregables:
- Licencia de construcción
- Permisos municipales
- Póliza de seguro
- Alerta (días antes): [7]
**Tipos predefinidos:**
- Arranque del proyecto
- Permisos obtenidos
- Inicio de construcción
- Cimentación completa
- Estructura completa
- Instalaciones completas
- Acabados completos
- Primera entrega
- Entrega final
- Cierre del proyecto
- Otro (personalizado)
### ✅ AC3: Marcar Hito como Completado
**Dado** hito "Permisos obtenidos" en estado pendiente
**Cuando** hago clic "Marcar como Completado"
**Entonces** veo modal:
```
┌──────────────────────────────────────────────┐
│ Completar Hito │
├──────────────────────────────────────────────┤
│ │
│ Hito: Permisos obtenidos │
│ Planificado: 15/10/2025 │
│ │
│ Fecha real de completación: │
│ [📅 18/10/2025] │
│ │
│ ⚠️ Retraso: 3 días │
│ │
│ Notas de completación: │
│ ┌──────────────────────────────────────────┐│
│ │ Se obtuvieron todos los permisos. ││
│ │ Retraso menor por trámite de MIA. ││
│ └──────────────────────────────────────────┘│
│ │
│ [Cancelar] [Marcar Completado]│
└──────────────────────────────────────────────┘
```
**Al completar:**
- Status = "completed"
- actualDate = fecha seleccionada
- Si fecha > planificada: calcular días de retraso
- Desbloquear hitos dependientes
### ✅ AC4: Validación de Dependencias
**Dado** hito B depende de hito A
**Cuando** intento completar hito B
**Y** hito A aún está pendiente
**Entonces** sistema muestra:
```
⚠️ No se puede completar
Este hito depende de:
• Permisos obtenidos (pendiente)
Completa las dependencias primero.
```
### ✅ AC5: Alertas de Hitos Próximos
**Dado** hito "Cimentación completa" planificado para 01/12/2025
**Y** alerta configurada a 7 días antes
**Cuando** llega 24/11/2025
**Entonces** sistema envía notificación:
- Email al responsable
- Notificación in-app
- Mensaje: "El hito 'Cimentación completa' vence en 7 días"
**Frecuencia de alertas:**
- 1 alerta diaria (no spam)
- Hasta que se complete el hito
---
## Escenarios de Prueba
**Escenario 1:** Crear 11 hitos del proyecto
**Given** proyecto "Fraccionamiento Los Pinos"
**When** creo 11 hitos desde arranque hasta cierre
**Then** timeline muestra todos en orden cronológico
**And** primer hito no tiene dependencias
**And** cada hito siguiente depende del anterior
**Escenario 2:** Completar hito con retraso
**Given** hito planificado para 15/10/2025
**When** lo marco completado el 18/10/2025
**Then** sistema calcula 3 días de retraso
**And** muestra badge "⚠️ +3 días de retraso"
**Escenario 3:** Intentar completar con dependencia pendiente
**Given** hito B depende de hito A (pendiente)
**When** intento completar hito B
**Then** sistema bloquea con mensaje de error
---
## Definición de Done
- [ ] Timeline visual funcional
- [ ] CRUD de hitos completo
- [ ] Validación de dependencias
- [ ] Marcar como completado con notas
- [ ] Cálculo de días de retraso/adelanto
- [ ] Alertas automáticas (cron job)
- [ ] 11 tipos de hitos predefinidos
- [ ] Tests de validación de dependencias
- [ ] Notificaciones funcionando
---
## Notas Técnicas
**Endpoints:**
```
POST /api/projects/:projectId/milestones
GET /api/projects/:projectId/milestones
GET /api/projects/:projectId/milestones/timeline
PUT /api/milestones/:id/complete
DELETE /api/milestones/:id
```
**Cron Job (diario 9:00 AM):**
```typescript
@Cron('0 9 * * *')
async checkMilestoneAlerts() {
// Buscar hitos próximos
// Enviar notificaciones
}
```
---
**Estado:** ✅ Ready for Development