Cosa restituisce KSeF
Nella specifica dell'API di KSeF 2.9.0, lo stato 450 di una fattura in sessione ha una descrizione fissa, «Błąd weryfikacji semantyki dokumentu faktury» (errore di verifica semantica del documento di fattura). Il problema specifico lo aggiunge KSeF nel campo details di quello stesso stato. Il Ministero delle Finanze polacco non pubblica l'elenco di quei messaggi, quindi non esiste una tabella del tipo «450 è sempre questo errore».
Esistono però casi che il Ministero verifica nei test della propria libreria ksef-client-csharp e in cui si aspetta proprio il codice 450:
- data di emissione
P_1impostata a domani secondo l'orario polacco, perché KSeF leggeP_1nel fuso orario di Varsavia e non accetta una data successiva al momento in cui riceve la fattura; DataWytworzeniaFaanteriore a 2025-09-01T00:00:00Z, il limite inferiore di quel campo nello schema FA(3) 1-0E.

Cosa vedi in Odoo
Le fatture arrivano a KSeF tramite il modulo l10n_pl_edi di Odoo, presente in Odoo 18, 19 e 20. Quando KSeF risponde, imposta «KSeF Status» su Rejected e scrive un messaggio nello storico della fattura:
| Versione | Messaggio in Odoo |
|---|---|
| Odoo 18 e 19 in polacco | «Status KSeF: Odrzucono (kod: 450). Błąd weryfikacji semantyki dokumentu faktury.» |
| Odoo 20 | «KSeF Status: Rejected (Code: 450). Invoice document semantics verification error.» (la traduzione polacca di questo modulo è vuota nella 20) |
| Odoo 17 | Senza l10n_pl_edi: la fattura la invia un altro programma ed è quest'ultimo a mostrare l'errore. |
Dalla risposta di KSeF, Odoo legge il codice, la descrizione e il numero KSeF. Non salva il campo details (aggiunge solo la descrizione di KSeF per il codice 500), quindi Odoo da solo non ti dice quale parte della fattura non è valida.
Dove trovare il motivo
Il testo di details arriva nella risposta di KSeF alla richiesta dello stato della fattura. Se invii da Odoo, ti serve qualcuno che lo legga dall'API o un controllo del file FA(3) prima dell'invio. Odoo 18, 19 e 20 includono una copia dello schema FA(3) dentro il modulo, ma fuori dai test nessuno la usa: il file va a KSeF senza essere validato contro lo schema.
Odoo controlla due cose. Non invia una fattura con data successiva a oggi nel fuso orario dell'utente («The move was skipped because it is future-dated»). E compila DataWytworzeniaFa con il momento in cui genera il file, in UTC, quindi il limite del 2025 non dovrebbe derivare da una fattura emessa in Odoo.
Come inviarla di nuovo
- Recupera il motivo da
detailsoppure controlla il file FA(3) con lo schema. - Correggi i dati in Odoo: data, cliente, righe.
- Riporta la fattura in bozza. Per una fattura respinta, Odoo cancella il suo stato, numero, riferimento e sessione di KSeF.
- Confermala e inviala di nuovo con l'opzione «by KSeF (e-Faktura)». Odoo invia solo le fatture senza stato KSeF, quindi senza il passo 3 non parte nulla.

Con il nostro modulo
Poland KSeF 2.0 Validator non invia fatture a KSeF. Con l'abbonamento a FlexigoTech Cloud, se premi «Validate FA(3) (FlexigoTech Cloud)» prima di inviare la fattura, il modulo valida il file FA(3) contro lo schema 1-0E e mostra ogni errore come una riga «[error] XSD (percorso)»: il punto del file, senza il testo del messaggio, fino a 100 errori. Il risultato non blocca l'invio di l10n_pl_edi: una fattura «Not valid» parte comunque se la invii. Non rileva ciò che KSeF controlla solo dal suo lato, come P_1 rispetto al momento della ricezione. Quando l10n_pl_edi invia la fattura, la validazione precedente passa a Expired e il modulo controlla il file effettivamente ricevuto da KSeF. In Odoo 17 valida il file FA(3) caricato sulla fattura.
Il codice 450 non arriva al nostro modulo: da l10n_pl_edi prende solo lo stato (Submitted, Accepted o Rejected) e il numero KSeF.
Continua a leggere
Verificato nel codice del modulo (versione 17.0 e 20.0) e nelle fonti collegate
Fonti
- 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
- Codice del modulo: FlexigoTech Cloud, validacion_efactura (motor_xsd.py y reglas.json)
- Codice del modulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_cloud.py
- Codice del modulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/account_move.py
- Codice del modulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 17.0 (2b2a93bb): __manifest__.py
- Codice del modulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/account_move_views.xml
