Run a POS sale
Goal
Ring a completed frontline sale: add lines, take payment, print or email the receipt.
Who it is for
Cashiers with pos.sell (and pos.view). On-account needs pos.sell_on_account. Manual line discounts need pos.item.apply_discount.
Preconditions
- pos module on; active terminal with warehouse and cash account.
- Device trusted (or binding policy allows open/single device).
- Open till session for the terminal (
pos.manage_sessionsto open). - Catalog / price list available; stockable items need enough stock when policy blocks negatives.
Steps
- Open Point of Sale → Open Frontline POS (POS app
/). Layout follows the branch/terminal profile (retail, supermarket speed, restaurant, or services). - Select the terminal if prompted. Banner This device is pending trust approval blocks charge until approved.
- Confirm an open session. If none: open shift with opening float.
- Search or scan items into the cart. Adjust qty/price when permitted. Optional: customer, coupon, tip/service charge, sales rep (if sales_reps module requires it).
- Open payment: tenders such as Cash, Card, Gift card, Store credit, On account (as enabled on the terminal).
- Match tender amounts to the total (Charge stays disabled on card exceeds / cash short / missing gift-card or customer for credit tenders).
- Tap Charge. Online:
POST /pos/saleswith idempotency key. Offline: sale queues with an offline receipt number for later sync. - Use the receipt sheet to reprint or email.
Result
A completed POS sale: stock issued on settle for stockable lines, session cash/tender counters updated, GL posted per-sale or deferred to shift close (post_per_sale vs post_per_shift). Toast: Sale completed (or queued offline).
Hard stops
- No open session / inactive terminal / untrusted device.
- Empty cart; payments do not equal total;
no_payments. Insufficient stock; item sold out (86); capability not enabled on the POS profile.- On-account without customer, credit hold, or credit limit exceeded.
- Stale offline catalog snapshot — refresh before charging.