Analizador DCF
Cuándo usar esta habilidad
Construir una valoración por Flujo de Caja Descontado (DCF) de una empresa. Usar cuando el usuario proporcione el FCF y el WACC de la empresa, pregunte por el valor intrínseco de la empresa, o pregunte por el valor justo por acción. No usar si la empresa es una institución financiera.
Entradas
- FCFF (flujo de caja libre para la empresa) para N años (N = len(FCFF))
- WACC (Costo Promedio Ponderado de Capital) o todos sus componentes (costo de capital, costo de deuda, impuestos, E/V, D/V)
- Crecimiento terminal g
- Deuda Neta de la empresa
- Número de acciones (NShares)
El usuario puede proporcionar los datos en el mensaje o en un CSV; la habilidad los ensambla en input.json siguiendo el Contrato.
Procedimiento
- Validar los valores de entrada, considerando su métrica, valores y signo (sin FC negativos, g < WACC).
- Si todas las entradas son correctas, convertir las que lo necesiten (por ejemplo, convertir porcentajes a decimales: WACC, g, Ke, t...).
- Si el WACC no está dado (pero sí sus componentes), calcularlo.
- Escribir las entradas en un JSON temporal, ejecutar
scripts/dcf.py <ruta>mediante Bash, analizar el JSON desde la salida estándar. - Construir una tabla de sensibilidad sobre WACC y g.
Salida
Devolver una tabla con el Valor de la Empresa, Valor del Patrimonio y Valor Justo por Acción de la empresa, seguida de la tabla de sensibilidad. Debajo de las tablas, devolver un breve comentario de los resultados.
Casos límite
- Si g ≥ WACC, devolver una advertencia y pedir al usuario un valor válido.
- Si una celda de la tabla de sensibilidad tiene g mayor que WACC, el fv_share relativo será nulo.
- Si los FCF son todos negativos, devolver una advertencia y no calcular.
- Si faltan valores, preguntar al usuario si faltan y qué valores usar en su lugar.
- Cualquier otro error durante el cómputo debe devolver una advertencia explicando el problema.
Contrato
La habilidad escribe input.json, que es la entrada para el script de Python
scripts/dcf.py. Ejecutarlo mediante Bash: python scripts/dcf.py input.json.
Esquema de ENTRADA (claves):
{
"FCFF": [float, ...],
"WACC": float | null,
"g": float,
"NetDebt": float,
"NShares": float,
"E_V": float | null,
"Ke": float | null,
"D_V": float | null,
"Kd": float | null,
"t": float | null,
"wacc_steps": [float, ...] | null,
"g_steps": [float, ...] | null
}
Usar null para cualquier valor faltante. N se deriva de len(FCFF). Si WACC es
null, sus componentes (E_V, Ke, D_V, Kd, t) deben ser proporcionados todos.
El script imprime un objeto JSON a la salida estándar, que la habilidad analiza.
Esquema de SALIDA (éxito):
{
"ok": true, "error": null, "field": null,
"enterprise_value": float,
"equity_value": float,
"fair_value_per_share": float,
"sensitivity": [{"wacc": float, "g": float, "fv_share": float | null}, ...]
}
Esquema de SALIDA (error):
{"ok": false, "error": "<mensaje>", "field": "<clave>"}
Referencias
Para todas las fórmulas, usar references/dcf_methodology.md.