# 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: ☑ Sí
- 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 | ✅ Sí | ✅ Sí |
| **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 | ⚠️ Sí (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)
❌ Datos salariales
❌ Datos médicos |
| **Residente de Obra** | ✅ Datos básicos de personal asignado a su obra
❌ Datos salariales
❌ Datos de otras obras |
| **Auditor Externo** | ✅ Solo datos necesarios para auditoría (certificaciones, asistencias)
❌ 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