Ogni rendiconto finanziario si basa su una decisione silenziosa presa una volta per ogni conto: questo conto fa parte della cassa che stai spiegando, oppure è un'attività operativa, di investimento o finanziaria? Se prendi la decisione giusta, il rendiconto ti dice dove sono andati i tuoi soldi. Se la sbagli, il rendiconto è fuorviante con sicurezza.
Fino ad ora, il report del flusso di cassa di Beancount.io prendeva quella decisione per te con euristiche — il tipo di radice del conto, più una supposizione basata sul nome su quali attività contano come cassa. Per la maggior parte dei ledger la supposizione era giusta la maggior parte delle volte, e silenziosamente sbagliata il resto delle volte. Un conto di intermediazione nominato nel modo sbagliato finiva nella sezione sbagliata. Un fondo del mercato monetario che è cassa in ogni senso pratico rimaneva in Attività di Investimento perché il suo nome non lo diceva.
Da oggi, puoi rendere esplicita la classificazione. Una riga di metadati beancount standard sulla direttiva open del conto:
2000-01-01 open Assets:US:Brokerage
cash-flow-role: "investing"
2000-01-01 open Assets:US:Marcus:Savings
cash-flow-role: "cash"Una chiave, quattro valori — cash, operating, investing, financing — e questa è l'intera configurazione. Non c'è una pagina delle impostazioni, nessun file JSON, nessuna finestra di opzioni per report. La prossima volta che il report del flusso di cassa viene caricato, i flussi del conto di intermediazione appaiono sotto Attività di Investimento, il conto di risparmio si unisce al mucchio di cassa il cui cambiamento il rendiconto spiega, e ogni altro conto continua a funzionare esattamente come prima.

Cosa significa ogni ruolo
Un rendiconto finanziario classifica ogni conto in uno dei due compiti, e cash-flow-role risponde a entrambi con una sola parola:
"cash"— il conto appartiene al mucchio di cassa ed equivalenti. I conti di cassa non appaiono mai come voci di riga; il rendiconto spiega la variazione del loro saldo combinato, e i trasferimenti tra due conti di cassa si annullano, come dovrebbe essere quando si sposta denaro dal conto corrente al risparmio."operating"/"investing"/"financing"— il conto non è cassa, e la sua variazione di periodo appare come una riga sotto quella sezione di attività.
Per impostazione predefinita, il report tratta i conti delle attività i cui nomi contengono Cash, Checking, Savings o Bank come equivalenti di cassa. Dichiarare un ruolo sovrascrive tutto in entrambe le direzioni. cash-flow-role: "cash" include un conto che la regola del nome non coglie — un fondo del mercato monetario, un portafoglio di stablecoin. E cash-flow-role: "investing" su Assets:US:Bank:CD fa due cose con una riga: esclude il CD dalla cassa e lo archivia sotto investimenti, anche se il suo nome avrebbe corrisposto alla regola della cassa.
Abbiamo deliberatamente usato una chiave invece di due. "Questo conto è cassa?" e "a quale sezione di attività appartiene?" non sono mai state domande indipendenti — un conto o fa parte del mucchio di cassa o appartiene esattamente a una sezione di attività. Due chiavi avrebbero permesso stati assurdi, come un conto di cassa con un ruolo di attività. Una chiave rende gli stati illegali non rappresentabili, e l'intera specifica sta in un tweet.

La classificazione che dichiari è la classificazione che ogni vista usa. Il grafico Per Attività impila i flussi operativi, di investimento e finanziari di ogni mese; sposta il ruolo di un conto, e i suoi flussi si spostano nel livello giusto del grafico, nella sezione giusta del rendiconto e nella riga giusta dell'esportazione, tutto in una volta.
Il dichiarato vince sull'inferito — e il report mostra il suo lavoro
La classificazione ora si risolve in un ordine rigoroso: prima i tuoi metadati, poi l'euristica incorporata. E il report è onesto su ciò che ha fatto. Il rendiconto termina con un pannello "Cassa ed equivalenti in questo report" che elenca esattamente quali conti ha trattato come cassa durante la creazione dei numeri, poi li riconcilia: cassa all'inizio del periodo, cassa alla fine del periodo e la variazione netta che le sezioni di attività spiegano.

Il report distingue anche le classificazioni che hai dichiarato da quelle che ha inferito, e la distinzione si estende alle esportazioni CSV e Markdown: un rendiconto costruito interamente da ruoli dichiarati non porta più la riga di divulgazione "classificazione inferita", perché a quel punto la classificazione non è un'inferenza — è parte dei tuoi libri.
Gli errori di battitura sono gestiti nel modo in cui uno strumento di testo semplice dovrebbe gestirli. cash-flow-role: "invsting" non è accettato silenziosamente e non è ignorato silenziosamente: il conto torna all'euristica predefinita, e il pannello di stato lo segnala — "valore cash-flow-role sconosciuto, uso predefinito" — così l'errore è visibile dove guardi, non sepolto in un registro.
Se non cambi nulla, nulla cambia
I conti non annotati usano gli stessi predefiniti pubblicati di prima: Entrate e Spese mappano a operativo, Attività non di cassa a investimenti, Passività e Patrimonio netto a finanziamenti, e gli equivalenti di cassa corrispondenti al nome formano il mucchio di cassa. Un ledger esistente si presenta in modo identico prima e dopo questa versione. La maggior parte degli utenti annoterà una manciata di conti — quelli in cui il predefinito è sbagliato — e non penserà mai al resto.
Anche la portabilità è intatta. I metadati sulle direttive open sono sintassi beancount di base, analizzati da ogni strumento v2/v3 e ignorati da qualsiasi cosa che non cerchi questa chiave specifica. bean-check passa, Fava alza le spalle, e il tuo ledger rimane pienamente utilizzabile al di fuori di Beancount.io.
Ogni vista della tua cassa concorda con ogni altra
Un risolutore condiviso produce il ruolo finale per ogni conto, e ogni consumatore legge da esso:
- Il report del flusso di cassa costruisce le sue sezioni di attività e la sua riga finale — variazione netta in cassa ed equivalenti — dai ruoli risolti.
- Le esportazioni CSV, Markdown e stampa portano gli stessi numeri, con la divulgazione di classificazione inferita solo dove è stata effettivamente usata un'euristica.
- Il diagramma di Sankey della panoramica legge le stesse dichiarazioni, così un conto che hai contrassegnato come cassa smette di apparire come nodo di flusso, e i tuoi ruoli di attività dichiarati sono onorati per i conti non di Entrate.
- Il pannello di stato del conto smette di elencare un conto dichiarato come "attività non classificata".

Non c'è modo che il rendiconto e il diagramma siano in disaccordo su cosa sia la tua cassa, perché c'è solo una risposta su cui essere in disaccordo.
Perché il ledger, e non una pagina delle impostazioni
Questa è la parte della versione di cui siamo più convinti. Abbiamo considerato una UI delle impostazioni e l'abbiamo rifiutata, per tre motivi:
- Il ledger è la fonte di verità. Una classificazione che vive altrove può essere in disaccordo con i libri che descrive. Una classificazione che vive sulla direttiva
openviaggia con il conto — attraverso rinomine, spostamenti di repository, attraverso ogni client che legge il file. - Il testo semplice è diffabile, cercabile e revisionabile. Se tieni il tuo ledger in git — e se usi Beancount.io, lo fai — la regola di classificazione ora è qualcosa che puoi
grep,diffeblame, e qualcosa che un revisore può vedere in una pull request. Una pagina delle impostazioni non è nessuna di queste cose. - Funziona offline e ovunque. Qualsiasi editor può dichiarare un ruolo. Qualsiasi futuro client che legge il ledger ottiene la classificazione gratuitamente, con zero impostazioni per client da sincronizzare.
Per lo stesso motivo, le classificazioni sono deliberatamente non effettive per data. I metadati descrivono la natura del conto, che raramente cambia; quando cambia, modifichi la direttiva open, e la tua storia git registra cosa è cambiato e quando. Quella storia è la traccia di audit.
Provalo sul tuo ledger
La funzionalità è in rollout su tutti i ledger ora. Dichiarare un ruolo richiede solo un editor di testo:
- Apri il file dove vive la direttiva
opendel conto. - Aggiungi
cash-flow-role: "cash"(o"operating","investing","financing") come riga di metadati indentata sotto di essa. - Ricarica il report del flusso di cassa. La tua dichiarazione vince sull'euristica immediatamente.
Inizia con i conti dove la supposizione predefinita è sbagliata — il CD che non è davvero cassa, il fondo del mercato monetario che lo è davvero, il conto di intermediazione che vuoi pulito sotto Attività di Investimento. Lascia stare il resto. La specifica completa — valori accettati, precedenza, classificazioni predefinite e come vengono gestiti i valori non validi — vive nel riferimento Ruoli del Flusso di Cassa.
Il report del flusso di cassa fa parte di ogni ledger di Beancount.io, insieme al conto economico e allo stato patrimoniale. Se stai recuperando su cos'altro è stato rilasciato quest'estate — importazioni più intelligenti, un assistente AI capace di azioni e un'app mobile ricostruita — le note di versione 3.6 coprono il resto.
I tuoi libri sapevano già quali conti sono investimenti e quali sono spese quotidiane. Ora anche il rendiconto finanziario lo sa.
