Quando o KSeF considera uma fatura duplicada
O KSeF procura duplicados em todas as faturas guardadas no sistema. Três campos decidem:
- o NIF do vendedor,
Podmiot1:NIP; - o tipo de fatura,
RodzajFaktury; - o número da fatura,
P_2, que segundo o esquema FA(3) tem de identificar a fatura sem ambiguidade.
A unicidade dura 10 anos completos, contados a partir do fim do ano em que a fatura foi emitida. Conta sempre o NIF do vendedor: se várias sucursais ou unidades emitirem em nome da mesma empresa, têm de acordar a numeração.

O que traz a resposta e o que guarda o Odoo
Na resposta do KSeF, o estado 440 tem a descrição «Duplikat faktury» (fatura duplicada) e dois campos em extensions: originalKsefNumber, o número KSeF da fatura que já está no sistema, e originalSessionReferenceNumber, a sessão em que entrou. O exemplo da documentação da API põe em details uma mensagem do tipo «Duplikat faktury. Faktura o numerze KSeF: … została już prawidłowo przesłana do systemu w sesji: …».
No Odoo 18, 19 e 20, o módulo l10n_pl_edi põe o «KSeF Status» em Rejected e acrescenta ao histórico «KSeF Status: Rejected (Code: 440). Duplicate invoice.» (em polaco na 18 e na 19: «Status KSeF: Odrzucono (Kod: 440). Powielona faktura.»). O Odoo não guarda extensions, por isso o número KSeF do original não aparece na fatura. Como P_2, o Odoo escreve o número da fatura no Odoo.
De onde surge um duplicado com faturas do Odoo
| Situação | O que acontece |
|---|---|
| A fatura já chegou ao KSeF por outro canal e depois foi enviada a partir do Odoo | O original está no KSeF; o novo envio recebe 440. |
| O mesmo NIF emite a partir de duas bases ou empresas do Odoo com sequências idênticas | Duas faturas diferentes partilham tipo e número. |
| As sucursais de uma empresa mantêm numerações próprias que se sobrepõem | O KSeF conta o NIF do vendedor, não a sucursal. |
O Odoo só envia faturas sem estado KSeF. Uma fatura em Sent ou Accepted não pode ser enviada uma segunda vez por descuido a partir do mesmo Odoo.
Como resolver
- Localize o original: o número KSeF de
originalKsefNumberou a fatura com esse número no KSeF. - Se for a mesma fatura, enviada antes por outro canal, não a volte a enviar. Cada novo envio com esse número recebe 440.
- Se for outra fatura com o mesmo número, o problema está na numeração: acorde com a sua contabilidade séries separadas para cada base, empresa ou sucursal que partilhe o NIF.
A fatura está no KSeF depois de um 440?
Sim. No KSeF está a fatura original, a de originalKsefNumber. Só foi rejeitado o novo envio.
Durante quanto tempo o KSeF recorda um número de fatura?
Durante 10 anos completos a partir do fim do ano de emissão. Até lá, o mesmo NIF, tipo e número dão 440.

Com o nosso módulo
O Poland KSeF 2.0 Validator não envia faturas, mas tem o botão «Mark accepted by KSeF» para uma fatura carregada no KSeF fora do Odoo, com o número KSeF atribuído pelo sistema. Se mais tarde o l10n_pl_edi também enviar essa fatura e o KSeF a rejeitar, o módulo mantém-na Accepted e acrescenta: «KSeF rejected the new sending of this invoice by l10n_pl_edi, already accepted by KSeF with KSeF number …: it stays Accepted.». Nos restantes casos, toma do l10n_pl_edi o estado Rejected, sem o código 440.
Continue a ler
Verificado no código do módulo (versão 20.0) e nas fontes indicadas
Fontes
- Código do módulo: 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
- Código do módulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/account_move.py
- Código do módulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/account_move_views.xml
