Siedem reguł, z tekstem Schematron EN 16931 (validation-1.3.17). Wszystkie są krytyczne:
| Reguła | Kategoria | Tekst |
|---|---|---|
| BR-E-10 | E, zwolniona | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Exempt from VAT" shall have a VAT exemption reason code (BT-121) or a VAT exemption reason text (BT-120). |
| BR-AE-10 | AE, odwrotne obciążenie | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language). |
| BR-IC-10 | K, wewnątrzwspólnotowa | A VAT breakdown (BG-23) with the VAT Category code (BT-118) "Intra-community supply" shall have a VAT exemption reason code (BT-121), meaning "Intra-community supply" or the VAT exemption reason text (BT-120) "Intra-community supply" (or the equivalent standard text in another language). |
| BR-G-10 | G, eksport | A VAT breakdown (BG-23) with the VAT Category code (BT-118) "Export outside the EU" shall have a VAT exemption reason code (BT-121), meaning "Export outside the EU" or the VAT exemption reason text (BT-120) "Export outside the EU" (or the equivalent standard text in another language). |
| BR-O-10 | O, poza zakresem | A VAT breakdown (BG-23) with VAT Category code (BT-118) " Not subject to VAT" shall have a VAT exemption reason code (BT-121), meaning " Not subject to VAT" or a VAT exemption reason text (BT-120) " Not subject to VAT" (or the equivalent standard text in another language). |
| BR-S-10 | S, podstawowa | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Standard rate" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120). |
| BR-Z-10 | Z, stawka zerowa | A VAT breakdown (BG-23) with VAT Category code (BT-118) "Zero rated" shall not have a VAT exemption reason code (BT-121) or VAT exemption reason text (BT-120). |
Powód może być podany jako kod (BT-121, z listy VATEX) albo jako tekst (BT-120). Dla E wystarczy jedno z nich; dla AE, K, G i O kod lub tekst musi oznaczać dokładnie to: „Reverse charge”, „Intra-community supply”… Pozostałe reguły każdej rodziny (BR-E-08, BR-AE-08 i kolejne) dotyczą kwot; ta strona dotyczy wyłącznie powodu.

Jak Odoo ustala kategorię
Tu wersje się rozchodzą:
- Odoo 17 i 18: domyślnie podatek nie ma pola kategorii, a Odoo ją wnioskuje: dla hiszpańskiego klienta z kodem pocztowym zaczynającym się od 35 lub 38 (Wyspy Kanaryjskie), L, a od 51 lub 52 (Ceuta i Melilla), M; E, jeśli podatek wynosi 0 %, a sprzedawca i klient są z tego samego kraju; AE przy belgijskim odwrotnym obciążeniu współwykonawcy lub w samofakturze z podatkiem odwrotnego obciążenia; przy numerze VAT sprzedawcy i podatku 0 % K, jeśli oboje są w EOG, a G, jeśli tylko jedno z nich; w pozostałych przypadkach S, jeśli podatek ma stawkę, i E, jeśli wynosi 0 %. Standardowy moduł account_edi_ubl_cii_tax_extension (Tax extension for UBL/CII), który nie instaluje się automatycznie, dodaje do podatku Tax Category Code i Tax Exemption Reason Code: gdy kategoria jest ustawiona, Odoo używa jej zamiast wnioskować.
- Odoo 19: każdy podatek ma Tax Category Code (AE, E, S, Z, G, O, K, L, M, B) oraz Tax Exemption Reason Code, z listą VATEX.
- Odoo 20: te same dwa pola oraz Tax Exemption Reason, tekst dowolny.
- We wszystkich czterech wersjach: jeśli kategoria E nie ma powodu, Odoo wpisuje tekst „Exempt from tax”, który spełnia BR-E-10.
Typowa pułapka w Odoo 17 i 18 bez tego modułu to podatek 0 % na usługę poza zakresem VAT, którego wnioskowanie nigdy nie oznaczy jako O, albo krajowa sprzedaż z odwrotnym obciążeniem: kategoria wychodzi inna, niż oczekuje Twój księgowy.
Z naszym modułem XRechnung i ZUGFeRD
Generator opublikowanego modułu zna tylko dwie kategorie, S i Z. W XRechnung UBL zapisuje S, gdy podatek ma procent, a Z, gdy wynosi 0 %. W XRechnung CII, czyli domyślnym formacie, każda linia wychodzi jako S, także przy podatku 0 %, a walidator KoSIT odrzuca ją błędem BR-S-05 (sprawdziliśmy to). Faktura z odwrotnym obciążeniem, wewnątrzwspólnotowa, eksportowa lub zwolniona nie wychodzi jako AE, K, G ani E. W Odoo 18, 19 i 20, przy subskrypcji FlexigoTech Cloud, moduł waliduje wynik regułami KoSIT i zostawia każdą nieudaną regułę w Validation Errors. Dla takich faktur dziś eksport samego Odoo zna kategorie. W Odoo 17 opublikowana wersja nie przechodzi walidacji.

Jak to naprawić
- Znajdź kategorię w zestawieniu VAT w XML (BT-118) i porównaj ją z rzeczywistą transakcją.
- W Odoo 19 i 20 otwórz podatek i ustaw jego Tax Category Code, a dla E, AE, K, G lub O także Tax Exemption Reason Code.
- W Odoo 17 i 18 zainstaluj account_edi_ubl_cii_tax_extension i ustaw w każdym podatku jego kategorię oraz, jeśli kategoria tego wymaga, powód. Bez tego modułu sprawdź kraj klienta, kod pocztowy, numer VAT i obszar podatkowy: z tych danych Odoo wnioskuje kategorię.
- Powód zwolnienia na linii ze stawką podstawową powoduje BR-S-10: usuń go z podatku.
- Wygeneruj plik ponownie.
Czytaj dalej
Sprawdzone w kodzie źródłowym modułu (wersja 17.0 i 20.0) i w podlinkowanych źródłach
Źródła
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- Kod modułu: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/cii_generator.py
- Kod modułu: flexigo_germany_xrechnung 20.0 (446f2f68): models/res_company.py
- github.com/odoo/odoo/blob/6f00fdadb875342de2d14a179f25431f93cd63c9/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/account_edi_ubl_
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/account_edi_ubl_
- Kod modułu: flexigo_germany_xrechnung 20.0 (446f2f68): lib/generators/ubl_generator.py
- Kod modułu: flexigo_germany_xrechnung 20.0 (446f2f68): models/xrechnung_cloud.py
- Kod modułu: flexigo_germany_xrechnung 17.0 (ad05de8f): __manifest__.py
- github.com/ConnectingEurope/eInvoicing-EN16931/releases/tag/validation-1.3.17
