On this page
For cashiers, supervisors and managers. Tills & cash (/cash/tills)
shows your open till, every till of the branch, closes waiting for a
supervisor and recent shift closes.
Tills
A till is a physical cash place: a drawer (usually bound to a POS
terminal), the safe or a petty cash box. Managers create them with
+ Till (cash.tills.manage): code, name, kind, bound terminal and a
default float.
Opening a till (shift start)
Open till → choose the till, enter the opening float — either as a total or counted by denomination (the count must add up) → Open with float. One session per till; a terminal has at most one open till. From then on every cash sale on that terminal (or by the cashier who opened it) lands in the session.
During the shift
| Action | Records | Needs |
|---|---|---|
| Cash in | float top-ups, change from the bank | cash.movement, a reason |
| Cash out | pay-outs to suppliers, staff advances | cash.movement; above the business limit (default 200,000) a supervisor’s PIN (cash.approve) |
| Petty cash | small expenses with the receipt number | cash.movement, a reason |
| Safe drop | excess notes moved to the safe | cash.movement |
| Transfer | cash to another open till (drawer → safe, drawer → drawer) | cash.movement; both tills open |
Nothing can take out more than the till holds. Cash sales, cash refunds and reversals are recorded by the payment engine itself. The Movements list is the drawer’s history; Expected cash is always float + sales + cash in + transfers in − refunds − reversals − cash out − petty cash − safe drops − transfers out.
Counting and closing (shift end)
Count & close (cash.close●): count the drawer by denomination (or
type the total), add a note, Close till.
- Balanced → the session closes at once.
- Overage (counted > expected) or shortage (counted < expected)
beyond the tolerance (
cash.close.tolerance_minor, default 0) → the session waits under Waiting for supervisor approval.
A supervisor (cash.approve, never the person who counted) approves
the variance with a note, or sends it back for a recount — the till
re-opens and the cashier counts again. Approved and balanced closes appear
under Recent shift closes with expected, counted, variance and approver;
everything is in the audit log (cash.till_opened, cash.cash_out,
cash.till_close_requested, cash.till_close_approved…).
● needs a password sign-in.
Handing a drawer over mid-shift
When a cashier leaves before the drawer closes, Hand over instead of closing: you count the drawer (by denomination or as a total), the incoming cashier — chosen from the staff with a login — counts the same cash, types their count and confirms with their PIN. The two counts must match (if they do not, recount together or ask a supervisor to count). Your session closes with its variance — any difference is yours, approved by a supervisor above the tolerance as for a close — and a new session opens for the incoming cashier with the counted cash as its float. No money moves; the shift report shows the drawer as handed over.
Blind count
With the business setting blind count on (cash.close.blind_count),
a cashier without cash.approve does not see the expected cash, nor the
drawer’s movements (which add up to it), while the drawer is open — for a
close or a hand-over — only the variance once the count is in.
Tips
A tip taken in cash goes into the drawer (Cash tips in the expected
cash); it is owed to the waiter, not takings. Pay out tips pays a
member of staff what they are owed (filled in, never more) as a Tips
paid out movement. See performance-and-tips.md.
Denominations
Counts use the currency’s notes and coins (UGX 50,000 → 50; KES, TZS,
RWF, USD, EUR, GBP configured in config/payments.ts).
Cash and the sale
- Cash payment needs an open till; the till page says so and the pay screen refuses cash with Open a till before taking cash.
- Reversal of a cash tender must happen while its till is still open; afterwards the money is refunded instead.
- Cash refunds leave the open till of the person refunding and are refused when the drawer does not hold enough.