Blog— Anton Ignashev

Sent is not filed: the missing-UPO check an accounting office should run after every deadline

Sent is not filed: the missing-UPO check an accounting office should run after every deadline

The Question That Makes a Room Go Quiet

Ask an accounting office how many of last month's filings have a UPO. Almost everyone says all of them. Then ask them to show you. It goes quiet.

They're not wrong, as a rule. Usually they're right, or near enough. The trouble is that nobody in the room can prove it within the hour, because the office tracks something else: whether a file was sent. The software shows wysłano, the operator ticks the client off, and the month moves on.

Yesterday's post on Optima's multi-company module went through the five declaration statuses that module keeps per client and month: brak → w buforze → zatwierdzona → wysłano → odebrano UPO. Four of them are the installation noting what it intended to do. Only one is evidence that came back from outside. This post is about the gap between the last two. It's the cheapest control an office can build, and almost nobody has it.

What the UPO Actually Is

Send a JPK_V7 or an e-declaration to the Ministry of Finance gateway and you don't get an answer. You get a reference number. Everything after that is a status attached to that number, and the codes are worth knowing by heart:

  • 100 / 120 — the upload session has started, or it's finished and the document is being verified.
  • 301, 302, 303 — still processing: formal verification, certificate checks, signature verification.
  • 200 — processed correctly, UPO ready to download.
  • 4xx — rejected. 401 is the classic: the file doesn't match its XSD schema. The rest of the 400s cover signatures, certificates and malformed packages.

Only 200 means filed. A 4xx file was never filed, whatever your screen says.

The law reads the same way. The Tax Ordinance (art. 12 §6) treats an electronic deadline as met when the sender holds proof of receipt. So without the UPO you don't have a late filing — you have an unproven one. During an inspection, the two feel much the same.

ZUS submissions from Płatnik work on the same pattern, with their own confirmation and their own states. Everything below applies to them unchanged.

Three Ways a File Is Sent and Not Filed

In practice the gap comes from three places, and each needs different handling.

1. A rejection nobody read. The file went. The sending software recorded wysłano. An hour later the gateway came back with a 401, and that answer landed in a status window nobody opens once the client's been ticked off. This is the expensive one. The declaration doesn't exist, the deadline passes, and the office finds out from a letter.

2. A file stuck in processing at the peak. Around the 25th the gateway slows down and statuses sit in 301 or 302 for hours. The operator closes the window, meaning to check later, then works through thirty other clients. Most of these files turn into 200 on their own. Some don't. And until somebody queries the reference number again, the ones that didn't look exactly like the ones that did.

3. A UPO that arrived and was never put away. Downloaded into some folder, or left inside the sending software, not attached to the client and month it belongs to. Legally harmless — the document was received. But in any report it looks identical to cases 1 and 2, so it inflates the gap and teaches people to ignore it.

All three have a nasty variant: the reference number itself goes missing. You can only query the status with that number, so getting it back means digging through the sending software's logs or ringing the helpdesk. Store the reference number as a proper field, next to the client and the month. That one change is what makes everything else in this post possible.

KSeF Is a Different Question

It's tempting to fold KSeF invoices into the same check. Don't — you'd be checking the wrong thing.

Under the VAT Act, a structured invoice is issued on the day it's sent to KSeF and received on the day KSeF assigns it a number. The Ministry has also said there's no obligation to download and archive the KSeF UPO, which only becomes available once the session is closed anyway. So the KSeF UPO isn't the evidence that matters. The KSeF number is.

Which makes the KSeF version of this control: invoices with a session reference and no KSeF number. For the buyer, that invoice doesn't exist. It won't appear in their automated KSeF download, and the first sign of trouble is a phone call about an unpaid document the customer says they never received. Same shape as the JPK gap. Different field.

The Check Itself

One table. One row per submission: client, period, form, reference number, time sent, last known status code, UPO yes or no. For an office with forty clients, that's around a hundred rows a month once you count VAT, ZUS and income tax advances.

Then one number: rows sent without status 200. Three working days after the 25th, it should be zero. If it isn't, every remaining row is a real question for a real person.

There's no noise floor here, and that's what sets it apart from almost every other dashboard an office can build. The readiness board from yesterday's post needs an applicability map before it stops lying. The receivables list in the enova365 receivables post needs a filter for false overdues. This one needs nothing. Every row is either fine or a problem.

In the offices where I've run this count, the first result was rarely zero. Usually a handful of rows — mostly case 3, now and then case 1. Nobody knew. Nobody had counted.

What an Agent Does Here and What It Must Not

As a first job for an agent in an accounting office, this is close to ideal. It's read-only, and it runs on data the office already has.

The agent can:

  • re-query every reference number still in 30x after 24 hours;
  • attach each UPO to the right client and period as soon as it arrives;
  • turn a 4xx code into a sentence someone can act on (schema mismatch in section C, probably an old form version);
  • pass anything still unresolved after 48 hours to whoever is responsible for that client.

What it must not do is resend. A corrected file sent to the tax office is a submission on the client's behalf — the step I put on the far side of the line in the post on who signs. The agent prepares the case in a minute: what was sent, what came back, what's probably wrong, how much time is left. A person decides. If the rejected file is a JPK_V7, that decision often involves a correction too, and corrections are rarely a data problem.

Why Start Here

Most offices want to start automating with document posting, because that's where the hours go. I get it. But posting needs mappings, exceptions and a month of tuning before anyone trusts it. The UPO gap needs one table, one week, and no decisions about what's correct. The tax authority has already made them.

It also gives you a metric that actually means something: the share of client-months with a UPO by the 27th. That's the distribution idea from the month-end close post, applied to the thing the office is really paid to deliver. To see where this check sits inside a full agent for an office, read the walkthrough of how such an agent works.

Do you know how many of last month's filings in your office have a UPO? Get in touch. One export from your sending software is usually enough to answer that, and the answer tells us whether there's a 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 Subiekt nexo and Subiekt GT cost in 2026: licence prices, the Abonament, and the 30 days that raise the renewal by half
Blog

What Subiekt nexo and Subiekt GT cost in 2026: licence prices, the Abonament, and the 30 days that raise the renewal by half

Subiekt nexo for 3 workstations is 1 275 zł net, Subiekt GT 1 045 zł, nexo PRO 2 575 zł. Those are perpetual licences, and then there's the yearly Abonament: 349 zł for nexo if you renew within 30 days of expiry, 539 zł if later. Plus Sfera (the API), the accounting-office client licences, and a comparison with Optima and enova365.

Read more→
What Comarch ERP Optima costs in 2026: the subscription list, Basic vs Pro, and three costs it leaves out
Blog

What Comarch ERP Optima costs in 2026: the subscription list, Basic vs Pro, and three costs it leaves out

Optima's price list is public: Podstawowy 59 zł a month, Logistyka Basic 75 zł, Księga Handlowa 175 zł. The catch is the word Pro: it's a top-up on Basic, not a separate tier, so full accounting in Finanse costs 250 zł, not 200. Plus the Podstawowy limits, how HR counts employees for accounting offices, and two worked examples.

Read more→
December pay paid in January 2027: a 2026 or a 2027 cost? The 8 January payday and ZUS by 15 or 22 February
Blog

December pay paid in January 2027: a 2026 or a 2027 cost? The 8 January payday and ZUS by 15 or 22 February

December payroll paid in January is a 2026 cost, but only if the pay leaves on the date in the client's pay rules and the ZUS contributions reach ZUS on time. 10 January 2027 is a Sunday, so the statutory deadline ends on Friday 8 January. The same pay lands in the employee's 2027 PIT-11. Here's what an office checks in December and in February.

Read more→