1 below-floor approval pending: Kedai Pak Din — Kopi Cik Abang @ 2.80 (floor 3.00). The sale line is locked; staff cannot confirm it until the owner decides.
✓ Approved once by Leo Lim · 07 Jul — the 2.80 line on draft RS-26-042 is unlocked; staff can confirm the sale. Floor stays 3.00 (only an owner edit in Sell → Price lists moves it).
Rejected by Leo Lim · 07 Jul — line stays locked; staff must raise to ≥ 3.00 or drop the line. Note:
Floor & list pricesSHARED TABLE — the exact same variant_prices as Sell → Price listsnot a retail copy: one floor per product, set once by the owner, enforced identically on OEM SOs and retail sales
Retail customer price memory— same memory engine as OEM, scoped to customers with channel retail / both; auto-fills their next sale
Customer
Product
Last paid
Band (min–max)
Orders
Last order
Flag
MYR
—
Project Gaia — static mockup in Filament v3 idiom. No backend. Retail module; customer data shared with OEM underneath (channel-flagged), screens separated. The Double Root RM 5–8 band is the founder's real example; OEM price memory (Roy KL Trading, Yes Global, …) lives in Sell → Price lists over the same tables.
Retail price lists — field manifest
Field
Filament component
Type
Source
FK target
Floor / List price
TextColumn (read-only here; TextInputColumn owner-only in Sell)
money
stored: variant_prices (variant_id, floor_price, list_price) — ONE shared table, no retail copy. Same rows Sell → Price lists edits
variants.id
Price memory (last paid / band)
Table, derived
derived
customer+variant last price and min–max band from sale history (OEM SO lines + retail sale lines feed the same memory); THIS VIEW scoped to customers.channel ∈ {retail, both}
customers / variants
Flag
Badge, derived
derived
BELOW FLOOR when price < variant_prices.floor_price — the lock is IDENTICAL to OEM: line cannot be confirmed by non-owner roles
variant_prices
Pending approval banner
Banner + Actions (owner role)
stored
approval_requests — same flow as Sell; "Approve once" clears that sale line only, the floor itself is untouched. outcome: status approved_once / rejected, decided_by, decided_at — approving once never edits variant_prices
approval_requests
Engine notes
Shared-data doctrine: ONE customers table (channel enum oem / retail / both) and ONE variant_prices table — data shared, views scoped. What separates Retail from Sell: screens, numbering series (RS- vs SO-), CRM shape (book vs pipeline), e-invoicing path (consolidated vs per-order).
Floor enforcement is a policy, not a warning — below-floor lines lock and notify the owner in both channels. There is no "retail discount" backdoor.
Approving 2.80 once does not move the 3.00 floor; only an owner edit in Sell → Price lists changes variant_prices.
Approve below-floor price once?
Kedai Pak Din — Kopi Cik Abang / 2023-01 @ 2.80 MYR. Floor 3.00 · band 2.80–3.50 · last paid 3.20. Unlocks the locked line on draft sale RS-26-042 ONLY. The 3.00 floor in variant_prices is untouched — the next 2.80 attempt locks again.
Owner action — recorded against Leo Lim
Reject below-floor price?
Kedai Pak Din — Kopi Cik Abang / 2023-01 @ 2.80 MYR. Floor 3.00 · band 2.80–3.50 · last paid 3.20. Unlocks the locked line on draft sale RS-26-042 ONLY. The 3.00 floor in variant_prices is untouched — the next 2.80 attempt locks again.