Production planning engine
PySpark · Microsoft Fabric · Business Central
Weekly demand never arrives level. The rule that matters is the one planners insisted on: capacity is never exceeded. A full week is full, work cascades forward, and if it is late it is late. What cannot fit at all becomes the overtime and outsourcing requirement instead of quietly disappearing.
Drag the gates. Watch which one actually binds. It is rarely the plant-wide number.
- Never over cap
- A full week is full. Work cascades to the next week with genuine room rather than being force-placed into a virtual overflow lane.
- Gates compete
- Plant pieces, cell minutes and per-family sub-caps all bound the same week. Every blocked quantity records which gate stopped it.
- Nothing disappears
- What will not fit inside the horizon is reported as the overtime and outsourcing requirement.
- Why not a solver
- CP-SAT or MILP is the obvious reach, and it optimises for the wrong thing here. Planners have to be able to argue with a schedule, so every blocked quantity has to name the gate that stopped it, and an optimum arrives as one number with no such account. A deterministic forward cascade also re-runs over 25,000 orders on demand and returns the same plan twice, which matters more on a shop floor than the utilisation it gives up.
Raise the plant gate on its own and the plan barely improves, because the cell's minutes are usually what bind. That is the entire argument for scheduling against real cell capacity instead of a plant-wide number.