Expand POS planning — discounts, returns, cash management, training mode, customer display, quick keys

This commit is contained in:
Ryan Moon
2026-03-30 19:15:13 -05:00
parent 07f199b69d
commit 89b412374a

View File

@@ -76,18 +76,88 @@ The POS terminal stays authenticated but locks between use. Staff unlock with a
This gives full audit trail (who did what) without the friction of typing credentials hundreds of times a day.
**Discounts & price overrides:**
- Line item discount (percentage or flat dollar amount)
- Whole-cart discount (e.g. 10% off everything)
- Price override with reason code (item rings up wrong, manual correction)
- Manager override: cashier attempts a discount or void above their permission level, manager punches their PIN to approve without taking over the session. Logged as "approved by [manager] for [cashier]"
- Configurable discount limits per role (e.g. sales associate can give up to 10%, manager up to 25%, admin unlimited)
**Parked carts / layaway:**
- Park a cart — customer wants to keep shopping or come back later
- Multiple parked carts, each tagged with customer name or account
- Retrieve a parked cart to resume the sale
- Layaway: park with a deposit, schedule remaining payments
- Auto-expire parked carts after configurable period (default: 7 days)
**Gift cards & store credit:**
- Sell a gift card (physical or digital, generates a unique code)
- Redeem gift card as payment method (scan or type code)
- Check balance
- Issue store credit (returns, adjustments) — tied to an account
- Store credit appears as a payment option when account is linked to the sale
**Returns:**
- With receipt: lookup transaction by receipt number or barcode, select items, refund to original payment method
- Without receipt: store credit only, capped amount (configurable), requires manager override
- Exchange: return + new sale in one transaction
- Restocking fee support (percentage or flat, configurable per category)
- Returned items: prompt for condition (resellable, damaged, defective) — updates inventory accordingly
**End of day / cash management:**
- **Open session:** cashier counts starting cash, enters amount, system records
- **Cash drops:** mid-shift safe drops, logged with amount and time
- **Close session:** two modes:
- *Counted close:* cashier counts the drawer, enters totals by denomination, system calculates over/short
- *Blind close:* cashier counts and enters total without seeing expected amount — prevents fudging
- **Z report:** end-of-day summary — gross sales, net sales, tax collected, payment method breakdown (cash, card, gift card, store credit), refunds, discounts given, over/short
- **X report:** mid-day snapshot (same data as Z but doesn't close the session)
- All reports printable on receipt printer
**Training mode:**
- Toggle per POS session — transactions don't hit real inventory or accounting
- Visually distinct: large "TRAINING MODE" banner across the screen, different background color
- Manager enables/disables via their PIN
- Training transactions are logged separately for review but don't affect reports or stock
**Customer-facing display:**
- Second screen (or portion of a split screen) showing the customer what's being rung up
- Line items, quantities, prices, running total
- Shows payment status ("Insert card", "Approved", "Change due: $4.25")
- Some jurisdictions legally require itemized display during transaction
- Configurable: on/off, which screen, store branding/logo
**Quick keys / favorites:**
- Configurable grid of frequently sold items (strings, picks, reeds, cables, lesson payments)
- Admin configures the grid layout (drag and drop in admin UI)
- Supports categories/tabs (e.g. "Accessories", "Lessons", "Repairs")
- Faster than searching — one tap to add to cart
- Can also map to common actions (open drawer, apply house discount, gift card sale)
**Receipts:**
- Thermal printer via ESC/POS (USB or network)
- Browser print fallback with receipt-formatted CSS
- Email receipt option (if customer has account with email)
- Text/SMS receipt (future, via email system)
- Configurable header/footer (store name, address, return policy, social media)
- Barcode/QR on receipt for easy return lookup
**Key screens:**
1. **Lock screen** — numeric keypad, current time, store name
2. **Sale screen** — product search (left), cart (right), totals + pay button (bottom)
3. **Payment screen** — amount due, payment method selection, card terminal status, change calculation
4. **Return/exchange screen** — lookup original transaction, select items, process refund
5. **Drawer management** — open session, cash drops, close session with counts
2. **Sale screen** — product search (left), quick keys (top), cart (right), totals + pay button (bottom)
3. **Payment screen** — amount due, payment method selection, card terminal status, change calculation, tip (optional)
4. **Return/exchange screen** — lookup original transaction, select items, refund method, condition prompt
5. **Parked carts** — list of held transactions, tap to resume
6. **Drawer management** — open session, cash drops, close session with denomination counting
7. **Reports** — X report, Z report, transaction history for current session
**Hardware integration:**
- Barcode scanner: keyboard wedge (types into focused input, no special API)
- Card reader: local network or USB terminal via Stripe Terminal SDK or Global Payments SDK
- Cash drawer: triggered via receipt printer (kick pulse) or USB relay
- Receipt printer: ESC/POS over USB or network, or browser `window.print()` with receipt-formatted CSS
- Customer display: secondary screen via `window.open()` or dedicated display API
- Scale (future): for items sold by weight
## 2.3 Floor App — `packages/floor`