Saltar al contenido principal

Previsión de Transacciones Futuras

Construya un libro auxiliar de escenario de Beancount separado y validado con ingresos, gastos y pagos de préstamos con fecha futura.

Ponga las transacciones con fecha futura en un libro de escenario separado para proyectar efectivo, gastos y deuda en sus informes financieros. Este recorrido utiliza asientos ordinarios de Beancount y un período de planificación fijo. Sus libros realizados permanecen separados de sus supuestos.

Compatibilidad, verificada el 7 de septiembre de 2026: los ejemplos se probaron con Beancount estándar 3.2.3, beanquery 0.2.0 y Fava 1.30.16. Esa versión de Fava no incluye un plugin de previsión. La fuente personalizada de Beancount.io sí contiene una implementación de fava.plugins.forecast; eso es otro entorno de ejecución, y la disponibilidad del código fuente no establece la versión implementada en su cuenta. El flujo de trabajo portable a continuación no necesita ninguna extensión.

Paso 1: Habilitar el Plugin de Previsión

Omita la activación del plugin para este flujo de trabajo. Agregar plugin "fava.plugins.forecast" a la instalación estándar probada produce un error de importación. Para la configuración general de plugins, consulte la guía de plugins; un módulo debe estar realmente instalado antes de que un libro pueda cargarlo.

Requisitos previos: un entorno de Python local con beancount==3.2.3, beanquery==0.2.0 y fava==1.30.16 instalados. Siga la configuración fija de Fava para crear ese entorno. Guarde los tres archivos a continuación en el mismo directorio y ejecute los comandos allí.

Cree books.beancount con esta instantánea completa de ejemplo. Su fecha de referencia es el 31 de diciembre de 2023, después de la transacción inicial. La cuenta de cheques tiene 10,000.00 USD y el principal pendiente del préstamo del automóvil es de 14,400.00 USD. El patrimonio salda esta instantánea de apertura simplificada.

; books.beancount — realized balances as of 2023-12-31
option "operating_currency" "USD"
2023-12-31 open Assets:Checking USD
2023-12-31 open Liabilities:Auto-Loan USD
2023-12-31 open Equity:Opening-Balances USD
2023-12-31 open Income:Salary USD
2023-12-31 open Expenses:Housing:Rent USD
2023-12-31 open Expenses:Food:Groceries USD
2023-12-31 open Expenses:Health:Gym USD
2023-12-31 open Expenses:Insurance:Auto USD
2023-12-31 open Expenses:Transportation:Interest USD
 
2023-12-31 * "Opening snapshot"
  Assets:Checking                  10000.00 USD
  Liabilities:Auto-Loan            -14400.00 USD
  Equity:Opening-Balances           4400.00 USD

Cree scenario.beancount como punto de entrada de planificación. Los dos includes cargan la instantánea realizada y los supuestos que escribirá a continuación. Beancount lee las rutas de include en relación con este archivo.

; scenario.beancount — planning entry point
option "title" "January 2024 planning scenario"
option "operating_currency" "USD"
include "books.beancount"
include "scenario-2024-01.beancount"

Nunca incluya scenario.beancount o scenario-2024-01.beancount desde books.beancount. El punto de entrada realizado no debe cargar transacciones planeadas, incluso después de que sus fechas hayan pasado.

Paso 2: Crear una Transacción de Previsión

Cree scenario-2024-01.beancount con este primer asiento. Anexe los cuatro bloques de escenario posteriores a ese mismo archivo una vez cada uno. Estos son bloques de transacción contextuales: sus declaraciones de cuentas provienen de books.beancount, y los valida a través de scenario.beancount.

2024-01-01 ! "Scenario: January rent" #forecast
  Expenses:Housing:Rent              2500.00 USD
  Assets:Checking                  -2500.00 USD

El marcador ! indica una transacción para revisión; #forecast es una etiqueta de transacción ordinaria. Ninguno crea recurrencias ni excluye una transacción de los informes. El punto de entrada separado controla la inclusión. Use esta etiqueta solo en asientos planificados para poder identificarlos durante la revisión.

Comprensión de la Sintaxis de Previsión

Cada asiento con fecha representa una ocurrencia. El texto de narración como [MONTHLY] no tiene efecto de recurrencia en Beancount estándar. Las instrucciones más antiguas UNTIL, REPEAT y SKIP pertenecen a una convención de plugin personalizada, no al lenguaje central. Este flujo de trabajo expresa sus fechas previstas explícitamente.

El escenario cubre del 1 al 31 de enero de 2024, ambos incluidos. Todas las fechas planificadas están después de la fecha de referencia fija y antes del 1 de febrero. Estas fechas históricas hacen que el ejemplo sea reproducible; nada depende de la fecha de hoy. Al adaptarlo, elija una nueva fecha de referencia y un horizonte finito antes de agregar asientos.

Frecuencia

Escriba una transacción por cada fecha de vencimiento dentro del período de planificación. El ejemplo completo de enero usa estas reglas:

ElementoFrecuenciaFechas incluidas en enero de 2024
RentaMensual, el día 11 de enero
ComestiblesCada 7 días, desde el 1 de enero1, 8, 15, 22, 29 de enero
SalarioCada 14 días, desde el 5 de enero5 y 19 de enero
GimnasioMensual, el día 1515 de enero
Pago de préstamoMensual, el día 2525 de enero
Seguro de automóvilCada 3 meses calendario, desde el 15 de enero15 de enero; el siguiente pago el 15 de abril está fuera del horizonte

Para otros planes diarios o anuales, enumere las fechas de vencimiento reales de la misma manera. Establezca una política para fechas como el día 31 o el 29 de febrero antes de extender un calendario. No las mueva silenciosamente ni suponga que todos los meses tienen el mismo número de días.

Condiciones (Opcional)

1. Establezca una fecha de fin explícita

Supongamos que la membresía del gimnasio termina el 31 de diciembre de 2024. Su ocurrencia de enero se muestra abajo. El escenario de enero se detiene el 31 de enero, por lo que no contiene asientos de febrero a diciembre. Si extiende el horizonate, escriba cada pago posterior hasta el 15 de diciembre y deténgase ahí.

2024-01-15 ! "Scenario: gym membership" #forecast
  Expenses:Health:Gym                  80.00 USD
  Assets:Checking                    -80.00 USD

2. Limite las ocurrencias y separe el principal del préstamo del interés

Supongamos que el préstamo del automóvil tiene 36 pagos restantes. Incluya solo el primer pago en este horizonte de enero. Para esta cuota hipotética, supongamos que su pago en efectivo de 450.00 USD consta de 400.00 USD de principal y 50.00 USD de interés. Estos son supuestos del escenario; no se generan cuotas posteriores.

2024-01-25 ! "Scenario: car loan payment 1 of 36" #forecast
  Liabilities:Auto-Loan               400.00 USD
  Expenses:Transportation:Interest     50.00 USD
  Assets:Checking                   -450.00 USD

El asiento positivo de pasivo reduce el saldo de la deuda de −14,400.00 USD a −14,000.00 USD. El efectivo cae en 450.00 USD, y solo 50.00 USD es un gasto. Los asientos están equilibrados porque 400.00 + 50.00 - 450.00 = 0. Un asiento de pasivo negativo aumentarí la deuda.

No repita la misma división principal/interés para los 36 pagos sin un calendario de respaldo. Los futuros intereses y el pago final pueden diferir. Use el calendario de pagos del prestamista al ampliar este ejemplo; consulte amortización para ver la distinción entre el reconocido de gastos y el reembolso de deuda.

3. Escriba intervalos irregulares como fechas reales

Para un salario quincenal que comienza el 5 de enero, las fechas de enero son el 5 de enero y el 19 de enero. La siguiente ocurrencia el 2 de febrero está fuera de este escenario. Quincenal significa cada 14 días, no dos veces por mes calendario.

2024-01-05 ! "Scenario: salary" #forecast
  Assets:Checking                   3000.00 USD
  Income:Salary                    -3000.00 USD
 
2024-01-19 ! "Scenario: salary" #forecast
  Assets:Checking                   3000.00 USD
  Income:Salary                    -3000.00 USD

Ejemplo Práctico: Un Presupuesto Mensual

Complete su presupuesto mensual agregando los asientos de víveres y seguro de automóil a continuación a scenario-2024-01.beancount. Junto con el alquiler, el gimnasio, el pago del préstamo y el doble salario anterior, esto produce 11 transacciones planeadas.

2024-01-01 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-08 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-15 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-22 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-29 ! "Scenario: groceries" #forecast
  Expenses:Food:Groceries             150.00 USD
  Assets:Checking                   -150.00 USD
 
2024-01-15 ! "Scenario: quarterly car insurance" #forecast
  Expenses:Insurance:Auto             450.00 USD
  Assets:Checking                   -450.00 USD

Valide ambos puntos de entrada, luego consulte sus saldos finales. El filtro date < 2024-02-01 incluye todos los asientos de enero. La consulta de libros utiliza el límite de referencia fijo date < 2024-01-01.

bea --file books.beancount check
bea --file scenario.beancount check
bea --file books.beancount query "SELECT account, sum(position) WHERE date < 2024-01-01 GROUP BY account ORDER BY account"
bea --file scenario.beancount query "SELECT account, sum(position) WHERE date < 2024-02-01 GROUP BY account ORDER BY account"

Ambos comandos bea check deberían salir con éxito. Conciliete los resultados de las consultas con los cálculos independientes que se muestran a continuación:

ResultadoLibros realizados, 31 de diciembreEscenario de enero, 31 de enero
Cuenta de efectivo10,000.00 USD10,000 + 6,000 − 2,500 − 750 − 80 − 450 − 450 = 11,770.00 USD
Saldo del préstamo−14,400.00 USD−14,400 + 400 = −14,000.00 USD
Asiento de ingreso por salario0.00 USD−6,000.00 USD
Asientos de gastos totales0.00 USD2,500 + 750 + 80 + 450 + 50 = 3,830.00 USD

La ganancia proyectada de enero es 2,170.00 USD: 6,000 de ingreso menos 3,830 de gastos. El efectivo aumenta en 1,770.00 USD porque el principal adicional de 400 reduce la deuda en lugar de la ganancia.

Abra el escenario en Fava estándar:

fava scenario.beancount

Establezca el filtro de Tiempo de Fava en 2024-01. Su filtrado de tiempo arrastra los saldos de activos y pasivos anteriores al período y elimina los asientos posteriores. Verifique el balance general para 11,770.00 USD en efectivo y 14,000.00 USD de deuda pendiente. El estado de resultados debería mostrar una ganancia proyectada de 2,170.00 USD. Abrir books.beancount en su lugar muestra la instantánea realizada.

Mitigación de Problemas y Mejores Prácticas

  • Error de importación del plugin antiguo: elimine la línea de activación cuando use este flujo de trabajo portable. Una instalación estándar de Fava no proporciona los módulos personalizados de Beancount.io.
  • Cuenta desconocida o archivo de include faltante: guarde los tres archivos en el mismo directorio, copie los inicios con cuidado y valide scenario.beancount en lugar del fragmento de escenario aislado.
  • Faltan previsiones en Fava: cargue scenario.beancount y configure el filtro de Tiempo en 2024-01. Una etiqueta o narración no genera asientos.
  • Saldos inesperados: compare las 11 fechas y los montos planeados con la tabla. Cargar una ocurrencia dos veces duplica su efecto financiero, incluso cuando cada transacción está equilibrada.
  • Mantenga las previsores separados: los indicadores, etiquetas y fechas futuras ordinarias no evitan que las transacciones afecten un informe sin filtrar. Use books.beancount para los resultados reales. Cuando se realice un pago, registre su monto real en los libros y elimine el supuesto correspondiente de su próximo escenario para no contar dos veces.
  • Revise el horizonte: preserve una instantánea con fecha al guardar un escenario. Extender su fecha de fin significa agregar ocurrencias específicas y verificar de nuevo las divisiones del préstamo, las fechas de cancelación y los redondeos.

Fuente: https://beancount.io/es/docs/Tips/forecast-plugin