SAFTCheck
Blog

4 min de lectura

XSD del SAF-T (PT) 1.04_01: descarga oficial y qué cambió en 2022

Dónde descargar el esquema oficial del SAF-T (PT), la versión vigente en 2026, en qué se diferencia del fichero de 2016 que muchas herramientas aún incluyen y cómo validar con él.

La versión vigente: 1.04_01

La estructura del SAF-T (PT) vigente es la versión 1.04_01, aprobada por la Portaria n.º 302/2016, con efectos desde el 1 de enero de 2017. Su namespace XML es urn:OECD:StandardAuditFile-Tax:PT_1.04_01 y todos los ficheros enviados declaran <AuditFileVersion>1.04_01</AuditFileVersion> en la cabecera. En septiembre de 2026, la AT no ha anunciado ninguna versión 1.05.

Descarga oficial

La AT publica el esquema en el Portal das Finanças:

https://info.portaldasfinancas.gov.pt/apps/saft-pt04/SAFTPT1.04_01.xsd

Descárgalo siempre de ahí, y no de una copia incluida en una biblioteca o en un proyecto antiguo. El fichero está codificado en Windows-1252, igual que los propios ficheros SAF-T.

El mismo número de versión, dos ficheros distintos

La AT revisó el XSD el 17 de mayo de 2022 sin cambiar el número de versión. Muchas herramientas y bibliotecas todavía incluyen el fichero de 2016, y los dos no aceptan los mismos documentos:

QuéFichero de 2016Fichero de 2022 (actual)
Header/CompanyAddressEl código postal debe seguir el formato NNNN-NNN; el país es fijo en PTCualquier código postal de hasta 20 caracteres; cualquier código de país
Códigos de monedaSin SLE ni VEDLa lista ISO 4217 incluye SLE y VED
HashControl de documentos emitidos manualmenteLa referencia después de M puede contener barras adicionalesDebe ser una única serie/número, sin barras adicionales ni espacios

En la práctica, validar con el fichero de 2016 marca como inválidas las empresas con dirección en el extranjero o con un código postal fuera del formato habitual, aunque la AT las acepte. SAFTCheck valida con el fichero de 2022.

El ATCUD en el XSD

El esquema solo declara el ATCUD como texto de hasta 100 caracteres. No define el formato: este viene de la Portaria n.º 195/2020 (artículo 3), que exige el código de validación de la serie asignado por la AT (al menos 8 caracteres), un guion y el número secuencial del documento. Por eso un fichero puede pasar el XSD con un ATCUD mal formado y aun así ser rechazado. Comprueba un ATCUD o lee las reglas del formato y los errores habituales.

Validar con el XSD por tu cuenta

El fichero usa funciones de XSD 1.1: declara vc:minVersion="1.1" y contiene reglas xs:assert. Xerces de Java (en modo XSD 1.1) lo procesa. libxml2, en la que se basan PHP, lxml de Python y xmllint, no admite XSD 1.1. Con libxml2 hay que eliminar los elementos xs:assert y convertir el bloque xs:all de GeneralLedgerEntries (las Lines de los diarios) en un xs:choice ilimitado, porque libxml2 rechaza maxOccurs="unbounded" dentro de xs:all.

Esos asserts comprueban reglas de negocio reales, por ejemplo que una línea con tipo cero indique el motivo de exención. Un fichero que pasa un esquema simplificado puede ser rechazado igualmente.

La comprobación más rápida

Si solo necesitas saber si un fichero pasa, súbelo a SAFTCheck. Valida con el esquema actual de 2022 y además realiza las comprobaciones que el XSD no puede expresar: codificación, BOM, dígitos de control del NIF, ATCUD, fechas de la cabecera y totales. La primera validación es gratuita y no requiere cuenta, y los ficheros se eliminan en 60 minutos.

Relacionado: cómo validar un SAF-T (PT) antes de enviarlo a la AT y el error de codificación UTF-8.

Otros artículos