BR-CO-15: Total with VAT (BT-112) ≠ net total + VAT
The gross total must be exactly the net total plus the total VAT amount.
Fact sheet
- Rule
BR-CO-15- Severity
- Error – the invoice is invalid
- Rule set
- EN 16931 – applies to XRechnung and ZUGFeRD/Factur-X
- Affected fields
- BT-112, BT-109, BT-110
- Syntax
- CII & UBL
Check your invoice now
Upload a PDF or XML – free, without sign-up, against the official rule sets.
Open the online validatorOfficial wording
[BR-CO-15] Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
Source: official EN 16931 Schematron (CEN), as also applied to XRechnung and ZUGFeRD/Factur-X.
What the rule requires
The invoice total amount with VAT (BT-112) must equal the invoice total amount without VAT (BT-109) plus the invoice total VAT amount (BT-110) exactly. The rule is part of EN 16931 and applies to XRechnung, ZUGFeRD and Factur-X.
Amounts already paid (BT-113) and rounding amounts (BT-114) do not change BT-112; they only affect the amount due for payment (BT-115).
Common causes
- Rounding per line: the gross total is added up from rounded gross line amounts instead of net plus VAT. With many lines it is then off by a few cents.
- A prepayment was subtracted from BT-112 instead of being stated in BT-113.
- BT-110 differs from the sum of the VAT amounts in the breakdown (BT-117).
- Foreign currency: the VAT amount in accounting currency (BT-111) was included in the sum by mistake.
What it looks like in XML
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:LineTotalAmount>300.00</ram:LineTotalAmount>
<ram:TaxBasisTotalAmount>300.00</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">57.00</ram:TaxTotalAmount>
<ram:GrandTotalAmount>357.01</ram:GrandTotalAmount> <!-- 300.00 + 57.00 = 357.00 -->
<ram:DuePayableAmount>357.01</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:SpecifiedTradeSettlementHeaderMonetarySummation>
<ram:LineTotalAmount>300.00</ram:LineTotalAmount>
<ram:TaxBasisTotalAmount>300.00</ram:TaxBasisTotalAmount>
<ram:TaxTotalAmount currencyID="EUR">57.00</ram:TaxTotalAmount>
<ram:GrandTotalAmount>357.00</ram:GrandTotalAmount>
<ram:DuePayableAmount>357.00</ram:DuePayableAmount>
</ram:SpecifiedTradeSettlementHeaderMonetarySummation>
In UBL, BT-112 is cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount.
Fix in C#
Compute the totals one after another from the values that actually appear in the invoice – never from your own intermediate values. With the Facturexa Creator:
invoice.TaxBasisAmount = invoice.LineTotalAmount
- (invoice.AllowanceTotalAmount ?? 0) + (invoice.ChargeTotalAmount ?? 0); // BT-109
invoice.TaxTotalAmount = invoice.Taxes.Sum(t => t.TaxAmount ?? 0); // BT-110
invoice.GrandTotalAmount = invoice.TaxBasisAmount + invoice.TaxTotalAmount; // BT-112
invoice.DuePayableAmount = invoice.GrandTotalAmount; // BT-115 (no prepayment)