Back to the error catalogue
PEPPOL-EN16931-R040
blocked

An allowance or charge amount does not match its base amount and percentage

When an allowance or charge carries both a base amount and a percentage, its amount must equal base × percentage ÷ 100.

A financial field: the expected value is computed and offered, never written into the document — the correction is the issuer's to make. Test your invoice to find out whether it is affected.

The message your validator prints

Copied verbatim from the sealed artefact: this is the exact sentence the check prints when this rule fails.

Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists

Quoted from schematron-xrechnung 3.0.2, licensed under Apache-2.0.

Common searches around this code

These phrases mirror what an integrator searches for: code, syntax, rule, business field and correction.

PEPPOL-EN16931-R040 An allowance or charge amount does not match its base amount and percentagePEPPOL-EN16931-R040 XRechnung Schematron package (KoSIT)Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage existsPEPPOL-EN16931-R040 correction

Test your file with this error in mind

Upload the invoice involved: the report will say whether this code appears, where it appears in the document, and whether Factlint can only report it or also fix it.

To automate this check in an ERP flow, call the validation API and link every returned code to its public page.

Why this error happens

The check tolerates a two-cent gap (fifty forints in HUF): what triggers it is therefore not rounding but a percentage changed without recomputing the amount, or the reverse. The usual source is a negotiated discount captured as an amount and then back-documented as a percentage.

How to fix it

Fix the calculation in the system that produced the invoice. Factlint computes the expected value and returns it in `suggested_value`, but never writes an amount.

Reason it is blocked:

financial_field_policy

XML correction example

BEFORE (invalid)
<ram:BasisAmount>1000.00</ram:BasisAmount> + 10 % → <ram:ActualAmount>150.00</ram:ActualAmount>
AFTER (compliant)
<ram:ActualAmount>100.00</ram:ActualAmount>