Aller au contenu
Cercle IA Tech · Extraction Un site du réseau Cercle IA Tech

Guide

Lire le XML d'une facture Factur-X, sans IA

Une facture Factur-X contient ses données en XML : profils, extraction avec une bibliothèque Python, contrôles et repli sur l'extraction par IA.

Mis à jour le

Une facture Factur-X est un PDF lisible par une personne qui embarque un fichier XML contenant les mêmes données, au format Cross Industry Invoice (CII). Pour la lire, il n'y a rien à deviner : on extrait le XML du PDF et on lit ses champs, sans OCR ni intelligence artificielle. C'est la voie la plus fiable pour les factures reçues dans ce format, et elle évite le coût et le risque d'erreur d'une extraction. Page mise à jour le 15/11/2026.

Ce qu'est Factur-X

Le FNFE-MPE, qui publie le standard, le décrit comme un standard franco-allemand de facture électronique « mixte » : un PDF pour l'humain, des données structurées pour la machine. C'est la première mise en œuvre de la norme sémantique européenne EN 16931, publiée par la Commission européenne le 16/10/2017. Le même format porte le nom de ZUGFeRD en Allemagne. La page annonce la version Factur-X 1.09.2 et ZUGFeRD 2.5.2, publiée le 04/08/2026. La syntaxe XML est celle de la norme UN/CEFACT CII (D22B) ; le PDF est un PDF/A-3, le format d'archivage qui autorise les pièces jointes.

Les profils : ce que le XML contient

Cinq profils existent, du plus léger au plus complet :

Profil Contenu
MINIMUM les données minimales exigées par la plateforme Chorus Pro
BASIC WL l'en-tête et le pied de facture les plus demandés par les acheteurs
BASIC BASIC WL, plus les données essentielles des lignes
EN 16931 tous les éléments définis par la norme européenne
EXTENDED EN 16931 plus des données supplémentaires (profil encore en cours de définition d'après la page)

Le FNFE-MPE cite aussi XRECHNUNG (Allemagne) et EXTENDED-CTC-FR (France), ce dernier étant un sous-ensemble d'EXTENDED. La bibliothèque Python présentée plus bas précise que le niveau extended-ctc-fr est du XML CII seulement, et non un niveau Factur-X.

Conséquence pour vous : le profil décide de ce que vous pouvez lire. Une facture MINIMUM ne contient pas les lignes de détail ; si vos traitements en ont besoin (rapprochement avec une commande, ventilation comptable par ligne), il faut soit exiger au minimum le profil BASIC de vos fournisseurs, soit lire les lignes dans le PDF avec une extraction classique : voir API d'extraction de factures.

Extraire le XML

La bibliothèque Python factur-x, publiée sous licence BSD par Akretion, sait « extraire le fichier XML d'un PDF Factur-X ou Order-X ». Deux fonctions sont documentées dans son historique des versions : get_xml_from_pdf() (Factur-X et Order-X) et get_facturx_xml_from_pdf() (Factur-X seulement). En ligne de commande, l'outil facturx-pdfextractxml fait la même extraction. Installation indiquée : pip3 install --upgrade factur-x.

Un détail utile : le nom du fichier XML embarqué varie selon les versions du standard et les émetteurs. L'historique de la bibliothèque mentionne des variantes de nom (zugferd-invoice.xml au lieu de ZUGFeRD-invoice.xml dans la norme) et une comparaison du nom sans tenir compte de la casse. Ne cherchez donc pas un nom en dur dans votre code : passez par la fonction de la bibliothèque, qui accepte des noms qui ne suivent pas strictement la norme.

Contrôler le XML

La bibliothèque vérifie un fichier Factur-X, Order-X ou UBL contre le schéma XML officiel (XSD) et contre les règles de gestion (schematron). Faites ces deux contrôles avant d'accepter une facture : un XML qui ne passe pas le schéma est rejeté, comme on rejetterait un JSON qui ne respecte pas son schéma.

Ajoutez ensuite vos propres contrôles : total des lignes égal au total de la facture, fournisseur connu, doublon de numéro. La bibliothèque sait aussi générer du XML à partir d'un dictionnaire de balises EN 16931 (par exemple BT-1 ou BG-25), ce qui sert si vous émettez des factures.

Quand le PDF et le XML ne disent pas la même chose

Le PDF visible et le XML embarqué sont deux représentations qu'un logiciel de facturation doit tenir identiques. Rien ne vous garantit qu'elles le soient toujours : un écart (total, date) est un signal à traiter. Notre recommandation : lisez le XML comme source, comparez 2 ou 3 champs clés au texte du PDF, et envoyez en relecture toute facture qui diverge. La logique de relecture est dans seuil de confiance et validation humaine.

Le plan de repli

Tous vos fournisseurs n'enverront pas du Factur-X : il y aura aussi des PDF classiques, des scans, des photos. Prévoyez un aiguillage :

  1. le PDF contient-il un fichier XML Factur-X ? Si oui, lecture du XML, contrôles, fin ;
  2. sinon, extraction par un modèle spécialisé ou un LLM, puis validation : voir LLM ou modèle spécialisé et schéma JSON d'extraction.

Pour réduire le volume du second flux, demandez à vos fournisseurs d'envoyer des factures électroniques ; pour les bons de commande, un format voisin existe, Order-X, pris en charge par la même bibliothèque : voir extraire un bon de commande. Pour automatiser sans code la réception et le classement, voir automatiser la saisie des factures.

Questions fréquentes

Factur-X et ZUGFeRD, est-ce la même chose ?

Oui. Le FNFE-MPE indique que Factur-X est le même standard que ZUGFeRD 2.5 et que les deux sont techniquement identiques ; ZUGFeRD est le nom allemand.

Faut-il de l'IA pour lire une facture Factur-X ?

Non. Le fichier PDF embarque déjà un XML de type CII : on l'extrait et on le lit comme n'importe quelles données structurées, sans OCR ni modèle de langage.

Sources

Pages consultées pour écrire cet article :

  1. https://fnfe-mpe.org/factur-x/
  2. https://github.com/akretion/factur-x
  3. https://raw.githubusercontent.com/akretion/factur-x/master/README.rst

À lire aussi