Customer preselect = hint only. The app can show a cart, but barista selection is the source of truth .
Amount reveal after confirm. Barista App hides the numeric discount until staff confirm the actual items.
Open app → Show QR. (Optional: customer preselects items; used only to prefill hints.)
At counter: shows rotating QR to barista.
Pay: barista applies discount in POS, customer pays cash or card.
Feedback: app shows “You saved X lei”; counters update.
Open Merchant Barista App → select actual products ordered (tiles mapped to product groups; choose size; optional price override).
Tap Check eligibility → Barista App asks to scan QR (rotating, short-lived).
Scan QR → server validates (plan/tier, caps, cooldowns, store eligibility, price floor, per-item cap).
Decision only (no amount yet): “CAN APPLY under Launch Pass / Explorer / Paid.”
Tap Confirm apply → Barista App reveals amount (e.g., “Apply –3.20 lei — 20% capped 4”).
Apply in POS (amount or %) → take payment → Barista App commits redemption; counters decrement.
Why this order: prevents “amount shopping,” ensures items & prices match what’s actually sold.
If store price differs from reference, price override keypad is available; server re-checks floor/caps on confirm.
Excluded items (XL, add-ons, bottled/canned) are hidden or flagged as Not eligible .
Error
When it triggers
Barista App message
What to do
DENY_PLAN
No active plan/tier
“No active plan.”
Offer paid upgrade.
DENY_CAP
Daily/monthly/total uses exhausted
“Limit reached.”
No discount; normal checkout.
DENY_COOLDOWN
Too soon since last redemption
“Wait N minutes.”
Ask customer to retry later.
DENY_STORE
Store/tier not enabled here
“Not valid at this store.”
No discount.
DENY_ITEM
Item not in eligible groups
“Item not eligible.”
Remove/replace item.
DENY_PRICE_FLOOR
Price < 8 lei
“Price below minimum.”
Adjust item/size.
DENY_REPLAY / DENY_TOKEN
QR expired/duplicate
“Code expired.”
Ask customer to refresh QR.
Network fail (pre-commit)
After eligibility, before confirm
“Temporary issue — apply –X.XX manually; will sync.”
Barista applies amount; app queues commit.
Mismatch on confirm
Items/price changed after eligibility
“Cart changed — recheck eligibility.”
Re-run eligibility; then confirm.
Priority:
User Install application
User activates his new account
User creates account and his Lunch Pass is activated (Lunch Pass is the Pro plan we have)
If the user buys the Pro plan then the app will activate will activate the pro plan and the lunch Pass will be canceled
On commit , decrement: daily cap , monthly cap (Explorer), trial uses (Launch Pass), and paid plan counters .
POS: add note “ECLIPSA DISC –X.XX • Redeem #AB12” .
Logs: store, staff, items (group/size/price), applied %, discount amount, timestamps, token jti.
Goal: the barista cannot see the exact discount amount until they confirm the correct items — reducing gaming/fraud.
Barista opens Merchant Barista App → Selects products actually ordered (tiles mapped to Eclipsa product groups; size; optional price override).
Barista taps “Check eligibility” (no QR yet).
Eclipsa prompts to scan → Scan customer’s QR (rotating, short-lived).
Server validates : active plan/benefit, caps, cooldowns, store eligibility, price floor, per-item caps (but hides the numeric amount for now) .
Barista App shows ONLY the decision :
CAN APPLY (green) — “Eligible under Launch Pass/Explorer/Paid .”
ERROR (red) — reason (e.g., cap reached, not eligible item, price floor).
Barista taps “Confirm apply” (explicit acknowledgement that the POS discount will be applied).
Only now reveal amount : show one big number “Apply –X.XX lei ” with the rule line (“20% capped 4”).
Barista enters amount in POS (amount or %, per café’s POS) and completes payment (cash or card).
Server commits redemption and decrements counters (daily/monthly/uses).
Receipt note (recommended): “ECLIPSA DISC –X.XX • Redeem #AB12”
Why this works: staff can’t shop for amounts; they must first (a) pick the real items, (b) scan the QR from the customer, (c) confirm intent. Only then do they see the value to type into the POS.
Preview (after items, before scan):
“Scan customer QR to check eligibility. We won’t show the discount amount until you confirm.”
After scan (eligible):
“Eligible under Launch Pass . Tap Confirm apply to reveal discount.”
After confirm (reveal):
“Apply –3.20 lei in POS (20% capped 4). Code #AB12 .”
Errors:
“Not eligible — daily cap reached.” / “Item not part of plan.” / “Price below 8 lei.”