← Volver al índice de anexos
Macrobloque 4·Inteligencia·Anexo 27 / 40

Anexo 27 · Simulación de escenarios

Etapa: Fase 7.3
DECK PARCIAL ACTIVO PROPIO

ANEXO 27

Simulación de escenarios FARO

Este anexo corresponde a la Fase 7 — Decisión, etapa “Simulación de escenarios”. Es la capa donde FARO Connect permite evaluar alternativas antes de ejecutar una decisión sensible.

Hasta ahora FARO detecta, diagnostica, prioriza y recomienda. Pero antes de tocar precios, comisiones, stock, crédito, compras, canjes o estructura, conviene simular.

Porque una cosa es decir:

Revisar comisión comercial.

Y otra muy distinta es saber:

Si cambiamos la comisión de ventas puras a comisión por margen y cobranza:
- cuánto ahorramos,
- cuánto puede caer la motivación del vendedor,
- cuánto mejora el margen,
- cuánto mejora la caja,
- qué vendedores se ven más afectados,
- qué riesgo comercial aparece.

Ahí entra la simulación.


1. Objetivo del anexo

El objetivo del Anexo 27 — Simulación de escenarios FARO es responder:

¿Qué puede pasar si tomamos esta decisión?

Ejemplos:

¿Qué pasa si bajamos descuentos máximos del 12% al 8%?
¿Qué pasa si pagamos comisión solo sobre ventas cobradas?
¿Qué pasa si aceptamos un canje por materiales?
¿Qué pasa si compramos más stock antes de un aumento?
¿Qué pasa si bloqueamos clientes con más de 45 días de mora?
¿Qué pasa si abrimos una nueva sucursal?
¿Qué pasa si cambiamos proveedor?
¿Qué pasa si subimos precios 7%?

FARO no debe recomendar decisiones sensibles sin permitir simular impacto.


2. Tesis del Anexo 27

La tesis es:

FARO Connect debe permitir probar decisiones antes de ejecutarlas.

Un dashboard tradicional muestra lo que pasó.

FARO debe responder:

Si hacemos A, puede pasar B.
Si hacemos B, puede mejorar C pero empeorar D.
Si no hacemos nada, el riesgo probable es E.

Ejemplo:

Diagnóstico:
Crecimiento no rentable.

Recomendación:
Reducir descuentos y ajustar comisión.

Simulación:
Si se baja el descuento máximo del 12% al 8%, el margen podría mejorar 3 puntos, pero las ventas podrían caer entre 4% y 7% en vendedores con alta dependencia del descuento.

Esto es dirección real. No solo mirar el tablero; probar el tablero contra decisiones.


3. Qué es una simulación FARO

Una simulación FARO es un modelo que permite comparar el escenario actual contra uno o varios escenarios alternativos.

Estructura básica:

Escenario base
→ supuesto de cambio
→ variables afectadas
→ cálculo de impacto
→ riesgos
→ recomendación final

Ejemplo:

{
  "scenario_name": "Reducir descuento máximo",
  "baseline": {
    "discount_rate": 0.12,
    "gross_margin": 0.21,
    "sales": 100000000
  },
  "scenario": {
    "discount_rate": 0.08,
    "estimated_sales_drop": 0.05
  },
  "expected_result": {
    "gross_margin": 0.245,
    "sales": 95000000,
    "gross_profit_change": 2800000
  }
}

4. Diferencia entre recomendación, simulación y decisión

Concepto Qué responde Ejemplo
Recomendación Qué conviene evaluar o hacer. Revisar descuentos.
Simulación Qué podría pasar si se hace. Margen sube, ventas pueden caer.
Decisión Qué se aprueba ejecutar. Reducir descuento máximo a 8%.
Acción Quién lo implementa y cuándo. Comercial actualiza política antes del viernes.

La simulación es el filtro entre recomendar y decidir.

Diagnóstico
→ Recomendación
→ Simulación
→ Decisión
→ Acción
→ Seguimiento
→ Aprendizaje

5. Cuándo se debe simular

No todo requiere simulación. Pero sí cuando la decisión afecta:

margen
caja
precios
comisiones
stock
proveedores críticos
crédito a clientes
canjes
estructura de personal
apertura de sucursales
compras grandes
política comercial
política financiera

Regla sana:

Si la decisión puede mover caja, margen, conducta comercial o riesgo legal, primero se simula.


6. Tipos de simulaciones FARO

Tipo de simulación Qué evalúa Ejemplo
Comercial Precio, descuento, margen, ventas. Bajar descuento máximo.
Financiera Caja, cobranza, pagos, deuda. Reprogramar pagos.
Stock / compras Cobertura, reposición, inmovilizado. Comprar antes de aumento.
Comisiones Incentivos, margen, cobranza. Comisión por margen cobrado.
Clientes Crédito, mora, concentración. Bloquear clientes morosos.
Proveedores Plazo, costo, dependencia. Cambiar proveedor crítico.
Operativa Capacidad, SLA, tareas, recursos. Aumentar entregas sin ampliar flota.
RRHH Dotación, productividad, costo laboral. Incorporar vendedores.
Canjes Valor, liquidez, riesgo, costo oportunidad. Aceptar departamento por materiales.
Estratégica Sucursal, expansión, industria, modelo. Abrir nueva unidad de negocio.

7. Estructura estándar de una simulación

Cada simulación FARO debería tener:

{
  "scenario_id": "SCN_001",
  "title": "Reducir descuento máximo comercial",
  "origin_diagnosis": "crecimiento_no_rentable",
  "origin_recommendation": "auditar_descuentos_altos",
  "baseline": {},
  "assumptions": {},
  "variables_changed": [],
  "affected_kpis": [],
  "expected_impact": {},
  "risks": [],
  "confidence": 0.78,
  "decision_required": true,
  "recommended_next_step": "probar piloto por 30 días"
}

8. Campos obligatorios

Campo Para qué sirve
scenario_id Identificador único.
title Nombre del escenario.
origin_diagnosis Diagnóstico que lo originó.
origin_recommendation Recomendación asociada.
baseline Situación actual.
assumptions Supuestos usados.
variables_changed Variables modificadas.
affected_kpis KPIs afectados.
expected_impact Impacto estimado.
risks Riesgos del escenario.
confidence Confianza de la simulación.
decision_required Si requiere aprobación.
recommended_next_step Qué hacer después.

9. Escenario base

Toda simulación necesita un escenario base.

El escenario base representa:

situación actual
últimos datos reales
KPIs actuales
umbrales actuales
reglas actuales
tensiones activas
acciones en curso

Ejemplo:

{
  "sales": 100000000,
  "gross_margin_rate": 0.21,
  "discount_rate": 0.12,
  "days_to_collect": 43,
  "commission_paid": 3200000,
  "stock_critical_rate": 0.13
}

Sin escenario base, la simulación es un dibujo. Bien presentado, pero dibujo al fin.


10. Supuestos de simulación

Los supuestos son las condiciones que FARO usa para estimar impacto.

Ejemplo:

Si bajamos descuento máximo:
- las ventas pueden caer 5%,
- el margen puede subir 3 puntos,
- la comisión puede bajar 8%,
- la cobranza puede mejorar si se vende menos a clientes riesgosos.

Formato:

{
  "discount_rate_new": 0.08,
  "sales_drop_expected": 0.05,
  "margin_improvement_expected": 0.03,
  "collection_improvement_days": 5
}

Regla importante:

Todo supuesto debe quedar visible. Si el supuesto es malo, la simulación también.


11. Fórmula general de impacto de escenario

Impacto escenario = resultado simulado - resultado base

Código:

def impacto_escenario(resultado_simulado, resultado_base):
    return resultado_simulado - resultado_base

Ejemplo:

Margen base: 21%
Margen simulado: 24%

Impacto: +3 puntos

12. Fórmula de rentabilidad bruta simulada

Utilidad bruta = ventas netas × margen bruto

Código:

def utilidad_bruta(ventas_netas, margen_bruto):
    return ventas_netas * margen_bruto

Ejemplo:

Escenario base:
Ventas: $100M
Margen: 21%
Utilidad bruta: $21M

Escenario simulado:
Ventas: $95M
Margen: 25%
Utilidad bruta: $23,75M

Resultado:
Aunque ventas caen, utilidad bruta sube $2,75M.

13. Simulación comercial: bajar descuento máximo

Situación base

Ventas: $100M
Descuento promedio: 12%
Margen bruto: 21%
Utilidad bruta: $21M

Escenario simulado

Bajar descuento máximo del 12% al 8%.
Supuesto: ventas caen 5%.
Supuesto: margen sube de 21% a 25%.

Código

def simular_descuento(
    ventas_base,
    margen_base,
    ventas_drop,
    margen_nuevo
):
    utilidad_base = ventas_base * margen_base
    ventas_simuladas = ventas_base * (1 - ventas_drop)
    utilidad_simulada = ventas_simuladas * margen_nuevo

    return {
        "ventas_base": ventas_base,
        "utilidad_base": utilidad_base,
        "ventas_simuladas": ventas_simuladas,
        "utilidad_simulada": utilidad_simulada,
        "impacto_utilidad": utilidad_simulada - utilidad_base
    }

Resultado ejemplo

Ventas simuladas: $95M
Utilidad bruta simulada: $23,75M
Impacto utilidad: +$2,75M

Lectura FARO

La reducción de descuento podría mejorar la utilidad bruta aunque baje el volumen vendido. Conviene probar piloto controlado antes de aplicar a toda la empresa.

14. Simulación de comisión comercial

Problema

La comisión actual premia ventas, pero no necesariamente margen ni cobranza.

Escenario base

Comisión actual = ventas cobradas o facturadas × 3%

Escenario alternativo

Comisión nueva =
base por venta
+ premio por margen sano
+ premio por cobranza
- ajuste por descuento excesivo

Fórmula conceptual

Comisión ajustada =
venta_neta × tasa_base
× factor_margen
× factor_cobranza
× factor_descuento

Código:

def comision_ajustada(
    venta_neta,
    tasa_base,
    margen,
    margen_objetivo,
    dias_cobranza,
    dias_objetivo,
    descuento,
    descuento_maximo
):
    factor_margen = min(margen / margen_objetivo, 1.2) if margen_objetivo else 1
    factor_cobranza = 1 if dias_cobranza <= dias_objetivo else 0.75
    factor_descuento = 1 if descuento <= descuento_maximo else 0.80

    return venta_neta * tasa_base * factor_margen * factor_cobranza * factor_descuento

Lectura FARO

Este modelo no castiga al vendedor por vender, pero deja de premiar igual una venta sana y una venta que destruye margen o caja.

Acá hay que ser muy fino: si el cambio de comisión es torpe, el sistema queda prolijo pero el vendedor se desmotiva. Y eso también se paga.


15. Simulación de cobranza

Pregunta

¿Qué pasa si cobramos 10 días antes?

Datos

Cuentas por cobrar: $80M
Días actuales de cobranza: 45
Objetivo: 35
Costo financiero mensual estimado: 5%

Fórmula simple

Ahorro financiero aproximado =
cuentas por cobrar × tasa diaria × días reducidos

Código:

def ahorro_financiero_cobranza(cuentas_por_cobrar, tasa_mensual, dias_reducidos):
    tasa_diaria = tasa_mensual / 30
    return cuentas_por_cobrar * tasa_diaria * dias_reducidos

Lectura FARO

Reducir días de cobranza puede mejorar caja y reducir costo financiero. Conviene priorizar clientes de alto saldo y alta mora.

16. Simulación de stock crítico

Pregunta

¿Qué pasa si no reponemos este producto?

Datos

Stock actual: 180
Venta promedio diaria: 45
Plazo proveedor: 7 días
Margen unitario: $1.200

Cálculo

Días cobertura = 180 / 45 = 4 días
Días sin stock = 7 - 4 = 3 días
Venta perdida estimada = 3 × 45 = 135 unidades
Margen perdido = 135 × $1.200 = $162.000

Código:

def simular_quiebre_stock(stock_actual, venta_promedio_diaria, plazo_proveedor, margen_unitario):
    if venta_promedio_diaria == 0:
        return None

    dias_cobertura = stock_actual / venta_promedio_diaria
    dias_sin_stock = max(plazo_proveedor - dias_cobertura, 0)
    unidades_perdidas = dias_sin_stock * venta_promedio_diaria
    margen_perdido = unidades_perdidas * margen_unitario

    return {
        "dias_cobertura": dias_cobertura,
        "dias_sin_stock": dias_sin_stock,
        "unidades_perdidas": unidades_perdidas,
        "margen_perdido": margen_perdido
    }

Lectura FARO

Si no se repone, el producto puede quedar sin stock durante 3 días y generar pérdida de margen estimada. Si además es producto tractor, puede afectar ventas de productos complementarios.

17. Simulación de stock inmovilizado

Pregunta

¿Conviene liquidar stock lento?

Datos

Stock valorizado lento: $20M
Margen normal: 30%
Descuento liquidación: 15%
Costo financiero mensual: 5%
Meses sin movimiento: 6

Lógica

FARO debe comparar:

mantener stock
vs
liquidarlo con descuento
vs
redistribuirlo
vs
bloquear nuevas compras

Código simple:

def simular_liquidacion_stock(
    stock_valorizado,
    margen_normal,
    descuento_liquidacion,
    costo_financiero_mensual,
    meses_estimados_sin_movimiento
):
    costo_oportunidad = stock_valorizado * costo_financiero_mensual * meses_estimados_sin_movimiento
    perdida_descuento = stock_valorizado * descuento_liquidacion
    beneficio_liquidar = costo_oportunidad - perdida_descuento

    return {
        "costo_oportunidad_mantener": costo_oportunidad,
        "perdida_por_descuento": perdida_descuento,
        "beneficio_estimado_liquidar": beneficio_liquidar
    }

Lectura FARO

Si el costo de mantener stock parado es mayor que la pérdida por liquidarlo, conviene liberar capital, siempre que no destruya posicionamiento comercial.

18. Simulación de proveedor crítico

Pregunta

¿Qué pasa si seguimos con este proveedor?

Variables

cumplimiento proveedor
plazo promedio
dependencia
precio
productos críticos asociados
proveedor alternativo
diferencia de costo
riesgo de quiebre

Código:

def simular_cambio_proveedor(
    costo_actual,
    costo_alternativo,
    cumplimiento_actual,
    cumplimiento_alternativo,
    ventas_riesgo_por_quiebre
):
    diferencia_costo = costo_alternativo - costo_actual
    mejora_cumplimiento = cumplimiento_alternativo - cumplimiento_actual

    beneficio_riesgo = ventas_riesgo_por_quiebre * mejora_cumplimiento

    return {
        "diferencia_costo": diferencia_costo,
        "mejora_cumplimiento": mejora_cumplimiento,
        "beneficio_estimado_por_menor_quiebre": beneficio_riesgo,
        "resultado_neto_estimado": beneficio_riesgo - diferencia_costo
    }

Lectura FARO

Un proveedor más caro puede convenir si reduce quiebres, demoras y ventas perdidas.

Clásico error empresario: comprar más barato y pagar más caro por todos los daños colaterales. El Excel a veces miente por omisión.


19. Simulación de cliente grande riesgoso

Pregunta

¿Conviene seguir vendiendo a crédito a este cliente?

Variables

ventas al cliente
margen cliente
deuda vencida
días de mora
probabilidad de cobro
costo financiero
valor estratégico

Fórmula de rentabilidad ajustada por riesgo

Rentabilidad ajustada =
margen esperado × probabilidad de cobro
- costo financiero
- pérdida esperada por incobrabilidad

Código:

def rentabilidad_cliente_ajustada(
    ventas_cliente,
    margen_rate,
    probabilidad_cobro,
    deuda_vencida,
    perdida_esperada_rate,
    costo_financiero
):
    margen_esperado = ventas_cliente * margen_rate * probabilidad_cobro
    perdida_esperada = deuda_vencida * perdida_esperada_rate

    return margen_esperado - perdida_esperada - costo_financiero

Posibles escenarios

Escenario Lectura
Mantener crédito Sostiene ventas, aumenta riesgo.
Reducir crédito Baja riesgo, puede caer venta.
Exigir pago parcial Equilibra venta y caja.
Bloquear cuenta Protege caja, riesgo comercial.

20. Simulación de canje

Especialmente relevante para construcción, insumos, desarrolladoras y real estate.

Pregunta

¿Conviene aceptar un departamento, lote, vehículo u otro activo a cambio de materiales?

Variables

valor de materiales entregados
costo de materiales
margen esperado
valor real del activo recibido
liquidez del activo
plazo estimado de venta
riesgo legal
costo financiero
costo de oportunidad
descuento por liquidez

Fórmula conceptual

Valor neto del canje =
valor activo ajustado por liquidez
- costo de materiales
- costo financiero del plazo
- riesgo estimado

Código:

def simular_canje(
    valor_materiales,
    costo_materiales,
    valor_activo,
    factor_liquidez,
    costo_financiero,
    riesgo_estimado
):
    valor_activo_ajustado = valor_activo * factor_liquidez
    valor_neto = valor_activo_ajustado - costo_materiales - costo_financiero - riesgo_estimado

    margen_normal = valor_materiales - costo_materiales

    return {
        "valor_activo_ajustado": valor_activo_ajustado,
        "valor_neto_canje": valor_neto,
        "margen_normal_venta": margen_normal,
        "diferencia_vs_venta_normal": valor_neto - margen_normal
    }

Lectura FARO

El canje no debe evaluarse por el valor nominal del activo. Debe evaluarse por liquidez, plazo, riesgo legal, costo financiero y diferencia contra venta normal.

Frase para Dirección:

Una venta por canje no es venta hasta que se convierte en valor líquido o estratégico real.


21. Simulación de precios

Pregunta

¿Qué pasa si subimos precios 7%?

Variables:

precio actual
precio nuevo
elasticidad estimada
caída esperada de volumen
margen unitario
competencia
stock disponible

Código simple:

def simular_suba_precio(
    ventas_base,
    margen_base,
    suba_precio,
    caida_volumen_estimada
):
    ventas_simuladas = ventas_base * (1 + suba_precio) * (1 - caida_volumen_estimada)
    margen_simulado = margen_base + suba_precio
    utilidad_base = ventas_base * margen_base
    utilidad_simulada = ventas_simuladas * margen_simulado

    return {
        "ventas_simuladas": ventas_simuladas,
        "margen_simulado": margen_simulado,
        "utilidad_base": utilidad_base,
        "utilidad_simulada": utilidad_simulada,
        "impacto_utilidad": utilidad_simulada - utilidad_base
    }

Lectura FARO

Subir precios puede mejorar margen, pero debe simularse con caída probable de volumen, reacción de clientes y competencia.

22. Simulación de apertura de sucursal

Pregunta

¿Qué pasa si abrimos una nueva sucursal?

Variables:

inversión inicial
alquiler
dotación
stock inicial
ventas esperadas
margen esperado
punto de equilibrio
plazo de maduración
caja necesaria
riesgo operativo

Fórmula de punto de equilibrio

Punto de equilibrio ventas =
costos fijos / margen de contribución

Código:

def punto_equilibrio(costos_fijos, margen_contribucion):
    if margen_contribucion == 0:
        return None
    return costos_fijos / margen_contribucion

Simulación simple

def simular_sucursal(
    inversion_inicial,
    costos_fijos_mensuales,
    ventas_mensuales_estimadas,
    margen_contribucion,
    meses
):
    utilidad_mensual = ventas_mensuales_estimadas * margen_contribucion - costos_fijos_mensuales
    utilidad_acumulada = utilidad_mensual * meses - inversion_inicial

    return {
        "utilidad_mensual_estimada": utilidad_mensual,
        "utilidad_acumulada": utilidad_acumulada,
        "punto_equilibrio_ventas": punto_equilibrio(costos_fijos_mensuales, margen_contribucion)
    }

Lectura FARO

La apertura debe evaluarse por caja, punto de equilibrio, stock inicial, dotación, maduración comercial y capacidad de gestión.

23. Simulación de acciones

FARO puede simular impacto de ejecutar o no ejecutar una acción.

Ejemplo:

Acción:
Auditar descuentos altos.

Si se ejecuta:
margen puede mejorar.

Si no se ejecuta:
la tensión puede continuar y afectar FARO Score.

Código:

def simular_accion(
    score_actual,
    impacto_esperado_si_ejecuta,
    impacto_esperado_si_no_ejecuta
):
    return {
        "score_si_ejecuta": score_actual + impacto_esperado_si_ejecuta,
        "score_si_no_ejecuta": score_actual + impacto_esperado_si_no_ejecuta,
        "diferencia": impacto_esperado_si_ejecuta - impacto_esperado_si_no_ejecuta
    }

24. Simulación de no hacer nada

Este escenario es clave.

Toda decisión importante debería comparar contra:

Escenario 0: no hacer nada.

Ejemplo:

Si no se cambia política de descuentos:
- margen puede seguir bajando,
- comisión puede seguir premiando ventas no rentables,
- caja puede deteriorarse,
- FARO Score puede caer.

Código:

def escenario_no_hacer_nada(kpi_actual, tendencia_periodica, periodos):
    return kpi_actual + tendencia_periodica * periodos

Ejemplo:

Margen actual: 21%
Tendencia: -1 punto mensual
En 3 meses: 18%

Lectura:

No hacer nada también es una decisión. Generalmente la más cómoda. Y muchas veces la más cara.

25. Simulación de escenarios múltiples

FARO debe comparar varias alternativas.

Ejemplo comercial:

Escenario Ventas Margen Utilidad bruta Riesgo
Base $100M 21% $21M Alto
Bajar descuento a 10% $98M 23% $22,54M Medio
Bajar descuento a 8% $95M 25% $23,75M Medio
Bajar descuento a 5% $88M 28% $24,64M Alto comercial

La decisión no es automática. Dirección debe evaluar utilidad, riesgo, mercado y conducta comercial.


26. Análisis de sensibilidad

La sensibilidad muestra qué variable mueve más el resultado.

Ejemplo:

Resultado depende de:
- caída de ventas,
- mejora de margen,
- cobranza,
- costo financiero.

Código simple:

def sensibilidad_descuento(ventas_base, margen_base, escenarios):
    resultados = []

    for e in escenarios:
        ventas_sim = ventas_base * (1 - e["caida_ventas"])
        utilidad = ventas_sim * e["margen"]

        resultados.append({
            "escenario": e["nombre"],
            "caida_ventas": e["caida_ventas"],
            "margen": e["margen"],
            "utilidad": utilidad
        })

    return resultados

Uso:

Permite ver si la decisión depende más de vender menos o de recuperar margen.

27. Simulación Monte Carlo

Para escenarios avanzados, FARO puede simular rangos, no un solo valor.

Ejemplo:

La caída de ventas no será exactamente 5%.
Puede estar entre 3% y 10%.

Código conceptual:

import random

def monte_carlo_descuento(ventas_base, iteraciones=1000):
    resultados = []

    for _ in range(iteraciones):
        caida_ventas = random.uniform(0.03, 0.10)
        margen_nuevo = random.uniform(0.23, 0.27)

        ventas_sim = ventas_base * (1 - caida_ventas)
        utilidad = ventas_sim * margen_nuevo

        resultados.append(utilidad)

    return {
        "min": min(resultados),
        "max": max(resultados),
        "promedio": sum(resultados) / len(resultados)
    }

Lectura FARO:

En vez de prometer un resultado exacto, FARO muestra un rango probable.

Eso es más serio. En empresas, el decimal perfecto suele ser maquillaje.


28. Simulación con restricciones

Algunas decisiones tienen restricciones.

Ejemplo:

No se puede comprar más de $30M por caja.
No se puede bajar stock de productos críticos.
No se puede reducir comisión bajo cierto piso.
No se puede bloquear cliente estratégico sin aprobación.

Código conceptual:

def validar_restricciones(escenario, restricciones):
    violaciones = []

    for nombre, regla in restricciones.items():
        if not regla(escenario):
            violaciones.append(nombre)

    return {
        "valid": len(violaciones) == 0,
        "violaciones": violaciones
    }

Ejemplo:

restricciones = {
    "caja_maxima_compra": lambda e: e["compra_total"] <= e["caja_disponible"] * 0.50,
    "margen_minimo": lambda e: e["margen_simulado"] >= 0.20
}

29. Score de escenario

FARO puede puntuar escenarios para compararlos.

Score escenario =
impacto económico × 25%
+ impacto en caja × 20%
+ mejora de FARO Score × 15%
+ riesgo bajo × 15%
+ facilidad de implementación × 10%
+ confianza × 10%
+ velocidad de impacto × 5%

Código:

def score_escenario(
    impacto_economico,
    impacto_caja,
    mejora_score,
    bajo_riesgo,
    facilidad,
    confianza,
    velocidad
):
    return round(
        impacto_economico * 0.25 +
        impacto_caja * 0.20 +
        mejora_score * 0.15 +
        bajo_riesgo * 0.15 +
        facilidad * 0.10 +
        confianza * 0.10 +
        velocidad * 0.05,
        2
    )

30. Comparador de escenarios

Código conceptual:

def comparar_escenarios(escenarios):
    return sorted(
        escenarios,
        key=lambda x: x["score_escenario"],
        reverse=True
    )

Ejemplo salida:

[
  {
    "escenario": "Bajar descuento máximo a 8%",
    "score": 82,
    "lectura": "Mayor utilidad esperada con riesgo comercial moderado."
  },
  {
    "escenario": "Mantener política actual",
    "score": 45,
    "lectura": "Menor riesgo comercial inmediato, pero deterioro de margen."
  }
]

31. Simulación y confianza

Toda simulación debe tener confianza.

Confianza simulación =
calidad de datos base × 30%
+ calidad de supuestos × 25%
+ historial comparable × 20%
+ coherencia sectorial × 15%
+ validación experta × 10%

Código:

def confianza_simulacion(
    calidad_datos_base,
    calidad_supuestos,
    historial_comparable,
    coherencia_sectorial,
    validacion_experta
):
    return round(
        calidad_datos_base * 0.30 +
        calidad_supuestos * 0.25 +
        historial_comparable * 0.20 +
        coherencia_sectorial * 0.15 +
        validacion_experta * 0.10,
        2
    )

Lectura:

Confianza Uso
0.85 - 1.00 Simulación sólida.
0.70 - 0.84 Buena para decisión con seguimiento.
0.50 - 0.69 Usar como referencia, validar supuestos.
< 0.50 No decidir con esta simulación.

32. Simulación y FARO Score

FARO puede estimar el score futuro.

Ejemplo:

FARO Score actual: 68

Escenario A:
Auditar descuentos + mejorar cobranza + reponer stock.
Score esperado: 76

Escenario B:
Solo vender más.
Score esperado: 64

Escenario C:
No hacer nada.
Score esperado: 61

Código:

def simular_faro_score(score_actual, impactos):
    return max(0, min(100, score_actual + sum(impactos)))

Ejemplo:

score_simulado = simular_faro_score(
    score_actual=68,
    impactos=[4, 3, 2, -1]
)

33. Simulación y recomendación final

FARO no debe elegir siempre el escenario con más ganancia.

Debe considerar:

riesgo
caja
confianza
capacidad de ejecución
impacto humano
sensibilidad comercial
tiempo
aprobaciones necesarias

Ejemplo:

Escenario con mayor utilidad:
Bajar descuento máximo a 5%.

Pero:
alto riesgo de caída de ventas y conflicto comercial.

Escenario recomendado:
bajar a 8% durante piloto de 30 días.

Salida FARO:

FARO recomienda probar el escenario intermedio, porque mejora utilidad esperada sin asumir el riesgo comercial máximo.

34. Simulación y piloto

Muchas decisiones no deben implementarse globalmente de entrada.

FARO puede sugerir:

piloto por sucursal
piloto por vendedor
piloto por familia de producto
piloto por canal
piloto por cliente
piloto por 30 días

Ejemplo:

No cambiar comisión de toda la empresa.
Primero simular y probar en una categoría o equipo.

Código:

def recomendar_piloto(riesgo, impacto, confianza):
    if impacto >= 70 and riesgo >= 60 and confianza >= 0.70:
        return "recomendar_piloto_controlado"
    if impacto >= 70 and riesgo < 60:
        return "implementar_con_seguimiento"
    return "mantener_observacion_o_revisar_supuestos"

35. Simulación y decisiones sensibles

Siempre requieren validación humana:

modificar comisiones
bloquear clientes
aceptar canjes
cambiar política de crédito
despedir o reestructurar personal
cambiar proveedores estratégicos
abrir o cerrar sucursales
subir precios masivamente

Regla:

FARO puede simular y recomendar. Dirección decide.


36. Motor de simulación FARO

Flujo recomendado:

Recomendación sensible
→ definir escenario base
→ definir variables a modificar
→ cargar supuestos
→ correr simulación
→ comparar escenarios
→ calcular impacto
→ calcular riesgo
→ calcular confianza
→ estimar FARO Score futuro
→ sugerir decisión / piloto / validación

Código conceptual:

def motor_simulacion(baseline, escenarios):
    resultados = []

    for escenario in escenarios:
        resultado = escenario["funcion"](baseline, escenario["supuestos"])

        score = score_escenario(
            impacto_economico=resultado["impacto_economico"],
            impacto_caja=resultado["impacto_caja"],
            mejora_score=resultado["mejora_score"],
            bajo_riesgo=resultado["bajo_riesgo"],
            facilidad=resultado["facilidad"],
            confianza=resultado["confianza"],
            velocidad=resultado["velocidad"]
        )

        resultados.append({
            "scenario_name": escenario["nombre"],
            "resultado": resultado,
            "score_escenario": score
        })

    return comparar_escenarios(resultados)

37. Tabla SQL de escenarios

CREATE TABLE scenario_library (
    scenario_code TEXT PRIMARY KEY,
    title TEXT NOT NULL,
    description TEXT,
    scenario_type TEXT,
    applicable_diagnoses JSONB,
    applicable_recommendations JSONB,
    applicable_industries JSONB,
    required_inputs JSONB,
    default_assumptions JSONB,
    affected_kpis JSONB,
    sensitive BOOLEAN DEFAULT false,
    requires_approval BOOLEAN DEFAULT false,
    active BOOLEAN DEFAULT true,
    version TEXT DEFAULT '1.0',
    created_at TIMESTAMP DEFAULT now(),
    updated_at TIMESTAMP DEFAULT now()
);

38. Tabla SQL de corridas de simulación

CREATE TABLE scenario_runs (
    scenario_run_id TEXT PRIMARY KEY,
    scenario_code TEXT NOT NULL,
    company_id TEXT,
    branch_id TEXT,
    area_id TEXT,
    origin_recommendation_id TEXT,
    origin_diagnosis_id TEXT,
    baseline_snapshot JSONB,
    assumptions JSONB,
    result_summary JSONB,
    confidence NUMERIC,
    scenario_score NUMERIC,
    recommended_decision TEXT,
    run_by TEXT,
    created_at TIMESTAMP DEFAULT now()
);

39. Tabla SQL de resultados por KPI

CREATE TABLE scenario_kpi_results (
    id TEXT PRIMARY KEY,
    scenario_run_id TEXT NOT NULL,
    kpi_code TEXT NOT NULL,
    baseline_value NUMERIC,
    simulated_value NUMERIC,
    delta_value NUMERIC,
    delta_rate NUMERIC,
    interpretation TEXT,
    created_at TIMESTAMP DEFAULT now()
);

40. Tabla SQL de decisiones por escenario

CREATE TABLE scenario_decisions (
    decision_id TEXT PRIMARY KEY,
    scenario_run_id TEXT NOT NULL,
    decision_status TEXT,
    approved_by TEXT,
    decision_comment TEXT,
    selected_option TEXT,
    converted_to_action BOOLEAN DEFAULT false,
    action_id TEXT,
    created_at TIMESTAMP DEFAULT now()
);

Estados posibles:

approved
rejected
needs_more_data
pilot_required
deferred
converted_to_action

41. Ejemplo completo: comisión comercial

Diagnóstico

Comisión desalineada.

Recomendación

Rediseñar comisión considerando margen y cobranza.

Escenario A — Actual

Comisión sobre venta facturada.

Escenario B — Ajustado

Comisión sobre margen y cobranza.

FARO simula

Impacto esperado:
- comisión total baja 8%,
- margen mejora 2 a 4 puntos,
- vendedores con alto descuento pierden variable,
- vendedores con venta sana mantienen o mejoran incentivo.

Recomendación final

No implementar globalmente de inmediato.
Primero correr simulación por vendedor y piloto de 30 días.

42. Ejemplo completo: canje

Diagnóstico

Canje mal evaluado.

Propuesta

Cliente ofrece departamento por materiales.

FARO compara

Variable Venta normal Canje
Valor operación $100M $100M nominal
Caja inmediata Alta si cobra Baja
Liquidez Alta Media/baja
Riesgo legal Bajo Medio/alto
Plazo recupero 30-60 días 180-360 días
Costo financiero Bajo Alto

Recomendación FARO

No evaluar el canje por valor nominal. Simular valor líquido ajustado, costo financiero, plazo de realización y riesgo legal. Requiere aprobación de Dirección, Finanzas y Legal.

43. Ejemplo completo: stock crítico

Diagnóstico

Riesgo futuro de stock crítico.

Escenario A

No comprar.
Resultado: quiebre estimado en 4 días.

Escenario B

Compra urgente.
Resultado: evita quiebre, pero costo sube 8%.

Escenario C

Redistribuir stock entre sucursales.
Resultado: reduce riesgo sin compra inmediata.

Recomendación FARO

Primero revisar redistribución. Si no alcanza, activar compra urgente o proveedor alternativo.

44. Ejemplo completo: caja

Diagnóstico

Caja bajo mínimo operativo.

Escenarios

Escenario Caja 7 días Riesgo Comentario
No hacer nada negativa crítico No viable
Cobranza intensiva mejora media medio Requiere gestión rápida
Reprogramar pagos mejora alta medio Requiere negociación
Cobranza + pagos mejora mayor menor Mejor escenario

Recomendación FARO

Aplicar escenario combinado: cobranza intensiva de clientes clave y reprogramación de pagos no críticos.

45. Herramientas posibles

Necesidad Herramientas
Cálculos simples Python, SQL
Simulación financiera Python, Pandas
Monte Carlo Python, NumPy
Reglas de escenarios JSON, PostgreSQL JSONB
Orquestación Airflow, Prefect, Celery, Temporal
Modelos predictivos Scikit-learn, statsmodels
Optimización OR-Tools
Visualización FARO Connect frontend, Power BI, Metabase
Auditoría Tablas scenario_runs y scenario_decisions
IA explicativa OpenAI API con payload estructurado

La herramienta importa menos que la arquitectura. Primero lógica clara; después motor.


46. Uso de IA en simulaciones

La IA no debe inventar números.

Uso correcto:

Redactar explicación.
Proponer variables a considerar.
Explicar riesgos.
Comparar escenarios en lenguaje ejecutivo.

Uso riesgoso:

Inventar elasticidades.
Inventar costos.
Inventar probabilidades.
Decidir sin datos.

Prompt interno recomendado:

Actúa como analista ejecutivo FARO.

Con base únicamente en los escenarios estructurados recibidos, redacta una comparación ejecutiva.

No inventes datos.
No agregues supuestos no incluidos.
Distingue resultado calculado de hipótesis.
Incluye:
1. escenario base,
2. escenarios comparados,
3. impacto estimado,
4. riesgos,
5. confianza,
6. recomendación final,
7. si requiere aprobación humana.

Payload:
{scenario_payload}

47. Testing de simulaciones

Test utilidad bruta

def test_utilidad_bruta():
    resultado = utilidad_bruta(ventas_netas=100000000, margen_bruto=0.21)
    assert resultado == 21000000

Test descuento mejora utilidad

def test_simular_descuento_mejora_utilidad():
    resultado = simular_descuento(
        ventas_base=100000000,
        margen_base=0.21,
        ventas_drop=0.05,
        margen_nuevo=0.25
    )

    assert resultado["impacto_utilidad"] > 0

Test canje peor que venta normal

def test_canje_desfavorable():
    resultado = simular_canje(
        valor_materiales=100000000,
        costo_materiales=75000000,
        valor_activo=100000000,
        factor_liquidez=0.70,
        costo_financiero=8000000,
        riesgo_estimado=5000000
    )

    assert resultado["diferencia_vs_venta_normal"] < 0

48. Riesgos si no existe simulación

Riesgo Consecuencia
Se ejecutan recomendaciones sensibles a ciegas Daño comercial, financiero o humano.
Se cambia comisión sin medir impacto Desmotivación o conflicto interno.
Se aceptan canjes por valor nominal Caja atrapada y riesgo legal.
Se baja descuento sin medir volumen Caída comercial innecesaria.
Se compra stock sin evaluar rotación Capital inmovilizado.
Se bloquean clientes sin medir rentabilidad total Pérdida comercial.
Se abre sucursal sin punto de equilibrio Presión de caja.
FARO parece opinador, no sistema directivo Menor confianza técnica.

49. Output final del Anexo 27

Al finalizar este anexo, FARO debe tener definido:

1. Biblioteca de simulaciones.
2. Tipos de escenarios.
3. Estructura estándar de simulación.
4. Escenario base.
5. Supuestos de simulación.
6. Fórmulas de impacto.
7. Simulación comercial.
8. Simulación financiera.
9. Simulación de stock.
10. Simulación de proveedores.
11. Simulación de clientes.
12. Simulación de canjes.
13. Simulación de comisiones.
14. Simulación de precios.
15. Simulación de sucursales.
16. Simulación de no hacer nada.
17. Comparador de escenarios.
18. Análisis de sensibilidad.
19. Simulación Monte Carlo.
20. Score de escenario.
21. Confianza de simulación.
22. Impacto simulado en FARO Score.
23. Recomendación final por escenario.
24. Reglas de piloto.
25. Decisiones sensibles con aprobación humana.
26. Tablas SQL de escenarios.
27. Motor de simulación.
28. Testing de simulaciones.
29. Uso controlado de IA explicativa.
30. Aprendizaje posterior a la decisión.

50. Conexión con otros anexos

Próximo anexo Qué recibe desde Anexo 27
Anexo 17 — Biblioteca de KPIs KPIs usados como variables de simulación.
Anexo 18 — Objetivos y umbrales Metas contra las que se comparan escenarios.
Anexo 20 — Reglas de negocio Condiciones que definen escenarios aplicables.
Anexo 22 — Biblioteca de tensiones Tensiones que originan simulaciones.
Anexo 23 — Diagnóstico ejecutivo Diagnósticos que requieren probar alternativas.
Anexo 24 — Confianza del diagnóstico Confianza base para simular.
Anexo 25 — Priorización ejecutiva Qué escenarios simular primero.
Anexo 26 — Recomendaciones FARO Recomendaciones que deben validarse con simulación.
Anexo 28 — FARO Action Guide Guía ejecutiva basada en simulación aprobada.
Anexo 29 — Biblioteca de acciones Acciones concretas derivadas del escenario elegido.
Anexo 31Workflow y escalamiento Ejecución de decisiones simuladas y aprobadas.
Anexo 35 — FARO Score Score actual vs score simulado.
Anexo 36 — Aprendizaje Comparación entre simulación y resultado real.
Anexo 37Recalibración Ajuste de supuestos y modelos según resultados.

La Simulación de Escenarios FARO permite probar decisiones antes de ejecutarlas. Toma diagnósticos y recomendaciones, define escenarios alternativos, calcula impacto esperado en ventas, margen, caja, stock, riesgo, FARO Score y confianza, y ayuda a decidir si conviene actuar, pilotear, validar o esperar mejores datos.

Versión 1.0 · Última revisión: 2026-05-28 Anexo 27 de 40 · Fase 7.3