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 USDCrea 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 USDIl 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:
| Voce | Programma | Date incluse a gennaio 2024 |
|---|---|---|
| Affitto | Mensile, il 1° | 1° gennaio |
| Spesa alimentare | Ogni 7 giorni, dal 1° gennaio | 1, 8, 15, 22, 29 gennaio |
| Stipendio | Ogni 14 giorni, dal 5 gennaio | 5, 19 gennaio |
| Palestra | Mensile, il 15 | 15 gennaio |
| Pagamento prestito | Mensile, il 25 | 25 gennaio |
| Assicurazione auto | Ogni 3 mesi solari, dal 15 gennaio | 15 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 USD2. 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 USDLa 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 USDEsempio 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 USDValida 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:
| Risultato | Libri effettivi, 31 dicembre | Scenario gennaio, 31 gennaio |
|---|---|---|
| Conto corrente | 10.000,00 USD | 10.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 stipendio | 0,00 USD | −6.000,00 USD |
| Registrazioni spese totali | 0,00 USD | 2.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.beancountImposta 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.beancountpiuttosto che il solo frammento di scenario. - Previsioni mancanti in Fava: carica
scenario.beancounte imposta il filtro Tempo su2024-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.beancountper 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.