6.1 KiB
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:
-
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)
-
Solo un principal:
- Si intento marcar Director como principal y ya existe otro principal
- Error: "Ya existe un Director principal (Juan Pérez)"
-
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:
SELECT get_user_total_workload('userId', 'constructoraId');
-- Retorna: INTEGER (% total)
Estado: ✅ Ready for Development