erp-construccion/docs/02-definicion-modulos/MAI-007-rrhh-asistencias/requerimientos/RF-RRHH-001-catalogo-personal-cuadrillas.md

1383 lines
67 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RF-RRHH-001: Catálogo de Personal y Cuadrillas
**Módulo:** MAI-007 - RRHH y Asistencias
**Épica:** Gestión de Recursos Humanos de Obra
**Prioridad:** Alta
**Complejidad:** Media
**Autor:** Strategos AI
**Fecha:** 2025-11-17
**Versión:** 1.0
---
## 1. Descripción General
Este requerimiento establece la necesidad de un **sistema de gestión centralizado de personal** que permita administrar empleados directos, cuadrillas subcontratadas, oficios, certificaciones, y el historial laboral completo de todo el personal que participa en los proyectos de construcción.
El sistema debe soportar:
- **Empleados directos** de la constructora
- **Cuadrillas subcontratadas** con estructura jerárquica
- **Clasificación por oficios** especializados de construcción
- **Gestión de certificaciones** y capacitaciones obligatorias
- **Historial laboral** con asignaciones a proyectos
- **Datos legales** (IMSS, INFONAVIT, RFC, CURP)
- **Documentación digital** (identificaciones, contratos, certificados)
### Beneficios Clave
**Trazabilidad completa** del personal en cada proyecto y frente de obra
**Cumplimiento legal** con requisitos IMSS, INFONAVIT, STPS
**Control de certificaciones** y capacitaciones obligatorias
**Base para costeo** de mano de obra y productividad
**Gestión ágil** de rotación y asignaciones multi-sitio
---
## 2. Actores Principales
| Actor | Rol | Responsabilidades |
|-------|-----|-------------------|
| **Director de RRHH** | Administrador | Gestión completa del catálogo de personal |
| **Coordinador de Obra** | Usuario avanzado | Asignar personal a obras y frentes |
| **Residente de Obra** | Usuario básico | Consultar personal asignado a su obra |
| **Auditor IMSS/STPS** | Externo | Verificar cumplimiento normativo |
| **Sistema de Nómina** | Sistema | Consumir datos para procesamiento de nómina |
---
## 3. Casos de Uso Principales
### CU-RRHH-001: Alta de Empleado Directo
**Descripción:** El Director de RRHH registra un nuevo empleado directo con todos sus datos personales, laborales y legales.
**Flujo Principal:**
1. Usuario accede a "Catálogo de Personal" → "Nuevo Empleado Directo"
2. Completa **Datos Personales**:
- Nombre completo
- Fecha de nacimiento
- RFC, CURP, NSS (Número de Seguridad Social)
- Dirección, teléfono, email
- Contacto de emergencia
3. Completa **Datos Laborales**:
- Fecha de ingreso
- Tipo de contrato: Planta / Eventual / Por Obra
- Oficio principal: [Selección de catálogo]
- Nivel de experiencia: Junior / Semi-senior / Senior / Maestro
- Salario base diario
- Jornada: Diurna / Nocturna / Mixta
4. Completa **Datos IMSS/INFONAVIT**:
- Número de Seguridad Social (NSS)
- UMF (Unidad Médica Familiar) asignada
- Crédito INFONAVIT: Sí/No
- Descuento INFONAVIT mensual (si aplica)
5. Adjunta **Documentos Digitales**:
- INE/IFE (frente y reverso)
- Comprobante de domicilio
- CURP
- RFC
- Alta IMSS (formato firmado)
- Contrato laboral
- Certificados de capacitación (opcionales)
6. Sistema **valida datos**:
- RFC válido (algoritmo)
- CURP válido (algoritmo)
- NSS válido (11 dígitos)
- Fecha de nacimiento vs edad mínima legal (18 años)
7. Sistema **genera código único**: EMP-2025-00001
8. Guarda registro con status: **Activo**
**Postcondiciones:**
- Empleado queda disponible para asignación a obras
- Se puede registrar su asistencia desde app móvil
- Aparece en reportes de RRHH
**Validaciones:**
- ❌ No permitir duplicados por NSS o RFC
- ❌ No permitir fecha de ingreso futura
- ❌ No permitir salario diario < salario mínimo vigente
- Permitir guardar como "borrador" si faltan documentos
---
### CU-RRHH-002: Registro de Cuadrilla Subcontratada
**Descripción:** El Coordinador de Obra registra una cuadrilla completa de un subcontratista, con estructura de jefe de cuadrilla + ayudantes.
**Flujo Principal:**
1. Usuario accede a "Catálogo de Personal" "Nueva Cuadrilla Subcontratada"
2. Completa **Datos de la Cuadrilla**:
- Nombre: "Cuadrilla Herrería - Juan Pérez"
- Subcontratista: [Selección de catálogo de proveedores]
- Oficio especializado: Herrería
- Tipo de contrato: Por obra / Por precio alzado / Precio unitario
- Vigencia del contrato: Fecha inicio - Fecha fin
3. Registra **Jefe de Cuadrilla**:
- Nombre completo
- Teléfono de contacto
- NSS (opcional para subcontratados)
- Experiencia en años
4. Registra **Integrantes de la Cuadrilla** (uno por uno):
```
Integrante #1:
- Nombre: Pedro González
- Oficio: Oficial Herrero
- NSS: 12345678901 (opcional)
- Teléfono: 55-1234-5678
Integrante #2:
- Nombre: Luis Martínez
- Oficio: Ayudante de Herrería
- NSS:
- Teléfono: 55-9876-5432
```
5. Define **Tarifa de la Cuadrilla**:
- Costo por día: $3,500 MXN (cuadrilla completa)
- Costo por m² de trabajo: $45 MXN (si es precio unitario)
6. Sistema genera código: **CUAD-2025-00001**
7. Guarda cuadrilla con status: **Activa**
**Postcondiciones:**
- Cuadrilla disponible para asignar a proyectos
- Cada integrante puede registrar asistencia individual
- Costeo se calcula por cuadrilla completa o por producción
**Reglas de Negocio:**
- Una cuadrilla debe tener mínimo 1 jefe + 1 integrante
- Máximo 15 integrantes por cuadrilla
- El jefe de cuadrilla puede pertenecer a solo 1 cuadrilla activa
---
### CU-RRHH-003: Gestión de Certificaciones y Capacitaciones
**Descripción:** El Director de RRHH registra y da seguimiento a certificaciones obligatorias y capacitaciones de seguridad del personal.
**Flujo Principal:**
1. Usuario accede a "Personal" [Selecciona empleado] "Certificaciones"
2. Ve listado de **Certificaciones Actuales**:
```
┌─────────────────────────────────────────────────────┐
Certificación Vigencia Status
├────────────────────────────┼───────────┼────────────┤
NOM-009-STPS-2011 01/03/2026 Vigente
Trabajos en Altura 15/01/2025 Por
(Curso 40 hrs) vencer
Manejo de Herramienta 10/12/2024 Vencida
Eléctrica
└────────────────────────────┴───────────┴───────────┘
```
3. Hace clic en "Agregar Certificación"
4. Completa datos:
- Tipo de certificación: [Catálogo configurable]
- NOM-009-STPS-2011 (Trabajos en Altura)
- NOM-031-STPS-2011 (Construcción)
- Curso de Primeros Auxilios
- Operación de Maquinaria Pesada
- Soldadura certificada AWS
- Electricidad residencial
- Instalaciones hidrosanitarias
- Andamios tipo
- Institución emisora: "STPS" / "Instituto XYZ"
- Número de certificado: CERT-12345
- Fecha de emisión: 15/01/2024
- Vigencia: 1 año / 2 años / Permanente
- Fecha de vencimiento: 15/01/2025 (auto-calculada)
5. Adjunta **Documento PDF** del certificado
6. Sistema guarda y **programa recordatorio**:
- 30 días antes del vencimiento Email + Notificación
- Al vencer Marcar empleado como "Certificación vencida"
7. Si certificación vence:
- Sistema **alerta** al asignar a obra que requiere esa certificación
- Dashboard de RRHH muestra empleados con certificaciones vencidas
**Postcondiciones:**
- Certificación queda trazada en el historial del empleado
- Se pueden generar reportes de cumplimiento para auditorías
- Sistema previene asignaciones a obras si falta certificación obligatoria
**Validaciones:**
- No permitir fecha de emisión futura
- No permitir vencimiento anterior a fecha de emisión
- Alertar si se sube certificado duplicado para el mismo empleado
---
### CU-RRHH-004: Consultar Historial Laboral
**Descripción:** El Director de RRHH consulta el historial completo de asignaciones, proyectos y desempeño de un empleado.
**Flujo Principal:**
1. Usuario accede a "Personal" [Selecciona empleado: Juan Pérez EMP-2025-00001]
2. Ve **Resumen del Empleado**:
```
┌─────────────────────────────────────────────────────┐
Juan Pérez Gómez EMP-2025-00001
Oficial Albañil Senior NSS: 12345678901
├─────────────────────────────────────────────────────┤
Antigüedad: 8 años 3 meses
Proyectos completados: 12
Obras activas: 1 (Fracc. Los Pinos - Etapa 2)
Asistencia promedio: 94% (últimos 12 meses)
Incidencias: 2 retardos, 3 faltas injustificadas
└─────────────────────────────────────────────────────┘
```
3. Ve pestaña **"Historial de Proyectos"**:
```
┌────────────────────────────────────────────────────────────┐
Proyecto Periodo Rol Eval.
├───────────────────────┼───────────────┼─────────────┼───────┤
Fracc. Los Pinos E2 Ene-25 Hoy Of. Albañil
Privada Las Flores Jul-24 Dic24 Of. Albañil ⭐⭐⭐⭐⭐│
Conjunto Haciendas Ene-24 Jun24 Ayudante ⭐⭐⭐⭐
Fracc. Valle Real Jun-23 Dic23 Ayudante ⭐⭐⭐
...12 proyectos más
└────────────────────────────────────────────────────────────┘
```
4. Ve pestaña **"Asistencias"**:
- Gráfico de asistencia mensual (últimos 12 meses)
- Desglose: Asistencias / Faltas / Retardos / Permisos
- Total de horas trabajadas por mes
5. Ve pestaña **"Capacitaciones"**:
- Lista cronológica de cursos y certificaciones
- Horas de capacitación acumuladas
6. Ve pestaña **"Incidencias Disciplinarias"** (si aplica):
```
Fecha Tipo Descripción Acción
───────────┼────────────────┼───────────────────────────┼─────────
10/Feb/25 Retardo Llegó 35 min tarde Llamada
atención
05/Ene/25 Falta injust. No presentó justificante Descuento
```
**Postcondiciones:**
- Director de RRHH tiene visibilidad completa del empleado
- Puede tomar decisiones informadas sobre ascensos, bonos, re-asignaciones
---
### CU-RRHH-005: Catálogo de Oficios
**Descripción:** El administrador del sistema configura el catálogo maestro de oficios de construcción con costos estándar.
**Flujo Principal:**
1. Usuario (Admin RRHH) accede a "Configuración" "Catálogo de Oficios"
2. Ve listado actual:
```
┌──────────────────────────────────────────────────────────┐
Oficio Categoría Costo/día
├───────────────────────────┼─────────────────┼────────────┤
Albañil Obra Civil $550
Fierrero (Armador) Obra Civil $600
Carpintero Acabados $580
Plomero Instalaciones $620
Electricista Instalaciones $650
Pintor Acabados $520
Yesero Acabados $530
Operador de Maquinaria Maquinaria $800
Maestro de Obra Supervisión $900
Ayudante General Apoyo $400
...más oficios...
└──────────────────────────────────────────────────────────┘
```
3. Hace clic en "Nuevo Oficio"
4. Completa:
- Nombre del oficio: "Instalador de Cancelería"
- Categoría: [Selección] Acabados
- Costo estándar día: $560 MXN
- Requiere certificación:
- Certificaciones requeridas: [Selección múltiple]
- Curso de Instalación de Aluminio y Vidrio
- NOM-031-STPS (Construcción)
- Descripción: "Instalación de puertas, ventanas y cancelería de aluminio"
5. Sistema valida y guarda
6. Oficio queda disponible para asignar a empleados
**Reglas de Negocio:**
- No se pueden eliminar oficios que tengan empleados asignados
- Cambiar costo estándar NO afecta contratos ya firmados
- Se puede marcar un oficio como "Obsoleto" para que no aparezca en nuevos registros
---
## 4. Wireframes / Mockups
### Pantalla: Catálogo de Personal
```
┌────────────────────────────────────────────────────────────────────────────┐
│ RRHH > Catálogo de Personal [+ Nuevo Empleado] │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Filtros: [Todos ▼] [Activos ▼] [Oficio ▼] [Proyecto ▼] 🔍 Buscar... │
│ │
│ ┌─ Resumen ──────────────────────────────────────────────────────────┐ │
│ │ Total empleados: 245 | Directos: 78 | Subcontratados: 167 │ │
│ │ Cuadrillas activas: 12 | Certificaciones por vencer: 8 │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ Código │ Nombre │ Oficio │ Proyecto │ Acción│
│ ├─────────────┼─────────────────────┼───────────────┼────────────┼──────┤
│ │ EMP-001 │ Juan Pérez Gómez │ Of. Albañil │ Los Pinos │[Ver] │
│ │ 📷 ✅ 94% │ NSS: 123***901 │ Senior │ Etapa 2 │[Edi] │
│ │ │ ⚠️ Cert. por vencer │ │ │ │
│ ├─────────────┼─────────────────────┼───────────────┼────────────┼──────┤
│ │ CUAD-005 │ Cuadrilla Herrería │ Fierreros │ Las Flores │[Ver] │
│ │ 👥 5 pers │ Jefe: Pedro López │ (5 integ.) │ │[Edi] │
│ │ ✅ 98% │ Subcon: ACEROS SA │ │ │ │
│ ├─────────────┼─────────────────────┼───────────────┼────────────┼──────┤
│ │ EMP-142 │ María González V. │ Arquitecto │ Oficina │[Ver] │
│ │ 📷 ✅ 100% │ NSS: 987***456 │ Residente │ Central │[Edi] │
│ │ │ │ │ │ │
│ ├─────────────┼─────────────────────┼───────────────┼────────────┼──────┤
│ │ EMP-078 │ Carlos Ramírez │ Electricista │ Sin │[Ver] │
│ │ ❌ Inactivo│ NSS: 456***789 │ Certificado │ asignar │[Edi] │
│ │ │ ❌ Baja: 10/Ene/25 │ │ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ [< Anterior] Página 1 de 5 [Siguiente >] │
└────────────────────────────────────────────────────────────────────────────┘
Leyenda:
📷 = Tiene foto de perfil
✅ = Asistencia > 90% (últimos 30 días)
⚠️ = Alertas (certificación próxima a vencer, etc.)
❌ = Inactivo o dado de baja
👥 = Cuadrilla (múltiples personas)
```
---
### Pantalla: Detalle de Empleado
```
┌────────────────────────────────────────────────────────────────────────────┐
│ ◀ Volver RRHH > Personal > Juan Pérez Gómez (EMP-2025-00001) [Editar]│
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ 📷 Juan Pérez Gómez │ │
│ │ [Foto] EMP-2025-00001 │ │
│ │ Oficial Albañil Senior │ │
│ │ ✅ Activo | Ingreso: 01/Mar/2017 │ │
│ │ │ │
│ │ Datos Personales │ │
│ │ ────────────────────────────────────────────────────────────────── │ │
│ │ RFC: PEJG850315HDF001 │ │
│ │ CURP: PEJG850315HDFRMN02 │ │
│ │ NSS: 12345678901 │ │
│ │ Fecha de nacimiento: 15/Mar/1985 (39 años) │ │
│ │ Teléfono: 55-1234-5678 │ │
│ │ Email: juan.perez@email.com │ │
│ │ Emergencia: María Pérez (Esposa) - 55-9876-5432 │ │
│ │ │ │
│ │ Datos Laborales │ │
│ │ ────────────────────────────────────────────────────────────────── │ │
│ │ Antigüedad: 8 años 3 meses │ │
│ │ Tipo de contrato: Planta │ │
│ │ Oficio: Oficial Albañil (Senior) │ │
│ │ Salario base: $550/día │ │
│ │ Jornada: Diurna (07:00 - 17:00) │ │
│ │ UMF: Clínica 47 IMSS │ │
│ │ Crédito INFONAVIT: Sí (Descuento: $450/mes) │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ [Datos Personales] [Asignaciones] [Certificaciones] [Asistencia] │
│ [Historial] [Documentos] │
│ │
│ ┌─ Asignación Actual ─────────────────────────────────────────────────┐ │
│ │ Proyecto: Fraccionamiento Los Pinos - Etapa 2 │ │
│ │ Desde: 10/Ene/2025 │ │
│ │ Frente de trabajo: Albañilería - Manzana C │ │
│ │ Supervisor: Ing. Carlos Mendoza │ │
│ │ Asistencia (últ. 30 días): ████████████████░░ 94% (28/30 días) │ │
│ │ │ │
│ │ [Cambiar de Obra] [Dar de Baja] │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Certificaciones ───────────────────────────────────────────────────┐ │
│ │ Certificación │ Vigencia │ Status │ Acciones │ │
│ │ ─────────────────────────────────────────────────────────────────── │ │
│ │ NOM-031-STPS-2011 │ 01/Mar/2026 │ ✅ Vigente │ [Ver PDF] │ │
│ │ Trabajos en Altura │ 15/Ene/2025 │ ⚠️ Por │ [Renovar] │ │
│ │ │ │ vencer │ │ │
│ │ Primeros Auxilios │ Permanente │ ✅ Vigente │ [Ver PDF] │ │
│ │ │ │
│ │ [+ Agregar Certificación] │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Documentos Adjuntos ───────────────────────────────────────────────┐ │
│ │ 📄 INE - Frente y reverso.pdf (Subido: 01/Mar/2017) │ │
│ │ 📄 Comprobante domicilio.pdf (Subido: 01/Mar/2017) │ │
│ │ 📄 Alta IMSS.pdf (Subido: 01/Mar/2017) │ │
│ │ 📄 Contrato laboral firmado.pdf (Subido: 01/Mar/2017) │ │
│ │ │ │
│ │ [+ Subir Documento] │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────────────────┘
```
---
### Pantalla: Registro de Cuadrilla
```
┌────────────────────────────────────────────────────────────────────────────┐
│ ◀ Volver RRHH > Nuevo > Cuadrilla Subcontratada │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Paso 1 de 3: Datos de la Cuadrilla │
│ ════════════════════════════════════════════════════════════════════════ │
│ │
│ Nombre de la cuadrilla: * │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ Cuadrilla Herrería - Pedro López │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ Subcontratista: * │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ [Seleccionar proveedor ▼] → ACEROS Y ESTRUCTURAS SA │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ Oficio especializado: * │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ [Seleccionar oficio ▼] → Fierrero (Armador de Acero) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ Tipo de contrato: │
│ ◉ Por obra determinada │
│ ○ Precio alzado │
│ ○ Precio unitario (m², m³, ton, etc.) │
│ │
│ Vigencia del contrato: │
│ Inicio: [15/Ene/2025] Fin: [30/Jun/2025] │
│ │
│ [Cancelar] [Siguiente >] │
└────────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────────────┐
│ ◀ Volver RRHH > Nuevo > Cuadrilla Subcontratada │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Paso 2 de 3: Jefe e Integrantes de la Cuadrilla │
│ ════════════════════════════════════════════════════════════════════════ │
│ │
│ ┌─ Jefe de Cuadrilla ─────────────────────────────────────────────────┐ │
│ │ Nombre completo: * │ │
│ │ ┌────────────────────────────────────────────────────────────────┐ │ │
│ │ │ Pedro López Ramírez │ │ │
│ │ └────────────────────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ Teléfono: * NSS (opcional): Años experiencia: │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 55-1111-2222 │ │ 98765432109 │ │ 15 años │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Integrantes de la Cuadrilla (0/15) ────────────────────────────────┐ │
│ │ │ │
│ │ [+ Agregar Integrante] │ │
│ │ │ │
│ │ (Vacío - agregue al menos 1 integrante) │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ [Después de agregar integrantes:] │
│ │
│ ┌─ Integrantes de la Cuadrilla (4/15) ────────────────────────────────┐ │
│ │ # │ Nombre │ Oficio │ NSS │ Teléfono │ │
│ │ ───┼─────────────────────┼─────────────────┼─────────────┼─────────── │ │
│ │ 1 │ Juan Méndez García │ Oficial Fierro │ 11122233344 │ 55-222... │ │
│ │ 2 │ Luis Torres Sánchez │ Oficial Fierro │ 22233344455 │ 55-333... │ │
│ │ 3 │ Carlos Ruiz Pérez │ Ayudante │ — │ 55-444... │ │
│ │ 4 │ Miguel Ángel Díaz │ Ayudante │ — │ 55-555... │ │
│ │ │ │
│ │ [+ Agregar Integrante] │ │
│ └───────────────────────────────────────────────────────────────────────┘ │
│ │
│ [< Anterior] [Cancelar] [Siguiente>]│
└────────────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────────────┐
│ ◀ Volver RRHH > Nuevo > Cuadrilla Subcontratada │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ Paso 3 de 3: Tarifas y Costos │
│ ════════════════════════════════════════════════════════════════════════ │
│ │
│ Esquema de pago: │
│ ◉ Costo por día (cuadrilla completa) │
│ ○ Costo por unidad de producción (m², ton, etc.) │
│ ○ Precio alzado por obra │
│ │
│ [SI SELECCIONA: Costo por día] │
│ │
│ Tarifa diaria de la cuadrilla completa: * │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ $ 4,500.00 MXN/día │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ Notas / Condiciones adicionales: │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ Incluye herramienta menor. No incluye equipo pesado. │ │
│ │ Jornada: 08:00 - 18:00 hrs, Lunes a Sábado. │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─ Resumen de la Cuadrilla ────────────────────────────────────────────┐ │
│ │ Nombre: Cuadrilla Herrería - Pedro López │ │
│ │ Subcontratista: ACEROS Y ESTRUCTURAS SA │ │
│ │ Jefe: Pedro López Ramírez (55-1111-2222) │ │
│ │ Integrantes: 4 personas │ │
│ │ Tarifa: $4,500/día │ │
│ │ Vigencia: 15/Ene/2025 - 30/Jun/2025 │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
│ [< Anterior] [Cancelar] [Guardar] │
└────────────────────────────────────────────────────────────────────────────┘
```
---
## 5. Reglas de Negocio
### RN-RRHH-001: Validación de Datos Legales
- **RFC**: Debe cumplir con el algoritmo de validación oficial (13 caracteres para personas físicas)
- **CURP**: Debe cumplir con el algoritmo de validación de RENAPO (18 caracteres)
- **NSS**: Debe ser de 11 dígitos numéricos
- **Edad mínima**: El empleado debe tener mínimo 18 años cumplidos al momento del alta
- **Salario mínimo**: El salario diario no puede ser menor al salario mínimo vigente en la zona geográfica
### RN-RRHH-002: Unicidad de Registros
- No se permite registrar 2 empleados con el mismo **NSS**
- No se permite registrar 2 empleados con el mismo **RFC**
- Se permite mismo nombre completo (personas homónimas)
- Si se detecta duplicado, el sistema debe mostrar alerta con datos del empleado existente
### RN-RRHH-003: Status de Empleados
Los empleados pueden tener los siguientes status:
| Status | Descripción | ¿Puede asistir? | ¿Aparece en reportes? |
|--------|-------------|-----------------|----------------------|
| **Activo** | Empleado activo y disponible | | |
| **Suspendido** | Suspensión temporal (15-30 días) | No | Reportes especiales |
| **Incapacitado** | Incapacidad médica temporal | No | Reportes de IMSS |
| **Baja** | Dado de baja (renuncia, despido) | No | Solo históricos |
| **Vacaciones** | En periodo vacacional | No | (marcado) |
**Reglas:**
- Solo empleados **Activos** pueden registrar asistencia
- Solo empleados **Activos** pueden ser asignados a nuevas obras
- El cambio de status debe quedar registrado en bitácora con: usuario que lo cambió, fecha, motivo
### RN-RRHH-004: Certificaciones Obligatorias
Para ciertos oficios, es **obligatorio** tener certificaciones vigentes:
| Oficio | Certificación Obligatoria |
|--------|---------------------------|
| Operador de Maquinaria | Licencia de operador + Curso de seguridad |
| Electricista | Certificación de instalaciones eléctricas |
| Trabajos en Altura | NOM-009-STPS-2011 + Curso de 40 hrs |
| Soldador | Certificación AWS (American Welding Society) |
**Validación:**
- Al asignar un empleado a una obra, el sistema verifica si el frente de trabajo requiere certificación especial
- Si la certificación está vencida o falta, el sistema **alerta** pero **permite continuar** (con confirmación del Director de Obra)
- Se genera reporte semanal de empleados con certificaciones por vencer
### RN-RRHH-005: Límites de Cuadrillas
- Una cuadrilla debe tener **mínimo 1 jefe + 1 integrante** (total: 2 personas)
- Una cuadrilla puede tener **máximo 15 integrantes** (sin contar al jefe)
- Un jefe de cuadrilla puede estar en **solo 1 cuadrilla activa** al mismo tiempo
- Un integrante puede estar en **máximo 2 cuadrillas** (si trabaja turnos diferentes)
- Si se da de baja una cuadrilla, todos los integrantes quedan liberados para ser asignados a otras cuadrillas
### RN-RRHH-006: Historial Laboral
- El historial de proyectos se genera automáticamente cuando:
- Se asigna un empleado a un proyecto (registro de fecha de inicio)
- Se completa el proyecto o se re-asigna el empleado (registro de fecha fin)
- El historial es **inmutable**: No se puede editar ni eliminar
- Se puede agregar una **evaluación de desempeño** al finalizar el proyecto (escala 1-5 estrellas)
- La evaluación solo puede ser capturada por: Director de Obra, Residente, o Director de RRHH
### RN-RRHH-007: Documentos Digitales
Los siguientes documentos son **obligatorios** para empleados directos:
- INE o IFE (identificación oficial vigente)
- CURP
- RFC
- Alta IMSS (formato firmado por empleado y empresa)
- Contrato laboral firmado
Los siguientes documentos son **opcionales**:
- Comprobante de domicilio
- Acta de nacimiento
- Comprobante de estudios
- Cartas de recomendación
- Certificados médicos
**Validación:**
- Los documentos deben estar en formato **PDF o imagen** (JPG, PNG)
- Tamaño máximo por archivo: **5 MB**
- Se permite subir múltiples versiones del mismo documento (versionado automático)
- Los documentos vencen según tipo:
- INE: Vence según fecha impresa en credencial Alerta 60 días antes
- Certificado médico: Vence a 1 año Alerta 30 días antes
### RN-RRHH-008: Privacidad y Acceso a Datos
El acceso a datos personales está restringido por rol:
| Rol | Acceso |
|-----|--------|
| **Director de RRHH** | Acceso total a todos los datos (personales, legales, salariales) |
| **Coordinador de Obra** | Datos básicos (nombre, oficio, teléfono, asistencia) <br> ❌ Datos salariales <br> ❌ Datos médicos |
| **Residente de Obra** | ✅ Datos básicos de personal asignado a su obra <br> ❌ Datos salariales <br> ❌ Datos de otras obras |
| **Auditor Externo** | ✅ Solo datos necesarios para auditoría (certificaciones, asistencias) <br> ❌ Datos personales sensibles |
**Cumplimiento legal:**
- Cumplir con **Ley Federal de Protección de Datos Personales (LFPDPPP - México)**
- Obtener **Aviso de Privacidad** firmado por cada empleado
- Permitir a empleados ejercer derechos ARCO (Acceso, Rectificación, Cancelación, Oposición)
- Registrar en bitácora quién accedió a datos sensibles y cuándo
---
## 6. Modelo de Datos
### Tabla: `employees` (Empleados)
```sql
CREATE TABLE hr.employees (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
-- Identificación
employee_code VARCHAR(50) UNIQUE NOT NULL, -- EMP-2025-00001
employee_type VARCHAR(20) NOT NULL, -- 'direct' | 'crew_member'
status VARCHAR(20) NOT NULL DEFAULT 'active', -- 'active' | 'suspended' | 'leave' | 'terminated'
-- Datos Personales
first_name VARCHAR(100) NOT NULL,
last_name VARCHAR(100) NOT NULL,
middle_name VARCHAR(100),
date_of_birth DATE NOT NULL,
gender VARCHAR(10), -- 'male' | 'female' | 'other'
-- Datos Legales México
rfc VARCHAR(13) UNIQUE NOT NULL,
curp VARCHAR(18) UNIQUE NOT NULL,
nss VARCHAR(11) UNIQUE, -- Número de Seguridad Social (IMSS)
-- Contacto
phone VARCHAR(20),
email VARCHAR(100),
address TEXT,
-- Emergencia
emergency_contact_name VARCHAR(100),
emergency_contact_phone VARCHAR(20),
emergency_contact_relationship VARCHAR(50),
-- Datos Laborales
hire_date DATE NOT NULL,
termination_date DATE,
contract_type VARCHAR(30), -- 'permanent' | 'temporary' | 'per_project'
primary_trade_id UUID REFERENCES hr.trades(id), -- Oficio principal
experience_level VARCHAR(20), -- 'junior' | 'semi_senior' | 'senior' | 'master'
daily_wage DECIMAL(10,2), -- Salario base diario
shift_type VARCHAR(20), -- 'day' | 'night' | 'mixed'
-- IMSS / INFONAVIT
imss_clinic VARCHAR(100), -- UMF asignada
has_infonavit_credit BOOLEAN DEFAULT FALSE,
infonavit_discount DECIMAL(10,2), -- Descuento mensual
-- Metadata
photo_url TEXT,
notes TEXT,
created_by UUID REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_employees_tenant ON hr.employees(tenant_id);
CREATE INDEX idx_employees_code ON hr.employees(employee_code);
CREATE INDEX idx_employees_status ON hr.employees(status);
CREATE INDEX idx_employees_trade ON hr.employees(primary_trade_id);
```
### Tabla: `crews` (Cuadrillas Subcontratadas)
```sql
CREATE TABLE hr.crews (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
-- Identificación
crew_code VARCHAR(50) UNIQUE NOT NULL, -- CUAD-2025-00001
crew_name VARCHAR(200) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'active',
-- Subcontratista
subcontractor_id UUID REFERENCES suppliers(id),
trade_id UUID REFERENCES hr.trades(id),
-- Contrato
contract_type VARCHAR(30), -- 'per_project' | 'fixed_price' | 'unit_price'
contract_start_date DATE,
contract_end_date DATE,
-- Jefe de Cuadrilla
foreman_name VARCHAR(100) NOT NULL,
foreman_phone VARCHAR(20),
foreman_nss VARCHAR(11),
foreman_experience_years INTEGER,
-- Costos
daily_rate DECIMAL(10,2), -- Costo por día (cuadrilla completa)
unit_rate DECIMAL(10,2), -- Costo por m², ton, etc.
unit_type VARCHAR(20), -- 'm2' | 'm3' | 'ton' | 'pza'
-- Metadata
notes TEXT,
created_by UUID REFERENCES users(id),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_crews_tenant ON hr.crews(tenant_id);
CREATE INDEX idx_crews_code ON hr.crews(crew_code);
CREATE INDEX idx_crews_status ON hr.crews(status);
```
### Tabla: `crew_members` (Integrantes de Cuadrilla)
```sql
CREATE TABLE hr.crew_members (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
crew_id UUID NOT NULL REFERENCES hr.crews(id),
-- Datos del Integrante
full_name VARCHAR(200) NOT NULL,
trade_id UUID REFERENCES hr.trades(id),
nss VARCHAR(11),
phone VARCHAR(20),
-- Status
status VARCHAR(20) DEFAULT 'active', -- 'active' | 'left'
joined_date DATE,
left_date DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_crew_members_crew ON hr.crew_members(crew_id);
```
### Tabla: `trades` (Catálogo de Oficios)
```sql
CREATE TABLE hr.trades (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
-- Identificación
trade_code VARCHAR(50) UNIQUE NOT NULL, -- OFICIO-001
trade_name VARCHAR(100) NOT NULL,
category VARCHAR(50), -- 'civil_work' | 'finishes' | 'installations' | 'machinery'
-- Costos
standard_daily_cost DECIMAL(10,2), -- Costo estándar día
-- Certificaciones
requires_certification BOOLEAN DEFAULT FALSE,
required_certifications JSONB, -- Array de IDs de certificaciones requeridas
-- Metadata
description TEXT,
is_obsolete BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_trades_tenant ON hr.trades(tenant_id);
```
### Tabla: `certifications` (Certificaciones y Capacitaciones)
```sql
CREATE TABLE hr.certifications (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
employee_id UUID NOT NULL REFERENCES hr.employees(id),
-- Tipo de Certificación
certification_type VARCHAR(100) NOT NULL, -- 'NOM-009-STPS', 'Trabajos en Altura', etc.
issuing_institution VARCHAR(200),
certificate_number VARCHAR(100),
-- Vigencia
issue_date DATE NOT NULL,
expiration_date DATE, -- NULL = permanente
is_permanent BOOLEAN DEFAULT FALSE,
status VARCHAR(20) DEFAULT 'valid', -- 'valid' | 'expiring_soon' | 'expired'
-- Documento
document_url TEXT, -- PDF del certificado
-- Metadata
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_certifications_employee ON hr.certifications(employee_id);
CREATE INDEX idx_certifications_status ON hr.certifications(status);
CREATE INDEX idx_certifications_expiration ON hr.certifications(expiration_date);
```
### Tabla: `employee_project_assignments` (Asignaciones a Proyectos)
```sql
CREATE TABLE hr.employee_project_assignments (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
employee_id UUID REFERENCES hr.employees(id),
crew_id UUID REFERENCES hr.crews(id),
project_id UUID NOT NULL REFERENCES projects(id),
-- Asignación
assigned_role VARCHAR(100), -- 'Official Mason', 'Foreman', etc.
work_front VARCHAR(100), -- Frente de trabajo
assigned_date DATE NOT NULL,
release_date DATE,
-- Evaluación (al finalizar)
performance_rating INTEGER CHECK (performance_rating >= 1 AND performance_rating <= 5),
evaluation_notes TEXT,
evaluated_by UUID REFERENCES users(id),
evaluation_date DATE,
-- Metadata
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Constraint: o es employee_id o crew_id, no ambos
CHECK (
(employee_id IS NOT NULL AND crew_id IS NULL) OR
(employee_id IS NULL AND crew_id IS NOT NULL)
)
);
CREATE INDEX idx_assignments_employee ON hr.employee_project_assignments(employee_id);
CREATE INDEX idx_assignments_crew ON hr.employee_project_assignments(crew_id);
CREATE INDEX idx_assignments_project ON hr.employee_project_assignments(project_id);
```
### Tabla: `employee_documents` (Documentos Digitales)
```sql
CREATE TABLE hr.employee_documents (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL REFERENCES tenants(id),
employee_id UUID NOT NULL REFERENCES hr.employees(id),
-- Documento
document_type VARCHAR(50) NOT NULL, -- 'INE', 'CURP', 'RFC', 'contract', 'medical_cert'
document_name VARCHAR(200) NOT NULL,
document_url TEXT NOT NULL,
file_size INTEGER, -- En bytes
-- Versionado
version INTEGER DEFAULT 1,
is_latest BOOLEAN DEFAULT TRUE,
-- Vigencia (si aplica)
issue_date DATE,
expiration_date DATE,
-- Metadata
uploaded_by UUID REFERENCES users(id),
uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_documents_employee ON hr.employee_documents(employee_id);
CREATE INDEX idx_documents_type ON hr.employee_documents(document_type);
```
---
## 7. Integraciones
### INT-RRHH-001: Integración con Módulo de Compras (Proveedores)
- Al crear una cuadrilla subcontratada, se selecciona el **Subcontratista** desde el catálogo de proveedores del módulo de compras
- Esto permite trazabilidad: Proveedores → Subcontratos → Cuadrillas → Personal
### INT-RRHH-002: Integración con Módulo de Proyectos
- Los empleados y cuadrillas se asignan a **Proyectos** específicos
- La tabla `employee_project_assignments` vincula personal con proyectos
- Al completar un proyecto, se puede registrar evaluación de desempeño
### INT-RRHH-003: Integración con Módulo de Asistencias (MAI-007 RF-002)
- El catálogo de personal es la base para el módulo de Time & Attendance
- Solo empleados con status **Activo** pueden registrar asistencia
- Las certificaciones vencidas generan alertas en el módulo de asistencias
### INT-RRHH-004: Integración con Módulo de Costos (MAI-007 RF-004)
- Los costos estándar por oficio se utilizan para presupuestos de mano de obra
- El salario real de cada empleado se usa para costeo de mano de obra real
- Las tarifas de cuadrillas se imputan a partidas de obra
### INT-RRHH-005: Exportación a Sistema de Nómina Externo
El sistema debe poder exportar datos en formato **CSV o Excel** para sistemas de nómina externos:
**Campos exportados:**
- Código de empleado
- Nombre completo
- RFC, CURP, NSS
- Salario base diario
- Días trabajados (del periodo)
- Horas extra (si aplica)
- Bonos por productividad
- Descuentos IMSS, INFONAVIT
- Incidencias (faltas, retardos, permisos)
**Formato ejemplo:**
```csv
employee_code,full_name,rfc,nss,daily_wage,days_worked,overtime_hours,bonus,imss_discount,infonavit_discount,absences,tardies
EMP-00001,Juan Pérez Gómez,PEJG850315HDF,12345678901,550.00,26,8,500.00,45.50,450.00,0,2
EMP-00002,María González,GOGM900520MDF,98765432109,620.00,30,0,0,52.30,0,0,0
```
---
## 8. Reportes y Consultas
### REP-RRHH-001: Listado Maestro de Personal
**Descripción:** Reporte consolidado de todo el personal (empleados directos + cuadrillas)
**Filtros:**
- Status: Activos / Suspendidos / Baja
- Tipo: Directos / Subcontratados
- Oficio
- Proyecto asignado
- Certificaciones vencidas: Sí/No
**Columnas:**
- Código
- Nombre completo
- Oficio
- Status
- Proyecto actual
- Asistencia (últimos 30 días)
- Certificaciones próximas a vencer
**Exportación:** Excel, PDF, CSV
---
### REP-RRHH-002: Certificaciones por Vencer
**Descripción:** Alerta de certificaciones que vencen en los próximos 30/60/90 días
**Filtros:**
- Días para vencimiento: 30 / 60 / 90
- Tipo de certificación
- Oficio
**Columnas:**
- Empleado
- Oficio
- Certificación
- Fecha de vencimiento
- Días restantes
- Status: 🟢 Vigente / 🟡 Por vencer / 🔴 Vencida
**Exportación:** Excel, PDF
---
### REP-RRHH-003: Historial Laboral por Empleado
**Descripción:** Historial completo de proyectos, evaluaciones y asistencia de un empleado
**Secciones:**
1. **Datos generales** (nombre, oficio, antigüedad)
2. **Proyectos**:
- Listado de proyectos donde ha trabajado
- Fechas de inicio y fin
- Rol desempeñado
- Evaluación de desempeño (1-5 estrellas)
3. **Asistencia**:
- Promedio de asistencia por año
- Total de faltas, retardos, permisos
4. **Capacitaciones**:
- Cursos tomados
- Certificaciones obtenidas
- Horas de capacitación
**Exportación:** PDF
---
### REP-RRHH-004: Análisis de Rotación de Personal
**Descripción:** Análisis de bajas, altas y rotación mensual
**Métricas:**
- Altas del mes
- Bajas del mes
- Tasa de rotación: (Bajas / Plantilla promedio) × 100
- Antigüedad promedio de empleados dados de baja
- Motivos de baja (renuncia voluntaria, despido, fin de contrato)
**Gráficos:**
- Línea de tiempo: Altas vs Bajas por mes
- Pie chart: Motivos de baja
**Exportación:** Excel, PDF
---
### REP-RRHH-005: Cumplimiento Normativo (Auditoría IMSS/STPS)
**Descripción:** Reporte para auditorías externas con datos de cumplimiento
**Datos incluidos:**
- Total de empleados registrados en IMSS
- Empleados con NSS válido: X / Total
- Empleados con certificaciones vigentes para trabajos de riesgo
- Empleados sin expediente completo (faltan documentos)
- Cuadrillas subcontratadas con contratos vigentes
**Cumplimiento:**
- 🟢 100% cumplimiento: Todos los datos completos
- 🟡 95-99% cumplimiento: Faltan documentos menores
- 🔴 <95% cumplimiento: Deficiencias importantes
**Exportación:** PDF (para auditor externo)
---
## 9. Requerimientos No Funcionales
### RNF-RRHH-001: Seguridad y Privacidad
- **Encriptación:** Los datos sensibles (NSS, RFC, CURP, salarios) deben estar encriptados en base de datos (AES-256)
- **Control de acceso:** Roles y permisos estrictos por tipo de usuario (ver RN-RRHH-008)
- **Bitácora de auditoría:** Registrar quién accedió a datos sensibles y cuándo
- **Cumplimiento LFPDPPP:** Aviso de privacidad firmado por cada empleado
### RNF-RRHH-002: Performance
- La búsqueda de empleados en catálogo debe responder en **< 500 ms** (hasta 10,000 registros)
- La carga de historial completo de empleado debe responder en **< 1 segundo**
- Los reportes de certificaciones deben generarse en **< 2 segundos**
### RNF-RRHH-003: Usabilidad
- La interfaz debe ser **responsive** (desktop, tablet, móvil)
- El formulario de alta de empleado debe tener **validación en tiempo real** (RFC, CURP, NSS)
- Los campos obligatorios deben estar **claramente marcados** con asterisco (*)
- Debe haber **ayudas contextuales** (tooltips) para campos complejos
### RNF-RRHH-004: Escalabilidad
- El sistema debe soportar **hasta 50,000 empleados** por tenant
- El sistema debe soportar **hasta 5,000 cuadrillas** por tenant
- El sistema debe soportar **hasta 1 millón de registros** en historial de asignaciones
### RNF-RRHH-005: Disponibilidad
- El catálogo de personal debe tener disponibilidad **99.5%** (downtime máximo: 3.65 horas/mes)
- En caso de falla, el sistema debe permitir **modo de solo lectura** para consultas críticas
---
## 10. Criterios de Aceptación
### CA-RRHH-001: Alta de Empleado Directo
- [ ] Puedo registrar un empleado directo con todos los datos personales, laborales y legales
- [ ] El sistema valida RFC, CURP y NSS con algoritmos correctos
- [ ] El sistema genera código único secuencial (EMP-2025-00001)
- [ ] Puedo adjuntar documentos PDF/imagen (máx 5MB cada uno)
- [ ] El sistema alerta si hay duplicado por NSS o RFC
- [ ] Puedo guardar como "borrador" si faltan datos opcionales
- [ ] El empleado queda disponible para asignar a proyectos
### CA-RRHH-002: Registro de Cuadrilla
- [ ] Puedo crear una cuadrilla con jefe + mínimo 1 integrante
- [ ] Puedo agregar hasta 15 integrantes por cuadrilla
- [ ] El sistema genera código único (CUAD-2025-00001)
- [ ] Puedo definir tarifa: por día, por m², o precio alzado
- [ ] El sistema vincula la cuadrilla con el proveedor subcontratista
- [ ] Puedo asignar la cuadrilla a un proyecto
- [ ] Cada integrante puede registrar asistencia individual
### CA-RRHH-003: Gestión de Certificaciones
- [ ] Puedo agregar certificaciones con vigencia (fecha inicio, fecha fin)
- [ ] Puedo subir PDF del certificado
- [ ] El sistema calcula automáticamente la fecha de vencimiento
- [ ] El sistema me envía recordatorio 30 días antes del vencimiento
- [ ] Puedo ver listado de certificaciones vencidas/por vencer
- [ ] El sistema alerta si asigno empleado a obra que requiere certificación vencida
### CA-RRHH-004: Historial Laboral
- [ ] Puedo ver historial completo de proyectos del empleado
- [ ] Puedo ver fechas de inicio y fin en cada proyecto
- [ ] Puedo registrar evaluación de desempeño (1-5 estrellas) al finalizar proyecto
- [ ] Puedo ver promedio de asistencia de los últimos 12 meses
- [ ] Puedo ver total de capacitaciones y certificaciones
### CA-RRHH-005: Catálogo de Oficios
- [ ] Puedo crear nuevos oficios con costo estándar
- [ ] Puedo marcar oficios que requieren certificación obligatoria
- [ ] Puedo asignar categoría al oficio (obra civil, instalaciones, acabados)
- [ ] Puedo marcar oficios como "obsoletos" sin eliminarlos
- [ ] El oficio queda disponible para asignar a empleados
### CA-RRHH-006: Reportes
- [ ] Puedo generar reporte de personal activo con filtros
- [ ] Puedo generar reporte de certificaciones por vencer
- [ ] Puedo exportar a Excel, PDF, CSV
- [ ] Los reportes se generan en menos de 3 segundos
---
## 11. Dependencias
### Dependencias de Otros Módulos
- **MAI-001 (Fundamentos):** Autenticación, roles y permisos, tenants
- **MAI-002 (Proyectos):** Catálogo de proyectos para asignar personal
- **MAI-004 (Compras):** Catálogo de proveedores para subcontratistas
### Módulos que Dependen de Este
- **MAI-007 RF-002 (Time & Attendance):** Requiere catálogo de personal completo
- **MAI-007 RF-003 (Nómina):** Requiere salarios, jornadas, incidencias
- **MAI-007 RF-004 (Costos):** Requiere tarifas de oficios y cuadrillas
- **MAI-003 (Presupuestos):** Requiere costos estándar de oficios
---
## 12. Riesgos y Mitigaciones
### Riesgo 1: Datos Personales Sensibles (Alto)
**Descripción:** Manejo de datos personales (RFC, NSS, salarios) expone a riesgos legales si hay fuga de información.
**Impacto:** Alto - Multas legales, pérdida de confianza, demandas
**Mitigación:**
- Encriptación AES-256 en base de datos
- Control de acceso estricto por roles
- Bitácora de auditoría de accesos
- Aviso de privacidad firmado por empleados
- Cumplimiento LFPDPPP (Ley de Protección de Datos - México)
---
### Riesgo 2: Duplicados de Empleados (Medio)
**Descripción:** Registrar 2 veces al mismo empleado con datos ligeramente diferentes.
**Impacto:** Medio - Inconsistencias en reportes, problemas con IMSS, nómina duplicada
**Mitigación:**
- Validación estricta de unicidad por NSS y RFC
- Búsqueda fuzzy al capturar nombre (detectar nombres similares)
- Alerta al usuario si existe registro similar
---
### Riesgo 3: Certificaciones Vencidas (Medio)
**Descripción:** Empleados trabajando en actividades de riesgo con certificaciones vencidas.
**Impacto:** Medio - Multas STPS, riesgo de accidentes, responsabilidad legal
**Mitigación:**
- Sistema de recordatorios automáticos 30 días antes
- Alertas al asignar a obra si falta certificación
- Reporte semanal a Director de RRHH con certificaciones vencidas
- Bloqueo opcional de asistencia si certificación vencida (configurable)
---
### Riesgo 4: Escalabilidad (Bajo)
**Descripción:** Con miles de empleados, el catálogo puede volverse lento.
**Impacto:** Bajo - Experiencia de usuario degradada
**Mitigación:**
- Índices en base de datos (tenant_id, employee_code, status)
- Paginación en listados (máx 50 registros por página)
- Búsqueda con debounce (esperar 300ms antes de buscar)
- Cache de datos frecuentes (catálogo de oficios)
---
## 13. Estimación de Esfuerzo
| Componente | Esfuerzo (días) | Complejidad |
|------------|-----------------|-------------|
| **Base de datos** (6 tablas + índices) | 2 | Media |
| **Backend API** (CRUD empleados, cuadrillas, certificaciones) | 4 | Media |
| **Frontend Web** (catálogo, formularios, detalle) | 5 | Alta |
| **Validaciones** (RFC, CURP, NSS, duplicados) | 2 | Media |
| **Gestión de documentos** (upload, versionado) | 2 | Media |
| **Historial laboral** (asignaciones, evaluaciones) | 2 | Baja |
| **Reportes** (5 reportes + exportación) | 3 | Media |
| **Integraciones** (proyectos, proveedores) | 1 | Baja |
| **Testing** (unitario + integración) | 2 | Media |
| **Documentación** (API, usuario final) | 1 | Baja |
| **TOTAL** | **24 días** | **~5 Story Points** |
**Equipo recomendado:**
- 1 Backend Developer
- 1 Frontend Developer
- 1 QA Tester
- 1 Product Owner (revisiones)
**Tiempo estimado:** ~5 semanas (1 sprint)
---
## 14. Anexos
### Anexo A: Algoritmos de Validación
#### Validación de RFC (México)
```typescript
function validateRFC(rfc: string): boolean {
// RFC Personas Físicas: 13 caracteres (PEJG850315HDF001)
const rfcPattern = /^[A-ZÑ&]{4}\d{6}[A-Z\d]{3}$/;
if (!rfcPattern.test(rfc)) {
return false;
}
// Validar checksum (homoclave)
const diccionario = "0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ Ñ";
let suma = 0;
for (let i = 0; i < 12; i++) {
suma += diccionario.indexOf(rfc.charAt(i)) * (13 - i);
}
const digitoVerificador = 11 - (suma % 11);
const dvEsperado = digitoVerificador === 10 ? 'A' : digitoVerificador === 11 ? '0' : digitoVerificador.toString();
return rfc.charAt(12) === dvEsperado;
}
```
#### Validación de CURP (México)
```typescript
function validateCURP(curp: string): boolean {
// CURP: 18 caracteres (PEJG850315HDFRMN02)
const curpPattern = /^[A-Z]{4}\d{6}[HM][A-Z]{5}[A-Z\d]\d$/;
if (!curpPattern.test(curp)) {
return false;
}
// Validar checksum (dígito verificador)
const diccionario = "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
let suma = 0;
for (let i = 0; i < 17; i++) {
suma += diccionario.indexOf(curp.charAt(i)) * (18 - i);
}
const digitoVerificador = (10 - (suma % 10)) % 10;
return parseInt(curp.charAt(17)) === digitoVerificador;
}
```
#### Validación de NSS (México)
```typescript
function validateNSS(nss: string): boolean {
// NSS: 11 dígitos numéricos
const nssPattern = /^\d{11}$/;
if (!nssPattern.test(nss)) {
return false;
}
// Validar checksum (algoritmo Luhn)
let suma = 0;
for (let i = 0; i < 10; i++) {
let digito = parseInt(nss.charAt(i));
if (i % 2 === 0) {
digito *= 2;
if (digito > 9) digito -= 9;
}
suma += digito;
}
const digitoVerificador = (10 - (suma % 10)) % 10;
return parseInt(nss.charAt(10)) === digitoVerificador;
}
```
---
### Anexo B: Catálogo de Oficios Estándar (México - Construcción)
| Código | Oficio | Categoría | Costo Estándar/Día | Cert. Requerida |
|--------|--------|-----------|-------------------|-----------------|
| OF-001 | Albañil | Obra Civil | $550 | NOM-031 |
| OF-002 | Fierrero (Armador) | Obra Civil | $600 | NOM-031 |
| OF-003 | Carpintero | Acabados | $580 | - |
| OF-004 | Plomero | Instalaciones | $620 | Certificación Plomería |
| OF-005 | Electricista | Instalaciones | $650 | Cert. Instalaciones Eléctricas |
| OF-006 | Pintor | Acabados | $520 | - |
| OF-007 | Yesero | Acabados | $530 | - |
| OF-008 | Operador Maquinaria | Maquinaria | $800 | Licencia + Curso Seguridad |
| OF-009 | Maestro de Obra | Supervisión | $900 | NOM-031 |
| OF-010 | Ayudante General | Apoyo | $400 | - |
| OF-011 | Soldador | Estructura Metálica | $700 | AWS Cert. |
| OF-012 | Instalador Cancelería | Acabados | $560 | Curso Aluminio/Vidrio |
| OF-013 | Impermeabilizador | Acabados | $600 | - |
| OF-014 | Instalador Drywall | Acabados | $550 | - |
| OF-015 | Colocador de Pisos | Acabados | $540 | - |
---
**Versión:** 1.0
**Fecha:** 2025-11-17
**Próxima revisión:** 2025-12-01
**Estado:** Aprobado para implementación