Consumiamo i servizi dell’Agenzia delle Entrate: Partite IVA Comunitarie

Spesso le aziende che sono alla ricerca di possibili clienti[1] utilizzano una serie di sofisticati strumenti informatici con la finalità di attirare “le prede” verso la propria rete. Uno degli strumenti utili alla “certificazione” della preda (una volta entrata nella rete) è il controllo dei dati, uno di questi dati è la Partita IVA.

Esistono diversi strumenti commerciali[2] che consentono l’accesso a un vero e proprio dossier del possibile cliente partendo dalla conoscenza della sola Partiva IVA, la quantità e qualità delle informazioni disponibili sul dossier dipende dalla mole di denaro investito sullo strumento.

Questo post è destinato a chi non ha intenzione di usare questi “costosi strumenti” ma magari ha solo la necessità di verificare che la Partita IVA (acquisita per esempio, da una form di registrazione del proprio portale internet) fornita loro sia:

  • Formalmente corretta
  • Attribuita a un’attività (con indicazione di data inizio e fine attività)
  • Non attribuita a un’attività

Nel nostro paese l’unico ente autorizzato a rilasciare la Partita IVA e certificarne la correttezza formale (attraverso un opportuno algoritmo[3]) è l’Agenzia delle Entrate[4]. L’ente mette a disposizione sul proprio portale internet un servizio che prende il nome di: Partite IVA comunitarie – Sistema elettronico di scambio dati sull’IVA, questo servizio consente di ottenere le informazioni indicate in precedenza. Il servizio è orientato “all’umano”, in altre parole, si tratta di una semplice form dove occorre indicare il paese comunitario e il numero di Partita IVA. Il metodo di accesso al servizio può andare bene nei casi in cui i controlli da fare sono irrisori e comunque non è necessario integrare i dati ottenuti su di un altro sistema ma magari solo su di un semplice foglio elettronico.

All’indirizzo http://www.agenziaentrate.it/ilwwcm/connect/Nsi/Servizi/Partite+IVA+comunitarie/ troverete le senguenti indicazioni:

Una delle FAQ recita quanto segue:

Q: È possibile connettersi in maniera automatica al servizio Partite IVA comunitarie?

R: Il servizio “Partite IVA comunitario” è strutturato in modo da fornire una risposta ad un singola richiesta di verifica di un numero identificativo IVA. Tale richiesta deve essere inoltrata esclusivamente mediante l’inserimento manuale del codice IVA da controllare. Ogni altro tentativo di connessione al sistema è vietato. Tuttavia si fa presente che la Commissione europea ha predisposto sul proprio sito un servizio SOAP mediante il quale è possibile ottenere l’informazione sulla validità di un numero identificativo IVA. La descrizione dell’interfaccia pubblica e la modalità di interazione al servizio è descritta nel documento WSDL.

Viste le restrizioni imposte dall’Agenzia delle Entrate, “diciamo” che lo scopo dell’articolo ha un obiettivo prettamente didattico. Desidero  inoltre evidenziare  che la parte sottolineata della risposta alla FAQ si riferisce a un servizio SOAP non esistente o spostato da altra parte.

Cerchiamo di trovare una semplice soluzione al seguente quesito: Supponiamo di avere la necessità di certificare una serie di potenziali clienti, questi ultimi residenti su un vostro sistema di Gestione Clienti (come potrebbe per esempio, essere un CRM[5]) in modo del tutto automatico utilizzando il servizio messo a disposizione dall’Agenzia delle Entrate.

Una soluzione semplice e a costo zero esiste, servono solo tre “ingredienti”:

  • Curl[6] : E’ responsabile della richiesta del servizio verso l’Agenzia delle Entrate e della restituzione della risposta;
  • PHP : E’ responsabile dell’acquisizione della risposta del servizio, risposta fornita attraverso Curl;
  • Regular Expression[7] : E’ responsabile dell’elaborazione della risposta del servizio con lo scopo di estrarre le informazioni di nostro interesse

Il servizio dell’Agenzia delle Entrate è disponibile su protocollo HTTP/1.1 e i parametri del servizio sono illustrati in Tabella 1.

Tabella 1. Parametri HTTP del servizio Partita IVA Agenzia delle Entrate

Protocollo Indirizzo
HTTP/1.1 www1.agenziaentrate.it/servizi/vies/vies.htm
Metodo HTTP GET
Parametri
Nome Descrizione Valore
act Tipo di servizio Predefinito a piva
stato Codice dello stato comunitario Esempio IT
piva Numero di Partita IVA 02069411003

La lista completa degli stati comunitari è pubblicata sulla pagina del servizio. Un esempio di chiamata al servizio utilizzando Curl potrebbe essere come quella illustrata di seguito (per ragioni di spazio sono stati soppressi alcuni parametri non indispensabili e mandato a capo parte dell’indirizzo):

Il comando Curl restituisce sullo stdout (standard output, quindi sullo schermo) il risultato del controllo effettuato per la Partita IVA indicata, il risultato è semplicemente codice HTML, riporto un breve estratto:

Listato 1. Risultato (HTML) del servizio a fronte della richiesta tramite Curl

Il risultato così ottenuto sarà passato come input a un semplice script PHP che in breve è responsabile di:

  • Leggere dallo stdin (standard input, ovverro, dal flusso ricevuto da Curl);
  • Applicare una serie di espressioni regolari (termine abbreviato in Regex) a blocchi di codice HTML al fine di estrarre le informazioni di nostro interesse;
  • Costruire la risposta per essere elaborata in modo automatico. La risposta è un semplice documento XML

Al Listato 2 sono mostrate le linee di codice più rilevanti.

Listato 2. Linee di codice PHP responsabili del reading e parsing della risposta HTML e build dell’XML

A ogni blocco di unità informativa ho preferito associare una propria Regex per questioni puramente didattiche e di pulizia, è possibile utilizzare una sola Regex che soddisfi l’intero problema. Il semplice documento XML è construito utilizzando l’oggetto SimpleXML di PHP, al Listato 3 un esempio del documento XML ottenuto a fronte di una richiesta.

Listato 3. Due esempi di documento XML ottenuti.

Il comando per ottenere i nostri documenti XML potrebbe essere del tipo (per ragioni di spazio ho dovuto mettere qualche ritorno a capo):

La soluzione del problema porta a un semplice documento XML, in altre parole, sono applicabili tutte le possibili integrazioni. Vi lascio con un semplice pensiero: Perchè non trasformare la soluzione del problema sottoforma di un Web Service {y = f(g(x))} ?


[1] A sales lead is the identity of a human or entity potentially interested in purchasing a product or service, and represents the first stage of a sales process.

[2] Vedi i servizi offerti da Infocamere, Cerved e altri operatori abilitati ad offrire questo genere di servizi

[3] La partita IVA è una sequenza di cifre che identifica univocamente un soggetto che esercita un’attività rilevante ai fini dell’imposizione fiscale. Vedi http://it.wikipedia.org/wiki/Partita_IVA

[4] Questo servizio consente agli operatori commerciali titolari di una partita IVA che effettuano cessioni intracomunitarie o altre operazioni legate alle propria attività, di verificare la validità del numero di identificazione IVA dei loro clienti, attraverso il collegamento con i sistemi fiscali degli Stati membri dell’Unione Europea. Vedi http://www1.agenziaentrate.it/servizi/vies/vies.htm?act=default&piva=&stato=IT#app

[5] Customer relationship management is a broadly recognized, widely-implemented strategy for managing and nurturing a company’s interactions with customers and sales prospects. Vedi http://en.wikipedia.org/wiki/Customer_relationship_management

[6] Curl is a command line tool for transferring data with URL syntax, supporting FTP Curl supports HTTPS certificates, HTTP POST, HTTP PUT. Vedi http://curl.haxx.se/

[7] In computing, regular expressions, also referred to as regex or regexp, provide a concise and flexible means for matching strings of text, such as particular characters, words, or patterns of characters. Vedi http://en.wikipedia.org/wiki/Regular_expression

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

You may also like...

  • Riccardo

    Antonio,

    in relazione a quanto hai scritto, volevo precisare quanto segue:

    1) Il Web service indicato nelle FAQ esiste ed è funzionante. E’ da qualche anno che lo uso, non è in grado di fornire data di inzio attività (ma sembra che non venga più fornita neanche dall’agenzia delle entreate) e di fine attività. La denominazione per i membri italiani non viene fornita da nessuno dei due sistemi.
    Ogni tanto succede che introducano delle modifiche percui bisogna aggiornare il Web Service presente nel proprio programma.

    2) Il sito dell’agenzia delle entrate limita il numero delle interrogazioni per stesso indirizzo Ip a circa 600 al giorno, dopo di che non permette più l’interrogazione per la giornata, mentre il sito europeo può fornire risposta anche per 10.000 partite iva al giorno

    Spero che queste info possano essere utili

    • http://musarra.wordpress.com Antonio Musarra

      Ciao Riccardo, grazie per le info.
      L’url del WSDL (http://europa.eu.int/comm/taxation_customs/vies/api/checkVatPort?wsdl)
      indicato nelle FAQ a quanto pare risulta un link obsoleto. Tu disponi dell’url
      corretto ?
      Al tempo della scrittura dell’articolo, il
      servizio (http) forniva la data inizio attività ed eventualmente la data di
      fine attività, adesso non so, non ho più utilizzato il servizio.

      Grazie,
      Antonio.

      • Massimiliano Saponaro

        Salve a tutti. Il link al wsdl risulta obsoleto.
        Sapete dirmi quello corretot?
        GRazie mille!

  • Luca Lucaroni

    Vi riporto se può interessare il link funzionante per il controllo delle P.I. della Comunità europea
    http://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl

    Ciao Luca

    • http://musarra.wordpress.com Antonio Musarra

      Ciao Luca,
      grazie della info. Conosco il servizio da te indicato, però sono più le volte che non funziona.
      Il servizio dell’Agenzia delle Entrate funziona molto bene, ho processato circa 30.000 PIVA senza alcun problema.

      Bye,
      Antonio.

  • Pingback: 2010 in review | Antonio Musarra's Blog

  • Pingback: Web Service Partite IVA Comunitarie « Antonio Musarra's Blog