Skip to content

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 createdactivechecked-out
basket-line Each scanned item added/removed in real-time
order Confirmed purchase at exit createdconfirmedclosed
payment On-device payment authorizedcaptured
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