Vérifier une facture Factur-X en ligne

un PDF pour les humains, avec une facture pour les machines à l’intérieur.

Déposez votre facture Factur-X ici. Le vérificateur sort le XML du PDF et le contrôle selon les règles de l’EN 16931 et, selon le profil, de XRechnung ou de Peppol. Tout se passe dans votre navigateur : le fichier n’est pas envoyé, et aucun compte n’est nécessaire.

Vérifier une facture

PDF Factur-X et ZUGFeRD, ainsi que les fichiers XML : CII, UBL et XRechnung.

Ce vérificateur a besoin de JavaScript. Sans JavaScript, cette page ne peut pas lire votre fichier.

Votre fichier est traité localement dans votre navigateur. Il n’est pas envoyé. Aucune requête transportant votre document ne quitte la page. Le moteur de règles est chargé dans la page et s’exécute dans votre onglet. Vous pouvez le vérifier vous-même : ouvrez l’onglet réseau de votre navigateur et regardez. La page charge par ailleurs une mesure d’audience sans cookie, qui compte les pages vues et ne sait rien de votre fichier.

Une facture Factur-X est un PDF dans lequel les données de la facture sont aussi jointes sous la forme d’un fichier XML, un format texte que les logiciels savent lire. Ce sont ces données qui sont contrôlées. Le même vérificateur accepte aussi un fichier XML seul : CII, UBL ou XRechnung.

Récupérer le XML vous-même

À savoir : c’est le XML qui est vérifié, pas le conteneur PDF en tant que fichier d’archivage. Sa pièce jointe — nom, /AFRelationship et type MIME — ainsi que les métadonnées XMP sont vérifiées en plus, comme des observations à part, jamais comme des erreurs. Le vérificateur ci-dessus sort lui-même le XML du PDF. Si vous voulez malgré tout enregistrer le fichier XML, par exemple pour le transmettre :

  1. Ouvrez une copie du PDF dans un lecteur qui permet d’afficher les pièces jointes intégrées.
  2. Ouvrez la liste de ces pièces jointes et recherchez le XML de facture. Il est souvent nommé factur-x.xml.
  3. Enregistrez ce fichier XML sans modifier son contenu.

Si le vérificateur ci-dessus ne trouve aucun XML de facture, le fichier est probablement un PDF ordinaire, sans facture intégrée. Dans ce cas il n’y a rien à extraire ; demandez la facture électronique à l’émetteur. La reconnaissance de texte (OCR, qui lit le texte d’une image) ne produit pas de XML de facture.

Quel résultat puis-je attendre ?

Attestwire contrôle les données qu’il lit avec les règles qu’il implémente. Regardez d’abord le profil de la facture. Un profil Factur-X est le niveau de détail que la facture s’engage à contenir, et chaque profil attend des contenus différents. Un contrôle selon l’EN 16931, la norme européenne qui fixe ce qu’une facture électronique doit contenir, ne remplace donc pas la validation propre à chaque profil.

Le vérificateur ne dit toujours pas si le fichier est conforme à PDF/A-3 (le format d’archivage PDF dans lequel se présente un conteneur Factur-X), ni si le PDF visible et les données XML concordent. Si votre destinataire exige une validation complète, utilisez aussi les outils et règles adaptés à ce besoin.

Pour les développeurs

Cette section s’adresse aux développeurs. Si vous n’écrivez pas de code, vous pouvez la passer et reprendre à « Qu’est-ce que Factur-X ? ».

La bibliothèque s’appelle @attestwire/en16931. Elle est écrite en TypeScript et s’installe depuis npm, le dépôt de paquets de JavaScript et TypeScript. Elle fournit trois fonctions : extractFacturX récupère le XML intégré au PDF, parseCiiInvoice lit les données de la facture, et validateInput les contrôle localement. Aucune de ces fonctions n’effectue d’appel réseau.

Enregistrez l’exemple sous check-facturx.mjs et lancez-le avec le chemin du PDF. Le build exécute ce script contre la facture d’exemple EN16931 de l’éditeur avant de l’imprimer.

Installation
npm install @attestwire/en16931@0.14.0
check-facturx.mjs
import { readFileSync } from 'node:fs';
import {
  extractFacturX, parseCiiInvoice, validateInput
} from '@attestwire/en16931';

const file = process.argv[2];
if (!file) throw new Error('Usage: node check-facturx.mjs invoice.pdf');

const extracted = extractFacturX(readFileSync(file));
const parsed = parseCiiInvoice(extracted.xml);
const result = validateInput(parsed.invoice);

console.log(JSON.stringify({
  attachmentName: extracted.attachmentName,
  extractionWarnings: extracted.warnings,
  ...result,
  unmapped: parsed.unmapped
}, null, 2));

process.exitCode = result.valid ? 0 : 1;
Exécution
node check-facturx.mjs facture.pdf

L’exemple suppose un PDF contenant le XML de facture. Il ne crée pas un XML absent et ne certifie pas le conteneur PDF. L’extraction ou la lecture peuvent échouer avant qu’un résultat de contrôle soit disponible. Dans une application, traitez ces échecs séparément et conservez le fichier d’origine. Une exécution réussie n’établit pas la prise en charge de tous les profils Factur-X.

Extraire et contrôler dans votre code · Périmètre et limites · Spécification chez l’éditeur (FNFE-MPE)

Qu’est-ce que Factur-X ?

Factur-X est un format hybride : un PDF qui contient en plus un fichier XML. Vos clients lisent le PDF, leurs logiciels lisent le XML. Les deux décrivent la même facture.

Le XML suit la norme EN 16931 et il est écrit dans la syntaxe CII, l’un des deux formats XML dans lesquels une telle facture peut exister. Le moteur applique les règles qu’il implémente à ces données CII. La validation propre à chaque profil Factur-X en est distincte. La version de CII que le moteur produit et vérifie est précisée dans les questions fréquentes.

Factur-X et ZUGFeRD sont la même spécification sous deux noms. La version courante s’appelle Factur-X 1.09.2, soit ZUGFeRD 2.5.2. La même page existe en allemand : ZUGFeRD prüfen.

Factur-X et la réforme française

Depuis le , toute entreprise assujettie à la TVA et établie en France doit pouvoir recevoir des factures électroniques. L’obligation d’émettre se déploie ensuite par taille d’entreprise. Factur-X est l’un des formats socles admis.

Nous ne redétaillons pas la réforme ici. Notre page France dit précisément ce que nous couvrons, ce que signifie le contrôle Flux 1 de la DGFiP (l’administration fiscale), et ce qui est hors de notre périmètre.

Ce que la vérification couvre

Le contrôle s’appuie sur le jeu de règles de l’EN 16931, c’est-à-dire les règles de vérification que la norme prévoit pour une facture, ainsi que sur XRechnung, l’extension nationale allemande de la norme (dite CIUS), exigée par les administrations allemandes, qui rend obligatoires des champs optionnels, et sur Peppol BIS Billing 3.0, le jeu de règles du réseau Peppol par lequel de nombreux acheteurs européens reçoivent leurs factures.

Le moteur implémente 321 règles qu’une facture que vous envoyez peut réellement enfreindre : 294 issues de ces trois jeux de règles et 27 contrôles propres à Attestwire. Voir toutes les règles

KoSIT, le validateur de l’administration allemande, accepte les 11 factures d’exemple que génère cette bibliothèque. L’une d’elles déclenche l’avertissement d’une règle européenne que KoSIT a lui-même signalée comme défectueuse et remplacée ; elle respecte la règle de remplacement. Aucune ne déclenche d’erreur. Le relevé complet

Validateur 1.6.3, configuration XRechnung 3.0.2 (version du 31 août 2026), schematron CEN CII 1.3.16, schematron XRechnung CII 2.6.0 ; relevé du avec le moteur 0.10.0. L’avertissement est CII-SR-475 sur la facture CII étendue, une règle qui compte mal les pièces jointes dès qu’une facture en a plusieurs (ticket CEN 508). La configuration KoSIT le ramène au niveau « information » et vérifie à la place BR-TMP-4, qui est respectée.

valid: true signifie que les données du document ont passé toutes les règles qu’Attestwire implémente. Ce n’est pas une promesse qu’un destinataire, un point d’accès (Access Point, la porte d’entrée du réseau Peppol) ou une extension nationale acceptera le document. Les limites exactes

Ce que nous ne faisons pas

La bibliothèque ne fabrique pas de PDF Factur-X. Elle écrit le XML CII. Le conteneur PDF/A-3 (polices embarquées, profil colorimétrique, métadonnées XMP, la bonne valeur /AFRelationship) relève d’une bibliothèque PDF/A-3. Notre relevé daté cite Mustangproject, une bibliothèque qui sait le faire. L’API hébergée fabrique elle-même ce conteneur, sur chaque offre : POST /v1/generate?format=pdf renvoie un PDF Factur-X / ZUGFeRD (profil EN 16931) — filigrané comme aperçu sur l’offre gratuite, sans filigrane sur les offres Solo, Starter et Scale.

La bibliothèque lit le conteneur. extractFacturX(bytes) ouvre un PDF Factur-X ou ZUGFeRD et renvoie la pièce jointe XML. Cette fonction fait partie du paquet sous licence MIT et ne fait aucun appel réseau. L’API hébergée lit aussi un tel PDF, envoyé en application/pdf.

Le vérificateur lit le PDF, mais ne le certifie pas. Il en sort le XML de facture et contrôle ses données. Il ne vérifie pas la conformité du conteneur au format d’archivage PDF/A-3.

Sur demande, nous pouvons envoyer une facture par e-mail à un destinataire — ce n’est pas un canal de facturation électronique reconnu en France, où seules les plateformes agréées (PDP) et le PPF font foi. Au-delà de cela, Attestwire n’est ni une plateforme agréée ni un point d’accès, et ne dépose rien auprès du portail public de facturation (PPF) ni de Chorus Pro, la plateforme des administrations.

Questions fréquentes

Factur-X est-il obligatoire ?

Le format lui-même n’est pas imposé. L’obligation porte sur la facture électronique structurée, et Factur-X est l’un des formats socles admis. Depuis le 1er septembre 2026, toute entreprise assujettie à la TVA et établie en France doit être en mesure de recevoir des factures électroniques. L’obligation d’émettre se déploie ensuite par taille d’entreprise. Notre page /france détaille ce que nous couvrons de cette réforme et ce que nous ne couvrons pas.

Quelle différence entre Factur-X et ZUGFeRD ?

Aucune sur le fond : c’est la même spécification, publiée sous deux noms par deux organisations. La version courante est Factur-X 1.09.2, soit ZUGFeRD 2.5.2. Un fichier Factur-X est lisible par un outil ZUGFeRD et réciproquement, et les profils portent les mêmes noms.

Comment extraire le XML d’une Factur-X ?

Vous n’avez pas besoin de l’extraire vous-même : déposez le PDF dans le vérificateur en haut de cette page. Il sort la pièce jointe XML dans votre navigateur et la contrôle. Pour enregistrer le XML vous-même, suivez la section « Récupérer le XML vous-même ». Pour votre code, extractFacturX(bytes) du paquet @attestwire/en16931 lit la pièce jointe dans les octets du PDF. L’exemple figure dans la section « Pour les développeurs ».

Quelle version de CII le moteur vérifie-t-il ?

La version courante de Factur-X est construite sur la version de syntaxe CII D22B et documentée comme rétrocompatible avec D16B. D16B est la version que ce moteur produit et vérifie. Le moteur applique les règles qu’il implémente aux données CII. La validation propre à chaque profil Factur-X en est distincte.

Pour continuer

Vérifier une facture maintenant

Pour votre code : @attestwire/en16931 sur npm · La réforme française : ce que nous couvrons · En allemand : ZUGFeRD prüfen