RetailLink

POS screens

POS is mostly a single till SPA. Each section below explains what the screen is for, why it exists, and how cashiers use it.

For the full keyboard map and day-open procedures, see POS/docs/POS-OPERATOR-GUIDE.md in the repo. Amount entry usually has no decimal key: type minor units (e.g. 4300 = £43.00 on 2-decimal shops).

Admin counterparts

Receipt layout → Admin Settings → POS receipt · Printers download → POS hardware · Staff PIN → User management · Parked sales exceptions → Suspended sales · Numbers → POS reports.

Routes

6 pages in this section.

What

POS has a small set of real URLs. Almost everything after device binding happens inside `/pos/[shopId]` as modes and dialogs — not separate pages.

Why

A single till SPA keeps keyboard focus, hardware bridge state, and drawer accountability continuous across a shift. Separate routes exist only when a different window or first-run setup is required.

How

First launch opens Register setup. After lock, later launches jump straight to the till. Customer display and card-reader UIs open as companion windows from the till header.

POS

POS root redirect

/

If the device already has a shop binding, redirects to `/pos/{shopId}`. Otherwise opens device setup to claim a register.

POS

Device setup

/device-setup

What: first-run (or reconfigure) Register setup screen. Why: a PC/EXE must be permanently tied to one shop and printer so cashiers cannot switch stores mid-shift. How: enter the store slug/id from Admin → Settings → General, configure the receipt printer, then Finish / lock. Later changes require Unlock with admin PIN (owner/admin/manager). Open till resumes the bound register.

POS

Select shop

/pos/select-shop

Choose which shop the register should open when more than one shop is available to the device/user.

POS

Till (main)

/pos/[shopId]

What: the single-page till SPA at /pos/[shopId]. Why: keeping sale, drawer, and hardware state in one focused window matches programmable keyboards and avoids losing strip focus. How: article grid + scan strip + black status panel + yellow total. Modes (READY, ENTER CASH, DRAWER, SUSPENDED SALES, …) change the strip placeholder and valid keys — follow the status line.

POS

Customer display

/customer-display/[shopId]

What: companion window at /customer-display/[shopId] showing Your Order, line items, and Ready for payment / totals. Why: shoppers should see the basket without reading the operator UI. How: open from the till header (Open customer display). Mode web/vfd/none is configured on the register; the till pushes cart state to this view.

POS

Card reader display

/card-reader/[shopId]

Companion UI for card-present flows when a dedicated reader display is used.

Sell & cart

5 pages in this section.

What

The sale cart is the default till mode: scan or search products, adjust quantity/price/VAT on lines, attach a customer, and watch the black status panel for the next valid key.

Why

Cashiers need a keyboard-first surface that mirrors programmable till keyboards. The status panel (READY, ENTER CASH, DRAWER, …) is the source of truth for which chords are legal.

How

Scan a barcode into the strip and press Enter. Use QUANTITY before a scan to multiply. Line discounts and VAT overrides may require a manager PIN depending on Admin policy.

POS

Sale cart

/pos/[shopId] · cartMode: sale

What: default cartMode:sale — lines appear under ART.NR / ART.DESC / PC / PRICE. Why: cashiers build a basket before tender; line-level corrections must stay distinct from abandoning the sale. How: scan barcode · Enter; QUANTITY arms multiply; -30/-50/-75% and PRICE OVERRIDE hit the last line (manager PIN if Admin policy requires). CLEAR backs one step; ERROR CORRECT undoes last entry; CANCEL SALE is DRAWER · 6.

POS

Customer lookup

Till dialog · Customer

Search customers from Admin’s directory and attach them so loyalty and receipts show the shopper. Profiles are managed under Admin → Customers.

POS

Send cart

Till dialog · Send cart

Transfer the open cart to another register/lane in multi-lane setups instead of suspending globally.

POS

Online orders (till)

Till dialog · Online orders

Cashiers can view and act on incoming online/pickup work without leaving the register. Admin Live orders remains the back-office board.

POS

Sale complete

Till · Sale complete

Post-payment confirmation showing change and triggering receipt print according to Admin receipt + local printer settings.

Payments

4 pages in this section.

What

Payment modes take the amount due through one or more tenders — cash (SUBTOTAL), card, gift card — until the balance is zero and a receipt can print.

Why

Retail checkouts often split cash + card or redeem gift balance first. The till must keep an audited running due amount and only complete the sale when tenders cover it.

How

SUBTOTAL opens cash entry (type minor units, e.g. 4300 = £43.00). Underpay prompts a split. CARD / GIFT CARD consume remaining due. TOTAL finalises when cash ≥ due.

POS

Cash payment

Till · Payment (cash / SUBTOTAL)

What: SUBTOTAL (Ctrl+Alt+T) opens ENTER CASH AMOUNT with due shown on the strip. Why: cash drawers need an explicit counted tender and change due before the sale completes. How: type minor units (4300 = £43.00) · Enter · TOTAL when cash ≥ due. Underpay → SPLIT PAYMENT for the remainder via card/gift. Esc cancels the open tender without voiding accepted split cash.

POS

Card payment

Till · Card payment

Waits on the card provider/reader. Cashback (when enabled in Admin → POS cashback) pays out from the drawer and is reported in POS reports.

POS

Gift card tender

Till · Gift card

Scan or enter a gift card issued from Admin → Gift cards. Remaining balance after partial redeem can be finished with cash/card split.

POS

Split payment

Till · Split / remaining balance

Appears after a partial tender. Complete the remainder with another method until the balance is zero.

Suspend

2 pages in this section.

What

Suspend parks the open basket with a reference and clears the till. Recall lists parked sales so a cashier can resume later — or Admin can resolve exceptions after day-end.

Why

Customers step away, another lane needs the register, or a manager must take over. Parking preserves prices and lines without completing payment.

How

F9 with items → SALE SUSPENDED + reference. F9 on an empty cart → SUSPENDED SALES list → number · Enter to restore. Stale parks appear under Admin → Suspended sales.

POS

Suspend sale

Till · F9 with items

What: F9 with a non-empty cart parks the basket and shows SALE SUSPENDED with reference, item count, and total. Why: frees the register without losing prices or lines. How: after suspend the till returns to READY/empty; recall with F9 when empty. Exceptions after day-end/timeout are handled in Admin → Suspended sales (restore original prices, cancel, or archive).

POS

Parked sales recall

Till · F9 empty cart

What: SUSPENDED SALES list on the status panel (F9 on empty cart). Why: cashiers must resume the exact basket the customer left. How: press the list number · Enter to restore lines and totals; L/Back dismisses. Each row shows reference, amount, till id, and time.

Drawer & day control

7 pages in this section.

What

The DRAWER (NO SALE) menu owns float, mid-day count, day-end close, returns shortcut, void/cancel, and drawer kick — the accountability layer around the cash drawer.

Why

Without opening float and day-end counts, POS reports cannot reconcile expected vs counted cash. These steps also gate sales when a previous day was left open.

How

NO SALE / F7 → DRAWER → number · Enter. Opening float runs once per day after any pending day-end is settled. Day end asks for counted cash against expected.

POS

Opening float

NO SALE · 1

What: OPENING FLOAT prompt after any pending day-end is settled — type float digits on the strip. Why: expected cash for the day is baseline + sales − change − cashback; without a float, drawer reports cannot reconcile. How: DRAWER · 1 (or auto-prompt) · type amount (1050 = £10.50) · Enter once per trading day.

POS

Mid-day cash count

NO SALE · 2

Interim count without closing the day — used for pickups or variance checks.

POS

Day end / close drawer

NO SALE · 3

What: DAY END asks for counted cash against expected (yellow banner if a previous day was left open). Why: closes the accountability period so the next shift can open a float and POS reports show variance. How: DRAWER · 3 · type counted cash · Enter close (P print if offered). Sales stay blocked until a stale day-end is settled.

POS

Returns lookup (NO SALE)

NO SALE · 4

Shortcut into returns lookup (also available from CODE menu). Scan a receipt/order to start a return or exchange cart.

POS

Void item mode

NO SALE · 5

Arm void mode, then scan the line to remove. Distinct from ERROR CORRECT on the last line.

POS

Cancel sale

NO SALE · 6

Clears the in-progress sale per till policy. May require manager approval depending on shop settings.

POS

Kick drawer (no sale)

NO SALE · 0

Hardware kick for non-sale drawer access. Audited as a no-sale open where reporting supports it.

CODE menu & lock

3 pages in this section.

What

CODE covers register security: lock, log out, and refund entry. Manager approval dialogs interrupt a sale when policy requires a supervisor PIN.

Why

Tills sit on the counter. Locking between cashiers and gating voids/discounts protects cash and margin without abandoning the open sale context.

How

CODE · 1 locks (employee # · PIN to resume). CODE · 2 logs out. Restricted actions show MANAGER APPROVAL — manager employee # then PIN. Staff PINs are set in Admin → User management.

POS

Lock register

CODE · 1

Secures the register between cashiers. Unlock with staff credentials created in Admin → User management.

POS

Log out

CODE · 2

Ends the current POS staff session. Next user must authenticate again.

POS

Manager approval

Till dialog · Manager PIN

Appears when an action exceeds cashier permissions (voids, discounts, refunds). Manager PINs are staff credentials with elevated rights.

Returns

1 page in this section.

What

Returns and exchanges look up a prior receipt/order, then switch the cart into return or exchange mode so refunded lines and restocks stay linked to the original sale.

Why

Blind refunds break inventory and tender reports. Lookup keeps VAT, tenders, and returned quantities auditable in Admin → Orders / Returns and POS reports.

How

DRAWER · 4 or CODE · 6 → scan receipt/order → confirm lines → complete tender. Void item (DRAWER · 5) removes a middle open-basket line by barcode instead.

POS

Returns / exchange

Till · cartMode: return | exchange

After lookup, the cart switches to return or exchange mode. Completed returns appear in Admin orders/returns and POS reports.

Hardware

3 pages in this section.

What

Hardware surfaces include the customer display window, card-reader companion UI, local printer selection (bridge), and in-till shortcut help.

Why

Shoppers need a facing total; printers differ per register; ESC/POS RAW printing goes through a local bridge. Layout branding stays in Admin → POS receipt.

How

Open customer display from the till header. F7 / Drawer & reports also reaches drawer tools. Ctrl+K shows Learn keyboard. Each till picks its Windows Generic/Text printer only.

POS

Till printer settings

Till · Printer settings (F7)

Each register chooses its Generic/Text printer. Layout comes from Admin → POS receipt; the bridge (port 6315 in browser mode) sends RAW ESC/POS.

POS

Learn keyboard

Till · Ctrl+K

In-app key map for sale, keylock, and PC chords. Full reference lives in `POS/docs/POS-OPERATOR-GUIDE.md`.

POS

Register setup unlock

Till · Admin PIN unlock

After device setup locks the register, changing shop binding or certain hardware settings requires an admin/manager unlock.