Back to Feed
article 3m read

One sale and an empty shelf produced a full-case suggestion from the reorder planner

An empty-shelf floor in my ordering system turned tiny demand into full-case suggestions and blinded the small-order check behind it; the floor now needs real demand, and two sibling paths got the same treatment.

Article DepthPractice

Flow

Inputs on each side of the half-case line and what the planner does

  1. 1Empty shelf, one sale, very large case

    Suggests zero, keeps the running-out flag, and holds the row. The floor is zero and the need is far below a case.

  2. 2Empty shelf, a handful of sales

    Used to reorder by itself. Now the row is held for a person.

  3. 3Group with no stock and no sales

    Gets the no-stock, no-sales label and does not start an order.

  4. 4Rebuild with a reviewed list

    Anything not on the list is skipped with a reason before checks and cart writes.

  5. 5Reviewed list comes out empty

    Onboarding stops instead of ordering everything.

The ordering system used to suggest a full case of a product that had sold one unit, just because the shelf was empty. It did what my rules told it to.

I caught it by comparing my planner's numbers with an outside reorder report and looking hard at the rows where mine asked for more. The extra came from one rule: if a store has none of something, order at least a full case. That rule looked at the empty shelf. It never looked at whether anyone was buying.

How the order number gets built

The planner looks at recent sales to guess demand, sets a target, and takes away what's on the shelf. That gives the need. A case rule then turns the need into something the supplier will sell. If the need is too small for a supplier that only sells full cases, the row is held so a person can decide.

The old floor ran first, in two spots. One bumped empty items that were about to run out up to a full case. The other did it for any empty item at all.

Why the small-order check never fired

The case rule is built to catch small orders. But the floor had already turned the order into a full case, and a full case is never too small. So the check passed every time. My second safety rule was checking the work of the first, and the first had already filled in the answer.

The new rule for the floor

Now one small function decides the floor, and both spots use it. A full case only goes in when the shelf is empty, the item is flagged as running out, and demand reaches about half a case. That line comes from the supplier's own setting, and it's kept in a safe range. If demand is below it, the floor is zero and the case rule gets the real number.

The test for the one-sale case now suggests zero and holds the row. Two old floor tests had to change because they expected the old floor.

Same mistake, two more spots

Groups of similar products could skip the "no stock, no sales" check and still trigger an order. That's gone. Rebuilds can also take a reviewed list of what's allowed and skip everything else. Onboarding now stops if that list comes out empty, instead of ordering everything.

The half-case line comes from a supplier setting, not from anything I measured. A held row isn't a dead end, either. A buyer can still put a number on it. I haven't counted how often one does.

Keep reading

Pick up a connected idea or branch into a nearby one.

5 paths forward
Continue the thread

Rounding past my stock ceiling was tempting, then my first fix ordered nothing

The reorder planner's hard stock ceiling and whole supplier cases had no declared winner, and rounding up was the tempting answer. The first change deferred the demand but dropped feasible cases too, and a blank capacity entry let an overflow store take an unlimited leftover. The second change trims one case at a time and writes an explicit zero.

via #planning · #inventory · #correctness