Skip to content

PEPPOL-EN16931-R040: Allowance or charge amount does not match base amount and percentage

Official message

[PEPPOL-EN16931-R040] Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists

XRechnung (CII) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31

[PEPPOL-EN16931-R040] Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists

XRechnung (UBL) · Error · Message language: English · Version: xrechnung-3.0.2-validator-configuration-2026-08-31
Severity
Error The invoice is invalid and may be rejected by the recipient.
Applies to
XRechnung (CII), XRechnung (UBL)

What does this mean?

Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exist. This applies on document level (allowance BT-92 to BT-94, charge BT-99 to BT-101) and on line level (allowance BT-136 to BT-138, charge BT-141 to BT-143). The amount deviates.
The rule originates from Peppol BIS Billing 3.0 and is applied in the XRechnung validation. A deviation of 0.02 is tolerated (0.5 if the invoice currency is HUF). If the amount is missing, 0 is used. Example: 3 % of 250.00 = 7.50.

Typical causes

The amount was changed manually, but not the base amount or percentage.
A base amount other than the one the percentage refers to was given.
The percentage was given as a fraction (0.03 instead of 3).

How to fix the error

Calculate the amount as base amount × percentage / 100 and round to two decimals, or adjust base amount and percentage to the actual amount.
If base amount and percentage are not needed, omit both (see PEPPOL-EN16931-R041 and -R042).
CII: ram:SpecifiedTradeAllowanceCharge with ram:ActualAmount, ram:BasisAmount and ram:CalculationPercent; UBL: cac:AllowanceCharge with cbc:Amount, cbc:BaseAmount and cbc:MultiplierFactorNumeric.
Generate and validate the invoice again.

In E-Rechnungsfreund

In the invoice form, "Experte" view, section "Zu-/Abschläge auf Dokumentenebene (BG-20/BG-21)" (document level allowances and charges), fill in the fields "Betrag" (amount), "Grundbetrag" (base amount) and "%" so that amount = base amount × % / 100, or leave "Grundbetrag" and "%" empty. For lines the same applies on the tab "Zu-/Abschläge (BG-27/28)" of the line.

Example

Wrong

<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator>
    <udt:Indicator>false</udt:Indicator>
  </ram:ChargeIndicator>
  <ram:CalculationPercent>3</ram:CalculationPercent>
  <ram:BasisAmount>250.00</ram:BasisAmount>
  <ram:ActualAmount>7.80</ram:ActualAmount>
  ...
</ram:SpecifiedTradeAllowanceCharge>

Correct

<ram:SpecifiedTradeAllowanceCharge>
  <ram:ChargeIndicator>
    <udt:Indicator>false</udt:Indicator>
  </ram:ChargeIndicator>
  <ram:CalculationPercent>3</ram:CalculationPercent>
  <ram:BasisAmount>250.00</ram:BasisAmount>
  <ram:ActualAmount>7.50</ram:ActualAmount>
  ...
</ram:SpecifiedTradeAllowanceCharge>
For developers: test expression per syntax

XRechnung (CII) (CII)

Context: ram:SpecifiedTradeAllowanceCharge

not(ram:CalculationPercent and ram:BasisAmount) or u:slack(if (ram:ActualAmount) then ram:ActualAmount else 0, (xs:decimal(ram:BasisAmount) * xs:decimal(ram:CalculationPercent)) div 100, $slackValue)

XRechnung (UBL) (UBL)

Context: ubl-invoice:Invoice/cac:AllowanceCharge | ubl-invoice:Invoice/cac:InvoiceLine/cac:AllowanceCharge | ubl-creditnote:CreditNote/cac:AllowanceCharge | ubl-creditnote:CreditNote/cac:CreditNoteLine/cac:AllowanceCharge

not(cbc:MultiplierFactorNumeric and cbc:BaseAmount) or u:slack(if (cbc:Amount) then cbc:Amount else 0, (xs:decimal(cbc:BaseAmount) * xs:decimal(cbc:MultiplierFactorNumeric)) div 100, $slackValue)

Related validation rules

Last updated:
Explanation of the validation rule, not legal or tax advice.