Fatturazione elettronica: integrazione FoxPro con il servizio di Aruba

288 views
Skip to first unread message

Claudio Brusaferri

unread,
Nov 27, 2018, 9:28:24 AM11/27/18
to Foxpro Italia
Condivido con tutti una soluzione, da sviluppare ulteriormente, per gestire la fatturazione elettronica con il servizio di conservazione di Aruba.
La premessa generale è che chi intende utilizzare questa soluzione dovrebbe aver già provveduto a generare la fattura in xml e dovrebbe essere già in grado di leggere il contenuto di un XML da fox.
Per chi volesse approfondire la generazione e interpretazione della e-fattura può trovare la documentazione a questo link https://www.fatturapa.gov.it/export/fatturazione/it/a-3.htm.
Inoltre segnalo un modo semplice per generare e interpretare XML con l'utilizzo della libreria fox nfXML a questo link https://github.com/VFPX/nfXML.

Fatta questa premessa passo alla questione invio e conservazione delle fatture elettroniche.
Esistono varie strade per risolvere questo problema più o meno complicate ma non c'è un metodo standard per farlo.
Uno di questi è l'utilizzo di piattaforme che presa in carico la nostra fattura in XML si occupano di firmarla digitalmente, inviarla all'SDI e tenere traccia delle notifiche.

Di solito queste piattaforme possono essere usate in due modi:
  1. Manualmente: da un'interfaccia web si procede con la compilazione della fattura oppure si può fare l'upload di un file già in xml
  2. Integrazione software: con l'utilizzo di API messe a disposizione dalla piattaforma si possono fare delle richieste HTTP e via codice inviare il file XML

Aruba mette a disposizione un servizio economico e relativamente efficiente per la compilazione, invio, ricezione e conservazione delle e-fatture a €25 l'anno con 1GB di spazio (100mila fatture circa).
Questo servizio ha delle limitazioni per esempio sull'assistenza sia tecnica che legale ma per quel che costa fa anche troppo.
Per approfondire il servizio e i suoi costi si può vedere qui https://www.pec.it/acquista-fatturazione-elettronica.aspx

Detto questo ho aiutato una persona del gruppo (Mimmo) ad implementare questo servizio con l'utilizzo delle API da fox e abbiamo pensato di condividere con tutti il lavoro svolto fino ad adesso nella speranza che con l'intervento di tutti si possa arrivare ad una soluzione completa e condivisa.
A questo link https://fatturazioneelettronica.aruba.it/apidoc/docs.html si trova la documentazione per l'utilizzo delle API.
L'utilizzo delle API avviene con richieste via HTTP e la risposta del webserver è in formato json, quindi consiglio vivamente l'utilizzo della libreria nfJson (https://github.com/VFPX/nfJson) per la lettura delle risposte in json per evitare di dover scrivere procedure aggiuntive.
Una volta registrato e attivato il servizio di Aruba, credo si possa richiedere anche una DEMO ma visto il costo irrisorio procederei direttamente con l'acquisto, si può cominciare ad utilizzare le API.


Gli url per le richieste HTTP cambiano in base all'ambiente in cui si lavora:

Cattura.PNG

















  • La prima cosa da fare via fox è l'autenticazione che ci serve ad ottenere un token per le operazioni da effettuare:
    https://fatturazioneelettronica.aruba.it/apidoc/docs.html#resources-auth

    * Apre la connessione con il Cloud di Aruba per prelevare il token 
    Local loHttp As "MSXML2.XMLHTTP.6.0" && creazione oggetto per richieste HTTP
    loHttp = Createobject("MSXML2.XMLHTTP.6.0")

    LOCAL luser, lpassword
    luser = "user_demo" && inserire quella fornita da Aruba
    lpassword = "password_demo" && inserire quella fornita da Aruba

    Local lEsito && variabile per prelevare la risposta del server
    With loHttp As MSXML2.XMLHTTP.6.0
    .Open("POST", 'https://demoauth.fatturazioneelettronica.aruba.it/auth/signin' ,.F.) && URL del Cloud di Test da sostituire con quello di produzione
    .setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8") 
    .setRequestHeader("Content-Length","53") 
    .setRequestHeader("Host","localhost:8080")
    .Send("grant_type=password&username="+luser+"&password="+lpassword) && faccio la POST con le variabili
    Store .responsetext To lEsito && memorizzo la risposta del server
    Endwith

    Public oConnessione_Aruba
    oConnessione_Aruba = nfjsonread(lEsito) && questo prg si trova nella libreria nfjson https://github.com/VFPX/nfJson

    *!* ?oConnessione_Aruba.access_token && "2cd189554da27d3c"
    *!* ?oConnessione_Aruba.token_type && "bearer"
    *!* ?oConnessione_Aruba.expires_in && 1800
    *!* ?oConnessione_Aruba.refresh_token && "38664d078c372d85"
    *!* ?oConnessione_Aruba.client_id &&* "123456"
    *!* ?oConnessione_Aruba.userName && "Utente"
    *!* *?oConnessione_Aruba.issued &&* "2018-09-13T14:34:08.370Z"
    *!* *?oConnessione_Aruba.expires && "2018-09-13T15:04:08.370Z" 

    RELEASE loHttp 

    L'utilizzo di nfsonread() ci semplifica la vita nella lettura della risposta del webserver che altrimenti sarebbe in questa forma:
    {"access_token" : "d77d8f67eeb7482","token_type" : "bearer","expires_in" : 1800,"refresh_token" : "2d6eb62fc303cafd", "client_id" : "123456","userName" : "Utente",".issued" : "2018-11-19T10:00:05.003Z",".expires" : "2018-11-19T10:30:05.003Z"}
  • Una volta effettuata l'autenticazione bisogna memorizzare il token (oConnessione_Aruba.access_token && "2cd189554da27d3c") e la sua scadenza (oConnessione_Aruba.expires && "2018-09-13T15:04:08.370Z" ) oltre il quale bisognerà effettuare di nuovo l'autenticazione.
    A questo punto si potrà procedere con l'upload del file xml (la nostra fattura elettronica debitamente compilata):
    https://fatturazioneelettronica.aruba.it/apidoc/docs.html#resources-fattura-elettronica

    LOCAL lFile, lFile_base64, lVariabili, lCred_firma, lDom_firma, ltoken

    ltoken = oConnessione_Aruba.access_token && si ottiene con il codice di prima per l'autenticazione

    lCred_firma = '' && credenziali firma automatica (lasciare vuoto se si affida la firma ad Aruba)

    lDom_firma = ''  && credenziali firma automatica (lasciare vuoto se si affida la firma ad Aruba)

    lfile = GETFILE('xml','File XML','Carica il file') && si può optare anche per mandare direttamente il nome del dile lfile = "IT0000000000_00001.XML" 

    lfile_base64 = STRCONV(FILETOSTR(lfile),13) && serve a convertire il file da testo a binario

    lVariabili = '{"dataFile" : "'+lfile_base64+'","credential" : "","domain" : ""}' && sono formattate in json

     

    Local loHttp As "MSXML2.XMLHTTP.6.0"

    loHttp = Createobject("MSXML2.XMLHTTP.6.0")

     

    Local lEsito && variabile per prelevare la risposta del server

    With loHttp As MSXML2.XMLHTTP.6.0

          .Open("POST", 'https://demows.fatturazioneelettronica.aruba.it/services/invoice/upload',.F.)

          .setRequestHeader("Accept","application/json")

          .setRequestHeader("Authorization","Bearer "+ltoken)

          .setRequestHeader("Content-Type","application/json;charset=UTF-8")

          .setRequestHeader("Content-Length","90")

          .setRequestHeader("Host","localhost:8080")   

          .Send(lVariabili) && faccio la POST con le variabili

          Store .responsetext To lEsito && memorizzo la risposta del server

    Endwith


    Public oUpload_Aruba

    oUpload_Aruba=nfjsonread(lEsito)

     

    *!*   ?oUpload_Aruba.errorCode && 1 degli errori dalla tabella ErroCode

    *!*   ?oUpload_Aruba.errorDescription && La relativa descrizione

    *!*   ?oUpload_Aruba.uploadFileName && il nome file inviato

    RELEASE loHttp 


Con questi due passaggi c'è la base per integrare in un programma fox la trasmissione delle fatture elettroniche allo SDI con il servizio di Aruba.
C'è ancora molto lavoro da fare però è già sufficiente per risolvere il problema nell'immediato.
Già in questo modo uno potrebbe inviare le fatture da fox e poi fare le verifiche dall'interfaccia web, ma volendo nella documentazione ci sono le API per fare anche tutto il resto.
Se qualcuno volesse approfondire o ha bisogno di assistenza per sviluppare le altri parti io ci sono, anche se la cosa più bella sarebbe fare un progetto condiviso e costruire una soluzione completa.


Gianni

unread,
Nov 27, 2018, 11:55:10 AM11/27/18
to foxpro...@googlegroups.com
Ciao Claudio,

grazie, davvero molto interessante, appena riesco approfondisco.

Una domanda:

l'Agenzia delle Entrate non conserva già lei tutto?

Gianni

Claudio Brusaferri

unread,
Nov 27, 2018, 11:59:25 AM11/27/18
to foxpro...@googlegroups.com
Si l'agenzia delle entrate conserva ma non a norma di legge.
La conservazione sostitutiva a norma di legge deve essere fatta da un conservatore certificato AGID e superare oltre 160 controlli di sicurezza e conformità di tipo legale. L'agenzia delle entrate dice nelle condizioni di utilizzo del suo servizio che non si prende nessuna responsabilità in caso di malfunzionamenti cosa grave visto che in caso di verifica uno che si affida a loro non sarebbe in grado di presentare le fatture richieste. Inoltre le tiene solo per 2 anni e non 10 come richiesto dalla legge. Se ci aggiungi che il garante della privacy ha appena detto nei giorni scorsi che è fuori legge secondo il GDPR ne consegue che non si può usare l'agenzia delle entrate come conservatore

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "Foxpro Italia" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più le sue email, invia un'email a foxpro-itali...@googlegroups.com.
Per postare messaggi in questo gruppo, invia un'email a foxpro...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/foxpro-italia/vjtqvd9d2p2uc29n0l6tvbg44qpl2gkagv%404ax.com.
Per ulteriori opzioni, visita https://groups.google.com/d/optout.


--
Claudio Brusaferri
@brusacla

Mimmo

unread,
Nov 27, 2018, 12:52:55 PM11/27/18
to Foxpro Italia
Preciso che per utilizzare le API di Aruba e integrare il servizio tramite webserver, occorre acquistare il pacchetto Premium che prevede un canone annuale e una quota per ogni partita iva.
Il pacchetto base di € 25 prevede solo l'utilizzo dell'interfaccia web di Aruba.
Come ha detto Claudio, abbiamo deciso di condividere questa esperienza in modo da creare un gruppo di lavoro a partecipazione condivisa per affrontare al meglio tutti i caratteri della nuova normativa di fatturazione.
Sarebbe comunque interessante sapere cosa ne pensate.

Gaetano Quattrocchi

unread,
Nov 27, 2018, 1:52:01 PM11/27/18
to Foxpro Italia
Veramente interessante,
Si potrebbe creare una classe in fox
Tipo questa:
http://fatturaitalia.com
E condividerla

Salvatore Graf

unread,
Nov 27, 2018, 2:31:53 PM11/27/18
to foxpro...@googlegroups.com
Che non sia a norma non lo so, ma ho letto che l’agenzia delle entrate conserva per 15 anni

Inviato da iPhone
Per postare in questo gruppo, invia un'email a foxpro...@googlegroups.com.
Per visualizzare questa discussione sul Web, visita https://groups.google.com/d/msgid/foxpro-italia/CABTfG5m_v3R%3DUs%2BzwKYKCKniVVY2HOKz1tREEYDzbgqiO4Vz4w%40mail.gmail.com.
Per altre opzioni visita https://groups.google.com/d/optout.

Claudio Brusaferri

unread,
Nov 27, 2018, 2:51:08 PM11/27/18
to foxpro...@googlegroups.com
I dati delle fatture forse ma i pacchetti per l'esibizione? Comunque ci sono diversi motivi per cui non scegliere il servizio dell'agenzia delle entrate. Qui alcuni https://www.siav.com/it/conservazione-delle-fatture-elettroniche/

Reply all
Reply to author
Forward
0 new messages