# US-MGN-010-002-001: CRUD Contratos Laborales

**RF Asociado:** [RF-MGN-010-003](../../02-modelado/requerimientos-funcionales/mgn-010/RF-MGN-010-003-contratos-laborales.md)
**Módulo:** MGN-010 - RRHH Básico
**Epic:** Contratos
**Prioridad:** P0
**Story Points:** 5
**Sprint:** Sprint 22
**Estado:** Ready for Development
**Fecha:** 2025-11-24

---

## User Story
**Como** gerente de RRHH, **Quiero** gestionar contratos laborales de empleados, **Para** controlar vigencia y términos contractuales.

## Criterios de Aceptación

### Escenario 1: Crear contrato
**Dado que** empleado existe,
**Cuando** creo contrato: employee_id=1, type="indefinido", start_date="2024-01-01", salary=50000,
**Entonces** sistema crea contrato con state=active.

### Escenario 2: Un solo contrato activo por empleado
**Dado que** empleado ya tiene contrato active,
**Cuando** intento crear otro active,
**Entonces** error 400 "Empleado ya tiene contrato activo. Debe finalizar el anterior primero".

### Escenario 3: Finalizar contrato
**Dado que** contrato está active,
**Cuando** lo finalizo con end_date="2024-12-31",
**Entonces** state=terminated, permite crear nuevo contrato.

## Reglas de Negocio
- **RN-1:** Un solo contrato activo por empleado.
- **RN-2:** Tipo: indefinido, temporal, practicante.
- **RN-3:** Salario obligatorio > 0.

## Tareas Técnicas
### Backend
- [ ] Endpoint: POST/GET/PUT/DELETE `/api/v1/hr/contracts`
- [ ] Validar un solo contrato activo
- [ ] Unit tests

### Frontend
- [ ] Página: `ContractsPage.tsx`
- [ ] Formulario contrato
- [ ] Lista de contratos del empleado

### Database
- [ ] Tabla: `hr.contracts` (employee_id, type, start_date, end_date, salary, state)
- [ ] Enum: contract_type, contract_state

## Estimación Detallada
| Tarea | Horas | Backend | 2 | Frontend | 2.5 | Testing | 1.5 |
**TOTAL** | **6 horas = 5 SP** |

## Definition of Done
- [ ] CRUD completo
- [ ] Validación un solo activo
- [ ] Tests >80%
- [ ] QA/PO aprobado

## Referencias
- [RF-MGN-010-003](../../02-modelado/requerimientos-funcionales/mgn-010/RF-MGN-010-003-contratos-laborales.md)
