Account
English

BR-CO-16: Amount due for payment (BT-115) does not add up

EN 16931 core rule · Error · UBL / CII

StandardEN 16931-1 (European e-invoicing semantic model)SeverityError: the invoice is rejectedSyntaxUBL, CIIBusiness terms
  • BT-112 Invoice total amount with VAT
  • BT-113 Paid amount
  • BT-114 Rounding amount
  • BT-115 Amount due for payment
Applies toEvery EN 16931 invoice: XRechnung, ZUGFeRD 2.x / Factur-X (profiles EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0, and national CIUS such as the Dutch NLCIUS or the Italian/Spanish profiles.

Official rule text

[BR-CO-16] Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

Why this error occurs

The amount due (BT-115) must equal the total with VAT (BT-112) minus the paid amount (BT-113) plus the rounding amount (BT-114). The rule checks cac:LegalMonetaryTotal/cbc:PayableAmount against cbc:TaxInclusiveAmount, cbc:PrepaidAmount and cbc:PayableRoundingAmount (UBL), or ram:DuePayableAmount against ram:GrandTotalAmount, ram:TotalPrepaidAmount and ram:RoundingAmount (CII). It usually fails when software writes the open balance after a partial payment without also writing the prepaid amount, or uses the wrong sign for the rounding amount.

How to fix it

Formula: BT-115 = BT-112 - BT-113 + BT-114, rounded to 2 decimals; a missing BT-113 or BT-114 counts as 0. If a prepayment was received, write it as a positive value in cbc:PrepaidAmount / ram:TotalPrepaidAmount and reduce cbc:PayableAmount / ram:DuePayableAmount accordingly. Use cbc:PayableRoundingAmount / ram:RoundingAmount only for cash rounding, with the sign of the adjustment (e.g. -0.02 or 0.03). For a fully paid invoice PrepaidAmount equals TaxInclusiveAmount and PayableAmount is 0.00.

Example (valid)

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">200.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">200.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">238.00</cbc:TaxInclusiveAmount>
  <cbc:PrepaidAmount currencyID="EUR">100.00</cbc:PrepaidAmount>
  <cbc:PayableAmount currencyID="EUR">138.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

What the validator checks

Checked element (context):

UBL

cac:LegalMonetaryTotal

Test (XPath):

(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)))

CII

//ram:SpecifiedTradeSettlementHeaderMonetarySummation

Test (XPath):

(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)))

Check your invoice

Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

Frequently asked questions

What does BR-CO-16 mean?

BR-CO-16 is a en 16931 core rule: Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

Will my invoice be rejected because of BR-CO-16?

Yes. BR-CO-16 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.

Which formats does BR-CO-16 apply to?

Every EN 16931 invoice: XRechnung, ZUGFeRD 2.x / Factur-X (profiles EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0, and national CIUS such as the Dutch NLCIUS or the Italian/Spanish profiles. Syntax: UBL and CII.

Source: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Catalogue generated from the official schematron on 2026-10-14.