# US-MGN-010-001-001: CRUD Empleados **RF Asociado:** [RF-MGN-010-001](../../02-modelado/requerimientos-funcionales/mgn-010/RF-MGN-010-001-gestión-de-empleados.md) **Módulo:** MGN-010 - RRHH Básico **Epic:** Empleados **Prioridad:** P0 **Story Points:** 5 **Sprint:** Sprint 22 **Estado:** Ready for Development **Fecha:** 2025-11-24 --- ## User Story **Como** gerente de RRHH, **Quiero** gestionar información de empleados, **Para** mantener un registro centralizado del personal. ## Descripción Detallada Empleado incluye: - Datos personales (nombre, email, teléfono, dirección, fecha nacimiento) - Datos laborales (puesto, departamento, manager, fecha ingreso, salario) - Documentos (identificación, CV, foto) - Estado (active, inactive, terminated) ## Criterios de Aceptación ### Escenario 1: Crear empleado **Dado que** soy hr_manager, **Cuando** creo empleado: name="Juan Pérez", email="juan.perez@company.com", job_id=1, department_id=1, hire_date="2024-01-15", **Entonces** sistema crea empleado con state=active, genera employee_number único. ### Escenario 2: Email único **Dado que** ya existe empleado con email="juan.perez@company.com", **Cuando** intento crear otro con mismo email, **Entonces** error 400 "Email ya registrado". ### Escenario 3: Actualizar datos **Dado que** empleado existe, **Cuando** actualizo job_id=5, manager_id=10, **Entonces** sistema actualiza y registra cambio en audit_log. ### Escenario 4: Desactivar empleado **Dado que** empleado está active, **Cuando** cambio state=inactive, termination_date="2024-06-30", termination_reason="Renuncia", **Entonces** empleado se desactiva, no aparece en selectores por defecto. ## Reglas de Negocio - **RN-1:** Email único por empresa. - **RN-2:** employee_number auto-generado secuencial. - **RN-3:** state=terminated requiere termination_reason. - **RN-4:** RLS filtra por empresa. - **RN-5:** Permisos: hr_user (lectura), hr_manager (escritura). ## Tareas Técnicas ### Backend - [ ] Endpoint: POST/GET/PUT/DELETE `/api/v1/hr/employees` - [ ] Service: `EmployeeService` (CRUD) - [ ] Generar employee_number único - [ ] Validar email único - [ ] Unit tests ### Frontend - [ ] Página: `EmployeesPage.tsx` - [ ] Formulario: `EmployeeForm.tsx` (multi-step) - [ ] Vista: Foto, datos personales, laborales - [ ] Filtros: Departamento, Puesto, Estado - [ ] Component tests ### Database - [ ] Tabla: `hr.employees` (name, email, phone, job_id, department_id, manager_id, hire_date, termination_date, state) - [ ] Constraint: unique(company_id, email) - [ ] Enum: employee_state - [ ] Índices: idx_employees_department_id, idx_employees_manager_id --- ## Estimación Detallada | Tarea | Horas | |-------|-------| | Backend | 2.5 | | Frontend | 3 | | Testing | 2 | | **TOTAL** | **7.5 horas = 5 SP** | ## Definition of Done - [ ] CRUD completo - [ ] Validaciones aplicadas - [ ] employee_number generado - [ ] Tests >80% - [ ] QA/PO aprobado ## Referencias - [RF-MGN-010-001](../../02-modelado/requerimientos-funcionales/mgn-010/RF-MGN-010-001-gestión-de-empleados.md) - [Traceability](../../02-modelado/trazabilidad/TRACEABILITY-MGN-010.yaml)