# PEPPOL-EN16931-R041: Add the base amount to an allowance or charge that states a percentage

An allowance or charge that gives a percentage must also give the base amount the percentage was applied to.

- Layer: Peppol BIS Billing
- Severity: fatal (the document is invalid)
- Topics: Allowances and charges
- Official definition: https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R041/
- Explanation last updated: 2026-09-20

## The short answer

`PEPPOL-EN16931-R041` fails for any `cac:AllowanceCharge` that has `cbc:MultiplierFactorNumeric` but no `cbc:BaseAmount`. Add the base amount the percentage was applied to, placed after `cbc:Amount`.

If the amount was never calculated from a percentage, remove `cbc:MultiplierFactorNumeric` instead and send the amount on its own.

## What the rule checks

This is a presence check with no arithmetic. The rule selects `cac:AllowanceCharge` elements directly under the document root or directly under a line that contain `cbc:MultiplierFactorNumeric` and lack `cbc:BaseAmount`, and every element it selects fails.

The value of the percentage does not matter, and neither does `cbc:ChargeIndicator`: allowances and charges are treated alike.

An allowance or charge with neither a percentage nor a base amount passes. Confirmed with the validator by removing both from the recorded charge.

| Term | Meaning | UBL element |
|---|---|---|
| BG-20 | Document level allowances | `cac:AllowanceCharge[cbc:ChargeIndicator = false]` |
| BG-21 | Document level charges | `cac:AllowanceCharge[cbc:ChargeIndicator = true]` |
| BG-27 | Invoice line allowances | `cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = false]` |
| BG-28 | Invoice line charges | `cac:InvoiceLine/cac:AllowanceCharge[cbc:ChargeIndicator = true]` |

## How an integration ends up here

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

- The source system stores the discount as a percentage and a resulting amount, and has no column for the figure the percentage was taken from.
- The base amount is mapped from a field that is empty for this document, and the serialiser drops empty elements.
- A percentage is written for information on what is really a fixed-sum charge.
- The mapping was built for line-level discounts and reused at document level, where no base value was wired up.

## How to fix it

1. Locate the `cac:AllowanceCharge` from the finding. The rule fires once for each element that is affected, at document level or inside a line.
2. If the amount came from a percentage, add `cbc:BaseAmount` with the figure the percentage was applied to, using the same `currencyID` as the amount. In UBL it follows `cbc:Amount`.
3. If the amount is a fixed sum, remove `cbc:MultiplierFactorNumeric`. Do not invent a base amount to fit.
4. With both elements present, `PEPPOL-EN16931-R040` checks that the amount equals base amount x percentage / 100 within 0.02, so make sure the base you add is the one that was really used.

## 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 10 per cent charge with no base amount

```xml
<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>
  <!-- tax category omitted from this fragment -->
</cac:AllowanceCharge>
```

Fragment of the corrected invoice: the base amount of 35.00 is stated

```xml
<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>
```

The corrected document adds `cbc:BaseAmount` of 35.00 after `cbc:Amount`; nothing else differs. The failing document reports only `PEPPOL-EN16931-R041`. The amount and every total are unchanged, so no calculation rule is affected.

### What the validator reported

- The failing invoice reports **PEPPOL-EN16931-R041**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/PEPPOL-EN16931-R041-invalid.xml)
  - [Download the corrected XML](https://ironfang.uk/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`, at document level and on `cac:InvoiceLine` or `cac:CreditNoteLine`. Confirmed with the validator on a line-level allowance and on a credit note.
- The allowance inside `cac:Price` is not selected by this rule.
- When this rule fires, `PEPPOL-EN16931-R040` stays silent for the same element, because it only compares the figures when both the percentage and the base amount are present.

## Related rules

- [PEPPOL-EN16931-R042 is the mirror image: a base amount sent without a percentage](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R042.md)
- [PEPPOL-EN16931-R040 checks the arithmetic once both the percentage and the base amount are present](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R040.md)
- [BR-CO-12 checks that document-level charge amounts add up to the charge total](https://ironfang.uk/docs/finance/rules/BR-CO-12.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-24.1: source checked 2026-09-24, explanation last updated 2026-09-20.

[The official definition of PEPPOL-EN16931-R041](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R041/) 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.uk/docs/finance/rules/PEPPOL-EN16931-R041)
- [Free Peppol invoice validator](https://ironfang.uk/tools/peppol-validator)
- [Rule index](https://ironfang.uk/docs/finance/rules.md)
- [Ironfang Finance API docs](https://ironfang.uk/docs/finance)
- The same rule is available to MCP clients as the tool `finance.rule.get` on https://mcp.ironfang.uk/mcp
