Salta al contenuto principale

Prevedere Transazioni Future

Costruisci un registro di scenario Beancount separato e validato con entrate, spese e pagamenti di prestiti con date future.

Inserisci le transazioni con date future in un registro di scenario separato per proiettare liquidità, spese e debiti nei tuoi report finanziari. Questa guida utilizza normali voci Beancount e un periodo di pianificazione fisso. I tuoi libri contabili effettivi rimangono separati dalle tue ipotesi.

Compatibilità, verificata il 7 settembre 2026: gli esempi sono stati testati con Beancount 3.2.3 standard, beanquery 0.2.0 e Fava 1.30.16. Questa versione di Fava non include un plugin di previsione. Il sorgente personalizzato di Beancount.io contiene un'implementazione fava.plugins.forecast; si tratta di un runtime diverso e la disponibilità del sorgente non stabilisce la versione distribuita sul tuo account. Il flusso di lavoro portabile qui descritto non richiede estensioni.

Passaggio 1: Attivare il Plugin di Previsione

Salta l'attivazione del plugin per questo flusso di lavoro. L'aggiunta di plugin "fava.plugins.forecast" all'installazione standard testata produce un errore di importazione. Per la configurazione generale dei plugin, consulta la guida ai plugin; un modulo deve essere effettivamente installato prima che un registro possa caricarlo.

Prerequisiti: un ambiente Python locale con beancount==3.2.3, beanquery==0.2.0 e fava==1.30.16 installati. Segui la configurazione Fava bloccata per creare tale ambiente. Salva tutti e tre i file seguenti nella stessa directory ed esegui i comandi lì.

Crea books.beancount con questo esempio completo. La sua data di riferimento è il 31 dicembre 2023, dopo la transazione di apertura. Il conto corrente detiene 10.000,00 USD e il capitale residuo del prestito auto è 14.400,00 USD. Il capitale bilancia questo snapshot di apertura semplificato.

; 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 come punto di ingresso per la pianificazione. I suoi due include caricano lo snapshot effettivo e le ipotesi che scriverai successivamente. Beancount legge i percorsi degli include in relazione a questo file.

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

Non includere mai scenario.beancount o scenario-2024-01.beancount da books.beancount. Il punto di ingresso effettivo non deve caricare transazioni pianificate, anche dopo che le loro date sono trascorse.

Passaggio 2: Creare una Transazione di Previsione

Crea scenario-2024-01.beancount con questa prima voce. Aggiungi i quattro blocchi di scenario successivi allo stesso file una volta ciascuno. Questi sono blocchi di transazioni contestuali: le loro dichiarazioni di conto provengono da books.beancount e li convalidi tramite scenario.beancount.

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

Il flag ! contrassegna una transazione per la revisione; #forecast è un tag di transazione ordinario. Nessuno dei due crea ricorrenze o esclude una transazione dai report. Il punto di ingresso separato controlla l'inclusione. Usa questo tag solo sulle voci pianificate per poterle identificare durante la revisione.

Comprendere la Sintassi di Previsione

Ogni voce datata rappresenta una singola occorrenza. Testi di narrazione come [MONTHLY] non hanno alcun effetto di ricorrenza in Beancount standard. Le istruzioni più vecchie UNTIL, REPEAT e SKIP appartengono a una convenzione di plugin personalizzata, non al linguaggio principale. Questo flusso di lavoro esplicita le date previste da tali istruzioni.

Lo scenario copre il periodo dal 1° al 31 gennaio 2024, inclusi. Tutte le date pianificate sono successive alla data di riferimento fissa e precedenti al 1° febbraio. Queste date storiche rendono l'esempio riproducibile; nulla dipende dalla data odierna. Quando lo adatti, scegli una nuova data di riferimento e un orizzonte finito prima di aggiungere voci.

Frequenza

Scrivi una transazione per ogni data di scadenza all'interno del periodo di pianificazione. L'esempio completo di gennaio utilizza queste regole:

VoceProgrammaDate incluse a gennaio 2024
AffittoMensile, il 1°1° gennaio
Spesa alimentareOgni 7 giorni, dal 1° gennaio1, 8, 15, 22, 29 gennaio
StipendioOgni 14 giorni, dal 5 gennaio5, 19 gennaio
PalestraMensile, il 1515 gennaio
Pagamento prestitoMensile, il 2525 gennaio
Assicurazione autoOgni 3 mesi solari, dal 15 gennaio15 gennaio; il pagamento successivo il 15 aprile è fuori da questo orizzonte

Per altri piani giornalieri o annuali, elenca le date di scadenza effettive nello stesso modo. Definisci una politica per date come il 31 o il 29 febbraio prima di estendere un programma. Non spostarle silenziosamente né presumere che ogni mese abbia lo stesso numero di giorni.

Condizioni (Opzionale)

1. Impostare esplicitamente una data di fine

Supponiamo che l'abbonamento alla palestra scada il 31 dicembre 2024. La sua occorrenza di gennaio è sotto. Lo scenario di gennaio termina il 31 gennaio, quindi non contiene voci da febbraio a dicembre. Se estendi l'orizzonte, scrivi ogni pagamento successivo fino al 15 dicembre e fermati lì.

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

2. Limitare le occorrenze e separare capitale e interessi del prestito

Supponiamo che il prestito auto abbia 36 pagamenti rimanenti. Includi solo il primo pagamento in questo orizzonte di gennaio. Per questa ipotetica rata, supponi che il pagamento in contanti di 450,00 USD consista in 400,00 USD di capitale e 50,00 USD di interessi. Queste sono ipotesi dello scenario; nessuna rata successiva viene generata.

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

La registrazione positiva della passività riduce il saldo del debito da −14.400,00 USD a −14.000,00 USD. La liquidità diminuisce di 450,00 USD e solo 50,00 USD rappresentano una spesa. Le registrazioni quadrano perché 400.00 + 50.00 - 450.00 = 0. Una registrazione negativa della passività aumenterebbe il debito.

Non ripetere la stessa suddivisione capitale/interessi per tutti i 36 pagamenti senza un programma di supporto. Gli interessi futuri e il pagamento finale possono differire. Usa il piano di rimborso del prestatore quando estendi questo esempio; consulta ammortamento per la distinzione tra riconoscimento delle spese e rimborso del debito.

3. Scrivere intervalli irregolari come date effettive

Per uno stipendio bisettimanale a partire dal 5 gennaio, le date di gennaio sono il 5 e il 19 gennaio. La successiva occorrenza è il 2 febbraio, fuori da questo scenario. Bisettimanale significa ogni 14 giorni, non due volte per mese solare.

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

Esempio Pratico: Un Budget Mensile

Completa il tuo budget mensile aggiungendo le voci per la spesa alimentare e l'assicurazione auto qui sotto a scenario-2024-01.beancount. Insieme ad affitto, palestra, pagamento del prestito e alle due voci di stipendio sopra, questo produce 11 transazioni pianificate.

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 entrambi i punti di ingresso, poi interroga i loro saldi di chiusura. date < 2024-02-01 include tutte le registrazioni di gennaio. La query sui libri contabili usa il confine fisso della data di riferimento 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"

Entrambi i comandi bea check dovrebbero terminare con successo. Riconcilia i risultati della query con questi calcoli indipendenti:

RisultatoLibri effettivi, 31 dicembreScenario gennaio, 31 gennaio
Conto corrente10.000,00 USD10.000 + 6.000 − 2.500 − 750 − 80 − 450 − 450 = 11.770,00 USD
Saldo prestito−14.400,00 USD−14.400 + 400 = −14.000,00 USD
Registrazione reddito da stipendio0,00 USD−6.000,00 USD
Registrazioni spese totali0,00 USD2.500 + 750 + 80 + 450 + 50 = 3.830,00 USD

L'utile previsto di gennaio è di 2.170,00 USD: 6.000 di reddito meno 3.830 di spese. Il conto corrente aumenta di 1.770,00 USD perché i 400 aggiuntivi di rimborso del capitale riducono il debito anziché l'utile.

Apri lo scenario in Fava standard:

fava scenario.beancount

Imposta il filtro Tempo di Fava su 2024-01. Il suo filtro temporale trasporta i saldi patrimoniali e passivi precedenti nel periodo e rimuove le voci successive. Controlla lo stato patrimoniale per 11.770,00 USD di liquidità e 14.000,00 USD di debito residuo. Il conto economico dovrebbe mostrare 2.170,00 USD di utile previsto. Aprendo invece books.beancount ottieni lo snapshot effettivo.

Risoluzione dei Problemi e Buone Pratiche

  • Errore di importazione per il vecchio plugin: rimuovi la riga di attivazione quando usi questo flusso di lavoro portabile. Un'installazione Fava standard non fornisce i moduli personalizzati di Beancount.io.
  • Conto sconosciuto o file include mancante: salva tutti e tre i file nella stessa directory, copia le aperture e valida scenario.beancount piuttosto che il solo frammento di scenario.
  • Previsioni mancanti in Fava: carica scenario.beancount e imposta il filtro Tempo su 2024-01. Un tag o una narrazione non generano voci.
  • Saldi inattesi: confronta le 11 date e gli importi pianificati con la tabella. Caricare un'occorrenza due volte raddoppia il suo effetto finanziario, anche quando ogni transazione quadra.
  • Mantieni le previsioni separate: flag ordinari, tag e date future non impediscono alle voci di influenzare un report non filtrato. Usa books.beancount per i risultati effettivi. Quando un pagamento avviene, registra il suo importo effettivo lì e rimuovi la corrispondente ipotesi dal tuo scenario successivo per evitare di contarlo due volte.
  • Rivedi l'orizzonte: conserva uno snapshot datato quando salvi uno scenario. Estendere la sua data di fine significa aggiungere occorrenze specifiche e ricontrollare le suddivisioni del prestito, le date di cancellazione e gli arrotondamenti.

Fonte: https://beancount.io/it/docs/Tips/forecast-plugin