Calculation rules

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 validator

Official 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

✗ CII – wrong
<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>
✓ CII – correct
<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:

C#
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)

Related rules

All explained validation rules