Oficjalna treść reguły
[PEPPOL-EN16931-R120] Invoice line net amount MUST equal (Invoiced quantity * (Item net price/item price base quantity) + Sum of invoice line charge amount - sum of invoice line allowance amount
Tekst normatywny jest w języku angielskim i cytowany bez zmian.
Dlaczego pojawia się ten błąd
Peppol weryfikuje arytmetykę każdej pozycji: kwota netto pozycji (BT-131) musi być równa ilości zafakturowanej (BT-129) razy cena netto (BT-146) podzielona przez ilość bazową ceny (BT-149, domyślnie 1), plus opłaty pozycji minus rabaty pozycji, z tolerancją 0,02. Reguła odczytuje cbc:LineExtensionAmount, cbc:InvoicedQuantity, cac:Price/cbc:PriceAmount, cac:Price/cbc:BaseQuantity i kwoty cac:AllowanceCharge pozycji (UBL) lub ram:LineTotalAmount, ram:BilledQuantity, ram:NetPriceProductTradePrice/ram:ChargeAmount, ram:BasisQuantity i ram:SpecifiedTradeAllowanceCharge (CII). Typowe przyczyny: eksport ceny brutto zamiast netto, cena za 100 sztuk bez ilości bazowej, rabaty pozycji już odjęte od ceny i odjęte ponownie lub różnica zaokrągleń przekraczająca dwa centy.
Jak to naprawić
Wzór: BT-131 = round(BT-129 x (BT-146 / BT-149) + Σ opłat pozycji - Σ rabatów pozycji, 2). Eksportuj cenę jednostkową netto w cbc:PriceAmount; jeśli cena dotyczy 10 lub 100 sztuk, ustaw odpowiednio cac:Price/cbc:BaseQuantity z tym samym unitCode co ilość. Modeluj rabat pozycji albo w cenie (rabat na poziomie ceny), albo jako cac:AllowanceCharge na poziomie pozycji, nigdy w obu miejscach. Obliczaj cbc:LineExtensionAmount z wyeksportowanych wartości, aby odchylenie nie przekraczało 0,02.
Przykład (poprawny)
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">250</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">31.25</cbc:LineExtensionAmount>
...
<cac:Price><cbc:PriceAmount currencyID="EUR">12.50</cbc:PriceAmount><cbc:BaseQuantity unitCode="C62">100</cbc:BaseQuantity></cac:Price>
</cac:InvoiceLine>
Co sprawdza walidator
Sprawdzany element (kontekst):
UBL
cac:InvoiceLine | cac:CreditNoteLineTest (XPath):
u:slack($lineExtensionAmount, ($quantity * ($priceAmount div $baseQuantity)) + $chargesTotal - $allowancesTotal, 0.02)CII
ram:IncludedSupplyChainTradeLineItemTest (XPath):
u:slack($lineExtensionAmount, ($quantity * ($priceAmount div $baseQuantity)) + $chargesTotal - $allowancesTotal, 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-R120?
PEPPOL-EN16931-R120 to reguła peppol bis billing 3.0: Invoice line net amount MUST equal (Invoiced quantity * (Item net price/item price base quantity) + Sum of invoice line charge amount - sum of invoice line allowance amount
Czy moja faktura zostanie odrzucona z powodu PEPPOL-EN16931-R120?
Tak. PEPPOL-EN16931-R120 ma status „krytyczny”; walidatory (KSeF, punkty dostępowe Peppol, KoSIT) odrzucają fakturę do czasu poprawienia błędu.
Jakich formatów dotyczy PEPPOL-EN16931-R120?
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.