# Estado de cobertura — fin de Sprint 1.5

> Generado: Etapa 10, 18 mayo 2026.
> Base: 526 tests unitarios (33 archivos), suite E2E Playwright.
> Propósito: baseline de partida para Sprint 2.

---

## Resultado de la suite al cierre del sprint

### Tests unitarios (Vitest)

| Métrica | Valor |
|---|---|
| Total tests | 526 |
| Verdes | 526 |
| Rojos | 0 |
| Skip | 0 |
| Archivos de test | 33 |
| Duración | ~7 segundos |

### Tests E2E (Playwright)

| Métrica | Valor |
|---|---|
| Total tests | 38 |
| Verdes | 34 |
| Rojos | 4 (ver Regresiones documentadas) |
| Skip | 0 |
| Duración | ~75 segundos |

### Build / Typecheck / Lint

| Check | Estado | Nota |
|---|---|---|
| `npm run build` | ✅ Limpio | 2865 módulos, ~1 segundo |
| `npm run typecheck` | ✅ Sin errores | TypeScript strict |
| `npm run lint` | ⚠️ 3 errores, 92 warnings | Errores = `no-irregular-whitespace` en tests preexistentes; warnings = `@typescript-eslint/no-explicit-any` esperados en interfaces jsPDF |

---

## Regresiones documentadas (sin acción correctiva)

### RE-01 — `etapa-4-pdfs.spec.ts` (3 tests)

**Tipo:** test obsoleto, no regresión de producción.

**Síntoma:** los tests esperan 3 páginas en Actual/Automatizado y 4 en ROI.
El producto ahora genera 4 y 5 páginas respectivamente (cambios de Etapas 5-8).

**Causa:** el archivo fue escrito para el baseline de Etapa 4 y no se actualizó
cuando Etapas 5, 7 y 8 cambiaron la estructura de páginas.

**Impacto:** ninguno en producción. Los PDFs son correctos.

**Acción Sprint 2:** actualizar las aserciones de página en `etapa-4-pdfs.spec.ts`
o archivarlo en `tests/e2e/archive/` como registro histórico.

### RE-02 — `prod-smoke.spec.ts` (1 test)

**Tipo:** test obsoleto, no regresión de producción.

**Síntoma:** el test verifica `page.title` con `/Process Cost Platform/`
pero el título actual es `"InQ ROI — Cuantificá tus procesos"`.

**Causa:** la migración de marca se hizo en Etapa 2 del Sprint 1.5. El smoke test
no se actualizó al momento del cambio.

**Impacto:** ninguno en producción.

**Acción Sprint 2:** actualizar el selector del smoke test a `/InQ ROI/`.

---

## Áreas con cobertura sólida (unitarios + E2E)

### Motor de simulación BPMN

- `tests/domain/` — simulación determinística, gateways XOR/AND, probabilidades
- `tests/integration/bpmn-parser.test.ts` — parsing de procesos reales
- `tests/integration/bpmn-collaboration.test.ts` — colaboración
- **Evaluación:** muy sólida. El motor es el corazón del producto y está bien cubierto.

### Cálculo de ROI

- `tests/domain/roi.test.ts` — casos edge (inversión cero, ahorro negativo, payback infinito)
- `tests/lib/format-payback.test.ts` — 12 casos del formateador
- **Evaluación:** sólida. Cálculos puros con edge cases cubiertos.

### Exportación PDF — 3 generadores

- `tests/lib/export/pdf-orientation.test.ts` — orientaciones portrait/landscape
- `tests/lib/export/pdf-roi-page1.test.ts` — página 1 del ROI (gradiente, Top3, grid)
- `tests/lib/export/pdf-roi-pages2-5.test.ts` — tablas, análisis, metodología, gráfico SVG
- `tests/lib/export/pdf-scenario-page1.test.ts` — página 1 Actual/Automatizado
- `tests/lib/export/pdf-sections-shared.test.ts` — header/footer compartidos
- E2E: Etapas 4-8 validan PDFs reales con pdfjs-dist
- **Evaluación:** la más completa del sprint. Cobertura unitaria + E2E de los 3 PDFs.

### Helpers de formato

- `tests/lib/format.test.ts` — currency, minutes, timestamp
- `tests/lib/format-payback.test.ts` — payback en todos los rangos
- `tests/lib/colors.test.ts` — tokens de color del heatmap
- **Evaluación:** sólida. Funciones puras con muchos casos.

### Design tokens

- `tests/design-system/tokens.test.ts` — paleta InQ, colores CONCILIA excluidos
- **Evaluación:** básica pero suficiente para validar el sistema de identidad.

### Badge de automatización en BpmnCanvas

- `tests/features/workspace/BpmnCanvas.test.tsx` — lifecycle overlay, posición, HTML
- `tests/features/workspace/BpmnCanvas-badge.test.ts` — propiedades CSS del badge
- E2E: `etapa-9-badge.spec.ts` — aparece/desaparece/reaparece, screenshots
- **Evaluación:** sólida tras Etapa 9.

### Invalidación del store de simulación

- `tests/store/simulation-store-invalidation.test.ts` — 7 casos de invalidación
- **Evaluación:** sólida para los escenarios cubiertos.

---

## Áreas con cobertura parcial

### Componentes React del reporte

- `tests/features/report/` existe con tests de `CumulativeSavingsChart`, `ComparisonTable`, `RoiKpiBar`
- **Gap:** los tests son snapshots. No validan comportamiento interactivo ni edge cases de renderizado.
- **Riesgo:** bajo a corto plazo, medio cuando se agreguen features.

### Persistencia (Dexie/IndexedDB)

- Cobertura: indirecta vía store tests
- **Gap:** no hay tests directos de la capa de persistencia (migraciones, lectura/escritura de procesos complejos)
- **Riesgo:** medio. Las migraciones son el punto más frágil — un error ahí destruye datos del usuario.

### ActivityPanel

- **Gap:** sin tests unitarios ni E2E específicos del panel de actividades
- El comportamiento se verifica indirectamente en tests E2E de generación de PDF
- **Riesgo:** medio. El panel es la interfaz principal de configuración.

---

## Áreas sin cobertura

### Flujo completo de importación BPMN

- No hay test E2E que valide el flujo completo: archivo BPMN inválido → error legible
- No hay test para BPMNs con pools/lanes (collaboration.test.ts cubre el parser, no el UX)
- **Riesgo:** medio. Los usuarios importan archivos de herramientas externas con formatos variables.

### Exportación CSV

- `tests/e2e/` tiene `export-pdf.spec.ts` y `export-roi.spec.ts` pero los CSV no se validan con el mismo rigor
- **Riesgo:** bajo por ahora.

### Regresión visual de PDFs (golden files)

- No hay comparación pixel-a-pixel de PDFs entre versiones
- **Riesgo:** medio-alto. Un cambio visual inadvertido en `pdf-sections.ts` puede pasar los tests actuales sin ser detectado.

### Edge cases del simulador con procesos grandes

- Tests del motor cubren procesos de 3-10 actividades
- **Gap:** procesos de 20+ actividades, gateways OR inclusivos, subprocesos anidados
- **Riesgo:** bajo a corto plazo.

### Gateway OR inclusivo

- El motor simula OR como XOR (documentado). No hay test que valide que la advertencia aparece.
- **Riesgo:** bajo hasta que se implemente OR real.

---

## Gaps priorizados para Sprint 2

### Alta prioridad

1. **Regresión visual PDF (golden files):** implementar comparación de PDF contra baseline usando `pdfjs-dist`. Guarda página como PNG y compara con imagen de referencia. Detecta cambios involuntarios.
2. **Tests de migración Dexie:** validar que cada versión del schema se migra correctamente sin pérdida de datos.
3. **Smoke test E2E con BPMN inválido:** verificar mensaje de error apropiado cuando el archivo no es BPMN válido.

### Media prioridad

4. **Tests del ActivityPanel:** verificar que el formulario de configuración de actividad persiste correctamente a IndexedDB.
5. **Actualizar tests obsoletos:** `etapa-4-pdfs.spec.ts` y `prod-smoke.spec.ts` (ver RE-01, RE-02).
6. **Tests de flujo completo negativo:** ¿qué pasa si se simula sin configurar ningún costo?

### Baja prioridad

7. **Tests de stress del simulador:** proceso con 30+ actividades y gateways anidados.
8. **Tests de exportación CSV:** validar contenido y estructura de los archivos CSV generados.
