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
[PEPPOL-EN16931-R040] Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists
- 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
- PEPPOL-EN16931-R001: Business process type (BT-23) is missing
- PEPPOL-EN16931-R005: VAT accounting currency (BT-6) equals the invoice currency (BT-5)
- PEPPOL-EN16931-R008: The invoice contains empty elements
- PEPPOL-EN16931-R010: Buyer electronic address (BT-49) is missing
- PEPPOL-EN16931-R020: Seller electronic address (BT-34) is missing
- PEPPOL-EN16931-R041: Base amount missing for allowance or charge with percentage
Last updated:
Explanation of the validation rule, not legal or tax advice.