Rule version and changes

Which rules eRechio validates with, where they come from and what has changed in validation behaviour. The browser validator and the API use the same files.

Current rule version

XRechnung 3.0.2 · KoSIT 2026-08-31 · e17455c9cb03 · in use since 2026-10-21

The identifier is the beginning of the SHA-256 over all rule files (name and checksum). Same identifier = same rules and schemas. Machine-readable: regelstand.json.

Origin

SourceVersionLicenceUseSHA-256 of the release file
KoSIT validation configuration XRechnung
CEN Schematron EN 16931 1.3.16, XRechnung Schematron 3.0.2, scenarios and severity levels, XSD UBL 2.1 and CII D16B
3.0.2 (Release 2026-08-31)Apache-2.0rules and schemas (shipped)2530cd107c414511…
KoSIT Validator1.6.3Apache-2.0reference validator in the update test (not shipped)799e64befca97d40…
KoSIT XRechnung test suite3.0.2 (Release 2026-08-31)Apache-2.0valid test invoices in the update test (not shipped)1e81ef7563e0fa04…
SaxonJS2.7.0Saxonica licence (free of charge)runs the Schematron rules (browser: SaxonJS2.rt.js; API: npm saxon-js 2.7.0)–
xmllint-wasm (libxml2)5.3.0MITXSD schema validation (browser and API)–

Shipped files

The rules are the Schematron XSLT of the KoSIT configuration, compiled unchanged into the SaxonJS format with xslt3 2.7.0; the schemas are the XSD files of the configuration, bundled per syntax. Hover over a checksum to see it in full.

FileSizeSHA-256
/pruefen/regeln/EN16931-CII-validation.sef.json.gz212 kB2adf7a8c95e29b36…
/pruefen/regeln/EN16931-UBL-validation.sef.json.gz217 kBdcf46b102c0f024f…
/pruefen/regeln/KoSIT-README.md2 kB5be65e76f189eba5…
/pruefen/regeln/XRechnung-CII-validation.sef.json.gz55 kB629768b6d19c0215…
/pruefen/regeln/XRechnung-UBL-validation.sef.json.gz62 kBeee0187dd85745f1…
/pruefen/regeln/XSD-CII.json.gz14 kB1d16accd873516f2…
/pruefen/regeln/XSD-UBL.json.gz54 kBd8942ecb73555f17…
/pruefen/regeln/szenarien.json4 kBfe2de85468d760f7…
/pruefen/saxon/SaxonJS2.rt.js499 kB7704990d3bfd64e6…
/pruefen/xmldom.js277 kB7b1ad3ba5455c7c8…
/pruefen/xsd/index-browser.mjs6 kB4b87283c88b01bd6…
/pruefen/xsd/xmllint-browser.mjs28 kB5f5a2c17be12d398…
/pruefen/xsd/xmllint.wasm779 kB4e3cc21a67e8dd40…

Update test

Before release, every change to rules, schemas, runtime or validation core is tested against valid invoices (KoSIT XRechnung test suite), deliberately broken invoices and the KoSIT reference validator (validator 1.6.3 with the same configuration). Compared are acceptance or rejection and the reported rule codes.

Last run: 2026-10-22 for rule version e17455c9cb03 – passed

CheckResult
Rule version and sources✓ checksums of rules, runtime and sources match
Valid invoices (test suite)✓ 86/86 fully validated
Valid invoices in the KoSIT validator✓ 86/86 accepted
Rule errors against KoSIT (mutations of all standard invoices)✓ 514/514 same acceptance and error codes as KoSIT
Structural errors against KoSIT (XSD)✓ 10/10 structural errors rejected like KoSIT
PDF extraction (crafted PDFs)✓ 16/16 cases
API (same validation core)✓ 29/29 tests

The content and tax correctness of the data is not checked. Schema messages come from libxml2 and are worded differently from the KoSIT validator; only whether a schema error exists is compared.

Changes to validation behaviour

DateAreaChangeEffect on results
2026-10-23API
Operation
API 1.3.0: the status reports the real state (503 “gestört”, i.e. disrupted, with a reason when no validation is possible). A document is counted only after the response has been sent completely; dropped connections stop the validation even while queued; validations waiting behind expired ones start immediately.none – results unchanged
2026-10-23Validator
Usability
Validation in the browser runs in its own background process (Web Worker). The page stays usable even with large invoices, and “Cancel” stops the work immediately. New runtime file: xmldom.js (XML DOM for the background process, MIT). Browsers without worker support validate as before. Checked: 88 of 88 test files with the same result as before.none – results unchanged
2026-10-22Validator and API
Traceability
Rule version published: origin, version and SHA-256 of all rule, schema and runtime files are listed on this page and machine-readable in /pruefen/regeln/regelstand.json. Every change to them passes the update test against the KoSIT validator before release.none – results unchanged
2026-10-22Validator
Error report
Messages can be filtered by errors, warnings and notices; identical messages at several locations are merged into one entry listing all locations. New button “Download report”: an HTML file created in the browser with file name, time, rule version, scope and the parts not checked. New explanation for PEPPOL-EN16931-R020 (seller electronic address).none – results unchanged, presentation only
2026-10-21Validator and API
Scope
XML schema validation added (XSD: UBL 2.1, CII D16B from the KoSIT configuration). The result now has two levels: “rule check passed” (all Schematron rules without errors) and “fully validated” (also schema-valid). Before, a file was called “valid” after the rule check alone, although the schema had not been checked.Files with structural errors (wrong order, unknown elements, wrong date format) are now reported as errors; in the test 6 of 10 such files that would have passed before. API 1.1.0: new fields vollstaendig_validiert, regelpruefung_bestanden, schemapruefung; valid is deprecated.
2026-10-21Validator and API
Error handling
If the rule check aborts because of a value in the wrong format (e.g. amount “336,90”), the validator reports ABBRUCH (aborted) with a hint instead of a generic error (API: previously status 500).affected files only
2026-10-21Validator
PDF
ZUGFeRD/Factur-X PDF: only embedded files (EmbeddedFile with a file name) are read; known names such as factur-x.xml take precedence. If a PDF contains several invoice files, the validator says so instead of picking one. Unpacking is limited (10 MB per attachment, 40 MB in total, 10 s).PDFs whose XML is not embedded as an attachment are no longer found; crafted PDFs no longer hang the browser.
2026-10-21Validator
Usability
Every validation has a job number; the result names the file, and an older result that finishes later is discarded. Running validations can be cancelled.none – results unchanged
2026-10-12Validator and API
Extra check
The check digit of the Leitweg-ID (BT-10, ISO 7064 Mod 97-10) is recalculated and reported as a notice. The KoSIT rules do not check it; the notice does not change the result.additional notice, not an error
2026-10-11Validator
Notices
ZUGFeRD profiles MINIMUM, BASIC WL, BASIC and EXTENDED are identified instead of only reporting “no validation profile”. These profiles are still validated against EN 16931, as in the KoSIT tool without a matching scenario.additional notice, result unchanged
2026-10-09API
First version
API 1.0.0 with the same validation core as the browser validator (Schematron rules, no schema validation).–
2026-10-08Validator
First version
Browser validator with the Schematron rules of the KoSIT configuration XRechnung 3.0.2 (release 2026-08-31): EN 16931 1.3.16 and XRechnung 3.0.2, with scenarios and severity levels as in the KoSIT tool. No schema validation at the time.–

Changes to the API interface are also listed in the API reference; quick start in English: API.

Technical notes on the data format, not tax or legal advice. Whether VAT rate, supply and amounts are correct in substance is a question for your tax adviser.