Przejdź do głównej treści
EN 16931 · sumy

Błąd BR-CO-15 w e-fakturze: wartość brutto nie jest netto plus VAT

BR-CO-15 to reguła EN 16931, która sprawdza najprostszą sumę na fakturze: wartość brutto równa się wartości netto plus VAT. Towarzyszą jej BR-CO-14, BR-CO-16, BR-CO-17 oraz, dla stawki podstawowej, BR-S-08 i BR-S-09, a stosują je XRechnung, Factur-X i Peppol BIS. Jeden grosz zaokrąglenia wystarczy, by padły BR-CO-14 lub BR-CO-15; BR-CO-17 i BR-S-09 dopuszczają różnicę do 1 €.

FlexigoTech · Odpowiada: Víctor Gómez · Aktualizacja: 4 listopada 2026

Najważniejsze

Wersje
Odoo 17, 18, 19 i 20
Sprawdzone
w kodzie źródłowym modułu, wersja 17.0 i 20.0 · w źródłach podanych na końcu
Czas czytania
4 min

Wzory tak, jak zapisuje je Schematron

RegułaTekst EN 16931 (Schematron validation-1.3.17)
BR-CO-15Invoice total amount with VAT (BT-112) = Invoice total amount without VAT (BT-109) + Invoice total VAT amount (BT-110).
BR-CO-14Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117).
BR-CO-16Amount due for payment (BT-115) = Invoice total amount with VAT (BT-112) -Paid amount (BT-113) +Rounding amount (BT-114).
BR-CO-17VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.
BR-S-08For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
BR-S-09The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is "Standard rated" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).

Wszystkie sześć są krytyczne. Czytaj je jako łańcuch: pozycje sumują się do podstawy każdej stawki (BR-S-08), każda podstawa razy jej stawka daje VAT tej stawki (BR-CO-17 i BR-S-09), VAT według stawek sumuje się do VAT całkowitego (BR-CO-14), podstawa plus VAT daje wartość brutto (BR-CO-15), a wartość brutto minus zapłacona kwota plus zaokrąglenie daje kwotę pozostałą do zapłaty (BR-CO-16).

Karta reguł sum EN 16931
BR-CO-15 z BR-CO-14, BR-CO-16, BR-CO-17, BR-S-08 i BR-S-09: łańcuch sum na fakturze.

Które reguły zauważają jeden grosz

Nie wszystkie liczą grosze. BR-CO-17 i BR-S-09 porównują VAT każdej stawki (BT-117) z podstawą razy stawka, ale Schematron daje im margines 1 € w obie strony. BR-S-08 porównuje podstawy, więc zaokrąglenie VAT na nią nie wpływa. BR-CO-14, BR-CO-15 i BR-CO-16 porównują sumy zaokrąglone do dwóch miejsc po przecinku, bez marginesu: tam jeden grosz to już błąd.

Grosz pojawia się, gdy VAT można policzyć na dwa sposoby. Odoo liczy go zgodnie z metodą zaokrąglania podatków ustawioną w firmie (Tax Calculation Rounding Method):

Wersja OdooOpcjeDomyślnie
Odoo 17 i 18Round per Line lub Round GloballyNa linię
Odoo 19 i 20Round per Tax lub Round per LineNa podatek

Przy zaokrągleniu na linię Odoo zaokrągla VAT każdej pozycji, a potem sumuje. Na fakturze z wieloma drobnymi pozycjami ta suma może różnić się o grosz od VAT policzonego od podstawy każdej stawki. Jeśli wszystkie liczby w pliku pochodzą z tego samego obliczenia, sumy się zgadzają. Jeśli plik zawiera VAT całkowity z Odoo obok rozbicia przeliczonego na stawki, pada BR-CO-14; jeśli zawiera wartość brutto z Odoo obok przeliczonego VAT, pada BR-CO-15. Żeby zadziałała BR-CO-17, różnica musi przekroczyć 1 €.

Metoda zaokrąglania to ustawienie firmy, a nie faktury: zmiana wpływa na podatki liczone od tego momentu. Rób ją między fakturami, nigdy w połowie jednej.

Co robi Factur-X z Odoo

W Factur-X (CII) w Odoo 18, 19 i 20 wartość brutto (BT-112) zapisywana jest jako suma podstawy (BT-109) i VAT (BT-110), które już są w pliku, dokładnie po to, by spełnić BR-CO-15. To zabezpiecza regułę sumy; reszta łańcucha nadal zależy od tego, czy rozbicie się zgadza.

Z naszym modułem XRechnung i ZUGFeRD

Moduł buduje XML własnym kodem i obecnie łączy oba obliczenia. VAT każdej stawki (BT-117) liczy jako podstawę razy stawkę, a wartość brutto (w UBL) lub VAT całkowity (w CII) kopiuje z faktury Odoo. Przy zaokrągleniu na linię wystarczy grosz różnicy: XML wychodzi z BR-CO-15 w XRechnung UBL i z BR-CO-14 w XRechnung CII, czyli w formacie domyślnym modułu. Sprawdziliśmy to walidatorem KoSIT. W Odoo 17 i 18 zaokrąglanie na linię jest domyślne.

Przy płatności częściowej pada BR-CO-16: kwota do zapłaty (BT-115) to to, co w Odoo jeszcze otwarte, ale plik nie zawiera kwoty już zapłaconej (BT-113).

Faktura z Odoo 20 z zakładką XRechnung / ZUGFeRD modułu
Wynik walidacji i pole Ready to send na fakturze. Zrzut ekranu Odoo 20 z danymi demonstracyjnymi; raport na zrzucie jest testowy.

W Odoo 18, 19 i 20, z subskrypcją FlexigoTech Cloud, każdy XRechnung i każdy ZUGFeRD EN 16931 generowany przez moduł przechodzi przez reguły KoSIT, które obejmują tych sześć. Jeśli któraś zawiedzie, zostaje zapisana na fakturze, w Validation Errors, a faktura nie jest oznaczana jako Ready to send. W Odoo 17 opublikowana wersja nie waliduje: plik wychodzi z błędem i bez ostrzeżenia.

Co zrobić

  1. Sprawdź w raporcie, która reguła pada jako pierwsza: BR-S-08 wskazuje podstawy, BR-CO-14 rozbicie, BR-CO-15 sumę, a BR-CO-17 VAT jednej stawki.
  2. Sprawdź metodę zaokrąglania firmy i, jeśli wystawiasz e-faktury z wieloma pozycjami, omów zaokrąglanie na podatek z księgowym.
  3. BR-CO-16 pojawia się przy płatnościach częściowych lub zaokrągleniu gotówkowym: kwota zapłacona i kwota zaokrąglenia muszą być w pliku. Z naszym modułem generuj XRechnung przed zarejestrowaniem jakiejkolwiek płatności.
  4. Popraw i wygeneruj ponownie; nie edytuj XML ręcznie.

Czytaj dalej

Błędy BR-E-10, BR-AE-10, BR-IC-10 i BR-G-10: powód zwolnienia z VATBR-E-10, BR-AE-10, BR-IC-10, BR-G-10 i BR-O-10 wymagają powodu zwolnienia z VAT; BR-S-10 i BR-Z-10 go zabraniają. Jak Odoo 17, 18, 19 i 20 go ustawia i gdzie to zmienić.Błędy BR-09 i BR-11: adres sprzedawcy lub nabywcy bez kodu krajuBR-09 i BR-11 wymagają kodu kraju w adresie sprzedawcy i nabywcy; BR-08 i BR-10 dotyczą samego adresu. Komunikat Odoo 17, 18, 19 i 20 oraz co uzupełnić.Błędy BR-DE-1, BR-61 i BR-DE-23 w XRechnung: instrukcje płatnościBR-DE-1 wymaga w XRechnung instrukcji płatności (BG-16), a BR-61 konta przy płatności przelewem. Co zapisuje Odoo 17, 18, 19 i 20 i jak to naprawić.
Sprawdzone w kodzie źródłowym modułu (wersja 17.0 i 20.0) i w podlinkowanych źródłach

Źródła