Skip to content

BR-CO-12: Sum of charges on document level (BT-108) does not match

Official message

[BR-CO-12] Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99).

EN 16931 (CII) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[BR-CO-12] Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99).

EN 16931 (UBL) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[BR-CO-12] Sum of charges on document level (BT-108) = Σ Document level charge amount (BT-99).

Factur-X / ZUGFeRD EN 16931 · Error · Message language: English · Version: Factur-X 1.08 / ZUGFeRD 2.4
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
EN 16931 (CII), EN 16931 (UBL), Factur-X / ZUGFeRD EN 16931
Affected fields
BT-108, BT-99

What does this mean?

The sum of charges on document level (BT-108) shall equal the sum of the individual document level charge amounts (BT-99). The value in BT-108 deviates from it or is missing although charges are present.
Checked: BT-108 = Σ BT-99, the sum rounded to two decimals. Example: 12.50 + 7.50 = 20.00.
In the Factur-X/ZUGFeRD check, logistics service charges (ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount) are added to the sum as well.

Typical causes

A charge was added, changed or removed without recalculating BT-108.
BT-108 is missing although there is at least one document level charge.
Invoice line charges (BT-141) were included in BT-108; they are already contained in the line net amount (BT-131).
Allowances (BT-92) were offset against the charges.

How to fix the error

Calculate BT-108 as the sum of all document level charge amounts (BT-99) and round it to two decimals.
If there are document level charges, always state BT-108; without charges, BT-108 can be omitted.
Recalculate the invoice total without VAT (BT-109) and the totals depending on it (BR-CO-13).
CII: ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount, UBL: cac:LegalMonetaryTotal/cbc:ChargeTotalAmount.

In E-Rechnungsfreund

In the invoice form, BT-108 is calculated from the entries of type "Zuschlag (BG-21)" (charge) in section "Zu-/Abschläge auf Dokumentenebene (BG-20/BG-21)" (document level allowances and charges, expert view "Experte") when the XML is generated, and rounded to two decimals; the value in the field "Summe Zuschläge (BT-108)" in section "Belegsummen (BG-22)" (document totals) is not used for this. Check the entries and validate the invoice again.

Example

Wrong

<!-- Document level charges: BT-99 = 12.50 and 7.50 -->
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
  ...
  <ram:ChargeTotalAmount>12.50</ram:ChargeTotalAmount>
  ...
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>

Correct

<!-- Document level charges: BT-99 = 12.50 and 7.50 -->
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
  ...
  <ram:ChargeTotalAmount>20.00</ram:ChargeTotalAmount>
  ...
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
For developers: test expression per syntax

EN 16931 (CII) (CII)

Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation

(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()])and not (ram:ChargeTotalAmount)) or ram:ChargeTotalAmount = (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator=true()]/ram:ActualAmount[1])* 10 * 10 ) div 100)

EN 16931 (UBL) (UBL)

Context: cac:LegalMonetaryTotal

xs:decimal(cbc:ChargeTotalAmount) = (round(sum(../cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount)) * 10 * 10) div 100) or (not(cbc:ChargeTotalAmount) and not(../cac:AllowanceCharge[cbc:ChargeIndicator=true()]))

Factur-X / ZUGFeRD EN 16931 (CII)

Technical ID in the source: FX-SCH-A-000119

Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation

(not(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator='true'])and not (ram:ChargeTotalAmount)) or (round (/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:ChargeTotalAmount * 10 * 10) div 100)= round(((round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/udt:Indicator='true']/ram:ActualAmount)* 10 * 10 ) div 100) + (round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100))*10*10) div 100

Related validation rules

  • BR-CO-03: Value added tax point date (BT-7) and tax point date code (BT-8) are mutually exclusive
  • BR-CO-04: Invoiced item VAT category code (BT-151) is missing
  • BR-CO-05: Document level allowance reason code (BT-98) and allowance reason (BT-97) must indicate the same type
  • BR-CO-06: Document level charge reason code (BT-105) and charge reason (BT-104) must indicate the same type
  • BR-CO-07: Invoice line allowance reason code (BT-140) and allowance reason (BT-139) must indicate the same type
  • BR-CO-08: Invoice line charge reason code (BT-145) and charge reason (BT-144) must indicate the same type

Frequently asked questions

Does BT-108 have to be stated if there are no charges?

No. Without document level charges, BT-108 may be missing or 0.00. As soon as there is at least one charge, BT-108 must be stated and equal the sum.

Last updated:
Explanation of the validation rule, not legal or tax advice.