Invoice Validator RFEValidez vos factures électroniques UBL, CII et Factur-X directement dans VS Code — conformité EN 16931, Peppol et règles françaises de la réforme, avec des messages d'erreur en français. ➜ Installer depuis le Marketplace VS Code Créé et maintenu par Yassin Y. — logiciel libre sous licence MIT 📖 Sommaire
🎯 À quoi ça sert ?La réforme française de la facturation électronique impose des factures structurées conformes à la norme européenne EN 16931 et à des règles nationales spécifiques. Avant d'envoyer une facture à une Plateforme Agréée (PA) ou au Portail Public de Facturation, encore faut-il qu'elle soit valide. Invoice Validator RFE est une extension VS Code qui vérifie vos
factures localement, sans rien envoyer sur Internet, et vous pointe
précisément chaque anomalie — avec des messages en français et l'identifiant
de la règle violée (ex. Elle s'adresse aux éditeurs de logiciels, intégrateurs, comptables, DSI et équipes conformité qui préparent ou déboguent des flux de factures électroniques.
✨ Fonctionnalités
📄 Formats et règles pris en charge
Jeux activés par défaut : 🔧 Prérequis
Vérifiez Java avec 📦 InstallationOption A — Depuis le Marketplace VS Code (recommandé)Dans VS Code : onglet Extensions ( Ou en ligne de commande :
Page de l'extension : marketplace.visualstudio.com/items?itemName=Yassin-Y.invoice-validator-rfe
Option B — Depuis un paquet
|
| Colonne | Contenu |
|---|---|
| Nom du fichier | Nom de la facture contrôlée. |
| Statut | Conforme / Non conforme / Non validé (format non reconnu, échec). |
| Syntaxe | UBL ou CII (le Factur-X est ramené au CII embarqué). |
| Nb erreurs / Nb avertissements | Totaux du fichier, rappelés sur chaque ligne. |
| Règle · Gravité · Jeu de règles | Ex. BR-CO-15 · Erreur · en16931. |
| Balise concernée | Balise XML mise en cause par la règle. |
| BT concerné · Libellé BT | Terme métier EN 16931 cité (ex. BT-112, « Montant total TTC »). |
| Ligne | Ligne du document où pointe l'anomalie. |
| Détails de l'erreur | Message de la règle (traduit en français par défaut). |
Le classeur Excel ajoute un onglet Synthèse (une ligne par fichier + total), un en-tête figé, des filtres automatiques et des lignes colorées selon la gravité. Les anomalies restent également consultables dans l'onglet Problèmes de VS Code.
🛡️ Anonymiser une facture
Pour transmettre une facture à un support, un intégrateur ou un ticket public sans divulguer l'identité des parties :
- Bouton « Anonymiser cette facture » du panneau latéral, clic droit sur un
.xmlou un.pdfdans l'explorateur, ou commande « Facture: Anonymiser… ». - Le fichier d'origine n'est jamais modifié : le résultat est écrit à côté,
sous le nom
…anonymise.xml(ou…anonymise.pdf).
Ce qui est remplacé — les identifiants légaux, fiscaux et bancaires (SIREN BT-30/47, SIRET BT-29b, TVA BT-31/48/63, IBAN BT-84/91, BIC BT-86, carte BT-87) et, par défaut, les noms, adresses postales et coordonnées de contact (BT-27/28/41→45, BT-50→58, BG-5/6/8/9/15…). Les codes pays sont conservés : ils conditionnent les règles de TVA.
Le repérage s'appuie sur la table des termes métier déjà utilisée par
l'annotation BT, complétée par l'attribut schemeID (0002 = SIREN,
0009/0225 = SIRET) — l'UBL et le CII sont donc traités par le même
mécanisme. Une seconde passe balaie le texte libre (cbc:Note,
ram:Content, libellés) où IBAN, courriels et numéros se glissent souvent en
clair.
Des pseudonymes valides, pas des XXXXXXXXX
Un identifiant masqué ferait échouer la facture anonymisée sur les contrôles de
l'extension elle-même (règle ID-01, clé de Luhn). Les valeurs de substitution
sont donc générées avec des clés correctes :
| Donnée | Substitution |
|---|---|
| SIREN | 9 chiffres, clé de Luhn valide. |
| SIRET | 14 chiffres, Luhn valide, contenant le SIREN pseudonymisé de la même entreprise. |
| N° TVA FR | FR + clé de contrôle recalculée + le même SIREN pseudonymisé. |
| IBAN | Pays et longueur préservés, clé IBAN (mod 97) et clé RIB françaises valides. |
| BIC | Longueur et code pays préservés. |
| Téléphone | Tranche 01 99 00 XX XX, réservée par l'ARCEP aux usages de fiction. |
| Courriel | Domaine en .example, réservé par la RFC 2606 : aucun message ne peut y être délivré. |
Cohérence
Les substitutions sont déterministes : à graine égale, une même valeur
d'origine donne toujours le même pseudonyme. Un vendeur reste donc le même
vendeur d'une facture à l'autre, et les liens internes (SIREN ↔ SIRET ↔ TVA)
restent vrais. La commande « Anonymiser un dossier » traite tous les
.xml / .pdf de la racine d'un dossier vers un sous-dossier anonymise/.
Changez factureValidator.anonymize.seed pour obtenir un tout autre jeu de
pseudonymes.
⚠️ Sur un PDF Factur-X, le visuel n'est pas anonymisé
Pour un .pdf, l'extension anonymise le XML embarqué, les métadonnées XMP et
le dictionnaire Info — pas les pages imprimées, qui continuent d'afficher
la raison sociale, l'adresse et l'IBAN d'origine. Un avertissement le rappelle à
chaque traitement. Le PDF produit reste donc utilisable comme jeu d'essai
structuré, jamais comme document diffusable en l'état.
Enfin, « anonymiser » est ici un raccourci : montants, dates et désignations d'articles sont conservés, et peuvent suffire à ré-identifier l'émetteur dans un secteur étroit. Il s'agit d'une pseudonymisation.
⚠️ Le texte libre n'est traité qu'en partie
Les notes (cbc:Note, ram:Content), les libellés et autres champs rédigés
sont bien balayés : les valeurs déjà pseudonymisées ailleurs dans la facture y
sont propagées, et les motifs reconnaissables (courriel, IBAN, n° de TVA, et —
en texte rédigé — téléphone, SIREN/SIRET précédés d'un mot-clé) y sont remplacés.
En revanche, une identification que rien ne permet de reconnaître comme telle
y subsiste : un nom propre qui n'apparaît dans aucune balise identifiée, ou un
identifiant isolé sans mot-clé (SIREN, SIRET, TVA…) dans le même texte. Ce
garde-fou est volontaire — sans lui, une référence de commande à neuf chiffres
serait prise pour un SIREN — mais il laisse un angle mort. Un avertissement le
rappelle à chaque anonymisation. Relisez les notes du fichier produit avant
diffusion ; le détail est dans LIMITES.md.
⌨️ Les commandes
Accessibles via la palette (Ctrl+Shift+P), le menu contextuel ou la barre de
titre de l'éditeur :
| Commande | Effet |
|---|---|
| Facture: Valider | Détecte le format et valide (XSD + Schematron). |
| Facture: Valider un dossier et exporter le rapport (Excel / CSV) | Valide en série toutes les factures d'un dossier et produit un rapport d'anomalies. |
| Facture: Effacer les diagnostics | Retire les anomalies affichées. |
| Facture: Annoter les balises en BT | Insère <!--@BT BT-x : libellé--> devant chaque balise reconnue. Idempotent, annulable (Ctrl+Z). |
| Facture: Supprimer les annotations BT | Retire uniquement les marqueurs @BT, préserve les commentaires d'origine. |
| Facture: Inventaire des termes (BT/BG/EXT) | Liste les termes métier présents dans le document. |
| Facture: Anonymiser (SIREN, SIRET, TVA, IBAN, noms, adresses…) | Écrit une copie …anonymise.xml / …anonymise.pdf où les identifications sont remplacées par des pseudonymes valides. L'original n'est pas touché. |
| Facture: Anonymiser un dossier (pseudonymes partagés) | Anonymise toutes les factures d'un dossier vers anonymise/, avec les mêmes pseudonymes d'un fichier à l'autre. |
⚙️ Configuration
Réglages disponibles dans les paramètres VS Code (préfixe factureValidator.) :
| Paramètre | Défaut | Description |
|---|---|---|
javaPath |
java |
Chemin de l'exécutable Java (11+). |
rulesets.ubl |
["controles-plus","en16931","fr-ctc"] |
Jeux de règles pour l'UBL. |
rulesets.cii |
["controles-plus","en16931","fr-ctc"] |
Jeux de règles pour le CII / Factur-X. |
customSchematronXslt |
[] |
Chemins absolus vers des Schematron compilés en XSLT (règles maison). |
validateOnSave |
false |
Valider automatiquement à l'enregistrement. |
messageLanguage |
fr |
fr (traduit) ou original (anglais EN 16931/Peppol). |
xsdValidation |
true |
Valider la structure XSD avant le Schematron. |
frSeverityProfile |
strict |
strict (violations FR en erreurs) ou tolerant (en avertissements). |
arithmeticTolerance |
0.0001 |
Tolérance d'arrondi des contrôles arithmétiques. |
annotateUnmappedElements |
false |
Marquer aussi les balises sans terme du socle EN 16931 (<!--@BT aucun terme EN 16931-->). Verbeux, réservé à l'audit. |
anonymize.scope |
complet |
complet (identifiants + noms, adresses, contacts) ou identifiants (SIREN, SIRET, TVA, IBAN, BIC seuls). |
anonymize.seed |
facture |
Graine des pseudonymes. Même graine ⇒ mêmes substitutions, y compris d'une session à l'autre. |
anonymize.exportMapping |
false |
Écrire la table de correspondance origine → pseudonyme en CSV. Ce fichier ré-identifie la facture : ne le transmettez jamais avec elle. |
Les limites connues et assumées de l'extension (annotation des remises CII, éléments hors socle EN 16931, performance des lots) sont documentées dans LIMITES.md.
Jeux de règles disponibles : controles-plus, en16931, peppol (UBL),
fr-ctc, extended-ctc-fr (remplace en16931), facturx-en16931 (CII),
en16931-cef.
Ajouter vos propres règles françaises (spécifications externes AIFE/DGFiP,
profils Factur-X…) : compilez un .sch avec scripts/compile-schematron.sh, puis
référencez le XSLT généré dans customSchematronXslt. Voir
validation-artifacts/schematron/fr/README.md.
🔬 Comment ça marche
La couche XSD s'appuie sur une classe Java précompilée (messages traduits, lignes exactes). La couche Schematron utilise Saxon-HE pour exécuter les Schematron compilés en XSLT 2.0, qui produisent un rapport SVRL (Schematron Validation Report Language) transformé en diagnostics VS Code.
🗂️ Structure du projet
src/
extension.ts Point d'entrée, commandes, validate-on-save
commands/ Orchestration des commandes (valider, annoter, inventaire, anonymiser)
detection/formatDetector.ts UBL / CII / PDF Factur-X
facturx/
extractFacturX.ts Extraction du XML embarqué dans le PDF
replaceFacturX.ts Réinjection du XML anonymisé + nettoyage XMP / Info
validation/
schematronValidator.ts Résolution des jeux de règles + exécution Saxon
svrlParser.ts Parsing du rapport SVRL
diagnostics.ts SVRL → diagnostics VS Code
xsdValidator.ts Couche structurelle XSD
xmlLocator.ts Localisation d'une balise par XPath
annotation/btAnnotator.ts Annotation des balises BT/BG/EXT
anonymize/
btTargets.ts Termes porteurs d'une identification → nature du pseudonyme
anonymizer.ts Passes structurelle et texte libre
vault.ts Table origine → pseudonyme, cohérence SIREN/SIRET/TVA
generators.ts Valeurs de substitution à clés valides (Luhn, mod 97)
i18n/translator.ts Traduction FR des messages
ui/panelView.ts Panneau latéral « Facture électronique »
scripts/
compile-schematron.sh Compile un .sch en .xslt (règles FR)
download-artifacts.sh Met à jour Saxon + Schematron officiels
tools/iso-schematron/ Squelette ISO Schematron (.sch → XSLT 2.0)
validation-artifacts/
schematron/ XSLT prêts à l'emploi (en16931, peppol, fr, controles-plus)
xsd/ Schémas structurels UBL 2.1 / CII D16B
i18n/ Traductions FR, carte BT → balise
lib/saxon-he-10.9.jar Moteur XSLT 2.0
examples/ Factures d'exemple (UBL, CII, Factur-X) + cas de test
🔄 Mise à jour des règles officielles
Les normes EN 16931 et Peppol évoluent trimestriellement, et les règles françaises FNFE-MPE au fil des publications. Pour rester à jour :
scripts/download-artifacts.sh # Saxon + Schematron EN 16931 / Peppol officiels
Pour les règles françaises, récupérez la nouvelle release du FNFE-MPE (fnfempe/France_RFE) et recompilez.
❓ FAQ
Mes factures sont-elles envoyées quelque part ? Non. Toute la validation est locale ; aucune donnée n'est transmise sur le réseau.
Une facture « valide » ici est-elle certifiée conforme ? Non. La validation opposable reste celle de votre Plateforme Agréée. Cet outil vous aide à détecter les anomalies en amont, il ne remplace pas la PA.
Pourquoi Java est-il requis ? Le moteur Saxon-HE (XSLT 2.0) qui exécute les Schematron est écrit en Java. C'est le seul prérequis externe.
Puis-je ajouter mes propres règles ?
Oui, via factureValidator.customSchematronXslt (voir
Configuration).
La traduction française est-elle officielle ?
Non, c'est une traduction de courtoisie (couverture 92 %). En cas de doute,
basculez sur messageLanguage: original et consultez le texte de la norme.
L'extension gère-t-elle la conformité PDF/A-3 du Factur-X ? Non, c'est hors périmètre — utilisez veraPDF pour cela.
Et l'e-reporting ?
Non. L'extension valide la facture (e-invoicing) ; les données de
transaction et de paiement du Flux 10 relèvent d'un autre format et d'un
autre jeu de règles. L'AIFE a publié un Schematron pour ce flux en juillet 2026,
mais réservé aux Plateformes Agréées : il n'est ni redistribuable ni
actualisable depuis une source publique, donc pas embarquable. Si vous y avez
accès, voir LIMITES.md pour
le brancher via customSchematronXslt.
🚧 Limites et périmètre
- La conformité aux règles nationales ne vaut pas certification : la validation finale reste celle de votre Plateforme Agréée / PPF.
- Hors périmètre : la conformité PDF/A-3 du conteneur Factur-X (voir veraPDF) et les contrôles de plateforme (existence du SIREN à l'annuaire, doublons, cycle de vie) qui nécessitent le PPF/PA.
- L'e-reporting (Flux 10) n'est pas validé : l'extension ne traite que la facture elle-même. Le Schematron du Flux 10 publié par l'AIFE en juillet 2026 n'est diffusé qu'aux Plateformes Agréées, donc ni redistribuable ni actualisable depuis une source publique. Détail dans LIMITES.md.
- La traduction FR couvre 92 % des règles (100 % des règles métier BR-*) ; le reste s'affiche en anglais.
- Anonymisation : le rendu visuel d'un PDF Factur-X n'est pas modifié, et les données non identifiantes (montants, dates, désignations) sont conservées. Détail dans LIMITES.md.
🤝 Contribuer
Les contributions sont les bienvenues — corrections de traduction, nouvelles règles, documentation, tests. Lisez d'abord le guide de contribution et le code de conduite.
⚠️ Ne partagez jamais de facture réelle contenant des données personnelles ou
commerciales dans une issue ou une PR : anonymisez, ou repartez des exemples de
examples/.
Pour signaler une faille de sécurité, suivez la politique de sécurité.
📜 Licence et composants tiers
Le code de l'extension est distribué sous licence MIT.
Les artefacts de validation tiers embarqués (Saxon-HE, Schematron EN 16931, règles Peppol, règles FNFE-MPE, schémas XSD OASIS/UN-CEFACT…) restent régis par leurs licences respectives — voir NOTICE.md pour le détail.
⚠️ Avertissement
Ce logiciel est fourni « en l'état », sans garantie. Il constitue une aide au contrôle, pas un outil de certification. La conformité réglementaire de vos factures relève de votre responsabilité et de la validation par votre Plateforme Agréée. Les textes normatifs (EN 16931, XP Z12-012, spécifications AIFE/DGFiP) évoluent : vérifiez toujours la version en vigueur.