870

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 ISR segment with ISR01 = 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 by REF*IA*<your Flxpoint vendor number>~
  • Two hierarchy levels only: HL03 = O (Order) and HL03 = I (Item). Any other level code (S, P, …) rejects the file
  • Each order HL needs: exactly one PRF (PO number) plus REF*CO and REF*VNboth with values — right after the loop
  • Each item HL points at its order via HL02 and carries PO1 + ISR pairs
  • PO106 accepts only UP (UPC) or EA (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

code
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

ElementNameLengthM/OValue/Notes
BSR01Status Report Code1-2 IDRequired2 (fixed)
BSR02Order/Item Code2 IDRequiredPP (fixed)
BSR03Reference Identification30 ANOptionalVendor's reference for this report
BSR04Date8 DTOptionalCCYYMMDD

REF - Internal Vendor Number (immediately after BSR)

ElementNameLengthM/OValue/Notes
REF01Qualifier2 IDRequiredIA
REF02Reference30 ANRequiredFlxpoint-assigned vendor number

HL - Hierarchical Level

ElementNameLengthM/OValue/Notes
HL01Hierarchical ID Number12 ANRequiredIncrements
HL02Hierarchical Parent ID12 ANEmpty on Order level; on Item level = the parent order's HL01
HL03Hierarchical Level Code2 IDRequiredO (Order) or I (Item) — no other levels

PRF - Purchase Order Reference (Order level)

ElementNameLengthM/OValue/Notes
PRF01Purchase Order Number22 ANRequiredPO number from the original 850

REF - Order References (Order level, after PRF)

ElementNameLengthM/OValue/Notes
REF01Qualifier2 IDRequiredCO (Customer Order #) and VN (Vendor Order #) — both required, both with values
REF02Reference30 ANRequiredThe order number

PO1 - Baseline Item Data (Item level)

ElementNameLengthM/OValue/Notes
PO101Assigned Identification20 ANOptionalPO line number
PO102Quantity10 NRequiredCancelled quantity — whole number
PO103Unit of Measure2 IDOptionale.g. EA
PO106Product/Service ID Qualifier2 IDRequiredUP (UPC) or EA (EAN) only
PO107Product/Service ID48 ANRequiredThe item identifier

ISR - Item Status Report (one per PO1)

ElementNameLengthM/OValue/Notes
ISR01Status Code2 IDRequiredIC (Item Cancelled) — the only accepted value
ISR02Date8 DTOptionalCancellation date (CCYYMMDD)

Example

EDI · 004010VICS
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:

  1. The file downloader pulls 870 files from the supplier's FTP/SFTP location.
  2. The parser reads the file and breaks it into orders and items.
  3. The writer matches the parsed data to your purchase orders and records the cancellations.
  4. The processed file is marked complete so it is never processed twice.

What Happens After Parsing

Once the file parses cleanly:

  1. Flxpoint matches PRF01 (the PO number) to an existing purchase order.
  2. For each item, the corresponding PO line is acknowledged as cancelled.
  3. The acknowledgement date is taken from the file's ISA envelope date. ISR02, when present, is an optional per-item cancellation date.
  4. 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.

MessageMeaningWhat to do
BSR01 must be '2'BSR has an unexpected status codeAsk the supplier to verify BSR01 in their 870
BSR02 must be 'PP'BSR has the wrong status typeThe 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 IASupplier is sending the wrong reference qualifier
Missing ISR loop / Missing ISR SegmentAn item loop has no ISR statusFile is incomplete — every item must carry a status
Missing ISR01, Order Status CodeISR exists but has no status codeSupplier sent an empty ISR segment
Illegal ISR segment, ISR01 <code>ISR01 is something other than ICUnsupported status code — the 870 is for cancellations only
Missing items for order <id>An order has no items under itOrder header with no line items
Unmapped segments in ItemDetail PO LoopExtra segments inside a PO1 loopSupplier is sending segments Flxpoint doesn't parse
Unmapped segments in ItemDetail LoopExtra segments in the item loopUnexpected data from the supplier
Unmapped segments found in transactionLeftover segments after parsingThe file contains segments Flxpoint doesn't recognize
No acknowledgement created (no error)PRF01 didn't match any PONot 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

  1. 870 = cancellations. Every item in an 870 is treated as cancelled.
  2. The PO number is key. Matching is on PRF01; a wrong or misformatted PO number matches nothing (and produces no acknowledgement, with no error).
  3. Segment validation is strict. BSR01 = 2, BSR02 = PP, REF01 = IA, ISR01 = IC — any deviation rejects the file. (The envelope version number is not checked.)
  4. Files are processed once. After a successful parse the file is marked processed and won't be picked up again.
  5. 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.