Back to Blog
Published:
Last Updated:
Fresh Content

Dynamics 365 can recalculate your safety stock. It still trusts the lead time you typed.

7 min read
1,501 words
high priority
Mudassir Marwat

Mudassir Marwat

Founder & CEO, Cognilium AI

TL;DR

The safety stock journal recomputes minimum coverage from your own transaction history — over a window set by a lead time someone typed at go-live.

Dynamics 365 can recalculate your safety stock. It still trusts the lead time you typed.

There is a native tool that recomputes safety stock from your own transaction history, with a standard deviation and a service level. It is one of the least-discussed features in the planning module.

It is also computed over a window defined by a number somebody typed at go-live, and it will not tell you that number is wrong.

For the master planner or materials director who suspects the buffers are stale. Finance & Operations. 8 minute read.

What Dynamics already does, quoted in full

Start with the concession, because the gap only matters once the capability is clear.

From Use the safety stock journal to update minimum coverage for items [GA] (ms.date 2025-08-22):

"Safety stock journals calculate a proposed minimum quantity based on an item's historical usage, either for min/max or inventory planning purposes."

And the history is real transaction history, not a forecast:

"Historical usage represents all issue transactions during a specified period. These issue transactions include sales order transactions and inventory adjustments."

It writes back, too. Posting the journal updates the item coverage record itself:

"When the journal is posted, the associated minimum quantities in the item coverage are automatically updated."

So the picture of a static field nobody can recompute is wrong. There are three supported ways to set the Minimum value — manually, through the Data Management framework, and "by the safety stock calculation done by safety stock journals". The third one exists and it works.

The three statistics it computes

The journal is not a rule of thumb. Per line, it produces:

"The calculated quantities include average issues per item lead time, average issues per month, and the monthly standard deviation."

And the proposal has two methods:

  • Use average issue during lead time — "generate Calculated minimum quantity values based on the average issue during the specified period", with a Multiplication factor — "enter 1.0 to use the exact calculated average or 1.1 to add an extra buffer"
  • Use service level — "calculate a proposed minimum based on the desired service level" — and it requires the standard deviation, since "You must set this option to Yes to use the Use service level option"

A service level plus a standard deviation is textbook statistical safety stock. It can run on a schedule, in batch, filtered by coverage group. This is a genuinely capable feature and it is under-used rather than absent.

The one input it does not compute

Now read the same page for what feeds the calculation rather than what comes out of it.

Safety stock, in the min/max approach, is defined as a function of lead time:

"The Minimum quantity represents the average daily usage multiplied by the item's lead time."

And the first of the two methods computes "average issues per item lead time". So the length of the window the statistics are gathered over is the item's lead time.

Where does that lead time come from? Not from receipt history. It is the configured value on the item. And the only lever the journal offers over it is one you type by hand:

"Lead time margin – Enter a value to extend the normal lead time by (for example, to allow for administration)."

Enter a value. Not derive a value from your last forty receipts — enter one.

So the demand side of the calculation is statistical and the supply side is asserted. Issues are measured, summed and given a standard deviation.

Lead time is taken as given. And read what the margin is documented for — "to allow for administration". It is an allowance for paperwork, not a buffer against supplier variability, and Microsoft does not present it as one.

Safety stock exists to absorb two kinds of variability: how much customers want, and how long suppliers take. The journal measures the first properly and does not measure the second at all.

Which means the more your realised lead time differs from your configured one, the more confidently wrong the output becomes — because the error is not additive, it is structural. The statistics are being gathered over the wrong window.

If the item card says 14 days and your last forty purchase receipts average 31, then "average issues per item lead time" has been computed across 14 days of demand for a part actually exposed for 31.

The standard deviation is correct. The service level is correct. The window is wrong.

So every downstream number inherits it — the planned order, the projected on-hand, and the inventory-value impact the journal helpfully shows you.

Nothing in the process described on that page flags this, because nothing in it looks at receipt history.

The second gap: nothing tells you to run it

The journal is something a planner opens. Read the sequence — create a journal name, create the journal, create lines, calculate a proposal, edit, post — and notice what is absent from it: any signal that the current minimums have drifted far enough to be worth recalculating.

Bounded to the two pages this article cites: neither describes a mechanism that ranks items by how far their configured parameters sit from realised behaviour, or that surfaces the ones costing the most. Coverage settings [GA] (ms.date 2026-03-24) documents how to set coverage — coverage group, item coverage override, a wizard, six coverage codes — and never how to review what was set.

A capability nobody is prompted to use behaves, in practice, like a capability that is not there.

The arithmetic, on assumptions you should challenge

Take a four-plant Tier 1 supplier, three legal entities, 12,000 planned items.

  • Purchased items with a Minimum set at go-live — Value: 4,000 · Basis: modelled
  • Items where configured lead time is materially below realised — Value: 1 in 5 · Basis: modelled — the number to test first
  • So items exposed for longer than the buffer assumes — Value: 800 · Basis: derived
  • Average configured lead time on those — Value: 14 days · Basis: modelled
  • Average realised, from receipt history — Value: 31 days · Basis: modelled

The exposure window on those 800 items is understated by 17 days — more than double. Their safety stock was computed, correctly, over less than half the period it needs to cover.

That is not a savings figure and we are not offering one. It is a count of items whose buffer maths rests on a stale input, and both numbers — configured lead time and realised receipt interval — are already in your system today.

What we would reject

We would not replace the safety stock journal. It does the statistics well, it writes back into the field the planning engine already reads, and your planners can audit it. Building a second calculator that disagrees with a native one creates an argument, not a buffer.

We would not let a model post the journal. Safety stock moves working capital. The proposal is reviewed by a planner, and Microsoft's own flow already assumes that — the calculated quantity and the new quantity are separate columns for exactly this reason.

We would not touch the coverage-group design. Which items sit on which coverage code is your implementation partner's ground, and it should stay there.

Two queries for Monday

  1. Compare configured lead time to realised receipt interval for your top 200 purchased items by value. Configured lead time is on the item; realised is the gap between purchase order confirmation and product receipt, which is posted history. If those two are strangers, your buffers are sized against the wrong window.
  2. Ask when a safety stock journal was last posted. Not whether the feature exists — when somebody last ran it. If nobody can name a date, the Minimum values in your system are as old as your implementation.

Then, if the gap is real: Demand & Inventory Optimizer computes the buffer per item and location from both distributions — demand and lead time — and writes the result back into the Minimum field the planning engine already reads, behind planner approval. No second system, no second login.

A working demo exists; we build these on request. We have no delivered pricing or planning engagements, so that is a capability statement rather than a report on somebody's business.

About Cognilium Cognilium is the AI optimization layer for Dynamics 365 — complementary apps that optimize the pricing, inventory, warehouse and planning decisions your ERP manages but can't optimize. Built on Power Platform, Dataverse and Azure. https://cognilium.ai · https://www.linkedin.com/company/37180269/

Worked example. Modelled from public documentation and typical operations.

Want to know how far your configured lead times sit from your realised ones? Book a 15-minute call — we'll walk the decision and the model with you, on your data if you bring it. No deck.

Sources

Sources

Share this article

Mudassir Marwat

Mudassir Marwat

Founder & CEO, Cognilium AI

Mudassir Marwat's argument is that ERP systems record decisions they never optimise.

Founder & CEO of Cognilium AI; 37 AI agents in production across four products; 4 production AI products built and operated; three clouds in production (AWSGCPAzure)
Agentic AIRAG → GraphRAG retrievalVoice AIMulti-Agent Orchestration
In short

Key takeaways

  • Finance & Operations has a native safety stock journal that proposes minimum quantities from your own issue history, and posting it updates item coverage automatically.
  • It computes average issues per item lead time, average issues per month, and the monthly standard deviation, and it can calculate against a chosen service level.
  • The window those statistics are gathered over is the item's configured lead time, which the journal takes as given rather than deriving from receipt history.
  • The only lever over lead-time uncertainty is a margin value a person types, so the demand side of the calculation is measured and the supply side is asserted.
  • Neither the journal page nor the coverage settings page describes anything that tells a planner the current minimums have drifted far enough to be worth recalculating.
What goes wrong

Common mistakes to avoid

  • Believing safety stock cannot be recalculated natively. It can, and the mechanism is better than its reputation.
  • Running the journal without checking the configured lead time first. The statistics are gathered over that window, so a wrong lead time produces a confidently wrong buffer.
  • Treating the lead time margin as a statistical adjustment. Microsoft documents it as a value you enter, offered as an allowance for administration.
  • Assuming a scheduled batch job means the numbers are current. The schedule recalculates the proposal; it does not tell you whether the inputs still describe your supply base.

Still have a question this did not answer?

The person who wrote this article answers these. Describe your setup and what you are stuck on — you will get a straight answer, including where we think the approach is wrong.