📄 Documentado: definido, especificado, con HTML/PDF/Excel del pack — pero no codificado/ejecutable. La mayoría del pack está acá (es lo correcto para etapa de validación).
🛠 Prototipado: existe artefacto técnico funcional (script, SQL ejecutable, módulo) — pero no integrado a producción.
⚙ Codificado: en repo, funciona, testeado — pero todavía no corre con tráfico real.
🚀 Productivo: corriendo en cliente piloto con tráfico real.
Honestidad ante todo: este pack tiene grandeza conceptual y arquitectónica. NO es producto corriendo. Mostrar esta matriz a un CTO/inversor es lo más sólido que podés hacer — vende confianza por transparencia, no por inflar.
| ID | Activo | Categoría | Estado | Prio | Fuente | Fase | Qué falta para el siguiente estado |
|---|---|---|---|---|---|---|---|
| Cargando… | |||||||
🎯 Cómo usar esta matriz
Para vos (planificación): filtrá por estado = 📄 Documentado + prioridad = P1. Esos son los que más impacto tienen al pasar a 🛠 Prototipado o ⚙ Codificado.
Para socio técnico/CTO: abrí esta vista en la reunión. La transparencia sobre dónde está cada cosa genera más confianza que diapositivas perfectas. Acepta el "todavía no" y muestra que tenés plan.
Para inversor: el porcentaje arriba ("avance ponderado") es honesto y defendible. Sumá una historia: "estamos en X%, en 3 meses con piloto + 1 dev senior llegamos a Y%, en 12 meses con equipo de 4 llegamos a Z%". Cronograma realista > aspiración inflada.
Seeds Empresa Demo Cuyo S.A.
Empresa canónica del MVP. Comercialización de insumos para la construcción en Mendoza / San Juan, modelo mayorista-minorista con sucursales, depósito, vendedores, stock y cobranza. La narrativa elegida para la demo es "crecimiento no rentable": las ventas crecen, el margen cae, los descuentos suben, la cobranza se estira y aparecen acciones vencidas — el caso típico que FARO Connect debe detectar y bajar a foco ejecutivo.
Cantidades por entidad (V024)
| Entidad | Cantidad | Detalle |
|---|---|---|
| Empresa demo | 1 | Empresa Demo Cuyo S.A. · rubro construction_supplies · AR |
| Sucursales | 3 | Mendoza Central, San Juan, Depósito Central Cuyo |
| Áreas | 8 | Dirección, Comercial, Finanzas, Stock, Compras, Operaciones, RRHH, Administración |
| Usuarios demo | 8 | Director, Gerente General, Comercial, Finanzas, Stock, Compras, 2 Vendedores |
| Roles base | 10 | Fallback canónico (faro_owner, company_admin, director, etc.) |
| Asignaciones de roles | 5 | Director, GG, Comercial, Finanzas, Stock |
| Fuentes de datos | 6 | Ventas CSV, Stock XLSX, Cobranza CSV, Productos, Clientes, Acciones |
| Lotes de ingesta | 3 | Batch mayo 2026 (ventas + stock + cobranza) |
| Productos | 10 | Cemento, hierro, porcelanato, grifería, termofusión, adhesivo, loza, membrana |
| Clientes | 8 | Constructoras, desarrolladores, arquitectos, maestros, mineros, mostrador |
| Proveedores | 5 | Cemento, hierro, pisos, instalaciones, grifería |
| Empleados/vendedores | 6 | Incluye 2 vendedores con perfiles opuestos (alto descuento vs rentable) |
| Ventas fact | 10 | Mayo 2026 · margen erosionado, descuentos altos visibles en datos reales |
| Stock snapshots | 8 | Incluye crítico (cemento/hierro/TF-20) e inmovilizado (porcelanato/grifería) |
| Cuentas por cobrar | 6 | Cliente Obras Cuyo con mora 47 días (riesgo alto) |
| KPI definitions | 8 | KPI-SAL-001..003 · KPI-FIN-001..002 · KPI-STK-001..002 · KPI-ACT-001 |
| KPI snapshots | 8 | Mayo 2026 vs abril referencia · 3 critical, 3 warning, 0 ok-ok |
| Señales (derivadas de KPIs) | 8 | SIG-SALES-UP, SIG-MARGIN-DOWN, SIG-DISCOUNT-UP, etc. |
| Reglas (rule_definitions) | 5 | RULE-TNS-001..005 (códigos provisorios · ver patch SQL-003.1) |
| Tensiones | 5 | Crecimiento no rentable, Venta sin caja, Stock crítico, Stock inmovilizado, Acciones |
| Acciones | 7 | Política descuentos, comisiones, cobranza, reposición, liquidación, regularizar, reporte |
| Evidencias | 3 | Gestión cobranza, reporte semanal, borrador política descuentos |
| Score snapshots | 2 | Abril 74 (good) → Mayo 66 (warning) · delta −8 |
| Reporte semanal | 1 | REP-WEEKLY-2026-W22 · ejecutivo con top tensiones + foco recomendado |
| Notificaciones | 3 | Email a Director, Comercial, Finanzas, Stock |
IDs determinísticos principales (UUIDs fijos)
El seed usa UUIDs fijos para reproducibilidad de pruebas y demos. Esto permite que tests, fixtures y queries de validación apunten a los mismos identificadores en cualquier entorno.
| Entidad | UUID |
|---|---|
| Empresa Demo Cuyo S.A. | 10000000-0000-0000-0000-000000000001 |
| Sucursal Mendoza Central | 11000000-0000-0000-0000-000000000001 |
| Sucursal San Juan | 11000000-0000-0000-0000-000000000002 |
| Depósito Central Cuyo | 11000000-0000-0000-0000-000000000003 |
| Usuario Director | 12000000-0000-0000-0000-000000000001 |
| Usuario Gerente General | 12000000-0000-0000-0000-000000000002 |
| Usuario Comercial | 12000000-0000-0000-0000-000000000003 |
| Usuario Finanzas | 12000000-0000-0000-0000-000000000004 |
| Usuario Stock | 12000000-0000-0000-0000-000000000005 |
Fragmento representativo del V024
Este es un extracto ilustrativo. Para el SQL verbatim completo, ver pack-build/sql/FARO-SQL-003-seeds-empresa-demo.md (725+ líneas).
-- FARO-SQL-003 · V024__seed_demo_company.sql
BEGIN;
SELECT set_config('app.company_id', '10000000-0000-0000-0000-000000000001', true);
SELECT set_config('app.user_id', '12000000-0000-0000-0000-000000000001', true);
-- 1. EMPRESA DEMO
INSERT INTO faro.companies (company_id, company_code, legal_name, ...)
VALUES (
'10000000-0000-0000-0000-000000000001',
'EMP_DEMO_CUYO',
'Empresa Demo Cuyo S.A.',
...,
'{"demo": true, "mvp_scope": ["sales","margin","discounts","stock","receivables","actions","score"]}'::jsonb
)
ON CONFLICT (company_id) DO UPDATE SET ...;
-- 17. KPI SNAPSHOTS · mayo 2026 vs abril referencia
INSERT INTO faro.kpi_snapshots (kpi_code, value, reference_value, delta_pct, status, ...)
VALUES
('KPI-SAL-002', 0.2130, 0.2800, -0.2392, 'critical', ...), -- margen cae
('KPI-SAL-003', 0.1230, 0.0620, 0.9838, 'critical', ...), -- descuentos suben
('KPI-FIN-002', 3800000, 1800000, 1.1111, 'critical', ...), -- mora vencida ×2
...;
-- 25. FARO SCORE · 74 (abril) → 66 (mayo · warning)
INSERT INTO faro.score_snapshots (period_start, score_value, previous_score_value, delta_value, ...)
VALUES
('2026-04-01', 74, NULL, NULL, 'good', ...),
('2026-05-01', 66, 74, -8, 'warning', ...);
COMMIT;
Idempotencia garantizada: usa
ON CONFLICT DO NOTHING (o DO UPDATE donde aplica) en todas las inserciones. Re-ejecutarlo no rompe el estado.
UUIDs fijos: facilitan testing pero significan que no se puede correr el seed dos veces para "más empresas". Para datasets reales, ver
FARO-DEMO-001 (no implementado aún).
Datos ficticios: no usar nombres de empresas reales. El seed simula el flujo, no contabilidad perfecta.
Cross-references: catalogo-tensiones-mvp.html (catálogo TNS canónico) · modelo-sql.html (DDL base) · contrato-datos-mvp.html (esquema de datos)
Patch V027 · Alineación con catálogos canónicos
FARO-SQL-003 quedó con códigos provisorios de tensión (TNS-002, TNS-003, TNS-004, TNS-005) anteriores al congelamiento del Catálogo Canónico (catalogo-tensiones-mvp.html). Este patch reasigna esos códigos a los oficiales TNS-004 (Venta sin caja), TNS-006 (Stock crítico), TNS-007 (Stock inmovilizado), TNS-009 (Acciones vencidas) y agrega TNS-010 (Acciones sin evidencia), separando lo que el seed viejo mezclaba.
TNS-004 (canónico = Venta sin caja) mientras la demo tiene cargado TNS-004 = Stock inmovilizado. Resultado: "el dato está, pero no aparece". Cada módulo (SQL, YAML, motor, UI, tests, reportes) habla un idioma distinto.
Regla de gobierno: el número de
RULE-TNS-NNN debe coincidir con el número de TNS-NNN. Nada de RULE-TNS-002 disparando TNS-004. Técnicamente se puede. Operativamente es una trampa.
Mapeo antes → después
| Tensión (significado) | Código viejo (seed V024) | Código canónico (V027) | Rule code |
|---|---|---|---|
| Crecimiento no rentable | TNS-001 | TNS-001 ✓ ok | RULE-TNS-001 |
| Venta sin conversión a caja | TNS-002 | TNS-004 | RULE-TNS-004 |
| Stock crítico en productos de alta rotación | TNS-003 | TNS-006 | RULE-TNS-006 |
| Stock inmovilizado | TNS-004 | TNS-007 | RULE-TNS-007 |
| Acciones vencidas | TNS-005 (mezclado) | TNS-009 | RULE-TNS-009 |
| Acciones sin evidencia | TNS-005 (mezclado) | TNS-010 (nuevo) | RULE-TNS-010 |
El patch también alinea action_code de ACT-001..007 a ACT-COM-001, ACT-COM-002, ACT-FIN-001, ACT-STK-001, ACT-STK-003, ACT-OPS-001, ACT-DIR-001 + nueva ACT-OPS-002.
Fragmento representativo del V027
-- FARO-SQL-003.1 · V027__patch_demo_company_align_canonical_tns.sql
BEGIN;
-- 1. PREFLIGHT (bloquea si falta FARO-SQL-004 o tension_definitions canónicas)
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.tables
WHERE table_schema='faro' AND table_name='tension_definitions') THEN
RAISE EXCEPTION 'FARO-SQL-004 must be applied before FARO-SQL-003.1.';
END IF;
IF (SELECT COUNT(*) FROM faro.tension_definitions
WHERE tension_code IN ('TNS-001','TNS-004','TNS-006','TNS-007','TNS-009','TNS-010')
AND status='active') < 6 THEN
RAISE EXCEPTION 'Canonical tension definitions required for demo patch are missing.';
END IF;
END $$;
-- 2. UPDATE rule_definitions · reasignar códigos canónicos
UPDATE faro.rule_definitions SET rule_code='RULE-TNS-007', name='Stock inmovilizado', ...
WHERE rule_id='20000000-0000-0000-0000-000000000004'; -- antes RULE-TNS-004
UPDATE faro.rule_definitions SET rule_code='RULE-TNS-006', name='Stock crítico...', ...
WHERE rule_id='20000000-0000-0000-0000-000000000003'; -- antes RULE-TNS-003
UPDATE faro.rule_definitions SET rule_code='RULE-TNS-004', name='Venta sin conversión a caja', ...
WHERE rule_id='20000000-0000-0000-0000-000000000002'; -- antes RULE-TNS-002
-- 3. INSERT nueva regla TNS-010 (Acciones sin evidencia)
INSERT INTO faro.rule_definitions (...) VALUES ('20000000-0000-0000-0000-000000000010', ...);
-- 5. UPDATE tensions · reasignar tension_code canónico + payload enriquecido
UPDATE faro.tensions SET tension_code='TNS-004', title='Venta sin conversión a caja', ...
WHERE tension_id='22000000-0000-0000-0000-000000000002';
-- 6. UPDATE actions · canonical action_code (ACT-001 → ACT-COM-001, etc.)
-- 8. UPDATE score_snapshots · components.main_tensions = ["TNS-001","TNS-004","TNS-006","TNS-007","TNS-009","TNS-010"]
-- 9. UPDATE reports · reporte semanal con códigos canónicos · score 74 → 66
COMMIT;
Preflight check (obligatorio antes de aplicar)
El patch bloquea automáticamente la ejecución si las dependencias canónicas no están aplicadas. No requiere intervención manual.
-- Bloquea si faltan:
-- a) tabla faro.tension_definitions (creada por FARO-SQL-004)
-- b) las 6 fichas canónicas TNS-001, TNS-004, TNS-006, TNS-007, TNS-009, TNS-010 con status='active'
7 validaciones SQL posteriores
Después de aplicar V027, correr estas validaciones para confirmar consistencia. Ninguna debe devolver filas inesperadas.
| # | Validación | Resultado esperado |
|---|---|---|
7.1 | Tensiones demo alineadas con catálogo canónico | TNS-001, TNS-004, TNS-006, TNS-007, TNS-009, TNS-010 visibles |
7.2 | No deben quedar tensiones fuera de catálogo | 0 filas |
7.3 | Rule code debe coincidir con tension code | 0 filas (regla de gobierno) |
7.4 | Reglas demo activas esperadas (6 reglas) | RULE-TNS-001/004/006/007/009/010 |
7.5 | Acciones con evidencia requerida (true + closure_criteria + codes) | Todas las acciones con campos no vacíos |
7.6 | Reporte semanal con códigos canónicos en top_tensions | Incluye TNS-001, 004, 006, 009, 010 |
7.7 | Score snapshot con main_tensions canónicas | Array con los 6 códigos finales |
FARO-SQL-003 (V024), entonces DEBE ejecutarse FARO-SQL-003.1 (V027) antes de cualquier UI, motor evaluador o reporte. No es opcional.
Orden de aplicación:
V001..V0NN (SQL-001 DDL base) → V0NN (SQL-002 RLS) → V0NN (SQL-004 catálogo TNS canónico) → V024 (SQL-003 seed demo) → V027 (SQL-003.1 patch alineación).
El patch es idempotente: se puede correr varias veces sin romper el estado.
Cross-references: catalogo-tensiones-mvp.html (catálogo canónico TNS-001..030) · modelo-sql.html (DDL base) · contrato-datos-mvp.html