# BR-DEC-11: Write the sum of document charges with no more than two decimals

`cbc:ChargeTotalAmount` has more than two digits after the decimal point. Write the sum of charges on document level with two decimals at most.

- Layer: EN 16931
- Severity: fatal (the document is invalid)
- Topics: Totals, Allowances and charges
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-DEC-11/
- Explanation last updated: 2026-09-28

## The short answer

`BR-DEC-11` fails when `cac:LegalMonetaryTotal/cbc:ChargeTotalAmount` is written with more than two characters after the decimal point. Write the charge total with two decimals at most: `3.50`, not `3.500`.

The recorded charge itself is written correctly and only its total is padded. A formatter that pads both brings `BR-DEC-05` for the charge as well, and `UBL-DT-01` once per element.

## What the rule checks

The rule takes the text of `cbc:ChargeTotalAmount` inside `cac:LegalMonetaryTotal` and allows at most two characters after the decimal point. The charges being summed are not read by this rule.

When tried with both the document charge and the charge total written as `3.500`, the invoice reported this rule, `BR-DEC-05` and two `UBL-DT-01` findings, one at each element.

An unrounded charge total brings the arithmetic check with it. When tried, `3.504` also reported `BR-CO-12`, which compares the total exactly with the charges rounded to 3.50, while `BR-CO-13` still passed because it rounds its own result.

| Term | Meaning | UBL element |
|---|---|---|
| BT-108 | Sum of charges on document level | `cac:LegalMonetaryTotal/cbc:ChargeTotalAmount` |

## How an integration ends up here

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

- The charge total is added up from freight or handling fees kept at more than two decimals.
- Totals are written with a fixed number of decimals chosen for prices.
- A total of zero is formatted as `0.000` when no charges apply.

## How to fix it

1. Round each document charge to two decimals, add them, and round the sum.
2. Write it to `cac:LegalMonetaryTotal/cbc:ChargeTotalAmount` with at most two decimals and no surrounding whitespace.
3. If the document has no charges, write `0.00` or omit the element; when tried, omitting it from the minimal invoice validated.
4. Use the rounded charge total when you add charges to the total without VAT.

## Before and after

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

Fragment of the failing invoice: 66.00 + 3.50 - 1.00 = 68.50, with the charge total written as 3.500

```xml
<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="GBP">80.20</cbc:TaxInclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="GBP">3.500</cbc:ChargeTotalAmount>
  <!-- paid amount, rounding amount and amount due omitted from this fragment -->
</cac:LegalMonetaryTotal>
```

Fragment of the corrected invoice: the charge total written as 3.50

```xml
<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="GBP">66.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="GBP">68.50</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="GBP">80.20</cbc:TaxInclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="GBP">1.00</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="GBP">3.50</cbc:ChargeTotalAmount>
  <!-- paid amount, rounding amount and amount due omitted from this fragment -->
</cac:LegalMonetaryTotal>
```

Only `cbc:ChargeTotalAmount` differs: `3.500` in the failing invoice, `3.50` in the corrected one. It sums the one document charge of 3.50 in both, so `BR-CO-12` and `BR-CO-13` are satisfied. The failing document reports `BR-DEC-11` at `cac:LegalMonetaryTotal` and `UBL-DT-01` at the charge total. The latter caps the decimals of every amount element other than item prices and the amounts of a price-level allowance, and the charge total is subject to it like any other total, so fixing the format clears both findings.

### What the validator reported

- The failing invoice reports **BR-DEC-11** and [UBL-DT-01](https://ironfang.com/docs/finance/rules/UBL-DT-01.md). The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.com/finance/rule-examples/BR-DEC-11-invalid.xml)
  - [Download the corrected XML](https://ironfang.com/finance/rule-examples/invoice-rich.xml)

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 a charge total of `3.500` reported the same two findings.
- A zero charge total is held to the same limit. When tried, the minimal invoice, which has no charges, failed this rule with the element written as `0.000`.
- The count does not depend on `currencyID`.

## Related rules

- [UBL-DT-01 is reported on the charge total whenever this rule fails](https://ironfang.com/docs/finance/rules/UBL-DT-01.md)
- [BR-CO-12 checks the value of the charge total against the document charges](https://ironfang.com/docs/finance/rules/BR-CO-12.md)
- [BR-DEC-05 counts the decimals of each document charge](https://ironfang.com/docs/finance/rules/BR-DEC-05.md)
- [BR-DEC-09 applies the same limit to the sum of the line net amounts](https://ironfang.com/docs/finance/rules/BR-DEC-09.md)

## 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-11](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/BR-DEC-11/) 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.

## Links

- [This rule as a web page](https://ironfang.com/docs/finance/rules/BR-DEC-11)
- [Free Peppol invoice validator](https://ironfang.com/tools/peppol-validator)
- [Rule index](https://ironfang.com/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.com/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.com/mcp
