erpkaizen

Measuring the value

Sellable stock is not stock on hand: the ROI of an "actual stock" row that answers the right question

Has a measurement By 28 Oct 2026 About 7 min
Three warehouses on the left: the main store with 120 kg, the salvage warehouse with 6 kg, another warehouse with 30 kg. "Actual stock" used to add all three into 156 kg. Now it takes the main store only — 120 kg you can sell — and the other two sit in an optional "Stock in other warehouses" row, with a hover for each. Main store 120 kg Salvage 6 kg Other store 30 kg Actual stock 120 kg · sellable Other warehouses 36 kg · hover for each Before: one number adding every warehouse — 156 kg
The goods go nowhere — they are still in the warehouse, still on the books. The number the dispatcher allocates from is simply sellable stock now, and the other warehouses sit on a row of their own.

On the dispatch grid, "actual stock" stops adding every warehouse and no longer counts the salvage warehouse, with an optional row for stock elsewhere: the money comes from selling salvage before it spoils and from no longer promising stock that cannot be sold — how to measure each, and how far to trust it.

What is separating sellable stock from stock on hand worth?

All it needs is delivery notes per day, the average cost of one note and the share of goods customers return. Every money figure follows from those — and every one is editable.

Count the last 60 days and divide by the number of days
Cost of goods delivered in the period divided by the number of notes
Total returned over total delivered, in the same stock unit
Fresh goods usually ship all week

Derived from the four numbers above

Cost of goods delivered per month–
Returns at cost per month–
Before: handed out as sound (per month)–
After: extra sold as salvage (per month, at cost)–
Assumptions — open to see and edit every number

Salvage sales

Allocating stock that cannot be sold

Time and cost

Where a month of customer returns goes Band width = cost of goods · one scale in both panels
Where a month of customer returns goes

A. Sold as salvage before it spoils–
B. No more promising stock that cannot be sold–
Total benefit / month at full run–

This is an estimate, not a promise. Stream B is the softest — set it to 0 and read the total again. Set the return share to 0 and every stream goes to 0 with it, as an honest model should.

On the dispatch grid, the "Actual stock" row is the number the dispatcher looks at most in a day: whatever is left is what gets allocated. The question this piece asks sounds like a matter of words — stock of what? — but at a fresh-goods distributor it is a matter of money.

1. Two numbers with one name

Stock on hand is everything the company holds. Sellable stock is the part of it that can be promised to a customer today. The two agree when every kilo in the warehouse is sound. With fresh fruit they never agree.

Before the change, "Actual stock" on the grid added every warehouse in the company into one number. Once customer returns started being recorded on the dispatch grid and received into a salvage warehouse, that bruised and near-date fruit immediately became part of the number the dispatcher allocates from — as if it were sound.

Measured over the last 60 days at a business running about a hundred delivery notes a day: returned quantity is about 0.47% of delivered quantity, and 13% of customers returned something at least once. Small — but it piles up on exactly the most perishable items, where the dispatcher has the least room for error.

2. What the change is

  1. "Actual stock" no longer counts the salvage warehouse. The number the dispatcher allocates from is sellable stock.
  2. An optional "Stock in other warehouses" row. The user picks which warehouses to show; each cell is the total of the warehouses picked, and a hover over the cell shows each one.

The goods go nowhere. They stay in the warehouse, stay on the books, stay counted — they are simply no longer promised to customers. And for the first time whoever sells off salvage has one place to look each morning: what the salvage warehouse holds, and how much.

3. First stream: sold as salvage before it spoils

Benefit/month = value of returns × (share sold as salvage after − before) × salvage price as a share of cost
Example With 100 delivery notes a day, an average cost of 1.5 million VND per note and 30 delivery days, returns carry a cost of about 21.15 million a month. Before, about 30% were sold off in time; after, with the salvage warehouse shown apart every morning, 60%. Salvage price is 40% of cost. 21,150,000 × 30% × 40% = 2,538,000 VND a month.

Value the extra sales at the salvage price, not at cost. Returns are bruised and near their date — selling them recovers only part of what they cost. Valued at cost, the same stream reads 6.3 million: two and a half times the real figure.

How to measure it. From now on the salvage warehouse's ledger holds receipts, sales and write-offs per item — the "after" measures itself. The "before" has to be taken by hand for one week before switching on: how much came back, how much was sold off, how much was thrown away.

How far to trust it: medium. Seeing the number does not sell the fruit; somebody has to have the job of calling salvage buyers every morning. If nobody does, set the two shares equal and this stream goes to zero.

4. Second stream: no more promising stock that cannot be sold

Benefit/month = value of returns × (1 − share sold as salvage before) × share handed out as sound × gross margin
Example Of the 70% of returns not sold off in time, assume 20% is counted as sellable and allocated to deliveries. Only at picking does it turn out it cannot be shipped: the delivery goes out short, or a top-up is bought in a hurry at a higher price. Take the lighter of the two — the 25% margin on that part is lost. 21,150,000 × 70% × 20% × 25% = 740,250 VND a month.

How to measure it. Count short-delivered lines whose reason is "goods not up to standard", and same-day top-up purchases, for one month before and one month after. If the chain penalises fill rate, add the penalty to the margin.

How far to trust it: lowest. 20% is an assumption, not a measurement. Set it to zero and read the total again — what is left still pays back.

The calculator counts returns only. Before the change, "Actual stock" also added the company's other warehouses — goods in transit, a branch's stock. That part is not in the model, so the figure here is the low side.

5. Adding it up

StreamPer monthPer year
Sold as salvage before it spoils2.54 M30.5 M
No more promising stock that cannot be sold0.74 M8.9 M
Total at full run3.28 M39.3 M

The calculator puts the cost of the change at 8 million VND. Benefits ramp over the first 2 months, because whoever sells off salvage needs a few weeks to trust the salvage warehouse's numbers. On that assumption payback comes in about month 2.9 (month 2.4 if you pretended it ran at full from day one), with a first-year benefit of about 37.7 million VND.

The diagram in the calculator draws the same month of returns twice, on one scale: the upper panel when it counts as sellable stock, the lower one when the salvage warehouse is shown apart. Band width is cost of goods.

6. What this ROI stands on

Two assumptions decide almost all of it: the extra share sold as salvage (over three quarters of the total) and the share of returns handed out as sound (the softest). Lower both — salvage sales rise only from 30% to 45%, only 10% of returns are misallocated — and 1.64 million VND a month is left, payback in about month 5.4, or month 6.4 if it takes 4 months to reach full run.

And set the return share to zero and every stream goes to zero with it: if there is no unsellable stock in the warehouse, separating it is worth nothing. A model that cannot collapse is a prejudice in arithmetic costume.

7. Measuring it in your own business

  1. Baseline (one to two weeks, before switching on). Track returns by hand: how much was sold off, how much thrown away. Count lines delivered short for "goods not up to standard" and the hurried top-up purchases.
  2. Switch it on in the dispatch grid. Decide in advance which warehouses the dispatcher needs to see in the "Stock in other warehouses" row.
  3. Re-measure after two months, against the same season. Fruit is seasonal: a month of fast-ripening fruit returns more than a cool one, and comparing across seasons measures the weather, not the change.

8. The thing to remember

A number is right only when it answers the question of the person reading it. "Actual stock" was never wrong — it added up every kilo the company holds, correctly. The dispatcher simply was not asking "how much do we hold" but "how much can we promise".

Stock you cannot sell is still stock. Do not hide it from the books — just do not promise it to a customer.

The ratios in this piece were measured on a real distributor's system and anonymised; costs, salvage prices and every assumption in the calculator are illustrative. Replace them with your own.

Read next