Cet article est le guide technique de référence sur le format Factur-X. Il s'adresse aux développeurs, intégrateurs, éditeurs de logiciels et experts-comptables techniques qui doivent comprendre la structure interne d'un fichier Factur-X, choisir le bon profil, valider un XML contre la norme EN 16931, et corriger les erreurs les plus courantes. Si vous cherchez un guide non-technique sur la réforme, commencez par notre guide ultime facturation électronique 2026.

Anatomie d'un Factur-X : PDF/A-3 + XML CII

Un fichier Factur-X est un PDF hybride : un PDF lisible par l'humain qui contient, en pièce jointe intégrée, un fichier XML structuré lisible par la machine. C'est la combinaison des deux qui fait le Factur-X — ni l'un ni l'autre seul ne suffit.

  • La couche PDF : un document PDF/A-3 (ISO 19005-3), le seul sous-ensemble de PDF qui autorise les pièces jointes intégrées. Le PDF contient la représentation visuelle de la facture — c'est ce que votre client voit quand il ouvre le fichier.
  • La couche XML : un fichier nommé factur-x.xml (ou zugferd-invoice.xml pour ZUGFeRD), embarqué dans le PDF. Ce XML est conforme à la syntaxe UN/CEFACT Cross-Industry Invoice (CII). C'est ce que la PA et l'administration lisent automatiquement.
  • Les métadonnées XMP : des métadonnées intégrées au PDF qui déclarent le profil Factur-X utilisé (fx:ConformanceLevel). Elles doivent correspondre au profil déclaré dans le XML — une incohérence provoque un rejet.
💡 Pourquoi hybride ? Le format hybride résout un problème fondamental : les grandes entreprises veulent du XML pur pour l'automatisation, les TPE veulent un PDF qu'elles peuvent ouvrir et lire. Factur-X satisfait les deux — le même fichier est lisible par un humain ET traitable par une machine.

Les 5 profils : Minimum → Extended

Factur-X définit 5 profils qui déterminent le niveau de détail du XML. Chaque profil est cumulatif : il inclut les champs du profil inférieur et en ajoute. Chacun a son propre schéma XSD et ses règles Schematron.

ProfilLignes de factureNb de champsCas d'usageGuidelineID
MINIMUMNon~25Strict minimum Chorus Pro. Équivalent OCR. En voie de disparition — ne sera pas accepté à terme.urn:factur-x.eu:1p0:minimum
BASIC WLNon~45Entête + pied de facture sans lignes. Toléré au démarrage de la réforme. Pas de détail ligne → automatisation limitée.urn:factur-x.eu:1p0:basicwl
BASICOui~60Premier profil avec lignes. Nom article, quantité, prix unitaire, TVA par ligne. Bon compromis pour les TPE.urn:factur-x.eu:1p0:basic
EN 16931Oui~160Profil complet norme européenne. Remises/charges multi-niveaux, références commande, périodes. Recommandé.urn:cen.eu:en16931:2017
EXTENDEDOui~200+EN 16931 + données sectorielles (douane, transport, incoterms). Inclut le profil EXTENDED-CTC-FR spécifique France.urn:cen.eu:en16931:2017#compliant#...
⚠️ MINIMUM et BASIC WL ne seront pas acceptés indéfiniment. L'administration a indiqué que ces profils sans lignes seront tolérés au démarrage, mais leur acceptation sera limitée dans le temps. Construisez dès maintenant au minimum en BASIC, idéalement en EN 16931.

Quel profil choisir ? Arbre de décision

  • Votre destinataire a-t-il besoin des lignes de facture ? Si oui → BASIC minimum. Si non (cas rare, flux hybride EDI) → BASIC WL toléré temporairement.
  • Avez-vous des remises/charges au niveau document ? Si oui → EN 16931 obligatoire (BASIC ne gère pas les remises/charges document).
  • Avez-vous des références de commande, des périodes de facturation, des informations de livraison détaillées ? Si oui → EN 16931.
  • Avez-vous des besoins sectoriels (douane, transport, incoterms, sous-lignes) ? Si oui → EXTENDED ou EXTENDED-CTC-FR.
  • En cas de doute : choisissez EN 16931. C'est le profil recommandé par la FNFE-MPE et celui qui assure la meilleure interopérabilité avec toutes les PA.
💡 Le profil EXTENDED-CTC-FR est une variante du profil EXTENDED définie par la FNFE-MPE pour les spécificités françaises. Il ajoute des données pour les cas d'usage nationaux et assouplit les règles d'arrondi (tolérance de 1 centime × nombre de lignes). Si vous opérez exclusivement en France avec des besoins complexes (BTP, multi-taux), c'est le profil le plus adapté.

Structure XML CII : l'arbre complet commenté

Le XML Factur-X suit la syntaxe UN/CEFACT Cross-Industry Invoice (CII), version D22B (depuis Factur-X 1.08). Voici l'arbre simplifié avec les nœuds principaux :

Nœud XMLContenuBT associés (exemples)
ExchangedDocumentContextProfil (GuidelineID), identifiant processusBT-24 (profil), BT-23 (processus)
ExchangedDocumentNuméro de facture, date, typeBT-1 (n° facture), BT-2 (date), BT-3 (type : 380=facture, 381=avoir)
SupplyChainTradeTransactionConteneur principal de la transaction
  ├ IncludedSupplyChainTradeLineItem[]Lignes de facture (à partir du profil BASIC)BT-126 (ID ligne), BT-129 (qté), BT-131 (montant net), BT-146 (prix), BT-153 (nom article)
  ├ ApplicableHeaderTradeAgreementVendeur, acheteur, références commandeBG-4 (vendeur), BG-7 (acheteur), BT-13 (n° commande)
  ├ ApplicableHeaderTradeDeliveryLivraison (adresse, date)BG-13 (adresse livraison), BT-72 (date livraison)
  └ ApplicableHeaderTradeSettlementPaiement, TVA, totauxBT-81 (moyen paiement), BG-23 (détail TVA), BG-22 (totaux)
    ├ ApplicableTradeTax[]Ventilation TVA par catégorie/tauxBT-116 (base HT), BT-117 (montant TVA), BT-118 (taux), BT-151 (catégorie)
    └ SpecifiedTradeSettlement
HeaderMonetarySummation
Totaux de la factureBT-106 (total HT lignes), BT-109 (total HT), BT-110 (total TVA), BT-112 (total TTC), BT-115 (montant à payer)
⚡ Offert

Testez la conformité de votre Factur-X

Validation XSD + Schematron EN 16931 en 30 secondes. Détection automatique des erreurs BR-* les plus courantes — le même contrôle que Chorus Pro.

Lancer la validation →
Offert · Sans inscription · Sans CB

Validation : XSD vs Schematron (les 2 passes)

La validation d'un Factur-X n'est pas un processus unique — c'est une chaîne de deux passes indépendantes, chacune avec sa propre logique.

Passe 1 : XSD (structure)

Le XML Schema Definition (XSD) vérifie que le document est bien formé : balises correctement nommées, types de données respectés, structure arborescente conforme au modèle CII. Un fichier XSD-valide peut être parsé sans erreur — mais cela ne garantit pas qu'il est sémantiquement correct.

Passe 2 : Schematron (règles métier)

Le Schematron exprime des règles métier sous forme d'assertions XPath. C'est là que les vraies vérifications ont lieu : cohérence arithmétique (total HT = somme des lignes), présence conditionnelle des champs (SIREN obligatoire si client français), codes valides (devise ISO 4217, code TVA UNTDID 5305).

Les règles Schematron sont nommées BR-* (Business Rule). Les plus critiques : BR-CO-* (cohérence calculs), BR-S-* (TVA), BR-CL-* (listes de codes). Un validateur sérieux distingue les erreurs fatales (flag="fatal") des avertissements (flag="warning").

⚠️ Le jeu de Schematron doit correspondre à votre profil ET à votre version. Factur-X 1.08 utilise des schémas différents de la 1.07. Des factures valides hier peuvent être invalides avec une nouvelle version. Utilisez toujours les schémas officiels de la FNFE-MPE, ou un validateur à jour comme le validateur FactureValide.

Les 10 erreurs BR-* les plus fréquentes (et comment les corriger)

ErreurChampCauseCorrection
BR-16BT-106Total HT ≠ somme des montants nets des lignesVérifier les remises/charges document (BG-20, BG-21) et les arrondis par ligne
BR-CO-10BT-110Total TVA ≠ somme des montants TVA par catégorieRecalculer la ventilation TVA. Attention aux arrondis multi-taux
BR-CO-15BT-112Total TTC ≠ total HT + total TVAVérifier BT-109 + BT-110 = BT-112. Arrondi au centime près
BR-01BT-24GuidelineID manquant ou incorrectVérifier l'URN du profil dans ExchangedDocumentContext
BR-02BT-1Numéro de facture videCertains ERP génèrent le XML avant attribution du numéro — retarder la génération
BR-08BG-25Aucune ligne de facture (profils BASIC+)Ajouter au moins une IncludedSupplyChainTradeLineItem
BR-CL-04BT-5Code devise absent ou non ISO 4217Utiliser « EUR » (pas « €» ni « Euros »)
BR-S-08BT-118Taux TVA incohérent avec la catégorie déclaréeSi catégorie « S » (standard), le taux doit être > 0. Si « E » (exonéré), taux = 0
BR-CL-01BT-3Code type document invalide380 = facture, 381 = avoir, 384 = facture rectificative, 389 = auto-facture
BR-CO-09BT-81Code moyen de paiement absent ou invalideUtiliser les codes UNTDID 4461 : 30 = virement, 58 = prélèvement SEPA, 48 = carte

Pour valider vos factures avant envoi et détecter ces erreurs, utilisez notre validateur gratuit.

PDF/A-3 : la couche conteneur (et ses pièges)

Le conteneur PDF doit respecter la norme PDF/A-3 (ISO 19005-3). C'est le seul sous-ensemble de PDF qui autorise les pièces jointes arbitraires — condition indispensable pour embarquer le XML.

  • Pas de chiffrement : un PDF/A-3 ne peut pas être protégé par mot de passe
  • Polices incorporées : toutes les polices utilisées doivent être embarquées dans le fichier (pas de dépendance externe)
  • Pas de JavaScript : les scripts actifs sont interdits en PDF/A
  • Métadonnées XMP obligatoires : le fx:ConformanceLevel doit correspondre au profil déclaré dans le GuidelineID du XML. Une incohérence = rejet
  • Le fichier XML doit être nommé factur-x.xml et déclaré comme pièce jointe dans le catalogue PDF avec la relation Data ou Alternative
💡 Outils de vérification PDF/A-3 : veraPDF (open source, référence) vérifie la conformité du conteneur. Mais il ne valide pas le XML intégré — pour ça, il faut un validateur Factur-X dédié. Les deux vérifications sont complémentaires.

Factur-X vs ZUGFeRD : même format, deux noms

Factur-X et ZUGFeRD sont le même format technique. Factur-X est le nom français, ZUGFeRD est le nom allemand. Les deux sont développés conjointement par la FNFE-MPE (France) et le FeRD (Allemagne) depuis 2017.

  • Factur-X 1.08 = ZUGFeRD 2.4 (version actuelle, janvier 2026)
  • Même spécification technique : même XML CII, mêmes profils, mêmes règles de validation
  • Seule différence : le nom du fichier XML intégré (factur-x.xml en France, zugferd-invoice.xml en Allemagne). Les validateurs acceptent les deux.
  • Interopérabilité totale : une facture Factur-X émise en France est lisible en Allemagne (et inversement) sans conversion

Si vous travaillez avec des clients allemands, autrichiens ou suisses, vous utilisez déjà le même format qu'eux — juste sous un nom différent.

Version 1.08 (janvier 2026) : ce qui change

La version 1.08, en vigueur depuis le 15 janvier 2026, apporte des évolutions importantes :

  • Base CII D22B : migration de D16B vers D22B (rétrocompatible). Plus de champs disponibles, meilleure gestion des sous-lignes.
  • Sous-lignes : gestion des lignes de sous-total, articles composites (kits/bundles). Essentiel pour la réforme française (factures de situation BTP, forfaits avec détail).
  • Nouveaux XSD et Schematron : 5 jeux de schémas mis à jour (un par profil). Les anciens schémas ne valident pas correctement les factures 1.08.
  • Alignement avec les artefacts de validation EN16931 : les règles Schematron sont synchronisées avec la dernière version de la norme européenne.
  • Rétrocompatibilité : les factures générées en 1.07 / ZUGFeRD 2.3 restent valides sous les schémas 1.08.

Pas envie de coder le XML CII vous-même ?

Déposez votre facture existante — l’IA génère la structure CrossIndustryInvoice conforme, profil EN 16931 minimum, avec toutes les balises obligatoires.

Profil Minimum → Extended
XML CII conforme
PDF/A-3 valide
Validation Schematron incluse
Convertir automatiquement →Offert · Sans inscription
Debug rapide

Erreur BR-CO-16 ou BR-S-08 sur votre Factur-X ?

Corrigez le champ XML fautif et régénérez sans tout reconstruire.

Corriger →

Questions fréquentes

Les 3 formats (Factur-X, UBL 2.1, CII) sont acceptés par la réforme. Factur-X est recommandé pour les TPE/indépendants car il reste lisible en PDF. UBL et CII pur sont plutôt utilisés par les grandes entreprises et à l'international. Voir guide réforme.
Aucun profil spécifique n'est imposé par la loi — tout profil conforme EN 16931 est accepté. MINIMUM et BASIC WL sont tolérés au démarrage mais ont vocation à disparaître. Recommandation : EN 16931 ou BASIC au minimum.
Ouvrez un Factur-X généré par votre logiciel, extrayez le fichier factur-x.xml, et cherchez la balise GuidelineSpecifiedDocumentContextParameter/ID. La valeur indique le profil. Ou utilisez notre validateur qui détecte automatiquement le profil.
C'est une extension du profil EXTENDED définie par la FNFE-MPE pour les spécificités françaises de la réforme. Il ajoute des champs nationaux et assouplit les règles d'arrondi (tolérance de 1 centime × nombre de lignes). Utile pour les factures complexes (BTP, multi-taux, prix TTC → HT).
Oui. Factur-X = nom français. ZUGFeRD = nom allemand. Même spécification technique (XML CII, mêmes profils, mêmes règles). Factur-X 1.08 = ZUGFeRD 2.4. Interopérabilité totale entre France et Allemagne.
XSD vérifie la structure (balises, types). Schematron vérifie les règles métier (calculs, cohérence, codes). Un fichier XSD-valide peut être Schematron-invalide. Il faut passer les deux validations — dans cet ordre.
1) Validez le fichier pour identifier l'erreur exacte (code BR-*). 2) Consultez le tableau des 10 erreurs ci-dessus. 3) Vérifiez la cohérence PDF/XML (même montants). 4) Vérifiez le profil XMP vs GuidelineID. Voir aussi guide validation EN 16931.
C'est l'erreur n°1. Le total HT (BT-106) doit égaler la somme exacte des montants nets des lignes (BT-131). Si vous avez des remises/charges au niveau document (BG-20/BG-21), elles doivent être intégrées dans le calcul. Vérifiez aussi les arrondis — un centime d'écart suffit à déclencher l'erreur en profil EN 16931 (tolérance en EXTENDED-CTC-FR).
La version 1.08 (en vigueur depuis le 15 janvier 2026). Base CII D22B, schémas XSD et Schematron mis à jour. Rétrocompatible avec la 1.07. Téléchargez les schémas officiels sur fnfe-mpe.org.
En théorie oui — les montants, dates, identifiants doivent être cohérents. En pratique, le PDF peut contenir des informations supplémentaires (logo, CGV, commentaires) absentes du XML. Mais les données financières et fiscales doivent être identiques. Une incohérence montants PDF ≠ XML sera détectée par les PA en réception.
Oui. Le PDF/A-3 autorise les pièces jointes multiples. Vous pouvez embarquer le factur-x.xml + un bon de livraison, un devis, un rapport — tant que le PDF reste conforme PDF/A-3. Attention à la taille du fichier et à la compatibilité avec votre PA.
Sur le site de la FNFE-MPE. Le pack Factur-X 1.08 contient les 5 XSD, les 5 Schematron, les listes de codes, les exemples XML et la documentation. Gratuit et open source.