| Commodity | S/D Ratio | Supply | Demand | Price | Status | S/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 |
iron — S/D 0.131 · Supply 163,645 · Demand 1,247,646Sector-driven demand: 1,625,566 units · Gap from macro/BASE/non-sector: -377,920
| Sector | Demand (units) | % of Total | Rate | -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,981Sector-driven demand: 5,486,176 units · Gap from macro/BASE/non-sector: -3,228,195
| Sector | Demand (units) | % of Total | Rate | -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,654Sector-driven demand: 8,014,228 units · Gap from macro/BASE/non-sector: -492,574
| Sector | Demand (units) | % of Total | Rate | -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,893Sector-driven demand: 800,454 units · Gap from macro/BASE/non-sector: -465,561
| Sector | Demand (units) | % of Total | Rate | -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,595Sector-driven demand: 683,626 units · Gap from macro/BASE/non-sector: -108,031
| Sector | Demand (units) | % of Total | Rate | -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,867Sector-driven demand: 180,708 units · Gap from macro/BASE/non-sector: +77,159
| Sector | Demand (units) | % of Total | Rate | -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,334Sector-driven demand: 137,830 units · Gap from macro/BASE/non-sector: +1,015,504
| Sector | Demand (units) | % of Total | Rate | -30% saves |
|---|---|---|---|---|
retail |
137,830 | 100.0% | 0.06 | +41,349 |
timber — S/D 0.386 · Supply 59,870 · Demand 156,341Sector-driven demand: 253,269 units · Gap from macro/BASE/non-sector: -96,928
| Sector | Demand (units) | % of Total | Rate | -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 |
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.
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).
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.
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.
| Strategy | Sectors | Anchor Revenue | Focus | Avg Prod Policy | Expected 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 |
commodities.tscommodities.tscommodities.tscommodities.tscommodities.tscommodities.tscommodities.tscommodities.tsoil_gas: natural_gas output 0.14→0.32 (+129%)iron_mining: iron output 0.25→0.78 (+212%)coal_mining: coal output 0.22→0.72 (+227%)sectorStrategies.ts transition system.
NPP-run extraction corps currently have no AI for autonomous strategy switching.
| Commodity | Current S/D | Proposed S/D | Price Impact | Status 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 |
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.
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.
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.
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).
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.
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).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.