erp-construccion/docs/02-definicion-modulos/MAI-007-rrhh-asistencias/_MAP.md

468 lines
16 KiB
Markdown

# _MAP: MAI-006 - RRHH, Asistencias y Nómina
**Épica:** MAI-006
**Nombre:** RRHH, Asistencias y Nómina
**Fase:** 1 - Alcance Inicial
**Presupuesto:** $25,000 MXN
**Story Points:** 50 SP
**Estado:** 🚧 Planificado
**Sprint:** Sprint 9-10 (Semanas 13.5-16)
**Prioridad:** P0 - Crítico
**Última actualización:** 2025-11-17
---
## 📋 Propósito
Implementar sistema completo de gestión de recursos humanos para obra con:
- Catálogo de empleados, cuadrillas y oficios
- **Asistencia biométrica desde app móvil** ⭐
- Costeo de mano de obra por obra/partida
- **Integración con IMSS e INFONAVIT** ⭐
- Exportación de archivos SUA para nómina
**Justificación:** RRHH es crítico para costeo de mano de obra y cumplimiento legal (IMSS/INFONAVIT) desde el inicio de cualquier obra.
**Reutilización GAMILIT:** 30% (concepto de tracking de usuarios, adaptado)
---
## 📁 Contenido
### Requerimientos Funcionales (5)
| ID | Archivo | Título | Estado |
|----|---------|--------|--------|
| RF-HR-001 | [RF-HR-001-empleados-cuadrillas.md](./requerimientos/RF-HR-001-empleados-cuadrillas.md) | Gestión de Empleados y Cuadrillas | 🚧 Planificado |
| RF-HR-002 | [RF-HR-002-asistencia-biometrica.md](./requerimientos/RF-HR-002-asistencia-biometrica.md) | Sistema de Asistencia con Biométrico | 🚧 Planificado |
| RF-HR-003 | [RF-HR-003-costeo-mano-obra.md](./requerimientos/RF-HR-003-costeo-mano-obra.md) | Costeo de Mano de Obra | 🚧 Planificado |
| RF-HR-004 | [RF-HR-004-integracion-imss.md](./requerimientos/RF-HR-004-integracion-imss.md) | Integración con IMSS | 🚧 Planificado |
| RF-HR-005 | [RF-HR-005-integracion-infonavit.md](./requerimientos/RF-HR-005-integracion-infonavit.md) | Integración con INFONAVIT | 🚧 Planificado |
### Especificaciones Técnicas (5)
| ID | Archivo | Título | RF | Estado |
|----|---------|--------|-------|--------|
| ET-HR-001 | [ET-HR-001-empleados-cuadrillas.md](./especificaciones/ET-HR-001-empleados-cuadrillas.md) | Implementación de Empleados y Cuadrillas | RF-HR-001 | 🚧 Planificado |
| ET-HR-002 | [ET-HR-002-asistencia-biometrica.md](./especificaciones/ET-HR-002-asistencia-biometrica.md) | Implementación de Asistencia Biométrica | RF-HR-002 | 🚧 Planificado |
| ET-HR-003 | [ET-HR-003-costeo-mano-obra.md](./especificaciones/ET-HR-003-costeo-mano-obra.md) | Implementación de Costeo de Mano de Obra | RF-HR-003 | 🚧 Planificado |
| ET-HR-004 | [ET-HR-004-integracion-imss.md](./especificaciones/ET-HR-004-integracion-imss.md) | Integración con API IMSS | RF-HR-004 | 🚧 Planificado |
| ET-HR-005 | [ET-HR-005-integracion-infonavit.md](./especificaciones/ET-HR-005-integracion-infonavit.md) | Integración con API INFONAVIT | RF-HR-005 | 🚧 Planificado |
### Historias de Usuario (6)
| ID | Archivo | Título | SP | Estado |
|----|---------|--------|----|--------|
| US-HR-001 | [US-HR-001-catalogo-empleados.md](./historias-usuario/US-HR-001-catalogo-empleados.md) | Catálogo de Empleados y Cuadrillas | 8 | 🚧 Planificado |
| US-HR-002 | [US-HR-002-asistencia-biometrica-app.md](./historias-usuario/US-HR-002-asistencia-biometrica-app.md) | Asistencia con Biométrico desde App | 15 | 🚧 Planificado |
| US-HR-003 | [US-HR-003-costeo-mano-obra.md](./historias-usuario/US-HR-003-costeo-mano-obra.md) | Costeo de Mano de Obra por Obra | 10 | 🚧 Planificado |
| US-HR-004 | [US-HR-004-integracion-nomina.md](./historias-usuario/US-HR-004-integracion-nomina.md) | Integración con Nómina Externa | 8 | 🚧 Planificado |
| US-HR-005 | [US-HR-005-exportacion-imss-infonavit.md](./historias-usuario/US-HR-005-exportacion-imss-infonavit.md) | Exportación IMSS/INFONAVIT | 12 | 🚧 Planificado |
| US-HR-006 | [US-HR-006-reportes-asistencia.md](./historias-usuario/US-HR-006-reportes-asistencia.md) | Reportes de Asistencia | 5 | 🚧 Planificado |
**Total Story Points:** 50 SP (12 SP más que GAMILIT por integraciones externas)
### Implementación
📊 **Inventarios de trazabilidad:**
- [TRACEABILITY.yml](./implementacion/TRACEABILITY.yml) - Matriz completa de trazabilidad
- [DATABASE.yml](./implementacion/DATABASE.yml) - Objetos de base de datos
- [BACKEND.yml](./implementacion/BACKEND.yml) - Módulos backend e integraciones
- [MOBILE.yml](./implementacion/MOBILE.yml) - Especificaciones de app móvil ⭐
- [INTEGRATIONS.yml](./implementacion/INTEGRATIONS.yml) - Integraciones IMSS/INFONAVIT ⭐
### Pruebas
📋 Documentación de testing:
- [TEST-PLAN.md](./pruebas/TEST-PLAN.md) - Plan de pruebas
- [TEST-CASES.md](./pruebas/TEST-CASES.md) - Casos de prueba
- [INTEGRATION-TESTS.md](./pruebas/INTEGRATION-TESTS.md) - Tests de integración IMSS/INFONAVIT ⭐
---
## 🔗 Referencias
- **README:** [README.md](./README.md) - Descripción detallada de la épica
- **Fase 1:** [../README.md](../README.md) - Información de la fase completa
- **Roadmap:** [../ROADMAP-DETALLADO.md](../ROADMAP-DETALLADO.md) - Sprints 9-10
---
## 📊 Métricas
| Métrica | Valor |
|---------|-------|
| **Presupuesto estimado** | $25,000 MXN |
| **Presupuesto target** | $25,000 MXN ±5% |
| **Story Points estimados** | 50 SP |
| **Duración estimada** | 2.5 semanas (12.5 días) |
| **Reutilización GAMILIT** | 30% |
| **Integraciones externas** | 2 (IMSS, INFONAVIT) |
| **RF a implementar** | 5/5 |
| **ET a implementar** | 5/5 |
| **US a completar** | 6/6 |
---
## 🎯 Módulos Afectados
### Base de Datos
- **Schemas:** `hr`, `attendance`, `payroll`
- **Tablas:** ~15 tablas
- `employees`, `crews`, `trades`, `attendance_records`
- `labor_costs`, `payroll_periods`, `imss_integration_log`, `infonavit_integration_log`
- **Funciones:** Cálculo de costeo, validaciones de asistencia
- **ENUMs:**
- `employee_status` (active, suspended, terminated)
- `trade_type` (mason, electrician, plumber, carpenter, etc.)
- `attendance_method` (biometric, qr, manual, gps)
### Backend
- **Módulo:** `hr`
- **Path:** `apps/backend/src/modules/hr/`
- **Services:**
- `EmployeeService` - CRUD de empleados
- `AttendanceService` - Registro y validación de asistencia
- `LaborCostService` - Cálculo de costeo
- `IMSSIntegrationService` - Integración con IMSS ⭐
- `INFONAVITIntegrationService` - Integración con INFONAVIT ⭐
- `BiometricService` - Validación de datos biométricos ⭐
- **APIs Externas:**
- IMSS SOAP/REST API
- INFONAVIT REST API
### Frontend Web
- **Features:** `hr`, `attendance`, `payroll`
- **Path:** `apps/frontend/src/features/`
- **Componentes:**
- Gestión de empleados y cuadrillas
- Dashboard de asistencias
- Reportes de costeo
- Exportación IMSS/INFONAVIT
- **Guards:** AuthGuard, RoleGuard (solo HR y Finance)
### App Móvil (React Native) ⭐
- **Features:** `attendance-capture`
- **Path:** `apps/mobile/src/features/attendance/`
- **Componentes:**
- Login de residente
- Selector de obra
- Scanner QR
- Captura biométrica (huella/facial)
- Lista de empleados
- Confirmación de asistencia
- Historial del día
- **Offline:** SQLite + sincronización automática
- **Biométrico:**
- `react-native-biometrics` (huella)
- `react-native-camera` (facial)
- **GPS:** `@react-native-community/geolocation`
---
## 📱 Funcionalidades de App Móvil
### Flujo de Asistencia
```mermaid
flowchart TD
A[Residente abre app] --> B[Login]
B --> C[Selecciona obra]
C --> D{Tipo de registro}
D -->|Escanear QR| E[Scan QR del empleado]
D -->|Buscar empleado| F[Lista de empleados]
D -->|Biométrico| G[Captura huella/facial]
E --> H[Validar empleado]
F --> H
G --> H
H --> I{Validaciones}
I -->|GPS| J[Verificar ubicación en obra]
I -->|Horario| K[Verificar jornada laboral]
I -->|Estado| L[Verificar empleado activo]
J --> M{¿Todo OK?}
K --> M
L --> M
M -->|Sí| N[Registrar asistencia]
M -->|No| O[Mostrar error]
N --> P{¿Online?}
P -->|Sí| Q[Enviar a servidor]
P -->|No| R[Guardar en cola local]
Q --> S[Confirmación exitosa]
R --> S
S --> T[Vibración + sonido]
```
### Pantallas de App
1. **Login**
- Email/password
- Biométrico para login rápido (opcional)
2. **Selector de Obra**
- Lista de obras asignadas al residente
- Filtro por estatus
3. **Dashboard de Asistencia**
- Botones: Check-in / Check-out
- Resumen del día (empleados registrados)
- Alertas (empleados faltantes, retrasos)
4. **Captura de Asistencia**
- Tabs: QR | Lista | Biométrico
- Foto del empleado
- Timestamp y GPS
- Notas opcionales
5. **Historial**
- Asistencias del día
- Filtros por cuadrilla/oficio
- Estado de sincronización
### Validaciones en App
| Validación | Descripción | Acción si falla |
|------------|-------------|-----------------|
| **GPS** | Empleado debe estar dentro del radio de la obra (100m) | Advertencia, permitir override manual |
| **Horario** | Registro dentro de jornada laboral (6am-8pm típico) | Advertencia, permitir registro |
| **Estado empleado** | Empleado debe estar activo y asignado a obra | Bloquear registro |
| **Duplicado** | No permitir doble check-in sin check-out | Bloquear registro |
| **Biométrico** | Match con template almacenado (>70% confianza) | Fallback a foto |
### Modo Offline
**Capacidades:**
- Almacenar hasta 500 registros de asistencia en cola
- Cache de lista de empleados de la obra (actualizado diariamente)
- Cache de templates biométricos (encrypted)
- Indicador visual de registros pendientes de sincronización
**Sincronización:**
- Automática al detectar conexión
- Manual por botón "Sincronizar ahora"
- Resolución de conflictos (último gana)
---
## 🔌 Integraciones Externas
### 1. IMSS (Instituto Mexicano del Seguro Social)
**API:** SOAP/REST (depende de la región)
**Autenticación:** Certificado digital (.cer + .key)
**Funcionalidades:**
1. **Afiliación de trabajadores**
- Alta de trabajador
- Baja de trabajador
- Modificación salarial
- Reingreso
2. **Generación de SUA (Sistema Único de Autodeterminación)**
- Archivo .SUA mensual
- Cédulas de determinación
- Cálculo de cuotas obrero-patronales
3. **Consultas**
- Vigencia de derechos
- Semanas cotizadas
- Salario base de cotización
**Endpoints clave:**
```
POST /api/imss/afiliacion/alta
POST /api/imss/afiliacion/baja
POST /api/imss/afiliacion/modificacion
POST /api/imss/sua/generar
GET /api/imss/vigencia/:nss
```
**Formato de Archivo SUA:**
```
Layout de 80 caracteres por línea
Secciones:
- Encabezado (registro patronal, período)
- Trabajadores (NSS, nombre, salario, días trabajados)
- Totales (suma de cuotas)
- Cierre (checksum)
```
---
### 2. INFONAVIT (Instituto del Fondo Nacional de la Vivienda)
**API:** REST
**Autenticación:** OAuth 2.0 + API Key
**Funcionalidades:**
1. **Registro patronal**
- Alta de patrón
- Actualización de datos
2. **Aportaciones**
- Cálculo de aportaciones (5% del SBC)
- Generación de archivo de pago
- Pago referenciado
3. **Trabajadores acreditados**
- Consulta de trabajadores con crédito
- Descuentos de crédito INFONAVIT
**Endpoints clave:**
```
POST /api/infonavit/patron/registro
POST /api/infonavit/aportaciones/calcular
POST /api/infonavit/aportaciones/generar-archivo
GET /api/infonavit/trabajadores/acreditados/:rfc
POST /api/infonavit/descuentos/aplicar
```
**Cálculo de Aportaciones:**
```javascript
// Ejemplo simplificado
const aportacionINFONAVIT = (salarioBaseCotizacion, diasTrabajados) => {
const aportacionDiaria = salarioBaseCotizacion * 0.05; // 5%
return aportacionDiaria * diasTrabajados;
};
```
---
## 🧪 Testing
### Unit Tests (Backend)
```typescript
describe('AttendanceService', () => {
it('should register attendance with GPS validation')
it('should prevent duplicate check-in')
it('should calculate labor cost per work')
it('should validate biometric data')
})
describe('IMSSIntegrationService', () => {
it('should generate valid SUA file')
it('should calculate IMSS contributions correctly')
it('should handle API errors gracefully')
})
describe('INFONAVITIntegrationService', () => {
it('should calculate 5% contributions')
it('should fetch accredited workers')
it('should generate payment file')
})
```
### E2E Tests (App Móvil)
```typescript
describe('Attendance Capture E2E', () => {
it('should complete full check-in flow with QR')
it('should complete check-in with biometric')
it('should handle offline mode correctly')
it('should sync pending records when online')
it('should validate GPS within work radius')
})
```
### Integration Tests
```typescript
describe('IMSS Integration', () => {
it('should connect to IMSS sandbox API')
it('should register employee successfully')
it('should generate valid SUA file')
})
describe('INFONAVIT Integration', () => {
it('should connect to INFONAVIT sandbox API')
it('should calculate contributions correctly')
it('should fetch accredited workers list')
})
```
---
## 🚨 Riesgos Específicos
| Riesgo | Probabilidad | Impacto | Mitigación |
|--------|-------------|---------|------------|
| **APIs IMSS/INFONAVIT cambian** | Media | Alto | Monitoreo de cambios, abstracción de integraciones |
| **Biométrico no funciona en devices antiguos** | Media | Medio | Fallback a QR + foto |
| **GPS impreciso en obra** | Alta | Bajo | Radio amplio (100m), permitir override |
| **Sincronización offline falla** | Media | Alto | Cola persistente, retry automático |
| **Certificados IMSS expiran** | Baja | Alto | Alertas automáticas 30 días antes |
---
## 📋 Checklist de Implementación
### Backend
- [ ] CRUD de empleados, cuadrillas, oficios
- [ ] API de registro de asistencia con validaciones
- [ ] Servicio de cálculo de costeo de mano de obra
- [ ] Integración IMSS (sandbox → producción)
- [ ] Integración INFONAVIT (sandbox → producción)
- [ ] Generación de archivos SUA
- [ ] Exportación de reportes
### App Móvil
- [ ] Login y autenticación
- [ ] Selector de obra
- [ ] Scanner QR (react-native-qrcode-scanner)
- [ ] Captura biométrica (react-native-biometrics)
- [ ] GPS validation (@react-native-community/geolocation)
- [ ] Base de datos local (expo-sqlite)
- [ ] Cola de sincronización offline
- [ ] UI/UX optimizada para campo
### Frontend Web
- [ ] Gestión de empleados
- [ ] Dashboard de asistencias
- [ ] Reportes de costeo
- [ ] Exportación IMSS/INFONAVIT
- [ ] Logs de sincronización
### Database
- [ ] Schemas y tablas
- [ ] Funciones de cálculo
- [ ] Triggers de validación
- [ ] Índices optimizados
### Testing
- [ ] Unit tests >80% coverage
- [ ] E2E tests de flujo completo
- [ ] Integration tests con IMSS/INFONAVIT sandboxes
- [ ] Tests de app móvil (offline, GPS, biométrico)
### Despliegue
- [ ] Variables de entorno (API keys, certificados)
- [ ] Secrets management (certificados IMSS)
- [ ] Deploy de app a stores (TestFlight, Play Store)
- [ ] Configuración de monitoreo
- [ ] Documentación de integración
---
## 💡 Lessons Learned (a documentar post-implementación)
1. **Integraciones gubernamentales son complejas:** Requieren tiempo para validación y certificación
2. **Biométrico debe tener fallback:** No todos los dispositivos lo soportan
3. **Modo offline es crítico:** Obra no siempre tiene buena conexión
4. **UX simple es clave:** Residentes no son técnicos, UI debe ser intuitiva
---
## 🎯 Siguiente Paso
Completar documentos RF, ET y US de esta épica, con especial énfasis en:
- RF-HR-002: Especificaciones de biométrico
- ET-HR-004 y ET-HR-005: Detalles técnicos de integraciones
- US-HR-002: Flujos de usuario en app móvil
---
**Generado:** 2025-11-17
**Mantenedores:** @tech-lead @backend-team @mobile-team @integrations-team
**Estado:** 🚧 Planificado
**Prioridad:** P0 - Crítico para cumplimiento legal