BR-CO-15:Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110)
Fix: Recalculate BT-112 as TaxExclusiveAmount + TaxAmount, rounded half-up to two decimals, and ensure exactly one cac:TaxTotal/cbc:TaxAmount carries the document currency. Invoice Navigator auto-fixes the arithmetic case at 0.90 confidence; a duplicate TaxTotal is flagged for review because deciding which one to drop requires knowing the intended VAT accounting currency. Upload your invoice to fix this automatically.
BR-CO-15 fires when the gross invoice total does not equal the net total plus the VAT total. It is the last arithmetic check in the totals chain and the one buyers care about most, because BT-112 is the amount actually payable. The rule also carries a second, less obvious requirement: the document must contain exactly one cac:TaxTotal/cbc:TaxAmount in the document currency, so an extra TaxTotal for a VAT accounting currency fails BR-CO-15 even when the arithmetic is correct.
Engine Classification
Recalculate TaxInclusiveAmount as TaxExclusiveAmount + TaxAmount
Confidence: 90% · Applied automatically in pipeline
What is BR-CO-15?
BR-CO-15 is a fatal validation rule defined in the EN 16931 specification. It validates the TaxInclusiveAmount element under LegalMonetaryTotal in the UBL invoice XML.
When this rule fires, the invoice is rejected by Peppol access points and never reaches the buyer.
Target path: /Invoice/cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount
Why This Error Matters
BT-112 is the amount the buyer is asked to pay. If it does not reconcile with the net total plus VAT, the receiving AP system cannot post the document, and no automated three-way match will clear it. This is the totals error most likely to be escalated by a buyer rather than silently retried.
BR-CO-15 is a hard failure — the invoice must be corrected and re-sent before it can reach the recipient.
A wrong gross total means the buyer either pays the wrong amount or, more commonly, rejects the invoice outright. Either path adds a full reissue cycle and pushes payment past terms.
Invoice Navigator can automatically correct this error in your pipeline. The fix is applied with full audit evidence, so your compliance trail remains intact.
Validator Behavior
- ·Causes invoice rejection
- ·Error returned: BR-CO-15
- ·Specification: EN 16931
How to Fix It
Check the TaxTotal count first
Confirm there is exactly one cac:TaxTotal/cbc:TaxAmount with @currencyID equal to cbc:DocumentCurrencyCode. A second TaxTotal in the same currency fails the rule before the arithmetic is even evaluated.
Recompute the gross total
BT-112 = BT-109 + BT-110. Round the result half-up to exactly two decimals; do not carry more precision into the element.
Trace a one-cent difference upstream
If the difference is one cent, the VAT total was almost certainly built from per-line rounded VAT amounts while the gross was derived from unrounded values. Fix the rounding order rather than patching BT-112, or BR-CO-14 and BR-S-09 will fail instead.
Verify the amount due
cbc:PayableAmount (BT-115) derives from BT-112 minus any prepaid amount. Correcting the gross total without updating the payable amount trades BR-CO-15 for BR-CO-16.
Before / After
<cac:TaxTotal> <cbc:TaxAmount currencyID="EUR">108.37</cbc:TaxAmount> </cac:TaxTotal> <cac:LegalMonetaryTotal> <cbc:TaxExclusiveAmount currencyID="EUR">570.35</cbc:TaxExclusiveAmount> <!-- 570.35 + 108.37 = 678.72, but BT-112 says 678.71 --> <cbc:TaxInclusiveAmount currencyID="EUR">678.71</cbc:TaxInclusiveAmount> <cbc:PayableAmount currencyID="EUR">678.71</cbc:PayableAmount> </cac:LegalMonetaryTotal>
<cac:TaxTotal> <cbc:TaxAmount currencyID="EUR">108.37</cbc:TaxAmount> </cac:TaxTotal> <cac:LegalMonetaryTotal> <cbc:TaxExclusiveAmount currencyID="EUR">570.35</cbc:TaxExclusiveAmount> <cbc:TaxInclusiveAmount currencyID="EUR">678.72</cbc:TaxInclusiveAmount> <cbc:PayableAmount currencyID="EUR">678.72</cbc:PayableAmount> </cac:LegalMonetaryTotal>
Technical Reference
/Invoice/cac:LegalMonetaryTotal/cbc:TaxInclusiveAmountCode Example
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">950.00</cbc:TaxExclusiveAmount>
<!-- 1000 - 50 document allowance = 950 -->
</cac:LegalMonetaryTotal>Common Causes
- ·VAT rounded per line while the gross total was derived from unrounded values
- ·TaxInclusiveAmount overridden manually after VAT was recalculated
- ·A second cac:TaxTotal emitted for the VAT accounting currency without a distinct currencyID
- ·Multi-currency invoice where the tax amount currency does not match the document currency
- ·Prepaid or rounding-adjustment amounts folded into the gross total instead of their own fields
Seeing this in production? The API handles BR-CO-15 automatically. See the fix response →
Commonly Seen In
Frequently Asked Questions
It means the invoice total with VAT (BT-112) does not equal the total without VAT (BT-109) plus the total VAT amount (BT-110). The Schematron adds the two, rounds to two decimals, and compares against BT-112.
Because VAT was rounded per line while the gross total was derived from unrounded values, or vice versa. Fix the rounding order in the calculation rather than patching BT-112, otherwise BR-CO-14 or BR-S-09 will fail instead.
Yes. The rule also requires exactly one cac:TaxTotal/cbc:TaxAmount in the document currency. A second TaxTotal emitted for a VAT accounting currency with the same currencyID fails the count check before the sum is evaluated.
The arithmetic case yes, at 0.90 confidence — Invoice Navigator recomputes BT-112 from BT-109 and BT-110. A duplicate TaxTotal is flagged for review, because choosing which one to remove requires knowing the intended VAT accounting currency.
Check PayableAmount (BT-115). It derives from BT-112 less any prepaid amount, so correcting the gross total without updating the payable amount simply moves the failure to BR-CO-16.
Related Errors
Related Content
Last updated: 18 August 2026
Validate your invoice
Drop your XML here to check for BR-CO-15
Auto-fix BR-CO-15 in seconds
Upload your invoice and we fix this error automatically. Financial fields are never touched.