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 | active → checked-out |
order |
Customer commitment | created → confirmed → closed |
reservation |
Store stock hold | reserved → confirmed → (released on collection) |
fulfillment-order |
Store pick instruction | created → picking → delivered |
payment |
Financial obligation | authorized → captured |
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
Related¶
- Process:
bopis - Validation Rules:
bopis-requires-store-inventory,bopis-requires-channel - Semantic Constraint:
order-belongs-to-customer