Se sei solito pagare tutto tramite carta sicuramente avrai meno difficoltà nel trovare la risposta alla domanda del titolo. Ormai quasi tutte le banche permettono di categorizzare in automatico le spese e di avere un resoconto mensile. Ma permettono di personalizzare il procedimento? Puoi cambiare la categoria di una spesa? Puoi aggiungere nuove categorie? È possibile avere categorie e sotto categorie? Se utilizzi più banche come fai ad unire i dati che provengono dalle varie app? L’obbiettivo di questo post è dare una risposta a tutte queste domande attraverso l’utilizzo di Ledger.
Cos’è Ledger
Ledger è uno strumento per la contabilità a partita doppia pensato per essere usato attraverso la linea di comando. Molti paroloni, ma ti assicuro che è tutto più semplice di quanto possa sembrare.
strumento per la contabilità
Sicuramente ti è già chiaro cosa sia la contabilità, ma perché tenerla, mica sei un’azienda. Vero, non sei un’azienda, ma gestire il proprio denaro diventa ogni giorno più complicato. La ragione principale di questo aumento di complessità è il numero di conti che utilizziamo; abbiamo il conto corrente dove riceviamo lo stipendio, poi c’è un conto deposito, abbiamo un conto che utilizziamo per i viaggi, Satispay per scambiarsi soldi con gli amici. E non è finita qui, molti hanno anche un conto d’investimento, altri hanno dei wallet per per cryptovalute, c’è chi ha dei soldi sull’account PayPal, chi su Amazon e così via. Usiamo più servizi di prima e ogni servizio ha il suo perché, ma tenere traccia della nostra situazione finanziaria è più complicato, quindi dobbiamo affrontare il problema con gli strumenti giusti.
partita doppia
La partita doppia è un metodo contabile usato per la prima volta dai mercanti fiorentini nel XIV secolo. L’idea alla base del metodo è quella di registrare un’operazione sempre almeno su due conti. Questo vuol dire che se un conto aumenta di 10€ necessariamente un altro conto deve diminuire di 10€ in quanto non è possibile creare soldi dal niente. All’inizio può sembrare un po’ contro intuitivo, ma se viene usato da seicento anni un motivo ci sarà.
usato attraverso la linea di comando
Non voglio mentirti, questo post fa largo uso del terminale e a te il terminale probabilmente non piace. Prima di chiudere la pagina lasciami solo dirti che Ledger ha dato vita ad un movimento che prende il nome di Plain Text Accounting e sono molti software che aderiscono a questo movimento. Alcuni di questi sono dotati anche di un’interfaccia grafica per cui puoi applicare molti concetti trattati in questo post anche ad altri tool.
Plain Text Accounting
L’idea alla base del plain text accounting è quella di tenere traccia della contabilità attraverso l’utilizzo di file in plain text. Cos’è un file in plain text? Semplice è un file di testo, niente di più, niente di meno. No, non come Word, in cui ci sono i font, le dimensioni, il grassetto, il colore ecc. Un file plain text contiene solo del testo, nient’altro.
Ti sembra troppo limitato? Ti assicuro che non è così. Con i file in plain text ci si può fare tantissimo, come in questo caso tenere traccia della contabilità. Inoltre hanno due grandi vantaggi:
- Un file plain text potrà essere aperto anche fra cent’anni.
- Un file plain text può essere compreso anche dagli esseri umani.
All’interno di un file Ledger, spesso chiamato journal, sono contenute prevalentemente delle transazioni che vanno ad alterare il saldo dei vari conti. Una transazione si compone di una riga d’intestazione, al cui interno sono riportate la data e il beneficiario/causale del pagamento, e n righe ognuna che rappresenta un cambiamento in un conto. Ecco un esempio di transazione in Ledger.
2021-01-17 Airbnb
expenses:travel:accommodation 550 EUR
assets:current:revolut -550 EUR
Come si legge? Il diciassette gennaio ho fatto un pagamento ad Airbnb. Il costo dell’affitto è stato categorizzato come una spesa di viaggio, in particolar modo è rientrato nella sotto categoria accommodation. Il pagamento dei 550€ è avvenuto mediante il mio conto Revolut.
Semplice no? Forse anche troppo, proviamo con qualcosa di più complesso. Per prepararmi al viaggio, il giorno dopo, ho comprato su Amazon un cuscino da viaggio dal costo di 10€. Inoltre ho visto che c’è un nuovo modello di kindle in offerta (100€), quindi ho comprato anche quello. Anche in questo caso voglio pagare con la mia carta Revolut, ma sul mio account Amazon ho ancora 25€, per cui la transazione su ledger sarà del tipo:
2021-01-18 Amazon
expenses:travel:accessories 10 EUR ; cuscino da viaggio
expenses:entertainment:books 100 EUR ; kindle
assets:current:amazon -25 EUR
assets:current:revolut
Ok qui sembra esserci qualcosa di strano. Innanzitutto non è stato specificato quanti soldi sono stati prelevati dal conto Revolut, ma tranquillo questo non è un errore. Poiché Ledger usa la partita doppia, la somma di tutte le modifiche sui vari conti deve essere sempre zero. Nel nostro caso abbiamo 10 + 100 - 25 quindi per portare il tutto a zero ci serve un -85. Quindi Ledger è abbastanza furbo da capire che da Revolut sono stati presi 85€1.
L’altra particolarità della transazione precedente è la presenza del simbolo ;
.
In punto e virgola, in Ledger, viene utilizzato per le note.
Se la nota viene messa su una riga con un movimento (come nell’esempio) allora la nota si riferisce al singolo movimento.
Mentre quando la nota sta su una riga tutta sua allora questa fa riferimento all’intera transazione.
Struttura dei conti
Dopo aver visto gli esempi precedenti ti dovrebbe essere già abbastanza chiaro il modo in cui Ledger gestisce i conti, ovvero in maniera gerarchica.
Ogni categoria (per esempio expenses
) può avere più sotto categorie (per esempio travel
) che a sua volta può avere altre sotto categorie (per esempio accessories
) e così via.
Ogni livello viene separato dai due punti (:
) e ci possono essere infiniti sotto livelli.
Il nome dei conti è totalmente libero e viene deciso dall’utente. Sebbene non gli abbia usati, il nome di un conto può contenere anche spazzi e lettere maiuscole.
Ledger è democratico con i conti e li tratta tutti allo stesso modo.
Questo vuol dire che i conti con le nostre spese agli occhi di Ledger sono totalmente uguali a quelli in cui ci sono i nostri averi.
Anzi, ti dirò di più, Ledger non sa neanche che il conto expenses
contiene le nostre spese.
Siamo noi a dare una semantica ai vari conti, per questo è importante usare nomi sensati.
Ti ripeto, sei totalmente libero di utilizzare i nomi che preferisci per i tuoi conti, ma ti consiglio di introdurre delle regole per gestire al meglio il tutto. In particolare ti consiglio di limitare a cinque il numero di conti principali e di usare quelli elencati qui sotto (o la loro traduzione in italiano).
assets
: sono i conti in cui stazionano i tuoi soldi.expenses
: sono i conti in cui vanno a finire i tuoi soldi.income
: sono i conti da cui arrivano i soldi.liabilities
: sono i conti in cui risiedono i soldi che devi ad altri.equity
: questo è un po’ complicato. Da un punto di vista teorico in questi conti è riportato il valore reale dei tuoi averi. Da un punto di vista pratico questi conti vengono usati come account jolly. Comunque tranquillo questo conto viene utilizzato poco.
Registrare le entrate
Prima di poter vedere il funzionamento di Ledger devo spiegarti come segnare le tue entrate. Per prima cosa dobbiamo fare una fotografia della situazione iniziale. Quindi se iniziamo a tenere traccia della nostra contabilità a partire dal primo gennaio 2022 dobbiamo dire a Ledger qual è la nostra situazione finanziaria.
Ipotizzando di avere, al primo gennaio, la seguente situazione finanziaria:
- conto Revolut: 243€
- conto corrente Illimity: 729€
- saldo account Amazon: 25€
- contanti: 37€
avremo la seguente transazione Ledger:
2022-01-01 Opening Balances
assets:current:revolut 243 EUR
assets:current:amazon 25 EUR
assets:current:illimity 729 EUR
assets:current:cash 37 EUR
Per verificare che il file sia corretto e comprensibile a Ledger utilizziamo il comando stats
che oltre ad interpretare il file con le transazioni ci fornisce diverse statistiche.
Nel mio caso il comando completo è ledger --file ledger.journal stats
poiché ho inserito la transazione nel file ledger.journal
.
Si è verificato un’errore?
Tranquillo non è colpa tua.
La verità è che sono uno stronzo e ti ho fatto sbagliare di proposito.
Riguardando la transazione si nota subito che abbiamo violato la prima regola di Ledger: La somma di tutti i movimenti deve essere zero.
Ledger vuole sapere da dove vengono questi 1034€.
Sono soldi che già sono nelle nostre disponibilità, per cui non è corretto inserirli tra le entrate, quindi la soluzione migliore è utilizzare la categoria jolly e quindi il conto equity
.
Per questo la nostra transazione di apertura sarà:
2022-01-01 Opening Balances
assets:current:revolut 243 EUR
assets:current:amazon 25 EUR
assets:current:illimity 729 EUR
assets:current:cash 37 EUR
equity:open -1034 EUR
Ora se provi ad eseguire nuovamente il comando ledger --file ledger.journal stats
non dovresti vedere degli errori, bensì delle statistiche sul tuo journal.
Ok è arrivato il quindici del mese e riceviamo lo stipendio, come segnare queste entrate? Basta inserire all’interno del journal una nuova transazione in cui aggiungiamo 1500€ (il nostro stipendio) al conto Illimity (il conto su cui ci accreditano lo stipendio). Da dove prendiamo questi 1500€? Semplice dal conto del nostro datore di lavoro.
2022-01-15 Employer
assets:current:illimity 1500 EUR
income:salary -1500 EUR
Balance & Register
Ora che dovrebbe essere chiaro come registrare i movimenti tra i nostri conti è arrivato il momento vedere come funziona Ledger e in particolare i due comandi più usati; balance e register. Ti consiglio di eseguire passo passo i comandi che ti farò vedere e, per ottenere i miei stessi risultati, devi usare questo journal.
Balance
Il comando balance
permette di visualizzare il bilancio corrente di tutti gli account.
Eseguendo da terminale il comando ledger --file ledger.journal balance
si ottiene il seguente output:
1607 EUR assets:current
37 EUR cash
1509 EUR illimity
61 EUR revolut
-1034 EUR equity:open
927 EUR expenses
100 EUR entertainment:books
47 EUR food:restaurants
220 EUR groceries
560 EUR travel
10 EUR accessories
550 EUR accommodation
-1500 EUR income:salary
--------------------
0
Da questo output si nota bene l’organizzazione gerarchica dei conti in Ledger.
Se questa rappresentazione dovesse crearti problemi puoi usare il flag --flat
.
In altri casi ancora non si vuole conoscere il bilancio di tutti i conti, per questo motivo Ledger permette di selezionare solo i conti che matchano una regular expression.
Nel caso fossi interessato a conoscere la posizione di tutti i soldi di cui disponi e visualizzare i vari conti in modo piatto è possibile usare il comando ledger --file ledger.journal balance assets --flat
che genera il seguente output:
37 EUR assets:current:cash
1509 EUR assets:current:illimity
61 EUR assets:current:revolut
--------------------
1607 EUR
Register
Un altro comando fondamentale di Ledger è register
il cui compito è quello di simulare un registratore di cassa.
Questo comando permette di vedere l’effetto sui conti di ogni singolo movimento.
Anche in questo caso il report può essere ridotto solo a determinati conti.
Per vedere tutte le transazioni in generi alimentari possiamo usare il comando ledger --file ledger.journal register groceries
che ha il seguente output:
2022-01-10 Esselunga expenses:groceries 137 EUR 137 EUR
2022-01-23 Esselunga expenses:groceries 83 EUR 220 EUR
Oltre alla data e al conto della transazione nell’output sono riportate due colonne, la prima mostra l’ammontare della transazione, mentre la seconda tiene traccia della somma di tutte le transazioni.
Quanto ho speso questo mese?
Dopo questa lunga introduzione possiamo finalmente rispondere alla domanda del titolo.
Lo strumento migliore, messo a disposizione da Ledger, per conoscere le nostre spese è il comando register
.
In particolare se siamo interessati solo alle spese del mese corrente dobbiamo usare anche il flag --period
che permette di selezionare solo un determinato intervallo temporale.
Quindi per conoscere tutte le spese di questo mese usiamo il comando: ledger --file ledger.journal register expenses --period 'this month'
2.
2022-01-10 Esselunga expenses:groceries 137 EUR 137 EUR
2022-01-17 Airbnb expenses:travel:accommodation 550 EUR 687 EUR
2022-01-18 Amazon expenses:travel:accessories 10 EUR 697 EUR
2022-01-18 Amazon expenses:entertainment:books 100 EUR 797 EUR
2022-01-23 Esselunga expenses:groceries 83 EUR 880 EUR
2022-01-29 Pub expenses:food:restaurants 47 EUR 927 EUR
Nell’output abbiamo l’elenco di tutte le spese del mese. Nella prima colonna è riportata la data della spesa e l’esercizio commerciale dove è stata effettuata. Nella seconda colonna è riportata la categoria e nella terza l’ammontare. Nell’ultima colonna è riportata la somma corrente, quindi per conoscere le spese totali di gennaio dobbiamo guardare all’ultima colonna dell’ultima riga. Quindi in questo esempio a gennaio sono stati spesi 927€.
Non sei interessato a tutte le spese, ma solo a quelle di viaggio?
Niente di più semplice, basta usare il seguente comando: ledger --file ledger.journal register expenses:travel --period 'this month'
2022-01-17 Airbnb expenses:travel:accommodation 550 EUR 550 EUR
2022-01-18 Amazon expenses:travel:accessories 10 EUR 560 EUR
In altri casi non siamo interessati alle singole transazioni, ma al totale per ogni categoria.
In questi casi possiamo usare il flag --subtotal
ottenendo il seguente comando: ledger --file ledger.journal register expenses --period 'this month' --subtotal
.
2022-01-10 - 2022-01-29 expenses:entertainment:books 100 EUR 100 EUR
expenses:food:restaurants 47 EUR 147 EUR
expenses:groceries 220 EUR 367 EUR
expenses:travel:accessories 10 EUR 377 EUR
expenses:travel:accommodation 550 EUR 927 EUR
In questo caso la colonna più importante è la terza in cui viene riportata la spesa totale per la categoria. Quindi in questo esempio sono stati spesi 100€ in libri, 47€ in ristoranti e così via.
Siamo arrivati alla fine di pesto primo post su Ledger. Probabilmente questo strumento ti sembrerà overkilled per lo scopo che ci siamo fissati all’inizio del post e in parte hai ragione. Ledger è uno strumento molto potente e flessibile che da il meglio di se solo quando ci si prende la mano. Nei prossimi post della serie ci sarà modo di trattare diversi argomenti e di espandere quelli già accennati. Stay tuned!
Questo post contiene diversi referral link.
Naturalmente è possibile lasciare in bianco solo un valore, quindi lasciandone vuoti due Ledger non è più in grado di determinare quelli mancanti. ↩︎
Ledger ci consente di esprimere gli intervalli temporali attraverso varie espressioni. Espressioni relative come ’this month’ sono comode perché ci permettono di usare lo stesso comando che si adatta in automatico alla situazione attuale, ma ci sono dei casi in cui abbiamo bisogno di identificare il periodo di riferimento in modo più diretto. Per esempio se stai leggendo questo articolo a febbraio non otterrai alcun risultato in quanto per Ledger ’this month’ equivale per l’appunto a febbraio. In questi casi è possibile utilizzare il nome del mese (
--period 'jan'
) oppure definire l’intervallo in modo esplicito (--period 'from 2022-01-01 to 2022-01-31'
). ↩︎