Konto
Polski

BR-CO-16: Kwota do zapłaty (BT-115) nie sumuje się poprawnie

Reguła podstawowa EN 16931 · Błąd · UBL, CII

StandardEN 16931-1 (europejski model semantyczny e-faktury)WagaBłąd: faktura zostaje odrzuconaSkładniaUBL, CIIPojęcia biznesowe
  • BT-112 Invoice total amount with VAT
  • BT-113 Paid amount
  • BT-114 Rounding amount
  • BT-115 Amount due for payment
DotyczyKażda faktura EN 16931: XRechnung, ZUGFeRD 2.x / Factur-X (profile EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0 oraz krajowe CIUS.

Oficjalna treść reguły

[BR-CO-16] Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

Tekst normatywny jest w języku angielskim i cytowany bez zmian.

Dlaczego pojawia się ten błąd

Kwota do zapłaty (BT-115) musi być równa kwocie z VAT (BT-112) pomniejszonej o kwotę zapłaconą (BT-113) i powiększonej o kwotę zaokrąglenia (BT-114). Reguła sprawdza cac:LegalMonetaryTotal/cbc:PayableAmount względem cbc:TaxInclusiveAmount, cbc:PrepaidAmount i cbc:PayableRoundingAmount (UBL) lub ram:DuePayableAmount względem ram:GrandTotalAmount, ram:TotalPrepaidAmount i ram:RoundingAmount (CII). Zwykle błąd występuje, gdy oprogramowanie po płatności częściowej wpisuje pozostałe saldo, nie wpisując jednocześnie kwoty przedpłaty, albo stosuje niewłaściwy znak kwoty zaokrąglenia.

Jak to naprawić

Wzór: BT-115 = BT-112 - BT-113 + BT-114, zaokrąglone do 2 miejsc po przecinku; brakujące BT-113 lub BT-114 liczy się jako 0. Jeśli otrzymano przedpłatę, wpisz ją jako wartość dodatnią w cbc:PrepaidAmount / ram:TotalPrepaidAmount i odpowiednio zmniejsz cbc:PayableAmount / ram:DuePayableAmount. Używaj cbc:PayableRoundingAmount / ram:RoundingAmount wyłącznie do zaokrągleń gotówkowych, ze znakiem korekty (np. -0.02 lub 0.03). W przypadku faktury zapłaconej w całości PrepaidAmount jest równe TaxInclusiveAmount, a PayableAmount wynosi 0.00.

Przykład (poprawny)

<cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">200.00</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">200.00</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">238.00</cbc:TaxInclusiveAmount>
  <cbc:PrepaidAmount currencyID="EUR">100.00</cbc:PrepaidAmount>
  <cbc:PayableAmount currencyID="EUR">138.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

Co sprawdza walidator

Sprawdzany element (kontekst):

UBL

cac:LegalMonetaryTotal

Test (XPath):

(exists(cbc:PrepaidAmount) and not(exists(cbc:PayableRoundingAmount)) and (xs:decimal(cbc:PayableAmount) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or (not(exists(cbc:PrepaidAmount)) and not(exists(cbc:PayableRoundingAmount)) and xs:decimal(cbc:PayableAmount) = xs:decimal(cbc:TaxInclusiveAmount)) or (exists(cbc:PrepaidAmount) and exists(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = (round((xs:decimal(cbc:TaxInclusiveAmount) - xs:decimal(cbc:PrepaidAmount)) * 10 * 10) div 100))) or  (not(exists(cbc:PrepaidAmount)) and exists(cbc:PayableRoundingAmount) and ((round((xs:decimal(cbc:PayableAmount) - xs:decimal(cbc:PayableRoundingAmount)) * 10 * 10) div 100) = xs:decimal(cbc:TaxInclusiveAmount)))

CII

//ram:SpecifiedTradeSettlementHeaderMonetarySummation

Test (XPath):

(xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount) + xs:decimal(ram:RoundingAmount)) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) + xs:decimal(ram:RoundingAmount)) and not (xs:decimal(ram:TotalPrepaidAmount))) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount) - xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount))) or      ((xs:decimal(ram:DuePayableAmount) = xs:decimal(ram:GrandTotalAmount)) and not (xs:decimal(ram:TotalPrepaidAmount)) and not (xs:decimal(ram:RoundingAmount)))

Popraw automatycznie

Ten błąd można poprawić automatycznie: po potwierdzeniu walidator przeliczy sumy i VAT z kwot pozycji.

Popraw fakturę →

To samo sprawdzenie przez API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Powiązane reguły

Najczęstsze pytania

Co oznacza BR-CO-16?

BR-CO-16 to reguła podstawowa en 16931: Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).

Czy moja faktura zostanie odrzucona z powodu BR-CO-16?

Tak. BR-CO-16 ma status „krytyczny”; walidatory (KSeF, punkty dostępowe Peppol, KoSIT) odrzucają fakturę do czasu poprawienia błędu.

Jakich formatów dotyczy BR-CO-16?

Każda faktura EN 16931: XRechnung, ZUGFeRD 2.x / Factur-X (profile EN 16931, EXTENDED, XRECHNUNG), Peppol BIS Billing 3.0 oraz krajowe CIUS. Składnia: UBL i CII.

Źródło: EN 16931-1:2017 schematron (CEN TC434, via Peppol BIS 3.0.20). Katalog wygenerowany z oficjalnych zestawów reguł dnia 2026-10-15.