Home / DC Solutions / Technical Manuals / Critical Spares Engine

Technical Manual · Spares & Obsolescence

Critical Spares Engine — Methodology & Formulas

Every input, equation, constant, output, and reference behind the Critical Spares Engine. Seven analytical modules — FMECA criticality, readiness gauge, newsvendor optimal stock, METRIC/MEIO two-echelon hub positioning, supplier risk index, DMSMS last-time-buy economics, and Kraljic sourcing strategy — are executed deterministically by RZEngine.models.spares in rz-engine.js. No random values except in the explicitly flagged Monte-Carlo block.

Engine RZEngine v2.5+ models.spares Basis MIL-STD-1629A · Sherbrooke METRIC · Acklam Φ⁻¹ Modules 8 Outputs 20+
▶ Open the live Critical Spares Engine

01 Purpose & engineering basis

Data-center M&E equipment failures cost tens of thousands of dollars per hour in downtime. The Critical Spares Engine answers five planning questions: how critical is each spare part, how many should be held on site and at a regional hub, when and how many to buy before a part is discontinued, which supplier relationships carry the most supply risk, and what sourcing strategy is appropriate for each commodity.

The engine is grounded in four interlocking bodies of theory. FMECA (MIL-STD-1629A) provides the criticality framework — severity, detectability, and occurrence combine into a Risk Priority Number that tiers parts into VITAL / ESSENTIAL / DESIRABLE. Newsvendor theory (the critical-fractile model, Whitin 1955 / Porteus 1990) provides the cost-minimising stock level Q* balancing over-stock and under-stock costs. METRIC and MEIO (Sherbrooke 1968; Axsäter VARI-METRIC; Clark-Scarf 1960) extend this to multi-echelon hub-and-spoke networks where marginal analysis allocates stock across hub and sites jointly. DMSMS (Diminishing Manufacturing Sources and Material Shortages, SD-22) governs the last-time-buy and requalification decision when a part reaches end-of-life.

02 Inputs

Inputs across the eight modules. The commodity selector auto-fills λ, installed base, severity, lead time, unit cost, and understock cost with realistic DC M&E industry defaults; all fields are editable to actual fleet data.

FieldSymbolUnitDefaultMeaning
Annual failure rate c1_lambdaλfailures/yr0.25Expected failures per unit per year = 1 / MTBF_years. Typical DC M&E range: 0.04–0.25.
Installed base c1_installedNunits4Count of this equipment type at the site. Scales fleet failure rate and fleet demand.
Severity c1_severityS1–108Consequence if failure reaches the operation. 1 = negligible; 9 = full site outage; 10 = safety. Per MIL-STD-1629A scale.
Detectability c1_detectabilityD1–106Difficulty of detecting failure before outage. 1 = alarm-monitored; 10 = sudden no warning. Higher = harder to catch.
Redundancy c1_redundancyrenumN+1System redundancy: N / N+1 / 2N. Reduces effective severity by factors 1.0 / 0.65 / 0.40.
Qualified alternates c1_alternatesacount1Number of approved substitute suppliers. Alternate factor = 1 / max(1, a); raises supply exposure when sole-sourced.
Unit cost s_unit_costCuUSD4 500Procurement cost per spare unit (list price or contract rate).
Understock cost s_understk_costCuUSD/event85 000Financial exposure per stockout event — downtime cost, emergency freight, expedite premium.
Carrying cost rate s_carry_raterc%/yr25Annual holding cost as fraction of unit value: capital (~10%), storage (~4%), insurance (~2%), obsolescence (~9%).
Part life s_part_lifeLpyr8Expected service life of the spare before obsolescence or physical degradation. Sets Co time horizon.
Annual demand mean s_demand_muμAunits/yr1.0Mean demand per year across the fleet = λ × N. Sigma defaults to μ × 0.6.
Lead time (mean) s_lt_weeksLTweeks16Supplier replenishment lead time from PO to delivery.
Lead time sigma s_lt_sigmaσLTweeks4Standard deviation of lead time — captures supplier variability and logistics uncertainty.
Target fill rate s_fill_rateFR%99Fraction of demand events fulfilled immediately from stock. Drives safety stock SS = z(FR) × σ_demand_during_LT.
Hub inputs h_*varioussee toolNumber of sites (4), part types (6), OEM lead time (20 wk), hub-to-site lead time (0.5 wk), budget ($200 K).
DMSMS inputs ltb_*varioussee toolYears to EOL, annual demand, unit cost, holding rate, criticality, alternate qualification cost, requalification cost.

03 Calculation methodology

Eight modules in sequence. Function anchors map to RZEngine.models.spares.* in rz-engine.js and to the matching calc*() in spares-readiness-calculator.html.

M1 — FMECA Criticality & RPN

S_eff = S × redFactor (redFactor: N=1.00, N+1=0.65, 2N=0.40) Cm = (S_eff/10) × (D/10) × λ × N RPN = S_eff × D × min(10, λ×10) [capped at 1000] Fleet failures/yr = λ × N Alternate factor = 1 / max(1, a) Tier: VITAL Cm≥0.5 · ESSENTIAL 0.1≤Cm<0.5 · DESIRABLE Cm<0.1 In calcCriticality(). Cm is the MIL-STD-1629A criticality number normalised to an annual annualised basis. RPN is analogous to FMEA = Severity × Occurrence × Detection. MIL-STD-1629A · STANDARD

M2 — Spare Readiness Gauge

PO confidence = 1.0 if (PO + commit + on-time) else 0.5 (unconfirmed) or 0.3 (late commit) Confirmed supply = on-hand + PO_qty × PO_confidence Readiness % = min(100, confirmed_supply / required × 100) Date slack (days) = need_date − commit_date Status: GREEN readiness≥100% and slack≥7d · YELLOW ≥80% · RED <80% or commit late In calcReadiness(). No engine kernel call — arithmetic on procurement data. DC O&M PRACTICE · PROPRIETARY

M3 — Newsvendor Optimal Stock (critical-fractile)

L = LT_weeks / 52 (lead time in years) μ_LT = μ_A × L (mean demand during LT) σ_LT = √( L·σ_A² + μ_A²·σ_LT_yr² ) (demand-during-LT sigma) Co = r_c × C_unit × L_p (over-stock cost) CR = C_u / (C_u + Co) (critical ratio) Q* = min k : P(X≤k; Poisson(μ_LT)) ≥ CR [if μ_LT < 5] Q* = max(0, ⌈μ_LT + Φ⁻¹(CR)·σ_LT⌉) [if μ_LT ≥ 5] SS = max(0, ⌈Φ⁻¹(FR) · σ_LT⌉) (safety stock for fill-rate) ROP = ⌈μ_LT + SS⌉ (reorder point) Fill% = P(X≤Q*; Poisson(μ_LT)) or Φ((Q*−μ_LT)/σ_LT) Cost = (Co/L_p)·max(0,Q*−μ_LT) + C_u·μ_A·(1−Fill%) In RZEngine.models.spares.newsvendor(input). Poisson mode auto-selected when μ_LT < DATA.spares.poissonThresholdMuLt = 5. Φ⁻¹ via Acklam (2003): RZEngine.models.spares.normInv(p). Whitin 1955 / Porteus 1990 · ACKLAM 2003

Poisson CDF kernel — slow-mover demand model

P(X≤k; λ) = Σ_{i=0}^{k} e^{−λ} · λ^i / i! (exact partial sum) ≈ Φ((k+0.5−λ)/√λ) (continuity-corrected Normal, only when λ>200) P(X≥1 stockout) = 1 − P(X≤Q*; λ_LT) In RZEngine.models.spares.poissonCdf(k, lambda). Exact partial sum for λ≤200; normal-continuity approximation only beyond. M&E spares are always well below λ=200. ABRAMOWITZ & STEGUN 26.4 · STANDARD

Inverse Normal CDF (Acklam kernel)

Φ⁻¹(p) — Acklam (2003) rational approximation, three-region piecewise |relative error| < 1.15×10⁻⁹ (vs Beasley-Springer-Moro 1977 |e|<4.5×10⁻⁴) Used for: Q* in Normal mode, safety-stock z-score, MEIO fill targets In RZEngine.models.spares.normInv(p). Coefficients in DATA.spares.acklamA/B/C/D, threshold DATA.spares.acklamPLow = 0.02425. Also underpins alarm-management Poisson model. DATA.sources['spares.acklam'] · ACKLAM 2003

M4 — METRIC / MEIO Two-Echelon Hub Positioning

λ_regional = N_sites × λ_site × LT_vendor_yr (Poisson demand at regional hub) B(s, λ) = λ·(1−CDF(s−1,λ)) − s·(1−CDF(s,λ)) (expected backorders at hub stock s) eff_LT_site = LT_hub_to_site + B(s1, λ_reg) / (N_sites × λ_site) λ_site_eff = λ_site × eff_LT_site Fill_site(s1, s2) = P(X≤s2; Poisson(λ_site_eff)) Marginal gain per $ = ΔFill / (unit_cost × holding_pct) Allocate next unit to echelon with higher marginal gain/$ until fill-target reached In calcMEIO() and calcHub(). Implements the Sherbrooke (1968) METRIC insight: hub backorders increase effective site lead time, and marginal analysis allocates each unit optimally across echelons. SHERBROOKE 1968 / AXSÄTER VARI-METRIC · ACADEMIC

M5 — Supplier Risk Index

SRI = Σ w_i × score_i where scores are: OTIF (18%), single-source (16%), financial health (14%), lead-time volatility (14%), geographic concentration (12%), capacity headroom (10%), geopolitical risk (10%), contract status (6%) Tier: CRITICAL SRI≥7.0 · HIGH 5.5–7.0 · MEDIUM 3.5–5.5 · LOW <3.5 In calcSupplierRisk(). OTIF (On-Time In-Full %) is inverted: score = (100 − OTIF%) / 10. Weights sum to 1.00. SUPPLY-CHAIN PRACTICE · PROPRIETARY RUBRIC

M6 — DMSMS / Last-Time-Buy Economics

DMSMS score = f(criticality, years_to_EOL, alternates, requalification_cost) LTB economic qty = ⌈μ_A × remaining_life_yrs × (1 + buffer_pct)⌉ LTB cost = LTB_qty × unit_cost Stockout exposure (no LTB) = μ_A × remaining_yrs × Cu × P(stockout per yr) Decision: BUY if LTB_cost < stockout_exposure + requalification_cost In calcLTB(). Buffer_pct = 15% default for consumption uncertainty. DMSMS tiers follow SD-22 exposure bands: Low / Medium / High / Critical. DMSMS SD-22 · DOD STANDARD

M7 — Kraljic Sourcing Matrix

x-axis: Supply Risk score (1–10) = f(single_source, geo_conc, OTIF, geopolitical, qualified_suppliers) y-axis: Spend Impact score (1–10) = f(criticality, unit_cost, annual_spend) Quadrant: Strategic (high-risk, high-impact) → partnership + dual-source Bottleneck (high-risk, low-impact) → secure supply, safety stock Leverage (low-risk, high-impact) → competitive bidding Non-critical (low-risk, low-impact) → simplify, consolidate In calcKraljic(). Per Kraljic (1983) HBR "Purchasing Must Become Supply Management". KRALJIC 1983 HBR · ACADEMIC

M8 — Monte-Carlo Stress Test

For each trial t = 1 … N_trials (10 000): LT_t ~ Normal(LT_mean, σ_LT) (or Triangular for asymmetric) demand_t ~ Poisson(μ_A × LT_t/52) for slow movers supply_t = stock × supplier_reliability_t stockout_t = demand_t > supply_t P(stockout) = count(stockout_t) / N_trials P5 / P50 / P95 readiness from sorted readiness_t distribution In calcMonteCarlo(). Uses Math.random() (browser CSPRNG) for trial sampling only — all deterministic modules are unaffected. Tornado chart ranks input variable contribution to P(stockout) variance. MONTE-CARLO METHOD · STANDARD

04 Constants & data sources

All numerical constants live in the deep-frozen DATA object with a // source: tag in rz-engine.js. Key blocks:

DATA keyValue / RangeMeaningSource
DATA.spares.poissonThresholdMuLt5μ_LT threshold below which Poisson CDF is used instead of Normal for Q*.Statistical practice
DATA.spares.acklamPLow0.02425Tail-region threshold for Acklam Φ⁻¹ rational approximation.Acklam (2003)
DATA.spares.acklamA/B/C/D6+5+6+4 coefficientsRational polynomial coefficients for three-region Φ⁻¹ approximation. |relative error| < 1.15×10⁻⁹.DATA.sources['spares.acklam']
Redundancy severity factorsN=1.00, N+1=0.65, 2N=0.40Multiplier applied to raw severity S to obtain S_eff. Reflects probability of second-failure exposure given N+1 or 2N architecture.DC FMECA engineering practice
VITAL threshold Cm≥ 0.50Criticality number above which stockout is unacceptable — STOCK + DUAL-SOURCE decision.MIL-STD-1629A adapted
ESSENTIAL threshold Cm0.10 – 0.50Criticality range requiring stock; single-source acceptable.MIL-STD-1629A adapted
DATA.sparesPricing.classes8 classesUnit list-price bands (low/mid/high, USD) for UPS 50 kW module, VRLA string, genset PM kit, genset top-overhaul, chiller compressor, CRAH EC fan kit, PDU MCCB breaker, air filter set.DATA.sources['sparesPricing']
DMSMS LTB buffer15%Consumption uncertainty buffer added to the deterministic LTB quantity. Conservative; adjust upward for higher demand variance parts.SD-22 engineering practice
Normal CDF coefficientsAbramowitz-Stegun 26.2.175-term rational polynomial for normCdf(x); |error| ≤ 7.5×10⁻⁸. Used for fill-rate achieved calculation in Normal mode.Abramowitz & Stegun (1964)
CommodityTypical λ (failures/yr)Typical unit costTypical LT (weeks)FMECA severity default
UPS 50 kW power module0.20 – 0.30$25 K – $60 K12 – 209 (N config)
UPS VRLA battery string0.12 – 0.20$8 K – $15 K4 – 88
Genset annual PM kit1.00$5 K – $15 K2 – 45
Genset top overhaul0.10 – 0.15$60 K – $150 K16 – 249
Chiller centrifugal compressor0.10 – 0.20$80 K – $250 K20 – 329 (N config)
CRAH EC/VFD fan retrofit kit0.15 – 0.25$8 K – $20 K6 – 126
PDU/MCCB breaker (DC-grade)0.05 – 0.10$1 K – $5 K2 – 67
CRAH G4 filter set3.00 (annual change)$1.5 K – $4 K1 – 33

Pricing bands sourced from: Schneider/APC Galaxy VS module class (public list), criticalpowerbatterysolutions.com VRLA TCO 2026, OnPoint/Secondwatt genset maintenance guides 2026, and industrial MCCB distributor ranges. All bands are SCREENING level — not quotation or contract prices. See DATA.sources['sparesPricing'].

05 Outputs

OutputSymbol / FormulaUnitInterpretation
Criticality tierCm thresholdVITAL / ESSENTIAL / DESIRABLEPrimary stocking decision: VITAL → STOCK + DUAL-SOURCE; ESSENTIAL → STOCK; DESIRABLE → don't stock.
Risk Priority NumberRPN = S_eff × D × min(10, λ×10)1 – 1000FMECA composite risk score. >100 indicates VITAL-tier stocking pressure.
Fleet failures / yrλ × Nevents/yrExpected annual failure events across the installed fleet — the demand signal for stock sizing.
Readiness %confirmed_supply / required × 100%Current coverage of the stated requirement. GREEN ≥ 100%; YELLOW 80–100%; RED < 80%.
Optimal stock Q*Newsvendor critical-fractileunitsCost-minimising stock level balancing Cu and Co over the part life.
Safety stock SS⌈Φ⁻¹(FR) × σ_LT⌉unitsBuffer above mean LT demand needed to achieve the fill-rate target FR.
Reorder point ROP⌈μ_LT + SS⌉unitsOn-hand inventory level at which a replenishment order should be placed.
Critical ratio CRCu / (Cu + Co)0 – 1Fractile of the demand distribution to stock against. CR > 0.9 typically signals VITAL classification.
Fill rate achievedP(X ≤ Q*; Poisson(μ_LT))%Fraction of demand events met from stock at Q*. Compare to target FR.
Annual cost at Q*(Co/L_p)·excess + Cu·μ_A·(1−Fill%)USD/yrTotal carrying + expected-stockout cost at the optimal stock level.
P5 / P50 / P95 readinessMonte-Carlo percentiles%Stochastic readiness distribution across 10 000 scenarios. P5 = worst-case 5th percentile.
P(stockout)MC fraction of trials with stockout%Target < 5% for VITAL parts. Driven by lead-time jitter, demand variability, supplier reliability.
Expected downtime costP(stockout) × Cu × μ_A × horizon_yrsUSDExpected financial exposure from stockout events over the planning horizon.
Hub s1 / Site s2 stockMEIO marginal analysisunitsOptimal allocation of units across hub and sites to reach the fleet-readiness target at minimum cost.
Fleet readinessP(X ≤ s2; Poisson(λ_site_eff))%Fraction of fleet assets serviceable within MTTR given the current hub allocation.
Supplier Risk Index (SRI)Weighted 8-factor score0 – 10CRITICAL ≥ 7.0; HIGH 5.5–7.0; MEDIUM 3.5–5.5; LOW < 3.5.
DMSMS / EOL exposureQualitative DMSMS scoreLow / Medium / High / CriticalUrgency of last-time-buy or requalification action.
LTB economic qty⌈μ_A × years_remaining × 1.15⌉unitsEconomic last-time-buy quantity with 15% consumption uncertainty buffer.
Sourcing quadrantKraljic 2×2Strategic / Leverage / Bottleneck / Non-criticalDrives supplier relationship strategy and contracting approach.
Days of cover(Q* / μ_A) × 365daysHow long Q* stock lasts at the mean annual demand rate.

06 Worked example — UPS 50 kW power module

A 4-unit installed fleet (N = 4), single-string N configuration, λ = 0.25 failures/unit/yr, severity 9/10 (site outage risk), detectability 7/10. Unit cost $40 000, understock cost Cu = $150 000/event, carrying rate 25%/yr, part life 8 yr, lead time 16 weeks ± 4 weeks. Target fill rate 99%. All numbers reproduced exactly by node -e calling RZEngine.models.spares.newsvendor() and poissonCdf().

  1. Redundancy & effective severity (N config): redFactor = 1.00 → S_eff = 9.0/10
  2. FMECA criticality: Cm = (9.0/10) × (7/10) × 0.25 × 4 = 0.630 → tier VITAL (Cm ≥ 0.50) → decision: STOCK + DUAL-SOURCE
  3. RPN: occurrence_scaled = min(10, 0.25 × 10) = 2.5 → RPN = 9.0 × 7 × 2.5 = 158
  4. Fleet failures/yr: 0.25 × 4 = 1.00 events/yr
  5. Lead-time demand (μ_LT): μ_A = 1.0 /yr, L = 16/52 = 0.3077 yr → μ_LT = 1.0 × 0.3077 = 0.308 units → Poisson mode (μ_LT < 5)
  6. σ_LT: √(0.3077 × 0.6² + 1.0² × (4/52)²) = 0.342
  7. Costs: Co = 0.25 × $40 000 × 8 = $80 000 (overstock cost over part life)
  8. Critical ratio: CR = $150 000 / ($150 000 + $80 000) = 0.6522
  9. Q* via Poisson inversion: P(X≤0; 0.308) = e⁻⁰·³⁰⁸ = 0.7351 ≥ CR = 0.6522 → Q* = 0 units (current Q* = 0 is sufficient; add N+1 redundancy to push tier to ESSENTIAL)
  10. Safety stock for 99% fill rate: Φ⁻¹(0.99) = 2.3263 → SS = ⌈2.3263 × 0.342⌉ = ⌈0.796⌉ = 1 unit
  11. Reorder point: ROP = ⌈0.308 + 1⌉ = 2 units
  12. Fill rate achieved at Q*=0: P(X≤0; 0.308) = 73.5% → below 99% target; hold SS=1 to achieve 96.1%
  13. Annual cost at Q*: (Co/8) × max(0, 0−0.308) + $150 000 × 1.0 × (1−0.735) = $0 + $39 700/yr expected stockout exposure
  14. N+1 scenario check: With N+1 redundancy, S_eff = 9 × 0.65 = 5.85, Cm = (5.85/10)×(7/10)×0.25×4 = 0.410 → tier ESSENTIAL, RPN drops to 102
  15. LTB economics (EOL in 5 yr): LTB qty = ⌈1.0 × 5 × 1.15⌉ = 6 units, LTB cost = 6 × $40 000 = $240 000 vs stockout exposure $39 700 × 5 = $198 500 → LTB is marginal; compare against requalification cost to decide
  16. Poisson CDF verification: poissonCdf(k=2, λ=1.3) = Σ_{i=0}^{2} e⁻¹·³ × 1.3^i/i! = 0.857112 (engine-verified)
Engineering reading: a single-string (N) UPS module fleet is VITAL by Cm even with one alternate supplier. Adding N+1 redundancy drops the tier to ESSENTIAL and reduces RPN from 158 to 102 — the redundancy investment also buys a materially lower spares program cost. The fill-rate target of 99% requires holding 1 unit of safety stock beyond Q* = 0, with ROP = 2 units as the replenishment trigger.

07 References & standards

08 Assumptions & limitations

Failure rates are assumed constant (exponential distribution, constant hazard rate) — the model does not directly represent bathtub-curve infant-mortality or wear-out phases; apply a correction factor for end-of-useful-life assets. Poisson demand assumes failures arrive independently; demand aggregation at the fleet level is appropriate for homogeneous fleets but may over-smooth mixed-age cohorts. Lead time is modelled as Normal — the Normal approximation is adequate for σ_LT / μ_LT < 0.5; highly skewed lead times (e.g., long-tail supply disruptions) require scenario analysis via the Monte-Carlo module.

The METRIC two-echelon model assumes a single hub serves all sites with identical lead times; lateral transshipments between sites are not modelled. Spare parts pricing bands in DATA.sparesPricing are public SCREENING benchmarks only — they must be validated against your OEM or distributor contract schedule before use in capital-program budgets.

DMSMS last-time-buy economics are deterministic; they do not model inventory carrying costs after the facility's useful life, nor the probability of alternative requalification success. This tool and manual are an engineering education and pre-design planning aid; all material procurement decisions must be validated against your facilities management programme, OEM contractual terms, and applicable statutory requirements.

▶ Open the live Critical Spares Engine