SAFTCheck
Blog

4 min di lettura

XSD del SAF-T (PT) 1.04_01: download ufficiale e cosa è cambiato nel 2022

Dove scaricare lo schema ufficiale del SAF-T (PT), la versione in vigore nel 2026, in cosa differisce dal file del 2016 che molti strumenti includono ancora e come validare con esso.

La versione in vigore: 1.04_01

La struttura del SAF-T (PT) in vigore è la versione 1.04_01, introdotta dalla Portaria n.º 302/2016 con effetto dal 1° gennaio 2017. Il namespace XML è urn:OECD:StandardAuditFile-Tax:PT_1.04_01 e ogni file inviato dichiara <AuditFileVersion>1.04_01</AuditFileVersion> nell'intestazione. A settembre 2026 l'AT non ha annunciato alcuna versione 1.05.

Download ufficiale

L'AT pubblica lo schema sul Portal das Finanças:

https://info.portaldasfinancas.gov.pt/apps/saft-pt04/SAFTPT1.04_01.xsd

Scaricalo sempre da lì, non da una copia inclusa in una libreria o in un vecchio progetto. Il file è codificato in Windows-1252, come i file SAF-T stessi.

Stesso numero di versione, due file diversi

L'AT ha rivisto l'XSD il 17 maggio 2022 senza cambiare il numero di versione. Molti strumenti e librerie includono ancora il file del 2016, e i due non accettano gli stessi documenti:

CosaFile del 2016File del 2022 (attuale)
Header/CompanyAddressIl codice postale deve essere nel formato NNNN-NNN; il paese è fisso a PTQualsiasi codice postale fino a 20 caratteri; qualsiasi codice paese
Codici valutaSenza SLE né VEDL'elenco ISO 4217 include SLE e VED
HashControl dei documenti emessi manualmenteIl riferimento dopo M può contenere barre aggiuntiveDeve essere un'unica serie/numero, senza barre aggiuntive né spazi

In pratica, la validazione con il file del 2016 segnala come non valide le aziende con indirizzo all'estero o con un codice postale in un formato insolito, anche se l'AT le accetta. SAFTCheck valida con il file del 2022.

L'ATCUD nell'XSD

Lo schema dichiara l'ATCUD solo come testo fino a 100 caratteri. Non ne definisce il formato: questo deriva dalla Portaria n.º 195/2020 (articolo 3), che richiede il codice di validazione della serie assegnato dall'AT (almeno 8 caratteri), un trattino e il numero sequenziale del documento. Un file può quindi superare l'XSD con un ATCUD malformato ed essere comunque rifiutato. Verifica un ATCUD o leggi le regole del formato e gli errori comuni.

Validare con l'XSD in autonomia

Il file usa funzionalità di XSD 1.1: dichiara vc:minVersion="1.1" e contiene regole xs:assert. Xerces di Java (in modalità XSD 1.1) lo gestisce. libxml2, su cui si basano PHP, lxml di Python e xmllint, non supporta XSD 1.1. Con libxml2 occorre rimuovere gli elementi xs:assert e trasformare il blocco xs:all in GeneralLedgerEntries (le Lines dei registri) in un xs:choice illimitato, perché libxml2 rifiuta maxOccurs="unbounded" dentro xs:all.

Quegli assert verificano regole di business reali, ad esempio che una riga ad aliquota zero indichi il motivo di esenzione. Un file che supera uno schema semplificato può comunque essere rifiutato.

Il controllo più rapido

Se ti serve solo sapere se un file passa, caricalo su SAFTCheck. Valida con lo schema attuale del 2022 ed esegue anche i controlli che l'XSD non può esprimere: codifica, BOM, cifre di controllo del NIF, ATCUD, date dell'intestazione e totali. La prima validazione è gratuita e non richiede un account, e i file vengono eliminati entro 60 minuti.

Correlati: come validare un SAF-T (PT) prima dell'invio all'AT e l'errore di codifica UTF-8.

Altri articoli