menu di navigazione del network

Valore tag Email non valido in fattura ricevuta

Buongiorno.
Ho ricevuto una fattura con il campo Email “anomalo” (due indirizzi email validi separati da spazi):

<CedentePrestatore>    
    <Contatti>
        	<Email>name@gmail.com                            name@pec.it</Email>
    </Contatti>
</CedentePrestatore>

Ovviamente la validazione (xmllint) basata su schema xsd fallisce perchè l’espressione regolare è ancorata all’inizio e alla fine dell’intero valore del tag Email.

Chiedo un vostro parere:

  • come è possibile che sia stata trasmesso da un soggetto e validato da SDI un tale file xml?
  • Qual’è la strategia migliore da seguire in fase di ricezione (normalmente la validazione viene eseguita ed è vincolante per “importare” la fattura? Modificare la regexp dello schema xsd per gestire anche questi casi formalmente errati?

Grazie.

Quale schema XSD usi?
Usando 1.6.2 di AdE, a me xmllint valida correttamente con lo spazio.
Che errore hai esattamente?

La regex è
“.+@.+[.]+.+”
e il punto “.” è qualsiasi carattere, anche lo spazio.
Quindi il “.+” finale accetta qualsiasi cosa.

Attenzione! Questa espressione regolare è quella del xsd vecchio, che era valido fino al 31 dicembre scorso. Se la fattura è stata trasmessa prima di tale data, l’indirizzo email in questione soddisfaceva l’espressione regolare.

L’xsd nuovo invece ha questa bellissima espressione regolare:
([!#-'*+/-9=?A-Z^-~-]+(\.[!#-'*+/-9=?A-Z^-~-]+)*|&quot;(\[\]!#-[^-~ \t]|(\\[\t -~]))+&quot;)@([!#-'*+/-9=?A-Z^-~-]+(\.[!#-'*+/-9=?A-Z^-~-]+)*|\[[\t -Z^-~]*\])
con la quale la validazione non passa più.

E attenzione che xmllint ha un bug per cui con la nuova espressione regolare non riesce a validare gli indirizzi che contengono trattini. Vedasi questa discussione:

Purtroppo quando hanno fatto il nuovo xsd, non hanno pensato di modificare il namespace o la versione, quindi quando si legge un file xml è impossibile sapere con quale dei due xsd vada validato. L’approccio che usiamo noi è di provare a validarlo con entrambi gli xsd e se non passa col nuovo ma passa col vecchio, assumiamo che la fattura usi il vecchio formato.

Grazie per la dritta…

stavo utilizzando una versione non aggiornata del file xsd in cui non era definito il nuovo tipo EmailContattiType (regex: .+@.+[.]+.+), ma solo EmailType (regex: ([!#-+/-9=?A-Z^-~-]+(.[!#-+/-9=?A-Z^-~-]+)|"([]!#-[^-~ \t]|(\[\t -~]))+")@([!#-+/-9=?A-Z^-~-]+(.[!#-+/-9=?A-Z^-~-]+)|[[\t -Z^-~]*])) che nelle specifiche 1.6.2 viene utilizzato per validare il solo tag PECDestinatario.

Tra le due versioni di file xsd praticamente questa è l’unica modifica di rilievo a parte qualche descrizione.

Se consulto


o
https://www.agenziaentrate.gov.it/portale/documents/20143/2931841/Schema_VFPR12.xsd

La regex EmailType
<xs:pattern value="([!#-+/-9=?A-Z^-~-]+(.[!#-+/-9=?A-Z^-~-]+)|"([]!#-[^-~ \t]|(\[\t -~]))+")@([!#-+/-9=?A-Z^-~-]+(.[!#-+/-9=?A-Z^-~-]+)|[[\t -Z^-~]*])" />
è usata solo per PECDestinatario

La regex EmailContattiType
<xs:pattern value=".+@.+[.]+.+" />
è usata per tutte altre email, compresa quella CedentePrestatore/Contatti

Se faccio differenza XSD tra 1.6.1 e 1.6.2, una delle differenze è proprio che tutte le email, tranne PECDestinatario, sono passate da EmailType a EmailContattiType che è stato aggiunto in 1.6.2.

In ogni caso, a me xmllint valida email con spazio anche usando con regex EmailType (PECDestinatario)

Hai ragione! Non mi ero accorto che hanno cambiato di nuovo l’xsd. Si vede che troppa gente si è lamentata degli scarti per indirizzi email non validi.