<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dean Fachrie</title>
    <description>The latest articles on DEV Community by Dean Fachrie (@deanfachrie).</description>
    <link>https://dev.to/deanfachrie</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4092820%2F98fedd44-fd6f-4a7e-890f-3361ab34a953.png</url>
      <title>DEV Community: Dean Fachrie</title>
      <link>https://dev.to/deanfachrie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/deanfachrie"/>
    <language>en</language>
    <item>
      <title>Master planning (MRP) module in Dynamics 365 F&amp;O and SAP S/4HANA</title>
      <dc:creator>Dean Fachrie</dc:creator>
      <pubDate>Mon, 14 Sep 2026 21:11:48 +0000</pubDate>
      <link>https://dev.to/deanfachrie/master-planning-mrp-module-in-dynamics-365-fo-and-sap-s4hana-nnh</link>
      <guid>https://dev.to/deanfachrie/master-planning-mrp-module-in-dynamics-365-fo-and-sap-s4hana-nnh</guid>
      <description>&lt;p&gt;Nine of SAP's ten lot-sizing procedures transfer to &lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt; more cost-effectively than before. The tenth incurs a 3 per cent increase, and only if the coverage period is adjusted afterwards.&lt;/p&gt;

&lt;p&gt;CodeCore Dynamics LLC. 14 September 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Last week, this series noted that &lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt; and &lt;em&gt;Infor LN&lt;/em&gt; size replenishment orders almost identically because LN's lot-sizing set aligns closely with F&amp;amp;O's. SAP's set does not.&lt;/li&gt;
&lt;li&gt;SAP groups lot sizing into three families. F&amp;amp;O provides rules in only two of them. The third reads a cost and picks a lot size from it.&lt;/li&gt;
&lt;li&gt;The literature suggested the missing family would stop mattering once the plan was rebuilt weekly against an imperfect forecast. It did not. &lt;em&gt;Part Period Balancing&lt;/em&gt; costs 8.8 to 29.2 per cent less than the best rule F&amp;amp;O offers across four of five business cases, moving only 6.7 per cent when given an order cost anywhere from half to twice the actual figure.&lt;/li&gt;
&lt;li&gt;The cost gap reflects a single coverage period applied across the entire catalogue. Setting the period per item closes a third to a half of the gap and beats SAP outright on spare parts and long lead times.&lt;/li&gt;
&lt;li&gt;Demand class is the wrong attribute to adjust, performing worse than a single catalogue-wide value in two of five cases. Deriving the period from each item's price and demand rate closes 28 to 45 per cent of the gap.&lt;/li&gt;
&lt;li&gt;Of ten SAP lot-size keys migrated into F&amp;amp;O, only &lt;em&gt;Part Period Balancing&lt;/em&gt; incurs a cost (3.3 per cent). Retaining one coverage period across the catalogue raises that cost to 27.6 per cent.&lt;/li&gt;
&lt;li&gt;SAP can place the receipt at the start, the first requirement, or the end of the bucket. F&amp;amp;O has one position, which is the best of the three. A period-end receipt costs up to 51.6 points of fill.&lt;/li&gt;
&lt;li&gt;Nothing here supports a migration from F&amp;amp;O to &lt;em&gt;SAP S/4HANA&lt;/em&gt; on planning grounds.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Reading Guide
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;You want&lt;/th&gt;
&lt;th&gt;Read&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Settings to apply in F&amp;amp;O&lt;/td&gt;
&lt;td&gt;Section 5.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recommendations&lt;/td&gt;
&lt;td&gt;Section 5.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAP lot-size key costs landing in F&amp;amp;O&lt;/td&gt;
&lt;td&gt;Section 4.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Base of recommendations&lt;/td&gt;
&lt;td&gt;Section 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model checking&lt;/td&gt;
&lt;td&gt;Sections 3.3 and 3.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Questions for planning team&lt;/td&gt;
&lt;td&gt;For Finance Leadership&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What is not covered&lt;/td&gt;
&lt;td&gt;Limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;To reproduce the analysis&lt;/td&gt;
&lt;td&gt;Reproducing This&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 1. Section 5.2 and Section 5.3 for the recommendations. Section 4 for the evidence.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  For Finance Leadership
&lt;/h2&gt;

&lt;p&gt;Three questions establish the exposure without opening the system.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ask&lt;/th&gt;
&lt;th&gt;Warning sign&lt;/th&gt;
&lt;th&gt;Cost impact&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;How many distinct coverage periods are set across the item master?&lt;/td&gt;
&lt;td&gt;One value applied universally&lt;/td&gt;
&lt;td&gt;Up to 27.6 per cent of ordering and holding cost against a per-item setting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What order cost was used to choose them?&lt;/td&gt;
&lt;td&gt;The question is not understood&lt;/td&gt;
&lt;td&gt;Correct period ranged 7 to 168 days across the order costs tested. F&amp;amp;O records no such cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;For items arriving from SAP, which lot-size key did they carry?&lt;/td&gt;
&lt;td&gt;The mapping was not retained&lt;/td&gt;
&lt;td&gt;Only one of ten keys costs anything to lose&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The running cost converts from two figures already on the books. Each order saved is one fully loaded purchase order raised. Each unit-day of stock removed is unit cost multiplied by the holding rate. Both inputs belong to your organisation and are not supplied here.&lt;/p&gt;

&lt;p&gt;Nothing in this article supports a migration to &lt;em&gt;SAP S/4HANA&lt;/em&gt; on planning grounds. The evidence solely supports deciding whether the coverage period is tuned after a move, which is a configuration task rather than a licensing issue.&lt;/p&gt;




&lt;h2&gt;
  
  
  Terms
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Master planning&lt;/td&gt;
&lt;td&gt;Reads demand and supply, proposes orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Planning Optimization&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Current master planning engine. Runs outside the application&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage code&lt;/td&gt;
&lt;td&gt;Lot-sizing method for an item. &lt;em&gt;Per requirement&lt;/em&gt;, &lt;em&gt;Per period&lt;/em&gt;, &lt;em&gt;Min/Max&lt;/em&gt;, &lt;em&gt;Priority&lt;/em&gt;, &lt;em&gt;Decoupling point&lt;/em&gt;, &lt;em&gt;Manual&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage period&lt;/td&gt;
&lt;td&gt;Days of demand one order covers under &lt;em&gt;Per period&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Item coverage, coverage group&lt;/td&gt;
&lt;td&gt;Where coverage settings live. Item coverage overrides coverage group&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;SAP S/4HANA&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MRP Live&lt;/td&gt;
&lt;td&gt;Current planning run. Executes in the database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lot-sizing procedure&lt;/td&gt;
&lt;td&gt;Procurement quantity rule. MRP 1 view&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lot-size-independent costs&lt;/td&gt;
&lt;td&gt;Cost of raising one order. Material master&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage costs indicator&lt;/td&gt;
&lt;td&gt;Annual storage cost as a percentage of material price&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduling indicator&lt;/td&gt;
&lt;td&gt;Where the receipt lands inside a period&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short-term and long-term lot size&lt;/td&gt;
&lt;td&gt;Two lot-sizing procedures on one material, split by date&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;The Planning Words&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lot sizing&lt;/td&gt;
&lt;td&gt;Deciding how much goes on one order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net requirement&lt;/td&gt;
&lt;td&gt;What is still short once stock on hand and orders already placed are counted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bucket&lt;/td&gt;
&lt;td&gt;A block of days whose demand is put on a single order&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lead time&lt;/td&gt;
&lt;td&gt;Days between placing an order and it arriving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replanning&lt;/td&gt;
&lt;td&gt;Throwing the plan away and rebuilding it from current numbers. Weekly, here&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forecast error&lt;/td&gt;
&lt;td&gt;How wrong the demand forecast is, as a percentage&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;How Items Behave&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smooth&lt;/td&gt;
&lt;td&gt;Sells most days, in similar quantities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Erratic&lt;/td&gt;
&lt;td&gt;Sells most days, in quantities all over the place&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intermittent&lt;/td&gt;
&lt;td&gt;Sells rarely, in similar quantities&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lumpy&lt;/td&gt;
&lt;td&gt;Sells rarely, and in quantities all over the place&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Measurement&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fill rate&lt;/td&gt;
&lt;td&gt;The share of units that were available on the day they were required to be&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Points&lt;/td&gt;
&lt;td&gt;Percentage points. Dropping from 100 per cent fill to 48.4 per cent is a fall of 51.6 points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Days of cover&lt;/td&gt;
&lt;td&gt;How many days the stock on hand would last at normal demand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit-day&lt;/td&gt;
&lt;td&gt;One unit sitting in the warehouse for one day. Storage cost is charged per unit-day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Ordering cost plus storage cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service floor&lt;/td&gt;
&lt;td&gt;A rule had to serve 95 per cent of demand before its cost was allowed to count. Cheap and out of stock is not cheap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. The Boundary
&lt;/h2&gt;

&lt;p&gt;Master planning addresses what quantity needs ordering and when given current on-hand stock, existing orders, and expected demand. Most implementations run the process nightly, discarding previous proposals to rebuild them.&lt;/p&gt;

&lt;p&gt;Both products net requirements identically before determining order quantities. That quantity calculation forms the entire scope of this evaluation.&lt;/p&gt;

&lt;p&gt;Two specific boundaries apply. The SAP comparison uses &lt;em&gt;S/4HANA&lt;/em&gt; 2025 on-premise and private cloud; the public cloud edition is excluded. Additionally, the analysis evaluates SAP's MRP lot-sizing procedures rather than &lt;em&gt;PP/DS&lt;/em&gt;. &lt;em&gt;PP/DS&lt;/em&gt; provides distinct planning capabilities via dedicated heuristics and an optimiser that accounts for "penalties (safety stock, maximum stock), costs (procurement, production, storage) and constraints (production capacity and lot sizes)". Implementations utilising &lt;em&gt;PP/DS&lt;/em&gt; fall outside this measurement, and F&amp;amp;O offers no direct equivalent.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    N[Net requirement&amp;lt;br/&amp;gt;on a date] --&amp;gt; Q{What sets&amp;lt;br/&amp;gt;the quantity?}
    Q --&amp;gt; A[Dynamics 365 F&amp;amp;O]
    Q --&amp;gt; B[SAP S/4HANA]
    A --&amp;gt; A1[Window opens at&amp;lt;br/&amp;gt;the first demand]
    A --&amp;gt; A2[Receipt lands on&amp;lt;br/&amp;gt;the first day of the window]
    B --&amp;gt; B1[Window may be anchored&amp;lt;br/&amp;gt;to a calendar]
    B --&amp;gt; B2[Receipt may sit at the start,&amp;lt;br/&amp;gt;the first requirement,&amp;lt;br/&amp;gt;or the end]
    B --&amp;gt; B3[A cost may choose&amp;lt;br/&amp;gt;the quantity]

    classDef fno fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    classDef sap fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef neutral fill:#ffffff,stroke:#52514e,color:#0b0b0b
    class A,A1,A2 fno
    class B,B1,B2,B3 sap
    class N,Q neutral&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 1. Blue is what F&amp;amp;O does and cannot be told to do otherwise. Amber indicates settings only SAP carries. Each amber box is tested in Section 4.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Capabilities Compared
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 The Families
&lt;/h3&gt;

&lt;p&gt;SAP states "Three groups of lot-sizing procedures are available: Static lot-sizing procedures, Period lot-sizing procedures, Optimum lot-sizing procedures."&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    ROOT[Lot-sizing procedures] --&amp;gt; ST[Static&amp;lt;br/&amp;gt;quantity from the material master]
    ROOT --&amp;gt; PE[Period&amp;lt;br/&amp;gt;group requirements in an interval]
    ROOT --&amp;gt; OP[Optimum&amp;lt;br/&amp;gt;group until a cost criterion is met]

    ST --&amp;gt; S1[EX Lot-for-lot = Per requirement]
    ST --&amp;gt; S2[HB Replenish to maximum = Min/Max]
    ST --&amp;gt; S3[FX Fixed lot size]
    PE --&amp;gt; P1[TB daily, WB weekly, MB monthly,&amp;lt;br/&amp;gt;posting period, planning calendar]
    PE --&amp;gt; P2[F&amp;amp;O: Per period, in days,&amp;lt;br/&amp;gt;opening at the first demand]
    OP --&amp;gt; O1[SP Part Period Balancing]
    OP --&amp;gt; O2[WI Sliding Economic Lot Size]
    OP --&amp;gt; O3[DY Dynamic Planning Calculation]
    OP --&amp;gt; O4[GR Groff Reorder Procedure]
    OP --&amp;gt; O5[F&amp;amp;O: nothing]

    classDef both fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef sap fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef fno fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    classDef gone fill:#f6d8d4,stroke:#b0443a,color:#0b0b0b
    classDef root fill:#ffffff,stroke:#52514e,color:#0b0b0b
    class ROOT,ST,PE,OP root
    class S1,S2 both
    class S3,P1,O1,O2,O3,O4 sap
    class P2 fno
    class O5 gone&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 2. Green is the same mechanism in both products. Amber is documented only by SAP. Blue is the F&amp;amp;O rule in that family. Red is the family F&amp;amp;O has no rule in.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On the optimum family, SAP explains what the other two categories omit: "In static and period lot-sizing procedures, the costs resulting from stockkeeping, from the setup procedures or from purchasing are not taken into consideration." The four variants differ only in where they stop, as "The only differences between the various optimum lot-sizing procedures are the cost criteria."&lt;/p&gt;

&lt;p&gt;All four read three material master fields: price, lot-size-independent costs, and the storage costs indicator. F&amp;amp;O carries none of these for planning purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Receipt Position
&lt;/h3&gt;

&lt;p&gt;SAP's period procedures group requirements within a calendar interval, which can be a day, a week, a month, a posting period, or an entry in a planning calendar. F&amp;amp;O's period operates differently: "The period starts with the first demand of the item and covers the defined length in time. The next period starts with the next requirements of the item."&lt;/p&gt;

&lt;p&gt;SAP also determines where within the interval stock becomes available: "The system sets the availability date for period lot-sizing procedures to the first requirements date of the period. However, you can also define that the availability date is at the beginning or end of the period." F&amp;amp;O uses a single fixed position: "The order is planned for the first day of the period."&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Near and Far Horizon
&lt;/h3&gt;

&lt;p&gt;SAP can plan the near horizon with one procedure and the far horizon with another. The stated purpose is to "group together requirements over a larger period in the long-term area to produce a rough picture of the future master plan and select a more precise lot size to suit your requirements in the short-term area."&lt;/p&gt;

&lt;p&gt;F&amp;amp;O applies a single coverage code per item across the entire horizon.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Contrast Not Modelled
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;&lt;em&gt;SAP S/4HANA&lt;/em&gt;&lt;/th&gt;
&lt;th&gt;&lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Planning run selection&lt;/td&gt;
&lt;td&gt;MRP type on the material master&lt;/td&gt;
&lt;td&gt;Coverage code, and the plan the item sits in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Near-horizon protection&lt;/td&gt;
&lt;td&gt;Planning time fence with firming types&lt;/td&gt;
&lt;td&gt;Freeze time fence. Auto-firming is a separate batch job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rounding&lt;/td&gt;
&lt;td&gt;Rounding value and rounding profile&lt;/td&gt;
&lt;td&gt;Multiple on default order settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bring requirements forward&lt;/td&gt;
&lt;td&gt;Safety time&lt;/td&gt;
&lt;td&gt;Safety margins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic safety stock&lt;/td&gt;
&lt;td&gt;Range of coverage profile&lt;/td&gt;
&lt;td&gt;Minimum coverage, minimum and maximum keys&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Planning scope&lt;/td&gt;
&lt;td&gt;Plant and MRP area&lt;/td&gt;
&lt;td&gt;Site, warehouse, coverage dimension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constrained planning layer&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;PP/DS&lt;/em&gt;. Heuristics, an optimiser, finite capacity&lt;/td&gt;
&lt;td&gt;No equivalent. Finite capacity scheduling, but no cost objective&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 2. Nothing in this table is measured in Section 4. It is here so the comparison is not read as complete.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Both vendors transitioned planning to new engines and published the underlying changes. SAP's Simplification List states that "The S/4HANA MRP only plans on plant and MRP area level", making storage location MRP "a subset of the MRP areas capabilities". Microsoft's &lt;em&gt;Planning Optimization&lt;/em&gt; fit analysis notes that a freeze time fence set on item coverage "is ignored when Planning Optimization is enabled", and that sales line reservation via explosion alongside intercompany planning execution remain unsupported.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Data and Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Source
&lt;/h3&gt;

&lt;p&gt;Demand data originates from &lt;em&gt;Online Retail II&lt;/em&gt;, a transaction dataset from a UK-registered non-store online retailer selling giftware primarily wholesale, published via the UCI Machine Learning Repository under CC BY 4.0. It contains 1,067,371 rows spanning 1 December 2009 to 9 December 2011.&lt;/p&gt;

&lt;p&gt;This matches the dataset used in the &lt;em&gt;Infor LN&lt;/em&gt; study. Reusing the same demand and testing framework while changing only the vendor ensures any variance in results stems directly from software rules rather than the underlying data.&lt;/p&gt;

&lt;p&gt;Every invoice line includes a unit price, allowing storage costs to reflect actual prices charged. The median item sells at £2.10, with the 5th to 95th percentiles ranging from £0.42 to £10.75.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Filters
&lt;/h3&gt;

&lt;p&gt;Stock codes consisting of five digits with an optional letter suffix are retained, filtering out postage, adjustments, bank charges, and samples. Credit invoices and negative quantities are removed from demand. Items qualify for replay if they record 12 or more demand days within a 180-day active window, leaving a working set of 3,498 items.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 The Objective
&lt;/h3&gt;

&lt;p&gt;Because SAP's optimum procedures aim to minimise order and storage costs, performance is evaluated on that metric. Total cost equals order cost multiplied by orders raised, plus the storage cost of every unit-day held based on the item's unit price.&lt;/p&gt;

&lt;p&gt;Cost alone cannot determine rank. &lt;em&gt;Min/Max&lt;/em&gt; achieved the lowest cost in two business cases while serving only 83 to 84 per cent of demand, because an objective focusing strictly on orders and holding costs ignores stockouts. All rankings in this study consider only rules achieving at least a 95 per cent fill rate. Standard lot-sizing literature assumes no backlogging, making cost comparisons between rules that fail to serve demand analytically undefined.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Verification
&lt;/h3&gt;

&lt;p&gt;SAP provides a worked example on each optimum lot-sizing documentation page, including inputs and expected outputs. All four procedures share identical test parameters: price 20, lot-size-independent costs 100, storage 10 per cent, and demand of 1,000 units on four weekly dates.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Procedure&lt;/th&gt;
&lt;th&gt;SAP published result&lt;/th&gt;
&lt;th&gt;Test implementation result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Part Period Balancing&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Sliding Economic Lot Size&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;td&gt;2000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Dynamic Planning Calculation&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;td&gt;3000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Groff Reorder Procedure&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 3. Four procedures, three distinct answers on one example. An implementation that confuses two of them fails here.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Groff documentation details its two comparison metrics: a cost saving of 1.79 against an additional storage expense of 19.18. Both figures reproduce accurately. They also clarify how annual storage percentages divide across daily increments: at 365 days the figure equals 19.18, whereas at 360 days it equals 19.44.&lt;/p&gt;

&lt;p&gt;Structural conditions validate the model: no rule may cost less than the Wagner-Whitin optimum, a one-day bucket must equal one order per requirement, a calendar-anchored plan must remain static given a perfect forecast, and rerunning the process independently must reproduce identical stored results. Compared against &lt;em&gt;ONS series J596&lt;/em&gt;, the retailer's monthly revenue correlates at 0.858 over 23 overlapping months, with both series peaking in November.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.5 Initial Expectations
&lt;/h3&gt;

&lt;p&gt;Existing research suggests clear outcomes. Blackburn and Millen demonstrated that under rolling schedules, the simpler Silver-Meal heuristic can outperform the Wagner-Whitin algorithm, indicating that single-pass proximity to the theoretical optimum offers limited predictive value. Wemmerlöv established that forecast errors diminish performance gaps between procedures. Zoller and Robrade surveyed the same family and recommended adopting "Groff's (1979) stop rule".&lt;/p&gt;

&lt;p&gt;The working hypothesis assumed SAP's optimum procedures would lose most of their advantage when rebuilt weekly against an imperfect forecast, losing the remainder when input order costs differed from actual costs by a factor of two. Section 4.1 outlines the actual findings.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.6 Business Cases
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Lead time&lt;/th&gt;
&lt;th&gt;Forecast error&lt;/th&gt;
&lt;th&gt;Item selection source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast-moving distributor&lt;/td&gt;
&lt;td&gt;5 days&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Smooth and erratic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-lead importer&lt;/td&gt;
&lt;td&gt;60 days&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;All classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spare parts operation&lt;/td&gt;
&lt;td&gt;45 days&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Intermittent and lumpy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seasonal wholesaler&lt;/td&gt;
&lt;td&gt;20 days&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;All classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatile demand&lt;/td&gt;
&lt;td&gt;14 days&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;Erratic and lumpy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 4. Each case replans weekly over two years, after a warm-up that is discarded.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 The Missing Family
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7a5867jct6y1e64c3wiz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7a5867jct6y1e64c3wiz.png" alt="Horizontal bar chart of cost index by rule for each of five business cases, with SAP-only rules in amber and shared rules in grey" width="799" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3. Part Period Balancing is cheapest in four of the five cases. Spare parts is the exception, where it is the most expensive rule tested.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The initial expectation proved incorrect. Under weekly replanning with forecast error, ranked among rules clearing the service floor, &lt;em&gt;Part Period Balancing&lt;/em&gt; costs less than anything F&amp;amp;O can express across four of five business cases.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business case&lt;/th&gt;
&lt;th&gt;Best rule F&amp;amp;O has&lt;/th&gt;
&lt;th&gt;F&amp;amp;O costs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast-moving distributor&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; 14d&lt;/td&gt;
&lt;td&gt;29.2% more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seasonal wholesaler&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; 7d&lt;/td&gt;
&lt;td&gt;27.8% more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatile demand&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; 14d&lt;/td&gt;
&lt;td&gt;21.8% more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-lead importer&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; 14d&lt;/td&gt;
&lt;td&gt;8.8% more&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spare parts operation&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; 56d&lt;/td&gt;
&lt;td&gt;best available&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 5. Cost is order cost plus storage cost over the measured window, among rules serving at least 95 per cent of demand.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The spare parts case aligns with the literature's prediction. On intermittent and lumpy demand with a 45-day lead time, &lt;em&gt;Part Period Balancing&lt;/em&gt; is the most expensive rule tested, holding three times the stock of a 56-day coverage period for the same order count. A rule committing large lots early cannot recover when the underlying signal shifts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F40cznw4w0un3gfmwwq8u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F40cznw4w0un3gfmwwq8u.png" alt="Line chart of realised cost against the order cost each rule was told to assume, with SAP procedures in amber and F&amp;amp;O coverage periods flat in blue" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 4. The coverage periods are flat because they read no cost. Part Period Balancing moves 6.7 per cent across a fourfold error in the one it does read.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The order cost also decides what the best coverage period is, which matters because F&amp;amp;O holds no field for it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assumed order cost&lt;/th&gt;
&lt;th&gt;Best single coverage period&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.25&lt;/td&gt;
&lt;td&gt;7 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;14 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;42 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;84 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;168 days&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 6. The assumed order cost moves the best coverage period from 7 days to 168. F&amp;amp;O records no such cost.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The second assumption proved incorrect as well. Given an input order cost ranging from half to double the actual value, &lt;em&gt;Part Period Balancing&lt;/em&gt; shifts by only 6.7 per cent, with the best SAP procedure maintaining a 27 to 28 per cent advantage over the best coverage period at every level. The cost curve near an economic order quantity is flat, so doubling input cost alters quantity by its square root and shifts total cost minimally. &lt;em&gt;Dynamic Planning Calculation&lt;/em&gt; is the exception at 57.8 per cent, as its criterion acts as a strict threshold against order cost rather than a balance around it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Anchoring Against Placement
&lt;/h3&gt;

&lt;p&gt;Two distinct variables separate F&amp;amp;O's &lt;em&gt;Per period&lt;/em&gt; from SAP's period procedures: bucket boundary positioning (anchoring) and receipt placement within the bucket (placement). Isolating these variables demonstrates their individual impact.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftnaomo3godxutig6jhpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftnaomo3godxutig6jhpx.png" alt="Paired bar and line chart showing days of cover and fill rate for floating and anchored buckets at three receipt positions" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 5. Three of the four series sit on 100 per cent fill and overlap on the right panel. Only the period-end receipt separates, and it separates a long way.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Anchoring exerts minimal effect. Holding receipt timing to the first requirement, a calendar-anchored bucket alters cost by between minus 0.6 and plus 7.1 per cent, leaving fill rate unchanged. It holds 11 to 17 per cent less stock while raising 6 to 33 per cent more orders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg37axg1c1l7bwig2fhm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg37axg1c1l7bwig2fhm9.png" alt="Line chart of the anchored minus floating cost penalty against how concentrated an item's demand is on its busiest weekday" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 6. The penalty rises with weekday concentration at short buckets, which is the mechanism, and stays under 12 per cent throughout, which is the size of it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Placement exerts a major effect.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bucket&lt;/th&gt;
&lt;th&gt;Stock at period start&lt;/th&gt;
&lt;th&gt;Fill at first requirement&lt;/th&gt;
&lt;th&gt;Fill at period end&lt;/th&gt;
&lt;th&gt;Points of fill lost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;7 days&lt;/td&gt;
&lt;td&gt;+24.4%&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;76.6%&lt;/td&gt;
&lt;td&gt;23.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14 days&lt;/td&gt;
&lt;td&gt;+20.5%&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;72.1%&lt;/td&gt;
&lt;td&gt;27.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28 days&lt;/td&gt;
&lt;td&gt;+27.1%&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;63.7%&lt;/td&gt;
&lt;td&gt;36.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56 days&lt;/td&gt;
&lt;td&gt;+27.0%&lt;/td&gt;
&lt;td&gt;100.0%&lt;/td&gt;
&lt;td&gt;48.4%&lt;/td&gt;
&lt;td&gt;51.6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 7. Stock is against the same bucket receiving at its first requirement, at unchanged service. The last column is the fill rate given up by moving the receipt to the end of the period.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Moving the receipt to the start of the period holds 20 to 27 per cent more stock and serves no better. Moving it to the end of the period costs service, and costs more of it the longer the bucket, because the stock arrives after demand earlier in the same bucket has already been required. At a 56 day bucket that is 51.6 points of fill.&lt;/p&gt;

&lt;p&gt;F&amp;amp;O provides a single fixed position: the default setting shipped by SAP and the best-performing of the three tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 The Far Horizon
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzto1y5el5vfkmeq4hq17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzto1y5el5vfkmeq4hq17.png" alt="Line chart showing the share of items whose outcome is unchanged by the long-term lot size, against lead time" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 7. Below a lead time that reaches past the switch date, every item is unaffected. Above it, none are.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;SAP's short-term and long-term split yields no difference until item lead time exceeds the near-horizon window. At lead times of 5, 14, and 20 days against a switch at 28 days, every item generates identical outcomes. At a 45-day lead time, 1 per cent show variation. At 60 days, all items vary, with the broader far-horizon rule saving 23 per cent of cost and over a point of fill rate.&lt;/p&gt;

&lt;p&gt;Far-horizon proposals are continually recalculated before release unless lead time extends past the switch boundary to force execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Cost on Arrival
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwwsokj20jn88w3aknoal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwwsokj20jn88w3aknoal.png" alt="Horizontal bar chart of the cost of substituting each SAP lot-size key in F&amp;amp;O, comparing a per-item tuned coverage period against one catalogue-wide setting" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 8. Only Part Period Balancing costs anything to lose, and only when the coverage period is set per item. Leaving one value across the catalogue costs up to 27.6 per cent.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SAP key&lt;/th&gt;
&lt;th&gt;Procedure&lt;/th&gt;
&lt;th&gt;F&amp;amp;O&lt;/th&gt;
&lt;th&gt;Tuned per item&lt;/th&gt;
&lt;th&gt;One setting&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;EX&lt;/td&gt;
&lt;td&gt;Lot-for-lot order quantity&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Per requirement&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;−67.4%&lt;/td&gt;
&lt;td&gt;−59.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TB&lt;/td&gt;
&lt;td&gt;Daily lot size&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; 1d&lt;/td&gt;
&lt;td&gt;−67.4%&lt;/td&gt;
&lt;td&gt;−59.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HB&lt;/td&gt;
&lt;td&gt;Replenish to maximum&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Min/Max&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;−44.6%&lt;/td&gt;
&lt;td&gt;−0.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FX&lt;/td&gt;
&lt;td&gt;Fixed lot size&lt;/td&gt;
&lt;td&gt;no equivalent&lt;/td&gt;
&lt;td&gt;−36.4%&lt;/td&gt;
&lt;td&gt;−21.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MB&lt;/td&gt;
&lt;td&gt;Monthly lot size&lt;/td&gt;
&lt;td&gt;approximate&lt;/td&gt;
&lt;td&gt;−35.5%&lt;/td&gt;
&lt;td&gt;−20.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WB&lt;/td&gt;
&lt;td&gt;Weekly lot size&lt;/td&gt;
&lt;td&gt;approximate&lt;/td&gt;
&lt;td&gt;−20.9%&lt;/td&gt;
&lt;td&gt;−2.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WI&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Sliding Economic Lot Size&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;no equivalent&lt;/td&gt;
&lt;td&gt;−13.3%&lt;/td&gt;
&lt;td&gt;+7.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DY&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Dynamic Planning Calculation&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;no equivalent&lt;/td&gt;
&lt;td&gt;−12.3%&lt;/td&gt;
&lt;td&gt;+8.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GR&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Groff Reorder Procedure&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;no equivalent&lt;/td&gt;
&lt;td&gt;−0.0%&lt;/td&gt;
&lt;td&gt;+23.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Part Period Balancing&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;no equivalent&lt;/td&gt;
&lt;td&gt;+3.3%&lt;/td&gt;
&lt;td&gt;+27.6%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 8. A negative figure means the F&amp;amp;O substitute costs less than the SAP key it replaces. One business case, 200 items.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.5 Tuning Rules
&lt;/h3&gt;

&lt;p&gt;The tuned column above calculates each item's optimal coverage period ex post, serving as a theoretical bound rather than an operational method. Testing evaluated two executable tuning methods against this baseline.&lt;/p&gt;

&lt;p&gt;Assigning coverage periods by demand class fails. Applying the median best period for each class yields results worse than a uniform catalogue-wide setting in two of five cases, expanding the cost gap by 199 and 301 per cent. Demand class is not an intrinsic item property; a period suited to intermittent demand with a 45-day lead time performs poorly when applied behind a 14-day lead time.&lt;/p&gt;

&lt;p&gt;Deriving coverage periods from each item's economic order quantity succeeds. Calculating values from item price, demand rate, and an assumed order cost, rounded to the nearest available period, bridges 28 to 45 per cent of the cost gap in four of five business cases.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business case&lt;/th&gt;
&lt;th&gt;One coverage period&lt;/th&gt;
&lt;th&gt;Set from economic order quantity&lt;/th&gt;
&lt;th&gt;Gap closed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast-moving distributor&lt;/td&gt;
&lt;td&gt;+25.9%&lt;/td&gt;
&lt;td&gt;+15.8%&lt;/td&gt;
&lt;td&gt;39.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-lead importer&lt;/td&gt;
&lt;td&gt;+7.1%&lt;/td&gt;
&lt;td&gt;+4.4%&lt;/td&gt;
&lt;td&gt;38.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seasonal wholesaler&lt;/td&gt;
&lt;td&gt;+27.3%&lt;/td&gt;
&lt;td&gt;+19.5%&lt;/td&gt;
&lt;td&gt;28.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spare parts operation&lt;/td&gt;
&lt;td&gt;−45.1%&lt;/td&gt;
&lt;td&gt;−24.7%&lt;/td&gt;
&lt;td&gt;45.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatile demand&lt;/td&gt;
&lt;td&gt;+21.8%&lt;/td&gt;
&lt;td&gt;+22.3%&lt;/td&gt;
&lt;td&gt;−2.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 9. Cost against Part Period Balancing in the same case. A negative figure means the F&amp;amp;O rule is cheaper. Volatile demand is the case where the rule does not help.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjgh5ebxyqpbdi0laxob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjgh5ebxyqpbdi0laxob.png" alt="Two panel chart of cost against coverage period by demand class, and the best coverage period per class with its spread" width="799" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 9. The left panel shows each class has a different best period. The right panel shows the spread inside each class is wide enough that the class alone does not determine it.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Discussion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Key Substitution
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    K[SAP lot-size key&amp;lt;br/&amp;gt;on the MRP 1 view] --&amp;gt; F{Which family?}
    F -- Static --&amp;gt; S{Which rule?}
    F -- Period --&amp;gt; P[Set Per period to the&amp;lt;br/&amp;gt;bucket length in days]
    F -- Optimum --&amp;gt; O[No coverage code reads a cost]
    S -- EX --&amp;gt; S1[Per requirement. Exact]
    S -- HB --&amp;gt; S2[Min/Max. Exact]
    S -- FX --&amp;gt; S3[No coverage code fixes a quantity]
    P --&amp;gt; P1[Boundary floats, does not anchor.&amp;lt;br/&amp;gt;Costs under 8 per cent]
    O --&amp;gt; O1[Derive the period from the item's&amp;lt;br/&amp;gt;own price and demand rate]
    S3 --&amp;gt; O1
    O1 --&amp;gt; R[Only Part Period Balancing&amp;lt;br/&amp;gt;costs anything. 3.3 per cent]

    classDef ok fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef warn fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef act fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    classDef dec fill:#ffffff,stroke:#52514e,color:#0b0b0b
    class S1,S2,R ok
    class S3,O,P1 warn
    class P,O1 act
    class K,F,S dec&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 10. Green is a no-cost substitution. Amber is an exclusive SAP mechanism. Blue is the gap-closing action.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Configuration
&lt;/h3&gt;

&lt;p&gt;Identify the exposure first. Running a simple setup table report without transaction history highlights potential gaps. Counting distinct coverage periods across the item master is the check; one value across an entire mixed catalogue is the finding.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;What to put in it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coverage period&lt;/td&gt;
&lt;td&gt;Master planning &amp;gt; Setup &amp;gt; Coverage &amp;gt; Coverage groups. Item coverage for a single item&lt;/td&gt;
&lt;td&gt;Derived per item from unit price and demand rate. Not from demand class, not one value for the catalogue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage code&lt;/td&gt;
&lt;td&gt;The same two places&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Per period&lt;/em&gt; for SAP period and optimum keys. &lt;em&gt;Per requirement&lt;/em&gt; for EX. &lt;em&gt;Min/Max&lt;/em&gt; for HB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Avoid assigning coverage periods via demand classification. Section 4.5 demonstrates that classification performs worse than a single uniform setting in two out of five business cases, while prior findings show that class boundaries shift depending on the review period measured.&lt;/p&gt;

&lt;p&gt;Record the underlying order costs used to derive coverage periods outside the application, as F&amp;amp;O lacks dedicated fields for these values and optimal periods depend directly on them. Across tested scenarios, optimal periods ranged from 7 to 168 days based on order cost variables.&lt;/p&gt;

&lt;p&gt;For items migrating from SAP, verify scheduling indicators before assuming equivalent planning execution. Where SAP setups used period-end scheduling, single-level demand fulfilment fell materially below 100 per cent; the F&amp;amp;O substitute will serve more.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 For Microsoft
&lt;/h3&gt;

&lt;p&gt;Evaluated SAP capabilities and the corresponding requirements for F&amp;amp;O parity.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SAP capability&lt;/th&gt;
&lt;th&gt;Worth having?&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;th&gt;Request for F&amp;amp;O&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Optimum lot sizing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;8.8 to 29.2 per cent of cost in four of five cases. Holds across a fourfold error in the order cost&lt;/td&gt;
&lt;td&gt;Coverage code that reads a cost. Failing that, the two fields it needs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lot-size-independent cost and storage percentage on item master&lt;/td&gt;
&lt;td&gt;Yes, and cheaper to ship&lt;/td&gt;
&lt;td&gt;Best coverage period ranged 7 to 168 days across order costs. Per-item derivation closes 28 to 45 per cent of the gap&lt;/td&gt;
&lt;td&gt;Two fields on item coverage, and a coverage period derived from them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calendar-anchored buckets&lt;/td&gt;
&lt;td&gt;Marginal&lt;/td&gt;
&lt;td&gt;Under 8 per cent of cost, reaching 12 per cent only where demand concentrates on one weekday&lt;/td&gt;
&lt;td&gt;Optional calendar anchor on the coverage period. Low priority&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short-term and long-term lot size&lt;/td&gt;
&lt;td&gt;Only for long lead times&lt;/td&gt;
&lt;td&gt;Nothing where the lead time falls inside the switch date. 23 per cent of cost and over a point of fill at 60 days&lt;/td&gt;
&lt;td&gt;Second coverage period beyond a configurable day count&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed lot size&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;A tuned coverage period costs 36.4 per cent less than the SAP key&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Receipt placement&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;F&amp;amp;O's one position is the best of the three. Period end loses up to 51.6 points of fill&lt;/td&gt;
&lt;td&gt;None. Worth not having&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freeze time fence on item coverage&lt;/td&gt;
&lt;td&gt;Not measured&lt;/td&gt;
&lt;td&gt;Microsoft's own fit analysis records it as ignored&lt;/td&gt;
&lt;td&gt;Honour it, or remove the field&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The primary enhancement involves creating a coverage code capable of evaluating cost variables. Alternatively, providing the two underlying cost fields on the item master allows deriving significantly improved coverage periods within existing rules, as demonstrated in Section 4.5.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Claims and Sources
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Part Period Balancing&lt;/em&gt; costs 8.8 to 29.2 per cent less than the best F&amp;amp;O rule in four of five cases&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Part Period Balancing&lt;/em&gt; shifts by 6.7 per cent when input order costs vary by a factor of two&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Part Period Balancing&lt;/em&gt; represents the highest-cost rule for intermittent demand with 45-day lead times&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anchoring impacts total cost by under 8 per cent, increasing only with high weekday demand concentration&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Period-end receipt scheduling reduces fill rate by up to 51.6 points&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-term lot sizes yield no operational difference when lead times fall within the switch boundary&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nine of ten SAP lot-size keys execute more cost-effectively in F&amp;amp;O once coverage periods are tuned per item&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demand classification fails as a tuning rule; economic order quantity logic succeeds&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which lot-sizing procedures each product offers&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everything in Table 2&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 10. Eight findings from the data. The capability tables from the two vendors' published manuals.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Neither dynamic SAP nor live F&amp;amp;O environments were executed directly. Both rule sets reflect reimplementations of documented behaviour; functionality deviating from published vendor specifications falls outside the scope of this model.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;This evaluation excludes &lt;em&gt;PP/DS&lt;/em&gt;, which executes constrained planning using capacity and cost optimisation functions not modelled here. Findings apply strictly to standard MRP 1 lot-sizing procedures.&lt;/p&gt;

&lt;p&gt;The dataset reflects a single wholesale order profile lacking multi-level bills of materials, routings, or capacity constraints. Results do not evaluate dependent demand, multi-level netting, or production scheduling, restricting conclusions to purchasing and distribution scenarios. Furthermore, period-end receipt outcomes reflect single-level calculations; because SAP reschedules component requirements across bills of materials, multi-level structures will alter total cost impacts.&lt;/p&gt;

&lt;p&gt;Order costs are not explicitly present within the transactional dataset. Values were evaluated across parameterised sweeps, forming the basis of Section 4.1. Assuming a fully loaded purchase order cost of £50, 98 per cent of catalog items imply reorder cycles exceeding any tested coverage period, as a £50 transaction cost against £3 of daily demand dictates infrequent replenishment. Practical wholesaling relies on order consolidation across multiple lines, which falls outside single-item lot-sizing logic in both platforms.&lt;/p&gt;

&lt;p&gt;Groff's rule specification presents ambiguities in SAP documentation. Two distinct algorithmic interpretations reproduce published vendor examples due to single-step test parameters; however, across active transactional data, these interpretations diverge by a factor of two to three. This study applies the standard published stop rule throughout, providing the alternative logic within the source repository.&lt;/p&gt;

&lt;p&gt;Plan stability measurements varied based on absolute versus relative tolerance thresholds applied prior to testing. Because threshold selection shifted rule stability rankings by up to five positions, explicit stability figures are omitted. SAP planning time fences and firming types mitigate replanning nervousness, but their precise financial impact is not quantified here.&lt;/p&gt;

&lt;p&gt;Calculations depend on specific parameters that influence final values: a 20 per cent annual holding rate, parameterised order cost ranges, a 365-day annual divisor, a 95 per cent service floor target, weekly replanning intervals, a 28-day demand visibility window, 14 days of initial stock, filtering criteria (12 demand days across a 180-day active window), classification cutoffs (1.32 and 0.49), a weekly review period, and the operational parameters detailed in Table 4.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reproducing This
&lt;/h2&gt;

&lt;p&gt;The source code and datasets are at &lt;a href="https://github.com/kingomnivore/mrp-fno-vs-sap" rel="noopener noreferrer"&gt;github.com/kingomnivore/mrp-fno-vs-sap&lt;/a&gt;. Clone it, &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;, then &lt;code&gt;python run.py&lt;/code&gt;. Both data files are committed, so it runs as cloned.&lt;/p&gt;

&lt;p&gt;The recipe below describes the same analysis independently of the code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Get the data.&lt;/em&gt; &lt;em&gt;Online Retail II&lt;/em&gt; from the UCI Machine Learning Repository, both sheets. &lt;em&gt;ONS series J596&lt;/em&gt;, value not seasonally adjusted, for the external check.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Aggregate.&lt;/em&gt; Reduce the order lines to daily demand per item and a median unit price per item. Drop non-item codes, credit lines and negative quantities, then apply the activity filter.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3. Implement the rules.&lt;/em&gt; Code both vendors' lot-sizing procedures from their own documentation, including the ones the product under test does not offer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4. Gate on the vendor's arithmetic.&lt;/em&gt; Reproduce SAP's published worked example for all four optimum procedures before running anything. Three distinct answers must come out of one example.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5. Replay.&lt;/em&gt; Define business cases as combinations of lead time, forecast error and item population. Run every rule in every case, replanning weekly, committing each order on its release date.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;6. Cost it, then floor it.&lt;/em&gt; Order cost multiplied by orders, plus storage cost of every unit-day. Rank only among rules clearing a service floor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;7. Separate the variables.&lt;/em&gt; Test anchoring and receipt placement as a two-way design, not as two bundled configurations.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;8. Sweep the cost inputs&lt;/em&gt; before reporting anything that depends on them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Chosen parameters.&lt;/em&gt; As named in Limits.&lt;/p&gt;




&lt;h2&gt;
  
  
  On Method
&lt;/h2&gt;

&lt;p&gt;The analysis code and the initial draft were produced with Claude Code. The dataset and the configuration claims were verified against the sources listed below before publication. The code is public on the repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Dynamics 365 Supply Chain Management documentation&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/coverage-settings" rel="noopener noreferrer"&gt;Coverage settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/planning-optimization-fit-analysis" rel="noopener noreferrer"&gt;Planning Optimization fit analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/coverage-time-fence" rel="noopener noreferrer"&gt;Coverage time fences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/replenishment-methods-quantity-modification" rel="noopener noreferrer"&gt;Replenishment methods and quantity modification&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;SAP S/4HANA documentation, 2025 FPS01&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/fe39e10a9a864a8f8dc9537704f0fa13/bc97b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Lot-Sizing Procedures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/da97b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Optimum Lot-Sizing Procedures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/dd97b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Part Period Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/e097b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Sliding Economic Lot Size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/e397b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Dynamic Planning Calculation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/e697b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Groff Reorder Procedure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/cb97b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Period Lot-Sizing Procedures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/ce97b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Availability Date for Period Lot-Sizing Procedure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/af9ef57f504840d2b81be8667206d485/ec97b6535fe6b74ce10000000a174cb4.html" rel="noopener noreferrer"&gt;Short-Term and Long-Term Lot Size&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://help.sap.com/docs/SUPPORT_CONTENT/erpman/3138698501.html" rel="noopener noreferrer"&gt;MRP on HANA FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Literature&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wagner, H. M. and Whitin, T. M. (1958). Dynamic version of the economic lot size model. &lt;em&gt;Management Science&lt;/em&gt; 5(1). DOI 10.1287/mnsc.1040.0262 resolves to the 2004 reprint.&lt;/li&gt;
&lt;li&gt;Blackburn, J. D. and Millen, R. A. (1980). Heuristic lot-sizing performance in a rolling-schedule environment. &lt;em&gt;Decision Sciences&lt;/em&gt; 11(4).&lt;/li&gt;
&lt;li&gt;Wemmerlöv, U. (1989). The behavior of lot-sizing procedures in the presence of forecast errors. &lt;em&gt;Journal of Operations Management&lt;/em&gt; 8(1).&lt;/li&gt;
&lt;li&gt;Zoller, K. and Robrade, A. (1988). Dynamic lot sizing techniques: survey and comparison. &lt;em&gt;Journal of Operations Management&lt;/em&gt; 7(4).&lt;/li&gt;
&lt;li&gt;Syntetos, A. A., Boylan, J. E. and Croston, J. D. (2005). On the categorization of demand patterns. &lt;em&gt;Journal of the Operational Research Society&lt;/em&gt; 56(5).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kingomnivore/mrp-fno-vs-sap" rel="noopener noreferrer"&gt;Analysis code and data, GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  About Author
&lt;/h2&gt;

&lt;p&gt;Dean Fachrie is a Functional Analyst at CodeCore Dynamics LLC, working on &lt;em&gt;Microsoft Dynamics 365 F&amp;amp;O&lt;/em&gt; architecture and enterprise system design.&lt;/p&gt;

&lt;p&gt;Migrating from &lt;em&gt;SAP S/4HANA&lt;/em&gt; to &lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt;, or setting coverage periods across a mixed catalogue?&lt;/p&gt;

&lt;p&gt;We help enterprise supply chain and finance teams map lot-sizing settings across ERP migrations and size replenishment against the working capital the business will carry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codecoredynamics.com/contact/" rel="noopener noreferrer"&gt;Contact us&lt;/a&gt; or connect on &lt;a href="https://www.linkedin.com/company/codecore-dynamics" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; for architecture reviews.&lt;/p&gt;

</description>
      <category>mrp</category>
      <category>d365</category>
      <category>sap</category>
    </item>
    <item>
      <title>Master planning (MRP) module in Dynamics 365 F&amp;O and Infor LN</title>
      <dc:creator>Dean Fachrie</dc:creator>
      <pubDate>Wed, 09 Sep 2026 21:40:20 +0000</pubDate>
      <link>https://dev.to/deanfachrie/master-planning-mrp-module-in-dynamics-365-fo-and-infor-ln-1bp6</link>
      <guid>https://dev.to/deanfachrie/master-planning-mrp-module-in-dynamics-365-fo-and-infor-ln-1bp6</guid>
      <description>&lt;p&gt;&lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt; and &lt;em&gt;Infor LN&lt;/em&gt; size replenishment orders almost identically. The difference is one F&amp;amp;O setting. The coverage time fence costs about half a point of service for every day it is set below the lead time, and raises no error.&lt;/p&gt;

&lt;p&gt;CodeCore Dynamics LLC. 9 September 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Master planning decides how much of the future to plan and at what resolution. The whole horizon at full detail returns proposals for orders that need no decision for months. Too short a horizon and long lead time items arrive late.&lt;/li&gt;
&lt;li&gt;The two products agree almost entirely on lot sizing. One order per requirement, a floating time window and replenish-to-maximum exist in both. The window opens at the first demand in each, and neither product anchors it to the calendar.&lt;/li&gt;
&lt;li&gt;LN adds &lt;em&gt;Fixed Order Quantity&lt;/em&gt; and &lt;em&gt;Economic Order Quantity&lt;/em&gt;. F&amp;amp;O adds priority-based replenishment and a decoupling point. Neither product contains the other's full set.&lt;/li&gt;
&lt;li&gt;The setting to tune is how much demand one order covers. It is a working capital decision, not a service one. Doubling the window removes 39 per cent of the purchase orders and adds 126 per cent to the stock, at an unchanged fill rate.&lt;/li&gt;
&lt;li&gt;The right window length differs by business. 56 days suited the spare parts operation, 7 and 14 days the short lead time cases.&lt;/li&gt;
&lt;li&gt;Five business cases were built from two years of a UK wholesaler's order lines, and eleven lot-sizing settings ran in each. The floating window came top in all five. The two methods only LN documents never placed better than third of eleven.&lt;/li&gt;
&lt;li&gt;Four of the five cases were ties, decided by 0.13 to 2.81 points on a hundred point scale. Only the spare parts case separated, at 9.93 points, and it went to a setting both products offer.&lt;/li&gt;
&lt;li&gt;Service barely separates the time-phased rules at short lead times. Fill rate spread by under 0.2 points in three of the five cases, and by 2.8 and 4.3 points where the lead time reached 60 and 45 days.&lt;/li&gt;
&lt;li&gt;LN's coarse planning tier is optional, set per item, and Infor advises against maintaining it unless its extra functionality is needed. An LN item planned only by order planning behaves as an F&amp;amp;O item does.&lt;/li&gt;
&lt;li&gt;The coverage time fence is how many days ahead master planning reads supply and demand. Demand beyond it is not planned coarsely. It is not read, and nothing reports it. Microsoft's rule, that the fence exceed the total lead time, is correct, and ten days above it recovers almost all of the loss.&lt;/li&gt;
&lt;li&gt;Nothing here supports a migration from F&amp;amp;O to &lt;em&gt;Infor LN&lt;/em&gt; on planning grounds.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  For Finance Leadership
&lt;/h2&gt;

&lt;p&gt;The current position can be established without opening the system. Three questions to the planning team answer it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ask&lt;/th&gt;
&lt;th&gt;Warning flag&lt;/th&gt;
&lt;th&gt;Potential costs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What is the coverage time fence, in days?&lt;/td&gt;
&lt;td&gt;A number at or below the longest purchasing lead time behind those items&lt;/td&gt;
&lt;td&gt;Roughly half a point of fill for every day it falls short, with no error raised&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which items use the &lt;em&gt;Period&lt;/em&gt; coverage code, and what period does each carry?&lt;/td&gt;
&lt;td&gt;One value applied across the whole catalogue&lt;/td&gt;
&lt;td&gt;The wrong stock and the wrong order count for whichever part of the catalogue it does not suit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What review period was the demand classification measured in?&lt;/td&gt;
&lt;td&gt;Nobody knows, or it arrived with a reporting tool&lt;/td&gt;
&lt;td&gt;Coverage codes assigned from a class that would change if it were measured weekly instead of monthly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The second answer converts to money from two figures already on the books. Moving the coverage period from 7 days to 28 days removed roughly two thirds of the purchase orders and roughly quadrupled the stock, at an unchanged fill rate. Multiply the orders saved by the fully loaded cost of raising one, and the stock added by unit cost and the holding rate. Those two inputs are yours and are not supplied here.&lt;/p&gt;

&lt;p&gt;Nothing in this article supports a migration to &lt;em&gt;Infor LN&lt;/em&gt; on planning grounds. The two lot-sizing methods F&amp;amp;O lacks were tested. Neither improved on the coverage codes F&amp;amp;O already ships.&lt;/p&gt;




&lt;h2&gt;
  
  
  Terms
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Master planning&lt;/td&gt;
&lt;td&gt;The calculation that reads demand and supply and proposes orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Planning Optimization&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;The current master planning engine, run as a service outside the application&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage code&lt;/td&gt;
&lt;td&gt;The lot-sizing method for an item. &lt;em&gt;Period&lt;/em&gt;, &lt;em&gt;Requirement&lt;/em&gt;, &lt;em&gt;Min./Max.&lt;/em&gt;, &lt;em&gt;Priority&lt;/em&gt;, &lt;em&gt;Decoupling point&lt;/em&gt; or &lt;em&gt;Manual&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage period&lt;/td&gt;
&lt;td&gt;The length in days that one order covers under the &lt;em&gt;Period&lt;/em&gt; coverage code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage time fence&lt;/td&gt;
&lt;td&gt;How many days ahead supply and demand are read&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Item coverage, coverage group&lt;/td&gt;
&lt;td&gt;Where coverage settings are held, the first overriding the second&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Infor LN&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Enterprise Planning&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;The module holding LN's planning, both order-based and bucketed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order planning&lt;/td&gt;
&lt;td&gt;Planning recorded on a second by second basis, producing planned orders&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Master planning&lt;/td&gt;
&lt;td&gt;In LN this term means the optional bucketed tier only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order method&lt;/td&gt;
&lt;td&gt;The lot-sizing rule for a plan item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order interval&lt;/td&gt;
&lt;td&gt;The time window requirements are grouped into&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Item master plan&lt;/td&gt;
&lt;td&gt;The optional per-item bucketed plan, holding a supply plan by plan period&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order horizon&lt;/td&gt;
&lt;td&gt;The period, in working days, that order based planning covers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Measurement&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fill rate&lt;/td&gt;
&lt;td&gt;The share of demanded units served on the day they were required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Days of cover&lt;/td&gt;
&lt;td&gt;Average stock held, divided by average daily demand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Balanced score&lt;/td&gt;
&lt;td&gt;The mean of the categories rankable in a case, on a 0 to 100 scale within that case&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 What the Module Does
&lt;/h3&gt;

&lt;p&gt;Master planning, or MRP, answers one question on a schedule. Given what is on hand, what is already on order and what is expected to be demanded, what should be ordered and when. It runs nightly in most implementations, discards the previous set of proposals and rebuilds them from current data. It returns planned orders for a planner to review, together with messages proposing that existing orders be advanced, postponed or resized.&lt;/p&gt;

&lt;p&gt;Read the entire future at full detail and the run returns thousands of proposals for orders that need no decision for months. Read only the near future and every item with a longer lead time than that window arrives late.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 The Two Products
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Dynamics 365 Finance and Operations&lt;/em&gt; is Microsoft's enterprise ERP. Master planning sits in its supply chain module, and the current engine, &lt;em&gt;Planning Optimization&lt;/em&gt;, runs as a service outside the application. A coverage code sets the lot-sizing rule for an item. Time fences bound the horizon. F&amp;amp;O plans everything inside that horizon at daily resolution.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Infor LN&lt;/em&gt; is Infor's ERP for discrete manufacturing, where planning sits in &lt;em&gt;Enterprise Planning&lt;/em&gt;. Every plan item is planned by order planning. Infor calls it "roughly comparable to traditional MRP planning". It records data "on a second-by-second basis" and produces planned orders.&lt;/p&gt;

&lt;p&gt;An item may additionally carry an item master plan, "roughly comparable to traditional MPS planning". It records data "in terms of time buckets (plan periods)" and produces a supply plan by period instead of orders.&lt;/p&gt;

&lt;p&gt;That second tier is a per-item choice and not the default. It is switched on by the &lt;em&gt;Maintain Master Plan&lt;/em&gt; check box. Infor advises against it unless it is wanted, since item master plans "have an adverse effect on system performance. Therefore, you should only maintain an item master plan if you need specific master-plan functionality."&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 The Boundary
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    subgraph FO["Dynamics 365 F&amp;amp;O"]
        direction TB
        A1[Today] --&amp;gt; A3[Planned at full daily resolution&amp;lt;br/&amp;gt;coverage code sets the lot size]
        A3 --&amp;gt; A4{{Coverage time fence}}
        A4 --&amp;gt; A5[Demand here is not read.&amp;lt;br/&amp;gt;No requirement transaction.&amp;lt;br/&amp;gt;No message.]
    end
    subgraph LN["Infor LN"]
        direction TB
        B1[Today] --&amp;gt; B3[Order planning&amp;lt;br/&amp;gt;planned orders on exact dates,&amp;lt;br/&amp;gt;all materials and capacity]
        B3 --&amp;gt; B4{{Order horizon}}
        B4 --&amp;gt; B5{Maintain Master Plan&amp;lt;br/&amp;gt;set for this item?}
        B5 -- No --&amp;gt; B7[Planning horizon equals&amp;lt;br/&amp;gt;the order horizon.&amp;lt;br/&amp;gt;Nothing further is planned.]
        B5 -- Yes --&amp;gt; B6[Master planning&amp;lt;br/&amp;gt;supply plan by plan period,&amp;lt;br/&amp;gt;critical materials only,&amp;lt;br/&amp;gt;infinite capacity by default]
        B6 --&amp;gt; B8{{Planning horizon}}
    end

    classDef fine fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef coarse fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef gone fill:#f6d8d4,stroke:#b0443a,color:#0b0b0b
    classDef bound fill:#ffffff,stroke:#52514e,color:#0b0b0b
    classDef dec fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    class A3,B3 fine
    class B6 coarse
    class A5,B7 gone
    class A4,B4,B8 bound
    class B5 dec&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 1. Colour marks the resolution demand is planned at. Green is full resolution, amber a bucketed plan, red a band that is not planned, blue a configuration choice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The two differ at the boundary. F&amp;amp;O excludes the far horizon, and Microsoft states both the intent and the mechanism. The coverage time fence prevents "noise" caused by supply suggestions that don't require attention for months, and beyond it "the system doesn't generate requirement transactions for any supply and demand that falls outside the coverage time fence."&lt;/p&gt;

&lt;p&gt;An LN item carrying a master plan lowers the resolution instead, in plan periods that may be short "for the immediate future and longer periods for longer-term planning". An LN item without one stops at its planning horizon, as F&amp;amp;O does.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Module Functionality
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Lot Sizing
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    ROOT[Lot-sizing methods] --&amp;gt; B[Same mechanism in both products]
    ROOT --&amp;gt; F["Dynamics 365 F&amp;amp;O only"]
    ROOT --&amp;gt; L[Infor LN only]
    B --&amp;gt; B1["Requirement = Lot-for-Lot&amp;lt;br/&amp;gt;one order per requirement"]
    B --&amp;gt; B2["Period = Order interval&amp;lt;br/&amp;gt;a window that opens at demand;&amp;lt;br/&amp;gt;neither is anchored to the calendar"]
    B --&amp;gt; B3["Min./Max. = Replenish to Maximum&amp;lt;br/&amp;gt;refill when projected stock falls below a floor"]
    F --&amp;gt; F1[Priority-based replenishment]
    F --&amp;gt; F2[Decoupling point, DDMRP]
    L --&amp;gt; L1[Fixed Order Quantity]
    L --&amp;gt; L2[Economic Order Quantity]

    classDef both fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef fno fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    classDef ln fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef root fill:#ffffff,stroke:#52514e,color:#0b0b0b
    class B,B1,B2,B3 both
    class F,F1,F2 fno
    class L,L1,L2 ln
    class ROOT root&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 2. Section 4 tests all five of these rules against each other.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lot-sizing mechanism&lt;/th&gt;
&lt;th&gt;&lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt;&lt;/th&gt;
&lt;th&gt;&lt;em&gt;Infor LN&lt;/em&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One order per requirement&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Requirement&lt;/em&gt; coverage code&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Lot-for-Lot&lt;/em&gt; order method&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Group demand in a floating window&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Period&lt;/em&gt; coverage code. "The period starts with the first demand of the item"&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Order interval&lt;/em&gt;, "measured starting at the last generated order"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replenish to a maximum&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Min./Max.&lt;/em&gt;, triggered below a minimum&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Replenish to Maximum Inventory&lt;/em&gt;, triggered below the inventory plan or safety stock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed order quantity&lt;/td&gt;
&lt;td&gt;No coverage code&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Fixed Order Quantity&lt;/em&gt; order method&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Economic order quantity&lt;/td&gt;
&lt;td&gt;No coverage code&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Economic Order Quantity&lt;/em&gt;, setting quantities "to at least the economic order quantity"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Priority&lt;/em&gt;-based replenishment&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Priority&lt;/em&gt; coverage code&lt;/td&gt;
&lt;td&gt;Not established&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DDMRP decoupling buffers&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Decoupling point&lt;/em&gt; coverage code&lt;/td&gt;
&lt;td&gt;Not established. Allocation buffers are specification pegging, not DDMRP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Order multiple, minimum, maximum&lt;/td&gt;
&lt;td&gt;Multiple, Min. and Max. order quantity on &lt;em&gt;Default order settings&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Order Quantity Increment&lt;/em&gt;, Minimum, Maximum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No automatic proposal&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Manual&lt;/em&gt; coverage code&lt;/td&gt;
&lt;td&gt;Order horizon of zero&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 1. The first five rows are tested in Section 4.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Capabilities
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;&lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt;&lt;/th&gt;
&lt;th&gt;&lt;em&gt;Infor LN&lt;/em&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Optional bucketed planning tier&lt;/td&gt;
&lt;td&gt;None. One resolution across the horizon&lt;/td&gt;
&lt;td&gt;An item master plan, per item, holding a supply plan by plan period&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plan periods of varying length&lt;/td&gt;
&lt;td&gt;No equivalent&lt;/td&gt;
&lt;td&gt;Shorter periods "for the immediate future and longer periods for longer-term planning". A period's quantity is spread across its days "proportional to the capacity on that day" rather than placed at a point&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Far horizon beyond the boundary&lt;/td&gt;
&lt;td&gt;Excluded from the calculation beyond the coverage time fence&lt;/td&gt;
&lt;td&gt;No supply plan or planned order generated beyond the planning horizon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capacity in the coarse tier&lt;/td&gt;
&lt;td&gt;Not applicable&lt;/td&gt;
&lt;td&gt;Infinite planning by default, taking no constraints into account. Workload control is the constrained alternative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finite capacity scheduling&lt;/td&gt;
&lt;td&gt;Supported&lt;/td&gt;
&lt;td&gt;Order planning takes all necessary materials and capacity into account&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-level BOM explosion&lt;/td&gt;
&lt;td&gt;Supported, including scrap, subcontracting, co-products and yield&lt;/td&gt;
&lt;td&gt;Critical components only inside the master-planning horizon; all components once demand enters the order horizon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safety stock&lt;/td&gt;
&lt;td&gt;Minimum coverage, with pegging options per coverage group&lt;/td&gt;
&lt;td&gt;Safety stock on the plan item, optionally with a seasonal pattern&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time fences&lt;/td&gt;
&lt;td&gt;Coverage, freeze, capacity&lt;/td&gt;
&lt;td&gt;Order horizon, planning horizon, forecast time fence and a time fence freezing the supply plan, all rounded to plan period ends&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Exception and action messages&lt;/td&gt;
&lt;td&gt;Action messages, futures messages, calculated delays&lt;/td&gt;
&lt;td&gt;Exception messages by type, resource, planner and item&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Simulation&lt;/td&gt;
&lt;td&gt;Multiple master plans&lt;/td&gt;
&lt;td&gt;Scenarios, one designated the actual scenario&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capable and available to promise&lt;/td&gt;
&lt;td&gt;CTP supported from version 10.0.28&lt;/td&gt;
&lt;td&gt;Standard ATP and component CTP without a master plan; ATP and CTP with one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-site and intercompany&lt;/td&gt;
&lt;td&gt;Forecast and downstream demand supported, cross-entity execution not yet&lt;/td&gt;
&lt;td&gt;Planning clusters&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Demand by sales channel&lt;/td&gt;
&lt;td&gt;No direct equivalent&lt;/td&gt;
&lt;td&gt;Channel master plans holding forecast, allowed demand and channel ATP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Return orders&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Not considered by Planning Optimization&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Not established. LN documents sales and purchase return orders, but no planning page connects them to &lt;em&gt;Enterprise Planning&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 2. Documented contrast.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Planning Optimization&lt;/em&gt; lists finite capacity scheduling, freeze time fences, auto firming, kanban, item substitution, subcontracting, co-products and formula yield as supported.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Documented Gaps in &lt;em&gt;Planning Optimization&lt;/em&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Not supported&lt;/th&gt;
&lt;th&gt;Status per Microsoft&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Return orders&lt;/td&gt;
&lt;td&gt;"&lt;em&gt;Planning Optimization&lt;/em&gt; doesn't consider return orders"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freeze time fence set on item coverage&lt;/td&gt;
&lt;td&gt;Pending, and currently ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BOM and formula lines with step consumption&lt;/td&gt;
&lt;td&gt;Pending, and currently ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sales line reservation using explosion&lt;/td&gt;
&lt;td&gt;Future wave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intercompany planning execution across legal entities&lt;/td&gt;
&lt;td&gt;Future wave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;em&gt;Requirement&lt;/em&gt; types for skills, courses, certificates and titles&lt;/td&gt;
&lt;td&gt;Future wave&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 3. The whole of the documented gap, from the Planning Optimization fit analysis.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Data and Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Sources
&lt;/h3&gt;

&lt;p&gt;Every number in this article comes from two public files.&lt;/p&gt;

&lt;p&gt;Demand comes from &lt;em&gt;Online Retail II&lt;/em&gt;. It is the transaction file of a UK registered non-store online retailer selling giftware, largely to wholesale customers, published through the UCI Machine Learning Repository under CC BY 4.0. 1,067,371 rows, 1 December 2009 to 9 December 2011, across 5,131 stock codes. Each row is an invoice line carrying stock code, quantity, unit price and a timestamp. The row count matches the repository's own figure.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ONS series J596&lt;/em&gt; is used for one check and does not enter the results. It is the Retail Sales Index for non-store retailing, value not seasonally adjusted. The seasonally adjusted version of the same series was downloaded and deliberately not used, since the check turns on whether the seasonal pattern matches.&lt;/p&gt;

&lt;p&gt;Public demand history is rare. This is a distributor's order book, not a manufacturer's. Limits says what that rules out.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Filters Applied
&lt;/h3&gt;

&lt;p&gt;Stock codes matching five digits with an optional letter suffix are retained. That excludes 61 non-item codes covering postage, adjustments, bank charges and samples. Credit invoices, and the 3,457 negative quantities outside them, are excluded from demand. An item enters the replay only with 12 or more demand days and a 180 day active window. That leaves 3,498 of the 4,773 items carrying any demand.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Classification
&lt;/h3&gt;

&lt;p&gt;Items are classified on average demand interval and squared coefficient of variation of demand sizes, against cutoffs of 1.32 and 0.49 from Syntetos, Boylan and Croston. Those authors derived the cutoffs for selecting a forecasting method, not a lot-sizing rule. Measured weekly, the population divides into 120 smooth, 131 intermittent, 1,344 erratic and 1,903 lumpy items.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 Constructed Inputs
&lt;/h3&gt;

&lt;p&gt;Three inputs are constructed rather than observed.&lt;/p&gt;

&lt;p&gt;Forecast error is generated, and Section 4.6 varies it. The five business cases are combinations of lead time, forecast error and item population, and no source claims they are typical. The opening stock, the tie margin and the remaining parameters are chosen values, listed in Limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.5 Checks
&lt;/h3&gt;

&lt;p&gt;One firm's order book should move with the national series for its sector. Against the ONS Retail Sales Index for non-store retailing, value not seasonally adjusted, the correlation over 23 complete overlapping months is 0.858 in levels and 0.807 in logs. Both series peak in November. The firm's November runs at 1.75 times its own yearly mean, the sector's at 1.35.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Structural check&lt;/th&gt;
&lt;th&gt;What it asserts&lt;/th&gt;
&lt;th&gt;What it catches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wagner and Whitin bound&lt;/td&gt;
&lt;td&gt;No lot-sizing rule may cost less than the exact optimum&lt;/td&gt;
&lt;td&gt;A rule that reports a cost below the true optimum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit bucket identity&lt;/td&gt;
&lt;td&gt;A one day window must equal one order per requirement&lt;/td&gt;
&lt;td&gt;A window that groups demand it should not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zero-noise identity&lt;/td&gt;
&lt;td&gt;With a perfect forecast, a plan whose boundaries do not depend on demand must not move&lt;/td&gt;
&lt;td&gt;An order timed off its release date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reproducibility&lt;/td&gt;
&lt;td&gt;A rerun in a fresh process must reproduce stored results exactly&lt;/td&gt;
&lt;td&gt;A seed that is not stable across machines&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 4. Each check is an identity rather than a plausibility test, so a defect cannot satisfy one by chance. All four hold for the published run.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.6 Business Cases and Configurations
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Lead time&lt;/th&gt;
&lt;th&gt;Forecast error&lt;/th&gt;
&lt;th&gt;Items drawn from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast-moving distributor&lt;/td&gt;
&lt;td&gt;5 days&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;Smooth and erratic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-lead importer&lt;/td&gt;
&lt;td&gt;60 days&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;All classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spare parts operation&lt;/td&gt;
&lt;td&gt;45 days&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;Intermittent and lumpy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seasonal wholesaler&lt;/td&gt;
&lt;td&gt;20 days&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;All classes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatile demand&lt;/td&gt;
&lt;td&gt;14 days&lt;/td&gt;
&lt;td&gt;40%&lt;/td&gt;
&lt;td&gt;Erratic and lumpy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 5. Each case replans weekly over 104 runs, after a warm-up that is discarded. No coverage time fence is set in any of them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Eleven configurations run in each case. Six are shared: one order per requirement, the floating window at 7, 14, 28 and 56 days, and replenish-to-maximum. Five are LN only: &lt;em&gt;Fixed Order Quantity&lt;/em&gt; at 7 and 28 days of mean demand, and &lt;em&gt;Economic Order Quantity&lt;/em&gt; at three setup-to-holding ratios. That ratio is a property of the business and is not in the data, so three values are swept.&lt;/p&gt;

&lt;p&gt;The replenish-to-maximum minimum is set to cover the lead time. A minimum below the lead time cannot serve demand during replenishment.&lt;/p&gt;

&lt;p&gt;Each configuration is scored on three outcomes, normalised from 0 to 100 against the best and worst achieved in that case. &lt;em&gt;Service&lt;/em&gt; comes from fill rate, &lt;em&gt;working capital&lt;/em&gt; from days of cover, &lt;em&gt;planner workload&lt;/em&gt; from purchase orders raised per year. Scores are comparable within a case and not across cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Service
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpewkky8a205rxwfdqexi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpewkky8a205rxwfdqexi.png" alt="Grouped bar chart on a log scale showing the spread across eleven configurations for each of three categories in each business case" width="799" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3. The spread the eleven settings produce within each case, on a log scale. The service bars span all eleven, replenish-to-maximum included. Among the time-phased rules alone the spread is a fraction of a point, as the numbers below give.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Among the time-phased rules the fill rate spread is 0.00, 0.19 and 0.04 points in the three short lead time cases. It opens to 2.84 points at a 60 day lead time and 4.30 at 45 days with intermittent demand. Below those lead times the choice of rule is not a service decision.&lt;/p&gt;

&lt;p&gt;Replenish-to-maximum is the exception. It served between 82.9 and 88.9 per cent across the five cases, where every time-phased rule served above 94 per cent. At short lead times it was dominated outright. In the fast-moving case it held 15.3 days of cover to serve 88.9 per cent, where a 7 day window held 5.5 days to serve 100. A reorder point cannot use forward visibility, and on this demand that costs more than it saves.&lt;/p&gt;

&lt;p&gt;Wemmerlov reported the same in 1989: "when demands cannot be predicted, the choice of lot-sizing technique is not a very important issue", qualified to hold "when the procedures are applied under equal conditions, and when only holding and ordering costs are considered."&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Scores by Business Case
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkwcd40eb2k70wptyyvmh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkwcd40eb2k70wptyyvmh.png" alt="Heatmap of balanced score by configuration and business case, with clear winners boxed solid and ties boxed dashed" width="799" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 4. Balanced score within each case. A solid box is a clear winner and a dashed pair is a tie. Orange labels mark the methods only LN documents.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Business case&lt;/th&gt;
&lt;th&gt;Working capital&lt;/th&gt;
&lt;th&gt;Planner workload&lt;/th&gt;
&lt;th&gt;Balanced&lt;/th&gt;
&lt;th&gt;Margin&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fast-moving distributor&lt;/td&gt;
&lt;td&gt;One per requirement&lt;/td&gt;
&lt;td&gt;56 day window&lt;/td&gt;
&lt;td&gt;7 day window&lt;/td&gt;
&lt;td&gt;0.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long-lead importer&lt;/td&gt;
&lt;td&gt;Replenish to max&lt;/td&gt;
&lt;td&gt;Replenish to max&lt;/td&gt;
&lt;td&gt;56 day window&lt;/td&gt;
&lt;td&gt;2.81&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spare parts operation&lt;/td&gt;
&lt;td&gt;Replenish to max&lt;/td&gt;
&lt;td&gt;56 day window&lt;/td&gt;
&lt;td&gt;56 day window&lt;/td&gt;
&lt;td&gt;9.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seasonal wholesaler&lt;/td&gt;
&lt;td&gt;One per requirement&lt;/td&gt;
&lt;td&gt;56 day window&lt;/td&gt;
&lt;td&gt;7 day window&lt;/td&gt;
&lt;td&gt;0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volatile demand&lt;/td&gt;
&lt;td&gt;One per requirement&lt;/td&gt;
&lt;td&gt;56 day window&lt;/td&gt;
&lt;td&gt;14 day window&lt;/td&gt;
&lt;td&gt;1.02&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 6. Margin is the gap between first and second. Anything under three points is reported as a tie.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The floating window, F&amp;amp;O's &lt;em&gt;Period&lt;/em&gt; coverage code and LN's &lt;em&gt;order interval&lt;/em&gt;, comes top in all five cases. Four of those are ties, at 0.50, 2.81, 0.13 and 1.02 points. The spare parts case separates, at 9.93.&lt;/p&gt;

&lt;p&gt;The two methods only LN documents never placed better than third of eleven. &lt;em&gt;Fixed Order Quantity&lt;/em&gt; reached third in three cases and fourth and fifth in the others. &lt;em&gt;Economic Order Quantity&lt;/em&gt; placed lower again in every case. It took the service category in three cases, but only at the lowest setup-to-holding ratio tested. At that ratio it approaches one order per requirement and pays for the service in order count.&lt;/p&gt;

&lt;p&gt;Two columns follow from the definitions rather than the results. The longest window wins planner workload because it raises the fewest orders. One order per requirement wins working capital because it holds the least stock. They are the two ends of one trade.&lt;/p&gt;

&lt;p&gt;The right window length differs by business. 56 days for the two long lead time cases, 7 and 14 days for the three short ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Orders Against Stock
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa3pmqffcsalrihgmgl50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa3pmqffcsalrihgmgl50.png" alt="Line chart of purchase orders per year against days of cover, with the floating window curve running below and left of the fixed order quantity and economic order quantity curves" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 5. The floating window sits below and left of both LN-only methods at every length tested. At matched stock each raises more orders, and at matched order count each holds more stock.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Across the 795 item-configurations where both outcomes are defined, doubling the window changes purchase orders by −39.1 per cent and days of cover by +125.9 per cent. Simple theory predicts a halving and a doubling. Orders fall by less than half because demand at this granularity is lumpy, so many buckets sit empty.&lt;/p&gt;

&lt;p&gt;Fixed order quantity and economic order quantity sit outside that trade at every setting tested. Economic order quantity sits further out than fixed order quantity. LN sets order quantities "to at least the economic order quantity", so it raises small requirements to the EOQ and leaves large ones alone. On lumpy demand that adds orders without removing stock.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Demand Classification and the Review Period
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Review bucket&lt;/th&gt;
&lt;th&gt;Smooth&lt;/th&gt;
&lt;th&gt;Intermittent&lt;/th&gt;
&lt;th&gt;Erratic&lt;/th&gt;
&lt;th&gt;Lumpy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Daily&lt;/td&gt;
&lt;td&gt;0.0%&lt;/td&gt;
&lt;td&gt;4.5%&lt;/td&gt;
&lt;td&gt;1.5%&lt;/td&gt;
&lt;td&gt;94.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;3.4%&lt;/td&gt;
&lt;td&gt;3.7%&lt;/td&gt;
&lt;td&gt;38.4%&lt;/td&gt;
&lt;td&gt;54.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;22.5%&lt;/td&gt;
&lt;td&gt;2.7%&lt;/td&gt;
&lt;td&gt;56.0%&lt;/td&gt;
&lt;td&gt;18.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 7. The same 3,498 items in every row. Only the period the measurement was taken in changed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbvvyuz3hn4rcj84qy2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbvvyuz3hn4rcj84qy2n.png" alt="Two scatter plots of average demand interval against squared coefficient of variation, the same items in each, the cloud shifting across the cutoffs between the daily and monthly panels" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 6. The source paper defines the interval as "expressed in number of forecast review periods", so the measure carries the review period inside it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Demand classifications are used to assign coverage codes. No item is smooth or lumpy on its own account. It is smooth or lumpy relative to a review period. Neither product names that period. The tool that produced the classification chose it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.5 Coverage Time Fence
&lt;/h3&gt;

&lt;p&gt;Every setting above trades one outcome against another. The coverage time fence withholds demand from the calculation instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqca792f5rlug12glzlhy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqca792f5rlug12glzlhy.png" alt="Line chart of fill rate against coverage time fence at a 60 day lead time, with four coverage periods rising together through the same cliff" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 7. Four window lengths at a 60 day lead time. All four recover through the same fence. The dotted markers show where the transition would sit if the window length governed it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Microsoft asks that the fence be "longer than the total lead time", and that rule is correct. Taking the 14 day window, a 60 day fence returned 89.6 per cent at a 60 day lead time, 65 days returned 94.9 per cent and 70 days returned 97.5 per cent against a plateau of about 98.1. Ten days above the lead time therefore recovers almost all of the loss. The replan cadence here is weekly, and the demand has to be visible for at least one run before the order is released.&lt;/p&gt;

&lt;p&gt;The window length does not govern where service returns. Swept in five day steps at windows of 7, 14, 28 and 56 days, the four curves are indistinguishable through the transition, and the smallest fence within half a point of the best fill runs from 70 days at a 7 day window to 85 days at a 56 day window. Were the window length in control, those would fan out across the full 49 day span of the windows.&lt;/p&gt;

&lt;p&gt;Across the 5,880 item-scenarios, each day the fence falls short of the lead time costs 0.451 percentage points of fill, at a robust t of −34.7.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.6 Sensitivity to Forecast Error
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6iy0tdzl20envx5y40ov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6iy0tdzl20envx5y40ov.png" alt="Four small panels showing plan stability rising steeply with forecast error while fill rate, orders per year and the order elasticity stay flat" width="799" height="228"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 8. Fill rate, order count and the order elasticity are drawn on scales wide enough to show movement and do not move. Plan stability, in red, moves across the whole range.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Forecast error is a parameter, not a property of the data. Its size was varied from 0 to 40 per cent and its persistence between runs across 0, 0.5 and 0.8. The three outcomes behind the scores held throughout. Fill stayed between 99.93 and 99.99 per cent, orders between 11.95 and 12.11 a year, and the order elasticity between −39.1 and −40.6 per cent.&lt;/p&gt;

&lt;p&gt;One result moved in the direction the literature predicts. Days of cover rose from 11.73 to 14.33 across the sweep. Wemmerlov reports that forecast errors "not only lead to stockouts, they also induce larger inventories."&lt;/p&gt;

&lt;p&gt;Plan stability was measured throughout. No claim is made from it. Counting a planned order as changed by a fixed number of units, and by a fixed percentage, point in opposite directions. That is a property of the measure and not of the products. Only the physical outcomes are reported.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Discussion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Where Demand Is Dropped
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    D[Demand line, due date D] --&amp;gt; Q{Is D within the&amp;lt;br/&amp;gt;coverage time fence?}
    Q -- No --&amp;gt; X[Not loaded into the engine.&amp;lt;br/&amp;gt;No requirement transaction.&amp;lt;br/&amp;gt;No message.]
    Q -- Yes --&amp;gt; C{Coverage code}
    C -- Requirement --&amp;gt; R[One planned order per requirement]
    C -- Period --&amp;gt; P[Window of L days opens&amp;lt;br/&amp;gt;at the first demand]
    C -- Min/Max --&amp;gt; M[Replenish to maximum&amp;lt;br/&amp;gt;when below minimum]
    R --&amp;gt; L{Is D minus lead time&amp;lt;br/&amp;gt;in the past?}
    P --&amp;gt; L
    M --&amp;gt; L
    L -- No --&amp;gt; OK[Planned order released on time]
    L -- Yes --&amp;gt; DEL[Delay. Order placed at the&amp;lt;br/&amp;gt;earliest feasible date]
    X -.-&amp;gt; LATE[Demand becomes visible only&amp;lt;br/&amp;gt;when it crosses the fence]
    LATE --&amp;gt; DEL

    classDef ok fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef warn fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef gap fill:#f6d8d4,stroke:#b0443a,color:#0b0b0b
    classDef dec fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    class OK ok
    class DEL,LATE warn
    class X gap
    class Q,C,L dec&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 9. Blue is a decision the engine takes, green a demand served on time, amber one served late, red the path where the demand is never seen.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Observations from the diagram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The red path raises nothing. No requirement transaction, so no action message, no futures message and no delay. The demand stays invisible until it crosses the fence.&lt;/li&gt;
&lt;li&gt;The fence is measured from today, not from the item's lead time, and in calendar days. A week is seven days regardless of the working time calendar.&lt;/li&gt;
&lt;li&gt;An item with a 60 day lead time behind a 30 day fence is a configuration no validation prevents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.2 Where the Fence Resolves
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    S[Master planning run starts] --&amp;gt; M{Coverage time fence&amp;lt;br/&amp;gt;set on the master plan?}
    M -- Yes --&amp;gt; MP[Master plan value wins.&amp;lt;br/&amp;gt;Item and group are ignored.]
    M -- No --&amp;gt; I{Override set on&amp;lt;br/&amp;gt;item coverage?}
    I -- Yes --&amp;gt; IC[Item coverage value wins]
    I -- No --&amp;gt; G{Set on the&amp;lt;br/&amp;gt;coverage group?}
    G -- Yes --&amp;gt; CG[Coverage group value wins]
    G -- No --&amp;gt; DF[Global default, 100 days]

    classDef win fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef trap fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef dec fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b
    class IC,CG,DF win
    class MP trap
    class M,I,G dec&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 10. Amber marks the path that defeats an audit carried out at item level. Planning Optimization "first checks the item coverage line, then the coverage group, and finally the global coverage time fence", and a value on the master plan overrides all three. A review has to start at the master plan and work down.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Configuration
&lt;/h3&gt;

&lt;p&gt;Find the exposure first. It is a report against setup tables and needs no transaction history.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;For each item, resolve the coverage time fence the override chain returns, by working down Figure 10. The master plan wins if it carries a value, then item coverage, then the coverage group, then the 100 day default.&lt;/li&gt;
&lt;li&gt;Compare that against the item's total lead time.&lt;/li&gt;
&lt;li&gt;Every item whose fence does not clear its lead time is exposed. Rank them by lead time, longest first, since the loss grows with it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two settings decide the outcome. Both sit in the same two places.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;What to put in it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coverage time fence&lt;/td&gt;
&lt;td&gt;Master planning &amp;gt; Setup &amp;gt; Coverage &amp;gt; Coverage groups, General tab. Item coverage for a single item&lt;/td&gt;
&lt;td&gt;Above the longest total lead time behind the group, with room to spare. Ten days above recovered almost all of the loss in these tests, and the 100 day default already clears every lead time tested here&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coverage period&lt;/td&gt;
&lt;td&gt;The same two places&lt;/td&gt;
&lt;td&gt;By business, not by policy. 56 days suited the spare parts case, 7 or 14 days the short lead time ones. One group-wide value across a mixed catalogue will be wrong for part of it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Set the fence first. Lengthening it trades nothing away, and the exposure is created by shortening it. The coverage period trades constantly, at 39 per cent of the orders against 126 per cent of the stock per doubling. That is a treasury decision, not a planning one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Planning Optimization&lt;/em&gt; does not consider return orders. An expected return will not reduce a net requirement and the replenishment goes out regardless. Where return volumes are material, that stock has to reach the plan by another route.&lt;/p&gt;

&lt;p&gt;Where a demand classification is used to assign coverage codes, record the review period it was measured in. Section 4.4 shows the class is not a property of the item alone.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 For Microsoft
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Request&lt;/th&gt;
&lt;th&gt;Case for it&lt;/th&gt;
&lt;th&gt;Evidence behind it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Validate the fence against the lead time&lt;/td&gt;
&lt;td&gt;A fence shorter than the total lead time cannot serve the demand behind it, and the system already holds every number needed to say so&lt;/td&gt;
&lt;td&gt;Measured. Section 4.5 prices the shortfall&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consider return orders in the planning calculation&lt;/td&gt;
&lt;td&gt;A documented gap with a direct operational consequence&lt;/td&gt;
&lt;td&gt;Microsoft's own fit analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A coarse far horizon&lt;/td&gt;
&lt;td&gt;Seeing a long lead time item's far demand today means admitting it at full daily resolution. That is the noise the fence exists to suppress&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The first costs little and the evidence is in Section 4.5. The second is Microsoft's own documented gap rather than an inference from anything here.&lt;/p&gt;

&lt;p&gt;The third carries no measurement. LN's optional item master plan puts a coarse plan beyond the order horizon where F&amp;amp;O has nothing. Its purpose is visibility, not replenishment, so replaying independent demand cannot price it. Infor advises against maintaining it unless the functionality is wanted.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fixed Order Quantity&lt;/em&gt; and &lt;em&gt;Economic Order Quantity&lt;/em&gt; should not be requested. On this demand neither improved on the coverage codes F&amp;amp;O already ships.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.5 What the Analysis Supports
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Claim&lt;/th&gt;
&lt;th&gt;Where it comes from&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;The floating window tops every business case, and the two LN-only methods never place better than third&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Four of five cases are ties. The one that separates goes to a shared setting&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doubling the window costs 39 per cent of orders and adds 126 per cent to stock&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service barely separates time-phased rules below a 45 day lead time&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A fence short of the lead time costs 0.451 points of fill per day&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The demand classification moves with the review period it is measured in&lt;/td&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which lot-sizing rules each product offers&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;That LN's second tier is optional, and Infor advises against it by default&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Everything in Table 2&lt;/td&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 8. Six findings from the data. The rest from the two vendors' published manuals.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Neither an LN nor an F&amp;amp;O system was run in this modelling exercise. Both sets of rules were reimplemented from documentation. Therefore a behaviour that differs from the documentation is invisible to this method. Where Infor's manuals are silent, the assumption made is recorded in the repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;This is one wholesaler's order book, with no bills of material, routings or capacity. Nothing here tests dependent demand, multi-level netting or capacity scheduling. That bounds the findings to purchasing and distribution. The lot-sizing literature places uncapacitated results there too. Wemmerlov notes that such work is "applicable to purchasing/distribution situations but not necessarily to decisions related to manufacturing lot sizes." The fence result is derived at a single level, and a multi-level bill would extend the requirement.&lt;/p&gt;

&lt;p&gt;No safety stock was modelled. F&amp;amp;O's minimum coverage is a standard setting any implementation carrying a 60 day lead time would use, so the fence results are the cost of the exclusion with nothing buffering it, and the magnitudes are an upper bound. The direction of the omission is known. Introducing safety stocks "generates even larger inventories and also more orders", so both the stock and the order counts reported here would rise.&lt;/p&gt;

&lt;p&gt;Forecast error is the assumption the plan stability results rest on. Section 4.6 reports the range they move across. No stability figure here should be read as a prediction for a live system.&lt;/p&gt;

&lt;p&gt;The structural checks cover the lot-sizing rules and not the whole replay, since the Wagner and Whitin bound applies to the rules alone. The fine sweep behind Figure 7 sits at a single 60 day lead time. The 0.451 point per day figure spans lead times of 5, 15, 30, 45, 60, 75 and 90 days against seven fences. The ten day recovery margin is close to the seven day replan cadence used throughout, so a different cadence would move it.&lt;/p&gt;

&lt;p&gt;The balanced score is the mean of the categories rankable in a case. It weights them equally, and that weighting is a judgement. Table 6 carries the per-category winners alongside it.&lt;/p&gt;

&lt;p&gt;Chosen parameters. Each moves some conclusion if moved. The 1.32 and 0.49 cutoffs, the weekly review period behind the classification, the activity filter of 12 demand days and a 180 day active window, the 28 day visibility window, the weekly replan cadence, opening stock of 14 days, the warm-up period, the three point tie margin, the minimum spreads for ranking a category, and the setup-to-holding ratios swept for economic order quantity.&lt;/p&gt;

&lt;p&gt;No organisation is accused of anything. The wholesaler is not named in the source and is not identified here. Neither Microsoft nor Infor is alleged to have documented anything incorrectly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reproducing This
&lt;/h2&gt;

&lt;p&gt;The source code and datasets are at &lt;a href="https://github.com/kingomnivore/mrp-fno-vs-ln" rel="noopener noreferrer"&gt;github.com/kingomnivore/mrp-fno-vs-ln&lt;/a&gt;. Clone it, &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;, then &lt;code&gt;python run.py&lt;/code&gt;. Both data files are committed, the workbook through Git LFS, so it runs as cloned.&lt;/p&gt;

&lt;p&gt;The recipe below describes the same analysis independently of the code, for anyone who would rather rebuild it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Get the data.&lt;/em&gt; &lt;em&gt;Online Retail II&lt;/em&gt; from the UCI Machine Learning Repository, both sheets of the workbook. &lt;em&gt;ONS series J596&lt;/em&gt;, value not seasonally adjusted, for the check in Section 3.5 only.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Aggregate.&lt;/em&gt; Reduce the order lines to daily demand per item. Drop non-item codes, credit lines and negative quantities, then apply the activity filter in Section 3.2.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3. Classify.&lt;/em&gt; Compute the demand interval and the squared coefficient of variation of demand sizes &lt;em&gt;in the review period the business intends to plan in&lt;/em&gt;, and split on 1.32 and 0.49.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4. Implement the rules.&lt;/em&gt; Code the lot-sizing rules from both vendors' documentation, including the ones the product under test does not offer, giving each rule the same treatment where the documentation is silent.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5. Replay.&lt;/em&gt; Define business cases as combinations of lead time, forecast error and item population. Run every rule in every case, replanning weekly, and commit each order on its release date rather than its receipt date.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;6. Score.&lt;/em&gt; Discard the warm-up. Score each category only where the underlying outcome differs across configurations, and report the margin alongside the rank.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;7. Sweep.&lt;/em&gt; Vary the forecast error before reporting anything that depends on it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;8. Check.&lt;/em&gt; Run the four identities in Table 4 before reading any result.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Chosen parameters.&lt;/em&gt; As named in Limits.&lt;/p&gt;




&lt;h2&gt;
  
  
  On Method
&lt;/h2&gt;

&lt;p&gt;The analysis code and the initial draft were produced with Claude Code. The dataset and the configuration claims were verified against the sources listed below before publication. The code is public on the repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Dynamics 365 Supply Chain Management documentation&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/coverage-settings" rel="noopener noreferrer"&gt;Coverage settings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/replenishment-methods-quantity-modification" rel="noopener noreferrer"&gt;Replenishment methods and quantity modification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/coverage-time-fence" rel="noopener noreferrer"&gt;Coverage time fences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/planning-optimization-fit-analysis" rel="noopener noreferrer"&gt;Planning Optimization fit analysis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/planning-optimization-differences-with-built-in" rel="noopener noreferrer"&gt;Differences between Planning Optimization and the deprecated master planning engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/not-used-parameters" rel="noopener noreferrer"&gt;Parameters not used by Planning Optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/supply-chain/master-planning/planning-optimization/finite-capacity" rel="noopener noreferrer"&gt;Finite capacity planning and scheduling&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Infor LN Enterprise Planning documentation&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.4/en-us/lnolh/help/cp/onlinemanual/000303.html" rel="noopener noreferrer"&gt;Master planning versus order planning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.7/en-us/lnolh/help/cp/onlinemanual/000020.html" rel="noopener noreferrer"&gt;Master planning, an overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.7/en-us/lnolh/help/cp/onlinemanual/000304.html" rel="noopener noreferrer"&gt;Demand and Inventory Planning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Infor LN Enterprise Planning, &lt;em&gt;User Guide for Order Planning&lt;/em&gt;. Source for the order interval, the order methods and the plan period distribution rules&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.4.in/en-us/lnolh/help/cp/onlinemanual/000302.html" rel="noopener noreferrer"&gt;Plan periods in Enterprise Planning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.5/en-us/lnolh/help/cp/onlinemanual/op000210.html" rel="noopener noreferrer"&gt;Order interval&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.3/en-us/lnolh/help/cp/rpd/cprpd1100m000.html" rel="noopener noreferrer"&gt;Items - Planning (cprpd1100m000)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.6/en-us/lnolh/help/performance/cp/P000011_order_horizon.html" rel="noopener noreferrer"&gt;Order horizon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.6/en-us/lnolh/help/cp/onlinemanual/000461.html" rel="noopener noreferrer"&gt;Allocation buffers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.infor.com/ln/10.3/en-us/lnolh/help/cp/glossary/glossary.html" rel="noopener noreferrer"&gt;Glossary for Enterprise Planning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kingomnivore/mrp-fno-vs-ln" rel="noopener noreferrer"&gt;Analysis code and data, GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  About Author
&lt;/h2&gt;

&lt;p&gt;Dean Fachrie is a Functional Analyst at CodeCore Dynamics LLC, working on &lt;em&gt;Microsoft Dynamics 365 F&amp;amp;O&lt;/em&gt; architecture and enterprise system design.&lt;/p&gt;

&lt;p&gt;Configuring master planning, or evaluating &lt;em&gt;Dynamics 365 F&amp;amp;O&lt;/em&gt; against another ERP?&lt;/p&gt;

&lt;p&gt;We help enterprise supply chain and finance teams set coverage codes and time fences so master planning reads the whole horizon it should, and size replenishment against the working capital the business will carry.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codecoredynamics.com/contact/" rel="noopener noreferrer"&gt;Contact us&lt;/a&gt; or connect on &lt;a href="https://www.linkedin.com/company/codecore-dynamics" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; for architecture reviews.&lt;/p&gt;

</description>
      <category>masterplanning</category>
      <category>mrp</category>
      <category>inforln</category>
      <category>financeandoperations</category>
    </item>
    <item>
      <title>Airline invoicing in D365 F&amp;O</title>
      <dc:creator>Dean Fachrie</dc:creator>
      <pubDate>Mon, 31 Aug 2026 18:23:23 +0000</pubDate>
      <link>https://dev.to/deanfachrie/airline-invoicing-in-d365-fo-4p98</link>
      <guid>https://dev.to/deanfachrie/airline-invoicing-in-d365-fo-4p98</guid>
      <description>&lt;p&gt;The purchase order price source determines what an invoice match verifies.&lt;/p&gt;

&lt;p&gt;CodeCore Dynamics LLC. Edited 9 September 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;F&amp;amp;O matching compares an invoice to its own purchase order. The control is therefore not stronger than its source.&lt;/li&gt;
&lt;li&gt;A price from a trade agreement was fixed before the transaction and applies across all of them. Where a buyer typed the price onto the PO, matching checks the vendor against their own quote. Both produce the same match status.&lt;/li&gt;
&lt;li&gt;Two years of US airline filings show fuel pricing within 4 per cent of its own agreed rate, while airframe repair spans 32 per cent. Fuel can be driven from master data. Repair cannot.&lt;/li&gt;
&lt;li&gt;The same charge measured against a different benchmark can flip the verdict. Fuel varies by 16 per cent against the industry and 4 per cent against its own indexed rate, either side of the 15 per cent line for automating.&lt;/li&gt;
&lt;li&gt;The legal entity price tolerance defaults to 0 per cent, and that default record cannot be deleted.&lt;/li&gt;
&lt;li&gt;Charges matching requires both &lt;strong&gt;Match charges&lt;/strong&gt; at legal entity level and &lt;strong&gt;Compare purchase order and invoice values&lt;/strong&gt; on the individual charges code.&lt;/li&gt;
&lt;li&gt;At a 10 per cent tolerance a repair charge sends roughly a third of its invoices for manual review, against one in ten for fuel.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  For finance leadership
&lt;/h2&gt;

&lt;p&gt;The current position can be established without opening the system. Ask what the legal entity price tolerance is set to. If it remains at 0 per cent, every price variance is being flagged. Ask which charges codes have &lt;strong&gt;Compare purchase order and invoice values&lt;/strong&gt; selected. The codes without it post unchecked and raise no error. And finally, ask what share of purchase order lines take their price from a trade agreement rather than from manual entry. That share is the exposure this article describes.&lt;/p&gt;

&lt;p&gt;The running cost is in Section 4.4. At a 10 per cent tolerance, repair flags 31 per cent of its invoices against 10 per cent for fuel. This reflects three times the review time, and the reviewer has no agreed price to compare against.&lt;/p&gt;

&lt;p&gt;Where no rate exists, a price tolerance creates review load and checks nothing. Quantity matching does not depend on a rate and should stay on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Terms
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dynamics 365 F&amp;amp;O&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Purchase order (PO)&lt;/td&gt;
&lt;td&gt;The order raised before the goods or services arrive, carrying an agreed price, quantity and any charges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product receipt&lt;/td&gt;
&lt;td&gt;The record of what was received&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net unit price&lt;/td&gt;
&lt;td&gt;The net amount of a line divided by its quantity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two-way matching&lt;/td&gt;
&lt;td&gt;Compares the net unit price on the invoice line to the net unit price on the PO line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Three-way matching&lt;/td&gt;
&lt;td&gt;Two-way matching plus invoice quantity against the quantity on the matched product receipt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Line matching policy&lt;/td&gt;
&lt;td&gt;Which of the above applies. Set for the legal entity and overridable by vendor, item, or item and vendor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price tolerance&lt;/td&gt;
&lt;td&gt;The variance allowed before a discrepancy is reported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invoice totals matching&lt;/td&gt;
&lt;td&gt;Compares totals on the invoice to the totals expected from the PO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trade agreement&lt;/td&gt;
&lt;td&gt;Stored agreed prices per vendor and item, used to populate the PO price&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purchase agreement&lt;/td&gt;
&lt;td&gt;A commitment to buy an agreed volume or value, carrying agreed pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charges code&lt;/td&gt;
&lt;td&gt;A named cost added to an order or invoice, such as freight, handling or a landing fee&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charges matching&lt;/td&gt;
&lt;td&gt;Compares charge amounts on the invoice to charge amounts on the PO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legal entity&lt;/td&gt;
&lt;td&gt;The company the configuration belongs to&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rung&lt;/td&gt;
&lt;td&gt;Used in this article for where a PO price came from, per Table 1. Not a Microsoft term.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Aviation&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flight hour&lt;/td&gt;
&lt;td&gt;Time the aircraft is airborne. The driver for maintenance and crew cost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Capacity purchase agreement&lt;/td&gt;
&lt;td&gt;A mainline carrier pays a regional to operate routes on its behalf, commonly supplying the fuel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACMI&lt;/td&gt;
&lt;td&gt;A lease where the operator supplies aircraft, crew, maintenance and insurance, and the customer covers fuel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14 CFR Part 241&lt;/td&gt;
&lt;td&gt;The US regulation requiring carriers to file the financial schedules used here&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;Two-way matching in Dynamics 365 F&amp;amp;O compares the net unit price on the invoice line to the net unit price on the purchase order line. Three-way matching additionally compares the invoice quantity to the quantity on the matched product receipt.&lt;/p&gt;

&lt;p&gt;Both comparisons take the purchase order as the reference. That reference came from somewhere, and where it came from determines what a passed match establishes. F&amp;amp;O does not distinguish between those sources anywhere in the interface.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rung&lt;/th&gt;
&lt;th&gt;Source of the PO price&lt;/th&gt;
&lt;th&gt;Passed match means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Trade agreement or purchase agreement&lt;/td&gt;
&lt;td&gt;The vendor billed a price set outside the transaction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;A quote entered onto the PO by a buyer&lt;/td&gt;
&lt;td&gt;The vendor billed the amount they quoted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;A line added at invoice entry, with no PO line&lt;/td&gt;
&lt;td&gt;Line matching does not apply&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 1. The same match status is produced at every rung.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Rung 2 confirms the vendor has not deviated from their own quote. It carries no information about whether the quote was reasonable.&lt;/p&gt;

&lt;p&gt;Reaching rung 1 requires a rate stable enough to hold in master data. Sections 2 to 4 test which charges have one using public airline financial filings. Section 5 sets out what follows for the F&amp;amp;O configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Dataset and cleaning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Source
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;BTS Form 41 Schedule P-5.2&lt;/strong&gt;, quarterly aircraft operating expenses, 2024 and 2025. The dataset contains 4,805 rows across 47 carriers, 95 aircraft types and 8 quarters. Each row conforms to a matched carrier, aircraft type, and quarter.&lt;/p&gt;

&lt;p&gt;Airlines are one of the few industries where third-party spend and the quantity driving it are both public. US carriers file both under 14 CFR Part 241. The same analysis is not possible from public data at a manufacturer.&lt;/p&gt;

&lt;p&gt;The code, the filings and the raw output are in a public repository, linked below.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.2 Charges selected
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Charge&lt;/th&gt;
&lt;th&gt;Amount field&lt;/th&gt;
&lt;th&gt;Account&lt;/th&gt;
&lt;th&gt;Driver field&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Aircraft fuel&lt;/td&gt;
&lt;td&gt;&lt;code&gt;FUEL_FLY_OPS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;51451&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AIR_FUELS_ISSUED&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine repair&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ENGINE_REPAIRS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;52432&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TOTAL_AIR_HOURS&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airframe repair&lt;/td&gt;
&lt;td&gt;&lt;code&gt;AIRFRAME_REPAIR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;52431&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TOTAL_AIR_HOURS&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pilot pay&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PILOT_FLY_OPS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;51230&lt;/td&gt;
&lt;td&gt;&lt;code&gt;TOTAL_AIR_HOURS&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 2. The first three are third-party spend arriving as vendor invoices. Pilot pay is account 51230 (salaries), not meeting invoice matching. It is carried through the figures as a rate that is contracted but not invoiced.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.3 Units
&lt;/h3&gt;

&lt;p&gt;Amounts are reported in thousands of dollars and quantities in thousands. Therefore, amount divided by driver yields dollars per gallon and dollars per flight hour.&lt;/p&gt;

&lt;p&gt;Two independent checks:&lt;/p&gt;

&lt;p&gt;The fuel rate resolves to &lt;strong&gt;$2.43 per gallon&lt;/strong&gt;. US Gulf Coast kerosene-type jet fuel spot averaged &lt;strong&gt;$2.23&lt;/strong&gt; over the same 24 months. The filed figure therefore sits about 9 per cent above the spot benchmark. This is the correct direction and a plausible magnitude where account 51451 is delivered cost, carrying the supplier differential, the into-plane fee and taxes on top of spot. In contrast, a figure below spot, or one several times it, would indicate a units error.&lt;/p&gt;

&lt;p&gt;Pilot pay resolves to &lt;strong&gt;$1,498 per flight hour&lt;/strong&gt;, which falls in the published range for narrowbody crew cost per block hour. The two checks are independent of each other.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.4 Filters applied
&lt;/h3&gt;

&lt;p&gt;Rows below $100,000 of quarterly spend are excluded, since rounding in the filing dominates the implied rate at that scale. A carrier and aircraft type requires at least four quarters on file before it is treated as having an established rate of its own. After filtering, fuel retains 2,175 rows across 143 carrier and aircraft combinations.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.5 A mixed population in the fuel data
&lt;/h3&gt;

&lt;p&gt;132 fuel rows, 6.1 per cent of the file, imply a rate below $1.00 per gallon. These are regional carriers operating capacity purchase agreements and ACMI cargo operators, which burn fuel a partner pays for, so gallons are reported against little or no cost. The carriers concerned are SkyWest, Republic, Atlas Air and ABX Air. This is a commercial arrangement, not a reporting error. The rows are retained.&lt;/p&gt;

&lt;p&gt;The effect on each measure differs, as the table below shows.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fuel&lt;/th&gt;
&lt;th&gt;n&lt;/th&gt;
&lt;th&gt;Median rate&lt;/th&gt;
&lt;th&gt;Pooled R²&lt;/th&gt;
&lt;th&gt;Within band&lt;/th&gt;
&lt;th&gt;Variance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;As published&lt;/td&gt;
&lt;td&gt;2,175&lt;/td&gt;
&lt;td&gt;$2.43&lt;/td&gt;
&lt;td&gt;0.922&lt;/td&gt;
&lt;td&gt;0.689&lt;/td&gt;
&lt;td&gt;0.039&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excluding under $1.00/gal&lt;/td&gt;
&lt;td&gt;2,043&lt;/td&gt;
&lt;td&gt;$2.45&lt;/td&gt;
&lt;td&gt;0.986&lt;/td&gt;
&lt;td&gt;0.862&lt;/td&gt;
&lt;td&gt;0.036&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 3. R² shifts substantially, whereas the median rate and variance remain largely unchanged.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A measure built on medians tolerates a mixed population. One built on squared deviations does not. In accounts payable, applying a single tolerance at vendor group level may fail when one charge code covers multiple pricing structures.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Analysis
&lt;/h2&gt;

&lt;p&gt;Two measures are computed for each charge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Measurement&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Driver&lt;/td&gt;
&lt;td&gt;The quantity determining the amount. Gallons for fuel, flight hours for repair&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unit rate&lt;/td&gt;
&lt;td&gt;Amount divided by driver. Dollars per gallon, dollars per flight hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Benchmark&lt;/td&gt;
&lt;td&gt;The reference a unit rate is compared against. Check 3.2 for defined benchmarks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R²&lt;/td&gt;
&lt;td&gt;The share of variation in the amount explained by the driver, from 0 to 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Median&lt;/td&gt;
&lt;td&gt;The middle observation of data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interquartile range (IQR)&lt;/td&gt;
&lt;td&gt;The span covering the 25th to the 75th per centile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Variance&lt;/td&gt;
&lt;td&gt;IQR divided by the median. A value of 0.04 means the middle half sit within 4 per cent of the benchmark. In this article, this is a measure of dispersion.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;The measurement terms used from here on.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Drivers
&lt;/h3&gt;

&lt;p&gt;An ordinary least squares fit of &lt;code&gt;amount = a + b × driver&lt;/code&gt;, reported as R².&lt;/p&gt;

&lt;p&gt;Pooled R² is inflated in this dataset because carrier size correlates with both variables independently of any pricing discipline. The fit is therefore repeated within driver size quartiles and averaged, which removes most of that effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Unit Rate
&lt;/h3&gt;

&lt;p&gt;The amount divided by the quantity gives the unit rate. A variance value of 0.04 indicates that the middle half of observations price within 4 per cent of their benchmark.&lt;/p&gt;

&lt;p&gt;A charge is treated here as worth automating where that variance falls below 0.15. The threshold is a judgement and not a derived value, and is named again in Limits. Variance is reported as a decimal in the tables that follow.&lt;/p&gt;

&lt;p&gt;The benchmarks chosen for this model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Industry.&lt;/strong&gt; A single rate across all carriers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexed.&lt;/strong&gt; The median rate within the same quarter, removing market movement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Own rate.&lt;/strong&gt; The carrier's own median, without market movement.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In purchase agreement terms, these correspond to no agreement, an index-linked agreement, and a vendor-specific trade agreement.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Results
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Driver explanatory power
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Charge&lt;/th&gt;
&lt;th&gt;Pooled R²&lt;/th&gt;
&lt;th&gt;Within size band&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Aircraft fuel&lt;/td&gt;
&lt;td&gt;0.92&lt;/td&gt;
&lt;td&gt;0.69&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine repair&lt;/td&gt;
&lt;td&gt;0.51&lt;/td&gt;
&lt;td&gt;0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airframe repair&lt;/td&gt;
&lt;td&gt;0.43&lt;/td&gt;
&lt;td&gt;0.11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 4. Gallons account for most of the variation in fuel spend. Flight hours account for little of the variation in repair spend.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feh7yu6yglg5i0jhn1j1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feh7yu6yglg5i0jhn1j1t.png" alt="Spend vs. Driver Quantity: fuel cost against gallons issued, and airframe repair cost against flight hours" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 1. The fuel relationship is close to linear. The repair relationship is dispersed.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Rate variance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Charge&lt;/th&gt;
&lt;th&gt;Unit rate&lt;/th&gt;
&lt;th&gt;Variance against own rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Aircraft fuel&lt;/td&gt;
&lt;td&gt;$2.43 / gallon&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine repair&lt;/td&gt;
&lt;td&gt;$334 / flight hour&lt;/td&gt;
&lt;td&gt;0.23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airframe repair&lt;/td&gt;
&lt;td&gt;$285 / flight hour&lt;/td&gt;
&lt;td&gt;0.32&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 5. An eightfold difference between fuel and airframe repair, on identical carriers, aircraft and quarters.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm7f627rx2bpv7xcrkj8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm7f627rx2bpv7xcrkj8h.png" alt="Invoice deviation from benchmark" width="799" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 2. Each invoice divided by its own benchmark. The variance in Table 5 is the width of these distributions expressed as one number.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Effect of benchmark choice
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Charge&lt;/th&gt;
&lt;th&gt;vs industry&lt;/th&gt;
&lt;th&gt;vs same quarter&lt;/th&gt;
&lt;th&gt;vs own rate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Aircraft fuel&lt;/td&gt;
&lt;td&gt;0.16&lt;/td&gt;
&lt;td&gt;0.08&lt;/td&gt;
&lt;td&gt;0.04&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine repair&lt;/td&gt;
&lt;td&gt;1.20&lt;/td&gt;
&lt;td&gt;1.14&lt;/td&gt;
&lt;td&gt;0.23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airframe repair&lt;/td&gt;
&lt;td&gt;1.27&lt;/td&gt;
&lt;td&gt;1.20&lt;/td&gt;
&lt;td&gt;0.32&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 6. Read across rows.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frh136svsw8osl4gepzco.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frh136svsw8osl4gepzco.png" alt="Cost Variance vs. Automation Threshold: rate variance for each charge against three benchmarks" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 3. Fuel variance falls below the 0.15 threshold only once the benchmark accounts for the quarter.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Indexing reduces fuel variance from 0.16 to 0.08, and vendor-specific pricing reduces it again to 0.04. Indexing therefore accounts for half of the total improvement. For repair, all three benchmarks remain wide.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Review load
&lt;/h3&gt;

&lt;p&gt;A tolerance flags every line whose deviation from its benchmark exceeds it, so the share flagged is the workload the control creates. That share differs by charge as sharply as the variance.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Charge&lt;/th&gt;
&lt;th&gt;5%&lt;/th&gt;
&lt;th&gt;10%&lt;/th&gt;
&lt;th&gt;15%&lt;/th&gt;
&lt;th&gt;25%&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Aircraft fuel&lt;/td&gt;
&lt;td&gt;13%&lt;/td&gt;
&lt;td&gt;10%&lt;/td&gt;
&lt;td&gt;9%&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine repair&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;26%&lt;/td&gt;
&lt;td&gt;23%&lt;/td&gt;
&lt;td&gt;18%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airframe repair&lt;/td&gt;
&lt;td&gt;38%&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;td&gt;26%&lt;/td&gt;
&lt;td&gt;17%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Table 7. Share of invoices sent for manual review at each price tolerance, measured against the benchmark that holds each charge tightest.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjp2a4tihqwhjjb9wz2km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjp2a4tihqwhjjb9wz2km.png" alt="Review Load vs. Price Tolerance" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 4. At every tolerance, the repair charges flag two to three times as many invoices as fuel.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At a 10 per cent tolerance fuel sends one invoice in ten for review, whereas airframe repair sends close to one in three. Section 4.2 shows there is no stable rate for that review to check against.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Discussion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 The path an amount takes
&lt;/h3&gt;



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    TA["Trade agreement or&amp;lt;br/&amp;gt;purchase agreement"]
    QUOTE["Buyer enters a quote&amp;lt;br/&amp;gt;onto the PO"]
    ADDED["Line added at invoice entry,&amp;lt;br/&amp;gt;not on the PO"]

    PO["Purchase order line&amp;lt;br/&amp;gt;price, quantity, charges"]
    RCPT["Product receipt"]
    INV["Vendor invoice"]

    LMP{"Line matching policy"}
    PRICE["Price check&amp;lt;br/&amp;gt;net unit price, price totals"]
    QTY["Quantity check&amp;lt;br/&amp;gt;vs received quantity"]
    NOLINE["No line matching"]

    MCH{"Match charges&amp;lt;br/&amp;gt;legal entity"}
    CTOG{"Charges code:&amp;lt;br/&amp;gt;Compare PO and invoice values"}
    CCHK["Charges check&amp;lt;br/&amp;gt;vs Charges tolerances"]
    CGAP["Charge not matched"]

    TTOG{"Match invoice totals&amp;lt;br/&amp;gt;legal entity"}
    TCHK["Invoice totals check"]
    TGAP["Line not matched"]

    LEDGER["Posted to the ledger"]

    TA --&amp;gt;|rung 1| PO
    QUOTE --&amp;gt;|rung 2| PO

    PO --&amp;gt; LMP
    RCPT --&amp;gt; LMP
    INV --&amp;gt; LMP
    LMP --&amp;gt;|two-way or three-way| PRICE
    LMP --&amp;gt;|three-way only| QTY
    LMP --&amp;gt;|not required| NOLINE

    PO --&amp;gt; MCH
    MCH --&amp;gt;|on| CTOG
    MCH --&amp;gt;|off| CGAP
    CTOG --&amp;gt;|selected| CCHK
    CTOG --&amp;gt;|not selected| CGAP

    ADDED --&amp;gt;|rung 3| TTOG
    TTOG --&amp;gt;|on| TCHK
    TTOG --&amp;gt;|off| TGAP

    PRICE --&amp;gt; LEDGER
    QTY --&amp;gt; LEDGER
    NOLINE --&amp;gt; LEDGER
    CCHK --&amp;gt; LEDGER
    CGAP --&amp;gt; LEDGER
    TCHK --&amp;gt; LEDGER
    TGAP --&amp;gt; LEDGER

    classDef strong fill:#dcecdc,stroke:#3a7d3a,color:#0b0b0b
    classDef weak fill:#fbe8cd,stroke:#b8761c,color:#0b0b0b
    classDef gap fill:#f6d8d4,stroke:#b0443a,color:#0b0b0b
    classDef check fill:#e8eef6,stroke:#2a78d6,color:#0b0b0b

    class TA strong
    class QUOTE,ADDED weak
    class NOLINE,CGAP,TGAP gap
    class PRICE,CCHK,TCHK check
    class QTY strong&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Figure 5. Colour represents the strength of the reference behind each check, blue marking the checks and red the paths where no check happens.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Charges codes appear on the purchase order, and charges matching compares the invoice charge to the PO charge. A line added at invoice entry that was not on the purchase order, falls outside line matching and is covered by invoice totals matching only.&lt;/p&gt;

&lt;p&gt;Observations from the diagram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Price check strength derives from the source.&lt;/strong&gt; The comparison is identical whether the PO price originates from a trade agreement or from manual buyer entry, producing the same match status in both cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quantity check strength derives from the product receipt.&lt;/strong&gt;Invoiced quantity and received quantity are both recorded values rather than judgements, so the check needs no rate, no tolerance and no master data. It runs under a three-way policy only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Three branches reach the ledger without a line-level comparison:&lt;/strong&gt; a PO line under a Not required matching policy, a charges code with &lt;code&gt;Compare purchase order and invoice values&lt;/code&gt; not selected (or &lt;code&gt;Match charges&lt;/code&gt; off at legal entity level), and an invoice-entry line with &lt;code&gt;Match invoice totals&lt;/code&gt; off.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.2 Configuration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Fuel belongs on rung 1.&lt;/strong&gt; Its rate holds to 0.04 against a vendor-specific indexed benchmark, which is stable enough to sit in a purchase agreement. Since half the available improvement comes from indexing to the period rather than from vendor-specific pricing, the agreement would benefit from a refresh process tied to the index.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repair remains on rung 2.&lt;/strong&gt; No benchmark brings its variance near 0.15, so no stable rate exists to place in master data. Each PO price will be a per-event quote, and matching will do no more than confirm it, at the review cost shown in section 4.4. That limitation belongs to the charge instead of the configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quantity matching does not depend on the rung.&lt;/strong&gt; Set &lt;strong&gt;Line matching policy&lt;/strong&gt; to &lt;strong&gt;Three-way match&lt;/strong&gt; on &lt;strong&gt;Accounts payable &amp;gt; Setup &amp;gt; Accounts payable parameters&lt;/strong&gt;, on the &lt;strong&gt;Invoice validation&lt;/strong&gt; tab, together with &lt;strong&gt;Enable invoice matching validation&lt;/strong&gt;, wherever a product receipt is taken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price tolerances.&lt;/strong&gt; Set on &lt;strong&gt;Accounts payable &amp;gt; Setup &amp;gt; Invoice matching setup &amp;gt; Price tolerances&lt;/strong&gt;, resolving from item and vendor down to All/All. The legal entity default is 0 per cent and cannot be deleted, so any price variance is reported until a tolerance is entered. Override the matching policy per vendor or item on &lt;strong&gt;Accounts payable &amp;gt; Setup &amp;gt; Invoice matching setup &amp;gt; Matching policy&lt;/strong&gt;, which resolves item and vendor, then item, then vendor, then legal entity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Charges.&lt;/strong&gt; Enable &lt;strong&gt;Match charges&lt;/strong&gt; in Accounts payable parameters and set the &lt;strong&gt;Charges tolerances&lt;/strong&gt; page. Charges matching runs only on charges codes where &lt;strong&gt;Compare purchase order and invoice values&lt;/strong&gt; is selected on the Charges code page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicate invoice numbers.&lt;/strong&gt; The &lt;code&gt;Check the invoice number used&lt;/code&gt; parameter in Accounts payable parameters, set to &lt;code&gt;Reject duplicate&lt;/code&gt; or &lt;code&gt;Reject duplicates within fiscal year&lt;/code&gt;, applies independently of any rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 What the analysis supports
&lt;/h3&gt;

&lt;p&gt;The analysis establishes which charges can be driven from master data and how a fuel agreement should be structured. Everything else in section 5.2 comes from the product documentation, and the rung model in section 1 follows from how matching is defined.&lt;/p&gt;

&lt;p&gt;Price protection in F&amp;amp;O grows with the quality of the master data behind the purchase order, whereas quantity protection is independent of it. Where no stable rate can be established such as in section 4 for engine and airframe repair, the constraint is commercial and no configuration will be able to remove it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;p&gt;The filings are quarterly aggregates rather than individual invoices. A quarter combines many transactions, so part of the reported variance reflects differences in work mix rather than pricing. The ordering between charges is the result. The absolute values are not tolerance settings.&lt;/p&gt;

&lt;p&gt;Three parameters are judgement rather than derived: the $100,000 minimum row, the four-quarter minimum history, and the 0.15 variance threshold marked on Figure 3.&lt;/p&gt;

&lt;p&gt;No evidence of overcharging at any carrier is presented, and no carrier is identified as such. The analysis addresses which charges can be checked, not what any operator would recover.&lt;/p&gt;

&lt;p&gt;Configuration detail is taken from Microsoft Learn and has not been verified against a specific implementation. Version differences apply.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reproducing this
&lt;/h2&gt;

&lt;p&gt;The source codes and datasets are at &lt;a href="https://github.com/kingomnivore/airline-invoices-dynamics365-fno" rel="noopener noreferrer"&gt;github.com/kingomnivore/airline-invoices-dynamics365-fno&lt;/a&gt;. Clone it, &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;, then &lt;code&gt;python run.py&lt;/code&gt;. The filings are committed, so it should run as cloned.&lt;/p&gt;

&lt;p&gt;The recipe below describes the same analysis independently of the code, for anyone who would rather rebuild it. It is a download, 4 filters and 2 ratios, without the modelling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Get the data.&lt;/strong&gt; From &lt;a href="https://www.transtats.bts.gov/Tables.asp?QO_VQ=EGI" rel="noopener noreferrer"&gt;TranStats, Air Carrier Financial, Schedule P-5.2&lt;/a&gt;, select all fields, set Quarter to All Quarters, and download 2024 and 2025. Concatenate them. The amount and driver columns for each charge are in Table 2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Filter.&lt;/strong&gt; Keep rows where the amount exceeds 100 and the driver exceeds 0. Amounts are in thousands. Keep only carrier and aircraft type combinations with at least four quarters on file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Unit rate.&lt;/strong&gt; Divide amount by driver. Both columns carry the same factor of a thousand, so the result is dollars per gallon and dollars per flight hour directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Explanatory power.&lt;/strong&gt; Fit &lt;code&gt;amount = a + b x driver&lt;/code&gt; by ordinary least squares and take R2. Then split the rows into quartiles by driver, refit inside each, and average those. The second figure is the one to report, since carrier size inflates the first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. The benchmarks.&lt;/strong&gt; Each is the unit rate divided by a reference.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Industry&lt;/td&gt;
&lt;td&gt;The median rate across all rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indexed&lt;/td&gt;
&lt;td&gt;The median rate within the same year and quarter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Own rate&lt;/td&gt;
&lt;td&gt;The indexed deviation divided by its own median within each carrier and aircraft type&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;6. Variance.&lt;/strong&gt; For each set of deviations, take the 75th per centile minus the 25th, divided by the median.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Check.&lt;/strong&gt; The fuel median should be $2.43 per gallon and pilot pay roughly $1,498 per flight hour. The two are independent, check if either are off the column for units.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chosen parameters.&lt;/strong&gt; The $100,000 floor, the four-quarter minimum, and the 0.15 threshold drawn on Figure 3 were deliberate choices assumed.&lt;/p&gt;




&lt;h2&gt;
  
  
  On method
&lt;/h2&gt;

&lt;p&gt;The analysis code and the initial draft were produced with Claude Code. The dataset and the configuration claims were verified against the sources listed below before publication. The code is public on the repository.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/finance/accounts-payable/accounts-payable-invoice-matching" rel="noopener noreferrer"&gt;Accounts payable invoice matching overview, Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/finance/accounts-payable/tasks/set-up-accounts-payable-invoice-matching-validation" rel="noopener noreferrer"&gt;Set up Accounts payable invoice matching validation, Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/finance/accounts-payable/three-way-matching-policies" rel="noopener noreferrer"&gt;Three-way matching policies, Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/dynamics365/finance/accounts-payable/vendor-invoices-overview" rel="noopener noreferrer"&gt;Vendor invoices overview, Microsoft Learn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kingomnivore/airline-invoices-dynamics365-fno" rel="noopener noreferrer"&gt;Analysis code and data, GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.transtats.bts.gov/Tables.asp?QO_VQ=EGI" rel="noopener noreferrer"&gt;BTS TranStats, Air Carrier Financial Reports, Schedule P-5.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.eia.gov/dnav/pet/hist/eer_epjk_pf4_rgc_dpgM.htm" rel="noopener noreferrer"&gt;EIA, US Gulf Coast Kerosene-Type Jet Fuel Spot Price FOB, monthly&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;About Author&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dean Fachrie is a Functional Analyst at CodeCore Dynamics LLC, working on Microsoft Dynamics 365 F&amp;amp;O architecture and enterprise system design.&lt;/p&gt;

&lt;p&gt;Working on a complex F&amp;amp;O implementation or evaluation?&lt;/p&gt;

&lt;p&gt;We help enterprise finance teams design clean, automated procurement and invoice-matching workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codecoredynamics.com/contact/" rel="noopener noreferrer"&gt;Contact us&lt;/a&gt; or connect on &lt;a href="https://www.linkedin.com/company/codecore-dynamics" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; for architecture reviews.&lt;/p&gt;

</description>
      <category>erp</category>
      <category>dynamics365</category>
      <category>microsoft</category>
    </item>
  </channel>
</rss>
