Código inmutable
Una vez asignado, ACT-COM-001 = Revisar política de descuentos nunca se reutiliza para otra acción. Reutilizar códigos rompe el histórico, los reportes de ejecución y los tests.
Verdad oficial de ACT-COM / FIN / STK / PUR / OPS / DQ / DIR que rige motor evaluador, reglas YAML, UI operativa, demo de Empresa Demo Cuyo S.A., tests y reportes. Coexiste con la biblioteca extendida de 300 acciones (v2) con mapeo bidireccional.
Este catálogo establece 31 acciones canónicas agrupadas en 7 familias (ACT-COM/FIN/STK/PUR/OPS/DQ/DIR) que son la fuente única de verdad de FARO Connect MVP. Si un código ACT-* no está acá, el motor evaluador no debería poder recomendarlo ni la UI proponerlo.
FARO maneja dos namespaces de acciones que coexisten intencionalmente:
ACT-COM-001..008, ACT-FIN-001..006, ACT-STK-001..005, ACT-PUR-001..003, ACT-OPS-001..003, ACT-DQ-001..003, ACT-DIR-001..003 que rigen el motor evaluador, las reglas YAML, la UI operativa, la demo en Empresa Demo Cuyo S.A., los tests de integración y los reportes del primer release.ACT-NNN indexados por área/módulo. Vive en biblioteca-acciones.html y existe para roadmap multi-industria, RACI 105 y workflow. Mapea con el MVP en la sección 11.La regla dura: ninguna tensión, regla YAML o motor evaluador puede disparar una action_code que no esté en faro.action_definitions con status = 'active'. El parser de reglas rechaza códigos desconocidos con UNKNOWN_ACTION_CODE. Cada acción disparada hereda automáticamente del catálogo: responsable por defecto, aprobador, SLA en días, criterio de cierre, evidencia requerida, impacto esperado en FARO Score y tensiones que la justifican.
El salto conceptual es claro: antes las tensiones recomendaban textos libres de acción que se interpretaban distinto en cada módulo; ahora recomiendan códigos canónicos con dueño, plazo, evidencia y criterio de cierre. Pasamos de "sugerencia" a "sistema de ejecución".
Nota sobre conteo. El documento fuente FARO-SQL-005 dice "30 acciones MVP", pero la lista nominal y el seed V029 contienen 31 INSERTs (8+6+5+3+3+3+3). El HTML refleja la realidad del seed: 31 acciones. La validación 10.7 del doc original ya muestra esta distribución (commercial=8, finance=6, stock=5, purchasing=3, operations=3, data_quality=3, direction=3 = 31).
Antes de tocar cualquier código ACT-*, leer estas reglas. Romperlas se nota seis meses después cuando una acción cerrada en producción no tiene evidencia, no tiene dueño o no tiene criterio de cierre. Y la gente se acostumbra a "cerrar de palabra".
Una vez asignado, ACT-COM-001 = Revisar política de descuentos nunca se reutiliza para otra acción. Reutilizar códigos rompe el histórico, los reportes de ejecución y los tests.
Si una acción deja de usarse, pasa a status = archived. Borrar acciones rompe las referencias en actions históricas y en evidencias cargadas.
Si cambia SLA, dueño por defecto o criterio de cierre, se incrementa version. El action_code base se mantiene. UNIQUE (action_code, version) + índice único parcial por activo.
Valores permitidos: corrective, preventive, follow_up, approval, analysis, escalation, data_quality, governance. No se inventan nuevos sin migración.
Si evidence_required_codes está vacío, la acción no entra al catálogo MVP. Sin evidencia el cierre se reduce a "ya está hecho" en una reunión.
El campo closure_criteria es obligatorio y no puede ser texto vacío. Define cuándo una acción está realmente terminada, no solo "marcada como cerrada".
Prioridad critical implica SLA ≤ 3 días. Prioridad high ≤ 10 días. Prioridad medium ≤ 21 días. El motor valida coherencia entre default_priority y default_sla_days.
YAML, parser, motor, UI, tests y reportes consumen faro.action_definitions. Prohibido ACTION_CATALOG hardcodeado en código de aplicación. La función faro.action_code_exists() es la verificación oficial.
Las 31 acciones se agrupan en 7 familias funcionales. Cada familia tiene un código prefijo estable, un rango numérico propio y una "promesa ejecutiva" diferenciada.
Política de descuentos, comisiones, autorizaciones, vendedores, mix, sucursales, cartera de clientes y ticket promedio.
Cobranza prioritaria, bloqueo de crédito, plan de cobranza semanal, límites, proyección de caja 30/60/90 y renegociación con proveedores.
Reposición priorizada, transferencias entre sucursales, liquidación de inmovilizado, registro de ventas perdidas y revisión de cobertura.
Revisión de proveedor/costo crítico, renegociación de proveedor crítico y bloqueo de reposición sin rotación.
Regularizar acciones vencidas, exigir evidencia de cierre y asignar responsable faltante. Disciplina de ejecución pura.
Corregir fuente de datos, validar KPI crítico con baja confianza y regularizar reporte semanal ejecutivo.
Escalar tensión a dirección, convocar comité ejecutivo por reincidencia y aprobar cambio de política crítica.
Toda acción MVP cumple este contrato. Es lo que define faro.action_definitions en SQL y lo que el motor evaluador puede esperar al instanciar una acción a partir de una tensión disparada.
| Campo | Tipo | Descripción | Ejemplo (ACT-COM-001) |
|---|---|---|---|
action_definition_id | uuid · pk | Identificador interno; UUID v4 generado por la base. | gen_random_uuid() |
action_code | text · unique | Código canónico inmutable. Formato ACT-FAM-NNN. | ACT-COM-001 |
name | text | Nombre canónico ejecutivo de la acción. | Revisar política de descuentos |
short_name | text · null | Nombre corto para tablas densas y UI compacta. | Política descuentos |
action_family | text | Familia funcional. Valores MVP: commercial, finance, stock, purchasing, operations, data_quality, direction. | commercial |
area_code | text | Área organizacional donde se ejecuta. | commercial |
module_code | text | Módulo FARO específico dentro del área. | discounts |
description | text | Qué hace técnicamente la acción (1-2 líneas). | Analizar descuentos por vendedor, producto, cliente y sucursal; definir límites y excepciones. |
executive_purpose | text | Para qué sirve a dirección. Lectura ejecutiva. | Recuperar margen y evitar crecimiento comprado con descuentos excesivos. |
action_type | enum | Tipo de acción. Valores: corrective, preventive, follow_up, approval, analysis, escalation, data_quality, governance. | corrective |
default_priority | enum | Prioridad base. Valores: low, medium, high, critical. | critical |
default_sla_days | integer ≥ 1 | SLA por defecto en días para el cierre. | 7 |
default_owner_role | text | Rol responsable por defecto. | commercial_manager |
approver_role | text · null | Rol aprobador por defecto. | general_manager |
evidence_required | boolean | Si la acción requiere evidencia documentada para cerrar. | true |
evidence_required_codes | text[] | Códigos canónicos de evidencia obligatoria. | EVD-007 EVD-012 |
closure_criteria | text | Criterio mínimo para considerar cerrada la acción. | Nueva política de descuentos aprobada por dirección y comunicada al equipo comercial. |
success_metric | text · null | Métrica que indica que la acción tuvo impacto. | Reducción del descuento promedio y recuperación de margen bruto. |
expected_business_impact | text · null | Impacto ejecutivo esperado sobre el negocio. | Mejora de margen, disciplina comercial y rentabilidad. |
score_dimension | text | Dimensión del FARO Score que la acción ayuda a recuperar. | commercial_health |
expected_score_recovery_min / max | numeric(9,4) | Rango de recuperación esperada de FARO Score (positivo). | +3 a +8 |
triggered_by_tensions | text[] | Tensiones que normalmente recomiendan esta acción. | TNS-001 TNS-002 TNS-007 TNS-014 TNS-015 |
industry_scope | text[] | Industrias donde aplica. Default: ['all']. | commercial retail distribution |
module_scope | text[] | Módulos operativos relacionados. | sales discounts margin |
status | enum | Estado: active, inactive, archived. Default active. | active |
version | integer | Versión semántica de la acción. Default 1. | 1 |
metadata | jsonb | Metadatos libres (canonical, mvp, flags). | {"canonical": true, "mvp": true} |
La DDL real (sección 8) agrega además created_at, updated_at, el constraint UNIQUE (action_code, version), el índice único parcial por status='active' y 7 índices secundarios (familia, área, módulo, prioridad, status, GIN sobre evidencia y GIN sobre tensiones).
Una ficha por acción con código, familia, prioridad, SLA, dueño y aprobador, evidencia requerida, criterio de cierre, impacto esperado y tensiones que la disparan (clickeables hacia catalogo-tensiones-mvp.html).
Analizar descuentos aplicados por vendedor, producto, cliente y sucursal; definir límites y excepciones.
Recuperar margen y evitar crecimiento comprado con descuentos excesivos.
EVD-007EVD-012Evaluar si el esquema de comisión incentiva ventas de bajo margen o descuentos excesivos.
Alinear incentivos comerciales con rentabilidad y no solo con facturación.
EVD-010EVD-012Definir límites de descuento por rol y circuito de aprobación para excepciones.
Evitar descuentos discrecionales que erosionan margen sin aprobación.
EVD-007EVD-012Analizar vendedores por venta, margen, descuento, mix, cobranza y reincidencia de tensiones.
Detectar si el problema comercial está concentrado en responsables específicos.
EVD-010EVD-012Revisar familias de producto con bajo margen, baja rotación o descuentos recurrentes.
Reorientar el mix comercial hacia familias más rentables o estratégicas.
EVD-010EVD-012Analizar caída de ventas por sucursal y ejecutar plan de recuperación comercial.
Evitar que una sucursal pierda ritmo mientras el promedio general oculta el problema.
EVD-010EVD-012Definir acciones para reducir dependencia de pocos clientes relevantes.
Bajar riesgo comercial por concentración de ventas.
EVD-010EVD-012Diseñar acciones comerciales para recuperar ticket promedio mediante bundles, venta cruzada o foco por familia.
Mejorar eficiencia comercial sin depender solo de descuentos.
EVD-010Gestionar clientes con mora relevante y registrar contacto, acuerdo o resultado.
Convertir venta pendiente en caja y reducir exposición de riesgo.
EVD-011EVD-006Suspender o limitar venta a crédito a clientes con mora crítica o límite excedido.
Evitar que la empresa siga aumentando exposición financiera sobre clientes de riesgo.
EVD-011EVD-012Crear plan semanal de cobranza con clientes prioritarios, responsables y vencimientos.
Pasar de cobranza reactiva a cobranza gobernada.
EVD-010EVD-011Revisar límites de crédito por cliente según mora, volumen, historial y riesgo.
Alinear crédito comercial con capacidad de pago real.
EVD-010EVD-012Preparar proyección de caja con cobranzas esperadas, pagos críticos y escenarios.
Anticipar insuficiencia de caja y ordenar decisiones financieras.
EVD-010EVD-012Renegociar vencimientos críticos con proveedores para proteger caja y abastecimiento.
Evitar tensión financiera-operativa por presión de pagos y necesidad de stock.
EVD-011EVD-012Priorizar reposición de productos críticos según rotación, cobertura, ventas y margen.
Evitar quiebres de stock en productos relevantes.
EVD-005EVD-002Mover stock disponible desde sucursales con excedente hacia sucursales con cobertura crítica.
Resolver faltantes antes de comprar más cuando hay stock disponible en otra ubicación.
EVD-002EVD-005Definir plan controlado para vender, transferir, devolver o liquidar stock inmovilizado.
Liberar capital atrapado sin destruir margen innecesariamente.
EVD-010EVD-012Implementar registro de ventas perdidas por falta de stock.
Medir el costo real del quiebre de stock.
EVD-002EVD-004Actualizar stocks mínimos, puntos de pedido y cobertura objetivo por producto.
Evitar reposición reactiva y quiebres recurrentes.
EVD-010EVD-012Analizar proveedor, costo, plazo, condición comercial y alternativas de abastecimiento.
Corregir problemas de costo, demora o dependencia de proveedor.
EVD-010EVD-012Renegociar condiciones con proveedor crítico por precio, plazo, entrega o financiación.
Reducir dependencia, sobrecosto o demora recurrente.
EVD-011EVD-012Bloquear o exigir aprobación para compras de productos con baja rotación o stock inmovilizado.
Evitar seguir comprando productos que no se venden o que inmovilizan caja.
EVD-007EVD-012Revisar acciones vencidas y definir cierre, reprogramación, evidencia o escalamiento.
Recuperar disciplina de ejecución.
EVD-004EVD-012Solicitar evidencia faltante para validar cierre real de acciones.
Evitar cierres ficticios o no comprobables.
EVD-004EVD-012Asignar responsable a acciones o tensiones críticas sin dueño.
Evitar que problemas críticos queden sin accountability.
EVD-004Revisar origen, frecuencia, responsable, formato y errores de una fuente crítica.
Recuperar confiabilidad de datos para decisiones ejecutivas.
EVD-002EVD-004Revisar fórmula, fuente, consistencia y confianza de un KPI crítico.
Evitar decisiones basadas en indicadores poco confiables.
EVD-002EVD-004Asegurar generación y entrega del reporte ejecutivo semanal con KPIs y tensiones actualizadas.
Garantizar visibilidad semanal para dirección.
EVD-010EVD-012Elevar tensión crítica o bloqueada a dirección para decisión ejecutiva.
Asegurar que los temas críticos no queden atascados en mandos medios.
EVD-010EVD-012Convocar reunión ejecutiva para tensión crítica reincidente y definir cambio estructural.
Resolver problemas que el workflow normal no está logrando corregir.
EVD-010EVD-012Aprobar formalmente cambios de política comercial, financiera, stock, crédito o datos.
Evitar que decisiones críticas queden como recomendaciones no implementadas.
EVD-007EVD-012La distribución refleja dónde se concentra el trabajo operativo del MVP: comercial y finanzas dominan (45% del catálogo) porque ahí se juega la rentabilidad y la caja; las familias de gobierno (OPS/DQ/DIR) son más chicas pero cubren los pilares de ejecución y datos.
ACT-COM-001 a 008. Política de descuentos, comisiones, autorizaciones, vendedores, mix, sucursales, cartera, ticket.
ACT-FIN-001 a 006. Cobranza, bloqueo de crédito, plan semanal, límites, proyección de caja, renegociación.
ACT-STK-001 a 005. Reposición, transferencias, liquidación, ventas perdidas, cobertura.
ACT-PUR-001 a 003. Proveedor crítico, renegociación, bloqueo sin rotación.
ACT-OPS-001 a 003. Vencidas, evidencia, responsable faltante.
ACT-DQ-001 a 003. Fuente, KPI con baja confianza, reporte semanal.
ACT-DIR-001 a 003. Escalamiento, comité de reincidencia, aprobación de política.
Distribución por action_type (8 valores enum): corrective · 12 | analysis · 5 | follow_up · 4 | preventive · 3 | data_quality · 3 | escalation · 2 | governance · 1 | approval · 1.
Distribución por default_priority: critical · 10 | high · 14 | medium · 7 | low · 0. Toda acción tiene prioridad asignada; el MVP no permite acciones de baja prioridad porque la operación no necesita ruido.
Distribución por SLA en días: 1d · 1 | 2d · 4 | 3d · 4 | 5d · 4 | 7d · 7 | 10d · 5 | 14d · 3 | 21d · 1. Promedio ponderado ≈ 7.4 días.
Vista densa para escanear todo el catálogo de un golpe. Click en el código abre la ficha en sección 5; click en el código de tensión abre la ficha correspondiente en catalogo-tensiones-mvp.html.
| Código | Acción | Familia | Tipo | Prio | SLA | Owner → Aprobador | Evidencia | Score dim | Tensiones |
|---|---|---|---|---|---|---|---|---|---|
ACT-COM-001 | Revisar política de descuentos | commercial | corrective | CRT | 7d | commercial_manager → general_manager | EVD-007 EVD-012 | commercial_health | TNS-001 TNS-002 TNS-007 TNS-014 TNS-015 |
ACT-COM-002 | Revisar comisiones vinculadas a margen | commercial | analysis | HI | 10d | general_manager → director | EVD-010 EVD-012 | commercial_execution | TNS-001 TNS-003 |
ACT-COM-003 | Bloquear descuentos fuera de autorización | commercial | corrective | CRT | 5d | commercial_manager → general_manager | EVD-007 EVD-012 | margin_health | TNS-001 TNS-002 TNS-003 TNS-015 |
ACT-COM-004 | Revisar performance comercial por vendedor | commercial | analysis | HI | 7d | commercial_manager → general_manager | EVD-010 EVD-012 | commercial_execution | TNS-003 TNS-011 TNS-012 TNS-013 |
ACT-COM-005 | Rediseñar mix comercial por familia | commercial | analysis | MED | 14d | commercial_manager → general_manager | EVD-010 EVD-012 | margin_health | TNS-014 TNS-015 TNS-025 |
ACT-COM-006 | Recuperar ventas de sucursal relevante | commercial | corrective | HI | 10d | commercial_manager → general_manager | EVD-010 EVD-012 | branch_commercial_health | TNS-013 |
ACT-COM-007 | Diversificar cartera de clientes | commercial | preventive | MED | 21d | commercial_manager → general_manager | EVD-010 EVD-012 | commercial_risk | TNS-011 |
ACT-COM-008 | Mejorar ticket promedio y venta cruzada | commercial | corrective | MED | 14d | commercial_manager → general_manager | EVD-010 | commercial_health | TNS-012 |
ACT-FIN-001 | Priorizar cobranza de clientes vencidos | finance | corrective | CRT | 3d | finance_manager → general_manager | EVD-011 EVD-006 | cash_health | TNS-004 TNS-005 TNS-018 TNS-020 |
ACT-FIN-002 | Bloquear venta a crédito de cliente crítico | finance | corrective | CRT | 2d | finance_manager → general_manager | EVD-011 EVD-012 | cash_risk | TNS-004 TNS-005 TNS-016 |
ACT-FIN-003 | Definir plan de cobranza semanal | finance | corrective | HI | 5d | finance_manager → general_manager | EVD-010 EVD-011 | cash_execution | TNS-004 TNS-018 TNS-019 TNS-020 |
ACT-FIN-004 | Revisar límites de crédito | finance | analysis | HI | 7d | finance_manager → general_manager | EVD-010 EVD-012 | credit_risk | TNS-005 TNS-016 |
ACT-FIN-005 | Preparar proyección de caja 30/60/90 | finance | analysis | CRT | 3d | finance_manager → director | EVD-010 EVD-012 | cash_risk | TNS-019 |
ACT-FIN-006 | Renegociar pagos críticos a proveedores | finance | corrective | HI | 5d | finance_manager → director | EVD-011 EVD-012 | cash_stock_health | TNS-019 TNS-024 |
ACT-STK-001 | Generar reposición priorizada | stock | corrective | HI | 3d | stock_manager → general_manager | EVD-005 EVD-002 | stock_health | TNS-006 TNS-008 TNS-021 |
ACT-STK-002 | Transferir stock entre sucursales | stock | corrective | HI | 3d | stock_manager → general_manager | EVD-002 EVD-005 | stock_health | TNS-006 TNS-021 |
ACT-STK-003 | Liquidar stock inmovilizado controladamente | stock | corrective | MED | 10d | stock_manager → general_manager | EVD-010 EVD-012 | stock_cash_health | TNS-007 TNS-024 TNS-025 |
ACT-STK-004 | Registrar ventas perdidas por quiebre | stock | data_quality | MED | 7d | stock_manager → general_manager | EVD-002 EVD-004 | data_stock_health | TNS-021 |
ACT-STK-005 | Revisar stock mínimo y cobertura | stock | preventive | HI | 10d | stock_manager → general_manager | EVD-010 EVD-012 | stock_execution | TNS-006 TNS-008 TNS-021 |
ACT-PUR-001 | Revisar proveedor/costo crítico | purchasing | analysis | HI | 7d | purchasing_manager → general_manager | EVD-010 EVD-012 | purchasing_health | TNS-008 TNS-014 TNS-022 TNS-023 TNS-025 |
ACT-PUR-002 | Renegociar proveedor crítico | purchasing | corrective | HI | 10d | purchasing_manager → general_manager | EVD-011 EVD-012 | supplier_stock_risk | TNS-023 TNS-024 |
ACT-PUR-003 | Bloquear reposición sin rotación suficiente | purchasing | preventive | MED | 7d | purchasing_manager → general_manager | EVD-007 EVD-012 | stock_purchasing_health | TNS-025 TNS-007 |
ACT-OPS-001 | Regularizar acciones vencidas | operations | follow_up | HI | 2d | general_manager → director | EVD-004 EVD-012 | execution_health | TNS-009 TNS-029 |
ACT-OPS-002 | Exigir evidencia de cierre | operations | follow_up | HI | 2d | general_manager → director | EVD-004 EVD-012 | execution_trust | TNS-010 TNS-020 TNS-030 |
ACT-OPS-003 | Asignar responsable faltante | operations | governance | CRT | 1d | general_manager → director | EVD-004 | governance_execution | TNS-029 |
ACT-DQ-001 | Corregir fuente de datos | data_quality | data_quality | HI | 3d | data_owner → general_manager | EVD-002 EVD-004 | data_quality | TNS-026 TNS-027 TNS-028 |
ACT-DQ-002 | Validar KPI crítico con baja confianza | data_quality | data_quality | HI | 3d | data_owner → general_manager | EVD-002 EVD-004 | data_trust | TNS-028 |
ACT-DQ-003 | Regularizar reporte semanal ejecutivo | data_quality | follow_up | HI | 2d | general_manager → director | EVD-010 EVD-012 | direction_data_health | TNS-026 |
ACT-DIR-001 | Escalar tensión a dirección | direction | escalation | CRT | 2d | general_manager → director | EVD-010 EVD-012 | direction_execution | TNS-009 TNS-010 TNS-019 TNS-023 TNS-024 TNS-026 TNS-029 TNS-030 |
ACT-DIR-002 | Convocar comité ejecutivo por reincidencia | direction | escalation | CRT | 3d | general_manager → director | EVD-010 EVD-012 | learning_execution | TNS-030 |
ACT-DIR-003 | Aprobar cambio de política crítica | direction | approval | HI | 5d | general_manager → director | EVD-007 EVD-012 | governance_execution | TNS-001 TNS-002 TNS-016 TNS-026 TNS-030 |
Definición oficial de la tabla canónica. Incluye constraints sobre action_type y default_priority como enums textuales, UNIQUE (action_code, version), índice único parcial por status = 'active' y dos índices GIN sobre arrays (evidence_required_codes y triggered_by_tensions) para joins rápidos en el motor evaluador.
-- ============================================================ -- FARO-SQL-005 · V028__create_action_definitions.sql -- Catálogo canónico de acciones FARO MVP -- Engine: PostgreSQL 15+ -- ============================================================ CREATE TABLE IF NOT EXISTS faro.action_definitions ( action_definition_id uuid PRIMARY KEY DEFAULT gen_random_uuid(), action_code text NOT NULL, name text NOT NULL, short_name text NULL, action_family text NOT NULL, area_code text NOT NULL, module_code text NOT NULL, description text NOT NULL, executive_purpose text NOT NULL, action_type text NOT NULL CHECK ( action_type IN ( 'corrective', 'preventive', 'follow_up', 'approval', 'analysis', 'escalation', 'data_quality', 'governance' ) ), default_priority text NOT NULL CHECK ( default_priority IN ('low', 'medium', 'high', 'critical') ), default_sla_days integer NOT NULL CHECK (default_sla_days >= 1), default_owner_role text NOT NULL, approver_role text NULL, evidence_required boolean NOT NULL DEFAULT true, evidence_required_codes text[] NOT NULL DEFAULT ARRAY[]::text[], closure_criteria text NOT NULL, success_metric text NULL, expected_business_impact text NULL, score_dimension text NOT NULL, expected_score_recovery_min numeric(9,4) NOT NULL DEFAULT 0, expected_score_recovery_max numeric(9,4) NOT NULL DEFAULT 0, triggered_by_tensions text[] NOT NULL DEFAULT ARRAY[]::text[], industry_scope text[] NOT NULL DEFAULT ARRAY['all']::text[], module_scope text[] NOT NULL DEFAULT ARRAY[]::text[], status text NOT NULL DEFAULT 'active' CHECK ( status IN ('active', 'inactive', 'archived') ), version integer NOT NULL DEFAULT 1, metadata jsonb NOT NULL DEFAULT '{}'::jsonb, created_at timestamptz NOT NULL DEFAULT now(), updated_at timestamptz NOT NULL DEFAULT now(), CONSTRAINT uq_action_definitions_code_version UNIQUE (action_code, version) ); CREATE UNIQUE INDEX IF NOT EXISTS uq_action_definitions_one_active_per_code ON faro.action_definitions (action_code) WHERE status = 'active'; CREATE INDEX IF NOT EXISTS idx_action_definitions_code ON faro.action_definitions (action_code); CREATE INDEX IF NOT EXISTS idx_action_definitions_family ON faro.action_definitions (action_family); CREATE INDEX IF NOT EXISTS idx_action_definitions_area ON faro.action_definitions (area_code); CREATE INDEX IF NOT EXISTS idx_action_definitions_module ON faro.action_definitions (module_code); CREATE INDEX IF NOT EXISTS idx_action_definitions_priority ON faro.action_definitions (default_priority); CREATE INDEX IF NOT EXISTS idx_action_definitions_status ON faro.action_definitions (status); CREATE INDEX IF NOT EXISTS idx_action_definitions_evidence ON faro.action_definitions USING gin (evidence_required_codes); CREATE INDEX IF NOT EXISTS idx_action_definitions_tensions ON faro.action_definitions USING gin (triggered_by_tensions); COMMENT ON TABLE faro.action_definitions IS 'Catálogo canónico de acciones FARO. Define las acciones oficiales que el motor puede recomendar o crear.'; COMMENT ON COLUMN faro.action_definitions.action_code IS 'Código canónico de acción. Ejemplo: ACT-COM-001. No debe reutilizarse para otra acción.'; COMMENT ON COLUMN faro.action_definitions.closure_criteria IS 'Criterio mínimo para considerar cerrada la acción.'; COMMENT ON COLUMN faro.action_definitions.evidence_required_codes IS 'Códigos de evidencia requeridos para validar cierre.'; COMMENT ON COLUMN faro.action_definitions.triggered_by_tensions IS 'Tensiones que normalmente recomiendan esta acción.';
Seed oficial de FARO-SQL-005. Las 31 entradas se presentan in extenso, idénticas al archivo fuente V029__seed_action_definitions_mvp.sql. El cierre con ON CONFLICT (action_code, version) DO UPDATE SET ... updated_at = now() hace que la migración sea idempotente: aplicar dos veces produce el mismo estado final.
-- ============================================================ -- FARO-SQL-005 · V029__seed_action_definitions_mvp.sql -- Seed Catálogo Canónico de Acciones MVP FARO -- Version: v1.0 -- ============================================================ BEGIN; INSERT INTO faro.action_definitions ( action_code, name, short_name, action_family, area_code, module_code, description, executive_purpose, action_type, default_priority, default_sla_days, default_owner_role, approver_role, evidence_required, evidence_required_codes, closure_criteria, success_metric, expected_business_impact, score_dimension, expected_score_recovery_min, expected_score_recovery_max, triggered_by_tensions, industry_scope, module_scope, status, version, metadata ) VALUES -- ============================================================ -- COMERCIAL -- ============================================================ ( 'ACT-COM-001', 'Revisar política de descuentos', 'Política descuentos', 'commercial', 'commercial', 'discounts', 'Analizar descuentos aplicados por vendedor, producto, cliente y sucursal; definir límites y excepciones.', 'Recuperar margen y evitar crecimiento comprado con descuentos excesivos.', 'corrective', 'critical', 7, 'commercial_manager', 'general_manager', true, ARRAY['EVD-007','EVD-012'], 'Nueva política de descuentos aprobada por dirección y comunicada al equipo comercial.', 'Reducción del descuento promedio y recuperación de margen bruto.', 'Mejora de margen, disciplina comercial y rentabilidad.', 'commercial_health', 3, 8, ARRAY['TNS-001','TNS-002','TNS-007','TNS-014','TNS-015'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['sales','discounts','margin'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-002', 'Revisar comisiones vinculadas a margen', 'Comisiones margen', 'commercial', 'commercial', 'commissions', 'Evaluar si el esquema de comisión incentiva ventas de bajo margen o descuentos excesivos.', 'Alinear incentivos comerciales con rentabilidad y no solo con facturación.', 'analysis', 'high', 10, 'general_manager', 'director', true, ARRAY['EVD-010','EVD-012'], 'Propuesta de esquema de comisiones revisada y aprobada por dirección.', 'Reducción de ventas de bajo margen y mejora del margen por vendedor.', 'Mejora de rentabilidad y calidad comercial.', 'commercial_execution', 2, 6, ARRAY['TNS-001','TNS-003'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['sales','margin','employees','commissions'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-003', 'Bloquear descuentos fuera de autorización', 'Bloquear descuentos', 'commercial', 'commercial', 'authorizations', 'Definir límites de descuento por rol y circuito de aprobación para excepciones.', 'Evitar descuentos discrecionales que erosionan margen sin aprobación.', 'corrective', 'critical', 5, 'commercial_manager', 'general_manager', true, ARRAY['EVD-007','EVD-012'], 'Regla de autorización activa o política aprobada con responsables definidos.', 'Disminución de descuentos fuera de política.', 'Mejora inmediata de control comercial y margen.', 'margin_health', 3, 8, ARRAY['TNS-001','TNS-002','TNS-003','TNS-015'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['sales','discounts','workflow'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-004', 'Revisar performance comercial por vendedor', 'Performance vendedor', 'commercial', 'commercial', 'salespeople', 'Analizar vendedores por venta, margen, descuento, mix, cobranza y reincidencia de tensiones.', 'Detectar si el problema comercial está concentrado en responsables específicos.', 'analysis', 'high', 7, 'commercial_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Informe por vendedor revisado y plan de mejora o decisión ejecutiva registrada.', 'Mejora de margen por vendedor y reducción de descuentos excepcionales.', 'Mejora de calidad de venta y accountability comercial.', 'commercial_execution', 2, 6, ARRAY['TNS-003','TNS-011','TNS-012','TNS-013'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['sales','employees','performance'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-005', 'Rediseñar mix comercial por familia', 'Mix comercial', 'commercial', 'commercial', 'product_mix', 'Revisar familias de producto con bajo margen, baja rotación o descuentos recurrentes.', 'Reorientar el mix comercial hacia familias más rentables o estratégicas.', 'analysis', 'medium', 14, 'commercial_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Plan de mix comercial aprobado con familias objetivo, margen mínimo y política de venta.', 'Mejora del margen por familia y reducción de ventas no rentables.', 'Mejora de rentabilidad estructural.', 'margin_health', 2, 5, ARRAY['TNS-014','TNS-015','TNS-025'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['sales','products','margin'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-006', 'Recuperar ventas de sucursal relevante', 'Recuperar sucursal', 'commercial', 'commercial', 'branch_sales', 'Analizar caída de ventas por sucursal y ejecutar plan de recuperación comercial.', 'Evitar que una sucursal pierda ritmo mientras el promedio general oculta el problema.', 'corrective', 'high', 10, 'commercial_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Plan de recuperación aprobado con responsables, metas y seguimiento semanal.', 'Recuperación de ventas y margen en sucursal afectada.', 'Mejora de performance por sucursal.', 'branch_commercial_health', 2, 6, ARRAY['TNS-013'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['sales','branches'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-007', 'Diversificar cartera de clientes', 'Diversificar clientes', 'commercial', 'commercial', 'customers', 'Definir acciones para reducir dependencia de pocos clientes relevantes.', 'Bajar riesgo comercial por concentración de ventas.', 'preventive', 'medium', 21, 'commercial_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Plan de diversificación aprobado con segmentos objetivo y metas de captación.', 'Reducción de concentración de ventas en top clientes.', 'Reducción de riesgo comercial.', 'commercial_risk', 1, 5, ARRAY['TNS-011'], ARRAY['commercial','distribution','services'], ARRAY['sales','customers','risk'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-COM-008', 'Mejorar ticket promedio y venta cruzada', 'Ticket y cross-sell', 'commercial', 'commercial', 'ticket', 'Diseñar acciones comerciales para recuperar ticket promedio mediante bundles, venta cruzada o foco por familia.', 'Mejorar eficiencia comercial sin depender solo de descuentos.', 'corrective', 'medium', 14, 'commercial_manager', 'general_manager', true, ARRAY['EVD-010'], 'Plan comercial validado con acciones de ticket, familias objetivo y seguimiento.', 'Mejora del ticket promedio y margen por operación.', 'Mayor productividad comercial.', 'commercial_health', 1, 4, ARRAY['TNS-012'], ARRAY['commercial','retail','distribution'], ARRAY['sales','ticket','cross_sell'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), -- ============================================================ -- FINANZAS -- ============================================================ ( 'ACT-FIN-001', 'Priorizar cobranza de clientes vencidos', 'Cobranza prioritaria', 'finance', 'finance', 'receivables', 'Gestionar clientes con mora relevante y registrar contacto, acuerdo o resultado.', 'Convertir venta pendiente en caja y reducir exposición de riesgo.', 'corrective', 'critical', 3, 'finance_manager', 'general_manager', true, ARRAY['EVD-011','EVD-006'], 'Cliente contactado y acuerdo de pago, comprobante o gestión documentada cargada como evidencia.', 'Reducción de mora vencida y días de cobranza.', 'Mejora de caja y reducción de riesgo financiero.', 'cash_health', 3, 9, ARRAY['TNS-004','TNS-005','TNS-018','TNS-020'], ARRAY['commercial','distribution','services','construction_supplies'], ARRAY['receivables','collections','cash'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-FIN-002', 'Bloquear venta a crédito de cliente crítico', 'Bloquear crédito', 'finance', 'finance', 'credit_risk', 'Suspender o limitar venta a crédito a clientes con mora crítica o límite excedido.', 'Evitar que la empresa siga aumentando exposición financiera sobre clientes de riesgo.', 'corrective', 'critical', 2, 'finance_manager', 'general_manager', true, ARRAY['EVD-011','EVD-012'], 'Restricción aprobada y comunicada; cliente marcado con condición comercial actualizada.', 'Reducción de exposición crediticia.', 'Menor riesgo de incobrabilidad.', 'cash_risk', 3, 8, ARRAY['TNS-004','TNS-005','TNS-016'], ARRAY['commercial','distribution','services','construction_supplies'], ARRAY['credit','receivables','customers'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-FIN-003', 'Definir plan de cobranza semanal', 'Plan cobranza semanal', 'finance', 'finance', 'collections', 'Crear plan semanal de cobranza con clientes prioritarios, responsables y vencimientos.', 'Pasar de cobranza reactiva a cobranza gobernada.', 'corrective', 'high', 5, 'finance_manager', 'general_manager', true, ARRAY['EVD-010','EVD-011'], 'Plan semanal cargado con responsables, clientes priorizados y seguimiento.', 'Reducción de mora y mejora de previsibilidad de caja.', 'Mejora de ejecución financiera.', 'cash_execution', 2, 7, ARRAY['TNS-004','TNS-018','TNS-019','TNS-020'], ARRAY['commercial','distribution','services','construction_supplies'], ARRAY['collections','cash','workflow'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-FIN-004', 'Revisar límites de crédito', 'Límites de crédito', 'finance', 'finance', 'credit_policy', 'Revisar límites de crédito por cliente según mora, volumen, historial y riesgo.', 'Alinear crédito comercial con capacidad de pago real.', 'analysis', 'high', 7, 'finance_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Nueva matriz de límites de crédito aprobada.', 'Reducción de clientes excedidos y exposición financiera.', 'Mejor control de riesgo crediticio.', 'credit_risk', 2, 7, ARRAY['TNS-005','TNS-016'], ARRAY['commercial','distribution','services','construction_supplies'], ARRAY['credit','customers','risk'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-FIN-005', 'Preparar proyección de caja 30/60/90', 'Caja 30/60/90', 'finance', 'finance', 'cash_projection', 'Preparar proyección de caja con cobranzas esperadas, pagos críticos y escenarios.', 'Anticipar insuficiencia de caja y ordenar decisiones financieras.', 'analysis', 'critical', 3, 'finance_manager', 'director', true, ARRAY['EVD-010','EVD-012'], 'Proyección de caja aprobada con escenario base, crítico y acciones definidas.', 'Mayor visibilidad de caja y reducción de decisiones reactivas.', 'Mejora de control financiero.', 'cash_risk', 3, 9, ARRAY['TNS-019'], ARRAY['all'], ARRAY['cash','finance','planning'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-FIN-006', 'Renegociar pagos críticos a proveedores', 'Renegociar proveedores', 'finance', 'finance', 'supplier_payments', 'Renegociar vencimientos críticos con proveedores para proteger caja y abastecimiento.', 'Evitar tensión financiera-operativa por presión de pagos y necesidad de stock.', 'corrective', 'high', 5, 'finance_manager', 'director', true, ARRAY['EVD-011','EVD-012'], 'Acuerdo con proveedor documentado o plan de pago aprobado.', 'Reducción de presión de caja y riesgo de corte de abastecimiento.', 'Mejora de equilibrio caja-stock-proveedores.', 'cash_stock_health', 2, 7, ARRAY['TNS-019','TNS-024'], ARRAY['commercial','distribution','manufacturing','construction_supplies'], ARRAY['finance','suppliers','payments'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), -- ============================================================ -- STOCK -- ============================================================ ( 'ACT-STK-001', 'Generar reposición priorizada', 'Reposición priorizada', 'stock', 'stock', 'replenishment', 'Priorizar reposición de productos críticos según rotación, cobertura, ventas y margen.', 'Evitar quiebres de stock en productos relevantes.', 'corrective', 'high', 3, 'stock_manager', 'general_manager', true, ARRAY['EVD-005','EVD-002'], 'Orden de compra emitida, proveedor confirmado o reposición planificada con fecha.', 'Reducción de productos con cobertura crítica.', 'Mejora de disponibilidad y reducción de ventas perdidas.', 'stock_health', 3, 8, ARRAY['TNS-006','TNS-008','TNS-021'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['stock','replenishment','purchasing'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-STK-002', 'Transferir stock entre sucursales', 'Transferencia stock', 'stock', 'stock', 'transfers', 'Mover stock disponible desde sucursales con excedente hacia sucursales con cobertura crítica.', 'Resolver faltantes antes de comprar más cuando hay stock disponible en otra ubicación.', 'corrective', 'high', 3, 'stock_manager', 'general_manager', true, ARRAY['EVD-002','EVD-005'], 'Transferencia registrada, aprobada y ejecutada o programada.', 'Reducción de faltantes y mejor uso del inventario existente.', 'Mejora de eficiencia de stock.', 'stock_health', 2, 6, ARRAY['TNS-006','TNS-021'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['stock','branches','transfers'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-STK-003', 'Liquidar stock inmovilizado controladamente', 'Liquidar stock inmovilizado', 'stock', 'stock', 'stock_rotation', 'Definir plan controlado para vender, transferir, devolver o liquidar stock inmovilizado.', 'Liberar capital atrapado sin destruir margen innecesariamente.', 'corrective', 'medium', 10, 'stock_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Plan aprobado con SKUs, descuentos máximos, responsables y plazo.', 'Reducción de valor inmovilizado y mejora de rotación.', 'Liberación de caja y mejora de salud de stock.', 'stock_cash_health', 2, 7, ARRAY['TNS-007','TNS-024','TNS-025'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['stock','rotation','sales'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-STK-004', 'Registrar ventas perdidas por quiebre', 'Registrar ventas perdidas', 'stock', 'stock', 'lost_sales', 'Implementar registro de ventas perdidas por falta de stock.', 'Medir el costo real del quiebre de stock.', 'data_quality', 'medium', 7, 'stock_manager', 'general_manager', true, ARRAY['EVD-002','EVD-004'], 'Registro implementado y primera carga validada.', 'Visibilidad de venta perdida por producto y sucursal.', 'Mejora de calidad de decisión sobre reposición.', 'data_stock_health', 1, 5, ARRAY['TNS-021'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['stock','sales','lost_sales','data_quality'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-STK-005', 'Revisar stock mínimo y cobertura', 'Stock mínimo', 'stock', 'stock', 'coverage_policy', 'Actualizar stocks mínimos, puntos de pedido y cobertura objetivo por producto.', 'Evitar reposición reactiva y quiebres recurrentes.', 'preventive', 'high', 10, 'stock_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Nueva política de cobertura aprobada y comunicada.', 'Reducción de quiebres y compras urgentes.', 'Mejora de planificación de stock.', 'stock_execution', 2, 6, ARRAY['TNS-006','TNS-008','TNS-021'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['stock','coverage','replenishment'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), -- ============================================================ -- COMPRAS -- ============================================================ ( 'ACT-PUR-001', 'Revisar proveedor/costo crítico', 'Proveedor/costo crítico', 'purchasing', 'purchasing', 'supplier_cost', 'Analizar proveedor, costo, plazo, condición comercial y alternativas de abastecimiento.', 'Corregir problemas de costo, demora o dependencia de proveedor.', 'analysis', 'high', 7, 'purchasing_manager', 'general_manager', true, ARRAY['EVD-010','EVD-012'], 'Análisis proveedor/costo validado y decisión documentada.', 'Reducción de sobrecosto o riesgo de abastecimiento.', 'Mejora de margen y disponibilidad.', 'purchasing_health', 2, 7, ARRAY['TNS-008','TNS-014','TNS-022','TNS-023','TNS-025'], ARRAY['commercial','retail','distribution','manufacturing','construction_supplies'], ARRAY['purchasing','suppliers','costs'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-PUR-002', 'Renegociar proveedor crítico', 'Renegociar proveedor', 'purchasing', 'purchasing', 'supplier_negotiation', 'Renegociar condiciones con proveedor crítico por precio, plazo, entrega o financiación.', 'Reducir dependencia, sobrecosto o demora recurrente.', 'corrective', 'high', 10, 'purchasing_manager', 'general_manager', true, ARRAY['EVD-011','EVD-012'], 'Nueva condición, acuerdo o alternativa de proveedor documentada.', 'Mejora de costo, plazo o cumplimiento.', 'Mejora de compras y abastecimiento.', 'supplier_stock_risk', 2, 7, ARRAY['TNS-023','TNS-024'], ARRAY['commercial','retail','distribution','manufacturing','construction_supplies'], ARRAY['purchasing','suppliers'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-PUR-003', 'Bloquear reposición sin rotación suficiente', 'Bloquear reposición sin rotación', 'purchasing', 'purchasing', 'purchase_control', 'Bloquear o exigir aprobación para compras de productos con baja rotación o stock inmovilizado.', 'Evitar seguir comprando productos que no se venden o que inmovilizan caja.', 'preventive', 'medium', 7, 'purchasing_manager', 'general_manager', true, ARRAY['EVD-007','EVD-012'], 'Política de compra o autorización implementada para productos de baja rotación.', 'Reducción de compras innecesarias y stock inmovilizado.', 'Mejora de caja y rotación.', 'stock_purchasing_health', 1, 5, ARRAY['TNS-025','TNS-007'], ARRAY['commercial','retail','distribution','construction_supplies'], ARRAY['purchasing','stock','rotation'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), -- ============================================================ -- OPERACIONES / EJECUCION -- ============================================================ ( 'ACT-OPS-001', 'Regularizar acciones vencidas', 'Regularizar vencidas', 'operations', 'direction', 'workflow', 'Revisar acciones vencidas y definir cierre, reprogramación, evidencia o escalamiento.', 'Recuperar disciplina de ejecución.', 'follow_up', 'high', 2, 'general_manager', 'director', true, ARRAY['EVD-004','EVD-012'], 'Acciones vencidas regularizadas, cerradas con evidencia, reprogramadas o escaladas.', 'Reducción de acciones vencidas.', 'Mejora de ejecución y accountability.', 'execution_health', 2, 7, ARRAY['TNS-009','TNS-029'], ARRAY['all'], ARRAY['actions','workflow','execution'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-OPS-002', 'Exigir evidencia de cierre', 'Exigir evidencia', 'operations', 'direction', 'evidence', 'Solicitar evidencia faltante para validar cierre real de acciones.', 'Evitar cierres ficticios o no comprobables.', 'follow_up', 'high', 2, 'general_manager', 'director', true, ARRAY['EVD-004','EVD-012'], 'Evidencia cargada, revisada y aprobada por responsable correspondiente.', 'Reducción de acciones sin evidencia.', 'Mejora de confianza de ejecución.', 'execution_trust', 2, 7, ARRAY['TNS-010','TNS-020','TNS-030'], ARRAY['all'], ARRAY['actions','evidence','workflow'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-OPS-003', 'Asignar responsable faltante', 'Asignar responsable', 'operations', 'direction', 'raci', 'Asignar responsable a acciones o tensiones críticas sin dueño.', 'Evitar que problemas críticos queden sin accountability.', 'governance', 'critical', 1, 'general_manager', 'director', true, ARRAY['EVD-004'], 'Responsable asignado y notificado; vencimiento definido.', 'Eliminación de acciones críticas sin responsable.', 'Mejora de gobierno y ejecución.', 'governance_execution', 2, 6, ARRAY['TNS-029'], ARRAY['all'], ARRAY['actions','raci','governance'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), -- ============================================================ -- DATA QUALITY -- ============================================================ ( 'ACT-DQ-001', 'Corregir fuente de datos', 'Corregir fuente', 'data_quality', 'data', 'data_sources', 'Revisar origen, frecuencia, responsable, formato y errores de una fuente crítica.', 'Recuperar confiabilidad de datos para decisiones ejecutivas.', 'data_quality', 'high', 3, 'data_owner', 'general_manager', true, ARRAY['EVD-002','EVD-004'], 'Fuente corregida, carga validada o responsable asignado con evidencia.', 'Mejora de calidad, frescura y disponibilidad del dato.', 'Mejora de confianza del sistema.', 'data_quality', 2, 8, ARRAY['TNS-026','TNS-027','TNS-028'], ARRAY['all'], ARRAY['data_sources','ingestion','data_quality'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-DQ-002', 'Validar KPI crítico con baja confianza', 'Validar KPI crítico', 'data_quality', 'data', 'kpi_confidence', 'Revisar fórmula, fuente, consistencia y confianza de un KPI crítico.', 'Evitar decisiones basadas en indicadores poco confiables.', 'data_quality', 'high', 3, 'data_owner', 'general_manager', true, ARRAY['EVD-002','EVD-004'], 'KPI validado, corregido o marcado como no confiable con explicación.', 'Mejora de confianza del KPI.', 'Mayor confiabilidad ejecutiva.', 'data_trust', 2, 8, ARRAY['TNS-028'], ARRAY['all'], ARRAY['kpis','data_quality','confidence'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-DQ-003', 'Regularizar reporte semanal ejecutivo', 'Reporte semanal', 'data_quality', 'direction', 'reports', 'Asegurar generación y entrega del reporte ejecutivo semanal con KPIs y tensiones actualizadas.', 'Garantizar visibilidad semanal para dirección.', 'follow_up', 'high', 2, 'general_manager', 'director', true, ARRAY['EVD-010','EVD-012'], 'Reporte semanal generado, revisado y entregado a dirección.', 'Mejora de visibilidad ejecutiva.', 'Mejora de dirección y control.', 'direction_data_health', 2, 6, ARRAY['TNS-026'], ARRAY['all'], ARRAY['reports','direction','data_quality'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), -- ============================================================ -- DIRECCION -- ============================================================ ( 'ACT-DIR-001', 'Escalar tensión a dirección', 'Escalar dirección', 'direction', 'direction', 'executive_escalation', 'Elevar tensión crítica o bloqueada a dirección para decisión ejecutiva.', 'Asegurar que los temas críticos no queden atascados en mandos medios.', 'escalation', 'critical', 2, 'general_manager', 'director', true, ARRAY['EVD-010','EVD-012'], 'Decisión ejecutiva documentada con responsable, vencimiento y seguimiento.', 'Resolución o destrabe de tensión crítica.', 'Mejora de gobierno ejecutivo.', 'direction_execution', 2, 8, ARRAY['TNS-009','TNS-010','TNS-019','TNS-023','TNS-024','TNS-026','TNS-029','TNS-030'], ARRAY['all'], ARRAY['direction','escalation','governance'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-DIR-002', 'Convocar comité ejecutivo por reincidencia', 'Comité reincidencia', 'direction', 'direction', 'executive_committee', 'Convocar reunión ejecutiva para tensión crítica reincidente y definir cambio estructural.', 'Resolver problemas que el workflow normal no está logrando corregir.', 'escalation', 'critical', 3, 'general_manager', 'director', true, ARRAY['EVD-010','EVD-012'], 'Comité realizado con acta, decisión, responsables y acciones derivadas.', 'Reducción de reincidencia de tensiones críticas.', 'Mejora de aprendizaje y gobierno.', 'learning_execution', 3, 9, ARRAY['TNS-030'], ARRAY['all'], ARRAY['direction','learning','governance'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ), ( 'ACT-DIR-003', 'Aprobar cambio de política crítica', 'Aprobar política', 'direction', 'direction', 'policy_approval', 'Aprobar formalmente cambios de política comercial, financiera, stock, crédito o datos.', 'Evitar que decisiones críticas queden como recomendaciones no implementadas.', 'approval', 'high', 5, 'general_manager', 'director', true, ARRAY['EVD-007','EVD-012'], 'Política crítica aprobada y comunicada a los responsables.', 'Implementación formal de cambio de política.', 'Mejora de gobierno y control.', 'governance_execution', 2, 7, ARRAY['TNS-001','TNS-002','TNS-016','TNS-026','TNS-030'], ARRAY['all'], ARRAY['direction','policy','governance'], 'active', 1, '{"canonical": true, "mvp": true}'::jsonb ) ON CONFLICT (action_code, version) DO UPDATE SET name = EXCLUDED.name, short_name = EXCLUDED.short_name, action_family = EXCLUDED.action_family, area_code = EXCLUDED.area_code, module_code = EXCLUDED.module_code, description = EXCLUDED.description, executive_purpose = EXCLUDED.executive_purpose, action_type = EXCLUDED.action_type, default_priority = EXCLUDED.default_priority, default_sla_days = EXCLUDED.default_sla_days, default_owner_role = EXCLUDED.default_owner_role, approver_role = EXCLUDED.approver_role, evidence_required = EXCLUDED.evidence_required, evidence_required_codes = EXCLUDED.evidence_required_codes, closure_criteria = EXCLUDED.closure_criteria, success_metric = EXCLUDED.success_metric, expected_business_impact = EXCLUDED.expected_business_impact, score_dimension = EXCLUDED.score_dimension, expected_score_recovery_min = EXCLUDED.expected_score_recovery_min, expected_score_recovery_max = EXCLUDED.expected_score_recovery_max, triggered_by_tensions = EXCLUDED.triggered_by_tensions, industry_scope = EXCLUDED.industry_scope, module_scope = EXCLUDED.module_scope, status = EXCLUDED.status, metadata = EXCLUDED.metadata, updated_at = now(); COMMIT;
Verbatim del seed oficial. Las 31 entradas se presentan in extenso y sin recortes, idénticas a FARO-SQL-005 · V029__seed_action_definitions_mvp.sql. El cierre con ON CONFLICT (action_code, version) DO UPDATE SET ... updated_at = now() hace que la migración sea idempotente: aplicar dos veces produce el mismo estado final.
Ejecutar en orden después de aplicar V028 + V029. Cada query verifica una condición del contrato canónico. Si alguna falla, el seed no se considera aceptado y el motor evaluador no debería arrancar contra esta base.
El catálogo MVP debe tener exactamente 31 registros con status = 'active'. El doc fuente dice 30; el seed real es 31. Esta query refleja la realidad del seed.
SELECT COUNT(*) AS active_actions FROM faro.action_definitions WHERE status = 'active';
El índice único parcial uq_action_definitions_one_active_per_code debería prevenirlo, pero esta query lo verifica explícitamente.
SELECT action_code, COUNT(*) AS total FROM faro.action_definitions WHERE status = 'active' GROUP BY action_code HAVING COUNT(*) > 1;
Regla 05 del gobierno: sin evidencia no hay cierre confiable. evidence_required = true y evidence_required_codes con al menos un elemento.
SELECT action_code, name FROM faro.action_definitions WHERE status = 'active' AND ( evidence_required = false OR cardinality(evidence_required_codes) = 0 );
Regla 06: closure_criteria es obligatorio y no puede ser cadena vacía. Sin criterio, "cerrar" no significa nada operativo.
SELECT action_code, name FROM faro.action_definitions WHERE status = 'active' AND ( closure_criteria IS NULL OR trim(closure_criteria) = '' );
Validación cruzada: para cada tension_definitions.recommended_actions[], el código debe existir activo en action_definitions. Sin esto, una tensión podría disparar una acción fantasma.
SELECT td.tension_code, td.name AS tension_name, action_code FROM faro.tension_definitions td CROSS JOIN LATERAL unnest(td.recommended_actions) AS action_code LEFT JOIN faro.action_definitions ad ON ad.action_code = action_code AND ad.status = 'active' WHERE td.status = 'active' AND ad.action_code IS NULL;
Regla 07: critical ≤ 3 días, high ≤ 10 días, medium ≤ 21 días. Si una acción critical tiene SLA de 14 días, el catálogo está mintiendo sobre su urgencia.
SELECT action_code, name, default_priority, default_sla_days FROM faro.action_definitions WHERE status = 'active' AND ( (default_priority = 'critical' AND default_sla_days > 3) OR (default_priority = 'high' AND default_sla_days > 10) OR (default_priority = 'medium' AND default_sla_days > 21) );
Verifica la distribución esperada: commercial=8, finance=6, stock=5, purchasing=3, operations=3, data_quality=3, direction=3 (total 31).
SELECT action_family, COUNT(*) AS total FROM faro.action_definitions WHERE status = 'active' GROUP BY action_family ORDER BY action_family;
Cada acción MVP del catálogo tiene una equivalencia conceptual (directa, parcial o múltiple) en biblioteca-acciones.html. El mapeo se resolvió cruzando las tensiones MVP → tensiones v2 → acciones v2 disparadas por esas tensiones.
Convención de mapeo. Directo = 1 acción v2 cubre el caso. Parcial = la v2 cubre un caso adyacente pero no aísla el vector específico del MVP (descuento, evidencia, reincidencia, comisiones). Múltiples = 2-3 acciones v2 cubren juntas el alcance MVP.
| MVP | Nombre canónico MVP | Equivalente conceptual en biblioteca v2 (300) | Estado |
|---|---|---|---|
ACT-COM-001 | Revisar política de descuentos | ACT-002 · Recuperar resultado en ventas que erosionan conversión rentableACT-014 · Recuperar resultado en margen que erosiona rentabilidad sostenidaCubre conversión rentable + erosión de margen; v2 no aísla "política de descuento" como vector. | Múltiples |
ACT-COM-002 | Revisar comisiones vinculadas a margen | ACT-098 · Recuperar resultado en dotación que erosiona productividad humanaCubre productividad humana / incentivos; v2 no aísla esquema de comisiones comerciales. | Parcial |
ACT-COM-003 | Bloquear descuentos fuera de autorización | ACT-002 · Recuperar resultado en ventas que erosionan conversión rentableCubre erosión de conversión rentable; v2 no aísla el circuito de autorización por rol. | Parcial |
ACT-COM-004 | Revisar performance comercial por vendedor | ACT-001 · Recuperar resultado en ventas con alta actividad pero bajo resultadoACT-098 · Recuperar resultado en dotación que erosiona productividad humanaActividad sin resultado + productividad humana; v2 no aísla análisis por vendedor individual. | Múltiples |
ACT-COM-005 | Rediseñar mix comercial por familia | ACT-015 · Activar foco ejecutivo sobre margen fuera de ritmo contra planCubre margen fuera de plan; v2 no aísla mix por familia de producto. | Parcial |
ACT-COM-006 | Recuperar ventas de sucursal relevante | ACT-159 · Activar foco ejecutivo sobre sucursales fuera de ritmo contra plan1:1 conceptual. | Directo |
ACT-COM-007 | Diversificar cartera de clientes | ACT-115 · Mitigar riesgo no controlado en base de clientes1:1 conceptual sobre concentración / riesgo de cartera. | Directo |
ACT-COM-008 | Mejorar ticket promedio y venta cruzada | ACT-001 · Recuperar resultado en ventas con alta actividad pero bajo resultadoEngloba la mejora de ticket y cross-sell vía resultado por operación. | Directo |
ACT-FIN-001 | Priorizar cobranza de clientes vencidos | ACT-045 · Acelerar ejecución en acciones sobre cartera de clientes vencidas1:1 conceptual sobre cobranza vencida. | Directo |
ACT-FIN-002 | Bloquear venta a crédito de cliente crítico | ACT-043 · Mitigar riesgo no controlado en cuentas por cobrar1:1 conceptual sobre control de exposición crediticia. | Directo |
ACT-FIN-003 | Definir plan de cobranza semanal | ACT-039 · Activar foco ejecutivo sobre cartera de clientes fuera de planACT-045 · Acelerar ejecución en acciones sobre cartera vencidasCartera fuera de plan + aceleración de acciones vencidas. | Múltiples |
ACT-FIN-004 | Revisar límites de crédito | ACT-043 · Mitigar riesgo no controlado en cuentas por cobrar1:1 conceptual sobre política de límites de crédito. | Directo |
ACT-FIN-005 | Preparar proyección de caja 30/60/90 | ACT-031 · Mitigar riesgo no controlado en flujo de fondos1:1 conceptual sobre proyección y control de caja. | Directo |
ACT-FIN-006 | Renegociar pagos críticos a proveedores | ACT-031 · Mitigar riesgo no controlado en flujo de fondosACT-072 · Activar foco ejecutivo sobre ciclo económico de compras desfasadoFlujo de fondos + ciclo económico de compras (cruce caja-proveedores). | Múltiples |
ACT-STK-001 | Generar reposición priorizada | ACT-052 · Activar foco ejecutivo sobre capacidad de inventario desalineada1:1 conceptual sobre reposición ante desalineación de capacidad. | Directo |
ACT-STK-002 | Transferir stock entre sucursales | ACT-052 · Activar foco ejecutivo sobre capacidad de inventario desalineadaACT-058 · Activar foco ejecutivo sobre promesa de servicio deterioradaInventario desalineado + promesa de servicio (transferencias resuelven ambos). | Múltiples |
ACT-STK-003 | Liquidar stock inmovilizado controladamente | ACT-060 · Activar foco ejecutivo sobre ciclo económico de stock desfasadoACT-053 · Activar foco ejecutivo sobre costos de stock crecen más rápido que resultadoCiclo económico de stock + costos de stock (ambos disparan liquidación). | Múltiples |
ACT-STK-004 | Registrar ventas perdidas por quiebre | ACT-058 · Activar foco ejecutivo sobre promesa de servicio de stock deteriorada1:1 conceptual: medir el costo del quiebre vía registro de pérdida. | Directo |
ACT-STK-005 | Revisar stock mínimo y cobertura | ACT-052 · Activar foco ejecutivo sobre capacidad de inventario desalineada1:1 conceptual sobre política de cobertura y stock mínimo. | Directo |
ACT-PUR-001 | Revisar proveedor/costo crítico | ACT-065 · Activar foco ejecutivo sobre costos de compras crecen más rápidoACT-067 · Mitigar riesgo no controlado en base de proveedoresSobrecosto + riesgo de proveedor (ambos componentes del análisis MVP). | Múltiples |
ACT-PUR-002 | Renegociar proveedor crítico | ACT-067 · Mitigar riesgo no controlado en base de proveedores1:1 conceptual sobre renegociación de proveedor de riesgo. | Directo |
ACT-PUR-003 | Bloquear reposición sin rotación suficiente | ACT-066 · Activar foco ejecutivo sobre datos de compras insuficientes1:1 conceptual sobre control de compra basada en rotación. | Directo |
ACT-OPS-001 | Regularizar acciones vencidas | ACT-141 · Acelerar ejecución en acciones sobre decisiones vencidas sin corrección1:1 conceptual sobre disciplina de cierre de vencidas. | Directo |
ACT-OPS-002 | Exigir evidencia de cierre | ACT-134 · Recuperar resultado en decisiones que erosionan gobierno con seguimientoCubre gobierno con seguimiento; v2 no aísla "evidencia documentada" como vector. | Parcial |
ACT-OPS-003 | Asignar responsable faltante | ACT-296 · Activar foco ejecutivo sobre dependencia excesiva en control interno1:1 conceptual sobre asignación de accountability. | Directo |
ACT-DQ-001 | Corregir fuente de datos | ACT-279 · Activar foco ejecutivo sobre datos e integraciones fuera de plan1:1 conceptual sobre corrección de fuente desactualizada. | Directo |
ACT-DQ-002 | Validar KPI crítico con baja confianza | ACT-278 · Recuperar resultado en datos e integraciones que erosionan confiabilidad1:1 conceptual sobre confiabilidad de KPI / dato ejecutivo. | Directo |
ACT-DQ-003 | Regularizar reporte semanal ejecutivo | ACT-138 · Activar foco ejecutivo sobre datos de decisiones insuficientes1:1 conceptual sobre visibilidad ejecutiva semanal. | Directo |
ACT-DIR-001 | Escalar tensión a dirección | ACT-141 · Acelerar ejecución en acciones sobre decisiones vencidasACT-295 · Mitigar riesgo no controlado en marco de control internoVencidas + riesgo de control interno (ambos disparan escalamiento). | Múltiples |
ACT-DIR-002 | Convocar comité ejecutivo por reincidencia | ACT-295 · Mitigar riesgo no controlado en marco de control internoRiesgo de control interno; v2 no aísla "reincidencia" como criterio de comité. | Parcial |
ACT-DIR-003 | Aprobar cambio de política crítica | ACT-134 · Recuperar resultado en decisiones que erosionan gobierno con seguimientoCubre decisiones de gobierno; v2 no aísla "aprobación formal de política" como flujo. | Parcial |
Resumen del mapeo. Sobre las 31 acciones MVP: 17 Directo · 6 Parcial · 8 Múltiples · 0 Solo MVP. Los códigos v2 referenciados apuntan a fichas reales de biblioteca-acciones.html; ninguna fila quedó sin equivalente conceptual porque la v2 cubre los 31 conceptos del MVP vía sus 25 áreas × 12 arquetipos (los parciales corresponden a vectores muy específicos como "política de descuento", "evidencia documentada", "reincidencia" o "comisiones" que la v2 maneja como caso adyacente, no aislado).
El catálogo de acciones no vive solo. Estos son los puntos donde se consume, se valida o se extiende dentro del pack FARO Connect.
30 tensiones canónicas TNS-001..TNS-030 que recomiendan estas acciones vía recommended_actions[].
Catálogo canónico MVP de evidencias EVD-*. Los evidence_required_codes de cada acción resolverán acá. En construcción.
1.500 cruces KPI↔TNS↔ACT validados sin huérfanos. Verifica que cada acción MVP tiene tensiones y KPIs reales.
300 acciones extendidas v2 con RACI y workflow. Mapeo bidireccional con MVP en sección 11.
Matriz RACI con 105 roles canónicos. Los default_owner_role y approver_role resuelven contra esta matriz.
DDL completo del sistema FARO Connect. Incluye faro.action_definitions y tablas relacionadas (actions, evidence).
DSL YAML de reglas del motor evaluador. El parser validará output.recommended_actions[] contra este catálogo. En construcción.
Diagnóstico ejecutivo que usa los códigos ACT canónicos como base de plan de acción de empresa cliente.
Este documento cierra el contrato tensión → acción del MVP. Falta FARO-SQL-006 (catálogo de evidencias) para completar la trilogía canónica. Pasá al hub para ver el resto del pack o volvé al catálogo de tensiones.
→ Volver al hub modelos NDA