Mesuré, pas affirmé

Moteurs de validation comparés

Beleggo, Mustangproject, phive et 21 autres moteurs 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

Les 24 moteurs en un coup d’œil

MoteurEnvironnementLicenceProfilsCorrectsFausses alertesManquésRègle nomméeMédianeMémoire
Beleggoartefacts 2026-08-31JavaScriptproprietarytous100 %722 documents003385 ms329 MB
dealerweb/einvoice1.1.0PHP 8MIT7 / 1198,7 %697 documents1828946 ms149 MB
EU ITB eInvoicing validator1.14.0-SNAPSHOT (2026-09-25) · CEN 1.3.16Java 17+EUPL-1.21 / 1198 %449 documents0927392 ms682 MB
KoSIT Validator1.6.3 · Validator Configuration XRechnung 3.0.2 2026-09-02 · référenceJava 11+Apache-2.01 / 1197,9 %187 documents0028211 ms1 021 MB
verifaktura0.1.8Node.jsApache-2.02 / 1197,6 %455 documents01125152 ms392 MB
einvoice-kit0.1.3Node.jsMIT1 / 1197,3 %449 documents0122301,2 ms100 MB
phive4.6.0Java 17+Apache-2.0tous96,7 %722 documents0223117,4 ms867 MB
en16931 (npm)0.1.0Node.jsMIT AND EUPL-1.21 / 1196,7 %449 documents11125555 ms239 MB
Klarfakt1.0.0-preview.2.NET 10BUSL-1.1 (free for evaluation; Apache-2.0 after four years)3 / 1196,4 %687 documents81727811 ms463 MB
@kontor-mcp/core1.0.4Node.jsApache-2.02 / 1195,9 %636 documents019277195 ms507 MB
Mustangproject2.26.0Java 11+Apache-2.06 / 1195,4 %646 documents72328144 ms955 MB
@aifind/mustangjs0.4.0Node.jsApache-2.02 / 1194 %636 documents82426573 ms407 MB
core-invoice (Rust CLI)2.0.3RustMIT OR Apache-2.02 / 1194 %500 documents10202182,7 ms10 MB
verifyhash-einvoice0.2.9Python 3Apache-2.02 / 1193,6 %636 documents4372522,1 ms28 MB
International.EInvoicing (.NET CLI)1.1.0.NET 8+MIT2 / 1193,4 %636 documents431259320 ms193 MB
john-wink/en16931-php0.3.0PHP 8MIT2 / 1193,1 %636 documents14324236 ms51 MB
@attestwire/en169310.14.0Node.jsMIT3 / 1190,5 %687 documents7582282,3 ms110 MB
en16931 (Dart)0.1.4Dart, AOT-compiledMIT7 / 1189 %697 documents20572261 ms48 MB
speedata/einvoicev0.0.22GoBSD-3-Clause3 / 1188,9 %687 documents15612087,4 ms17 MB
stampbench (@stampbench/core)0.1.1Node.jsMIT2 / 1184,9 %636 documents8881541,5 ms83 MB
en16931 (Rust CLI)0.6.0RustMIT OR Apache-2.03 / 1176,4 %687 documents116461943,1 ms10 MB
@fin.cx/einvoice11.1.1Node.jsMIT2 / 1169,5 %636 documents14180579,4 ms161 MB
KoSIT Validator + ZUGFeRD configuration1.6.3 · Validator Configuration ZUGFeRD 2.5.2 2026-06-11 · référenceJava 11+Apache-2.04 / 1150 %10 documents05315,7 ms831 MB
factur-x (akretion)6.8Python 3BSD-2-Clause4 / 1150 %10 documents05140,4 ms45 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.

En détail : Beleggo, Mustangproject et phive

Verdicts corrects

MesureBeleggoMustangprojectphiveEn tête
Verdicts corrects, tous les documentspar rapport au verdict attendu de chaque échantillon722 / 722 (100 %)668 / 722 (92,5 %)698 / 722 (96,7 %)Beleggo
Verdicts corrects dans les profils de Mustanguniquement les profils que Mustang contrôle646 / 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 charge183 / 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ée338 / 338 (100 %)281 / 338 (83,1 %)311 / 338 (92 %)Beleggo
Profils du kit contrôlésformats dont le moteur connaît les règles propres11 / 116 / 1111 / 11Beleggo · phive

Vitesse et coût

MesureBeleggoMustangprojectphiveEn tête
Temps par document (médiane)après la mise en route5 ms44 ms7,4 msBeleggo
Temps par document (95e centile)les documents lents20 ms88 ms25 msBeleggo
Documents par secondeun document après l’autre11217,256,8Beleggo
Temps processeur par documenttous les threads confondus13 ms118 ms48 msBeleggo
Appel unique (démarrage + premier document)le coût d’un appel en ligne de commande345 ms3 822 ms5 325 msBeleggo
Mémoire (pic)du processus entier329 MB955 MB867 MBBeleggo
Taille d’installationrègles et moteur, sans Node.js ni Java15 MB56 MB58 MBBeleggo

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.

Ce que fait chaque moteur

BeleggoMustangprojectphive
EN 16931 (UBL et CII)ouiouioui
XRechnung 3 avec les niveaux de gravité officiels KoSITouien partieen partie
Peppol BIS 3 et règles nationales Peppolouinonoui
NLCIUS, CIUS-RO, HR-CIUS, CIUS-PTouinonoui
Profils Factur-X / ZUGFeRD (XSD et Schematron)ouiouioui
Page PDF visible comparée au XMLouinonnon
Chiffres de contrôle (IBAN, n° de TVA, Leitweg-ID, n° fiscal …)ouinonnon
Fonctionne dans le navigateur, sans envoi, sans serveurouinonnon
Validation PDF/A-3 complète (toutes les règles des profils veraPDF)ouiouinon
ZUGFeRD 1.0 et Order-Xouiouinon
Règles françaises CTC (BR-FR Flux 2) en erreur, en UBL et CIIouien partieoui
Schematron XRechnung, édition actuelle (2.6.0)ouien partieoui
Peppol BIS 3 en CIIouinonnon
EXTENDED-CTC-FR et e-reporting Flux 10 (France)ouien partieoui
Recalcul de chaque ligne (quantité × prix)ouiouinon
Avertissements déjà annoncés comme futures erreursouinonnon
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 OpenPeppolouinonoui
Peppol Invoice Response et Message Level Statusouinonoui

Où et pourquoi ils diffèrent

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 :

Par profil

ProfilDocumentsBeleggoMustangprojectphive
en16931 · cii49494445
en16931 · ubl264264260259
en16931 · zugferd136136136135
hr-cius · ubl6626
nlcius · ubl5545
peppol-bis3 · cii1111
peppol-bis3 · ubl49493748
peppol-bis3 · zugferd1111
pt-cius · ubl5535
ro-cius · ubl9949
xrechnung · cii126126114119
xrechnung · ubl47474346
xrechnung · zugferd14141414
zugferd-basic · cii1111
zugferd-basic · zugferd2222
zugferd-basicwl · cii1100
zugferd-basicwl · zugferd1100
zugferd-extended · cii1111
zugferd-extended · zugferd1111
zugferd-minimum · cii1100
zugferd-minimum · zugferd2200

Méthode de mesure

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.