Cómo validar un SAF-T (PT) antes de enviarlo a la AT
Lista de comprobación previa al envío: codificación, BOM, NIF, ATCUD, fechas de la cabecera, rango de fechas por documento, totales de bloque, moneda y estado del documento — lo que la AT detecta en la entrada y cómo corregirlo antes del día 5.
Para qué prevalidar
El portal de la AT acepta tu fichero SAF-T. O lo rechaza con "ficheiro inválido". No hay término medio ni feedback útil. Si envías el día 5 a las 23:50 y el fichero rebota, tienes diez minutos para encontrar el bug y volver a exportar desde tu ERP. Es el peor momento para descubrir que la numeración de facturas se reinició, que el dígito de control del NIF está mal o que la codificación se ha estropeado.
La prevalidación cierra ese hueco. Subes el fichero a un validador que ejecuta el mismo XSD más las heurísticas que la AT aplica realmente en la entrada — codificación, BOM, NIF Mod-11, formato ATCUD, fechas de la cabecera, totales de documento, tipos de cambio, coherencia del estado del documento — y ves cada problema con número de línea antes que la AT.
Qué validar, por orden
- Codificación. La causa de rechazo silencioso más común. La AT exige Windows-1252; la mayoría de ERPs exportan UTF-8. Al parser XSD le da igual; al canal de entrada de la AT no. Ver la regla de codificación.
- BOM. Si tu ERP pone un byte-order-mark UTF-8 antes de
<?xml ?>, la AT rechaza. Lo mismo con BOMs UTF-16. - Esquema. El XSD valida la forma estructural: elementos obligatorios, tipos de atributo, valores de enumeración. Es lo primero que ejecuta la AT.
schema 1.04_01es la versión actual del SAF-T (PT) para la facturación mensual. - NIF Mod-11. Cada
TaxRegistrationNumberyCustomerTaxID/SupplierTaxIDnecesita un dígito de control portugués válido y un prefijo permitido. Ver la regla del NIF. - Formato ATCUD. Ocho alfanuméricos en mayúsculas, guion, secuencia ≥ 1. Obligatorio desde 2023.
- Fechas de la cabecera.
StartDate < EndDate,FiscalYearcoincide con el año deStartDate,DateCreated >= EndDate,EndDateno en el futuro. - Rango de fechas por documento. Cada fecha de
Invoice,Payment,WorkDocument,StockMovementdebe caer dentro de la ventana de la cabecera. - Totales de bloque.
SalesInvoices.NumberOfEntriescoincide con el conteo de hijos;TotalDebit + TotalCreditcoincide con la suma deGrossTotals, dentro de 0,01 €. - Moneda. Los documentos en moneda extranjera necesitan
CurrencyCode + CurrencyAmount + ExchangeRate > 0. La tasa ausente es invisible para el XSD; la AT rechaza en la entrada. - Estado del documento.
InvoiceStatusen {N, S, A, R, F};InvoiceStatusDate >= InvoiceDate.
Qué NO detecta la prevalidación
Sé honesto contigo: un validador puede confirmar que el fichero está bien formado y es coherente. No puede garantizar que la AT lo acepte. Dos cosas que no ve:
- Reglas de negocio del lado de la AT que cambian sin aviso. La AT a veces endurece reglas de entrada sin actualizar el XSD público. Los monitores de cambios de esquema y los avisos de la comunidad ayudan — pero nuevos patrones de rechazo a veces aparecen primero en envíos reales.
- Restricciones a nivel de cuenta. Ventana de envío ya consumida, contribuyente en suspensión, registro de software certificado desalineado — ninguno de esos es un problema del fichero; son problemas del contribuyente.
Para la primera clase, los ciclos posteriores al rechazo siguen importando. Para la segunda, tu asesor o el soporte de la AT es el canal adecuado.
Flujo para el plazo del día 5
- Exporta el SAF-T mensual desde tu ERP un día antes — idealmente el día 3 del mes siguiente.
- Pásalo por un prevalidador. Corrige todos los errores reportados. Si dispara la regla de codificación, ejecuta el auto-fix y revalida.
- Vuelve a exportar solo cuando se reporte un problema estructural. Volver a prevalidar el mismo fichero roto dos veces da la misma respuesta.
- Envía a la AT cuando el validador esté limpio. Guarda el informe PDF en la carpeta del envío.
¿Listo?
Sube tu SAF-T XML y mira lo que la AT va a rechazar — antes de enviarlo. Validar ahora →