BR-CO-16: Amount due for payment (BT-115) does not match
Official message
[BR-CO-16] Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).
[BR-CO-16] Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).
[BR-CO-16] Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).
- 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-115, BT-112, BT-113, BT-114
What does this mean?
The amount due for payment (BT-115) shall equal the invoice total amount with VAT (BT-112) minus the paid amount (BT-113) plus the rounding amount (BT-114). The value in BT-115 deviates from it.
Checked: BT-115 = BT-112 − BT-113 + BT-114; if BT-113 or BT-114 is missing, it counts as 0. In CII no rounding is applied, the value must match exactly. Example: 399.25 − 100.00 + 0.00 = 299.25.
Typical causes
A prepayment or partial payment was subtracted in BT-115 but not stated as paid amount (BT-113), or vice versa.
The amount due was rounded without stating the difference as rounding amount (BT-114), or BT-114 has the wrong sign.
Something that is not part of the formula was subtracted from the amount due, e.g. a cash discount.
BT-112, BT-113 or BT-114 was changed without recalculating BT-115.
How to fix the error
Calculate BT-115 as BT-112 − BT-113 + BT-114.
If the payable amount is rounded, state the difference with sign in BT-114, e.g. 399.25 rounded to 399.00: BT-114 = −0.25.
CII: ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:DuePayableAmount, UBL: cac:LegalMonetaryTotal/cbc:PayableAmount.
Generate and validate the invoice again.
In E-Rechnungsfreund
In the invoice form, BT-115 is calculated from BT-112 and the fields "Bereits gezahlt (BT-113)" (already paid) and "Rundungsbetrag (BT-114)" (rounding amount) in section "Belegsummen (BG-22)" (document totals) when the XML is generated; the value in the field "Fälliger Betrag (BT-115)" is not used for this. Check both fields and validate the invoice again.
Example
Wrong
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
...
<ram:GrandTotalAmount>399.25</ram:GrandTotalAmount>
<ram:TotalPrepaidAmount>100.00</ram:TotalPrepaidAmount>
<ram:DuePayableAmount>399.25</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
Correct
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
...
<ram:GrandTotalAmount>399.25</ram:GrandTotalAmount>
<ram:TotalPrepaidAmount>100.00</ram:TotalPrepaidAmount>
<ram:DuePayableAmount>299.25</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
For developers: test expression per syntax
EN 16931 (CII) (CII)
Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation
(xs:decimal(ram:DuePayableAmount[1]) = xs:decimal(ram:GrandTotalAmount[1]) - xs:decimal(ram:TotalPrepaidAmount[1]) + xs:decimal(ram:RoundingAmount[1])) or ((xs:decimal(ram:DuePayableAmount[1]) = xs:decimal(ram:GrandTotalAmount[1]) + xs:decimal(ram:RoundingAmount[1])) and not(ram:TotalPrepaidAmount)) or ((xs:decimal(ram:DuePayableAmount[1]) = xs:decimal(ram:GrandTotalAmount[1]) - xs:decimal(ram:TotalPrepaidAmount[1])) and not(ram:RoundingAmount)) or ((xs:decimal(ram:DuePayableAmount[1]) = xs:decimal(ram:GrandTotalAmount[1])) and not(ram:TotalPrepaidAmount) and not(ram:RoundingAmount))
EN 16931 (UBL) (UBL)
Context: cac:LegalMonetaryTotal
(exists(cbc:PrepaidAmount) and not(exists(cbc:PayableRoundingAmount)) and (xs:decimal(cbc:PayableAmount) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or (not(exists(cbc:PrepaidAmount)) and not(exists(cbc:PayableRoundingAmount)) and xs:decimal(cbc:PayableAmount) = xs:decimal(cbc:TaxInclusiveAmount)) or (exists(cbc:PrepaidAmount) and exists(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or (not(exists(cbc:PrepaidAmount)) and exists(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = xs:decimal(cbc:TaxInclusiveAmount)))
Factur-X / ZUGFeRD EN 16931 (CII)
Technical ID in the source: FX-SCH-A-000122
Context: //ram:SpecifiedTradeSettlementHeaderMonetarySummation
(xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount) + xs:decimal(ram:RoundingAmount)) or ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) + xs:decimal(ram:RoundingAmount)) and not (xs:decimal(ram:TotalPrepaidAmount))) or ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount))) or ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount)) and not (xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount)))
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.