Validator-Vergleich: derselbe Fehler, verschiedene Antworten
Neunundzwanzig XRechnungen, jede genau eine dokumentierte Änderung von derselben gültigen Rechnung entfernt, durch zwei unabhängige Prüfprogramme geschickt. Der Datensatz steht unter CC BY 4.0 — prüfen Sie ihn nach, widersprechen Sie ihm.
29 Dokumente · Regelwerk v2026-08-31
Warum es das gibt
Ihre Software sagt, die Rechnung ist in Ordnung. Das System Ihres Kunden sagt, sie ist es nicht. Beide berufen sich auf dasselbe Regelwerk, und niemand kann den Streit auflösen, weil es keinen öffentlichen Datensatz gibt, an dem sich beide messen ließen.
Das hier ist dieser Datensatz. Jedes Dokument unterscheidet sich von der Kontrolle in genau einem dokumentierten Punkt, erzeugt von einem Skript statt von Hand. Wenn zwei Prüfprogramme bei einem Dokument nicht übereinstimmen, geht es um diesen einen Punkt und um nichts sonst.
Methode
Eine Basisrechnung, eine Änderung pro Fall, angewendet von corpus/build.py. Die Ergebnisdatei hält getrennt, was ein Dokument auslösen soll und was ein Prüfprogramm tatsächlich gemeldet hat — ein Datensatz, der seine eigenen Ergebnisse behauptet, beweist nichts.
Was der erste Durchlauf zeigt
- Vier Dokumente erreichen die Geschäftsregeln nie
- Fehlt ein Pflichtfeld — Rechnungsnummer, Rechnungsdatum, jede Position — ist das Dokument schon gegen das UBL-Schema ungültig. Gemeldet wird cvc-complex-type.2.4.a, und BR-02 kommt nie zum Zug. Ein Vergleich, der „hat es BR-02 gemeldet?" als Maßstab nimmt, wertet das als Fehlschlag, obwohl es keiner ist.
- Zwei Dokumente werden ohne jede Begründung abgelehnt
- Ohne Spezifikationskennung — oder mit einer Peppol-BIS-Kennung, wo eine XRechnung-Kennung stehen müsste — passt kein Szenario. Also wird kein Schema angewendet und keine Regel geprüft. Die Antwort lautet „nicht akzeptabel" mit leerer Fehlerliste: abgelehnt, ohne dass irgendetwas benannt wird. Genau das trifft einen Lieferanten, dessen Software Peppol BIS an einen deutschen Empfänger schickt.
- Mustang benennt die Regel, wo KoSIT nur das Schema meldet
- Fehlt die Rechnungsnummer, meldet KoSIT cvc-complex-type.2.4.a und hört auf. Mustang meldet BR-02 — dieselbe Rechnung, dieselbe Norm, aber ein Satz, mit dem der Absender etwas anfangen kann. Umgekehrt gilt es auch: die vertauschte Elementreihenfolge fällt KoSIT auf und Mustang gar nicht. Keines der beiden ist durchgehend das bessere; sie sind an verschiedenen Stellen streng.
- Dieselbe fehlende Position, zwei völlig verschiedene Antworten
- Eine Rechnung ohne Positionen meldet in UBL cvc-complex-type.2.4.b — einen Schemafehler, mit dem niemand etwas anfangen kann. Dasselbe Dokument in CII meldet BR-16, BR-CO-10 und BR-S-08: drei benannte Regeln mit Klartext. Derselbe Mangel, dieselbe Norm, unterschiedlich brauchbare Antwort.
KoSIT gegen Mustang
Zwei unabhängige Implementierungen desselben Regelwerks, dieselben 29 Dokumente. Sie sind sich bei 22 einig und bei 7 nicht — und die Unterschiede gehen in beide Richtungen.
7/29 uneinig · Nur die Fälle, in denen sie sich unterscheiden.
| Dokument | KoSIT meldet | Mustang meldet |
|---|---|---|
| br-02-missing-invoice-number | cvc-complex-type.2.4.a | BR-02 |
| br-03-missing-issue-date | cvc-complex-type.2.4.a | BR-03 |
| br-16-no-invoice-line | cvc-complex-type.2.4.b | BR-16, BR-S-01, BR-S-08, BR-CO-10 |
| br-de-17-invalid-type-code | BR-CL-01 | BR-CL-01, BR-DE-17 |
| schema-invalid-element-order | cvc-complex-type.2.4.a | nichts |
| cii-br-02-missing-invoice-number | cvc-complex-type.2.4.a | BR-02 |
| cii-br-de-17-invalid-type-code | BR-CL-01 | BR-CL-01, BR-DE-17 |
KoSIT v2026-08-31 · Mustang 2.17.0
UBL gegen CII: derselbe Fehler, zwei Syntaxen
Neun Fälle existieren zweimal: einmal in UBL, einmal in CII, mit derselben inhaltlichen Änderung. Eine Norm, die für beide Syntaxen dasselbe verlangt, sollte hier neunmal dasselbe melden.
1/9 unterschiedlich
| Bedingung | UBL meldet | CII meldet |
|---|---|---|
| BR-01 | nichts | nichts |
| BR-02 | cvc-complex-type.2.4.a | cvc-complex-type.2.4.a |
| BR-16 | cvc-complex-type.2.4.b | BR-16, BR-S-08, BR-CO-10 |
| BR-CO-16 | BR-CO-16 | BR-CO-16 |
| BR-CO-15 | BR-CO-15, BR-CO-16 | BR-CO-15, BR-CO-16 |
| BR-CO-13 | BR-CO-15, BR-CO-13 | BR-CO-15, BR-CO-13 |
| BR-DE-2 | BR-DE-2 | BR-DE-2 |
| BR-DE-15 | BR-DE-15 | BR-DE-15 |
| BR-DE-17 | BR-CL-01 | BR-CL-01 |
Alle Dokumente
Geprüft mit NormAPI · v2026-08-31
| Dokument | Gebaut für | Gemeldet |
|---|---|---|
| valid-ubl-standardUnveränderte XRechnung 3.0 (UBL). Die Kontrolle. | - | BR-DE-TMP-32 |
| br-01-missing-customizationSpezifikationskennung (CustomizationID) entfernt. | BR-01 | nichts |
| br-02-missing-invoice-numberRechnungsnummer entfernt. | BR-02 | cvc-complex-type.2.4.a |
| br-03-missing-issue-dateRechnungsdatum entfernt. | BR-03 | cvc-complex-type.2.4.a |
| br-06-missing-seller-nameName des Verkäufers entfernt. | BR-06 | BR-06 |
| br-08-missing-seller-addressPostanschrift des Verkäufers vollständig entfernt. | BR-08 | BR-08 |
| br-16-no-invoice-lineBeide Rechnungspositionen entfernt; Summen unverändert. | BR-16 | cvc-complex-type.2.4.b |
| br-co-10-line-sum-wrongSumme der Positionsbeträge als 300,00 statt 314,86 angegeben. | BR-CO-10 | BR-CO-10, BR-CO-13 |
| br-co-13-tax-exclusive-wrongNettobetrag als 300,00 statt 314,86 angegeben. | BR-CO-13 | BR-CO-15, BR-CO-13 |
| br-co-15-tax-inclusive-wrongBruttobetrag als 350,00 statt 336,90 angegeben. | BR-CO-15 | BR-CO-15, BR-CO-16 |
| br-co-16-payable-wrongFälliger Zahlbetrag als 300,00 statt 336,90 angegeben. | BR-CO-16 | BR-CO-16 |
| br-s-08-vat-amount-wrongSteuerbetrag der 7-%-Kategorie als 25,00 statt 22,04 angegeben. | BR-S-08 | BR-CO-14, BR-CO-17, BR-S-09 |
| br-de-1-missing-payment-meansPaymentMeans entfernt — keine Zahlungsanweisung vorhanden. | BR-DE-1 | BR-DE-1 |
| br-de-2-missing-seller-contactKontaktangaben des Verkäufers entfernt. | BR-DE-2 | BR-DE-2 |
| br-de-15-missing-buyer-referenceLeitweg-ID (BuyerReference) entfernt. | BR-DE-15 | BR-DE-15 |
| br-de-17-invalid-type-codeRechnungsart auf 999 gesetzt — außerhalb der zulässigen Liste. | BR-DE-17 | BR-CL-01 |
| br-de-21-wrong-customizationSpezifikationskennung durch die Peppol-BIS-Kennung ersetzt. | BR-DE-21 | nichts |
| schema-invalid-element-orderWohlgeformt, aber IssueDate steht hinter InvoiceTypeCode — verletzt die UBL-Reihenfolge. | XSD | cvc-complex-type.2.4.a |
| not-well-formedMitten im Dokument abgeschnitten; das Wurzelelement wird nie geschlossen. | WELLFORMED | nichts |
| valid-cii-standardUnveränderte XRechnung 3.0 (CII). Die zweite Kontrolle. | - | BR-DE-TMP-32 |
| cii-br-01-missing-customizationSpezifikationskennung entfernt. Zwilling von br-01-missing-customization. | BR-01 | nichts |
| cii-br-02-missing-invoice-numberRechnungsnummer entfernt. Zwilling von br-02-missing-invoice-number. | BR-02 | cvc-complex-type.2.4.a |
| cii-br-16-no-invoice-lineEinzige Rechnungsposition entfernt. Zwilling von br-16-no-invoice-line. | BR-16 | BR-16, BR-S-08, BR-CO-10 |
| cii-br-co-16-payable-wrongFälliger Zahlbetrag als 300,00 statt 336,90. Zwilling von br-co-16-payable-wrong. | BR-CO-16 | BR-CO-16 |
| cii-br-co-15-tax-inclusive-wrongBruttobetrag als 350,00 statt 336,90. Zwilling von br-co-15-tax-inclusive-wrong. | BR-CO-15 | BR-CO-15, BR-CO-16 |
| cii-br-co-13-tax-exclusive-wrongNettobetrag als 300,00 statt 314,86. Zwilling von br-co-13-tax-exclusive-wrong. | BR-CO-13 | BR-CO-15, BR-CO-13 |
| cii-br-de-2-missing-seller-contactKontaktangaben des Verkäufers entfernt. Zwilling von br-de-2-missing-seller-contact. | BR-DE-2 | BR-DE-2 |
| cii-br-de-15-missing-buyer-referenceLeitweg-ID entfernt. Zwilling von br-de-15-missing-buyer-reference. | BR-DE-15 | BR-DE-15 |
| cii-br-de-17-invalid-type-codeRechnungsart auf 999 gesetzt. Zwilling von br-de-17-invalid-type-code. | BR-DE-17 | BR-CL-01 |
Daten herunterladen
CC BY 4.0. Namensnennung: NormAPI, normapi.de.
NormAPI liefert technische Validierung, keine Steuer- oder Rechtsberatung.