13 KiB
Sprint 2 — Brief
Propósito: completar y elevar el modelo de recursos con costo por hora (ya parcialmente implementado), con foco en la experiencia "wow" en el workspace y en la visibilidad de recursos en el reporte y el PDF. Complementado con mejoras de UX para uso en talleres y pre-venta.
Usuario objetivo: equipo de InQuality. Uso interno en talleres de análisis de procesos y pre-venta de automatización. Ocasionalmente presentado a clientes directamente.
Sprint anterior: Sprint 1.5 — identidad visual completa, PDFs de clase profesional, badge ⚡ en canvas, ROI con 5 KPIs. Ver cierre en
methodology/CASE_STUDIES/.
0. Reglas no negociables (heredadas)
- Marca: "InQ" siempre I-n-Q. "InQ ROI" nombre del producto.
- Paleta: naranja
#F59845, gradiente#F59845 → #ED3E8F. No usar morado CONCILIA. - Logo: usar PNGs de
assets/en lugar de texto "InQ" / "InQuality" donde corresponda. Logo principal:MARCA FINAL 2023 AREA DE SEGURIDAD 1 COLOR.png. - Footer PDFs: "Powered by InQuality" — obligatorio en los tres PDFs.
- Identidad visual: estable hasta Sprint 4+. No reabrir paleta, tipografía ni sistema de componentes.
- Validación visual: tests verdes ≠ aprobación final. Todo artefacto visual requiere OK del director antes de cerrar etapa.
- Iniciativa agéntica: clasificar cambios por nivel (1/2/3). Ver
methodology/PATTERNS.mdC.6.
Para referencia completa del manual de marca, tokens CSS y logo, ver assets/InQ manual de marca- 3.0.pdf y sprints/sprint-1-5/BRIEF.md sección 1.
1. Contexto estratégico
1.1 Rebalanceo web/PDF
| Componente | Inversión esperada |
|---|---|
| Web app (workspace + reporte + features) | 60–70 % |
| PDF (refinamientos, nuevas secciones) | 15–25 % |
| Infraestructura / deuda técnica | 10–15 % |
| Documentación / metodología | 5–10 % |
1.2 Criterio de wow (obligatorio)
Cada etapa con feature nueva incluye:
- Versión mínima: cumple la funcionalidad.
- Versión con wow: mismo objetivo + 1-2 detalles de experiencia que generan impacto positivo.
Por defecto: versión con wow si el costo extra < 40% del tiempo de la mínima.
2. Estado real del modelo de recursos (pre-Sprint 2)
El modelo de recursos existe parcialmente desde el MVP. Sprint 2 no construye desde cero.
Lo que ya existe en el código
| Componente | Estado |
|---|---|
Resource en types.ts |
✅ { id, processId, name, type, costPerHour } |
ActivityResourceAssignment en Activity |
✅ { resourceId, utilizationPercent: number (0–1) } |
Tabla resources en Dexie |
✅ Existe desde v1 |
ResourcesPanel.tsx |
✅ CRUD completo de recursos por proceso |
ActivityPanel.tsx asignación |
✅ Slider de % de utilización |
| Motor de simulación | ✅ Calcula cost = costPerHour × (execTimeMin/60) × utilizationPercent |
CostByResourceChart.tsx en reporte |
✅ Muestra totales por recurso (o "Sin recursos") |
| Desglose por actividad en reporte | ❌ No existe |
| PDF con recursos | ❌ No existe |
Problema del modelo actual
El modelo utilizationPercent no es intuitivo para consultores: "¿qué % de la actividad ocupa este recurso?" es menos claro que "¿cuántos minutos dedica este recurso a cada ejecución?". En un taller con cliente, la pregunta inevitable es "¿cómo llegaste a ese costo?" — la respuesta con minutos es verificable, con porcentajes no.
3. Decisiones arquitectónicas del sprint (validadas por el director)
| Decisión | Resolución |
|---|---|
| Scope de recursos | Por proceso. Catálogo global en Sprint 3 con feedback real. |
| Costo fijo convive con recursos | Sí. costoTotal = directCostFixed + costoRecursos |
| Recursos en escenario automatizado | Solo AS-IS en Sprint 2. TO-BE sigue con automatedCostFixed. |
| Modelo de utilización | Migrar utilizationPercent → utilizationMinutes + units |
| Versión Dexie | Incrementar a v3. Migración preserva datos existentes. |
3.1 Modelo migrado — ActivityResourceAssignment
// Antes (v2)
interface ActivityResourceAssignment {
resourceId: UUID
utilizationPercent: number // 0–1, fracción del tiempo de la actividad
}
// Después (v3) — Sprint 2
interface ActivityResourceAssignment {
resourceId: UUID
utilizationMinutes: number // minutos del recurso por ejecución (independiente del tiempo de la actividad)
units: number // cantidad de unidades del recurso (default 1)
}
3.2 Fórmula de costo actualizada
costoRecurso = resource.costPerHour × assignment.utilizationMinutes / 60 × assignment.units
costoTotalActividad = directCostFixed + SUM(costoRecurso por cada assignment)
3.3 Migración v2 → v3
La migración convierte datos existentes con la heurística:
utilizationMinutes = Math.round(activity.executionTimeMinutes × assignment.utilizationPercent)
units = 1
Para asignaciones sin ejecutionTimeMinutes disponible, utilizationMinutes = 0 (conservador, evita sobrestimación).
3.4 Lo que NO cambia en Sprint 2
Resourcetype (soloutilizationMinutescambia enActivityResourceAssignment, no enResource)- Motor de simulación: recibe costo ya calculado o adapta la fórmula localmente
- Escenario automatizado: sin cambios
- ROI: opera sobre resultado de simulación, sin cambio
4. Features del sprint
Feature A — Migración del modelo de recursos (Etapa 1)
Peso estimado: 15% del sprint.
- Actualizar
ActivityResourceAssignmententypes.tsyschemas.ts - Actualizar fórmula en
simulation.ts - Dexie v3 con función de upgrade que migra
utilizationPercent → utilizationMinutes + units - Test de migración: procesos con asignaciones previas se convierten correctamente
- Tests unitarios de dominio: edge cases del nuevo modelo
Criterio de aceptación:
- Proceso sin recursos: comportamiento idéntico al actual
- Proceso con recursos: costo calculado correctamente con nueva fórmula
- Migración v2→v3: datos preservados, sin pérdida
- Tests de dominio verdes
Feature B — ActivityPanel "wow" (Etapa 2)
Peso estimado: 20% del sprint.
Versión mínima:
- Reemplazar slider de % por inputs de
utilizationMinutes(número) yunits(número entero ≥ 1) - Mostrar costo calculado por recurso debajo del input
Versión con wow (recomendada): Todo lo anterior más:
- Cálculo en tiempo real: el costo se actualiza al tipear (debounce de 300ms)
- Subtotal de recursos visible en el panel antes de guardar
- Helper contextual bajo el total: "Esta actividad consume el equivalente a 2.3 días de trabajo del Analista Senior al mes" (calculado con
annualFrequency / 12 × utilizationMinutes / 60 / 8) - El campo
directCostFixedcon label explícito: "Costo fijo (insumos, licencias, etc.)" para diferenciar visualmente de los recursos
Criterio de aceptación:
- Inputs reemplazan slider de %
- Costo por recurso visible antes de guardar
- Helper contextual aparece cuando hay
annualFrequency > 0y recursos asignados - Validación visual del director aprobada
Feature C — Reporte web: desglose de recursos (Etapa 3)
Peso estimado: 20% del sprint.
C.1 Desglose por actividad en ActivitiesTable
Versión mínima: columna "Recursos" en la tabla que muestra el costo total de recursos de la actividad.
Versión con wow: filas expandibles que muestran el desglose: fijo + recurso 1 + recurso 2 + subtotal. El expand/collapse usa animación consistente con el sistema de diseño.
C.2 CumulativeSavingsChart — arrancar en -inversión (TECH_DEBT)
El gráfico web parte de (Año 0, 0). El PDF ya lo hace correcto ((Año 0, -inversión)). Inconsistencia que notarán analistas en pre-venta. Cambiar punto inicial en CumulativeSavingsChart.tsx.
C.3 Payback label superpuesto (TECH_DEBT — trivial)
Ajustar offset del label "Payback · X meses" para que no colisione con eje Y. ~15 min.
C.4 Badge ⚡ — evaluar tamaño (TECH_DEBT)
Evaluar 16×16px o 18×18px. Si no genera colisiones en nodos chicos: implementar y reportar. Si genera problemas: mantener 14×14px y documentar.
Criterio de aceptación:
- Tabla muestra desglose de recursos por actividad
- CumulativeSavingsChart arranca en
-automationInvestment - Payback label no colisiona con eje Y
- Validación visual del director aprobada
Feature D — UX rápidos (Etapa 4)
Peso estimado: 10% del sprint.
D.1 Edición inline de nombre de proceso y cliente
Problema: requiere ir a configuración global. En un taller interrumpe el flujo.
Versión mínima: campo editable inline en el header del workspace (click para editar, Enter/blur para guardar).
Versión con wow: animación sutil texto → input → texto, guardado con checkmark naranja breve que desaparece en 1.5s.
Criterio de aceptación:
- Se puede editar nombre y cliente sin ir a configuración
- Los cambios persisten en IndexedDB
- Validación visual del director aprobada
Feature E — PDF: recursos + verificación de truncamiento (Etapa 5)
Peso estimado: 15% del sprint.
E.1 Tabla de recursos en PDF (procesos Actual/Automatizado)
Sección condicional al final del PDF (solo si hay actividades con recursos asignados):
- Tabla: Actividad | Recurso | Tipo | Costo/hora | Minutos | Unidades | Costo
- Subtotal por actividad
- Si ninguna actividad tiene recursos: la sección no aparece
Versión mínima: tabla simple. Versión con wow: chip de color por tipo de recurso (rol = naranja, sistema = azul slate, persona = verde, equipamiento = gris, insumo = amarillo).
E.2 Verificación de truncamiento (TECH_DEBT)
Test E2E que valide ancho de cada línea en los tres PDFs. Si pasa → cerrar ítem. Si hay truncamiento → aplicar doc.splitTextToSize().
Criterio de aceptación:
- Sección de recursos aparece cuando hay datos, no aparece cuando no hay
- Test E2E confirma ausencia de truncamiento en los tres PDFs
- Validación visual del director aprobada
5. Estructura de etapas
| Etapa | Contenido | Peso |
|---|---|---|
| 1 | Migración modelo: utilizationPercent → utilizationMinutes + units. Dexie v3. Tests unitarios. |
15% |
| 2 | ActivityPanel "wow": inputs minutos/unidades, cálculo tiempo real, helper contextual | 20% |
| 3 | Reporte web: desglose recursos por actividad (expandible), CumulativeSavingsChart -inversión, payback fix, badge | 20% |
| 4 | UX rápidos: edición inline proceso/cliente | 10% |
| 5 | PDF: tabla recursos + verificación truncamiento | 15% |
| 6 | E2E tests completos + validación visual director | 10% |
| (buffer) | (imprevistos o profundizar wow) | 10% |
Regla operativa: ninguna etapa arranca sin su ETAPA_X_PROMPT.md aprobado por el director.
6. Lo que explícitamente NO entra en Sprint 2
- Catálogo global de recursos compartido entre procesos → Sprint 3
- Recursos en escenario automatizado (TO-BE) → Sprint 3 con Modelo B
- Múltiples simulaciones / historial de escenarios → Sprint 3
- Distribuciones de probabilidad → Fase 2
- Export Excel → Backlog sin driver urgente
- Modo oscuro, i18n, PWA → Fase 2
- Login, multi-tenant, colaboración → Fase 2
7. Deuda técnica que se cierra en este sprint
| Ítem en TECH_DEBT.md | Etapa |
|---|---|
CumulativeSavingsChart arranca en -inversión (web) |
3 |
| Payback label superpuesto con eje Y | 3 |
| Badge ⚡ tamaño (evaluar 16-18px) | 3 |
| Verificación truncamiento notas metodológicas PDF | 5 |
8. Definition of Done — Sprint 2
- Features A–E: todos los criterios de aceptación cumplen
- Migración Dexie v2→v3: test automatizado confirma preservación de datos
- Tests unitarios: fórmula nueva, edge cases (sin recursos, units > 1, solo fijo, mixto)
- E2E: flujo completo asignar recurso → simular → verificar costo en reporte → exportar PDF
- Validación visual: reporte web con desglose, PDF con tabla de recursos, chart con -inversión
- TECH_DEBT.md actualizado: ítems cerrados documentados
- OBSERVATIONS.md limpio al cerrar
- STRATEGIC_DIRECTION.md actualizado con reflexiones post-sprint
- Ratio web/PDF respetado (verificar con conteo de etapas)
9. Riesgos
| Riesgo | Probabilidad | Mitigación |
|---|---|---|
La migración de utilizationPercent → utilizationMinutes produce valores incorrectos en procesos existentes |
Media | Test de migración obligatorio antes de cualquier otra etapa. La heurística es conservadora (redondeo hacia abajo). |
El helper contextual en ActivityPanel requiere acceso a annualFrequency del proceso |
Baja | useReportData o contexto del workspace ya tiene el proceso. Verificar en Etapa 2. |
| La tabla de recursos en PDF excede el espacio disponible en página 4 | Media | Diseñar como página separada si supera el espacio. Sección completamente condicional. |
10. Referencias
CLAUDE.md(simulador-web) — reglas de implementaciónSTRATEGIC_DIRECTION.md— decisiones estratégicas post-Sprint 1.5BACKLOG.md— ítems "Recursos", "Edición inline"TECH_DEBT.md— ítems CumulativeSavingsChart, Payback, Badge, Truncamientomethodology/PATTERNS.md— C.6, C.1methodology/ANTI_PATTERNS.md— AP.8sprints/sprint-1-5/BRIEF.md— manual de marca completo y tokens CSSassets/InQ manual de marca- 3.0.pdf— manual de marca oficial