erp-core/docs/05-user-stories/mgn-010/US-MGN-010-001-001-crud-empleados.md

3.1 KiB

US-MGN-010-001-001: CRUD Empleados

RF Asociado: RF-MGN-010-001 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