BR-CO-13: Invoice total amount without VAT (BT-109) does not match
Official message
[BR-CO-13] Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).
[BR-CO-13] Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).
[BR-CO-13] Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).
- 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-109, BT-131, BT-107, BT-108
What does this mean?
The invoice total amount without VAT (BT-109) shall equal the sum of invoice line net amounts minus the allowances and plus the charges on document level. The value in BT-109 deviates from it.
Checked: BT-109 = BT-106 − BT-107 + BT-108, rounded to two decimals; if BT-107 or BT-108 is missing, it counts as 0. Example: 350.50 − 35.00 + 20.00 = 335.50.
Typical causes
BT-109 already contains VAT; it is a net amount, however.
Document level allowances were not subtracted or charges were not added.
Invoice line allowances or charges were subtracted again although they are already contained in BT-131 and thus in BT-106.
One of the totals BT-106, BT-107 or BT-108 was changed without recalculating BT-109.
How to fix the error
Calculate BT-109 as BT-106 − BT-107 + BT-108 and round it to two decimals.
First check that BT-106, BT-107 and BT-108 are correct themselves (BR-CO-10, BR-CO-11, BR-CO-12).
Recalculate the invoice total amount with VAT (BT-112) and the amount due for payment (BT-115).
CII: ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount, UBL: cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount.
In E-Rechnungsfreund
In the invoice form, BT-109 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 "Steuerbasis gesamt (BT-109)" in section "Belegsummen (BG-22)" (document totals) is not used for this. Check the lines and the allowances and charges and validate the invoice again.
Example
Wrong
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:LineTotalAmount>350.50</ram:LineTotalAmount>
<ram:ChargeTotalAmount>20.00</ram:ChargeTotalAmount>
<ram:AllowanceTotalAmount>35.00</ram:AllowanceTotalAmount>
<ram:TaxBasisTotalAmount>315.50</ram:TaxBasisTotalAmount>
...
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
Correct
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:LineTotalAmount>350.50</ram:LineTotalAmount>
<ram:ChargeTotalAmount>20.00</ram:ChargeTotalAmount>
<ram:AllowanceTotalAmount>35.00</ram:AllowanceTotalAmount>
<ram:TaxBasisTotalAmount>335.50</ram:TaxBasisTotalAmount>
...
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
For developers: test expression per syntax
EN 16931 (CII) (CII)
Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation
(xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) - xs:decimal(ram:AllowanceTotalAmount[1]) + xs:decimal(ram:ChargeTotalAmount[1])) * 10 * 10) div 100) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) - xs:decimal(ram:AllowanceTotalAmount[1])) * 10 * 10) div 100) and not(ram:ChargeTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1]) + xs:decimal(ram:ChargeTotalAmount[1])) * 10 * 10) div 100) and not(ram:AllowanceTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount[1]) = round((xs:decimal(ram:LineTotalAmount[1])) * 10 * 10) div 100) and not(ram:ChargeTotalAmount) and not(ram:AllowanceTotalAmount))
EN 16931 (UBL) (UBL)
Context: cac:LegalMonetaryTotal
((cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10) div 100 )) or (not(cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10 ) div 100)) or ((cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount)) * 10 * 10 ) div 100)) or (not(cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = xs:decimal(cbc:LineExtensionAmount)))
Factur-X / ZUGFeRD EN 16931 (CII)
Technical ID in the source: FX-SCH-A-000120
Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation
(xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) - xs:decimal(ram:AllowanceTotalAmount)) *10 * 10) div 100) and not (ram:ChargeTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount) + xs:decimal(ram:ChargeTotalAmount)) *10 * 10) div 100) and not (ram:AllowanceTotalAmount)) or ((xs:decimal(ram:TaxBasisTotalAmount) = round((xs:decimal(ram:LineTotalAmount)) *10 * 10) div 100) and not (ram:ChargeTotalAmount) and not (ram:AllowanceTotalAmount))
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.