Skip to content

Ironfang Finance - Rule reference

BR-DEC-06: Write the document charge base amount with no more than two decimals

The cbc:BaseAmount of a document-level charge has more than two digits after the decimal point. Write the amount the charge percentage applies to with two.

EN 16931Fatal: the document is invalidAllowances and charges

On this page

The short answer

BR-DEC-06 fails when a charge on the document, a root-level cac:AllowanceCharge with cbc:ChargeIndicator of true, carries a cbc:BaseAmount with more than two characters after the decimal point. Write the base with at most two decimals: 35.00 in place of 35.000.

The charge amount beside it can be perfectly formatted and the document still fails: in the recorded invoice only the base of the 10 percent charge is padded. UBL-DT-01 reports that cbc:BaseAmount as well.

What the rule checks

For every document-level charge the rule reads cbc:BaseAmount as text and allows up to two characters after the decimal point. A flat fee has no base amount, so nothing is counted and the charge passes.

This rule never compares the base with anything. When tried, a base of 35.004 reported only this rule and UBL-DT-01, because 10 percent of it is 3.5004 and PEPPOL-EN16931-R040 accepts the charge of 3.50 within its margin of 0.02.

Which rule counts a cbc:BaseAmount at document level depends on the indicator in the same cac:AllowanceCharge: true brings it here, false sends it to BR-DEC-02. Base amounts of allowances and charges on a line have rules of their own.

TermMeaningUBL element
BT-100Document level charge base amountcac:AllowanceCharge[cbc:ChargeIndicator = true]/cbc:BaseAmount

How an integration ends up here

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

  • The base is a subtotal of lines at unit-price precision, used for the surcharge calculation and written as held.
  • The charge amount is rounded for the totals, but the base is taken from the calculation before any rounding.
  • The mapping writes every monetary field with a fixed three decimal places.

How to fix it

  1. Round the base amount to two decimals before applying the charge percentage to it.
  2. Write it to cbc:BaseAmount in the charge with at most two decimals and without whitespace.
  3. Check that cbc:Amount is still within 0.02 of base times percentage over 100 after rounding, as PEPPOL-EN16931-R040 requires.
  4. For a flat charge, omit the base and the percentage together; Peppol accepts neither without the other.

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: the 10 percent charge has its base written as 35.000

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>CG</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Example document charge</cbc:AllowanceChargeReason>
  <cbc:MultiplierFactorNumeric>10</cbc:MultiplierFactorNumeric>
  <cbc:Amount currencyID="GBP">3.50</cbc:Amount>
  <cbc:BaseAmount currencyID="GBP">35.000</cbc:BaseAmount>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>

Fragment of the corrected invoice: the same base written as 35.00

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>CG</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Example document charge</cbc:AllowanceChargeReason>
  <cbc:MultiplierFactorNumeric>10</cbc:MultiplierFactorNumeric>
  <cbc:Amount currencyID="GBP">3.50</cbc:Amount>
  <cbc:BaseAmount currencyID="GBP">35.00</cbc:BaseAmount>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>

Only the base amount of the document charge changes: 35.000 in the failing invoice, 35.00 in the corrected one, which is the same value. The charge of 3.50 is 10 percent of either, so nothing else is disturbed. The failing document reports BR-DEC-06 at the charge, the second cac:AllowanceCharge, and UBL-DT-01 at its cbc:BaseAmount. UBL-DT-01 limits all amount elements to two decimals, sparing only item prices and the amounts of an allowance on the price, and a charge base amount is neither, so this rule never fails without it.

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 whose document charge has a base of 35.000 reported the same two findings.
  • The count ignores the currency, because currencyID is not read.
  • A base amount on a charge must come with a percentage and the reverse, so in a document that passes Peppol this rule meets only percentage charges; PEPPOL-EN16931-R041 and PEPPOL-EN16931-R042 enforce the pairing.

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-06 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.