Blog— Anton Ignashev

KSeF in enova365, Optima and Subiekt GT: seven months in

KSeF in enova365, Optima and Subiekt GT: seven months in

Why This Post Is Dated September and Not January

Every comparison of KSeF support across Polish ERPs was written before the mandate started. Same question in all of them — will your system be ready? — and all of them went stale in April, when the obligation reached everyone below the 200 million złoty threshold. Large taxpayers went first, on 1 February. Everyone else on 1 April.

The useful question now is a different one. Seven months of real invoices have run through these systems. What broke — and does the choice of ERP explain any of it?

Barely, and not where people expect. I write here mostly about enova365, Optima and Subiekt GT as integration targets, and I recently put their APIs side by side. This is the KSeF row of that table, expanded. The honest version is shorter, and stranger, than any vendor comparison would allow.

All Three Send. Close That Row.

enova365 shipped 2.0 API support well before the deadline and includes it in the system. Comarch has had a KSeF module inside Optima since the 2023/2024 line, so anyone on a supported version already has it. InsERT pushed the KSeF work through the Subiekt GT 1.89 wave — the version your Sfera licence wants activated anyway.

Three vendors, three architectures, one identical outcome: an invoice leaves the system, the national register accepts it, a KSeF number comes back. In seven months I have not seen a single project where sending was the thing that failed.

Which has a practical consequence. If a vendor's KSeF pitch is still about sending — about compliance, about readiness — they are quoting you for a problem that arrived with your licence. Ask them about receiving instead, and watch what happens.

The Half That Was Never Scoped

Here is the change nobody costed properly. Before the mandate, a purchase invoice arrived because a supplier chose to send it to you: an email, a PDF, sometimes paper. The arrival was somebody's decision — and if it never arrived, the supplier eventually chased it.

Now the structured invoice in KSeF is the invoice. The PDF in your inbox is a courtesy copy of a document you already legally received. Nobody has to send you anything.

So a supplier who stopped emailing — and why wouldn't they, they issued it into the national system — is a supplier whose invoices quietly stop appearing in your books. Nothing errors. Nothing is missing, in the sense a system can detect. From your ERP's point of view, that supplier just went quiet.

This is the same failure shape I keep running into elsewhere: an absent field is not an empty field, and systems report absence as calm. A document you never pulled looks exactly like a document that doesn't exist.

The measurement, and it takes one hour. Take one closed month. Pull your KSeF inbound list for it — every structured invoice issued to your NIP in that period. Count it. Now count the purchase invoices in your register for the same month. Two numbers.

They will not match. The direction tells you what you are dealing with. More in KSeF than in the books is the expensive one: those are deductions you have not taken and documents you do not know you hold. I have seen that gap run into double-digit percentages at companies that consider their accounting tidy, and the cause is always the same — the process still starts with an email.

All three of these ERPs can pull the inbound list. None of them will tell you that you never looked.

The Three Quiet States

Sending works. Not sending is where the risk moved — and all three systems handle it the same unhelpful way: the failure is an absence.

One: issued, never sent. The document sits in your books with a number from the series and no KSeF number. Not rejected — nobody ever attempted it. The send died on a credential, a queue, a service that stopped, a person who was going to get to it later. Your ERP holds a document that is, as far as the tax authority knows, not an invoice. No error shows, because no operation failed. There was no operation.

Two: sent, rejected, unread. A submission came back refused — a validation problem, a schema issue, a permission gone stale. Somewhere there is a message saying so. Rejections are rare enough that nobody built a habit of checking, and rare things with no habit attached turn up in an audit rather than in a report.

Three: offline24, clock running. An invoice issued in offline mode has to reach KSeF within 24 hours. That part is new: it is the only deadline in Polish accounting measured in hours. Everything else in the calendar runs in days or months — the 15th, the 20th, the 25th — and a team built around a monthly rhythm has no reflex for a clock that expires overnight. Offline24 also puts two dates on one document, the offline issue date and the date KSeF accepted it, and for period assignment they are not interchangeable. Check which one your system stores, and which one your reports read, before you lean on either.

None of the three raises an alarm for any of this. Not carelessness on the vendors' part — an ERP alerts on operations that fail, and all three of these are operations that never ran.

What an Agent Can Actually Read

Here the API comparison starts to matter again, and here the three do diverge — not in KSeF capability, but in how cheaply something outside the ERP can see the state.

enova365 exposes the invoice record, its KSeF number and its submission state through the WebAPI, which makes a nightly reconciliation a small job. Optima's answer depends on your version and your module licences, which is the recurring theme with Optima: the capability usually exists, the question is whether your particular installation has the endpoint. Subiekt GT keeps the pattern it keeps everywhere — the data is reachable through Sfera on the Windows host, at the cost of a small service that owns a COM session and needs babysitting.

Different effort, same reachable facts. In all three cases you can answer, from outside, the only three questions that matter: which documents have no KSeF number, which submissions came back refused, and which offline invoices are still inside their day.

The Audit, and the First Thing Worth Building

One afternoon, on your own data, no vendor involved:

  1. Inbound coverage. KSeF inbound count against purchase register count, one closed month. The gap is your number.
  2. Unsent and quiet. Sales documents in the books with no KSeF number and no recorded failure, listed with age in days. The oldest one tells you how long a document can sit unnoticed in your process.
  3. Rejections. Every refused submission from the last six months, and for each one, how many days passed before a person acted. If you cannot answer, that is the answer.
  4. Custody. Who generated your KSeF certificate, and when does it expire? It is valid for at most two years from issue, which for most companies means a date somewhere in 2028 sitting in nobody's calendar — and with a type-2 certificate, expiry means you cannot issue offline at all any more. The 2028 part is not urgent. The part where one named person holds it and nobody else can get to it is urgent today, and it is the same access question that predicts how every integration project will go.

Then build the boring thing. A read-only nightly job that emails three counts to one person. No write access, no approvals, no risk — and it makes visible a class of problem that is currently invisible in all three systems. If the counts come back at zero every morning for a month, you have bought certainty for almost nothing. That is a good outcome too, and the cheapest one on offer.

Running enova365, Optima or Subiekt GT and not sure what KSeF is quietly not telling you? Get in touch. This read-only reconciliation is the first thing I build on all three — it costs little, argues with nothing, and it is the only honest way to find out whether there is a bigger project here at all.

Check a Polish VAT counterparty in seconds, free

KsięgoAI checks a NIP against the VAT white list and VIES, scores the risk and saves proof of due diligence. Works in Telegram and Claude.

Try KsięgoAI→

Let’s talk about your project

Free 30-minute consultation. We’ll figure out if and how I can help.

Book a Free 30-Minute Call

Select a date

November 2026
Mon
Tue
Wed
Thu
Fri
Sat
Sun
← Back to Blog

Related Posts

What Symfonia costs in 2026: the price list for Finanse i Księgowość, the cloud, eBiuro and accounting-office bundles
Blog

What Symfonia costs in 2026: the price list for Finanse i Księgowość, the cloud, eBiuro and accounting-office bundles

Symfonia Finanse i Księgowość costs 1 620 to 3 550 zł net a year in 2026 and is sold only as a subscription. The cloud ERP is 490 zł per user per month, eBiuro for accounting offices starts at 409 zł a year, and the office bundles cost 1 890, 3 696 or 11 694 zł. The full list from symfonia.pl, KSeF Plus limits from 2027 and a three-year comparison.

Read more→
PIT-11, PIT-4R, PIT-8AR and IFT-1R for 2026: the 1 February and 1 March 2027 deadlines and the three totals that must agree
Blog

PIT-11, PIT-4R, PIT-8AR and IFT-1R for 2026: the 1 February and 1 March 2027 deadlines and the three totals that must agree

The payer's annual returns for 2026 go to the tax office by Monday 1 February 2027, because 31 January is a Sunday. PIT-11 to employees and IFT-1R follow by 1 March. Before anything goes out, three totals have to agree: PIT-11s against PIT-4R, PIT-4R against the bank statement, and flat-rate tax against PIT-8AR. Correct a PIT-11 after mid-February and it lands on an employee whose Twój e-PIT is already prefilled.

Read more→
KSeF API 2.0 error codes: 440, 450, 21405 and the rest — what they mean and how to fix them in enova365, Optima and Subiekt
Blog

KSeF API 2.0 error codes: 440, 450, 21405 and the rest — what they mean and how to fix them in enova365, Optima and Subiekt

KSeF reports errors on three levels: an HTTP exception with a 21xxx code, a session status and an invoice status. The same number means different things on each, so 440 is a duplicate invoice in one place and a cancelled session in another. The code table from the Ministry's own spec, the fix for each, and the one error you must never fix by renumbering the invoice.

Read more→