Finanzas y contabilidad

Modelo integrado de P&L, flujo de caja y balance

ModelMonkey14 de mayo de 202615 min de lectura

Este artículo cubre la arquitectura de pestañas, los patrones de fórmulas entre hojas, la tabla de convenciones del flujo de caja, el debugging cuando la verificación se rompe en el período 3 pero no en los demás, y la fórmula de verificación del balance que atrapa errores antes de que lo haga tu CFO. Está dirigido a analistas que ya entienden por qué los tres estados se conectan y quieren construir la versión que sobrevive a preguntas de un banco o un fondo.

Por qué "simple" no significa menos pestañas

La palabra "simple" no quiere decir una sola hoja con todo amontonado. Significa un modelo lo suficientemente limpio para auditar, lo suficientemente ágil para correr escenarios y lo suficientemente robusto para que los números cuadren solos.

Un modelo integrado listo para producción necesita, como mínimo:

  • Supuestos — solo inputs, cero cálculos
  • P&L — desde ingresos hasta utilidad neta
  • Flujo de Caja — secciones operativa, de inversión y de financiamiento
  • Balance General — activos = pasivos + patrimonio, en cada período
  • Retornos (opcional pero estándar en decks para fondos de PE)

La arquitectura de pestañas define dónde viven las fórmulas. Una fórmula en la pestaña de Flujo de Caja debe jalar datos del P&L, no recalcular nada por su cuenta. Esa separación es lo que hace el modelo auditable.

Cableando el modelo integrado de P&L, flujo de caja y balance

Empieza por los Supuestos. Cada driver — tasa de crecimiento de ingresos, margen bruto, SG&A como porcentaje de ingresos, tasa impositiva — vive en un solo lugar.

Supuestos!$B$3  = ingresos Año 1 = $18,000,000
Supuestos!$B$4  = tasa de crecimiento = 12.0%
Supuestos!$B$5  = margen bruto = 38.5%
Supuestos!$B$6  = SG&A % de ingresos = 16.2%
Supuestos!$B$7  = D&A = $650,000
Supuestos!$B$8  = tasa impositiva = 26.0%
Supuestos!$B$9  = capex = $800,000

En la pestaña de P&L, los ingresos del Año 2:

='P&L'!C4 * (1 + Supuestos!$B$4)

EBITDA:

='P&L'!C4 * Supuestos!$B$5 - 'P&L'!C4 * Supuestos!$B$6

Utilidad neta (después de D&A e impuestos):

=('P&L'!C8 - Supuestos!$B$7) * (1 - Supuestos!$B$8)

Con $18,000,000 de ingresos en el Año 1, margen bruto de 38.5% y SG&A de 16.2%, el EBITDA ronda los $4.0M. Después de $650,000 en D&A y una tasa impositiva del 26%, la utilidad neta queda cerca de $2.5M. Esos números alimentan todo lo que viene después.

Construyendo el flujo de caja (método indirecto)

Bajo la NIC 7 — la norma de referencia en los principales mercados de la región —, el método indirecto parte de la utilidad neta y la ajusta por partidas no monetarias y cambios en capital de trabajo. Es la presentación estándar para el flujo de caja operativo porque reconcilia directamente con el P&L.

Antes de escribir una sola fórmula, conviene tener clara la arquitectura de cada sección: qué datos consume, qué partidas incluye y qué convención de signos aplica. Esta tabla concentra esa lógica:

SecciónFuente de datosPartidas claveConvención de signos
OperativaP&L + BalanceUtilidad neta, D&A, Δ capital de trabajoD&A suma; ↑ CxC resta; ↑ CxP suma
InversiónSupuestosCapex, venta de activosCapex resta; desinversiones suman
FinanciamientoCalendario de deudaDisposiciones, amortizaciones, dividendosDisposiciones suman; amortizaciones restan

La sección operativa jala datos de tres fuentes: el P&L (utilidad neta), el P&L otra vez (adición de D&A) y el balance (cambios en capital de trabajo):

// Utilidad neta del P&L
='P&L'!C12

// Adición de D&A (cargo no monetario)
=Supuestos!$B$7

// Cambios en capital de trabajo — la convención de signos importa
// Aumento en cuentas por cobrar = salida de efectivo = negativo
=-('Balance'!C8 - 'Balance'!B8)

// Aumento en cuentas por pagar = entrada de efectivo = positivo
='Balance'!C16 - 'Balance'!B16

La convención de signos en el capital de trabajo es donde se rompen muchos modelos. Un aumento en cuentas por cobrar significa que reconociste ingresos pero no has cobrado el efectivo — eso es un uso de caja, por lo tanto va negativo. Un aumento en cuentas por pagar significa que debes más pero todavía no has pagado — eso es una fuente de caja, por lo tanto va positivo. Si lo inviertes, tu flujo de caja va a estar descuadrado por toda la variación de capital de trabajo.

La sección de inversión:

// Capex (salida de efectivo, negativo)
=-Supuestos!$B$9

// Ingresos por venta de activos (si aplica)
=Supuestos!$B$10

El financiamiento es donde viven las disposiciones y amortizaciones de deuda. En un modelo operativo estándar:

='Calendario de Deuda'!C5 - 'Calendario de Deuda'!C6

Cerrando el efectivo y alimentando el balance

El efectivo final del flujo de caja se convierte en input del balance general. Este es el vínculo que hace al modelo verdaderamente integrado.

// Pestaña Flujo de Caja: Efectivo Final
='Flujo de Caja'!C5 + 'Flujo de Caja'!C15 + 'Flujo de Caja'!C22

// Pestaña Balance: Efectivo (jala del Flujo de Caja, nunca hardcodeado)
='Flujo de Caja'!C25

Las utilidades retenidas se actualizan así:

='Balance'!B24 + 'P&L'!C12

Donde B24 son las utilidades retenidas del período anterior y C12 es la utilidad neta del período actual. Esta fórmula cierra el ciclo entre los tres estados.

La fórmula de verificación del balance

Todo modelo integrado necesita un chequeo. La verificación del balance confirma que activos = pasivos + patrimonio:

='Balance'!C30 - ('Balance'!C40 + 'Balance'!C50)

Formatea esta celda con formato condicional: verde para cero, rojo para cualquier otro valor. Agrégala en cada columna de período. En un modelo de 5 años son 5 celdas de chequeo — las 5 deben estar en verde antes de enviar cualquier cosa a un banco o al directorio.

Debugging: la celda de verificación se rompe en el período 3 pero no en los anteriores

Este es el escenario que consume más tiempo en la práctica y que casi ningún artículo cubre: el check está verde en Año 1 y Año 2, pero en Año 3 aparece rojo. Eso descarta un error estructural y apunta a un error específico del período. El diagnóstico va en este orden:

1. Aísla el lado del error. Calcula activos totales y pasivos + patrimonio por separado en una celda temporal fuera del modelo. Si activos = $24.3M y pasivos + patrimonio = $24.1M, la diferencia de $200K es tu punto de partida.

2. Revisa el efectivo primero. El error más frecuente es que en el Año 3 la celda de efectivo del balance quedó hardcodeada con un valor del período anterior — sucede cuando alguien extendió columnas copiando en lugar de arrastrar. Confirma que ='Flujo de Caja'!E25 (no D25) es la referencia en la columna de Año 3.

3. Revisa las utilidades retenidas. La fórmula ='Balance'!B24 + 'P&L'!C12 debe usar las columnas del período correspondiente en cada año. Un error de columna aquí acumula una diferencia que crece período a período — si la diferencia en Año 3 es exactamente el doble que en Año 2, este es el culpable.

4. Revisa los activos fijos netos. Activos fijos netos = saldo anterior + capex − D&A. Si el capex del Año 3 cambió en Supuestos pero la fórmula del balance todavía referencia una celda fija en lugar de Supuestos!$B$9, el activo queda desfasado mientras el flujo de caja ya tomó el valor correcto.

5. Revisa el capital de trabajo. Si tienes más de dos partidas de capital de trabajo (inventario, anticipos de clientes, impuestos por pagar), verifica que cada partida en el balance del Año 3 tenga su fórmula correspondiente en el flujo de caja. Una partida que aparece en el balance pero no tiene su Δ reflejado en el flujo de caja genera exactamente este tipo de error asimétrico por período.

La verificación más rápida: copia el balance del Año 2 (que sí cuadra) a una hoja temporal y reemplaza columna por columna con los valores del Año 3, recalculando después de cada reemplazo. La celda que rompe el balance identifica el componente con el error.

Manejando referencias circulares: el revólver

El gasto por intereses del revólver depende del saldo del revólver. El saldo del revólver depende del efectivo final. El efectivo final depende de la utilidad neta. La utilidad neta incluye el gasto por intereses. Eso es una referencia circular.

Google Sheets lo resuelve con cálculo iterativo. A partir de 2025, actívalo en Archivo → Configuración → Cálculo → Cálculo iterativo (según la documentación de Google Sheets, 2025). Establece el máximo de iteraciones en 50 y el umbral en 0.001. Esta configuración persiste a nivel del archivo, no del usuario — algo importante si estás compartiendo el modelo con un banco o co-inversionista que lo abre desde su propia cuenta. Si el archivo llega a ellos sin esa configuración activa, sus números no van a cuadrar y la llamada de soporte viene antes de que terminen de revisar el ejecutivo.

Sin cálculo iterativo, el modelo arroja error o requiere una celda de anulación manual para romper el ciclo. En modelos de LBO con cascadas de deuda complejas, con frecuencia necesitas romper la circularidad manualmente usando un supuesto de tasa del período anterior — la elegancia del cálculo iterativo no siempre compensa el riesgo de convergencia en estructuras de deuda escalonada.

Desglose por segmento: cómo estructurar la pestaña de Detalle Ingresos

Si tu modelo cubre múltiples unidades de negocio o líneas de producto, la extensión estándar es calcular el margen de contribución por segmento y consolidarlo en el P&L. El patrón de fórmula con SUMIFS funciona bien, pero depende completamente de cómo está estructurada la pestaña de origen.

La pestaña Detalle Ingresos necesita al menos cuatro columnas fijas para que el SUMIFS sea auditable en un modelo con tres unidades de negocio y cinco años:

ColumnaContenidoEjemplo
APeríodo (número o etiqueta)1, 2, 3… o "Año 1"
BSegmento o unidad de negocio"Distribución", "Retail", "Exportación"
CCategoría"Ingresos", "COGS variable", "COGS fijo"
DMonto$4,200,000

Con esa estructura, el SUMIFS que consolida ingresos por segmento en el P&L queda así:

=SUMIFS('Detalle Ingresos'!D:D,
        'Detalle Ingresos'!A:A, 'P&L'!$C$2,
        'Detalle Ingresos'!B:B, 'P&L'!$A5,
        'Detalle Ingresos'!C:C, "Ingresos")

Donde 'P&L'!$C$2 es la etiqueta de período de esa columna del P&L y 'P&L'!$A5 es el nombre del segmento en esa fila. El mismo patrón con "COGS variable" y "COGS fijo" en el tercer criterio te da el margen de contribución a nivel de unidad de negocio sin romper el flujo del modelo consolidado.

El punto que habitualmente se rompe en práctica: si las etiquetas de período en Detalle Ingresos!A son texto ("Año 1") pero en el P&L son números (1), el SUMIFS devuelve cero sin arrojar error. Usa etiquetas consistentes — preferiblemente números enteros — y valida con un COUNTIFS antes de confiar en los totales.

Bajo las NIIF para PYMES (IASB, edición 2015), el desglose de ingresos por segmento de operación es un requerimiento de revelación para empresas con obligación pública de rendir cuentas, lo que hace que esta estructura de pestaña no sea solo una comodidad de modelaje sino una necesidad de reporte.

Tablas de sensibilidad sobre el modelo simple integrado de P&L, flujo de caja y balance

Una tabla de sensibilidad sobre un modelo integrado muestra cómo se mueve cada output cuando estresan un input. Para un modelo de tres estados, las sensibilidades de mayor valor suelen ser:

  • Crecimiento de ingresos vs. margen EBITDA: acota el rango de resultados de flujo de caja libre ($2.1M–$2.5M en el caso base)
  • Capex vs. ingresos: muestra cómo la intensidad de inversión afecta el FCF y el efectivo final
  • Múltiplo terminal vs. tasa de descuento: output estándar de un DCF con salida a 14.2x EBITDA

En Google Sheets:

=IFERROR(INDEX($B$2:$F$6,
         MATCH($H8,$A$2:$A$6,0),
         MATCH(I$7,$B$1:$F$1,0)),"—")

Esta fórmula jala la celda de output correcta en cualquier layout de sensibilidad. Construye la tabla variando directamente los inputs de Supuestos; el modelo integrado recalcula todo automáticamente.

Cómo acelerar la construcción de referencias entre pestañas

Las partes mecánicas de esta construcción — cablear el mismo patrón de fórmulas a lo largo de 5 años, asegurarse de que cada referencia entre pestañas apunte a la columna correcta, configurar el formato condicional en las celdas de verificación — consumen tiempo que no genera valor analítico. ModelMonkey puede generar la estructura de referencias entre pestañas, escribir las fórmulas iterativas de capital de trabajo y señalar cuando una referencia del balance está apuntando a la columna del período equivocado. Funciona directamente dentro de Google Sheets, así que no estás exportando nada ni rompiendo tu arquitectura de pestañas.

La parte que sigue requiriendo criterio tuyo: los supuestos en sí. Ninguna herramienta te dice si un margen bruto de 38.5% es realista para un negocio SaaS en tu sector, o si un múltiplo de salida de 14.2x EBITDA es defendible frente a un banco. Eso sigue siendo tuyo.


Preguntas frecuentes

¿Qué es un modelo integrado de tres estados?

Un modelo integrado de tres estados conecta el estado de resultados (P&L), el flujo de caja y el balance general de manera que los outputs de un estado alimentan automáticamente los inputs de los otros. La utilidad neta del P&L actualiza las utilidades retenidas en el balance; el efectivo final del flujo de caja alimenta la línea de efectivo del activo; la variación en capital de trabajo del balance entra a la sección operativa del flujo de caja. El resultado es que cambiar un supuesto — tasa de crecimiento, capex, tasa impositiva — recalcula los tres estados sin intervención manual. El opuesto de un modelo integrado es un modelo donde los tres estados son schedules independientes que se reconcilian a mano, con todos los riesgos de error que eso implica.

¿Cómo se vincula el flujo de caja con el balance general?

El vínculo opera en dos direcciones. Del flujo de caja al balance: el efectivo final (='Flujo de Caja'!C25) se convierte en la línea de efectivo del activo corriente en el balance — esta celda nunca debe estar hardcodeada. Del balance al flujo de caja: los cambios en capital de trabajo (cuentas por cobrar, inventario, cuentas por pagar) se calculan como la diferencia entre el saldo del período actual y el saldo del período anterior en el balance, y esas diferencias alimentan la sección operativa del flujo de caja. Si cualquiera de estos dos vínculos está roto — por una celda hardcodeada o por una referencia de columna equivocada —, la celda de verificación del balance lo detectará en ese período específico.

¿Cómo manejo la referencia circular del revólver en Google Sheets?

El revólver genera circularidad porque el gasto por intereses depende del saldo del revólver, que depende del efectivo final, que depende de la utilidad neta, que incluye el gasto por intereses. Google Sheets resuelve esto con cálculo iterativo: Archivo → Configuración → Cálculo → Cálculo iterativo, con máximo de iteraciones en 50 y umbral en 0.001. Esta configuración queda guardada en el archivo — no en la cuenta del usuario —, así que cualquier persona que abra el modelo en su propia cuenta de Google hereda la configuración automáticamente. En modelos con cascadas de deuda más complejas (múltiples tramos, PIK, waterfall de distribución), el cálculo iterativo puede no converger de manera estable; en esos casos, la solución práctica es romper la circularidad manualmente usando la tasa de interés del período anterior como input fijo.

¿Qué hago cuando la celda de verificación se pone en rojo solo en algunos períodos?

Un error asimétrico por período — el check está verde en Año 1 y Año 2, rojo en Año 3 — descarta un error estructural y apunta a un error de referencia de columna en ese período específico. Los candidatos más frecuentes, en orden de probabilidad: (1) la celda de efectivo en el balance del Año 3 está hardcodeada o referencia la columna del Año 2; (2) la fórmula de utilidades retenidas usa la columna de utilidad neta del período equivocado; (3) el capex o la D&A cambiaron en Supuestos pero una fórmula de activos fijos todavía referencia una celda fija; (4) una partida de capital de trabajo aparece en el balance pero su variación no está reflejada en el flujo de caja. El diagnóstico más rápido: copia el balance del último período que sí cuadra a una hoja temporal y reemplaza columna por columna con los valores del período roto, recalculando después de cada reemplazo — la primera celda que rompe el balance identifica el componente con el error.