Come validare un SAF-T (PT) prima di inviarlo all'AT
Una checklist pre-invio: codifica, BOM, NIF, ATCUD, date dell'header, intervallo di date per documento, totali di blocco, valuta e stato del documento — cosa intercetta l'AT in ingresso e come correggerlo prima del giorno 5.
Perché preconvalidare
Il portale dell'AT accetta il tuo file SAF-T. Oppure lo rifiuta con "ficheiro inválido". Non c'è via di mezzo né feedback utile. Se invii il giorno 5 alle 23:50 e il file rimbalza, hai dieci minuti per trovare il bug e riesportare dall'ERP. È il momento peggiore per scoprire che la numerazione delle fatture è stata azzerata, che la cifra di controllo del NIF è sbagliata o che la codifica si è corrotta.
La preconvalida chiude questo buco. Carichi il file su un validatore che esegue lo stesso XSD più le euristiche che l'AT applica realmente in ingresso — codifica, BOM, NIF Mod-11, formato ATCUD, date dell'header, totali dei documenti, tassi di cambio, coerenza dello stato dei documenti — e vedi ogni anomalia con numero di riga prima dell'AT.
Cosa convalidare, in ordine
- Codifica. La causa di rifiuto silenzioso più comune. L'AT richiede Windows-1252; la maggior parte degli ERP esporta UTF-8. Al parser XSD va bene; alla pipeline d'ingresso dell'AT no. Vedi la regola di codifica.
- BOM. Se il tuo ERP antepone un byte-order-mark UTF-8 prima di
<?xml ?>, l'AT rifiuta. Idem per BOM UTF-16. - Schema. L'XSD valida la forma strutturale: elementi obbligatori, tipi di attributo, valori di enumerazione. È ciò che l'AT esegue per primo.
schema 1.04_01è la versione attuale del SAF-T (PT) per la fatturazione mensile. - NIF Mod-11. Ogni
TaxRegistrationNumbereCustomerTaxID/SupplierTaxIDdeve avere una cifra di controllo portoghese valida e un prefisso ammesso. Vedi la regola NIF. - Formato ATCUD. Otto alfanumerici maiuscoli, trattino, sequenza ≥ 1. Obbligatorio dal 2023.
- Date dell'header.
StartDate < EndDate,FiscalYearcorrisponde all'anno diStartDate,DateCreated >= EndDate,EndDatenon nel futuro. - Intervallo di date per documento. Ogni data di
Invoice,Payment,WorkDocument,StockMovementdeve cadere dentro la finestra dell'header. - Totali di blocco.
SalesInvoices.NumberOfEntriescorrisponde al conteggio dei figli;TotalDebit + TotalCreditcorrisponde alla somma deiGrossTotal, entro 0,01 €. - Valuta. I documenti in valuta estera richiedono
CurrencyCode + CurrencyAmount + ExchangeRate > 0. Tasso mancante è invisibile all'XSD; l'AT rifiuta in ingresso. - Stato del documento.
InvoiceStatusin {N, S, A, R, F};InvoiceStatusDate >= InvoiceDate.
Cosa la preconvalida NON intercetta
Sii onesto con te stesso: un validatore può confermare che il file sia ben formato e coerente. Non può garantire che l'AT lo accetti. Due cose che non vede:
- Regole di business lato AT che cambiano senza preavviso. L'AT a volte irrigidisce le regole d'ingresso senza aggiornare l'XSD pubblico. Monitor di modifiche dello schema e segnalazioni della community aiutano — ma a volte nuovi pattern di rifiuto compaiono prima nei reali invii.
- Vincoli a livello di account. Finestra di invio già usata, contribuente in sospensione, registro del software certificato disallineato — nessuno di questi è un problema del file; sono problemi del contribuente.
Per la prima classe, i loop post-rifiuto contano ancora. Per la seconda, il tuo commercialista o il supporto dell'AT è il canale giusto.
Flusso per la scadenza del giorno 5
- Esporta il SAF-T mensile dall'ERP un giorno prima — idealmente il giorno 3 del mese successivo.
- Passalo per un preconvalidatore. Correggi ogni errore segnalato. Se scatta la regola di codifica, esegui l'auto-fix e riconvalida.
- Riesporta solo quando viene segnalato un problema strutturale. Rieseguire la preconvalida sullo stesso file rotto due volte dà la stessa risposta.
- Invia all'AT non appena il validatore restituisce pulito. Conserva il report PDF nella cartella dell'invio.
Pronto?
Carica il tuo SAF-T XML e vedi cosa l'AT rifiuterà — prima di inviarlo. Convalida ora →