X and Z Readings
The interim X reading, the Z reading that seals a shift, the separate business-day Z that seals a whole day, and the counters behind them.
14 min read · Updated 10 Sep 2026
On this page
- Three readings, two of them called Z
- Where to find them
- The X reading
- The Z reading for a shift
- The daily Z reading
- When a business day starts and ends
- The counters
- Once a business day is sealed
- Taking a reading with no internet
- Three things that look like mistakes and are not
- Limits to be honest about
A reading is Kassly's summary of what a till has sold. There are three of them, and the reason people get lost is that two are called Z.
This page is the fiscal side of a reading — what each one is for, what prints on it, and what a sealed reading locks. The practical business of counting the drawer and closing up is in Closing a shift, and how to chase a variance is in Cash over and short.
Needs the Cash Drawer & Expenses add-on (₱300 per branch each month), or any bundle that includes it. See Plans and add-ons.
Three readings, two of them called Z
| Reading | Covers | Produced | Numbered from |
|---|---|---|---|
| X reading | One shift, up to now | On demand, as often as you like | Not numbered |
| Z reading | One shift, at its close | Once, when the shift is closed | The terminal's Z counter |
| Daily Z reading | One terminal's whole business day, across every shift on it | Automatically, once the business day has ended | The terminal's daily-Z counter, a separate sequence |
The per-shift Z and the daily Z are separate documents with separate counters. Three cashiers handing over one terminal produce three Z readings — say numbers 41, 42 and 43 — and one daily Z, numbered 12. Neither number tells you anything about the other, and the daily Z has no shift and no cashier on it. When somebody asks for "the Z reading for yesterday", the daily one is almost always what they mean.
The per-shift Z exists for cashier accountability: it names a person, a drawer and a count. The daily Z exists as the day of record for a machine: it is the roll-up the BIR describes, and it is the one that seals the day against later changes.
Where to find them
| Reading | Where |
|---|---|
| X reading | Back office: Sales → Shifts, open a shift, then X-Reading. On the phone it is the summary shown in the End Shift review step |
| Z reading | Back office: Sales → Shifts, open a closed shift, then Z-Reading. For a whole period at once, Reports → Z-Reading / End-of-Day |
| Daily Z reading | Nowhere on screen. It is sealed and kept, but there is no page for it — ask support for a copy |
Both shift readings have a Download PDF button. The PDF is laid out for an
80mm thermal roll, so it prints on a receipt printer as well as on paper, and
comes down as x-reading-<shift>.pdf or z-reading-<shift>.pdf.
| Who can open it | |
|---|---|
| X reading | Owner, manager with access to that branch, or the shift's own cashier |
| Z reading | Owner and manager only — never the cashier |
The X reading
An X reading is a look, not an act. It changes nothing, it is not numbered, and taking ten of them during a shift leaves no trace. Use it to check the day against the till at lunchtime, or to hand a supervisor a mid-shift figure.
The printed X carries:
| Block | Contents |
|---|---|
| Header | X-READING REPORT and (INTERIM), then branch, cashier, when the shift opened and when the reading was taken |
| Sales Summary | Transaction Count, Void Count, Voided Sales, Return Count, then Gross Sales, Discounts, Returns, Service Charge (only when there was one), and NET SALES |
| Serial Range | Beginning and ending receipt number for the shift so far |
| Accumulated Grand Total | Beginning and ending lifetime accumulator |
| Payment Breakdown | One line per tender actually used |
| VAT Summary | VATable Sales, VAT Amount (12%), VAT-Exempt Sales, Zero-Rated Sales |
| Expenses | Only when you have turned that setting on — see Closing a shift |
| Footer | *** INTERNAL X-READING — NOT A BIR DOCUMENT *** and For shift reconciliation only |
Two things about it surprise people:
- The X reading says nothing about the drawer. No Expected in Drawer, no cash reconciliation, no over or short. Those lines only exist once a drawer has been counted, which happens at close. To see the expected figure mid-shift open the shift record itself in the back office.
- The reading on screen is shorter than the PDF. The panel in Sales → Shifts shows sales, payments, VAT and expenses. The serial range and the accumulated grand total are on the printout only.
The Z reading for a shift
Closing a shift seals its Z reading. Sealing means the shift gets a Z number from the terminal's counter and the reading is stored, once, under that shift. It is not reissued, and there is never a second Z reading for the same shift.
The printed Z carries the same sales, payment and VAT figures the X does, plus:
| Block | Contents |
|---|---|
| Letterhead | Your registered business name and address. For an accredited store, also TIN and MIN |
| Title | Z-READING REPORT for an accredited store, INTERNAL Z-READING otherwise, then Z-Counter No: |
| Shift identity | Branch, cashier, shift opened, shift closed |
| Transaction Receipt Range | Beginning and ending TRN number |
| Cash Accountability | Beginning Balance, Cash Sales, then AR Collected, Cash In and Cash Out when there were any, then Expected in Drawer, Ending Balance and Over or Short |
| Footer | END OF Z-READING, the Z counter, the reset counter, when it was generated, and *** THIS DOCUMENT IS SYSTEM GENERATED ***. A store that is not accredited also gets Internal tracking document — not a BIR report. |
The Accumulated Grand Total block prints only for an accredited store. So does the TIN and the MIN. Everything else prints either way. See BIR compliance for what accreditation changes and what it does not.
A shift can be sealed without anybody counting the drawer — that is what happens when a shift is left open and Kassly closes it overnight. The count is then genuinely unknown rather than zero, and the reading prints NOT COUNTED against Over / Short. Nothing is posted to your books for a drawer nobody looked at.
The daily Z reading
The daily Z belongs to a terminal and a business day, not to a person. It rolls up every shift that ran on that terminal for the day, and it is sealed automatically once the day is over. Nobody presses a button.
| One per | Terminal, per business day |
| Numbered from | That terminal's daily-Z counter, which is nothing to do with the per-shift Z counter |
| Sealed | Once. A day already sealed is left exactly as it was, however many times the job runs again |
| Skipped | For a terminal that had no completed sales and no voids that day. A till nobody used does not get a reading |
What prints:
| Block | Contents |
|---|---|
| Letterhead | Registered name and address. For an accredited store, also TIN, MIN and PTU No. |
| Title | Z-READING (DAILY), the business day, the Z counter for that day, and the terminal name |
| Identity lines | Reset Counter, number of Transactions, and the Serial Range for the day |
| Sales | Gross Sales, Discounts, Service Charge (when there was one), NET SALES, then Voided Sales and Returns / Refunds with their counts |
| Payments | One line per tender |
| VAT | VATable, VAT-Exempt, Zero-Rated and the VAT amount — accredited stores only |
| Accumulated Grand Total | Beginning and ending — accredited stores only |
| Footer | *** THIS DOCUMENT IS SYSTEM GENERATED ***, plus This is not a BIR Z-reading. for a store that is not accredited |
Three differences from a shift's Z reading are worth knowing:
- There is no Cash Accountability section. A business day crosses drawers and cashiers, so there is no single count to reconcile against. Drawer accountability lives on the per-shift Z, and only there.
- Voids are counted by when the void happened. A sale rung on Monday and voided on Tuesday counts on Tuesday's daily Z. The per-shift Z works the other way round: it counts voids of the sales rung during that shift, whenever the void was actually done.
- It only covers sales attached to that terminal. A sale recorded with no terminal against it is in your sales figures and in your books, but it is in no daily Z. See Terminals.
The nearest thing to the daily Z that you can actually open is Reports → Daily Sales Breakdown, which gives one row per business day over any range and exports to CSV. It is worked out live from your transactions rather than read from the sealed reading, so it covers history from before sealing existed — but it is a report, not the reading.
When a business day starts and ends
A business day is a day in your store's own timezone, beginning at the time set in Settings → Store Settings → Business Day Start. It defaults to 12:00 AM, which makes a business day exactly the calendar day.
Push it later if you trade past midnight. With it set to 4:00 AM, a sale rung at 2:00 AM still belongs to the day that started the previous morning — which is what anyone working that shift would tell you, and what the daily Z will now agree with.
Kassly checks every hour and seals the previous business day, so today's daily Z appears some time after your cutover has passed. Checking hourly rather than once a night is deliberate: a missed run, or a store on an unusual cutover, is picked up on the next pass instead of being lost.
The counters
| Counter | Lives on | What advances it |
|---|---|---|
| Z counter | The terminal | Every shift Z sealed on that terminal |
| Daily-Z counter | The same terminal, separately | Every business day sealed on that terminal |
| Reset counter | The same terminal | Only when the lifetime sales accumulator fills up and starts a fresh cycle. It reads 0 on effectively every terminal, forever |
The Z counter is a four-digit field, matching what is declared to the BIR. On reaching 9999 Kassly refuses to seal any further Z readings rather than rolling quietly back to 1. That is the correct behaviour and not a fault: a counter that silently restarts destroys the one thing the number is for. The terminal has to be replaced, or re-permitted, before it can seal again. At a shift a day, 9999 is about 27 years, so this is a milestone you are unlikely to meet.
Two smaller notes on numbering:
- If a counter ever ends up behind the readings already recorded against a terminal — usually after imported or seeded data — Kassly pulls it forward to the highest number already used before issuing the next one. Numbers are never reused.
- A shift closed on no terminal at all cannot draw from a terminal counter. It falls back to counting the branch's own sealed shifts. It is a working number, not a machine counter, and it is another reason to attach a terminal to every till.
Once a business day is sealed
Sealing a business day is the point of the daily Z. Once a day is sealed, nothing later is allowed to reach back into it.
This lock is written by the daily Z and by nothing else. Closing a shift does not seal its day. So the ordinary rhythm is: you close up, you correct whatever needs correcting, and then some hours later — after the cutover — the day is sealed and the window shuts.
What the lock does:
| Attempt | What happens |
|---|---|
| Reopening a shift whose business day is sealed | Refused, with a message saying the day has been sealed by a Z reading. There is no override |
| A sale that syncs in late for a sealed day, in an accredited store | It is not lost and the sealed reading is not touched. The sale is carried into the current open business day and flagged as a late posting, keeping a record of the business date it was actually rung on |
| A correction to your books dated into a sealed day | The sales side is refused. A void always lands in the period it was voided in, not the period of the sale — see Books of accounts |
A reopened shift is still possible, and still useful, for a day that has not yet been sealed. The 24-hour limit and who may do it are in Closing a shift.
Taking a reading with no internet
Readings are worked out on the server, so an X reading normally means asking the server for one. Offline, Kassly falls back to a reading computed from the device's own records and labels it, in the corner of the summary, Offline estimate.
An offline estimate is honest about being one:
| Included | Left out |
|---|---|
| Sales rung on this device during the shift, including ones still waiting to sync | Anything recorded on another device or in the back office |
| Gross, discounts, service charge, net, transaction count | Returns and refunds — always shown as zero. Returns are settled on the server and are not tracked on the device, so Kassly reports nothing rather than guessing |
| The payment mix and the full VAT split | The BIR fields: Z number, receipt-number range, accumulated grand total |
| Cash In and Cash Out queued on this device | |
| AR collections recorded on this device, with only the cash part counted toward Expected |
Closing offline queues the close rather than performing it. The screen says so:
Closed offline — totals below are this device's records. The official Z-reading is generated when the close syncs.
Until it syncs there is no Z number and no thermal print of the Z — the print button is not offered, because there is nothing official to print yet. When the close does sync, the server issues the real Z reading using the time you actually closed the drawer, not the time the queue drained, so sales rung after you went home are not swallowed into your shift.
More on how any of this queues and drains is in How offline works and Sync status.
Three things that look like mistakes and are not
The accountability lines can add up to slightly more than Expected in Drawer. Expected takes cash refunds out of the drawer, but the printed lines only carry Cash Out — there is no refund line, and no note explaining the gap. If a Z will not reconcile by a few hundred pesos, check whether a return was refunded in cash on that shift; the difference is usually exactly that. The figures are right, the printout is just missing a line.
The footer counter can differ from the one in the header. Z-Counter No: at
the top is this reading's own number and never changes. Z-Counter in the
footer reports where the terminal's counter stands now, so on a reading you
print weeks later it shows a higher number. The header is the one that belongs
to the document.
A single shift's Z is worked out again each time you open or download it. So the Accumulated Grand Total on a Z printed today reflects the terminal's total today, not the total on the night of that close. When you need the figures exactly as they were sealed, use Reports → Z-Reading / End-of-Day, which reads the stored reading and never recalculates.
Limits to be honest about
| Limit | What it means |
|---|---|
| No X reading on the phone outside End Shift | The cashier's X reading appears in the End Shift review step. A mid-shift X reading is a back-office job |
| No screen for the daily Z | It is sealed and kept, and it is what locks the day, but there is no page listing daily Z readings. Ask support if you need one |
| No reading covers a whole branch | A shift's Z covers one cashier's drawer; a daily Z covers one terminal. There is no combined reading across the tills in a branch — use Reports → Daily Sales Breakdown for that |
| The X reading is never a BIR document | It says so on its own footer, in both modes. Only the Z readings are ever presented as fiscal documents, and only for an accredited store |
| Accumulated Grand Total reads zero until you are accredited | The lifetime accumulator deliberately does not accumulate before then. The block still prints on the X, showing zeroes |
| Nothing here registers anything | A Z reading is a document Kassly produces. Registering machines, permits and books is between you and your RDO — see BIR compliance |
If a reading and your own arithmetic disagree, work through Cash over and short before assuming either is wrong. Nine times in ten the answer is a movement nobody logged.