Home / DC Solutions / Technical Manuals / DC MOC

Technical Manual · Ops Cost Engine

DC MOC — Methodology & Formulas

Every input, equation, constant, output, and reference behind the DC MOC PRO SPA: CAPEX build-up, OPEX (energy + staffing + maintenance), shift/staffing optimisation, Monte Carlo P-value bands, and executive PDF export. The engine delegates most of its maths to RZEngine v2.5.1 (rz-engine.min.js) while DCMOC-finer CAPEX bases live in dcmoc/src/lib/capex-data.ts (A7 2025 rates) and the Cx program in RZEngine.models.commissioning.programRich/monteCarlo.

Engine RZEngine v2.5.1 CAPEX basis T&T DCCI 2025 Key inputs 14+ Output surfaces CAPEX · OPEX · Shift · MonteCarlo · PDF SPA Next.js static-export PRO
▶ Open the live DC MOC

01 Purpose & engineering basis

DC MOC (Data-Centre Management & Ops Cost) is a PRO-tier Next.js static-export SPA that answers five operator questions in a single instrument surface: what will this facility cost to build (CAPEX), what will it cost to run per year (OPEX), how should operations be staffed across shifts, what is the probabilistic range of commissioning cost (Monte Carlo), and how is this summarised for executive sign-off (PDF export). Access is governed by the site-wide auth-tier matrix at the PRO level.

The mathematical basis is deterministic-by-default: every KPI is sourced from a locked constant or a formula anchored to a published standard, cost index, or RZEngine DATA entry. Monte Carlo randomness is seeded where stochastic output is needed and produces reproducible results. The tool is an engineering pre-design aid and Class 4 budgetary estimate (AACE 18R-97); detailed engineering procurement must follow.

The SPA consumes two shared engines loaded at page root as deferred scripts: /rz-engine.min.js (exposes window.RZEngine + window.RZEngine.DATA) and the DCMOC TypeScript bundle. During Next.js SSR prerender, dcmoc/src/lib/rz-engine.ts eval-requires the CommonJS engine from the repo root so that server-rendered and client values agree with zero hydration mismatch.

Cross-reference: the CAPEX engine and methodology also power the standalone capex.html manual and the OPEX engine powers opex.html. This document covers the DCMOC orchestration layer — how those models are wired together with the shift-staffing and Monte Carlo layers that do not appear in the standalone calculators.

02 Inputs

Fourteen primary inputs span five groups — project identity, site/location, electrical system, cooling/mechanical, and staffing. Additional advanced fields (seismic zone, substation type, green certification, renewable option, deep-sea cooling parameters) unlock in PRO mode. All ranges are enforced client-side; missing optional fields fall back to engine defaults.

FieldSymbol / keyUnitRange / defaultMeaning & engine path
IT loaditLoadkW≥ 100 · default 2 000Installed IT power; drives every per-kW cost, FTE, and energy calculation.
Country / locationcountry.id / locationISO-2 / key40 countriesPriority: country.constructionIndex (T&T ICMS/RLB rel. US=1.0) → cityData[cityMarket].perW → legacy locationMultipliers. Sets effectiveRegion for permit and energy rates.
City marketcityMarketenum'none' or 40+ citiesOverrides country $/W with a city-level anchor (e.g. Tokyo 15.20 $/W, Jakarta 11.21 $/W). Source: T&T 2025, C&W 2025.
Building typebuildingTypeenumwarehouse / modular / purpose / highriseMultiplier on civil + commissioning duration: warehouse 0.70×, purpose 1.00×, highrise 1.40×.
Cooling typecoolingTypeenumair / inrow / rdhx / liquidScales cooling category cost (air 1.0×, liquid 1.6×) and sets PUE via getPUE(coolingType).
Redundancyredundancyenumn / n1 / 2n / 2n1Applied to electrical, UPS, and generator categories; multipliers: N 1.00×, N+1 1.25×, 2N 1.85×, 2N+1 2.10×.
Rack classrackTypeenumstandard / medium / high / aiScales electrical category (ai 1.6×) and sets rack density (6 / 12.5 / 25 / 75 kW per rack).
UPS typeupsTypeenumstandalone / modular / distributed / rotaryMultiplier on UPS base cost: standalone 0.90×, distributed 1.20×, rotary 1.50×.
Generator typegenTypeenumdiesel / gas / dualfuel / hvoMultiplier on generator base: diesel 1.00×, gas 1.15×, dual-fuel 1.30×.
Fuel hoursfuelHoursh≥ 0 · default 24Fuel storage adder: fuelMult = 1 + (fuelHours − 24) × 0.008.
Project yearprojYearyear2024–2030Escalation factor from yearEscalation[year] (T&T / JLL 2026 forward escalation).
Design fee / PM fee / contingencydesignFee / pmFee / contingency%1–15 / 1–10 / 5–25Applied to total hard cost as soft-cost layers, then contingency as final percentage adder.
Staff modelstaffModelKeyenuminhouse / hybrid70 / hybrid50 / outsourcedSets ftePerMW (4.2 / 3.8 / 3.5 / 3.0) and cost multiplier in the ops-budget model.
PM ratio / retentionpmRatio / retention%0–100 eachPM ratio reduces maintenance budget via savings slope (0.30 per % above 50% baseline); retention drives attrition cost and burnout probability.

03 Calculation methodology

Five calculation layers run in sequence. Function names and file paths map one-to-one to the source noted in each formula block.

3.1 CAPEX build-up

costs[c] = costFactors[c].base × itLoad × dimMult[c] × locMult × yearMult dimMult[electrical] = redMult × rackMult × upsMult dimMult[cooling] = coolMult dimMult[generator] = genMult × fuelMult (fuelMult = 1 + (fuelHours−24)×0.008) dimMult[other] = seismicMult | fireSupMult | alarmMult | buildMult (per category) totalHardCost = Σ costs[c] + substationCost + gridConnection + switchgear softCosts = totalHardCost × (designFee/100) + totalHardCost × (pmFee/100) contingencyVal = (totalHardCost + softCosts) × (contingency/100) CAPEX_total = totalHardCost + softCosts + contingencyVal [+fomTotal if FOM enabled] perKW = CAPEX_total / itLoad [$/kW] In calculateCapex()dcmoc/src/lib/CapexEngine.ts. Base costs ($/kW) from dcmoc/src/lib/capex-data.ts (A7 2025 rates: T&T DCCI 2025 + C&W 2025 + JLL 2026). Location priority: country.constructionIndex (T&T ICMS/RLB rel. US=1.0) → cityData[city].perW / 4.65 → legacy map. Multiplier tables: engine DATA.capexDetail.* first; DCMOC local capex-data.ts as fallback per SUPER_ENGINE.md §Z.3.capexDetail · T&T 2025

3.2 PUE & timeline

PUE = getPUE(coolingType) [from dcmoc/src/constants/pue.ts] annualKWh = itLoad × PUE × 8 760 [global avg estimate at 0.10 $/kWh basis] floorSpace = ceil(racks × 2.5 m²) racks = ceil(itLoad / kW-per-rack) timeline = computeTimeline(redundancy, buildingType, coolingType, effectiveRegion) Timeline is a CPM-style forward pass (design → permit → civil → MEP → commissioning) with per-phase overlap factors and permit/building/cooling multipliers. Screening-grade — not a resource-loaded programme.construction · engine-catalog

3.3 OPEX — total annual cost

power = MW × PUE × 8 760 h × powerKwh[region] × util × touMultiplier staffing = headcount × salary[region][role] × 1.30 (fully-loaded burden) contract = contractCostBase[scope] × salaryMult[region] maintenance = capex × maintenancePct overhead = (power + staffing + contract + maintenance) × overheadPct total = power + staffing + contract + maintenance + overhead totalExtended = total + water + carbon + insurance + connectivity Delegated to RZEngine.models.opex.totalAnnual(MW, pue, region, headcount, {capex, basisPreset:'dcContract'}). DC-contract preset: util=1.0 (100% committed capacity). Diverges from the standalone opex-calculator which uses basisPreset:'retailScreening' (util=0.70). Water: WUE × itKWh / 1 000 × $/m³[region]. Carbon: facilityKWh × gridFactor[region] × carbonPrice[region]. Insurance: capex × 0.5%. Connectivity: MW × 80 000 $/MW.opex · carbon · water · engine-catalog

3.4 Shift & staffing optimisation

baseFTE = ceil(loadMW × ftePerMW) (ftePerMW: 4.2 in-house … 3.0 outsourced) shiftFTE = ceil(baseFTE × 4.2) (4.2× shift multiplier — Uptime critical-facility benchmark) burdenedRate = laborRateUSD[country] × 1.35 (35% labor burden) laborBudget = shiftFTE × burdenedRate × sm.costMult maintBudget = loadMW × 180 000 $/MW × tropFactor × pmEfficiency pmEfficiency = 1.0 − (pmRatio/100 − 0.50) × 0.30 utilization = clamp(78 + loadMW×0.12, 55, 98) × qualityMult burnoutProb = 1 / (1 + e^{−0.12 × (util − 88)}) × 100 [%] retentionCost = shiftFTE × turnoverRate × laborRateUSD × 1.5 SRI (0–100) = retention×0.35 + (100−burnout)×0.25 + pmRatio×0.20 + qualityMult×100×0.20 − SPOF×3 Delegated to RZEngine.models.opsBudget.opex(inp) + .staffing(inp, opex). Staff models and their ftePerMW/costMult/qualityMult live in DATA.opsBudget.staffModels. Country labor rates and energy tariffs live in DATA.opsBudget.countries. SRI = Staffing Resilience Index. SPOF = single-point-of-failure count. Burnout logistic k=0.12 from occupational-health literature; replacement cost 1.5× from SHRM 2024.opsBudget · engine-catalog

3.5 Commissioning program & Monte Carlo

equipScale(inp) → item counts from itLoad (e.g. switchgear = ceil(kW/5000)+1) levelDurations() → working days per L0…L6 (scope × redundancy × cooling × building factors) levelCosts() → L0…L6 costs using regional day-rates r.{cxDay,fieldDay,oemDay,witnessDay} gm = ∏ 11 global-multiplier tables (cooling×redundancy×building×seismic×substation×bms×delivery×fire×ups×gen) grand = gmNorm(gm^0.45) × Σ levelCosts + contingency perKW = grand / itLoad ── Monte Carlo (commissioning) ── FOR i in 1..10 000: itLoad_i = max(100, Normal(base.itLoad, 0.075 × base.itLoad)) [Box-Muller] cost_i = programRich({...inp, itLoad: itLoad_i}).grand cost_i ×= clamp(Normal(1, 0.05), 0.85, 1.15) [cost noise] P5/P25/P50/P75/P95 = sorted percentiles; CVaR95 = mean(tail above P95) Delegated to RZEngine.models.commissioning.programRich(input) + .monteCarlo(input, opts). Input is normalised via .mapInput() which fills 30-field rich schema from DCMOC store slice. 30 regional day-rate cards (us_virginia, eu_west, sea, jp, etc.) in DATA.commissioning.cx.rich.rates. Source: ASHRAE Guideline 0 / BCxA / NETA ECS scope; Uptime IST scenario counts.commissioning.cx · engine-catalog

3.6 General Monte Carlo driver (sim.monteCarlo)

Distributions supported: normal(mean,sd) · uniform(min,max) · triangular(min,mode,max) · categorical RNG: seeded LCG s = (1103515245·s + 12345) >>> 0; rnd = s / 2^32 Normal draw: Box-Muller z = √(−2 ln u₁) · cos(2π u₂) Pairwise correlation (optional): z_b ← ρ·z_a + √(1−ρ²)·z_b [Cholesky Z-injection] Output: { p10, p50, p90, mean, min, max, samples } In RZEngine.models.sim.monteCarlo(fn, distributions, iterations, seed, opts). Default seed 123 456 789 for reproducibility. Also available: sim.tornado() (one-at-a-time swing, ranked by |swing|) and sim.sensitivityGrid() (2-D heat map).sim · engine-catalog

04 Constants & data sources

All constants are deep-frozen in RZEngine.DATA (loaded from rz-engine.min.js) or in dcmoc/src/lib/capex-data.ts (DCMOC-finer A7 2025 bases). Key tables:

CAPEX base cost factors — A7 2025 rates

CategoryBase ($/kW)Dimensional multipliers appliedSource
Building & Civil1 050buildingType, locMult, yearMultT&T 2025 / C&W 2025
Seismic Protection130seismicMult (zone0 0.2× … zone4 8.0×)T&T 2025
Electrical (MV/LV)1 550redMult × rackMult × upsMultT&T 2025 (A7 — NOT merged with engine's 1 200 $/kW)
UPS Systems780upsMult (standalone 0.9× … rotary 1.5×)T&T 2025
Generator & Fuel520genMult × fuelMultT&T 2025
Cooling Systems900coolMult (air 1.0× … liquid 1.6×)T&T 2025
Fire Suppression195fireSupMult (water 0.6× … N₂ 1.8×)T&T 2025
Fire Alarm System105alarmMult (conventional 0.6× … hybrid 2.2×)T&T 2025
BMS / DCIM160locMult, yearMultT&T 2025
Network Infra325locMult, yearMultT&T 2025
Security Systems105locMult, yearMultT&T 2025
Cx Agent & Startup155locMult, yearMultT&T 2025
Testing & Compliance115testingRedundancyMult, locMultT&T 2025
Permits & Approvals80permitRegionMult[effectiveRegion]T&T 2025

Location multipliers (fallback; priority = constructionIndex)

Region keylocMult (rel. US=1.0)Representative city $/W (T&T 2025)
usa1.00Virginia 13.40 · Silicon Valley 13.30 · Dallas 14.30
europe1.15London 12.00 · Frankfurt 11.60 · Amsterdam 11.80
japan1.10Tokyo 15.20
australia1.05Sydney 12.30
south_korea0.95Seoul 9.50
sea0.65Singapore 14.53 · Malaysia 11.37 · Jakarta 11.21
china0.70Hong Kong 13.80
india0.55Mumbai 6.64
mena0.85Dubai 10.50 · Riyadh 9.20
africa0.55Johannesburg 7.50 · Nairobi 7.20
south_america0.60São Paulo 8.50

Staffing & OPEX constants

ConstantValueSource
Shift multiplier4.2×Uptime critical-facilities staffing benchmark
Labor burden1.35×Benefits + payroll tax + overhead
Maintenance base$180 000 /MW·yrDC industry comprehensive maintenance benchmark
PM savings slope0.30 per % above 50% PM baselineEngine heuristic
Burnout logistic k0.12, mid-point 88% utilizationOccupational-health literature
Replacement cost factor1.5× annual salarySHRM 2024
FTE/MW — in-house4.2Uptime Institute critical-DC staffing norm
FTE/MW — hybrid 70/303.8Engine staffModels
FTE/MW — hybrid 50/503.5Engine staffModels
FTE/MW — outsourced3.0Engine staffModels
Cx itLoad perturbation σ7.5% (Normal)Monte Carlo commissioning model, engine
Cx cost noise σ5%, clamped [0.85, 1.15]Monte Carlo commissioning model, engine

05 Outputs

OutputFormula / sourceUnitSurface in DC MOC
CAPEX totalCAPEX_total = Σ costs[c] + soft + contingency [+FOM]USDCAPEX module KPI card + PDF §1
CAPEX $/kWCAPEX_total / itLoad$/kWCAPEX efficiency chip; narrative band (Low <$8 k · Standard <$15 k · Premium)
CAPEX by categoryAll 14 costs[c]USD eachWaterfall / donut chart
PUEgetPUE(coolingType)ratioPUE chip; drives energy and OPEX
Timeline (months)computeTimeline()monthsGantt timeline module
Floor space / rack countceil(racks × 2.5 m²)m² / countCapacity module metrics
OPEX total annualmodels.opex.totalAnnual()USD/yrFinancial module OPEX card + PDF §2
OPEX breakdownpower · staffing · contract · maintenance · overheadUSD/yr eachOPEX donut chart; YTD = total ÷ 12 × months since COD
Shift FTE / utilizationmodels.opsBudget.opex() + .staffing()count / %Staffing module headcount card
Burnout probabilitylogistic(util, k=0.12, mid=88)%Staffing resilience gauge
Staffing Resilience IndexSRI weighted composite (0–100)scoreSRI chip with colour band
Cx program cost (P50)models.commissioning.programRich().grandUSDCommissioning module cost band
Cx Monte Carlo P5/P25/P50/P75/P95models.commissioning.monteCarlo(), N=10 000USDHistogram with marker lines; CVaR95 shown
Cx sensitivity tornadomodels.commissioning.sensitivity(), 7 paramsUSD swingTornado chart sorted by |swing|
Executive PDFReportNarrative engine (16-family) → browser print-windowmulti-page PDFPRO export button — all KPIs + charts + provenance

06 Worked example

A 2 000 kW Tier III purpose-built data centre in Jakarta (DCMOC city market: jakarta, $/W anchor 11.21 T&T 2025), N+1 redundancy, in-row cooling, standard racks, modular UPS, diesel generator, 24 h fuel, 2026 build year, 30 FTE in-house staff, 60% PM ratio, 85% retention. Values computed from source constants — engine cannot be require()-called in this static doc, so the trace below follows the exact formula path from source.

  1. Location multiplier — city market jakarta overrides country index: perW = 11.21 $/W → locMult = 11.21 / 4.65 = 2.411 (relative to the US base of 4.65 $/W used as normalisation anchor in CapexEngine city-data logic).
  2. Key dimensional multipliers — redundancy N+1 1.25×; cooling in-row 1.20×; rack standard 1.00×; UPS modular 1.00×; building purpose 1.00×; seismic default zone2 2.50× (seismically active Indonesia); year 2026 escalation (est.) ≈1.03×.
  3. Electrical cost (dominant category): 1 550 $/kW × 2 000 kW × (1.25 × 1.00 × 1.00) × 2.411 × 1.03 ≈ $9.64 M.
  4. Cooling cost: 900 × 2 000 × 1.20 × 2.411 × 1.03 ≈ $5.36 M.
  5. Building cost: 1 050 × 2 000 × 1.00 × 2.411 × 1.03 ≈ $5.22 M.
  6. Total hard cost (all 14 categories aggregated): approximately ~$32–34 M (sum of 14 category lines with their respective multipliers).
  7. Soft costs at design 6% + PM 3%: totalHard × 0.09 ≈ ~$2.9–3.1 M.
  8. Contingency at 10%: (totalHard + soft) × 0.10 ≈ ~$3.5 M. CAPEX total ~$38–40 M~$19–20 k/kW (Premium bracket — driven by Jakarta city anchor and N+1 redundancy).
  9. PUE (in-row cooling): getPUE('inrow') ≈ 1.35.
  10. Annual energy: 2 000 kW × 1.35 × 8 760 h × 0.099 $/kWh (ID grid rate) ≈ $2.35 M/yr.
  11. Staffing OPEX: in-house, base FTE = ceil(2 MW × 4.2) = 9; shift FTE = ceil(9 × 4.2) = 38; burdened rate ~$17 k/FTE (ID rate $12 k × 1.35); labor budget ≈ 38 × 17 000 × 1.00 = ~$0.65 M/yr.
  12. Maintenance: 2 MW × $180 000 × tropFactor(1.08) × pmEfficiency(0.70) = ~$0.27 M/yr (PM 60%, savings slope reduces from base).
  13. OPEX total (core): power + staffing + contract + maintenance + overhead ≈ ~$3.5–4 M/yr.
  14. Burnout probability: util ≈ 78 + 2×0.12 = 78.24%; logistic(78.24, k=0.12, mid=88) ≈ ~23%.
  15. Cx commissioning P50 (programRich): for 2 000 kW N+1 in-row purpose-build in SEA region, budgetary range ~$0.9–1.4 M (Monte Carlo P25–P75 band). P95 ≈ ~$1.8 M.
Method note: Steps 3–8 use the formula path traced from CapexEngine.ts and capex-data.ts. The node eval-require of rz-engine.js is available in DCMOC's build process but not in this static HTML context. The Jakarta locMult derivation from city $/W anchor follows the calculateCapex city-data branch. Final totals will differ slightly from live engine output due to the seismic default zone and the complete 14-category sum — open the live DC MOC for exact figures.

07 References & standards

08 Assumptions & limitations

CAPEX is a Class 4 budgetary estimate (AACE 18R-97) with ±30–50% accuracy. It is not a detailed cost plan and must not be used for contract tendering without a full bottom-up quantity take-off by a qualified cost estimator. Key assumptions:

CAPEX: The 14-category base costs are 2025 market rates calibrated to the T&T / C&W city-anchor tables. The DCMOC A7 2025 electrical base (1 550 $/kW) is deliberately NOT merged with the shared engine's 1 200 $/kW model — both are documented in engine-catalog provenance as a justified divergence (different model shapes). Seismic multiplier defaults to zone 2 (moderate seismicity) when not specified. Green certification and renewable options add premium costs not captured in the base categories — handled via renewableCost adder. FOM (Facilities of Merit — substation, grid connection, switchgear) is an optional line that requires project-specific utility quotes to confirm.

OPEX: DC-contract utilisation basis assumes 100% committed capacity at all times (not a measured blended utilisation). Energy price is the regional benchmark rate from DATA.regions[*].powerKwh — actual tariff structures (TOU, demand charges, PPA) can be overridden via advanced inputs. Maintenance requires a CAPEX basis; the model computes zero maintenance if no capex is provided.

Staffing / shift: The 4.2× shift multiplier is an Uptime-benchmarked industry norm for critical-facility 24/7 coverage. Actual headcount will vary with site complexity, automation level, and local labour regulations. The Staffing Resilience Index (SRI) is a screening heuristic — it is not a certified HR assessment tool.

Monte Carlo: The commissioning Monte Carlo perturbs only IT load (±7.5%) and a scalar cost noise (±5%). It does not model schedule risk, vendor variation, or supply-chain disruptions. For project-level risk analysis a full probabilistic schedule with correlated distributions is required. The sim.monteCarlo pairwise-correlation implementation is exact for two independent pairs; chained pairs introduce implicit transitive correlation — use disjoint pairs only.

PDF export: The executive PDF is generated via the browser print-window (ReportNarrative engine). Chart rasterisation fidelity depends on the browser renderer; vector PDF export is not supported in the current release. This manual and the DC MOC tool are an engineering education and pre-design aid; financial investment decisions must engage qualified engineers, cost consultants, and financial advisers.

▶ Open the live DC MOC