Salta al contingut principal

Previsió de Transaccions Futures

Crea un llibre d'escenaris Beancount separat i validat amb ingressos, despeses i pagaments de préstecs amb dates futures.

Posa les transaccions amb dates futures en un llibre d'escenaris separat per projectar efectiu, despeses i deute als teus informes financers. Aquesta guia pas a pas utilitza entrades Beancount ordinàries i un període de planificació fix. Els teus llibres realitzats es mantenen separats de les teves suposicions.

Compatibilitat, verificada el 7 de setembre de 2026: els exemples es van provar amb Beancount estàndard 3.2.3, beanquery 0.2.0 i Fava 1.30.16. Aquesta versió de Fava no inclou un plugin de previsió. El codi font personalitzat de Beancount.io sí que conté una implementació de fava.plugins.forecast; això és un entorn d'execució diferent, i la disponibilitat del codi font no estableix la versió desplegada al teu compte. El flux de treball portable que es descriu a continuació no necessita cap extensió.

Pas 1: Activa el Plugin de Previsió

Omet l'activació del plugin per a aquest flux de treball. Afegir plugin "fava.plugins.forecast" a la instal·lació estàndard provada produeix un error d'importació. Per a la configuració general de plugins, consulta la guia de plugins; un mòdul ha d'estar realment instal·lat abans que un llibre el pugui carregar.

Requisits previs: un entorn Python local amb beancount==3.2.3, beanquery==0.2.0 i fava==1.30.16 instal·lats. Segueix la configuració de Fava amb versions fixes per crear aquest entorn. Desa els tres fitxers següents al mateix directori i executa les ordres allà.

Crea books.beancount amb aquesta instantània d'exemple completa. La seva data de referència és el 31 de desembre de 2023, després de la transacció inicial. El compte corrent té 10.000,00 USD i el principal pendent del préstec del cotxe és de 14.400,00 USD. El patrimoni net equilibra aquesta instantània inicial 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

Crea scenario.beancount com a punt d'entrada de la planificació. Els seus dos includes carreguen la instantània realitzada i les suposicions que escriuràs a continuació. Beancount llegeix les rutes d'inclusió de manera relativa a aquest fitxer.

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

No incloguis mai scenario.beancount ni scenario-2024-01.beancount des de books.beancount. El punt d'entrada realitzat no ha de carregar transaccions planificades, ni tan sols després que les seves dates hagin passat.

Pas 2: Crea una Transacció de Previsió

Crea scenario-2024-01.beancount amb aquesta primera entrada. Afegeix els quatre blocs d'escenari posteriors al mateix fitxer una vegada cadascun. Aquests són blocs de transaccions contextuals: les seves declaracions de comptes provenen de books.beancount, i les valides a través de scenario.beancount.

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

La marca ! senyala una transacció per revisar; #forecast és una etiqueta de transacció ordinària. Cap de les dues crea recurrències ni exclou una transacció dels informes. El punt d'entrada separat controla la inclusió. Utilitza aquesta etiqueta només en les entrades planificades per poder-les identificar durant la revisió.

Comprendre la Sintaxi de Previsió

Cada entrada amb data representa una ocurrència. El text de narració com ara [MONTHLY] no té efecte de recurrència al Beancount estàndard. Les instruccions més antigues UNTIL, REPEAT i SKIP pertanyen a una convenció de plugin personalitzada, no al llenguatge principal. Aquest flux de treball expressa les seves dates previstes explícitament.

L'escenari cobreix l'1 al 31 de gener de 2024, ambdós inclosos. Totes les dates planificades són posteriors a la data de referència fixa i anteriors a l'1 de febrer. Aquestes dates històriques fan que l'exemple sigui reproduïble; res no depèn de la data d'avui. Quan l'adaptis, tria una nova data de referència i un horitzó finit abans d'afegir entrades.

Freqüència

Escriu una transacció per a cada data de venciment dins del període de planificació. L'exemple complet de gener utilitza aquestes regles:

ElementCalendariDates incloses al gener de 2024
LloguerMensual, el dia 11 de gener
QueviuresCada 7 dies, a partir de l'1 de gener1, 8, 15, 22, 29 de gener
SalariCada 14 dies, a partir del 5 de gener5 i 19 de gener
GimnàsMensual, el dia 1515 de gener
Pagament del préstecMensual, el dia 2525 de gener
Assegurança del cotxeCada 3 mesos naturals, a partir del 15 de gener15 de gener; el proper pagament el 15 d'abril queda fora d'aquest horitzó

Per a altres plans diaris o anuals, enumera les dates de venciment reals de la mateixa manera. Estableix una política per a dates com el dia 31 o el 29 de febrer abans d'ampliar un calendari. No les moguis silenciosament ni assumeixis que tots els mesos tenen el mateix nombre de dies.

Condicions (Opcionals)

1. Estableix una data de finalització explícita

Suposem que la subscripció al gimnàs finalitza el 31 de desembre de 2024. La seva ocurrència de gener es mostra a continuació. L'escenari de gener s'atura el 31 de gener, per tant no conté entrades de febrer a desembre. Si amplies l'horitzó, escriu cada pagament posterior fins al 15 de desembre i atura't allà.

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

2. Limita les ocurrències i separa el principal del préstec dels interessos

Suposem que el préstec del cotxe té 36 pagaments restants. Inclou només el primer pagament en aquest horitzó de gener. Per a aquesta quota hipotètica, assumeix que el seu pagament en efectiu de 450,00 USD consisteix en 400,00 USD de principal i 50,00 USD d'interessos. Aquestes són suposicions de l'escenari; no es generen cap altra quota posterior.

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

L'apunt positiu al passiu redueix el saldo del deute de −14.400,00 USD a −14.000,00 USD. L'efectiu disminueix en 450,00 USD, i només 50,00 USD són una despesa. Els apunts quadren perquè 400.00 + 50.00 - 450.00 = 0. Un apunt negatiu al passiu augmentaria el deute.

No repeteixis la mateixa divisió principal/interessos per a tots els 36 pagaments sense un calendari de suport. Els interessos futurs i el pagament final poden diferir. Utilitza el calendari de pagaments del prestador quan ampliïs aquest exemple; consulta amortització per a la distinció entre el reconeixement de despeses i l'amortització del deute.

3. Escriu els intervals irregulars com a dates reals

Per a un salari quinzenal que comença el 5 de gener, les dates de gener són el 5 i el 19 de gener. La propera ocurrència és el 2 de febrer, fora d'aquest escenari. Quinzenal significa cada 14 dies, no dues vegades per mes natural.

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

Exemple Pràctic: Un Pressupost Mensual

Completa el teu pressupost mensual afegint les entrades de queviures i assegurança del cotxe que es mostren a continuació a scenario-2024-01.beancount. Juntament amb el lloguer, el gimnàs, el pagament del préstec i les dues entrades de salari anteriors, això produeix 11 transaccions planificades.

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

Valida ambdós punts d'entrada i després consulta els seus saldos de tancament. date < 2024-02-01 inclou tots els apunts de gener. La consulta dels llibres utilitza la frontera fixa de data de referència 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"

Ambdues ordres bea check haurien de finalitzar correctament. Concilia els resultats de la consulta amb aquests càlculs independents:

ResultatLlibres realitzats, 31 de desembreEscenari de gener, 31 de gener
Compte corrent10.000,00 USD10.000 + 6.000 − 2.500 − 750 − 80 − 450 − 450 = 11.770,00 USD
Saldo del préstec−14.400,00 USD−14.400 + 400 = −14.000,00 USD
Apunt d'ingressos per salari0,00 USD−6.000,00 USD
Total d'apunts de despeses0,00 USD2.500 + 750 + 80 + 450 + 50 = 3.830,00 USD

El benefici projectat de gener és de 2.170,00 USD: 6.000 d'ingressos menys 3.830 de despeses. El compte corrent augmenta en 1.770,00 USD perquè el reemborsament addicional de 400 de principal redueix el deute en lloc del benefici.

Obre l'escenari a Fava estàndard:

fava scenario.beancount

Estableix el filtre de Temps de Fava a 2024-01. El seu filtratge per temps trasllada els saldos d'actius i passius anteriors al període i elimina les entrades posteriors. Comprova el balanç de situació per veure 11.770,00 USD en efectiu i 14.000,00 USD de deute pendent. El compte de resultats hauria de mostrar un benefici projectat de 2.170,00 USD. Obrir books.beancount en lloc seu mostra la instantània realitzada.

Resolució de Problemes i Bones Pràctiques

  • Error d'importació per al plugin antic: elimina la línia d'activació quan utilitzis aquest flux de treball portable. Una instal·lació de Fava estàndard no proporciona els mòduls personalitzats de Beancount.io.
  • Compte desconegut o fitxer d'inclusió absent: desa els tres fitxers al mateix directori, copia les declaracions d'obertura i valida scenario.beancount en lloc del fragment d'escenari sol.
  • Previsions absents a Fava: carrega scenario.beancount i estableix el filtre de Temps a 2024-01. Una etiqueta o narració no genera entrades.
  • Saldo inesperat: compara les 11 dates i quantitats planificades amb la taula. Carregar una ocurrència dues vegades duplica el seu efecte financer, fins i tot quan totes les transaccions quadren.
  • Mantén les previsions separades: les marques, etiquetes i dates futures ordinàries no impedeixen que les entrades afectin un informe sense filtrar. Utilitza books.beancount per als resultats reals. Quan es produeixi un pagament, registra'n l'import real allà i elimina la suposició corresponent del teu proper escenari per evitar comptar-lo dues vegades.
  • Revisa l'horitzó: conserva una instantània amb data quan desis un escenari. Ampliar la seva data de finalització implica afegir ocurrències específiques i tornar a comprovar les divisions del préstec, les dates de cancel·lació i els arrodoniments.

Font: https://beancount.io/ca/docs/Tips/forecast-plugin