Mesuré, pas affirmé
Moteurs de validation comparés
24 moteurs de validation contrôlent les mêmes 722 factures électroniques du kit de données Beleggo — XRechnung, ZUGFeRD / Factur-X, Peppol BIS 3 et CIUS nationaux, valides comme défectueuses — sur la même machine, un document après l’autre. Le validateur officiel KoSIT tourne en parallèle comme référence. Mustangproject et phive, les validateurs open source les plus répandus, sont ensuite comparés en détail à Beleggo.
Mesuré le 30 septembre 2026 sur linux x64, Intel(R) Xeon(R) Processor @ 2.10GHz × 4, 16 GiB, Node v22.22.2
| Moteur | Environnement | Licence | Profils | Corrects | Fausses alertes | Manqués | Règle nommée | Médiane | Mémoire |
|---|---|---|---|---|---|---|---|---|---|
| Beleggoartefacts 2026-08-31 | JavaScript | proprietary | tous | 100 %722 documents | 0 | 0 | 338 | 5 ms | 329 MB |
| dealerweb/einvoice1.1.0 | PHP 8 | MIT | 7 / 11 | 98,7 %697 documents | 1 | 8 | 289 | 46 ms | 149 MB |
| EU ITB eInvoicing validator1.14.0-SNAPSHOT (2026-09-25) · CEN 1.3.16 | Java 17+ | EUPL-1.2 | 1 / 11 | 98 %449 documents | 0 | 9 | 273 | 92 ms | 682 MB |
| KoSIT Validator1.6.3 · Validator Configuration XRechnung 3.0.2 2026-09-02 · référence | Java 11+ | Apache-2.0 | 1 / 11 | 97,9 %187 documents | 0 | 0 | 282 | 11 ms | 1 021 MB |
| verifaktura0.1.8 | Node.js | Apache-2.0 | 2 / 11 | 97,6 %455 documents | 0 | 11 | 251 | 52 ms | 392 MB |
| einvoice-kit0.1.3 | Node.js | MIT | 1 / 11 | 97,3 %449 documents | 0 | 12 | 230 | 1,2 ms | 100 MB |
| phive4.6.0 | Java 17+ | Apache-2.0 | tous | 96,7 %722 documents | 0 | 22 | 311 | 7,4 ms | 867 MB |
| en16931 (npm)0.1.0 | Node.js | MIT AND EUPL-1.2 | 1 / 11 | 96,7 %449 documents | 1 | 11 | 255 | 55 ms | 239 MB |
| Klarfakt1.0.0-preview.2 | .NET 10 | BUSL-1.1 (free for evaluation; Apache-2.0 after four years) | 3 / 11 | 96,4 %687 documents | 8 | 17 | 278 | 11 ms | 463 MB |
| @kontor-mcp/core1.0.4 | Node.js | Apache-2.0 | 2 / 11 | 95,9 %636 documents | 0 | 19 | 277 | 195 ms | 507 MB |
| Mustangproject2.26.0 | Java 11+ | Apache-2.0 | 6 / 11 | 95,4 %646 documents | 7 | 23 | 281 | 44 ms | 955 MB |
| @aifind/mustangjs0.4.0 | Node.js | Apache-2.0 | 2 / 11 | 94 %636 documents | 8 | 24 | 265 | 73 ms | 407 MB |
| core-invoice (Rust CLI)2.0.3 | Rust | MIT OR Apache-2.0 | 2 / 11 | 94 %500 documents | 10 | 20 | 218 | 2,7 ms | 10 MB |
| verifyhash-einvoice0.2.9 | Python 3 | Apache-2.0 | 2 / 11 | 93,6 %636 documents | 4 | 37 | 252 | 2,1 ms | 28 MB |
| International.EInvoicing (.NET CLI)1.1.0 | .NET 8+ | MIT | 2 / 11 | 93,4 %636 documents | 4 | 31 | 259 | 320 ms | 193 MB |
| john-wink/en16931-php0.3.0 | PHP 8 | MIT | 2 / 11 | 93,1 %636 documents | 1 | 43 | 242 | 36 ms | 51 MB |
| @attestwire/en169310.14.0 | Node.js | MIT | 3 / 11 | 90,5 %687 documents | 7 | 58 | 228 | 2,3 ms | 110 MB |
| en16931 (Dart)0.1.4 | Dart, AOT-compiled | MIT | 7 / 11 | 89 %697 documents | 20 | 57 | 226 | 1 ms | 48 MB |
| speedata/einvoicev0.0.22 | Go | BSD-3-Clause | 3 / 11 | 88,9 %687 documents | 15 | 61 | 208 | 7,4 ms | 17 MB |
| stampbench (@stampbench/core)0.1.1 | Node.js | MIT | 2 / 11 | 84,9 %636 documents | 8 | 88 | 154 | 1,5 ms | 83 MB |
| en16931 (Rust CLI)0.6.0 | Rust | MIT OR Apache-2.0 | 3 / 11 | 76,4 %687 documents | 116 | 46 | 194 | 3,1 ms | 10 MB |
| @fin.cx/einvoice11.1.1 | Node.js | MIT | 2 / 11 | 69,5 %636 documents | 14 | 180 | 57 | 9,4 ms | 161 MB |
| KoSIT Validator + ZUGFeRD configuration1.6.3 · Validator Configuration ZUGFeRD 2.5.2 2026-06-11 · référence | Java 11+ | Apache-2.0 | 4 / 11 | 50 %10 documents | 0 | 5 | 31 | 5,7 ms | 831 MB |
| factur-x (akretion)6.8 | Python 3 | BSD-2-Clause | 4 / 11 | 50 %10 documents | 0 | 5 | 14 | 0,4 ms | 45 MB |
« Profils » : combien des 11 profils du kit le moteur déclare contrôler lui-même. « Corrects » : part des documents de ces profils dont le verdict (valide ou défectueux) correspond au verdict attendu ; un document que le moteur ne peut pas juger compte comme faux. Chaque moteur couvrant d’autres profils, les pourcentages portent sur des nombres de documents différents. Le validateur KoSIT est la référence officielle pour XRechnung. Mesuré 25–30 septembre 2026.
« Règle nommée » : sur les 338 échantillons défectueux du kit, combien le moteur rejette en nommant la règle enfreinte. « Médiane » : temps par document après la mise en route ; « Mémoire » : pic du processus entier.
| Mesure | Beleggo | Mustangproject | phive | En tête |
|---|---|---|---|---|
| Verdicts corrects, tous les documentspar rapport au verdict attendu de chaque échantillon | 722 / 722 (100 %) | 668 / 722 (92,5 %) | 698 / 722 (96,7 %) | Beleggo |
| Verdicts corrects dans les profils de Mustanguniquement les profils que Mustang contrôle | 646 / 646 (100 %) | 616 / 646 (95,4 %) | 623 / 646 (96,4 %) | Beleggo |
| Accord avec le validateur KoSITsur tous les documents XRechnung — le périmètre dont le validateur officiel a la charge | 183 / 183 (100 %) | 167 / 183 (91,3 %) | 175 / 183 (95,6 %) | Beleggo |
| Défauts nommés par la bonne règlepas seulement rejetés : la règle enfreinte est indiquée | 338 / 338 (100 %) | 281 / 338 (83,1 %) | 311 / 338 (92 %) | Beleggo |
| Profils du kit contrôlésformats dont le moteur connaît les règles propres | 11 / 11 | 6 / 11 | 11 / 11 | Beleggo · phive |
| Mesure | Beleggo | Mustangproject | phive | En tête |
|---|---|---|---|---|
| Temps par document (médiane)après la mise en route | 5 ms | 44 ms | 7,4 ms | Beleggo |
| Temps par document (95e centile)les documents lents | 20 ms | 88 ms | 25 ms | Beleggo |
| Documents par secondeun document après l’autre | 112 | 17,2 | 56,8 | Beleggo |
| Temps processeur par documenttous les threads confondus | 13 ms | 118 ms | 48 ms | Beleggo |
| Appel unique (démarrage + premier document)le coût d’un appel en ligne de commande | 345 ms | 3 822 ms | 5 325 ms | Beleggo |
| Mémoire (pic)du processus entier | 329 MB | 955 MB | 867 MB | Beleggo |
| Taille d’installationrègles et moteur, sans Node.js ni Java | 15 MB | 56 MB | 58 MB | Beleggo |
Beleggo exécute les règles Schematron officielles sous forme de code traduit en JavaScript, lues dans les mêmes feuilles de style que celles qu’exécute Saxon-JS et contrôlées sur tous les corpus de test avec Saxon-JS comme référence : mêmes constats, même texte, même ordre. Un document que les règles traduites ne peuvent pas juger exactement est confié à Saxon-JS. Le temps processeur dépasse le temps par document parce que Node.js récupère la mémoire sur ses propres threads. Le même moteur tourne dans le navigateur.
| Beleggo | Mustangproject | phive | |
|---|---|---|---|
| EN 16931 (UBL et CII) | oui | oui | oui |
| XRechnung 3 avec les niveaux de gravité officiels KoSIT | oui | en partie | en partie |
| Peppol BIS 3 et règles nationales Peppol | oui | non | oui |
| NLCIUS, CIUS-RO, HR-CIUS, CIUS-PT | oui | non | oui |
| Profils Factur-X / ZUGFeRD (XSD et Schematron) | oui | oui | oui |
| Page PDF visible comparée au XML | oui | non | non |
| Chiffres de contrôle (IBAN, n° de TVA, Leitweg-ID, n° fiscal …) | oui | non | non |
| Fonctionne dans le navigateur, sans envoi, sans serveur | oui | non | non |
| Validation PDF/A-3 complète (toutes les règles des profils veraPDF) | oui | oui | non |
| ZUGFeRD 1.0 et Order-X | oui | oui | non |
| Règles françaises CTC (BR-FR Flux 2) en erreur, en UBL et CII | oui | en partie | oui |
| Schematron XRechnung, édition actuelle (2.6.0) | oui | en partie | oui |
| Peppol BIS 3 en CII | oui | non | non |
| EXTENDED-CTC-FR et e-reporting Flux 10 (France) | oui | en partie | oui |
| Recalcul de chaque ligne (quantité × prix) | oui | oui | non |
| Avertissements déjà annoncés comme futures erreurs | oui | non | non |
| Peppol PINT (UE, A-NZ, SG, JP, MY, AE, OM) — Beleggo dans sa CLI et son serveur MCP, règles téléchargées chez OpenPeppol | oui | non | oui |
| Peppol Invoice Response et Message Level Status | oui | non | oui |
Mustang s’écarte du verdict attendu sur 54 documents sur 722, dont 24 dans des profils qu’il ne contrôle pas du tout. Les autres ont cinq causes :
| Profil | Documents | Beleggo | Mustangproject | phive |
|---|---|---|---|---|
en16931 · cii | 49 | 49 | 44 | 45 |
en16931 · ubl | 264 | 264 | 260 | 259 |
en16931 · zugferd | 136 | 136 | 136 | 135 |
hr-cius · ubl | 6 | 6 | 2 | 6 |
nlcius · ubl | 5 | 5 | 4 | 5 |
peppol-bis3 · cii | 1 | 1 | 1 | 1 |
peppol-bis3 · ubl | 49 | 49 | 37 | 48 |
peppol-bis3 · zugferd | 1 | 1 | 1 | 1 |
pt-cius · ubl | 5 | 5 | 3 | 5 |
ro-cius · ubl | 9 | 9 | 4 | 9 |
xrechnung · cii | 126 | 126 | 114 | 119 |
xrechnung · ubl | 47 | 47 | 43 | 46 |
xrechnung · zugferd | 14 | 14 | 14 | 14 |
zugferd-basic · cii | 1 | 1 | 1 | 1 |
zugferd-basic · zugferd | 2 | 2 | 2 | 2 |
zugferd-basicwl · cii | 1 | 1 | 0 | 0 |
zugferd-basicwl · zugferd | 1 | 1 | 0 | 0 |
zugferd-extended · cii | 1 | 1 | 1 | 1 |
zugferd-extended · zugferd | 1 | 1 | 1 | 1 |
zugferd-minimum · cii | 1 | 1 | 0 | 0 |
zugferd-minimum · zugferd | 2 | 2 | 0 | 0 |
Kit de données 0.1.0 (969f6f3ec8fdccbc), 722 documents, jugés par rapport au verdict attendu de chaque échantillon. Ce verdict vient du projet Beleggo ; pour qu’il confirme plus que Beleggo, chaque désaccord de Mustang a été vérifié à la main par rapport aux spécifications, et le validateur officiel KoSIT tourne en parallèle comme référence indépendante. Là où il juge autrement que Beleggo, la règle lui manque : les règles françaises CTC et une liste de codes Factur-X.
Beleggo artefacts 2026-08-31, Mustangproject 2.26.0, phive 4.6.0 (avec tous les modules phive-rules ; la détection de documents de phive choisit le jeu de règles), validateur KoSIT 1.6.3 · Validator Configuration XRechnung 3.0.2 2026-09-02. Chaque moteur tourne dans son propre processus, qui vit toute la mesure — les temps mesurent donc le moteur, pas le démarrage d’une machine virtuelle Java.