Wann KSeF eine Rechnung als Duplikat behandelt
KSeF sucht nach Duplikaten in allen im System gespeicherten Rechnungen. Drei Felder entscheiden:
- die NIP des Verkäufers,
Podmiot1:NIP; - die Rechnungsart,
RodzajFaktury; - die Rechnungsnummer,
P_2, die laut FA(3)-Schema die Rechnung eindeutig identifizieren muss.
Die Eindeutigkeit gilt 10 volle Jahre, gerechnet ab dem Ende des Jahres, in dem die Rechnung ausgestellt wurde. Die NIP des Verkäufers zählt immer: Stellen mehrere Filialen oder Einheiten im Namen einer Firma Rechnungen aus, müssen sie ihre Nummerierung abstimmen.

Was die Antwort enthält und was Odoo speichert
In der KSeF-Antwort trägt der Status 440 die Beschreibung «Duplikat faktury» (doppelte Rechnung) und zwei Felder in extensions: originalKsefNumber, die KSeF-Nummer der bereits im System befindlichen Rechnung, und originalSessionReferenceNumber, die Sitzung, in der sie eingegangen ist. Das Beispiel der API-Dokumentation enthält in details eine Meldung wie «Duplikat faktury. Faktura o numerze KSeF: … została już prawidłowo przesłana do systemu w sesji: …».
In Odoo 18, 19 und 20 setzt das Modul l10n_pl_edi «KSeF Status» auf Rejected und ergänzt den Verlauf um «KSeF Status: Rejected (Code: 440). Duplicate invoice.» (in Polnisch auf 18 und 19: «Status KSeF: Odrzucono (Kod: 440). Powielona faktura.»). Odoo speichert extensions nicht, daher steht die KSeF-Nummer des Originals nicht auf der Rechnung. Als P_2 schreibt Odoo die Rechnungsnummer aus Odoo.
Woher ein Duplikat bei Odoo-Rechnungen kommt
| Situation | Was passiert |
|---|---|
| Die Rechnung ist über einen anderen Kanal bereits bei KSeF angekommen und wurde danach aus Odoo gesendet | Das Original liegt in KSeF; der neue Versand erhält 440. |
| Dieselbe NIP stellt aus zwei Odoo-Datenbanken oder Firmen mit identischen Nummernkreisen aus | Zwei verschiedene Rechnungen teilen Art und Nummer. |
| Filialen einer Firma führen eigene Nummernkreise, die sich überschneiden | KSeF zählt die NIP des Verkäufers, nicht die Filiale. |
Odoo sendet nur Rechnungen ohne KSeF-Status. Eine Rechnung im Status Sent oder Accepted lässt sich aus demselben Odoo nicht versehentlich ein zweites Mal senden.
So lösen Sie es
- Finden Sie das Original: die KSeF-Nummer in
originalKsefNumberoder die Rechnung mit dieser Nummer in KSeF. - Handelt es sich um dieselbe Rechnung, die zuvor über einen anderen Kanal gesendet wurde, senden Sie sie nicht erneut. Jeder neue Versand unter dieser Nummer erhält 440.
- Handelt es sich um eine andere Rechnung mit derselben Nummer, liegt das Problem in der Nummerierung: Vereinbaren Sie mit Ihrer Steuerberatung getrennte Nummernkreise für jede Datenbank, Firma oder Filiale mit derselben NIP.
Ist die Rechnung nach einem 440 in KSeF?
Ja. KSeF führt die Originalrechnung, die aus originalKsefNumber. Abgelehnt wurde nur der neue Versand.
Wie lange merkt sich KSeF eine Rechnungsnummer?
10 volle Jahre ab dem Ende des Ausstellungsjahres. Bis dahin ergeben dieselbe NIP, Art und Nummer den Code 440.

Mit unserem Modul
Poland KSeF 2.0 Validator versendet keine Rechnungen, besitzt aber die Schaltfläche «Mark accepted by KSeF» für eine außerhalb von Odoo in KSeF hochgeladene Rechnung, mit der KSeF-Nummer, die das System vergeben hat. Versendet l10n_pl_edi diese Rechnung später ebenfalls und lehnt KSeF sie ab, belässt das Modul sie auf Accepted und ergänzt: «KSeF rejected the new sending of this invoice by l10n_pl_edi, already accepted by KSeF with KSeF number …: it stays Accepted.». In allen anderen Fällen übernimmt es den Status Rejected aus l10n_pl_edi, ohne den Code 440.
Weiterlesen
Geprüft im Quellcode des Moduls (Version 20.0) und in den verlinkten Quellen
Quellen
- Quellcode des Moduls: 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
- Quellcode des Moduls: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/account_move.py
- Quellcode des Moduls: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/account_move_views.xml
