Oficjalna treść reguły
[PEPPOL-EN16931-R040] Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists
Tekst normatywny jest w języku angielskim i cytowany bez zmian.
Dlaczego pojawia się ten błąd
Gdy rabat lub opłata (narzut) podaje zarówno kwotę bazową, jak i procent, kwota musi być równa podstawa x procent / 100, z tolerancją 0,02. Reguła porównuje cbc:Amount z cbc:BaseAmount i cbc:MultiplierFactorNumeric w cac:AllowanceCharge na poziomie dokumentu i pozycji (UBL) lub ram:ActualAmount z ram:BasisAmount i ram:CalculationPercent w ram:SpecifiedTradeAllowanceCharge (CII). Błąd pojawia się, gdy procent zapisano jako ułamek (0.10 zamiast 10), gdy kwota bazowa odnosi się do innej podstawy niż ta, od której obliczono kwotę, lub gdy kwotę zaokrąglono inaczej.
Jak to naprawić
Wzór: Amount = round(BaseAmount x MultiplierFactorNumeric / 100, 2). Zapisz procent jako liczbę procent (10 dla 10 %). Ustaw BaseAmount na kwotę, od której faktycznie naliczono rabat (zwykle suma objętych pozycji), i oblicz z niej Amount. Jeśli nie możesz podać spójnej podstawy, pomiń zarówno cbc:BaseAmount, jak i cbc:MultiplierFactorNumeric i podaj tylko cbc:Amount, co jest zawsze dozwolone.
Przykład (poprawny)
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Discount</cbc:AllowanceChargeReason>
<cbc:MultiplierFactorNumeric>10</cbc:MultiplierFactorNumeric>
<cbc:Amount currencyID="EUR">25.00</cbc:Amount>
<cbc:BaseAmount currencyID="EUR">250.00</cbc:BaseAmount>
<cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
</cac:AllowanceCharge>
Co sprawdza walidator
Sprawdzany element (kontekst):
UBL
ubl-invoice:Invoice/cac:AllowanceCharge | ubl-invoice:Invoice/cac:InvoiceLine/cac:AllowanceCharge | ubl-creditnote:CreditNote/cac:AllowanceCharge | ubl-creditnote:CreditNote/cac:CreditNoteLine/cac:AllowanceChargeTest (XPath):
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, 0.02)CII
ram:SpecifiedTradeAllowanceChargeTest (XPath):
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, 0.02)
Popraw automatycznie
Ten błąd można poprawić automatycznie: po potwierdzeniu walidator przeliczy sumy i VAT z kwot pozycji.
To samo sprawdzenie przez API:
curl -F file=@invoice.xml https://einvoicechecker.com/v1/validatePowiązane reguły
PEPPOL-EN16931-R001Brak identyfikatora procesu biznesowego (BT-23)PEPPOL-EN16931-R002Najwyżej jedna uwaga na poziomie dokumentu, chyba że nabywca i sprzedawca…PEPPOL-EN16931-R003Brak referencji nabywcy i numeru zamówieniaPEPPOL-EN16931-R004Identyfikator specyfikacji nie jest identyfikatorem Peppol BIS 3.0PEPPOL-EN16931-R005Waluta rozliczenia VAT jest taka sama jak waluta fakturyPEPPOL-EN16931-R006Dozwolony tylko jeden fakturowany obiekt na poziomie dokumentuPEPPOL-EN16931-R007Identyfikator procesu biznesowego ma nieprawidłowy formatPEPPOL-EN16931-R008Dokument zawiera puste elementy
Najczęstsze pytania
Co oznacza PEPPOL-EN16931-R040?
PEPPOL-EN16931-R040 to reguła peppol bis billing 3.0: Allowance/charge amount must equal base amount * percentage/100 if base amount and percentage exists
Czy moja faktura zostanie odrzucona z powodu PEPPOL-EN16931-R040?
Tak. PEPPOL-EN16931-R040 ma status „krytyczny”; walidatory (KSeF, punkty dostępowe Peppol, KoSIT) odrzucają fakturę do czasu poprawienia błędu.
Jakich formatów dotyczy PEPPOL-EN16931-R040?
Faktury i noty kredytowe przesyłane siecią Peppol (UBL) oraz, ponieważ XRechnung zawiera reguły Peppol, każda XRechnung. Składnia: UBL i CII.
Źródło: Peppol BIS Billing 3.0.20 (November 2025). Katalog wygenerowany z oficjalnych zestawów reguł dnia 2026-10-15.