BR-DEC: decimal places — two, everywhere
Twenty-one BR-DEC rules that all say the same thing: at most two decimal places. They differ only in which amount they mean.
21 rules · Rule set v2026-08-31
Why there are twenty-one at all
The norm states the requirement per field rather than once for all amounts, because every field gets its own rule number. In substance it is a single sentence; in an error report it is twenty-one possible codes.
VAT rates (BT-152, BT-119) are excluded — percentages may carry more places. And not every monetary amount is in: the item net price (BT-146) and gross price (BT-148) have no BR-DEC rule and therefore no two-place limit. Keep prices at four places and derive the line amounts from them, rounded, and you breach nothing. The twenty-one amounts below are checked and no others.
The numbering has gaps: BR-DEC-03, -04, -07, -08, -21, -22 and -26 do not appear in the rule set that ships. Meet one of those codes in somebody else's error list and this page will not have it — the German validator does not run them.
How it happens
Not through data entry but through arithmetic. A 3.33% discount on 1,000.00 gives 33.3333…, and writing the intermediate result straight out carries four places. The same goes for price base quantity conversions and for splitting an amount across lines.
Round on output, not mid-calculation — and use decimal arithmetic rather than float. That the rounded values then still have to agree with one another is what BR-CO-10 through BR-CO-17 check.
The test underneath each rule shows that nothing is computed here, only counted: string-length(substring-after(…, '.')) <= 2 takes the characters after the point. Trailing zeros count too. 1000.000 fails although the value is exactly one thousand; 1000.00 passes. It is a rule about the written form rather than about the number — a serialiser's decision, not an accounting one.
All decimal-place rules
One rule per amount, with the official rule text.
BR-DEC-01
Document level allowance (BT-92)
The allowed maximum number of decimals for the Document level allowance amount (BT-92) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-02
Document level allowance base (BT-93)
The allowed maximum number of decimals for the Document level allowance base amount (BT-93) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
BR-DEC-05
Document level charge (BT-99)
The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-06
Document level charge base (BT-100)
The allowed maximum number of decimals for the Document level charge base amount (BT-100) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
BR-DEC-09
Sum of line net amounts (BT-106)
The allowed maximum number of decimals for the Sum of Invoice line net amount (BT-106) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:LineExtensionAmount,'.'))<=2CIIstring-length(substring-after(ram:LineTotalAmount,'.'))<=2
BR-DEC-10
Sum of document level allowances (BT-107)
The allowed maximum number of decimals for the Sum of allowanced on document level (BT-107) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:AllowanceTotalAmount,'.'))<=2CIIstring-length(substring-after(ram:AllowanceTotalAmount,'.'))<=2
BR-DEC-11
Sum of document level charges (BT-108)
The allowed maximum number of decimals for the Sum of charges on document level (BT-108) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:ChargeTotalAmount,'.'))<=2CIIstring-length(substring-after(ram:ChargeTotalAmount,'.'))<=2
BR-DEC-12
Total without VAT (BT-109)
The allowed maximum number of decimals for the Invoice total amount without VAT (BT-109) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:TaxExclusiveAmount,'.'))<=2CIIstring-length(substring-after(ram:TaxBasisTotalAmount,'.'))<=2
BR-DEC-13
Total VAT amount (BT-110)
The allowed maximum number of decimals for the Invoice total VAT amount (BT-110) is 2.
- What the validator checks
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
Total with VAT (BT-112)
The allowed maximum number of decimals for the Invoice total amount with VAT (BT-112) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:TaxInclusiveAmount,'.'))<=2CIIstring-length(substring-after(ram:GrandTotalAmount,'.'))<=2
BR-DEC-15
Total VAT in accounting currency (BT-111)
The allowed maximum number of decimals for the Invoice total VAT amount in accounting currency (BT-111) is 2.
- What the validator checks
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
Amount already paid (BT-113)
The allowed maximum number of decimals for the Paid amount (BT-113) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:PrepaidAmount,'.'))<=2CIIstring-length(substring-after(ram:TotalPrepaidAmount,'.'))<=2
BR-DEC-17
Rounding amount (BT-114)
The allowed maximum number of decimals for the Rounding amount (BT-114) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:PayableRoundingAmount,'.'))<=2CIIstring-length(substring-after(ram:RoundingAmount,'.'))<=2
BR-DEC-18
Amount due for payment (BT-115)
The allowed maximum number of decimals for the Amount due for payment (BT-115) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:PayableAmount,'.'))<=2CIIstring-length(substring-after(ram:DuePayableAmount,'.'))<=2
BR-DEC-19
Taxable base per VAT category (BT-116)
The allowed maximum number of decimals for the VAT category taxable amount (BT-116) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:TaxableAmount,'.'))<=2CIIstring-length(substring-after(ram:BasisAmount,'.'))<=2
BR-DEC-20
VAT amount per VAT category (BT-117)
The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:TaxAmount,'.'))<=2CIIstring-length(substring-after(ram:CalculatedAmount,'.'))<=2
BR-DEC-23
Line net amount (BT-131)
The allowed maximum number of decimals for the Invoice line net amount (BT-131) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:LineExtensionAmount,'.'))<=2CIIstring-length(substring-after(ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ram:LineTotalAmount,'.'))<=2
BR-DEC-24
Line level allowance (BT-136)
The allowed maximum number of decimals for the Invoice line allowance amount (BT-136) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-25
Line level allowance base (BT-137)
The allowed maximum number of decimals for the Invoice line allowance base amount (BT-137) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
BR-DEC-27
Line level charge (BT-141)
The allowed maximum number of decimals for the Invoice line charge amount (BT-141) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:Amount,'.'))<=2CIIstring-length(substring-after(../ram:ActualAmount[1],'.'))<=2
BR-DEC-28
Line level charge base (BT-142)
The allowed maximum number of decimals for the Invoice line charge base amount (BT-142) is 2.
- What the validator checks
UBLstring-length(substring-after(cbc:BaseAmount,'.'))<=2CIIstring-length(substring-after(../ram:BasisAmount,'.'))<=2
NormAPI provides technical validation, not tax or legal advice.