EDI 860 Purchase Order Change: Controlling Late Edits Before Pick
For edi and integration analysts, it leads at shippers, 3pls and carriers · Understand the problem

EDI 860 Purchase Order Change: Controlling Late Edits Before Pick: Illustrative TMS–ERP order and invoice handoff review beside a warehouse floor; not a client facility.
Quick answer: edi 860 po change
An EDI 860 is the buyer's X12 request to change a purchase order already sent as an 850. BCH01 code 04 marks a change and 01 a cancellation, BCH05 carries the change sequence, and POC lines carry codes such as QI, QD, PC or DI. Apply it automatically only before wave release, then reply with an 865.
TL;DR — what you’ll learn
- Key every 860 on BCH03 PO number and BCH05 sequence, and apply only the next sequence; duplicates are logged, older revisions are held, never applied.
- Set the auto-apply cutoff at wave release minus mapping latency and a 10-15 minute buffer; any line already picked goes to the order desk.
- Build the 865 from warehouse line status: BCA02 AD with ACK IA when applied, BCA02 RJ with zero lines when picking has started.
- A 48-case cut caught at the dock cost about $66 or ₹1,956 in the worked example, against about $627 or ₹9,080 when shipped and refused.
Topics: edi 860 po change · edi 860 purchase order change request · edi 865 po change acknowledgment · po change cutoff wave release · bch05 change order sequence number
All quantities, amounts, product codes and events are illustrative teaching examples.
The wave went out at 14:15, pickers finished the order by 14:35, and at 14:40 the customer's EDI 860 landed asking for 72 cases instead of 120. The translator mapped it, the ERP order updated, and nobody told the dock. The trailer left with 120 cases, the buyer received against the changed order, refused 48, and three weeks later a deduction for over-shipment arrived on the remittance.
A purchase order change is easy to receive and hard to apply, because the warehouse has usually started acting on the original order. A clear change cutoff tied to wave release, sequence checks on every 860, and a prompt 865 reply that tells the buyer what was actually accepted turn late edits from silent over-shipments into decisions both sides can see.
- What this guide covers: the BCH header and POC line segments, how change codes map to warehouse actions, the cutoff against wave release, 865 replies, and sequencing rules.
- What it adds: a priced late-change example in dollars and rupees, the GST consequence when an e-way bill already exists, an annotated 860 and 865 pair, and onboarding test cases.
What an 860 asks the seller to do, and why it is not a new 850
An 860 is a request against an order that already exists, not a replacement order. X12 defines it as the buyer's way to request a change to a previously submitted purchase order, or to confirm a change the seller proposed, and says the 850 itself should not be used to convey changes.
That distinction drives the whole design. A second 850 with the same PO number looks like a duplicate order to most translators; an 860 carries a purpose code, a reference to the original PO and line-level change codes, so the seller can apply only the delta. The reply goes the other way as an 865, which X12 describes as the seller's acceptance, rejection or modification of the buyer's change.
Scroll horizontally to see all columns.
| Transaction set | Sent by | Purpose in the change cycle | Warehouse effect |
|---|---|---|---|
| 850 Purchase Order | Buyer | Places the original order; not for changes | Creates the outbound order and its lines |
| 855 Purchase Order Acknowledgment | Seller | Acknowledges the original order | None directly; confirms what will ship |
| 860 Purchase Order Change Request - Buyer Initiated | Buyer | Requests changes or confirms a seller-proposed change | May add, reduce, delete or reprice lines if before cutoff |
| 865 Purchase Order Change Acknowledgment/Request - Seller Initiated | Seller | Accepts, rejects or modifies the buyer's change, or proposes one | Records which version of the order will actually ship |
| 997 Functional Acknowledgment | Receiver of any of the above | Confirms syntax receipt only | None; never proof that a change was applied |
The last row trips up many integrations. A 997 says the 860 parsed; it says nothing about whether the order changed. Our guide to the 997 functional acknowledgment covers what that receipt proves and how to chase missing ones.
Reading the BCH header: purpose code, PO number and change sequence
The BCH segment tells you what kind of change this is and which version of the order it builds on. Get BCH01 and BCH05 wrong and the rest of the transaction is applied to the wrong state of the order.
- BCH01 purpose code: in published 4010 guides, code 04 marks a change and code 01 a cancellation.
- BCH02 order type: the type of PO, for example stand-alone or release against a blanket order.
- BCH03 PO number: the buyer's PO number, which must match an existing order.
- BCH04 release number: used when the order is a release against a blanket PO.
- BCH05 change order sequence number: the buyer's number for this specific revision, up to eight characters in the 4010 element definition.
- BCH06 purchase order date: the date of the original PO, not the date of the change; the change date sits in BCH11 where the partner uses it.
EDI 860 change processing in the order management module should key every buyer revision on BCH03 purchase order number plus BCH05 change order sequence number, and apply a change only when its sequence is exactly one higher than the last applied revision, so a delayed 860 never overwrites a newer quantity.
An order-level cancellation (BCH01 01) usually carries no POC lines at all. Treat it as a separate path with its own cutoff, because cancelling a whole order after it is loaded is a returns problem, not an order-edit problem.
POC line changes: original quantity, quantity left and the change code
Each POC segment names one line and the kind of change. The quantity fields are the part integrations misread most, because POC03 and POC04 do not mean "old" and "new" in every partner's usage.
In X12's published 865 examples, a POC reads POC*1*QI*25*50*EA*9.5*CT*MG*XYZ-1234, explained as a quantity increase from an original 25 to 50 left to receive. The 4010 syntax note requires that if POC03 quantity ordered is present, POC04 quantity left to receive and POC05 unit of measure must also be present. The quantity left to receive is what your warehouse should still ship, net of anything already received.
Scroll horizontally to see all columns.
| POC02 code | Meaning | Warehouse action before wave release | Warehouse action after wave release |
|---|---|---|---|
| QI | Quantity increase | Raise the open quantity; check allocation | Usually a new order line or follow-up shipment |
| QD | Quantity decrease | Reduce the open quantity before allocation | Unpick or reject; never ship the old quantity silently |
| DI | Delete item | Cancel the line | Return picked units to stock or reject |
| AI | Add additional item | Add a line; allocate if stock allows | Ship separately or reject |
| PC | Price change | Update the price for invoicing | Usually still acceptable; affects the invoice, not the pick |
| CT | Change of dates | Re-plan the ship date | Depends on carrier booking |
Partners subset this list heavily. One large retailer's drop-ship 860 accepts only DI and treats each POC as cancelling the entire line quantity. Read each partner's guide and store its allowed codes in the partner profile, so an unexpected code is held rather than guessed.
Placing the change cutoff against wave release and the pick face
The cutoff for applying an 860 automatically should be the moment the order's wave is released, minus a short buffer for the message to reach the WMS. Before that point a change is a data edit; after it, a change is physical work that someone must approve.
Many teams set the cutoff by clock time, such as "changes after 13:00 are next-day". That works only if waves release at fixed times. Where waves release on demand, the cutoff must follow the order, not the clock. Our guide to wave release against carrier cutoffs explains how release times are planned; the rule here simply anchors to whatever release time that plan produces.
Auto-apply predicate for an inbound 860 line (evaluate per POC)
apply_auto = (T_recv + L_map <= T_release - B)
AND (S_new = S_last + 1)
AND (code IN partner.allowed_codes)
AND (status IN ('OPEN','ALLOCATED'))
T_recv time the 860 interchange was received by the translator
L_map measured mapping and posting latency to the WMS (e.g. 4 min, p95)
T_release planned or actual wave release time for the order
B safety buffer, typically 10-15 min
S_new BCH05 of this 860; S_last = last applied sequence for BCH03
status WMS line status; PICKED, PACKED, LOADED never auto-apply
If apply_auto is false and status is OPEN or ALLOCATED: queue for review.
If status is PICKED or later: hold, notify the order desk, reply with 865.
The latency term matters more than it looks. If mapping and posting take four minutes at the 95th percentile and the buffer is ten, any 860 received within fourteen minutes of release goes to a person. That is the window where most "it arrived before the wave" disputes come from.
Replying with an 865: acknowledgment types and line status codes
The 865 is how the buyer learns what will actually ship. Send one for every 860 your partner expects to be acknowledged, and make the header code and the line codes agree with what the WMS did, not with what the 860 asked.
X12's aerospace examples show the patterns. BCA01 11 marks a response. BCA02 AD means acknowledged with detail and no change; AC means acknowledged with detail and changes proposed; RJ means rejected without detail, with no POC loop and CTT showing zero lines; RD means rejected with detail. BCA05 carries the change order sequence number being answered, which ties the reply to one specific 860.
- IA item accepted: the line change was applied as requested.
- IQ and IP: item accepted with a quantity change or a price change from the seller.
- DR date rescheduled: accepted with a new date, carried in the ACK date fields.
- IS substitution made: a different part number is offered in place of the ordered one.
- AC item accepted and shipped: used in X12's example when goods have already left.
Seller replies to an EDI 860 should be generated from the warehouse management system's line status, not the ERP order: an X12 865 with BCA02 AD and ACK IA lines for changes applied before wave release, and BCA02 RJ referencing the same BCA05 sequence when picking has started, sent within 4 business hours.
The four-hour reply target in the capsule is an internal service level, not an X12 rule. Partners often state their own acknowledgment windows in their guides; where they do, the partner's figure wins.
Sequence gaps, duplicates and 860s that arrive before their 850
Change messages arrive out of order more often than teams expect, because buyers resend, VANs retry and mailbox polling batches files. A small set of sequence rules prevents an older change from overwriting a newer one.
- Duplicate sequence: if BCH05 equals the last applied sequence for that PO, log it, send the usual 997, and do not re-apply.
- Older sequence: if BCH05 is lower than the last applied, hold and alert; never apply it on top of newer data.
- Gap in sequence: if BCH05 jumps by more than one, hold for a set period, such as 30 minutes, waiting for the missing revision, then escalate.
- Change before order: if no 850 exists for BCH03, park the 860 and retry when the 850 posts; reject only after a partner-agreed wait.
- Missing sequence number: if the partner leaves BCH05 empty, fall back to interchange date and control number, and agree that rule in writing at onboarding.
These are the same idempotency ideas that govern shipping orders and their confirmations. The 940-to-945 reconciliation and idempotency rules article applies them to the warehouse order and its shipping advice; this article applies them one step earlier, where the buyer's order itself changes.
The trace below shows the opening incident with times and document numbers, first as it failed and then with the controls in place.
- 14:15, wave W-1187 released: PO 4500098812 line 2 (120 cases, SKU 30-4471) allocated and pick tasks sent to handhelds.
- 14:40, 860 received: ISA control 000004417, BCH05 = 3, POC*2*QD*120*72*CA; ERP order updates to 72 cases; WMS tasks unchanged because they were already released.
- 16:05, trailer loaded: 120 cases ship on BOL 7700231; ASN reports 120; no 865 sent because the ERP shows the change as applied.
- Controlled version, 14:40: predicate fails on status PICKED; order desk alerted; buyer called and confirms 72 is firm; 48 cases unpicked by 15:10.
- Controlled version, 15:20: 865 sent with BCA05 = 3 and line 2 accepted; ASN at dispatch reports 72; invoice matches the changed PO.
Pricing one late quantity cut in dollars and in rupees
A late quantity decrease costs little if it is caught before loading and a lot if it is not. The worked figures below compare both outcomes for the same 48-case reduction at a US distribution centre and an Indian one. All rates are illustrative.
Scroll horizontally to see all columns.
| Cost element | US DC, caught before load ($) | US DC, shipped and refused ($) | India DC, caught before load (₹) | India DC, shipped and refused (₹) |
|---|---|---|---|---|
| Unpick and restock 48 cases | 48 x 0.85 = 40.80 | 0 | 48 x 22 = 1,056 | 0 |
| Relabel and re-ASN the order | 25.00 | 0 | 600 | 0 |
| Return freight for refused cases | 0 | 310.00 | 0 | 6,500 |
| Receiving and restock of returns | 0 | 48 x 1.40 = 67.20 | 0 | 48 x 35 = 1,680 |
| Buyer compliance deduction | 0 | 250.00 | 0 | Per contract; often none |
| Tax document rework | 0 | Credit memo only | Cancel e-way bill within 24 hours and regenerate: about 300 of staff time | Credit note under CGST Section 34 for the 48 cases: about 900 of staff time |
| Total for one incident | 65.80 | 627.20 | 1,956 | 9,080 plus any deduction |
The Indian columns carry a tax step the US columns do not. If an e-way bill was generated for 120 cases and the load changes to 72, Rule 138(9) of the CGST Rules allows the e-way bill to be cancelled within 24 hours when goods are not transported as declared, unless it was already verified in transit. If the invoice for 120 cases has already been issued and the buyer accepts only 72, the correction is a credit note under Section 34, declared within that section's time limits.
Which 860 decisions a rule engine owns and where an analyst steps in
Most 860 handling is mechanical and should never reach a person. The exceptions that do reach a person need context the message does not carry: whether goods are already on a trailer, whether the buyer will accept a split shipment, and whether a price change is commercially valid.
Scroll horizontally to see all columns.
| Task | Who handles it | Reason |
|---|---|---|
| Matching BCH03 to an open order and rejecting unknown PO numbers after the agreed wait | Rule | Exact key match; no judgement |
| Checking BCH05 against the last applied sequence | Rule | Integer comparison per PO |
| Applying QD, QI or DI to lines still OPEN or ALLOCATED before cutoff | Rule | Predicate on status, time and allowed codes |
| Building the 865 from WMS line status | Rule | Status-to-code table agreed at onboarding |
| Summarising a free-text MSG or NTE note on a change into a short instruction | Software drafts, analyst confirms | Text can contradict the coded change |
| Proposing a substitute part for an IS reply | Software suggests, buyer-facing rep approves | Substitution changes what the buyer agreed to buy |
| Deciding to unpick, ship and credit, or call the buyer on a post-pick change | Order desk supervisor | Depends on trailer status, buyer terms and cost |
| Accepting a PC price change outside contract tolerance | Commercial manager | Pricing authority sits outside operations |
Order desk exception queues for X12 860 changes received after wave release should show the WMS line status, trailer and bill of lading status, and the buyer's acknowledgment window on one screen, so a supervisor can decide within 15 minutes whether to unpick, ship and credit, or reject with an 865.
Onboarding a partner's 860 feed: test cases and ownership
An 860 integration is ready when its failure paths have been tested, not when a happy-path change posts. Agree ownership of each decision with the partner and inside your own teams, then run every test below against the partner's real data patterns.
Scroll horizontally to see all columns.
| Decision or record | Owner | Signs off |
|---|---|---|
| Allowed POC02 codes and BCH01 values per partner | EDI analyst | Customer service lead |
| Change cutoff buffer and latency measurement | WMS administrator | DC operations manager |
| Status-to-865 code mapping | EDI analyst | Customer service lead |
| Post-release change decisions | Order desk supervisor | DC operations manager |
| Price change tolerance | Commercial manager | Finance controller |
| E-way bill and invoice corrections in India | Billing team | Indirect tax manager |
Scroll horizontally to see all columns.
| Test case | Expected result |
|---|---|
| QD on an OPEN line, sequence 1, well before release | Line reduced; 865 with BCA02 AD and ACK IA |
| Same 860 sent twice | Second copy logged, 997 sent, no second change |
| Sequence 3 arrives before sequence 2 | Held; applied in order once 2 arrives; escalated after the wait |
| 860 for a PO with no 850 yet | Parked, then applied after the 850 posts |
| QD on a line already PICKED | Held; order desk alerted; no silent ERP update |
| BCH01 01 cancellation on a LOADED order | Rejected with 865 BCA02 RJ and CTT zero |
| POC02 code not in the partner's allowed list | Held for analyst review |
| PC price change beyond tolerance | Held for commercial approval; invoice not repriced |
| Indian order with e-way bill generated, quantity reduced | Billing task created to cancel and regenerate within 24 hours |
An annotated pair makes the agreement concrete. This example applies a quantity decrease and a price change before release and answers it; the second reply shows the rejection used when picking has started.
ST*860*0101~
BCH*04*SA*4500098812**3*20261102~ change, stand-alone PO, sequence 3, PO dated 2 Nov 2026
POC*2*QD*120*72*CA*18.40*CT*BP*30-4471~
POC*4*PC*60*60*CA*21.15*CT*BP*30-4490~
CTT*2~
SE*6*0101~
ST*865*0201~ reply before wave release
BCA*11*AD*4500098812**3*20261102~
POC*2*QD*120*72*CA*18.40*CT*BP*30-4471~
ACK*IA~
POC*4*PC*60*60*CA*21.15*CT*BP*30-4490~
ACK*IA~
CTT*2~
SE*8*0201~
ST*865*0202~ reply when line 2 is already picked
BCA*11*RJ*4500098812**3*20261102~
CTT*0~
SE*4*0202~
Element values above are illustrative and follow the 4010 layouts in published guides; confirm each element against your partner's implementation guide, since partners differ on which BCH and POC elements they send.
More EDI and warehouse integration guides are collected in the logistics and supply chain library. If you are specifying change-order handling for a new WMS or EDI platform and want these rules written into requirements, share your partner list and wave design in an RFP and we will map them to a delivery plan.
Discuss this workflow
Describe your current systems, the recurring exception and the outcome you need. Keep shipment, customer and financial records out of the initial message.
Common operational questions
Practical answers for operations, engineering, and finance teams working on edi 860 po change in logistics & supply chain.
What is the difference between an EDI 860 and an EDI 865?
Should a seller apply an 860 after the order has been picked?
What does BCH05 do in an EDI 860?
What GST step follows a late 860 quantity cut in India?
References
Sources checked 13 November 2026. US and India statutory authorities and vendor documentation support platform facts; the worked examples and diagrams are original.
- X12 - Transaction set descriptions for 850, 855, 860 and 865Official purpose statements, including that the 850 should not convey changes and the 865 accepts, rejects or modifies a buyer's change. Accessed 13 November 2026.
- X12 - EDI examples, 004010X362 Aerospace Purchase Order Change Acknowledgment/Request (865)Examples 02 to 05 used for BCA01 11, BCA02 AD, AC, RJ and RD, BCA05 sequence, POC quantity usage and ACK codes IA, IQ, IP, DR, IS, ID and AC. Accessed 13 November 2026.
- American Electric Power - Purchase Order Change EDI 860, version 4010 implementation guideBCH element definitions including BCH05 change order sequence number (AN 1/8), BCH06 and BCH11 semantics, and the POC C030405 syntax rule. Accessed 13 November 2026.
- Stedi - X12 004010 element 670, Change or Response Type Code, and element 353, Transaction Set Purpose CodeAccessed 13 November 2026. Licensed X12 code-list reference (not the standard text itself) for POC02 codes AI, CA, CT, DI, PC, QD and QI; element 353 (https://www.stedi.com/edi/x12-004010/element/353) gives BCH01 code 01 Cancellation and 04 Change, and the BCH segment page gives BCH05 as AN 1/8.
- Walmart Supplier Developer Portal - 860 Purchase Order Change Request, Buyer InitiatedDrop-ship 860 that lists only POC02 DI and treats each POC as cancelling the full line quantity. Accessed 13 November 2026.
- CBIC - Central Goods and Services Tax Rules, 2017, Rule 138(9) (e-way bill cancellation)Cancellation within 24 hours of generation where goods are not transported as declared, unless verified in transit. Accessed 13 November 2026.
- CBIC - Central Goods and Services Tax Act, 2017, Section 34 (credit and debit notes)Credit note where invoiced value or tax exceeds the supply actually made, and its declaration time limit. Accessed 13 November 2026.
- FMCSA — 49 CFR Part 395 Hours of Service & Electronic Logging Devices (ELD)US federal motor carrier dispatch and driver duty-status compliance mandate.
- ULIP & NIC GST E-Way Bill Portal — Unified Logistics & Rule 138 ComplianceIndian statutory goods-in-transit and multi-modal logistics verification framework.