SAFTCheck

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.

Declaración de codificación XML (Windows-1252) La AT exige la codificación Windows-1252. Las declaraciones UTF-8 se rechazan silenciosamente. encoding.declaration 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. encoding.bom Validar NIF portugués: comprobador gratuito y reglas Mod-11 Comprueba al instante cualquier NIF portugués: 9 dígitos, prefijo válido y dígito de control Mod-11. Además, cómo funciona el algoritmo y los errores más comunes. nif.mod11 Formato del ATCUD: comprobador gratuito y reglas desde 2023 Código único de documento obligatorio: código de validación de al menos 8 caracteres, guion y número del documento. Incluye un comprobador de ATCUD gratuito. atcud.format Fechas de la cabecera: StartDate, EndDate, FiscalYear, DateCreated Invariantes temporales que la AT impone sobre el bloque Header del SAF-T. header.dates 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. feature.inline-editor 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. nif.vies 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. invoice.date.out_of_range Los totales de bloque cuadran con los documentos hijos NumberOfEntries cuenta todos los documentos (anulados incluidos); TotalDebit y TotalCredit deben igualar los importes de las líneas sin IVA, sin los documentos anulados, con tolerancia de 0,01. totals.reconciliation 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.currency.exchange 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. invoice.status

¿Buscas artículos más profundos? Consulta el blog para flujos completos de corrección.