erp-construccion/docs/02-definicion-modulos/MAI-002-proyectos-estructura/historias-usuario/US-PROJ-007-asignacion-equipo.md

195 lines
6.1 KiB
Markdown

# US-PROJ-007: Asignación de Equipo al Proyecto
**Épica:** MAI-002 - Proyectos y Estructura de Obra
**Sprint:** Sprint 6
**Story Points:** 4 SP
**Prioridad:** P1 (Alta)
**Estimación:** 2 días
---
## Historia de Usuario
**Como** Director de Proyectos
**Quiero** asignar miembros del equipo al proyecto con sus roles y porcentaje de dedicación
**Para** organizar las responsabilidades y controlar la carga de trabajo de cada persona
---
## Criterios de Aceptación
### ✅ AC1: Dashboard de Equipo
**Dado** que accedo a tab "Equipo" del proyecto
**Entonces** veo:
```
┌────────────────────────────────────────────────┐
│ Equipo del Proyecto (7 miembros) [+ Agregar]│
├────────────────────────────────────────────────┤
│ │
│ 👑 Director (1) │
│ • Juan Pérez ⭐ Principal │
│ 100% dedicación │
│ Desde: 01/09/2025 │
│ │
│ 🏗️ Residentes (2) │
│ • María López ⭐ Principal │
│ 100% dedicación │
│ • Carlos Ruiz (Suplente) │
│ 50% dedicación │
│ │
│ 🔧 Ingenieros (3) │
│ • Ana Torres - Estructural │
│ 25% dedicación │
│ • Luis Gómez - Instalaciones │
│ 25% dedicación │
│ • Pedro Sánchez - Costos │
│ 50% dedicación │
│ │
│ 📦 Gerente de Compras (1) │
│ • Sofia Ramírez │
│ 25% dedicación (atiende 8 proyectos) │
│ │
└────────────────────────────────────────────────┘
```
### ✅ AC2: Agregar Miembro al Equipo
**Formulario:**
- Usuario: [Buscar usuario ▼]
- Rol: Director / Residente / Ingeniero / Supervisor / Gerente Compras
- Especialidad (si es Ingeniero): Estructural / Instalaciones / Eléctrico / Costos
- Es principal: ☑ (solo 1 por rol Director/Residente)
- Dedicación: [100] % (rango: 1-100)
- Fecha inicio: [15/11/2025]
- Fecha fin: [__/__/____] (opcional, dejar vacío si es indefinida)
- Responsabilidades: [Textarea con lista]
**Validaciones:**
1. **Workload límites:**
- Director: max 500% (5 proyectos a 100%)
- Residente: max 200% (2 proyectos a 100%)
- Ingeniero: max 800% (8 proyectos)
- Supervisor: max 100% (1 proyecto)
2. **Solo un principal:**
- Si intento marcar Director como principal y ya existe otro principal
- Error: "Ya existe un Director principal (Juan Pérez)"
3. **Validar workload disponible:**
- Si usuario tiene 450% ya asignado (Director)
- Intento asignar 100% más
- Error: "Usuario ya tiene 450% de carga. Límite: 500%. Solo puede asignar 50% adicional"
### ✅ AC3: Visualización de Carga de Trabajo
**Dado** que selecciono un usuario
**Entonces** veo resumen:
```
Usuario: Juan Pérez (Director)
Carga total: 450% / 500% ───────────▓▓▓▓▓▓▓▓▓░─ 90%
⚠️ Cerca del límite
Proyectos asignados:
• Fraccionamiento Los Pinos - 100% (Principal)
• Conjunto Jardines - 100%
• Torre Central - 100%
• Residencial Vista - 100%
• Plaza Comercial - 50%
Disponible para asignar: 50%
```
**Indicadores:**
- 🟢 Verde: 0-70% de límite
- 🟡 Amarillo: 70-90%
- 🔴 Rojo: 90-100%
### ✅ AC4: Editar/Desactivar Asignación
**Editar:**
- Cambiar porcentaje de dedicación
- Actualizar especialidad
- Modificar responsabilidades
- NO se puede cambiar de rol (eliminar y crear nueva)
**Desactivar:**
- Botón "Terminar Asignación"
- Pedir fecha de fin
- Marca `isActive = false`
- Usuario sale del dashboard de equipo activo
### ✅ AC5: Permisos
**Solo Director y Admin pueden:**
- Agregar miembros
- Editar asignaciones
- Desactivar asignaciones
**Todos pueden:**
- Ver equipo del proyecto
---
## Escenarios de Prueba
**Escenario 1:** Asignar Director principal
**Given** proyecto sin Director
**When** asigno Juan Pérez como Director principal al 100%
**Then** asignación se crea exitosamente
**And** aparece en dashboard con badge "Principal"
**Escenario 2:** Validación de límite de workload
**Given** Juan Pérez (Director) tiene 480% asignado
**When** intento asignar 50% adicional
**Then** sistema permite (total: 530% está dentro de límite)
**When** intento asignar 100%
**Then** sistema bloquea: "Excede límite de 500%"
**Escenario 3:** Cambio de residente principal
**Given** María es Residente principal
**When** marco a Carlos como principal
**Then** sistema desmarca a María automáticamente
**And** Carlos queda como nuevo principal
---
## Definición de Done
- [ ] Dashboard de equipo funcional
- [ ] Formulario de asignación con validaciones
- [ ] Cálculo de workload en tiempo real
- [ ] Validación de límites por rol
- [ ] Solo un principal por Director/Residente
- [ ] Indicadores visuales de carga
- [ ] Desactivación de asignaciones
- [ ] Tests de validación de workload
- [ ] Permisos por rol implementados
---
## Notas Técnicas
**Endpoints:**
```
POST /api/projects/:projectId/team
GET /api/projects/:projectId/team
GET /api/projects/:projectId/team/dashboard
PUT /api/team-assignments/:id
PUT /api/team-assignments/:id/deactivate
GET /api/users/:userId/workload
```
**Función SQL:**
```sql
SELECT get_user_total_workload('userId', 'constructoraId');
-- Retorna: INTEGER (% total)
```
---
**Estado:** ✅ Ready for Development