Attestwire › Rule reference › BR-DEC-20
BR-DEC-20 A VAT category tax amount may have at most two decimals
noun · EN 16931 · fatal · BT-117
For a sample invoice, the library reports: The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2, but the document writes in VAT breakdown group 1 "285.000", which has 3.
- Business term
BT-117- Severity
fatal
The fix
Serialise the amount with exactly two decimal places. This is almost always a formatting setting rather than a data problem — a ledger or ORM emitting its native decimal scale (six places is the usual default) straight into the XML. Fixing it at the point of serialisation fixes every amount in the document at once.
A passing value
<cbc:TaxAmount>285.00</cbc:TaxAmount>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-DEC-20",
"field": "BT-117",
"severity": "fatal",
"message": "The allowed maximum number of decimals for the VAT category tax amount (BT-117) is 2, but the document writes in VAT breakdown group 1 \"285.000\", which has 3. BR-DEC rules are measured on the serialised value, not on the number behind it: trailing zeros count, so \"285.000\" fails even though it is arithmetically identical to a two-decimal amount and every total in the document still balances. Applying a percentage produces a long decimal nearly every time, which is why BR-CO-17 requires the multiplication to be rounded to two decimals at the group.",
"fix": "Serialise the amount with exactly two decimal places. This is almost always a formatting setting rather than a data problem — a ledger or ORM emitting its native decimal scale (six places is the usual default) straight into the XML. Fixing it at the point of serialisation fixes every amount in the document at once.",
"example": "<cbc:TaxAmount>285.00</cbc:TaxAmount>",
"xpath": "/ubl:Invoice/cac:TaxTotal/cac:TaxSubtotal[1]/cbc:TaxAmount",
"docsUrl": "https://attestwire.com/rules/BR-DEC-20"
}
xpath is always a UBL path. On a CII invoice, look for the
matching CII field instead.