Attestwire › Rule reference › BR-CO-13
BR-CO-13 The total without VAT is the lines, minus allowances, plus charges
noun · EN 16931 · fatal · BT-109
a total that forgot the discounts, or counted the charges twice.
Your invoice was refused because its total before VAT does not match its lines. The total before VAT must be the lines added up, minus any discount given on the whole invoice, plus any charge added to it, and each discount or charge has to be shown on the invoice rather than netted silently. In the standard that total is field 109, written BT-109, and BR-CO-13 is the rule that checks the arithmetic.
- Business term
BT-109— Invoice total amount without VAT- Severity
fatal- Applies to
All profiles
The fix
If the total is lower than your lines, you are almost certainly applying a discount somewhere the document does not show. Put it in allowances with a reason, and the arithmetic explains itself. If the total is higher, the same in reverse: the freight or handling you added belongs in charges.
Check the sign convention before you reach for a negative number. EN 16931 has no negative allowance; an allowance is stated positive and subtracted by the formula.
What the rule requires
The invoice total without VAT (BT-109) equals the sum of the line net amounts, minus the sum of document-level allowances (BT-107), plus the sum of document-level charges (BT-108).
Allowances and charges are two separate disclosures, not a net figure. A €100 allowance and a €100 charge on the same invoice leave the total where it was, and both still have to appear. Netting them to zero and showing neither is a different document, and a receiving system reading it cannot see the discount you gave.
Document-level means the whole invoice: a delivery charge, a volume discount, an early-payment reduction. Allowances and charges attached to a single line are already inside that line’s net amount and must not be counted again here.
Like the rest of this family, the rule only has something to compare when your input states the total, in declaredTotals.taxExclusiveAmount.
Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).
Failing and passing
validateInput({
// ...
lines: [{ id: "1", description: "Consulting", quantity: 10,
unitCode: "HUR", unitPrice: 150,
vatCategory: "S", vatRate: 19 }],
declaredTotals: { taxExclusiveAmount: 1400.00 }, // <- BR-CO-13
});
// -> { valid: false, errors: [ { rule: "BR-CO-13", field: "BT-109", ... } ] }validateInput({
// ...
lines: [{ id: "1", description: "Consulting", quantity: 10,
unitCode: "HUR", unitPrice: 150,
vatCategory: "S", vatRate: 19 }],
allowances: [{ amount: 100, vatCategory: "S", vatRate: 19,
reason: "Volume discount" }],
declaredTotals: {
taxExclusiveAmount: 1400.00,
allowanceTotalAmount: 100.00,
},
});
// -> { valid: true, errors: [] }Why it exists
This total is the figure your buyer books as expenditure, kept separate from the VAT they may be able to reclaim. It is also the base the VAT breakdown is checked against, so a wrong total here usually means the VAT is wrong too. Keeping the allowance and the charge visible rather than netted is what lets the buyer see why the total differs from the lines: a discount they can verify rather than a number they have to trust.
What the library returns
The full error returned by @attestwire/en16931. It includes the rule ID,
affected field and suggested correction. Developers can use this object in their application:
{
"rule": "BR-CO-13",
"field": "BT-109",
"severity": "fatal",
"message": "BR-CO-13 requires the invoice total without VAT (BT-109) to equal BT-106 − document allowances (BT-107) + document charges (BT-108). You declared 1400.00 for BT-109, but the document's own stated figures give 1500.00 — a difference of -100.00 EUR. BT-107 and BT-108 are separate disclosures, not a net figure: a document allowance and a document charge of the same size leave BT-109 unchanged and still both appear. Check that your own BT-109 subtracts the allowances and adds the charges, in that order.",
"fix": "Either correct the line data so it sums to your declared figure, or drop declaredTotals.taxExclusiveAmount and let the library compute it. Note that EN 16931 sums *rounded* line amounts: round each line to 2 decimals first, then add — rounding only the final sum drifts by a cent or two on long invoices.",
"example": "\"declaredTotals\": { \"taxExclusiveAmount\": 1500.00 }",
"docsUrl": "https://attestwire.com/rules/BR-CO-13"
}How our check differs
We compare against a recomputed BT-109, not against your stated BT-107 and BT-108. The library adds up the allowances and charges you supplied and checks BT-109 against that. An official validator does the arithmetic on the figures the document states. The difference is narrower than it sounds: a stated BT-107 that disagrees with the allowances behind it is caught in its own right, as BR-CO-11, so the pair of checks covers the same ground under two ids rather than one.
As with the whole family: no stated figure, no finding. Omit declaredTotals.taxExclusiveAmount and the library computes BT-109 itself, which leaves nothing to disagree with.
See also: BR-CO-10 — the lines must add up to BT-106 first; BR-CO-11 — the stated allowance total must match the allowances; BR-CO-15 — BT-109 plus the VAT gives BT-112.