BR-DEC: Nachkommastellen — zwei, überall
Einundzwanzig BR-DEC-Regeln, die alle dasselbe sagen: höchstens zwei Nachkommastellen. Sie unterscheiden sich nur darin, welchen Betrag sie meinen.
21 Regeln · Regelwerk v2026-08-31
Warum es überhaupt einundzwanzig sind
Die Norm formuliert die Anforderung je Feld statt einmal für alle Beträge, weil jedes Feld eine eigene Regelnummer bekommt. Fachlich ist es ein einziger Satz; im Fehlerbericht sind es einundzwanzig mögliche Codes.
Der Steuersatz (BT-152, BT-119) ist ausgenommen — Prozentsätze dürfen mehr Stellen tragen. Und nicht jeder Geldbetrag ist dabei: der Einzelpreis (BT-146) und der Bruttopreis (BT-148) haben keine BR-DEC-Regel, also auch keine Zweistellengrenze. Wer Preise mit vier Stellen führt und die Positionsbeträge daraus sauber gerundet ableitet, verstößt gegen nichts. Geprüft werden die einundzwanzig Beträge unten und sonst keiner.
Die Nummerierung hat Lücken: BR-DEC-03, -04, -07, -08, -21, -22 und -26 kommen im ausgelieferten Regelwerk nicht vor. Wer einen dieser Codes in einer fremden Fehlerliste findet, sucht auf dieser Seite vergeblich — der deutsche Prüfer kennt sie nicht.
Wie es entsteht
Nicht durch Eingabe, sondern durch Rechnen. Ein Rabatt von 3,33 % auf 1.000,00 € ergibt 33,3333…, und wer das Zwischenergebnis direkt schreibt, überträgt vier Stellen. Genauso bei Umrechnungen von Preiseinheiten und beim Aufteilen von Beträgen auf Positionen.
Runden Sie bei der Ausgabe, nicht in der Rechnung — und rechnen Sie mit Dezimalarithmetik, nicht mit float. Dass die gerundeten Werte anschließend noch zueinander passen müssen, prüfen BR-CO-10 bis BR-CO-17.
Der Test darunter zeigt, dass hier nicht gerechnet, sondern gezählt wird: string-length(substring-after(…, '.')) <= 2 nimmt die Zeichen hinter dem Punkt. Damit zählen auch angehängte Nullen. 1000.000 fällt durch, obwohl der Wert exakt tausend ist; 1000.00 geht durch. Es ist eine Regel über die geschriebene Form, nicht über die Zahl — was ein Serialisierer entscheidet, nicht die Buchhaltung.
Alle Nachkommastellen-Regeln
Je Betrag eine Regel, mit dem offiziellen Regeltext.
BR-DEC-01
Abschlag auf Dokumentebene (BT-92)
The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-02
Bemessungsgrundlage des Abschlags auf Dokumentebene (BT-93)
The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
BR-DEC-05
Zuschlag auf Dokumentebene (BT-99)
The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-06
Bemessungsgrundlage des Zuschlags auf Dokumentebene (BT-100)
The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
BR-DEC-09
Summe der Positionsnettobeträge (BT-106)
The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:LineExtensionAmount,'.'))<=2CIIstring-length(substring-after(ram:LineTotalAmount,'.'))<=2
BR-DEC-10
Summe der Abschläge auf Dokumentebene (BT-107)
The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:AllowanceTotalAmount,'.'))<=2CIIstring-length(substring-after(ram:AllowanceTotalAmount,'.'))<=2
BR-DEC-11
Summe der Zuschläge auf Dokumentebene (BT-108)
The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:ChargeTotalAmount,'.'))<=2CIIstring-length(substring-after(ram:ChargeTotalAmount,'.'))<=2
BR-DEC-12
Gesamtbetrag ohne Umsatzsteuer (BT-109)
The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:TaxExclusiveAmount,'.'))<=2CIIstring-length(substring-after(ram:TaxBasisTotalAmount,'.'))<=2
BR-DEC-13
Gesamtbetrag der Umsatzsteuer (BT-110)
The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.
- Was der Validator prüft
UBL(//cac:TaxTotal/cbc:TaxAmount[@currencyID = cbc:DocumentCurrencyCode] and (string-length(substring-after(//cac:TaxTotal/cbc:TaxAmount[@currencyID = cbc:DocumentCurrencyCode],'.'))<=2)) or (not(//cac:TaxTotal/cbc:TaxAmount[@currencyID = cbc:DocumentCurrencyCode]))CIInot(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode and . = round(. * 100) div 100) or not (@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode)]
BR-DEC-14
Gesamtbetrag mit Umsatzsteuer (BT-112)
The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:TaxInclusiveAmount,'.'))<=2CIIstring-length(substring-after(ram:GrandTotalAmount,'.'))<=2
BR-DEC-15
Umsatzsteuerbetrag in Buchungswährung (BT-111)
The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.
- Was der Validator prüft
UBL(//cac:TaxTotal/cbc:TaxAmount[@currencyID = cbc:TaxCurrencyCode] and (string-length(substring-after(//cac:TaxTotal/cbc:TaxAmount[@currencyID = cbc:TaxCurrencyCode],'.'))<=2)) or (not(//cac:TaxTotal/cbc:TaxAmount[@currencyID = cbc:TaxCurrencyCode]))CIInot(ram:TaxTotalAmount) or ram:TaxTotalAmount[(@currencyID =/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode and . = round(. * 100) div 100) or not (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:TaxCurrencyCode)]
BR-DEC-16
Bereits gezahlter Betrag (BT-113)
The allowed maximum number of decimals for the Paid amount (BT-113) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:PrepaidAmount,'.'))<=2CIIstring-length(substring-after(ram:TotalPrepaidAmount,'.'))<=2
BR-DEC-17
Rundungsbetrag (BT-114)
The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:PayableRoundingAmount,'.'))<=2CIIstring-length(substring-after(ram:RoundingAmount,'.'))<=2
BR-DEC-18
Zahlbetrag (BT-115)
The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:PayableAmount,'.'))<=2CIIstring-length(substring-after(ram:DuePayableAmount,'.'))<=2
BR-DEC-19
Bemessungsgrundlage je Steuerkategorie (BT-116)
The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:TaxableAmount,'.'))<=2CIIstring-length(substring-after(ram:BasisAmount,'.'))<=2
BR-DEC-20
Steuerbetrag je Steuerkategorie (BT-117)
The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:TaxAmount,'.'))<=2CIIstring-length(substring-after(ram:CalculatedAmount,'.'))<=2
BR-DEC-23
Positionsnettobetrag (BT-131)
The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:LineExtensionAmount,'.'))<=2CIIstring-length(substring-after(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,'.'))<=2
BR-DEC-24
Abschlag auf Positionsebene (BT-136)
The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-25
Bemessungsgrundlage des Positionsabschlags (BT-137)
The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
BR-DEC-27
Zuschlag auf Positionsebene (BT-141)
The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-28
Bemessungsgrundlage des Positionszuschlags (BT-142)
The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.
- Was der Validator prüft
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
NormAPI liefert technische Validierung, keine Steuer- oder Rechtsberatung.