Card payments reconcile themselves. The processor knows what it took, the money arrives, the numbers agree. Cash does not extend you that courtesy. Cash reconciles only if somebody counts it, and only if the system knew what to expect before they did.

This is the discipline of cash management and the Z-report: opening a register with a known float, recording every movement of money in and out, and closing with a count that either matches or tells you something you needed to know.

The vocabulary, briefly

  • Float (or opening balance). The cash you put in the drawer before trading, so you can give change. It is not revenue.
  • Pay-in. Cash added to the drawer during the shift that is not a sale — topping up change, for instance.
  • Pay-out. Cash removed that is not a refund: paying the window cleaner, buying milk, a mid-day drop to the safe.
  • X-report. A snapshot of the shift so far. Reading it changes nothing. Managers run it at lunchtime.
  • Z-report. The end-of-shift report. It closes the session and zeroes the counters. You run it once, at the end.
  • Variance. Counted cash minus expected cash. The number that matters.

The X versus Z distinction confuses newcomers and it is worth being precise about, because a Z-report run by accident in the middle of the afternoon has ended a session that had four hours left in it.

The arithmetic

Expected cash in the drawer at close is:

opening float
+ cash sales
+ pay-ins
− cash refunds
− pay-outs
= expected closing cash

Count what is actually in the drawer, subtract the expected figure, and you have the variance. Positive means there is more cash than there should be; negative means less. Both are problems, and a persistently positive till is not good news — it usually means change is being given incorrectly.

Note what is not in that formula: card sales. A card payment never enters the drawer, so it has no business in the cash count. The Z-report shows card takings separately, and those get reconciled against the processor’s settlement, not against a pile of notes.

A closing routine that works

  1. Stop selling. A sale rung up during a count guarantees a variance.
  2. Count the drawer twice, by denomination, and write the figure down before looking at the expected total. Knowing the target first is how a count becomes a formality.
  3. Enter the counted amount in the register and let it compute the variance.
  4. Investigate anything above your threshold. Pick a number — many shops use the price of the cheapest item, or a small fixed amount — and treat exceeding it as something to explain today, not next month.
  5. Run the Z-report, which closes the session.
  6. Bank the takings, leave the float. Tomorrow’s opening balance should be the same number every day.

The habit that catches theft is step 2 in that order. Counting first, comparing second.

What causes a variance

In descending order of likelihood:

  • Change given wrong. Overwhelmingly the most common cause, and it produces variances in both directions.
  • A pay-out nobody recorded. The manager took twenty for a taxi.
  • A cash sale recorded as card, or the reverse. Look at the split-payment orders first.
  • A refund given in cash on a card sale. Common, and worth a policy: refund to the original payment method.
  • Theft. Rare per incident, and the reason each cashier needs their own login. A variance you can attribute to a person and a shift is a variance you can act on.

OpenPOS tracks sessions per cashier, outlet and register, so a pattern in the numbers has a name attached to it rather than being lost in a daily total.

Where the drawer fits

The physical drawer is controlled by the receipt printer, not the computer, and it opens on a drawer-kick command sent with the receipt. Configure it to open on cash sales and on a pay-in or pay-out, and to stay shut on card sales. Every unnecessary opening is a chance for the drawer to be short.

If your drawer never opens automatically, the wiring and driver settings are covered in how to set up a cash drawer to open automatically after print in Windows.

Reconciling against WooCommerce

Because the register writes real WooCommerce orders, the day’s sales exist in one place. Your Z-report should agree with a WooCommerce report filtered to that outlet and date range. When it does not, the usual culprits are an offline order that has not synced yet, or an order created in the admin rather than at the till.

Check that the register’s offline queue is empty before running the Z-report. It takes two seconds and saves an hour of accounting.

Frequently asked questions

Can two cashiers share one drawer?

They can, and then a variance belongs to both of them, which is the same as belonging to nobody. One drawer per session is the standard for a reason.

What if I forget to run the Z-report?

The session stays open and tomorrow’s sales join today’s. Close it before trading again, and expect the count to be harder to interpret.

Do I need a Z-report for card-only trading?

You still want the session boundary and the shift report. The cash count is simply zero.

Is the Z-report a legal document?

In some countries the fiscal rules are strict and specific. Ask your accountant what your jurisdiction requires before assuming a POS report satisfies it.


Open a session, take a cash sale and close the drawer on the live demo (admin / admin123). Cash management, sessions and Z-reports are part of OpenPOS, with no monthly fee and no limit on cashiers.

Related Post