Skip to content

9. Order Processing SOP

[← Order Management]/08-order-management/ · [Index]/00-index/

9. Order Processing SOP

Verified against: Medusa admin dashboard 2.18.0 (order detail page and its Fulfillment/ Payment sections — source-read directly), .ai/features/gst.md, .ai/features/shipping.md.


WARNING: This SOP describes what the admin screens are built to do. Because no order has completed end-to-end on a real payment yet (see [Section 8]/08-order-management/), treat the first several real orders as a chance to validate this SOP, not as routine execution of an already-proven process.

Step-by-step

1. Open the new order

Go to Orders in the sidebar. New/unprocessed orders show a fulfillment status badge of Not fulfilled.

2. Verify the customer

Check the order’s Customer section — name, email, and (if relevant) whether this is a guest checkout or a registered account.

3. Verify payment

REQUIRED before packing anything.

Check the Payment status badge (see the table in [Section 8]/08-order-management/#payment-status-values).

  • If captured → payment is confirmed, safe to proceed.
  • If authorized but not yet captured → funds are approved but not taken. TO BE CONFIRMED: this store’s business policy on whether to capture before or after packing/shipping — not yet decided.
  • If requires_action → use the Check Status button in the order’s Payment section to re-poll Razorpay before doing anything else.
  • If not_paid → do not fulfill. Something is wrong; investigate before proceeding.

4. Verify products

Check the order Summary — line items, quantities, sizes (e.g. confirm “Groundnut Oil 500ml” vs “Coconut Oil 500ml” — see the SKU mix-up warning in [Section 4]/04-product-variants/#product-vs-variant-vs-sku).

5. Verify inventory

Cross-check the ordered quantity against Inventory for that SKU (see [Section 5]/05-inventory-management/). Medusa automatically creates a Reservation against stock when the order was placed, so Available should already reflect it — but a manual sanity check against physical stock is still worth doing until real inventory accuracy is proven.

6. Confirm shipping address

Check the order’s shipping address on the detail page. It can be corrected here (via the address edit action) if something looks wrong before you pack/ship.

7. Invoice

IMPORTANT — this step is automatic, not manual. Unlike the original brief’s assumption of a “prepare invoice” step, GST invoice PDF generation happens automatically the moment the order is placed (an order.placed event triggers it — .ai/features/gst.md). There is nothing for staff to click to “create” the invoice.

WARNING — real gap: there is currently no button in this admin dashboard to view or download that invoice, and the underlying API route is not a usable browser-URL workaround either — it returns base64-encoded JSON, not a downloadable file (see [Section 16]/16-invoicing/#where-to-finddownload-an-invoice for the full detail). The only realistic way to get a copy today is the customer’s own storefront order confirmation or account page. If a customer asks staff to resend their invoice and can’t access their account, staff currently has no way to do that — a real product gap, not something to work around by inventing a process.

If the order has no HSN code on one of its products, invoice generation fails loud (no invoice is silently skipped) — this would need a developer to investigate, not something fixable from the dashboard.

8. Pick products

Physical warehouse step — not tracked in the system. TO BE CONFIRMED: any physical picking/packing checklist beyond “match SKU and quantity to the order.”

9. Pack order

Physical step — not tracked in the system.

10. Fulfill Items

In the order’s Fulfillment section, click Fulfill Items. Fill in:

  • Location — today, always “India Warehouse” (the only one that exists)
  • Shipping Method — defaults to whatever the customer chose at checkout (today, always “Standard Delivery,” ₹49 flat); the form warns you if you pick a different option than the customer selected
  • Items to Fulfill — quantities per line item (supports fulfilling only part of an order if needed)
  • Send notification — toggle to email the customer

This moves fulfillment status to fulfilled (or partially_fulfilled if you only fulfilled some items).

11. Mark as Shipped, add tracking

Once physically handed to a carrier, use Mark as Shipped on the fulfillment. Fields:

  • Tracking Number
  • Tracking URL
  • Label URL
  • Send notification toggle

IMPORTANT — do not invent courier names or timelines. No real carrier integration is live yet (.ai/features/shipping.md). A Shiprocket integration exists in the codebase that would auto-create a real AWB/tracking number on fulfillment, but it’s blocked on a real Shiprocket account — until that’s confirmed working, assume tracking numbers must be entered manually from whatever courier is actually used, and do not promise a specific delivery timeframe to a customer.

12. Monitor delivery

TO BE CONFIRMED: There is no automated delivery-status sync back into this admin today. Monitoring delivery currently means manually checking the carrier’s own tracking (once a real carrier exists) — the order won’t update itself.

13. Mark as Delivered

Once confirmed delivered, use Mark as Delivered on the fulfillment (a confirmation warning appears first — this can’t be easily undone). This completes the order’s fulfillment lifecycle.


Quick checklist

  • Payment verified (captured, not not_paid/requires_action)
  • Line items match what was ordered (correct oil, correct size)
  • Inventory/reservation looks consistent with physical stock
  • Shipping address confirmed
  • Order picked and packed
  • Fulfilled in the admin (Location + Shipping Method + Items)
  • Marked as Shipped with real tracking info entered
  • Delivery monitored (manual, until carrier integration is live)
  • Marked as Delivered once confirmed

[← Order Management]/08-order-management/ · [Index]/00-index/ · [Next: Customer Management →]/10-customer-management/