Skip to content

Playing Victoria 3 with scripts and excel tables

This project extracts Victoria 3 game definitions into human-readable tables and figures.

But visualizing game concepts is only the beginning: the true purpose is to:

  • build a mathematical model
  • translate your game objectives into mathematical language
  • solve for an optimal solution that guides your gameplay.

And you not only get to see how, but also get to see why:

  • the marginal value of each building level
  • the bottlenecks in your supply chain
  • the trade-offs between different production strategies,

all without even installing the game.

  • Build an analysis


    Set up the package, then choose a guide for parsing game data, modeling an economy, or tracing supply chains.

    Start the tutorial

  • Explore the results


    Preview every generated table and figure, download the complete files, and open the script that produced each result.

    Browse the showcase

What the project covers

  • Parse game data — Buildings, goods, production methods, technologies, population needs, and state-region resources become pandas DataFrames.
  • Model an economy — Translate building levels into goods flows, employment, wealth, GDP, and nominal or market prices.
  • Optimize production — Express objectives and constraints in a reusable Scenario, then solve them with SciPy's linear programming tools.
  • Trace supply chains — Visualize upstream dependencies, attribute value added, inspect bottlenecks, and compare scenario sweeps.

Install

pip install "https://github.com/ShabbyGayBar/victoria3-analysis/releases/download/v0.1.0/vic3_analysis-0.1.0-py3-none-any.whl"
git clone --recurse-submodules https://github.com/ShabbyGayBar/victoria3-analysis.git
cd victoria3-analysis
uv sync

Python 3.13 is required. Parsing fresh data also requires a local Victoria 3 installation; although analyses based on the committed tables can be explored without one.

A supply chain at a glance

The same public API can produce an aggregated recipe graph or a realized graph from a solved scenario. This example is generated by examples/supply_chain_compare.py.

flowchart LR
    n0(("aeroplanes"))
    n1(("automobiles ★"))
    n2(("clippers"))
    n3(("clothes"))
    n4(("coal"))
    n5(("copper"))
    n6(("dye"))
    n7(("electricity"))
    n8(("engines"))
    n9(("explosives"))
    n10(("fabric"))
    n11(("fertilizer"))
    n12(("fish"))
    n13(("fruit"))
    n14(("furniture"))
    n15(("glass"))
    n16(("grain"))
    n17(("hardwood"))
    n18(("iron"))
    n19(("lead"))
    n20(("liquor"))
    n21(("meat"))
    n22(("oil"))
    n23(("paper"))
    n24(("porcelain"))
    n25(("rubber"))
    n26(("services"))
    n27(("silk"))
    n28(("steamers"))
    n29(("steel"))
    n30(("sugar"))
    n31(("sulfur"))
    n32(("tanks"))
    n33(("tools"))
    n34(("transportation"))
    n35(("wood"))
    n36["building_automotive_industry<br/>lvl=0"]
    n37["building_automotive_industry<br/>lvl=0"]
    n38["building_automotive_industry<br/>lvl=0"]
    n39["building_automotive_industry<br/>lvl=0"]
    n40["building_automotive_industry<br/>lvl=0"]
    n41["building_automotive_industry<br/>lvl=0"]
    n42["building_automotive_industry<br/>lvl=20 | active"]
    n43["building_automotive_industry<br/>lvl=0"]
    n44["building_chemical_plant<br/>lvl=0"]
    n45["building_chemical_plant<br/>lvl=0"]
    n46["building_chemical_plant<br/>lvl=0.03524 | active"]
    n47["building_coal_mine<br/>lvl=0"]
    n48["building_coal_mine<br/>lvl=0"]
    n49["building_coal_mine<br/>lvl=0.4393 | active"]
    n50["building_copper_mine<br/>lvl=0"]
    n51["building_copper_mine<br/>lvl=0"]
    n52["building_copper_mine<br/>lvl=0.3686 | active"]
    n53["building_cossack_host<br/>lvl=0"]
    n54["building_cossack_host<br/>lvl=0"]
    n55["building_cotton_plantation<br/>lvl=0"]
    n56["building_cotton_plantation<br/>lvl=0"]
    n57["building_cotton_plantation<br/>lvl=0"]
    n58["building_dye_plantation<br/>lvl=0"]
    n59["building_explosives_factory<br/>lvl=0"]
    n60["building_explosives_factory<br/>lvl=0.1379 | active"]
    n61["building_explosives_factory<br/>lvl=0"]
    n62["building_fishing_wharf<br/>lvl=0"]
    n63["building_fishing_wharf<br/>lvl=0"]
    n64["building_fishing_wharf<br/>lvl=0"]
    n65["building_glassworks<br/>lvl=0"]
    n66["building_glassworks<br/>lvl=0"]
    n67["building_glassworks<br/>lvl=0"]
    n68["building_glassworks<br/>lvl=0"]
    n69["building_glassworks<br/>lvl=0"]
    n70["building_glassworks<br/>lvl=0"]
    n71["building_iron_mine<br/>lvl=0"]
    n72["building_iron_mine<br/>lvl=0"]
    n73["building_iron_mine<br/>lvl=1.186 | active"]
    n74["building_lead_mine<br/>lvl=0"]
    n75["building_lead_mine<br/>lvl=0"]
    n76["building_lead_mine<br/>lvl=0"]
    n77["building_livestock_ranch<br/>lvl=0"]
    n78["building_livestock_ranch<br/>lvl=0"]
    n79["building_livestock_ranch<br/>lvl=0"]
    n80["building_logging_camp<br/>lvl=0"]
    n81["building_logging_camp<br/>lvl=0"]
    n82["building_logging_camp<br/>lvl=0"]
    n83["building_logging_camp<br/>lvl=0.01241 | active"]
    n84["building_logging_camp<br/>lvl=0"]
    n85["building_logging_camp<br/>lvl=0"]
    n86["building_motor_industry<br/>lvl=2.48 | active"]
    n87["building_motor_industry<br/>lvl=0"]
    n88["building_motor_industry<br/>lvl=0"]
    n89["building_oil_rig<br/>lvl=0"]
    n90["building_oil_rig<br/>lvl=0"]
    n91["building_oil_rig<br/>lvl=5.084 | active"]
    n92["building_paper_mill<br/>lvl=0"]
    n93["building_paper_mill<br/>lvl=0.04136 | active"]
    n94["building_paper_mill<br/>lvl=0"]
    n95["building_power_plant<br/>lvl=0"]
    n96["building_power_plant<br/>lvl=0"]
    n97["building_power_plant<br/>lvl=1.908 | active"]
    n98["building_railway<br/>lvl=1.551 | active"]
    n99["building_railway<br/>lvl=0"]
    n100["building_railway<br/>lvl=0"]
    n101["building_railway<br/>lvl=0"]
    n102["building_rice_farm<br/>lvl=0"]
    n103["building_rice_farm<br/>lvl=0"]
    n104["building_rice_farm<br/>lvl=0"]
    n105["building_rice_farm<br/>lvl=0"]
    n106["building_rice_farm<br/>lvl=0"]
    n107["building_rice_farm<br/>lvl=0"]
    n108["building_rubber_plantation<br/>lvl=0"]
    n109["building_rubber_plantation<br/>lvl=3.254 | active"]
    n110["building_rubber_plantation<br/>lvl=0"]
    n111["building_rye_farm<br/>lvl=0"]
    n112["building_rye_farm<br/>lvl=0"]
    n113["building_rye_farm<br/>lvl=0"]
    n114["building_rye_farm<br/>lvl=0"]
    n115["building_rye_farm<br/>lvl=0"]
    n116["building_rye_farm<br/>lvl=0"]
    n117["building_shipyard<br/>lvl=0"]
    n118["building_shipyard<br/>lvl=0"]
    n119["building_shipyard<br/>lvl=0"]
    n120["building_shipyard<br/>lvl=0"]
    n121["building_steel_mill<br/>lvl=0"]
    n122["building_steel_mill<br/>lvl=1.057 | active"]
    n123["building_steel_mill<br/>lvl=0"]
    n124["building_sulfur_mine<br/>lvl=0"]
    n125["building_sulfur_mine<br/>lvl=0"]
    n126["building_sulfur_mine<br/>lvl=0.07442 | active"]
    n127["building_synthetics_plant<br/>lvl=0.00517 | active"]
    n128["building_synthetics_plant<br/>lvl=0"]
    n129["building_tooling_workshop<br/>lvl=1.151 | active"]
    n130["building_tooling_workshop<br/>lvl=0"]
    n131["building_tooling_workshop<br/>lvl=0"]
    n132["building_urban_center<br/>lvl=0"]
    n133["building_urban_center<br/>lvl=0"]
    n134["building_urban_center<br/>lvl=0"]
    n4 -.->|"1.474"| n52
    n4 -->|"r=15"| n62
    n4 -->|"r=15"| n63
    n4 -->|"r=15"| n64
    n4 -.->|"4.744"| n73
    n4 -.->|"r=4"| n76
    n4 -.->|"r=5"| n77
    n4 -.->|"r=5"| n78
    n4 -.->|"r=5"| n79
    n4 -.->|"r=10"| n88
    n4 -.->|"0.4136"| n93
    n4 -.->|"r=5"| n94
    n4 -.->|"r=15"| n95
    n4 -.->|"r=5"| n96
    n4 -.->|"r=2"| n102
    n4 -.->|"r=2"| n105
    n4 -.->|"r=1"| n112
    n4 -.->|"r=1"| n115
    n4 -->|"r=10"| n120
    n4 -.->|"r=30"| n121
    n4 -.->|"42.27"| n122
    n4 -.->|"r=35"| n123
    n4 -.->|"0.2977"| n126
    n4 -.->|"r=15"| n131
    n5 -->|"r=1"| n36
    n5 -->|"r=1"| n38
    n5 -->|"r=1"| n40
    n5 -->|"r=1"| n41
    n5 -->|"20"| n42
    n5 -->|"r=1"| n62
    n5 -->|"r=1"| n63
    n5 -->|"r=1"| n64
    n5 -.->|"2.48"| n86
    n5 -.->|"r=4"| n95
    n5 -.->|"r=2"| n96
    n5 -.->|"9.542"| n97
    n5 -.->|"1.151"| n129
    n5 -.->|"r=1"| n132
    n5 -.->|"r=1"| n133
    n5 -.->|"r=1"| n134
    n6 -.->|"r=10"| n65
    n6 -.->|"r=10"| n66
    n6 -.->|"r=10"| n67
    n6 -.->|"r=5"| n68
    n6 -.->|"r=10"| n92
    n6 -.->|"0.4136"| n93
    n6 -.->|"r=10"| n94
    n7 -->|"r=5"| n36
    n7 -->|"r=5"| n38
    n7 -->|"r=5"| n40
    n7 -->|"r=5"| n41
    n7 -->|"100"| n42
    n7 -.->|"2.758"| n60
    n7 -->|"r=6"| n62
    n7 -->|"r=4"| n63
    n7 -->|"r=4"| n64
    n7 -.->|"r=1"| n77
    n7 -.->|"r=1"| n78
    n7 -.->|"r=5"| n80
    n7 -.->|"r=5"| n81
    n7 -.->|"r=5"| n82
    n7 -.->|"0.06204"| n83
    n7 -.->|"r=5"| n84
    n7 -.->|"r=5"| n85
    n7 -.->|"12.4"| n86
    n7 -.->|"r=10"| n101
    n7 -->|"r=30"| n117
    n7 -.->|"r=30"| n121
    n7 -.->|"31.7"| n122
    n7 -.->|"r=30"| n123
    n7 -.->|"5.753"| n129
    n7 -.->|"r=4"| n132
    n7 -.->|"r=4"| n133
    n7 -.->|"r=4"| n134
    n8 -->|"r=10"| n36
    n8 -->|"r=10"| n37
    n8 -->|"r=10"| n38
    n8 -->|"r=10"| n39
    n8 -->|"r=10"| n40
    n8 -->|"r=10"| n41
    n8 -->|"200"| n42
    n8 -->|"r=10"| n43
    n8 -.->|"0.4393"| n49
    n8 -.->|"0.3686"| n52
    n8 -->|"r=5"| n55
    n8 -->|"r=5"| n56
    n8 -->|"r=5"| n57
    n8 -.->|"r=5"| n58
    n8 -.->|"r=2"| n65
    n8 -.->|"r=2"| n67
    n8 -.->|"r=2"| n68
    n8 -.->|"r=2"| n69
    n8 -.->|"1.186"| n73
    n8 -.->|"r=1"| n76
    n8 -.->|"r=1"| n80
    n8 -.->|"r=1"| n81
    n8 -.->|"r=1"| n82
    n8 -.->|"0.01241"| n83
    n8 -.->|"r=1"| n84
    n8 -.->|"r=1"| n85
    n8 -.->|"r=10"| n89
    n8 -.->|"r=10"| n90
    n8 -.->|"50.84"| n91
    n8 -.->|"r=6"| n95
    n8 -.->|"r=4"| n96
    n8 -.->|"19.08"| n97
    n8 -.->|"9.306"| n98
    n8 -.->|"r=6"| n99
    n8 -.->|"r=6"| n100
    n8 -.->|"r=6"| n101
    n8 -.->|"r=5"| n108
    n8 -.->|"16.27"| n109
    n8 -.->|"r=5"| n110
    n8 -.->|"r=1"| n111
    n8 -.->|"r=1"| n114
    n8 -->|"r=10"| n117
    n8 -->|"r=5"| n119
    n8 -->|"r=10"| n120
    n8 -.->|"0.07442"| n126
    n9 -.->|"r=10"| n47
    n9 -.->|"r=10"| n48
    n9 -.->|"4.393"| n49
    n9 -.->|"r=10"| n50
    n9 -.->|"r=10"| n51
    n9 -.->|"3.686"| n52
    n9 -.->|"r=10"| n71
    n9 -.->|"r=10"| n72
    n9 -.->|"11.86"| n73
    n9 -.->|"r=10"| n74
    n9 -.->|"r=10"| n75
    n9 -.->|"r=10"| n76
    n9 -.->|"r=10"| n124
    n9 -.->|"r=10"| n125
    n9 -.->|"0.7442"| n126
    n10 -->|"r=4"| n36
    n10 -->|"r=4"| n37
    n10 -->|"r=4"| n40
    n10 -->|"r=4"| n41
    n10 -->|"r=20"| n118
    n10 -->|"r=20"| n119
    n11 -.->|"r=30"| n59
    n11 -.->|"6.894"| n60
    n11 -.->|"r=40"| n61
    n11 -.->|"r=30"| n102
    n11 -.->|"r=30"| n103
    n11 -.->|"r=30"| n104
    n11 -.->|"r=30"| n105
    n11 -.->|"r=30"| n106
    n11 -.->|"r=30"| n107
    n11 -.->|"r=15"| n111
    n11 -.->|"r=15"| n112
    n11 -.->|"r=15"| n113
    n11 -.->|"r=15"| n114
    n11 -.->|"r=15"| n115
    n11 -.->|"r=15"| n116
    n11 -.->|"0.1551"| n127
    n11 -.->|"r=30"| n128
    n15 -.->|"r=2"| n132
    n15 -.->|"r=2"| n133
    n15 -.->|"r=2"| n134
    n16 -.->|"r=15"| n77
    n16 -.->|"r=15"| n78
    n16 -.->|"r=15"| n79
    n17 -->|"r=4"| n36
    n17 -->|"r=4"| n37
    n17 -->|"r=4"| n40
    n17 -->|"r=4"| n41
    n17 -->|"r=20"| n119
    n18 -.->|"r=10"| n44
    n18 -.->|"r=30"| n45
    n18 -.->|"1.057"| n46
    n18 -.->|"r=1"| n77
    n18 -.->|"r=1"| n78
    n18 -.->|"r=1"| n79
    n18 -.->|"r=100"| n121
    n18 -.->|"105.7"| n122
    n18 -.->|"r=100"| n123
    n19 -.->|"r=35"| n65
    n19 -.->|"r=35"| n66
    n19 -.->|"r=30"| n68
    n19 -.->|"r=30"| n69
    n19 -.->|"r=30"| n70
    n22 -->|"r=10"| n36
    n22 -->|"r=5"| n37
    n22 -->|"r=10"| n38
    n22 -->|"r=5"| n39
    n22 -->|"r=15"| n40
    n22 -->|"r=15"| n41
    n22 -->|"300"| n42
    n22 -->|"r=10"| n43
    n22 -.->|"0.7049"| n46
    n22 -.->|"r=5"| n47
    n22 -.->|"r=5"| n48
    n22 -.->|"2.196"| n49
    n22 -.->|"r=5"| n50
    n22 -.->|"r=5"| n51
    n22 -.->|"1.843"| n52
    n22 -.->|"r=5"| n65
    n22 -.->|"r=5"| n67
    n22 -.->|"r=25"| n68
    n22 -.->|"r=25"| n69
    n22 -.->|"r=20"| n70
    n22 -.->|"r=5"| n71
    n22 -.->|"r=5"| n72
    n22 -.->|"5.929"| n73
    n22 -.->|"r=5"| n74
    n22 -.->|"r=5"| n75
    n22 -.->|"r=5"| n76
    n22 -.->|"r=4"| n80
    n22 -.->|"r=4"| n81
    n22 -.->|"r=4"| n82
    n22 -.->|"0.04964"| n83
    n22 -.->|"r=4"| n84
    n22 -.->|"r=4"| n85
    n22 -.->|"136.4"| n86
    n22 -.->|"r=50"| n87
    n22 -.->|"r=50"| n88
    n22 -.->|"38.17"| n97
    n22 -.->|"12.41"| n98
    n22 -.->|"r=8"| n99
    n22 -.->|"r=8"| n100
    n22 -.->|"r=2"| n111
    n22 -.->|"r=2"| n114
    n22 -.->|"r=5"| n124
    n22 -.->|"r=5"| n125
    n22 -.->|"0.3721"| n126
    n22 -.->|"10.35"| n129
    n23 -.->|"r=10"| n59
    n23 -.->|"4.136"| n60
    n23 -.->|"r=20"| n61
    n25 -->|"r=5"| n36
    n25 -->|"r=5"| n37
    n25 -->|"r=5"| n38
    n25 -->|"r=5"| n39
    n25 -->|"r=10"| n40
    n25 -->|"r=10"| n41
    n25 -->|"200"| n42
    n25 -->|"r=10"| n43
    n25 -.->|"11.51"| n129
    n25 -.->|"r=10"| n130
    n25 -.->|"r=10"| n131
    n28 -->|"r=5"| n62
    n28 -->|"r=5"| n63
    n28 -->|"r=5"| n64
    n29 -->|"r=5"| n38
    n29 -->|"r=5"| n39
    n29 -->|"r=5"| n41
    n29 -.->|"124"| n86
    n29 -.->|"r=50"| n87
    n29 -.->|"r=50"| n88
    n29 -.->|"r=5"| n99
    n29 -.->|"r=5"| n101
    n29 -->|"r=30"| n117
    n29 -->|"r=30"| n120
    n29 -.->|"34.52"| n129
    n29 -.->|"r=30"| n130
    n29 -.->|"r=30"| n131
    n29 -.->|"r=1"| n132
    n29 -.->|"r=1"| n133
    n29 -.->|"r=1"| n134
    n31 -.->|"r=30"| n44
    n31 -.->|"r=30"| n45
    n31 -.->|"1.41"| n46
    n31 -.->|"r=30"| n59
    n31 -.->|"5.515"| n60
    n31 -.->|"r=40"| n61
    n31 -.->|"r=10"| n92
    n31 -.->|"0.4136"| n93
    n31 -.->|"r=10"| n94
    n31 -.->|"0.1034"| n127
    n31 -.->|"r=20"| n128
    n33 -->|"r=4"| n36
    n33 -->|"r=4"| n38
    n33 -->|"r=4"| n40
    n33 -->|"r=4"| n41
    n33 -->|"80"| n42
    n33 -.->|"r=15"| n47
    n33 -.->|"r=15"| n48
    n33 -.->|"6.589"| n49
    n33 -.->|"r=15"| n50
    n33 -.->|"r=15"| n51
    n33 -.->|"5.529"| n52
    n33 -.->|"r=2"| n65
    n33 -.->|"r=2"| n67
    n33 -.->|"r=2"| n68
    n33 -.->|"r=2"| n69
    n33 -.->|"r=15"| n71
    n33 -.->|"r=15"| n72
    n33 -.->|"17.79"| n73
    n33 -.->|"r=15"| n74
    n33 -.->|"r=15"| n75
    n33 -.->|"r=15"| n76
    n33 -.->|"r=5"| n77
    n33 -.->|"r=5"| n78
    n33 -.->|"r=5"| n79
    n33 -.->|"r=10"| n80
    n33 -.->|"r=10"| n81
    n33 -.->|"r=10"| n82
    n33 -.->|"0.1241"| n83
    n33 -.->|"r=10"| n84
    n33 -.->|"r=10"| n85
    n33 -.->|"9.919"| n86
    n33 -.->|"r=5"| n88
    n33 -.->|"0.2068"| n93
    n33 -.->|"r=5"| n94
    n33 -.->|"r=4"| n102
    n33 -.->|"r=4"| n103
    n33 -.->|"r=4"| n105
    n33 -.->|"r=4"| n106
    n33 -.->|"r=2"| n112
    n33 -.->|"r=2"| n113
    n33 -.->|"r=2"| n115
    n33 -.->|"r=2"| n116
    n33 -.->|"5.284"| n122
    n33 -.->|"r=5"| n123
    n33 -.->|"r=15"| n124
    n33 -.->|"r=15"| n125
    n33 -.->|"1.116"| n126
    n34 -.->|"r=5"| n47
    n34 -.->|"2.196"| n49
    n34 -.->|"r=5"| n50
    n34 -.->|"1.843"| n52
    n34 -->|"r=5"| n56
    n34 -->|"r=7"| n62
    n34 -->|"r=5"| n63
    n34 -.->|"r=5"| n71
    n34 -.->|"5.929"| n73
    n34 -.->|"r=5"| n74
    n34 -.->|"r=5"| n76
    n34 -.->|"r=1"| n77
    n34 -.->|"r=8"| n80
    n34 -.->|"r=5"| n81
    n34 -.->|"0.09927"| n83
    n34 -.->|"r=5"| n84
    n34 -.->|"r=5"| n89
    n34 -.->|"50.84"| n91
    n34 -.->|"16.27"| n109
    n34 -.->|"r=5"| n124
    n34 -.->|"0.3721"| n126
    n35 -.->|"r=30"| n67
    n35 -.->|"r=30"| n92
    n35 -.->|"1.241"| n93
    n35 -.->|"r=30"| n94
    n35 -.->|"r=8"| n100
    n35 -->|"r=40"| n118
    n35 -->|"r=20"| n119
    n35 -.->|"r=10"| n128
    n36 -->|"r=10"| n0
    n36 -->|"r=20"| n1
    n37 -->|"r=10"| n0
    n37 -->|"r=20"| n1
    n38 -->|"r=10"| n1
    n38 -->|"r=20"| n32
    n39 -->|"r=10"| n1
    n39 -->|"r=20"| n32
    n40 -->|"r=10"| n0
    n40 -->|"r=40"| n1
    n41 -->|"r=10"| n0
    n41 -->|"r=20"| n1
    n41 -->|"r=20"| n32
    n42 -->|"1000"| n1
    n43 -->|"r=50"| n1
    n44 -.->|"r=90"| n11
    n45 -.->|"r=140"| n11
    n46 -.->|"7.049"| n11
    n47 -.->|"r=115"| n4
    n48 -.->|"r=115"| n4
    n49 -.->|"49.2"| n4
    n50 -.->|"r=90"| n5
    n51 -.->|"r=90"| n5
    n52 -.->|"33.17"| n5
    n53 -->|"r=0.25"| n3
    n53 -->|"r=3"| n10
    n53 -->|"r=0.25"| n14
    n53 -->|"r=5"| n16
    n53 -->|"r=0.25"| n20
    n53 -->|"r=4"| n21
    n53 -->|"r=0.25"| n26
    n53 -->|"r=0.5"| n35
    n54 -->|"r=0.25"| n3
    n54 -->|"r=3"| n10
    n54 -->|"r=0.25"| n14
    n54 -->|"r=5"| n16
    n54 -->|"r=0.25"| n20
    n54 -->|"r=4"| n21
    n54 -->|"r=0.25"| n26
    n54 -->|"r=0.5"| n35
    n55 -->|"r=100"| n10
    n56 -->|"r=100"| n10
    n57 -->|"r=90"| n10
    n58 -.->|"r=60"| n6
    n59 -.->|"r=80"| n9
    n60 -.->|"20.68"| n9
    n61 -.->|"r=110"| n9
    n62 -->|"r=100"| n12
    n63 -->|"r=100"| n12
    n64 -->|"r=100"| n12
    n65 -.->|"r=40"| n15
    n65 -->|"r=30"| n24
    n66 -.->|"r=40"| n15
    n66 -->|"r=30"| n24
    n67 -.->|"r=10"| n15
    n67 -->|"r=30"| n24
    n68 -.->|"r=90"| n15
    n68 -->|"r=10"| n24
    n69 -.->|"r=100"| n15
    n70 -.->|"r=100"| n15
    n71 -.->|"r=90"| n18
    n72 -.->|"r=90"| n18
    n73 -.->|"106.7"| n18
    n74 -.->|"r=90"| n19
    n75 -.->|"r=90"| n19
    n76 -.->|"r=90"| n19
    n77 -->|"r=25"| n10
    n77 -.->|"r=5"| n11
    n77 -->|"r=35"| n21
    n78 -->|"r=25"| n10
    n78 -.->|"r=5"| n11
    n78 -->|"r=35"| n21
    n79 -->|"r=25"| n10
    n79 -.->|"r=5"| n11
    n79 -->|"r=35"| n21
    n80 -->|"r=20"| n17
    n80 -.->|"r=60"| n35
    n81 -->|"r=20"| n17
    n81 -.->|"r=60"| n35
    n82 -->|"r=20"| n17
    n82 -.->|"r=60"| n35
    n83 -.->|"1.241"| n35
    n84 -.->|"r=100"| n35
    n85 -.->|"r=100"| n35
    n86 -.->|"297.6"| n8
    n87 -.->|"r=120"| n8
    n88 -.->|"r=120"| n8
    n89 -.->|"r=100"| n22
    n90 -.->|"r=100"| n22
    n91 -.->|"508.4"| n22
    n92 -.->|"r=100"| n23
    n93 -.->|"4.136"| n23
    n94 -.->|"r=100"| n23
    n95 -.->|"r=50"| n7
    n96 -.->|"r=25"| n7
    n97 -.->|"152.7"| n7
    n98 -.->|"77.55"| n34
    n99 -.->|"r=65"| n34
    n100 -.->|"r=60"| n34
    n101 -.->|"r=60"| n34
    n102 -->|"r=15"| n13
    n102 -.->|"r=80"| n16
    n102 -->|"r=2"| n30
    n103 -->|"r=15"| n13
    n103 -.->|"r=80"| n16
    n103 -->|"r=2"| n30
    n104 -->|"r=15"| n13
    n104 -.->|"r=80"| n16
    n104 -->|"r=2"| n30
    n105 -.->|"r=100"| n16
    n106 -.->|"r=100"| n16
    n107 -.->|"r=100"| n16
    n108 -.->|"r=65"| n25
    n109 -.->|"211.5"| n25
    n110 -.->|"r=50"| n25
    n111 -.->|"r=50"| n16
    n111 -->|"r=10"| n20
    n112 -.->|"r=50"| n16
    n112 -->|"r=10"| n20
    n113 -.->|"r=50"| n16
    n113 -->|"r=10"| n20
    n114 -.->|"r=55"| n16
    n114 -->|"r=4"| n30
    n115 -.->|"r=55"| n16
    n115 -->|"r=4"| n30
    n116 -.->|"r=55"| n16
    n116 -->|"r=4"| n30
    n117 -->|"r=80"| n28
    n118 -->|"r=40"| n2
    n119 -->|"r=70"| n2
    n120 -->|"r=65"| n28
    n121 -.->|"r=150"| n29
    n122 -.->|"158.5"| n29
    n123 -.->|"r=150"| n29
    n124 -.->|"r=100"| n31
    n125 -.->|"r=100"| n31
    n126 -.->|"7.442"| n31
    n127 -.->|"0.4136"| n6
    n128 -.->|"r=70"| n6
    n128 -->|"r=30"| n27
    n129 -.->|"126.6"| n33
    n130 -.->|"r=110"| n33
    n131 -.->|"r=110"| n33
    n132 -->|"r=40"| n26
    n132 -.->|"r=2"| n34
    n133 -->|"r=40"| n26
    n133 -.->|"r=2"| n34
    n134 -->|"r=40"| n26
    n134 -.->|"r=2"| n34
    class n4,n5,n6,n7,n8,n9,n11,n15,n16,n18,n19,n22,n23,n25,n29,n31,n33,n34,n35,n44,n45,n46,n47,n48,n49,n50,n51,n52,n58,n59,n60,n61,n65,n66,n67,n68,n69,n70,n71,n72,n73,n74,n75,n76,n77,n78,n79,n80,n81,n82,n83,n84,n85,n86,n87,n88,n89,n90,n91,n92,n93,n94,n95,n96,n97,n98,n99,n100,n101,n102,n103,n104,n105,n106,n107,n108,n109,n110,n111,n112,n113,n114,n115,n116,n121,n122,n123,n124,n125,n126,n127,n128,n129,n130,n131,n132,n133,n134 cyclic
    class n47,n48,n49,n50,n51,n52,n62,n63,n64,n71,n72,n73,n74,n75,n76,n80,n81,n82,n83,n84,n85,n89,n90,n91,n108,n109,n110,n124,n125,n126 resource
    class n42,n46,n49,n52,n60,n73,n83,n86,n91,n93,n97,n98,n109,n122,n126,n127,n129 active
    classDef cyclic stroke:#d97706,stroke-width:2px
    classDef resource fill:#dcfce7,stroke:#15803d
    classDef active fill:#dbeafe,stroke:#1d4ed8

Learn how supply-chain tracing works