4 min de leitura
XSD do SAF-T (PT) 1.04_01: download oficial e o que mudou em 2022
Onde descarregar o esquema oficial do SAF-T (PT), a versão em vigor em 2026, em que difere do ficheiro de 2016 que muitas ferramentas ainda usam e como validar com ele.
A versão em vigor: 1.04_01
A estrutura do SAF-T (PT) em vigor é a versão 1.04_01, aprovada pela Portaria n.º 302/2016, com efeitos a 1 de janeiro de 2017. O namespace XML é urn:OECD:StandardAuditFile-Tax:PT_1.04_01 e todos os ficheiros submetidos declaram <AuditFileVersion>1.04_01</AuditFileVersion> no cabeçalho. Em setembro de 2026, a AT não anunciou nenhuma versão 1.05.
Download oficial
A AT publica o esquema no Portal das Finanças:
https://info.portaldasfinancas.gov.pt/apps/saft-pt04/SAFTPT1.04_01.xsd
Descarregue-o sempre daí, e não de uma cópia incluída numa biblioteca ou num projeto antigo. O ficheiro está codificado em Windows-1252, tal como os próprios ficheiros SAF-T.
O mesmo número de versão, dois ficheiros diferentes
A AT reviu o XSD a 17 de maio de 2022 sem alterar o número de versão. Muitas ferramentas e bibliotecas ainda incluem o ficheiro de 2016, e os dois não aceitam os mesmos documentos:
| O quê | Ficheiro de 2016 | Ficheiro de 2022 (atual) |
|---|---|---|
Header/CompanyAddress | O código postal tem de seguir o formato NNNN-NNN; o país é fixo em PT | Qualquer código postal até 20 caracteres; qualquer código de país |
| Códigos de moeda | Sem SLE nem VED | A lista ISO 4217 inclui SLE e VED |
HashControl de documentos emitidos manualmente | A referência depois de M pode conter barras adicionais | Tem de ser uma única série/número, sem barras adicionais nem espaços |
Na prática, validar com o ficheiro de 2016 dá como inválidas empresas com morada no estrangeiro ou com um código postal fora do formato habitual, embora a AT as aceite. O SAFTCheck valida com o ficheiro de 2022.
O ATCUD no XSD
O esquema declara o ATCUD apenas como texto até 100 caracteres. Não define o formato: esse vem da Portaria n.º 195/2020 (artigo 3.º), que exige o código de validação da série atribuído pela AT (pelo menos 8 caracteres), um hífen e o número sequencial do documento. Por isso, um ficheiro pode passar no XSD com um ATCUD mal formado e ainda assim ser rejeitado. Verifique um ATCUD ou leia as regras do formato e os erros comuns.
Validar com o XSD por conta própria
O ficheiro usa funcionalidades do XSD 1.1: declara vc:minVersion="1.1" e contém regras xs:assert. O Xerces de Java (em modo XSD 1.1) processa-o. A libxml2, usada pelo PHP, pelo lxml de Python e pelo xmllint, não suporta XSD 1.1. Com a libxml2 é preciso remover os elementos xs:assert e transformar o bloco xs:all em GeneralLedgerEntries (as Lines dos diários) num xs:choice ilimitado, porque a libxml2 rejeita maxOccurs="unbounded" dentro de xs:all.
Esses asserts verificam regras de negócio reais, por exemplo que uma linha com taxa zero indica o motivo de isenção. Um ficheiro que passa num esquema simplificado pode ainda assim ser rejeitado.
A verificação mais rápida
Se só precisa de saber se um ficheiro passa, carregue-o no SAFTCheck. Valida com o esquema atual de 2022 e faz ainda as verificações que o XSD não consegue exprimir: codificação, BOM, dígitos de controlo do NIF, ATCUD, datas do cabeçalho e totais. A primeira validação é grátis e não precisa de conta, e os ficheiros são apagados em 60 minutos.
Relacionado: como validar um SAF-T (PT) antes de submeter à AT e o erro de codificação UTF-8.