Quand KSeF considère une facture comme un doublon
KSeF recherche les doublons parmi toutes les factures enregistrées dans le système. Trois champs sont déterminants :
- le NIP du vendeur,
Podmiot1:NIP; - le type de facture,
RodzajFaktury; - le numéro de facture,
P_2, qui, selon le schéma FA(3), doit identifier la facture sans ambiguïté.
L'unicité vaut pendant 10 années complètes, comptées à partir de la fin de l'année d'émission de la facture. Le NIP du vendeur compte toujours : lorsque plusieurs succursales ou unités émettent des factures au nom d'une même société, elles doivent s'accorder sur leur numérotation.

Ce que contient la réponse et ce qu'Odoo conserve
Dans la réponse de KSeF, le statut 440 porte la description « Duplikat faktury » (facture en double) et deux champs dans extensions : originalKsefNumber, le numéro KSeF de la facture déjà présente dans le système, et originalSessionReferenceNumber, la session par laquelle elle est entrée. L'exemple de la documentation de l'API place dans details un message du type « Duplikat faktury. Faktura o numerze KSeF: … została już prawidłowo przesłana do systemu w sesji: … ».
Dans Odoo 18, 19 et 20, le module l10n_pl_edi passe « KSeF Status » à Rejected et ajoute à l'historique « KSeF Status: Rejected (Code: 440). Duplicate invoice. » (en polonais sur les versions 18 et 19 : « Status KSeF: Odrzucono (Kod: 440). Powielona faktura. »). Odoo ne conserve pas extensions, le numéro KSeF de l'original n'apparaît donc pas sur la facture. Dans P_2, Odoo écrit le numéro de la facture tel qu'il figure dans Odoo.
D'où vient un doublon avec les factures Odoo
| Situation | Ce qui se passe |
|---|---|
| La facture est déjà arrivée dans KSeF par un autre canal, puis elle a été envoyée depuis Odoo | L'original est dans KSeF ; le nouvel envoi reçoit 440. |
| Le même NIP émet depuis deux bases ou sociétés Odoo aux séquences identiques | Deux factures différentes partagent le type et le numéro. |
| Les succursales d'une même société tiennent des numérotations propres qui se chevauchent | KSeF compte le NIP du vendeur, pas la succursale. |
Odoo n'envoie que les factures sans statut KSeF. Une facture en Sent ou Accepted ne peut pas être renvoyée par mégarde depuis le même Odoo.
Comment corriger
- Localisez l'original : le numéro KSeF de
originalKsefNumber, ou la facture portant ce numéro dans KSeF. - S'il s'agit de la même facture, envoyée auparavant par un autre canal, ne la renvoyez pas. Chaque nouvel envoi sous ce numéro reçoit 440.
- S'il s'agit d'une autre facture portant le même numéro, le problème vient de la numérotation : convenez avec votre cabinet comptable de séries séparées pour chaque base, société ou succursale partageant le même NIP.
La facture est-elle dans KSeF après un 440 ?
Oui. KSeF conserve la facture originale, celle de originalKsefNumber. Seul le nouvel envoi a été rejeté.
Combien de temps KSeF retient-il un numéro de facture ?
Pendant 10 années complètes à partir de la fin de l'année d'émission. Jusque-là, le même NIP, le même type et le même numéro donnent 440.

Avec notre module
Poland KSeF 2.0 Validator n'envoie pas de factures, mais il dispose du bouton « Mark accepted by KSeF » pour une facture déposée dans KSeF en dehors d'Odoo, avec le numéro KSeF attribué par le système. Si l10n_pl_edi envoie ensuite également cette facture et que KSeF la rejette, le module la laisse en Accepted et ajoute : « KSeF rejected the new sending of this invoice by l10n_pl_edi, already accepted by KSeF with KSeF number …: it stays Accepted. ». Dans tous les autres cas, il reprend le statut Rejected de l10n_pl_edi, sans le code 440.
À lire aussi
Vérifié dans le code du module (version 20.0) et dans les sources citées
Sources
- Code du module : 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
- Code du module : flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/account_move.py
- Code du module : flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/account_move_views.xml
