Skip to content

Ironfang Finance - Rule reference

BR-DEC-10: Write the sum of document allowances with no more than two decimals

cbc:AllowanceTotalAmount has more than two digits after the decimal point. Write the sum of allowances on document level to two decimals, zero included.

EN 16931Fatal: the document is invalidTotalsAllowances and charges

On this page

The short answer

BR-DEC-10 fails when cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount has more than two characters after the decimal point. Write the allowance total with two decimals at most, 1.00 rather than 1.000.

A zero total is counted too: an invoice with no document allowances that sends 0.000 fails in the same way. UBL-DT-01 reports the element in either case.

What the rule checks

The rule runs on cac:LegalMonetaryTotal and counts the characters after the decimal point in its cbc:AllowanceTotalAmount; more than two fail. The allowances it sums are counted separately by BR-DEC-01, one finding per allowance.

When tried, the minimal invoice, which has no allowances, failed this rule with its allowance total written as 0.000, and validated cleanly with the element left out altogether.

An unrounded allowance total is also a wrong total. When tried, 1.004 reported BR-CO-11 beside this rule and UBL-DT-01, because the allowances round to 1.00 and that comparison is exact.

TermMeaningUBL element
BT-107Sum of allowances on document levelcac:LegalMonetaryTotal/cbc:AllowanceTotalAmount

How an integration ends up here

Possible causes, from the shape of the rule rather than from measured usage:

  • Every monetary total is written by one formatter with three decimals, so an empty allowance total becomes 0.000.
  • The allowance total is added up from percentage discounts before each of them is rounded.
  • A fixed-scale decimal type from the database is serialised as held.

How to fix it

  1. Add up the rounded document allowance amounts and round the sum to two decimals.
  2. Write it to cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount with at most two decimals and no whitespace, or leave the element out when there are no document allowances.
  3. Use the same rounded figure when you subtract allowances to reach the total without VAT.

Validate your corrected invoice

Before and after

These are fragments, not complete documents. The complete synthetic documents they come from are linked below.

Fragment of the failing invoice: a document discount of 1.00, totalled as 1.000

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <!-- reason code and reason omitted from this fragment -->
  <cbc:Amount currencyID="GBP">1.00</cbc:Amount>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>
<!-- document charge and VAT breakdown omitted from this fragment -->
<cac:LegalMonetaryTotal>
  <!-- line, net and gross totals omitted from this fragment -->
  <cbc:AllowanceTotalAmount currencyID="GBP">1.000</cbc:AllowanceTotalAmount>
  <!-- remaining totals omitted from this fragment -->
</cac:LegalMonetaryTotal>

Fragment of the corrected invoice: the allowance total written as 1.00

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <!-- reason code and reason omitted from this fragment -->
  <cbc:Amount currencyID="GBP">1.00</cbc:Amount>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>
<!-- document charge and VAT breakdown omitted from this fragment -->
<cac:LegalMonetaryTotal>
  <!-- line, net and gross totals omitted from this fragment -->
  <cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
  <!-- remaining totals omitted from this fragment -->
</cac:LegalMonetaryTotal>

In the failing invoice cbc:AllowanceTotalAmount reads 1.000; in the corrected invoice it reads 1.00, the same as the one document discount it sums. Because the value is unchanged, BR-CO-11 and BR-CO-13 pass in both. The failing document reports BR-DEC-10 at cac:LegalMonetaryTotal and UBL-DT-01 at the allowance total itself: UBL-DT-01 is the two-decimal limit on every element named as an amount, with item prices and price-level allowance amounts the only exceptions, so it fires on the same element.

What the validator reported

Recorded on phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, the engine behind the free validator, using synthetic data. A recorded result is regression evidence for these documents; it is not a certification.

Where it applies

  • Applies to UBL Invoice and CreditNote. When tried, a credit note with an allowance total of 1.000 reported the same pair.
  • The element may be omitted when the document has no allowances, and BR-CO-11 accepts its absence then; once it is written, this rule counts it.
  • The limit ignores currencyID.

Scope and source

Written for Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, as applied to UBL 2.1 Invoice and CreditNote documents. Other profiles, syntaxes and releases can define this identifier differently. Guidance version 2026-09-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.

The official definition of BR-DEC-10 carries the normative wording and test. This page is our explanation of it, not a copy.

Guidance does not change the engine verdict. Fixing this finding does not mean the document passes every layer, and validation does not certify legal or tax compliance or transmit a document over Peppol.