Skip to content

Open and close a shift

Every till session starts with Open Shift and ends with Close Shift. In between you ring sales, take refunds, log expenses, and move cash in or out. At close, you count the drawer and Fexl Lite tells you whether your physical count matches what it expected.

Updated 4 May 2026·For v1.6.100·4 min read

Open a shift

1

Count the cash before you start

Pull every note and coin out of the drawer; count it onto the counter. This number is the opening balance. Don’t shortcut it — every variance reading for the rest of the day depends on it being right.

2

Click Open Shift

From the POS screen, the cash drawer area shows Open Shift when no session is active. Click it.

3

Enter the counted amount and pick a sub-account

The dialog wants two things:

  • Opening balance — what you just counted.
  • Cash sub-account — defaults to your user’s default (configured in Settings → Sales → Cash & Drawer). On a single-drawer store this is just 1010-001 Counter Cash; on multi-drawer setups, pick the drawer you’re physically standing in front of.

Optional: a free-text note for unusual circumstances (“Ahmed handed over £85 from yesterday’s late close”). It surfaces on the shift detail panel.

4

Confirm

The session is created with status='open', opening_balance set, and opened_at=now. The POS now allows ringing sales — every cash leg for the next several hours posts against this shift’s sub-account.

During the shift

You don’t need to do anything special. Every flow that moves cash auto-posts to your active shift:

  • Sales paid in cashcash_drawer_transactions row with type='sale', the cash amount of the payment (not the invoice total — split-payment cards don’t count here).
  • Refunds paid in cashtype='refund', subtracted from expected.
  • Expenses paid from petty cashtype='expense', subtracted.
  • Cash-in / cash-out adjustments — manual entries, see Cash adjustments.
  • Cash transfers between sub-accounts — see Cash transfers.

Pay-later (debt) sales don’t write a cash transaction — the cash didn’t move. They show on the shift summary as a separate payLater line so you know how many tabs were rung without distorting the variance.

Close a shift

1

Count the drawer

Same drill as opening — every note and coin onto the counter, total it up. This is the actual closing.

2

Click Close Shift

The Close dialog opens. Fexl Lite has already recomputed Expected server-side from the shift’s transactions, so the dialog leads with that number front and centre.

3

Enter your counted amount

Type the actual number from the count. The dialog computes Variance = actual − expected live as you type, with a coloured chip:

  • Green +n — you have more than expected. Common causes: missed cash-in, customer overpayment that wasn’t applied, a rounding-up cashier.
  • Rose −n — you have less than expected. Common causes: missed cash-out, refund posted but not given, miscounted opening, skim.
  • Zero — you’re square. Rare, satisfying.
4

Add a variance note (recommended)

If variance is non-zero, jot a sentence about what you think happened. Don’t agonise — “30¢ short, probably miscount” is fine, “drawer was light by £45, no idea, will investigate tomorrow” is also fine. Future-you reading the shift report wants the trail.

cash drawer · close shift dialog · expected/actual/variance
5

Confirm

Confirming flips the session to status='closed', stamps closed_at=now, actual_closing from your input, expected_closing and variance from the recompute, and closed_by_user_id (which may be a different user from the opener — manager closing on behalf of a cashier).

What posts to the books

The shift itself doesn’t write a journal entry — it’s a container. The transactions inside it write JEs as they happen:

  • Cash sale — DR cash sub-account (1010-xxx) / CR revenue (4010), VAT (2020), discounts (4030).
  • Cash refund — DR sales returns (4020) / CR cash sub-account.
  • Cash-paid expense — DR expense account (6xxx) / CR cash sub-account.
  • Cash-in — DR cash sub-account / CR (depends on source — owner contribution = 3010, change-fund top-up = different sub-account).
  • Cash-out — mirror of cash-in.

The variance itself doesn’t post to the GL on close — it’s recorded on the shift session row only. Some operators run a periodic “Cash Over/Short” entry to settle accumulated variance into a specific 6xxx expense account; that’s a manual journal entry for now, not an automated step.

Common gotchas

”Expected showed zero when I opened the close dialog”

You didn’t take any cash this shift, or every payment came on card. Check the transaction list on the shift detail — if it’s empty, expected matches the opening balance, which is what the dialog showed.

”I closed and the variance feels wrong”

Open the closed shift’s detail panel. Walk the transaction list. The most common explanations are:

  • A refund was logged as cash but you actually gave it on card (or vice versa).
  • A cash-in/cash-out adjustment was missed.
  • The opening balance was wrong (someone counted a £20 as a £10).

Post a corrective cash adjustment on the next open shift with a clear note.

”I forgot to close last night’s shift”

It’s still open. Close it now from Shift History — the actual count you do today will compare against the expected balance the system computed from the transactions logged. If anyone rang sales overnight on that shift (e.g. the morning cashier opened the till on the previous shift instead of opening their own), every one of those sales is on the prior shift, so the variance will be large but explainable. From now on: open your own shift first thing.