BR-DE-18: Skontoangabe in den Zahlungsbedingungen (BT-20) hat das falsche Muster
Schweregrad: fatal · Syntax: CII, UBL
Offizielle Meldung
Skonto Zeilen in {name()} muessen diesem regulärem Ausdruck entsprechen: {$XR-SKONTO-REGEX}. 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. Liegt dem zu berechnenden Betrag nicht BT-115, "fälliger Betrag" zugrunde, sondern nur ein Teil des fälligen Betrags der Rechnung, ist der Grundwert zur Berechnung von Skonto als viertes Segment "BASISBETRAG=n" gemäß dem semantischen Datentypen Amount anzugeben. Jeder Eintrag beginnt mit einer #, die Segmente sind mit einer # getrennt und eine Zeile schließt mit einer # ab. Am Ende einer vollständigen Skontoangabe muss ein XML-konformer Zeilenumbruch folgen. Alle Angaben zur Gewährung von Skonto müssen in Großbuchstaben gemacht werden. Zusätzliches Whitespace (Leerzeichen, Tabulatoren oder Zeilenumbrüche) ist nicht zulässig. Andere Zeichen oder Texte als in den oberen Vorgaben genannt sind nicht zulässig.
Was bedeutet das?
Skontozeilen in Payment terms (BT-20) müssen dem Ausdruck XR-SKONTO-REGEX der XRechnung-Schematron entsprechen: (^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$. Die Meldung verlangt die Segmente SKONTO, TAGE=n und PROZENT=n mit zwei Nachkommastellen und Punkt, optional BASISBETRAG=n, alles in Großbuchstaben, ohne zusätzliches Whitespace, jede Zeile mit # begonnen und beendet, danach ein XML-Zeilenumbruch. Im kompilierten Stylesheet werden der Dokumentname und der Ausdruck per xsl:value-of eingesetzt; die statische Meldung allein zeigt diese beiden Stellen nicht.
Typische Ursache
Skonto steht als normaler Satz („2 % innerhalb 14 Tagen“) statt im vorgeschriebenen Muster.
So beheben Sie es
Schreiben Sie eine Zeile im Muster und schließen Sie sie mit einem Zeilenumbruch ab.
UBL
<cbc:Note>#SKONTO#TAGE=14#PROZENT=2.00#
</cbc:Note>CII
<ram:Description>#SKONTO#TAGE=14#PROZENT=2.00#
</ram:Description>
Business Term
Payment terms (BT-20), BT-115
Verwandte Regeln
Kontext und Prüfbedingung
UBL /ubl:Invoice | /cn:CreditNote
CII /rsm:CrossIndustryInvoice
UBL
every $line in cac:PaymentTerms/cbc:Note[1]/tokenize(. , '(\r?\n)')[starts-with( normalize-space(.) , '#')] satisfies matches ( normalize-space ($line), $XR-SKONTO-REGEX) and matches( cac:PaymentTerms/cbc:Note[1]/tokenize(. , '#.+#')[last()], '^\s*\n' )CII
every $line in rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[1]/tokenize(. , '(\r?\n)')[starts-with( normalize-space(.) , '#')] satisfies matches ( normalize-space ($line), $XR-SKONTO-REGEX ) and matches( rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradePaymentTerms/ram:Description[1]/tokenize(. , '#.+#')[last()], '^\s*\n' )
curl -F "file=@rechnung.xml" https://checkxrechnung.com/v1/validate
Fragen
Was prüft BR-DE-18 genau?
Skontozeilen in Payment terms (BT-20) müssen dem Ausdruck XR-SKONTO-REGEX der XRechnung-Schematron entsprechen: (^|\r?\n)#(SKONTO)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$. Die Meldung verlangt die Segmente SKONTO, TAGE=n und PROZENT=n mit zwei Nachkommastellen und Punkt, optional BASISBETRAG=n, alles in Großbuchstaben, ohne zusätzliches Whitespace, jede Zeile mit # begonnen und beendet, danach ein XML-Zeilenumbruch. Im kompilierten Stylesheet werden der Dokumentname und der Ausdruck per xsl:value-of eingesetzt; die statische Meldung allein zeigt diese beiden Stellen nicht.
Wie behebe ich BR-DE-18?
Schreiben Sie eine Zeile im Muster und schließen Sie sie mit einem Zeilenumbruch ab.
Heißt eine bestandene Prüfung von BR-DE-18, dass ein Portal die Rechnung annimmt?
Nein. Die Seite hilft Ihnen, diese eine Schematron-Aussage zu verstehen. Ein Bestehen hier ist keine Aussage über Steuerrecht, Portalannahme oder Bank-Overlays.