Co dokładnie zwraca KSeF
W specyfikacji API KSeF 2.9.0 status faktury w sesji 450 ma stały opis „Błąd weryfikacji semantyki dokumentu faktury”. To, co konkretnie się nie zgadza, KSeF dopisuje w polu details tego samego statusu. Ministerstwo Finansów nie publikuje listy tych komunikatów, więc nie ma tabeli w stylu „450 to zawsze ten sam błąd”.
Są za to przypadki, które MF sprawdza w testach swojej biblioteki ksef-client-csharp i w których oczekuje właśnie kodu 450:
- data wystawienia
P_1ustawiona na jutro według czasu polskiego, bo KSeF liczyP_1w strefie Warszawy i nie przyjmie daty późniejszej niż chwila przyjęcia faktury; DataWytworzeniaFawcześniejsza niż 2025-09-01T00:00:00Z, czyli dolna granica tego pola w schemacie FA(3) 1-0E.

Co widzisz w Odoo
Fakturę do KSeF wysyła moduł l10n_pl_edi z Odoo, który istnieje w Odoo 18, 19 i 20. Po odpowiedzi KSeF ustawia pole „KSeF Status” na Rejected i zapisuje komunikat w historii faktury:
| Wersja | Komunikat w Odoo |
|---|---|
| Odoo 18 i 19 po polsku | „Status KSeF: Odrzucono (kod: 450). Błąd weryfikacji semantyki dokumentu faktury.” |
| Odoo 20 | „KSeF Status: Rejected (Code: 450). Invoice document semantics verification error.” (polskie tłumaczenie tego modułu jest w 20 puste) |
| Odoo 17 | Nie ma l10n_pl_edi: fakturę wysyła inny program i to on pokazuje błąd. |
Z odpowiedzi KSeF Odoo czyta kod, opis i numer KSeF. Pola details nie zapisuje (opis z KSeF dokleja tylko przy kodzie 500), więc sam Odoo nie powie Ci, który element faktury się nie zgadza.
Skąd wziąć przyczynę
Treść details jest w odpowiedzi KSeF na zapytanie o status faktury w sesji. Przy wysyłce z Odoo potrzebujesz kogoś, kto odczyta ją z API, albo sprawdzenia pliku FA(3) przed wysyłką. Odoo 18, 19 i 20 ma w module kopię schematu FA(3), ale poza testami nic jej nie używa: plik idzie do KSeF bez walidacji ze schematem.
Dwóch rzeczy Odoo jednak pilnuje. Faktury z datą późniejszą niż dzisiejsza w strefie użytkownika nie wyśle w ogóle („The move was skipped because it is future-dated”, w 18 i 19 po polsku „Ten zapis został pominięty ponieważ ma przyszłą datę”). A DataWytworzeniaFa wypełnia chwilą wygenerowania pliku w UTC, więc granica z 2025 roku nie powinna wyjść z faktury wystawionej w Odoo.
Jak wysłać fakturę ponownie
- Ustal przyczynę z
detailsalbo sprawdź plik FA(3) ze schematem. - Popraw dane w Odoo: datę, kontrahenta, pozycje.
- Przywróć fakturę do wersji roboczej. Przy fakturze odrzuconej Odoo czyści jej stan, numer, referencję i sesję KSeF.
- Zatwierdź ją i wyślij jeszcze raz opcją „by KSeF (e-Faktura)”. Odoo wysyła tylko faktury bez stanu KSeF, więc bez kroku 3 ponowna wysyłka nie ruszy.

Z naszym modułem
Poland KSeF 2.0 Validator nie wysyła faktur do KSeF. Z subskrypcją FlexigoTech Cloud, jeśli przed wysyłką klikniesz „Validate FA(3) (FlexigoTech Cloud)”, waliduje plik FA(3) ze schematem 1-0E i pokazuje każdy błąd jako wiersz „[error] XSD (ścieżka)”: z miejscem w pliku, bez treści komunikatu, maksymalnie 100 błędów. Wynik nie blokuje wysyłki przez l10n_pl_edi: faktura „Not valid” wyjdzie, jeśli ją wyślesz. Nie wykryje przyczyn, które KSeF sprawdza dopiero u siebie, jak data P_1 względem chwili przyjęcia. Gdy l10n_pl_edi wyśle fakturę, wcześniejsza walidacja dostaje stan Expired, a moduł sprawdza plik, który faktycznie dostał KSeF. W Odoo 17 waliduje plik FA(3) wgrany do faktury.
Kodu 450 nasz moduł nie przejmuje: od l10n_pl_edi bierze tylko stan (Submitted, Accepted albo Rejected) i numer KSeF.
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/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/open-api.json
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/l10n_pl_edi/i18n
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/i18n
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/CIRFMF/ksef-client-csharp/blob/a66cbc669814e6c2a615748a13a0a04a650ba04f/KSeF.Cl
- github.com/CIRFMF/ksef-client-csharp/blob/a66cbc669814e6c2a615748a13a0a04a650ba04f/KSeF.Cl
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/schemy/FA
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/schemy/FA
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/weryfikac
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/data
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- Kod modułu: FlexigoTech Cloud, validacion_efactura (motor_xsd.py y reglas.json)
- Kod modułu: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_cloud.py
- Kod modułu: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/account_move.py
- Kod modułu: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 17.0 (2b2a93bb): __manifest__.py
- Kod modułu: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/account_move_views.xml
