Treść reguły, tak jak pojawia się w raporcie walidatora (KoSIT zapisuje ją po niemiecku), brzmi: «Das Element "Buyer reference" (BT-10) muss übermittelt werden.» Po polsku: element Buyer reference musi zostać przekazany. W Schematronie XRechnung 3.0.2 (wydanie KoSIT v2.6.0) jej waga to fatal: to nie ostrzeżenie, faktura nie przechodzi.
Co sprawdza, a czego nie
Reguła sprawdza tylko, czy pole istnieje i nie jest puste. Nie weryfikuje, czy wartość ma sens: spełnia ją każdy tekst. W UBL jest to element cbc:BuyerReference w nagłówku dokumentu.
Peppol BIS, format używany w Belgii czy Holandii, jest łagodniejszy: wystarczy referencja nabywcy albo numer zamówienia, jak mówi jego reguła PEPPOL-EN16931-R003: «A buyer reference or purchase order reference MUST be provided.» Dlatego faktura, która bez problemu przechodzi przez Peppol, może trafić na BR-DE-15, gdy przerobisz ją na XRechnung dla niemieckiego klienta.

Skąd Odoo bierze BT-10
Eksport XRechnung dostarczany z Odoo (bez modułów zewnętrznych) wypełnia pole tak:
| Wersja | Wartość BT-10 | Jeśli brak |
|---|---|---|
| Odoo 17 | Pole Referencja firmy klienta. Jeśli jej adres Peppol (EAS) to 0204, jej Peppol Endpoint. | Wpisuje „N/A”. |
| Odoo 18 i 19 | Pole Referencja kontaktu lub, jeśli jest puste, firmy. Przy EAS 0204 Peppol Endpoint. | Wpisuje „N/A”. |
| Odoo 20 | Tak samo, ale schemat i identyfikator nazywają się Routing ID i Routing Endpoint. Przy Routing ID 0204 Routing Endpoint. | Wpisuje „N/A”. |
Przy XRechnung z Odoo BR-DE-15 w ogóle nie zadziała, bo pole nigdy nie jest puste. Ale „N/A” spełnia tylko literę reguły. To nie jest referencja, której oczekuje Twój klient, a jeśli fakturujesz jednostkę publiczną, to nie jest jej Leitweg-ID. Zanim wyślesz, otwórz XML lub podgląd i sprawdź, co zawiera BT-10.
Gdy klientem jest jednostka publiczna
0204 to schemat Leitweg-ID na liście schematów adresów elektronicznych. Jeśli w karcie jednostki ustawisz ten schemat i jej Leitweg-ID jako identyfikator, Odoo skopiuje go do BT-10, więc nie będziesz go wpisywać na każdej fakturze. Dla prywatnej firmy zwykle jest to referencja, o którą poprosi, często numer jej zamówienia lub numer dostawcy: wpisuje się ją w polu Referencja jej karty.
Z naszym modułem XRechnung i ZUGFeRD
Moduł dodaje w karcie klienta własną zakładkę E-Invoicing z dwoma polami na tę daną: Leitweg-ID (BT-10), używane, gdy klient jest oznaczony jako jednostka publiczna (B2G Partner), oraz Buyer Reference (BT-10) dla pozostałych. Jeśli oznaczysz klienta jako jednostkę publiczną, a Leitweg-ID jest pusty, moduł nie wygeneruje faktury: zatrzyma się z komunikatem „B2G partner requires a Leitweg-ID (BT-10).”. Jeśli nie jest, a Buyer Reference jest pusta, XML wyjdzie bez BuyerReference, bez wypełniaczy typu „N/A”, i wtedy pojawia się BR-DE-15.

W Odoo 18, 19 i 20 widzisz to przed wysłaniem czegokolwiek: z subskrypcją FlexigoTech Cloud każda wygenerowana XRechnung jest walidowana regułami KoSIT, a błędy zostają na fakturze, w Validation Errors, po jednej linii na regułę. Faktura z BR-DE-15 nie dostaje statusu Ready to send. Wersja opublikowana dla Odoo 17 generuje XRechnung, ale jej nie waliduje.
Jak to naprawić
- Jeśli klientem jest niemiecka jednostka publiczna, poproś o jej Leitweg-ID i wpisz go w karcie kontaktu: w polu Leitweg-ID w zakładce E-Invoicing przy naszym module albo jako adres elektroniczny ze schematem 0204 w Odoo.
- Jeśli to firma, zapytaj, jakiej referencji sobie życzy, i zapisz ją w karcie kontaktu (Buyer Reference przy module, Referencja w Odoo).
- Wygeneruj XRechnung ponownie: ta, która już poszła, się nie zmieni, a jeśli została odrzucona, wysyłasz poprawioną.
- Sprawdź BT-10 w wyniku przed wysłaniem.
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
- Kod modułu: flexigo_germany_xrechnung 20.0 (446f2f68): models/account_move.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/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/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/6f00fdadb875342de2d14a179f25431f93cd63c9/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/itplr-kosit/xrechnung-schematron/releases/tag/v2.6.0
- docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R003/
