A supplier ships an order and, before the truck arrives, sends a message that describes what is on it. In EDI that message is the 856 Ship Notice/Manifest, usually called the advance ship notice or ASN. It sits between the 850 Purchase Order that asked for the goods and the 810 Invoice that will bill for them. When the truck backs into the dock, the receiving team has three records in front of it: the order, the notice and whatever it can count and scan.
The tempting check is the total. The order asked for 480 units, the notice says 480 units shipped, the dock counted 480 units, and the receipt is posted. That check can pass on a delivery in which one pallet is short, one announced pallet never arrived and one pallet nobody announced is standing in the aisle. The units add up because the errors happen to cancel out. Nothing in the total says which pallet is which.
This piece describes how to read an ASN so that each pallet becomes the unit of comparison, how to line that up with the order and with what was physically received, and how to route the gaps that remain. It does not cover carrier claims for damage in transit, invoice matching or customer returns. Those questions come later, and each of them is easier to answer once the receipt has been reconciled pallet by pallet.
What the 856 actually describes
The X12 definition of the 856 is broader than a packing list. The transaction set can list the contents of a shipment together with order information, product description, physical characteristics, type of packaging, marking, carrier information and the configuration of goods within the transportation equipment. It lets the sender describe the shipment “in various levels of detail”. That last phrase is the important one. An ASN is not a flat list of lines. It is a tree.
The tree is built from hierarchical level segments. Each HL segment carries a level code, and the codes that matter for a delivery are Shipment (S), Order (O), Shipping Tare (T), Pack (P) and Item (I). A common layout puts the shipment at the top, one order under it, one tare level for each pallet, packs under each pallet where cartons are labelled, and items at the bottom. The X12 reference is explicit that the HL segment by itself has no meaning. It only says where the next group of segments sits in the tree. The meaning comes from the segments attached to it:
- BSN — the beginning segment for the ship notice, with the identifying number and date of the notice itself.
- PRF — the purchase order reference, which ties an order level of the tree back to the 850.
- MAN — marks and numbers. With qualifier GM, the value is a GS1 Serial Shipping Container Code (SSCC) and its Application Identifier. This is the number printed on the pallet label.
- LIN and SN1 — the item identification and the item detail for the shipment. SN102 is the number of units shipped, and SN105, when it is sent, is the quantity ordered.
Read this way, an ASN makes a precise claim. It says that a tare identified by one SSCC holds a given item in a given quantity, against a given order. Flattening the tree into a list of item totals discards the one thing that lets the dock check that claim: which container holds what.
The SSCC is the key, the total is a summary
GS1 defines Application Identifier (00) as the Serial Shipping Container Code: 18 digits, fixed length, with a check digit, and marked in the GS1 reference data as a key. It identifies one logistic unit. A pallet that leaves the supplier with an SSCC on its label keeps that number until it is broken down, and two pallets in the same delivery should never share one.
The same reference data says what else can sit beside it. Application Identifier (02) is the GTIN of the trade items contained in a logistic unit, and it requires (00) and (37). Application Identifier (37) is the count of trade items in the logistic unit, and it requires (00) together with (02). Put together, a label on a pallet that holds a single product can state three things at once: this pallet, this product inside it, this many units. Application Identifier (400) can carry the customer’s purchase order number, up to 30 characters. A batch or lot number in (10) requires a product identifier such as (02); it describes what is inside, not the pallet.
That is the reason to treat the SSCC as the join key between the notice and the dock. The ASN states the SSCC in a MAN segment at the tare level. The label states the same SSCC on the pallet. If the two numbers match, the ASN’s item and quantity for that tare can be compared with the label’s (02) and (37), and with whatever the receiving team counts. If they do not match, no amount of agreement in the totals helps.
Before using an SSCC as a key, validate it. The eighteenth digit is a GS1 check digit calculated from the first seventeen. A misread digit from a photo or a damaged label will almost always fail that check, and a value that fails is a reading problem to resolve, not a pallet that the supplier forgot to announce.
Item serial numbers belong to a different layer. As the return merchandise authorization piece explains, a serial number in Application Identifier (21) only means something together with a product identifier. A pallet label identifies the container. If individual units carry serials, they are read at the item level, not from the SSCC.
Three records, three different questions
The order, the notice and the receipt are often treated as three copies of the same information. They answer different questions, and the comparison works better when each one is allowed to answer only its own.
| Record | Question it answers | Unit it speaks in | Fields to keep |
|---|---|---|---|
| Purchase order (850) | What did the buyer ask for? | Order line | PO number, line number, GTIN or buyer item, quantity ordered, unit of measure |
| Advance ship notice (856) | What does the supplier say it shipped, and how is it packed? | Tare (pallet), then pack, then item | BSN number and date, PRF order reference, SSCC from MAN (GM), GTIN, units shipped per tare |
| Receipt | What arrived at the dock, and in what condition? | The container that was scanned or counted | SSCC scanned, label (02) and (37), units counted, condition note, the photo or page each value came from |
Where a buyer returns its receipt to the supplier electronically, X12 has a separate transaction set for it, the 861 Receiving Advice/Acceptance Certificate, whose RCD segment carries the quantity of units received or accepted. The 861 is a report of the receipt, not a replacement for it. The comparison below happens before anyone writes one.
Reconcile per pallet, then roll up
The order of operations decides what the reconciliation can see. Comparing totals first hides everything below them. Comparing pallets first, then rolling up to order lines, keeps every discrepancy attached to the container where it happened.
- Validate every SSCC — on the ASN and on every scanned or photographed label. Values that fail the check digit go to a reading queue with their source image.
- Join by SSCC — each SSCC lands in one of three groups: on the ASN and received, on the ASN and not received, received and not on the ASN.
- Compare joined pallets — for each SSCC in the first group, compare the ASN’s GTIN and units shipped for that tare with the label’s (02) and (37), and both with the count the dock recorded.
- Roll up to the order line — only then sum the received units by order line and compare them with the quantity ordered, from the 850 or from SN105 when the supplier echoes it.
- Keep every value — the ASN quantity, the label quantity and the counted quantity are three facts. None of them overwrites another.
A worked example shows why the order matters. One purchase order line asks for 480 units of a single GTIN. The ASN announces four pallets of 120 units each. The dock scans four pallets and counts 480 units in total.
| SSCC | ASN units | Label (37) | Counted | Finding |
|---|---|---|---|---|
| 006141410001000011 | 120 | 120 | 120 | Matches |
| 006141410001000028 | 120 | 120 | 120 | Matches |
| 006141410001000035 | 120 | 120 | 96 | Short 24 against label and ASN |
| 006141410001000042 | 120 | — | — | Announced, not received |
| 006141410001000059 | — | 144 | 144 | Received, not announced |
The order line reconciles: 120 + 120 + 96 + 144 is 480, which is what was ordered and what the ASN said in total. A total-only check posts the receipt. The pallet check returns three findings. One pallet is 24 units short of its own label. One pallet the supplier says it shipped is not at the dock. One pallet is at the dock that the supplier never announced, and its 144 units are exactly what the short pallet and the absent pallet are missing between them. That might be a relabelled pallet, a second shipment that arrived early or goods meant for another order. The total cannot tell those apart. The SSCC, the label’s (400) order number if it has one and the ASN of any other open shipment can.
Not every ASN arrives as EDI
Large suppliers send 856 transactions. Many others send the same information as a document: a PDF packing list with pallet numbers, a printed manifest, a spreadsheet, a photo of the labels taken at the dock. Retail receiving teams see GS1-coded shipping manifests, packing lists, bills of lading and the exception documents that EDI 850, 810 and 856 flows produce when something does not parse. The reconciliation is the same in each case. What changes is where the values come from.
When the ASN is a document, extraction has to rebuild the tree the 856 would have carried: which pallet number sits above which item lines, which order each block refers to, and which quantities belong to which pallet. A packing list that prints the pallet number once and lists six item lines under it has to come out as six items on one tare, not as six unrelated lines. When the receipt is a photo of a label, the SSCC is read from the human-readable line where the label prints one, and the check digit decides whether the read can be trusted. In both cases every value keeps a pointer to the page, line or image region it came from, so that a reviewer can see the label rather than a number that someone typed.
A gap is a finding, not a verdict
The reconciliation should produce findings with a reason and a destination. It should not decide who is at fault, and it should not quietly correct one record to match another.
- Short against label — the count is lower than the pallet’s own (37). This is a question about the pallet: a recount, a photo of the open pallet, and a claim to the supplier if the shortage holds.
- Announced, not received — the SSCC is on the ASN and nowhere at the dock. Check the carrier’s paperwork first. The proof of delivery piece covers what a signed delivery receipt does and does not prove about piece counts.
- Received, not announced — the pallet exists and its label is valid, but no open ASN names it. Hold it, read its (400) order number if present, and search the other open notices before receiving it against anything.
- Different product — the label’s (02) or the scanned item is not the GTIN the ASN announced for that SSCC. Treat it as a wrong shipment for that pallet, even when the order line total would absorb it.
- Unreadable — the SSCC fails its check digit or cannot be read. Route it for a rescan or a manual read, with the image attached.
Only after these are resolved does the receipt become something an invoice can be matched against. The three-way match piece describes that later step: comparing the invoice with the order and with what the operation says it received, line by line. That comparison inherits whatever the receipt got wrong. A receipt posted on a matching total carries three hidden pallet problems into accounts payable, where they are much harder to trace back to a container.
What the extraction should return
- The ASN as a tree — shipment, order, tare, pack and item levels, with the BSN number and date and the PRF order number on each order level.
- One record per pallet — SSCC with its check-digit result, the GTIN and units the ASN assigns to it, and the source line or segment.
- The label as read — (00), (02), (37), (400) and (10) where present, each with the image region it came from.
- The dock count — units counted per SSCC and any condition note, kept separate from the label quantity.
- The three join groups — matched, announced and not received, received and not announced.
- The order-line roll-up — received units per PO line against quantity ordered, computed from the pallet records rather than typed.
- A finding per gap — with its reason, the pallet it belongs to and where it should go next.
Count the pallets before the units
An advance ship notice is a promise about containers. The order speaks in lines and the invoice will speak in lines, but the truck carries pallets, and each pallet has a number that both the notice and the label state. Checking that number first, then the product and count on it, then the order line, turns a receipt from a total that happens to match into a record of what actually arrived. The total still matters. It is just the last thing to check, not the first.
Sources
- X12 transaction sets — the purpose of the 856 Ship Notice/Manifest (contents and configuration of a shipment “in various levels of detail”) and of the 861 Receiving Advice/Acceptance Certificate.
- X12 856 Ship Notice/Manifest, Release 8010 (Stedi EDI reference) — the BSN, HL, LIN, SN1, PRF and MAN segments and the place of the 856 between the 850 and the 810; with the hierarchical level codes (S, O, T, P, I), marks and numbers qualifier GM (SSCC and Application Identifier) and the SN1 item detail (SN102 units shipped, SN105 quantity ordered).
- X12 RCD segment (Stedi EDI reference) — quantity of units received or accepted in the 861 receiving advice.
- GS1 Application Identifier (00), SSCC — 18 digits with a check digit, a key for one logistic unit; with (02), which requires (00) and (37), (37), which requires (00) with (02), and (400), the customer’s purchase order number.
