When orders from webshops, marketplaces and physical stores converge, errors occur: duplicate tickets, delayed deliveries, incorrect inventory. With a lightweight Order Management System (OMS) layer, you orchestrate orders and returns centrally-without upending your ERP. This article shows how to set up a scalable flow that brings peace, speed and control in 10 business days.
ERPs and commerce platforms are not made to normalize all channel variants, monitor priorities and handle return rules.
An OMS layer:
Normalizes order lines and customer data (one “source of truth”);
cleverly distributes orders across WMS/3PLs (rules-based fulfillment);
Manages returns, RMA types and stock returns;
publishes statuses back to all channels and customer notifications.
Result: fewer errors, predictable SLAs, lower operational costs.


Channels (Shopify, Bol, Amazon, retail POS) send events/webhooks.
OMS normalizes data, deduplicates and checks rules (address validation, payment status, cut-off).
WMS/3PL receives pick/pack/ship order.
Customer updates (track & trace, back order notification) through the same OMS.
Returns flow back through RMA flows to OMS → inventory/depreciation.
Order: order_id (kanaal), oms_order_id, created_at, currency, payment_state.
Lines: sku, variant_id, qty, price, tax, discount, bundle_id?.
Client: email, phone, shipping_address, billing_address.
Delivery: ship_method, carrier, cutoff, priority.
Tracking: status, events[], idempotency_key.
Pro-tip: use idempotency keys to neutralize duplicate webhook events.
Routing: choose WMS/3PL based on stock, country, service level, cost.
Prioritization: urgencies (SLA, VIP, backorder replenishment) first.
Cut-off: orders before 4 p.m. at depot A; then depot B (late pick).
Bundling: combine orders from the same customer into one shipment if ETA is the same.
Fraud/blocking: payment status and address risks as a hard stop.
RMA types
Restockable: return okay → +stock, quality=new.
B-grade: slightly damaged → separate stock location, adjusted price.
Write-off: depreciable, not sellable.
Rules
Return window per channel (e.g. 30-day webshop, 14-day marketplace).
Automated label creation and tracking.
Automatic crediting upon receipt/inspection (event-driven, not date-driven).
Publish each status change from OMS to:
Channel (Shopify/marketplace) → prevents “ghost statuses.”
Customer → email/SMS/WhatsApp; clear ETA, no noise.
Analytics → dashboards showing lead time, error codes, return rate.
Core events: PLACED, ALLOCATED, PICKED, SHIPPED, DELIVERED, RMA_CREATED, RMA_RECEIVED, CREDITED.
p95 order turnaround time (placement → shipment).
Fulfilment accuracy (orders without intervention).
Return rate per channel/SKU.
On-time shipping % (vs. SLA/cut-off).
Cost per shipment (with/without bundling).
Ingest: webhooks + fallback polling where necessary (some 3PLs).
Queue: message broker (e.g., SQS/RabbitMQ) for reliability.
Services: small services for routing, RMA, notifications.
Store: event store + relational store (reporting/joins).
Observability: structured logs, trace IDs, dead-letter queue.
Day 1-2: connecting channels (Shopify + 1 marketplace), mapping and idempotency.
Day 3-4: basic routing + cut-off + pick list to 1 WMS/3PL.
Day 5: status flow back to channels + customer notifications.
Day 6-7: RMA flow (1 type) + stock return.
Day 8: dashboards (lead time p95, return rate).
Day 9: edge cases and load test.
Day 10: go-live in “shadow mode” (read/log only) -> then switch to write mode.
Want to do too much in ERP → keep ERP accounting; let OMS orchestrate.
No idempotency → duplicate shipments; always keys + retries.
No DLQ → errors disappear; set up dead-letter queue and monitor.
Hard-coded rules → use manageable rules (JSON/YAML or UI) for business.
Communicate late → push early ETAs and delays proactively.
With a light OMS layer, you bring order to multichannel fulfillment. You reduce errors, speed up processing and keep a grip on returns-without rebuilding your ERP. Start small, measure p95 lead time and scale out in a controlled way.
No. Start with a light service layer + queue; growth path to enterprise can be later.
Use SFTP jobs with status polling and mapping; still run events through OMS.
Idempotency keys + event store + retries with back-off.
Event-driven after inspection; not by calendar date.
Lower number of shipments, better on-time %, lower cost per order.
OnlineMarketingMan
Build. Automate. Expand.