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