SolvexaRetail
Manual ยท Retail POS
All TopicsBack to app

๐Ÿ›’ Retail POS

Rings up walk-in sales ยท Works online or offline (Store install) ยท Same UI as scan-gun and touchscreen

Opening a shift

At start of day, a cashier opens the shift โ€” declares the opening cash float in the drawer. This is required before any sale can be posted (per-terminal setting).

  1. Go to POS โ†’ Shift Ops or click your name at top-right โ†’ Open Shift
  2. Enter opening cash count (โ‚น1,000 typical for a small store)
  3. Click Open. Terminal status turns green. You can now sell.
๐Ÿ’ก Cloud demo tenants have RequireShiftOpen=0 so you can sell immediately without opening. On-prem stores enforce shift open.

A basic sale

1Scan a barcode (works with USB scan guns or camera). OR click an item tile from the menu grid.
2Item drops into cart. Line shows: item name, unit price, qty (defaults to 1), tax rate, line total.
3Change quantity โ€” click the qty cell, type new value. Or use ยฑ buttons.
4Attach customer (optional) โ€” F4 or click Customer. Search by name/phone. Attaches to bill for loyalty + WhatsApp bill share.
5Press Enter or click Pay. Tender panel opens.
6Pick tender (Cash / Card / UPI / Wallet). Enter amount received. Change shown.
7Click Complete. Bill posts. Receipt prints (or opens for email/WhatsApp).

Discounts & promotions

Line discount

Click the line in cart โ†’ Discount button in function bar. Enter % or โ‚น amount. Applies to that line only.

Bill-level discount

Click Invoice Discount in function bar. Enter โ‚น off the total.

Automatic promotions

The 5 seeded promotions apply automatically when their conditions match:

Manage at POS โ†’ Promotions. Add/edit/expire.

Loyalty cards

SolvexaRetail Loyalty is a 3-tier program (Silver / Gold / Platinum). Points earned per โ‚น spent, redeemable โ‚น1 per point after 100 min balance.

1Attach customer to bill (as above)
2Points earned auto-calc based on tier multiplier (Silver 1ร— / Gold 1.5ร— / Platinum 2ร—)
3To redeem: at tender time, tick Use Points. System deducts points balance to reduce cash payable.

Enroll customer as loyalty member: Customers โ†’ search โ†’ Loyalty tab โ†’ Enroll. Card number auto-generated.

Split tender

Customer wants to pay โ‚น300 cash + โ‚น500 card? Easy:

  1. At tender screen, click Cash, enter โ‚น300, click Apply
  2. Then click Card, enter โ‚น500, click Apply
  3. Bill totals to โ‚น800. Click Complete.

Returns

1Go to POS โ†’ Sales Return or click Return Mode in function bar
2Search by receipt number or scan the original receipt's barcode
3Pick lines to return + quantity. Reason (Wrong Item / Damaged / Customer Change of Mind)
4Tender the refund back โ€” Cash / Card / Store Credit
5Credit note prints. Inventory reverses (ILE +qty). GL reverses (Dr Sales, Cr Cash).
โš  Return window per store setting (default 7 days). After that, Manager Auth required.

Suspend & resume

Customer forgot their wallet? Suspend the sale, serve the next customer, come back to it.

Reprint & email/WhatsApp

End of day (EOD) posting — deep dive

At close of business the cashier runs Day-End. Explanation of what actually happens under the hood:

What EOD posting does, step by step

  1. Cash count. Cashier enters the actual cash they counted in the drawer. System compares against Expected Cash = Opening Float + Cash Sales - Cash Refunds - Cash Payouts. Any variance is logged with a reason.
  2. Prepare summary. System groups every POSTransaction posted for that terminal + business date into a single POSDayEnd record: gross sales, item discount, invoice discount, promotion discount, tax collected (CGST/SGST/IGST split), tender totals per Cash/UPI/Card/Voucher, and refunds.
  3. Approve (optional). If your tenant has enabled EOD approval, the summary sits as Draft until a supervisor reviews and approves. Otherwise it goes straight to Posted.
  4. Post to GL. Clicking Close Day / Post fires sp_POS_PostDayEnd. It writes one GLBatch (numbered POS-000001, POS-000002, ...) containing the full double-entry set:
    • Dr Cash-in-Register (or Bank Deposit account) — total cash received
    • Dr Bank Merchant Account — total UPI/card received
    • Dr Voucher Redemption — total gift-voucher redeemed
    • Cr Sales Revenue — net-of-tax sales
    • Cr Output CGST/SGST/IGST — tax collected
    • Cr Discount Given — item + invoice + promotion discounts
    • Cr Cash Rounding Off — any rounding differences
    Dr always equals Cr — the trigger tr_glentry_enforcebalance refuses the batch otherwise.
  5. BOM explosion. For every hospitality menu item sold that has a BOM (Recipe), the raw ingredients are auto-decremented. E.g. selling 1 Butter Chicken deducts 200g chicken + 50g butter + 5g garam masala from stock via ItemLedgerEntry rows tagged 'Consumption'. This runs inline in sp_POS_PostDayEnd.
  6. Inventory relief. Non-BOM items are relieved from stock as individual ILE 'Sale' rows — QtyOnHand drops by the sold quantity per SKU.
  7. ARS transfers. If Auto-Replenishment (ARS) is enabled for the store, sold-through items are flagged for reorder from the HQ / warehouse.
  8. Dimension stamping. Every GLEntry row is tagged with the store's + terminal's default dimensions so P&L can slice by cost centre / branch afterwards.
  9. Modifier BOM deltas. Any menu modifiers used (e.g. "extra cheese" adds 20g cheese consumption) get the incremental BOM effect posted via sp_POS_ApplyModifierBOMDeltas.

What blocks EOD from posting

Reversing a posted EOD

Solvexa refuses to delete posted DayEnds directly (audit protection). To reverse:

  1. Go to POS → Day End → History. Pick the DayEnd to reverse.
  2. Click Reverse. Requires manager PIN. A reversing GLBatch is generated (all Dr/Cr flipped).
  3. Original DayEnd stays visible with status Reversed. New reversing batch is auditable in Finance → General Ledger.
  4. Re-run EOD after fixing the underlying transaction.
💬 Reports for the day become available in Insights → Retail Dashboard after EOD is Posted.
💬 Ask Saathi: "how does EOD posting work" · "why is my day-end not closing" · "how to reverse a posted day-end" · "what GL entries does day-end create"

Terminal Type โ€” Retail / Hospitality / Kiosk / Pharma

Every POSTerminal has a Terminal Type that determines which POS surface the launcher opens:

Set it at /POS/POSTerminal โ†’ edit terminal โ†’ Terminal Type dropdown โ†’ Save. The .bat launcher token routes to the right URL automatically when double-clicked. See the Pharmacy manual for the dedicated pharma POS.

One-click launcher (.bat)

Each terminal can be launched with ONE double-click. Cashier doesn't type login/password every morning โ€” the launcher auto-logs the assigned user in and lands directly on POS.

  1. /POS/POSTerminal โ†’ pick your terminal โ†’ click the purple ๐Ÿ“ฅ Silent-Print Launcher button. A file called Solvexa-POS-<code>-<token>.bat downloads.
  2. Save it to the terminal PC's Desktop.
  3. Make sure a user is bound to the terminal at /POS/TerminalAssignment. The launcher auto-logs in as that user.
  4. Double-click the .bat. Full-screen chromeless Edge/Chrome opens straight on POS. Cashier starts ringing sales.
  5. Exit kiosk with Alt+F4 (or Ctrl+W). Reopen with another double-click.
๐Ÿ’ก The filename has a 6-char fingerprint (e.g. Solvexa-POS-TERM-01-Kx7m2p.bat). If you Rotate the token, the new file has a DIFFERENT fingerprint โ€” instantly tells you which .bat is fresh vs stale.

Rotate the launcher token

If a POS PC is lost or a cashier is fired, invalidate the old .bat immediately:

  1. /POS/POSTerminal โ†’ pick the terminal โ†’ red ๐Ÿ”‘ Rotate Token button โ†’ confirm.
  2. Old .bat stops working AT ONCE. A new .bat auto-downloads.
  3. Redistribute the new .bat to any cashier PC that legitimately needs it.

Silent print (kiosk mode)

The launcher runs Chrome/Edge with --kiosk --kiosk-printing --user-data-dir=<isolated>. What that does:

๐Ÿ’ก Silent print needs a proper ESC/POS driver for your thermal printer. Windows' Generic / Text Only driver silently drops browser print jobs. Install XPrinter XP-80 or the vendor driver first, then set it as Windows Default. Notepad โ†’ print "TEST" should produce paper โ€” if it does, the POS silent-print works.

Session locks โ€” takeover prompts

POS enforces two locks across browser sessions to prevent accidental double-cashiering.

Terminal lock

Only ONE browser can own a specific terminal at a time. Open POSScreen for TERM-01 in a second browser and you'll see:

"This terminal is currently open on Chrome ยท Windows ยท 192.168.1.5 (since 18:04 UTC). Take over this terminal here?"

Staff lock (cross-terminal)

If the same cashier badge is swiped in at two terminals, the second swipe prompts:

"Rahul is currently signed in on Edge ยท Windows ยท 192.168.1.7 (since 14:32 UTC). Sign them out there and continue here?"

Release paths

๐Ÿ’ก All locks are fail-open: if the lock service is down, POS still opens. Never locks a whole store out because of an infra hiccup.

Hardware setup โ€” receipt printer, cash drawer, scale, scanner

Every POS terminal can be paired with peripherals. Configure once per terminal at POS → POS Terminal → edit terminal → Hardware tab, then all cashier stations that use that terminal inherit the setup.

Receipt printer setup

  1. Install the manufacturer's ESC/POS driver on Windows (XPrinter XP-80, Epson TM-T88, Star TSP143 all supported). Do not use Windows' Generic/Text Only driver — browser silent-print silently drops jobs through it.
  2. Set that printer as the Windows Default Printer. Notepad → type "TEST" → Ctrl+P should produce paper before you touch Solvexa.
  3. In Solvexa: POS → POS Terminal → edit. Set Has Printer = Yes. Toggle Prints Receipt on. Save.
  4. Use the .bat launcher instead of a plain browser tab — it opens Chrome/Edge with --kiosk-printing which routes window.print() straight to the default printer with no dialog.
  5. Test: ring one dummy sale, tender it, print the receipt. If paper doesn't come out, check Windows print queue for stuck jobs and confirm the driver is not Generic/Text Only.

Cash drawer

  1. Connect the cash drawer to the receipt printer via RJ11 (standard for all POS-grade printers).
  2. In Solvexa: POS Terminal → Has Cash Drawer = Yes. Save.
  3. Drawer opens automatically at the end of any sale that took a Cash tender (or was tendered via Split Tender including cash). It also opens on manual "No Sale" → Open Drawer from the action strip.
  4. If drawer doesn't kick: your printer driver may need "Open drawer on cut" enabled in its Windows properties.

Barcode scanner

Any USB or Bluetooth keyboard-emulation scanner works — no driver, no config. Point it at the POS scan box (which auto-focuses on cart-idle) and scan an item barcode; the SKU is looked up and added to the cart. Toggle Has Scanner on the terminal record purely for reporting/inventory.

Weighing scale

  1. Connect scale via USB (label-printing scales like DIGI SM-100 include a keyboard-emulation mode).
  2. Set Has Scale = Yes on the POS Terminal.
  3. Configure the scale's PLU field (item code) on Setup → Scale PLU Field so weight-on-label items are recognised.
  4. At POS, either scan the scale-printed label (PLU + weight) or press the item's tile and the cart picks up live weight from the scale for the quantity.

Customer display (2nd screen)

Solvexa supports a per-terminal secondary display for showing the customer the running total and UPI QR at pay-time. See POS Screen Design → Customer Display for the full setup (BroadcastChannel, dual monitor arrangement, UPI overlay).

💬 Ask Saathi: "how to set up POS printer" · "cash drawer not opening" · "how to add a scale to POS" · "silent print not working"

POS Button Designer — deep dive

The POS Screen you see the cashier tapping is built entirely from a per-terminal button grid you own. Add / remove / rename / reorder buttons without any code. Different terminals can have completely different button layouts.

What are POS buttons?

Each button on the POS grid maps to ONE of these actions:

Design a button layout

  1. Go to Setup → POS Design (or Admin → POS Screen Design). Pick your Menu Profile.
  2. Set Layout Mode: Retail Clean, Retail Full, Hospitality Grid, Kiosk Big, Pharmacy Batch, etc. Each mode picks a default column count and button size.
  3. Toggle Show Bottom Bar on/off. Show it for hospitality (Send KOT / Print Bill / Table Ops); hide it for kiosks.
  4. In the button grid, drag-drop buttons to reorder. Click a button to open its detail panel:
    • Label — text shown (icon + short text; long labels wrap).
    • Icon — emoji or path to an image asset.
    • Action — from the dropdown: item.add, item.category, cmd.discount, cmd.void, tender.cash, deal.apply, etc.
    • Payload — e.g. for item.add it's the SKU; for cmd.discount it's the % or amount; for deal.apply it's the DealCode.
    • Span — button size (1x1, 2x1, 2x2 for double-width or big kiosk tiles).
    • Colour — per-button colour for grouping (all Beverages green, all Desserts orange).
    • Manager Auth required — if on, tapping the button prompts for manager PIN before executing. Use for Discount, Void, Refund, Cancel Sale.
  5. Save. Refresh POSScreen — the new layout is live for every cashier bound to that terminal.

Sub-menus and popups

A Category tile can open a sub-menu of Item tiles. Nest as deep as you like. For hospitality menus, this is how you keep the top-level clean ("Mains", "Drinks", "Desserts") while each sub-menu holds 30+ items.

Terminal-specific layouts

Each POSTerminal record points to a MenuProfile. So Cashier-01 and Cashier-02 can share the same profile (identical buttons), while your Pharmacy terminal points to a completely different profile that shows batch + expiry entry fields instead of the standard beverage tiles.

💬 Ask Saathi: "how to add a POS button" · "how to rename a POS button" · "how to reorder POS buttons" · "make Discount button require manager PIN"

Offline mode (Store install)

The cloud demo needs internet. For real store deployment, install the Solvexa Store App on the shop's PC (see Setup Guide). Store App: