A implementação de operações comerciais na Arábia Saudita exige o cumprimento rigoroso dos regulamentos da ZATCA (Zakat, Tax and Customs Authority), especificamente no que diz respeito ao faturamento eletrônico (FATOORA) Fase 2. Para empresas que optam pelo Odoo Community, essa exigência impõe um desafio de engenharia: a versão comunitária não inclui nativamente todos os módulos de integração de faturamento e comunicação direta via API com os servidores da ZATCA, exigindo arquitetura personalizada e automação via Python.
Entendendo os Requisitos da ZATCA Fase 2
A Fase 2 da ZATCA exige que cada fatura emitida seja integrada aos sistemas fiscais do governo. Isso envolve:
- Geração de faturas no padrão XML UBL 2.1.
- Cálculo de hash SHA-256 da fatura para encadeamento criptográfico inviolável (PIH – Previous Invoice Hash).
- Assinatura digital usando certificados criptográficos X.509 e chave privada (ECDSA com curva secp256k1).
- Emissão de faturas B2B para validação prévia (Clearance) e faturas B2C para reporte em até 24 horas (Reporting).
- Geração de QR Code codificado em formato TLV (Tag-Length-Value) em Base64.
Automação do Fluxo Criptográfico com Python
No backend do Odoo, a manipulação segura e rápida desses dados fiscais é essencial para não degradar a performance das rotinas financeiras. A biblioteca cryptography do Python permite automatizar a assinatura digital e o hashing sem depender de processos externos lentos.
import hashlib
import base64
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives.serialization import load_pem_private_key
def gerar_hash_fatura(xml_canonico: bytes) -> str:
"""Gera o hash SHA-256 do XML canônico da fatura."""
digest = hashlib.sha256(xml_canonico).digest()
return base64.b64encode(digest).decode('utf-8')
def assinar_digest(digest_bytes: bytes, private_key_pem: bytes) -> str:
"""Assina o hash da fatura usando ECDSA para conformidade ZATCA."""
private_key = load_pem_private_key(private_key_pem, password=None)
signature = private_key.sign(digest_bytes, ec.ECDSA(hashes.SHA256()))
return base64.b64encode(signature).decode('utf-8')
Processo de Integração no Odoo
Para estruturar o ambiente de faturamento de forma robusta, o fluxo deve seguir cinco etapas integradas ao ciclo de vida do modelo account.move:
- Geração do CSR e Integração CSID: Criação de par de chaves e solicitação do Compliance CSID junto ao portal de desenvolvedores da ZATCA via API REST.
- Renderização do XML UBL 2.1: Adaptação de templates QWeb para gerar a estrutura semântica exigida pela ZATCA no momento da confirmação da fatura.
- Canonicalização e Assinatura: Aplicação das regras de remoção de tags de assinatura para cálculo do hash original e inserção da assinatura digital.
- Transmissão e Validação da API: Envio assíncrono do payload para o endpoint da ZATCA, registrando o status de aceitação, avisos ou erros de validação diretamente no Odoo.
- Armazenamento e Geração do PDF A-3: Inclusão do XML assinado nos metadados do documento fiscal e renderização do QR Code TLV no relatório impresso.
Como especialista em IA e engenharia de software aplicada a ERPs, recomendo implementar filas de processamento assíncrono para o reporte de faturas B2C. Isso evita que falhas temporárias de conexão com os servidores governamentais interrompam as operações do ponto de venda ou da expedição de pedidos.
Estruturação Profissional do seu ERP
A configuração de sistemas fiscais para o mercado saudita exige rigor na proteção de chaves privadas e na integridade dos dados enviados. Uma modelagem técnica inadequada pode resultar em rejeições de faturas e penalidades regulatórias.
Se a sua empresa precisa de uma arquitetura sólida para configurar o Odoo Community em total conformidade com a ZATCA Fase 2, entre em contato para estruturarmos uma solução segura, escalável e alinhada às exigências da sua operação.


