PEPPOL-EN16931-R046: Nettopreis passt nicht zum Bruttopreis

Ist ein Bruttopreis angegeben, muss der Nettopreis Bruttopreis minus Preisnachlass sein.

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

Offizieller Regeltext

Item net price MUST equal (Gross price - Allowance amount) when gross price is provided.

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 Nettopreis wird mit einem anderen Rabatt berechnet als dem übertragenen Preisnachlass.

So behebst du den Fehler

Nettopreis (BT-146), Preisnachlass (BT-147) und Bruttopreis (BT-148) aufeinander abstimmen.

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: Nettopreis ungleich Bruttopreis minus Preisnachlass.

Falsch – ab Zeile 167
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:Amount currencyID="EUR">2</cbc:Amount>
  <cbc:BaseAmount currencyID="EUR">22.95</cbc:BaseAmount>
</cac:AllowanceCharge>
Richtig – ab Zeile 167
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>false</cbc:ChargeIndicator>
  <cbc:Amount currencyID="EUR">3</cbc:Amount>
  <cbc:BaseAmount currencyID="EUR">22.95</cbc:BaseAmount>
</cac:AllowanceCharge>

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

  • PEPPOL-EN16931-R046 Item net price MUST equal (Gross price - Allowance amount) when gross price is provided. Fundstelle: /Invoice[1]/InvoiceLine[2]/Price[1]/AllowanceCharge[1]

Vollständige Dateien im Testkorpus: peppol-r046-nettopreis-passt-nicht_ubl.xml (falsch) und positionsrabatt_ubl.xml (richtig).

Beispiel in CII

Änderung gegenüber der gültigen Rechnung: Nettopreis ungleich Bruttopreis minus Preisnachlass.

Falsch – ab Zeile 73
      <udt:Indicator>false</udt:Indicator>
    </ram:ChargeIndicator>
    <ram:ActualAmount>2</ram:ActualAmount>
  </ram:AppliedTradeAllowanceCharge>
</ram:GrossPriceProductTradePrice>
Richtig – ab Zeile 73
      <udt:Indicator>false</udt:Indicator>
    </ram:ChargeIndicator>
    <ram:ActualAmount>3</ram:ActualAmount>
  </ram:AppliedTradeAllowanceCharge>
</ram:GrossPriceProductTradePrice>

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

  • PEPPOL-EN16931-R046 Item net price MUST equal (Gross price - Allowance amount) when gross price is provided. Fundstelle: /CrossIndustryInvoice[1]/SupplyChainTradeTransaction[1]/IncludedSupplyChainTradeLineItem[2]/SpecifiedLineTradeAgreement[1]/GrossPriceProductTradePrice[1]

Vollständige Dateien im Testkorpus: peppol-r046-nettopreis-passt-nicht_cii.xml (falsch) und positionsrabatt_cii.xml (richtig).

Testdateien zu PEPPOL-EN16931-R046

Technische Details: Kontext und Prüfausdruck aus dem Schematron

CII

Kontext:

rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeAgreement/ram:GrossPriceProductTradePrice

Prüfausdruck:

not(ram:ChargeAmount) or xs:decimal(../ram:NetPriceProductTradePrice/ram:ChargeAmount) = xs:decimal(ram:ChargeAmount) - u:decimalOrZero(ram:AppliedTradeAllowanceCharge/ram:ActualAmount[1])

UBL

Kontext:

cac:Price/cac:AllowanceCharge

Prüfausdruck:

not(cbc:BaseAmount) or xs:decimal(../cbc:PriceAmount) = xs:decimal(cbc:BaseAmount) - xs:decimal(cbc:Amount)

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