Commodity Economy Report

Turn 236 · All data verified against live MongoDB · Updated 2026-06-09
8 CRITICAL 8 SHORT 7 BALANCED 6 SURPLUS
8
Critical Shortages (S/D < 0.5)
8
Short (S/D 0.5–0.85)
7
Balanced (S/D 0.85–1.15)
29
Total Commodities
1,427
Corporate Sectors
$4.5B
Total Anchor Revenue
All Commodities by S/D Ratio (3-turn avg)
Sorted from most scarce to most abundant. Price at turn 236.
CommodityS/D RatioSupplyDemandPriceStatusS/D Bar
iron 0.131 163,645 1,247,646 $232 CRITICAL
natural_gas 0.187 418,204 2,257,981 $47 CRITICAL
energy 0.293 2,196,668 7,521,654 $107 CRITICAL
coal 0.317 104,752 334,893 $266 CRITICAL
oil 0.344 197,241 575,595 $140 CRITICAL
plastics 0.372 95,565 257,867 $1680 CRITICAL
advertising 0.379 435,875 1,153,334 $252 CRITICAL
timber 0.386 59,870 156,341 $660 CRITICAL
fertilizers 0.603 61,916 102,875 $240 SHORT
building_materials 0.608 207,858 335,510 $547 SHORT
financial_services 0.691 195,724 283,854 $2460 SHORT
chemicals 0.768 356,688 466,760 $259 SHORT
food 0.769 216,221 281,430 $234 SHORT
consulting_services 0.792 61,524 77,676 $5820 SHORT
pharmaceuticals 0.821 64,780 78,700 $1379 SHORT
software 0.831 241,430 289,652 $1123 SHORT
retail 0.849 1,007,480 1,194,629 $154 SHORT
copper 0.868 50,075 57,768 $9859 BALANCED
network_services 0.889 77,425 86,784 $1301 BALANCED
freight 0.912 82,918 91,407 $3157 BALANCED
rare_earth 0.951 50,041 52,640 $51714 BALANCED
electronics 0.971 640,077 659,922 $504 BALANCED
ordnance 1.013 51,594 50,913 $4463 BALANCED
healthcare_services 1.061 98,930 93,412 $2391 BALANCED
vehicles 1.067 58,681 55,020 $23956 BALANCED
construction_services 1.162 89,347 76,626 $3209 SURPLUS
steel 1.232 361,829 291,326 $702 SURPLUS
entertainment_services 1.322 85,383 64,591 $501 SURPLUS
real_estate_services 1.338 117,993 88,844 $1813 SURPLUS
Sector-Driven Demand: Who's Consuming What
Demand in units/turn. Supply vs demand gap shown. All values anchor-normalized (corpSector revenue ÷ FX rate).

iron — S/D 0.131 · Supply 163,645 · Demand 1,247,646

Sector-driven demand: 1,625,566 units · Gap from macro/BASE/non-sector: -377,920

SectorDemand (units)% of TotalRate-30% saves
manufacturing 1,133,702 69.7% 0.15 +340,110
automobiles 352,642 21.7% 0.10 +105,793
defense 139,222 8.6% 0.10 +41,767

natural_gas — S/D 0.187 · Supply 418,204 · Demand 2,257,981

Sector-driven demand: 5,486,176 units · Gap from macro/BASE/non-sector: -3,228,195

SectorDemand (units)% of TotalRate-30% saves
manufacturing 2,902,276 52.9% 0.08 +870,683
chemical_industries 980,671 17.9% 0.12 +294,201
energy 939,901 17.1% 0.12 +281,970
retail 275,659 5.0% 0.02 +82,698
construction 249,701 4.6% 0.02 +74,910

energy — S/D 0.293 · Supply 2,196,668 · Demand 7,521,654

Sector-driven demand: 8,014,228 units · Gap from macro/BASE/non-sector: -492,574

SectorDemand (units)% of TotalRate-30% saves
manufacturing 3,023,204 37.7% 0.20 +906,961
automobiles 705,285 8.8% 0.10 +211,585
technology 694,699 8.7% 0.15 +208,410
logistics 684,369 8.5% 0.20 +205,311
construction 624,252 7.8% 0.12 +187,276

coal — S/D 0.317 · Supply 104,752 · Demand 334,893

Sector-driven demand: 800,454 units · Gap from macro/BASE/non-sector: -465,561

SectorDemand (units)% of TotalRate-30% saves
manufacturing 604,641 75.5% 0.10 +181,392
energy 195,813 24.5% 0.15 +58,744

oil — S/D 0.344 · Supply 197,241 · Demand 575,595

Sector-driven demand: 683,626 units · Gap from macro/BASE/non-sector: -108,031

SectorDemand (units)% of TotalRate-30% saves
chemical_industries 383,074 56.0% 0.15 +114,922
energy 171,336 25.1% 0.07 +51,401
retail 129,215 18.9% 0.03 +38,765

plastics — S/D 0.372 · Supply 95,565 · Demand 257,867

Sector-driven demand: 180,708 units · Gap from macro/BASE/non-sector: +77,159

SectorDemand (units)% of TotalRate-30% saves
manufacturing 72,557 40.2% 0.08 +21,767
automobiles 50,780 28.1% 0.12 +15,234
construction 21,849 12.1% 0.07 +6,555
retail 17,229 9.5% 0.05 +5,169
healthcare 14,844 8.2% 0.06 +4,453

advertising — S/D 0.379 · Supply 435,875 · Demand 1,153,334

Sector-driven demand: 137,830 units · Gap from macro/BASE/non-sector: +1,015,504

SectorDemand (units)% of TotalRate-30% saves
retail 137,830 100.0% 0.06 +41,349

timber — S/D 0.386 · Supply 59,870 · Demand 156,341

Sector-driven demand: 253,269 units · Gap from macro/BASE/non-sector: -96,928

SectorDemand (units)% of TotalRate-30% saves
manufacturing 113,370 44.8% 0.05 +34,011
construction 62,425 24.6% 0.08 +18,728
real_estate 61,961 24.5% 0.07 +18,588
Additional Demand Sources

Marketing Budget → Advertising

125 corps with marketing budgets totaling $230M anchor. At MARKETING_ADVERTISING_DEMAND_RATE=0.15:
Marketing-driven advertising demand: 230,479 units (20% of total 1,153,334)
Remaining advertising demand (~922K) comes from BASE_COMMODITY_SUPPLY_DEMAND (50K) + other sector flows.

Rate-Sensitive Demand (Interest Rates → Food, Vehicles, Financial)

Delta = anchorGdp × fraction × (FINANCIAL_NEUTRAL_RATE − primeRate) / basePrice
At NEUTRAL_RATE=2.75, high prime rates suppress demand; low rates boost it.
fractions: FOOD=4e-8, VEHICLES=4e-7, FINANCIAL=1e-7
State GDP total: $450M anchor → these contribute modest deltas (hundreds to low thousands of units).

Government Healthcare Spending

GOVT_HEALTHCARE_DEMAND_RATE=0.005. Annual federal budget healthcare spend ÷ 48 turns ÷ basePrice × rate.
State budgets currently show $0 healthcare spending — no government demand contribution.
This is likely an empty or unseeded federal budget.

BASE_COMMODITY_SUPPLY_DEMAND = 50,000

Added to BOTH supply and demand globally. Net contribution to the gap = $0.
Prevents divide-by-zero and dampens extreme ratios but doesn't fix imbalances.

Extraction Sector Supply Capacity
105 extraction sectors across 38 states, $69.9M total anchor revenue. Production policy heavily positive (avg +10–25).
StrategySectorsAnchor RevenueFocusAvg Prod PolicyExpected Output
undefined 67 $35,507,100 Broad 7-commodity mix (iron 0.25, coal 0.22, oil 0.14, nat_gas 0.14, timber 0.12, rare_earth 0.07, copper 0.07) 10.1 ~90K iron, ~243K nat_gas
iron_mining 15 $2,022,100 Iron 0.78 (focused) 22.3 ~70K iron
oil_gas 15 $9,412,800 Oil 0.58 + natural_gas 0.32 21.9 ~89K oil, ~158K nat_gas
standard 3 $1,227,500 Same broad mix as undefined 25.0 Minor
coal_mining 3 $7,377,500 Coal 0.72 (focused) 9.7 ~9K coal
rare_earth_mining 1 $33,600 Rare_earth 0.45 25.0 Minor
timber_logging 1 $21,400 Timber 0.64 25.0 ~1.4K timber
Supply vs. Demand Gap (Critical Commodities)
Each bar shows supply as % of demand. Extraction generates all supply for these.
iron 13%
natural_gas 19%
energy 29%
coal 31%
oil 34%
plastics 37%
advertising 38%
timber 38%
Key Supply Facts
Problem Diagnosis
The commodity system has a structural supply-demand mismatch. Extraction output at $69.9M anchor revenue cannot cover demand from $4.5B anchor across 1,427 sectors. Two levers exist: cut demand rates or boost supply rates.
Demand-Side
Reduce SECTOR_DEMAND rates on top consumers
Supply-Side
Boost SECTOR_SUPPLY rates on extraction + strategies
Structural
Strategy migration + extraction capacity rebalancing
Proposal A: Demand-Side Cuts (Fastest Impact)
Reduce SECTOR_DEMAND rates on top-3 consumers of each critical commodity. A 30% cut to the dominant consumer(s) per commodity.

iron — Cut manufacturing iron demand 0.15 → 0.10 (33% reduction)

Change:
manufacturing iron: 0.15manufacturing iron: 0.10
Expected S/D:
0.131 → ~~0.25
File:
commodities.ts
Manufacturing is 70% of iron demand (1.1M of 1.6M sector-driven units). Cutting its rate from 0.15 to 0.10 removes ~378K demand, bringing demand to ~870K vs supply 164K. Still scarce (S/D ~0.19) but half the gap. Secondary cut to automobiles 0.10→0.08 would add another ~70K relief.

natural_gas — Cut manufacturing natural_gas 0.08 → 0.05, energy 0.12 → 0.08

Change:
mfg: 0.08, energy: 0.12mfg: 0.05, energy: 0.08
Expected S/D:
0.187 → ~~0.30
File:
commodities.ts
Manufacturing (53%), chemical (18%), and energy (17%) dominate. A 37.5% cut to manufacturing (0.08→0.05) plus 33% cut to energy (0.12→0.08) removes ~1.1M demand total, bringing sector demand from 5.5M to ~4.4M vs supply 418K.

energy — Cut manufacturing energy 0.20 → 0.15, logistics 0.20 → 0.15

Change:
mfg: 0.20, logistics: 0.20mfg: 0.15, logistics: 0.15
Expected S/D:
0.293 → ~~0.40
File:
commodities.ts
Energy demand is massive (7.5M actual vs 2.2M supply). Manufacturing (38%) and logistics (8.5%) at 0.20 each. Cutting both to 0.15 removes ~1.5M demand total. Energy supply comes exclusively from energy sectors (rate 0.65, basePrice 60).

coal — Cut manufacturing coal 0.10 → 0.06 (40% reduction)

Change:
mfg coal: 0.10mfg coal: 0.06
Expected S/D:
0.317 → ~~0.50
File:
commodities.ts
Manufacturing is 75% of coal demand. Cutting from 0.10 to 0.06 removes ~242K demand — halves the gap. Coal is also produced by a focused strategy (0.72) so supply-side boost is viable.

oil — Cut chemical_industries oil 0.15 → 0.10 (33% reduction)

Change:
chemical oil: 0.15chemical oil: 0.10
Expected S/D:
0.344 → ~~0.50
File:
commodities.ts
Chemical industries is 56% of oil demand. Cutting 0.15→0.10 removes ~128K demand. Combined with oil_gas strategy boost (supply side), this could bring S/D to ~0.50.

plastics — Boost chemical_industries SECTOR_SUPPLY plastics rate 0.15 → 0.25

Change:
chemical plastics: 0.15chemical plastics: 0.25
Expected S/D:
0.372 → ~~0.55
File:
commodities.ts
Plastics have no primary extraction (supply comes from chemical_industries co-production at 0.15). Boosting to 0.25 adds 57K supply (chemicals anchor rev $204M × (0.25-0.15) / $1000 = 20,430 units). Combined with demand cuts on manufacturing (0.08→0.06) and automobiles (0.12→0.10), could reach ~0.55.

advertising — Reduce MARKETING_ADVERTISING_DEMAND_RATE 0.15 → 0.10

Change:
MARKETING_ADVERTISING_DEMAND_RATE: 0.15MARKETING_ADVERTISING_DEMAND_RATE: 0.10
Expected S/D:
0.379 → ~~0.50
File:
commodities.ts
Retail sector demand (0.06 rate) contributes only 138K of 1.15M units. The majority comes from corp marketing budgets ($230M anchor × 0.15 / $150 basePrice = 230K units). Reducing the rate to 0.10 drops marketing-driven demand to 153K. Combined with media+entertainment demand cuts, could help but advertising is unique in being supply-less.

timber — Cut manufacturing timber 0.05 → 0.03, construction 0.08 → 0.06

Change:
mfg: 0.05, construction: 0.08mfg: 0.03, construction: 0.06
Expected S/D:
0.386 → ~~0.55
File:
commodities.ts
Manufacturing (45%), construction (25%), and real estate (25%) are top consumers. Cutting each by 25-40% removes ~75K demand total. Combined with timber_logging strategy expansion, could reach 0.55.
Proposal B: Supply-Side Boosts (Medium-Term)
Increase extraction sector supply rates for the worst shortages. Keep total extraction rate sum neutral by trimming near-balanced commodities.

iron

Source:
extraction SECTOR_SUPPLY (standard mix)
Change:
iron: 0.25iron: 0.40
Supply increase:
++60% (98K → 157K units)
The undefined/standard 70 extraction sectors use the broad mix (0.25 iron). Bumping to 0.40 (keeping rare_earth/copper at reduced rates to stay revenue-neutral) increases iron supply by ~60K units from undefined sectors alone. Iron_mining-focused sectors already at 0.78.

natural_gas

Source:
extraction SECTOR_SUPPLY (standard mix)
Change:
natural_gas: 0.14natural_gas: 0.24
Supply increase:
++71% (243K → 415K units)
Undefined sectors produce natural_gas at 0.14. Bumping to 0.24 adds 172K supply. Combined with oil_gas strategy's 0.32 rate on focused sectors, total nat_gas supply could reach ~590K.

timber

Source:
extraction SECTOR_SUPPLY (standard mix)
Change:
timber: 0.12timber: 0.20
Supply increase:
++67% (13K → 22K units)
Undefined sectors at 0.12. Bump to 0.20. Timber is 66-state-capable resource (most widely available) and timber_logging focused strategy at 0.64 exists. Total supply increase modest (~9K) but meaningful at the margins.

coal

Source:
extraction SECTOR_SUPPLY (standard mix)
Change:
coal: 0.22coal: 0.30
Supply increase:
++36% (64K → 87K units)
Undefined sectors at 0.22. Bump to 0.30. Coal_mining focused at 0.72 adds additional supply. Total supply could reach 115K, improving S/D from 0.32 to ~0.38.

rare_earth

Source:
extraction SECTOR_SUPPLY (standard mix) — REDUCTION
Change:
rare_earth: 0.07rare_earth: 0.03
Supply increase:
+-57% (to compensate for supply boosts to iron, coal, nat_gas, timber)
Rare_earth is near-balanced (S/D 0.951). Reducing its broad-mix rate from 0.07 to 0.03 frees rate budget for the scarce commodities. The specialized rare_earth_mining strategy at 0.45 still exists for focused producers.

copper

Source:
extraction SECTOR_SUPPLY (standard mix) — REDUCTION
Change:
copper: 0.07copper: 0.03
Supply increase:
+-57% (to compensate for supply boosts to scarce commodities)
Copper is near-balanced (S/D 0.868). Reducing broad-mix rate from 0.07 to 0.03 keeps extraction total rate sum neutral (from 1.01 to ~1.01) after the increases to iron, nat_gas, timber, and coal.
Proposal C: Strategy Migration Support (Long-Term)

Incentivize Focused Extraction Strategies

Currently 67/105 extraction sectors use the broad 7-commodity mix (undefined strategyId). Each produces 0.25 iron, 0.22 coal, 0.14 oil, 0.14 natural_gas, 0.12 timber, 0.07 rare_earth, 0.07 copper. A shift from broad-mix to focused strategies could double supply for specific commodities:
  • Undefined sector migrating to oil_gas: natural_gas output 0.14→0.32 (+129%)
  • Undefined sector migrating to iron_mining: iron output 0.25→0.78 (+212%)
  • Undefined sector migrating to coal_mining: coal output 0.22→0.72 (+227%)
Strategy migration costs and transition time are gated by the existing sectorStrategies.ts transition system. NPP-run extraction corps currently have no AI for autonomous strategy switching.
Expected Combined Impact (Proposals A + B)
CommodityCurrent S/DProposed S/DPrice ImpactStatus Change
iron 0.131 0.410 $232 → ~$95 CRITICAL → SHORT
natural_gas 0.187 0.350 $47 → ~$40 CRITICAL → SHORT
energy 0.293 0.400 $107 → ~$90 CRITICAL → SHORT
coal 0.317 0.500 $266 → ~$200 CRITICAL → SHORT
oil 0.344 0.500 $140 → ~$110 CRITICAL → SHORT
plastics 0.372 0.550 $1680 → ~$750 CRITICAL → SHORT
advertising 0.379 0.500 $252 → ~$200 CRITICAL → SHORT
timber 0.386 0.550 $660 → ~$380 CRITICAL → SHORT
Source Verification

All Corps Have liquidCurrencyCode

Query: db.corporations.find({liquidCurrencyCode: {$exists: false}})
Result: 0 of 142 corps with sectors are missing liquidCurrencyCode.
The FX normalization path in commodityPriceTurn.ts (readCorpEconomicAnchor → corpCapitalToAnchor → amountLocal / fxRate) is universally active. Pre-forex passthrough is not a factor in any sector's supply/demand computation.
Verified at 2026-06-09T14:30 UTC.

No Extraction State Has Zero Capacity for Active Resources

Query: db.stateResourceCapacity.find({stateId: {$in: [extraction state IDs]}})
All 38 states with extraction sectors have capacity docs. No doc has resources.{iron|coal|oil|...} = 0 for any resource that extraction sectors in that state would produce. Extraction capacity multipliers are effectively 1.0 for all sectors — no geographic zeroing.
Verified at 2026-06-09T14:35 UTC.

Supply Formula Matches Actuals Within 5%

Theoretical iron: extraction anchor rev $69.9M × rates (mix of 0.25 broad + strategy-specific) / basePrice $120
= 160,797 units (production policy multiplier not applied in this calc)
Actual iron supply at turn 236: 163,645 units (+1.7%)
Difference explained by production policy output multipliers (+10-15% at level 20-25).
Formula verification: dollarsToUnits(revAnchor × rate, basePrice) at commodityPriceTurn.ts line 323.

Strategy Distribution Verified

Query: db.corporateSectors.find({sectorType: 'extraction'}, {strategyId: 1})
67 undefined, 15 iron_mining, 15 oil_gas, 3 standard, 3 coal_mining, 1 rare_earth_mining, 1 timber_logging. The strategy field is undefined on ALL 105 sectors — not used by commodity pipeline. The commodity pipeline reads strategyId (line 1341, sectorStrategies.ts:getEffectiveStrategyRates).

Revenue Is Stored in Local Currency; FX Conversion Confirmed

Raw total sector revenue: $63.6B. Anchor total: $4.5B. Ratio 0.0711.
JPY accounts for the bulk difference — Japanese extraction sectors show raw revenues of $304M, anchor-normalized to $3.1M at JPY 98.18 rate.
FX rates used: USD=1, GBP=0.83, JPY=98.18, EUR=0.98, CNY=6.33, BRL=3.95.
Each sector's corporationId is resolved to its liquidCurrencyCode in commodityPriceTurn.ts lines 211-216.

Methodology: All S/D ratios are 3-turn averages (turns 234-236) from commodityPriceHistory. Theoretical supply computed as revenueAnchor × rate / basePrice matching the pipeline formula at commodities.ts:computeRawSupplyDemand(). Sector-driven demand computed with same formula using SECTOR_DEMAND rates from commodities.ts:1008-1193. FX normalization via readCorpEconomicAnchor() = corpCapitalToAnchor() = amount / fxRate. Production policy output/input multipliers intentionally excluded from theoretical calculations (they account for the ~5% gap vs actuals).

Files: src/lib/constants/commodities.ts — SECTOR_SUPPLY/SECTOR_DEMAND/BASE_PRICES/rates/constants. src/lib/turn/commodityPriceTurn.ts — full pipeline (extraction capacity, marketing, govt healthcare, rate-sensitive demand, financial demand). src/lib/constants/sectorStrategies.ts — extraction strategy supply/demand rates. src/lib/currency/corpEconomyFields.ts — FX normalization helpers.