fteg-pos 9981yuzu Loyverse study wireframes — not a live till
How 9981Yuzu uses Loyverse today (from 9981beelongz), then the FTEG POS
screens that replace the till. Product tiles in mocks are FIXTURE only.
These frames are a plan — they do not record sales.
Source: /srv/www/9981beelongz (not 9981yuzu-bo-dev — no Loyverse code there).
Live till is still Loyverse. 9981 only syncs after the sale.
There is no coded “expo vs standing store” mode. Staff create an
event_lists row (expo EV0077, warehouse sale, or walk-in such as
WALK-IN-01 in receipt-PDF tooling). The cashier is bound to that event
for the calendar day.
| Loyverse category | 9981 treatment | FTEG POS implication |
|---|---|---|
| Bottles | SKU map → gg_inventory_logs (FIFO). Internal codes like TAT-YUZ-720. |
Stock-tracked. Later may issue via YMSB ERP channel API. |
| Cocktails / F&B | SKU map → gg_cocktail_inventory. Highballs, chu-hi, shots, OTR 90ml pours. |
POS revenue. Glass is not a bottle deduction unless mapped to an OTR SKU. |
| Bundles / gift packs | One Loyverse SKU expands via product_bundle. |
Need bundle lines on the receipt snapshot. |
| Gachapon RM99 | Fixed POS SKU 10137 / GAC-RM99. Prize assigned later in BO. |
Till sells the placeholder. Allocation is a BO screen, not checkout. |
| Modifiers | Stored on line_modifiers. Not used for SKU or price split. |
Show/store if Loyverse sends them; do not invent recipe logic. |
| Loyverse type / name | 9981 channel | FTEG POS (P2) |
|---|---|---|
| CASH | cash | Tender + change. Real money math. |
| NONINTEGRATEDCARD / CARD / Visa… | terminal_gateway | Staff taps “Card received” after the terminal. not captured |
| DuitNow / e-wallet / QR / OCBC | bank_transfer | Staff taps “QR / DuitNow received”. not verified |
9981 prefers payments[].name (e.g. “Duit Now ewallet”) over the generic API type (often OTHER).
[Public], no user_id.LOYVERSE_PUSH_MEMBERS=1.points_earned / balance) are synced for display only. They are not 9981 loyalty.REFUND receipt types are stored, then mostly filtered out. No clean reversal into 9981 orders or inventory.track_stock is unused. Sheets / gg_inventory_logs are the stock book after the event.Permission loyverse-pos. These are sync/audit tools, not a till.
| 9981 screen | URI | FTEG POS equivalent |
|---|---|---|
| Receipts / items | /loyverse-receipts | BO Transactions + reprint |
| Customers / items / categories / employees / payment types | /loyverse-* | BO catalog, staff, pay methods |
| Sales summary | /loyverse-sales-summary | BO reports |
| Export / push Google Sheets | /loyverse-export, /loyverse-push-sheets | CSV export + later ERP issue — not a second Sheets master |
| Receipt PDFs | /loyverse-receipt-csv | Till reprint + BO PDF |
| Gachapon allocations | /loyverse-gachapon-allocations | BO Gachapon (P4, 9981-only) |
| Cashier Event Binding | /loyverse-employee-event-bindings | Shift open → choose event / sale type |
| Event List P&L | Event module | Stays in 9981 / ERP. POS only tags event_id. |
| Fact | Source |
|---|---|
| Till described as Loyverse iPad | Yuzu sales-channel doc only |
| At least one POS device nicknamed “Cocktails” | config/loyverse.php pos_device_names |
| Thermal receipt exists as a PDF download, not ESC/POS | loyverse.receipt_thermal |
| Printer / drawer models | unknown — D3/D4 |
| ID | Screen | Who | Track | Purpose |
|---|---|---|---|---|
| T0 | Sign-in | All | P1 | Staff PIN / password. Rate-limited. |
| T1 | Open shift | Cashier+ | P2 | Opening float + event / sale type (replaces cashier-event binding). |
| T2 | Register | Cashier+ | P2 | Categories, search/SKU, grid, cart, hold. |
| T3 | Line edit | Cashier+ | P2 | Qty, note, variant. Modifier if present. |
| T4 | Discount | Manager+ | P4 | Authorized % or amount. Audit. |
| T5 | Guest / member | Cashier+ | P4 | Find by phone (preferred) or name. Attach only with phone / email / member id — never name alone. Default = walk-in. |
| T6 | Pay | Cashier+ | P2 | Cash / Card received / DuitNow received. |
| T7 | Cash tender | Cashier+ | P2 | Amount given, change due, confirm. |
| T8 | Receipt | Cashier+ | P2 | Done, reprint. Print = later (P5). |
| T9 | Held orders | Cashier+ | P2 | Park / recall same register. |
| T10 | Sales history | Cashier+ | P2 | Today’s sales, status, reprint. |
| T11 | Refund | Manager+ | P4 | Linked refund. Confirm. Stock rule explicit. |
| T12 | Close shift | Cashier+ | P2 | Expected vs counted, pay-in/out, discrepancy. |
| B1 | BO home | Manager+ | P2 | Today totals, open shift, sync status. |
| B2 | Catalog | Manager+ | P1 | Categories, products, barcodes. Fixture until migrate. |
| B3 | Transactions | Manager+ | P2 | Search, imported vs native label. |
| B4 | Shifts / reports | Manager+ | P2 | Cash, card recorded, DuitNow recorded. CSV. |
| B5 | Inventory ledger | Manager+ | P4 | Movements. No historical replay. |
| B6 | Staff & outlets | Owner | P1 | Roles, outlet access. |
| B7 | Migration | Owner | P3 | Preview, dry-run, recon. |
| B8 | Gachapon | Manager | P4 | 9981-only. Assign prize after RM99 sale. |
Offline banner, printer status, and kitchen tickets are P5 — not mocked as working.
Idempotency: Pay confirm is one write. Double tap returns the same sale.
No provider callback in P2. Status = recorded_external, not captured.
Imported Loyverse sales stay read-only until D12 is answered. Native sales only in first refunds.
Name search is for disambiguation only (two fixture “Kim”s). Attach is blocked until a row with phone or member id is selected. Try mock queries 0123456001 or Kim.
Do not pick the prize on the till. Matches today’s Loyverse + BO allocation.
Use the chips to walk the till. Fixture catalog only. Layout is iPad-landscape, touch-first, 9981-provisional amber + teal.
Staff sign-in
Rate-limited. Roles: owner / manager / cashier.
Replaces Loyverse cashier ↔ event binding for this day.
Audit log. Rounding rule still unset (D8). Mock only.
Search phone (best) or name. Attach needs phone / email / member id — name alone is not enough.
Try 0123456001 or name Kim (two people).
Cannot attach on name only. Select a row that has a phone or member id.
Name without phone cannot be saved. This is a fixture form — not a live CRM write.
Staff confirms after the guest pays on the physical terminal. FTEG POS does not capture the card.
Staff confirms after the guest pays. Not verified against the bank in P2.
Due
Given RM 50.00
Printer unproven (P5). Screen + PDF first.
Imported Loyverse rows cannot be refunded here until D12.
BO reports use KL business day. Imported Loyverse rows stay labelled. Event P&L remains in 9981 Event List during P2.
Mock catalog is fictional. Real 9981 SKUs enter via migration (P3) or a supplied item list — not by typing production names into demo tiles.
| Copy | Change | Drop / later |
|---|---|---|
| Fast category grid, barcode, cash change, receipt reprint, shift float | Event chosen on open shift (not a hidden cashier UUID binding) | Loyverse cloud printers until hardware is listed |
| Walk-in default; find by phone or name, attach only with phone/id | Payments labelled recorded vs captured | Loyverse points as 9981 loyalty |
| Gachapon sold as a placeholder SKU | Integer sen, line snapshots, idempotent pay | Google Sheets as the POS stock master |
| Bottle vs cocktail split | Migration with recon, not silent sync | Recipe / kitchen printer until confirmed |