Riferimento delle regole di validazione
Ogni regola che SAFTCheck applica al tuo SAF-T (PT) XML, in linguaggio chiaro. Ogni pagina spiega cosa richiede l'AT, i modi più comuni in cui la regola fallisce e come correggerla.
encoding.declaration
Dichiarazione di codifica XML (Windows-1252)
L'AT richiede la codifica Windows-1252. Le dichiarazioni UTF-8 vengono rifiutate silenziosamente.
encoding.bom
Byte Order Mark (BOM) all'inizio del file
L'AT rifiuta i file SAF-T che iniziano con un BOM UTF-8 o UTF-16.
nif.mod11
NIF portoghese — algoritmo Mod-11 e prefissi
Codice fiscale portoghese a 9 cifre; cifra di controllo calcolata tramite Mod-11 con pesi 9..2.
atcud.format
Formato ATCUD — VALIDAZIONE-SEQUENZA dal 2023
Codice univoco di documento obbligatorio: 8 caratteri alfanumerici maiuscoli, trattino, sequenza ≥ 1.
header.dates
Date dell'header — StartDate, EndDate, FiscalYear, DateCreated
Invarianti temporali che l'AT impone sul blocco Header del SAF-T.
feature.inline-editor
Editor inline — correggi NIF, ATCUD e date dell'header sul posto
Modifica il valore problematico accanto all'anomalia, riconvalida subito, senza tornare a esportare dall'ERP.
nif.vies
Controllo VIES — NIF registrato nel sistema IVA UE
Il NIF dell'header viene verificato contro il servizio VIES della UE e il nome registrato è confrontato con CompanyName del SAF-T.
invoice.date.out_of_range
Data del documento dentro la finestra di reporting dell'header
Ogni data di Invoice / Payment / WorkDocument / StockMovement deve ricadere dentro Header.StartDate – Header.EndDate.
totals.reconciliation
I totali di blocco riconciliano con i documenti figli
NumberOfEntries e TotalDebit+TotalCredit di ogni sezione devono corrispondere ai documenti sottostanti, entro 0,01 €.
invoice.currency.exchange
I documenti in valuta estera richiedono un blocco <Currency> completo
Quando un documento dichiara una valuta diversa da EUR, CurrencyCode + CurrencyAmount + ExchangeRate devono essere tutti presenti.
invoice.status
Coerenza tra codice di stato e data della fattura
InvoiceStatus deve essere uno tra N/S/A/R/F e InvoiceStatusDate deve essere >= InvoiceDate.
Cerchi approfondimenti narrativi? Vai al blog per i flussi completi di correzione.