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.

  • Updated
  • Written by WMSAudit
  • A Ravenspire LLC company
  • 11 min read

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.

Adjustment log · one site · one quarter · by reason code Illustrative arithmetic
Adjustment lines, gross and net quantity by reason code, with churn ratio
Reason code Lines Gross EA Net EA Churn What it actually records
COUNT VAR 940 121,700 −1,900 64× 76% of all lines and no diagnostic content whatsoever.
DAMAGE 118 4,200 −4,200 Gross equals net. Every line one direction — a credible code.
RECV CORR 84 38,400 +2,100 18× 457 EA per line. Receipts being rebuilt after the fact.
REPLEN ADJ 62 19,100 +900 21× 19,100 EA of movement with no from-location or to-location.
CYCLE ADJ 36 1,100 +800 1.4× Small and mostly directional. Unremarkable.
Total 1,240 184,500 −2,300 80× The net figure is the only one that gets reported.
Churn ratio — gross ÷ |net| 184,500 ÷ 2,300 = 80 · eighty eaches moved by hand for every one of net change

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-02 against A-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 ADJ and RECON describe 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 ERROR asserted 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.

Step 01

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.

Step 02

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.

Step 03

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.

Step 04

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.

Step 05

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.

Step 06

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.

Step 07

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.

Step 08

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.