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.
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.
| Field | Symbol | Unit | Default | Meaning |
|---|---|---|---|---|
Annual failure rate c1_lambda | λ | failures/yr | 0.25 | Expected failures per unit per year = 1 / MTBF_years. Typical DC M&E range: 0.04–0.25. |
Installed base c1_installed | N | units | 4 | Count of this equipment type at the site. Scales fleet failure rate and fleet demand. |
Severity c1_severity | S | 1–10 | 8 | Consequence if failure reaches the operation. 1 = negligible; 9 = full site outage; 10 = safety. Per MIL-STD-1629A scale. |
Detectability c1_detectability | D | 1–10 | 6 | Difficulty of detecting failure before outage. 1 = alarm-monitored; 10 = sudden no warning. Higher = harder to catch. |
Redundancy c1_redundancy | r | enum | N+1 | System redundancy: N / N+1 / 2N. Reduces effective severity by factors 1.0 / 0.65 / 0.40. |
Qualified alternates c1_alternates | a | count | 1 | Number of approved substitute suppliers. Alternate factor = 1 / max(1, a); raises supply exposure when sole-sourced. |
Unit cost s_unit_cost | Cu | USD | 4 500 | Procurement cost per spare unit (list price or contract rate). |
Understock cost s_understk_cost | Cu | USD/event | 85 000 | Financial exposure per stockout event — downtime cost, emergency freight, expedite premium. |
Carrying cost rate s_carry_rate | rc | %/yr | 25 | Annual holding cost as fraction of unit value: capital (~10%), storage (~4%), insurance (~2%), obsolescence (~9%). |
Part life s_part_life | Lp | yr | 8 | Expected service life of the spare before obsolescence or physical degradation. Sets Co time horizon. |
Annual demand mean s_demand_mu | μA | units/yr | 1.0 | Mean demand per year across the fleet = λ × N. Sigma defaults to μ × 0.6. |
Lead time (mean) s_lt_weeks | LT | weeks | 16 | Supplier replenishment lead time from PO to delivery. |
Lead time sigma s_lt_sigma | σLT | weeks | 4 | Standard deviation of lead time — captures supplier variability and logistics uncertainty. |
Target fill rate s_fill_rate | FR | % | 99 | Fraction of demand events fulfilled immediately from stock. Drives safety stock SS = z(FR) × σ_demand_during_LT. |
Hub inputs h_* | — | various | see tool | Number 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_* | — | various | see tool | Years 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
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
calcReadiness(). No engine kernel call — arithmetic on procurement data. DC O&M PRACTICE · PROPRIETARY
M3 — Newsvendor Optimal Stock (critical-fractile)
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
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)
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
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
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
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
calcKraljic(). Per Kraljic (1983) HBR "Purchasing Must Become Supply Management". KRALJIC 1983 HBR · ACADEMIC
M8 — Monte-Carlo Stress Test
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 key | Value / Range | Meaning | Source |
|---|---|---|---|
DATA.spares.poissonThresholdMuLt | 5 | μ_LT threshold below which Poisson CDF is used instead of Normal for Q*. | Statistical practice |
DATA.spares.acklamPLow | 0.02425 | Tail-region threshold for Acklam Φ⁻¹ rational approximation. | Acklam (2003) |
DATA.spares.acklamA/B/C/D | 6+5+6+4 coefficients | Rational polynomial coefficients for three-region Φ⁻¹ approximation. |relative error| < 1.15×10⁻⁹. | DATA.sources['spares.acklam'] |
| Redundancy severity factors | N=1.00, N+1=0.65, 2N=0.40 | Multiplier 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.50 | Criticality number above which stockout is unacceptable — STOCK + DUAL-SOURCE decision. | MIL-STD-1629A adapted |
| ESSENTIAL threshold Cm | 0.10 – 0.50 | Criticality range requiring stock; single-source acceptable. | MIL-STD-1629A adapted |
DATA.sparesPricing.classes | 8 classes | Unit 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 buffer | 15% | Consumption uncertainty buffer added to the deterministic LTB quantity. Conservative; adjust upward for higher demand variance parts. | SD-22 engineering practice |
| Normal CDF coefficients | Abramowitz-Stegun 26.2.17 | 5-term rational polynomial for normCdf(x); |error| ≤ 7.5×10⁻⁸. Used for fill-rate achieved calculation in Normal mode. | Abramowitz & Stegun (1964) |
| Commodity | Typical λ (failures/yr) | Typical unit cost | Typical LT (weeks) | FMECA severity default |
|---|---|---|---|---|
| UPS 50 kW power module | 0.20 – 0.30 | $25 K – $60 K | 12 – 20 | 9 (N config) |
| UPS VRLA battery string | 0.12 – 0.20 | $8 K – $15 K | 4 – 8 | 8 |
| Genset annual PM kit | 1.00 | $5 K – $15 K | 2 – 4 | 5 |
| Genset top overhaul | 0.10 – 0.15 | $60 K – $150 K | 16 – 24 | 9 |
| Chiller centrifugal compressor | 0.10 – 0.20 | $80 K – $250 K | 20 – 32 | 9 (N config) |
| CRAH EC/VFD fan retrofit kit | 0.15 – 0.25 | $8 K – $20 K | 6 – 12 | 6 |
| PDU/MCCB breaker (DC-grade) | 0.05 – 0.10 | $1 K – $5 K | 2 – 6 | 7 |
| CRAH G4 filter set | 3.00 (annual change) | $1.5 K – $4 K | 1 – 3 | 3 |
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
| Output | Symbol / Formula | Unit | Interpretation |
|---|---|---|---|
| Criticality tier | Cm threshold | VITAL / ESSENTIAL / DESIRABLE | Primary stocking decision: VITAL → STOCK + DUAL-SOURCE; ESSENTIAL → STOCK; DESIRABLE → don't stock. |
| Risk Priority Number | RPN = S_eff × D × min(10, λ×10) | 1 – 1000 | FMECA composite risk score. >100 indicates VITAL-tier stocking pressure. |
| Fleet failures / yr | λ × N | events/yr | Expected 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-fractile | units | Cost-minimising stock level balancing Cu and Co over the part life. |
| Safety stock SS | ⌈Φ⁻¹(FR) × σ_LT⌉ | units | Buffer above mean LT demand needed to achieve the fill-rate target FR. |
| Reorder point ROP | ⌈μ_LT + SS⌉ | units | On-hand inventory level at which a replenishment order should be placed. |
| Critical ratio CR | Cu / (Cu + Co) | 0 – 1 | Fractile of the demand distribution to stock against. CR > 0.9 typically signals VITAL classification. |
| Fill rate achieved | P(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/yr | Total carrying + expected-stockout cost at the optimal stock level. |
| P5 / P50 / P95 readiness | Monte-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 cost | P(stockout) × Cu × μ_A × horizon_yrs | USD | Expected financial exposure from stockout events over the planning horizon. |
| Hub s1 / Site s2 stock | MEIO marginal analysis | units | Optimal allocation of units across hub and sites to reach the fleet-readiness target at minimum cost. |
| Fleet readiness | P(X ≤ s2; Poisson(λ_site_eff)) | % | Fraction of fleet assets serviceable within MTTR given the current hub allocation. |
| Supplier Risk Index (SRI) | Weighted 8-factor score | 0 – 10 | CRITICAL ≥ 7.0; HIGH 5.5–7.0; MEDIUM 3.5–5.5; LOW < 3.5. |
| DMSMS / EOL exposure | Qualitative DMSMS score | Low / Medium / High / Critical | Urgency of last-time-buy or requalification action. |
| LTB economic qty | ⌈μ_A × years_remaining × 1.15⌉ | units | Economic last-time-buy quantity with 15% consumption uncertainty buffer. |
| Sourcing quadrant | Kraljic 2×2 | Strategic / Leverage / Bottleneck / Non-critical | Drives supplier relationship strategy and contracting approach. |
| Days of cover | (Q* / μ_A) × 365 | days | How 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().
- Redundancy & effective severity (N config): redFactor = 1.00 → S_eff = 9.0/10
- FMECA criticality: Cm = (9.0/10) × (7/10) × 0.25 × 4 = 0.630 → tier VITAL (Cm ≥ 0.50) → decision: STOCK + DUAL-SOURCE
- RPN: occurrence_scaled = min(10, 0.25 × 10) = 2.5 → RPN = 9.0 × 7 × 2.5 = 158
- Fleet failures/yr: 0.25 × 4 = 1.00 events/yr
- 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)
- σ_LT: √(0.3077 × 0.6² + 1.0² × (4/52)²) = 0.342
- Costs: Co = 0.25 × $40 000 × 8 = $80 000 (overstock cost over part life)
- Critical ratio: CR = $150 000 / ($150 000 + $80 000) = 0.6522
- 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)
- Safety stock for 99% fill rate: Φ⁻¹(0.99) = 2.3263 → SS = ⌈2.3263 × 0.342⌉ = ⌈0.796⌉ = 1 unit
- Reorder point: ROP = ⌈0.308 + 1⌉ = 2 units
- Fill rate achieved at Q*=0: P(X≤0; 0.308) = 73.5% → below 99% target; hold SS=1 to achieve 96.1%
- 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
- 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
- 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
- Poisson CDF verification: poissonCdf(k=2, λ=1.3) = Σ_{i=0}^{2} e⁻¹·³ × 1.3^i/i! = 0.857112 (engine-verified)
07 References & standards
- MIL-STD-1629A — Failure Mode, Effects and Criticality Analysis (FMECA). US Department of Defense, 1980. Defines severity, occurrence, detection scales and criticality number Cm. Adapted here for M&E DC spares.
- Sherbrooke (1968) — "METRIC: A Multi-Echelon Technique for Recoverable Item Control." Operations Research, 16(1). Originating paper for the two-echelon hub-site Poisson model used in M4 MEIO.
- Axsäter (1990) — "Modelling Emergency Lateral Transshipments in Inventory Systems." Basis for VARI-METRIC and the backorder approximation B(s, λ) used for hub effective lead-time correction.
- Clark & Scarf (1960) — "Optimal Policies for a Multi-Echelon Inventory Problem." Management Science, 6(4). Foundation of nested decomposition in multi-echelon inventory theory.
- Whitin (1955) — "Inventory Control and Price Theory." Management Science. Original critical-fractile newsvendor formulation.
- Porteus (1990) — "Stochastic Inventory Theory." In Handbooks in Operations Research and Management Science. Modern treatment of the newsvendor / critical-ratio model.
- Kraljic (1983) — "Purchasing Must Become Supply Management." Harvard Business Review, September–October. Sourcing matrix 2×2 quadrant framework implemented in M7.
- DMSMS SD-22 — Diminishing Manufacturing Sources and Material Shortages: A Guidebook of Best Practices. Office of the Under Secretary of Defense, 2019. Governs the last-time-buy and requalification decision framework in M6.
- Acklam (2003) — "An Approximation to the Percentage Points of the Normal Distribution." Rational polynomial Φ⁻¹ approximation, |relative error| < 1.15×10⁻⁹. Implemented as
RZEngine.models.spares.normInv(p). - Abramowitz & Stegun (1964) — Handbook of Mathematical Functions. §26.2.17 rational approximation for Normal CDF used in
RZEngine.models.spares.normCdf(x). - Engine source —
rz-engine.js(RZEngine v2.5+,models.spares.*) +spares-readiness-calculator.htmlmodule logic.
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.