End-to-end workflows
How work moves through Point of Sale from start to finish, who does each step and what the system does in response.
On this page (8)
Trading day: set-up, open, sell, close, post to FinanceCash, card and split payments with VATReturn and voidOffline trading day and syncLarge variance close with second-person approvalGift card and loyalty life cycleSecure a till and prove it cannot be forgedLaunch a promotion and a coupon, then switch them off
Trading day: set-up, open, sell, close, post to Finance
Who: Admin (pos.configure), Cashier A (pos.sell, session open/close), Manager (pos.variance.approve)
| # | What the person does | What the system does |
|---|---|---|
| 1 | Admin: POST /pos/setup, then create register POS01 with a warehouse; check profile RETAIL | 7 tenders, 14 reason codes, profile RETAIL; POS01 listed, state closed |
| 2 | Cashier A: Launch POS > Open session with float 500.00 (count 1 x 500) | Session S-n open, register open, opening-float journal posted |
| 3 | Sell Milk x 2, Bread x 1, Chocolate x 1 for cash 50.00 | Total 30.24; net 28.80, VAT 1.44; change 19.76; receipt POS01-<date>-000001 |
| 4 | Sell Rice x 2 with a 4.00 discount by card | Total 36.00 (net 34.29, VAT 1.71); card tender; drawer unchanged |
| 5 | Cash in 100.00, cash out 50.00, safe drop 100.00 | Drawer expected 500.00 + 30.24 + 100.00 - 50.00 - 100.00 = 480.24 |
| 6 | Close with a blind count of 478.00 (variance -2.24) | Within the 5.00 tolerance: closed, no reason needed, expected figure was never shown |
| 7 | Manager: Finance journal of the session | One balanced journal: debit cash 30.24 and card clearing 36.00 (66.24); credit revenue 63.09 (28.80 + 34.29) and output VAT 3.15 (1.44 + 1.71); posted once; cash in / out / drop have their own transfer journals |
Cash, card and split payments with VAT
Who: Cashier A
| # | What the person does | What the system does |
|---|---|---|
| 1 | Basket of 63.00 (net 60.00, VAT 3.00): pay Card for the full balance | One CARD tender 63.00; no change; expected cash unchanged |
| 2 | Same basket: pay cash 40.00 then Card (balance 23.00) | Two tenders; expected cash +40.00; both tenders on the receipt |
| 3 | Basket 30.24: pay cash 50.00 | Change 19.76; paid 50.00; expected cash +30.24 |
| 4 | Set cash rounding 0.05 and sell the 30.24 basket | Rounding +0.01; total 30.25; VAT unchanged 1.44 |
| 5 | Try (API) card 40.00 for 30.24, and cash 20.00 for 30.25 | 'The overpayment has no cash tender that can give change.' and 'The bill is 30.25 and the payments come to 20.00.' |
Return and void
Who: Cashier A (pos.sell, pos.return), Manager (pos.void)
| # | What the person does | What the system does |
|---|---|---|
| 1 | Sell Milk x 3 (31.50) for cash | Bill recorded |
| 2 | F8 return: find the receipt; return 1 Milk | Return -10.50 (net 10.00, VAT 0.50); cash -10.50; stock +1 at original cost |
| 3 | Return 2 more, then 1 more | Third refused: 'Return quantity exceeds what remains on the original sale.' |
| 4 | Sell Bread x 1 (5.25) and void it with manager approval and reason 'Scanned twice' (API) | Bill voided, kept for audit, stock and expected cash reversed |
| 5 | Try void again, void without reason, void a coupon bill | 'This bill is already void.'; 'A void needs a reason.'; 'Coupon, loyalty and stored-value sales must be reversed with an original-sale return, not a void.' |
| 6 | Open Voids and Returns lists and Exception transactions | Void and return appear; sale.voided is in the exception view |
Offline trading day and sync
Who: Cashier A, Supervisor (pos.sync.manage)
| # | What the person does | What the system does |
|---|---|---|
| 1 | Open a session online; turn the network off | Header OFFLINE; products still sell |
| 2 | Sell 3 cash bills, hold one bill, record cash in 20.00 | Receipts 'Queued - will sync'; numbers POS01-<date>-000001..3 made on the till; Pending 4 |
| 3 | Try a gift-card payment and a coupon | Gift-card button hidden; 'Coupons require an online check' |
| 4 | Reconnect and wait 20 seconds | 'Synced 4'; bills flagged Offline; stock and Finance posted once |
| 5 | Replay the same upload (retry after a cut line) | All answered 'duplicate'; no second bill or journal |
| 6 | Supervisor: Device monitor, Pending transactions, Offline audit | Pending 0; offline sales count 3; offline bills listed |
| 7 | Set offline max amount 100.00 and sell 120.00 offline | Till refuses 'This sale exceeds the approved offline amount. Reconnect first.' |
Large variance close with second-person approval
Who: Cashier A (counts), Manager B (pos.variance.approve)
| # | What the person does | What the system does |
|---|---|---|
| 1 | Cashier A: sell cash totalling 1,000.00; close counting 940.00 (expected 1,000.00 + float) | Variance -60.00 above the 50.00 threshold; a reason is required |
| 2 | Close with reason 'Short change' | State approval_pending; register close_pending_approval; no Finance posting yet |
| 3 | Cashier A tries to approve own close | 'A close is approved by somebody other than the person who counted it.' |
| 4 | Manager B refuses the variance with reason 'Recount' | Session variance_review; register closing |
| 5 | Cashier A recounts 995.00 and closes again | Variance -5.00 within tolerance: closed (or waits again if above the threshold) |
| 6 | Manager B approves (for the first variant) | Session closed and posted to Finance once; audit session.close_approved |
Gift card and loyalty life cycle
Who: Admin (pos.configure), Cashier A
| # | What the person does | What the system does |
|---|---|---|
| 1 | Admin: create loyalty programme STD (1 pt/AED, 0.01 AED/pt, minimum 100) | Programme active |
| 2 | Cashier: sell 105.00 to a named customer | Customer earns 105 points |
| 3 | Admin: issue gift card 100.00; copy the token | Masked code in the list, token shown once, liability journal posted |
| 4 | Customer buys 80.00 (online): F10 redeem 100 points, pay the rest with the gift card | Points discount 1.00, total 79.00, gift card balance 21.00; points 105 - 100 + 79 earned = 84; a second spend above the balance is refused |
| 5 | Return half the bill | Points reversed/restored in proportion; gift card refunded to the original instrument |
| 6 | Admin: run loyalty expiry twice | Second run expires 0 |
Secure a till and prove it cannot be forged
Who: Supervisor (pos.sync.manage), Cashier A
| # | What the person does | What the system does |
|---|---|---|
| 1 | Supervisor: Workspace > Secure this device on the test tablet | Device enrolled; register now needs signed items |
| 2 | Cashier sells 3 bills offline and syncs | Items signed sequence 1-3; accepted; device last_sequence 3 |
| 3 | Resend sequence 2 with a different amount | Quarantined with a conflict id; original sale unchanged |
| 4 | Open a session from a different, unsigned browser | 'This register requires an enrolled signed device.' |
| 5 | Supervisor revokes the device | State revoked; new uploads refused; old bills and conflicts stay |
| 6 | Enrol a replacement device | Register works again only on the new device |
Launch a promotion and a coupon, then switch them off
Who: Admin (pos.configure and company admin), Cashier A
| # | What the person does | What the system does |
|---|---|---|
| 1 | Admin: create promotion MILK3 10 % on Milk, min quantity 3; coupon WELCOME10 10 %, minimum basket 50 | Both listed Active |
| 2 | Cashier sells Milk x 3 | Promotion 3.15; total 28.35 |
| 3 | Cashier sells a 120.00 basket with coupon WELCOME10 | Discount 12.00; payable 108.00; coupon usage 1 |
| 4 | Use the coupon again with a one-use limit | 'Coupon has reached its redemption limit.' |
| 5 | Admin: Applications > Point of Sale > Features: switch off Promotions and coupons | Menus Promotions, Coupons, POS price rules disappear; edits refused; lists readable |