- Participating stores only (opt-in per store & per plan/tier).
- Eligible product groups only (classic coffees; S/M sizes).
- Exclusions: XL sizes, add-ons, bottled/canned, seasonal unless store opts in.
- Store opening hours only.
- Active benefit required (Launch Pass → Explorer → Paid; priority in that order).
- Caps & cooldowns enforced:
- Daily item caps by plan (e.g., 1/2/3 per day).
- 15 min same-store cooldown; 5 min global cooldown.
- Monthly/total use caps per tier (e.g., Explorer 6/month; Launch Pass 8/14 days).
- Barista selects items in Merchant PWA (mapped to product groups; size; optional price override).
- Tap Check eligibility (no QR yet).
- Scan customer’s rotating QR.
- Server validates: active plan/tier, caps, cooldowns, store eligibility, price floor (≥ 8 lei), per-item cap (3/4/5 lei).
- PWA shows decision only (no amount yet):
- CAN APPLY — “Eligible under Launch Pass / Explorer / Paid.”
- ERROR — reason (e.g.,
DAILY_CAP, COOLDOWN, NOT_ELIGIBLE_ITEM, PRICE_FLOOR).
- Barista taps Confirm apply.
- Reveal amount: big number “Apply –X.XX lei” + rule line (e.g., “20% capped 4”).
- Barista enters discount in the café POS (amount or %) and completes payment (cash or card).
- Server commits redemption & decrements counters.
- Receipt note (recommended): “ECLIPSA DISC –X.XX • Redeem #AB12”.
VALID → “Apply –X.XX lei” (amount revealed only after Confirm).
DENY_PLAN (no active plan/tier).
DENY_CAP (daily/monthly/total cap reached).
DENY_COOLDOWN (wait N minutes).
DENY_STORE (store not eligible / tier not enabled here).
DENY_ITEM (not in eligible product groups).
DENY_PRICE_FLOOR (item < 8 lei).
DENY_REPLAY / DENY_TOKEN (QR invalid/expired).
¶ Pricing & discount rules (applied on server and shown in PWA)
- Percent by store within plan band (e.g., 10/15/20/25%).
- Per-item cap (3/4/5 lei) and price floor (≥ 8 lei).
- No stacking with store promos.
- Rounding per plan (e.g., nearest 0.5).
- Rotating QR (≤ 60s) + unique
jti (replay blocked).
- One active device per account; device binding.
- Random staff PIN challenge (e.g., 1/20).
- Amount reveal only after confirm to prevent staff “amount shopping”.
- Opt-in per tier (Explorer, Launch Pass, Paid).
- Monthly discount budget (optional): auto-pause free tiers at a store when reached; PWA shows paused state.
- Templates for % within band; optional per-group overrides (within guardrails).
- If network fails after eligibility but before commit: show the computed amount on PWA as “offline note”; barista may apply manually; app queues a retry to commit or flags for reconciliation.
- If eligibility fails: show clear reason; no discount applied.
- Log: store, staff, items (group/size/price), applied %, discount amount, redeem ID, timestamps.
- Recommend adding Redeem ID to the POS receipt note for easy reconciliation.