Skip to content

BR-CO-15: Invoice total amount with VAT (BT-112) does not match

Official message

[BR-CO-15] Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).

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

[BR-CO-15] Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).

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

[BR-CO-15] Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).

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-112, BT-109, BT-110

What does this mean?

The invoice total amount with VAT (BT-112) shall equal the invoice total amount without VAT (BT-109) plus the invoice total VAT amount (BT-110). The value in BT-112 deviates from it.
Checked: BT-112 = BT-109 + BT-110, rounded to two decimals. Example: 335.50 + 63.75 = 399.25. BT-110 in invoice currency must be present exactly once for this; in CII the rule without this amount is only fulfilled if BT-112 equals BT-109.

Typical causes

A paid amount (BT-113) or a rounding amount (BT-114) was already offset in BT-112; both only belong in the amount due for payment (BT-115).
BT-109 or BT-110 was changed without recalculating BT-112.
The invoice total VAT amount is missing or appears twice in invoice currency, e.g. because BT-111 was stated with the same currency as BT-5.

How to fix the error

Calculate BT-112 as BT-109 + BT-110 and round it to two decimals.
State BT-110 exactly once in invoice currency; state BT-111 only if the VAT accounting currency (BT-6) differs from the invoice currency.
Recalculate the amount due for payment (BT-115) (BR-CO-16).
CII: ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount, UBL: cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount.

In E-Rechnungsfreund

In the invoice form, BT-112 is calculated from the invoice lines and the allowances and charges when the XML is generated, and rounded to two decimals; the value in the field "Rechnungssumme inkl. USt (BT-112)" in section "Belegsummen (BG-22)" (document totals) is not used for this. BT-110 appears exactly once in invoice currency; "Steuer in Buchungswährung (BT-111)" (VAT in accounting currency) is only output if a different "Steuerwährung (BT-6)" (VAT accounting currency) is given. Check the lines and the allowances and charges and validate the invoice again.

Example

Wrong

<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
  ...
  <ram:TaxBasisTotalAmount>335.50</ram:TaxBasisTotalAmount>
  <ram:TaxTotalAmount currencyID="EUR">63.75</ram:TaxTotalAmount>
  <ram:GrandTotalAmount>335.50</ram:GrandTotalAmount>
  ...
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>

Correct

<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
  ...
  <ram:TaxBasisTotalAmount>335.50</ram:TaxBasisTotalAmount>
  <ram:TaxTotalAmount currencyID="EUR">63.75</ram:TaxTotalAmount>
  <ram:GrandTotalAmount>399.25</ram:GrandTotalAmount>
  ...
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
For developers: test expression per syntax

EN 16931 (CII) (CII)

Context: /rsm:CrossIndustryInvoice

every $Currency in /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode satisfies ( ( count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $Currency]) = 1 and xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount)[1]) = round( ( xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount)[1]) + xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $Currency])[1]) ) * 100 ) div 100 ) or ( xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount)[1]) = xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount)[1]) ) )

EN 16931 (UBL) (UBL)

Context: /ubl:Invoice | /cn:CreditNote

every $Currency in cbc:DocumentCurrencyCode satisfies (count(cac:TaxTotal/xs:decimal(cbc:TaxAmount[@currencyID=$Currency])) eq 1) and (cac:LegalMonetaryTotal/xs:decimal(cbc:TaxInclusiveAmount) = round( (cac:LegalMonetaryTotal/xs:decimal(cbc:TaxExclusiveAmount) + cac:TaxTotal/xs:decimal(cbc:TaxAmount[@currencyID=$Currency])) * 10 * 10) div 100)

Factur-X / ZUGFeRD EN 16931 (CII)

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

Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation

every $Currency in rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode satisfies ( count ( rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID=$Currency] ) eq 1 and (//ram:SpecifiedTradeSettlementHeaderMonetarySummation/xs:decimal(ram:GrandTotalAmount) = round( (//ram:SpecifiedTradeSettlementHeaderMonetarySummation/xs:decimal(ram:TaxBasisTotalAmount) + (//ram:SpecifiedTradeSettlementHeaderMonetarySummation/xs:decimal(ram:TaxTotalAmount[@currencyID=$Currency]))) * 10 * 10) div 100)) or (//ram:SpecifiedTradeSettlementHeaderMonetarySummation/xs:decimal(ram:GrandTotalAmount) = (//ram:SpecifiedTradeSettlementHeaderMonetarySummation/xs:decimal(ram:TaxBasisTotalAmount)))

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

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