POS and checkout
Ring sales, take tenders, and print receipts at /dashboard/platform/pos.
/dashboard/platform/pos is the checkout station (FastCheckoutStation) with the till, shift, corrections, refunds, receipts, and offline queue on the same page.
Ring a sale
Clock in and open the drawer
openEmployeeShift, then openRegisterSession with openingCashCents. An employee with a shift already open gets "Employee already has an open shift".
Start a cart
createPosCart for the register session and cashier. Optionally attach a customer or loyalty account.
Scan items
addPosCartLine by barcode or variantId with a quantity (fixed four-decimal string). Price comes from the store price book and tax from the store tax rate. Lines are changed with updatePosCartLine and removePosCartLine, which need the employee's manager PIN and a reason.
Apply promotions, rewards, and ID checks
applyPromotionToCart (promotion id or code), applyLoyaltyRedemptionToCart, and verifyRestrictedSaleAge for restricted products. See Restricted sales.
Take tender
completePosSale with one or more tenders. Methods: cash, credit_card, debit_card, mobile_wallet, gift_card, ebt_snap, fleet_card, house_account. Cash takes tenderedCents and returns change. Non-cash tenders carry paymentProviderId, providerPaymentId, providerAuthority, cardBrand, and cardLast4. "Cannot complete an empty cart".
Receipt
posSaleReceipt and the print page at /dashboard/platform/pos/receipt/[saleId].
Completing a sale posts stock from FIFO lots, posts cash, earns loyalty points, and writes the sale, lines, and tenders. To abandon a cart use transitionPosCart: "A reason is required to void or abandon a cart".
Offline queue
DurableOfflineQueue keeps register work when the connection drops. Devices are registered on Recovery; batches replay with recordOfflineReplayBatch. A payload is limited to 32 KiB.
Closing
Count and close from the same page. See Tills.