Quando KSeF considera una fattura duplicata
KSeF cerca i duplicati tra tutte le fatture memorizzate nel sistema. Decidono tre campi:
- il NIP del venditore,
Podmiot1:NIP; - il tipo di fattura,
RodzajFaktury; - il numero di fattura,
P_2, che secondo lo schema FA(3) deve identificare la fattura senza ambiguità.
L'unicità dura 10 anni interi, a partire dalla fine dell'anno in cui la fattura è stata emessa. Conta sempre il NIP del venditore: se più filiali o unità emettono a nome di un'unica società, devono mettersi d'accordo sulla numerazione.

Cosa contiene la risposta e cosa conserva Odoo
Nella risposta di KSeF, lo stato 440 ha la descrizione «Duplikat faktury» (fattura duplicata) e due campi in extensions: originalKsefNumber, il numero KSeF della fattura già presente nel sistema, e originalSessionReferenceNumber, la sessione in cui è entrata. L'esempio della documentazione delle API riporta in details un messaggio del tipo «Duplikat faktury. Faktura o numerze KSeF: … została już prawidłowo przesłana do systemu w sesji: …».
In Odoo 18, 19 e 20, il modulo l10n_pl_edi imposta «KSeF Status» su Rejected e aggiunge alla cronologia «KSeF Status: Rejected (Code: 440). Duplicate invoice.» (in polacco nelle versioni 18 e 19: «Status KSeF: Odrzucono (Kod: 440). Powielona faktura.»). Odoo non conserva extensions, quindi il numero KSeF dell'originale non compare nella fattura. Come P_2, Odoo scrive il numero della fattura in Odoo.
Da dove nasce un duplicato con le fatture di Odoo
| Situazione | Cosa succede |
|---|---|
| La fattura è già arrivata a KSeF per un altro canale e poi è stata inviata da Odoo | L'originale è in KSeF; il nuovo invio riceve 440. |
| Lo stesso NIP emette da due database o società di Odoo con sequenze identiche | Due fatture diverse condividono tipo e numero. |
| Le filiali di un'unica società tengono numerazioni proprie che si sovrappongono | KSeF conta il NIP del venditore, non la filiale. |
Odoo invia solo fatture senza stato KSeF. Una fattura in Sent o Accepted non può essere inviata una seconda volta per distrazione dallo stesso Odoo.
Come risolverlo
- Individua l'originale: il numero KSeF in
originalKsefNumbero la fattura con quel numero in KSeF. - Se si tratta della stessa fattura, inviata prima per un altro canale, non reinviarla. Ogni nuovo invio con quel numero riceve 440.
- Se è un'altra fattura con lo stesso numero, il problema è la numerazione: concorda con il tuo commercialista serie separate per ogni database, società o filiale che condivide il NIP.
La fattura è in KSeF dopo un 440?
Sì. In KSeF c'è la fattura originale, quella di originalKsefNumber. È stato rifiutato solo il nuovo invio.
Per quanto tempo KSeF ricorda un numero di fattura?
Per 10 anni interi dalla fine dell'anno di emissione. Fino ad allora, lo stesso NIP, tipo e numero danno 440.

Con il nostro modulo
Poland KSeF 2.0 Validator non invia fatture, ma ha il pulsante «Mark accepted by KSeF» per una fattura caricata su KSeF al di fuori di Odoo, con il numero KSeF assegnato dal sistema. Se in seguito l10n_pl_edi invia anche quella fattura e KSeF la rifiuta, il modulo la lascia in Accepted e aggiunge: «KSeF rejected the new sending of this invoice by l10n_pl_edi, already accepted by KSeF with KSeF number …: it stays Accepted.». In tutti gli altri casi prende da l10n_pl_edi lo stato Rejected, senza il codice 440.
Continua a leggere
Verificato nel codice del modulo (versione 20.0) e nelle fonti collegate
Fonti
- Codice del modulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): i18n/pl.po
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/open-api.json
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/weryfikac
- github.com/CIRFMF/ksef-client-csharp/blob/a66cbc669814e6c2a615748a13a0a04a650ba04f/KSeF.Cl
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/schemy/FA
- 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/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
- 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 20.0 (ba7c60f1): views/account_move_views.xml
