| """ |
| Real-world supply chain data sourced from: |
| - UNCTAD Review of Maritime Transport 2023 |
| - World Bank Logistics Performance Index 2023 |
| - Freightos Baltic Index (FBX) container rates |
| - Lloyd's List Intelligence port throughput data |
| - WHO/CDC disruption incident reports 2020-2024 |
| |
| All costs in USD, throughput in TEU (twenty-foot equivalent units). |
| """ |
|
|
| |
| REAL_PORTS = [ |
| {"id": "port_shanghai", "name": "Shanghai", "region": "asia", "country": "CN", "lat": 31.23, "lon": 121.47, |
| "throughput_teu": 49_000_000, "capacity": 550, "avg_dwell_days": 2.1, "customs_delay_days": 1.5, |
| "lpi_score": 3.7}, |
| {"id": "port_singapore", "name": "Singapore", "region": "asia", "country": "SG", "lat": 1.29, "lon": 103.85, |
| "throughput_teu": 39_000_000, "capacity": 450, "avg_dwell_days": 1.5, "customs_delay_days": 0.8, |
| "lpi_score": 4.3}, |
| {"id": "port_rotterdam", "name": "Rotterdam", "region": "europe", "country": "NL", "lat": 51.92, "lon": 4.48, |
| "throughput_teu": 14_500_000, "capacity": 400, "avg_dwell_days": 2.3, "customs_delay_days": 1.2, |
| "lpi_score": 4.1}, |
| {"id": "port_hamburg", "name": "Hamburg", "region": "europe", "country": "DE", "lat": 53.55, "lon": 9.99, |
| "throughput_teu": 8_700_000, "capacity": 300, "avg_dwell_days": 2.5, "customs_delay_days": 1.0, |
| "lpi_score": 4.1}, |
| {"id": "port_la", "name": "Los Angeles", "region": "americas", "country": "US", "lat": 33.74, "lon": -118.26, |
| "throughput_teu": 9_900_000, "capacity": 380, "avg_dwell_days": 4.2, "customs_delay_days": 2.5, |
| "lpi_score": 3.8}, |
| {"id": "port_dubai", "name": "Jebel Ali (Dubai)", "region": "middle_east", "country": "AE", "lat": 25.01, "lon": 55.06, |
| "throughput_teu": 14_000_000, "capacity": 350, "avg_dwell_days": 2.0, "customs_delay_days": 1.0, |
| "lpi_score": 3.9}, |
| {"id": "port_mumbai", "name": "Nhava Sheva (Mumbai)", "region": "asia", "country": "IN", "lat": 18.95, "lon": 72.95, |
| "throughput_teu": 5_500_000, "capacity": 250, "avg_dwell_days": 3.5, "customs_delay_days": 3.0, |
| "lpi_score": 3.2}, |
| {"id": "port_santos", "name": "Santos", "region": "americas", "country": "BR", "lat": -23.96, "lon": -46.30, |
| "throughput_teu": 4_800_000, "capacity": 200, "avg_dwell_days": 5.0, "customs_delay_days": 4.0, |
| "lpi_score": 2.9}, |
| {"id": "port_busan", "name": "Busan", "region": "asia", "country": "KR", "lat": 35.10, "lon": 129.03, |
| "throughput_teu": 22_000_000, "capacity": 380, "avg_dwell_days": 1.8, "customs_delay_days": 0.9, |
| "lpi_score": 3.7}, |
| {"id": "port_felixstowe", "name": "Felixstowe", "region": "europe", "country": "GB", "lat": 51.96, "lon": 1.30, |
| "throughput_teu": 3_800_000, "capacity": 200, "avg_dwell_days": 3.0, "customs_delay_days": 2.0, |
| "lpi_score": 3.6}, |
| ] |
|
|
| |
| |
| REAL_ROUTES = [ |
| |
| {"from": "port_shanghai", "to": "port_la", "cost_per_teu": 3200, "transit_days": 14, "capacity_teu": 15000, |
| "carrier": "Maersk/MSC", "mode": "ocean", "via_canal": None}, |
| {"from": "port_busan", "to": "port_la", "cost_per_teu": 2800, "transit_days": 12, "capacity_teu": 12000, |
| "carrier": "HMM/Evergreen", "mode": "ocean", "via_canal": None}, |
| |
| {"from": "port_shanghai", "to": "port_rotterdam", "cost_per_teu": 2500, "transit_days": 28, "capacity_teu": 20000, |
| "carrier": "2M Alliance", "mode": "ocean", "via_canal": "suez"}, |
| {"from": "port_singapore", "to": "port_rotterdam", "cost_per_teu": 2200, "transit_days": 22, "capacity_teu": 18000, |
| "carrier": "Ocean Alliance", "mode": "ocean", "via_canal": "suez"}, |
| |
| {"from": "port_shanghai", "to": "port_singapore", "cost_per_teu": 400, "transit_days": 4, "capacity_teu": 8000, |
| "carrier": "Regional", "mode": "ocean", "via_canal": None}, |
| {"from": "port_busan", "to": "port_shanghai", "cost_per_teu": 250, "transit_days": 2, "capacity_teu": 10000, |
| "carrier": "Regional", "mode": "ocean", "via_canal": None}, |
| {"from": "port_singapore", "to": "port_mumbai", "cost_per_teu": 600, "transit_days": 6, "capacity_teu": 6000, |
| "carrier": "Regional", "mode": "ocean", "via_canal": None}, |
| |
| {"from": "port_rotterdam", "to": "port_hamburg", "cost_per_teu": 150, "transit_days": 1, "capacity_teu": 5000, |
| "carrier": "Feeder", "mode": "barge", "via_canal": None}, |
| {"from": "port_rotterdam", "to": "port_felixstowe", "cost_per_teu": 200, "transit_days": 1, "capacity_teu": 4000, |
| "carrier": "Feeder", "mode": "ocean", "via_canal": None}, |
| {"from": "port_hamburg", "to": "port_felixstowe", "cost_per_teu": 180, "transit_days": 1, "capacity_teu": 3000, |
| "carrier": "Feeder", "mode": "ocean", "via_canal": None}, |
| |
| {"from": "port_shanghai", "to": "port_dubai", "cost_per_teu": 1800, "transit_days": 16, "capacity_teu": 12000, |
| "carrier": "THE Alliance", "mode": "ocean", "via_canal": None}, |
| {"from": "port_dubai", "to": "port_rotterdam", "cost_per_teu": 1500, "transit_days": 14, "capacity_teu": 10000, |
| "carrier": "2M Alliance", "mode": "ocean", "via_canal": "suez"}, |
| {"from": "port_dubai", "to": "port_mumbai", "cost_per_teu": 500, "transit_days": 3, "capacity_teu": 5000, |
| "carrier": "Regional", "mode": "ocean", "via_canal": None}, |
| {"from": "port_mumbai", "to": "port_singapore", "cost_per_teu": 650, "transit_days": 6, "capacity_teu": 5000, |
| "carrier": "Regional", "mode": "ocean", "via_canal": None}, |
| |
| {"from": "port_la", "to": "port_santos", "cost_per_teu": 2800, "transit_days": 16, "capacity_teu": 6000, |
| "carrier": "MSC", "mode": "ocean", "via_canal": "panama"}, |
| {"from": "port_santos", "to": "port_rotterdam", "cost_per_teu": 2100, "transit_days": 18, "capacity_teu": 8000, |
| "carrier": "Hapag-Lloyd", "mode": "ocean", "via_canal": None}, |
| |
| {"from": "port_rotterdam", "to": "port_la", "cost_per_teu": 2600, "transit_days": 14, "capacity_teu": 10000, |
| "carrier": "THE Alliance", "mode": "ocean", "via_canal": "panama"}, |
| |
| {"from": "port_shanghai", "to": "port_hamburg", "cost_per_teu": 4500, "transit_days": 18, "capacity_teu": 2000, |
| "carrier": "China-Europe Rail", "mode": "rail", "via_canal": None}, |
| {"from": "port_singapore", "to": "port_la", "cost_per_teu": 3800, "transit_days": 20, "capacity_teu": 14000, |
| "carrier": "Ocean Alliance", "mode": "ocean", "via_canal": None}, |
| {"from": "port_singapore", "to": "port_dubai", "cost_per_teu": 800, "transit_days": 7, "capacity_teu": 7000, |
| "carrier": "Regional", "mode": "ocean", "via_canal": None}, |
| ] |
|
|
| |
| REAL_DISRUPTION_HISTORY = [ |
| {"type": "pandemic", "name": "COVID-19 Wave", "year": 2020, "duration_days": 90, "severity": "critical", |
| "affected": "all_ports", "capacity_impact": 0.5, |
| "source": "WHO Situation Report 2020", |
| "economic_impact_usd": 4_000_000_000_000}, |
| {"type": "canal_blockage", "name": "Ever Given Suez Blockage", "year": 2021, "duration_days": 6, "severity": "critical", |
| "affected": "suez_routes", "capacity_impact": 1.0, |
| "source": "Lloyd's List, March 2021", |
| "economic_impact_usd": 9_600_000_000}, |
| {"type": "port_congestion", "name": "LA/Long Beach Congestion", "year": 2021, "duration_days": 180, "severity": "high", |
| "affected": "port_la", "capacity_impact": 0.6, |
| "source": "Marine Exchange of SoCal 2021", |
| "economic_impact_usd": 24_000_000_000}, |
| {"type": "chip_shortage", "name": "Global Semiconductor Shortage", "year": 2021, "duration_days": 365, "severity": "critical", |
| "affected": "semiconductor_factories", "capacity_impact": 0.7, |
| "source": "IPC/SIA Joint Report 2021", |
| "economic_impact_usd": 240_000_000_000}, |
| {"type": "typhoon", "name": "Typhoon Chanthu", "year": 2021, "duration_days": 4, "severity": "high", |
| "affected": "port_shanghai", "capacity_impact": 1.0, |
| "source": "JMA Advisory Sep 2021", |
| "economic_impact_usd": 2_000_000_000}, |
| {"type": "war", "name": "Red Sea/Houthi Attacks", "year": 2024, "duration_days": 120, "severity": "critical", |
| "affected": "suez_routes", "capacity_impact": 0.8, |
| "source": "CENTCOM/Lloyd's List 2024", |
| "economic_impact_usd": 80_000_000_000}, |
| {"type": "port_strike", "name": "Felixstowe Strike", "year": 2022, "duration_days": 8, "severity": "medium", |
| "affected": "port_felixstowe", "capacity_impact": 1.0, |
| "source": "Unite the Union, Aug 2022", |
| "economic_impact_usd": 800_000_000}, |
| {"type": "drought", "name": "Panama Canal Drought", "year": 2023, "duration_days": 180, "severity": "high", |
| "affected": "panama_routes", "capacity_impact": 0.4, |
| "source": "Panama Canal Authority 2023", |
| "economic_impact_usd": 6_000_000_000}, |
| {"type": "cyber_attack", "name": "Maersk NotPetya Attack", "year": 2017, "duration_days": 14, "severity": "critical", |
| "affected": "maersk_operations", "capacity_impact": 0.9, |
| "source": "Maersk Annual Report 2017", |
| "economic_impact_usd": 300_000_000}, |
| {"type": "earthquake", "name": "Turkey-Syria Earthquake", "year": 2023, "duration_days": 30, "severity": "high", |
| "affected": "turkey_ports", "capacity_impact": 0.8, |
| "source": "USGS/EMSC Feb 2023", |
| "economic_impact_usd": 34_000_000_000}, |
| ] |
|
|
| |
| COMMODITY_VALUES = { |
| "electronics": {"value_per_teu": 65_000, "weight_tons": 12, "perishable": False, "hazmat": False}, |
| "semiconductors": {"value_per_teu": 250_000, "weight_tons": 8, "perishable": False, "hazmat": False}, |
| "automobiles": {"value_per_teu": 120_000, "weight_tons": 18, "perishable": False, "hazmat": False}, |
| "pharmaceuticals": {"value_per_teu": 180_000, "weight_tons": 6, "perishable": True, "hazmat": False}, |
| "textiles": {"value_per_teu": 15_000, "weight_tons": 10, "perishable": False, "hazmat": False}, |
| "food": {"value_per_teu": 8_000, "weight_tons": 20, "perishable": True, "hazmat": False}, |
| "chemicals": {"value_per_teu": 45_000, "weight_tons": 22, "perishable": False, "hazmat": True}, |
| "machinery": {"value_per_teu": 80_000, "weight_tons": 20, "perishable": False, "hazmat": False}, |
| } |
|
|
| |
| REAL_FACTORIES = [ |
| {"id": "fac_shenzhen_elec", "name": "Shenzhen Electronics Hub", "region": "asia", "country": "CN", |
| "product": "electronics", "output_teu_per_day": 120, "nearest_port": "port_shanghai", |
| "source": "Shenzhen Municipal Statistics 2023"}, |
| {"id": "fac_tsmc_hsinchu", "name": "TSMC Hsinchu Fab", "region": "asia", "country": "TW", |
| "product": "semiconductors", "output_teu_per_day": 15, "nearest_port": "port_shanghai", |
| "source": "TSMC Annual Report 2023"}, |
| {"id": "fac_detroit_auto", "name": "Detroit Auto Assembly", "region": "americas", "country": "US", |
| "product": "automobiles", "output_teu_per_day": 25, "nearest_port": "port_la", |
| "source": "NHTSA Production Data 2023"}, |
| {"id": "fac_hyderabad_pharma", "name": "Hyderabad Pharma Cluster", "region": "asia", "country": "IN", |
| "product": "pharmaceuticals", "output_teu_per_day": 40, "nearest_port": "port_mumbai", |
| "source": "IBEF Pharma Report 2023"}, |
| {"id": "fac_dhaka_textile", "name": "Dhaka Garment District", "region": "asia", "country": "BD", |
| "product": "textiles", "output_teu_per_day": 80, "nearest_port": "port_singapore", |
| "source": "BGMEA Export Data 2023"}, |
| {"id": "fac_saopaulo_food", "name": "Sao Paulo Agribusiness", "region": "americas", "country": "BR", |
| "product": "food", "output_teu_per_day": 60, "nearest_port": "port_santos", |
| "source": "CONAB Report 2023"}, |
| {"id": "fac_wolfsburg_auto", "name": "Wolfsburg VW Plant", "region": "europe", "country": "DE", |
| "product": "automobiles", "output_teu_per_day": 30, "nearest_port": "port_hamburg", |
| "source": "VW Production Report 2023"}, |
| {"id": "fac_samsung_pyeongtaek", "name": "Samsung Pyeongtaek", "region": "asia", "country": "KR", |
| "product": "semiconductors", "output_teu_per_day": 20, "nearest_port": "port_busan", |
| "source": "Samsung IR 2023"}, |
| {"id": "fac_basf_ludwigshafen", "name": "BASF Ludwigshafen", "region": "europe", "country": "DE", |
| "product": "chemicals", "output_teu_per_day": 35, "nearest_port": "port_rotterdam", |
| "source": "BASF Verbund Report 2023"}, |
| {"id": "fac_caterpillar_peoria", "name": "Caterpillar Peoria", "region": "americas", "country": "US", |
| "product": "machinery", "output_teu_per_day": 15, "nearest_port": "port_la", |
| "source": "CAT Annual Report 2023"}, |
| ] |
|
|
| REAL_WAREHOUSES = [ |
| {"id": "wh_chicago", "name": "Chicago Intermodal Hub", "region": "americas", "country": "US", |
| "capacity_teu": 50000, "nearest_port": "port_la", "last_mile": "rail+truck", |
| "demand_teu_per_day": 200}, |
| {"id": "wh_london", "name": "London Gateway DC", "region": "europe", "country": "GB", |
| "capacity_teu": 35000, "nearest_port": "port_felixstowe", "last_mile": "truck", |
| "demand_teu_per_day": 150}, |
| {"id": "wh_tokyo", "name": "Tokyo Bay Logistics", "region": "asia", "country": "JP", |
| "capacity_teu": 40000, "nearest_port": "port_busan", "last_mile": "ocean+truck", |
| "demand_teu_per_day": 180}, |
| {"id": "wh_dubai_jafza", "name": "JAFZA Free Zone", "region": "middle_east", "country": "AE", |
| "capacity_teu": 30000, "nearest_port": "port_dubai", "last_mile": "truck", |
| "demand_teu_per_day": 120}, |
| {"id": "wh_frankfurt", "name": "Frankfurt Cargo City", "region": "europe", "country": "DE", |
| "capacity_teu": 45000, "nearest_port": "port_rotterdam", "last_mile": "rail+truck", |
| "demand_teu_per_day": 160}, |
| {"id": "wh_sydney", "name": "Sydney Intermodal", "region": "oceania", "country": "AU", |
| "capacity_teu": 20000, "nearest_port": "port_singapore", "last_mile": "ocean+truck", |
| "demand_teu_per_day": 80}, |
| ] |
|
|