# Herkunft der Prüfregeln und des Prüfers

Stand: 2026-10-06. Erzeugt bzw. geprüft mit `erechnung/regeln-aktualisieren.mjs`; die Prüfsummen jeder Datei
in `erechnung/regeln/` stehen in `erechnung/manifest.json` und werden beim Start des Prüfers verglichen.

## Bestandteile im Repository

| Bestandteil | Version | Quelle | Prüfsumme (SHA-256) | Lizenz | Dateien in `erechnung/regeln/` |
|---|---|---|---|---|---|
| KoSIT-Prüfkonfiguration für XRechnung | `xrechnung-3.0.2-validator-configuration-2026-08-31` (GitHub-Release `v2026-08-31`, Dokumentdatum 2026-09-02) | <https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/download/v2026-08-31/xrechnung-3.0.2-validator-configuration-2026-08-31.zip> | ZIP `2530cd107c414511c5d0462ec10f886910395abfca820db82e83d70bf01221a8` | Apache-2.0 (`Apache-2.0.txt`, mit dem Hinweis der KoSIT zu CEN/DIN) und `KoSIT-NOTICE.txt` | `scenarios.xml`, `resources/default-report.xsl`, `resources/xrechnung-report.xsl` (alle unverändert) |
| CEN-Schematron EN 16931 für CII | 1.3.16 (`validation-1.3.16`) | in der KoSIT-Konfiguration enthalten; Ursprung <https://github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.16> | Original `0911e927f13f9ae2cdc7f973643f27bf0ad3c5da02483c04a5b8a47eb4822199` | EUPL-1.2 (`EUPL-1.2.txt`, Lizenztext aus dem Tag `validation-1.3.16`) | `resources/cii/16b/xsl/EN16931-CII-validation.xsl` – **geändert** (P2, siehe `AENDERUNGEN.md`) |
| XRechnung-Schematron für CII | 2.6.0 (für XRechnung 3.0.2) | in der KoSIT-Konfiguration enthalten; Ursprung <https://projekte.kosit.org/api/v4/projects/356/packages/maven/de/xeinkauf/xrechnung-3.0.2-schematron/2.6.0/xrechnung-3.0.2-schematron-2.6.0.zip> (ZIP `ca5e07afd04e72cd283d581590ffff3a15f4aac9d2f40c993345d78e67ea22b4`) | Original `ec54f662803a87f527ec606d1320bc404f1657a848af6a76f37f32905e4aac40` | Apache-2.0 (`XRechnung-Schematron-LICENSE.txt` aus dem Schematron-ZIP) | `resources/xrechnung/3.0.2/xsl/XRechnung-CII-validation.xsl` – **geändert** (P1, P2, P3) |
| UN/CEFACT Cross Industry Invoice, XML-Schema D16B | 100pD16B | in der KoSIT-Konfiguration enthalten (Herausgeber UN/CEFACT) | siehe `manifest.json` | Bedingungen der UNECE; unverändert übernommen | `resources/cii/16b/xsd/*.xsd` (4 Dateien) |

Aus der Konfiguration übernommen werden nur die Dateien der vier CII-Szenarien („EN16931 XRechnung (CII)“,
„… Extension (CII)“, „… CVD (CII)“, „EN16931 (CII)“). buerow erzeugt nur CII; UBL-Dokumente erkennt der Prüfer
über `scenarios.xml`, prüft sie aber nicht (Ergebnis „nicht geprüft“).

Zur Laufzeit liest der Prüfer `scenarios.xml` (Szenarien, Namensräume, customLevels). `default-report.xsl` und
`xrechnung-report.xsl` führt er nicht aus; ihre Stufen- und Annahmeregeln sind in `erechnung/pruefer.mjs`
nachgebildet. Alle drei Rahmendateien sind im Manifest gepinnt (`rahmen`); ändert ein neues Release eine davon,
bricht `regeln-aktualisieren.mjs` mit „Rahmenlogik von Hand prüfen“ ab.

## Laufzeit und Werkzeuge (nicht im Repository, über pnpm)

| Paket | Version | Zweck | Lizenz |
|---|---|---|---|
| `saxon-js` | 2.7.0 (exakt gepinnt) | führt die kompilierten Schematron-Regeln (SEF) im Worker aus | Saxonica-Lizenz, proprietär und kostenlos, Weitergabe nur unverändert (`SaxonJS-LICENSE.txt`, Copyright Saxonica Ltd.) |
| `xslt3` | 2.7.0 (devDependency, exakt gepinnt) | kompiliert die XSLTs zu SEF (`pnpm erechnung:sef`, im Docker-Build) | wie `saxon-js` |
| `libxml2-wasm` | 0.6.0 (exakt gepinnt) | Wohlgeformtheit und XSD-Prüfung im Worker | MIT |

SaxonJS wird nicht ins Vite-Bundle aufgenommen und nicht verändert; der Worker `erechnung/pruefer.mjs` lädt es aus
`node_modules`. Die SEF-Dateien in `erechnung/sef/` sind Kompilate der Regeldateien (nicht eingecheckt).

Copyright-Hinweis und Haftungsausschluss für SaxonJS (Bedingung 1 der Lizenz):

> Copyright: The copyright in the Software belongs to Saxonica Ltd, except for third-party components listed in the
> documentation that are distributed under license.
>
> DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS." ANY EXPRESS OR IMPLIED
> WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
> GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
> LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## Referenz für den Abgleich (nicht im Betrieb)

Die Urteile in `erechnung/selbsttest/erwartung.json` und `test/fixtures/erechnung/erwartung.json` stammen aus dem
KoSIT-Validator mit derselben Konfiguration:

| Werkzeug | Version | Quelle | Prüfsumme |
|---|---|---|---|
| KoSIT-Validator | 1.6.3, `validator-1.6.3-standalone.jar` (Apache-2.0) | <https://repo1.maven.org/maven2/org/kosit/validator/1.6.3/validator-1.6.3-standalone.jar> | SHA-256 `799e64befca97d4080e03608c80b85dd5a5ecc5f4ae4f35d1116ec2855b9a7c9`, SHA-1 `2e9642d10d953ffbde48b8e921eaf042b37d2b17` (Maven Central) |
| Java-Laufzeit | `eclipse-temurin:21-jre@sha256:cff19e6215689161eb6162c11b86b0c60ddf802164f2eaf48d570f8fb79a36c5` | Docker Hub | Digest |
| XRechnung-Testsuite | `xrechnung-3.0.2-testsuite-2026-08-31` (Apache-2.0) | <https://github.com/itplr-kosit/xrechnung-testsuite> | ZIP `1e81ef7563e0fa04c0e0b0631318a7e0843a3c0beb57d83ef95ac0c4a095e3d7` |

Ergebnis des Abgleichs am 2026-10-06: 218 von 218 Dateien mit gleichem Szenario, gleichem Urteil und gleicher
Menge von (Regel, Stufe) wie der KoSIT-Validator (mit P1 und P2; P3 für den Regex-Punkt bei U+2028/U+2029).
Bekannte, bewusst nicht behobene Restabweichungen: XML 1.1, exotische Zeichenkodierungen in fremden Dateien,
BR-CO-10 bei Beträgen ab etwa 10^13 €, BR-CO-10 zusätzlich bei Zeilenbeträgen mit mehr als zwei Nachkommastellen
nahe einem halben Cent (Urteil gleich, weil BR-DEC-23 greift; `gegen/d04`, `d05`, siehe `AENDERUNGEN.md`), die
Warnung PEPPOL-EN16931-R120 genau an der Toleranzgrenze und die quadratische Laufzeit ab vielen hundert Positionen.
Deshalb prüft buerow höchstens 300 Positionen: gemessen (echter Generator, warm, Apple M4 Pro nativ) 300 Positionen
1,0 s, 400 Positionen 1,7 s, 500 Positionen 2,5 s, 1000 Positionen 8–9 s je Datei; im linux/amd64-Container unter
Emulation rund fünfmal so lange (400 Positionen 9 s je Datei, Abschluss mit Leitweg-ID samt Erzeugung 18 s). Bei
Leitweg-Kunden laufen ZUGFeRD und XRechnung in derselben Frist von 20 s; mit 300 Positionen bleibt das auch auf
einer langsamen vCPU deutlich darunter.
PROCESSING_ERROR (Regeln auf ein Dokument nicht anwendbar, z. B. `gegen/c03`, `t08`) lehnt KoSIT ab; buerow wertet
es ebenso als „ungültig“ (nach bestandenem Selbsttest liegt es am Dokument, nicht am Prüfer).
