EDI 947 Warehouse Inventory Adjustment Advice for 3PL Stock
For edi and integration analysts, it leads at shippers, 3pls and carriers · Understand the problem

EDI 947 Warehouse Inventory Adjustment Advice for 3PL Stock: Illustrative TMS–ERP order and invoice handoff review beside a warehouse floor; not a client facility.
Quick answer: edi 947 warehouse inventory adjustment
An EDI 947 Warehouse Inventory Adjustment Advice is the X12 message a 3PL sends the goods' owner after changing stock quantity or status. The W15 segment carries the adjustment numbers; each W19 line carries a reason code such as 06 decrease, AU damaged in facility or 05 hold, plus quantity, unit and item, which the owner's ERP posts once.
TL;DR — what you’ll learn
- Every W19 line needs a reason code, a quantity and a unit; element 181 offers 48 reason codes in release 004010 and 52 in release 8010.
- Status codes such as 05 and 55 move stock between usable and held states at zero value; posting them as write-offs is a common mapping error.
- Key posting on depositor, warehouse, W15-02 adjustment number and line number, so a resent file with a new interchange number posts nothing twice.
- In India, CGST Section 17(5)(h) blocks credit on lost or destroyed goods, so a 947 decrease on stock bought at 18% GST reverses ₹180 per ₹1,000 written off.
Topics: edi 947 warehouse inventory adjustment · 947 adjustment reason codes · warehouse inventory adjustment advice · 3pl damage and shrink reporting · erp posting rules for inventory adjustments
All quantities, amounts, product codes and events are illustrative teaching examples.
The 3PL counted a pick face on night shift, found 40 eaches missing, and sent the adjustment to the client. By morning the client's ERP showed 80 missing, available-to-promise had dropped below open orders, and customer service was backordering a line that sat on the shelf. Nobody had miscounted. The same X12 947 had arrived twice, and the receiving system posted both copies because it never checked the warehouse's adjustment number.
The 947 Warehouse Inventory Adjustment Advice is a small transaction with large consequences. Each line changes either how much stock the depositor owns or what condition that stock is in, and each change has an owner, a cost and, in India, a tax effect. Mapped carefully, a 947 feed lets a depositor post 3PL adjustments the same night with the right account, the right claim and no duplicate.
- Segments and fields: what the W15 header and W19 item lines carry, and which pairs of elements must travel together.
- Reason codes: which codes move quantity, which move status, and how each should post in the ERP.
- Money and tax: a worked adjustment batch in dollars and rupees, including the Indian credit reversal on lost or destroyed goods.
- Controls: a duplicate-posting incident, the checks a translator can enforce, and an onboarding checklist for a 3PL feed.
What a 947 tells the depositor, and what it leaves unsettled
A 947 reports that the warehouse has already changed its own inventory record; it does not ask permission and it does not assign blame. X12 describes the set as a way to inform a warehouse, depositor or other party of a quantity or status change to inventory records, covering the internal adjustments between a warehouse and the goods' owner.
That definition matters because the depositor owns the goods while the 3PL owns the count. When the 3PL scraps a crushed case, finds a lost pallet or moves stock to a quality hold, its warehouse management system changes first. The 947 is the notice that lets the owner's ERP follow. Whether the 3PL pays for the crushed case, whether the carrier does, or whether the loss sits inside an agreed shrink allowance is settled elsewhere, in the storage agreement and the claim file.
Our guide to why a 3PL stock report and the ERP balance disagree deals with the month-end bridge between two balances. This article sits one step earlier: it covers the individual adjustment message, so that most differences are posted correctly on the day they happen and never reach the reconciliation queue. The table below shows who originates and who approves each piece of information the message carries.
Scroll horizontally to see all columns.
| Element or decision | Originated by | Held in | Approved or accepted by |
|---|---|---|---|
| W15-02 warehouse adjustment number | 3PL inventory control | 3PL warehouse management system | 3PL site inventory manager |
| W15-03 depositor adjustment number | Depositor or 3PL, per the partner guide | Depositor ERP or agreed cross-reference | Depositor inventory accountant |
| W19-01 reason code | 3PL inventory controller or QA lead | Adjustment record and evidence file | Depositor supply chain analyst on review |
| W19-02 quantity and W19-03 unit | Count or scan at the location | 3PL count sheet and RF transaction log | 3PL shift supervisor |
| Liability for the loss | Storage agreement and claim review | Contract file and claim register | Depositor logistics finance lead |
| Ledger account and tax treatment | Depositor posting rules | Depositor ERP and GST credit ledger | Financial controller and tax manager |
Inside the transaction: W15 header, N1 parties and W19 lines
Every 947 is one header segment that identifies the adjustment, one or more party loops, and repeating detail loops that each start with a W19 item line. Three segments do most of the work, and a mapper who understands their paired elements avoids most rejected files.
The W15 Warehouse Adjustment Identification segment opens the set. W15-01 is the adjustment date in CCYYMMDD form. W15-02 and W15-03 are both "Adjustment Number" elements: the 004010 semantic notes say W15-02 is assigned by the warehouse and W15-03 by the depositor, and syntax rule P0203 says that if either is present the other is required. A partner guide therefore has to say what fills W15-03 when the warehouse initiated the change.
- N1 party loop: names the depositor with entity code DE and the warehouse with WH, so a 3PL serving one client from several buildings can be told apart.
- W19 item detail: W19-01 reason code, W19-02 credit or debit quantity and W19-03 unit of measure are mandatory in every line.
- Item identification: rule R0405 requires either the W19-04 U.P.C. case code or a W19-05 qualifier, and P0506 pairs W19-05 with the W19-06 product ID.
- Lot and condition: W19-09 holds the warehouse lot number, and W19-16 can carry an inventory transaction type such as DM for damaged or QU for hold or quarantined inventory.
- Weights: W19-10 to W19-15 carry up to two weights, and each weight needs its qualifier and unit code alongside it.
The detail loop can also hold G69 descriptions, N9 references and, in later releases, an AMT monetary amount. Most 3PLs leave value out, because cost belongs to the owner. The sample below shows one header and three lines in 004010 layout; the element positions in the W19 line are counted out in the comment so a mapper can check the empty separators.
ST*947*0001~
W15*20261112*ADJ-88213*D-55102~
N1*DE*HARBOR HOME GOODS~
N1*WH*MEMPHIS DC 3~
W19*AU*12*CA**VN*40417***LOT2611*******DM~
G69*CASES CRUSHED BY REACH TRUCK AISLE 14~
W19*06*40*EA**VN*51880~
W19*56*15*EA**VN*51902~
SE*9*0001~
W19 positions in line 1:
01 AU reason: Damaged in Facility
02 12 quantity
03 CA unit: Case
04 (empty) U.P.C. case code, not used because 05/06 are sent
05 VN qualifier: vendor's item number
06 40417 item
07-08 second product ID pair, not used
09 LOT2611 warehouse lot number
10-15 weights, not used
16 DM inventory transaction type: Damaged
Reason codes that change quantity and codes that change status
Element 181, the Quantity or Status Adjustment Reason Code, holds 48 values in release 004010 and 52 in release 8010, and they fall into two families. Some codes change how many units the depositor owns; others leave the count alone and move units between usable, held and inspection states. Posting a status code as a quantity change is the most common 947 mapping error.
Several codes come in matched pairs that show direction without a sign on the quantity. Code 06 is Book Adjustment Decrease and 56 is Book Adjustment Increase; 05 is Product Put on Hold and 55 is Product Taken Off Hold; 04 and 54 correct a receipt reported too low or too high; 03 and 53 do the same for shipments. Whether W19-02 ever carries a minus sign is a partner-guide decision, so confirm it rather than assume.
Scroll horizontally to see all columns.
| Code | X12 description | Changes quantity or status | Typical ERP movement | Default cost owner to test |
|---|---|---|---|---|
| 06 / 56 | Book Adjustment Decrease / Increase | Quantity | Inventory difference posting to shrink or gain account | Depositor, within the contract allowance |
| AA | Physical Count | Quantity | Count difference against the count document | Depositor, within the contract allowance |
| AU | Damaged in Facility | Quantity or status, per guide | Move to damaged stock, then scrap on disposal | 3PL where it failed to take reasonable care |
| AV | Damaged in Transit | Quantity or status, per guide | Move to damaged stock with a carrier claim reference | Carrier, subject to its liability terms |
| 07 | Product Dumped or Destroyed | Quantity | Scrap issue with destruction evidence | Set by the earlier damage or expiry cause |
| 05 / 55 | Product Put on Hold / Taken Off Hold | Status | Transfer between unrestricted and blocked stock | No cost movement |
| AX | Shelf-life Obsolescence | Quantity | Write-off or move to expired stock | Depositor, unless rotation rules were broken |
| UD | Unauthorized Destruction | Quantity | Scrap issue and claim against the warehouse | 3PL |
Codes AU and AV need the most care, because one physical event can be reported either way. A case crushed by a reach truck inside the building is AU. A case that arrived damaged and was noticed at receipt belongs on the 944 receipt as an exception, not on a 947; AV on a 947 should appear only when damage traced to transit is found after the receipt has already posted, and it should carry the carrier's pro or LR number in an N9 reference.
X12 947 Warehouse Inventory Adjustment Advice lines carry a W19-01 reason code from element 181, which lists 48 codes in release 004010, plus a mandatory W19-02 quantity and W19-03 unit, and the depositor ERP should post each W15-02 warehouse adjustment number exactly once, routing status codes 05 and 55 to stock transfers rather than write-offs.
Mapping each reason code to an ERP movement and a ledger account
A depositor needs one written rule per reason code that names the ERP movement, the stock type before and after, the general ledger account and whether a claim is opened. Without that table, the integration team guesses, and finance discovers the guesses in the month-end variance.
The mapping splits naturally into three outcomes. Status codes move units between stock types inside the same inventory value and never touch profit or loss. Quantity decreases reduce inventory value and post to a loss account chosen by cause. Quantity increases, such as 56 or a 51 Unable-to-Locate Product Located, restore value and should reverse the account that took the original loss where the two can be linked.
- Hold and release: 05 and 55, and 08 and 88 for quality inspection in later releases, post as transfers between unrestricted and blocked or inspection stock, at zero value.
- Shrink and gain: 06, 56 and AA post to an inventory shrink or gain account, and the running total is compared with the shrink allowance in the storage agreement.
- Damage in the building: AU moves units to a damaged stock type first, opens a claim against the 3PL, and only becomes a write-off when a 07 destruction line or disposal record follows.
- Damage in transit: AV follows the same path but opens a carrier claim, which should already have a deadline in the claim register.
- Catch-all codes: AH Other should be blocked from auto-posting and routed to review, because it gives the ERP nothing to decide with.
On the accounting side, the US rule for a loss is short. ASC 330-10-35-1B requires inventory measured by methods other than LIFO or the retail method to be carried at the lower of cost and net realizable value, and says the difference is recognised as a loss in the period, naming damage and physical deterioration as causes. Ind AS 2 paragraph 34 likewise expenses all losses of inventories in the period the loss occurs.
Under US GAAP ASC 330-10-35-1B, a depositor carrying FIFO or average-cost stock that a 3PL reports on a 947 with reason AU, AV or 07 recognises the loss in the period it occurs, and a mapping table should route at least 95% of lines automatically, holding reason AH Other for review.
Damage, shrink and found stock: who pays and what evidence proves it
The 947 reports a loss but never decides who bears it; the storage agreement and the evidence do. A depositor that posts every AU line straight to its own damage expense gives up a claim that the contract may well support.
In the US, UCC Section 7-204(a) holds a warehouse liable for loss of or injury to goods caused by its failure to exercise the care that a reasonably careful person would use in similar circumstances, and Section 7-204(b) allows the warehouse receipt or storage agreement to limit that liability to a stated amount. In practice the storage agreement adds a shrink allowance, often expressed as a percentage of throughput, below which count losses are the owner's cost.
For each liability decision, ask the 3PL for a defined evidence packet linked to the W15-02 number. Without it, a claim becomes an argument about memory, and the shrink allowance becomes the default for everything. The 3PL shrinkage allowance calculation explains how the allowance itself is priced.
- Damaged in facility: photos of the damaged units with location label visible, the equipment or task involved, the RF user ID and the time, plus the disposal or rework decision.
- Damaged in transit: the receipt record showing the earlier posting, the carrier's delivery document, any exception noted on it, and the claim reference sent to the carrier.
- Count decrease: the count document, the recount by a second counter, and the transaction history of the location for the previous 30 days.
- Found stock: where it was found, the location history, and any earlier 06 or AA line that the find reverses.
A count adjustment posted twice: the duplicate 947 trace
The opening example is a real pattern: a translator resends a file after a missing acknowledgement, the resend gets a new interchange control number, and the ERP treats it as new. The fix is an idempotency check on the warehouse's own adjustment number, not on envelope numbers.
- 23:40 count closes: the 3PL cycle count of pick face 14-03-B for item 51880 finds 40 eaches short; the WMS posts adjustment ADJ-88213 with reason 06 and sends a 947 in interchange 000004417.
- 23:52 acknowledgement missing: the value-added network times out and no 997 functional acknowledgement returns to the 3PL translator within its 10-minute window.
- 02:10 automatic resend: the translator rebuilds the interchange as 000004418 with the same W15-02 value, ADJ-88213, and transmits it again.
- 02:14 second posting: the depositor ERP inbound queue checks only the interchange control number, finds it unique, and posts a second inventory difference of 40 eaches against item 51880.
- 07:30 orders backordered: available-to-promise shows 80 short, three customer orders release as backorders, and an analyst traces both postings to the same W15-02 value at 09:15.
The correction is a uniqueness key of depositor, warehouse, W15-02 and line number, checked before posting. Envelope control numbers prove that an interchange arrived once; they say nothing about whether the business event is new. Our article on the 997 functional acknowledgment covers why acknowledgements go missing and how resend rules should work.
A worked adjustment batch in dollars and rupees
The same four-line batch shows how the reason code, not the quantity, drives cost and recovery. The figures are illustrative; the US case uses a depositor in a Memphis 3PL building, and the Indian case uses the same items held by a 3PL in Bhiwandi, bought at 18% GST with input tax credit availed.
Indian tax adds a step the US case lacks. Section 17(5)(h) of the CGST Act blocks input tax credit on goods lost, stolen, destroyed or written off, so credit already taken on those units must be reversed. The damaged-stock write-off guide on reversing GST credit on written-off goods walks through the return mechanics; here the point is that each decrease line carries a tax amount as well as a cost.
Scroll horizontally to see all columns.
| 947 line | Quantity | US cost ($) | US recovery route | India cost (₹) | India credit to reverse at 18% (₹) |
|---|---|---|---|---|---|
| AU damaged in facility, item 40417 | 12 cases | 460.80 (12 × 38.40) | Claim on 3PL: 460.80 | 35,400 (12 × 2,950) | 6,372 |
| AV damaged in transit, item 40417 | 5 cases | 192.00 (5 × 38.40) | Carrier claim: 192.00 | 14,750 (5 × 2,950) | 2,655 |
| 06 book decrease, item 51880 | 40 eaches | 128.00 (40 × 3.20) | Inside shrink allowance | 9,800 (40 × 245) | 1,764 |
| 56 book increase, item 51902 | 15 eaches | (48.00) gain | Offsets shrink | (3,675) gain | Nil; no credit was reversed on this item |
| Batch total before recoveries | 72 units | 732.80 | 652.80 claimed | 56,275 | 10,791 |
| Net cost if both claims succeed | 80.00 | Set by the claims | 10,791 stays reversed |
Two lessons sit in the table. First, only 80 of the 732.80 dollars is genuinely the owner's cost, and that figure is visible only because each line kept its own reason code. Second, in India the ₹10,791 of credit reversal follows the loss whether or not the 3PL or carrier later compensates, so the reversal is posted from the 947 line, while the claim runs on its own timetable.
Indian depositors posting a 947 decrease for goods lost, destroyed or written off must reverse input tax credit under CGST Act Section 17(5)(h), and Ind AS 2 paragraph 34 expenses the inventory loss in the same period; on goods bought at 18% GST, each ₹1,000 written off carries ₹180 of credit to reverse.
Translator checks that are fixed rules and reviews a planner owns
Most 947 controls are mechanical and belong in the translator or the ERP inbound layer, where they run on every file without fatigue. A smaller set needs a person, because the answer depends on photos, history or the contract, and software can only prepare the case.
Scroll horizontally to see all columns.
| Task | Fixed rule in translator or ERP | Software assists, person decides |
|---|---|---|
| Rejecting a W15 with W15-02 but no W15-03 | Yes: syntax rule P0203 | No |
| Blocking a repeat of the same W15-02 and line | Yes: uniqueness key before posting | No |
| Checking the W19-03 unit against the item's unit conversions | Yes: unknown or unconvertible unit rejects the line | No |
| Sending reason AH Other or a value above a set limit to review | Yes: routing rule | Reviewer decides the posting |
| Reading damage photos to judge AU against AV | No | Image model suggests a cause; analyst confirms |
| Matching a 56 found line to an earlier 06 loss | No | Search proposes candidate lines by item and location; analyst links them |
| Deciding whether a loss is inside the shrink allowance | Running total is calculated automatically | Finance lead decides on borderline months |
The table is deliberately short on artificial intelligence. A model can read a damage photo or rank likely matches for a found pallet, which saves an analyst time. It should not post, because a wrong cause on a damaged line moves cost between three parties and changes the Indian credit position.
Onboarding checklist for a 3PL partner's 947 feed
A 947 feed is ready for production when the depositor has agreed the reason code list, tested every code it allows, and proved that a resend posts nothing. Most problems after go-live trace back to a code that was never tested or a pairing rule that was never agreed.
Scroll horizontally to see all columns.
| Check | Pass condition | Owner |
|---|---|---|
| Reason code list agreed | Written list of allowed element 181 codes, with AH Other limited or excluded | Depositor supply chain analyst |
| Mapping table signed | Each allowed code has an ERP movement, stock type, account and claim rule | Financial controller |
| W15 pairing defined | Partner guide states what fills W15-03 for warehouse-initiated changes | EDI analyst |
| Sign convention agreed | Guide states whether W19-02 is ever negative or direction comes only from the code | EDI analyst |
| Every code tested | At least one test line per allowed code posts as mapped | Integration tester |
| Resend test passed | Same W15-02 in a new interchange posts zero lines | Integration tester |
| Evidence packet agreed | Damage and count evidence retrievable by W15-02 within one working day | 3PL account manager |
| Indian credit reversal linked | Decrease lines for lost or destroyed goods feed the credit reversal report | Tax manager |
The 947 is one of several warehouse messages, and it works best when the 944 receipt and 945 shipment advices are mapped to the same item and unit master. More logistics data and control guides are collected on the Logistics and Supply Chain hub. If you are choosing an integration partner or a 3PL and want adjustment feeds specified before contract signature, you can send us your requirements.
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 947 warehouse inventory adjustment in logistics & supply chain.
What is the difference between an EDI 947 and an EDI 846?
Which 947 reason code should a 3PL use for stock damaged by its own forklift?
Why does the 947 W15 segment have two adjustment numbers?
Does a 947 decide whether the 3PL pays for a loss?
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 Sets: 947 Warehouse Inventory Adjustment Advice (purpose statement)Official X12 description of the 947 set. Accessed 13 November 2026.
- Stedi - X12 004010 W15 Warehouse Adjustment Identification segment (elements, P0203 and semantic notes)Secondary reference reproducing the X12 element dictionary, used because the licensed X12 standard is not openly published. Accessed 13 November 2026.
- Stedi - X12 W19 Warehouse Adjustment Item Detail segment and 947 structure (release 8010)Secondary reference for W19 element positions and syntax rules R0405, P0506, C101112 and P1718. Accessed 13 November 2026.
- Stedi - X12 004010 element 181 Quantity or Status Adjustment Reason Code (48 codes) and element 529 Inventory Transaction Type CodeSecondary reference; the release 8010 list of 52 codes, adding 08, 88, AM and AQ, was checked at https://www.stedi.com/edi/x12/element/181. Accessed 13 November 2026.
- FASB - Accounting Standards Update 2015-11, Inventory (Topic 330), paragraph 330-10-35-1BLower of cost and net realizable value; loss recognised in the period, including from damage. Accessed 13 November 2026.
- ICAI - Indian Accounting Standard (Ind AS) 2, Inventories, paragraph 34All losses of inventories recognised as an expense in the period the loss occurs. Accessed 13 November 2026.
- CBIC - Central Goods and Services Tax Act, 2017, Section 17(5)(h) (blocked credits)Goods lost, stolen, destroyed, written off or disposed of as gifts or free samples. Accessed 13 November 2026.
- Uniform Commercial Code Section 7-204, Duty of care; contractual limitation of warehouse's liabilityModel act text via the Legal Information Institute, Cornell Law School, because the official ALI and ULC text is not published openly. Accessed 13 November 2026.
- GS1 US — SSCC-18 & GS1-128 Logistics Label GuidelineUS pallet and carton license-plate identification standard.
- GSTN — e-Invoice & E-Way Bill Portal (NIC India)Indian statutory tax invoice IRN and transit compliance standard.