# QA Plan — RRHH Presentismo Fase 4 (Cierre Fino)

**Fecha**: 2026-05-18  
**Objetivo**: certificar M19 en flujo completo (motor + API + UI + liquidación), con contratos estables y migraciones aplicadas.

---

## 1) Alcance

Incluye:

- Procesamiento de novedades de presentismo (`/presentismo/novedades/procesar`).
- Gestión de novedades generadas (`listar`, `anular`).
- Impacto en liquidación mensual (`rrhh-engine`).
- Validación de contratos API usados por la UI de Presentismo (paginación, enums y filtros).
- Verificación de estado de migraciones RRHH Presentismo.

Fuera de alcance:

- Nuevas reglas funcionales fuera de M19/M20.
- Rediseño UX de tabs legacy no pertenecientes a Presentismo.

---

## 2) Entorno y precondiciones

- Backend y frontend en rama de trabajo actual.
- Base con migraciones aplicadas.
- Redis activo (colas de sincronización habilitadas).
- Empresa de pruebas con:
  - al menos 1 reloj activo,
  - empleados activos con turnos asignados,
  - marcaciones limpias del período a procesar.
- Usuarios:
  - `admin_rrhh` (permisos completos presentismo),
  - `auditor_rrhh` (solo consulta),
  - `operador_rrhh` (operación sin privilegios de aprobación total).

---

## 3) Gate 0 — Migraciones y contrato base

### A. Estado de migraciones

1. Ejecutar:

```bash
cd backend
npx prisma migrate status
```

2. Esperado:
- `"Database schema is up to date!"`.
- Sin drift reportado.

### B. Contratos API críticos para UI

1. Verificar límites máximos de paginación en endpoints de presentismo:
- `GET /rrhh/presentismo/permisos` acepta `limit <= 200`.
- `GET /rrhh/presentismo/empleados` acepta `limit <= 200`.
2. Esperado:
- No existen llamados frontend con `limit > 200` para estas rutas.

---

## 4) Suite técnica (automatizada)

Ejecutar:

```bash
cd backend
npm test -- \
  src/rrhh/engine/presentismo-engine.service.spec.ts \
  src/rrhh/services/novedades.service.spec.ts \
  src/rrhh/services/permisos-presentismo.service.spec.ts \
  src/rrhh/services/turnos-resolver.service.spec.ts \
  --runInBand
```

Criterio de aprobación:

- 100% de suites en verde.
- 0 tests flaky (repetir la suite al menos 2 veces si hay duda).

---

## 5) Suite API (integración manual guiada)

### A. Procesamiento M19

1. `POST /api/v1/rrhh/presentismo/novedades/procesar` con período válido.
2. Esperado:
- Anula automáticas previas (`estado=ANULADA`).
- Crea nuevas `CONFIRMADA`.
- Marca `rrhh_marcaciones_limpias.procesado_novedades=true`.

### B. Anulación controlada

1. `PUT /api/v1/rrhh/presentismo/novedades/:id/anular` sobre novedad sin liquidación.
2. Esperado: `200` y estado `ANULADA`.
3. Repetir sobre novedad con `liquidacion_id` cargado.
4. Esperado: `409` por bloqueo de cierre.

### C. Filtros de consulta

1. `GET /api/v1/rrhh/presentismo/novedades` con combinaciones de:
- `estado`,
- `generado_automatico`,
- `impacta_liquidacion`,
- rango de fechas,
- `tipo_novedad`.
2. Esperado: datos consistentes y aislamiento por `empresa_id`.

---

## 6) Suite funcional UI (E2E)

1. Ir a `RRHH > Presentismo > Novedades`.
2. Ejecutar **Procesar período** con `ConfirmDialog`.
3. Verificar refresco de tabla y estados.
4. Ejecutar **Anular** sobre una novedad aplicable.
5. Validar que novedades automáticas no se editen ni eliminen fuera del flujo permitido.
6. Verificar que tabs `Permisos` y `Asignación Turnos` cargan sin toast de error por `400` de paginación.
7. Validar responsive básico en ancho móvil.

---

## 7) Regresión liquidación

1. Ejecutar cálculo mensual en período con novedades de presentismo.
2. Confirmar reglas:
- `AUSENCIA_JORNADA` y `AUSENCIA_BLOQUE` descuentan ausencia.
- `TARDANZA` y `SALIDA_ANTICIPADA` descuentan por minutos.
- `AUSENCIA_JUSTIFICADA` y `TARDANZA_JUSTIFICADA` no descuentan.
3. Confirmar persistencia de vínculo `liquidacion_id` en novedades consumidas.

---

## 8) Go/No-Go

Go si:

- Migraciones al día y sin drift.
- Suite técnica verde.
- Procesamiento/anulación M19 sin bloqueantes.
- Sin errores de contrato API en UI (400 por parámetros inválidos).
- Regresión de liquidación validada.

No-Go si:

- Falla bloqueo por liquidación cerrada.
- Inconsistencia entre novedades procesadas y descuento en liquidación.
- Fallos de multiempresa o permisos en endpoints de presentismo.

---

## 9) Evidencia obligatoria

Guardar en: `backend/docs/qa-presentismo-f4-evidencia-YYYY-MM-DD.md`

Incluir:

- Commit SHA probado.
- Resultado por caso (`PASS/FAIL`).
- Capturas UI (Novedades + Permisos + Asignación Turnos).
- Extractos API (request/response resumidos).
- Salida de `prisma migrate status`.
- Hallazgos y decisión final (`GO`/`NO-GO`).
