Scan and Go¶
Also known as: Mobile Scan | Scan & Pay | Classification:
commerce-pattern
Context¶
A customer wants to shop at their own pace, scanning items with their personal mobile device and paying without visiting a staffed or self-service checkout lane. The store wants to eliminate checkout queues entirely for opted-in customers while maintaining promotion accuracy and loss prevention.
Forces¶
| Force | Tension |
|---|---|
| Customer wants frictionless exit | Store must verify payment and detect scan avoidance |
| Mobile basket must match physical basket | Items scanned out-of-order, removed, or skipped |
| Promotions must apply in real-time | Promotions engine must respond to incremental basket updates |
| Payment must be confirmed before exit | Exit gate must not create a new bottleneck |
Solution¶
The customer enables Scan and Go via a mobile app or web experience. While walking the aisles, each item is scanned by the customer's device, building a basket in real-time with immediate promotion evaluation. At checkout the customer pays on-device (or at an exit terminal). An order is created and confirmed. The customer presents a digital receipt QR code at the exit gate for optional verification.
Sequence¶
sequenceDiagram
participant C as Customer (Mobile)
participant App as App / mPOS
participant PromEng as Promotion Engine
participant PayHub as Payment Hub
participant OMS
participant Exit as Exit Gate
C->>App: Open Scan & Go session
App-->>C: BasketCreated (empty basket)
loop For each item
C->>App: Scan barcode
App->>App: AddBasketItem
App->>PromEng: Evaluate promotions (incremental)
PromEng-->>App: Running total + applied discounts
App-->>C: Live basket view
end
C->>App: Ready to pay
App->>PayHub: Authorise payment
PayHub-->>App: PaymentAuthorized
App->>OMS: BasketCheckedOut → OrderCreated → OrderConfirmed
OMS-->>App: Order QR code
App-->>C: Receipt + QR code
C->>Exit: Show QR code
Exit-->>C: Gate opens (optional random audit)
PayHub-->>OMS: PaymentCaptured
OMS-->>OMS: OrderClosed
Business Objects¶
| Object | Role | State Change |
|---|---|---|
basket |
Incrementally built during shopping | created → active → checked-out |
basket-line |
Each scanned item | added/removed in real-time |
order |
Confirmed purchase at exit | created → confirmed → closed |
payment |
On-device payment | authorized → captured |
promotion |
Incremental evaluation | evaluated per item scan |
Capabilities Required¶
| Capability | Minimum Level | Why |
|---|---|---|
basket-management |
🟧 3 — Integrated | Real-time basket updates via mobile API; must handle add/remove mid-session |
checkout |
🟧 3 — Integrated | Mobile-initiated checkout with consistent promotion and payment integration |
payment-processing |
🟧 3 — Integrated | On-device payment: card, wallet (Apple Pay, Google Pay) |
promotions |
🟧 3 — Integrated | Incremental basket evaluation per scan (not batch at checkout) |
store-operations |
🟨 2 — Fragmented | Exit gate integration + random audit management |
Trade-offs¶
- Eliminates checkout queue entirely for enrolled customers
- Real-time basket with running total improves spend awareness
- Loyalty and promotions applied incrementally per scan
- Associates freed from cashier roles → redeployable to service
- Dependent on customer smartphone and app adoption (typically 10–25% penetration initially)
- Scan avoidance rate higher than SCO if exit verification is light-touch
- Network dependency: poor in-store WiFi/4G breaks the session
- Bulk/produce items: non-barcoded items (e.g. loose produce) require workaround (weight input, associate scan)
- Item re-scans: customers accidentally scan same item twice; requires easy undo UX
- Exit bottleneck: high-volume stores need multiple exit gates or risk queue at verification point
- App prerequisite: requires customer to have downloaded app and enrolled loyalty card in advance
Related¶
- Process:
scan-and-go - Related Pattern: Self-Checkout
- Validation Rules:
scan-and-go-requires-active-basket