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.

DokumentKoSIT meldetMustang meldet
br-02-missing-invoice-numbercvc-complex-type.2.4.aBR-02
br-03-missing-issue-datecvc-complex-type.2.4.aBR-03
br-16-no-invoice-linecvc-complex-type.2.4.bBR-16, BR-S-01, BR-S-08, BR-CO-10
br-de-17-invalid-type-codeBR-CL-01BR-CL-01, BR-DE-17
schema-invalid-element-ordercvc-complex-type.2.4.anichts
cii-br-02-missing-invoice-numbercvc-complex-type.2.4.aBR-02
cii-br-de-17-invalid-type-codeBR-CL-01BR-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

BedingungUBL meldetCII meldet
BR-01nichtsnichts
BR-02cvc-complex-type.2.4.acvc-complex-type.2.4.a
BR-16cvc-complex-type.2.4.bBR-16, BR-S-08, BR-CO-10
BR-CO-16BR-CO-16BR-CO-16
BR-CO-15BR-CO-15, BR-CO-16BR-CO-15, BR-CO-16
BR-CO-13BR-CO-15, BR-CO-13BR-CO-15, BR-CO-13
BR-DE-2BR-DE-2BR-DE-2
BR-DE-15BR-DE-15BR-DE-15
BR-DE-17BR-CL-01BR-CL-01

Alle Dokumente

Geprüft mit NormAPI · v2026-08-31

DokumentGebaut fürGemeldet
valid-ubl-standardUnveränderte XRechnung 3.0 (UBL). Die Kontrolle.-BR-DE-TMP-32
br-01-missing-customizationSpezifikationskennung (CustomizationID) entfernt.BR-01nichts
br-02-missing-invoice-numberRechnungsnummer entfernt.BR-02cvc-complex-type.2.4.a
br-03-missing-issue-dateRechnungsdatum entfernt.BR-03cvc-complex-type.2.4.a
br-06-missing-seller-nameName des Verkäufers entfernt.BR-06BR-06
br-08-missing-seller-addressPostanschrift des Verkäufers vollständig entfernt.BR-08BR-08
br-16-no-invoice-lineBeide Rechnungspositionen entfernt; Summen unverändert.BR-16cvc-complex-type.2.4.b
br-co-10-line-sum-wrongSumme der Positionsbeträge als 300,00 statt 314,86 angegeben.BR-CO-10BR-CO-10, BR-CO-13
br-co-13-tax-exclusive-wrongNettobetrag als 300,00 statt 314,86 angegeben.BR-CO-13BR-CO-15, BR-CO-13
br-co-15-tax-inclusive-wrongBruttobetrag als 350,00 statt 336,90 angegeben.BR-CO-15BR-CO-15, BR-CO-16
br-co-16-payable-wrongFälliger Zahlbetrag als 300,00 statt 336,90 angegeben.BR-CO-16BR-CO-16
br-s-08-vat-amount-wrongSteuerbetrag der 7-%-Kategorie als 25,00 statt 22,04 angegeben.BR-S-08BR-CO-14, BR-CO-17, BR-S-09
br-de-1-missing-payment-meansPaymentMeans entfernt — keine Zahlungsanweisung vorhanden.BR-DE-1BR-DE-1
br-de-2-missing-seller-contactKontaktangaben des Verkäufers entfernt.BR-DE-2BR-DE-2
br-de-15-missing-buyer-referenceLeitweg-ID (BuyerReference) entfernt.BR-DE-15BR-DE-15
br-de-17-invalid-type-codeRechnungsart auf 999 gesetzt — außerhalb der zulässigen Liste.BR-DE-17BR-CL-01
br-de-21-wrong-customizationSpezifikationskennung durch die Peppol-BIS-Kennung ersetzt.BR-DE-21nichts
schema-invalid-element-orderWohlgeformt, aber IssueDate steht hinter InvoiceTypeCode — verletzt die UBL-Reihenfolge.XSDcvc-complex-type.2.4.a
not-well-formedMitten im Dokument abgeschnitten; das Wurzelelement wird nie geschlossen.WELLFORMEDnichts
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-01nichts
cii-br-02-missing-invoice-numberRechnungsnummer entfernt. Zwilling von br-02-missing-invoice-number.BR-02cvc-complex-type.2.4.a
cii-br-16-no-invoice-lineEinzige Rechnungsposition entfernt. Zwilling von br-16-no-invoice-line.BR-16BR-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-16BR-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-15BR-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-13BR-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-2BR-DE-2
cii-br-de-15-missing-buyer-referenceLeitweg-ID entfernt. Zwilling von br-de-15-missing-buyer-reference.BR-DE-15BR-DE-15
cii-br-de-17-invalid-type-codeRechnungsart auf 999 gesetzt. Zwilling von br-de-17-invalid-type-code.BR-DE-17BR-CL-01

Daten herunterladen

CC BY 4.0. Namensnennung: NormAPI, normapi.de.

English version

NormAPI liefert technische Validierung, keine Steuer- oder Rechtsberatung.