Verifica Partita IVA comunitaria

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 Boolean

    Try
        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 Try

            Return True
        Else
            Return False
        End If

    Catch ex As Exception
        Return False

    End 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.

Annunci

Rintracciabilità Alimentare e Lotti

La gestione della rintracciabilità alimentare e farmaceutica è un tema caldo da quando è stato emanato il Regolamento CE 178/2002
Il ritardo degli stati membri nell’adozione e la mancanza iniziale di sanzioni ha fatto si che fino al 2007 fosse per lo più ignorato, ma da allora ha tolto il sonno a diversi responsabili di produzione fino a diventare uno dei moduli più importanti per le aziende di questi settori.
Negli anni su questo blog abbiamo trattato l’argomento nelle varie sfaccettature analizzando via via le nuove funzioni che si andavano ad aggiungere nel modulo produzione di Gea.Net.

In questo articolo analizzeremo i processi interni da seguire per consentire una corretta rintracciabilità dei componenti e al termine vedremo come la tecnologia potrà supportare il responsabile della produzione.

Gestione della Rintracciabilità Alimentare e Farmacovigilanza

La gestione della rintracciabilità comporta che l’azienda adotti scrupolosamente procedure nella gestione e nell’archiviazione del magazzino che possono essere riassunti nei seguenti di seguito. Le operazioni che vedremo devono essere mantenute su un registro (anche cartaceo) e/o su database aziendale ma la legge impone che in caso di emergenza sanitaria vengano date risposte certe entro un tempo minimo pertanto l’utilizzo di un software gestionale sia di fatto obbligatorio anche per aziende di piccole dimensioni. L’ideale sarebbe archiviare i dati su gestionale e stampare giornalmente anche un registro e mantenere entrambi efficienti e rapidamente consultabili per almeno sei mesi.

Accettazione Merci in Arrivo

Al momento della ricezione della merce occorre :

  • verificare quanto indicato nei documenti di trasporto e quanto ricevuto relativamente a numero colli e dati ad essi collegati (data, scadenza, lotto) necessari alla gestione della rintracciabilità delle materie prime assunte in carico
  • verificare l’integrità delle confezioni e l’etichettatura dei prodotti come indicato nel piano di autocontrollo aziendale
  • separare adeguatamente le merci sfuse o senza lotto, attribuendogli un lotto simbolico che si identifica con la data di ricevimento da apporre sulle confezioni/contenitori
  • informare il Responsabile del sistema di rintracciabilità nel caso non sia possibile reperire alcune delle informazioni riportate ai punti precedenti che deciderà l’azione correttiva da intraprendere (restituzione merce, acquisizione dati mancanti, e-mail, ecc.)
  • inserire sul gestionale il carico della merce inserendo i dati (lotto, scadenza, ecc.) che servono a compilare la registrazione dei lotti acquistati
  • archiviare la documentazione di accompagnamento delle merci accettate

Stoccaggio delle merci

Gli addetti allo stoccaggio devono :

  • mantenere una separazione tra i diversi generi merceologici
  • mantenere la separazione tra le merci della stessa tipologia provenienti da fornitori diversi
  • ordinare le materie prime in magazzino in modo da consentirne una utilizzazione progressiva (prima i vecchi arrivi e poi i nuovi), in modo tale da garantire una opportuna rotazione delle scorte

Controllo e registrazione dello scarico merce

Al momento del prelievo delle materie prime per la loro immissione in produzione si provvede a :

  • prelevare le materie prime rispettandone il criterio di utilizzo progressivo (lotto di produzione, scadenza, ecc.), verificando sempre gli aspetti visivo-sensoriali che ne confermano l’idoneità all’uso
  • garantire l’utilizzo delle materie prime in applicazione delle distinte base (ricette), del programma di produzione giornaliero e/o degli ordinativi
  • registrare la produzione indicando il lotto di provenienza per tutti i componenti della ricetta. Ogni volta che si dispone la produzione di un determinato prodotto deve essere annotato, per quella partita di prodotto, le materie prime utilizzate (fornitore/lotto di acquisto)
  • in alternativa al punto precedente è possibile registrare la data di inizio e fine utilizzo per ogni lotto di acquisto, pratica consigliata anche se il punto precedente viene gestito puntualmente, ma che risulta essere meno immediata in caso di emergenza oltre ad essere meno precisa (nello stesso istante potrebbero essere in via di utilizzo diversi lotti dello stesso componente)

Assegnazione lotti

Ogni articolo prodotto dovrà essere associato ad un lotto di produzione. Il codice con cui viene identificato un lotto è a discrezione dell’azienda anche se è prassi comune identificare il giorno di produzione. Ad esempio il codice lotto può contenere la data nel formato [GGMMAA] quindi un prodotto confezionato Martedì 19 Gennaio 2018 avrà il lotto AS190618, ma per brevità si potrebbe anche registrare il giorno giuliano o la sola settimana.

Etichettatura degli articoli

L’addetto al packaging dovrà verificare che :

  • ogni prodotto confezionato per la vendita sia etichettato secondo quanto previsto dall’azienda anche sulla base delle norme vigenti riportando quantomeno il lotto in caso non vi siano altri obblighi
  • il lotto riportato sulla confezione sia quello identificativo della partita
  • accantonare i prodotti non correttamente etichettati avvisando il Responsabile del Sistema di Rintracciabilità
Scarico degli articoli prodotti

Al fine di una pronta rintracciabilità i documenti di trasporto devono riportare il lotto di produzione ed eventualmente la data di scadenza, quindi al momento della vendita si deve :

  • compilare i documenti di vendita con il nome commerciale del prodotto e il codice lotto ad esso collegato il documento di vendita/trasporto
  • gestire le registrazioni dei prodotti consegnati giornalmente (archiviazione documenti aziendali di vendita)
  • stampare l’apposito registro della merce venduta

Ritiro articoli dal mercato

L’operatore che è messo a conoscenza di una non conformità rilevata sul prodotto presente sul mercato deve comunicarlo tempestivamente al Responsabile del Sistema di Rintracciabilità o all’Addetto vendite perché si possano attivare per il ritiro dello stesso dal commercio.

In caso di sospetta o certa non conformità dei prodotti finiti ai requisiti di sicurezza ovvero dannosi per la salute, il responsabile del sistema di rintracciabilità deve attivarsi tempestivamente in ottemperanza alle normative vigenti, per il ritiro dei prodotti e per la segnalazione dei componenti che potrebbero esserne la causa dell’emergenza. I tempi possono essere diversi in base alla gravità e alla tipologia del prodotto ma normalmente devono essere date risposte entro 6 ore, tempo che lascia poco spazio di manovra.

Gestione della rintracciabilità con Gea.Net

In questo articolo non possiamo entrare nel dettaglio di come viene gestita tutta la rintracciabilità dal modulo produzione di Gea.Net , pertanto si rimanda il lettore a consultare il capitolo E3 della Guida Utente E , Produzione, CRM, Risorse Umane, Controllo Gestione o in alternativa a visionare il tutorial Produzione, Lotti e Tracciabilità . In particolare questa seconda opzione non richiede più di dieci minuti ed affronta complessivamente il tema (pur senza approfondirlo come la guida utente) e rappresenta un ottimo punto di partenza.

Google Apis e le traduzioni automatiche

Nelle settimane scorse ho fatto un grosso lavoro per rendere Gea.Net disponibile in varie lingue. Come base di partenza ho sfruttato un servizio di Google Traduzioni che con poche righe di codice ha fatto il grosso del lavoro. Di seguito trovate le poche righe Vb.Net necessarie per consumare il servizio.

Function Traduci_DaGoogleApis(ByVal Text2Translate As String, SourceLang As String, TargetLang As String) As String

    Try
        Dim outputFile As String = "C:\TEMP\TRANSLATE_GOOGLEAPIS.TMP"
        Dim requestUrl As String = "https://translate.googleapis.com/translate_a/single?client=gtx&sl="
        requestUrl = requestUrl + SourceLang
        requestUrl = requestUrl + "&tl=" + TargetLang
        requestUrl = requestUrl + "&dt=t&q=" + Text2Translate

        Dim wc As New System.Net.WebClient()
        wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 " +
                                      "(KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36")
        wc.DownloadFile(requestUrl, outputFile)

       Dim TextOut as string = [TESTO RICAVATO DA OUTPUTFILE]

        Return TextOut

    Catch ex As Exception
        Return Text2Translate
    End Try

End Function

Il servizio offerto è veramente favoloso ed è gratuito però per fare un bel lavoro non bisogna accontentarsi degli automatismi.

Per quanto veloce (la risposta del servizio è veramente più che soddisfacente) per tradurre una serie di testi come possono essere quelli presenti su una schermata o su una stampa, il servizio deve essere interrogato decine o centinaia di volte e questo implica che il caricamento richieda qualche secondo, tempi non accettabili per l’utente. Le soluzioni possono essere diverse ma in Gea.Net abbiamo scelto di richiedere la traduzione di un testo solo se non già precedentemente tradotto, salvando in locale la traduzione. Questo ci ha permesso di rispondere in modo soddisfacente anche al problema che segue.

Gli algoritmi di traduzione automatica si stanno affinando e pur avendo già raggiunto un buon livello di affidabilità, non sono ancora in grado di competere con la traduzione svolta da un umano. Salvare il testo tradotto in un database (o in un file di testo come abbiamo preferito fare in Gea.Net) permette di ritrattarlo traducendolo correttamente laddove il robot fallisce.

Il terzo problema nasce dalla punteggiatura o dai CRLF che il servizio interpreta in modo non ottimale costringendo a creare un algoritmo di transcodifica più complesso. In Gea.Net ci siamo inventati dei simboli che passati al traduttore questo ignora. Quindi abbiamo sostituito il CRLF con “;;” , il doppio apice con l’apice singolo ecc. Naturalmente deve essere reinterpretata al contrario la stringa tradotta.

L’ultimo problema, ma di sicuro quello di più difficile soluzione, è stato fare digerire al traduttore tutte le parole abbreviate o le sigle di uso corrente. Infatti il robot non traduce (giustamente) le parole che non capisce, così la stringa “N.” deve essere convertita in “Numero” prima di essere inviata al traduttore e per contro dovrà essere ritrattata nella stringa di ritorno. Chi scrive software sa che per ragioni di spazio a video e su carta, non è possibile rinunciare alle abbreviazioni. Anche in questo caso la soluzione adottata in Gea.Net è stata quella di mettere filtri prima e dopo la traduzione.

Quello che invece ho maggiormente apprezzato è la traduzione delle frasi. A tutti sarà capitato di leggere una pagina web tradotta dall’inglese e questo all’inizio mi lasciava piuttosto scettico. L’operazione inversa (da italiano ad inglese) è decisamente migliore. Forse dipende dalla maggiore complessità della lingua italiana, forse è il miglioramento degli algoritmi, fatto sta che se la frase di origine non è ambigua o contiene termini di dubbia interpretazione la traduzione è corretta. In definitiva, nella ritrattazione delle stringhe tradotte abbiamo speso maggiori risorse a tradurre i testi di 4-5 parole che le frasi più lunghe.

Per concludere

L’esperienza è stata positiva e se si deve tradurre un software o anche un testo tecnico conviene certamente partire da qui ma occorre mettere in conto la revisione dei testi tradotti. Se durante la stesura dei testi originali avete già in preventivato di passare per una traduzione automatica, pensate come un robot fin dall’inizio. Più siete stati chiari nel testo di origine, meno lavoro dovrete fare dopo.

Bentornato SMAU

Era da qualche giorno che mi ripromettevo di scrivere due righe riguardo a SMAU.

Chi ha qualche anno di più identificherà SMAU con la fiera dell’informatica che si teneva a Milano a fine settembre (se ricordo bene).
Nei primi anni un evento per nerds che con il passare del tempo si era trasformato in un grande baraccone.
Pochi affari, costi alti per gli espositori, flotte di ragazzini alla ricerca di gadget. Il giusto mix per fare collassare il tutto.
Ricordo di avere partecipato come espositore uno degli ultimi anni. Sei giorni nelle vicinanze dello stand Mediaworld il cui business si basava sulla vendita di PC multimediali.
SMAU morì senza rimpianti nel giro di due anni ad inizio di questo secolo.

Ora SMAU è rinato da qualche anno ma di quella fiera mantiene solo il nome.
Niente più hardware (e poco software), solo servizi.
Gli espositori sono per lo più piccole aziende che hanno un know-how da proporre o Start Up alla ricerca di finanziatori.
Piccoli stand con una sedia, una scrivania e un PC, workshop di 50 minuti, diretta streaming per chi si vuole fare conoscere in tre minuti.
Durata dell’evento 2-3 giorni, visitatori in continua crescita, tutta sostanza e poco fumo negli occhi.
Si può andare alla ricerca di un idea da riproporre su larga scala o di uno stimolo per svilupparne una nuova.
Ma il vero punto di forza credo sia che si tratta di una fiera itinerante che si muove sia in Italia che all’estero, riservando ad ogni evento la centralità ai settori che sono maggiormente presenti sul territorio limitrofo.

Ringrazio la Regione Emilia Romagna per l’opportunità che mi è stata riservata e invito tutti a consultare https://www.smau.it . Un giro merita di essere fatto.

Gea.Net Pro tradotto in varie lingue

Da qualche giorno è disponibile una funzione di Gea.Net Pro la cui traduzione nelle diverse lingue è estremamente fluida. La differenza con una versione standard in italiano (cioè senza il lavoro supplementare della traduzione) è addirittura impercettibile.

Dalla pagina http://www.geanetweb.com/Download.htm è possibile scaricare le traduzioni per inglese, tedesco, francese e spagnolo rese disponibili anche agli utenti che non hanno attivato le funzioni Premium. Chi invece avesse bisogno di una lingua diversa può richiederla pagando un piccolo contributo per la traduzione.

Al momento la versione 5.3 disponibile presente sul suddetto link gestisce solo parzialmente le traduzioni ma è possibile richiedere gratuitamente a info@geanetweb.com una versione completa. Dalla successiva versione (5.4) tutte le funzioni di traduzione saranno integrate anche nella versione base.

Un ulteriore valore aggiunto sta nel fatto che ognuno è libero di personalizzare la traduzione o per meglio dire affinarla secondo le differenze presenti in diverse regioni che parlano la stessa lingua. Ad esempio, pur parlando lo stesso tedesco, Germania, Austria e Svizzera usano termini tecnici diversi in materia fiscale. La stessa cosa avviene nei diversi Stati in cui si parla spagnolo ed in misura minore anche con francese ed inglese.

Ma entriamo nel dettaglio e vediamo esattamente come funziona.

Per prima cosa occorre scaricare dal sito la versione per la lingua desiderata. Si riceverà un file in formato ZIP contenente il file TRANLATE.TXT e alcuni files immagini. Tutto il contenuto deve essere copiato nella cartella GEANET\bin sovrascrivendo eventuali files già presenti con lo stesso nome.

Se questa operazione viene eseguita prima del primo avvio di Gea.Net Pro (ovvero prima dell’inserimento dei propri dati aziendali) la traduzione delle label si attiverà in modo automatico altrimenti occorre accedere alla Configurazione, Impostazioni presente sulla barra comandi della Home Page e spuntare l’opzione Traduzioni. Se si attivano le traduzioni verrà messa a disposizione una funzione, presente sulla barra comandi, con cui è possibile tradurre anche le voci in tabelle (si veda di seguito).

Configurazione , Impostazioni

clip_image002

Per ripristinare la lingua italiana è sufficiente rimuovere il file TRANLATE.TXT o disattivare la spunta.

Cosa succede dietro le quinte

All’avvio vengono caricate in memoria tutte le voci tradotte presenti nel file e questo rende l’utilizzo del software estremamente veloce. A fronte di un impercettibile ritardo in fase di avvio, il caricamento delle schermate risulta molto più fluido delle versioni precedenti.

Ma cosa succede esattamente ? Il file TRANSLATE.TXT è un file di testo che contiene tante righe quante sono le voci da tradurre. Su ogni riga sono presenti due voci separate da “:”. La prima voce lunga 40 caratteri è una chiave e pertanto non deve essere in alcun modo modificata. La seconda è il testo tradotto che verrà riportato a video. Se si vuole procedere a modificare la traduzione basta aprire il file con un qualsiasi Text Editor (Blocco Note va benissimo) e sostituire la seconda voce.

Trattandosi di un file presente sulla cartella dell’applicazione ogni PC potrà avere una propria versione che può essere facilmente trasportata anche su altri. Questo consente di lavorare con persone che parlano lingue diverse all’interno di una stessa organizzazione.

Come aggiornare la versione di Gea.Net Pro

Quando sarà disponibile una nuova versione di Gea.Net Pro potrebbe succedere che il file TRANSLATE.TXT utilizzato risulti insufficiente a causa delle nuove voci inserite. A questo punto ci sono due possibilità :

1) Se non si è proceduto a personalizzare il file la soluzione più immediata è quella di scaricare la nuova versione del file di traduzione.

2) Se invece si vogliono mantenere le modifiche apportate è possibile continuare ad utilizzare lo stesso file. Durante l’utilizzo di Gea.Net noterete che le nuove voci saranno aggiunte in fondo. Quindi potrete procedere a tradurle.

Una soluzione intermedia potrebbe essere quella di aggiungere le voci (con copia e incolla) presenti sul file scaricato e non presenti sul file personalizzato (le nuove voci si troveranno in fondo al file).

Traduzione delle tabelle

Nota : questo comando è disponibile solo nella versione completa (cioè non è presente nella 5.3 standard scaricabile dal sito).

Il database di Gea.Net viene fornito con alcune tabelle precaricate la cui descrizione è in italiano. Dalla funzione di Configurazione, Impostazioni è possibile eseguire un comando di traduzione anche di queste descrizioni attraverso il comando presente a barra comandi.

clip_image004

E’ importante sapere che questa operazione funziona solo una volta. Sarebbe inutile lanciarla più volte e nel caso il risultato non fosse quello sperato occorrerebbe intervenire sulla tabella.

E’ importante eseguire la traduzione delle tabelle tra le prime operazioni dopo l’installazione di Gea.Net. La traduzione delle voci in tabella è sconsigliata una volta che si sono registrati i primi documenti altrimenti si potrebbero avere le stesse voci replicate in lingue diverse.