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.

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.

Usamos una cookie de sesión para iniciar sesión, una cookie de idioma para la preferencia lingüística y Tawk.to para el widget de chat en vivo (que establece sus propias cookies al abrir el chat). Google Analytics (GA4) se carga solo después de que aceptes, con anonimización de IP; sin rastreadores publicitarios. Consulta nuestra Política de Privacidad.