Conformance report

86/86KoSIT XRechnung test suite: same verdict as the official KoSIT validator
28/28CEN EN 16931 examples: same verdict as KoSIT
1114/1114official sample files where our rule results equal the publishers' own XSLT

From the conformance report, regenerated by npm run conformance on every CI run.

Our runtime validator (the code validate() runs in Node and, minus XSD, in a browser) compared with the official validators on the official sample files.

Pinned inputs

ArtefactVersionPin
kosit-xrechnung-config2026-08-31 (XRechnung 3.0.2)2530cd107c41
kosit-validator1.6.3799e64befca9
cen-en16931validation-1.3.176e35e0ab8b09
peppol-bis-33.0.2238d693d71d28
schxslt21.11.38afe545678c2
factur-x-wheel6.802b57dd57f59
xrechnung-testsuitev2026-08-3144c3905c69ca
saxonjs-runtime2.713cbd2e6eb0a
ksef-docsmain@ce3670e (FA(3) schema v1-0E)ce3670ea042d
mustang-cli2.26.042d7868cb682

How to read this

Summary

CorpusFilesNot CII/UBLReference agreementRule expectationKoSIT agreementRound trip: revalidatesfixed pointtotals
KoSIT XRechnung test suite86086/86 (100.0%)n/a86/86 (100.0%)86/8686/8685/86
Peppol BIS Billing 3.0 examples10010/10 (100.0%)n/a0/0 (n/a)10/1010/1010/10
CEN EN 16931 example files63063/63 (100.0%)n/a28/28 (100.0%)35/3534/3534/35
IBAN arithmetic checks (generated: BR-DE-19 / BR-DE-20, XRechnung CII and UBL)18018/18 (100.0%)n/a18/18 (100.0%)0/00/00/0
KoSIT scenario selection (generated: BT-24 identifiers, XRechnung CII, UBL Invoice, UBL CreditNote)30030/30 (100.0%)n/a30/30 (100.0%)0/00/00/0
CEN EN 16931 rule unit tests (one failing document per rule)9070907/907 (100.0%)907/9070/0 (n/a)0/00/00/0

Overall reference agreement: 1114/1114 (100.0%).

Sources:

Runtime patches

Conformo runs the publishers' rule files in SaxonJS (Node and browser). SaxonJS 2.7 implements xs:integer with JavaScript doubles, which are exact only up to 2^53 (about 16 digits); Saxon-HE, which the KoSIT validator and the reference column above use, has arbitrary precision. The following exact source edits are applied to the publisher's XSLT before it is compiled for SaxonJS. A patch must match exactly the stated number of times or the build fails, so a changed publisher rule is noticed. The reference column runs the unpatched publisher XSLT in Saxon-HE, so agreement above is measured against the original rules.

PatchRule sets (matches)EditWhy
iban-mod97-decimalxrechnung-cii (1), xrechnung-ubl (1), peppol-ubl (3)xs:integer(string-join(for $cp in string-to-codepoints(concat( becomes xs:decimal(string-join(for $cp in string-to-codepoints(concat(SaxonJS computes xs:integer with doubles; the IBAN mod-97 check needs up to 34 digits

The generated corpus "IBAN arithmetic checks" covers this: valid and invalid IBANs of 22 to 32 characters, payment means 58 and 59, XRechnung CII and UBL, none of which the official test invoices combine.

The generated corpus "KoSIT scenario selection" covers which KoSIT scenario a document gets: KoSIT matches BT-24 by exact text equality, so a wrong identifier, extra whitespace or another letter case finds no scenario and the file is rejected. The official test invoices only carry correct identifiers. In this corpus a "no scenario" answer counts as a rejection and must match our verdict.

Not covered, and why: the official FeRD/ZUGFeRD sample set and the Factur-X samples are published on sites this build environment could not reach (see KNOWN-GAPS.md), so PDF samples are not part of this report.

Comparison with Mustangproject (informative)

Mustangproject is a widely used Java library for ZUGFeRD/Factur-X and XRechnung. Mustang-CLI 2.26.0 (--action validate) was run on the same official files as Conformo's validate() with full rule sets including XSD. Mustang ships its own copies of the rules, which can be older or newer than the pins above, and adds checks of its own (for example a recalculation of totals). Where the two verdicts differ, the official KoSIT validator decides. This is informative, not a CI gate: it is recorded with npm run compare:mustang -- --corpora --record and rendered here by the conformance run.

CorpusFilesSame verdictBoth validBoth invalidSame failed rule ids
KoSIT XRechnung test suite (v2026-08-31)8682/8682082/86
CEN EN 16931 example files (validation-1.3.17)6329/6329029/63

Different verdicts on 38 file(s). The official KoSIT validator had a scenario for 7 of them and agreed with Conformo on 7, with Mustang on 0.

Mustang reports rule failures that the rules Conformo runs for this document (CEN's release and the KoSIT configuration) do not raise as errors. (3 files)

Mustang stopped with an internal Java exception while checking the file, and reports it invalid. (3 files)

The document declares Peppol BIS Billing 3.0 in BT-24, so Conformo also applies the OpenPeppol rules, which the document fails; Mustang does not apply the Peppol BIS rules. (28 files)

Mustang does not support the profile the document declares (ZUGFeRD 1.0), and reports it invalid. (3 files)

**Mustang also applies its own Factur-X Schematron (FX-SCH-*) to a plain CII document.** (1 file)

Mismatches and failures

3 finding(s); 0 unexplained.

Files not processed

None.