Table des matières
Hier, le 30 juin 2026, était une échéance qui a discrètement remodelé le commerce saoudien. La Vague 24 du déploiement de facturation électronique de Phase 2 de ZATCA est entrée en vigueur — la première vague à atteindre des entreprises avec aussi peu que 375 000 SAR de revenu annuel imposable, ce qui est aussi le seuil d'enregistrement obligatoire à la TVA lui-même. En termes pratiques, cela signifie que presque toutes les entreprises enregistrées à la TVA du Royaume doivent désormais être intégrées à la plateforme Fatoora. La fenêtre d'exonération des pénalités qui permettait aux entreprises de corriger leurs erreurs d'intégration sans conséquence financière s'est fermée à la même date. À partir d'aujourd'hui, l'application de la facturation électronique de ZATCA est effectivement universelle.
Si vous développez ou maintenez un système de point de vente, ERP, ou de facturation pour le marché saoudien, ce petit carré noir et blanc sur chaque reçu n'est plus un devoir optionnel — c'est la preuve de conformité la plus visible que produit votre logiciel. Ce guide couvre ce que contient réellement le code QR, pourquoi ZATCA a construit le programme ainsi, les différences réelles entre Phase 1 et Phase 2, comment les factures B2B et B2C divergent, comment un acheteur récupère réellement la TVA, et les erreurs qui font le plus souvent échouer la validation d'un code QR. En bas de page, un générateur gratuit côté client vous permet de construire et d'inspecter vous-même un code QR conforme, balise par balise.
Qu'est-ce que la Facturation Électronique ZATCA, et Pourquoi Existe-t-elle ?
ZATCA — l'Autorité de la Zakat, des Impôts et des Douanes — est l'organisme gouvernemental saoudien responsable de la collecte de la TVA, de la Zakat, des droits de douane, et de l'application de la conformité à la facturation électronique. Elle a été formée en 2021 à partir de la fusion de l'Autorité Générale de la Zakat et des Impôts (GAZT) et de l'Autorité Générale des Douanes, consolidant l'administration fiscale sous un même toit.
L'Arabie saoudite a introduit la TVA le 1er janvier 2018, à 5 %, dans le cadre d'un déploiement coordonné à l'échelle du CCG. Le 1er juillet 2020, face à l'effondrement des revenus pétroliers et au choc fiscal de la COVID-19, le gouvernement a triplé le taux à 15 %, où il reste aujourd'hui. Une taxe de cette ampleur, appliquée à toute une économie, n'est efficace que dans la mesure où le gouvernement peut vérifier qu'elle est effectivement collectée et reversée — et les factures papier, les reçus manuscrits, et les factures générées sur tableur sont trivialement faciles à sous-déclarer ou simplement à ne jamais émettre. Cet écart entre la TVA collectée auprès des clients et la TVA réellement déclarée à l'État est ce que le programme de facturation électronique, baptisé Fatoora, a été construit pour combler.
Le code QR est la partie visible de ce système. Il transforme chaque reçu en un enregistrement lisible par machine et vérifiable de façon indépendante, afin qu'un client, un auditeur, ou les systèmes de ZATCA eux-mêmes puissent confirmer qu'une facture est authentique sans faire confiance au papier sur lequel elle est imprimée. Le programme a été déployé en deux phases officiellement définies :
- 4 décembre 2021 — Phase 1 (Phase de Génération) : toute entreprise enregistrée à la TVA a dû cesser d'émettre des factures manuscrites ou générées sur tableur et passer à un système électronique conforme capable de produire et stocker des factures électroniques avec un code QR TLV.
- À partir du 1er janvier 2023 — Phase 2 (Phase d'Intégration) : les entreprises connectent leur système de facturation électronique directement à la plateforme Fatoora de ZATCA pour un dédouanement ou une déclaration en temps réel. Comme connecter toutes les entreprises simultanément n'est pas opérationnellement réaliste, ZATCA a déployé cela en « vagues » successives, regroupées par revenu annuel imposable, chacune annoncée au moins six mois avant son échéance. La Vague 1 (chiffre d'affaires supérieur à 3 milliards de SAR) est entrée en vigueur le 1er janvier 2023 ; la Vague 24 (chiffre d'affaires supérieur à 375 000 SAR) est entrée en vigueur hier.
Il n'existe pas de « Phase 3 » annoncée séparément à ce jour — le programme compte officiellement deux phases, la Phase 2 elle-même continuant de s'étendre à travers de nouvelles vagues à mesure que ZATCA descend vers les contribuables plus petits et, éventuellement, un filet encore plus large incluant la facturation électronique pour le pré-remplissage des déclarations de TVA. Traitez tout contenu faisant référence à une « Phase 3 » distincte comme un raccourci informel pour une vague future, pas une désignation officielle.
Comment Fonctionne Réellement un Code QR ZATCA
Un code QR ZATCA n'est pas un lien. Scannez-en un avec une application QR générique et vous n'atterrirez pas sur un site web — vous obtiendrez un bloc de texte Base64. Ce texte est le résultat d'un pipeline spécifique en trois étapes défini dans les propres Normes de Mise en Œuvre des Fonctionnalités de Sécurité de la Facture Électronique de ZATCA :
- Construire la structure TLV. Chaque champ — nom du vendeur, numéro de TVA, horodatage, etc. — est encodé comme Balise + Longueur + Valeur : un numéro de balise d'1 octet, une longueur d'1 octet (la longueur en octets de la valeur, pas son nombre de caractères), et la valeur elle-même en octets UTF-8. Chaque champ est concaténé, balise après balise, en un seul tableau d'octets continu.
- Encoder le tableau d'octets en Base64. Toute la structure TLV, en octets bruts, est convertie en une seule chaîne Base64. ZATCA limite cette chaîne à 700 caractères.
- Afficher la chaîne Base64 comme code QR. Ce n'est qu'à cette dernière étape que le texte devient réellement le carré noir et blanc imprimé sur le reçu.
Voici le cœur de cette logique en JavaScript — la même fonction qui alimente le générateur plus bas sur cette page :
function buildTLV(tag, value) {
const bytes = new TextEncoder().encode(value); // never value.length
const out = new Uint8Array(2 + bytes.length);
out[0] = tag;
out[1] = bytes.length; // byte length — critical for Arabic text
out.set(bytes, 2);
return out;
}
// tags 1-5, concatenated, then Base64-encoded
const tlv = concat([buildTLV(1, sellerName), buildTLV(2, vatNumber),
buildTLV(3, timestamp), buildTLV(4, total), buildTLV(5, vatAmount)]);
const qrPayload = base64Encode(tlv);
Ce seul commentaire — never value.length — mérite qu'on s'y attarde. La propriété .length d'une chaîne JavaScript compte des unités de code UTF-16, pas des octets. « Bobs Records » a par hasard le même nombre de caractères et d'octets en ASCII pur, donc une implémentation négligente fonctionne bien en test puis corrompt silencieusement chaque facture avec un nom de vendeur arabe en production, car les caractères arabes prennent 2 octets chacun en UTF-8. Nous y reviendrons dans la section des erreurs courantes, car c'est l'une des causes réelles les plus fréquentes de rejet d'un code QR.
Phase 1 vs Phase 2 : Ce qui a Vraiment Changé
Il est facile de considérer la Phase 2 comme « la Phase 1 plus quelques champs supplémentaires ». En réalité, c'est une architecture différente. La Phase 1 vous demandait de générer un document correct. La Phase 2 vous demande de générer un document correct et de le prouver à ZATCA en temps réel, lié à une identité cryptographique ancrée dans le matériel ou le logiciel.
| Aspect | Phase 1 — Génération | Phase 2 — Intégration |
|---|---|---|
| Effectif à partir de | 4 décembre 2021 — tous les contribuables à la fois | 1er janvier 2023 — déployé par vagues (Vague 24 en vigueur depuis le 30 juin 2026) |
| Format de facture | Tout système électronique conforme ; aucune facture manuscrite ou sur tableur | XML UBL 2.1, ou PDF/A-3 avec le XML intégré — rien d'autre n'est admis |
| Contenu du code QR | 5 balises TLV : nom du vendeur, numéro de TVA, horodatage, total, montant de TVA | 9 balises TLV : les mêmes 5, plus hash XML, signature ECDSA, clé publique, et cachet cryptographique |
| Connexion système | Autonome — peut fonctionner entièrement hors ligne | Une connexion API en direct à la plateforme Fatoora de ZATCA est obligatoire |
| Validation gouvernementale | Aucune — auto-générée et auto-stockée uniquement | B2B : dédouanée par ZATCA avant d'atteindre l'acheteur. B2C : déclarée à ZATCA sous 24 heures |
| Chaînage des factures | Non requis | Requis : une Valeur de Compteur de Facture séquentielle (ICV) et un hash de la Facture Précédente (PIH), afin qu'aucune facture ne puisse être supprimée ou insérée silencieusement |
| Identité cryptographique | Aucune | Requis : un Identifiant de Cachet Cryptographique (CSID) émis à votre solution de facturation par ZATCA |
B2B vs B2C : Quelles Règles s'Appliquent à Vous
La réglementation ZATCA reconnaît deux types de factures, et les confondre est l'un des moyens les plus rapides de se retrouver hors conformité ou, pour un acheteur, incapable de récupérer une TVA qu'il pensait pouvoir réclamer.
Facture Fiscale Standard (B2B / B2G) : utilisée entre deux parties enregistrées à la TVA. Elle doit indiquer le nom et le numéro de TVA du vendeur et de l'acheteur, une ventilation ligne par ligne, et les montants de TVA par ligne. Sous la Phase 2, elle suit le modèle de Dédouanement : votre système soumet la facture à la plateforme Fatoora de ZATCA et doit recevoir une approbation — incluant un cachet cryptographique — avant que la facture ne soit légalement autorisée à atteindre l'acheteur. Un code QR sur une facture standard est optionnel dans la plupart des cas, bien que de nombreux ERP en incluent un quand même.
Facture Fiscale Simplifiée (B2C) : utilisée au point de vente, typiquement lorsque l'acheteur n'est pas enregistré à la TVA ou n'est pas connu au moment de la vente — un reçu de détail en est l'exemple classique. Elle suit le modèle de Déclaration : la facture est émise au client immédiatement, et votre système la déclare à ZATCA dans les 24 heures suivantes. Un code QR est obligatoire sur chaque facture simplifiée, et c'est la version que la plupart des gens désignent en disant « code QR ZATCA ».
Deux seuils à connaître : une facture fiscale standard est légalement requise dès qu'une fourniture B2B dépasse 1 000 SAR (en dessous, une facture simplifiée est acceptable même entre deux entreprises), et le numéro de TVA du vendeur peut être entièrement omis d'une facture simplifiée si la valeur totale de la facture est inférieure à 1 000 SAR.
La distinction va bien au-delà du formatage. Comme indiqué dans la section sur la récupération de la TVA ci-dessous, seule une facture fiscale standard permet une déduction de TVA en amont — une facture simplifiée, aussi parfaitement formaté que soit son code QR, généralement ne le permet pas.
Les 9 Balises TLV, Expliquées
Chaque champ que ZATCA peut exiger dans un code QR a un numéro de balise fixe. Les balises 1–5 sont obligatoires depuis la Phase 1 ; les balises 6–9 ont été ajoutées pour la Phase 2.
| Balise | Champ | Requis Depuis | Notes |
|---|---|---|---|
| 1 | Nom du Vendeur | Phase 1 | Doit apparaître en arabe sur la facture elle-même ; un nom bilingue convient |
| 2 | Numéro de TVA du Vendeur | Phase 1 | Exactement 15 chiffres, tels qu'émis par ZATCA lors de l'enregistrement |
| 3 | Horodatage de la Facture | Phase 1 | Format ISO 8601, ex. 2026-06-30T14:05:00Z |
| 4 | Total de la Facture (TVA incl.) | Phase 1 | Le montant final payé par le client |
| 5 | Total de TVA | Phase 1 | La part de TVA du total ci-dessus |
| 6 | Hash XML de la Facture | Phase 2 | Hash SHA-256 de la facture XML signée |
| 7 | Signature ECDSA | Phase 2 | Signature numérique sur le hash, créée avec la clé privée du contribuable |
| 8 | Clé Publique ECDSA | Phase 2 | La moitié publique de la paire de clés liée au certificat de votre CSID |
| 9 | Signature du Cachet Cryptographique | Phase 2 | Factures simplifiées uniquement — émis par l'autorité de certification technique propre de ZATCA après déclaration |
L'ordre de génération compte. Construisez et signez cryptographiquement la facture XML en premier. Ce n'est qu'ensuite que vous calculez le hash, extrayez la signature et assemblez le QR. Générer le QR avant la signature produit des balises 6–9 vides ou obsolètes — une erreur étonnamment fréquente, et un rejet immédiat.
Ce que les Chefs d'Entreprise Doivent Réellement Faire
Une fois les acronymes retirés, la conformité se résume à cinq étapes. Voici le chemin de « non enregistré » à « en production sur Fatoora ».
1. Enregistrez-vous à la TVA
Obligatoire dès que vos fournitures imposables annuelles dépassent 375 000 SAR. Entre 187 500 SAR et ce seuil, l'enregistrement est volontaire — et souvent avantageux, car il vous permet de récupérer la TVA en amont sur vos propres achats. Les entreprises non-résidentes effectuant des fournitures imposables dans le Royaume doivent s'enregistrer indépendamment de leur chiffre d'affaires.
2. Obtenez un système conforme à la Phase 1, puis vérifiez votre vague
Toute entreprise enregistrée à la TVA a déjà besoin aujourd'hui de la capacité de génération de Phase 1. La Phase 2 arrive selon un calendrier : ZATCA regroupe les contribuables en vagues par revenu annuel imposable et notifie chaque groupe au moins six mois avant son échéance. Les seuils se sont resserrés rapidement — la Vague 1 couvrait un chiffre d'affaires supérieur à 3 milliards de SAR ; la Vague 24, en vigueur depuis hier, couvre un chiffre d'affaires supérieur à 375 000 SAR. Si vous n'avez pas encore été notifié, mieux vaut vérifier directement auprès de ZATCA plutôt que de supposer être hors périmètre.
3. Complétez l'intégration CSID sur le portail Fatoora
C'est le cœur technique de la Phase 2, et il suit une séquence fixe en cinq étapes :
- Connectez-vous au portail Fatoora en utilisant l'authentification unique via votre compte contribuable ZATCA.
- Générez un Mot de Passe à Usage Unique (OTP) pour chaque appareil ou unité de solution que vous souhaitez intégrer.
- Soumettez une Demande de Signature de Certificat (CSR) avec l'OTP, et recevez un CSID de Conformité — un certificat bac à sable.
- Réussissez les contrôles de conformité en soumettant des factures standard et simplifiées d'exemple via le bac à sable pour validation par ZATCA.
- Recevez votre CSID de Production — valide environ un an et renouvelable avant expiration — et passez en production sur le véritable point de terminaison Fatoora.
4. Testez le processus de bout en bout avant votre échéance
ZATCA fournit un Portail de Simulation Fatoora spécifiquement pour que vous puissiez répéter l'intégration, le dédouanement et la déclaration sans toucher aux données de production. La pratique du secteur est de terminer cela au moins un mois avant l'échéance de votre vague, car les problèmes de certificats et les factures d'exemple rejetées sont bien moins coûteux à corriger avant le début de l'application qu'après.
5. Conservez les registres — plus longtemps que vous ne le pensez
Les factures, notes et registres justificatifs doivent être conservés pendant un minimum de 6 ans à compter de la fin de la période fiscale concernée — étendu à 11 ans pour tout ce qui concerne l'immobilier. Les registres doivent être conservés en arabe (le bilingue convient) et stockés à l'intérieur de l'Arabie saoudite.
Ce que coûte réellement la non-conformité
Le cadre de pénalités de ZATCA évolue selon l'infraction, et les amendes augmentent en cas de récidive. Les chiffres publiés incluent :
| Infraction | Pénalité |
|---|---|
| Enregistrement tardif à la TVA | 10 000 SAR |
| Ne pas émettre ou archiver une facture électronique conforme | À partir de 5 000 SAR |
| Code QR manquant ou non conforme | Jusqu'à 10 000 SAR par facture |
| Suppression ou modification d'une facture après émission | À partir de 10 000 SAR |
| Intégration non conforme du dédouanement/de la déclaration en temps réel | 5 000 – 50 000 SAR par infraction |
Les chiffres ci-dessus proviennent de la structure de pénalités publiée par ZATCA et de synthèses de conformité tierces à mi-2026 ; confirmez toujours les montants actuels directement sur zatca.gov.sa, car les barèmes de pénalités sont révisés périodiquement.
Vérifier un Code QR et Comment la TVA est Réellement Récupérée
Vérifier un code QR
Comme la charge utile du QR est du texte Base64 brut, tout scanner QR générique peut techniquement la lire — mais lire n'est pas la même chose que valider. Pour confirmer réellement qu'une facture est authentique, décoder la structure TLV, et vérifier son cachet cryptographique par rapport à la chaîne de certificats de ZATCA, utilisez l'application TVA propre de ZATCA (disponible sur iOS et Android) ou le service de validation des factures électroniques sur zatca.gov.sa. Cette distinction explique exactement pourquoi un code QR qui « semble correct » à l'écran peut quand même échouer à un scan réel.
Comment une entreprise récupère réellement la TVA
C'est la partie que les explications générales omettent généralement, et c'est la réponse à la question qu'on nous pose le plus : avoir un code QR sur une facture signifie-t-il que je peux récupérer la TVA ? Pas à lui seul, et pas toujours.
La TVA saoudienne fonctionne selon un système de facture-crédit : une entreprise enregistrée à la TVA collecte la TVA en aval sur ce qu'elle vend et peut la compenser avec la TVA en amont payée sur ses propres achats, ne reversant que la différence à ZATCA. Pour exercer ce droit de déduction, le règlement d'application (Article 53(5)) exige que l'entreprise détienne une Facture Fiscale valide — spécifiquement une facture fiscale standard indiquant les numéros de TVA des deux parties, la date, une description de la fourniture, et le montant de la TVA. Une facture simplifiée (type B2C), code QR inclus, ne permet généralement pas une réclamation de TVA en amont, car elle n'est pas du tout tenue d'identifier l'acheteur.
Sous la Phase 2, il existe une barrière supplémentaire : selon la Résolution de Mise en Œuvre de la Facturation Électronique de ZATCA, une facture électronique doit avoir été réellement Dédouanée par ou Déclarée à ZATCA pour être utilisable comme preuve d'une déduction de TVA en amont — une facture que votre fournisseur a générée mais jamais soumise à Fatoora ne compte pas, peu importe sa correction apparente.
Quelques règles pratiques du côté de l'acheteur :
- Moment : le droit à déduction naît dans la période fiscale où la fourniture est reçue et la facture fiscale émise — pas au moment du paiement ni de la consommation des biens.
- Fréquence de déclaration : les entreprises dont le chiffre d'affaires annuel dépasse 40 millions de SAR déposent des déclarations de TVA mensuellement ; les autres le font trimestriellement.
- Conservation : conservez la facture pendant 6 ans (11 pour les fournitures liées à l'immobilier) — ZATCA peut la demander lors d'un audit longtemps après.
- Langue : la facture doit comporter les informations requises en arabe. ZATCA peut, à sa discrétion, accepter une preuve alternative si la facture d'un fournisseur est incomplète, mais le fournisseur reste tenu d'émettre une facture fiscale arabe correcte.
En résumé : le code QR prouve que le reçu est authentique. Que la TVA qu'il contient soit récupérable est une question distincte, à laquelle répond le type de facture, et non le simple fait qu'elle porte ou non un code QR.
Erreurs Courantes du Code QR et Comment les Corriger
La plupart des signalements de « code QR invalide » remontent à un petit ensemble récurrent d'erreurs d'implémentation. Par ordre approximatif de fréquence :
- Utiliser la longueur en caractères au lieu de la longueur en octets. La balise Longueur doit être la longueur en octets UTF-8 de la valeur. L'arabe, et tout texte non-ASCII, prend plus d'octets que de caractères — une erreur ici corrompt silencieusement chaque nom de vendeur arabe dans la facture qui suit.
- Générer le code QR avant de signer le XML. Les balises 6–9 dépendent du document final signé. Construisez le QR en premier et ces balises se retrouvent vides, obsolètes, ou construites à partir d'un hash qui ne correspond plus à la facture réellement reçue par ZATCA.
- Encodage en ASCII uniquement. Certaines bibliothèques anciennes utilisent par défaut Latin-1 ou Windows-1252. ZATCA exige un UTF-8 strict partout — tout le reste échoue dès qu'une valeur contient un caractère arabe, une apostrophe typographique ou certains symboles.
- Omettre le nom du vendeur en arabe. Un nom commercial uniquement en anglais est un raccourci courant pour les marques internationales, mais la facture imprimée — et par extension les données derrière — doit comporter un nom arabe.
- Valeurs dépassant 255 octets. L'octet de Longueur ne peut représenter que 0 à 255. Un nom d'entité juridique inhabituellement long ou un champ étonnamment verbeux peut le dépasser — validez les longueurs de champs avant l'encodage, pas après l'échec de scan d'un QR.
- Confondre les types de facture. La Balise 9 (le cachet cryptographique propre de ZATCA) s'applique aux factures simplifiées déclarées après coup ; les factures standard sont dédouanées via un flux différent. Copier la structure de balises d'un type de facture sur l'autre produit un QR qui semble plausible mais échoue à la validation.
- Croire que « ça ressemble à un code QR » signifie qu'il est valide. Une structure TLV malformée peut quand même s'afficher comme un code QR scannable et visuellement normal — la seule façon de savoir s'il est correct est de le décoder et de vérifier les champs, ou de le scanner avec l'application de validation propre de ZATCA.
Essayez : Générateur Gratuit de Code QR ZATCA
Remplissez les champs ci-dessous et observez la structure TLV, la charge utile Base64, et le code QR se mettre à jour en direct. Tout fonctionne en JavaScript dans votre navigateur — rien de ce que vous saisissez n'est envoyé où que ce soit. Il est préchargé avec des données d'exemple (incluant un nom de vendeur arabe, pour montrer en action la gestion de la longueur en octets UTF-8 expliquée plus haut) afin que vous puissiez voir un code fonctionnel immédiatement.