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
This commit is contained in:
196
docs/COVERAGE_STATE.md
Normal file
196
docs/COVERAGE_STATE.md
Normal file
@@ -0,0 +1,196 @@
|
||||
# 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.
|
||||
146
docs/QA_CHECKLIST.md
Normal file
146
docs/QA_CHECKLIST.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Checklist de QA — pre-cierre de sprint / pre-deploy
|
||||
|
||||
> Lista de verificación para validar el estado del producto antes de
|
||||
> cerrar un sprint o desplegar a producción.
|
||||
> Actualizado al cierre de Sprint 1.5 (18 mayo 2026).
|
||||
> Tiempo estimado: 15-20 minutos (5 automatizado + 10 manual).
|
||||
|
||||
---
|
||||
|
||||
## 1. Suite automatizada
|
||||
|
||||
```
|
||||
[ ] npm test → 0 rojos, 0 skip sin justificación
|
||||
[ ] npm run test:e2e → 0 rojos (excluir tests archivados)
|
||||
[ ] npm run build → sin errores (warnings de chunk-size: ignorar)
|
||||
[ ] npx tsc --noEmit → sin errores
|
||||
[ ] npm run lint → 0 errores (warnings de any: ignorar en lib/export/)
|
||||
```
|
||||
|
||||
**Si hay rojos:** registrar en OBSERVATIONS.md como `[CURRENT-SPRINT]` con categoría:
|
||||
- Bug nuevo introducido en este sprint → corregir antes de cerrar
|
||||
- Test obsoleto (baseline caducado) → actualizar el test o archivarlo
|
||||
- Flaky (pasa/falla según timing) → registrar como tech debt
|
||||
|
||||
---
|
||||
|
||||
## 2. Validación visual — web app
|
||||
|
||||
Ejecutar `npm run dev` → abrir `http://localhost:5173`
|
||||
|
||||
```
|
||||
[ ] Homepage carga sin errores en consola del browser
|
||||
[ ] Importar BPMN: arrastrar medium-with-gateways.bpmn → workspace carga
|
||||
[ ] BPMN renderiza correctamente (nodos, flujos, gateways visibles)
|
||||
[ ] Clic en actividad → ActivityPanel se abre con formulario de costos
|
||||
[ ] Toggle "Automatizable" + Guardar → badge ⚡ naranja aparece sobre el nodo en el canvas
|
||||
[ ] Desmarcar "Automatizable" + Guardar → badge ⚡ desaparece
|
||||
[ ] Botón Simular → navega a /report/ con KPI cards
|
||||
[ ] KPI cards usan paleta naranja InQ (fondo #FEF3E2, no gris)
|
||||
[ ] Tab "Automatizado" → reporte actualizado con costos automatizados
|
||||
[ ] Tab "Comparación" → KPI Hero naranja → magenta visible
|
||||
[ ] CumulativeSavingsChart muestra curva con payback marcado
|
||||
[ ] Ningún error de consola durante el flujo completo
|
||||
[ ] Texto "InQ ROI" en header (no "Process Cost Platform")
|
||||
[ ] Footer: "Hecho desde Paraguay 🇵🇾" (si aplica según decisión pendiente BACKLOG.md)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. Validación visual — PDFs
|
||||
|
||||
Exportar los 3 PDFs después del flujo del punto anterior.
|
||||
|
||||
```
|
||||
PDF Actual (4 páginas):
|
||||
[ ] Página 1: "ANÁLISIS DE COSTOS — ESCENARIO ACTUAL" + cards naranja InQ
|
||||
[ ] Página 1: strip de metadata con PROCESO, FECHA, MONEDA
|
||||
[ ] Página 2: diagrama BPMN landscape con heatmap de colores
|
||||
[ ] Página 3: "ANÁLISIS DE COMPOSICIÓN" uppercase + tabla con header naranja
|
||||
[ ] Página 4: "NOTA METODOLÓGICA" uppercase + caja contenedora
|
||||
[ ] Footer todas las páginas: "InQ ROI · Powered by InQuality · Página X de 4"
|
||||
|
||||
PDF Automatizado (4 páginas):
|
||||
[ ] Página 1: "ANÁLISIS DE COSTOS — ESCENARIO AUTOMATIZADO" + cards naranja InQ
|
||||
[ ] Páginas 2-4: mismo esquema que Actual
|
||||
[ ] Footer: "Página X de 4"
|
||||
|
||||
PDF ROI (5 páginas):
|
||||
[ ] Página 1: header denso + banner narrativo + KPI Hero gradiente naranja→magenta
|
||||
[ ] Página 1: grid 2×2 KPIs secundarios + Top 3 actividades con barras
|
||||
[ ] Página 2: tabla comparativa con header naranja (#FFF8ED)
|
||||
[ ] Página 3: "ANÁLISIS DEL AHORRO" + sección transparencia (si aplica)
|
||||
[ ] Página 4: "NOTA METODOLOGICA - ANALISIS DE ROI" + caja contenedora
|
||||
[ ] Página 5: "TRAYECTORIA DEL AHORRO ACUMULADO" + gráfico SVG con áreas
|
||||
[ ] Footer: "InQ ROI · Powered by InQuality · Página X de 5"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Regresiones de marca
|
||||
|
||||
```
|
||||
[ ] "InQ" aparece siempre como I-n-Q (no INQ, Inq, inq, inQ)
|
||||
[ ] "InQ ROI" es el nombre del producto (no "Process Cost Platform")
|
||||
[ ] "Powered by InQuality" en footer de todos los PDFs
|
||||
[ ] Sin "v0.1.0" en PDFs (puede estar en web si es útil internamente)
|
||||
[ ] Sin colores CONCILIA (#572FA2, #CB1889) en ningún componente
|
||||
[ ] Gradiente naranja→magenta solo en KPI Hero ROI (no en PDFs Actual/Automatizado)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. Documentación del sprint
|
||||
|
||||
```
|
||||
[ ] CLAUDE.md tiene criterios de iniciativa actualizados
|
||||
[ ] methodology/PATTERNS.md tiene los patrones del sprint cosechados
|
||||
[ ] methodology/ANTI_PATTERNS.md tiene los anti-patrones del sprint
|
||||
[ ] OBSERVATIONS.md: todos los items son [RESOLVED] o [DEFERRED-*]
|
||||
[ ] TECH_DEBT.md: items del sprint actualizados/promocionados
|
||||
[ ] BACKLOG.md: items nuevos del sprint agregados
|
||||
[ ] STRATEGIC_DIRECTION.md: refleja decisiones tomadas en el sprint
|
||||
[ ] sprints/sprint-N/ tiene todos los ETAPA_N_PROMPT.md del sprint
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Artefactos del sprint
|
||||
|
||||
```
|
||||
[ ] tests/e2e/__output__/sprint-N-N-final/ tiene los 3 PDFs baseline
|
||||
[ ] tests/screenshots/ tiene screenshots de Playwright de features visuales
|
||||
[ ] docs/COVERAGE_STATE.md actualizado con el estado al cierre
|
||||
[ ] docs/QA_CHECKLIST.md actualizado si hubo cambios en el proceso
|
||||
[ ] git tag sprint-N-cerrado apuntando al commit de cierre
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Smoke test manual rápido (5 minutos)
|
||||
|
||||
Para verificar el flujo completo en producción después de un deploy:
|
||||
|
||||
```
|
||||
1. Abrir la URL de producción (Cloudflare Pages)
|
||||
2. Importar medium-with-gateways.bpmn desde public/sample-processes/
|
||||
3. Configurar task_recv: costo directo 200, automatizado 20, marcar automatable → Guardar
|
||||
4. Verificar: badge ⚡ naranja aparece sobre el nodo en el canvas
|
||||
5. Clic en "Simular"
|
||||
6. En el reporte, verificar KPI cards con paleta naranja
|
||||
7. Ir a tab "Comparación" → verificar KPI Hero con gradiente naranja→magenta
|
||||
8. Exportar PDF Actual → verificar que descarga y tiene 4 páginas
|
||||
9. Exportar PDF ROI → verificar que descarga y tiene 5 páginas
|
||||
10. Verificar que "InQ ROI" aparece en el header web y en los PDFs
|
||||
|
||||
Tiempo estimado: 5 minutos
|
||||
Resultado esperado: todo funciona sin errores de consola
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Historial de actualizaciones
|
||||
|
||||
| Versión | Sprint | Cambios |
|
||||
|---|---|---|
|
||||
| 1.0 | Sprint 1.5 | Creación inicial al cierre del sprint |
|
||||
Reference in New Issue
Block a user