Expand POS planning — discounts, returns, cash management, training mode, customer display, quick keys
This commit is contained in:
@@ -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`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user