Referencia de reglas de validación
Cada regla que SAFTCheck aplica a tu SAF-T (PT) XML, en lenguaje claro. Cada página cubre lo que la AT exige, los fallos más habituales y cómo corregirlo.
encoding.declaration
Declaración de codificación XML (Windows-1252)
La AT exige la codificación Windows-1252. Las declaraciones UTF-8 se rechazan silenciosamente.
encoding.bom
Byte Order Mark (BOM) al inicio del fichero
La AT rechaza los ficheros SAF-T que empiezan por un BOM UTF-8 o UTF-16.
nif.mod11
NIF portugués — algoritmo Mod-11 y prefijos
Número de identificación fiscal portugués de 9 dígitos; dígito de control calculado mediante Mod-11 con pesos 9..2.
atcud.format
Formato ATCUD — VALIDACIÓN-SECUENCIA desde 2023
Código único de documento obligatorio: 8 caracteres alfanuméricos en mayúsculas, guion, secuencia ≥ 1.
header.dates
Fechas de la cabecera — StartDate, EndDate, FiscalYear, DateCreated
Invariantes temporales que la AT impone sobre el bloque Header del SAF-T.
feature.inline-editor
Editor en línea — corrige NIF, ATCUD y fechas de la cabecera al vuelo
Edita el valor problemático junto al aviso, revalida al instante, sin volver a exportar desde el ERP.
nif.vies
Comprobación VIES — NIF registrado en el sistema de IVA de la UE
El NIF de la cabecera se verifica contra el servicio VIES de la UE y el nombre registrado se compara con CompanyName del SAF-T.
invoice.date.out_of_range
Fecha del documento dentro de la ventana de reporte de la cabecera
Cada fecha de Invoice / Payment / WorkDocument / StockMovement debe estar dentro de Header.StartDate – Header.EndDate.
totals.reconciliation
Los totales de bloque cuadran con los documentos hijos
NumberOfEntries y TotalDebit+TotalCredit de cada sección deben coincidir con los documentos que contienen, dentro de 0,01 €.
invoice.currency.exchange
Los documentos en moneda extranjera necesitan un bloque <Currency> completo
Cuando un documento declara una moneda distinta del EUR, CurrencyCode + CurrencyAmount + ExchangeRate deben estar todos presentes.
invoice.status
Coherencia entre código de estado y fecha de la factura
InvoiceStatus debe ser uno de N/S/A/R/F y InvoiceStatusDate debe ser >= InvoiceDate.
¿Buscas artículos más profundos? Consulta el blog para flujos completos de corrección.