QR de nota fiscal ZATCA (Saudi FATOORA)
A ZATCA (Autoridade de Zakat, Impostos e Alfândega) da Arábia Saudita exige um QR em cada fatura fiscal emitida no Reino. A Fase 1 é TLV simplificado; a Fase 2 adiciona selagem criptográfica por integração com a plataforma FATOORA. As faturas não conformes são rejeitadas pelo software contábil do comprador e inválidas para recuperação do IVA.
Especificação oficial:Resolução de faturação eletrônica ZATCA e regulamentos de implementação, vigente até 2026.
Fase 1 (Geração): em vigor desde 4 de dezembro de 2021. Todas as empresas registradas no IVA devem emitir faturas digitais com QR.
Fase 2 (Integração): implantação por ondas por tamanho de empresa desde 1º de janeiro de 2023. Adiciona assinatura digital + validação ZATCA para faturas padrão e relatórios em tempo real para faturas simplificadas.
Fase 1 (Geração): em vigor desde 4 de dezembro de 2021. Todas as empresas registradas no IVA devem emitir faturas digitais com QR.
Fase 2 (Integração): implantação por ondas por tamanho de empresa desde 1º de janeiro de 2023. Adiciona assinatura digital + validação ZATCA para faturas padrão e relatórios em tempo real para faturas simplificadas.
O que é
O QR codifica uma string Base64. Decodifique o Base64 para obter uma sequência binária TLV com 5 campos obrigatórios em ordem fixa:
| Tag | Campo | Tipo | Notas |
|---|---|---|---|
01 | Nome do vendedor | String UTF-8 | Nome comercial do vendedor. Árabe e latim ambos aceitos. |
02 | Número de registro IVA | 15 dígitos | Começa com 3 para entidades sauditas. Formato: 3XXXXXXXXXXXXX3. |
03 | Carimbo de data/hora da fatura | ISO 8601 | Ex. 2026-04-18T10:30:00Z. Deve incluir fuso horário. |
04 | Total da fatura (com IVA) | String decimal | Ex. 115.00. A moeda é implicitamente SAR. |
05 | Valor do IVA | String decimal | Ex. 15.00. Taxa padrão atual de 15%. |
06 | Hash da fatura (Fase 2) | Base64 SHA-256 | SHA-256 do XML de fatura canônico. |
07 | Assinatura digital (Fase 2) | Base64 | ECDSA sobre o hash da fatura usando o certificado CSID do vendedor. |
08 | Chave pública (Fase 2) | Base64 X.509 | Chave pública ECDSA do vendedor (do CSID). |
09 | Carimbo ZATCA (Fase 2) | Base64 | Contraassinatura da ZATCA. Presente apenas após validação ZATCA. |
Cada registro TLV é 1 byte de tag + 1 byte de comprimento + <comprimento> bytes de valor. Toda a sequência é então codificada em Base64 para se tornar o payload do QR.
Fase 1 (simplificada) vs Fase 2 (integração)
| Aspecto | Fase 1 | Fase 2 |
|---|---|---|
| Conteúdo do QR | Apenas tags 01–05 | Tags 01–05 mais 06, 07, 08, opcionalmente 09 |
| Integração ZATCA | Nenhuma, offline | API em tempo real para faturas simplificadas, fluxo de validação para faturas padrão |
| Certificados necessários | Não | Sim, CSID (Identificador de Carimbo Criptográfico) emitido pela ZATCA |
| Data de vigência | 2021-12-04 (todas as empresas) | 2023-01-01 (ondas progressivas por receita) |
| Escopo da fatura | B2C (simplificado) + B2B (padrão) | B2C simplificado: relatório em tempo real. B2B padrão: validação prévia antes de emitir. |
Vetores de teste canônicos
Exemplo TLV (antes de Base64):
01 0A "Acme Saudi" 02 0F "300000000000003" 03 14 "2026-04-18T10:30:00Z" 04 06 "115.00" 05 05 "15.00"Após codificação Base64:
AQpBY21lIFNhdWRpAg8zMDAwMDAwMDAwMDAwMDMDFDIwMjYtMDQtMThUMTA6MzA6MDBaBAYxMTUuMDAFBTE1LjAw| Caso | Entradas | Prefixo Base64 |
|---|---|---|
| Fase 1, simplificado mínimo | seller=Acme Saudi | AQpBY21lIFNhdWRp... |
| Nome de vendedor em árabe | seller=شركة أكمي | Nome do vendedor codificado em UTF-8 dentro do TLV antes de Base64. |
| Fatura padrão Fase 2 | Tudo acima mais hash=<SHA-256 Base64> | Base64 muito mais longo. Decodificadores devem tolerar tags extras além de 05. |
Armadilhas comuns
- Comprimento do número IVA. Os números IVA da ZATCA têm exatamente 15 dígitos, começam e terminam com
3. Qualquer outro formato falha na validação na ingestão da fatura. - Carimbo de data/hora sem fuso horário. A especificação requer ISO 8601 com zona explícita (
Zou+03:00). Carimbos locais sem zona são rejeitados. - Ordem de codificação. Os campos TLV devem aparecer na ordem de número de tag (01, 02, 03, 04, 05, …). Reordenar faz o QR decodificar corretamente, mas alguns validadores marcam como não canônico.
- Formatação decimal. O total da fatura e o valor do IVA usam ponto decimal (
115.00), não vírgula decimal (115,00). Também sem separadores de milhar. - A moeda é implicitamente SAR. Faturas em moeda estrangeira ainda convertem para SAR no campo QR. O XML subjacente pode carregar a moeda original; o QR não.
- Falhas de validação na Fase 2. Uma fatura padrão enviada à API de validação da ZATCA pode ser rejeitada (CSID incorreto, XML malformado, erro de cálculo de imposto). A fatura é legalmente inválida até ser validada. Implemente um loop de repetição com backoff exponencial; não emita a fatura até que a validação seja bem-sucedida.
- Rotação do certificado CSID. Os CSIDs da Fase 2 expiram (normalmente 1 ano). Incorpore uma verificação de renovação em seu sistema de faturação eletrônica ou você subitamente não conseguirá mais emitir faturas.
Compatibilidade de leitores
| Leitor | Suporte | Notas |
|---|---|---|
| ZATCA FATOORA app | Nativo | App oficial do Ministério; verifica assinaturas Fase 2 contra o PKI da ZATCA. |
| Software contábil saudita (SAP B1, Oracle, Microsoft Dynamics) | Nativo (post-2023) | Versões localizadas para Arábia Saudita têm análise ZATCA no pipeline AP. |
| iOS Câmera | Base64 bruto | Não reconhecido como fatura fiscal. O usuário deve abrir o app FATOORA. |
| Android Câmera / Google Lens | Base64 bruto | Igual, sem análise nativa. |
| Ferramentas de auditoria de terceiros (PwC, KPMG, Deloitte unidades sauditas) | Nativo | Suítes de tecnologia de auditoria analisam e verificam assinaturas Fase 2. |
Ver também
- /zatca-saudi-einvoice-qr-code/, o gerador.
- /standards/, voltar ao índice de padrões.
- ZATCA Portal de Desenvolvedores, recursos oficiais e o sandbox FATOORA.