Skip to content

BR-DEC-24: Write the line allowance amount with no more than two decimals

An allowance on an invoice line has a cbc:Amount with more than two digits after the decimal point. Round the line allowance to two decimals.

EN 16931Fatal: the document is invalidAllowances and chargesLines and prices

The short answer

BR-DEC-24 fails when a cac:AllowanceCharge on a line, with cbc:ChargeIndicator of false, has a cbc:Amount with more than two digits after the decimal point. Write the line allowance amount with two decimals at most, such as 2.00.

A discount on the price is not a line allowance. An allowance inside cac:Price explains how the net price was reached and may keep more decimals, like the price itself.

What the rule checks

The rule selects every allowance directly inside a cac:InvoiceLine or cac:CreditNoteLine and allows at most two characters after the decimal point in its cbc:Amount. The recorded 2.000 fails on the third character alone.

Allowances inside cac:Price are outside its reach, and outside UBL-DT-01 as well. When tried, a price allowance of 0.005 on a gross price of 20.000 validated cleanly.

Line charges and the allowance base amount have their own rules, BR-DEC-27 and BR-DEC-25. When tried, a line charge written as 0.010 reported BR-DEC-27 and UBL-DT-01, not this rule.

The percentage in cbc:MultiplierFactorNumeric is not an amount. When tried, writing it as 5.000 passed every layer.

TermMeaningUBL element
BT-136Invoice line allowance amountcac:InvoiceLine/cac:AllowanceCharge/cbc:Amount (cac:CreditNoteLine/cac:AllowanceCharge/cbc:Amount in a credit note), where cbc:ChargeIndicator is false

How an integration ends up here

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

  • The line discount is computed as a percentage of quantity times a price with three decimals and written unrounded.
  • The same formatter writes the price and the line allowance, and it is set to the precision of the price.
  • A discount recorded against the price in the source system is mapped to a line allowance without being rounded again.

How to fix it

  1. Decide whether the discount belongs to the price or to the line. A price discount goes in cac:Price/cac:AllowanceCharge and may keep the precision of the price; a line allowance reduces the line net amount and takes two decimals.
  2. For a line allowance, round the amount to two decimals when it is calculated and write it to cbc:Amount with no more.
  3. Write the base amount of a percentage allowance with two decimals too, and keep the amount consistent with base times percentage.
  4. Recalculate the line net amount with the rounded allowance, so it still agrees with quantity, price and charges.

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 5 percent line discount on 40.00 written as 2.000

<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <!-- note omitted from this fragment -->
  <cbc:InvoicedQuantity unitCode="C62">3</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="GBP">58.00</cbc:LineExtensionAmount>
  <!-- accounting cost and order line reference omitted from this fragment -->
  <cac:AllowanceCharge>
    <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
    <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
    <cbc:AllowanceChargeReason>Example discount</cbc:AllowanceChargeReason>
    <cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
    <cbc:Amount currencyID="GBP">2.000</cbc:Amount>
    <cbc:BaseAmount currencyID="GBP">40.00</cbc:BaseAmount>
  </cac:AllowanceCharge>
  <!-- line charge, item and price omitted from this fragment -->
</cac:InvoiceLine>

Fragment of the corrected invoice: the same discount written as 2.00

<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Example discount</cbc:AllowanceChargeReason>
  <cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
  <cbc:Amount currencyID="GBP">2.00</cbc:Amount>
  <cbc:BaseAmount currencyID="GBP">40.00</cbc:BaseAmount>
</cac:AllowanceCharge>

Only the line allowance amount is written differently: 2.000 in the failing invoice and 2.00 in the corrected one. The line net amount of 58.00 already reflects a 2.00 discount, so no other figure changes. The failing document reports BR-DEC-24 at the line cac:AllowanceCharge and UBL-DT-01 at the cbc:Amount inside it. UBL-DT-01 caps the decimals of every amount element in the document other than item prices and allowances on a price, and an allowance on the line is not exempt, so the two findings come as a pair. Rewriting the amount clears both.

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 cac:InvoiceLine in an Invoice and cac:CreditNoteLine in a CreditNote. When tried, the credit note version reported the same pair of findings.
  • Document-level allowances are not in scope here; BR-DEC-01 holds them to the same limit.
  • The line number in the finding location identifies which line to correct when several carry allowances.

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-24.1: source checked 2026-09-24, explanation last updated 2026-09-24.

The official definition of BR-DEC-24 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.