EN 16931 rules › BR-CO-15
BR-CO-15 — Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110)
| Rule id | BR-CO-15 |
|---|---|
| Rule set | EN 16931 itself, not a national or network addition |
| Severity | fatal in CII and UBL — a validator enforcing this rule set rejects the invoice |
| Applies to | the CII and UBL syntaxes |
| Checked by | the validator on this site and invoicekit.go v0.2.11, the library behind it |
The rule as published
Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
fatal in CII and UBL — a validator enforcing this rule set rejects the invoice.
What runs for it
Straight from the artefacts the engine embeds: the node the assertion selects and the test it applies there. A failing invoice is reported with the message above.
| Syntax | Severity | Artefact phase | Applied to | Fails when |
|---|---|---|---|---|
| CII | fatal | EN16931-model-phase | /rsm:CrossIndustryInvoice | every $Currency in /rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:InvoiceCurrencyCode satisfies ( ( count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $Currency]) = 1 and xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount)[1]) = round( ( xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount)[1]) + xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxTotalAmount[@currencyID = $Currency])[1]) ) * 100 ) div 100 ) or ( xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:GrandTotalAmount)[1]) = xs:decimal((/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeSettlementHeaderMonetarySummation/ram:TaxBasisTotalAmount)[1]) ) ) |
| UBL | fatal | EN16931model_phase | /ubl:Invoice | /cn:CreditNote | every $Currency in cbc:DocumentCurrencyCode satisfies (count(cac:TaxTotal/xs:decimal(cbc:TaxAmount[@currencyID=$Currency])) eq 1) and (cac:LegalMonetaryTotal/xs:decimal(cbc:TaxInclusiveAmount) = round( (cac:LegalMonetaryTotal/xs:decimal(cbc:TaxExclusiveAmount) + cac:TaxTotal/xs:decimal(cbc:TaxAmount[@currencyID=$Currency])) * 10 * 10) div 100) |
Data elements it names
- BT-112 Invoice total amount with VAT (cited by 4 rules)
- BT-109 Invoice total amount without VAT (cited by 4 rules)
- BT-110 Invoice total VAT amount (cited by 3 rules)
See also
- Every EN 16931 rule id — the same list as a filterable table, with the assertions as CSV and JSON.
- What XRechnung and Peppol BIS add — rule sets that run these ids plus their own.
- The data elements — every BT and BG with the rules that name it.