QR de factura electrónica ZATCA (Saudi FATOORA)
ZATCA (Autoridad de Zakat, Impuestos y Aduanas) de Arabia Saudí exige un QR en cada factura fiscal emitida en el Reino. La Fase 1 es TLV simplificado; la Fase 2 añade sellado criptográfico a través de la integración con la plataforma FATOORA. Las facturas no conformes son rechazadas por el software contable del comprador y son inválidas para la deducción del IVA.
Fase 1 (generación): en vigor desde el 4 de diciembre de 2021. Todas las empresas registradas en el IVA deben emitir facturas digitales con QR.
Fase 2 (integración): lanzamiento por oleadas según tamaño de empresa desde el 1 de enero de 2023. Añade firma digital + autorización ZATCA para facturas estándar e informes en tiempo real para facturas simplificadas.
Qué es
El QR codifica una cadena Base64. Decodifica el Base64 para obtener una secuencia TLV binaria con 5 campos obligatorios en orden fijo:
| Tag | Campo | Tipo | Notas |
|---|---|---|---|
01 | Nombre del vendedor | Cadena UTF-8 | Nombre comercial del vendedor. Árabe y latín ambos aceptados. |
02 | Número de registro de IVA | 15 dígitos | Empieza con 3 para entidades saudíes. Formato: 3XXXXXXXXXXXXX3. |
03 | Marca de tiempo de la factura | ISO 8601 | P.ej. 2026-04-18T10:30:00Z. Debe incluir zona horaria. |
04 | Total de la factura (con IVA) | Cadena decimal | P.ej. 115.00. La divisa es implícitamente SAR. |
05 | Importe del IVA | Cadena decimal | P.ej. 15.00. Actualmente 15% tipo estándar. |
06 | Hash de la factura (Fase 2) | Base64 SHA-256 | SHA-256 del XML de la factura canónica. |
07 | Firma digital (Fase 2) | Base64 | ECDSA sobre el hash de la factura usando el certificado CSID del vendedor. |
08 | Clave pública (Fase 2) | Base64 X.509 | Clave pública ECDSA del vendedor (del CSID). |
09 | Sello ZATCA (Fase 2) | Base64 | Contrafirma de ZATCA. Presente solo después de la autorización de ZATCA. |
Cada registro TLV es 1 byte de tag + 1 byte de longitud + <longitud> bytes de valor. La secuencia completa se codifica en Base64 para convertirse en el payload del QR.
Fase 1 (simplificada) vs Fase 2 (integración)
| Aspecto | Fase 1 | Fase 2 |
|---|---|---|
| Contenido QR | Solo tags 01–05 | Tags 01–05 más 06, 07, 08, opcionalmente 09 |
| Integración ZATCA | Ninguna, offline | API en tiempo real para facturas simplificadas, flujo de autorización para facturas estándar |
| Certificados requeridos | No | Sí, CSID (Cryptographic Stamp Identifier) emitido por ZATCA |
| Fecha de vigencia | 2021-12-04 (todas las empresas) | 2023-01-01 (oleadas progresivas por ingresos) |
| Alcance de la factura | B2C (simplificada) + B2B (estándar) | B2C simplificada: informe en tiempo real. B2B estándar: autorización (prevalidación) antes de emitir. |
Vectores de prueba canónicos
Ejemplo 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"Después de la codificación Base64:
AQpBY21lIFNhdWRpAg8zMDAwMDAwMDAwMDAwMDMDFDIwMjYtMDQtMThUMTA6MzA6MDBaBAYxMTUuMDAFBTE1LjAw| Caso | Entradas | Prefijo Base64 |
|---|---|---|
| Fase 1, simplificada mínima | seller=Acme Saudi | AQpBY21lIFNhdWRp... |
| Nombre de vendedor en árabe | seller=شركة أكمي | Nombre del vendedor codificado en UTF-8 dentro del TLV antes de Base64. |
| Factura estándar Fase 2 | Todo lo anterior más hash=<SHA-256 Base64> | Base64 mucho más largo. Los decodificadores deben tolerar tags adicionales después del 05. |
Errores comunes
- Longitud del número de IVA. Los números de IVA de ZATCA tienen exactamente 15 dígitos, empiezan y terminan en
3. Cualquier otra cosa falla la validación en el lado de ingesta de facturas. - Marca de tiempo sin zona horaria. La especificación requiere ISO 8601 con una zona explícita (
Zo+03:00). Las marcas de tiempo locales naíve son rechazadas. - Orden de codificación. Los campos TLV deben aparecer en orden de número de tag (01, 02, 03, 04, 05, …). Reordenar hace que el QR se decodifique correctamente pero algunos validadores lo señalan como no canónico.
- Formato decimal. El total de la factura y el importe del IVA usan punto decimal (
115.00), no coma decimal (115,00). Tampoco hay separadores de miles. - La divisa es SAR implícita. Las facturas en divisa extranjera se convierten igualmente a SAR para el campo QR. El XML subyacente puede llevar la divisa original; el QR no.
- Fallos de autorización de Fase 2. Una factura estándar enviada a la API de autorización de ZATCA puede ser rechazada (CSID incorrecto, XML malformado, cálculo de impuestos incorrecto). La factura es legalmente inválida hasta que sea autorizada. Mantén un bucle de reintentos con retroceso exponencial; no emitas la factura hasta que la autorización tenga éxito.
- Rotación del certificado CSID. Los CSIDs de Fase 2 caducan (típicamente 1 año). Integra una verificación de renovación en tu sistema de facturación electrónica o de repente dejarás de poder emitir facturas.
Compatibilidad de escáneres
| Lector | Soporte | Notas |
|---|---|---|
| App ZATCA FATOORA | Nativo | App oficial del Ministerio; verifica firmas de Fase 2 contra la PKI de ZATCA. |
| Software contable saudí (SAP B1, Oracle, Microsoft Dynamics) | Nativo (post-2023) | Las versiones localizadas saudíes tienen análisis ZATCA en el pipeline AP. |
| Cámara iOS | Base64 en bruto | No reconocido como factura fiscal. El usuario debe abrir la app FATOORA. |
| Cámara Android / Google Lens | Base64 en bruto | Igual, sin análisis nativo. |
| Herramientas de auditoría de terceros (PwC, KPMG, unidades saudíes de Deloitte) | Nativo | Las suites de tecnología de auditoría analizan y verifican las firmas de Fase 2. |
Ver también
- /zatca-saudi-einvoice-qr-code/, el generador.
- /standards/, volver al índice de estándares.
- Portal de desarrolladores ZATCA, recursos de referencia y el sandbox FATOORA.