Etapa 8 — PDFs Actual y Automatizado: - Página 1: header denso + metadata strip + grid 2×2 KPI cards con paleta #FEF3E2 (naranja claro InQ), sin gradiente (jerarquía visual preservada) - Página 3: tabla con header naranja claro #FFF8ED + #92400E, em dash en filas no-automatizables, título ANÁLISIS DE COMPOSICIÓN uppercase - Página 4: NOTA METODOLÓGICA uppercase + caja contenedora slate-50 - 526 tests verdes (+ 15 tests nuevos) Etapa 9 — Badge ⚡ en BpmnCanvas: - Reemplaza badge legacy (Bot SVG ámbar #fffbeb) por círculo naranja sólido #F59845 con símbolo ⚡ blanco, 14×14px, border white 1.5px - Usa var(--inq-orange) definido en globals.css (sin hex hardcodeados) - Elimina los 3 hex legacy del audit Etapa 1: #f59e0b, #fffbeb, #e2e8f0 - 5 tests E2E de lifecycle del badge + 2 screenshots Política de iniciativa refinada post-Sprint 1.5 (CLAUDE.md actualizado) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
151 lines
6.9 KiB
Markdown
151 lines
6.9 KiB
Markdown
# TECH_DEBT — InQ ROI
|
||
|
||
> Deuda técnica, refactors postergados y decisiones arquitectónicas pendientes.
|
||
> Requiere consulta entre director y técnico para resolver.
|
||
> No incluye features de producto (ver BACKLOG.md) ni hallazgos de sprint actual (ver OBSERVATIONS.md).
|
||
|
||
---
|
||
|
||
## Convención de etiquetas
|
||
|
||
- `[SPRINT-2]` — Comprometido para resolución en el próximo sprint
|
||
- `[BACKLOG]` — Disponible para asignar
|
||
- `[DEFERRED]` — Pospuesto, requiere decisión arquitectónica
|
||
- `[INVESTIGATING]` — Necesita análisis técnico antes de planear
|
||
|
||
Cada ítem incluye:
|
||
- Estado actual del problema
|
||
- Causa raíz hipotetizada
|
||
- Impacto si no se resuelve
|
||
- Solución propuesta
|
||
- Archivos afectados (cuando aplica)
|
||
|
||
---
|
||
|
||
## Deuda crítica — afecta calidad del entregable
|
||
|
||
### [INVESTIGATING] Truncamiento de líneas largas en notas metodológicas (parcialmente resuelto)
|
||
|
||
**Estado actual:** los caracteres Unicode rotos (Σ → £, − → ") fueron
|
||
resueltos en Etapa 8 mediante reescritura a ASCII puro (SUM, x, -).
|
||
Decisión arquitectónica: la notación ASCII se mantiene como solución
|
||
permanente porque alinea con terminología financiera/Excel.
|
||
|
||
**Pendiente:** verificar si todavía hay líneas largas que se truncan en
|
||
margen derecho cuando una fórmula excede el ancho de página portrait.
|
||
|
||
**Acción:** test E2E que valide ancho de cada línea de notas metodológicas
|
||
en los 3 PDFs. Si hay truncamiento, evaluar:
|
||
- Opción A: usar `doc.splitTextToSize()` para wrap automático
|
||
- Opción B: reformular fórmulas problemáticas en múltiples líneas en el
|
||
texto fuente
|
||
|
||
**Sprint asignado:** [BACKLOG] — investigar al inicio de Sprint 2 con
|
||
tests de regresión. Si los tests confirman ausencia de truncamiento
|
||
después del cambio a ASCII, el ítem se cierra. Si hay casos truncados,
|
||
asignar etapa de Sprint 2.
|
||
|
||
**Archivos afectados:**
|
||
- src/lib/export/pdf-sections.ts (notas metodológicas Actual/Automatizado)
|
||
- src/lib/export/pdf-sections-roi.ts (nota metodológica ROI)
|
||
|
||
---
|
||
|
||
## Deuda media — afecta DX o evolución del producto
|
||
|
||
### [INVESTIGATING] Dexie live queries (sincronización store ↔ db)
|
||
|
||
**Estado actual:** la invalidación del resultado de simulación se garantiza vía ESLint rule (`no-restricted-imports`) + convención: todas las mutaciones pasan por `useProcessStore`.
|
||
|
||
**Riesgo a futuro:** si en Sprint 2 la grilla de edición masiva requiere escrituras de alta frecuencia directas a IndexedDB (por performance), la convención actual no escala.
|
||
|
||
**Solución a evaluar:** migración a live queries de Dexie que invaliden el store automáticamente.
|
||
|
||
**Acción pendiente:** análisis técnico de costo/beneficio cuando se planee la grilla de edición masiva.
|
||
|
||
**Origen:** auditoría de Mayo 2026.
|
||
|
||
### [BACKLOG] Indicador visual en reporte de actividades automatable
|
||
**Estado:** Sprint 1 usa solo leyenda de texto para diferenciar actividades automatables. **Acción:** evaluar si el cliente necesita más claridad visual (borde punteado o ícono diferenciador) cuando compara Actual vs Automatizado en reuniones. Decidir con feedback de uso real.
|
||
|
||
### [BACKLOG] Paleta del heatmap — saturado vs pastel
|
||
**Estado:** los colores saturados actuales (`#10B981`, `#F59E0B`, `#EF4444`) funcionan bien en pantallas grandes de talleres InQuality. El brief de Sprint 1.5 propuso pasteles "más consultivos" (`#BBF7D0`, `#FED7AA`, `#FECACA`).
|
||
|
||
**Decisión actual:** mantener saturados (Sprint 1.5 Etapa 1).
|
||
|
||
**Impacto del cambio futuro:** requiere recalibrar tests E2E de análisis de píxeles (umbrales de verde/ámbar/rojo).
|
||
|
||
**Acción:** decidir con feedback real de uso en talleres InQuality. Sprint 3-4.
|
||
|
||
---
|
||
|
||
## Refinamientos UX
|
||
|
||
### [BACKLOG] Mejorar animación de expansión de sección "Automatización" en ActivityPanel
|
||
**Estado:** actualmente usa max-h trick (funciona, pero la aceleración no es lineal en los últimos píxeles).
|
||
|
||
**Solución sofisticada:** `useRef + scrollHeight` para animar a la altura real del contenido.
|
||
|
||
**Costo:** medio. **Beneficio:** micro-pulido visual.
|
||
|
||
### [BACKLOG] Label "Payback" superpuesto con eje Y en CumulativeSavingsChart (web)
|
||
**Estado:** bug visual menor. El texto del marker vertical "Payback · X meses" se superpone con los labels del eje Y.
|
||
|
||
**Solución:** ajustar offset del label del marker payback.
|
||
|
||
**Costo:** 10 min en próxima etapa que toque el componente.
|
||
|
||
**Prioridad:** baja, no afecta funcionalidad.
|
||
|
||
### [BACKLOG] CumulativeSavingsChart — empezar en `-inversión`, no en 0 (web)
|
||
**Estado:** el gráfico web parte de `(Año 0, 0)`. **Decisión arquitectónica:** cambiar a `(Año 0, -inversión)` para ser financieramente honesto.
|
||
|
||
**Justificación:** mostrar el punto inicial como `-USD 80.000` hace visible el "valle de retorno". La línea cruza el cero exactamente en el mes de payback. Es la representación estándar en análisis financiero.
|
||
|
||
**Impacto:** consistencia con el chart del PDF (que ya se implementó así en Sprint 1.5 Etapa 7).
|
||
|
||
**Archivos:** `src/features/report/CumulativeSavingsChart.tsx`.
|
||
|
||
---
|
||
|
||
## Refinamientos visuales del PDF — derivados de validaciones de Sprint 1.5
|
||
|
||
> Estos hallazgos surgieron en validaciones visuales del director durante Sprint 1.5. Se difirieron a "polish final" del mismo sprint o a Sprint 2.
|
||
|
||
### [SPRINT-1.5 — POLISH FINAL] Refinamientos página 1 PDF ROI
|
||
|
||
**KPI Hero:**
|
||
- Spacing entre label "AHORRO PROYECTADO A 3 AÑOS" y la cifra
|
||
- Tamaño de la cifra (evaluar reducir ligeramente)
|
||
- Esquinas redondeadas (si se logra técnicamente — jsPDF no hace clip en addImage)
|
||
|
||
**Banner narrativo:**
|
||
- Destacar tipográficamente cifras y palabras clave (negrita en USD, %, meses)
|
||
- Considerar bullets o estructura más visual
|
||
|
||
**Grid 2x2 KPIs secundarios:**
|
||
- Inconsistencia tipográfica detectada — investigar y armonizar
|
||
- Verificar que los 4 cards sigan el mismo patrón visual
|
||
|
||
**Top 3 actividades:**
|
||
- Aumentar tamaño del título "TOP 3 ACTIVIDADES POR AHORRO"
|
||
- Agregar fondo claro a las barras para mejor contraste
|
||
- Reconsiderar diseño completo del bloque
|
||
|
||
---
|
||
|
||
## Decisiones arquitectónicas tomadas en Sprint 1.5 (cerradas, archivadas)
|
||
|
||
> Sección informativa. Estas decisiones ya están aplicadas en el código. Se mantienen acá como referencia.
|
||
|
||
### Subtítulo "Análisis de retorno de inversión" solo en página 1 ROI
|
||
Decidido: página 1 tiene subtítulo descriptivo, páginas 2-4 no. Patrón estándar de reportes financieros (página 1 con título extendido).
|
||
|
||
### KPI cards en página 1 de PDFs Actual/Automatizado — color naranja
|
||
Decidido: el KPI "Costo total" se migró a naranja durante refactor de Sprint 1.5. Antes era azul. Decisión retroactiva del audit.
|
||
|
||
### ComparisonTable — actividades no automatizables muestran em dash
|
||
Decidido: en filas donde `isAutomatable === false`, mostrar "—" (em dash) en columnas Ahorro y % Ahorro en lugar de "USD 0,00" y "0,0%". Aplicado en Sprint 1.5.
|
||
|
||
### Versión "v0.1.0" en footer — fuera de PDFs, presente en web
|
||
Decidido: la versión es útil para usuarios internos en web. En PDFs entregados a clientes genera dudas de estabilidad. Aplicado en Sprint 1.5. |