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.
Open a shift
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.
Click Open Shift
From the POS screen, the cash drawer area shows Open Shift when no session is active. Click it.
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.
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 cash —
cash_drawer_transactionsrow withtype='sale', the cash amount of the payment (not the invoice total — split-payment cards don’t count here). - Refunds paid in cash —
type='refund', subtracted from expected. - Expenses paid from petty cash —
type='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
Count the drawer
Same drill as opening — every note and coin onto the counter, total it up. This is the actual closing.
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.
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.
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.
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.
Related
- Cash adjustments — cash-in / cash-out during a live shift
- Cash transfers — moving cash between sub-accounts
- Handoff gaps — when consecutive shifts don’t agree on the drawer count
- Cash Drawer report — variance trends over time
- Sales settings — Cash & Drawer — sub-account configuration