Ledger: un programmino per non impazzire con le finanze da freelancer

Nerd Level: 3/5
Ledger: un programmino per non impazzire con le finanze da freelancer

Da bravo adulto con partita IVA mi trovo a dover monitorare budget e cashflow. Sia per sapere chi mi ha pagato, sia per capire dove cazzo sono finiti i soldi, sia perché altrimenti la mia adorata commercialista mi crivella di telefonate chiedendomi riconciliazioni che non ho.

Il problema è che siamo in Italia, e le banche italiane non hanno API. Nel 2025, mentre in UK puoi collegare il conto a qualsiasi app con un click, qui devo ancora loggarmi all’homebanking, navigare tre menu, e scaricare un “CSV” che in realtà è un file Excel mascherato. Poi me lo copio-incollo in un Google Sheet da bravo cavernicolo.

E poi inizia il circo: appoggiandomi a una formula artigianale che preleva il mittente del bonifico dalla descrizione estesa (costava tanto mettere il mittente come colonna separata nell’export? Evidentemente sì), cerco di ricavare il proforma e la fattura corrispondente. Parte almeno un’ora a settimana così. “Questo bonifico da 2.789€ del 9 gennaio… sarà la fattura di Pluto o di Paperino?”. Cerca nel foglio, incrocia con FIC, incrocia le dita.

E quando un cliente scrive “Ciao, ho pagato la fattura 123?” parte la caccia al tesoro: apro il foglio, cerco l’importo, verifico la data, controllo FIC, e dopo 5 minuti rispondo. Sembrando uno che non sa dove tiene i soldi.

Quattro ore al mese di questa roba. Quarantotto ore l’anno. Una settimana lavorativa abbondante per fare quello che un computer può fare in due secondi.

Quindi ho costruito Ledger.


Ledger

Ledger è un programmino web per le finanze fatto in Laravel + Filament. Fa tre cose: sincronizza le fatture da FatturaInCloud, importa gli estratti conto bancari in formato CSV italiano, e offre un portal dove i clienti possono vedere i loro documenti senza rompermi le palle via email.

Il risultato pratico è che sono passato da quattro ore al mese a cinque minuti. Carico il CSV, verifico i match, fatto.

In questo post documento la parte di import CSV e il portal clienti, con focus particolare sul parsing dei formati italiani che è dove le cose si fanno interessanti (leggi: dove ho bestemmiato).


Il portal clienti

Prima di entrare nel vivo del CSV, una funzione collaterale che mi ha già ripagato il tempo investito.

Ricevo regolarmente email tipo “Ciao, puoi mandarmi la fattura 2025/123? Grazie, Mario Rossi”. La risposta richiede: aprire FatturaInCloud, cercare la fattura, scaricare il PDF, allegarlo all’email, inviare. Due minuti a botta, cinque-dieci volte al mese. Mezz’ora buttata a fare l’impiegato delle poste.

Ho creato un link dedicato per ogni cliente dove si trova davanti tutti i suoi documenti: preventivi, proforma, fatture con badge pagata/non pagata, e link per scaricare i PDF direttamente. C’è anche il bottone per accettare o rivedere i preventivi, così il giro di approvazione è tutto tracciato.

Portal clienti Ledger


L’import CSV

Qui inizia il vero divertimento.

L’export dell’estratto conto dalla banca sembra un CSV normale, finché non provi a importarlo. Le date sono in formato italiano con l’anno a due cifre, gli importi hanno il simbolo dell’euro attaccato al numero, il punto come separatore delle migliaia e la virgola per i decimali. Insomma il classico “CSV italiano” che non è compatibile con niente.

Ho scritto un importatore che mastica questo formato e lo converte in qualcosa di utilizzabile. Rileva i duplicati (così posso reimportare lo stesso file senza creare casino), e in trenta secondi mi carico tre mesi di transazioni.

Ne parlo nel dettaglio in un post dedicato perché il parsing dei formati italiani merita una trattazione a parte - se hai mai provato a far digerire € 1.234,56 a un programma sai di cosa parlo.


L’interfaccia

L’import è un bottone nell’header della tabella: click, scegli il file, upload, fatto. Mi dice quante righe ha importato e quante ha skippato. Niente terminale, niente SSH, tutto dal browser.

Le entrate sono in verde, le uscite in rosso, le date in formato italiano. Posso cercare, filtrare, ordinare. Quando arriva l’email “ho pagato la fattura X?” ci metto dieci secondi a verificare invece di cinque minuti.


Conclusione

Ledger mi ha già fatto risparmiare tempo nelle prime settimane di utilizzo. Il portal clienti ha tagliato le email “mandami la fattura” e l’import CSV ha eliminato il copia-incolla da cavernicolo.

Ma oltre al tempo c’è un altro vantaggio che non avevo previsto: non devo più dare risposte vaghe. Quando la commercialista chiama ho i numeri davanti, quando un cliente chiede se ha pagato lo so in dieci secondi, e soprattutto quando sono io a chiedermi “ma dove cazzo sono finiti quei soldi” ho tutto lì.

Il prossimo passo è l’auto-riconciliazione, far matchare automaticamente le transazioni con le fatture basandosi su importo e data. Per ora lo faccio a mano, ma il grosso del lavoro sporco è fatto. Se ti interessa il lato tecnico dell’import CSV e del parsing dei formati italiani ne parlerò in dettaglio prossimamente qui.


Scritto con Claude Code