Nobody sets a reorder point by walking to the shelf. The policy reads a record, and the record is a claim about the shelf. A record asserts four things: a stock number, a location, a quantity on hand, and a condition, and it is inaccurate if any one is wrong.
| Source | What happens | How it shows up |
|---|---|---|
| Transaction error | A receipt, issue or transfer keyed wrongly | A discrepancy with no offsetting entry |
| Unrecorded movement | Stock taken or returned without a transaction | Record above shelf, drifting one way |
| Shrinkage | Theft, breakage, spoilage | Record above shelf |
| Misidentification | Two similar items confused | Paired errors, one high and one low |
| Unit of issue | Each against case | Errors that are exact multiples |
| Timing | Count and transaction straddle a cutoff | A discrepancy that resolves itself |
| Location error | Stock moved without a transfer | Correct total, wrong place |
The last column matters: the signature each source leaves is what makes a cause findable.
Transaction errors occur when a movement is recorded incorrectly. They are process defects and can be designed out.
Stock loss errors are real movements that never generated a transaction: shrinkage, damage, theft. No transaction discipline prevents them, and they drift one way, with the record always above the shelf.
Every source in the table is a transaction, or the absence of one. That is, a record for an item that nothing has happened to cannot become wrong. Counting an item with no activity since its last correct count is close to guaranteed to find nothing.
In retail store operations the errors concentrate at receiving and at the point of sale, then database processing, counting, ticketing, stocking and shelf alignment. Knowing the order says where process improvement returns the most.
Let \(I_a(t)\) represent what is actually on the shelf, \(I_r(t)\) what the system believes, and \(D(t)\) the discrepancy:
\[ \begin{aligned} D(t) &= I_a(t) - I_r(t) &&\text{negative under shrinkage: record above shelf}\\ \mathit{IP}(t) &= I_r(t) + \mathit{IO}(t) - B(t) &&\text{the position is computed from the record} \end{aligned} \]
Demand is filled from \(I_a\), because that is what exists. The reorder decision compares \(\mathit{IP}\), built from \(I_r\), against a reorder point. When \(D(t) \ne 0\) the comparison is made against the wrong number, and it can trigger an unneeded order or suppress a needed one.
How it fails. If the record overstates the shelf, the trigger fires late, the effective reorder point is lower than designed, and the item runs short more often than the design allows. Nothing reports this. The model reports the service it was designed to deliver, and the warehouse delivers something worse.
Safety stock exists to absorb uncertainty in demand over the lead time. Record error is a second source of uncertainty, and the safety stock absorbs it too, whether or not anyone intended that.
An organization with poor records pays for safety stock twice: once for the demand uncertainty it knows about, and again for the record uncertainty it does not.
What error costs. A simulated two-echelon chain, each stage on an \((r, Q)\) policy, separates three responses:
| Response | What happened | The trade |
|---|---|---|
| Leave the policy alone | High-error case lost about half its fill rate; backorders rose from about 10 to about 370 | Service given up |
| Re-optimize around the error | Fill rate restored to the 90% target, with substantially more stock; backorders still up about 300% for fast movers | Service bought with stock |
| Count | Fill rate up, inventory the same or slightly lower | Not a trade |
Re-optimizing around the error is why record inaccuracy survives for years unremarked. The customer facing measure returns to target, and the cost moves into inventory, transportation and handling, where nobody attributes it to record keeping. That is, the symptom that would have prompted an investigation has been bought off.
Counting is different in kind. The first two responses trade service against inventory; counting improves service without buying it with stock, because it attacks the discrepancy instead of compensating for it.
That is why this material comes before the policies. There is no point tuning a reorder point to the second decimal place against a record that is right eight times in ten.
\[ \text{record accuracy} = \frac{\text{number of accurate records}}{\text{number of records examined}} \]
Simple to state, and it hides three choices: what counts as accurate (an exact match, or a tolerance), what is weighted (records, or value), and which fields.
| Item | Unit cost | Recorded | Counted | Difference | Error |
|---|---|---|---|---|---|
| A-100 | $80.00 | 120 | 120 | 0 | 0.0% |
| A-101 | $150.00 | 45 | 44 | \(-1\) | 2.2% |
| A-102 | $2.00 | 500 | 495 | \(-5\) | 1.0% |
| B-200 | $400.00 | 12 | 12 | 0 | 0.0% |
| B-201 | $0.40 | 3,000 | 2,970 | \(-30\) | 1.0% |
| B-202 | $25.00 | 8 | 0 | \(-8\) | 100.0% |
| C-300 | $6.00 | 250 | 250 | 0 | 0.0% |
| C-301 | $0.75 | 1,000 | 990 | \(-10\) | 1.0% |
| C-302 | $3.00 | 60 | 66 | \(+6\) | 10.0% |
| C-303 | $95.00 | 15 | 15 | 0 | 0.0% |
\[ \begin{aligned} \text{strict match} &: 4/10 = 40\% &&\text{four exact}\\ \text{within } 2\% &: (4 + 3)/10 = 70\% &&\text{three more at 1}\%\\ \text{recorded value} &: 80(120) + 150(45) + 2(500) + 400(12) + 0.40(3{,}000) &&\\ &\quad + 25(8) + 6(250) + 0.75(1{,}000) + 3(60) + 95(15) = \$27{,}405 &&\text{item by item}\\ \text{discrepancy} &: 150(1) + 2(5) + 0.40(30) + 25(8) + 0.75(10) + 3(6) = \$397.50 &&\text{absolute}\\ \text{by value} &: 1 - 397.50/27{,}405 = 98.55\% &&\text{errors on cheap items} \end{aligned} \]
The same shelf, counted once, reports 40%, 70% or 98.6%, depending only on the definition. Comparisons across organizations that do not state theirs are meaningless.
B-202 is missing entirely, eight recorded and none on the shelf, and it moves the value-weighted figure by $200 of $27,405. The next customer who wants B-202 will not care that the warehouse is 98.6% accurate by value.
An annual physical inventory has three defects as a way of managing accuracy: it is disruptive, usually stopping operations; it is infrequent, so a February error is corrected in December after eleven months of decisions; and it diagnoses nothing.
Cycle counting counts a portion of the population continuously, without stopping operations. Its purposes, in a deliberate order:
Notice that accuracy is third and the balance sheet fourth. A program judged only on the number of records it corrected is being judged on its by-product.
| Method | How the sample is formed | Strengths and weaknesses |
|---|---|---|
| Random sample | Items drawn at random | Statistically clean; ignores what is known about which items go wrong |
| ABC | Each class counted at its own frequency | Effort where value is; classifies on financial criteria that may not track error risk |
| Process control | The counter counts what is easy and skips the rest | Fast; biased, but toward the items most likely to be wrong |
| Location based | Every item in a chosen area | Economies of movement; item characteristics play no part |
| Opportunity based | Counts triggered by events | Counts when cheapest and most informative; uneven coverage |
| Transaction based | Counted after every \(n\) transactions | Targets the mechanism that creates errors; idle items never counted |
Process control counting is deliberately biased. If the purpose is to find and fix causes, a biased sample aimed at the problem beats an unbiased one that is mostly clean records.
Errors enter through transactions, so ordinary operation exposes discrepancies for free, and each exposure is a trigger:
The third trigger is the most useful, because it verifies the record precisely when a wrong one would cause a wrong order.
The conventional ABC frequencies are four, two and one counts a year: a convention, not a result. Work back from the error rate instead. Let \(p\) represent the probability that a verified record goes wrong in any period, staying wrong until the next count; \(n\) the periods between counts; and \(A(n)\) the average accuracy over the cycle.
\[ \begin{aligned} P\{\text{correct } t \text{ periods after a count}\} &= (1-p)^{t} &&\text{survives $t$ periods}\\ A(n) &= \frac{1}{n}\sum_{t=0}^{n-1}(1-p)^{t} &&\text{average over the cycle}\\ &= \frac{1}{n}\cdot\frac{1 - (1-p)^{n}}{1 - (1-p)} = \frac{1 - (1-p)^{n}}{np} &&\text{geometric sum} \end{aligned} \]
This is the simplest version of a two-state Markov model, accurate or inaccurate, in which counting returns a record to the accurate state.
\(p = 0.03\) a month, target 95%:
| \(n\) | \(A(n) = \frac{1 - 0.97^{n}}{0.03n}\) |
|---|---|
| 1 | 100.0% |
| 2 | 98.5% |
| 3 | 97.0% |
| 4 | 95.6% |
| 5 | 94.2%, below |
Count every four months, three times a year. At \(p = 0.06\), \(A(2) = 97.0\%\) and \(A(3) = 94.1\%\): every two months, six a year. Doubling the error rate roughly doubles the count frequency.
The figure makes the case for differentiated frequencies without appealing to value: it is \(p\), not dollar volume, that sets how often a record needs verifying. And the two disagree: low value, high volume items show the lowest accuracy, the population an ABC scheme counts least.
Yet simulation of a retail chain found counting essential for low demand, high cost items and close to worthless for high demand, low cost items, where extra stock is cheaper than counting.
Both results hold. The cheap fast items have the worst records and are the least worth correcting, because an error on them costs little and a little extra stock covers it. Counting effort should follow the cost of being wrong, not the probability of being wrong.
Better still, price counting and its absence together: count frequency is one more term in the total cost, a cost incurred to protect the accuracy every other term depends on.
Estimating population accuracy is a separate problem from maintaining it. Let \(m\) represent the records to count, \(e\) the margin of error, and \(\hat{a}\) a prior estimate:
\[ \begin{aligned} m &= \frac{z_{\alpha/2}^{2}\,\hat{a}(1-\hat{a})}{e^{2}} &&\text{a proportion within } \pm e\\ &= \frac{(1.96)^{2}(0.92)(0.08)}{(0.02)^{2}} = \frac{(3.8416)(0.0736)}{0.0004} = 706.9 &&\hat{a} = 0.92, \; e = 0.02, \text{ 95}\%\\ m(e = 0.01) &= 706.9 \times 4 = 2{,}828 &&m \propto 1/e^{2} \end{aligned} \]
So 707 records. Halving the margin quadruples the count, which is why accuracy is usually reported to the nearest percentage point and no finer.
Each sampled record is accurate or not, so a sample gives a proportion, and a \(p\) chart separates sampling noise from real change: a center line and limits three standard errors away.
The first eighteen weeks scatter between 88% and 95% with no pattern: a stable process, whatever its level.
From week 19 the points drop, and nine of the last twelve fall below the lower limit. Notice that the signal is a run, not a point: a level that has moved and stayed moved.
\(n = 250\) records a week, running at \(\bar{p} = 0.92\):
\[ \begin{aligned} s &= \sqrt{\frac{\bar{p}(1-\bar{p})}{n}} = \sqrt{\frac{(0.92)(0.08)}{250}} = 0.0172 &&\text{standard error of the proportion}\\ \text{limits} &= 0.92 \pm 3(0.0172) = 0.869 \text{ to } 0.972 &&\text{three standard errors}\\ 214/250 &= 85.6\% < 86.9\% &&\text{out: investigate}\\ 220/250 &= 88.0\%, \text{ inside the limits} &&\text{four points down, and ordinary} \end{aligned} \]
Acting on the second week would send a team looking for a cause that does not exist.
Two cautions. Records are not a homogeneous population, so the stated false alarm rate is optimistic, though slightly. And a signal is a prompt to investigate, not to adjust: correcting the sampled records addresses nothing.
A location’s orders are its supplier’s demand, so bad records send distorted demand upstream. In the two-echelon experiments, one retailer declining to cycle count cost the chain about 6% of fill rate, 2% more inventory, and about 400% more backorders. Record accuracy belongs in the measures a supply chain agrees on, and between firms in contracts.
A count that finds a discrepancy and adjusts the record has closed a symptom. If the cause is still in place, the program counts the same errors indefinitely. Control group counting, a small set counted repeatedly, localizes when each error entered, and is the part of a program most often skipped.
Best-in-class accuracy, 99% and above, came from organizations that resourced counting, had system support, and hunted common process errors, not from statistical sophistication. Counting is the instrument; finding and preventing causes is the work.
Every replenishment policy assumes demand continues and has no way to notice it has stopped. Excess is not a policy failure; it is a decision the policy was never asked to make. Example: 400 units at $28; demand has fallen to 12 a year; \(i = 0.20\); \(f = \$30\); a liquidator offers $6. Keep two years’ supply, 24 units:
\[ \begin{aligned} h &= ic = 0.20 \times 28 = \$5.60, \quad 376 \times 5.60 = \$2{,}105.60 \text{ a year} &&\text{keeping the excess}\\ 376 \times 6.00 &= \$2{,}256 \text{ now}, \quad 2{,}256/2{,}105.60 = 1.07 \text{ years} &&\text{disposing; break-even} \end{aligned} \]
\(f\) does not appear: the item stays stocked either way, so it is not marginal. Thirty-three years of supply against a 1.07-year break-even: dispose.
The $10,528 the excess cost is sunk, and not a reason to keep anything. But the $8,000 write-off is visible and the $2,106 a year is not, so the common outcome is to spend the larger amount quietly rather than recognize the smaller one publicly.
What is measured is managed, and aggregation hides: a 96% portfolio fill rate is consistent with critical items at 60%, so report by class too. And every measure can be improved cheaply in a way nobody wanted:
| Measure | Improved cheaply by | Counterweight |
|---|---|---|
| Inventory turnover | Cutting safety stock | Fill rate, backorders |
| Inventory investment | Deferring replenishment | Fill rate, stockout frequency |
| Fill rate | Holding more of everything | Turnover, investment |
| Order frequency | Ordering in larger lots | Average inventory |
| Record accuracy | Counting only easy items | Accuracy on a random sample |
A measure reported alone will eventually be met alone.
A policy reads a record, not a shelf: \(\mathit{IP}\) is built from \(I_r\), and a record above the shelf fires the trigger late with nothing reporting it.
Re-optimizing around error buys the symptom off; counting improves service without buying it with stock.
Accuracy is not one number: 40%, 70% or 98.6% from one count sheet.
Count frequency follows the error rate, \(A(n) = (1 - (1-p)^{n})/(np)\), and counting effort follows the cost of being wrong.
A control chart flags runs, not points; and correction is the by-product, finding causes is the work.
Excess is a forward-looking decision, and its purchase cost is sunk.
Read before next session: The General Cycle through The Classical Models as Special Cases, in the deterministic lot sizing chapter.
Today’s material was Inventory Record Analysis and Other Responsibilities.
Next session begins the models themselves:
From here on every model assumes the record is right. You now know what that assumption costs when it is not.