ANEXO 29
Biblioteca de Acciones FARO
Este anexo corresponde a la Fase 8 — Ejecución, etapa “Biblioteca de acciones”. Es la capa donde FARO Connect transforma recomendaciones, Action Guides, diagnósticos, tensiones y alertas en acciones concretas, asignables, medibles y cerrables.
Hasta ahora FARO puede decir:
Qué está pasando.
Por qué está pasando.
Qué prioridad tiene.
Qué conviene hacer.
Cómo conviene hacerlo.
El Anexo 29 responde:
¿Qué acción concreta se crea, quién la hace, cuándo vence, qué evidencia debe cargar y cómo se mide si funcionó?
1. Objetivo del anexo
El objetivo de la Biblioteca de Acciones FARO es definir un catálogo estructurado de acciones posibles para que FARO no recomiende de forma genérica.
No alcanza con decir:
Revisar descuentos.
Una acción FARO debe ser:
Auditar operaciones de los últimos 30 días con descuento mayor al 8%, separadas por vendedor, cliente, producto y sucursal, calculando impacto en margen y comisión. Responsable: Gerente Comercial. Vencimiento: 72 horas. Evidencia: informe cargado en FARO.
Eso sí es una acción.
2. Tesis del Anexo 29
La tesis es:
FARO Connect no dirige si no transforma inteligencia en acciones concretas.
La cadena completa sería:
Dato
→ KPI
→ Señal
→ Regla
→ Alerta
→ Tensión
→ Diagnóstico
→ Prioridad
→ Recomendación
→ Action Guide
→ Acción
→ Responsable
→ Vencimiento
→ Evidencia
→ Seguimiento
→ Resultado
→ Aprendizaje
Si la cadena se corta antes de la acción, FARO queda como analista. Si llega a acción y seguimiento, FARO se convierte en sistema de dirección.
3. Qué es una acción FARO
Una acción FARO es una tarea ejecutiva u operativa creada para resolver, validar, prevenir o escalar una situación detectada por el sistema.
Debe tener:
título claro
origen
responsable
prioridad
vencimiento
pasos
evidencia requerida
KPI afectado
estado
criterio de cierre
impacto esperado
seguimiento posterior
Ejemplo:
{
"action_code": "ACT_COMMERCIAL_001",
"title": "Auditar descuentos altos",
"origin": "crecimiento_no_rentable",
"responsible_role": "Gerente Comercial",
"priority": "P2",
"due_hours": 72,
"required_evidence": [
"informe_descuentos",
"resumen_por_vendedor",
"propuesta_politica"
],
"kpis_to_monitor": [
"descuento_promedio",
"margen_bruto",
"comision_sobre_margen"
],
"closure_criteria": [
"informe_presentado",
"politica_definida",
"accion_posterior_creada_si_corresponde"
]
}
4. Diferencia entre recomendación, guía y acción
| Concepto | Qué responde | Ejemplo |
|---|---|---|
| Recomendación | Qué conviene hacer. | Auditar descuentos. |
| Action Guide | Cómo hacerlo paso a paso. | Exportar ventas, calcular margen, separar por vendedor. |
| Acción | Tarea asignada con responsable y vencimiento. | Gerente Comercial debe presentar auditoría en 72 horas. |
La acción es donde FARO deja de ser diagnóstico y se vuelve ejecución.
5. Tipos de acciones FARO
| Tipo de acción | Para qué sirve | Ejemplo |
|---|---|---|
| Correctiva | Resolver un problema actual. | Auditar descuentos altos. |
| Preventiva | Evitar un problema futuro. | Reponer producto antes del quiebre. |
| Validación | Confirmar o corregir datos. | Completar costos faltantes. |
| Escalamiento | Subir un tema a Dirección. | Escalar acción crítica vencida. |
| Análisis | Profundizar diagnóstico. | Analizar margen por vendedor. |
| Simulación | Evaluar escenarios antes de decidir. | Simular nueva comisión. |
| Política | Crear o modificar regla interna. | Definir política de descuentos. |
| Proceso | Cambiar forma de trabajo. | Implementar workflow obligatorio. |
| Seguimiento | Medir si algo mejoró. | Revisar margen 30 días después. |
| Bloqueo / control | Frenar una operación riesgosa. | Bloquear diagnóstico por baja calidad de datos. |
6. Biblioteca inicial de acciones FARO
Una biblioteca seria debería arrancar con:
300 a 500 acciones iniciales
Escalable a:
1.000+ acciones por industria, módulo, tensión, diagnóstico y recomendación.
Distribución sugerida:
| Familia de acciones | Cantidad inicial |
|---|---|
| Comercial | 50-80 |
| Finanzas | 50-80 |
| Stock / inventario | 40-70 |
| Compras / proveedores | 40-70 |
| RRHH / incentivos | 30-60 |
| Operaciones | 40-70 |
| Dirección / workflow | 40-70 |
| Clientes | 30-50 |
| Calidad de datos | 30-60 |
| Industria específica | 100-200 |
Para MVP:
40 a 80 acciones críticas bien diseñadas
Mejor pocas acciones bien cerradas que 500 tareas huérfanas con olor a comité eterno.
7. Estructura estándar de una acción FARO
{
"action_code": "ACT_FINANCE_001",
"title": "Priorizar cobranza de clientes críticos",
"description": "Gestionar cobranza de clientes con mayor deuda vencida e impacto en caja.",
"action_type": "correctiva",
"origin_type": "diagnosis",
"origin_code": "caja_debil_con_ventas_altas",
"related_tension": "caja_debil_con_ventas_altas",
"related_recommendation": "priorizar_cobranza",
"related_action_guide": "AG_FINANCE_001",
"area": "Finanzas",
"responsible_role": "Responsable de Finanzas",
"approver_role": "Dirección",
"consulted_roles": ["Comercial", "Administración"],
"priority_level": "P1",
"due_hours": 24,
"required_data": [
"cuentas_por_cobrar",
"clientes",
"deuda_vencida",
"dias_mora"
],
"required_evidence": [
"ranking_clientes_morosos",
"plan_cobranza",
"resultado_gestion"
],
"kpis_to_monitor": [
"caja_disponible",
"dias_cobranza",
"mora_total"
],
"expected_impact": {
"cash": "mejorar",
"collection_days": "reducir"
},
"closure_criteria": [
"clientes_priorizados",
"plan_ejecutado",
"resultado_cobranza_registrado"
],
"automation_level": "crear_tarea_automatica"
}
8. Campos obligatorios de una acción
| Campo | Para qué sirve |
|---|---|
| action_code | Identificador único de acción. |
| title | Nombre claro. |
| description | Qué debe hacerse. |
| action_type | Correctiva, preventiva, validación, etc. |
| origin_type | Alerta, tensión, diagnóstico, recomendación o guía. |
| origin_code | Código del origen. |
| area | Área responsable. |
| responsible_role | Responsable principal. |
| approver_role | Aprobador si corresponde. |
| consulted_roles | Áreas consultadas. |
| priority_level | P1 a P5. |
| due_hours | Plazo sugerido. |
| required_data | Datos necesarios. |
| required_evidence | Evidencia para cerrar. |
| kpis_to_monitor | KPIs afectados. |
| expected_impact | Impacto esperado. |
| closure_criteria | Criterio de cierre. |
| automation_level | Qué puede automatizar FARO. |
9. Estados de una acción FARO
| Estado | Significado |
|---|---|
| Created | Acción creada. |
| Assigned | Tiene responsable. |
| Accepted | Responsable la aceptó. |
| In progress | En ejecución. |
| Waiting data | Falta información. |
| Waiting approval | Requiere aprobación. |
| Waiting evidence | Falta evidencia. |
| Blocked | Tiene bloqueo. |
| Escalated | Fue escalada. |
| Completed | Fue completada. |
| Measured | Se midió impacto. |
| Closed | Cerrada con evidencia. |
| Rejected | Rechazada con motivo. |
| Cancelled | Cancelada formalmente. |
| Overdue | Vencida. |
| Recurring | Recurrente. |
Regla sana:
Una acción no está cerrada porque alguien dijo “listo”. Está cerrada cuando cumple criterio de cierre y deja evidencia.
10. Prioridad de acciones
La prioridad de una acción nace de:
prioridad del diagnóstico
urgencia
impacto esperado
riesgo de no actuar
confianza
vencimiento
dependencias
Fórmula:
Prioridad acción =
prioridad origen × 30%
+ urgencia × 20%
+ impacto esperado × 20%
+ riesgo de no actuar × 15%
+ dependencia de otras acciones × 10%
+ confianza × 5%
Código:
def prioridad_accion(
prioridad_origen,
urgencia,
impacto_esperado,
riesgo_no_actuar,
dependencia,
confianza
):
return round(
prioridad_origen * 0.30 +
urgencia * 0.20 +
impacto_esperado * 0.20 +
riesgo_no_actuar * 0.15 +
dependencia * 0.10 +
confianza * 0.05,
2
)
11. Vencimiento por prioridad
| Prioridad | Vencimiento recomendado |
|---|---|
| P1 — Crítica | 24 horas o menos |
| P2 — Alta | 48 a 72 horas |
| P3 — Media | 7 días |
| P4 — Baja | 15 a 30 días |
| P5 — Observación | Sin vencimiento operativo o revisión periódica |
Código:
def vencimiento_accion(priority_level):
if priority_level == "P1":
return 24
if priority_level == "P2":
return 72
if priority_level == "P3":
return 7 * 24
if priority_level == "P4":
return 30 * 24
return None
12. Acciones comerciales
12.1 Biblioteca base comercial
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Auditar descuentos altos | Margen deteriorado | Gerente Comercial | P2 |
| Revisar margen por vendedor | Comisión desalineada | Gerente Comercial | P2 |
| Definir autorización de descuentos | Descuento alto recurrente | Dirección Comercial | P2 |
| Revisar margen por cliente | Cliente poco rentable | Comercial / Finanzas | P2 |
| Analizar mix de productos | Mix débil | Comercial | P3 |
| Revisar canal no rentable | Canal bajo margen | Comercial | P3 |
| Suspender descuentos automáticos | Margen crítico | Dirección | P1/P2 |
| Crear política comercial | Reincidencia comercial | Dirección | P2 |
| Segmentar clientes por rentabilidad | Cliente riesgoso | Comercial / Finanzas | P2 |
| Recalcular precios mínimos | Margen bajo | Comercial / Compras | P2 |
12.2 Acción: auditar descuentos altos
{
"action_code": "ACT_COMMERCIAL_DISCOUNT_AUDIT",
"title": "Auditar descuentos mayores al umbral",
"action_type": "correctiva",
"origin": "margen_deteriorado_por_descuentos",
"responsible_role": "Gerente Comercial",
"consulted_roles": ["Finanzas", "Administración"],
"priority_level": "P2",
"due_hours": 72,
"required_evidence": [
"listado_operaciones_descuento_alto",
"analisis_margen_por_operacion",
"propuesta_politica_descuentos"
],
"kpis_to_monitor": [
"descuento_promedio",
"margen_bruto",
"venta_por_vendedor"
]
}
Código de detección:
def crear_accion_auditar_descuentos(descuento_promedio, margen_bruto):
if descuento_promedio > 0.10 and margen_bruto < 0.22:
return {
"action_code": "ACT_COMMERCIAL_DISCOUNT_AUDIT",
"title": "Auditar descuentos mayores al umbral",
"priority": "P2",
"responsible": "Gerente Comercial",
"due_hours": 72
}
return None
13. Acciones financieras
13.1 Biblioteca base financiera
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Priorizar cobranza crítica | Caja débil | Finanzas | P1 |
| Proyectar caja 7 días | Caja bajo mínimo | Finanzas | P1 |
| Reprogramar pagos no críticos | Estrés financiero | Finanzas / Dirección | P1 |
| Revisar clientes morosos | Mora alta | Finanzas | P2 |
| Ajustar política de crédito | Cobranza lenta | Dirección / Finanzas | P2 |
| Separar gastos por centro de costo | Gasto desalineado | Finanzas | P3 |
| Congelar gastos discrecionales | Caja crítica | Dirección | P1 |
| Revisar flujo operativo | Flujo negativo | Finanzas | P2 |
| Auditar gastos sin documento | Control de gastos | Finanzas | P3 |
| Crear presupuesto por área | Gasto recurrente alto | Finanzas | P3 |
13.2 Acción: priorizar cobranza crítica
def crear_accion_cobranza_critica(caja_actual, caja_minima):
if caja_actual < caja_minima:
return {
"action_code": "ACT_FINANCE_COLLECTION_PRIORITY",
"title": "Priorizar cobranza de clientes críticos",
"priority": "P1",
"responsible": "Finanzas",
"due_hours": 24,
"required_evidence": [
"ranking_deuda_vencida",
"plan_cobranza_7_dias",
"resultado_contacto_clientes"
]
}
return None
SQL sugerido:
SELECT
customer_id,
SUM(amount_due) AS deuda_total,
SUM(CASE WHEN due_date < CURRENT_DATE THEN amount_due ELSE 0 END) AS deuda_vencida,
MAX(CURRENT_DATE - due_date) AS dias_mora_max
FROM accounts_receivable
WHERE status <> 'paid'
GROUP BY customer_id
ORDER BY deuda_vencida DESC;
14. Acciones de stock e inventario
14.1 Biblioteca base stock
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Activar reposición preventiva | Stock crítico futuro | Compras | P2 |
| Validar stock físico | Baja confianza stock | Stock | P2 |
| Redistribuir stock entre sucursales | Stock mal compuesto | Stock | P3 |
| Bloquear compra de productos lentos | Stock inmovilizado | Compras | P3 |
| Liquidar stock inmovilizado | Capital parado | Comercial / Stock | P3 |
| Definir mínimos por producto | Quiebres repetidos | Stock / Compras | P2 |
| Revisar rotación por familia | Stock alto/bajo | Stock | P3 |
| Activar proveedor alternativo | Proveedor crítico | Compras | P2 |
| Crear alerta de cobertura | Riesgo de quiebre | Stock | P2 |
| Auditar diferencias físico-sistema | Inventario no confiable | Stock | P2 |
14.2 Acción: activar reposición preventiva
def crear_accion_reposicion_preventiva(producto_critico, dias_cobertura, plazo_proveedor):
if producto_critico and dias_cobertura < plazo_proveedor:
return {
"action_code": "ACT_STOCK_PREVENTIVE_REPLENISHMENT",
"title": "Activar reposición preventiva de producto crítico",
"priority": "P2",
"responsible": "Compras",
"consulted": ["Stock", "Comercial"],
"due_hours": 48,
"required_evidence": [
"orden_compra",
"confirmacion_proveedor",
"fecha_estimada_reposicion"
]
}
return None
15. Acciones de compras y proveedores
15.1 Biblioteca base compras
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Homologar proveedor alternativo | Proveedor crítico | Compras | P2 |
| Renegociar plazo proveedor | Demora proveedor | Compras | P2 |
| Revisar dependencia proveedor | Concentración alta | Compras / Dirección | P3 |
| Auditar compras urgentes | Compras reactivas | Compras | P3 |
| Crear plan de reposición | Compras reactivas | Compras / Stock | P2 |
| Revisar variación de costo | Costo creciente | Compras / Finanzas | P2 |
| Validar recepción con diferencia | Control compras | Stock / Compras | P2 |
| Revisar órdenes pendientes | Riesgo abastecimiento | Compras | P2 |
| Negociar precio por volumen | Margen futuro en riesgo | Compras | P3 |
| Definir proveedor estratégico | Dependencia crítica | Dirección / Compras | P2 |
15.2 Acción: homologar proveedor alternativo
def crear_accion_proveedor_alternativo(cumplimiento, dependencia, alternativa_disponible):
if cumplimiento < 0.75 and dependencia > 0.40 and not alternativa_disponible:
return {
"action_code": "ACT_SUPPLIER_ALTERNATIVE",
"title": "Homologar proveedor alternativo",
"priority": "P2",
"responsible": "Compras",
"due_hours": 72,
"required_evidence": [
"lista_proveedores_alternativos",
"comparativo_precio_plazo",
"recomendacion_final"
]
}
return None
16. Acciones de RRHH e incentivos
16.1 Biblioteca base RRHH
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Simular nueva comisión | Comisión desalineada | Comercial / RRHH | P2 |
| Revisar comisión por margen | Margen bajo | Comercial / RRHH | P2 |
| Analizar productividad por rol | Productividad baja | RRHH | P3 |
| Revisar ausentismo operativo | Ausentismo alto | RRHH | P3 |
| Detectar persona clave | Riesgo organizativo | RRHH / Dirección | P3 |
| Reasignar tareas vencidas | Accountability débil | Gerencia | P2 |
| Definir RACI por proceso | Falta de responsables | Gerencia / RRHH | P2 |
| Revisar costo laboral | Costo desalineado | RRHH / Finanzas | P3 |
| Crear plan de cobertura | Ausentismo crítico | RRHH / Operaciones | P2 |
| Validar fórmula variable | Comisión sensible | Dirección | P2 |
16.2 Acción: simular nueva comisión
def crear_accion_simular_comision(comision_var, margen_var):
if comision_var > 0 and margen_var < 0:
return {
"action_code": "ACT_HR_COMMISSION_SIMULATION",
"title": "Simular nueva fórmula de comisión",
"priority": "P2",
"responsible": "Comercial / RRHH",
"approver": "Dirección",
"due_hours": 7 * 24,
"required_evidence": [
"simulacion_por_vendedor",
"impacto_en_margen",
"impacto_en_variable",
"riesgo_comercial"
],
"requires_approval": True
}
return None
17. Acciones de operaciones y workflow
17.1 Biblioteca base operaciones
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Crear acción por decisión | Decisión sin acción | Gerencia | P2 |
| Escalar acción crítica vencida | Acción vencida | Gerencia | P1 |
| Reasignar tarea bloqueada | Bloqueo operativo | Responsable superior | P2 |
| Revisar cuello de botella | Demora recurrente | Operaciones | P2 |
| Analizar reclamo reincidente | Reclamos repetidos | Operaciones | P2 |
| Medir cierre de acción | Cierre sin evidencia | Gerencia | P3 |
| Crear comité de seguimiento | Tensión recurrente | Dirección | P2 |
| Definir SLA interno | Incumplimiento operativo | Operaciones | P3 |
| Auditar reprocesos | Baja calidad operativa | Operaciones | P3 |
| Crear tablero de vencimientos | Accountability débil | Gerencia | P2 |
17.2 Acción: escalar acción crítica vencida
def crear_accion_escalamiento(accion):
if accion["priority"] == "P1" and accion["status"] != "closed" and accion["days_overdue"] >= 1:
return {
"action_code": "ACT_WORKFLOW_ESCALATE_CRITICAL",
"title": "Escalar acción crítica vencida",
"priority": "P1",
"responsible": "Gerencia General",
"due_hours": 24,
"related_action_id": accion["action_id"],
"required_evidence": [
"motivo_vencimiento",
"nuevo_plan_cierre",
"responsable_confirmado"
]
}
return None
18. Acciones de calidad de datos
18.1 Biblioteca base data quality
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Completar costos faltantes | Margen no confiable | Data Owner / Compras | P2 |
| Normalizar productos | Producto sin maestro | Data Owner | P2 |
| Unificar clientes duplicados | Mora distorsionada | Administración | P2 |
| Conciliar stock físico-sistema | Stock no confiable | Stock | P2 |
| Validar cuentas bancarias | Finanzas no confiable | Finanzas | P2 |
| Reprocesar KPI | Dato corregido | Data Owner | P3 |
| Corregir códigos de vendedor | Comisión no confiable | RRHH / Comercial | P3 |
| Crear diccionario de campos | Falta de estándar | Data Owner | P3 |
| Validar fuente de datos | Baja trazabilidad | Sistemas | P2 |
| Bloquear diagnóstico sensible | Confianza baja | FARO / Dirección | P1/P2 |
18.2 Acción: completar costos faltantes
def crear_accion_completar_costos(score_calidad_costos):
if score_calidad_costos < 0.70:
return {
"action_code": "ACT_DATA_COMPLETE_COSTS",
"title": "Completar costos faltantes para recalcular margen",
"priority": "P2",
"responsible": "Data Owner / Compras",
"due_hours": 7 * 24,
"required_evidence": [
"productos_sin_costo_identificados",
"costos_completados",
"margen_recalculado",
"confianza_kpi_actualizada"
]
}
return None
19. Acciones para clientes
19.1 Biblioteca base clientes
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Revisar límite de crédito | Cliente moroso | Finanzas | P2 |
| Calcular rentabilidad por cliente | Cliente grande riesgoso | Finanzas / Comercial | P2 |
| Renegociar condición comercial | Margen bajo cliente | Comercial | P2 |
| Exigir pago parcial | Mora crítica | Finanzas / Dirección | P1/P2 |
| Suspender venta a crédito | Riesgo alto | Dirección | P1/P2 |
| Crear plan de cobranza cliente | Mora recurrente | Finanzas | P2 |
| Revisar reclamos por cliente | Cliente en riesgo | Operaciones | P3 |
| Segmentar cliente estratégico | Concentración alta | Dirección | P3 |
| Validar datos del cliente | Cliente duplicado | Administración | P3 |
| Analizar costo de servir | Cliente poco rentable | Comercial / Operaciones | P3 |
19.2 Acción: revisar crédito de cliente grande
def crear_accion_revisar_credito_cliente(concentracion, dias_mora, margen_cliente):
if concentracion > 0.15 and dias_mora > 30 and margen_cliente < 0.20:
return {
"action_code": "ACT_CUSTOMER_CREDIT_REVIEW",
"title": "Revisar crédito y condiciones de cliente grande riesgoso",
"priority": "P2",
"responsible": "Finanzas",
"consulted": ["Comercial", "Dirección"],
"requires_approval": True,
"due_hours": 72,
"required_evidence": [
"ficha_cliente",
"deuda_vencida",
"margen_cliente",
"propuesta_condicion"
]
}
return None
20. Acciones para canjes
20.1 Biblioteca base canjes
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Registrar propuesta de canje | Canje pendiente | Comercial | P2 |
| Valuar activo recibido | Canje | Finanzas | P2 |
| Validar documentación legal | Canje sensible | Legal / Dirección | P1/P2 |
| Simular valor neto del canje | Canje mal evaluado | Finanzas | P2 |
| Comparar contra venta normal | Canje | Dirección / Finanzas | P2 |
| Aprobar/rechazar canje | Decisión sensible | Directorio | P1/P2 |
| Renegociar condiciones | Canje desfavorable | Comercial | P2 |
| Registrar riesgo del canje | Control | Finanzas / Legal | P2 |
| Medir liquidez del activo | Canje aceptado | Finanzas | P3 |
| Cerrar canje con evidencia | Cierre | Administración | P3 |
20.2 Acción: simular canje
def crear_accion_simular_canje(valor_operacion, requiere_activo_no_liquido):
if valor_operacion > 0 and requiere_activo_no_liquido:
return {
"action_code": "ACT_EXCHANGE_SIMULATION",
"title": "Simular valor neto de canje",
"priority": "P2",
"responsible": "Finanzas / Dirección",
"consulted": ["Comercial", "Legal"],
"requires_approval": True,
"due_hours": 72,
"required_evidence": [
"valuacion_activo",
"costo_materiales",
"factor_liquidez",
"riesgo_legal",
"comparativo_venta_normal"
]
}
return None
21. Acciones para referidos
21.1 Biblioteca base referidos
| Acción | Origen típico | Responsable | Prioridad |
|---|---|---|---|
| Identificar referido | Venta referida | Comercial | P3 |
| Registrar origen de venta | Trazabilidad | Comercial | P3 |
| Calcular comisión sobre margen | Referido erosiona margen | Finanzas | P2 |
| Aprobar pago de referido | Comisión sensible | Dirección | P2 |
| Crear política de referidos | Referidos sin control | Dirección Comercial | P2 |
| Bloquear pago sin trazabilidad | Riesgo control | Finanzas | P2 |
| Medir ventas por referido | Gestión comercial | Comercial | P3 |
| Validar documentación | Control | Administración | P3 |
Código:
def crear_accion_validar_referido(comision_referido, margen_operacion, referido_identificado):
if margen_operacion == 0:
return None
ratio = comision_referido / margen_operacion
if not referido_identificado or ratio > 0.25:
return {
"action_code": "ACT_REFERRAL_VALIDATE",
"title": "Validar referido y comisión sobre margen",
"priority": "P2",
"responsible": "Comercial / Finanzas",
"requires_approval": True,
"required_evidence": [
"referido_identificado",
"operacion_asociada",
"margen_operacion",
"comision_solicitada",
"aprobacion"
]
}
return None
22. Acciones por industria
22.1 Construcción / insumos
Auditar descuentos por vendedor.
Revisar margen por familia: cemento, hierro, sanitarios, grifería.
Activar reposición de productos de alta rotación.
Validar canjes con modelo financiero.
Registrar referidos y comisiones externas.
Revisar ventas a obra con cobranza lenta.
Definir mínimos por sucursal.
Revisar flete que erosiona margen.
22.2 Retail
Revisar promociones por margen incremental.
Redistribuir stock entre sucursales.
Liquidar productos lentos.
Priorizar producto estrella sin quiebre.
Auditar merma.
Analizar ticket promedio por sucursal.
22.3 Salud
Revisar agenda de profesionales saturados.
Reducir tiempos de espera.
Auditar costo por prestación.
Validar insumos críticos.
Revisar reclamos reincidentes.
22.4 Logística
Rediseñar ruta no rentable.
Auditar costo por kilómetro.
Revisar combustible por unidad.
Reprogramar mantenimiento preventivo.
Analizar SLA incumplidos.
22.5 Hotelería
Revisar tarifa por canal.
Reducir dependencia de canal caro.
Analizar RevPAR.
Priorizar mantenimiento en habitaciones con reclamos.
Revisar cancelaciones.
22.6 Shopping / real estate
Revisar locatario moroso.
Analizar vacancia por zona.
Revisar renta por m².
Analizar tráfico vs conversión.
Revisar mix comercial.
23. Acciones automáticas vs acciones con aprobación
| Acción | Automatización recomendada |
|---|---|
| Crear tarea de validación de datos | Automática |
| Escalar acción crítica vencida | Automática |
| Crear tarea de reposición preventiva | Automática o sugerida |
| Auditar descuentos altos | Sugerida / automática según confianza |
| Reprogramar pagos | Requiere aprobación |
| Bloquear cliente | Requiere aprobación |
| Cambiar comisión | Requiere aprobación |
| Aprobar canje | Requiere aprobación |
| Modificar precios masivamente | Requiere aprobación |
| Acciones sensibles de RRHH | Requiere aprobación siempre |
Regla:
FARO automatiza ejecución operativa. No automatiza decisiones sensibles sin gobierno humano.
24. Dependencias entre acciones
Una acción puede depender de otra.
Ejemplos:
No se puede revisar comisión si no se calculó margen por vendedor.
No se puede aceptar canje si no se valuó el activo.
No se puede cerrar diagnóstico de margen si faltan costos.
No se puede aprobar reposición si no se validó stock físico.
Código:
def accion_puede_iniciarse(accion, acciones_completadas):
dependencias = accion.get("dependencies", [])
return all(dep in acciones_completadas for dep in dependencias)
Ejemplo JSON:
{
"action_code": "ACT_HR_COMMISSION_SIMULATION",
"dependencies": [
"ACT_COMMERCIAL_MARGIN_BY_SELLER",
"ACT_FINANCE_COLLECTION_BY_SELLER"
]
}
25. Acciones recurrentes
Algunas acciones deben repetirse.
Ejemplos:
Revisar caja diaria.
Revisar stock crítico diario.
Revisar acciones vencidas semanalmente.
Revisar margen por vendedor mensual.
Revisar calidad de datos semanal.
Estructura:
{
"action_code": "ACT_DAILY_CASH_REVIEW",
"recurrence": {
"frequency": "daily",
"time": "09:00",
"business_days_only": true
}
}
SQL conceptual:
CREATE TABLE recurring_actions (
recurring_action_id TEXT PRIMARY KEY,
action_code TEXT NOT NULL,
company_id TEXT,
frequency TEXT,
schedule_config JSONB,
responsible_id TEXT,
active BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT now()
);
26. Acciones bloqueantes
Una acción bloqueante impide avanzar con una decisión.
Ejemplo:
No cambiar política comercial hasta recalcular margen confiable.
No aprobar canje hasta validar documentación legal.
No bloquear cliente hasta revisar rentabilidad ajustada.
Código:
def bloquear_decision_si_accion_pendiente(decision_code, acciones_pendientes):
bloqueantes = [
a for a in acciones_pendientes
if a.get("blocks_decision") == decision_code
]
if bloqueantes:
return {
"blocked": True,
"reason": "Existen acciones bloqueantes pendientes.",
"blocking_actions": bloqueantes
}
return {"blocked": False}
27. Evidencia requerida por acción
Tipos de evidencia:
archivo
captura
comentario
aprobación
cálculo
reporte
orden de compra
simulación
acta de reunión
validación de responsable
KPI recalculado
Ejemplo:
{
"action_code": "ACT_DATA_COMPLETE_COSTS",
"required_evidence": [
{
"type": "report",
"name": "Listado de productos corregidos"
},
{
"type": "kpi",
"name": "Confianza KPI margen actualizada"
}
]
}
Código:
def validar_evidencia_accion(required_evidence, uploaded_evidence):
faltantes = []
for evidencia in required_evidence:
if evidencia not in uploaded_evidence:
faltantes.append(evidencia)
return {
"complete": len(faltantes) == 0,
"missing": faltantes
}
28. Criterios de cierre
Una acción se cierra si cumple:
pasos completados
evidencia cargada
responsable validó
aprobador aprobó si corresponde
KPI recalculado si aplica
no quedan bloqueos
Código:
def puede_cerrar_accion(accion):
condiciones = [
accion.get("steps_completed", False),
accion.get("evidence_complete", False),
accion.get("responsible_validation", False),
not accion.get("blocked", False)
]
if accion.get("requires_approval"):
condiciones.append(accion.get("approved", False))
return all(condiciones)
29. Impacto de acciones en FARO Score
Las acciones impactan el Score por ejecución y resultado.
| Evento | Impacto |
|---|---|
| Acción P1 creada | 0 |
| Acción P1 aceptada | +1 |
| Acción P1 cerrada en plazo | +3 |
| Acción P1 vencida | -5 |
| Acción P2 cerrada en plazo | +2 |
| Acción sin evidencia | 0 |
| Acción que resuelve tensión | +4 a +8 |
| Acción recurrente vencida | -3 |
| Acción sensible rechazada con motivo válido | 0 |
| Acción falsa positiva corregida | +1 por aprendizaje |
Código:
def impacto_accion_score(priority, status, resolved_tension=False):
if status == "overdue":
return -5 if priority == "P1" else -3
if status == "closed_with_evidence":
impacto = 3 if priority == "P1" else 2
if resolved_tension:
impacto += 4
return impacto
if status == "accepted":
return 1
return 0
30. Medición posterior de acciones
Toda acción relevante debe medir resultado.
Ejemplo:
Acción:
Auditar descuentos altos.
Medición 30 días:
descuento promedio antes: 12%
descuento promedio después: 8%
margen antes: 21%
margen después: 24%
Código:
def medir_impacto_accion(kpi_before, kpi_after):
impacto = {}
for kpi, valor_antes in kpi_before.items():
valor_despues = kpi_after.get(kpi)
if valor_despues is not None:
impacto[kpi] = valor_despues - valor_antes
return impacto
31. Tabla SQL de biblioteca de acciones
CREATE TABLE action_library (
action_code TEXT PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
action_type TEXT,
applicable_alerts JSONB,
applicable_tensions JSONB,
applicable_diagnoses JSONB,
applicable_recommendations JSONB,
applicable_action_guides JSONB,
industry_scope JSONB,
area_id TEXT,
responsible_role TEXT,
approver_role TEXT,
consulted_roles JSONB,
default_priority TEXT,
default_due_hours INTEGER,
required_data JSONB,
required_evidence JSONB,
kpis_to_monitor JSONB,
expected_impact JSONB,
closure_criteria JSONB,
dependencies JSONB,
blocks_decisions JSONB,
automation_level TEXT,
sensitive BOOLEAN DEFAULT false,
active BOOLEAN DEFAULT true,
version TEXT DEFAULT '1.0',
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
);
32. Tabla SQL de acciones generadas
CREATE TABLE action_events (
action_id TEXT PRIMARY KEY,
action_code TEXT NOT NULL,
company_id TEXT,
branch_id TEXT,
area_id TEXT,
responsible_id TEXT,
approver_id TEXT,
origin_type TEXT,
origin_id TEXT,
alert_id TEXT,
tension_event_id TEXT,
diagnosis_id TEXT,
recommendation_event_id TEXT,
action_guide_event_id TEXT,
title TEXT NOT NULL,
description TEXT,
priority_level TEXT,
status TEXT DEFAULT 'created',
due_date TIMESTAMP,
required_evidence JSONB,
uploaded_evidence JSONB,
kpis_to_monitor JSONB,
expected_impact JSONB,
closure_criteria JSONB,
score_impact NUMERIC,
created_at TIMESTAMP DEFAULT now(),
accepted_at TIMESTAMP,
completed_at TIMESTAMP,
closed_at TIMESTAMP
);
33. Tabla SQL de historial de acciones
CREATE TABLE action_status_history (
id TEXT PRIMARY KEY,
action_id TEXT NOT NULL,
previous_status TEXT,
new_status TEXT,
changed_by TEXT,
change_reason TEXT,
changed_at TIMESTAMP DEFAULT now()
);
34. Tabla SQL de dependencias entre acciones
CREATE TABLE action_dependencies (
id TEXT PRIMARY KEY,
action_id TEXT NOT NULL,
depends_on_action_id TEXT NOT NULL,
dependency_type TEXT,
required_status TEXT DEFAULT 'closed',
created_at TIMESTAMP DEFAULT now()
);
Valores posibles de dependency_type:
must_finish_before_start
must_approve_before_start
blocks_closure
blocks_decision
35. Tabla SQL de medición de impacto
CREATE TABLE action_impact_measurements (
measurement_id TEXT PRIMARY KEY,
action_id TEXT NOT NULL,
kpi_code TEXT NOT NULL,
value_before NUMERIC,
value_after NUMERIC,
delta_value NUMERIC,
delta_rate NUMERIC,
measured_period_start DATE,
measured_period_end DATE,
interpretation TEXT,
created_at TIMESTAMP DEFAULT now()
);
36. Motor de creación de acciones
Flujo recomendado:
Alerta / tensión / diagnóstico / recomendación / guía
→ buscar acciones aplicables
→ validar confianza
→ validar sensibilidad
→ asignar responsable
→ definir vencimiento
→ cargar evidencia requerida
→ crear acción
→ monitorear vencimiento
→ escalar si corresponde
→ medir impacto
Código conceptual:
def motor_acciones(evento_origen, biblioteca_acciones):
acciones = []
for accion in biblioteca_acciones:
if evento_origen["code"] in accion.get("applicable_diagnoses", []):
acciones.append(preparar_accion(evento_origen, accion))
elif evento_origen["code"] in accion.get("applicable_tensions", []):
acciones.append(preparar_accion(evento_origen, accion))
elif evento_origen["code"] in accion.get("applicable_recommendations", []):
acciones.append(preparar_accion(evento_origen, accion))
return acciones
def preparar_accion(evento_origen, accion_template):
return {
"action_code": accion_template["action_code"],
"title": accion_template["title"],
"priority": evento_origen.get("priority_level", accion_template["default_priority"]),
"responsible_role": accion_template["responsible_role"],
"due_hours": accion_template["default_due_hours"],
"required_evidence": accion_template["required_evidence"],
"origin_code": evento_origen["code"]
}
37. Motor de vencimientos y escalamiento
from datetime import datetime
def evaluar_vencimiento_accion(accion):
if accion["status"] in ["closed", "cancelled", "rejected"]:
return None
if datetime.now() > accion["due_date"]:
return {
"action_id": accion["action_id"],
"status": "overdue",
"requires_escalation": accion["priority_level"] in ["P1", "P2"]
}
return None
Escalamiento:
def escalar_accion_vencida(accion):
if accion["priority_level"] == "P1":
return {
"escalate_to": "Gerencia General",
"message": "Acción crítica vencida requiere intervención inmediata."
}
if accion["priority_level"] == "P2":
return {
"escalate_to": "Responsable superior",
"message": "Acción prioritaria vencida requiere revisión."
}
return None
38. Ejemplo completo: crecimiento no rentable
Diagnóstico
Crecimiento no rentable.
Recomendación
Auditar descuentos, revisar comisión y priorizar cobranza.
Acciones generadas
| Acción | Responsable | Prioridad | Vencimiento |
|---|---|---|---|
| Auditar descuentos > 8% | Gerente Comercial | P2 | 72 hs |
| Calcular margen por vendedor | Comercial / Finanzas | P2 | 72 hs |
| Revisar comisión sobre margen | Comercial / RRHH | P2 | 7 días |
| Priorizar cobranza clientes grandes | Finanzas | P2 | 72 hs |
| Presentar propuesta comercial | Gerente Comercial | P2 | 7 días |
Evidencia requerida
Listado de operaciones auditadas.
Margen por vendedor.
Detalle de comisión.
Ranking de clientes con mora.
Propuesta de ajuste.
39. Ejemplo completo: caja crítica
Diagnóstico
Caja bajo mínimo operativo.
Acciones generadas
| Acción | Responsable | Prioridad | Vencimiento |
|---|---|---|---|
| Actualizar caja real | Finanzas | P1 | 6 hs |
| Proyectar caja 7 días | Finanzas | P1 | 12 hs |
| Priorizar cobranza | Finanzas / Comercial | P1 | 24 hs |
| Revisar pagos no críticos | Finanzas / Dirección | P1 | 24 hs |
| Reportar plan a Dirección | Finanzas | P1 | 24 hs |
Criterio de cierre
Caja proyectada normalizada.
Plan aprobado.
Cobranzas priorizadas ejecutadas.
Pagos críticos ordenados.
40. Ejemplo completo: stock crítico futuro
Diagnóstico
Riesgo futuro de stock crítico.
Acciones generadas
| Acción | Responsable | Prioridad | Vencimiento |
|---|---|---|---|
| Validar stock físico | Stock | P2 | 24 hs |
| Consultar OC pendiente | Compras | P2 | 24 hs |
| Consultar proveedor actual | Compras | P2 | 24 hs |
| Evaluar proveedor alternativo | Compras | P2 | 48 hs |
| Emitir reposición preventiva | Compras | P2 | 48 hs |
41. Ejemplo completo: margen no confiable
Diagnóstico
Margen no confiable por costos incompletos.
Acciones generadas
| Acción | Responsable | Prioridad | Vencimiento |
|---|---|---|---|
| Identificar productos sin costo | Data Owner | P2 | 24 hs |
| Completar costos unitarios | Compras | P2 | 7 días |
| Normalizar productos | Data Owner | P2 | 7 días |
| Recalcular margen | Sistemas / Data | P2 | 7 días |
| Actualizar confianza KPI | FARO / Data | P2 | 7 días |
42. Acción explicada para socio técnico
La acción FARO no es una tarea manual improvisada.
Es una entidad estructurada que conecta:
origen analítico
regla que la disparó
diagnóstico asociado
recomendación asociada
responsable
plazo
estado
evidencia
dependencias
score
medición posterior
aprendizaje
Arquitectura correcta:
Motor de diagnóstico detecta.
Motor de recomendaciones sugiere.
Action Guide define paso a paso.
Motor de acciones crea tareas.
Workflow monitorea.
Evidencia valida cierre.
Score mide impacto.
Aprendizaje recalibra.
43. Prompt interno para IA explicativa
La IA puede redactar mejor la acción, pero no debe inventarla.
Actúa como analista ejecutivo FARO.
Con base únicamente en el payload estructurado recibido, redacta una acción clara, concreta y ejecutable.
No inventes datos ni responsables.
Incluye:
1. acción concreta,
2. origen,
3. responsable,
4. plazo,
5. evidencia requerida,
6. KPI afectado,
7. criterio de cierre,
8. riesgo de no actuar.
Payload:
{action_payload}
Regla:
La biblioteca define la acción. La IA solo la explica en lenguaje humano.
44. Testing de acciones
Test crear acción de descuento
def test_crear_accion_auditar_descuentos():
accion = crear_accion_auditar_descuentos(
descuento_promedio=0.12,
margen_bruto=0.18
)
assert accion is not None
assert accion["action_code"] == "ACT_COMMERCIAL_DISCOUNT_AUDIT"
assert accion["priority"] == "P2"
Test no crear acción si no corresponde
def test_no_crear_accion_descuento_sano():
accion = crear_accion_auditar_descuentos(
descuento_promedio=0.04,
margen_bruto=0.30
)
assert accion is None
Test cierre con aprobación
def test_accion_sensible_requiere_aprobacion():
accion = {
"steps_completed": True,
"evidence_complete": True,
"responsible_validation": True,
"blocked": False,
"requires_approval": True,
"approved": False
}
assert puede_cerrar_accion(accion) is False
45. Errores comunes en acciones
| Error | Consecuencia |
|---|---|
| Acción sin responsable | Nadie ejecuta. |
| Acción sin vencimiento | Se posterga. |
| Acción sin evidencia | Se cierra de palabra. |
| Acción demasiado genérica | No se sabe qué hacer. |
| Acción sin KPI afectado | No se mide impacto. |
| Acción sin origen | No se entiende por qué existe. |
| Acción sensible automática | Riesgo de conflicto o daño. |
| Acción sin seguimiento | No hay aprendizaje. |
| Muchas acciones P1 | Todo es urgente, nada es urgente. |
46. Riesgos si no existe biblioteca de acciones
| Riesgo | Consecuencia |
|---|---|
| Recomendaciones no bajan a ejecución | FARO queda en diagnóstico. |
| Cada usuario interpreta distinto | Inconsistencia operativa. |
| No hay trazabilidad | No se puede auditar. |
| No hay evidencia | Cierres débiles. |
| No se mide impacto | FARO no aprende. |
| No se escala vencimiento | Se pierde accountability. |
| No se conecta con Score | FARO Score queda decorativo. |
| Baja adopción | El sistema informa, pero no conduce. |
47. Output final del Anexo 29
Al finalizar este anexo, FARO debe tener definido:
1. Biblioteca inicial de acciones FARO.
2. Tipos de acciones.
3. Estructura estándar de acción.
4. Acciones por área.
5. Acciones por industria.
6. Acciones por diagnóstico.
7. Acciones por tensión.
8. Acciones por recomendación.
9. Acciones por Action Guide.
10. Acciones automáticas vs con aprobación.
11. Responsables y RACI.
12. Prioridad de acciones.
13. Vencimientos sugeridos.
14. Evidencia requerida.
15. Dependencias entre acciones.
16. Acciones bloqueantes.
17. Acciones recurrentes.
18. Criterios de cierre.
19. Impacto en FARO Score.
20. Medición posterior.
21. Tablas SQL de acciones.
22. Motor de creación de acciones.
23. Motor de vencimientos.
24. Motor de escalamiento.
25. Testing de acciones.
26. Uso controlado de IA explicativa.
27. Aprendizaje por efectividad de acciones.
48. Conexión con otros anexos
| Próximo anexo | Qué recibe desde Anexo 29 |
|---|---|
| Anexo 21 — Alertas FARO | Alertas que pueden generar acciones. |
| Anexo 22 — Biblioteca de tensiones | Tensiones que requieren acciones. |
| Anexo 23 — Diagnóstico ejecutivo | Diagnósticos que originan acciones. |
| Anexo 24 — Confianza del diagnóstico | Confianza mínima para crear o sugerir acción. |
| Anexo 25 — Priorización ejecutiva | Prioridad y vencimiento de acciones. |
| Anexo 26 — Recomendaciones FARO | Recomendaciones traducidas a acciones. |
| Anexo 27 — Simulación de escenarios | Escenarios aprobados que generan acciones. |
| Anexo 28 — FARO Action Guide | Guías que se convierten en acciones concretas. |
| Anexo 30 — Responsables y RACI | Dueños, aprobadores, consultados e informados. |
| Anexo 31 — Workflow y escalamiento | Seguimiento, vencimientos y escalamiento. |
| Anexo 32 — Evidencia y cierre | Evidencia requerida para cerrar acciones. |
| Anexo 35 — FARO Score | Impacto de acciones abiertas, vencidas o resueltas. |
| Anexo 36 — Aprendizaje | Resultado real de acciones para mejorar futuras decisiones. |
| Anexo 37 — Recalibración | Ajuste de acciones según efectividad histórica. |
La Biblioteca de Acciones FARO define las acciones concretas que el sistema puede crear o sugerir a partir de alertas, tensiones, diagnósticos, recomendaciones y Action Guides. Cada acción debe tener responsable, prioridad, vencimiento, evidencia, KPI afectado, criterio de cierre, seguimiento e impacto en FARO Score.