The phone rang at 2 a.m. It was our warehouse IT lead, voice hoarse: "The ASN went out. The retailer's system says it never arrived. The truck is already at the DC gate, and our appointment window closes in six hours."

I've lived that night more than once. If you supply a major American retailer, EDI integration is the toll booth you cannot drive around. The purchase order comes in as an 850, the advance ship notice goes back as an 856, the invoice follows as an 810. If any one of those three documents stalls, the freight doesn't get in and the money doesn't come back. Here's the field guide I wish someone had handed me twenty years ago.

What the three documents actually say

EDI in US retail runs on the ASC X12 standard, and most big retailers still sit on version 4010 or 5010. Forget the alphabet soup for a moment. You need exactly four numbers in your head: 850 is the purchase order, 856 is the advance ship notice (everyone just says ASN), 810 is the invoice, and 997 is the functional acknowledgment — the "we got it" receipt the other side sends back.

The 850 comes from the retailer to you. Three segments carry the weight: BIG holds the PO number and date, N1 identifies ship-to and bill-to, and PO1 carries the line items, quantities, and unit prices. Watch out for one thing: most retailers put their own item numbers in the 850, not your SKUs. Build the cross-reference table before you ship anything. I once watched a 3PL in Ontario, California lose a full day at the DC gate because two line items never got mapped.

The 856 goes from you back to them, and it's the one that burns people. Its structure is a tree: HL segments cascade from Shipment down through Order, Pack (carton or pallet), and Item. BSN carries the ASN number, MAN carries the SSCC pallet code. SSCC-18 is the GS1 standard — one code per pallet, printed on the UCC-128 label. When the DC scans that label at receiving, their system matches your ASN against the physical freight automatically. Label won't scan, or the pallet count in your ASN doesn't match what's on the trailer? Best case they reject the load. Worst case you eat a chargeback under the retailer's routing guide — check the current policy on the retailer's own site, because those numbers move.

The 810 is the invoice. IT1 carries the line items, TDS the total amount. It has to reconcile three ways: against the 850 unit price and the actual shipped quantity. If it doesn't, their system kicks the invoice and your finance team gets to do archaeology.

And don't skip the 997. Every time you send a document, the other side returns a 997 to say it landed. No 997 means they never got it. Don't send the next document — go check the pipe first.

Warehouse associate scanning cartons with a handheld scanner at an outbound dock

The integration sequence that actually works

Here's the order I'd insist on. First, get all three documents cycling in the test environment: receive an 850, return an 856, issue an 810, and confirm a 997 comes back for each one. Then run the retailer's full test script — they usually hand you a standard set of scenarios: clean order, order change, split shipment, partial shipment. Do not skip the partial shipment case. It's the most common scenario in real life and the one most likely to expose a broken HL hierarchy.

Then build your troubleshooting chain of command before you need it. Something breaks? Check in this order. First, did the 997 come back? No — it's a transport problem, look at your VAN or direct connection. Yes, but business validation failed? Read the error document they sent, find the segment and element it points to. Nine times out of ten it's a wrong sender/receiver ID in the ISA/GS envelope, or you used an X12 version they don't support. Validation passed but the DC says the freight doesn't match? Go back to the 856's HL tree and the SSCCs and walk down level by level.

One piece of advice for your first real shipment: pick a small one and babysit it end to end. Record three timestamps — when the ASN went out, when the truck's appointment was, when the DC signed for it. Most first-shipment disasters I've seen came down to timing: the truck arrived before the ASN did, and the retailer's system had no record of the load. It sat at the gate.

Three expensive mistakes

Mistake one: ASN doesn't match the physical freight. The loading crew tossed in an extra carton or shorted a pallet and figured "close enough." The system doesn't do close enough. The DC receives against your ASN, and the discrepancy triggers the penalty clause. The fix is embarrassingly low-tech: before the trailer door closes, reconcile the ASN quantities against the load sheet line by line, with two signatures. Low-tech. Works.

Mistake two: the 810 amount doesn't match. Usually it's promo pricing hiding in the 850 unit price, or a free-goods line that got invoiced at full price. At volume, finance never sees it until the invoice gets rejected. Make your system do a three-way match before release: 850 price, actual shipped quantity, 810 line amount. All three agree or the invoice doesn't go out.

Mistake three: treating EDI as "an IT thing." I've watched operations managers sit out the whole integration, then discover nobody in the building understands the 856's HL hierarchy when it broke. You need at least one person who knows the business in the room for the entire integration — because every field in those documents eventually maps to a physical action in the warehouse.

Go-live checklist

  • 850 item cross-reference table is complete, no missing lines
  • 856 HL hierarchy matches the actual packing structure (Shipment → Order → Pack → Item)
  • One SSCC-18 per pallet, UCC-128 labels scan cleanly on the dock floor
  • ASN transmitted before the truck's appointment time and visible in the retailer's system
  • 997 acknowledgment confirmed after every document sent
  • 810 line prices match the 850; TDS total matches actual shipped quantity
  • Split-shipment and partial-shipment scenarios tested in the test environment
  • X12 version (4010/5010) matches the retailer's requirement
  • ISA/GS envelope sender/receiver IDs match what was certified in testing
  • First live shipment is a small one, with all three timestamps recorded