Field guide · Adjustments
Inventory adjustment analysis:
the log is evidence, not housekeeping
An adjustment log is the only dataset in a warehouse where someone has explicitly written down that the record was wrong. Read as a population, it describes the defects better than any report built for the purpose.
Short answer
Inventory adjustment analysis reads the adjustment log as a body of evidence rather than a record of corrections. Every line documents a moment when someone decided the system was wrong, along with when, where, how much and in which direction. Analysed as a population — by churn ratio, reason code, direction, size and location pairing — it exposes recurring receiving, replenishment, pick, UOM and location defects.
Why adjustments are evidence
Almost every dataset in a warehouse records what the system believes. The adjustment log is the exception. It records the moments when a human being looked at a balance, decided it was wrong, and overrode it.
Each line therefore carries a small piece of testimony: a time, a location, an item, a quantity, a direction, a person, and — where reason codes are used properly — a claim about why. Individually that is housekeeping. As a population it is the most direct record a business holds of where its inventory processes fail, because it is the only one built entirely from moments of acknowledged failure.
The reframe worth making explicit: an adjustment is not the resolution of a problem, it is the documentation of one. A site with a clean current balance and twelve hundred adjustments a quarter does not have an accurate inventory; it has an inaccurate inventory and a well-staffed correction process. Both facts matter and only one of them is usually reported.
A worked example: net-zero books, enormous churn
One site, one quarter, the complete adjustment log. Headline: 1,240 adjustment lines, and a net quantity movement of −2,300 eaches. Against a business of any size that net figure is negligible, and it is the figure that reaches the monthly pack.
The gross quantity adjusted — the sum of the absolute values — is 184,500 eaches.
The churn ratio
Gross adjustment divided by the absolute net is a single number describing how much manual correction a site performs to achieve a given change in recorded inventory. A ratio near 1 means adjustments are mostly one-directional and correspond to real, identifiable events. A ratio of 80 means the log is full of corrections that cancel each other — and corrections that cancel are corrections that were responding to something, because inventory does not spontaneously go up in one place and down in another.
Nothing in the net figure of −2,300 hints at any of this. That is the whole reason the ratio is worth computing: it is one division, it needs only a column of quantities and signs, and it converts an unremarkable net into a measurable statement about operational churn.
What the decomposition says
COUNT VAR at 76% of lines is the first finding, ahead of anything about inventory. When three quarters of adjustments carry a code that names the activity rather than the cause, the log has stopped recording diagnoses. Its churn of 64× says these corrections are overwhelmingly offsetting — which is a mechanism, not a counting problem.
DAMAGE is what a healthy code looks like. Gross equals net exactly, because damage only ever reduces stock. Any code whose gross materially exceeds its net is recording two different things under one label.
RECV CORR averages 457 eaches per line — 38,400 across 84 lines. Large, per-line, receipt-adjacent corrections mean receipts are routinely being rebuilt after the fact, which points at the dock rather than the shelf. See receiving errors.
REPLEN ADJ is the most specific finding in the table. 19,100 eaches adjusted against a net of 900 means stock was moved by adjustment rather than by a move transaction. An adjustment has no from-location and no to-location, so 19,100 eaches of physical movement happened with no record of where it came from or went. That is a replenishment transaction defect, and it is sitting in plain sight under a reason code nobody reads.
Five defects an adjustment log exposes
Each of these has a distinct, queryable shape. None needs anything beyond the adjustment log plus enough master data to recognise pack quantities and location relationships.
- Receiving defects
- Signature: adjustments clustered within a few weeks of a receipt date on the item concerned, sized as case or pallet multiples, concentrated by vendor or receiving door, and disproportionately positive-then-negative on recently received items. Test: join each adjustment to the item's last receipt and plot the day gap; a peak rather than a flat distribution means receipts are generating them.
- Replenishment defects
- Signature: equal and opposite adjustments on a forward pick location and its reserve, days apart, in pallet-sized quantities, recurring on the cycle of the item's replenishment frequency. Test: group adjustments by location pair using the forward-to-reserve mapping in the location master, then look for matching magnitudes with opposite signs.
- Pick-face defects
- Signature: small, mostly negative adjustments concentrated on forward pick locations, following pick activity, not respecting pack quantities. Test: segment by location type and correlate adjustment frequency with pick volume rather than with stock volume. Distinguishes genuine pick-face attrition from bulk-location faults.
- Unit-of-measure defects
- Signature: adjustments in whole-number ratios to the location balance — half, double, twelve times — concentrated by vendor or item class, with a clear date boundary before which the item never needed adjusting. Test: divide each adjustment by the item's pack quantities and by the pre-adjustment balance; clean factors point at conversions.
- Location and placement defects
- Signature: equal and opposite adjustments on adjacent location codes —
A-01-02againstA-01-03— or on similar item numbers. Transpositions and neighbour scans. Test: sort paired adjustments by location code proximity and by item-number edit distance; genuine pairs cluster at distance one.
What these have in common is that none of them is visible in a single adjustment, and all of them are obvious in a few hundred. That asymmetry is why adjustment logs go unexamined: every individual line is defensible, and the defect only exists at the level of the population.
Signals in the log
- A churn ratio in double or triple figures. High offsetting correction volume against negligible net change. The single cheapest diagnostic in this guide.
- One reason code above roughly half of all lines. The field has stopped carrying information, which blocks every other analysis.
- A code whose gross materially exceeds its net. Two different events are being recorded under one label — split it before analysing anything else.
- Adjustment volume rising while throughput is flat. The underlying defect rate is increasing regardless of what the accuracy percentage says.
- A small number of items accounting for most of the gross. Concentration is a mechanism; an even spread is process discipline.
- Adjustments clustered by user, device, shift or door. Worth reading as evidence about the environment rather than about the individual.
- Large adjustments posted without approval, or approvals granted in seconds. A threshold control that exists but is not exercised.
- Free-text notes that are blank, or that repeat one phrase. Where the note field is unused, the reason code is the only evidence and it is usually generic.
- The same item adjusted on a regular interval. Periodicity is the clearest possible evidence of a generator still running.
Why adjustment logs stop carrying information
The log is only evidence if the reason codes mean something. These are the mechanisms that degrade it, and they are all ordinary and well-intentioned.
- A code list that names activities, not causes
COUNT VAR,CYCLE ADJandRECONdescribe the process that posted the adjustment. They are always true, which is exactly why they carry no information. A useful code list names mechanisms —DUP RECEIPT,UOM CONV,REPLEN LEG MISSING,NEIGHBOUR SCAN.- A default value in the code field
- Where the system pre-selects a code, most lines will carry it. The distribution then measures the default rather than the operation, and no amount of training changes that.
- Too many codes
- The opposite failure. A list of sixty codes gets used as a list of three, because nobody scrolls. Fifteen well-chosen mechanisms beat sixty precise ones that go unselected.
- Codes chosen to clear a control
- Where one code requires supervisor approval and another does not, the second will be used. This is a rational response to a workflow, and it means the code distribution partly measures the approval matrix.
- Adjusting before investigating
- The correction is posted immediately and the cause established never. The code records what was known at the time, which was nothing — the general failure described in root cause analysis.
- Inference recorded as fact
- The opposite problem, and worse. A code of
PICKER ERRORasserted from an unpaired transaction leg permanently contaminates the dataset with a conclusion nobody tested. - Bulk adjustments from reconciliation
- Period-end corrections posted as a block under one code, often covering many items and mechanisms. These swamp the distribution and should be tagged distinctly so they can be excluded from operational analysis — see reconciliation.
How to analyse a log
This is population work first and individual investigation second. Steps one to four take an afternoon and usually produce the priority list.
Compute gross, net and churn for the whole log
Three numbers. Gross is the sum of absolute quantities, net is the signed sum, churn is gross over absolute net. This frames everything that follows and immediately tells you whether the log describes real inventory change or offsetting correction.
Decompose by reason code
Lines, share of lines, gross, net and churn per code, plus mean quantity per line. Codes with high churn are recording offsetting events; codes with high mean quantity are recording bulk events. Both are more interesting than codes with high line counts.
Judge whether the codes mean anything
If one code exceeds about half the lines, or gross materially exceeds net within a code, the field is not carrying causes. Report that as a finding in its own right — it is usually the reason no previous investigation got anywhere — and continue the analysis using quantity, timing and location instead.
Test the five signatures
Receipt proximity, forward-to-reserve pairing, pick-face concentration, whole-number ratios, adjacent-location pairing. Each is a query over the log plus a little master data, and each either lights up or does not.
Segment by every available attribute
Item, item class, vendor, location, location type, zone, user, approver, device, shift, day of week, hour. A mechanism concentrates; process discipline spreads. Segmentation is what converts an undifferentiated total into a short list of places to look.
Join the top candidates to transaction history
For the highest-gross signatures, pull every transaction against the item and location in the window before each adjustment. This is where an inferred mechanism becomes an evidenced one, and it is the only step that requires real time.
Quantify per defect, not per adjustment
Occurrence count, gross quantity, extended value, date range, and the labour involved in the corrections themselves. The correction effort is a real recurring cost and is almost never counted — it is also the number that makes the case for fixing a defect that nets to zero.
Fix the code list as well as the defects
Replace activity codes with mechanism codes, remove defaults, keep the list short enough to be read. Then re-run the same queries next quarter: churn per code is a direct measure of whether anything actually changed.
Data and fields to inspect
- Adjustment detail — item, location, LPN, quantity, direction as a sign rather than an absolute value, UOM, reason code, free-text note, user, approver, timestamp, and the source (count-driven, manual, reconciliation, system-generated).
- Reason code master — code, description, whether it is a default, whether it requires approval, and the threshold above which approval applies.
- Approval records — approver, request and approval timestamps. The gap between them measures whether the control is real.
- Link from adjustment to originating count — so count-driven and non-count adjustments can be separated. Without it, a count programme's output is indistinguishable from operational correction.
- Location master — type, zone, forward-to-reserve relationships, and aisle or slot sequence so adjacency can be computed. Pairing analysis is impossible without these.
- Item master — base UOM, full conversion chain, case pack, inner pack, pallet quantity, ABC class, standard cost, vendor.
- Receipt history — so each adjustment can be joined to the item's most recent receipt and the day gap measured.
- Transaction history for candidate items and locations, with transaction and posting timestamps separate.
- Prior-period adjustment logs — recurrence and periodicity cannot be measured in a single quarter.
- Labour or task records for adjustment activity where available, to price the correction effort itself.
Adjustment volume vs. inventory accuracy
These measure different things and are routinely treated as two views of one thing.
Inventory accuracy measures the state of the records at the moment they were checked — after every correction has been applied.
Adjustment volume measures the work required to hold them there. It is a flow, not a state, and it is invisible to any accuracy figure.
The two can move in opposite directions, and the combination that looks best is often the most expensive. A site reporting 99% accuracy alongside twelve hundred adjustments a quarter is not a site with good inventory control; it is a site whose defects are being manually absorbed at a rate fast enough to keep the measured state clean. The accuracy figure is entirely honest and it is describing the output of the correction process rather than the quality of the underlying operation.
This is why the worked example nets to −2,300 eaches and still contains a replenishment transaction defect moving 19,100 eaches a quarter by hand. Every accuracy report for that quarter was accurate. Every net inventory figure was unremarkable. The defect was visible only in gross, and only by reason code.
Report them together. Accuracy without adjustment volume hides the cost of achieving it, and adjustment volume without accuracy hides whether the effort is working. The pair is the honest picture, and the trend that matters most is gross adjustment per unit of throughput — the one number that falls when defects are actually eliminated rather than absorbed. How to make the accuracy half of that pair defensible is covered in WMS inventory accuracy.
The operational takeaway
Start with one division. Gross adjustment over absolute net, for the whole log, for a quarter. A ratio near 1 means corrections correspond to real events. A ratio in the dozens means the log is full of offsetting corrections, and offsetting corrections are always responding to a mechanism — stock does not rise in one place and fall in another by itself.
Then decompose by reason code and judge whether the codes carry causes at all. Where one activity code dominates, that is the first finding and it explains why previous investigations went nowhere. Where the codes are usable, the five signatures — receipt proximity, forward-to-reserve pairing, pick-face concentration, whole-number ratios, adjacent-location pairing — will each either light up or rule themselves out.
Above all, stop reading adjustments as housekeeping. They are the only record in the building where someone wrote down that the system was wrong, and read as a population they will tell you why more directly than any report designed for the purpose. From here: the root cause method for turning a signature into a proven mechanism, and count discrepancies for where a large share of these adjustments originate.
Related WMSAudit guides
- Inventory root cause analysis The method: evidence versus inference, transaction replay, and proving a pattern rather than an instance.
- Cycle count discrepancies Five tests that separate counting noise from a mechanism, and what each attribute pattern means.
- Inventory discrepancies The parent method: replay an item's transaction history until the balance stops reconciling.
- Warehouse receiving errors Ordered, advised, delivered, posted — and what each gap between them means.
- The WMSAudit engagement Scope, method, fixed fee and what the report contains.