Constructor de Modelos DCF
Descripción General
Este skill crea modelos DCF de calidad institucional para valoración de acciones, siguiendo estándares de banca de inversión. Cada análisis produce un modelo detallado en Excel (con análisis de sensibilidad incluido al final de la hoja DCF).
Herramientas
- Por defecto, utilice toda la información proporcionada por el usuario y los servidores MCP disponibles para la obtención de datos.
Restricciones Críticas — Léalas Primero
Estas restricciones aplican durante toda la construcción del modelo DCF. Revíselas antes de comenzar:
Entorno: Office JS vs Python/openpyxl:
- Si se ejecuta dentro de Excel (complemento de Office / entorno Office JS): Use Office JS directamente — NO use Python/openpyxl. Escriba fórmulas mediante
range.formulas = [["=D19*(1+$B$8)"]]. No se necesita un paso separado de recálculo; Excel calcula de forma nativa. Userange.format.*para el estilo. Se aplica la misma regla de fórmulas sobre valores fijos: establezca.formulas, nunca.valuespara celdas derivadas. - Si se genera un archivo .xlsx independiente (sin sesión activa de Excel): Use Python/openpyxl como se describe a continuación, luego ejecute
recalc.pyantes de la entrega. - El resto de este skill utiliza ejemplos de openpyxl: tradúzcalos a llamadas de la API de Office JS cuando esté en ese entorno, pero todos los principios (cadenas de fórmulas, comentarios de celda, puntos de control de sección, bucles de tabla de sensibilidad) se aplican de manera idéntica.
⚠️ Peligro de celdas combinadas en Office JS: Al construir encabezados de sección con celdas combinadas, NO llame a .merge() y luego establezca .values en el rango combinado — Office JS aún reporta las dimensiones originales del rango y lanzará InvalidArgument: The number of rows or columns in the input array doesn't match the size or dimensions of the range. En su lugar, escriba el valor únicamente en la celda superior izquierda, luego combine y formatee el rango completo:
// INCORRECTO — lanza InvalidArgument:
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.values = [["DATOS DE MERCADO Y PRINCIPALES INSUMOS"]]; // array 1×1 vs rango 1×8 → falla
// CORRECTO — valor primero en una sola celda, luego combine + formatee el rango:
ws.getRange("A7").values = [["DATOS DE MERCADO Y PRINCIPALES INSUMOS"]];
const hdr = ws.getRange("A7:H7");
hdr.merge();
hdr.format.fill.color = "#1F4E79";
hdr.format.font.bold = true;
hdr.format.font.color = "#FFFFFF";
Esto aplica a cada encabezado de sección combinado en el DCF (datos de mercado, bloques de escenario, proyección de flujo de caja, valor terminal, resumen de valoración, tablas de sensibilidad).
Fórmulas sobre valores fijos (NO NEGOCIABLE):
- Cada proyección, margen, factor de descuento, VP y celda de sensibilidad DEBE ser una fórmula viva de Excel — nunca un valor calculado en Python y escrito como número
- Al usar openpyxl:
ws["D20"] = "=D19*(1+$B$8)"es correcto;ws["D20"] = ingresos_calculadoses INCORRECTO - Los únicos números fijos permitidos son: (1) insumos históricos brutos, (2) impulsores de supuestos (tasas de crecimiento, insumos de WACC, g terminal), (3) datos de mercado actuales (precio de la acción, saldo de deuda)
- Si se encuentra calculando algo en Python y escribiendo el resultado — DETÉNGASE. El modelo debe flexibilizarse cuando el usuario cambie un supuesto.
Verifique Paso a Paso con el Usuario (NO construya de extremo a extremo):
- Después de la obtención de datos → muestre al usuario el bloque de insumos brutos (ingresos, márgenes, acciones, deuda neta) y confirme antes de proyectar
- Después de las proyecciones de ingresos → muestre la línea superior proyectada y las tasas de crecimiento, confirme antes de construir el desglose de márgenes
- Después de la construcción del FCF → muestre el cronograma completo de FCF, confirme la lógica antes de calcular el WACC
- Después del WACC → muestre el cálculo y los insumos, confirme antes de descontar
- Después del valor terminal + VP → muestre el puente de capital (EV → valor del capital → valor por acción), confirme antes de las tablas de sensibilidad
- Detecte errores en cada etapa — un supuesto de margen incorrecto descubierto después de construir las tablas de sensibilidad significa reconstruir todo lo posterior
Tablas de Sensibilidad:
- Use un número IMPAR de filas y columnas (estándar: 5×5, a veces 7×7) — esto garantiza una celda central verdadera
- Celda central = caso base. Construya los valores de los ejes de modo que el encabezado de la fila central y el encabezado de la columna central sean exactamente iguales a los supuestos reales del modelo (por ejemplo, si el WACC base es 9,0%, la fila central es 9,0%; si la g terminal es 3,0%, la columna central es 3,0%). Por lo tanto, el resultado de la celda central debe ser igual al precio implícito real de la acción del modelo — esta es la verificación de que la tabla está construida correctamente.
- Resalte la celda central con el relleno azul medio (
#BDD7EE) + fuente en negrita para que sea inmediatamente visible qué celda es el caso base. - Pueble TODAS las celdas (normalmente 3 tablas × 25 celdas = 75) con fórmulas completas de recálculo del DCF
- Use bucles de openpyxl (o bucles de Office JS) para escribir fórmulas programáticamente
- SIN texto de marcador de posición, SIN aproximaciones lineales, SIN pasos manuales requeridos
- Cada celda debe recalcular el DCF completo para esa combinación de supuestos
Comentarios de Celda:
- Agregue comentarios de celda A MEDIDA que se crea cada valor fijo
- Formato: "Fuente: [Sistema/Documento], [Fecha], [Referencia], [URL si aplica]"
- Cada insumo azul debe tener un comentario antes de pasar a la siguiente sección
- No lo aplace al final ni escriba "PENDIENTE: agregar fuente"
Planificación de la Disposición del Modelo:
- Defina las posiciones de TODAS las filas de las secciones ANTES de escribir cualquier fórmula
- Escriba TODOS los encabezados y etiquetas primero
- Escriba TODOS los divisores de sección y filas en blanco en segundo lugar
- LUEGO escriba las fórmulas usando las posiciones de fila fijadas
- Pruebe las fórmulas inmediatamente después de crearlas
Recálculo de Fórmulas:
- Ejecute
python recalc.py modelo.xlsx 30antes de la entrega - Corrija TODOS los errores hasta que el estado sea "success"
- Se requieren cero errores de fórmula (#REF!, #DIV/0!, #VALUE!, etc.)
Bloques de Escenario:
- Cree bloques separados para los casos Bajista/Base/Alcista
- Muestre los supuestos horizontalmente a lo largo de los años de proyección dentro de cada bloque
- Use fórmulas IF:
=IF($B$6=1,[celda Bajista],IF($B$6=2,[celda Base],[celda Alcista])) - Verifique que las fórmulas hagan referencia a las celdas correctas del bloque de escenario
Flujo de Trabajo del Proceso DCF
Paso 1: Obtención y Validación de Datos
Obtenga datos de servidores MCP, datos proporcionados por el usuario y la web.
Prioridad de Fuentes de Datos:
- Servidores MCP (si están configurados) — Datos financieros estructurados de proveedores como Daloopa
- Datos Proporcionados por el Usuario — Estados financieros históricos de su investigación
- Búsqueda/Recuperación Web — Precios actuales, beta, deuda y efectivo cuando sea necesario
Lista de Verificación de Validación:
- Verifique deuda neta vs efectivo neto (crítico para la valoración)
- Confirme las acciones diluidas en circulación (verifique recompras/emisiones recientes)
- Valide que los márgenes históricos sean consistentes con el modelo de negocio
- Coteje las tasas de crecimiento de ingresos con los puntos de referencia de la industria
- Verifique que la tasa impositiva sea razonable (normalmente 21-28%)
Paso 2: Análisis Histórico (3-5 años)
Analice y documente:
- Tendencias de crecimiento de ingresos: Calcule CAGR, identifique impulsores
- Progresión de márgenes: Realice un seguimiento del margen bruto, margen EBIT, margen FCF
- Intensidad de capital: D&A y CapEx como % de los ingresos
- Eficiencia del capital de trabajo: Cambios en NWC como % del crecimiento de ingresos
- Métricas de retorno: Tendencias de ROIC, ROE
Cree tablas resumen que muestren:
Métricas Históricas (UDM):
Ingresos: $X millones
Crecimiento de ingresos: X% CAGR
Margen bruto: X%
Margen EBIT: X%
D&A % de ingresos: X%
CapEx % de ingresos: X%
Margen FCF: X%
Paso 3: Construir Proyecciones de Ingresos
Metodología:
- Comience con los ingresos reales más recientes (UDM o último año fiscal)
- Aplique tasas de crecimiento para cada año de proyección
- Muestre tanto los montos en dólares COMO el % de crecimiento calculado
Marco de Tasas de Crecimiento:
- Año 1-2: Mayor crecimiento reflejando visibilidad a corto plazo
- Año 3-4: Moderación gradual hacia el promedio de la industria
- Año 5+: Acercándose a la tasa de crecimiento terminal
Estructura de Fórmulas:
- Ingresos(Y