Aller au contenu
Qelvyn
Facturation électronique11 août 2026

Comment tester un fichier Factur-X : le guide pas-à-pas pour détecter les erreurs XML cachées dans un PDF/A-3

Extraire, valider et contrôler un fichier Factur-X en 6 étapes : PDF/A-3, XML CII, profil, XSD, Schematron EN 16931. Avec les commandes et outils.

Un fichier Factur-X a une particularité vicieuse : il peut être parfaitement lisible à l'écran et totalement invalide pour une machine. Le format combine un PDF/A-3 (la partie visible) et un fichier XML embarqué nommé factur-x.xml, au format UN/CEFACT CII (la partie que lisent les plateformes et les logiciels comptables). Quand le XML est cassé, personne ne le voit à l'œil nu. La facture semble normale, part chez le client, et revient avec un statut "rejetée" trois jours plus tard.

Voici comment tester un fichier de bout en bout, avec des outils gratuits.

Étape 1 : vérifier la conformité PDF/A-3

Le conteneur doit être un PDF/A-3 valide. C'est la première cause de rejet, car il suffit de rouvrir et réenregistrer le fichier dans un éditeur classique pour casser la conformité ou faire disparaître la pièce jointe. L'outil de référence est veraPDF, un validateur open source :

verapdf facture.pdf

Le rapport signale les polices non embarquées, les métadonnées incohérentes et les violations du standard. Un PDF/A-3 non conforme invalide l'ensemble, même si le XML est irréprochable.

Étape 2 : extraire le XML embarqué

Avec poppler-utils, une commande suffit :

pdfdetach -saveall facture.pdf

En Python, avec pikepdf :

import pikepdf

# Extraction de la pièce jointe factur-x.xml
with pikepdf.open("facture.pdf") as pdf:
    piece_jointe = pdf.attachments["factur-x.xml"]
    donnees = piece_jointe.get_file().read_bytes()

with open("factur-x.xml", "wb") as sortie:
    sortie.write(donnees)

Si l'extraction échoue, vous tenez déjà votre diagnostic : pièce jointe absente, mal nommée, ou relation d'incorporation (AFRelationship) incorrecte.

Étape 3 : identifier le profil déclaré

Le profil se lit dans l'élément GuidelineSpecifiedDocumentContextParameter du XML, sous forme d'URN. Ce que vous devez y trouver :

ProfilURN
MINIMUMurn:factur-x.eu:1p0:minimum
BASIC WLurn:factur-x.eu:1p0:basicwl
BASICurn:cen.eu:en16931:2017#compliant#urn:factur-x.eu:1p0:basic
EN 16931urn:cen.eu:en16931:2017
EXTENDEDurn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended

Ce profil détermine quel schéma et quelles règles appliquer aux étapes suivantes. Un URN inconnu ou mal orthographié est une erreur en soi.

Étape 4 : valider contre le schéma XSD

Les schémas XSD officiels sont fournis avec la spécification Factur-X (version 1.0.7 au moment où nous écrivons), téléchargeable auprès du FNFE-MPE. La validation vérifie la structure : éléments obligatoires, ordre, types de données.

xmllint --noout --schema Factur-X_EN16931.xsd factur-x.xml

Un XML peut passer cette étape et échouer à la suivante. Le XSD contrôle la grammaire, pas le sens.

Étape 5 : passer les règles métier Schematron

La norme EN 16931 définit des règles de cohérence, identifiées par des codes BR : BR-CO-15 impose par exemple que le total TTC soit égal au total HT plus la TVA. Ces règles sont publiées sous forme de fichiers Schematron sur le dépôt GitHub ConnectingEurope/eInvoicing-EN16931. L'option la plus simple reste Mustangproject, un outil open source qui enchaîne toutes les vérifications d'un coup, PDF compris :

java -jar Mustang-CLI.jar --action validate --source facture.pdf

Le rapport XML produit liste chaque règle violée avec son code. C'est ce niveau de contrôle qui attrape les erreurs invisibles : un arrondi de TVA faux de 1 centime, une date au mauvais format, un code de catégorie de TVA hors référentiel.

Étape 6 : croiser le XML, le XMP et le visuel

Trois cohérences à vérifier pour finir. Les métadonnées XMP du PDF déclarent un profil (fx:ConformanceLevel) qui doit correspondre à l'URN du XML. Le nom de fichier déclaré (fx:DocumentFileName) doit être factur-x.xml. Et les montants affichés sur le PDF doivent correspondre aux montants du XML : en cas de divergence, c'est le XML qui fait foi pour le traitement, mais la divergence elle-même est un motif de refus et un signal d'alerte fraude.

Les erreurs cachées les plus courantes

SymptômeCause probableOù la détecter
La facture s'affiche mais le client la rejetteXML invalide ou absentÉtapes 2 et 4
Rejet avec un code BR-COTotaux ou ventilation TVA incohérentsÉtape 5
Rejet après passage dans un outil de signature ou de compressionPDF/A-3 cassé au réenregistrementÉtape 1
Profil BASIC déclaré, données EXTENDED présentesGénérateur mal configuréÉtapes 3 et 6
Rejet chez certains clients seulementXMP et XML incohérentsÉtape 6

Questions fréquentes

Puis-je tester un Factur-X sans installer d'outil ?

Oui, des validateurs en ligne existent ; vérifiez qu'ils enchaînent les six contrôles ci-dessus et n'archivent pas les fichiers déposés. Pour un test ponctuel c'est suffisant. Pour un flux régulier, préférez un contrôle automatisé en local ou via API.

La validation XSD suffit-elle à garantir la conformité ?

Non. Le XSD vérifie la structure, le Schematron vérifie la cohérence métier, et veraPDF vérifie le conteneur. Les trois niveaux sont nécessaires, et la plupart des rejets en production viennent du deuxième.

Que faire quand un fichier échoue ?

Corrigez à la source, dans l'outil qui génère la facture, jamais dans le fichier final. Éditer un Factur-X à la main casse presque toujours autre chose.

Contrôler chaque facture à la main ne tient pas à l'échelle

Qelvyn conçoit les outils internes que les cabinets comptables et les entreprises utilisent pour valider automatiquement leurs factures Factur-X avant émission ou réception. Si votre contrôle de conformité a dépassé ce qu'un tableur peut gérer, décrivez-nous votre situation et nous vous dirons franchement si un système est rentable.