lunedì 27 luglio 2020

Importare il file CSV di Bancoposta Impresa Online

Il file CSV di Posteonline è ostico da utilizzare 

Ho cercato in internet per vedere se ci fosse qualcuno che ha il mio stesso problema ma pare di no.
Ho cercato "Problemi con file CSV Bancoposta", "Problemi con file csv Posteonline", "File CSV BancoPosta Impresa Online (BPIOL)", "Estratto movimenti CSV Bancoposta" (scrivo queste frasi perché Google potrebbe così capire di cosa parlo e far trovare il post a chi è interessato). Trattandosi di Poste Italiane trovo normale non trovare nulla in altre lingue ma mi aspettavo di trovare un qualche forum dove qualcuno sollevasse il problema o qualche programma per affrontare quello che a me pare un problema abbastanza importante: la difficoltà di gestire il file dell'estratto dei movimenti del conto corrente Bancoposta.

[Aggiornamento 2022]

Come indicato al fondo del post, nel 2020 sono riuscito a realizzare qualcosa che facesse al caso mio e che mi permettesse di "ripulire" il file dalla spazzatura, renderlo gestibile estraendo le parti utili (data, mittente, destinatario, causale, importo) e in buona parte dei casi fosse in grado di assegnare delle categorie ai movimenti in base al contenuto dei diversi campi. Infine il sistema genera un file QIF.
Inoltre nel frattempo ho abbandonato il vetusto Money 2000 e sto utilizzando GnuCash che alimento con il file QIF.

I file CSV di Bancoposta Impresa Online non sono agevoli da usare

Mi occupo di registrare i movimenti bancari di tre enti. Ciascuno dei tre enti ha un conto corrente business Bancoposta (BPIOL - Bancoposta Impresa Online). Da tempo ogni mese scarico gli estratti, li ripulisco e elaboro a mano e li importo nel software di contabilità.
Per estrarre la parte utile (80-110 caratteri) dal grumo di caratteri che viene fornito occorrono diversi passaggi di "ricerca e sostituisci" fatta anche utilizzando le "regular expressions".
occorre anche intervento più manuale per il completamento di alcune informazioni.

Usare Excel per trattare il CSV. Si può con VBA. Ci provo.

Dato che i dati continuano a essere ostici da trattare e non trovando nulla in giro ho deciso di affrontare io la cosa con la mia modesta esperienza di programmazione. Nel sistema che sto approntando faccio uso di Excel come base per analizzare, scomporre e ricomporre le informazioni contenute nel file CSV. Farò uso di VBA (Visual Basic for Application), che mi permetterà di lavorare dettagliatamente sulle stringhe di caratteri.

Chi fosse interessato mi contatti

Non so quanti si trovino nella mia situazione ma scrivo questo post perché penso che il lavoro che sto facendo, in parte o in tutto, potrebbe essere utile anche a altri. E magari qualcuno potrebbe anche voler collaborare a uno sviluppo.
Infatti le procedure sviluppate potrebbero venire adottate/adattate anche per trattare file di banche diverse. Già avevo sviluppato un sistema per trasformare i file di Banca Etica ma era specifico per il conto che gestivo e poco manipolabile.

Come intendo trattare i CSV di Bancoposta

Il sistema si occupa di:
- Aprire in n foglio il CSV originale.
- Scomporre il "grumo di testo" fornito da Poste Italiane e riportare tutti i pezzi (utili e non) su un secondo foglio.
- Ricomporre su un terzo foglio le informazioni importanti (data, importo, ordinante/beneficiario, causale).
- Assegnare automaticamente, ove possibile, una categoria alle operazioni (donazioni, quote associative, iscrizioni, spese di personale, imposte...). Questo analizzando il codice operazione, l'importo, il contenuto della causale, il beneficiario/ordinante. Ogni ente avrà un "filtro" specifico per le sue necessità. Dove il riconoscimento automatico non sarà possibile, si potrà integrare a mano.
- Nel caso di bollettini multipli, il sistema aggiunge dei movimenti vuoti, di importo zero, da editare a mano per suddividere gli importi e indicare l'ordinante e la causale.
- Creare un file (nel mio caso un QIF) con le informazioni pulite e complete, da caricare nel software di contabilità (il mio Money 2000 o altri).

Il file QIF per Money 2000 (o per GnuCash)

Mi serve il formato QIF per l'importazione in Money 2000. Il software è datato e funziona solo sotto Windows XP (uso una macchina virtuale per farlo girare) ma funziona bene e ha le funzioni che mi servono per archiviare i movimenti dei conti, classificandoli e genera i report utili alla creazione del bilancio. Purtroppo Microsoft ha cessato da anni lo sviluppo del programma.
Ho adocchiato GnuCash come alternativa. Mi sembra potente e completo ma non mi è chiaro come adattarmi al siatema di partita doppia al quale GnuCash è orientato.
L'oggetto del mio lavoro potrebbe essere in parte già utile così come è e potrebbe adattarsi anche a altri sistemi, con gli adattamenti del caso alle parti che sono specifiche per le mie esigenze.

Introduzione al problema di trattamento CSV (e PDF) di Bancoposta

In sintesi la questione è che i file CSV delle Poste sono poco utilizzabili, così come sono.
occorre un sistema che smsmbri le informazioni e permetta di integrare quelle mancanti prima di generare il file di output


Dall'internet banking posso scaricare degli estratti dei movimenti bancari in formato PDF o CSV (campi separati da virgole). Il massimo periodo scaricabile in una volta è di circa un anno.
Le informazioni contenute nei due formati sono le stesse, solo che il PDF è più adatto a una lettura umana mentre il CSV per una lettura "elettronica".
Il CSV può venire aperto direttamente da Excel e presentare i dati suddivisi in righe e colonne.
Avere a che fare con questi file PDF e CSV di Posteonline è abbastanza frustrante per alcuni motivi:
Nel PDF ci sono solo sei campi: R, Data contabile, Data Valuta, Codice operazione, Debito, Credito e Descrizione.

Il campo R è sempre vuoto e non so a cosa serva.
Il campo Data Contabile indica la data della richiesta dell'operazione.
Il campo Data Valuta indica la data in cui l'importo è stato addebitato/accreditato sul conto
Il campo Caus. ABI è un codice che distingue i vari tipi di operazioni (48 per bonifici/postagiro ricevuti, 16 per commissioni sulle operazioni, 19 per l'imposta di bollo, 7 per la ricezione di bollettini, e altri).
Il campo Descrizione è una cosa raccapricciante perché contiene un miscuglio di informazioni, dove alcune informazioni sono utili, altre inutili, altre ridondanti e altre mancanti.
Nell'immagine è mostrato cosa appare nella tipica descrizione di un bonifico ricevuto. Il campo Descrizione costituirà oggetto di un esame più approfondito.

Motivi di raccapriccio circa il PDF e il CSV di Bancoposta

Ci sono diversi motivi di raccapriccio relativamente a questi report:
- Per i pagamenti ricevuti con bonifico o postagiro sarebbe naturale aspettarsi di vedere agevolmente il nome dell'ordinante e la causale, invece per determinare queste informazioni occorre affrontare il campo Descrizione.
- Circa i pagamenti ricevuti con bollettino postale è dato di sapere solo l'importo e il centro di smistamento da cui il bollettino proviene (Bari, Venezia e pochi altri). Per avere il dettaglio dell'ordinante e della causale occorre scaricare a parte la scansione o attendere la ricezione della copia cartacea del bollettino e trascriverne il contenuto. Come se non bastasse, se in un giorno, lo stesso centro ha raccolto più bollettini, viene indicato un unico movimento con l'importo totale e il numero di bollettini, ma in questo modo non si può determinare gli importi dei singoli pagamenti (occorre di nuovo affidarsi alle scansioni).
- Per i bonifici emessi non viene indicato il destinatario. Si vede magari "Fattura 4 del xx/xx/xxxx e non si capisce chi è stato pagato. Quando faccio pagamento cerco di ricordarmi di indicare il destinatario nella causale, tipo "A  Paolo Bianchi PER  Fattura n.1 del ..."
E siamo nel 2020...

Precedente approccio

Per i bollettini avevo creato un sistema in PHP, installato sul nostro sito, che permetteva di trascrivere a mano i dati dei bollettini, eseguire un elenco, fare delle ricerche e generare un file QIF da importare nel mio sistema. Un tempo è stato utile perché i bollettini erano più numerosi, ora sono aumentati i bonifici e i postagiro e per la registrazione dei movimenti quel sistema è meno utile.
Essendo diminuiti i bollettini ho cominciato tempo fa a elaborare più o meno manualmente il file CSV dell'estratto del conto per poi aggiungere le informazioni relative ai bollettini o durante il trattamento o dopo l'importazione in Money.
La possibilità di assegnare in automatico le categorie ai movimenti mi ha motivato a questa impresa.
In realtà Money non importa direttamente la categoria (anche se il formato QIF prevede questa informazione) ma lo fa indirettamente, indicando il "Payee", ovvero, se io per esempio indico come Payee "Mondoffice" e in Money ho già associato una volta Mondoffice alla categoria "Spese ufficio", allora anche la categoria viene assegnata in fase di importazione. Non è il massimo ma ci si può adattare.
[agg. 2022] GnuCash importa i "conti" (quelle che in Money erano "categorie" in GnuCash, che lavora in partita doppia, sono conti di entrata o di uscita)

È tutto per ora

Al momento ho scomposto abbastanza per bene il grumone di informazioni, ho estratto le informazioni essenziali, ho creato un file QIF. Sto lavorando al riconoscimento e classificazione dei movimenti (ove le informazioni sono disponibili) per associarli già alle corrette voci di bilancio.
Sto cercando di tenere in ordine il codice, di prendere degli appunti sui problemi affrontati e sulle soluzioni con l'idea di poter realizzare un po' di documentazione ordinata, se occorresse.,
Ho voluto scrivere questo post e lasciarlo nelle mani di Google, in modo da raggiungere chi come me si stesse interessando al problema. Non ho ragione di prevedere che il file CSV possa migliorare a breve. A chi lo volesse posso inviare una copia del file Excel con il codice VBA in fase di sviluppo.

Aggiornamento dicembre 2020

Il sistema funziona decentemente bene. L'ho adattato per convertire anche i file di Unicredit, di Banca Etica e anche i file della cronologia di PayPal.
Per il filtraggio e riconoscimento ho usato un foglio di Excel dove posso indicare, per ogni "categoria" di entrata/usciita alcuni parametri, tipo il segno del movimento, importo minimo e massimo, nomi del corrispondente (il mittente o il destinatario), parole che devono comparire nella causale, parole che non devono comparire...
Ho potuto così passare i file QIF ottenuti al software GnuCash, dove vengono raccolti i movimenti di tutti i conti.
Ora devo ancora definire come adattare il file CSV esportato da GnuCash con tutti i movimenti dell'anno in modo che il commercialista possa darlo in pasto al suo sistema (occorre data, note, importo, conto di addebito, conto di accredito.
[agg. 2022] Ho aggiunto anche un convertitore per quest'ultima fase