PEPPOL-EN16931-R040: Nachlassbetrag passt nicht zum Prozentsatz

Sind Grundbetrag und Prozentsatz eines Nachlasses oder Zuschlags angegeben, muss der Betrag Grundbetrag mal Prozentsatz geteilt durch 100 sein.

Regelwerk
XRechnung (KoSIT)
Syntax
UBL und CII
Betroffene Felder
–

Offizieller Regeltext

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

Regeltext aus dem XRechnung-Schematron in Version 2.6.0 (KoSIT), Lizenz Apache 2.0; enthalten in der XRechnung-Validatorkonfiguration 2026-08-31. Die Regel stammt aus dem Peppol-Regelwerk und ist Bestandteil des XRechnung-Schematron.

Schweregrad

Ein Verstoß führt im Szenario „XRechnung“ des KoSIT-Validators zur Ablehnung der Rechnung.

Typische Ursachen

Der Prozentsatz wird gerundet ausgegeben oder der Grundbetrag stammt aus einem anderen Rechenstand.

So behebst du den Fehler

Den Betrag aus den übertragenen Werten berechnen oder Grundbetrag und Prozentsatz weglassen.

Der Prüfausdruck erlaubt eine Abweichung von 0,02 (bei HUF 0,5).

Geprüftes Beispiel: falsch und richtig

Die Auszüge stammen aus vollständigen, synthetischen Rechnungen des E-Rechnungs-Testkorpus. Geänderte Zeilen sind hervorgehoben. Beide Dateien werden in den automatischen Tests mit dem KoSIT-Validator geprüft.

Beispiel in UBL

Änderung gegenüber der gültigen Rechnung: Nachlassbetrag passt nicht zu Grundbetrag und Prozentsatz.

Falsch – ab Zeile 94
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Treuerabatt</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>4</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">25.08</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">501.55</cbc:BaseAmount>
Richtig – ab Zeile 94
<cbc:AllowanceChargeReasonCode>95</cbc:AllowanceChargeReasonCode>
<cbc:AllowanceChargeReason>Treuerabatt</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>5</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">25.08</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">501.55</cbc:BaseAmount>

Prüfergebnis (KoSIT-Validator 1.6.3, Konfiguration 2026-08-31): falsche Datei abgelehnt, korrigierte Datei angenommen. Meldungen zur falschen Datei:

  • PEPPOL-EN16931-R040 Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists Fundstelle: /Invoice[1]/AllowanceCharge[1]

Vollständige Dateien im Testkorpus: peppol-r040-prozent-passt-nicht_ubl.xml (falsch) und belegrabatt_ubl.xml (richtig).

Beispiel in CII

Änderung gegenüber der gültigen Rechnung: Nachlassbetrag passt nicht zu Grundbetrag und Prozentsatz.

Falsch – ab Zeile 193
  <udt:Indicator>false</udt:Indicator>
</ram:ChargeIndicator>
<ram:CalculationPercent>4</ram:CalculationPercent>
<ram:BasisAmount>501.55</ram:BasisAmount>
<ram:ActualAmount>25.08</ram:ActualAmount>
Richtig – ab Zeile 193
  <udt:Indicator>false</udt:Indicator>
</ram:ChargeIndicator>
<ram:CalculationPercent>5</ram:CalculationPercent>
<ram:BasisAmount>501.55</ram:BasisAmount>
<ram:ActualAmount>25.08</ram:ActualAmount>

Prüfergebnis (KoSIT-Validator 1.6.3, Konfiguration 2026-08-31): falsche Datei abgelehnt, korrigierte Datei angenommen. Meldungen zur falschen Datei:

  • PEPPOL-EN16931-R040 Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists Fundstelle: /CrossIndustryInvoice[1]/SupplyChainTradeTransaction[1]/ApplicableHeaderTradeSettlement[1]/SpecifiedTradeAllowanceCharge[1]

Vollständige Dateien im Testkorpus: peppol-r040-prozent-passt-nicht_cii.xml (falsch) und belegrabatt_cii.xml (richtig).

Testdateien zu PEPPOL-EN16931-R040

Technische Details: Kontext und Prüfausdruck aus dem Schematron

CII

Kontext:

ram:SpecifiedTradeAllowanceCharge

Prüfausdruck:

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)

UBL

Kontext:

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

Prüfausdruck:

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)

Technische Formatprüfung nach XRechnung 3.0.2; keine steuerliche oder rechtliche Beratung.