EDI 870 — Order Status Report
EDI 870 — Order Status Report
Purpose
Report the status of items on a purchase order. Originates with the Supplier, sent to Flxpoint.
⚠️ Flxpoint uses the 870 for item cancellations ONLY. Every status in the file must be ISR01 = IC (Item Cancelled). Any other status code rejects the file — statuses like "shipped" belong on the 856, and acknowledgements on the 855.
How It Works
When a supplier cannot fulfill one or more items on a PO, the 870 tells Flxpoint which items are cancelled. Flxpoint matches the file to the order using three references together — the PO number (PRF01), the customer order number (REFCO), and the vendor order number (REFVN) — and then cancels the listed items. A missing or blank reference means the order cannot be identified and the file is rejected.
Business Rules
- Cancellations only: every PO1 loop must carry an
ISRsegment withISR01 = IC. Any other code rejects the file (Illegal ISR segment, ISR01 <code>) - BSR + REF*IA open the file:
BSR*2*PP*<reference>*<date>~must be immediately followed byREF*IA*<your Flxpoint vendor number>~ - Two hierarchy levels only:
HL03 = O(Order) andHL03 = I(Item). Any other level code (S, P, …) rejects the file - Each order HL needs: exactly one
PRF(PO number) plusREF*COandREF*VN— both with values — right after the loop - Each item HL points at its order via HL02 and carries
PO1+ISRpairs - PO106 accepts only
UP(UPC) orEA(EAN) — other qualifiers are not supported on the 870 - PO102 (quantity) must be a whole number
- Only the segments above are mapped — anything else rejects the file as unmapped
Segment Hierarchy
ISA Interchange Header GS Group Header (GS01 = "RS") ST Transaction Set Header (ST01 = "870") BSR Beginning Segment for Order Status Report (BSR01=2, BSR02=PP) REF Reference — Internal Vendor Number (IA) — must follow BSR ┌─ HL Loop — Order level (HL03 = O) │ HL Hierarchical Level │ PRF Purchase Order Reference (PO number) │ REF Customer Order Number (CO) │ REF Vendor Order Number (VN) └─ ┌─ HL Loop — Item level (HL03 = I, HL02 = parent order HL01) │ HL Hierarchical Level │ PO1 Baseline Item Data (quantity + UP/EA identifier) │ ISR Item Status Report (IC = Item Cancelled) └─ SE Transaction Set Trailer GE Group Trailer IEA Interchange Trailer
Segment Specifications
BSR - Beginning Segment for Order Status Report
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| BSR01 | Status Report Code | 1-2 ID | Required | 2 (fixed) |
| BSR02 | Order/Item Code | 2 ID | Required | PP (fixed) |
| BSR03 | Reference Identification | 30 AN | Optional | Vendor's reference for this report |
| BSR04 | Date | 8 DT | Optional | CCYYMMDD |
REF - Internal Vendor Number (immediately after BSR)
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| REF01 | Qualifier | 2 ID | Required | IA |
| REF02 | Reference | 30 AN | Required | Flxpoint-assigned vendor number |
HL - Hierarchical Level
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| HL01 | Hierarchical ID Number | 12 AN | Required | Increments |
| HL02 | Hierarchical Parent ID | 12 AN | — | Empty on Order level; on Item level = the parent order's HL01 |
| HL03 | Hierarchical Level Code | 2 ID | Required | O (Order) or I (Item) — no other levels |
PRF - Purchase Order Reference (Order level)
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| PRF01 | Purchase Order Number | 22 AN | Required | PO number from the original 850 |
REF - Order References (Order level, after PRF)
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| REF01 | Qualifier | 2 ID | Required | CO (Customer Order #) and VN (Vendor Order #) — both required, both with values |
| REF02 | Reference | 30 AN | Required | The order number |
PO1 - Baseline Item Data (Item level)
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| PO101 | Assigned Identification | 20 AN | Optional | PO line number |
| PO102 | Quantity | 10 N | Required | Cancelled quantity — whole number |
| PO103 | Unit of Measure | 2 ID | Optional | e.g. EA |
| PO106 | Product/Service ID Qualifier | 2 ID | Required | UP (UPC) or EA (EAN) only |
| PO107 | Product/Service ID | 48 AN | Required | The item identifier |
ISR - Item Status Report (one per PO1)
| Element | Name | Length | M/O | Value/Notes |
|---|---|---|---|---|
| ISR01 | Status Code | 2 ID | Required | IC (Item Cancelled) — the only accepted value |
| ISR02 | Date | 8 DT | Optional | Cancellation date (CCYYMMDD) |
Example
ISA*00* *00* *ZZ*VENDORID *ZZ*FLXPOINT *260708*0900*U*00401*000000001*0*P*>~GS*RS*VENDORID*FLXPOINT*20260708*0900*1*X*004010~ST*870*0001~BSR*2*PP*STATUS001*20260708~REF*IA*12345~HL*1**O~PRF*PO-98765~REF*CO*CUST-11111~REF*VN*VORD-22222~HL*2*1*I~PO1*1*2*EA***UP*012345678905~ISR*IC*20260708~SE*11*0001~GE*1*1~IEA*1*000000001~
This cancels 2 units of UPC 012345678905 on PO-98765.
Note on the version identifier: the example uses 004010, but Flxpoint does not validate the interchange/group version number (e.g. 004010 vs 005010) — it is ignored during parsing. What matters is the segment structure and the required values (BSR01=2, BSR02=PP, REF01=IA, ISR01=IC).
Processing Pipeline
An inbound 870 moves through the standard EDI intake stages:
- The file downloader pulls 870 files from the supplier's FTP/SFTP location.
- The parser reads the file and breaks it into orders and items.
- The writer matches the parsed data to your purchase orders and records the cancellations.
- The processed file is marked complete so it is never processed twice.
What Happens After Parsing
Once the file parses cleanly:
- Flxpoint matches
PRF01(the PO number) to an existing purchase order. - For each item, the corresponding PO line is acknowledged as cancelled.
- The acknowledgement date is taken from the file's ISA envelope date.
ISR02, when present, is an optional per-item cancellation date. - The file is marked processed so it will not be re-read.
Common Errors & What They Mean
If an 870 fails or has no effect, pull the raw EDI file and compare it against the segment specs above.
| Message | Meaning | What to do |
|---|---|---|
BSR01 must be '2' | BSR has an unexpected status code | Ask the supplier to verify BSR01 in their 870 |
BSR02 must be 'PP' | BSR has the wrong status type | The file isn't using the expected Product Transfer format |
REF01 following the BSR segment must be 'IA' | The REF right after BSR isn't qualifier IA | Supplier is sending the wrong reference qualifier |
Missing ISR loop / Missing ISR Segment | An item loop has no ISR status | File is incomplete — every item must carry a status |
Missing ISR01, Order Status Code | ISR exists but has no status code | Supplier sent an empty ISR segment |
Illegal ISR segment, ISR01 <code> | ISR01 is something other than IC | Unsupported status code — the 870 is for cancellations only |
Missing items for order <id> | An order has no items under it | Order header with no line items |
Unmapped segments in ItemDetail PO Loop | Extra segments inside a PO1 loop | Supplier is sending segments Flxpoint doesn't parse |
Unmapped segments in ItemDetail Loop | Extra segments in the item loop | Unexpected data from the supplier |
Unmapped segments found in transaction | Leftover segments after parsing | The file contains segments Flxpoint doesn't recognize |
| No acknowledgement created (no error) | PRF01 didn't match any PO | Not an error, but nothing was cancelled — verify the PO number exists and that the supplier is sending it in the correct format |
Vendor Variations
Most suppliers follow the standard structure above, where every listed item is treated as a cancellation. A few suppliers (for example, Jessica Simpson) send a slightly different 870 layout, but the outcome is the same — the listed items are cancelled.
Key Takeaways
- 870 = cancellations. Every item in an 870 is treated as cancelled.
- The PO number is key. Matching is on
PRF01; a wrong or misformatted PO number matches nothing (and produces no acknowledgement, with no error). - Segment validation is strict.
BSR01 = 2,BSR02 = PP,REF01 = IA,ISR01 = IC— any deviation rejects the file. (The envelope version number is not checked.) - Files are processed once. After a successful parse the file is marked processed and won't be picked up again.
- Check the raw file. For a failed 870, pull the raw EDI and compare it against the segment specs above.
Something unclear?
Ask our AI assistant — it knows this spec and can explain any segment, error, or rule in plain English.