feat: MVP Fase 0 — Process Cost Platform v0.1.0

Plataforma completa de análisis de costos operativos basada en BPMN 2.0.

Funcionalidades incluidas:
- Import de archivos BPMN 2.0 por drag & drop + 3 procesos de ejemplo
- Visualización read-only del diagrama (bpmn-js)
- Configuración de actividades (costo, tiempo, recursos asignados)
- CRUD de recursos (rol, persona, sistema, equipo, insumo)
- Configuración global (moneda, overhead %, nombre, cliente)
- Motor de simulación determinístico agregado con propagación de gateways XOR/AND
- Reporte visual con mapa de calor en dos modos (relativo/absoluto)
- Gráficos: KPIs, top actividades, composición, costo por recurso
- Export PDF (jsPDF + html2canvas) y CSV (papaparse)
- Persistencia en IndexedDB (Dexie)
- 268 tests unitarios/integración + 6 E2E con Playwright
- Deploy: https://process-cost-platform.pages.dev

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 01:58:40 -03:00
commit bed161c92a
97 changed files with 19638 additions and 0 deletions

92
src/styles/globals.css Normal file
View File

@@ -0,0 +1,92 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
@import 'bpmn-js/dist/assets/diagram-js.css';
@import 'bpmn-js/dist/assets/bpmn-js.css';
@import 'bpmn-js/dist/assets/bpmn-font/css/bpmn.css';
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 221.2 83.2% 53.3%;
--radius: 0.5rem;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground font-sans;
font-feature-settings: "rlig" 1, "calt" 1;
}
.font-mono {
font-family: 'JetBrains Mono', monospace;
}
}
/* ── bpmn-js canvas ─────────────────────────────────────────── */
.bpmn-container .djs-container {
background: #f8fafc; /* slate-50 */
}
/* Elemento seleccionado desde nuestro código */
.bpmn-container .bpmn-selected .djs-visual > :first-child {
stroke: hsl(var(--primary)) !important;
stroke-width: 2.5px !important;
}
/* Elemento clickeable: cursor pointer en tasks */
.bpmn-container .djs-element[data-element-id] {
cursor: default;
}
/* Hover visual en tasks */
.bpmn-container .djs-shape:hover .djs-visual > rect,
.bpmn-container .djs-shape:hover .djs-visual > path {
filter: brightness(0.97);
}
/* heatmap overlays — para la Etapa 5 */
.heatmap-overlay {
pointer-events: none;
transition: fill 0.3s ease;
}
/* Asegurar que bpmn-js ocupa todo su contenedor */
.bpmn-container .djs-container svg {
width: 100% !important;
height: 100% !important;
}
/* Cursor pointer sobre tasks en el heatmap del reporte */
.bpmn-container .djs-shape[data-element-id] .djs-hit {
cursor: default;
}
/* Selección en el heatmap del reporte — stroke más prominente */
.bpmn-container .bpmn-selected .djs-visual > rect {
stroke: hsl(var(--primary)) !important;
stroke-width: 3px !important;
stroke-dasharray: none !important;
}