QR e-facture ZATCA (Saudi FATOORA)
ZATCA (Autorité de la Zakat, des impôts et des douanes) d'Arabie saoudite exige un QR sur chaque facture fiscale émise dans le Royaume. La Phase 1 est un TLV simplifié ; la Phase 2 ajoute un cachet cryptographique via l'intégration à la plateforme FATOORA. Les factures non conformes sont rejetées par le logiciel comptable de l'acheteur et invalides pour la récupération de la TVA.
Phase 1 (Génération) : en vigueur depuis le 4 décembre 2021. Toutes les entreprises enregistrées à la TVA doivent émettre des factures numériques avec le QR.
Phase 2 (Intégration) : déploiement par vagues selon la taille des entreprises depuis le 1er janvier 2023. Ajoute la signature numérique + la validation ZATCA pour les factures standard et le reporting en temps réel pour les factures simplifiées.
Ce que c'est
Le QR encode une chaîne Base64. Décodez le Base64 pour obtenir une séquence binaire TLV avec 5 champs obligatoires dans un ordre fixe :
| Balise | Champ | Type | Notes |
|---|---|---|---|
01 | Nom du vendeur | Chaîne UTF-8 | Nom commercial du vendeur. Arabe et latin acceptés. |
02 | Numéro d'enregistrement TVA | 15 chiffres | Commence par 3 pour les entités saoudiennes. Format : 3XXXXXXXXXXXXX3. |
03 | Horodatage de la facture | ISO 8601 | Ex. 2026-04-18T10:30:00Z. Doit inclure le fuseau horaire. |
04 | Total de la facture (TVA comprise) | Chaîne décimale | Ex. 115.00. La devise est implicitement SAR. |
05 | Montant TVA | Chaîne décimale | Ex. 15.00. Taux standard actuel de 15 %. |
06 | Hash de la facture (Phase 2) | Base64 SHA-256 | SHA-256 du XML de facture canonique. |
07 | Signature numérique (Phase 2) | Base64 | ECDSA sur le hash de la facture avec le certificat CSID du vendeur. |
08 | Clé publique (Phase 2) | Base64 X.509 | Clé publique ECDSA du vendeur (du CSID). |
09 | Cachet ZATCA (Phase 2) | Base64 | Contre-signature de ZATCA. Présent uniquement après la validation ZATCA. |
Chaque enregistrement TLV est 1 octet de balise + 1 octet de longueur + <longueur> octets de valeur. Toute la séquence est ensuite encodée en Base64 pour devenir le payload du QR.
Phase 1 (simplifiée) vs Phase 2 (intégration)
| Aspect | Phase 1 | Phase 2 |
|---|---|---|
| Contenu du QR | Balises 01–05 uniquement | Balises 01–05 plus 06, 07, 08, optionnellement 09 |
| Intégration ZATCA | Aucune, hors ligne | API en temps réel pour factures simplifiées, flux de validation pour factures standard |
| Certificats requis | Non | Oui, CSID (identifiant de cachet cryptographique) émis par ZATCA |
| Date d'entrée en vigueur | 2021-12-04 (toutes les entreprises) | 2023-01-01 (vagues progressives par chiffre d'affaires) |
| Périmètre des factures | B2C (simplifié) + B2B (standard) | B2C simplifié : rapport en temps réel. B2B standard : validation préalable avant émission. |
Vecteurs de test canoniques
Exemple TLV (avant Base64) :
01 0A "Acme Saudi" 02 0F "300000000000003" 03 14 "2026-04-18T10:30:00Z" 04 06 "115.00" 05 05 "15.00"Après encodage Base64 :
AQpBY21lIFNhdWRpAg8zMDAwMDAwMDAwMDAwMDMDFDIwMjYtMDQtMThUMTA6MzA6MDBaBAYxMTUuMDAFBTE1LjAw| Cas | Entrées | Préfixe Base64 |
|---|---|---|
| Phase 1, simplifié minimal | seller=Acme Saudi | AQpBY21lIFNhdWRp... |
| Nom du vendeur en arabe | seller=شركة أكمي | Nom du vendeur encodé en UTF-8 dans le TLV avant Base64. |
| Facture standard Phase 2 | Tout ce qui précède plus hash=<SHA-256 Base64> | Base64 beaucoup plus long. Les décodeurs doivent tolérer des balises supplémentaires au-delà de 05. |
Pièges courants
- Longueur du numéro TVA. Les numéros TVA ZATCA sont exactement 15 chiffres, commencent et se terminent par
3. Tout autre format échoue à la validation lors de l'ingestion de la facture. - Horodatage sans fuseau horaire. La spécification requiert ISO 8601 avec une zone explicite (
Zou+03:00). Les horodatages locaux sans zone sont rejetés. - Ordre d'encodage. Les champs TLV doivent apparaître dans l'ordre des numéros de balise (01, 02, 03, 04, 05, …). Le réordonnancement fait que le QR se décode correctement, mais certains validateurs le signalent comme non canonique.
- Format décimal. Le total et le montant TVA utilisent un point décimal (
115.00), pas une virgule (115,00). Pas non plus de séparateurs de milliers. - La devise est SAR implicitement. Les factures en devises étrangères sont quand même converties en SAR pour le champ QR. Le XML sous-jacent peut porter la devise d'origine ; le QR ne le fait pas.
- Échecs de validation Phase 2. Une facture standard soumise à l'API de validation de ZATCA peut être rejetée (CSID incorrect, XML malformé, erreur de calcul fiscal). La facture n'est légalement valide qu'après validation. Implémentez une boucle de réessai avec recul exponentiel ; n'émettez pas la facture avant que la validation réussisse.
- Rotation du certificat CSID. Les CSID de Phase 2 expirent (généralement 1 an). Intégrez une vérification de renouvellement dans votre système de facturation électronique ou vous ne pourrez soudainement plus émettre de factures.
Compatibilité des lecteurs
| Lecteur | Support | Notes |
|---|---|---|
| Application ZATCA FATOORA | Natif | Application officielle du Ministère ; vérifie les signatures Phase 2 contre le PKI de ZATCA. |
| Logiciels comptables saoudiens (SAP B1, Oracle, Microsoft Dynamics) | Natif (post-2023) | Les versions localisées pour l'Arabie saoudite intègrent l'analyse ZATCA dans le pipeline comptes fournisseurs. |
| Caméra iOS | Base64 brut | Non reconnu comme facture fiscale. L'utilisateur doit ouvrir l'application FATOORA. |
| Caméra Android / Google Lens | Base64 brut | Pareil, pas d'analyse native. |
| Outils d'audit tiers (PwC, KPMG, Deloitte Arabie saoudite) | Natif | Les suites technologiques d'audit analysent et vérifient les signatures Phase 2. |
Voir aussi
- /zatca-saudi-einvoice-qr-code/, le générateur.
- /standards/, retour à l'index des normes.
- Portail développeurs ZATCA, ressources officielles et bac à sable FATOORA.