La Commissione Europea mette a disposizione degli sviluppatori un servizio di verifica e controllo dell’esistenza degli operatori economici registrati presso un paese UE.
Questo permette di assicurarsi che un nuovo cliente o fornitore sia correttamente censito, evitando truffe o altri guai vendendo o comprando da aziende fantasma.
Il sistema si chiama VIES (VAT Information Exchange System – sistema di scambio di informazioni relative all’IVA).
Si tratta di uno strumento elettronico per la convalida del numero di partita IVA delle aziende registrati nell’UE per le transazioni transfrontaliere di beni e servizi.
Dal punto di vista tecnico l’interrogazione è piuttosto semplice e di seguito vediamo il codice VB.Net che restituisce le informazioni anagrafiche relative al VAT Number.
La variabile PIVA che deve essere passata alla funzione è il numero della Partita IVA con il codice dello stato che è un prefisso di due caratteri ("IT" per Italia)
Public ControllaPIVA_FromWebService_Dati As String = ""
Function ControllaPIVA_FromWebService(ByVal PIVA As String) As BooleanTry
ControllaPIVA_FromWebService_Dati = ""Dim NAZIONE As String = "IT"
NAZIONE = Mid(PIVA, 1, 2)
PIVA = Mid(PIVA, 3)Dim requestUrl As String = "http://ec.europa.eu/taxation_customs/vies/services/checkVatService"
Dim requestString As String = "<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:urn=""urn:ec.europa.eu:taxud:vies:services:checkVat:types"">
<soapenv:Header/>
<soapenv:Body>
<urn:checkVat>
<urn:countryCode>COUNTRY</urn:countryCode>
<urn:vatNumber>VATNUMBER</urn:vatNumber>
</urn:checkVat>
</soapenv:Body>
</soapenv:Envelope>"
requestString = requestString.Replace("COUNTRY", NAZIONE)
requestString = requestString.Replace("VATNUMBER", PIVA)Dim wc As New System.Net.WebClient()
wc.Headers(System.Net.HttpRequestHeader.ContentType) = "application/x-www-form-urlencoded"
Dim HtmlResult As String = wc.UploadString(requestUrl, requestString)If InStr(LCase(HtmlResult), "<valid>true</valid>") > 0 Then
Try
Dim P1 As Integer = InStr(LCase(HtmlResult), "<name>")
Dim P2 As Integer = InStr(LCase(HtmlResult), "</name>")
If P1 > 0 Then
ControllaPIVA_FromWebService_Dati = ControllaPIVA_FromWebService_Dati + Mid(HtmlResult, P1 + 6, P2 – P1 – 6) + vbCrLf
End If
Catch ex As Exception
End Try
Try
Dim P1 As Integer = InStr(LCase(HtmlResult), "<address>")
Dim P2 As Integer = InStr(LCase(HtmlResult), "</address>")
If P1 > 0 Then
ControllaPIVA_FromWebService_Dati = ControllaPIVA_FromWebService_Dati + Mid(HtmlResult, P1 + 9, P2 – P1 – 9) + vbCrLf
End If
Catch ex As Exception
End TryReturn True
Else
Return False
End IfCatch ex As Exception
Return FalseEnd Try
End Function
La funzione interroga il servizio e se trova il codice passato restituisce i dati anagrafici che permettono di verificare l’autenticità delle informazioni in nostro possesso.
Se il servizio non trova il VAT Number, dopo avere controllato di averlo scritto correttamente (senza spazi o altri caratteri speciali), si potrebbe essere in presenza di un soggetto passivo ai fini IVA o di eccezioni che possono essere varie per i diversi stati membri.
Sulla rete queste casistiche si trovano ben documentate nei siti istituzionali dei vari paesi.
Per l’Italia si veda https://www.agenziaentrate.gov.it/wps/content/nsilib/nsi/contatta
In particolare se si è certi che la partita IVA è formalmente corretta ma non viene riconosciuta, l’attività potrebbe essere cessata o trattarsi di azienda individuale o associazione no profit.
Possiamo concludere dicendo che il mancato riscontro non è garanzia di azienda non registrata mentre è vero il contrario, ovvero che se il servizio risponde fornendo i dati anagrafici del soggetto possiamo operare tranquillamente.