Rithum / DSCO Dropship — End-to-End Onboarding
The one place to go to take a customer live with a retailer over Rithum/DSCO dropship (Rithum was DSCO, formerly CommerceHub). Follow the phases in order. Each phase lists the actions, then the ⚠ watchouts that only surface in the field.
The model (read this first)
Four parties, and you only talk to two of them:
Retailer (e.g. AAFES) ⇄ Rithum/DSCO network ⇄ Orderful ⇄ Customer's NetSuite
(sends POs) (the intermediary) (EDI) (the supplier)
- You never EDI the retailer directly. Orderful connects to Rithum/DSCO; Rithum routes to the retailer. Coordinate setup with Rithum (
dscopartnersetup@rithum.com), not the retailer.
- DSCO is order-first. The retailer processes your documents in order sequence, not as they arrive. An 810 (invoice) can be received and 997-accepted but silently not processed until the order is fulfilled and the 856 (ASN) has succeeded. Always send the 856 before the 810, and confirm status in the DSCO order history, not just Orderful's delivery status.
997 / delivered / accepted = AS2 receipt only, never business acceptance.
Division of labor — who owns what
The single biggest source of stalls is ambiguity about who does the next step. Print this.
| Workstream |
Customer (supplier) |
Orderful |
Rithum |
Retailer |
| Retailer relationship + portal invite |
Owns — initiates with their buyer; accepts the invite |
— |
Sends invite on retailer request |
Approves vendor; triggers invite |
| Portal steps 1–7 (company, pricing, warehouses, catalog, inventory seed) |
Owns — only they have this commercial data |
Advises |
Reviews catalog |
Approves assortment |
| Portal steps 8–15 (test orders → returns) |
Clicks alongside |
Drives — runs the EDI legs |
Reviews results (step 15) |
— |
| Orderful org, partnership, guidelines, NetSuite integration |
— |
Owns |
— |
— |
| AS2 enablement + automation jobs |
— |
Drives (needs support call) |
Enables AS2 (not on by default) |
— |
| Warehouse codes registered in DSCO |
Owns (portal) |
Verifies the EDI matches |
— |
— |
| Production carrier/ship-method list |
Owns — gets it from the retailer |
Maps it |
— |
Confirms codes |
| Smoke test + LIVE letter + return acceptance |
Owns the clock (1-business-day windows) |
Monitors EDI |
— |
Runs the gate |
| Steady state: current inventory, order SLAs |
Owns |
Monitors feed |
— |
Enforces (chargebacks) |
When to use
- Customer fulfills for a retailer via Rithum/DSCO dropship (AAFES, Chewy, etc.)
- You're standing up a brand-new DSCO trading partner end to end
- You need the full arc: recon → Orderful setup → testing → portal → cutover → go-live
What the customer must have ready (ask for ALL of this on day 1)
These are commercial/supply-chain inputs only the customer can provide. Every one of them has stalled a real onboarding. Collect them in the kickoff, not when the step blocks:
- An active vendor relationship with the retailer — the retailer initiates the Rithum invite; Orderful cannot.
- Rithum/DSCO portal invite accepted + working login (
app.dsco.io), and Orderful added as a portal user so we can drive steps 8–15.
- A named EDI/ops contact (one person, real inbox) for portal notifications and failure emails — not a shared alias.
- Billing contact + email-notification recipients (portal step 2 asks for these).
- Pricing agreement decision — someone authorized to accept the retailer's pricing terms (step 3 is a legal/commercial acceptance, not a technical step).
- Warehouse list: every ship-from warehouse with full address, and the short warehouse code each will be known by (e.g.
DFW). This exact code must be (a) registered as a warehouse in the DSCO portal AND (b) what the EDI emits in REF*WS — a descriptive name in either place breaks the inventory import.
- Product catalog in the retailer's template — retailer-approved items, real UPCs, images if the retailer requires them. Catalog upload gates everything — test orders are generated from it.
- Inventory numbers for the catalog items (seed quantities for testing; a real feed source for production).
- Their production ship methods — every carrier/service their pack-ship tool uses (FedEx, USPS/Stamps.com, UPS…), so all of them get mapped before live orders.
- NetSuite access (sandbox + production) if Orderful runs the ERP side.
If the customer is migrating off another provider (e.g. SPS): get those credentials too, and plan the Rithum re-pointing with dscopartnersetup@rithum.com — it is not instant.
Transaction set (DSCO dropship)
| TX |
Direction |
Notes |
| 850 Purchase Order |
Inbound (retailer → you) |
The order |
| 856 Ship Notice (ASN) |
Outbound |
Send before the 810. SKU in LIN03/SK; LIN01 = short line-seq (≤20 chars) |
| 810 Invoice |
Outbound |
Strictest spec — send ONLY required fields |
| 846 Inventory |
Outbound |
Production inventory is a real, scheduled EDI 846 feed (all live AAFES DSCO vendors send one); the 2-col CSV/portal upload is only the portal-onboarding bootstrap (steps 6–7). See reference/aafes-dsco.md → "AAFES DSCO 846 Inventory Feed" |
| 870 Order Status |
Outbound |
Often not required — confirm with the retailer |
855 is not used on the DSCO path — acknowledgement is a platform status change, not a document.
Phase 0 — Confirm the EDI path & recon
- Confirm the retailer's DSCO path. Some retailers have multiple EDI accounts (e.g., AAFES has Direct, DSCO/Rithum, and Radial/VendorNet). Building a partnership on the wrong account means a full rebuild — confirm with the customer / retailer before building anything.
- Recon the customer's current setup (needs their DSCO portal creds) — pull retailers, supplier IDs, transaction history, and item/pricing patterns. If migrating off SPS, recon SPS too.
- Get the customer invited to the Rithum/DSCO portal by the retailer, and get yourself (Orderful) added so you can run the supplier checklist.
⚠ Watchouts
- Don't infer the path from old notes — confirm it. Wrong EDI account = rebuild.
- The customer, not Orderful, initiates the retailer relationship in Rithum.
Phase 1 — Orderful org + partnership
- Provision the customer's Orderful org. ISA ID must be ≤ 15 characters.
- Build the partnership on the correct DSCO EDI account (from Phase 0).
- Attach the retailer's published guidelines to each relationship.
⚠ Watchouts
- Check the inbound 850 guideline for schema gaps before relying on it — DSCO 850s carry ~15 REF segments of DSCO metadata; the default mapper may drop fields.
Phase 2 — Internal round-trip (Orderful ↔ NetSuite)
Prove the full chain in sandbox before touching the portal:
- Inject a test 850 → confirm a NetSuite Sales Order is created (watch for
ITEM_LOOKUP_MISSING).
- Fulfill → generate the 856; bill → generate the 810.
- Author outbound JSONata: the DSCO 810 is strict — drop reference info (PO/VN/CO), keep N1*ST only, no SAC/freight (retailer is often merchant of record). SKU goes in
LIN03 on the 856.
- Confirm both the 856 and 810 validate VALID in Orderful.
⚠ Watchouts
- Every outbound relationship needs a communication channel or delivery fails silently (VALID but
deliveryStatus: FAILED). For sandbox use the auto-provisioned "Keep In Orderful" channel; assign it to the test and live streams. Verify the outbound relationship points to the correct DSCO/Rithum AS2 channel before real testing.
- NetSuite inventory allocation is manual for dropship — pre-create large quantities in sandbox so orders proceed.
- Audit the customer's existing NS workflows — SPS-era workflows can silently hold or reject EDI orders.
Phase 3 — Rithum/DSCO portal (15-step supplier checklist, in painful detail)
Portal: https://app.dsco.io. Steps 1–7 are the customer's (commercial data only they have — this is the most common long pole; send them these steps in the kickoff follow-up email and chase weekly). Steps 8–15 are Orderful-driven with the customer alongside.
Golden rule for every step: before following the generic DSCO instructions, look for a "Download Specific Template" link or a retailer note box — the retailer's own template/notes override the instructions (AAFES's note literally says "USE THIS TEMPLATE NOT WHAT IS LISTED IN THE INSTRUCTIONS SECTION").
| # |
Step |
Owner |
Exactly what to do |
Done when |
| 1 |
How to Get Started |
Customer |
Read intro, click Next |
Step shows complete |
| 2 |
Configure Initial Settings |
Customer |
Company info, billing contact, email-notification recipients |
Saved without validation errors |
| 3 |
Pricing Agreement |
Customer |
Someone authorized accepts the retailer's pricing terms (commercial acceptance, not technical) |
Agreement accepted |
| 4 |
Supply Warehouses |
Customer |
Add every ship-from warehouse: full address + the short warehouse code (e.g. DFW) it will be known by. This registers the code DSCO's imports validate against |
All warehouses listed with their codes |
| 5 |
Submit Catalog |
Customer |
Upload the product catalog in the retailer's template (real UPCs; images if required). This is the gate — test orders generate from it |
Catalog accepted; items visible |
| 6 |
Load Items & Inventory |
Customer (Orderful assists) |
Download the retailer-specific inventory template (note box, not the instructions). Seed ~3 SKUs with quantity_available ≥ 20. For AAFES this bootstrap is a 2-col CSV (sku, quantity_available) |
Items show on the Inventory page |
| 7 |
Update Inventory |
Customer |
Download current inventory (Download All Results → Export Inventory), change qty to 50, re-upload |
Quantities show 50 |
| 8 |
Create Test Orders |
Orderful + Customer |
Pick the retailer's standard carrier from the dropdown (AAFES: FedEx – Home Delivery / FEHD), click Next → portal generates ~3 test POs. Note the PO numbers — steps 9–14 use them. Can be re-run for more |
Test POs exist |
| 9 |
Acknowledge Orders |
Orderful |
The real EDI wiring — AS2 + both automation jobs (Phase 4). Run the Orders export; orders flip to Acknowledged (a platform status — no 855 document exists on DSCO) |
Test orders show "Acknowledged" and appear in Orderful |
| 10 |
Ship an Order |
Orderful (customer's NS) |
Fulfill in NS → outbound 856 through the Outbound job. Test tracking numbers: FedEx = 15 zeros; UPS = 1Z + 16 zeros. Respect ship-by dates + the retailer's service-level codes; check for a retailer-specific shipment template |
Order shows shipped in DSCO order history |
| 11 |
Cancel an Order |
Orderful |
Generate the 870 via the Orderful API — don't build a full NS cancellation workflow just for this test |
Cancellation reflected in DSCO |
| 12 |
Multi-Line Ship |
Orderful |
Partial fulfillment of a multi-line test PO → 856 |
Partial shipment shows correctly |
| 13 |
Invoice |
Orderful |
Bill in NS → outbound 810 (after the 856 — order-first). Strict spec: required fields only |
Invoice accepted in DSCO order history |
| 14 |
Returns |
Customer |
Handled manually in the DSCO UI — no EDI return document; don't scope return automation. Customer's team must know this is theirs in production |
Return processed in the portal |
| 15 |
Next Steps |
Rithum |
Rithum reviews all results; on pass the connection moves toward production |
Rithum confirms pass |
⚠ Watchouts
- Orders can't be deleted in the DSCO UI once created — ignore stale ones, use the latest batch.
- Account-switching bugs: if the portal shows the wrong account, log out, clear cache/cookies, re-accept the invite.
- Job failures: Automation Jobs → Job History → click the failed run — the detail page names the reason (wrong SCAC, missing tracking, invalid data).
Phase 4 — AS2 + automation jobs (the part that breaks)
A. AS2 connection
- In Orderful, create a communication channel → Shared AS2 → search "Rithum AS2" (the shared connection; reuses Orderful's existing cert already known to Rithum — do not mint a new cert).
- AS2 is not enabled by default in the DSCO portal. Call Rithum support (see below) to enable AS2 for the account and configure the backend connection with the customer's ISA ID (exactly 15 chars).
B. Two automation jobs (in the DSCO portal)
| Job |
Type |
Key settings |
| Orders |
Orders Export (pulls 850s → Orderful) |
Standard=DSCO, Dest=DSCO AS2, Include Test Orders ✓, Source Data = "All retailers", filename Purchase_Order_${ymdt}.edi |
| Outbound |
EDI Import (sends 856/810 → DSCO) |
Source=DSCO AS2, filename * (wildcard), Generate 997 ✓ |
⚠ Watchouts
- Source Data defaults to the specific retailer, which excludes the fictitious test retailer → the export pulls 0 orders. Set it to "All retailers" (works in test and prod).
- Both jobs default to Manual schedule. Leaving "Orders" on manual at go-live means real POs sit un-exported and never reach you — it looks like "no orders arrived." Flip to automatic at cutover; if an expected order is missing, run the job manually and check its schedule first.
Phase 5 — Production cutover
- Install the SuiteApp in production NetSuite; mirror the sandbox config.
- Finish the prod enabled-transaction links (customer + doc-type + direction) so transactions match.
- Set all Orderful relationships READY + autoSend ON; schedule the inbound polling job; set the prod API secret + polling bucket.
- Replace the "Keep In Orderful" outbound channel with the real DSCO/Rithum AS2 delivery.
- Map ALL shipping methods in the NS prod shipping lookup — and put the retailer's code in the right TD5 field. For AAFES, every shipment transmits with service code
FEHD regardless of actual carrier (FedEx, Stamps.com, even USPS) — but FEHD is a service-level code: it goes in the lookup's service-level field (→ TD5 locationIdentifier, enum-validated), while the SCAC/carrier field stays the real carrier name (FedEx/UPS/USPS → TD5 identificationCode). Putting FEHD in the carrier field passes validation but ships a service code as the carrier. Map every method the customer's pack/ship tool uses — not just "FedEx Home Delivery" — or force locationIdentifier universally via JSONata / an Orderful rule.
- Stand up the production 846 inventory feed — saved search on the trading-partner Customer record (
ITEM/AVAILABLE/LOCATION, internal IDs) + schedule the Inventory Advice Handler MR; the REF*WS warehouse code must be a bare code registered as a warehouse in the DSCO portal. See reference/aafes-dsco.md → "AAFES DSCO 846 Inventory Feed".
⚠ Watchouts
- TD5 carrier failure: if the prod shipping/SCAC lookup is missing/misconfigured, the 856
TD5 emits the carrier name in locationIdentifier and omits the mandatory identificationCode → rejected. Sandbox often has the mapping while prod doesn't — verify prod explicitly.
- Confirm the first live 850's items resolve in NS (no
ITEM_LOOKUP_MISSING).
Phase 6 — Go-live: the smoke-test / LIVE-letter sequence
Go-live is a gated sequence, not a date (AAFES example):
- Retailer places a smoke-test order.
- Fake-ship + invoice it clean in DSCO within 1 business day, adhering to the retailer's Required-Fields-by-Workflow.
- 2–3 business days through the retailer's systems.
- If the invoice passes clean → the retailer sends a LIVE letter.
- The compliant assortment moves to the production stream (2–3 more days).
- Retailer creates a return in DSCO; accept it within 1 business day to close out.
The customer owns the clock in this phase. Make sure they know, before the smoke test starts, that they (or Orderful on their behalf) must:
- Fake-ship + invoice the smoke-test order within 1 business day of it arriving — someone with NS + DSCO access must be available that day.
- Accept the retailer's closing return in DSCO within 1 business day — it's a portal action on their account, and it's easy to miss because it arrives days after everyone stopped watching.
- Get the production carrier list from the retailer (which methods/codes will real orders carry) so every method is mapped before volume — an unmapped method on a live order = failed 856 = chargeback (AAFES: $150 per ASN violation; one vendor accumulated $7,148.50 in a cycle).
⚠ Watchouts
- Running the smoke test in production has real side effects — a real NS fulfillment, invoice/AR, and reduced inventory. Decide up front whether prod testing is acceptable, who runs it, and who reverses it. Deleting the NS records afterward does not retract the already-transmitted-and-accepted 856/810 (immutable Orderful events); the return is a manual DSCO accept, so NS records aren't required for it. Hold reversals until the LIVE letter confirms the invoice passed.
- Stale inventory can gate the retailer from releasing orders — dropship retailers commonly require current inventory before sending a PO. Keep the feed current (this is why the production 846 must be scheduled, not one-off).
Silent killers (no error anywhere — things just stall)
Each of these has burned days on a real onboarding because nothing showed red:
- Portal invite never accepted / steps 1–7 sitting on the customer. Rithum won't progress and no one is notified. Chase weekly; the commercial steps are the longest pole.
- Catalog not uploaded → step 8 can't generate test orders → everything downstream waits.
- Source Data = specific retailer on the Orders export → test orders come from a fictitious test retailer, so the job pulls 0 transactions and simply looks like "no orders."
- Automation jobs left on Manual at cutover → real production POs sit un-exported in DSCO. Looks exactly like "the retailer isn't sending orders."
- AS2 not enabled on the DSCO account → nothing transmits; the portal just never shows AS2 options. It takes a phone call to Rithum (ticket alone is slow).
- Warehouse code mismatch → the 846/inventory import fails application-level in DSCO ("Unknown warehouse code … please create it") even while the EDI 997 shows ACCEPTED. The
REF*WS code must be the bare registered code (e.g. DFW), not a descriptive location name — and it must exist as a warehouse in the portal (step 4).
- 810 sent before the 856 → 997-accepted but silently never processed (order-first). Check DSCO order history, not Orderful delivery status.
- Stale inventory → retailer quietly stops releasing orders; the Rithum "you missed an inventory update" exception email is the only signal — make sure it goes to a watched inbox.
Top watchouts (quick reference)
- Send the 856 before the 810 — DSCO is order-first; 997 ≠ business acceptance.
- Map every ship method — and put the code in the right field: the retailer's universal code is a service-level code (AAFES =
FEHD → TD5 locationIdentifier); the carrier/SCAC field stays the real carrier name.
- Outbound relationships need a comm channel or delivery fails silently.
- Source Data = "All retailers" or the Orders export pulls 0.
- Flip automation jobs to automatic at cutover — manual blocks live orders.
- AS2 must be enabled by Rithum support — not on by default.
- Retailer templates override generic DSCO instructions.
- Confirm the correct EDI path first — wrong account = rebuild.
- 810 is strict; SKU in LIN03, short seq in LIN01 on the 856.
- Returns are manual in the DSCO UI — no EDI return doc.
Definition of done — gate checklists
Don't declare a phase done until every box in its gate is checked.
Gate A — ready to start (customer inputs)
Gate B — portal testing complete (end of Phase 3/4)
Gate C — production cutover
Gate D — go-live closed out
Support & contacts
|
Details |
| Rithum support |
844-482-4357 → DSCO support → DSCO onboarding (until 6PM ET) |
| Partner setup |
dscopartnersetup@rithum.com |
| Tip |
Create a ticket first, then call and reference it — phone is faster |
Companion skills (onboarding set)
If present in your skills set, these go deeper on individual phases: dsco-recon (pull the customer's DSCO config), dsco-portal-onboarding (detailed 15-step portal walkthrough), org-prebuild (build the Orderful org from recon), sps-recon (migrating off SPS), writing-outbound-jsonata / item-lookup / audit-outbound-rules (NetSuite/Orderful mechanics), and the aafes-dsco reference (AAFES paths, guidelines, 850 structure, compliance $).
1---2name: rithum-dsco-end-to-end3description: End-to-end playbook for onboarding a trading partner (retailer) via Rithum/DSCO dropship — from confirming the EDI path and recon, through Orderful org + partnership setup, internal Orderful↔NetSuite round-trip testing, the 15-step Rithum/DSCO portal, AS2 + automation jobs, production cutover, and the gated go-live / smoke-test sequence. Self-contained single guide with the watchouts that only bite in the field. Use when onboarding any customer that fulfills via Rithum/DSCO (formerly CommerceHub) dropship — e.g. AAFES, Chewy — or the user says "onboard <customer> on DSCO", "Rithum dropship end to end", "how do I work with Rithum for a trading partner", "DSCO onboarding playbook".4---56# Rithum / DSCO Dropship — End-to-End Onboarding78The one place to go to take a customer live with a retailer over **Rithum/DSCO dropship** (Rithum was DSCO, formerly CommerceHub). Follow the phases in order. Each phase lists the actions, then the **⚠ watchouts** that only surface in the field.910## The model (read this first)1112Four parties, and you only talk to two of them:1314```15Retailer (e.g. AAFES) ⇄ Rithum/DSCO network ⇄ Orderful ⇄ Customer's NetSuite16 (sends POs) (the intermediary) (EDI) (the supplier)17```1819- **You never EDI the retailer directly.** Orderful connects to Rithum/DSCO; Rithum routes to the retailer. Coordinate setup with Rithum (`dscopartnersetup@rithum.com`), not the retailer.20- **DSCO is order-first.** The retailer processes your documents *in order sequence*, not as they arrive. An 810 (invoice) can be received and 997-accepted but **silently not processed** until the order is fulfilled and the **856 (ASN) has succeeded**. Always send the **856 before the 810**, and confirm status in the **DSCO order history**, not just Orderful's delivery status. `997 / delivered / accepted = AS2 receipt only`, never business acceptance.2122## Division of labor — who owns what2324The single biggest source of stalls is ambiguity about who does the next step. Print this.2526| Workstream | Customer (supplier) | Orderful | Rithum | Retailer |27|---|---|---|---|---|28| Retailer relationship + portal invite | **Owns** — initiates with their buyer; accepts the invite | — | Sends invite on retailer request | Approves vendor; triggers invite |29| Portal steps 1–7 (company, pricing, warehouses, catalog, inventory seed) | **Owns** — only they have this commercial data | Advises | Reviews catalog | Approves assortment |30| Portal steps 8–15 (test orders → returns) | Clicks alongside | **Drives** — runs the EDI legs | Reviews results (step 15) | — |31| Orderful org, partnership, guidelines, NetSuite integration | — | **Owns** | — | — |32| AS2 enablement + automation jobs | — | **Drives** (needs support call) | **Enables AS2** (not on by default) | — |33| Warehouse codes registered in DSCO | **Owns** (portal) | Verifies the EDI matches | — | — |34| Production carrier/ship-method list | **Owns** — gets it from the retailer | Maps it | — | Confirms codes |35| Smoke test + LIVE letter + return acceptance | **Owns the clock** (1-business-day windows) | Monitors EDI | — | Runs the gate |36| Steady state: current inventory, order SLAs | **Owns** | Monitors feed | — | Enforces (chargebacks) |3738## When to use3940- Customer fulfills for a retailer via Rithum/DSCO dropship (AAFES, Chewy, etc.)41- You're standing up a brand-new DSCO trading partner end to end42- You need the full arc: recon → Orderful setup → testing → portal → cutover → go-live4344## What the customer must have ready (ask for ALL of this on day 1)4546These are commercial/supply-chain inputs **only the customer can provide**. Every one of them has stalled a real onboarding. Collect them in the kickoff, not when the step blocks:47481. **An active vendor relationship with the retailer** — the retailer initiates the Rithum invite; Orderful cannot.492. **Rithum/DSCO portal invite accepted** + working login (`app.dsco.io`), and Orderful added as a portal user so we can drive steps 8–15.503. **A named EDI/ops contact** (one person, real inbox) for portal notifications and failure emails — not a shared alias.514. **Billing contact + email-notification recipients** (portal step 2 asks for these).525. **Pricing agreement decision** — someone authorized to accept the retailer's pricing terms (step 3 is a legal/commercial acceptance, not a technical step).536. **Warehouse list**: every ship-from warehouse with full address, and the **short warehouse code** each will be known by (e.g. `DFW`). This exact code must be (a) registered as a warehouse in the DSCO portal AND (b) what the EDI emits in `REF*WS` — a descriptive name in either place breaks the inventory import.547. **Product catalog in the retailer's template** — retailer-approved items, real UPCs, images if the retailer requires them. **Catalog upload gates everything** — test orders are generated from it.558. **Inventory numbers** for the catalog items (seed quantities for testing; a real feed source for production).569. **Their production ship methods** — every carrier/service their pack-ship tool uses (FedEx, USPS/Stamps.com, UPS…), so all of them get mapped before live orders.5710. **NetSuite access** (sandbox + production) if Orderful runs the ERP side.5859**If the customer is migrating off another provider (e.g. SPS):** get those credentials too, and plan the Rithum re-pointing with `dscopartnersetup@rithum.com` — it is not instant.6061## Transaction set (DSCO dropship)6263| TX | Direction | Notes |64|----|-----------|-------|65| 850 Purchase Order | Inbound (retailer → you) | The order |66| 856 Ship Notice (ASN) | Outbound | **Send before the 810.** SKU in `LIN03`/`SK`; `LIN01` = short line-seq (≤20 chars) |67| 810 Invoice | Outbound | Strictest spec — send ONLY required fields |68| 846 Inventory | Outbound | **Production inventory is a real, scheduled EDI 846 feed** (all live AAFES DSCO vendors send one); the 2-col CSV/portal upload is only the portal-onboarding bootstrap (steps 6–7). See `reference/aafes-dsco.md` → "AAFES DSCO 846 Inventory Feed" |69| 870 Order Status | Outbound | Often not required — confirm with the retailer |7071**855 is not used on the DSCO path** — acknowledgement is a platform status change, not a document.7273---7475## Phase 0 — Confirm the EDI path & recon76771. **Confirm the retailer's DSCO path.** Some retailers have multiple EDI accounts (e.g., AAFES has Direct, DSCO/Rithum, and Radial/VendorNet). Building a partnership on the wrong account means a full rebuild — confirm with the customer / retailer before building anything.782. **Recon the customer's current setup** (needs their DSCO portal creds) — pull retailers, supplier IDs, transaction history, and item/pricing patterns. If migrating off SPS, recon SPS too.793. **Get the customer invited to the Rithum/DSCO portal** by the retailer, and get yourself (Orderful) added so you can run the supplier checklist.8081⚠ **Watchouts**82- Don't infer the path from old notes — *confirm* it. Wrong EDI account = rebuild.83- The customer, not Orderful, initiates the retailer relationship in Rithum.8485## Phase 1 — Orderful org + partnership86871. Provision the customer's Orderful org. **ISA ID must be ≤ 15 characters.**882. Build the partnership on the **correct DSCO EDI account** (from Phase 0).893. Attach the retailer's published guidelines to each relationship.9091⚠ **Watchouts**92- Check the inbound 850 guideline for schema gaps before relying on it — DSCO 850s carry ~15 REF segments of DSCO metadata; the default mapper may drop fields.9394## Phase 2 — Internal round-trip (Orderful ↔ NetSuite)9596Prove the full chain in sandbox **before** touching the portal:97981. Inject a test **850** → confirm a NetSuite **Sales Order** is created (watch for `ITEM_LOOKUP_MISSING`).992. Fulfill → generate the **856**; bill → generate the **810**.1003. Author outbound JSONata: the DSCO **810 is strict** — drop reference info (PO/VN/CO), keep N1*ST only, no SAC/freight (retailer is often merchant of record). SKU goes in `LIN03` on the 856.1014. Confirm both the 856 and 810 validate **VALID** in Orderful.102103⚠ **Watchouts**104- **Every outbound relationship needs a communication channel or delivery fails silently** (VALID but `deliveryStatus: FAILED`). For sandbox use the auto-provisioned **"Keep In Orderful"** channel; assign it to the `test` and `live` streams. Verify the outbound relationship points to the correct **DSCO/Rithum AS2** channel before real testing.105- NetSuite inventory allocation is **manual** for dropship — pre-create large quantities in sandbox so orders proceed.106- Audit the customer's existing NS workflows — SPS-era workflows can silently hold or reject EDI orders.107108## Phase 3 — Rithum/DSCO portal (15-step supplier checklist, in painful detail)109110Portal: `https://app.dsco.io`. **Steps 1–7 are the customer's** (commercial data only they have — this is the most common long pole; send them these steps in the kickoff follow-up email and chase weekly). **Steps 8–15 are Orderful-driven** with the customer alongside.111112**Golden rule for every step:** before following the generic DSCO instructions, look for a **"Download <Retailer> Specific Template"** link or a retailer note box — the retailer's own template/notes override the instructions (AAFES's note literally says "USE THIS TEMPLATE NOT WHAT IS LISTED IN THE INSTRUCTIONS SECTION").113114| # | Step | Owner | Exactly what to do | Done when |115|---|------|-------|--------------------|-----------|116| 1 | How to Get Started | Customer | Read intro, click Next | Step shows complete |117| 2 | Configure Initial Settings | **Customer** | Company info, billing contact, email-notification recipients | Saved without validation errors |118| 3 | Pricing Agreement | **Customer** | Someone *authorized* accepts the retailer's pricing terms (commercial acceptance, not technical) | Agreement accepted |119| 4 | Supply Warehouses | **Customer** | Add every ship-from warehouse: full address + the **short warehouse code** (e.g. `DFW`) it will be known by. This registers the code DSCO's imports validate against | All warehouses listed with their codes |120| 5 | Submit Catalog | **Customer** | Upload the product catalog **in the retailer's template** (real UPCs; images if required). This is the gate — test orders generate from it | Catalog accepted; items visible |121| 6 | Load Items & Inventory | **Customer** (Orderful assists) | Download the *retailer-specific* inventory template (note box, not the instructions). Seed ~3 SKUs with `quantity_available` ≥ 20. For AAFES this bootstrap is a 2-col CSV (`sku`, `quantity_available`) | Items show on the Inventory page |122| 7 | Update Inventory | Customer | Download current inventory (Download All Results → Export Inventory), change qty to 50, re-upload | Quantities show 50 |123| 8 | Create Test Orders | Orderful + Customer | Pick the retailer's standard carrier from the dropdown (AAFES: FedEx – Home Delivery / FEHD), click Next → portal generates ~3 test POs. Note the PO numbers — steps 9–14 use them. Can be re-run for more | Test POs exist |124| 9 | Acknowledge Orders | **Orderful** | The real EDI wiring — AS2 + both automation jobs (Phase 4). Run the Orders export; orders flip to **Acknowledged** (a platform status — no 855 document exists on DSCO) | Test orders show "Acknowledged" and appear in Orderful |125| 10 | Ship an Order | **Orderful** (customer's NS) | Fulfill in NS → outbound 856 through the Outbound job. Test tracking numbers: FedEx = 15 zeros; UPS = `1Z` + 16 zeros. Respect ship-by dates + the retailer's service-level codes; check for a retailer-specific shipment template | Order shows shipped in DSCO order history |126| 11 | Cancel an Order | Orderful | Generate the 870 via the Orderful API — don't build a full NS cancellation workflow just for this test | Cancellation reflected in DSCO |127| 12 | Multi-Line Ship | Orderful | Partial fulfillment of a multi-line test PO → 856 | Partial shipment shows correctly |128| 13 | Invoice | Orderful | Bill in NS → outbound 810 (**after** the 856 — order-first). Strict spec: required fields only | Invoice accepted in DSCO order history |129| 14 | Returns | **Customer** | Handled **manually in the DSCO UI** — no EDI return document; don't scope return automation. Customer's team must know this is theirs in production | Return processed in the portal |130| 15 | Next Steps | Rithum | Rithum reviews all results; on pass the connection moves toward production | Rithum confirms pass |131132⚠ **Watchouts**133- Orders **can't be deleted** in the DSCO UI once created — ignore stale ones, use the latest batch.134- **Account-switching bugs**: if the portal shows the wrong account, log out, clear cache/cookies, re-accept the invite.135- Job failures: Automation Jobs → **Job History** → click the failed run — the detail page names the reason (wrong SCAC, missing tracking, invalid data).136137## Phase 4 — AS2 + automation jobs (the part that breaks)138139**A. AS2 connection**1401. In Orderful, create a communication channel → **Shared AS2** → search **"Rithum AS2"** (the shared connection; reuses Orderful's existing cert already known to Rithum — do **not** mint a new cert).1412. AS2 is **not enabled by default** in the DSCO portal. Call Rithum support (see below) to enable AS2 for the account and configure the backend connection with the customer's ISA ID (exactly 15 chars).142143**B. Two automation jobs (in the DSCO portal)**144145| Job | Type | Key settings |146|-----|------|--------------|147| **Orders** | Orders Export (pulls 850s → Orderful) | Standard=DSCO, Dest=DSCO AS2, Include Test Orders ✓, **Source Data = "All retailers"**, filename `Purchase_Order_${ymdt}.edi` |148| **Outbound** | EDI Import (sends 856/810 → DSCO) | Source=DSCO AS2, filename `*` (wildcard), **Generate 997 ✓** |149150⚠ **Watchouts**151- **Source Data defaults to the specific retailer, which excludes the fictitious test retailer → the export pulls 0 orders.** Set it to **"All retailers"** (works in test and prod).152- Both jobs default to **Manual** schedule. **Leaving "Orders" on manual at go-live means real POs sit un-exported and never reach you** — it looks like "no orders arrived." Flip to automatic at cutover; if an expected order is missing, run the job manually and check its schedule first.153154## Phase 5 — Production cutover1551561. Install the SuiteApp in **production** NetSuite; mirror the sandbox config.1572. Finish the prod **enabled-transaction** links (customer + doc-type + direction) so transactions match.1583. Set all Orderful relationships **READY** + **autoSend ON**; schedule the inbound polling job; set the prod API secret + polling bucket.1594. **Replace the "Keep In Orderful" outbound channel with the real DSCO/Rithum AS2 delivery.**1605. **Map ALL shipping methods in the NS prod shipping lookup — and put the retailer's code in the right TD5 field.** For AAFES, *every* shipment transmits with service code **`FEHD`** regardless of actual carrier (FedEx, Stamps.com, even USPS) — but `FEHD` is a **service-level code**: it goes in the lookup's *service-level* field (→ TD5 `locationIdentifier`, enum-validated), while the *SCAC/carrier* field stays the real carrier name (FedEx/UPS/USPS → TD5 `identificationCode`). Putting `FEHD` in the carrier field passes validation but ships a service code as the carrier. Map every method the customer's pack/ship tool uses — not just "FedEx Home Delivery" — or force `locationIdentifier` universally via JSONata / an Orderful rule.1616. **Stand up the production 846 inventory feed** — saved search on the trading-partner Customer record (`ITEM`/`AVAILABLE`/`LOCATION`, internal IDs) + schedule the Inventory Advice Handler MR; the `REF*WS` warehouse code must be a bare code registered as a warehouse in the DSCO portal. See `reference/aafes-dsco.md` → "AAFES DSCO 846 Inventory Feed".162163⚠ **Watchouts**164- **TD5 carrier failure:** if the prod shipping/SCAC lookup is missing/misconfigured, the 856 `TD5` emits the carrier *name* in `locationIdentifier` and omits the mandatory `identificationCode` → rejected. Sandbox often has the mapping while prod doesn't — **verify prod explicitly.**165- Confirm the first live 850's items resolve in NS (no `ITEM_LOOKUP_MISSING`).166167## Phase 6 — Go-live: the smoke-test / LIVE-letter sequence168169Go-live is a **gated sequence, not a date** (AAFES example):1701711. Retailer places a **smoke-test order**.1722. **Fake-ship + invoice it clean in DSCO within 1 business day**, adhering to the retailer's Required-Fields-by-Workflow.1733. **2–3 business days** through the retailer's systems.1744. If the invoice passes clean → the retailer sends a **LIVE letter**.1755. The compliant assortment moves to the **production stream** (2–3 more days).1766. Retailer creates a **return in DSCO**; **accept it within 1 business day** to close out.177178**The customer owns the clock in this phase.** Make sure they know, before the smoke test starts, that they (or Orderful on their behalf) must:179- **Fake-ship + invoice the smoke-test order within 1 business day** of it arriving — someone with NS + DSCO access must be available that day.180- **Accept the retailer's closing return in DSCO within 1 business day** — it's a portal action on their account, and it's easy to miss because it arrives days after everyone stopped watching.181- **Get the production carrier list from the retailer** (which methods/codes will real orders carry) so every method is mapped *before* volume — an unmapped method on a live order = failed 856 = **chargeback** (AAFES: **$150 per ASN violation**; one vendor accumulated $7,148.50 in a cycle).182183⚠ **Watchouts**184- **Running the smoke test in production has real side effects** — a real NS fulfillment, invoice/AR, and reduced inventory. Decide up front whether prod testing is acceptable, who runs it, and who reverses it. Deleting the NS records afterward does **not** retract the already-transmitted-and-accepted 856/810 (immutable Orderful events); the return is a manual DSCO accept, so NS records aren't required for it. **Hold reversals until the LIVE letter confirms the invoice passed.**185- **Stale inventory can gate the retailer from releasing orders** — dropship retailers commonly require current inventory before sending a PO. Keep the feed current (this is why the production 846 must be *scheduled*, not one-off).186187## Silent killers (no error anywhere — things just stall)188189Each of these has burned days on a real onboarding because nothing showed red:1901911. **Portal invite never accepted / steps 1–7 sitting on the customer.** Rithum won't progress and no one is notified. Chase weekly; the commercial steps are the longest pole.1922. **Catalog not uploaded** → step 8 can't generate test orders → everything downstream waits.1933. **Source Data = specific retailer** on the Orders export → test orders come from a *fictitious test retailer*, so the job pulls **0 transactions** and simply looks like "no orders."1944. **Automation jobs left on Manual at cutover** → real production POs sit un-exported in DSCO. Looks exactly like "the retailer isn't sending orders."1955. **AS2 not enabled on the DSCO account** → nothing transmits; the portal just never shows AS2 options. It takes a *phone call* to Rithum (ticket alone is slow).1966. **Warehouse code mismatch** → the 846/inventory import fails **application-level** in DSCO ("Unknown warehouse code … please create it") even while the EDI 997 shows ACCEPTED. The `REF*WS` code must be the bare registered code (e.g. `DFW`), not a descriptive location name — and it must exist as a warehouse in the portal (step 4).1977. **810 sent before the 856** → 997-accepted but silently never processed (order-first). Check DSCO order history, not Orderful delivery status.1988. **Stale inventory** → retailer quietly stops releasing orders; the Rithum "you missed an inventory update" exception email is the only signal — make sure it goes to a watched inbox.199200---201202## Top watchouts (quick reference)2032041. **Send the 856 before the 810** — DSCO is order-first; 997 ≠ business acceptance.2052. **Map every ship method — and put the code in the right field**: the retailer's universal code is a *service-level* code (AAFES = `FEHD` → TD5 `locationIdentifier`); the carrier/SCAC field stays the real carrier name.2063. **Outbound relationships need a comm channel** or delivery fails silently.2074. **Source Data = "All retailers"** or the Orders export pulls 0.2085. **Flip automation jobs to automatic at cutover** — manual blocks live orders.2096. **AS2 must be enabled by Rithum support** — not on by default.2107. **Retailer templates override generic DSCO instructions.**2118. **Confirm the correct EDI path first** — wrong account = rebuild.2129. **810 is strict**; **SKU in LIN03, short seq in LIN01** on the 856.21310. **Returns are manual** in the DSCO UI — no EDI return doc.214215## Definition of done — gate checklists216217Don't declare a phase done until every box in its gate is checked.218219**Gate A — ready to start (customer inputs)**220- [ ] Retailer relationship active; Rithum invite accepted; Orderful added to the portal221- [ ] Named EDI/ops contact + billing contact + notification recipients provided222- [ ] Pricing agreement accepted by someone authorized223- [ ] Warehouse list with short codes; catalog in retailer template (UPCs, images); seed inventory numbers224- [ ] NetSuite access (SB + prod) if Orderful runs the ERP side; prior-provider creds if migrating225226**Gate B — portal testing complete (end of Phase 3/4)**227- [ ] All 15 steps green; Rithum confirms pass (step 15)228- [ ] AS2 enabled on the DSCO account; both automation jobs exist and have succeeded in Job History229- [ ] Acknowledge / ship / cancel / multi-line / invoice / return all verified in DSCO order history230231**Gate C — production cutover**232- [ ] Prod SuiteApp mirrored; relationships READY + autoSend; prod polling wired233- [ ] Outbound channel = real DSCO/Rithum AS2 (not "Keep In Orderful")234- [ ] **Every** production ship method mapped (service-level code → TD5 `locationIdentifier`; real carrier in the SCAC field)235- [ ] Production 846 inventory feed configured **and scheduled**; `REF*WS` = bare registered warehouse code236- [ ] **Both automation jobs flipped to automatic**237- [ ] First live 850's items resolve in NS (no `ITEM_LOOKUP_MISSING`)238239**Gate D — go-live closed out**240- [ ] Smoke-test order fake-shipped + invoiced clean within 1 business day241- [ ] LIVE letter received; assortment moved to production stream242- [ ] Closing return accepted in DSCO within 1 business day243- [ ] Reversals of smoke-test NS records done **after** the LIVE letter244- [ ] Inventory feed confirmed recurring (not a one-off run); exception alerts going to a watched inbox245- [ ] Customer team briefed: returns are manual in DSCO; order-first sequencing; chargeback triggers246247## Support & contacts248249| | Details |250|---|---------|251| Rithum support | **844-482-4357** → DSCO support → DSCO onboarding (until 6PM ET) |252| Partner setup | `dscopartnersetup@rithum.com` |253| Tip | Create a ticket first, then call and reference it — phone is faster |254255## Companion skills (onboarding set)256257If present in your skills set, these go deeper on individual phases: **dsco-recon** (pull the customer's DSCO config), **dsco-portal-onboarding** (detailed 15-step portal walkthrough), **org-prebuild** (build the Orderful org from recon), **sps-recon** (migrating off SPS), **writing-outbound-jsonata** / **item-lookup** / **audit-outbound-rules** (NetSuite/Orderful mechanics), and the **aafes-dsco** reference (AAFES paths, guidelines, 850 structure, compliance $).