Back to Feed
article 3m read

Zero ordered for an empty shelf, and the planner never said why

A stock ceiling and my empty-shelf guarantee collided on a single supplier case, and the planner settled it by dropping the product with no reason. I ranked the rules, let one store go over on the record, and threw out the agent's first odd-case version because it pushed a stocked store over its own cap.

Article DepthPractice

Flow

Checks before the empty-shelf rule beats the ceiling

  1. 1Old step gave up

    Putting cases off left nothing to order.

  2. 2Right kind of conflict

    Only the conflicts the empty-shelf rule causes count.

  3. 3Shelf room not shared

    Skip it if another part of the plan uses the same room.

  4. 4One store, exact amount

    Raise one ceiling by just the leftover units, and store that with the plan.

  5. 5Retry must work

    Keep it only if it plans cleanly; for odd cases, the empty store must get units.

A store was out of a product, still selling it, and the ordering system said zero. No reason, no note. It looked just like "this store needs nothing."

Two of my rules were fighting, and a rule I never wrote was picking the winner.

Two rules and one case

The ceiling says no store gets more than so many days of stock. The empty-shelf rule says a store that sells a product and has none gets at least a minimum, often part of a case.

The trouble is cases. Every unit in a case has to go to some store. If the empty-shelf rule puts a minimum in a slow store, the rest of the case needs a store with room. When every store is full and the catch-all store is off or full too, there's no good answer. The planner flags a conflict.

Where the zero came from

On a conflict, the planner pushed the worst case off to later and planned the rest. With many cases, that's fine. With one case, nothing was left. The whole product fell out of the order, even for stores that had room, and the note about the conflict was thrown away with it.

That was a choice: the ceiling wins, and nobody hears about it. I never made that choice. So I made the opposite one. For an empty store that's selling, the empty-shelf rule wins.

A second try with one raised limit

The old step still runs first, so every plan that worked before stays the same. If it gives up, and the only conflicts are the ones the empty-shelf rule causes, the planner tries once more. The retry bends the ceiling for exactly one store.

The retry gives the chosen store extra room equal to the spare units.

That store is picked the same way every time. The extra room is stored with the plan, so you can see it later. The store's row gets a reason code, and the review record notes how many units were forced. If the retry doesn't work cleanly, the old result stands.

Old tests that expected "orders nothing" now expect "orders the whole case." On my dev data, a bit over a dozen products changed, and spend went up less than one percent.

If two parts of the plan share the same shelf room, the planner skips the rescue. Raising one side would make them disagree.

Odd cases got it wrong once

Odd-sized cases split into a bigger and smaller half. The agent's first try paired the empty store with another store, often a stocked one, and raised both ceilings. That could push the stocked store over its limit for someone else's empty shelf. It also counted any drop in waiting demand as success, even if the empty store still got nothing.

Now only empty stores that got nothing get extra room. Two of them still share a case. One alone takes the whole case. Stocked stores stay under their limits, and the retry counts only if the empty store gets units.

The overstock I'm choosing

A whole case for a slow store can sit there for many months. I'm fine with that for an empty shelf. I'm not fine that nothing seems to warn me first. And if one store can't take all the leftover, the product still drops the old way, with no reason given. That case is still open.

Keep reading

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

5 paths forward