195 lines
6.1 KiB
Markdown
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
|