Come abbiamo integrato la fatturazione elettronica in un software

Dal 1° gennaio 2019 in Italia è entrato in vigore l’obbligo, per le aziende e i titolari di partita iva, della fatturazione elettronica. Ecco come abbiamo integrato per un cliente questo obbligo in un software gestionale.

La fattura elettronica è un documento informatico, in formato strutturato, trasmesso in modalità telematica al Sistema di Interscambio (SdI) dell’Agenzia delle Entrate e recapitato tramite lo stesso mezzo al destinatario. Ha l'obiettivo di sostituire le fatture cartacee che fino a dicembre 2018 venivano emesse da un fornitore verso il suo cliente.

Richiesta e obiettivo

Siamo stati contattati dall'Azienda Agricola di Baldan Orfeo, già nostro cliente da diversi anni, la quale, dal 2014, utilizza un software sviluppato da noi che si chiama Chickysoft, un gestionale web basato su un CMS sviluppato in PHP e MySQL, per la gestione della sua attività. 

L’azienda si occupa di allevamento e vendita di animali vivi quali anatre, polli, tacchini, oche. Più nello specifico, il software gestisce il “magazzino” degli animali e di tutti i prodotti a essi correlati venduti dall'azienda (ad esempio mangimi, abbeveratoi ecc.). Tramite il software vengono gestiti i carichi e gli scarichi del magazzino e generate le fatture di vendita in versione cartacea, creando il PDF che può essere stampato o salvato e inviato direttamente via email al cliente.

Orfeo aveva l'esigenza di integrare all'interno di Chickysoft la possibilità di generare le fatture elettroniche che poi sarebbero state inviate all'SdI attraverso il commercialista (per sua praticità).

Orfeo, con questa integrazione, voleva evitare di “duplicare” la fattura cartacea su un altro sistema utile alla compilazione e generazione della fattura elettronica e voleva centralizzare tutto il suo iter di fatturazione in un unico software, avendo già tutti i dati necessari all'interno di Chickysoft (anagrafica clienti, anagrafica prodotti, prezzi, ordini di vendita ecc.). 

Soluzione

A seguito di questa richiesta di integrazione, abbiamo eseguito un’analisi di fattibilità tecnica studiando per prima cosa che cosa fosse più nello specifico la fattura elettronica (sia dal punto di vista economico - a grandi linee - sia dal punto di vista informatico) e cosa tecnicamente fosse necessario prevedere e preparare affinché il processo di fatturazione per il nostro cliente venisse completato correttamente.

Al termine di questa analisi, abbiamo capito che per comunicare con l'SdI era necessario che il software Chickysoft generasse, per ogni fattura, un documento in formato XML, un metalinguaggio che contiene al suo interno, oltre al contenuto, anche le regole per decifrarlo/leggerlo e che consente di definire e controllare il significato degli elementi contenuti, verificando così la correttezza delle informazioni.

Il controllo sulla correttezza delle informazioni (integrità, autenticità, univocità, rispetto del formato, presenza e correttezza formale dei dati obbligatori di fattura) all'interno del documento viene eseguito dall'SdI che, nel caso trovi delle incongruenze, respinge l’invio della fattura generando un errore.

Il nostro compito pertanto è stato quello di creare un’interfaccia, programmata in PHP, che si integrasse nel sistema in funzione e che potesse generare, partendo dai dati in input estratti dal database, in parallelo alla generazione delle fatture cartacee che comunque sarebbero ancora state utilizzate come pro-forma, il file XML correttamente formattato, per essere scaricato facilmente dal cliente e inviato all'SdI.

Prima di imbarcarci da zero nella programmazione dell’interfaccia, abbiamo eseguito una fase di ricerca per capire se, nei vari forum tecnici, qualcuno  avesse già affrontato questa esigenza e implementato una procedura. 

Abbiamo individuato una classe che faceva proprio al caso nostro. La classe individuata è E-invoice It, un pacchetto PHP per la gestione della fattura elettronica, che permette di passare i dati estratti dal database e ottenere a fine processo il file XML.

Una volta individuato questo pacchetto, ci siamo concentrati sull'esportazione dei dati da passare alla classe per la generazione del file XML e sull'interfaccia perché l'utente potesse selezionare le vendite, a cui di volta in volta era interessato, e scaricare tutte le fatture elettroniche che, dopo la generazione, venivano salvate sul server.

Cattura2

L'esportazione dei dati è stata divisa in 3 fasi.

La prima fase è stata quella per capire come implementare lo script per la generazione del file XML.

Abbiamo deciso, per esigenze tecniche derivanti dai limiti del server su cui è ospitato il software, che la generazione delle fatture elettroniche avvenisse in modo asincrono attraverso chiamate AJAX. Questa scelta è dipesa dal fatto che la generazione delle fatture viene effettuata mensilmente e il notevole numero di richieste, che si potevano creare al momento dell'avvio, rischiava di richiedere più risorse e tempo di esecuzione al server di quelle previste in un hosting condiviso, causando il blocco di tutta la procedura di generazione. Facendo questo, le operazioni di generazione sono state messe in parallelo diminuendo così il tempo di esecuzione.

La seconda fase si è concentrata sulla formattazione corretta dei dati da passare alla classe E-invoice It. I dati, prima di essere trasferiti alla classe, vengono controllati e formattati come richiesto dalle regole, in quanto nel database non è detto che il dato puro estratto sia conforme.

La terza fase prevista riguardava l'allineamento delle numerazioni delle fatture elettroniche con quelle cartacee. Essendo queste funzionalità in due sezioni separate, c'era comunque la necessità che una vendita avesse la stessa numerazione nella fattura cartacea piuttosto che in quella elettronica. Si è pertanto studiato un modo per cui questo allineamento venisse mantenuto attraverso una tabella di correlazione nel database.

Infine, lo sviluppo dell'interfaccia ha avuto l'obiettivo di mostrare, attraverso una visualizzazione basica, le fatture richieste con la possibilità di scaricarle, sia singolarmente sia in modo globale, attraverso un archivio zip.

Cattura

L'integrazione di questo aggiornamento in Chickysoft ha aumentato le funzionalità di un software piuttosto "datato" senza particolari problematiche e ci ha fatto capire ancora di più che alla base della programmazione l'idea di scalabilità deve essere una caratteristica da tenere in considerazione sempre per un software.