eInvoice Validator for PEPPOL & EN16931

Lösung 3 · frei

Der offizielle Prüfer. Auf Ihrem Server.

Ein Shortcode stellt den offiziellen KoSIT-Validator auf Ihre Seite. Der Besucher zieht eine E-Rechnungs-XML darauf, das Plugin prüft sie gegen genau die Schematron- und XSD-Szenarien, auf die sich das XRechnung-Ökosystem selbst verlässt, und zeigt das Urteil mit jedem Befund. Nichts verlässt Ihren Server: keine Prüf-API eines Dritten, kein Konto, kein Schlüssel.


Echte Ausgabe, kein Mockup

Prüfbericht des KoSIT-Validators: abgelehnt mit vier Fehlern, jede Fundstelle mit Regel-Kennung, Klartext und XPath

Ein abgelehnter Bericht: vier Fehler, jeder mit seiner Regel-Kennung, dem Regeltext im Klartext und der genauen Fundstelle im Dokument. Getrennt nach Fehlern, Warnungen und Hinweisen.

Kein Nachbau

Dasselbe Werkzeug, das auch die Prüfstelle einsetzt.

Tools Tools

Die echte validator.jar

Das Plugin führt die Java-Anwendung aus, die das deutsche XRechnung-Projekt selbst ausliefert – und für die PEPPOL und Factur-X ihre eigenen Szenario-Konfigurationen veröffentlichen. Keine nachgebaute Annäherung an die Regeln.

Note Note

Drei Regelwerke nacheinander

XRechnung 3.0.2, ZUGFeRD/Factur-X EN16931 samt EXTENDED und PEPPOL BIS Billing 3.0. Jedes konfigurierte Szenario wird der Reihe nach versucht, ein Upload also gegen jedes Format geprüft, das plausibel infrage kommt. Ein Format, das nicht installiert ist, wird übersprungen statt als Fehler behandelt.

Search Search

Abgelehnt ist kein Absturz

Der KoSIT-Validator endet auch dann mit einem Fehlercode, wenn er ein Dokument korrekt als ungültig erkennt – bei einer fehlerhaften Rechnung ist das der erwartete Ausgang. Das Urteil hängt deshalb nie am Exitcode allein, sondern daran, ob überhaupt ein Bericht entstanden ist.

Was hinten herauskommt

Der maßgebliche Bericht – oder einer in Klartext.

Die rohe Berichts-XML des KoSIT-Validators steht immer als Download bereit – für alle, die das maßgebliche Artefakt selbst brauchen, etwa zur Ablage oder zur Weitergabe.

Ist der Validation Explainer daneben aktiv, erscheint derselbe Bericht stattdessen in Klartext: jeder Befund mit seinem EN-16931-Business-Term beschriftet, in einem verschachtelten Shadow DOM, damit dessen Typografie nicht in die umgebende Seite ausläuft. Kommt der Explainer mit einem Bericht nicht zurecht, wird die rohe KoSIT-HTML gezeigt statt gar nichts.

Zusammenspiel mit den Nachbarn

Explainer übernimmt die Darstellung des Berichts, sobald er aktiv ist.

Viewer bekommt einen Knopf „Mit dem KoSIT-Validator prüfen“ direkt in seiner Ergebnisansicht – für die Rechnung, die der Besucher ohnehin schon hochgeladen hat. Kein zweiter Upload, kein Seitenwechsel.

Ohne Konfiguration beide Brücken greifen allein daran, dass das andere Plugin da ist. Fehlt es, bricht nichts.

Angenommener Prüfbericht mit den einzelnen Prüfschritten: XML-Schema, Schematron-Regeln und val.xml, jeweils ohne Fehler

Angenommen: die Prüfschritte einzeln aufgeführt – XML-Schema, Schematron-Regeln, val.xml.

Dokumentinhalt der geprüften Rechnung, die beanstandete Zeile farblich hervorgehoben

Der Dokumentinhalt daneben – die beanstandete Zeile ist direkt im Baum markiert.

Ein Vorgang, der Sekunden braucht

Eine Java-Prüfung, die niemandem im Weg steht.

Anders als Viewer und Explainer kommt dieses Plugin nicht ohne temporäre Datei aus: die Validator-Kommandozeile verlangt einen Dateipfad, keine Daten über die Standardeingabe. Der Ausgleich dafür ist ein frisches, unvorhersehbar benanntes Verzeichnis je Anfrage – außerhalb des Uploads-Ordners, gelöscht samt Bericht in einem finally-Block, der auch dann läuft, wenn die Prüfung fehlschlug oder eine Ausnahme warf.

Ein hängender Validator kann keinen Worker blockieren: die Ausgabekanäle des Prozesses werden nicht-blockierend in derselben Schleife abgeschöpft, die auch das Zeitlimit überwacht – nicht erst, wenn der Prozess fertig ist. Der Prozessaufruf selbst läuft im Array-Modus statt über eine zusammengesetzte Shell-Zeile, was Escaping-Fallstricke bei Windows-Pfaden vollständig vermeidet.

Voraussetzungen und Einstellungen

Erfordert eine lokale Java-Laufzeit und eine KoSIT-Validator-Installation. Beides ist nicht mitgeliefert – das Plugin ruft eine vorhandene Installation auf.

Einstellungen Validator-Verzeichnis, Pfad zum Java-Programm, Zeitlimit, Tageslimit, maximale Dateigröße, Proxy-Header.

Zeitlimit ein Lauf dauert typischerweise 10–15 Sekunden, weil die JVM startet und die Szenarien geladen werden. Voreinstellung 60 Sekunden.

Tageslimit pro Besucher, angemeldet per Benutzer-ID, anonym per gehashter IP – hier wichtiger als bei den Geschwistern, weil jeder Upload einen mehrsekündigen Java-Prozess startet.

Einbinden kosit_validator in eckigen Klammern, ohne Attribute. Dazu die REST-Route POST /wp-json/einvoice/v1/validate.

Umgebung WordPress 5.8+ (getestet bis 7.1), PHP 8.2+.

Prüfen ist das eine. Verstehen das andere.

Der Validator liefert das Urteil, der Validation Explainer macht daraus Sätze, die man ohne Schematron-Kenntnisse lesen kann. Zusammen sind das zwei Plugins und ein Upload.