Skip to content

Buy Online, Pick Up In Store (BOPIS)

Also known as: Click & Collect | Classification: fulfillment-pattern


Context

A customer browsing online wants to secure a specific item at a local store for same-day or next-day collection, avoiding shipping delays and costs. The retailer wants to drive store traffic while fulfilling digital demand from existing store inventory.


Forces

Force Tension
Customer wants immediate availability Shipping takes 1–5 days; store has stock now
Retailer wants store traffic Online orders bypass the store entirely
Store inventory must not oversell Two customers may target the same last unit
Store must be ready before customer arrives Customer frustration if order not prepared
Payment must be settled before collection Risk of no-show if not pre-authorised

Solution

Reserve inventory at store level atomically at checkout. Create a fulfilment order directed to the store. Notify store staff to pick and hold the item. Customer presents confirmation at collection point; POS confirms collection and triggers payment capture.


Sequence

sequenceDiagram
    participant C as Customer
    participant Web as Digital Channel
    participant SIM as Inventory (SIM)
    participant OMS
    participant PayHub as Payment Hub
    participant Store as Store (POS)

    C->>Web: Search product + select store
    Web->>SIM: Check ATP at store
    SIM-->>Web: Available quantity = 2
    C->>Web: Add to basket + checkout
    Web->>SIM: Reserve inventory at store
    SIM-->>Web: Reservation confirmed (TTL: 24h)
    Web->>PayHub: Authorise payment
    PayHub-->>Web: Payment authorised
    Web->>OMS: Create order (type: BOPIS)
    OMS-->>Web: Order confirmed
    OMS->>Store: Create Fulfilment Order → pick notification
    Store->>Store: Associate picks and holds item
    C->>Store: Arrives with order confirmation
    Store->>OMS: Confirm collection
    OMS->>PayHub: Capture payment
    PayHub-->>OMS: Payment captured
    OMS->>OMS: Close order

Business Objects

Object Role State Change
basket Originating cart activechecked-out
order Customer commitment createdconfirmedclosed
reservation Store stock hold reservedconfirmed → (released on collection)
fulfillment-order Store pick instruction createdpickingdelivered
payment Financial obligation authorizedcaptured

Capabilities Required

Capability Minimum Level Why
basket-management 🟨 3 — Integrated Cross-channel basket with real-time pricing
checkout 🟨 3 — Integrated Atomic reservation during checkout
inventory-visibility 🟨 3 — Integrated Real-time per-store ATP
inventory-reservation 🟧 2 — Fragmented Store-level reservation with TTL
order-management 🟨 3 — Integrated BOPIS order type, fulfilment routing
store-operations 🟧 2 — Fragmented Pick notification, collection confirmation

Minimum UC Maturity Index (UCMI) ≥ 2.5 recommended before implementing BOPIS at scale.


Trade-offs

  • Same-day fulfilment without last-mile shipping cost
  • Drives incremental in-store traffic and conversion of walk-in revenue
  • Reduces customer disappointment from OOS online
  • Inventory utilisation across the network improves
  • Store inventory accuracy must be ≥ 98% or overselling occurs
  • Requires store staff process change and training investment
  • Customer satisfaction drops sharply if order not ready on arrival
  • Reservation TTL management adds system complexity
  • Ghost reservations: if checkout abandonment is high and TTL is too long, available stock appears lower than reality
  • Peak contention: during high-demand events (e.g. product launch), race conditions can create false availability signals
  • Split baskets: BOPIS + ship-to-home in a single basket requires order splitting logic

  • Process: bopis
  • Validation Rules: bopis-requires-store-inventory, bopis-requires-channel
  • Semantic Constraint: order-belongs-to-customer