Files
inq-roi-simulador-web/docs/COVERAGE_STATE.md
Marcos Benítez 49364f4b18 docs: cierre formal de Sprint 1.5
- OBSERVATIONS.md reseteado para Sprint 2
- STRATEGIC_DIRECTION.md con reflexiones del sprint
- TECH_DEBT.md curado: items resueltos archivados
- methodology/CASE_STUDIES/inq-roi-sprint-1-5.md generado

Sprint 1.5 cerrado:
- 11 etapas + 1 fix pre-Etapa 11
- 526 unit tests + 38 E2E al cierre
- Producto con identidad InQ aplicada en web + 3 PDFs
- Metodología documentada con casos reales (2 de mala
  clasificación de iniciativa, originaron AP.8 +
  refinamiento C.6)
- Material para transmisión al equipo de 5 técnicos
2026-05-19 07:27:40 -03:00

197 lines
7.3 KiB
Markdown

# 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.