Per prima cosa scarichiamo dal sito della nostra banca il csv dell'estratto conto. Nel caso di Unicredit il file di INPUT si presenta così:
Genius Card Web IT 95 J 00000 00000 00xx0000xx00 - XXXX XXXX XXXX 0000,,, ,,, Data Operazech.,Descrizione,EUR,Caus. 02/01/2012,"PAGAMENTO SUPERMERCATO","-50,00",079 04/01/2012,"VOSTRI EMOLUMENTI DA ENTERPRISE S.p.A","2100,00",027 05/01/2012,"DISPOSIZIONE DI BONIFICO BONIFICO A ROSSI MARIO PER AFFITTO","-357,72",208Dal sito di Homebank possiamo vedere che il formato accettato è il seguente (link):
Column list:
date ; paymode ; info ; payee ; description ; amount ; category
Di conseguenza il nostro OUTPUT dovrà avere la seguente formattazione
15-02-04;0;;;Some cash;-40,00;Bill:Withdrawal of cash 15-02-04;1;;;Internet DSL;-45,00;Inline service/InternetQuindi per prima cosa eliminiamo dal file di input le righe di titolo ed intestazione:
02/01/2012,"PAGAMENTO SUPERMERCATO","-50,00",079 04/01/2012,"VOSTRI EMOLUMENTI DA ENTERPRISE S.p.A","2100,00",027 05/01/2012,"DISPOSIZIONE DI BONIFICO BONIFICO A ROSSI MARIO PER AFFITTO","-357,72",208Effettuiamo un find e replace del file in input su un file temporaneo sostituendo il separatore virgola con il punto e virgola ed eliminando i doppi apici:
sed -e 's/,"/;"/g' -e 's/",/";/g' -e 's/"/\E/g' inputFile >inputFile.tmp
Ottenendo come risultato il seguente:
02/01/2012;PAGAMENTO SUPERMERCATO;-50,00;079 04/01/2012;VOSTRI EMOLUMENTI DA ENTERPRISE S.p.A;2100,00;027 05/01/2012;DISPOSIZIONE DI BONIFICO BONIFICO A ROSSI MARIO PER AFFITTO;-357,72;208Il passo successivo è quello di leggere il file temporaneo così generato riga per riga riordinando nel modo corretto le colonne affinchè siano compatibili con il formato di output di Homebank.
Homebank permette anche di associare ad ogni movimento un tag in modo da permettere all'utente di analizzare i dati in maniera più precisa, tuttavia questa operazione andrebbe fatta a mano per ogni singola operazione, vediamo quindi di trovare il modo di associare ad ogni riga del file di output un tag che sarà poi riconosciuto da Homebank.
Per prima cosa apriamo HomeBank, creiamo un nuovo portafoglio e dal menu Gestione->Categorie inseriamo le categorie che ci sembrano più utili in base alla tipologia dei nostri movimenti. Fatto ciò clicchiamo sul tasto 'Esporta' e dovremmo trovarci con un file di questo tipo:
1;-;Casa
2; ;Affitto
2; ;Bollette
2; ;Spese
1;-;Personali
2; ;Regali
2; ;Altre
2; ;Abbigliamento
2; ;Utilities
2; ;Spesa
1;-;Auto
2; ;Manutenzione
2; ;Benzina
2; ;Assicurazione
1;-;Viaggi
2; ;Vacanze
2; ;Hotel
2; ;Biglietti
1;+;Emolumenti
2; ;Eterprise
Che andrà trasformato a mano nel seguente:
Casa:Affitto;
Casa:Bollette;
Casa:Spese;
Personali:Regali;
Personali:Altre;
Personali:Abbigliamento;
Personali:Utilities;
Personali:Telefonia;
Personali:Spesa;
Auto:Benzina;
Auto:Assicurazione;
Auto:Manutenzione;
Viaggi:Vacanze;
Viaggi:Hotel;
Viaggi:Biglietti;
Emolumenti:Enterprise;
Adesso aggiungiamo ad ognuna di queste categorie una serie di parole chiave presenti nelle descrizioni dei movimenti che consentano di inquadrarle in quella categoria. Ad esempio i movimenti che contengono nella descrizione la parola 'AFFITTO' saranno etichettati nella categoria Casa:Affitto quindi:
Casa:Affitto; AFFITTO
I Movimenti che invece conterranno nomi di Supermercati dovranno confluire nella categoria Personale:Spesa quindi avremo:
Personali:Spesa; PEWEX IPERCOOP COOP PAM
E così via fino ad avere parole chiavi per ogni categoria, alla fine il nostro file somiglierà a qualcosa del genere:
Casa:Affitto; AFFITTO
Casa:Bollette; GAS ENEL
Casa:Spese; SPESE FONDOCASSA
Personali:Regali; AMAZON E-KEY
Personali:Altre;
Personali:Abbigliamento; PULL&BEAR SYSLEY BENETTON
Personali:Utilities;
Personali:Telefonia; TIM WIND VODAFONE TRE.IT
Personali:Spesa;
Auto:Benzina; RIFORNIMENTO AGIP CARBURANTI
Auto:Assicurazione; QUIXA ALLIANCE ADMIRAL
Auto:Manutenzione; MECCANICO GOMMISTA
Viaggi:Vacanze;
Viaggi:Hotel; B&B
Viaggi:Biglietti; ALITALIA RYANAIR
Emolumenti:Enterprise; ENTERPRISE
Salvato questo file con il nome 'categorie' siamo pronti ad effettuare il parsing del file temporaneo che avevamo generato per ottenere così il file csv da dare in pasto ad Homebank con i movimenti già categorizzati:
while IFS=';' read data desc amount caus
do
#Category retrivier routine
#replace spaces of description with |
tempDesc="$(echo $desc | sed 's/ /|/g')"
#find categories
category="$(egrep -w $tempDesc categorie | head -n1 | cut -d';' -f1)"
fi
#append readed in output file
echo "$data;0;;;$desc;$category">>output
done <inputFile.tmp
la routine precedente non fa altro che leggere riga per riga splittando il contenuto di ogni singola riga del file inputFile.tmp precedentemente generato.Per recuperare la categoria sostituisco gli spazi del campo descrizione (desc) con il carattere di OR logico (|) ponendo la stringa generata in una variabile temporanea tempDesc:
tempDesc="$(echo $desc | sed 's/ /|/g')"
Subito dopo effettuo una ricerca sul file categorie per selezionare la prima riga nella quale è stata trovata una delle parole di tempDesc facendomi restituire la categoria, l'opzione -w fa in modo che deve essere trovata una occorrenza dell'intera parola presente nella stringa $tempDesc all'interno del file delle categorie):
category="$(egrep -w $tempDesc categorie | head -n1 | cut -d';' -f1)"
Infine scrivo sul file di output la riga così ottenuta mettendo i campi nell'ordine corretto rispetto alla formattazione richiesta da Homebank:
echo "$data;0;;;$desc;$category">>output
A questo punto possiamo anche creare uno script in modo da rendere più automatico possibile il procedimento ed eventualmente aggiungere il parsing anche di altri formati.
Download hmbank.sh
hmbank.sh
L'uso dello script è semplicissimo, se input.csv è il nostro file con l'elenco dei movimenti scaricato dalla nostra banca e categories è il file con le categorie organizzate con le keyword così come descritto nel post, basterà dare il comando
./hmbank.sh -i input.csv -o output.csv -c categories
per generare il file output.csv che daremo in pasto ad HomeBank.
Ottimo lavoro, complimenti, provo ad implementarlo sulla mia box. Saluti.
RispondiElimina