BR-DE-18: Skonto-Angabe (BT-20) im falschen Format
Skonto steht in den Zahlungsbedingungen in einer festen Syntax: #SKONTO#TAGE=14#PROZENT=2.00#.
Steckbrief
- Regel
BR-DE-18- Schweregrad
- Fehler – die Rechnung ist ungültig
- Regelwerk
- XRechnung 3.0 (KoSIT)
- Betroffene Felder
- BT-20
- Syntax
- CII & UBL
Rechnung jetzt prüfen
PDF oder XML hochladen – kostenlos, ohne Anmeldung, gegen die offiziellen Regelwerke.
Zum Online-ValidatorOffizieller Wortlaut
[BR-DE-18] … Die Informationen zur Gewährung von Skonto müssen wie folgt im Element "Payment terms" (BT-20) übermittelt werden: Anzugeben ist im ersten Segment "SKONTO", im zweiten "TAGE=n", im dritten "PROZENT=n". Prozentzahlen sind ohne Vorzeichen sowie mit Punkt getrennt von zwei Nachkommastellen anzugeben. …
Quelle: offizielle Schematron der KoSIT für XRechnung 3.0.
Was die Regel verlangt
Die XRechnung kennt kein eigenes Feld für Skonto. Damit es trotzdem maschinell auswertbar ist, steht es in den Zahlungsbedingungen (Payment terms, BT-20) in einer festen Syntax:
#SKONTO#TAGE=14#PROZENT=2.00#
- Jede Skonto-Zeile beginnt und endet mit
#; die Segmente heißenSKONTO,TAGE=undPROZENT=– in Großbuchstaben. - Prozente immer mit Punkt und genau zwei Nachkommastellen:
2.00, nicht2oder2,00. - Gilt das Skonto nur für einen Teil des Betrags, folgt
#BASISBETRAG=300.00#. - Nach der letzten Skonto-Zeile muss ein Zeilenumbruch folgen. Mehrere Stufen stehen in eigenen Zeilen.
- Keine Leerzeichen innerhalb der Angabe. Freitext ist erlaubt, aber nur in eigenen Zeilen, die nicht mit
#beginnen.
Typische Ursachen
- Komma statt Punkt (
PROZENT=2,00) oder fehlende Nachkommastellen (PROZENT=2) – oft durch Formatierung mit deutscher Kultur. - Der abschließende Zeilenumbruch fehlt, weil die Software den Text trimmt.
- Kleinbuchstaben oder Leerzeichen, etwa
#Skonto#oder#SKONTO# TAGE=14. - Skonto und Freitext stehen in derselben Zeile.
Ein reiner Freitext wie „2 % Skonto bei Zahlung innerhalb von 14 Tagen“ löst BR-DE-18 nicht aus, ist aber für den Empfänger nicht automatisch auswertbar.
So sieht es im XML aus
<ram:SpecifiedTradePaymentTerms>
<ram:Description>#SKONTO#TAGE=14#PROZENT=2,00#</ram:Description>
</ram:SpecifiedTradePaymentTerms>
<ram:SpecifiedTradePaymentTerms>
<ram:Description>#SKONTO#TAGE=14#PROZENT=2.00#
Zahlbar innerhalb von 30 Tagen ohne Abzug.</ram:Description>
<ram:DueDateDateTime>
<udt:DateTimeString format="102">20261120</udt:DateTimeString>
</ram:DueDateDateTime>
</ram:SpecifiedTradePaymentTerms>
In UBL steht derselbe Text in cac:PaymentTerms/cbc:Note.
Lösung in C#
Im Facturexa Creator übergeben Sie den Text der Zahlungsbedingungen
unverändert. Formatieren Sie Prozente mit CultureInfo.InvariantCulture und dem Format
"0.00", nicht mit der Kultur des Rechners.
// Jede Skonto-Zeile endet mit einem Zeilenumbruch, auch die letzte.
rechnung.AddSpecifiedTradePaymentTerms(
"#SKONTO#TAGE=7#PROZENT=3.00#\n" +
"#SKONTO#TAGE=14#PROZENT=2.00#\n" +
"Zahlbar innerhalb von 30 Tagen ohne Abzug.",
dueDate: rechnung.InvoiceDate.Value.AddDays(30));