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

An allowance or charge that gives a base amount must also give the percentage; a fixed-sum allowance or charge should carry neither.

- 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-R042/
- Explanation last updated: 2026-09-20

## The short answer

`PEPPOL-EN16931-R042` fails for any `cac:AllowanceCharge` that has `cbc:BaseAmount` but no `cbc:MultiplierFactorNumeric`. If the amount is a percentage of that base, add the percentage, placed before `cbc:Amount`.

If the amount is a fixed sum, the base amount has no job to do: remove `cbc:BaseAmount`.

## What the rule checks

The rule selects `cac:AllowanceCharge` elements directly under the document root or directly under a line that contain `cbc:BaseAmount` and lack `cbc:MultiplierFactorNumeric`. Being selected is the failure; no values are compared.

Allowances and charges are handled identically, and the size of the base amount is irrelevant.

Sending only `cbc:Amount`, with no base amount and no percentage, passes.

| 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 mapping always writes a base amount, such as the line or document subtotal, including for fixed-sum discounts and fees that have no percentage.
- The percentage is null in the source record because the user keyed the discount as an amount.
- A percentage of 0 is treated as empty by the serialiser and dropped, while the base amount is kept.
- The percentage is held on a price list or customer agreement and never copied onto the invoice record.

## How to fix it

1. Find the `cac:AllowanceCharge` named in the finding, at document level or inside a line.
2. Establish whether the amount was derived from a percentage. If it was, add `cbc:MultiplierFactorNumeric` with that percentage, written as 10 for ten per cent. In UBL it sits before `cbc:Amount`.
3. If it was not, remove `cbc:BaseAmount`. Do not back-calculate a percentage from the amount and base just to fill the element unless that is how the amount really arose.
4. Once both are present, check the three figures against each other: `PEPPOL-EN16931-R040` requires the amount to equal base amount x percentage / 100 within 0.02.

## 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 charge with a base amount of 35.00 and no percentage

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

Fragment of the corrected invoice: the 10 per cent that produced 3.50 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:MultiplierFactorNumeric` of 10 before `cbc:Amount`; nothing else differs. The failing document reports only `PEPPOL-EN16931-R042`. No amount or total changes, so the calculation rules are untouched.

### What the validator reported

- The failing invoice reports **PEPPOL-EN16931-R042**. The corrected document passes every layer with no findings.
  - [Download the failing XML](https://ironfang.uk/finance/rule-examples/PEPPOL-EN16931-R042-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 in both document types.
- The allowance inside `cac:Price` is not selected. There `cbc:BaseAmount` is the gross price, no percentage is expected, and `PEPPOL-EN16931-R046` applies instead.
- While the percentage is missing, `PEPPOL-EN16931-R040` does not compare the figures for that element, so an arithmetic problem can surface only after this rule is fixed.

## Related rules

- [PEPPOL-EN16931-R041 is the mirror image: a percentage sent without a base amount](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R041.md)
- [PEPPOL-EN16931-R040 checks amount, base amount and percentage against each other once all three are present](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R040.md)
- [PEPPOL-EN16931-R046 covers the base amount of the allowance inside the price, which is the gross price](https://ironfang.uk/docs/finance/rules/PEPPOL-EN16931-R046.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-R042](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R042/) 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-R042)
- [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
