OMS Order Operator
Department: OMS & E-commerce
Level: Operational
Primary objective: Daily processing of orders from all channels — from entry to confirmed delivery
What this role does
The Order Operator manages the unified order queue from all sources: online stores (WooCommerce/Shopify), B2B Portal, manual orders from Sales, EDI orders from retailers and distributors, and orders received via API from external systems. They ensure every order correctly completes the full cycle: validation → approval → confirmation → delivery note → AWB → delivery → returns.
Modules used daily
| Module | Where to find it | What you use it for |
|---|---|---|
| OmniSales Orders | OmniSales → Orders | Main order queue — all channels |
| Sales Channels | OmniSales → Channels | Configuration per channel — invoicing, approval, sync |
| Sales Orders | Sales → Sales Orders | Manual orders and B2B portal orders |
| Delivery Notes | Warehouse → Delivery Notes | Generate delivery note from confirmed order |
| Packing Lists | Warehouse → Packing Lists | Prepared packages → AWB |
| Innoship | Integrations → Innoship | AWB for 230+ couriers, 35 countries |
| Direct Couriers | Operations → Couriers | Direct AWB Cargus / FanCourier / Palex |
| Invoices | Sales → Invoices | Invoice at confirmation or dispatch |
| OMS Returns | Warehouse → Returns | Returns from customers |
| Sync Audit | OmniSales → Sync Log | WooCommerce/Shopify import errors |
Order sources — where orders come from
All orders arrive in the unified queue /admin/omni_sales/order_list, regardless of source:
| Source | How it enters | What to check |
|---|---|---|
| WooCommerce / Shopify | Automatically via webhook (real-time) or cron (at intervals) | Customer correctly created, SKU mapped, payment recognised |
| B2B Portal | Customer places from their own catalogue | Prices from Price List, available stock, approval if configured |
| Sales Order (manual/agent) | Agent creates from /admin/estimates |
Correct prices and discounts, valid delivery address |
| EDI (EDIconnect) | Automatic — retailer/distributor sends X12 850 or EDIFACT ORDERS via AS2 | Correct product/SKU mapping, quantity, contract conditions |
| External API | Third-party system POSTs to REST endpoint omni_sales/orders |
Complete data, customer associated, products existing |
| Manual (staff) | Operator creates directly from /admin/omni_sales/order_list → Add |
All mandatory fields completed |
| POS | Counter/terminal sale | Immediate payment, cash receipt generated automatically |
| Pre-order | Order with future delivery | Promised delivery date, stock not checked immediately |
Daily routine
Morning — triage (20–30 min)
1. /admin/omni_sales/order_list → filter: status Draft (0) or Processing (1)
→ New orders arrived overnight (WooCommerce, B2B Portal, EDI)
→ Review and process
2. Orders with approve_status = 0
→ Pending approval → send to approver or approve yourself (if permitted)
3. /admin/omni_sales/diary_sync
→ WooCommerce/Shopify sync errors from previous night
→ Resolve errors (missing SKU, uncreated customer, unrecognised payment)
4. Orders status 16 (Stock Unavailable)
→ Back-orders — notify Acquisitions for urgent RFQ
5. /admin/warehouse/manage_packing_list → packages without AWB
→ Complete dimensions/weight → generate AWB
During the day
New order → review → confirm (status 3)
↓
Invoice generated automatically (if configured on channel)
↓
Delivery note created (automatic or manual)
↓
Warehouse: picking + packing + weighing + dimensions
↓
Generate AWB (Innoship or direct courier)
↓
Order → status Shipping (4)
↓
Courier delivers → status Delivered (5) — automatically via tracking
Weekly
- Returns report: new requests + approved + stock re-entered
- On Hold orders > 3 days → escalate or resolve
- Stock Unavailable orders > 7 days → check procurement status
Order status — action guide
| Code | Status | What to do |
|---|---|---|
| 0 | Draft | Fully check: products, prices, customer, address → confirm or escalate |
| 1 | Processing | Check stock and availability |
| 2 | Pending Payment | Waiting for advance payment confirmation — don't generate delivery note until paid |
| 3 | Confirmed | Delivery note created → warehouse takes over |
| 4 | Shipping | AWB generated, package with courier |
| 5 | Delivered | Complete cycle ✓ |
| 9 | On Hold | Issue (stock, payment, address) → resolve and restart |
| 14 | Paid | Paid — can generate delivery note |
| 15 | Ready | Stock reserved, warehouse ready for picking |
| 16 | Stock Unavailable | Back-order — notify Acquisitions, order awaits |
| 11 | Return Pending | Return request pending — decide: approve or reject |
| 7 | Return | Return fully approved and processed |
| 12 | Partial Return | Partial return — some products returned |
| 8 | Cancelled | Cancelled — reserved stock released |
The approval flow
If approval rule is active on channel:
approve_status |
Meaning | Your action |
|---|---|---|
0 |
Pending | Send to approver or approve if you have permission |
1 |
Approved | Can process order normally |
-1 |
Rejected | Customer notified automatically; order not processed |
Approval rules are configured per channel — e.g. "all B2B orders > 10,000 RON require Sales Manager approval".
Processing by source type
WooCommerce / Shopify orders
Order appears in OmniSales (via webhook or cron)
↓
Check in diary_sync that import ran without errors
↓
Open order:
→ Customer created/associated correctly?
→ Products mapped correctly (SKU matching)?
→ Payment recognised (payment method mapped on channel)?
↓
If everything correct → confirm → automatic invoice + delivery note
↓
Status updated automatically in WooCommerce/Shopify (bidirectional sync)
Common sync errors:
| Error | Cause | Resolution |
|---|---|---|
| Non-existent SKU | WooCommerce product doesn't exist in CRM | Create product in CRM with same SKU |
| Customer not created | Duplicate email or missing mandatory field | Check and correct customer file |
| Payment not recognised | Payment method not mapped on channel | Add mapping in channel settings |
| Delivery note blocked | Insufficient stock | Partial delivery or back-order |
B2B Portal orders
Customer places order from their own catalogue
↓
Appears in OmniSales with Draft status
↓
Verify: does price match the customer's Price List?
→ If yes → confirm
→ If no → check Price List at /admin/sales/price_lists
↓
If order > approval threshold → send to Sales Manager
↓
Approval → status Confirmed → delivery note + invoice
EDI orders (from retailers/distributors)
EDIconnect handles EDI orders completely automatically — no manual actions needed for each order. Connecting a new retailer involves a few activation checkboxes; the actual configuration (mappings, certificates, protocols) is done by the CRMconnect team.
Supported protocols: API, AS2, sFTP, FTP secured — plus synchronisation with the customer's own ERP.
Retailer/distributor sends Purchase Order (X12 850 / EDIFACT ORDERS)
↓
EDIconnect receives and processes automatically
↓
Sales Order created automatically in OmniSales
→ Customer identified by partner's EDI ID
→ Products mapped per configured EDI codes
↓
You check the created order:
→ Do quantities and prices match the contract?
→ Is stock available?
↓
Confirm → system automatically sends EDI outbound:
Order acknowledgement (X12 855 / EDIFACT ORDRSP) → partner
↓
On dispatch → Delivery Note EDI (X12 856 / EDIFACT DESADV) → partner automatically
On invoicing → Invoice EDI (X12 810 / EDIFACT INVOIC) → partner automatically
Where to monitor EDI: /admin/edi → audit log → messages received/sent per partner
External API orders
External system (ERP, marketplace, mobile app) POSTs to:
POST {{base_url}}omni_sales/orders
→ Order appears in OmniSales with corresponding channel_id
→ Customer associated by ID or email
→ Products identified by SKU
↓
Verify data is complete and correct
↓
Process normally like any other order
Managing back-orders (status 16 — Stock Unavailable)
Order received → stock check → MISSING
↓ status: 16 (Stock Unavailable)
1. Notify Acquisitions → create RFQ for missing products
2. Notify customer with estimated ETA (manually or via Workflow)
3. Order stays in status 16 → monitor daily
On replenishment (approved receipt note in warehouse):
4. Verify stock has entered the system
5. Manually change status to Confirmed (3)
6. Create delivery note → continue normal flow
Important: system does not automatically promote from status 16. You monitor the list daily.
Generating AWB — couriers
Option A — Innoship (aggregator, 230+ couriers, 35 countries)
When: international deliveries, high volume, comparing rates, batch printing
From approved packing list → Generate AWB
→ Select courier and service (Standard, Express, Same-day)
→ System sends request to Innoship API
→ Innoship returns: AWB number + tracking code
→ Label available: A4 or thermal 100×150mm
→ Automatic status → Shipping (4) in OmniSales
→ Status updated in WooCommerce/Shopify automatically
Prerequisites: dimensions (L×W×H) + weight completed in packing list. Without them, AWB cannot be generated.
Option B — Direct couriers (no aggregator)
When: direct contract, domestic deliveries
| Courier | Configuration | Advantage |
|---|---|---|
| Cargus | /admin/couriers → Cargus API key |
Direct contract, no intermediary commission |
| FanCourier | /admin/couriers → FanCourier credentials |
Same |
| Palex | /admin/couriers → Palex credentials |
Same |
Returns — complete process
Initiating the return
From customer (via B2B portal):
- Customer requests return from order history → request appears with
approval = 0
Manual (operator):
- From the delivered order → Create Return button → fill in items + quantities + reason
Your decision
| Situation | Action |
|---|---|
| Product within return window, unused | Approve (approval = 1) |
| Return window exceeded | Reject (approval = 2) with reason |
| Defective product (regardless of window) | Approve, mark quarantine if it can't be resold |
On approval, automatically created:
- Return receipt note → stock re-entered (or in quarantine)
- Refund record in
omni_refunds→ Finance processes payment - Customer loyalty points cancelled (if configured)
Return types:
fully— order returned in full → status 7partially— some products → status 12manual— adjustment without physical return (defective product without return)
Invoices and e-invoicing
Invoice generation — depends on channel configuration:
- At confirmation (status 3) → if
create_invoice = onon channel - At dispatch (status 4 / AWB generated)
- Manually → from confirmed order → Create Invoice button
ANAF e-invoicing — automatic for B2B customers with valid VAT:
- XML generated and submitted to ANAF on invoice issuance
- ANAF registration number returned and stored on invoice
- Check status:
/admin/invoices→ invoice → e-Invoice tab
Metrics to track
| Indicator | Target |
|---|---|
| Order processing time (Draft → Confirmed) | < 2h on working days |
| Orders in Draft > 4h | 0 — all reviewed and processed |
| Back-orders > 7 days | Escalate to Acquisitions + notify customer |
| Daily sync errors | 0 unresolved errors |
| Returns > 3 days without decision | 0 — decide daily |
Collaboration with other departments
| Department | How you collaborate |
|---|---|
| Warehouse | You provide confirmed delivery notes; they generate packing list; you generate AWB |
| Sales | Orders from Sales Orders (B2B portal, field agent) enter your queue |
| Acquisitions | At status 16 (missing stock) → notify immediately for RFQ |
| Finance | Invoice and e-invoice → generated by you, reconciled by them |
| Customer Support | Customers with order issues open tickets → support includes you for resolution |
| IT/Admin | WooCommerce sync issues, EDI errors, wrong SKU mappings → escalate to IT |
Practical tips
Diary sync = the health of your channels. Check it in the morning before anything else. An undetected sync error can leave dozens of orders unimported — customers who paid and have no confirmation.
Status 16 is not forgotten, it's monitored. Every unresolved back-order is a customer who paid and has no goods. Check the stock-unavailable order list daily and communicate proactively with the customer.
Dimensions in packing list are not optional. Without L×W×H + weight the AWB can't be generated. If warehouse doesn't fill them in → AWB doesn't come out → order gets blocked. Set up a reminder or checklist with the warehouse.
EDI outbound is automatic, but you verify. Order acknowledgement and delivery note are sent automatically to the EDI partner on order confirmation in CRM. Monitor in
/admin/edithat messages have been delivered (MDN acknowledge received).
Check the stock-unavailable order list daily — every order in this status is a customer who paid and has no goods. Proactive communication within 24 hours preserves the relationship; discovering the issue a week later does not.
EDI outbound messages (order acknowledgement, delivery note) are generated automatically when you confirm an order — you do not send them manually, but verify in the EDI audit log that MDN acknowledgements are received to confirm the partner accepted them.