Point of Sale
The Point of Sale (POS) turns a browser on a counter computer or tablet into a cash register. Cashiers unlock it with a personal 6-digit PIN, ring up products and services, take payment, and print or email a receipt. Every completed sale becomes a paid invoice with its payments, and stock is updated at the branch.
Point of Sale is part of the Pro plan. See Plans & Add-ons.
The Point of Sale section of the sidebar has three pages:
| Page | Purpose | Permission |
|---|---|---|
| POS Console | The register screen, at /pos |
pos.access |
| Reports | Sales, payments, taxes, discounts, and shifts. See POS Reports. | pos.view_sales |
| Time cards | Staff clock-ins and hours. See Time Cards. | pos.manage_time_entries |
Before you start
Section titled “Before you start”An admin needs to set up three things. See Point of Sale Settings for each step.
- A branch with POS turned on, with at least one active register.
- Cashiers with POS access, the branch assigned, and a POS PIN.
- Products to sell, with prices, tax rates, and stock at the branch.
Open the register
Section titled “Open the register”- Open POS Console. The register opens full screen.
- Choose your store and Choose your register. Either step is skipped when there is only one choice, and your last choice is remembered on this browser.
- In Unlock register, pick the Register operator (when there is more than one) and enter your 6-digit PIN.
- If an admin gave you a temporary PIN, choose a new one.
- If the branch uses the time clock, you can Clock in before you Start selling. See Time Cards.
Five wrong PINs lock that PIN for 15 minutes. After 15 idle minutes the register locks itself; the current sale stays in place until you unlock again. To switch cashiers, click Lock and unlock as the other operator.
The header shows the store and register, whether a shift is open, the operator, and an Online/Offline indicator. The register needs a connection to sell; it does not queue sales offline. If the connection drops while you complete a sale, the register checks the server and recovers the sale instead of charging twice.
Shifts and the cash drawer
Section titled “Shifts and the cash drawer”When the branch has Require an open shift on, the register asks you to open a shift before selling.
- Open shift: count the cash in the drawer and enter it as Opening cash. The currency you choose is locked for the whole shift.
- Cash movement: record Paid in or Paid out cash during the shift, with a reason.
- Current shift report: a printable summary of the shift so far.
- Close shift: count the drawer and enter Counted closing cash. Workstation produces the final closing report.
These actions are in the More actions menu. The shift report shows opening cash, cash sales and refunds, paid in and out, gross sales, discounts, taxes, expected cash, closing cash, the difference, and a breakdown by payment method. With Blind cash close on, expected cash and the difference are hidden from cashiers without pos.view_expected_cash, so they count the drawer without knowing the target.
Ring up a sale
Section titled “Ring up a sale”Search by name, SKU, or barcode, or tap a tile. Barcode scanners type straight into the search box. Products with variants ask you to pick one, unless you scanned the variant’s own barcode.
By default the catalog has All, Products, Services, and Memberships tabs. Admins can design a custom layout of up to three tabs of tiles for the branch.
In the Current sale panel:
- Change quantities with + and −. The trash button removes a line, with Undo.
- Items sold by weight (for example kg or lb) ask for the weight when you add them. Each weighing is its own line. A scale barcode printed by a deli or produce scale adds the item with its weight or price already filled in.
- Open prices: authorized operators can type a different unit price when the branch allows it.
- Stock warnings show Out of stock or how many are short. What happens when you charge depends on the branch’s Negative stock setting.
- Pick the customer with the customer button. Leave it as Walk-in customer if the branch allows walk-in sales, or create a new client.
On phones and tablets, the cart opens as a sheet from View cart.
Discounts
Section titled “Discounts”- Choose a preset discount for one line or for the whole sale (the Cart discount).
- Choose Custom to enter a percentage or fixed amount, with an optional reason.
Some presets need Manager approval, and so does a custom discount from someone without pos.approve_override. A manager assigned to the branch enters their email and POS PIN to approve that exact cart once. Presets that don’t allow combining can’t be used with other discounts.
Held tickets
Section titled “Held tickets”Use Hold to park a sale and serve the next customer. Give the ticket a name, such as a table or a pickup spot. If the branch has predefined ticket names, they appear as chips, and names already in use are disabled.
Held tickets in the header lists open tickets at the branch. You can Resume a ticket, merge it into another one, move it to another register at the same store, or delete it. Prices, tax, stock, and approvals are checked again when a ticket is resumed.
Take payment
Section titled “Take payment”Click Charge. The Take payment screen shows the amount due and, when set up for the branch:
- Sale details: invoice fields the branch asks cashiers to fill in. Required ones must be filled before completing.
- Tip: the branch’s suggested percentages, or a custom amount.
- Loyalty rewards: redeem the customer’s points for a reward. See Client Loyalty.
- Gift card or store credit: enter a gift card code and click Check, or Use store credit. See Gift Cards.
- Cash rounding, when the whole sale is paid in cash and the branch rounds cash.
Choose the Payment method. For cash, enter the amount tendered (or tap a quick amount) to see the change due. Use Split payment to add several tenders. A sale can stay partly unpaid only when the branch allows Partial payments. Click Complete sale.
What a sale creates
Section titled “What a sale creates”- A paid invoice (or open, if partly paid) numbered with the branch’s receipt prefix, for example
MAIN-000123. - One payment per tender. Gift card and store credit balances are reduced.
- Stock movements at the branch.
- A membership, if one was sold.
- Loyalty points earned or redeemed.
- Journal entries, when Accounting is enabled.
On a contact’s record, POS sales are listed separately from other invoices.
Receipts
Section titled “Receipts”After a sale, Sale complete shows the receipt with Print, Email, and New sale. Receipts include the branch details, VAT and CR numbers, items, taxes, tenders, change, and the ZATCA QR code when ZATCA is connected. To email, leave the address blank to use the customer’s saved email.
Receipts print through the browser on 58 mm, 80 mm, or 4-inch paper, set per branch.
Returns and voids
Section titled “Returns and voids”Open Sales from the More actions menu to see recent sales. Cashiers see their own sales unless they have pos.view_all_sales. From a sale you can Reprint, Email, Return, or Void sale.
- Return credits everything still returnable, restocks it where inventory is tracked, and refunds the original payment methods. It needs a reason and an open shift. Workstation creates a credit note linked to the original invoice.
- Void sale reverses the sale and restores stock. It is only possible during the sale’s original shift, before anything is returned, and not while ZATCA is connected. After the shift closes, use a return.
Gift card and store credit payments go back onto the original card.
Permissions
Section titled “Permissions”POS permissions are checked twice: against the signed-in user and against the operator who unlocked the register with their PIN. The operator also needs POS access and the branch assigned.
| Permission | Allows |
|---|---|
pos.access |
Open the POS Console |
pos.sell |
Ring up and complete sales |
pos.view_sales / pos.view_all_sales |
See own sales and POS Reports / see everyone’s sales |
pos.view_customers / pos.create_customers |
Find customers / create new clients at the register |
pos.hold_ticket / pos.manage_all_held_tickets |
Hold tickets / manage and reassign any cashier’s tickets |
pos.apply_discount / pos.override_price / pos.approve_override |
Apply discounts / enter open prices / approve manager-only discounts |
pos.sell_negative_stock |
Sell past zero stock when the branch requires authority |
pos.return, pos.refund, pos.void |
Return, refund, and void sales |
pos.open_shift, pos.view_shift, pos.close_shift, pos.cash_movement |
Run shifts and the cash drawer |
pos.view_expected_cash |
See expected cash with blind cash close on |
pos.reprint_receipt / pos.send_receipt |
Reprint / email receipts |
pos.time_clock / pos.manage_time_entries |
Clock in and out / view and correct time cards |
pos.manage_settings, pos.manage_devices, pos.manage_layout, pos.reset_member_pin |
Manage branch POS settings, registers, the register layout, and PINs |
By default, Managers have every POS permission except managing settings, registers, and the layout. Users can sell, hold tickets, apply discounts, run shifts and the cash drawer, view their own sales, and reprint or email receipts.