Konto
Polski

BR-CO-17: Kwota VAT kategorii (BT-117) nie równa się podstawie razy stawka

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-116 VAT category taxable amount
  • BT-117 VAT category tax amount
  • BT-119 VAT category rate
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-17] VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.

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

Dlaczego pojawia się ten błąd

W każdej grupie podziału VAT kwota podatku (BT-117) musi być równa podstawie opodatkowania (BT-116) pomnożonej przez stawkę (BT-119) i podzielonej przez 100, z zaokrągleniem do dwóch miejsc po przecinku; schematron toleruje odchylenie mniejsze niż 1.00, aby uwzględnić zaokrąglenia na poziomie pozycji. Jeśli stawka wynosi 0, kwota podatku musi wynosić 0. Reguła odczytuje cac:TaxSubtotal/cbc:TaxAmount, cbc:TaxableAmount i cac:TaxCategory/cbc:Percent (UBL) lub ram:ApplicableTradeTax/ram:CalculatedAmount, ram:BasisAmount i ram:RateApplicablePercent (CII). Błąd pojawia się, gdy stawka jest zapisana jako ułamek (0.19), gdy kategorie o różnych stawkach połączono w jedno podsumowanie cząstkowe lub gdy podstawę zmieniono po obliczeniu podatku.

Jak to naprawić

Wzór: BT-117 = round(BT-116 x BT-119 / 100, 2). Zapisuj stawkę jako liczbę procentową (19, 7, 0), a nie 0.19. Utwórz jeden cac:TaxSubtotal (ram:ApplicableTradeTax) dla każdej kombinacji kodu kategorii i stawki, zsumuj odpowiadające im kwoty netto pozycji oraz rabaty i opłaty na poziomie dokumentu w cbc:TaxableAmount / ram:BasisAmount, a cbc:TaxAmount / ram:CalculatedAmount oblicz od tej podstawy. Dla kategorii E, AE, K, G, O i Z stawka wynosi 0, a kwota podatku musi wynosić 0.00.

Przykład (poprawny)

<cac:TaxSubtotal>
  <cbc:TaxableAmount currencyID="EUR">245.90</cbc:TaxableAmount>
  <cbc:TaxAmount currencyID="EUR">46.72</cbc:TaxAmount>
  <cac:TaxCategory><cbc:ID>S</cbc:ID><cbc:Percent>19</cbc:Percent><cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme></cac:TaxCategory>
</cac:TaxSubtotal>

Co sprawdza walidator

Sprawdzany element (kontekst):

UBL

cac:TaxTotal/cac:TaxSubtotal

Test (XPath):

(round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) = 0 and (round(xs:decimal(cbc:TaxAmount)) = 0)) or (round(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent)) != 0 and ((abs(xs:decimal(cbc:TaxAmount)) - 1 < round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(cbc:TaxAmount)) + 1 > round(abs(xs:decimal(cbc:TaxableAmount)) * (cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent) div 100) * 10 * 10) div 100 )))  or (not(exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/xs:decimal(cbc:Percent))) and (round(xs:decimal(cbc:TaxAmount)) = 0))

CII

//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax

Test (XPath):

(round(.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent)) = 0 and (round(xs:decimal(ram:CalculatedAmount)) = 0)) or (round(.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent)) != 0 and ((abs(xs:decimal(ram:CalculatedAmount)) - 1 <= round(abs(xs:decimal(ram:BasisAmount)) * (.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent) div 100) * 10 * 10) div 100 ) and (abs(xs:decimal(ram:CalculatedAmount)) + 1 >= round(abs(xs:decimal(ram:BasisAmount)) * (.[normalize-space(upper-case(ram:TypeCode)) = 'VAT']/xs:decimal(ram:RateApplicablePercent) div 100) * 10 * 10) div 100 ))) or (not(exists(.[normalize-space(upper-case(ram:TypeCode))='VAT']/xs:decimal(ram:RateApplicablePercent))) and (round(xs:decimal(ram:CalculatedAmount)) = 0))

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-17?

BR-CO-17 to reguła podstawowa en 16931: VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.

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

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

Jakich formatów dotyczy BR-CO-17?

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.