Skip to content

Sale Workspace

The Sale workspace (/point-of-sale/sale) is the primary interface for processing sales. It combines:

  • Product catalog (left panel) — browse and search items
  • Cart (right panel) — review, adjust quantities, apply discounts
  • Checkout modal — payment processing and receipt

POS Shell Navigation

Empty Sale Workspace

This section walks through the end-to-end sale in the order a cashier experiences it. Each step links to the corresponding screen and embeds the matching screenshot.

Step 1 — Open the Sale workspace and select store/lane

Section titled “Step 1 — Open the Sale workspace and select store/lane”

Situation: You are signed in and ready to start a new sale.

Steps:

  1. From the left rail, click Sale (or navigate to /point-of-sale/sale).
  2. If your store has more than one checkout lane, pick a lane from the top-bar selector. The lane binds this sale to a specific shift, drawer, and printer.
  3. Confirm the store chip in the top bar shows the right location (price list and catalog depend on it).
  4. The empty cart view appears on the right; the catalog on the left is ready for input.

Empty Sale Workspace

Tip: Multi-lane stores show a pos.laneRequiredBanner if you try to add items before picking a lane — pick the lane first, then continue.

Situation: The customer tells you what they want to buy. You need to build the cart quickly.

Steps:

  1. Search (top-bar): type product name, SKU, or barcode; press Enter or wait for debounce. Shortcut / focuses the search box.
  2. Scan a barcode (USB / camera / keyboard wedge) — the matching product is added automatically; quantity is +1 per scan.
  3. Tap a product tile in the catalog grid to add it.
  4. Quick pick (horizontal tiles above the grid) — the most-sold or pinned items, one tap to add.
  5. Long-press a tile to pin or unpin it from the quick-pick row.
  6. Adjust quantity with the + / − stepper on the cart line, or type the value directly.

Sale with Products in Cart

Tip: The system creates a separate cart line per pricing channel (Retail vs Wholesale). Switching channels after adding a product leaves the original line at its channel price — see Retail vs Wholesale Pricing.

Section titled “Step 3 — Attach a customer (optional but recommended)”

Situation: You want to apply a membership discount, earn loyalty points, or record the sale against a known customer.

Steps:

  1. Click the Select customer button in the top bar.
  2. Type the customer’s name, phone, or code in the modal (or scan their loyalty card).
  3. Click a row to attach the customer; the top-bar chip shows their name and the cart re-computes membership discounts.
  4. To detach, click the customer chip and choose Clear.

Sale with Customer Attached

Tip: Press F4 to jump straight to the customer search input from anywhere on the Sale screen.

Step 4 — Apply discounts, coupons, and promotions

Section titled “Step 4 — Apply discounts, coupons, and promotions”

Situation: The order qualifies for a promotion, or the cashier needs to apply a manual discount.

Steps:

  1. Automatic promotions — when a cart meets a Buy-X-Get-Y rule, a $0.00 reward line is added automatically. Look for the Promo or KM badge in the cart.
  2. Item-level discount — click the discount cell on a cart line to enter a percent or amount. This overrides the catalog price for that line only.
  3. Order-level discount — scroll to the totals section, click the Discount row, choose percent or amount.
  4. Coupon code — click the Coupon field, type the code (e.g. SAVE20), press Apply. The system validates expiry, minimum order, and customer eligibility.
  5. Membership discount — applied automatically once a customer with an active tier is attached in Step 3.

Tip: Stacking order is fixed: catalog discount → membership → order discount → coupon → tax. See Discount Stacking Order for the full diagram.

Situation: The customer is ready to pay.

Steps:

  1. Click the Pay button at the bottom of the cart panel.
  2. The payment modal opens with all configured tenders (Cash, Card, Check, Wallet; plus Debt in wholesale mode).
  3. Pick a tender and follow the per-method flow:
    • Cash — type the amount received, the system shows the change.
    • Card — click Send to terminal, the customer taps/inserts, wait for the green success indicator.
    • Check / Wallet / Debt — fill the requested reference fields and confirm.
  4. Review the order summary (lines, tax, totals). Add invoice details (tax ID, company, email) if a VAT receipt is required.
  5. Click Place order. The success screen shows the order number and the receipt prints automatically (or to the configured printer).
  6. From the success screen, click New sale to start the next order or Print receipt to reprint.

Payment Method Tabs

Cash Payment Modal

Payment modal with tax breakdown

Tip: A failed terminal connection shows a red indicator — keep the modal open, fix the terminal in Card Terminal settings, then retry without re-creating the cart.


┌─────────────────────────────────────────────────────────────┐
│ Top bar: Store | Lane | Search | Customer | Quick actions │
├─────────────────────────┬───────────────────────────────────┤
│ │ │
│ Catalog panel │ Cart panel │
│ - Quick pick tiles │ - Line items │
│ - Category tabs │ - Quantities │
│ - Product grid │ - Subtotal / Tax │
│ - Search results │ - Totals │
│ │ - Pay button │
│ │ │
└─────────────────────────┴───────────────────────────────────┘
  • Store: Required, determines catalog and prices
  • Lane: Required for multi-lane stores with shift tracking
  • Search bar: Type product name, SKU, or barcode (press Enter or wait for debounce)
  • Search mode toggle: Toggle between “Product name/SKU” and “Barcode only”
  • Keyboard shortcut: Press / to focus search
  • Button: “Select customer” (or shows selected customer name)
  • Opens: Customer search modal
  • Linked customer appears in cart with loyalty points, membership discounts

Sale with Customer Attached

  • Pinned items (star icon) — Access frequently sold products
  • Quick add (plus icon) — Create custom line or ad-hoc product
  • Menu (three dots) — Additional options
  • Horizontal scrollable row of product tiles
  • Shows recently sold or pinned items
  • Tap to add to cart
  • Long-press tile to pin/unpin
  • Horizontal tabs showing product categories
  • “All” tab shows entire catalog
  • Uncategorized items appear in “(No category)”
  • Active tab highlights in accent color
  • 2-4 columns depending on screen width
  • Each tile shows:
    • Product image (or placeholder)
    • Product name
    • Price (base unit price)
    • Stock indicator (if low/out of stock)
  • Tap product to add to cart

When search is active:

  • Grid shows matching products only
  • Clear search to return to category view

The Sale Workspace supports two pricing channels that affect how products are priced:

Located in the top toolbar (retail POS only):

  • Retail button (left) — Uses retail prices from product catalog
  • Wholesale button (right) — Uses wholesale prices from product catalog

Pricing channel toggle - Retail mode

Pricing channel toggle - Wholesale mode

When you switch channels:

  1. New cart lines added after switch use the selected channel’s price
  2. Existing cart lines remain at their original channel price
  3. Cart can contain mixed lines — some retail, some wholesale
  4. Wholesale lines show “Sỉ” or “WS” badge in cart

Example scenario:

1. Start in Retail mode
2. Add Product A (qty 2) → Uses retail price $10/unit
3. Switch to Wholesale
4. Add Product A (qty 5) → Creates NEW line with wholesale price $8/unit
5. Cart now has TWO separate lines for Product A:
- Line 1: 2 units @ $10 (retail)
- Line 2: 5 units @ $8 (wholesale)
FeatureRetail ModeWholesale Mode
Price sourceproduct.retail_priceproduct.wholesale_price
Stock checkRetail stockWholesale stock (if separate warehouse)
Cart badgeNone“Sỉ” or “WS”
Mixing✅ Can add wholesale lines✅ Can add retail lines
Line independenceEach line keeps its original channelEach line keeps its original channel

Retail (Lẻ):

  • Walk-in customers
  • Single-item purchases
  • Standard checkout
  • Consumer sales

Wholesale (Sỉ):

  • B2B customers
  • Bulk orders
  • Reseller purchases
  • Lower per-unit pricing

Important: If a product has no wholesale price configured, adding it in wholesale mode will:

  • Fall back to retail price
  • Show warning toast
  • Still add to cart (but at retail price)

For more advanced pricing, use Price Lists (dropdown next to pricing toggle):

  • Catalog price (default) — Uses product’s base retail/wholesale price
  • Named price lists — Applies custom pricing rules per customer segment

When price list is active:

  • Overrides both retail AND wholesale prices
  • Shows selected price list name in toolbar
  • Can be combined with pricing channel

Each line shows:

  • Product name (with variant info if applicable)
  • Pricing channel badge — “Sỉ” or “WS” for wholesale lines
  • Quantity stepper — increment/decrement or type value
  • Unit price — editable (if seller override allowed)
  • Line total — auto-calculated
  • Remove button (trash icon)

Per-unit items (weighted, measured):

  • Shows quantity in lb, kg, or custom unit
  • Editable quantity field
  • Auto-calculates line total

Promotional items:

  • Badge: “KM” (Vietnamese) or “Promo” (English)
  • Auto-added when promotion conditions met
  • Price locked (cannot be edited)
  • Displays trigger rule: “Buy 2, get 1 free” etc.
  • Automatically removed if trigger items removed from cart

Bottom of cart panel shows:

  • Subtotal — Sum of all line totals before tax/discount
  • Item discounts — Catalog-level discounts configured per product
  • Membership discount — Applied when customer is attached
  • Discount — Order-level discount (manual or coupon)
  • Coupon — Coupon code discount (if applied)
  • Tax — Calculated based on store settings (e.g., 9.15% sales tax)
  • Total — Final amount to collect

Cart with mixed taxable and non-taxable items

Tax calculation:

  • Only applies to taxable products (configured per product)
  • Non-taxable items (e.g., groceries, medicine) excluded from tax base
  • Tax rate set at store level (typically 9.15% for most locations)
  • Calculated on subtotal after item discounts

Example:

Milk (taxable): $5.00 × 1 = $5.00
Bread (non-tax): $3.00 × 2 = $6.00
Subtotal: $11.00
Tax (9.15% on $5.00): $0.46
Total: $11.46

The POS supports multiple types of discounts that can be combined:

Configured by: Admin in product settings
Applied: Automatically when product added to cart
Display: Shows in cart totals under “Item discounts”

Types:

  • Percentage discount — e.g., 10% off (reduces unit price by %)
  • Fixed amount — e.g., $2 off per unit
  • Promotional price — Item marked with “Promo” badge in catalog

Calculation:

Line with 10% item discount:
Unit price: $10.00
Item discount: -$1.00 (10%)
Effective price: $9.00/unit
Quantity: 3
Line total: $27.00

Cart display:

  • Shows under “Item discounts” in totals section
  • Each affected line shows discount per unit
  • Promotional items display “Promo” badge

Configured by: Cashier at checkout
Applied: Manually via discount field or auto-applied via promotion
Display: Shows as “Discount” in cart totals

Entry methods:

  • Click Discount field in cart panel
  • Enter amount or percentage
  • Applies to entire order subtotal

Calculation:

Order discount (10%):
Subtotal (after item discounts): $100.00
Order discount: -$10.00 (10%)
Subtotal after discount: $90.00

Permissions:

  • Store settings control if cashier can edit discount
  • If disabled, shows message: “Store settings do not allow changing the order discount”

Configured by: Admin in marketing/promotions
Applied: Customer provides code, cashier enters
Display: Shows as “Coupon” in cart totals with code name

How to apply:

  1. Customer provides coupon code (printed, email, SMS)
  2. Click Coupon field in cart panel
  3. Enter code (e.g., SAVE20, SUMMER10)
  4. Click Apply
  5. System validates:
    • Code exists and active
    • Not expired
    • Minimum order met
    • Customer eligible
  6. Discount applied, shows “Coupon applied” toast

Coupon types:

  • Percentage off — e.g., 20% off entire order
  • Fixed amount — e.g., $10 off order
  • Free shipping — Removes delivery fee
  • Buy X Get Y — Auto-adds reward items (see Promotions)

Validation errors:

  • ❌ “Code not found” — Invalid or expired code
  • ❌ “Minimum order not met” — Order below threshold
  • ❌ “Already used” — Single-use code already redeemed
  • ❌ “Not eligible” — Customer restrictions

Removing coupon:

  • Click Clear button next to coupon field
  • Or remove discount field entirely

Configured by: Admin in promotions
Applied: Automatically when conditions met
Display: Auto-added lines with “Promo item” badge

How it works:

  1. Customer adds trigger items to cart (e.g., 2 units of Product A)
  2. System checks promotion rules:
    • Buy 2, get 1 free (same item)
    • Buy 2 Product A, get 1 Product B free
  3. Reward line auto-added to cart:
    • Shows “Promo item” badge
    • Price set to $0.00 (locked)
    • Note: “Promotion (auto-added)”
    • Quantity matches reward rule
  4. If trigger items removed, reward lines auto-removed

Example — Buy 2 Get 1 Free (Same Item):

Cart:
├─ Product A (qty 2) @ $10 = $20.00 ← Trigger
└─ Product A (qty 1) @ $0.00 [Promo] ← Auto-added reward
Note: "Buy 2, get 1 free (same item)"

Example — Buy 2 Get Different Item:

Cart:
├─ Product A (qty 2) @ $15 = $30.00 ← Trigger
└─ Product B (qty 1) @ $0.00 [Promo] ← Auto-added reward
Note: "Buy 2, get 1 free — Product B"

Promotion badge in catalog:

  • Products in active promotions show “Promo” badge
  • Hover shows rule: “Buy 2, get 1 free”

Toast notification:

  • When reward auto-added: “Added 1 promotional line to the cart”

Receipt display:

  • Promotional items print with note: “+1 free (promo)” or “+1 Product B (free)”

Configured by: Admin in customer/membership settings
Applied: Automatically when customer attached to sale
Display: Shows as “Membership discount” in totals

How it works:

  1. Cashier selects customer (click Select customer button)
  2. If customer has active membership:
    • Membership tier discount applied (e.g., Gold = 5% off)
    • Shows in cart totals
  3. Discount applies to subtotal after item discounts

Calculation:

Membership discount (Gold tier, 5%):
Subtotal: $100.00
Membership discount: -$5.00 (5%)
Subtotal after membership: $95.00

When multiple discounts apply, calculation order is:

1. Item-level catalog discounts
↓
2. Subtotal (after item discounts)
↓
3. Membership discount (% of subtotal)
↓
4. Order-level discount (manual)
↓
5. Coupon discount
↓
6. Subtotal (after all discounts)
↓
7. Tax calculation
↓
8. Final total

Example with all discounts:

Line 1: Product A (qty 2) @ $10, 10% item discount
→ Line total: $18.00 (after $2 item discount)
Line 2: Product B (qty 1) @ $50, no item discount
→ Line total: $50.00
Subtotal: $68.00
Membership discount (5%): -$3.40
→ Subtotal: $64.60
Order discount (10%): -$6.46
→ Subtotal: $58.14
Coupon ($5 off): -$5.00
→ Subtotal: $53.14
Tax (8%): +$4.25
→ Final total: $57.39

IssueCauseSolution
Cannot edit discount fieldStore setting disabledAsk manager to enable in settings
Coupon code rejectedInvalid/expired codeCheck code spelling, expiration
Coupon “minimum not met”Order below thresholdAdd more items or remove coupon
Promotional item not addedTrigger quantity not metAdd required trigger items
Promotional item removedTrigger items removedRe-add trigger items
Membership discount not showingCustomer not attachedSelect customer in top toolbar
Wrong discount amountMultiple discounts stackingReview totals breakdown

Below cart lines:

  • Subtotal — sum of line totals before tax
  • Tax — calculated tax at 9.15% (default rate, configurable per store) applied only to taxable items
  • Discount — total discounts (catalog + coupons)
  • Grand total — final amount payable

Payment modal with tax breakdown

Tax breakdown details:

  • Expand “View tax breakdown” for detailed tax summary by rate
  • Shows taxable amount and tax per rate (e.g., “9.15% on $50.00 = $4.58”)
  • Receipt displays tax amount and rate clearly

Tax configuration notes:

  • Tax rate is set per store in Admin Panel → Store Settings → Tax
  • Products are marked as taxable/non-taxable individually
  • Tax-exempt customers can be flagged to skip tax calculation
  • Send to WBS — Send order to Warehouse Pick Board (appears above Pay button)
  • Clear cart — Remove all lines (confirmation required)
  • Save draft — Save cart as named draft for later
  • Pay — Open checkout modal

Send to WBS workflow: When you need warehouse staff to pick items before completing the sale:

  1. Add items to cart
  2. Click “Send to WBS” button (located above Pay button in cart panel)
  3. Order is immediately queued on Warehouse Board
  4. Cart clears, ready for next customer
  5. Toast confirms: “Order sent to warehouse pick board”
  6. Warehouse staff sees order and picks items
  7. When ready, complete checkout from Orders page

Sale with Products in Cart

  1. USB scanner (HID): Scans directly into focused search input
  2. Camera scan: Click camera icon → inline webcam scanner (requires permission)
  3. Keyboard wedge: Desktop app listens for global barcode input events

When barcode detected:

  • EAN-13/UPC: Exact match lookup in catalog
  • Code128: SKU or custom barcode match
  • Weighted barcode (internal format): Extracts PLU + weight, adds to cart with embedded quantity
  • Price-embedded barcode: Extracts price, overrides catalog price

If product not found:

  • Shows “Product not found” toast
  • Search input clears
  • Can manually add via Quick Add

Click Pay button in cart (bottom of cart panel)

Blocked scenarios:

  • Empty cart → Pay button disabled
  • Missing store/lane → Banner blocks checkout
  • Debt limit exceeded (linked customer) → Warning modal, can override or cancel

Payment modal displays available options based on store configuration and order context:

The system displays these payment methods (emoji and label):

Payment MethodDisplayIconWhen AvailableUse Case
Cash“Cash”💵AlwaysPhysical currency payment
Card“Card”💳AlwaysCard terminal (PAX/CodePay)
Check“Check”📝Retail & WholesaleBank check payment
Wallet“Wallet”👛Retail & WholesaleE-wallet/digital payment
Debt“Debt”📒Wholesale onlyOn-account credit (B2B)

Counter/POS sales (this workspace):

  • Retail mode: Cash, Card, Check, Wallet
  • Wholesale mode: Cash, Card, Check, Wallet, Debt (when store config allows)

Delivery orders (created from separate flow):

  • Cash → labeled “COD” (Cash on Delivery)
  • Card → labeled “Remote Card Payment”
  • Plus Check, Wallet, Debt for wholesale

Note: The “Debt” payment method (on-account credit) is only available in wholesale B2B flows and requires customer with credit limit. Retail counter sales do not show this option.

  1. Select Cash tab (💵)
  2. Enter amount received from customer
  3. System calculates change due automatically
  4. Click Complete payment

Quick cash buttons:

  • Preset denominations (10,000 / 20,000 / 50,000 / 100,000 / 500,000)
  • Click to auto-fill received amount
  • Shows change calculation in real-time

Change calculation:

Received: 500,000 ₫
Total: 478,500 ₫
Change: 21,500 ₫ ← Displayed prominently

Keyboard shortcut: Ctrl + P to open payment modal

Cash Payment Modal

Payment method overview:

Payment Method Tabs

The payment modal shows all available methods as tabs with icons. Retail counter sales show Cash, Card, Check, and Wallet. Wholesale mode adds Debt for B2B customers.

  1. Select Card tab (💳)
  2. Click Send to terminal
  3. Terminal displays amount
  4. Customer taps/inserts card
  5. System waits for terminal response

Terminal status indicators:

  • 🔵 Connected — Terminal ready
  • 🟡 Processing — Waiting for customer action
  • 🟢 Success — Payment approved
  • 🔴 Failed — Payment declined or terminal error

Terminal models supported:

  • PAX A920 (Android terminal)
  • CodePay terminals (Vietnam market)

Troubleshooting:

  • Terminal not responding → Check USB/network connection
  • Payment timeout → Cancel and retry
  • Declined card → Ask customer for alternate payment

See Card Terminal Setup for configuration.

  1. Select Check tab (📝)
  2. Enter check number or reference
  3. Optional: Record bank and check details
  4. Click Complete payment

Use case: Customer pays with bank check; cashier records check details for deposit.

Note: Payment marked as completed immediately; check clearing happens during bank reconciliation.

  1. Select Wallet tab (👛)
  2. Customer scans QR code or shows payment confirmation
  3. Enter wallet transaction ID or reference
  4. Click Complete payment

Supported wallets (Vietnam market):

  • MoMo
  • ZaloPay
  • VNPay
  • ShopeePay
  • Other digital wallets

Use case: Customer completes payment in their mobile wallet app, cashier records the transaction reference.

Debt payment (On-account credit — Wholesale only)

Section titled “Debt payment (On-account credit — Wholesale only)”
  1. Select Debt tab (📒)
  2. System validates customer credit limit
  3. Order amount added to customer account balance
  4. Click Complete payment

Requirements:

  • Customer must be attached to the order
  • Customer must have available credit limit
  • Wholesale mode must be enabled

Blocked scenarios:

  • Credit limit exceeded → Warning modal, cannot proceed
  • No customer attached → Debt option disabled
  • Retail mode → Debt option not shown

Use case: B2B wholesale customers with approved credit terms can place orders on account. Balance tracked in customer ledger.

For orders paid with multiple methods (e.g., partial cash + card):

  1. Click Split payment toggle
  2. Add first payment method → Enter partial amount
  3. Click Add another payment
  4. Select second method → System shows remaining balance
  5. Complete each payment in sequence

Example:

Total: 1,500,000 ₫
Payment 1: Cash 500,000 ₫
Payment 2: Card 1,000,000 ₫

Limitations:

  • Maximum 3 payment methods per order
  • Cannot split within same method (e.g., two cash payments)
  • Card terminal must support partial amounts

Requirements:

  • Customer must be attached to sale
  • Customer has available credit limit
  • Store allows debt payments
  1. Select Debt tab
  2. Shows customer’s current balance and available credit
  3. Click Bill to customer
  4. Order completes, balance added to customer’s debt

Debt limit check:

  • Blocks checkout if current_debt + order_total > credit_limit
  • Manager override available with password

Settlement: Customer pays down debt via Customers page → Record payment.

Additional payment methods (if configured):

  • Momo — Vietnamese mobile wallet
  • ZaloPay — Vietnamese mobile wallet
  • VNPay QR — QR code payment

Process similar to bank transfer: show QR code, customer scans and pays, cashier confirms.

After payment method selected:

  1. Review order summary:

    • Line items, quantities, prices
    • Tax breakdown
    • Payment method(s) and amounts
  2. Add invoice details (optional):

    • Customer name (if not already attached)
    • Tax ID for VAT invoice
    • Company name and address
    • Email for receipt delivery
  3. Click Place order button

Final validation:

  • Inventory check (if stock tracking enabled)
  • Payment amount matches total
  • Required fields completed

Shows:

  • ✅ Order number (e.g., #POS-2024-00123)
  • Total paid and change due (cash payments)
  • Payment method summary
  • Receipt status (printed/failed)

Actions:

  • New sale — Clear cart, start next order
  • Print receipt — Reprint if auto-print failed
  • Email receipt — Send to customer email

Auto-print (default):

  • Receipt prints to configured printer immediately
  • If printer offline, shows error + manual print option

Manual print:

  • Click Print receipt button in success screen
  • Or from Orders page → Order detail → Print

Receipt includes:

  • Store name, address, tax ID
  • Order number and timestamp
  • Line items with quantities and prices
  • Tax breakdown per item (9.15% on taxable items)
  • Total tax line (sum of all item taxes)
  • Payment method(s)
  • Change due (cash)
  • Cashier name
  • Invoice barcode (Code128 format, not EAN-13)

Receipt with tax breakdown and barcode

Tax display on receipt:

──────────────────────────────────
Organic Valley Milk x1 $4.99
Tax (9.15%) 0.46
Sourdough Bread x1 $5.49
No tax 0.00
──────────────────────────────────
Subtotal $10.48
Tax $ 0.46
Total $10.94
──────────────────────────────────
Invoice: [Code128 Barcode]
#A00001
──────────────────────────────────

Barcode format note:

  • Uses Code128 (not EAN-13) for compact client order ID
  • Scannable for returns, lookups, and office reconciliation
  • Printed below totals for easy scanning

Receipt transparency:

  • Each taxable item shows tax calculation
  • Non-taxable items labeled “No tax”
  • Total tax summarized at bottom
  • Complies with sales tax reporting

Receipt with tax breakdown

Printer troubleshooting:

  • No print → Check printer connection in Settings
  • Wrong format → Verify printer model (ESC/POS vs. StarPRNT)
  • Paper jam → Open printer, clear jam, retry

If no internet connection:

  1. Checkout proceeds normally
  2. Order saved to local outbox queue
  3. Receipt prints with “(Offline - pending sync)” note
  4. Syncs automatically when connection restored

Outbox status:

  • View pending orders in Settings → Local Data
  • Manual sync: Click “Sync now”
  • Failed sync → Retry or contact support

Limitations in offline mode:

  • Cannot validate promotional pricing
  • Card terminal requires connectivity (cash/debt only)
  • Customer credit limit not enforced (warning shown)
  1. Search for original order (by invoice barcode or customer)
  2. Open order detail modal
  3. Click “Return” → Return flow (see Returns)
  1. Click “Drafts” panel toggle (below cart)
  2. Select draft from list
  3. Draft lines load into cart
  4. Continue editing or pay
  1. Click Quick Add (plus icon) → “Custom item”
  2. Enter name, price, quantity
  3. Select tax treatment
  4. Add to cart
KeyAction
/Focus search input
Ctrl + POpen payment modal (checkout)
F2Complete cash payment (when in payment modal)
EscapeClear search / close modal
EnterSubmit search / confirm modal
F3Focus search (alternative)
Scan codeAdds product to cart (if USB scanner connected)

Cause: Stock check failed or product inactive Solution: Check product status in Items, verify stock if tracking enabled

Causes:

  • Empty cart
  • Store not selected
  • Lane not selected (multi-lane store)
  • Work shift required but not open

Solution: Address the blocking condition, banner message explains what’s needed

Cause: Wrong store selected, or price list mismatch Solution: Verify store selector, check product price in Dashboard → Catalog