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 31 — Workflow 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 37 — Recalibració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.