RetailOS — Point of Sale (POS) Manual
A hands-on guide to running the till: setting up registers, opening and closing cash sessions, selling, taking payment, reprinting receipts, handling returns, and working offline.
Base URL:https://goretailos.comPOS terminal:/admin/pos· Registers & cash:/admin/registers· Orders & returns:/admin/orders· Offline sync:/admin/syncThis is the POS-focused companion to the full User Manual and the Usage Guide.
1. Who can use the POS, and what a register is
- Who — the POS is available to Owner, Admin, Manager and Cashier roles. Accountant / Inventory / Staff roles do not sell.
- Register — a register (or "till"/"drawer") is the point money is taken at. Every sale, cash movement and cash session belongs to a register. A shop can have several registers (e.g. one per counter), each optionally bound to a branch.
- Assignment — a cashier must be assigned to a register before they can open its session (managers can open any register). Manage registers and assignments in Registers & Cash.
Tip — install it as an app. The POS runs as a Progressive Web App: on the till device open /admin, then Install (Chrome/Edge address bar) or Add to Home Screen (iPad Safari). It launches full-screen like a native terminal and keeps working through Wi-Fi drops. See the Usage Guide → Installing the POS for the full setup.
2. Opening the register (start of shift)
You must open a cash session before you can complete a sale. The session tracks every cash movement from open to close so the drawer can be reconciled.
- Open the terminal at
/admin/pos. - In the session bar at the top, pick your register.
- Enter the opening float — the cash you're starting the drawer with (count it first).
- Select Open session.
Rules:
- Only one open session per register at a time. If the register already has an open session you'll be told to close it first.
- Non-managers can only open a register they're assigned to.
- The session bar then shows the register, the open-session state, and the online / offline and sync badges.
3. Selling — the terminal
The terminal is a full-screen workspace: catalog on the left, cart on the right (a slide-in sheet on phones).
Finding items
- Scan — keep the scan field focused and scan a barcode, or type a barcode/SKU and press Enter. The item drops straight into the cart.
- Search (F2) — fuzzy search by name / SKU / brand / category. Use ↑ ↓ ← → to move the highlight and Enter to add the highlighted item.
- Category chips — tap a category to filter the product grid. Live stock badges show what's available.
The cart
- Quantity — use the − / + steppers on each line.
- Line discount (F6) — a discount on a single line.
- Order discount — a discount across the whole sale (spread evenly across lines when the sale posts).
- Attach customer (F4) — link the sale to a customer (or leave it as a guest sale).
- Hold / resume (F8) — park a sale to serve someone else, then resume it. Held sales live on the device.
Keyboard shortcuts
| Key | Action |
|---|---|
| F2 | Focus search |
| F4 | Attach / change customer |
| F6 | Apply a discount |
| F8 | Hold the current sale |
| F9 | Open the payment screen |
| Esc | Cancel / close the current panel |
Prices and tax shown on screen are an estimate — the server always recalculates the authoritative total when the sale is completed.
Customer-facing display (second screen)
Show the customer the bill as it's built. In the POS toolbar select Display — a full-screen customer display window opens; drag it onto a second monitor or customer-facing screen at the counter.
- Every item appears with its price and running total the moment it's scanned, with the newest line highlighted.
- The big Total updates live after each item.
- When you take payment, it switches to a Thank you screen showing the amount paid and the change due, and returns to a welcome screen once you close the receipt.
It's a read-only mirror — it never changes the sale. It runs on the same device/browser as the till (open it from the POS on that machine), works offline, and shows nothing to anyone who opens the page on a different device.
4. Taking payment
- Press F9 (or Pay) to open the payment sheet. It shows the Total due.
- Pick a payment method tile (Cash, Card, Bank, etc.).
- For split payments, use Split payment to add more rows — the sheet shows Allocated, Remaining and Change due live.
- Press Complete sale. The button shows Processing… while the sale posts, and can't be double-clicked.
Payment rules:
- The payment total must cover the order total (you can't under-pay).
- Cash over-tender is fine — hand over more cash than the total and the sheet shows the change due; the drawer records the net (cash in − change out). Example: a 600 sale, customer gives 1100 → 500 change, drawer nets +600.
- Non-cash tenders can't exceed the total — you can only give change from cash, so a card/bank amount must not be more than what's owed.
On success you get the receipt screen (and, if offline, a "Saved offline" confirmation).
5. Receipts
- Print a 58 mm or 80 mm thermal receipt (plain-text, ESC/POS-style), with a browser print fallback if no thermal printer is configured.
- Reprints are available from the order later (see §8).
- Configure the printer per device in Settings → Receipts (printer type, paper width, bridge URL, auto-cut, cash-drawer kick). Printer settings are stored on the device, not the shop.
6. Cash in / cash out during the shift
Money sometimes moves in or out of the drawer outside of sales — a float top-up, a payout, or a cash expense. Record these so the drawer still reconciles at close.
From Registers & Cash → the open session panel:
| Type | Use it for |
|---|---|
| Cash in | Adding cash to the drawer (e.g. a float top-up). |
| Cash out | Removing cash (e.g. a payout, banking). |
| Expense | A cash purchase — also posts to the ledger under the chosen expense category. |
Each movement takes an amount and an optional note. Only the session's opener or a manager can record movements.
7. Closing the register (end of shift)
- Go to the session (POS session bar Close session, or Registers & Cash).
- Count the drawer and enter the Counted cash — this is required; you can't close with a blank amount (type
0if the drawer is genuinely empty). - Close. The system computes the variance.
Expected cash is calculated as:
opening float
+ cash sales
− cash refunds
+ cash in
− cash out
− cash expenses
The close screen shows the full reconciliation — Opening, Cash sales, Refunds, Cash in, Cash out, Expenses, Expected, Counted, and the Difference. Only the opener or a manager can close. A discrepancy raises an alert for a manager to review (flagged critical if it's more than ~5% of expected).
8. Recent sales, the order ledger & reprints
- On the till — recently completed and held sales are reachable from the POS (recent-sales / held-sales panel) so you can resume or reprint quickly.
- Full ledger — every sale (POS, online and AI) lives in Orders, returns & payments. Search by order number or customer contact, filter by status / payment / channel / date, and page through them. Open an order to see its lines, payment status and to reprint the receipt.
9. Returns & refunds
Returns are processed from the order, not the till screen.
- Open the order in Orders, returns & payments.
- Choose Full return & refund.
What happens: the returned items are restocked, a refund is issued (cash refunds re-enter the open drawer), and the sale's revenue/tax/COGS are reversed in the ledger — all in one step.
You can't refund an order that was never paid. For an unpaid order (e.g. a Cash-on-Delivery online order that wasn't collected) the refund option is hidden and the server blocks it — there's no money to give back. Cancel such an order instead.
10. Offline mode & sync
The POS is offline-first: if Wi-Fi drops (or a checkout call fails), it keeps selling.
- Prime first, on Wi-Fi. Open the POS online once at the start of a shift so it caches the catalog, prices and barcode index for the shop.
- Selling offline — sales are computed on the device and queued (each carries a unique
local_uuidso syncing can't create duplicates). The session bar shows the offline badge and the queued count. - Reconnecting — queued sales sync automatically and duplicate-safe when you're back online. The server re-prices authoritatively; if a price or tax changed while you were offline, the customer keeps the amount actually charged and the difference is recorded as a variance rather than silently rewritten.
- Conflicts — a manager resolves any price/tax variances or rejected sales in the Offline Sync console (Accept / Reject / Retry).
11. Troubleshooting
| Problem | What to do |
|---|---|
| Register not in the list | Ask a manager to create it and assign you to it in Registers & Cash. |
| "Register already has an open session" | Someone else opened it — close that session first, or use a different register. |
| Can't complete a sale — payment doesn't match | The total tendered must cover the order total. Over-tendering cash is fine (you'll see change); a card/bank amount can't exceed the total. |
| Close button won't work | Enter the Counted cash amount first — it's required (use 0 for an empty drawer). |
| Nothing loads offline | You never primed the cache online, or you're in a browser tab instead of the installed app. Reconnect, open the installed app, load the POS once, then retry. |
| A sale is stuck "syncing" / rejected | A manager resolves it in the Offline Sync console. |
| Refund option missing on an order | The order was never paid — there's nothing to refund; cancel it instead. |
This page renders POS_MANUAL.md. See also the full User Manual and the Usage Guide.