# QA Plan — RRHH Presentismo Fase 3

**Fecha**: 2026-05-18  
**Alcance**: M17 (turnos/asignaciones), M18 (permisos), M20 (tolerancias especiales)

## 1) Pruebas backend (unitarias)

1. `TurnosResolverService` prioriza `OCASIONAL` sobre `PERPETUA` en la misma fecha.
2. `TurnosResolverService` devuelve `null` si el turno no aplica al día de semana.
3. `PermisosPresentismoService` valida reglas por tipo (`LLEGADA_TARDIA` exige `minutos_tolerados`).
4. `PermisosPresentismoService` permite transición `PENDIENTE -> APROBADO`.
5. `PermisosPresentismoService` rechaza cambios inválidos de estado (`APROBADO -> RECHAZADO`).

## 2) Pruebas API (integración)

1. `POST /api/v1/rrhh/presentismo/permisos` crea permiso en estado `PENDIENTE` y valida multiempresa.
2. `PATCH /api/v1/rrhh/presentismo/permisos/:id/aprobar` guarda `aprobado_por` y `fecha_aprobacion`.
3. `PATCH /api/v1/rrhh/presentismo/permisos/:id/rechazar` guarda `rechazado_por` y `fecha_rechazo`.
4. `POST /api/v1/rrhh/presentismo/tolerancias-especiales` crea tolerancia por fecha/alcance.
5. `PATCH /api/v1/rrhh/presentismo/tolerancias-especiales/:id` actualiza sin perder aislamiento por `empresa_id`.
6. `DELETE /api/v1/rrhh/presentismo/tolerancias-especiales/:id` elimina sólo en la empresa dueña.

## 3) QA frontend (manual)

1. **Turnos**: crear SIMPLE y CORTADO, validar feedback inline/toast y estado vacío.
2. **Asignación de turnos**: asignar PERPETUA y OCASIONAL; verificar conflicto 409 en solape misma prioridad.
3. **Permisos**: crear `JORNADA_COMPLETA`, aprobar/rechazar con `ConfirmDialog` y refresco de listado.
4. **Tolerancias**: crear tolerancia `TODOS`, editar, eliminar; repetir para `SUCURSAL` y `DEPARTAMENTO`.
5. **Responsive**: validar subtabs de Presentismo en ancho móvil (`Tabs` scrollable + formularios).

## 4) Evidencias mínimas

1. Capturas de cada subtab (`Turnos`, `Asignación turnos`, `Permisos`, `Tolerancias`).
2. Extracto de respuestas API (status y payload resumido).
3. Resultado de tests unitarios ejecutados.

## 5) Comandos ejecutados en esta entrega

```bash
# Backend build
cd backend && npm run build

# Frontend build
cd frontend && npm run build

# Unit tests Fase 3 backend
cd backend && npm test -- \
  src/rrhh/services/permisos-presentismo.service.spec.ts \
  src/rrhh/services/turnos-resolver.service.spec.ts --runInBand
```
