{
  "generated_by": "scripts/build_review_priority.py",
  "method": "EF 3.1 (BAFU) | Climate Change",
  "perturbation_pct": 10.0,
  "note": "Elasticity = % change in a product's climate result per +10% change in one parameter. Where a parameter feeds several products, max_influence_pct is the largest across them. background_gwp_per_unit carries the per-unit cradle-to-gate climate impacts these shares were computed against, so the ranking is reproducible without a Brightway run.",
  "background_gwp_per_unit": {
    "activated_carbon_kg": 0.0,
    "anionic_polymer_kg": 9.055630719804928,
    "bleaching_earth_kg": 0.4322899694152256,
    "building_m2": 269.9186351969986,
    "building_m3": 162.4090329337909,
    "calcium_carbonate_kg": 0.0,
    "cane_sugar_kg": 0.21323481366774896,
    "coal_heat_mj": 0.13235918083755957,
    "compressed_air_l": 0.0,
    "condensate_water_kg": 0.0,
    "cooling_water_kg": 0.0,
    "detergent_kg": 1.5971049777226405,
    "dicalcium_phosphate_kg": 0.0,
    "diesel_kg": 0.7918539421891904,
    "disposal_facilities_kg": 0.06409169982288954,
    "electricity_fr_kwh": 0.0729912004343666,
    "electricity_kwh": 0.3178412733501923,
    "enzyme_kg": 0.0,
    "evaporated_water_kg": 0.0,
    "fecl3_kg": 0.4934969772747485,
    "h2o2_kg": 1.014875473999745,
    "hcl_kg": 0.0,
    "hexane_emission_kg": 0.0,
    "hexane_kg": 1.3024731865069668,
    "hfo_mj": 0.10234277330477534,
    "hno3_kg": 0.0,
    "light_fuel_oil_mj": 0.10011251204757655,
    "liquid_co2_kg": 0.7801811856563154,
    "lpg_mj": 0.08863523982992985,
    "lubricant_kg": 1.342748949725059,
    "machinery_kg": 2.3192559967245368,
    "mash_heating_steam_kg": 0.2594986594352535,
    "naoh_kg": 0.6167910687545498,
    "natural_gas_mj": 0.07469709779389817,
    "nitric_acid_kg": 3.0000867947982632,
    "pectin_kg": 0.0,
    "phosphoric_acid_kg": 1.4286547990231024,
    "process_water_kg": 0.0002007869941308086,
    "rapeseed_oil_kg": 0.17023896455383242,
    "road_m2_year": 1.4675980623839666,
    "salt_kg": 0.0,
    "solid_waste_incineration_kg": 0.08415590929568986,
    "solid_waste_kg": 0.040833341900913166,
    "steam_kg": 0.2594986594352535,
    "steam_water_kg": 0.0002007869941308086,
    "storage_tank_unit": 1444996.3368891713,
    "sugar_beet_molasses_kg": 0.1014834716881085,
    "sugar_beet_pulp_kg": 0.012488527639226843,
    "sugar_kg": 0.0,
    "tricalcium_phosphate_kg": 0.0,
    "wastewater_kg": 0.0004212739400544274,
    "wastewater_m3": 0.4212739400544274,
    "water_kg": 0.0002007869941308086,
    "wood_heat_mj": 0.009104807219073023
  },
  "n_products": 85,
  "n_parameters": 174,
  "noise_floor_pct": 0.01,
  "parameters": [
    {
      "parameter_path": "products/mango.concentrate_brix",
      "pool": "products",
      "value": 65.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 12.47589688432897,
      "signed_plus10": 12.47589688432897,
      "signed_minus10": -12.47589688432897,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "mango:puree_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "products/grape.concentrate_brix",
      "pool": "products",
      "value": 68.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 11.576384700950678,
      "signed_plus10": 11.576384700950678,
      "signed_minus10": -11.576384700950667,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "grape:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "products/tomato.concentrate_brix",
      "pool": "products",
      "value": 28.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 11.397736947311616,
      "signed_plus10": 11.397736947311616,
      "signed_minus10": -11.39773694731155,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "tomato:puree_concentrate",
      "n_products": 5
    },
    {
      "parameter_path": "products/mango.min_brix",
      "pool": "products",
      "value": 13.5,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 11.341724440299075,
      "signed_plus10": -11.341724440299075,
      "signed_minus10": 13.86210764925442,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "mango:puree_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "products/bell_pepper.concentrate_brix",
      "pool": "products",
      "value": 65.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 11.173243830789028,
      "signed_plus10": 11.173243830789028,
      "signed_minus10": -11.173243830788994,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "bell_pepper:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "products/black_currant.concentrate_brix",
      "pool": "products",
      "value": 65.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 11.015225836337018,
      "signed_plus10": 11.015225836337018,
      "signed_minus10": -11.015225836337018,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "black_currant:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "products/beetroot.concentrate_brix",
      "pool": "products",
      "value": 65.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 10.763998105312337,
      "signed_plus10": 10.763998105312337,
      "signed_minus10": -10.763998105312327,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "beetroot:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "products/apple.concentrate_brix",
      "pool": "products",
      "value": 70.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 10.615792216999965,
      "signed_plus10": 10.615792216999965,
      "signed_minus10": -10.615792216999948,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "apple:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "products/grape.min_brix",
      "pool": "products",
      "value": 16.0,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 10.523986091773356,
      "signed_plus10": -10.523986091773356,
      "signed_minus10": 12.862649667722975,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "grape:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "products/tomato.min_brix",
      "pool": "products",
      "value": 5.0,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 10.361579043010513,
      "signed_plus10": -10.361579043010513,
      "signed_minus10": 12.664152163679566,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "tomato:puree_concentrate",
      "n_products": 5
    },
    {
      "parameter_path": "products/bell_pepper.min_brix",
      "pool": "products",
      "value": 10.0,
      "unit": "degrees Brix",
      "source": "Mohamed et al. (2017) Int. J. Dairy Sci. 12:227-235",
      "source_detail": "Bell pepper is a vegetable and is NOT in Codex STAN 247-2005 (which covers fruit juices only), so there is no Codex minimum Brix. Mohamed et al. (2017) measured single-strength bell pepper juice total soluble solids by refractometry at 20 C: green 9, yellow 10, red 11 Brix. 10.0 Brix adopted for ripe yellow/red commercial maturity. Physiologically consistent with USDA FDC red bell pepper ~4.2 g sugars/100 g (FDC #170108) plus organic acids and soluble minerals. Plausible range 9-11 Brix.",
      "max_influence_pct": 10.157494391626365,
      "signed_plus10": -10.157494391626365,
      "signed_minus10": 12.414715367543353,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "bell_pepper:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "products/black_currant.min_brix",
      "pool": "products",
      "value": 11.0,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": "Codex STAN 247-2005 Annex (Minimum Brix Levels for Reconstituted Juice from Concentrate) lists Ribes nigrum at 11.0 Brix.",
      "max_influence_pct": 10.01384166939733,
      "signed_plus10": -10.01384166939733,
      "signed_minus10": 12.239139818152239,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "black_currant:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "drying/apple.drum_single_puree_demarco.specific_thermal_mj_per_kg_water",
      "pool": "drying",
      "value": 3.47,
      "unit": "MJ/kg water",
      "source": "de_marco_2015_3",
      "source_detail": "Derived from De Marco et al. 2015 (Int J LCA 20:1659-1672) Table 2 inventory for the drum-drying (DD) route at an Italian apple-powder firm: 1.59 kg fuel (methane reference per Table 5 footnote) per 3-kg apple-powder functional unit, with 22.9 kg water removed per FU. At a 50 MJ/kg methane LHV, 1.59 x 50 / 22.9 = 3.47 MJ/kg water. Range bracketed by 46 MJ/kg natural-gas-mix LHV (lower) and 55.5 MJ/kg pure-methane HHV (upper). Apple flesh 11 deg Bx fed at 25.9 kg/FU, dried at 140 deg C cylinder temperature, ~15 s film drying, output 95 deg Bx.",
      "max_influence_pct": 10.000000000000002,
      "signed_plus10": 10.000000000000002,
      "signed_minus10": -10.000000000000002,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "apple:drum_dried_powder",
      "n_products": 2
    },
    {
      "parameter_path": "drying/generic_fruit.hot_air_tunnel_industrial.specific_thermal_mj_per_kg_water",
      "pool": "drying",
      "value": 4.41,
      "unit": "MJ/kg water",
      "source": "de_marco_2015_3",
      "source_detail": "Central estimate for a continuous industrial convective hot-air tunnel/belt dryer, bracketed by the two VERIFIED industrial drying routes from De Marco et al. 2015 (Int J LCA 20:1659-1672) already in this pool: drum/contact route 3.47 MJ/kg water (lower bound, most thermally efficient industrial route) and spray/convective-direct route 5.35 MJ/kg water (upper bound, single-pass convective hot-air). A continuous belt/tunnel dryer is convective like the spray route but, with partial drying-air recirculation, more efficient than single-pass (Heindl & Mueller 1997, reported in the WUR 2006 medicinal-plants drying review: 75-84 percent specific-energy reduction for belt dryers with partial recirculation vs single-pass), so it sits between the contact-drum and single-pass-spray endpoints. Central value = arithmetic mid-point of the two verified De Marco routes (3.47 + 5.35)/2 = 4.41 MJ/kg water. Consistent with the EU BAT Reference Document for the Food, Drink and Milk Industries (Giner Santonja et al. 2019, Section 19.x): theoretical evaporation minimum 2.2 MJ/kg water, practical industrial drying/evaporation 2.0-3.5 MJ/kg water for efficient/multi-stage equipment, single-pass dryers above that. NOT back-solved to any target GWP -- the value derives only from the verified bracket. min/max are the two verified endpoints.",
      "max_influence_pct": 10.000000000000002,
      "signed_plus10": 10.000000000000002,
      "signed_minus10": -10.000000000000002,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "chive:dried_fruit",
      "n_products": 9
    },
    {
      "parameter_path": "drying/strawberry.freeze_batch_fruit_prosapio.specific_elec_kwh_per_kg_water",
      "pool": "drying",
      "value": 0.375,
      "unit": "kWh/kg water",
      "source": "prosapio_2017",
      "source_detail": "Table 2: 1.18 MJ freezing electricity + 2.10 MJ vacuum-drying electricity = 3.28 MJ total electricity per 2.43 kg water removed = 1.35 MJ/kg water = 0.375 kWh/kg water. Combined freezing + vacuum-drying figure (full freeze-dry route).",
      "max_influence_pct": 10.000000000000002,
      "signed_plus10": 10.000000000000002,
      "signed_minus10": -10.000000000000002,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "raspberry:freeze_dried_fruit",
      "n_products": 3
    },
    {
      "parameter_path": "grain_milling/rice.rice_milling_raw_goyal.electricity_kwh_per_kg_grain",
      "pool": "grain_milling",
      "value": 0.022,
      "unit": "kWh per kg paddy input",
      "source": "goyal_2012_rice-milling",
      "source_detail": "Goyal, Jogdand and Agrawal (2012) Energy use pattern in rice milling industries -- a critical appraisal, J Food Sci Technol 51:2907-2916, DOI 10.1007/s13197-012-0747-3. Table 1 (Kapur et al. 1994 data): Modern rice mill raw = 79.2 MJ/t paddy = 22.0 kWh/t paddy = 0.022 kWh/kg paddy. Body text confirms 'energy consumption in modern rice mills generally vary from 18-26 kWh/t for raw' paddy. Table 2 footnote: 't refers tonne of paddy initially at moisture content of 16 percent' (input basis -- matches our convention). Stored on native source basis; the cascade adapter converts to per-kg-milled-rice using the substrate's extraction_rate from product_properties.json (IRRI 2015 paddy mass balance: 100 kg paddy yields 68 kg white rice; extraction = 0.68).",
      "max_influence_pct": 10.000000000000002,
      "signed_plus10": 10.000000000000002,
      "signed_minus10": -10.000000000000002,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice:flour",
      "n_products": 1
    },
    {
      "parameter_path": "drying/apple.spray_tower_food_demarco.specific_thermal_mj_per_kg_water",
      "pool": "drying",
      "value": 5.35,
      "unit": "MJ/kg water",
      "source": "de_marco_2015_3",
      "source_detail": "Derived from De Marco et al. 2015 (Int J LCA 20:1659-1672) Table 2 inventory for the multistage drying (MD) route at the same Italian apple-powder firm: 0.442 kg methane fuel (reference per Table 5 footnote) per 3-kg apple-powder functional unit, with 4.13 kg water removed at the MD spray-drying step per FU. At 50 MJ/kg methane LHV, 0.442 x 50 / 4.13 = 5.35 MJ/kg water. Range bracketed by 46 MJ/kg natural-gas-mix LHV (lower) and 55.5 MJ/kg pure-methane HHV (upper). Note: this is the final spray-drying step only -- the MD pre-drying chain (ultrafiltration + cryoconcentration) removes most of the apple-juice water before the spray dryer (concentration step takes feed to 40 deg Bx).",
      "max_influence_pct": 9.992354679531692,
      "signed_plus10": 9.992354679531692,
      "signed_minus10": -9.992354679531692,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "camu_camu:spray_dried_powder",
      "n_products": 8
    },
    {
      "parameter_path": "oil_extraction/soybean.extruding_expelling_cheng.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.829,
      "unit": "kWh/kg seed",
      "source": "cheng_2018",
      "source_detail": "Table 3 (p. 5/62): 6.22 kWh/kg soybean oil. Converted to per kg seed using Table 1 mass balance (24278.18 kg/h seed -> 3235.02 kg/h oil = 13.33% oil yield): 6.22 x 0.1333 = 0.829 kWh/kg seed. Min/max bracket pilot vs commercial extruder ranges.",
      "max_influence_pct": 9.971313528794903,
      "signed_plus10": 9.971313528794903,
      "signed_minus10": -9.971313528794903,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean_organic:crude_oil",
      "n_products": 4
    },
    {
      "parameter_path": "pulping/tomato.hot_break_screw.natural_gas_mj_per_kg_fruit",
      "pool": "pulping",
      "value": 0.3375,
      "unit": "MJ LHV/kg fruit",
      "source": "singh_1980",
      "source_detail": "Table 8 (paste line, 386 t/shift): Heat exchanger horizontal (1 unit) est. total 8.40 x 10^6 BTU + Heat exchanger vertical (4 units) est. total 115.09 x 10^6 BTU = 123.49 x 10^6 BTU. Converted: 123.49e6 x 1.05506e-3 MJ/BTU / 386,000 kg = 0.3375 MJ/kg. These are fuel-side values (measured steam / 0.70 boiler efficiency).",
      "max_influence_pct": 9.87819939947053,
      "signed_plus10": 9.87819939947053,
      "signed_minus10": -9.87819939947053,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "tomato:puree",
      "n_products": 2
    },
    {
      "parameter_path": "products/beetroot.min_brix",
      "pool": "products",
      "value": 8.0,
      "unit": "degrees Brix",
      "source": "USDA FDC + LCA literature consensus",
      "source_detail": "Beet is not in Codex STAN 247-2005 (which covers fruit juices). Sugar fraction in raw beetroot ~9.96 g/100g (USDA FDC #169145) translates to ~8-10 Brix in pressed juice. LCA literature commonly uses 8.0 Brix as single-strength baseline (e.g. beetroot juice industry reference).",
      "max_influence_pct": 9.785452823011221,
      "signed_plus10": -9.785452823011221,
      "signed_minus10": 11.959997894791451,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "beetroot:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "products/apple.min_brix",
      "pool": "products",
      "value": 11.5,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": "Floor 10.0 if authenticity met",
      "max_influence_pct": 9.650720197272689,
      "signed_plus10": -9.650720197272689,
      "signed_minus10": 11.795324685555503,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "apple:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "grain_milling/wheat_conventional.roller_review_sabur.electricity_kwh_per_kg_grain",
      "pool": "grain_milling",
      "value": 0.0901,
      "unit": "kWh per kg wheat grain input",
      "source": "sabur_2019",
      "source_detail": "Ladha-Sabur, Bakalis, Fryer & Lopez-Quiroga (2019) Mapping energy consumption in food manufacturing, Trends Food Sci Technol 86:270-280. Section 3.1 (Grains and oilseed milling, p. 271): 'Between 2005 and 2015, an average of 0.42 MJ/kg of electricity and 0.03 MJ/kg of fuel was reported for the milling process (Appendix A).' Ladha-Sabur reports values on a per-kg-product-output basis (PEI methodology, Section 2). Back-converted to per-kg-grain-input using the IAOM-canonical wheat extraction rate of 0.77: 0.42 MJ/kg flour x 0.77 = 0.3234 MJ/kg grain = 0.0898 kWh/kg grain, rounded 0.0901. The min/max range comes from the literature envelope around the 0.42 MJ/kg central value: 0.080-0.150 kWh/kg flour times 0.77 = 0.0616-0.1155 kWh/kg grain. This converges with Meuser & Huster 1994 monolith-cited value of 92 kWh/t grain (0.092 kWh/kg grain) -- back-converting both sources to native input basis exposes the agreement that was hidden by the PEI mismatch.",
      "max_influence_pct": 9.430149691604434,
      "signed_plus10": 9.430149691604434,
      "signed_minus10": -9.430149691604434,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:flour",
      "n_products": 9
    },
    {
      "parameter_path": "drying/medicinal_herb.grate_dried_batch_ziegler.specific_thermal_mj_per_kg_water",
      "pool": "drying",
      "value": 5.26,
      "unit": "MJ/kg water",
      "source": "ziegler_2020",
      "source_detail": "Ziegler (2020) 'Primary energy demand and energy costs of fixed-bed drying using the example of chamomile flowers' (Drying Technology, DOI 10.1080/07373937.2019.1580290), Table 4, Variant A (100 percent conventional natural-gas heating -- the closest analogue to this pool's single-technology BAFU-heat model). DELIVERED-heat basis: total thermal energy 19.1 MWh per batch / 13.07 t water removed (m_fresh 16.8 t, drying ratio 4.5) = 5.26 MJ/kg water. This is the HEAT delivered to the drying air, which is the correct input to the BAFU 252893 heat-NG-boiler activity (its emission factor already embeds boiler combustion + efficiency). The paper's separate 'Total fuel' row (21.0 MWh -> 5.78 MJ/kg water) is the NG fuel INPUT including boiler losses and must NOT be used against a delivered-heat emission factor (would double-count the ~9 percent boiler loss). Chamomile grate batch drying at a gentle 40 deg C is LESS thermally efficient per kg water than fast continuous industrial fruit/vegetable belt/tunnel drying (ramp/idle losses over the long low-throughput batch) -- 5.26 sits at the upper end of the generic_fruit hot-air bracket (De Marco 2015: 3.47-5.35), inside its documented uncertainty. min/max = +/-15 percent operational/regional variation on a single primary study. NOT back-solved to any target GWP.",
      "max_influence_pct": 9.400748057606505,
      "signed_plus10": 9.400748057606505,
      "signed_minus10": -9.400748057606505,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "mint:dried_fruit",
      "n_products": 3
    },
    {
      "parameter_path": "preparation/fresh_cut_vegetable_mix.rasines_2023_fresh_cut_line.electricity_kwh_per_kg_substrate_input",
      "pool": "preparation",
      "value": 0.8,
      "unit": "kWh/kg fresh-cut product",
      "source": "rasines_2023",
      "source_detail": "Table 2 (p. 5), fresh-cut column, Energy consumption / Electricity row: 8.00E-01 kWh/kg (per FU = 1 kg fresh-cut product). Pre-cooked column shows 1.01E+01 kWh/kg which fails Fig 3 Core-stage CO2 math by ~10x (Core = 20% x 0.858 kg CO2eq/kg / 0.19 kg CO2eq/kWh implies ~1 kWh/kg, not 10 kWh/kg); likely a paper-side typo (should read 1.01E+00). Fresh-cut value 0.80 kWh/kg cross-checks cleanly against Fig 3 Core-stage climate change contribution 20.0% x 0.715 = 0.143 kg CO2eq/kg / 0.19 kg CO2eq/kWh = 0.75 kWh/kg -- consistent with the reported value. Min-max brackets +/- 10-20 percent implicit uncertainty in a single-plant design case.",
      "max_influence_pct": 9.3558593794843,
      "signed_plus10": 9.3558593794843,
      "signed_minus10": -9.3558593794843,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "french_bean:fresh_cut_vegetable_line",
      "n_products": 4
    },
    {
      "parameter_path": "concentration/orange.multi_effect_evaporation.thermal_mj_per_kg_water",
      "pool": "concentration",
      "value": 1.824,
      "unit": "MJ/kg water evaporated",
      "source": "beccali_2009",
      "source_detail": "2,414,559 / 1,323,936 = 1.824 MJ/kg water. Identical for both citrus types -- same equipment.",
      "max_influence_pct": 9.245145056705212,
      "signed_plus10": 9.245145056705212,
      "signed_minus10": -9.245145056705212,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "orange:juice_concentrate_80pct_water_removed",
      "n_products": 2
    },
    {
      "parameter_path": "concentration/apple.six_effect_evaporation.thermal_mj_per_kg_water",
      "pool": "concentration",
      "value": 0.489,
      "unit": "MJ/kg water evaporated",
      "source": "zimmer_2017",
      "source_detail": "195 kg steam x 2.257 MJ/kg / (6.3 x 142.9 kg water) = 0.489 MJ/kg water. 6-effect efficiency.",
      "max_influence_pct": 9.093751231363548,
      "signed_plus10": 9.093751231363548,
      "signed_minus10": -9.093751231363548,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "mango:puree_concentrate",
      "n_products": 7
    },
    {
      "parameter_path": "juice_extraction/lemon.cold_press.electricity_kwh_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.01012,
      "unit": "kWh/kg fruit",
      "source": "beccali_2009",
      "source_detail": "Fig 2: lemon extraction-only electricity. (149,164 + 140,447 + 42,618 + 187,908 + 42,618) MJ/yr = 562,755 MJ \u00f7 3.6 \u00f7 15,451,503 kg = 0.01012 kWh/kg fruit. 100% electric \u2014 no natural gas at extraction stage.",
      "max_influence_pct": 9.060611106192704,
      "signed_plus10": 9.060611106192704,
      "signed_minus10": -9.060611106192704,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "lemon:juice_extraction",
      "n_products": 6
    },
    {
      "parameter_path": "oil_extraction/soybean.solvent_demarco.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.564,
      "unit": "MJ/kg seed",
      "source": "demarco_2020",
      "source_detail": "Inline text Section 2: steam <= 250 kg/t seed. Converted: 0.250 kg steam/kg x 2.257 MJ/kg steam (Carre 2012 Table 3, 3 bar saturated) = 0.564 MJ/kg seed.",
      "max_influence_pct": 8.269089897974107,
      "signed_plus10": 8.269089897974107,
      "signed_minus10": -8.269089897974107,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/cottonseed.prepress_solvent_cottonseed.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.781,
      "unit": "MJ/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED] NOPA Life Cycle Inventory Data, Table 3-3: total LHV thermal energy 781 MJ/tonne soybeans across natural gas, coal, fuel oil, and landfill gas. Modelled as BAFU natural-gas heat per food-processing Pattern A convention.",
      "max_influence_pct": 7.990100125873592,
      "signed_plus10": 7.990100125873592,
      "signed_minus10": -7.990100125873592,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "cottonseed:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "pasteurisation/lemon.htst.natural_gas_mj_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.2808,
      "unit": "MJ/kg juice",
      "source": "beccali_2009",
      "source_detail": "Fig 2: 1,287,122 MJ methane / 4,584,049 kg juice = 0.2808 MJ/kg. Total boiler input.",
      "max_influence_pct": 7.6989707763811115,
      "signed_plus10": 7.6989707763811115,
      "signed_minus10": -7.6989707763811115,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "raspberry:pasteurised_puree",
      "n_products": 13
    },
    {
      "parameter_path": "drying/peach_pitted.lpssd_fir_iannone_2020.specific_thermal_mj_per_kg_water",
      "pool": "drying",
      "value": 2.8436075949367083,
      "unit": "MJ LHV/kg water removed",
      "source": "iannone_2020",
      "source_detail": "Iannone, Riemma & De Marco 2020 Table 2 LPSSD-FIR row reports methane 0.251 m3 and water output 3.16 kg per kg dried packaged peach. Converted with 35.8 MJ/m3 methane LHV: 0.251 * 35.8 / 3.16 = 2.8436076 MJ/kg water removed. Bounds are +/-15 percent process-meter uncertainty.",
      "max_influence_pct": 7.553461999748218,
      "signed_plus10": 7.553461999748218,
      "signed_minus10": -7.553461999748218,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "peach_pitted:dried_fruit",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/rapeseed.cold_press.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.536,
      "unit": "MJ/kg seed",
      "source": "quinsac_2015",
      "source_detail": "Table 6 (p. 9): CP global thermal = 149 kWh/t seed (preparation 16 + extraction 121 + pelletizing 12 kWh/t). Converted: 149 x 3.6 = 536 MJ/t = 0.536 MJ/kg.",
      "max_influence_pct": 7.335940131038902,
      "signed_plus10": 7.335940131038902,
      "signed_minus10": -7.335940131038902,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sesame_seed:crude_oil",
      "n_products": 7
    },
    {
      "parameter_path": "oil_extraction/sunflower.prepress_solvent_nilsson.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.672,
      "unit": "MJ/kg seed",
      "source": "nilsson_2010",
      "source_detail": "Table 3 (p. 920): 1680 MJ steam per 1000 kg crude sunflower oil. At 40% oil yield: 1680 MJ / 2500 kg seed = 0.672 MJ/kg seed.",
      "max_influence_pct": 7.255517266525,
      "signed_plus10": 7.255517266525,
      "signed_minus10": -7.255517266525,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "pasteurisation/orange.htst.natural_gas_mj_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.3573,
      "unit": "MJ/kg juice",
      "source": "beccali_2009",
      "source_detail": "Fig 1: 1,182,805 MJ methane / 3,309,840 kg juice = 0.3573 MJ/kg. Total boiler input (not post-regeneration). Plant-measured consumption includes whatever heat recovery the plant had.",
      "max_influence_pct": 7.186551316150021,
      "signed_plus10": 7.186551316150021,
      "signed_minus10": -7.186551316150021,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "generic:pasteurised_juice",
      "n_products": 3
    },
    {
      "parameter_path": "plant_drink_processing/soy.non_enzymatic_wet_chain.natural_gas_mj_per_kg_drink",
      "pool": "plant_drink_processing",
      "value": 0.72,
      "unit": "MJ/kg drink",
      "source": "grant_2018",
      "source_detail": "Grant 2018 SI Table S3 + main paper p. 5-6: steam 0.3 kg/L. Converted: 0.3 kg x ~2.4 MJ/kg steam LHV = 0.72 MJ/L.",
      "max_influence_pct": 6.70402918484641,
      "signed_plus10": 6.70402918484641,
      "signed_minus10": -6.70402918484641,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:pasteurised_plant_drink",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/olive.decanter_proietti.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.251,
      "unit": "MJ/kg olives",
      "source": "proietti_2017",
      "source_detail": "Table 6 (p. 14): Company A = 6.978 kWhth/q olives = 69.78 kWhth/t = 0.06978 kWhth/kg olives x 3.6 = 0.251 MJ/kg olives. Range: 0.043-0.525 kWhth/L oil.",
      "max_influence_pct": 6.196349817648972,
      "signed_plus10": 6.196349817648972,
      "signed_minus10": -6.196349817648972,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "olive:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "concentration/pepper.multi_effect_evaporation.thermal_mj_per_kg_water",
      "pool": "concentration",
      "value": 0.733,
      "unit": "MJ/kg water evaporated",
      "source": "adal_2024",
      "source_detail": "500 kg steam/h x 2.20 MJ/kg / 1500 kg water/h = 0.733 MJ/kg water. Steam economy 3.0.",
      "max_influence_pct": 5.935966364108981,
      "signed_plus10": 5.935966364108981,
      "signed_minus10": -5.935966364108981,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "bell_pepper:juice_concentrate",
      "n_products": 3
    },
    {
      "parameter_path": "[upstream feedstock + fixed overheads]",
      "pool": "(not a pool parameter)",
      "value": 1.3120339370202205,
      "unit": "kg CO2eq/kg (fixed contribution)",
      "source": "upstream tributaries (e.g. lci-fruit / stoessel) + consumables & infrastructure pools",
      "source_detail": "Everything in this product's result that the food-processing parameter pools do NOT control: the upstream agricultural feedstock drawn through the chain, plus the fixed consumables and amortised infrastructure exchanges attached per stage. Shown so the ranking is not read as if the processing rates were the whole result.",
      "max_influence_pct": 5.827344503096013,
      "signed_plus10": 5.827344503096013,
      "signed_minus10": -5.827344503096013,
      "method": "not_a_parameter",
      "linearity": "linear",
      "worst_product": "orange:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/coconut_copra.expeller_solvent_yani.coal_heat_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 2.67,
      "unit": "MJ/kg copra",
      "source": "yani_2022",
      "source_detail": "Table 3: COM steam 1.5614 + SEP steam 0.3240 = 1.8854 kg steam/kg refined CO. At 1.593 kg copra/kg CO: 1.8854 / 1.593 = 1.1835 kg steam/kg copra. At 2.257 MJ/kg steam: 1.1835 x 2.257 = 2.670 MJ/kg copra.",
      "max_influence_pct": 5.268574546425565,
      "signed_plus10": 5.268574546425565,
      "signed_minus10": -5.268574546425565,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "preparation/green_bean.ilari_2019_frozen_industrial_line.natural_gas_mj_per_kg_substrate_input",
      "pool": "preparation",
      "value": 1.63,
      "unit": "MJ NG per kg frozen product",
      "source": "ilari_2019",
      "source_detail": "Ilari 2019 Table 4c: natural gas 0.0436 m3 per kg frozen product * ~37.4 MJ/m3 heating value = 1.63 MJ NG/kg. Attributed entirely to the multi-stage belt blancher at 92 C steam (the only thermal step on the line).",
      "max_influence_pct": 5.048287882314381,
      "signed_plus10": 5.048287882314381,
      "signed_minus10": -5.048287882314381,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "french_bean:frozen_french_bean",
      "n_products": 1
    },
    {
      "parameter_path": "products/orange.concentrate_brix",
      "pool": "products",
      "value": 65.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 4.827201925931987,
      "signed_plus10": 4.827201925931987,
      "signed_minus10": -4.827201925931981,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "orange:juice_concentrate",
      "n_products": 3
    },
    {
      "parameter_path": "preparation/durum_wheat_pasta.paolotti_2023_artisanal_pasta_plant.electricity_kwh_per_kg_substrate_input",
      "pool": "preparation",
      "value": 0.3711,
      "unit": "kWh/kg pasta",
      "source": "paolotti_2023",
      "source_detail": "Paolotti L., Corridoni A., Rocchi L., Boggia A. (2023) Table 1: grid electricity 546,459.46 kWh / 1,472,300 kg pasta = 0.3711 kWh/kg pasta. PV self-generation 0.000836 kWh/kg (negligible). Cross-check with Bevilacqua's industrial 0.160 kWh/kg gives a 2.3x scale ratio consistent with the artisanal (0.3 t/h) vs industrial (~40 t/h) contrast.",
      "max_influence_pct": 4.637276023395882,
      "signed_plus10": 4.637276023395882,
      "signed_minus10": -4.637276023395882,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:dry_pasta_artisanal",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/rapeseed.prepress_solvent_conventional.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.878,
      "unit": "MJ/kg seed",
      "source": "quinsac_2015",
      "source_detail": "Table 6 (p. 9): FCP global thermal = 244 kWh/t seed (preparation 111 + extraction 121 + pelletizing 12 kWh/t). Converted: 244 x 3.6 = 878 MJ/t = 0.878 MJ/kg.",
      "max_influence_pct": 4.536434882905894,
      "signed_plus10": 4.536434882905894,
      "signed_minus10": -4.536434882905894,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rapeseed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "pasteurisation/apple.flash_80c.natural_gas_mj_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.612,
      "unit": "MJ/kg juice",
      "source": "le_feon_2023",
      "source_detail": "raw_data.xlsx \u00a71.3: 0.36 MJ/kg apple \u00d7 (11050 kg / 6500 L) / ~1.04 kg/L. Flash pasteurisation at 80\u00b0C. Heat, central or small-scale, natural gas {Europe without Switzerland}. Original source: Frankowska et al. 2019.",
      "max_influence_pct": 4.516624789746751,
      "signed_plus10": 4.516624789746751,
      "signed_minus10": -4.516624789746751,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "apple:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "products/orange.min_brix",
      "pool": "products",
      "value": 11.2,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": "Range 11.2-11.8 (natural variation by country). Floor 10.0 if authenticity met. Acid-corrected (footnote 17).",
      "max_influence_pct": 4.3883653872108965,
      "signed_plus10": -4.3883653872108965,
      "signed_minus10": 5.36355769547999,
      "method": "perturbation",
      "linearity": "nonlinear",
      "worst_product": "orange:juice_concentrate",
      "n_products": 3
    },
    {
      "parameter_path": "separation/faba_bean.isoelectric_protein.electricity_kwh_per_kg_separated",
      "pool": "separation",
      "value": 1.6161866,
      "unit": "kWh/kg flour input",
      "source": "guyomarch_2025",
      "source_detail": "[basis-migration 2026-06-05: rebased from per-kg-output to per-kg-input by multiplying by the substrate-side mass_fraction (1.526). Value-preserving once the cascade adapter applies scale = af / target_yield (juice / oil pattern).] Sum of operations 7-10A from LCI_Faba(C9863)_Process_diagram_and_inventory_data_Isolate Excel SI: alkaline extraction 13.085 kWh + acidic precipitation 7.931 kWh + washing 3.234 kWh + stabilisation 7.1 kWh = 31.35 kWh per 19.4 kg flour input at operation 8A = 1.616 kWh/kg flour input. (Historical derivation: 31.35 / 29.6 kg wet output = 1.059 kWh/kg wet output; multiplied by mass_fraction 1.526 = 1.616.)",
      "max_influence_pct": 4.319541684194825,
      "signed_plus10": 4.319541684194825,
      "signed_minus10": -4.319541684194825,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 3
    },
    {
      "parameter_path": "preparation/green_bean.ilari_2019_frozen_industrial_line.electricity_kwh_per_kg_substrate_input",
      "pool": "preparation",
      "value": 0.324,
      "unit": "kWh/kg frozen product",
      "source": "ilari_2019",
      "source_detail": "Ilari A., Duca D., Toscano G., Pedretti E.F. (2019) Table 4c: whole-line electricity 0.324 kWh/kg frozen green bean product. Aggregates raw product handling, snipping, washing, sorting, blanching auxiliary loads (fans, conveyors, pumps), belt-chiller freezing, and packaging line loads across 62 machines. Belt freezer is the single largest electricity consumer but is not separately reported. Passes the plausibility check: 0.324 kWh/kg x 0.28 kg CO2eq/kWh Italian grid = 0.091 kg CO2eq/kg from electricity, inside the paper's 0.744 kg CO2eq/kg total CF.",
      "max_influence_pct": 4.269805400088172,
      "signed_plus10": 4.269805400088172,
      "signed_minus10": -4.269805400088172,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "french_bean:frozen_french_bean",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/soybean.chemical_nopa.natural_gas_mj_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.732,
      "unit": "MJ/kg refined oil",
      "source": "nopa_2024",
      "source_detail": "Table 4-3: 732 MJ/t refined oil (26 plants, LHV). Converted: 732 / 1000 = 0.732 MJ/kg. Dominated by deodorisation steam (~60-70% of thermal).",
      "max_influence_pct": 4.210524398497281,
      "signed_plus10": 4.210524398497281,
      "signed_minus10": -4.210524398497281,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "safflower_seed:refined_oil",
      "n_products": 4
    },
    {
      "parameter_path": "preparation/durum_wheat_pasta.paolotti_2023_artisanal_pasta_plant.natural_gas_mj_per_kg_substrate_input",
      "pool": "preparation",
      "value": 1.386,
      "unit": "MJ NG per kg pasta",
      "source": "paolotti_2023",
      "source_detail": "Paolotti 2023 Table 1: natural gas 566,912.08 kWh / 1,472,300 kg pasta = 0.3851 kWh NG/kg pasta = 1.386 MJ NG/kg pasta. Independently cross-checked against \u00a74.2.1's 53,032 m3/y NG statement: 53,032 m3/y * 10.7 kWh/m3 heating value / 1,472,300 kg/y = 0.3853 kWh/kg pasta, consistent to 99.9 percent. Serves the LTLT drying tunnels (less than 55 C, 24-44 h).",
      "max_influence_pct": 4.070320990321332,
      "signed_plus10": 4.070320990321332,
      "signed_minus10": -4.070320990321332,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:dry_pasta_artisanal",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/corn_germ.solvent_gaglio.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.809,
      "unit": "MJ/kg wet germ",
      "source": "gaglio_2019",
      "source_detail": "Table 1 (p. 6): Pre-treatment + Oil extraction thermal = 669.04 kWhth per t refined oil. At 2.978 t wet germ: 669.04 x 3.6 / 2978 = 0.809 MJ/kg wet germ.",
      "max_influence_pct": 3.8154109070803153,
      "signed_plus10": 3.8154109070803153,
      "signed_minus10": -3.8154109070803153,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/olive.decanter_proietti.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.03535,
      "unit": "kWh/kg olives",
      "source": "proietti_2017",
      "source_detail": "Table 6 (p. 14): Company A = 3.535 kWh/q olives = 35.35 kWh/t olives = 0.03535 kWh/kg olives. Range across 7 companies: 0.212-0.367 kWh/L oil at ~16% yield = 0.035-0.060 kWh/kg olives.",
      "max_influence_pct": 3.713284187061521,
      "signed_plus10": 3.713284187061521,
      "signed_minus10": -3.713284187061521,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "olive:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/corn_germ.chemical_gaglio.natural_gas_mj_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.809,
      "unit": "MJ/kg refined oil",
      "source": "gaglio_2019",
      "source_detail": "Table 1 refining sub-process: 809 MJ/t refined oil. Converted: 809 / 1000 = 0.809 MJ/kg.",
      "max_influence_pct": 3.534409899438402,
      "signed_plus10": 3.534409899438402,
      "signed_minus10": -3.534409899438402,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "preparation/durum_wheat_pasta.bevilacqua_2007_industrial_pasta_plant.natural_gas_mj_per_kg_substrate_input",
      "pool": "preparation",
      "value": 1.012,
      "unit": "MJ NG per kg pasta",
      "source": "bevilacqua_2007",
      "source_detail": "Bevilacqua 2007 Table 2: 22 kg natural gas per t pasta at ~46 MJ/kg heating value = 1.012 MJ/kg pasta. Serves the drying boilers producing 130-160 C hot water at 4-7 bar which then heats the 80 C drying tunnel. Total drying thermal 1.712 MJ/kg pasta = NG 1.012 + crude oil 0.700 (see thermal_mj_per_kg_substrate_input). The paper reports the drying envelope as 1.4-1.9 MJ/kg pasta which brackets the 1.712 total value cleanly.",
      "max_influence_pct": 3.2998524294937956,
      "signed_plus10": 3.2998524294937956,
      "signed_minus10": -3.2998524294937956,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:dry_pasta",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/sunflower.physical_nilsson.natural_gas_mj_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.6,
      "unit": "MJ/kg refined oil",
      "source": "nilsson_2010",
      "source_detail": "Table 3 p. 920: steam 266 kg/t refined oil. Converted: 266 * 2.257 / 1000 = 0.600 MJ/kg. Steam used primarily for deodorisation (high-temperature stripping at 240-260C).",
      "max_influence_pct": 3.2957121350644236,
      "signed_plus10": 3.2957121350644236,
      "signed_minus10": -3.2957121350644236,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.coal_heat_mj_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 1.7848356,
      "unit": "MJ/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: steam input 0.7908 kg/kg coconut oil. Converted to thermal demand with the existing oil-refining convention 2.257 MJ/kg steam.",
      "max_influence_pct": 3.265330443620389,
      "signed_plus10": 3.265330443620389,
      "signed_minus10": -3.265330443620389,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "preparation/durum_wheat_pasta.bevilacqua_2007_industrial_pasta_plant.light_fuel_oil_mj_per_kg_substrate_input",
      "pool": "preparation",
      "value": 0.7,
      "unit": "MJ crude oil per kg pasta",
      "source": "bevilacqua_2007",
      "source_detail": "Bevilacqua 2007 Table 2: 17 kg crude oil per t pasta at ~41 MJ/kg heating value = 0.700 MJ/kg pasta. Auxiliary drying-boiler fuel alongside natural gas. Some pasta plants have already migrated to natural-gas-only boilers; this value is the crude-oil-including baseline.",
      "max_influence_pct": 3.0591211487651604,
      "signed_plus10": 3.0591211487651604,
      "signed_minus10": -3.0591211487651604,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:dry_pasta",
      "n_products": 1
    },
    {
      "parameter_path": "plant_drink_processing/oat.enzymatic_wet_chain.electricity_kwh_per_kg_drink",
      "pool": "plant_drink_processing",
      "value": 0.0439,
      "unit": "kWh/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Appendix 1 Table A1a (p. 59): sum of steps 1-11 + step 18 electricity = 208,828 kWh / 4,756,374 kg = 0.04392 kWh/kg.",
      "max_influence_pct": 2.577687140631282,
      "signed_plus10": 2.577687140631282,
      "signed_minus10": -2.577687140631282,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice:pasteurised_plant_drink",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/sunflower.prepress_solvent_nilsson.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0556,
      "unit": "kWh/kg seed",
      "source": "nilsson_2010",
      "source_detail": "Table 3 (p. 920): 500 MJ electricity per 1000 kg crude sunflower oil. At 40% oil yield (2500 kg seed per 1000 kg oil): 500 MJ / 2500 kg = 0.200 MJ/kg seed = 0.0556 kWh/kg seed.",
      "max_influence_pct": 2.554350337604605,
      "signed_plus10": 2.554350337604605,
      "signed_minus10": -2.554350337604605,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "plant_drink_processing/oat.enzymatic_wet_chain.natural_gas_mj_per_kg_drink",
      "pool": "plant_drink_processing",
      "value": 0.184,
      "unit": "MJ/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Appendix 1 Table A1a: sum of steps 1-11 + step 18 natural gas = 243,708 kWh / 4,756,374 kg = 0.05124 kWh/kg = 0.1845 MJ/kg.",
      "max_influence_pct": 2.539083272181716,
      "signed_plus10": 2.539083272181716,
      "signed_minus10": -2.539083272181716,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice:pasteurised_plant_drink",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/rapeseed.cold_press.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.043,
      "unit": "kWh/kg seed",
      "source": "quinsac_2015",
      "source_detail": "Table 6 (p. 9): CP global electrical = 43 kWh/t seed (preparation 24 + extraction 8 + pelletizing 2x5 + logistics 1 kWh/t).",
      "max_influence_pct": 2.504182681444689,
      "signed_plus10": 2.504182681444689,
      "signed_minus10": -2.504182681444689,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pumpkin_seed_hullfree:crude_oil",
      "n_products": 7
    },
    {
      "parameter_path": "drying/peach_pitted.lpssd_fir_iannone_2020.specific_elec_kwh_per_kg_water",
      "pool": "drying",
      "value": 0.21645569620253166,
      "unit": "kWh/kg water removed",
      "source": "iannone_2020",
      "source_detail": "Iannone, Riemma & De Marco 2020 Table 2 LPSSD-FIR row reports electricity 0.684 kWh and water output 3.16 kg per kg dried packaged peach: 0.684 / 3.16 = 0.2164557 kWh/kg water removed. Bounds are +/-15 percent process-meter uncertainty.",
      "max_influence_pct": 2.4465380002517825,
      "signed_plus10": 2.4465380002517825,
      "signed_minus10": -2.4465380002517825,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "peach_pitted:dried_fruit",
      "n_products": 1
    },
    {
      "parameter_path": "pasteurisation/apple.flash_80c.electricity_kwh_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.0707,
      "unit": "kWh/kg juice",
      "source": "le_feon_2023",
      "source_detail": "raw_data.xlsx \u00a71.3: 149.7 kJ/kg apple = 0.0416 kWh/kg \u00d7 (11050 / 6500) / 1.04. INCLUDES bottling line electricity (not separable). Electricity, low voltage {FR}. Original source: Frankowska et al. 2019.",
      "max_influence_pct": 2.220181957193585,
      "signed_plus10": 2.220181957193585,
      "signed_minus10": -2.220181957193585,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "apple:juice_concentrate",
      "n_products": 1
    },
    {
      "parameter_path": "preparation/durum_wheat_pasta.bevilacqua_2007_industrial_pasta_plant.electricity_kwh_per_kg_substrate_input",
      "pool": "preparation",
      "value": 0.16,
      "unit": "kWh/kg pasta",
      "source": "bevilacqua_2007",
      "source_detail": "Bevilacqua M., Braglia M., Carmignani G., Zammori F.A. (2007) Table 2: productive-process electricity 120 kWh/t = 0.120 kWh/kg pasta + services (lighting, HVAC) electricity 40 kWh/t = 0.040 kWh/kg pasta. Total 0.160 kWh/kg pasta. Mixing and cold extrusion NOT separately reported (bundled with drying fans, sieving, packaging into the productive line). Min-max brackets +/- 20 percent implicit uncertainty from a single-plant survey.",
      "max_influence_pct": 2.2199365011442844,
      "signed_plus10": 2.2199365011442844,
      "signed_minus10": -2.2199365011442844,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:dry_pasta",
      "n_products": 1
    },
    {
      "parameter_path": "pasteurisation/lemon.htst.electricity_kwh_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.01663,
      "unit": "kWh/kg juice",
      "source": "beccali_2009",
      "source_detail": "Fig 2: 274,436 MJ / 3.6 / 4,584,049 kg = 0.01663 kWh/kg juice.",
      "max_influence_pct": 1.940145855384406,
      "signed_plus10": 1.940145855384406,
      "signed_minus10": -1.940145855384406,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "raspberry:pasteurised_puree",
      "n_products": 13
    },
    {
      "parameter_path": "juice_extraction/orange.cold_press.electricity_kwh_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.00912,
      "unit": "kWh/kg fruit",
      "source": "beccali_2009",
      "source_detail": "Fig 1: orange extraction-only electricity. (101,617 + 95,678 + 29,033 + 128,011 + 29,033) MJ/yr = 383,372 MJ \u00f7 3.6 \u00f7 11,675,973 kg = 0.00912 kWh/kg fruit. 100% electric.",
      "max_influence_pct": 1.8675589319139119,
      "signed_plus10": 1.8675589319139119,
      "signed_minus10": -1.8675589319139119,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "orange:pasteurised_juice",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/soybean.solvent_demarco.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.025,
      "unit": "kWh/kg seed",
      "source": "demarco_2020",
      "source_detail": "Inline text Section 2 (p. 2): 'steam consumption <= 250 kg/t and power consumption <= 25 kWh/t'. Prep <=20, extraction <=5 kWh/t.",
      "max_influence_pct": 1.5596429324398116,
      "signed_plus10": 1.5596429324398116,
      "signed_minus10": -1.5596429324398116,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/cottonseed.prepress_solvent_cottonseed.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.03515,
      "unit": "kWh/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED] NOPA Life Cycle Inventory Data, Table 3-1: 35.15 kWh/tonne soybeans for 52 U.S. solvent-extraction crushing plants. Applied as a modern solvent oilseed-crushing utility proxy for cottonseed.",
      "max_influence_pct": 1.5301467370562427,
      "signed_plus10": 1.5301467370562427,
      "signed_minus10": -1.5301467370562427,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "cottonseed:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "pasteurisation/orange.htst.electricity_kwh_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.01569,
      "unit": "kWh/kg juice",
      "source": "beccali_2009",
      "source_detail": "Fig 1: 186,958 MJ / 3.6 / 3,309,840 kg = 0.01569 kWh/kg juice. Pumps, controls, cooling circulation.",
      "max_influence_pct": 1.3428175908898097,
      "signed_plus10": 1.3428175908898097,
      "signed_minus10": -1.3428175908898097,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "generic:pasteurised_juice",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/corn_germ.solvent_gaglio.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.066,
      "unit": "kWh/kg wet germ",
      "source": "gaglio_2019",
      "source_detail": "Table 1 (p. 6): Pre-treatment + Oil extraction electricity = 196.71 kWh per t refined oil. At 2.978 t wet germ per t refined oil: 196.71 / 2978 = 0.066 kWh/kg wet germ.",
      "max_influence_pct": 1.324473563661564,
      "signed_plus10": 1.324473563661564,
      "signed_minus10": -1.324473563661564,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/sunflower.physical_nilsson.electricity_kwh_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.0548,
      "unit": "kWh/kg refined oil",
      "source": "nilsson_2010",
      "source_detail": "Table 3 p. 920: 54.8 kWh/t refined oil. Converted: 54.8 / 1000 = 0.0548 kWh/kg.",
      "max_influence_pct": 1.2808112768164097,
      "signed_plus10": 1.2808112768164097,
      "signed_minus10": -1.2808112768164097,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/soybean.chemical_nopa.electricity_kwh_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.0441,
      "unit": "kWh/kg refined oil",
      "source": "nopa_2024",
      "source_detail": "Table 4-2: 44.1 kWh/t refined oil (26 plants). Converted: 44.1 / 1000 = 0.0441 kWh/kg.",
      "max_influence_pct": 1.07936979374043,
      "signed_plus10": 1.07936979374043,
      "signed_minus10": -1.07936979374043,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "safflower_seed:refined_oil",
      "n_products": 4
    },
    {
      "parameter_path": "juice_extraction/apple.hpx_press.electricity_kwh_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.0033,
      "unit": "kWh/kg fruit",
      "source": "zimmer_2017",
      "source_detail": "Table 1: flume(0.5)+conveying(0.3)+milling(0.5)+mash_cold(0.2)+pressing(1.8) = 3.3 kWh/t.",
      "max_influence_pct": 1.0727891781781664,
      "signed_plus10": 1.0727891781781664,
      "signed_minus10": -1.0727891781781664,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pineapple:pasteurised_juice",
      "n_products": 5
    },
    {
      "parameter_path": "oil_refining/corn_germ.chemical_gaglio.electricity_kwh_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.0513,
      "unit": "kWh/kg refined oil",
      "source": "gaglio_2019",
      "source_detail": "Table 1 refining sub-process: 51.3 kWh/t refined oil. Converted: 51.3 / 1000 = 0.0513 kWh/kg.",
      "max_influence_pct": 0.9536572656040183,
      "signed_plus10": 0.9536572656040183,
      "signed_minus10": -0.9536572656040183,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/coconut_copra.expeller_solvent_yani.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.1882,
      "unit": "kWh/kg copra",
      "source": "yani_2022",
      "source_detail": "Table 3: COM electricity 0.2710 + SEP electricity 0.0289 = 0.2999 kWh/kg refined CO. At 1.593 kg copra/kg refined oil: 0.2999 / 1.593 = 0.1882 kWh/kg copra.",
      "max_influence_pct": 0.8917799593256387,
      "signed_plus10": 0.8917799593256387,
      "signed_minus10": -0.8917799593256387,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/rapeseed.prepress_solvent_conventional.electricity_kwh_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.039,
      "unit": "kWh/kg seed",
      "source": "quinsac_2015",
      "source_detail": "Table 6 (p. 9): FCP global electrical = 39 kWh/t seed (preparation 20 + extraction 8 + pelletizing 2x5 + logistics 1 kWh/t).",
      "max_influence_pct": 0.857415511074216,
      "signed_plus10": 0.857415511074216,
      "signed_minus10": -0.857415511074216,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rapeseed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "concentration/orange.multi_effect_evaporation.electricity_kwh_per_kg_water_evaporated",
      "pool": "concentration",
      "value": 0.035,
      "unit": "kWh/kg water evaporated",
      "source": "beccali_2009",
      "source_detail": "[DERIVED] 0.14 kWh/kg concentrate / 4.0 kg water/kg concentrate = 0.035 kWh/kg water.",
      "max_influence_pct": 0.7548549432947875,
      "signed_plus10": 0.7548549432947875,
      "signed_minus10": -0.7548549432947875,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "orange:juice_concentrate_80pct_water_removed",
      "n_products": 2
    },
    {
      "parameter_path": "juice_extraction/lemon.cold_press.wastewater_kg_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.5361,
      "unit": "kg/kg fruit",
      "source": "beccali_2009",
      "source_detail": "[DERIVED \u2014 mass balance] Equal to water_kg_per_kg_fruit (0.5361). Fruit washing: incoming wash water leaves as wastewater (fruit does not absorb wash water meaningfully). Originating water source: beccali_2009.",
      "max_influence_pct": 0.6361757165411823,
      "signed_plus10": 0.6361757165411823,
      "signed_minus10": -0.6361757165411823,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "lemon:juice_extraction",
      "n_products": 6
    },
    {
      "parameter_path": "drying/medicinal_herb.grate_dried_batch_ziegler.specific_elec_kwh_per_kg_water",
      "pool": "drying",
      "value": 0.0788,
      "unit": "kWh/kg water",
      "source": "ziegler_2020",
      "source_detail": "Ziegler (2020) Table 4, Variant A: dryer blowers 1.03 MWh per batch / 13.07 t water removed = 0.0788 kWh/kg water. This is the metered blower/air-handling electricity that the substrate-neutral generic_fruit hot-air entry marks not_available (value 0.0); the grate-drying literature quantifies it directly, so it is carried here as an explicit flow. min/max = +/-20 percent.",
      "max_influence_pct": 0.5992519423934959,
      "signed_plus10": 0.5992519423934959,
      "signed_minus10": -0.5992519423934959,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rosemary:dried_fruit",
      "n_products": 3
    },
    {
      "parameter_path": "protein_extrusion/soy.hmme_extrusion.electricity_kwh_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 0.29,
      "unit": "kWh / kg useful HME wet extrudate",
      "source": "saerens_2021_extrusion",
      "source_detail": "Table 3 (page 6) per-kg-useful-product: HME Soy 0.29 kWh/kg + 23.4 L/kg, cycle 522 min. Extrusion-phase-only: 0.27 kWh/kg.",
      "max_influence_pct": 0.5818044233585542,
      "signed_plus10": 0.5818044233585542,
      "signed_minus10": -0.5818044233585542,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:textured_protein_oilseed_route_hm",
      "n_products": 2
    },
    {
      "parameter_path": "grain_milling/wheat_conventional.roller_review_sabur.natural_gas_mj_per_kg_grain",
      "pool": "grain_milling",
      "value": 0.0231,
      "unit": "MJ LHV per kg wheat grain input",
      "source": "sabur_2019",
      "source_detail": "Ladha-Sabur et al. 2019 Section 3.1 (p. 271): '0.03 MJ/kg of fuel was reported for the milling process'. Small thermal demand for grain conditioning steam. Back-converted from per-kg-product PEI to per-kg-grain-input using IAOM 0.77 extraction: 0.03 MJ/kg flour x 0.77 = 0.0231 MJ/kg grain.",
      "max_influence_pct": 0.5681973607789566,
      "signed_plus10": 0.5681973607789566,
      "signed_minus10": -0.5681973607789566,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:flour",
      "n_products": 9
    },
    {
      "parameter_path": "pulping/tomato.cold_crushing_pulping.electricity_kwh_per_kg_fruit",
      "pool": "pulping",
      "value": 0.002917,
      "unit": "kWh/kg fruit",
      "source": "karakaya_2011",
      "source_detail": "Table 3 (paste production): Crushing 2.0 MJ/t + Pulping to 0.8 mm 8.5 MJ/t = 10.5 MJ/t. Converted: 10.5 / 3.6 / 1000 = 0.002917 kWh/kg fresh. Equipment rated energy from Jiadi Machinery (China) specifications.",
      "max_influence_pct": 0.5549118857080123,
      "signed_plus10": 0.5549118857080123,
      "signed_minus10": -0.5549118857080123,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "mango:puree_concentrate",
      "n_products": 3
    },
    {
      "parameter_path": "concentration/pepper.multi_effect_evaporation.electricity_kwh_per_kg_water_evaporated",
      "pool": "concentration",
      "value": 0.015,
      "unit": "kWh/kg water evaporated",
      "source": "adal_2024",
      "source_detail": "[DERIVED] 0.0225 kWh/kg concentrate / 1.5 kg water/kg concentrate = 0.015 kWh/kg water.",
      "max_influence_pct": 0.5168747052305538,
      "signed_plus10": 0.5168747052305538,
      "signed_minus10": -0.5168747052305538,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "bell_pepper:juice_concentrate",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/cottonseed.prepress_solvent_cottonseed.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.002479444719,
      "unit": "kg hexane loss/kg seed",
      "source": "hise_1980",
      "source_detail": "USDA/Texas Tech cottonseed oil mill simulation guide, p. 24: pre-press/direct-solvent mills usually have hexane loss around one gallon per ton of seed processed. Converted with 1 US gal = 3.785411784 L and hexane density 0.655 kg/L.",
      "max_influence_pct": 0.4423038100716769,
      "signed_plus10": 0.4423038100716769,
      "signed_minus10": -0.4423038100716769,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "cottonseed:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "concentration/apple.six_effect_evaporation.electricity_kwh_per_kg_water_evaporated",
      "pool": "concentration",
      "value": 0.00444,
      "unit": "kWh/kg water evaporated",
      "source": "zimmer_2017",
      "source_detail": "[DERIVED] 0.028 kWh/kg AJC / 6.3 kg water/kg AJC = 0.00444 kWh/kg water.",
      "max_influence_pct": 0.35133688292844023,
      "signed_plus10": 0.35133688292844023,
      "signed_minus10": -0.35133688292844023,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "mango:puree_concentrate",
      "n_products": 7
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.electricity_kwh_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.0772,
      "unit": "kWh/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: total electricity 0.0772 kWh/kg coconut oil. Submeter rows are 0.0309 general, 0.0441 deodorize RBD coconut oil, and 0.0022 deodorize FAO; these sum to 0.0772 and are counted once here.",
      "max_influence_pct": 0.339158291832538,
      "signed_plus10": 0.339158291832538,
      "signed_minus10": -0.339158291832538,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "juice_extraction/lemon.cold_press.water_kg_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.5361,
      "unit": "kg/kg fruit",
      "source": "beccali_2009",
      "source_detail": "Fig 2: wash water for lemon processing line",
      "max_influence_pct": 0.30321317726611385,
      "signed_plus10": 0.30321317726611385,
      "signed_minus10": -0.30321317726611385,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "lemon:juice_extraction",
      "n_products": 6
    },
    {
      "parameter_path": "separation/faba_bean.isoelectric_protein.natural_gas_mj_per_kg_separated",
      "pool": "separation",
      "value": 0.3711232,
      "unit": "MJ/kg flour input",
      "source": "guyomarch_2025",
      "source_detail": "[basis-migration 2026-06-05: rebased from per-kg-output to per-kg-input by multiplying by the substrate-side mass_fraction (1.526). Value-preserving once the cascade adapter applies scale = af / target_yield (juice / oil pattern).] Operation 10A stabilisation/pasteurisation: 2.0 kWh natural gas per batch (calculated from m*Cp*dT for water heating from 20 C to 75 C). 2.0 kWh x 3.6 MJ/kWh / 19.4 kg flour-as-fed = 0.371 MJ/kg flour input. (Historical: 7.2 MJ / 29.6 kg wet output = 0.243 MJ/kg wet output; \u00d7 mass_fraction 1.526 = 0.371.)",
      "max_influence_pct": 0.23310828459719468,
      "signed_plus10": 0.23310828459719468,
      "signed_minus10": -0.23310828459719468,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 3
    },
    {
      "parameter_path": "rehydration/textured_protein.warm_hydration.electricity_kwh_per_kg_rehydrated",
      "pool": "rehydration",
      "value": 0.00046875,
      "unit": "kWh/kg rehydrated output",
      "source": "singh_1980",
      "source_detail": "Singh 1980 Table 8 agitator/blender-class equipment at ~15 kWh per 8-hour shift = 1.875 kW shaft-side electrical draw. Applied to a 1000 kg batch held 15 min: 1.875 kW x 0.25 h / 1000 kg = 0.00046875 kWh/kg. Band spans 2000 kg / 10 min (0.00015625) to 500 kg / 20 min (0.00125).",
      "max_influence_pct": 0.2170459216534862,
      "signed_plus10": 0.2170459216534862,
      "signed_minus10": -0.2170459216534862,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "textured_soy_protein:rehydrated_textured_protein",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.bleaching_earth_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.033,
      "unit": "kg bleaching earth/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: bleaching earth 0.0330 kg/kg coconut oil.",
      "max_influence_pct": 0.1971804917790284,
      "signed_plus10": 0.1971804917790284,
      "signed_minus10": -0.1971804917790284,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "preparation/green_bean.ilari_2019_frozen_industrial_line.water_kg_per_kg_substrate_input",
      "pool": "preparation",
      "value": 20.9,
      "unit": "kg process water per kg frozen product",
      "source": "ilari_2019",
      "source_detail": "Ilari 2019 Table 4c: process water 20.9 L/kg frozen green bean product. Blanching water is recovered and recirculated within the line; 20.9 L/kg reflects fresh-water make-up and washing / rinsing losses. Substantially higher than Rasines fresh-cut (8.45 L/kg) because green bean blanching demands large volumes of blanching-water make-up on top of the wash / rinse water.",
      "max_influence_pct": 0.17399414901660595,
      "signed_plus10": 0.17399414901660595,
      "signed_minus10": -0.17399414901660595,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "french_bean:frozen_french_bean",
      "n_products": 1
    },
    {
      "parameter_path": "protein_extrusion/soy.lm_extrusion.electricity_kwh_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 0.26,
      "unit": "kWh / kg useful TVP product",
      "source": "saerens_2021_extrusion",
      "source_detail": "Table 3 (page 6) per-kg-useful-product specific extrusion intensity: TVP Soy 0.26 kWh/kg + 17.5 L/kg, cycle 543 min. Extrusion-phase-only excluding warm-up + start-up: 0.23 kWh/kg.",
      "max_influence_pct": 0.16308501642121684,
      "signed_plus10": 0.16308501642121684,
      "signed_minus10": -0.16308501642121684,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/sunflower.prepress_solvent_nilsson.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0008,
      "unit": "kg hexane loss/kg seed",
      "source": "nilsson_2010",
      "source_detail": "Table 3 (p. 920): 2 kg hexane per 1000 kg crude oil. At 40% oil yield: 2 kg / 2500 kg seed = 0.0008 kg/kg seed.",
      "max_influence_pct": 0.15061012078856434,
      "signed_plus10": 0.15061012078856434,
      "signed_minus10": -0.15061012078856434,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "juice_extraction/orange.cold_press.wastewater_kg_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.4833,
      "unit": "kg/kg fruit",
      "source": "beccali_2009",
      "source_detail": "[DERIVED \u2014 mass balance] Equal to water_kg_per_kg_fruit (0.4833). Fruit washing: incoming wash water leaves as wastewater (fruit does not absorb wash water meaningfully). Originating water source: beccali_2009.",
      "max_influence_pct": 0.13117484948738894,
      "signed_plus10": 0.13117484948738894,
      "signed_minus10": -0.13117484948738894,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "orange:pasteurised_juice",
      "n_products": 2
    },
    {
      "parameter_path": "preparation/fresh_cut_vegetable_mix.rasines_2023_fresh_cut_line.wastewater_kg_per_kg_substrate_input",
      "pool": "preparation",
      "value": 8.45,
      "unit": "kg wastewater per kg fresh-cut product",
      "source": "rasines_2023",
      "source_detail": "Table 2 (p. 5), fresh-cut column, Waste treatment / Wastewater: 8.45E+00 L/kg. Matches Vegetable washing and rinsing water input (nominal 100% recovery to wastewater stream).",
      "max_influence_pct": 0.13097991680172458,
      "signed_plus10": 0.13097991680172458,
      "signed_minus10": -0.13097991680172458,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "french_bean:fresh_cut_vegetable_line",
      "n_products": 4
    },
    {
      "parameter_path": "pulping/tomato.hot_break_screw.electricity_kwh_per_kg_fruit",
      "pool": "pulping",
      "value": 0.000978,
      "unit": "kWh/kg fruit",
      "source": "singh_1980",
      "source_detail": "Table 8 (paste line, 386 t/shift): Crusher 108.0 kWh + Pump 52.0 kWh + Pulper 170.4 kWh + Finisher 34.2 kWh + Pump 8.54 kWh + Pump 4.27 kWh = 377.41 kWh total / 386,000 kg = 0.000978 kWh/kg. All estimated totals (full shift, all units).",
      "max_influence_pct": 0.12180060052946988,
      "signed_plus10": 0.12180060052946988,
      "signed_minus10": -0.12180060052946988,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "tomato:puree",
      "n_products": 2
    },
    {
      "parameter_path": "oil_refining/corn_germ.chemical_gaglio.phosphoric_acid_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.00143,
      "unit": "kg phosphoric acid (75%)/kg refined oil",
      "source": "gaglio_2019",
      "source_detail": "Table 1 refining sub-process: 1.43 kg/t refined oil (75% H3PO4). Converted: 1.43 / 1000 = 0.00143 kg/kg. Used for acid degumming (hydratable phospholipid precipitation).",
      "max_influence_pct": 0.11948902204208424,
      "signed_plus10": 0.11948902204208424,
      "signed_minus10": -0.11948902204208424,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/soybean.solvent_demarco.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00046,
      "unit": "kg hexane loss/kg seed",
      "source": "demarco_2020",
      "source_detail": "Inline text Section 6 (p. 7): 'hexane loss... less than 0.7 litres per tonne of beans (0.46 kg/t)'. DTDC accounts for ~90% of total hexane losses.",
      "max_influence_pct": 0.1175984246681904,
      "signed_plus10": 0.1175984246681904,
      "signed_minus10": -0.1175984246681904,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/rapeseed.cold_press.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00046,
      "unit": "kg hexane loss/kg seed",
      "source": "demarco_2020",
      "source_detail": "[GAP-FILLED from Demarco 2020] 0.46 kg/t soybean. Applied as proxy for rapeseed/other solvent extraction -- same DTDC equipment class.",
      "max_influence_pct": 0.10977763828146209,
      "signed_plus10": 0.10977763828146209,
      "signed_minus10": -0.10977763828146209,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "hemp_seed:crude_oil",
      "n_products": 7
    },
    {
      "parameter_path": "oil_extraction/corn_germ.solvent_gaglio.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0012,
      "unit": "kg hexane loss/kg wet germ",
      "source": "gaglio_2019",
      "source_detail": "Table 1 (p. 6): Hexane 3.59 kg per t refined oil. At 2.978 t germ: 3.59 / 2978 = 0.00121 kg/kg wet germ.",
      "max_influence_pct": 0.09868226390448773,
      "signed_plus10": 0.09868226390448773,
      "signed_minus10": -0.09868226390448773,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/sunflower.physical_nilsson.bleaching_earth_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.00303,
      "unit": "kg bleaching earth/kg refined oil",
      "source": "nilsson_2010",
      "source_detail": "Table 3 p. 920: 3.03 kg/t refined oil. Converted: 3.03 / 1000 = 0.00303 kg/kg.",
      "max_influence_pct": 0.09631902534013952,
      "signed_plus10": 0.09631902534013952,
      "signed_minus10": -0.09631902534013952,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/soybean.chemical_nopa.bleaching_earth_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.00261,
      "unit": "kg bleaching earth/kg refined oil",
      "source": "nopa_2024",
      "source_detail": "Table 4-4: 2.61 kg/t refined oil (26 plants). Converted: 2.61 / 1000 = 0.00261 kg/kg. Acid-activated bentonite for colour and phospholipid adsorption.",
      "max_influence_pct": 0.08688344737945819,
      "signed_plus10": 0.08688344737945819,
      "signed_minus10": -0.08688344737945819,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "safflower_seed:refined_oil",
      "n_products": 4
    },
    {
      "parameter_path": "oil_refining/soybean.chemical_nopa.naoh_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.00172,
      "unit": "kg NaOH/kg refined oil",
      "source": "nopa_2024",
      "source_detail": "Table 4-4: 1.72 kg/t refined oil (26 plants). Converted: 1.72 / 1000 = 0.00172 kg/kg. Caustic soda for neutralisation of free fatty acids.",
      "max_influence_pct": 0.08169357507120147,
      "signed_plus10": 0.08169357507120147,
      "signed_minus10": -0.08169357507120147,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "safflower_seed:refined_oil",
      "n_products": 4
    },
    {
      "parameter_path": "oil_refining/corn_germ.chemical_gaglio.naoh_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.00221,
      "unit": "kg NaOH (15% solution)/kg refined oil",
      "source": "gaglio_2019",
      "source_detail": "Table 1 refining sub-process: 2.21 kg/t refined oil (15% NaOH solution). Converted: 2.21 / 1000 = 0.00221 kg/kg. Reported as dilute solution, consistent with source.",
      "max_influence_pct": 0.07972508940341885,
      "signed_plus10": 0.07972508940341885,
      "signed_minus10": -0.07972508940341885,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "juice_extraction/orange.cold_press.water_kg_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.4833,
      "unit": "kg/kg fruit",
      "source": "beccali_2009",
      "source_detail": "Fig 1: 5,643,050 kg wash water / 11,675,973 kg fruit = 0.4833 kg/kg",
      "max_influence_pct": 0.06252037268370136,
      "signed_plus10": 0.06252037268370136,
      "signed_minus10": -0.06252037268370136,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "orange:pasteurised_juice",
      "n_products": 2
    },
    {
      "parameter_path": "preparation/fresh_cut_vegetable_mix.rasines_2023_fresh_cut_line.water_kg_per_kg_substrate_input",
      "pool": "preparation",
      "value": 8.45,
      "unit": "kg process water per kg fresh-cut product",
      "source": "rasines_2023",
      "source_detail": "Table 2 (p. 5), fresh-cut column, Water consumption / Vegetable washing and rinsing: 8.45E+00 L/kg = 8.45 kg/kg (density approx 1). Additional 0.9 L/kg facility cleaning water is out of pool scope (routes to consumables support generator).",
      "max_influence_pct": 0.06242746414061099,
      "signed_plus10": 0.06242746414061099,
      "signed_minus10": -0.06242746414061099,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "french_bean:fresh_cut_vegetable_line",
      "n_products": 4
    },
    {
      "parameter_path": "protein_extrusion/soy.hmme_extrusion.wastewater_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 22.6917,
      "unit": "kg wastewater (to treatment, BAFU 510767) / kg useful HME extrudate",
      "source": "saerens_2021_extrusion",
      "source_detail": "Cooling water that contacts the FKD-2100 die (22.7800 kg/kg useful tap water in) minus the absorbed-into-product fraction (0.0883 kg/kg useful, see _mass_balance) = 22.6917 kg/kg useful wastewater. Process injection (0.62 / 0.49 for HME Soy / PS) is retained in the wet product (>50% moisture content) and does not become wastewater.",
      "max_influence_pct": 0.06033931239016217,
      "signed_plus10": 0.06033931239016217,
      "signed_minus10": -0.06033931239016217,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:textured_protein_oilseed_route_hm",
      "n_products": 2
    },
    {
      "parameter_path": "oil_refining/corn_germ.chemical_gaglio.bleaching_earth_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.00225,
      "unit": "kg bleaching earth/kg refined oil",
      "source": "gaglio_2019",
      "source_detail": "Table 1 refining sub-process: 2.25 kg/t refined oil. Converted: 2.25 / 1000 = 0.00225 kg/kg.",
      "max_influence_pct": 0.056888219519574096,
      "signed_plus10": 0.056888219519574096,
      "signed_minus10": -0.056888219519574096,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/olive.decanter_proietti.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.05221007780069505,
      "signed_plus10": 0.05221007780069505,
      "signed_minus10": -0.05221007780069505,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "olive:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "juice_extraction/apple.hpx_press.wastewater_kg_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.1,
      "unit": "kg/kg fruit",
      "source": "zimmer_2017",
      "source_detail": "[DERIVED \u2014 mass balance] Equal to water_kg_per_kg_fruit (0.1). Fruit washing: incoming wash water leaves as wastewater (fruit does not absorb wash water meaningfully). Originating water source: zimmer_2017.",
      "max_influence_pct": 0.04308784230714157,
      "signed_plus10": 0.04308784230714157,
      "signed_minus10": -0.04308784230714157,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pineapple:pasteurised_juice",
      "n_products": 5
    },
    {
      "parameter_path": "oil_extraction/rapeseed.prepress_solvent_conventional.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00046,
      "unit": "kg hexane loss/kg seed",
      "source": "demarco_2020",
      "source_detail": "[GAP-FILLED from Demarco 2020] 0.46 kg/t soybean. Applied as proxy for rapeseed/other solvent extraction -- same DTDC equipment class.",
      "max_influence_pct": 0.04144222458903464,
      "signed_plus10": 0.04144222458903464,
      "signed_minus10": -0.04144222458903464,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rapeseed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/olive.decanter_proietti.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.03815591748881264,
      "signed_plus10": 0.03815591748881264,
      "signed_minus10": -0.03815591748881264,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "olive:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "separation/faba_bean.isoelectric_protein.naoh_kg_per_kg_separated",
      "pool": "separation",
      "value": 0.00674492,
      "unit": "kg pure NaOH/kg flour input (PROCESS chemistry only -- CIP excluded)",
      "source": "guyomarch_2025",
      "source_detail": "[basis-migration 2026-06-05: rebased from per-kg-output to per-kg-input by multiplying by the substrate-side mass_fraction (1.526). Value-preserving once the cascade adapter applies scale = af / target_yield (juice / oil pattern).] Sum of process NaOH (steps 7+10A only -- CIP step 12 excluded): 2.5 kg + 0.9 kg = 3.4 kg of 1M NaOH solution per batch. 1M NaOH = 40 g/L; density ~1.04 kg/L; pure NaOH = 38.5 g per kg solution. 3.4 kg solution x 0.0385 = 0.131 kg pure NaOH per batch / 19.4 kg flour input = 0.00675 kg/kg flour input. (Historical: 0.131 kg NaOH / 29.6 kg wet output = 0.00442 kg/kg wet output; \u00d7 mass_fraction 1.526 = 0.00675.)",
      "max_influence_pct": 0.03498249294036248,
      "signed_plus10": 0.03498249294036248,
      "signed_minus10": -0.03498249294036248,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/soybean.solvent_demarco.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.031007784937816186,
      "signed_plus10": 0.031007784937816186,
      "signed_minus10": -0.031007784937816186,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/coconut_copra.expeller_solvent_yani.hexane_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0015,
      "unit": "kg hexane/kg copra",
      "source": "yani_2022",
      "source_detail": "Table 3: SEP hexane 0.0024 kg/kg refined CO. At 1.593 kg copra/kg CO: 0.0024 / 1.593 = 0.0015 kg/kg copra.",
      "max_influence_pct": 0.029126469635943984,
      "signed_plus10": 0.029126469635943984,
      "signed_minus10": -0.029126469635943984,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/rapeseed.cold_press.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.028945637736367588,
      "signed_plus10": 0.028945637736367588,
      "signed_minus10": -0.028945637736367588,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "hemp_seed:crude_oil",
      "n_products": 7
    },
    {
      "parameter_path": "oil_extraction/sunflower.prepress_solvent_nilsson.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.022834486028423733,
      "signed_plus10": 0.022834486028423733,
      "signed_minus10": -0.022834486028423733,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/soybean.solvent_demarco.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.022660959980075165,
      "signed_plus10": 0.022660959980075165,
      "signed_minus10": -0.022660959980075165,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "separation/faba_bean.isoelectric_protein.wastewater_kg_per_kg_separated",
      "pool": "separation",
      "value": 6.2277586,
      "unit": "kg/kg flour input",
      "source": "guyomarch_2025",
      "source_detail": "[basis-migration 2026-06-05: rebased from per-kg-output to per-kg-input by multiplying by the substrate-side mass_fraction (1.526). Value-preserving once the cascade adapter applies scale = af / target_yield (juice / oil pattern).] Process losses (excluding the supernatant stream which goes to biogas valorisation): step 7 losses 4.5 + step 8 losses ~0 + step 9 losses 1.1 + step 10A losses 0.7 = 6.3 kg per batch + the bulk water carrier. The supernatant stream (114.5 kg/batch from step 8) is routed to biogas valorisation rather than wastewater. Total per kg output: ~4.1 kg/kg.",
      "max_influence_pct": 0.022061357912367754,
      "signed_plus10": 0.022061357912367754,
      "signed_minus10": -0.022061357912367754,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/cottonseed.prepress_solvent_cottonseed.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED] NOPA Life Cycle Inventory Data, Table 3-6: 99 gal/tonne = 375 L/tonne wastewater discharge for crushing.",
      "max_influence_pct": 0.02163681448879899,
      "signed_plus10": 0.02163681448879899,
      "signed_minus10": -0.02163681448879899,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "cottonseed:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/rapeseed.cold_press.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.02115391149858045,
      "signed_plus10": 0.02115391149858045,
      "signed_minus10": -0.02115391149858045,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "hemp_seed:crude_oil",
      "n_products": 7
    },
    {
      "parameter_path": "juice_extraction/apple.hpx_press.water_kg_per_kg_fruit",
      "pool": "juice_extraction",
      "value": 0.1,
      "unit": "kg/kg fruit",
      "source": "zimmer_2017",
      "source_detail": "In-text: fruit cleaning 75-125 L/t. Midpoint 100 L/t.",
      "max_influence_pct": 0.020536466934829852,
      "signed_plus10": 0.020536466934829852,
      "signed_minus10": -0.020536466934829852,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pineapple:pasteurised_juice",
      "n_products": 5
    },
    {
      "parameter_path": "separation/faba_bean.isoelectric_protein.water_kg_per_kg_separated",
      "pool": "separation",
      "value": 11.8213116,
      "unit": "kg process water/kg flour input",
      "source": "guyomarch_2025",
      "source_detail": "[basis-migration 2026-06-05: rebased from per-kg-output to per-kg-input by multiplying by the substrate-side mass_fraction (1.526). Value-preserving once the cascade adapter applies scale = af / target_yield (juice / oil pattern).] Sum of operations 7-10A process water (excludes CIP): alkaline 137 + acidic 14.2 + washing 71.1 + stabilisation 7 = 229.3 kg / 19.4 kg flour-as-fed = 11.82 kg/kg flour input. (Historical: 229.3 / 29.6 kg wet output = 7.75 kg/kg wet output; \u00d7 mass_fraction 1.526 = 11.82.)",
      "max_influence_pct": 0.019958923753425256,
      "signed_plus10": 0.019958923753425256,
      "signed_minus10": -0.019958923753425256,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/soybean.extruding_expelling_cheng.phosphoric_acid_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00033,
      "unit": "kg H3PO4/kg seed",
      "source": "cheng_2018",
      "source_detail": "Table 1 (p. 4/61): 8.00 kg H3PO4/h at 24278.18 kg/h seed = 0.000329 kg/kg seed. Used for water degumming of crude oil prior to storage.",
      "max_influence_pct": 0.01784139439976253,
      "signed_plus10": 0.01784139439976253,
      "signed_minus10": -0.01784139439976253,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "almond:crude_oil",
      "n_products": 4
    },
    {
      "parameter_path": "oil_extraction/sunflower.prepress_solvent_nilsson.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.01668778905340727,
      "signed_plus10": 0.01668778905340727,
      "signed_minus10": -0.01668778905340727,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/cottonseed.prepress_solvent_cottonseed.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED] NOPA Life Cycle Inventory Data, Table 3-5: 152 gal/tonne = 575 L/tonne water consumption for crushing.",
      "max_influence_pct": 0.015812512509689645,
      "signed_plus10": 0.015812512509689645,
      "signed_minus10": -0.015812512509689645,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "cottonseed:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "preparation/durum_wheat_pasta.paolotti_2023_artisanal_pasta_plant.water_kg_per_kg_substrate_input",
      "pool": "preparation",
      "value": 1.585,
      "unit": "kg process water per kg pasta",
      "source": "paolotti_2023",
      "source_detail": "Paolotti 2023 Table 1: process water 2,333.5 m3 / 1,472,300 kg pasta = 1.585 kg/kg pasta. Higher than a dry-line source would report because the pasta process legitimately incorporates water into the dough (~30 percent moisture in kneaded dough; excess evaporates during drying).",
      "max_influence_pct": 0.012511994520524648,
      "signed_plus10": 0.012511994520524648,
      "signed_minus10": -0.012511994520524648,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:dry_pasta_artisanal",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/rapeseed.prepress_solvent_conventional.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.010927285727060053,
      "signed_plus10": 0.010927285727060053,
      "signed_minus10": -0.010927285727060053,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rapeseed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/corn_germ.solvent_gaglio.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.009974357476031998,
      "signed_plus10": 0.009974357476031998,
      "signed_minus10": -0.009974357476031998,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "protein_extrusion/soy.hmme_extrusion.solid_waste_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 0.0334,
      "unit": "kg biowaste / kg useful HME extrudate",
      "source": "saerens_2021_extrusion",
      "source_detail": "Saerens Table 3 caption: HME Soy useful 1439.12 kg / waste 48.01 kg per 8 h cycle. Treated as biowaste.",
      "max_influence_pct": 0.008608552271487605,
      "signed_plus10": 0.008608552271487605,
      "signed_minus10": -0.008608552271487605,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:textured_protein_oilseed_route_hm",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/soybean.extruding_expelling_cheng.natural_gas_mj_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.003,
      "unit": "MJ/kg seed",
      "source": "cheng_2018",
      "source_detail": "Table 3 (p. 5/62): 0.01 kg steam/kg soybean oil. Converted: 0.01 kg steam/kg oil x 0.1333 kg oil/kg seed = 0.00133 kg steam/kg seed. At 2.257 MJ/kg steam: 0.00133 x 2.257 = 0.003 MJ/kg seed.",
      "max_influence_pct": 0.008480325708363459,
      "signed_plus10": 0.008480325708363459,
      "signed_minus10": -0.008480325708363459,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean_organic:crude_oil",
      "n_products": 4
    },
    {
      "parameter_path": "oil_extraction/rapeseed.prepress_solvent_conventional.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.007985826302921785,
      "signed_plus10": 0.007985826302921785,
      "signed_minus10": -0.007985826302921785,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rapeseed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "drying/apple.spray_tower_food_demarco.specific_elec_kwh_per_kg_water",
      "pool": "drying",
      "value": 0.000962,
      "unit": "kWh/kg water",
      "source": "de_marco_2015_3",
      "source_detail": "De Marco 2015 Table 2: MD spray-drying step direct electricity 1.43E-02 MJ per 3-kg-FU / 4.13 kg water removed / 3.6 MJ/kWh = 9.62E-04 kWh/kg water. The MD spray dryer is electricity-assisted (fans + atomiser); the dominant energy input is the gas-fired air heater captured in the thermal field. Conveyor-belt electricity (3.25E-03 MJ/FU) is the transport boundary, not the drying step.",
      "max_influence_pct": 0.007645320468308192,
      "signed_plus10": 0.007645320468308192,
      "signed_minus10": -0.007645320468308192,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "strawberry:spray_dried_powder",
      "n_products": 8
    },
    {
      "parameter_path": "oil_extraction/corn_germ.solvent_gaglio.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.0072894118701032065,
      "signed_plus10": 0.0072894118701032065,
      "signed_minus10": -0.0072894118701032065,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "protein_extrusion/soy.lm_extrusion.solid_waste_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 0.076,
      "unit": "kg biowaste / kg useful TVP product",
      "source": "saerens_2021_extrusion",
      "source_detail": "Saerens Table 3 caption + Notes: TVP Soy useful product 640.00 kg per 8 h cycle, waste 48.66 kg per cycle. 'Waste defined as heated/un-textured material rejected at start/end of run and cleanouts; treated as biowaste after extrusion' (page 7 text).",
      "max_influence_pct": 0.006124335009241349,
      "signed_plus10": 0.006124335009241349,
      "signed_minus10": -0.006124335009241349,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/soybean.chemical_nopa.water_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.3,
      "unit": "kg water/kg refined oil",
      "source": "nopa_2024",
      "source_detail": "Table 4-4: 300 L/t refined oil (13 plants, low response rate). Converted: 300 / 1000 = 0.300 kg/kg. Used for washing after neutralisation.",
      "max_influence_pct": 0.004638506949834542,
      "signed_plus10": 0.004638506949834542,
      "signed_minus10": -0.004638506949834542,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "safflower_seed:refined_oil",
      "n_products": 4
    },
    {
      "parameter_path": "oil_extraction/coconut_copra.expeller_solvent_yani.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.375,
      "unit": "kg wastewater/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 375 L/tonne soybeans. [DERIVED] Solvent extraction is a dry process; wastewater comes from seed conditioning and plant cleaning.",
      "max_influence_pct": 0.0023551775864800372,
      "signed_plus10": 0.0023551775864800372,
      "signed_minus10": -0.0023551775864800372,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.phosphoric_acid_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.0001,
      "unit": "kg phosphoric acid/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: phosphoric acid 0.0001 kg/kg coconut oil.",
      "max_influence_pct": 0.001974704661534662,
      "signed_plus10": 0.001974704661534662,
      "signed_minus10": -0.001974704661534662,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.wastewater_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.3255,
      "unit": "kg wastewater/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: wastewater output 0.3255 L/kg coconut oil, converted at 1 kg/L.",
      "max_influence_pct": 0.0018953544291072989,
      "signed_plus10": 0.0018953544291072989,
      "signed_minus10": -0.0018953544291072989,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/soybean.extruding_expelling_cheng.wastewater_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.1133,
      "unit": "kg wastewater/kg seed",
      "source": "cheng_2018",
      "source_detail": "Table 1 (p. 4/61): wastewater 2156.31 + sewage 412.70 = 2569.01 kg/h at 24278.18 kg/h seed = 0.1058 kg/kg seed. Mass index 0.72 wastewater + 0.13 sewage = 0.85 kg/kg oil x 0.1333 = 0.1133 kg/kg seed (Fig. 7 cross-check; adopted).",
      "max_influence_pct": 0.0018062674425368913,
      "signed_plus10": 0.0018062674425368913,
      "signed_minus10": -0.0018062674425368913,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "walnut:crude_oil",
      "n_products": 4
    },
    {
      "parameter_path": "oil_extraction/coconut_copra.expeller_solvent_yani.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.575,
      "unit": "kg water/kg seed",
      "source": "nopa_2024",
      "source_detail": "[GAP-FILLED from NOPA 2024] 575 L/tonne soybeans (46 of 52 US plants). Applied as proxy -- water use in seed conditioning/cleaning is technology-driven, not strongly substrate-specific.",
      "max_influence_pct": 0.0017211995355432485,
      "signed_plus10": 0.0017211995355432485,
      "signed_minus10": -0.0017211995355432485,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "grain_milling/wheat_conventional.roller_review_sabur.conditioning_water_kg_per_kg_grain",
      "pool": "grain_milling",
      "value": 0.025,
      "unit": "kg conditioning water per kg wheat grain input",
      "source": "uk_flour_millers_2024",
      "source_detail": "UK Flour Millers process description: grain tempering raises moisture by roughly 2 percentage points (from ~14 percent to 15-16.5 percent) before milling. The tempering water is added per kg grain entering the mill (not per kg flour leaving), so this flow is naturally input-basis. ~0.025 kg conditioning water per kg grain. Ladha-Sabur does not quantify water; carried as a small declared flow per P7 (declare-even-if-small) defence.",
      "max_influence_pct": 0.001652947616609731,
      "signed_plus10": 0.001652947616609731,
      "signed_minus10": -0.001652947616609731,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "durum_wheat:flour",
      "n_products": 9
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.water_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.3255,
      "unit": "kg water/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: water input 0.3255 L/kg coconut oil, converted at 1 kg/L.",
      "max_influence_pct": 0.0009033611682312977,
      "signed_plus10": 0.0009033611682312977,
      "signed_minus10": -0.0009033611682312977,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "protein_extrusion/soy.hmme_extrusion.water_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 0.623,
      "unit": "kg PROCESS water (in-barrel injection) / kg useful HME extrudate",
      "source": "saerens_2021_extrusion",
      "source_detail": "Derived from Saerens Table 1: HME Soy water influent 112 L/h x 8 h extrusion / 1439.12 kg useful per cycle. Much higher than TVP injection because HME runs at >50 percent feed moisture for fibrous structure.",
      "max_influence_pct": 0.00078957311797291,
      "signed_plus10": 0.00078957311797291,
      "signed_minus10": -0.00078957311797291,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:textured_protein_oilseed_route_hm",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/soybean.extruding_expelling_cheng.water_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0735,
      "unit": "kg water/kg seed",
      "source": "cheng_2018",
      "source_detail": "Table 1 (p. 4/61): 1787 kg/h water input at 24278.18 kg/h seed = 0.0736 kg/kg seed. Mass index also 0.55 kg/kg oil x 0.1333 = 0.0734 kg/kg seed (Fig. 4 cross-check).",
      "max_influence_pct": 0.0005584836544359624,
      "signed_plus10": 0.0005584836544359624,
      "signed_minus10": -0.0005584836544359624,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "walnut:crude_oil",
      "n_products": 4
    },
    {
      "parameter_path": "protein_extrusion/soy.lm_extrusion.water_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 0.225,
      "unit": "kg PROCESS water (in-barrel injection) / kg useful TVP product",
      "source": "saerens_2021_extrusion",
      "source_detail": "Derived from Saerens Table 1 (page 4): TVP Soy water influent = 18 L/h, extrusion phase = 8 h, useful product per cycle = 640 kg. Process water injection only -- excludes cooling water and cleaning water.",
      "max_influence_pct": 8.915557762543782e-05,
      "signed_plus10": 8.915557762543782e-05,
      "signed_minus10": -8.915557762543782e-05,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 1
    },
    {
      "parameter_path": "concentration/apple.six_effect_evaporation.cooling_water_kg_per_kg_water_evaporated",
      "pool": "concentration",
      "value": 1.1,
      "unit": "kg cooling water per kg water evaporated",
      "source": "estimated_from_beccali",
      "source_detail": "Estimated: 6-effect uses 1/3 cooling water vs 2-effect. Beccali 2-effect avg ~3.4 / 3 = 1.13. Rounded to 1.1.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "apple:juice_concentrate",
      "n_products": 7
    },
    {
      "parameter_path": "products/apricot.concentrate_brix",
      "pool": "products",
      "value": 32.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "apricot:dried_fruit",
      "n_products": 2
    },
    {
      "parameter_path": "products/apricot.min_brix",
      "pool": "products",
      "value": 11.5,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "apricot:dried_fruit",
      "n_products": 2
    },
    {
      "parameter_path": "pasteurisation/lemon.htst.cooling_water_kg_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.4222,
      "unit": "kg/kg juice",
      "source": "beccali_2009",
      "source_detail": "Fig 2: 1,935,000 / 4,584,049 = 0.4222 kg/kg juice",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "beetroot:juice_concentrate",
      "n_products": 13
    },
    {
      "parameter_path": "concentration/pepper.multi_effect_evaporation.cooling_water_kg_per_kg_water_evaporated",
      "pool": "concentration",
      "value": 2.3,
      "unit": "kg cooling water per kg water evaporated",
      "source": "estimated_from_beccali",
      "source_detail": "Estimated: 3-effect ~2/3 of 2-effect. Beccali avg ~3.4 x (2/3) = 2.27, rounded to 2.3.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "bell_pepper:juice_concentrate",
      "n_products": 3
    },
    {
      "parameter_path": "products/blueberry.min_brix",
      "pool": "products",
      "value": 10.0,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "blueberry:freeze_dried_fruit",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/coconut_copra.expeller_solvent_yani.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0015,
      "unit": "kg hexane to air/kg seed",
      "source": "yani_2022",
      "source_detail": "[DERIVED] Same as hexane_kg (solvent loss = emission). Table 3: SEP hexane 0.0024 kg/kg refined CO. At 1.593 kg copra/kg CO: 0.0024 / 1.593 = 0.0015 kg/kg copra.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_refining/coconut_copra.physical_yani.activated_carbon_kg_per_kg_refined_oil",
      "pool": "oil_refining",
      "value": 0.0007,
      "unit": "kg activated carbon/kg refined oil",
      "source": "yani_2022",
      "source_detail": "Table 3 Refined Oil Plant: activated carbon 0.0007 kg/kg coconut oil. Tracked for inventory completeness; data/bafu_processing_inputs.json currently marks activated_carbon_kg as skip because no compatible BAFU process is available.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "coconut_copra:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/cottonseed.prepress_solvent_cottonseed.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.002479444719,
      "unit": "kg hexane to air/kg seed",
      "source": "hise_1980",
      "source_detail": "[DERIVED] Same as hexane_kg because make-up solvent equals evaporative solvent loss to air in the model boundary.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "cottonseed:crude_oil",
      "n_products": 1
    },
    {
      "parameter_path": "products/cranberry.min_brix",
      "pool": "products",
      "value": 7.5,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "cranberry:pasteurised_juice",
      "n_products": 1
    },
    {
      "parameter_path": "pasteurisation/orange.htst.cooling_water_kg_per_kg_pasteurised",
      "pool": "pasteurisation",
      "value": 0.3988,
      "unit": "kg/kg juice",
      "source": "beccali_2009",
      "source_detail": "Fig 1: 1,320,000 / 3,309,840 = 0.3988 kg/kg juice",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "generic:pasteurised_juice",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/rapeseed.cold_press.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00046,
      "unit": "kg hexane to air/kg seed",
      "source": "demarco_2020",
      "source_detail": "[DERIVED] Same as hexane_kg (solvent loss = emission). [GAP-FILLED from Demarco 2020] 0.46 kg/t soybean. Applied as proxy for rapeseed/other solvent extraction -- same DTDC equipment class.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "hemp_seed:crude_oil",
      "n_products": 7
    },
    {
      "parameter_path": "products/lemon.concentrate_brix",
      "pool": "products",
      "value": 50.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "lemon:juice_extraction",
      "n_products": 2
    },
    {
      "parameter_path": "products/lemon.min_brix",
      "pool": "products",
      "value": 8.0,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17)",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "lemon:juice_extraction",
      "n_products": 2
    },
    {
      "parameter_path": "plant_drink_processing/oat.enzymatic_wet_chain.cooling_water_kg_per_kg_drink",
      "pool": "plant_drink_processing",
      "value": 4.39,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 8 (p. 25): water for cooling 20,900 m3 / 4,756 t = 4.39 kg/kg. Equipment cooling circuit, NOT product water.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "oat:pasteurised_plant_drink",
      "n_products": 2
    },
    {
      "parameter_path": "plant_drink_processing/oat.enzymatic_wet_chain.enzyme_kg_per_kg_drink",
      "pool": "plant_drink_processing",
      "value": 0.0001,
      "unit": "kg enzyme product/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25): enzyme 0.0001 kg/kg drink. Industrial alpha-amylase.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "oat:pasteurised_plant_drink",
      "n_products": 2
    },
    {
      "parameter_path": "concentration/orange.multi_effect_evaporation.cooling_water_kg_per_kg_water_evaporated",
      "pool": "concentration",
      "value": 3.05,
      "unit": "kg cooling water per kg water evaporated",
      "source": "beccali_2009",
      "source_detail": "12.21 kg cooling / 4.0 kg water evap = 3.05.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "orange:juice_concentrate",
      "n_products": 2
    },
    {
      "parameter_path": "protein_extrusion/soy.lm_extrusion.cooling_water_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 17.275,
      "unit": "kg COOLING water (biosphere withdrawal + return, open-loop) / kg useful TVP product",
      "source": "saerens_2021_extrusion",
      "source_detail": "Derived from Saerens Table 3 total facility water 17.5 L/kg minus process injection 0.225 L/kg (Table 1 derivation). Coperion ZSK 43 Mv is described as 'water-cooled twin-screw' without specifying recirculation -- per \u00a73.9, OPEN-LOOP assumption applied (biosphere withdrawal + return, no treatment).",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 1
    },
    {
      "parameter_path": "separation/faba_bean.isoelectric_protein.hcl_kg_per_kg_separated",
      "pool": "separation",
      "value": 0.00555464,
      "unit": "kg pure HCl/kg flour input",
      "source": "guyomarch_2025",
      "source_detail": "[basis-migration 2026-06-05: rebased from per-kg-output to per-kg-input by multiplying by the substrate-side mass_fraction (1.526). Value-preserving once the cascade adapter applies scale = af / target_yield (juice / oil pattern).] Sum of process HCl (steps 8+9): 2.8 kg + 0.2 kg = 3.0 kg of 1M HCl solution per batch. 1M HCl = 36.5 g/L; density ~1.016 kg/L; pure HCl = 35.93 g per kg solution. 3.0 kg solution x 0.0359 = 0.108 kg pure HCl per batch / 19.4 kg flour input = 0.00557 kg/kg flour input. (Historical: 0.108 kg HCl / 29.6 kg wet output = 0.00364 kg/kg wet output; \u00d7 mass_fraction 1.526 = 0.00557.)",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route",
      "n_products": 3
    },
    {
      "parameter_path": "protein_extrusion/soy.hmme_extrusion.cooling_water_kg_per_kg_extrudate",
      "pool": "protein_extrusion",
      "value": 22.78,
      "unit": "kg TAP water (technosphere; cooling-as-process) / kg useful HME extrudate",
      "source": "saerens_2021_extrusion",
      "source_detail": "Saerens Table 3 total facility water minus process injection = 22.7800 kg/kg useful. RECLASSIFIED from biosphere (open-loop) to technosphere (tap water + wastewater) per 2026-05-11 review: the FKD-2100 cooling die is in contact with the extrudate matrix (basis for the derived cooling-water-absorbed mass-balance closure), so per \u00a73.9 the cooling water is contaminated -> tap water in + wastewater out, not biosphere. BAFU mapping: tap water in via BAFU 227940; wastewater out via BAFU 510767 (see wastewater_kg_per_kg_extrudate).",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "pea:textured_protein_pulse_wet_route_hm",
      "n_products": 2
    },
    {
      "parameter_path": "products/pineapple.concentrate_brix",
      "pool": "products",
      "value": 72.0,
      "unit": "degrees Brix",
      "source": null,
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "pineapple:fresh_cut_vegetable_line",
      "n_products": 2
    },
    {
      "parameter_path": "products/pineapple.min_brix",
      "pool": "products",
      "value": 12.8,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17). Floor 10.0 if authenticity met.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "pineapple:fresh_cut_vegetable_line",
      "n_products": 2
    },
    {
      "parameter_path": "products/plum.min_brix",
      "pool": "products",
      "value": 11.2,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "plum:dried_fruit",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/rapeseed.prepress_solvent_conventional.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00046,
      "unit": "kg hexane to air/kg seed",
      "source": "demarco_2020",
      "source_detail": "[DERIVED] Same as hexane_kg (solvent loss = emission). [GAP-FILLED from Demarco 2020] 0.46 kg/t soybean. Applied as proxy for rapeseed/other solvent extraction -- same DTDC equipment class.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rapeseed:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "products/raspberry.min_brix",
      "pool": "products",
      "value": 8.0,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "raspberry:freeze_dried_fruit",
      "n_products": 2
    },
    {
      "parameter_path": "oil_extraction/corn_germ.solvent_gaglio.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0012,
      "unit": "kg hexane to air/kg seed",
      "source": "gaglio_2019",
      "source_detail": "[DERIVED] Same as hexane_kg (solvent loss = emission). Table 1 (p. 6): Hexane 3.59 kg per t refined oil. At 2.978 t germ: 3.59 / 2978 = 0.00121 kg/kg wet germ.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "rice_bran:refined_oil",
      "n_products": 1
    },
    {
      "parameter_path": "oil_extraction/soybean.solvent_demarco.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.00046,
      "unit": "kg hexane to air/kg seed",
      "source": "demarco_2020",
      "source_detail": "[DERIVED] Same as hexane_kg (solvent loss = emission). Inline text Section 6 (p. 7): 'hexane loss... less than 0.7 litres per tonne of beans (0.46 kg/t)'. DTDC accounts for ~90% of total hexane losses.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "soybean:crude_oil",
      "n_products": 2
    },
    {
      "parameter_path": "products/strawberry.min_brix",
      "pool": "products",
      "value": 7.5,
      "unit": "degrees Brix",
      "source": "codex_stan_247_2005",
      "source_detail": null,
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": 0.0,
      "method": "perturbation",
      "linearity": "linear",
      "worst_product": "strawberry:freeze_dried_fruit",
      "n_products": 3
    },
    {
      "parameter_path": "oil_extraction/sunflower.prepress_solvent_nilsson.hexane_emission_kg_per_kg_seed",
      "pool": "oil_extraction",
      "value": 0.0008,
      "unit": "kg hexane to air/kg seed",
      "source": "nilsson_2010",
      "source_detail": "[DERIVED] Same as hexane_kg (solvent loss = emission). Table 3 (p. 920): 2 kg hexane per 1000 kg crude oil. At 40% oil yield: 2 kg / 2500 kg seed = 0.0008 kg/kg seed.",
      "max_influence_pct": 0.0,
      "signed_plus10": 0.0,
      "signed_minus10": -0.0,
      "method": "analytic_linear",
      "linearity": "linear",
      "worst_product": "sunflower_seed:crude_oil",
      "n_products": 2
    }
  ],
  "product_properties": [
    {
      "product": "almond",
      "path": "co_products.almond_pulp.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.08,
      "unit": null,
      "source": "derived_from_winans_2019_aiello_2022_faraloni_2023",
      "source_detail": "Per kg almond beverage output, derived from three corpus-verified primary sources. Winans et al. 2019 (Int J LCA 25:577-587, DOI 10.1007/s11367-019-01716-5) report the primary recipe from a California commercial almond-milk facility: 53.4 g milk ingredients (mostly almonds, with calcium carbonate, sunflower lecithin, sea salt, potassium citrate, natural flavors, locust bean gum, gellan gum) per 48 oz (1.42 L) bottle for 2016, 51.0 g for 2017 (Table 1). Per kg drink basis this is ~37.6 g almonds. Faraloni et al. 2023 (Foods 12:935, DOI 10.3390/foods12050935) report a pilot-scale almond beverage mass balance in which ~51% of input mass partitions to the wet pellet on centrifugation (Test MGP3). Aiello et al. 2022 (Foods 11:3693, DOI 10.3390/foods11223693) characterise commercial almond press cake at 23.8% dry matter (76.2% water) and 18.56% protein on dry basis. Combining: ~37.6 g almonds * 50% dry-mass partition = ~19 g almond dry matter in the pulp; at Aiello's 23.8% dry-matter content the wet pulp lands at ~80 g per kg drink, giving a mass_fraction of ~0.08. Replaces the previous 0.3 placeholder which was physically inconsistent with a commercial recipe (would imply 30% of drink mass as residue, against 4% almond input)."
    },
    {
      "product": "almond",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.531,
      "unit": "kg/kg dry basis",
      "source": "martinez_2013",
      "source_detail": "Table 2: total lipids 53.11 +/- 0.51% (d.b.), Guara variety, Mendoza Argentina."
    },
    {
      "product": "almond",
      "path": "plant_drink_mass_balance.drink_yield_kg_per_kg_raw",
      "quantity": "drink_yield_kg_per_kg_raw",
      "value": 20.4,
      "unit": null,
      "source": "bussa_2020",
      "source_detail": "Bussa 2020 Tab. 4.1: 4.9% raw material share = 20.4 kg drink/kg almond. Cross-check: Pointke 2022 range 2.0-7.0% = 14.3-50. Commercial almond drinks are highly diluted."
    },
    {
      "product": "almond",
      "path": "plant_drink_mass_balance.okara_mass_fraction_per_kg_raw",
      "quantity": "okara_mass_fraction_per_kg_raw",
      "value": 0.3,
      "unit": null,
      "source": "estimated",
      "source_detail": "Estimated almond pulp residue. NOT human-verified."
    },
    {
      "product": "almond",
      "path": "plant_drink_mass_balance.target_solids_fraction",
      "quantity": "target_solids_fraction",
      "value": 0.049,
      "unit": null,
      "source": "bussa_2020",
      "source_detail": "Bussa 2020 Tab. 4.1: 4.9% raw material share. Cross-check: Pointke 2022 mean 3.4%."
    },
    {
      "product": "almond",
      "path": "plant_drink_mass_balance.water_input_kg_per_kg_drink",
      "quantity": "water_input_kg_per_kg_drink",
      "value": 0.95,
      "unit": null,
      "source": "estimated",
      "source_detail": "Estimated from Bussa almond 4.9% substrate: water = 1 - substrate - additives ~= 0.95."
    },
    {
      "product": "almond",
      "path": "processing_methods.cold_press_nut._oil_yield_sources[0]",
      "quantity": "_oil_yield_sources[0]",
      "value": 0.421,
      "unit": null,
      "source": "martinez_2013",
      "source_detail": null
    },
    {
      "product": "almond",
      "path": "processing_methods.cold_press_nut._oil_yield_sources[1]",
      "quantity": "_oil_yield_sources[1]",
      "value": 0.382,
      "unit": null,
      "source": "martinez_2017",
      "source_detail": null
    },
    {
      "product": "apple",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 70,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "High-Brix apple juice concentrate 70-71 Brix (FAO Agricultural Services Bulletin 146, 2001, section 13.8, multi-stage evaporation)."
    },
    {
      "product": "apple",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Floor 10.0 if authenticity met"
    },
    {
      "product": "apple",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.8541,
      "unit": null,
      "source": "usda_fdc_171688",
      "source_detail": "USDA FoodData Central FDC ID 171688 raw apple with skin 85.41 percent moisture (DM 14.59 percent)."
    },
    {
      "product": "apple",
      "path": "processing_methods.belt_press.co_products.juice.sources[0]",
      "quantity": "sources[0]",
      "value": 0.8,
      "unit": null,
      "source": "zimmer_2017",
      "source_detail": null
    },
    {
      "product": "apple",
      "path": "processing_methods.belt_press.co_products.juice.sources[1]",
      "quantity": "sources[1]",
      "value": 0.73,
      "unit": null,
      "source": "questionmark_2015",
      "source_detail": null
    },
    {
      "product": "apple",
      "path": "processing_methods.drum.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_drum_dried_powder",
      "source_detail": "Industrial drum-dried fruit powder targets 3-5 percent residual moisture; adopted 0.04 as the commercial midpoint matching De Marco et al. 2015 final apple-powder spec."
    },
    {
      "product": "apricot",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 32,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Apricot concentrate target 32 Brix (FAO Agricultural Services Bulletin 146, 2001, section 13.12)."
    },
    {
      "product": "apricot",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "apricot",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.176,
      "unit": null,
      "source": "codex_stan_130_1981",
      "source_detail": "Codex Standard CXS 130-1981 for dried apricots: maximum 25 percent moisture for unsulfured, 35 percent for sulfured. Industrial hot-air dried product targets 15-20 percent; adopted 0.176 as the commercial midpoint matching USDA FDC ID 9025 (17.6 percent for hot-air dried, unsulfured)."
    },
    {
      "product": "apricot",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.871,
      "unit": null,
      "source": "swiss_fir_v7_379",
      "source_detail": null
    },
    {
      "product": "apricot",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.871,
      "unit": null,
      "source": "ciqual_2025_13000",
      "source_detail": null
    },
    {
      "product": "apricot",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.176,
      "unit": null,
      "source": "usda_fdc_plus_codex_2026",
      "source_detail": "USDA FDC 9025 hot-air dried, Codex CXS 130-1981"
    },
    {
      "product": "apricot",
      "path": "processing_methods.pulper_finisher.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.5,
      "unit": "kg/kg fruit",
      "source": "fao_bulletin_146_2001",
      "source_detail": "FAO Bulletin 146 Ch 13.12: apricot processed same manner as peaches (thermal screw 99C + pulper + finisher). Yield not quantified; estimated from peach analogy (0.503 per FAO Ch 13.11). Stone ~8-12% + peel ~5%. Flagged estimated."
    },
    {
      "product": "apricot",
      "path": "processing_methods.sundrying.moisture_dried.sources[0]",
      "quantity": "sources[0]",
      "value": 0.247,
      "unit": null,
      "source": "swiss_fir_v7_469",
      "source_detail": null
    },
    {
      "product": "apricot",
      "path": "processing_methods.sundrying.moisture_dried.sources[1]",
      "quantity": "sources[1]",
      "value": 0.247,
      "unit": null,
      "source": "ciqual_2025_13001",
      "source_detail": null
    },
    {
      "product": "banana",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 60,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Banana concentrate target above 60 Brix (FAO Agricultural Services Bulletin 146, 2001, section 15.11)."
    },
    {
      "product": "banana",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": null,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "No data available (footnote 16). Use Brix as expressed from fruit."
    },
    {
      "product": "banana",
      "path": "processing_methods.enzyme_press.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.75,
      "unit": "kg/kg fruit",
      "source": "fao_bulletin_146_2001",
      "source_detail": "FAO Bulletin 146 Ch 15.11: ~75% puree basis, enzyme treatment + centrifuge/press. pH 4.2 (citric + ascorbic acid), heat 85C, cool 60C, enzyme 30 min. Range 0.70-0.80 is the FAO-stated range, not a multi-source range."
    },
    {
      "product": "beetroot",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 65,
      "unit": null,
      "source": "assumption",
      "source_detail": "Explicit assumption: no single citable concentrate-Brix standard was located for beetroot juice (FAO Agricultural Services Bulletin 146 covers fruit juices only; its vegetable-juice chapter 16 does not quantify beetroot concentrate). 65 Brix is adopted as the shelf-stable concentrate target consistent with the fruit and berry concentrate cascades (grape, black currant). Reduced-sugar variants stop near 50 Brix."
    },
    {
      "product": "beetroot",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 8.0,
      "unit": null,
      "source": "USDA FDC + LCA literature consensus",
      "source_detail": "Beet is not in Codex STAN 247-2005 (which covers fruit juices). Sugar fraction in raw beetroot ~9.96 g/100g (USDA FDC #169145) translates to ~8-10 Brix in pressed juice. LCA literature commonly uses 8.0 Brix as single-strength baseline (e.g. beetroot juice industry reference)."
    },
    {
      "product": "beetroot",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.851,
      "unit": null,
      "source": "swiss_fir_v7_451",
      "source_detail": null
    },
    {
      "product": "beetroot",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.876,
      "unit": null,
      "source": "ciqual_2025_20091",
      "source_detail": null
    },
    {
      "product": "beetroot",
      "path": "moisture_fresh.sources[2]",
      "quantity": "sources[2]",
      "value": 0.89,
      "unit": null,
      "source": "nevo_2025_v9_12",
      "source_detail": null
    },
    {
      "product": "beetroot",
      "path": "processing_methods.grater_disc_root.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.85,
      "unit": "kg/kg fruit",
      "source": "estimated",
      "source_detail": "Estimated root-crop grating yield; similar to cassava/potato. NOT human-verified."
    },
    {
      "product": "bell_pepper",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 65,
      "unit": null,
      "source": "assumption",
      "source_detail": "Explicit assumption: no single citable concentrate-Brix standard was located for bell pepper juice. Commercial red and yellow bell pepper juice concentrate is marketed by ingredient suppliers at 60-70 Brix; 65 Brix is adopted as the shelf-stable mid-range target, matching the other juice concentrate cascades (beetroot, black currant, grape)."
    },
    {
      "product": "bell_pepper",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 10.0,
      "unit": null,
      "source": "Mohamed et al. (2017) Int. J. Dairy Sci. 12:227-235",
      "source_detail": "Bell pepper is a vegetable and is NOT in Codex STAN 247-2005 (which covers fruit juices only), so there is no Codex minimum Brix. Mohamed et al. (2017) measured single-strength bell pepper juice total soluble solids by refractometry at 20 C: green 9, yellow 10, red 11 Brix. 10.0 Brix adopted for ripe yellow/red commercial maturity. Physiologically consistent with USDA FDC red bell pepper ~4.2 g sugars/100 g (FDC #170108) plus organic acids and soluble minerals. Plausible range 9-11 Brix."
    },
    {
      "product": "bell_pepper",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.909,
      "unit": null,
      "source": "swiss_fir_v7_360",
      "source_detail": null
    },
    {
      "product": "bell_pepper",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.902,
      "unit": null,
      "source": "ciqual_2025_20087",
      "source_detail": null
    },
    {
      "product": "black_currant",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 65,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Berry juice concentrate 45-68 Brix (FAO Agricultural Services Bulletin 146, 2001, section 14.4); 65 Brix is the high-Brix commercial berry-concentrate target within that range. Corroborated by Sotoft et al. (2012), who report full-scale black-currant concentrate near 66 Brix from single-strength juice; conventional multi-effect evaporator routes target 65 Brix for shelf-stable berry concentrates."
    },
    {
      "product": "black_currant",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Codex STAN 247-2005 Annex (Minimum Brix Levels for Reconstituted Juice from Concentrate) lists Ribes nigrum at 11.0 Brix."
    },
    {
      "product": "blueberry",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 10.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "blueberry",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.856,
      "unit": null,
      "source": "nevo_2025_v9_152",
      "source_detail": null
    },
    {
      "product": "blueberry",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.857,
      "unit": null,
      "source": "swiss_fir_v7_389",
      "source_detail": null
    },
    {
      "product": "blueberry",
      "path": "moisture_fresh.sources[2]",
      "quantity": "sources[2]",
      "value": 0.842,
      "unit": null,
      "source": "ciqual_2025_13028",
      "source_detail": null
    },
    {
      "product": "blueberry",
      "path": "processing_methods.freeze.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.067,
      "unit": null,
      "source": "Swiss FIR v7 ID 14101",
      "source_detail": "Blueberry, freeze-dried: 6.7 g water per 100 g."
    },
    {
      "product": "camu_camu",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.923,
      "unit": null,
      "source": "salomao-oliveira_2017_camu_camu+silva_2006_camu_camu_state_diagram",
      "source_detail": "Mean of two primary sources. Salomao-Oliveira and Marinho 2017 (J Food Nutr Res 5(12):941-946; sciepub): fresh camu-camu pericarp 91.24% moisture content. Silva, Sobral & Kieckbusch 2006 (J Food Eng 77(2):426-432, DOI 10.1016/j.jfoodeng.2005.07.009) Table 1: natural camu-camu pulp moisture content 93.35 +/- 0.04% wet basis (triplicate, vacuum drier 95 deg C 100 mmHg 48 h). Mean (91.24 + 93.35) / 2 = 92.30%; range 91.24-93.35 brackets the two primary measurements."
    },
    {
      "product": "camu_camu",
      "path": "processing_methods.freeze.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.06,
      "unit": null,
      "source": "industry_standard_freeze_dried_fruit_powder+silva_2006_camu_camu_state_diagram",
      "source_detail": "Commercial spec for freeze-dried fruit powder shipped at the dryer exit (before any storage re-equilibration): 5-7 percent residual moisture wet basis. Midpoint 0.06 adopted. Silva, Sobral & Kieckbusch 2006 (J Food Eng 77(2):426-432, DOI 10.1016/j.jfoodeng.2005.07.009) freeze-dried natural camu-camu pulp (bench freeze-drier EZ-DRY FTS Systems, -50 deg C, 100 mTorr, 48 h) at its lowest measured equilibrium point (a_w 0.11, after equilibration over saturated salt solutions at 25 deg C for ~2 weeks) reports w_w = 0.128 g water / g dry solid = 11.4 percent wet basis (Fig 2 trace a). The paper's measurements characterise the equilibrium-after-storage hygroscopic behaviour, not the as-freeze-dried-at-exit moisture relevant to the drying generator's gate-to-gate boundary; the as-exit moisture is lower because the post-vacuum-drier product has not yet equilibrated to ambient water activity. The 0.06 wet-basis as-exit value is therefore drawn from commercial spec, with Silva 2006 cited as the primary characterisation of the freeze-dried camu-camu sorption / state-diagram behaviour overall."
    },
    {
      "product": "camu_camu",
      "path": "processing_methods.spray.co_products.powder.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.0903,
      "unit": null,
      "source": "derived_from_moisture_balance",
      "source_detail": "Mass-balance derivation (carrier-free simplification): (1 - moisture_fresh) / (1 - moisture_dried_spray) = (1 - 0.9124) / (1 - 0.03) = 0.0876 / 0.97 = 0.0903 kg powder per kg fresh camu-camu pulp. The cascade walker computes the same ratio at query time from moisture_fresh and the per-method moisture_dried; this entry mirrors the calculation for substrate-profile-loader compatibility."
    },
    {
      "product": "camu_camu",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.03,
      "unit": null,
      "source": "silva_2013_camu-camu-spray",
      "source_detail": "Silva, Cornejo, Gomes, Pontes, Matta & Freitas 2013 (Fruits 68(3):175-183, DOI 10.1051/fruits/2013065) report 2.8 percent residual moisture for spray-dried camu-camu juice produced with gum arabic carrier and 3.2 percent with maltodextrin carrier; mini-spray-dryer at 180 C inlet and 85 C outlet air temperature, 700 L/h drying air. Selected 0.03 as the across-carrier midpoint; min/max bracket the two carrier conditions. Both sit within the commercial-spec range for shelf-stable spray-dried fruit powders (typically below 5 percent moisture). Note: the reported moisture reflects the final spray-dried product including the carrier; modelling the carrier load separately is outside the current camu-camu drying scope."
    },
    {
      "product": "chamomile",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.8334,
      "unit": null,
      "source": "lee_2022",
      "source_detail": "Lee, Ferdinand & Siow 2022 (Frontiers in Pharmacology 13:1003209, DOI 10.3389/fphar.2022.1003209) report 83.34 +/- 0.7 percent water content for fresh chamomile flower inflorescence before drying treatment. Corroborated by Ronga, Zaccardelli, Palazzo & Pecchia 2019 (Agronomy 9(8):484, DOI 10.3390/agronomy9080484) reporting fresh inflorescence dry matter 14-18 percent, which brackets Lee 2022's 16.66 percent dry matter."
    },
    {
      "product": "chamomile",
      "path": "processing_methods.freeze.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.075,
      "unit": null,
      "source": "lee_2022",
      "source_detail": "Lee, Ferdinand & Siow 2022 (Frontiers in Pharmacology 13:1003209, DOI 10.3389/fphar.2022.1003209) report 7.50 +/- 0.7 percent residual moisture for chamomile freeze-dried at -50 C."
    },
    {
      "product": "chamomile",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.182,
      "unit": null,
      "source": "derived_from_lee_2022",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.8334) / (1 - 0.085) = 0.1666 / 0.915 = 0.182 kg dried chamomile flower per kg fresh inflorescence input. Both moisture values primary-sourced from Lee, Ferdinand & Siow 2022."
    },
    {
      "product": "chamomile",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.085,
      "unit": null,
      "source": "lee_2022",
      "source_detail": "Lee, Ferdinand & Siow 2022 (Frontiers in Pharmacology 13:1003209, DOI 10.3389/fphar.2022.1003209) report 8.50 +/- 0.7 percent residual moisture for chamomile dried in a convection oven at 45 C. Below the 10 percent threshold the paper cites as 'microbiologically safe powder moisture content' and within the European Pharmacopoeia 2.8.6 loss-on-drying ceiling for the dried herbal substance."
    },
    {
      "product": "chamomile",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.11,
      "unit": null,
      "source": "lee_2022",
      "source_detail": "Lee, Ferdinand & Siow 2022 (Frontiers in Pharmacology 13:1003209, DOI 10.3389/fphar.2022.1003209) report 11.00 +/- 1.40 percent residual moisture for chamomile spray-dried at 140 C inlet temperature, 10.5 mL/min feed rate; same source reports 12.00 +/- 0.00 percent at 12 mL/min. Selected the lower-feed-rate value as the canonical commercial reference; spray-dried product sits at the upper end of the Lee 2022 range vs hot-air or freeze drying."
    },
    {
      "product": "cherry_sour",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 14.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "cherry_sweet",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 20.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "chive",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.913,
      "unit": null,
      "source": "swiss_fir_v7_374",
      "source_detail": null
    },
    {
      "product": "chive",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.902,
      "unit": null,
      "source": "ciqual_2025_11003",
      "source_detail": null
    },
    {
      "product": "chive",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.0979,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.9075) / (1 - 0.055) = 0.0979 kg dried chive per kg fresh input."
    },
    {
      "product": "chive",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.055,
      "unit": null,
      "source": "usda_fdc_2346391",
      "source_detail": "USDA FoodData Central FDC ID 2346391 freeze-dried chives 5.5 percent moisture; commercial industrial hot-air dried product targets similar 5-7 percent residual moisture."
    },
    {
      "product": "coconut",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.51,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "PMC4519453 pared mature coconut kernel 51 percent moisture; desiccated flakes 2.5 percent (Codex CXS 177-1991)"
    },
    {
      "product": "coconut",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.5026,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.51) / (1 - 0.025) = 0.5026 kg dried coconut per kg fresh input."
    },
    {
      "product": "coconut",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.025,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "PMC4519453 pared mature coconut kernel 51 percent moisture; desiccated flakes 2.5 percent (Codex CXS 177-1991)"
    },
    {
      "product": "coconut_copra",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.06,
      "unit": null,
      "source": "fao_2003_coconut_postharvest",
      "source_detail": "FAO Coconut Post-harvest Operations (2003) Table 4 (Philippine grades): Resecada Bodega = 6.0% (best grade); Table 5 (India contract terms): basis 6%, rejection at buyer option over 10%. Page 32: hot-air dryers produce good quality copra with 6 percent moisture content."
    },
    {
      "product": "coconut_copra",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.65,
      "unit": "kg/kg as-is",
      "source": "fao_2003_coconut_postharvest",
      "source_detail": "FAO Coconut Post-harvest Operations (2003) reports copra oil content typically 60-65% of dry weight; the 65% upper bound is consistent with USDA FoodData Central reference values for high-quality copra."
    },
    {
      "product": "coconut_kernel",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.025,
      "unit": null,
      "source": "Codex CXS 177-1991",
      "source_detail": "Desiccated coconut max 3% moisture"
    },
    {
      "product": "coconut_kernel",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.51,
      "unit": null,
      "source": "PMC4519453",
      "source_detail": "Fresh pared coconut kernel 51.0 \u00b1 0.3% moisture"
    },
    {
      "product": "coconut_milk",
      "path": "concentrate_moisture",
      "quantity": "concentrate_moisture",
      "value": 0.5,
      "unit": null,
      "source": "industrial_spray_dryer_feed_standard",
      "source_detail": "Industrial spray-dryer feed for coconut milk powder targets 45-55% moisture (45-55% total solids) so the atomiser can handle the high-fat-content viscosity. 50% moisture adopted as the canonical multi-effect-evaporator target consistent with Beccali 2009 evaporator unit-process operation. The 27% solids fresh coconut milk is concentrated ~1.84x by mass on the evaporator before the spray dryer takes it to 2.5% moisture."
    },
    {
      "product": "coconut_milk",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.017,
      "unit": null,
      "source": "bakar_1988_coconut_milk_powder",
      "source_detail": "Bakar, Hassan & Ahmad 1988 (J Sci Food Agric 43(1):95-100, DOI 10.1002/jsfa.2740430112) Fig 3 t=0: initial moisture content of the as-spray-dried coconut milk powder (with skim-milk and dextrin additives per Hassan 1985 process) was 1.7 percent. This is the gate-to-gate dryer-exit moisture relevant to the drying generator's boundary. Bakar reports separately that 5 percent corresponds to the monolayer-of-water moisture (water activity ~0.27) above which lipid oxidation increases significantly; 3.6 percent is the critical-moisture threshold for storage acceptability (Hassan unpublished data cited in Bakar). The as-exit 1.7 percent value is below both thresholds by design, giving the powder its 4-month aluminium-laminate shelf life."
    },
    {
      "product": "coconut_milk",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.729,
      "unit": null,
      "source": "ciqual_2025+swissfir_v7",
      "source_detail": "CIQUAL 18041 (Lait de coco) 72.9%; SwissFIR 13458 (Coconut milk) 72.9%. NEVO 2290 (Coconut milk / Kokosmelk) 78.2% noted but excluded from the central value as a lower-fat variant."
    },
    {
      "product": "coconut_milk",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.5,
      "unit": null,
      "source": "derived_from_concentrate_moisture",
      "source_detail": "Equal to concentrate_moisture (0.50). The multi-effect evaporator concentrates fresh coconut milk to this moisture before the spray dryer receives it; the cascade walker uses feed_moisture as the spray stage's moisture_in (overriding moisture_fresh) so the spray-stage water-balance is computed against the concentrate, not against fresh coconut milk."
    },
    {
      "product": "coconut_milk",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.017,
      "unit": null,
      "source": "bakar_1988_coconut_milk_powder",
      "source_detail": "Bakar 1988 Fig 3 t=0: initial moisture of as-spray-dried coconut milk powder 1.7 percent (process described in Hassan 1985 reference 4; spray-drying of coconut milk extract + skim milk + dextrin mixture)."
    },
    {
      "product": "cottonseed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.25,
      "unit": "kg crude oil/kg cottonseed",
      "source": "ifeu_2022",
      "source_detail": "Environmental Footprints of Cotton and Cotton Fibres, Section 3.4: Rehm & Espig mass balance gives 1 t cottonseed -> 0.25 t cottonseed oil, 0.35 t hulls, 0.35 t meal, and 0.05 t linters."
    },
    {
      "product": "cranberry",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 7.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "durum_wheat",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.13,
      "unit": null,
      "source": "IAOM",
      "source_detail": null
    },
    {
      "product": "durum_wheat",
      "path": "preparation.preparation:whole_line.input_ratio",
      "quantity": "input_ratio",
      "value": 1.072,
      "unit": null,
      "source": "Paolotti 2023",
      "source_detail": "1578 t semolina / 1472.3 t pasta = 1.072 kg semolina per kg dried pasta (same value as semolina_per_kg_pasta). The preparation:whole_line stage pulls this much semolina from the upstream grain_milling stage. off_cut_to_biowaste is FALSE: the semolina\u2192pasta mass delta is dough-water dynamics (semolina takes on ~30% mixing water, then dries down to ~12.5% moisture), not a solid trim stream to biowaste."
    },
    {
      "product": "durum_wheat",
      "path": "processing_methods.roller_milling_semolina.co_products.durum_bran.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.13,
      "unit": null,
      "source": "wang_2023_durum_milling+sarkar_2022_durum_milling+ficco_2020_durum_debranning",
      "source_detail": "Wang et al. 2023: durum bran yield <13% for high-quality milling genotypes; bran yield negatively correlated with total milling yield. Sarkar & Fu 2022: pearling removes ~8% bran in one step before roller milling. Ficco et al. 2020 quoting Shetlar et al.: durum kernel bran-layer total 14.5% (3.9% outer pericarp + 0.9% inner pericarp + 0.7% testa + 9.0% aleurone). Hareland 1998 (Cereal Chem 75:836): bran yield 24% -> 15% -> 11% at 1.5:1 -> 2.5:1 -> 3.5:1 break-roll speed; modern mills (2.5:1 to 3.5:1) produce 11-15% bran. Cheli et al. 2010 (LWT 43:1050) confirms Codex 178-1991 spec: bran and germ essentially removed in semolina production. Adopted 0.13 as central commercial value. Cheli et al. 2010 (LWT 43:1050): PeriTec debranning (Satake) removes 10-12% bran for specialist processes (upper bound vs Sarkar's 8% standard pearling). Jaillais et al. 2012 distinguishes coarse bran (CB) from purified/sized fine bran (PFB, SFB) and 'thirds' -- the 0.13 commercial bran value here aggregates all peripheral-layer feed streams (per-stream yields 0.4-9.8%)."
    },
    {
      "product": "durum_wheat",
      "path": "processing_methods.roller_milling_semolina.co_products.durum_germ.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.02,
      "unit": null,
      "source": "ficco_2020_durum_debranning+sarfaraz_2017_wheat_co_products",
      "source_detail": "Durum kernel germ similar to common wheat (Sarfaraz 2017: wheat germ 2-3%). Ficco 2020 Shetlar dissection is for bran layers and does not separately quantify germ; the 14.5% bran-layer total excludes germ. Adopted 0.02 as midpoint of the wheat-equivalent 1.6-3% range applied to durum's similar kernel structure."
    },
    {
      "product": "durum_wheat",
      "path": "processing_methods.roller_milling_semolina.co_products.durum_shorts_and_middlings.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.13,
      "unit": null,
      "source": "wang_2023_durum_milling",
      "source_detail": "Wang et al. 2023: total milling yield (TMY) 75.2-76.6% mean across genotypes. With semolina yield 0.71 and TMY 0.76, durum mill produces ~5% durum flour alongside semolina; the remaining residual to close mass balance after semolina + flour + bran + germ accounts for the shorts/middlings/feed-stream. Hareland 1998 specifically reports 'shorts yield was not affected by speed differential' -- shorts is an intrinsic kernel-composition value, not a function of mill setup. Adopted 0.13 as the intrinsic shorts-middlings fraction. Cheli et al. 2010 (LWT 43:1050) reports shorts (middlings) + flour shorts as the primary contaminant-concentration fractions (148% DON / 188% Cd / 370% Pb relative to unprocessed wheat), confirming that tracking the shorts mass fraction separately is load-bearing for downstream food-safety LCA. Jaillais 2012 's 'thirds' fraction is part of this aggregate."
    },
    {
      "product": "durum_wheat",
      "path": "processing_methods.roller_milling_semolina.co_products.process_loss.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.01,
      "unit": null,
      "source": "wang_2023_durum_milling",
      "source_detail": "Residual to close mass balance to 1.0 after semolina 0.71 + bran 0.13 + germ 0.02 + shorts 0.13 = 0.99."
    },
    {
      "product": "durum_wheat",
      "path": "processing_methods.roller_milling_semolina.co_products.semolina.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.71,
      "unit": null,
      "source": "Codex STAN 307-2011",
      "source_detail": "Codex Stan 307-2011: durum semolina extraction 70-72% (regulatory baseline; existing). Cross-validated by Wang et al. 2023 (J Cereal Sci 113:103755): semolina yield 72.6% mean, range 73.6-76.6% across genotypes. Sarkar & Fu 2022 (Foods 11:1796) Section 4.4: fine semolina 72-74% modern mills, historical coarse semolina 66-68%. Hareland 1998 (Cereal Chem 75:836) durum pilot mill: semolina 55% at 1.5:1 break-roll speed -> 67% at 2.5:1 -> 72% at 3.5:1; modern commercial mills typically run 2.5:1 to 3.5:1. Jaillais et al. 2012 (J Cereal Sci 55:210) confirms semolina is the inner-endosperm fraction recovered across 18 mill streams. Jaillais et al. 2012 (J Cereal Sci 55:210): the total commercial semolina yield is the sum across 6 distinct streams (SE1-SE6) with individual stream yields ranging 0.6-23.3%; cleanest streams (SE3, SE1) have lowest ash content (<0.75%). Cheli et al. 2010 (LWT 43:1050) Codex 178-1991: semolina retains 57% of DON / 83% Cd / 69% Pb relative to unprocessed wheat -- contaminant reduction confirms semolina as the starchy-endosperm fraction."
    },
    {
      "product": "durum_wheat",
      "path": "processing_methods.roller_milling_wholemeal_semolina.co_products.wholemeal_semolina.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.85,
      "unit": null,
      "source": "Codex STAN 307-2011",
      "source_detail": "Wholemeal semolina 85% extraction"
    },
    {
      "product": "durum_wheat",
      "path": "semolina_per_kg_pasta",
      "quantity": "semolina_per_kg_pasta",
      "value": 1.072,
      "unit": null,
      "source": "Paolotti 2023",
      "source_detail": "1578t semolina / 1472.3t pasta = 1.072"
    },
    {
      "product": "faba_bean",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.12,
      "unit": null,
      "source": "guyomarch_2025",
      "source_detail": "Cleaned faba bean DM ~88%"
    },
    {
      "product": "faba_bean",
      "path": "processing_methods.hot_air.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.22,
      "unit": null,
      "source": "riaz_2004_mass_balance",
      "source_detail": "Cross-substrate constant lifted from soybean.processing_methods.hot_air.feed_moisture (Riaz 2004 Ch.22 AOCS Press mass balance: defatted flour 12.5 percent moisture + 0.112 kg/kg flour steam conditioning gives ~21.2 percent water at the die inlet). In-barrel water injection is process-class invariant at first order for pulse-protein LM extrusion; no faba-specific primary measurement of die-exit moisture is available in our open corpus."
    },
    {
      "product": "faba_bean",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.089,
      "unit": null,
      "source": "riaz_2004_usda_fdc",
      "source_detail": "Industrial textured vegetable protein storable moisture: Riaz 2004 Ch.22 AOCS Press / USDA FDC 8.9 percent for finished TVP chunks. Shelf-stable LM extrudate target moisture is process-class invariant (~8-10 percent across protein-extrusion suppliers); lifted as a cross-substrate constant for textured faba protein."
    },
    {
      "product": "faba_bean",
      "path": "processing_methods.isoelectric_protein.co_products.wet_protein_isolate.mass_fraction",
      "quantity": "mass_fraction",
      "value": 1.526,
      "unit": "kg wet protein isolate / kg flour-as-fed at the alkaline-extraction step",
      "source": "guyomarch_2025",
      "source_detail": "Operation 10A (neutralisation + pasteurisation) output: 29.6 kg heated globulin slurry (DM 11.6 percent; total protein 90 percent DM) from 19.4 kg flour input at operation 8A (alkaline extraction). 29.6 / 19.4 = 1.526 kg wet isolate per kg flour-as-fed. The denominator is flour as fed to alkaline extraction; upstream cleaning / dehulling / milling are NOT in the separation generator's scope and will be captured by the milling generator when it lands."
    },
    {
      "product": "faba_bean",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.884,
      "unit": null,
      "source": "guyomarch_2025",
      "source_detail": "Equal to the wet protein isolate water fraction: 1 - 0.116 = 0.884. Guyomarc'h 2025 isoelectric_protein operation 10A output is the upstream-stage water content the spray dryer receives. The cascade walker uses feed_moisture as the spray-stage moisture_in (overriding moisture_fresh on the substrate root) so the spray-stage water balance is computed against the separation output rather than the raw faba_bean."
    },
    {
      "product": "faba_bean",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.05,
      "unit": null,
      "source": "industry_standard_spray_dried_protein_isolate",
      "source_detail": "Industrial commercial spec for spray-dried protein-isolate powder: 4-6 percent residual moisture for shelf-stable storage. Consistent with Schuck 2015 Table 2 xp (final powder solids fraction) = 0.96 across dairy and plant-protein powders on the same two-stage spray dryer with internal fluid bed."
    },
    {
      "product": "faba_bean",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.3,
      "unit": "kg/kg as-is",
      "source": "guyomarch_2025",
      "source_detail": "Across 5 measured varieties (C9862-C9965), TP ~32-37% DM, mean ~0.30 as-is"
    },
    {
      "product": "french_bean",
      "path": "preparation.preparation:whole_line.input_ratio",
      "quantity": "input_ratio",
      "value": 1.3,
      "unit": null,
      "source": "legacy_vegetable_preparation_module_2026",
      "source_detail": "1.30 kg raw green bean per kg peeled/trimmed fresh-cut product (23% snip/trim loss). Ratio carried by the retired vegetable_preparation.py French-bean composite. Frozen line (Ilari 2019) shares the same fresh-vegetable trim ratio; the extra freezing mass loss is inside the whole_line SEC, not a solid stream."
    },
    {
      "product": "garlic",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.63,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "USDA FDC raw garlic (~63 percent moisture); powder 6 percent (ASTA 2015)"
    },
    {
      "product": "garlic",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.3955,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.63) / (1 - 0.0645) = 0.3955 kg dried garlic per kg fresh input."
    },
    {
      "product": "garlic",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.0645,
      "unit": "kg water / kg dried",
      "source": "ciqual_2025_11023",
      "source_detail": "Ail s\u00e9ch\u00e9, poudre (Dried garlic powder)"
    },
    {
      "product": "generic_fruit",
      "path": "concentrate_moisture",
      "quantity": "concentrate_moisture",
      "value": 0.5,
      "unit": null,
      "source": "industrial_spray_dryer_feed_standard",
      "source_detail": "Industrial spray-dryer feed for fruit powder targets 40-55 percent moisture (45-60 percent total solids); 50 percent moisture adopted as the canonical multi-effect-evaporator target consistent with Beccali 2009 evaporator unit-process operation. Used by the multistage drying cascade rows (spray_dried_powder_from_concentrate chain) for the legacy 'Fruit processing, multistage drying' family."
    },
    {
      "product": "generic_fruit",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_dried_fruit_powder",
      "source_detail": "Industrial dried fruit powder (drum or spray) targets 3-5 percent residual moisture; 0.04 adopted as the commercial midpoint matching the broader spray-dried powder convention (tomato_powder 4 percent, strawberry_powder 4 percent, oat_drink powder 4 percent, soy_sauce powder 4 percent per Wang and Zhou 2012)."
    },
    {
      "product": "generic_fruit",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.902,
      "unit": null,
      "source": "derived_from_legacy_8.7489_kg_water_per_kg_product_ratio",
      "source_detail": "Per kg dried product (96% solids, 4% water): legacy mass balance specifies 8.7489 kg evaporated water, so fresh input contains 0.96 kg solids + 8.79 kg water = 9.749 kg total at 0.9016 moisture. This is consistent with De Marco 2015 industrial apple-powder line and Havlik & Dlouhy 2020 indirect-dryer survey for high-moisture fruit pulps."
    },
    {
      "product": "generic_fruit",
      "path": "processing_methods.drum.co_products.powder.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.1025,
      "unit": null,
      "source": "derived_from_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - 0.902) / (1 - 0.04) = 0.1021 kg powder per kg fresh fruit input. Matches the legacy 1/8.7489 = 0.1143 within 10 percent; the small difference reflects rounding in the legacy fresh-moisture assumption."
    },
    {
      "product": "generic_fruit",
      "path": "processing_methods.drum.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_dried_fruit_powder",
      "source_detail": "Drum-dried fruit powder commercial spec 4 percent w/w residual moisture."
    },
    {
      "product": "generic_fruit",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.5,
      "unit": null,
      "source": "derived_from_concentrate_moisture",
      "source_detail": "Equal to concentrate_moisture (0.50). For the multistage drying family (spray_dried_powder_from_concentrate chain), the multi-effect evaporator concentrates the substrate to this moisture before the spray dryer receives it. The cascade walker uses feed_moisture as the spray stage's moisture_in (overriding moisture_fresh) so the spray-stage water-balance is computed against the concentrate."
    },
    {
      "product": "generic_fruit",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_dried_fruit_powder",
      "source_detail": "Spray-dried fruit powder commercial spec 4 percent w/w residual moisture."
    },
    {
      "product": "grape",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 68,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Grape concentrate common commercial levels 55/65/68 Brix (FAO Agricultural Services Bulletin 146, 2001, section 12.8); 68 Brix is the high-Brix commercial route."
    },
    {
      "product": "grape",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 16.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "grape",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.81,
      "unit": null,
      "source": "usda_fdc_09131",
      "source_detail": "USDA FoodData Central FDC ID 09131 raw red European-type grape 80.54 percent moisture; adopted 0.81 as the commercial average across red / green table-grape cultivars used for raisins."
    },
    {
      "product": "grape",
      "path": "processing_methods.sundrying.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.15,
      "unit": null,
      "source": "usda_fdc_09298_plus_codex",
      "source_detail": "USDA FDC ID 09298 raisin 15.43 percent moisture; Codex CXS 67-1981 raisin standard caps moisture at 18 percent for ordinary raisins, 19 percent for sultanas, 15 percent for Lexia / Muscat. Adopted 0.15 as the commercial midpoint matching FDC."
    },
    {
      "product": "grapefruit",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 10.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17)"
    },
    {
      "product": "guava",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 8.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "guava",
      "path": "processing_methods.pulper_finisher.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.6,
      "unit": "kg/kg fruit",
      "source": "estimated",
      "source_detail": "No quantified yield in FAO Bulletin 146 Ch 15.4 (only screen mesh 0.3-0.5 mm, nectar ratios). Estimated from tropical-fruit paddle pulper general knowledge. Seeds ~3-5% + skin ~10-15%. NOT human-verified."
    },
    {
      "product": "hazelnut",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.541,
      "unit": "kg/kg as-is",
      "source": "jakab_2025",
      "source_detail": "Table 1: 54.07 +/- 0.04%."
    },
    {
      "product": "hazelnut",
      "path": "processing_methods.cold_press_nut._oil_yield_sources[0]",
      "quantity": "_oil_yield_sources[0]",
      "value": 0.369,
      "unit": null,
      "source": "jakab_2025",
      "source_detail": null
    },
    {
      "product": "hemp_seed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.436,
      "unit": "kg/kg as-is",
      "source": "jakab_2025",
      "source_detail": "Table 1: 43.64 +/- 0.47%. Cross-check: Mahony 2011 reports 30.5% oil content (likely different variety/measurement)."
    },
    {
      "product": "kiwi",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.2,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "leek",
      "path": "preparation.preparation:whole_line.input_ratio",
      "quantity": "input_ratio",
      "value": 1.3,
      "unit": null,
      "source": "legacy_leek_preparation_module_2026",
      "source_detail": "1.30 kg raw leek per kg peeled/trimmed fresh-cut product (23% trim loss). Same ratio the retired leek_preparation.py Pattern A composite carried."
    },
    {
      "product": "lemon",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 50,
      "unit": null,
      "source": "SOURCE_WANTED",
      "source_detail": "Commercial lemon juice concentrate target (50 degBrix is the customary trade grade). CITATION OPEN: the handle previously read beccali_2009, which does NOT support it - that figure's lemon line runs 2,292,025 -> 573,000 kg, a 4.0 ratio which on an 8.0 degBrix feed implies ~32 degBrix. Searched 2026-08-05 for a citable target: Codex STAN 247-2005 fixes only the lemon FEED at 8.0 degBrix, and FAO Bulletin 146 gives a concentrate range for orange but not for lemon. The value is left unchanged pending a real source rather than relabelled to a vague one; see verification_status. Note the legacy lemon_juice_market domain module uses 65 degBrix for its concentration step, so this value and that module currently disagree; the two are reconciled when that shim is retired into the cascade."
    },
    {
      "product": "lemon",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 8.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17)"
    },
    {
      "product": "lentil",
      "path": "processing_methods.dehulling_splitting.co_products.lentil_broken.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.04,
      "unit": null,
      "source": "wang_2008_lentil_dehulling_quality",
      "source_detail": "Wang 2008 Table 2: mean broken seeds (BRK) = 3.7% across 4 varieties x 2 protein levels. Rounded to 0.04 for the commercial mean. BRK includes split lentils with compromised cotyledon integrity that are commercially downgraded to a feed/lower-grade-food fraction."
    },
    {
      "product": "lentil",
      "path": "processing_methods.dehulling_splitting.co_products.lentil_hulls.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.15,
      "unit": null,
      "source": "wang_2005_lentil_dehulling",
      "source_detail": "Wang 2005: dehulling efficiency 80.8-87.7% across genotypes; hull fraction (1 - efficiency) is 12-19%. Adopted 0.15 as midpoint commercial yield."
    },
    {
      "product": "lentil",
      "path": "processing_methods.dehulling_splitting.co_products.lentil_powder.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.03,
      "unit": null,
      "source": "wang_2008_lentil_dehulling_quality",
      "source_detail": "Wang 2008 (JSFA 88:885) Table 2: mean powder produced during dehulling = 2.8% across 4 varieties x 2 protein levels. Rounded to 0.03 for the commercial mean. Powder is the fine dust generated by abrasive dehulling action; it is positively correlated with broken-seed fraction (r=0.75, P<0.01)."
    },
    {
      "product": "lentil",
      "path": "processing_methods.dehulling_splitting.co_products.lentil_residual.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.07,
      "unit": null,
      "source": "wang_2008_lentil_dehulling_quality",
      "source_detail": "Residual to close mass balance to 1.0 after split-dehulled 0.71 + hulls 0.15 + powder 0.03 + broken 0.04 = 0.93. Wang 2008 reports PUDWS (percent undehulled whole + split) of ~14% per pass; in commercial multi-pass operations the PUDWS fraction is recirculated through additional dehulling passes until exhausted, leaving only the steady-state losses captured here: small fines accumulation, PUDWS leakage to other streams, and processing dust."
    },
    {
      "product": "lentil",
      "path": "processing_methods.dehulling_splitting.co_products.split_dehulled_lentil.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.71,
      "unit": null,
      "source": "wang_2005_lentil_dehulling+erskine_1991_lentil_splitting+wang_2008_lentil_dehulling_quality",
      "source_detail": "Wang 2005: split dehulled seed preparation yield 62.1-80.2% across genotypes (Cereal Chem 82:671). Erskine 1991: dehulled-split yield 70-80% mean across genotypes and locations (J Sci Food Agric 57:85). Adopted 0.71 as the central commercial value (midpoint of Wang's range; aligns with Erskine's lower-end mean). Wang 2008 (JSFA 88:885) Table 2: mean dehulling efficiency (DE = PDW + PDS) = 72.1% across 4 varieties x 2 protein levels, comprising 48.9% dehulled whole seed (PDW = 'footballs') + 23.2% dehulled split seed (PDS = 'dhal'). Adopted 0.71 as the combined DE midpoint that commercial dhal mills target; the football/split breakdown depends on downstream sieving + sale specification."
    },
    {
      "product": "lentil",
      "path": "processing_methods.roller_milling_flour.co_products.lentil_flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.96,
      "unit": null,
      "source": "estimated_pulse_flour_milling",
      "source_detail": "Forward-investment proxy: dehulled split lentil milled to flour. Pulse roller-milling on dehulled feedstock yields ~95-97 percent flour with ~3-5 percent process loss (fines, dust), comparable to wheat roller milling without the bran/germ stream because the dehulling step has already separated those upstream. The value is a placeholder pending a verified pulse-flour-specific milling source."
    },
    {
      "product": "lentil",
      "path": "processing_methods.roller_milling_flour.co_products.process_loss.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.04,
      "unit": null,
      "source": "estimated_pulse_flour_milling",
      "source_detail": "Residual from the 0.96 lentil_flour yield. Fines + dust collected as waste rather than salable product."
    },
    {
      "product": "lime",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 8.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17)"
    },
    {
      "product": "linseed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.4,
      "unit": "kg/kg as-is",
      "source": "estimated",
      "source_detail": null
    },
    {
      "product": "linseed",
      "path": "processing_methods.roller_milling_meal.co_products.linseed_flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.97,
      "unit": null,
      "source": "estimated_oilcake_meal_milling",
      "source_detail": "Defatted linseed meal milled to flour fineness. Hammer / roller milling on dry oilcake yields ~97 percent flour with ~3 percent process loss (fines / dust). Placeholder until a defatted-meal-specific milling source lands."
    },
    {
      "product": "linseed",
      "path": "processing_methods.roller_milling_meal.co_products.process_loss.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.03,
      "unit": null,
      "source": "estimated_oilcake_meal_milling",
      "source_detail": "Residual from the 0.97 linseed_flour yield. Fines / dust collected as waste."
    },
    {
      "product": "maize",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.14,
      "unit": null,
      "source": "USDA FDC",
      "source_detail": "Grain maize ~14% moisture"
    },
    {
      "product": "maize",
      "path": "processing_methods.dry_milling.co_products.maize_germ.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.1,
      "unit": null,
      "source": "lee_2007_maize_dry_wet_milling+deepak_2021_maize_wet_milling+macke_2016_maize_dry_milling",
      "source_detail": "Lee et al. 2007 Table 8 Laboratory 1 mean: germ 10.7% (range 8.6-12.9%) of grain mass. Deepak & Jayadeep 2021: maize germ makes up 9-11% of the kernel mass (process-invariant). Macke et al. 2016: confirms endosperm >80% of kernel. Adopted 0.10 as central commercial-mill value."
    },
    {
      "product": "maize",
      "path": "processing_methods.dry_milling.co_products.maize_pericarp.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.07,
      "unit": null,
      "source": "lee_2007_maize_dry_wet_milling+vanara_2018_maize_dry_milling_fumonisin",
      "source_detail": "Lee et al. 2007 Table 8 Laboratory 1 mean: pericarp 7.7% (range 6.5-8.6%) of grain mass -- includes a small entrained-endosperm fraction in the commercial mill stream. Vanara et al. 2018 (Toxins 10:357) gives the pure-kernel pericarp at 5%. Adopted 0.07 as central commercial-mill value (midpoint of 5% pure pericarp and 7.7% mill-stream pericarp)."
    },
    {
      "product": "maize",
      "path": "processing_methods.dry_milling.co_products.maize_residual.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.07,
      "unit": null,
      "source": "lee_2007_maize_dry_wet_milling",
      "source_detail": "Residual to close mass balance to 1.0 after polenta 0.75 + germ 0.10 + pericarp 0.07 + tip_cap 0.01 = 0.93. Includes broken kernel material below polenta grade (fine endosperm dust) and conditioning-water evaporation loss. Lee 2007 Lab 1 accounts for residual loss ~0.5% plus fines that fall below polenta grade (covered partly here, partly absorbed into the polenta catch-all per Ranum 2014 definition)."
    },
    {
      "product": "maize",
      "path": "processing_methods.dry_milling.co_products.maize_tip_cap.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.01,
      "unit": null,
      "source": "vanara_2018_maize_dry_milling_fumonisin",
      "source_detail": "Vanara et al. 2018 (Toxins 10:357): tip cap 1% of maize kernel (the small attachment fragment at the base of the kernel that connects it to the cob). Removed during the dry-milling tempering / cleaning step."
    },
    {
      "product": "maize",
      "path": "processing_methods.dry_milling.co_products.polenta.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.75,
      "unit": null,
      "source": "Ranum et al. 2014",
      "source_detail": "Maize meal extraction 72-78% Cross-validated by Lee et al. 2007 (J Agric Food Chem 55:10751) Table 8 Laboratory 1: total grits 61.0% + fines 20.1% = 81.1% endosperm-derived dry-milled products (upper bound of Ranum's 72-78% range). Macke et al. 2016 (Crop Sci 56:2516) confirms maize endosperm >80% of kernel."
    },
    {
      "product": "maize",
      "path": "starch_content",
      "quantity": "starch_content",
      "value": 0.72,
      "unit": null,
      "source": "USDA FDC",
      "source_detail": "Maize starch content ~72% DM basis"
    },
    {
      "product": "mandarin",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.8,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17)"
    },
    {
      "product": "mango",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 65,
      "unit": null,
      "source": "fruitsmart_clarified_mango_juice_concentrate_spec_MN-65-CL",
      "source_detail": "Clarified mango juice concentrate target 65.0 +/- 1.0 Brix (AOAC 932.13), per FruitSmart product spec MN-65-CL (dilution 1 part concentrate : 5.27 parts water for ~13 Brix single-strength juice; ingredient: mangoes; clarity 90% min). The EDB/ecoinvent product 'mango juice concentrate' (UUIDs 9028b2c9, 21d4a72c; glossary concentrateJrl807) is this 65 Brix clarified juice concentrate, NOT the 28 Brix mango PUREE concentrate previously assumed from FAO Bulletin 146. CODEX STAN 247-2005 sets single-strength mango juice min_brix; concentration ratio derives fresh-fruit feed and evaporator duty in product_cascade.py."
    },
    {
      "product": "mango",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 13.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "mango",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.165,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "USDA FDC 169910 raw mango; dried 0.165 (Codex commercial)"
    },
    {
      "product": "mango",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.811,
      "unit": null,
      "source": "swiss_fir_v7_396",
      "source_detail": null
    },
    {
      "product": "mango",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.773,
      "unit": null,
      "source": "ciqual_2025_13426",
      "source_detail": null
    },
    {
      "product": "mango",
      "path": "moisture_fresh.sources[2]",
      "quantity": "sources[2]",
      "value": 0.829,
      "unit": null,
      "source": "nevo_2025_v9_692",
      "source_detail": null
    },
    {
      "product": "mango",
      "path": "processing_methods.hot_air.moisture_dried.sources[0]",
      "quantity": "sources[0]",
      "value": 0.2,
      "unit": null,
      "source": "swiss_fir_v7_13884",
      "source_detail": null
    },
    {
      "product": "mango",
      "path": "processing_methods.pulper_finisher.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.525,
      "unit": "kg/kg fruit",
      "source": "questionmark_2015",
      "source_detail": "Source 1: Questionmark 2015 Table 7 (Figueroa 2010) = 0.525 edible fraction (by-product 35-60%). Source 2: Roibas 2018 Section 3.2 = 0.50 puree yield (2 kg fruit -> 1 kg puree, banana/mango/passion fruit). Source 3: Roibas 2018 (Okoth 2013) = 0.73 pulp yield for IQF pre-processing."
    },
    {
      "product": "mint",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.861,
      "unit": null,
      "source": "swiss_fir_v7_463",
      "source_detail": null
    },
    {
      "product": "mint",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.821,
      "unit": null,
      "source": "ciqual_2025_11027",
      "source_detail": null
    },
    {
      "product": "mint",
      "path": "moisture_fresh.sources[2]",
      "quantity": "sources[2]",
      "value": 0.864,
      "unit": null,
      "source": "nevo_2025_v9_3450",
      "source_detail": null
    },
    {
      "product": "mint",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.1706,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.8487) / (1 - 0.113) = 0.1706 kg dried mint per kg fresh input."
    },
    {
      "product": "mint",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.113,
      "unit": "kg water / kg dried",
      "source": "ciqual_2025_11029",
      "source_detail": "Menthe, s\u00e9ch\u00e9e (Dried mint)"
    },
    {
      "product": "oat",
      "path": "co_products.oat_fibre.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.154,
      "unit": null,
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7: dry oat fibre removed 0.02 kg per 0.13 kg oat = 15.4% of oat input. Cross-check: Deswal 2014 Fig 4 reports 0.86 kg filter cake per kg oat = 86% (lab product, much higher solids, different basis)."
    },
    {
      "product": "oat",
      "path": "plant_drink_mass_balance.okara_mass_fraction_per_kg_raw",
      "quantity": "okara_mass_fraction_per_kg_raw",
      "value": 0.154,
      "unit": null,
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7: dry oat fibre removed 0.02 kg per 0.13 kg oat = 15.4% of oat input. Cross-check: Deswal 2014 Fig 4 reports 0.86 kg filter cake per kg oat = 86% (lab product, much higher solids, different basis)."
    },
    {
      "product": "oat",
      "path": "plant_drink_mass_balance.target_solids_fraction",
      "quantity": "target_solids_fraction",
      "value": 0.098,
      "unit": null,
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 9 oat base 14% DM; aseptic drink ~9.8% DM (derived from net oat solids 0.11 kg + additives 0.013 per kg drink). Cross-check: Pointke 2022 oat mean 10.8%."
    },
    {
      "product": "oat",
      "path": "plant_drink_mass_balance.water_input_kg_per_kg_drink",
      "quantity": "water_input_kg_per_kg_drink",
      "value": 0.91,
      "unit": null,
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25): water 0.91 kg/kg drink. Total process water added during milling. Water in final product = water_input - moisture_in_okara (derived from mass balance closure). Separate from cooling water (4.39 kg/kg in pool entry) and cleaning water (3.03 kg/kg, deferred to CIP)."
    },
    {
      "product": "oat",
      "path": "plant_drink_recipe.calcium_carbonate_kg_per_kg_drink",
      "quantity": "calcium_carbonate_kg_per_kg_drink",
      "value": 0.002,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25). Cross-check: Bussa 2020 Tab. 4.2 Oatly uses 2g CaCO3 + 1g Ca3(PO4)2 per L."
    },
    {
      "product": "oat",
      "path": "plant_drink_recipe.dicalcium_phosphate_kg_per_kg_drink",
      "quantity": "dicalcium_phosphate_kg_per_kg_drink",
      "value": 0.0005,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25)."
    },
    {
      "product": "oat",
      "path": "plant_drink_recipe.rapeseed_oil_kg_per_kg_drink",
      "quantity": "rapeseed_oil_kg_per_kg_drink",
      "value": 0.008,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25): 0.008 kg/kg drink. Cross-check: Pointke 2022 oat fat range 0.38-1.5 g/100g (mostly from added oil)."
    },
    {
      "product": "oat",
      "path": "plant_drink_recipe.salt_kg_per_kg_drink",
      "quantity": "salt_kg_per_kg_drink",
      "value": 0.001,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25)."
    },
    {
      "product": "oat",
      "path": "plant_drink_recipe.sugar_kg_per_kg_drink",
      "quantity": "sugar_kg_per_kg_drink",
      "value": 0.0,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7: Oatly plain (unsweetened). Sweetened variants would add sugar; Bussa 2020 reports oat drinks generally unsweetened."
    },
    {
      "product": "oat",
      "path": "plant_drink_recipe.tricalcium_phosphate_kg_per_kg_drink",
      "quantity": "tricalcium_phosphate_kg_per_kg_drink",
      "value": 0.001,
      "unit": "kg/kg drink",
      "source": "floren_2013",
      "source_detail": "Floren 2013 Table 7 (p. 25)."
    },
    {
      "product": "oat_drink",
      "path": "concentrate_moisture",
      "quantity": "concentrate_moisture",
      "value": 0.5,
      "unit": null,
      "source": "industrial_spray_dryer_feed_standard",
      "source_detail": "Industrial spray-dryer feed for plant-drink powders targets 40-55% total solids (45-60% moisture) so the spray atomiser can handle the viscosity. 50% moisture (50% solids) adopted as the canonical multi-effect-evaporator target. With this concentrate moisture, the cascade two-stage drying selects the 6-effect evaporator (six_effect_evaporation, 0.489 MJ/kg water) for the concentration stage and the De Marco 2015 multistage spray dryer (spray_tower_food_demarco, 5.35 MJ/kg water) for the spray stage. From moisture_fresh 0.902 -> concentrate_moisture 0.50 the evaporator removes 7.876 kg water/kg powder (3.851 MJ NG) and the spray dryer removes the remaining 0.920 kg water (4.922 MJ NG), totalling 8.77 MJ NG/kg powder (pinned in test_oat_milk_powder_uses_two_stage_drying). A single-stage spray of the full 8.796 kg water at 5.35 MJ/kg would burn ~47 MJ; the two-stage chain is ~5.4x more efficient because the bulk of the water is removed on the multi-effect evaporator."
    },
    {
      "product": "oat_drink",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_spray_dried_powder",
      "source_detail": "Industrial spray-dried plant-drink powder targets 3-5 percent residual moisture for shelf stability and free-flow handling. Adopted 0.04 as the commercial midpoint, matching the broader spray-dried powder convention used by coconut_milk_powder (2.5% w/w per Bakar 1988), soy_sauce_powder (4% w/w per Wang and Zhou 2012), and vinegar_powder (4% w/w per Cacatian 2024)."
    },
    {
      "product": "oat_drink",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.902,
      "unit": null,
      "source": "derived_from_oat.plant_drink_mass_balance.target_solids_fraction",
      "source_detail": "Oat-drink moisture derived as (1 - target_solids_fraction) from the oat substrate's plant_drink_mass_balance block. target_solids_fraction = 0.098 (Floren 2013 Table 9 oat base 14% DM yielding ~9.8% DM aseptic drink; cross-checked Pointke 2022 oat mean 10.8%)."
    },
    {
      "product": "oat_drink",
      "path": "processing_methods.spray.co_products.powder.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.102,
      "unit": null,
      "source": "derived_from_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_spray) = (1 - 0.902) / (1 - 0.04) = 0.102 kg oat-drink powder per kg oat drink fed to spray dryer."
    },
    {
      "product": "oat_drink",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.5,
      "unit": null,
      "source": "derived_from_concentrate_moisture",
      "source_detail": "Equal to concentrate_moisture (0.50). In the two-stage spray_dried_powder_from_concentrate chain the multi-effect evaporator concentrates the substrate to this moisture before the spray dryer receives it. The cascade walker uses feed_moisture as the spray stage's moisture_in (overriding moisture_fresh) so the spray-stage water-balance is computed against the concentrate, not against the original oat drink."
    },
    {
      "product": "oat_drink",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_spray_dried_powder",
      "source_detail": "Industrial spray-dried plant-drink powder targets 3-5 percent residual moisture; 0.04 adopted as commercial midpoint."
    },
    {
      "product": "onion",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.899,
      "unit": null,
      "source": "swiss_fir_v7_368",
      "source_detail": null
    },
    {
      "product": "onion",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.896,
      "unit": null,
      "source": "ciqual_2025_20034",
      "source_detail": null
    },
    {
      "product": "onion",
      "path": "preparation.preparation:whole_line.input_ratio",
      "quantity": "input_ratio",
      "value": 1.6666667,
      "unit": null,
      "source": "legacy_vegetable_preparation_module_2026",
      "source_detail": "1 / 0.60 peeling yield = 1.6666667 kg raw onion per kg peeled product (~40% peel/core/end residue). Ratio carried by the retired vegetable_preparation.py onion composite."
    },
    {
      "product": "onion",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.1068,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.8975) / (1 - 0.04) = 0.1068 kg dried onion per kg fresh input."
    },
    {
      "product": "onion",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "USDA FDC raw onion (~88 percent moisture); dehydrated <= 5 percent (Codex CXS 137-1981)"
    },
    {
      "product": "orange",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 65,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "FCOJ (frozen concentrated orange juice). FAO Bulletin 146 (2001), ch. 8 on TASTE evaporators: 'take juice that is 10 to 12 percent solids or degBrix and remove the water to concentrate the juice to 62 to 65 degBrix'. 65 is the top of that cited range, adopted as the shelf-stable target; the same passage corroborates our 11.2 degBrix feed. Re-sourced 2026-08-05: the handle previously read beccali_2009, which does NOT support it - that paper's plant ran 1,654,920 -> 330,984 kg (Fig. 1, p. 713), a 5.0 ratio implying ~56 Brix, and states only 10 Brix, for the natural juice. The VALUE was always right; only the citation was wrong. Our 65 Brix gives the 5.8036 concentration ratio."
    },
    {
      "product": "orange",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.2,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Range 11.2-11.8 (natural variation by country). Floor 10.0 if authenticity met. Acid-corrected (footnote 17)."
    },
    {
      "product": "palm",
      "path": "processing_methods.ffb_mechanical_press.co_products.crude_oil.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.22,
      "unit": "kg crude palm oil / kg FFB",
      "source": "nilsson_2010",
      "source_detail": "Table 3, palm column + derived row: 4545 kg FFB -> 1000 kg crude palm oil at 22.0 percent mass yield. Reference year 2005-2008 (Unilever supplier data); geography Malaysia / Indonesia source basis."
    },
    {
      "product": "palm",
      "path": "processing_methods.ffb_mechanical_press.co_products.palm_kernels.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.05,
      "unit": "kg palm kernels / kg FFB",
      "source": "nilsson_2010",
      "source_detail": "Table 3, palm column: 227 kg palm kernels per 1000 kg crude palm oil = 5.0 percent of FFB. Kernels contain ~50 percent palm kernel oil; the downstream kernel-oil extraction operation is out of scope for the palm-FFB-mill boundary and is handled by a separate cascade entry when palm kernel oil is queried."
    },
    {
      "product": "palm",
      "path": "processing_methods.ffb_mechanical_press.co_products.shells_and_empty_bunches.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.73,
      "unit": "kg shell + EFB / kg FFB",
      "source": "nilsson_2010",
      "source_detail": "Table 3, palm column: 3318 kg shell / empty-fruit-bunch residue per 1000 kg crude palm oil = 73.0 percent of FFB. Bulk biomass residue, used on-mill for steam / electricity generation or as boiler fuel; treated as a waste co-stream at the oil-mill boundary."
    },
    {
      "product": "palm",
      "path": "processing_methods.physical_refining.co_products.acid_oil.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.0603,
      "unit": "kg acid oil / kg crude palm oil input",
      "source": "nilsson_2010",
      "source_detail": "Table 3: 60.3 kg/t acid oil co-product (lower bound of Nilsson's 61-67 kg/t range; range reflects FFA content variability across batches). Palm has higher acid-oil co-product than temperate oils (rapeseed / sunflower at 37-38 kg/t) due to higher FFA content in tropical oils."
    },
    {
      "product": "palm",
      "path": "processing_methods.physical_refining.co_products.refined_oil.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.9397,
      "unit": "kg refined palm oil / kg crude palm oil input",
      "source": "nilsson_2010",
      "source_detail": "Table 3 refining row: 1064.17 kg crude palm oil in / 1000 kg refined palm oil out = 93.97 percent refining yield. Cited directly in the oil_refining pool entry's description text."
    },
    {
      "product": "passion_fruit",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 60,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Passion fruit concentrate target above 60 Brix (FAO Agricultural Services Bulletin 146, 2001, section 15.3, centrifugal or falling-film evaporator)."
    },
    {
      "product": "passion_fruit",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 12.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17)"
    },
    {
      "product": "pea",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.12,
      "unit": null,
      "source": "guyomarch_2025",
      "source_detail": "Cleaned pea DM ~88%"
    },
    {
      "product": "pea",
      "path": "processing_methods.hot_air.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.22,
      "unit": null,
      "source": "riaz_2004_mass_balance",
      "source_detail": "Cross-substrate constant lifted from soybean.processing_methods.hot_air.feed_moisture (Riaz 2004 Ch.22 AOCS Press mass balance: defatted flour 12.5 percent moisture + 0.112 kg/kg flour steam conditioning gives ~21.2 percent water at the die inlet). In-barrel water injection is process-class invariant at first order for pulse-protein LM extrusion; no pea-specific primary measurement of die-exit moisture is available in our open corpus."
    },
    {
      "product": "pea",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.089,
      "unit": null,
      "source": "riaz_2004_usda_fdc",
      "source_detail": "Industrial textured vegetable protein storable moisture: Riaz 2004 Ch.22 AOCS Press / USDA FDC 8.9 percent for finished TVP chunks. Shelf-stable LM extrudate target moisture is process-class invariant (~8-10 percent across protein-extrusion suppliers); lifted as a cross-substrate constant for textured pea protein."
    },
    {
      "product": "pea",
      "path": "processing_methods.isoelectric_protein.co_products.wet_protein_isolate.mass_fraction",
      "quantity": "mass_fraction",
      "value": 1.73,
      "unit": "kg wet protein isolate / kg flour-as-fed at the alkaline-extraction step",
      "source": "lie_piang_2021",
      "source_detail": "Derived from Lie-Piang 2021 Table 1: yellow pea conventional fractionation (isoelectric precipitation) gives 22.3 percent dry ingredient yield on a flour-DM basis (Pelgrom 2015 / Passe 2008 references). Conversion to wet-output basis at the separation generator's pre-drying boundary: flour-as-fed DM ~0.9 (pea flour ~10 percent MC) \u00d7 0.223 dry yield = 0.2007 kg dry isolate DM per kg flour-as-fed; wet-isolate DM 11.6 percent (Guyomarc'h convention) gives 0.2007 / 0.116 = 1.73 kg wet isolate per kg flour-as-fed."
    },
    {
      "product": "pea",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.884,
      "unit": null,
      "source": "guyomarch_2025",
      "source_detail": "Equal to the wet protein isolate water fraction: 1 - 0.116 = 0.884. Guyomarc'h 2025 isoelectric_protein operation 10A output is the upstream-stage water content the spray dryer receives. The cascade walker uses feed_moisture as the spray-stage moisture_in (overriding moisture_fresh on the substrate root) so the spray-stage water balance is computed against the separation output rather than the raw pea."
    },
    {
      "product": "pea",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.05,
      "unit": null,
      "source": "industry_standard_spray_dried_protein_isolate",
      "source_detail": "Industrial commercial spec for spray-dried protein-isolate powder: 4-6 percent residual moisture for shelf-stable storage. Consistent with Schuck 2015 Table 2 xp (final powder solids fraction) = 0.96 across dairy and plant-protein powders on the same two-stage spray dryer with internal fluid bed."
    },
    {
      "product": "pea",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.22,
      "unit": "kg/kg as-is",
      "source": "lie_piang_2021",
      "source_detail": "Lie-Piang Table 1: yellow pea flour 21.4% protein DM"
    },
    {
      "product": "pea_protein_concentrate",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.08,
      "unit": null,
      "source": "pelgrom_2013_pea_concentrate",
      "source_detail": "Pelgrom, Vissers, Boom, Schutyser (2013) Food Research International 53(1):232-239, DOI 10.1016/j.foodres.2013.05.004: dry-fractionated pea fines (protein concentrate) starting material at ~8% moisture after impact / jet milling; air-classified fines retain feed-flour moisture without a wet processing step. Industry-standard commercial PPC powders specify 6-9% moisture for shelf stability."
    },
    {
      "product": "pea_protein_concentrate",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.55,
      "unit": "kg/kg as-is",
      "source": "pelgrom_2013_pea_concentrate",
      "source_detail": "Pelgrom, Vissers, Boom, Schutyser (2013): air-classified pea fines yield protein contents 51-55% w/dw at maximum protein recovery 77%. 55% adopted as the upper-of-range canonical value for the dry-fractionated concentrate. Earlier draft attribution to Webb 2023 was a mis-cite: Webb's pea samples PP1-PP4 are protein isolates (>80% protein) rather than dry-fractionated concentrates, so they do not support the 55% figure."
    },
    {
      "product": "peach",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 32,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Stone-fruit concentrate target 32 Brix; FAO Agricultural Services Bulletin 146 (2001) quantifies apricot concentrate at 32 Brix (section 13.12) and this is applied to peach as the same stone-fruit class."
    },
    {
      "product": "peach",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 10.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "peach",
      "path": "processing_methods.pulper_finisher.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.503,
      "unit": "kg/kg fruit",
      "source": "fao_bulletin_146_2001",
      "source_detail": "FAO Bulletin 146 Ch 13.11: ~494 L puree per MT via pulper (3 mm screen, 1000 rpm paddle) + finisher (0.061-0.084 cm perforations). 494 L/1000 kg at puree density ~1.02 = 0.494-0.503 kg/kg. Second source contributing to n_sources=2 and range 0.49-0.515 was identified in the prior pulping session (Bognar 2002 or FAO yield factor); specific citation for the second value not recovered in this review."
    },
    {
      "product": "peach",
      "path": "processing_methods.pulper_finisher.co_products.puree.sources[0]",
      "quantity": "sources[0]",
      "value": 0.515,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": null
    },
    {
      "product": "peach",
      "path": "processing_methods.pulper_finisher.co_products.puree.sources[1]",
      "quantity": "sources[1]",
      "value": 0.49,
      "unit": null,
      "source": "questionmark_2015",
      "source_detail": null
    },
    {
      "product": "peach_pitted",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.075,
      "unit": "kg water / kg dried peach",
      "source": "usda_fdc_169932",
      "source_detail": "USDA FoodData Central SR Legacy FDC 169932, Peaches, dehydrated (low-moisture), sulfured, uncooked: water 7.5 g/100 g product. Range brackets the Iannone et al. 2020 process-description target of about 5 percent moisture and common low-moisture dried-fruit variability."
    },
    {
      "product": "peach_pitted",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.7776442307692308,
      "unit": null,
      "source": "iannone_2020",
      "source_detail": null
    },
    {
      "product": "peach_pitted",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.075,
      "unit": null,
      "source": "usda_fdc_169932",
      "source_detail": null
    },
    {
      "product": "peach_pitted",
      "path": "processing_methods.lpssd_fir.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.2404,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance (dry-solids conservation): (1 - moisture_fresh) / (1 - moisture_dried_lpssd_fir) = (1 - 0.7776442) / (1 - 0.075) = 0.2404 kg dried peach per kg pitted semi-finished feed. Cross-check: Iannone et al. 2020 Table 2 LPSSD-FIR reports 3.16 kg water removed per kg dried packaged peach, i.e. 4.16 kg wet feed / kg dried = 0.2404 kg dried / kg feed."
    },
    {
      "product": "peach_pitted",
      "path": "processing_methods.lpssd_fir.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.075,
      "unit": null,
      "source": "usda_fdc_169932",
      "source_detail": "Same low-moisture dried-peach endpoint as substrate-wide moisture_dried."
    },
    {
      "product": "peanut",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.47,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "pear",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 12.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "pineapple",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 72,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": "Pineapple concentrate target 72 Brix (FAO Agricultural Services Bulletin 146, 2001, section 15.1, with or without essence recovery)."
    },
    {
      "product": "pineapple",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 12.8,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": "Acid-corrected (footnote 17). Floor 10.0 if authenticity met."
    },
    {
      "product": "pineapple",
      "path": "preparation.preparation:whole_line.input_ratio",
      "quantity": "input_ratio",
      "value": 1.8181818,
      "unit": null,
      "source": "legacy_pineapple_preparation_module_2026",
      "source_detail": "1 / 0.55 peeling+coring yield = 1.8181818 kg whole raw pineapple per kg peeled/cored product (peel/core/crown/trim residue 0.8181818 kg). Ratio carried by the retired pineapple_preparation.py composite."
    },
    {
      "product": "plum",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 11.2,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "plum",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.3,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "USDA FDC 9279 raw plum 87 percent moisture; FDC 9291 prune 30.92 percent (industrial / commercial spec)"
    },
    {
      "product": "plum",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.837,
      "unit": null,
      "source": "swiss_fir_v7_474",
      "source_detail": null
    },
    {
      "product": "plum",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.872,
      "unit": null,
      "source": "ciqual_2025_13100",
      "source_detail": null
    },
    {
      "product": "plum",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.3,
      "unit": null,
      "source": "usda_fdc_plus_codex_2026",
      "source_detail": "USDA FDC 9291 prune 30.92 percent moisture (industrial commercial spec)"
    },
    {
      "product": "plum",
      "path": "processing_methods.sundrying.moisture_dried.sources[0]",
      "quantity": "sources[0]",
      "value": 0.349,
      "unit": null,
      "source": "swiss_fir_v7_475",
      "source_detail": null
    },
    {
      "product": "plum",
      "path": "processing_methods.sundrying.moisture_dried.sources[1]",
      "quantity": "sources[1]",
      "value": 0.349,
      "unit": null,
      "source": "ciqual_2025_13042",
      "source_detail": null
    },
    {
      "product": "pomegranate",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 12.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "potato",
      "path": "moisture_cooked_mash",
      "quantity": "moisture_cooked_mash",
      "value": 0.55,
      "unit": null,
      "source": "Thoma et al. 2020 (PMC7749376)",
      "source_detail": "Cooked mash ~55% moisture before drum drying"
    },
    {
      "product": "potato",
      "path": "moisture_flakes",
      "quantity": "moisture_flakes",
      "value": 0.075,
      "unit": null,
      "source": "Kakade et al. 2011 (PMC3551180)",
      "source_detail": "Potato flakes 7.5% moisture"
    },
    {
      "product": "potato",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.8,
      "unit": null,
      "source": "USDA FDC",
      "source_detail": "Fresh potato ~80% moisture"
    },
    {
      "product": "pumpkin_seed_hulled",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.349,
      "unit": "kg/kg as-is",
      "source": "nederal_2012",
      "source_detail": "Nederal 2012: husked seed oil content 34.9%. Guedes 2025 C. moschata range: 27-37%."
    },
    {
      "product": "pumpkin_seed_hullfree",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.446,
      "unit": "kg/kg as-is",
      "source": "nederal_2012",
      "source_detail": "Nederal 2012: naked (hull-free) seed oil content 44.6%. Fruhwirth 2008 range: 41-59%."
    },
    {
      "product": "raisin",
      "path": "moisture_dried.sources[0]",
      "quantity": "sources[0]",
      "value": 0.16,
      "unit": null,
      "source": "swiss_fir_v7_477",
      "source_detail": null
    },
    {
      "product": "raisin",
      "path": "moisture_dried.sources[1]",
      "quantity": "sources[1]",
      "value": 0.16,
      "unit": null,
      "source": "ciqual_2025_13046",
      "source_detail": null
    },
    {
      "product": "raisin",
      "path": "moisture_dried.sources[2]",
      "quantity": "sources[2]",
      "value": 0.168,
      "unit": null,
      "source": "nevo_2025_v9_33",
      "source_detail": null
    },
    {
      "product": "raisin",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.81,
      "unit": null,
      "source": "ciqual_2025+swissfir_v7",
      "source_detail": "Fresh grape (pre-drying input): CIQUAL 13044 (Raisin blanc, type Italia ou Dattier, cru) 80.9%; SwissFIR 478 (Grape, green, fresh) 81.1%."
    },
    {
      "product": "rapeseed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.42,
      "unit": "kg/kg as-is",
      "source": "carre_2021",
      "source_detail": "Table 1: seed oil content 48.4% DM. At ~13% moisture: 0.484 * 0.87 = 0.42 as-is."
    },
    {
      "product": "raspberry",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 8.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "raspberry",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.88,
      "unit": null,
      "source": "nevo_2025_v9_161",
      "source_detail": null
    },
    {
      "product": "raspberry",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.868,
      "unit": null,
      "source": "swiss_fir_v7_390",
      "source_detail": null
    },
    {
      "product": "raspberry",
      "path": "moisture_fresh.sources[2]",
      "quantity": "sources[2]",
      "value": 0.868,
      "unit": null,
      "source": "ciqual_2025_13015",
      "source_detail": null
    },
    {
      "product": "raspberry",
      "path": "processing_methods.freeze.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.067,
      "unit": null,
      "source": "Swiss FIR v7 ID 14101 (blueberry as proxy)",
      "source_detail": "No European composition database has a freeze-dried raspberry entry. Proxied from Swiss FIR v7 ID 14101 (Blueberry, freeze-dried): 6.7 g water per 100 g. Raspberry and blueberry are morphologically similar small whole berries with comparable freeze-drying behaviour."
    },
    {
      "product": "raspberry",
      "path": "processing_methods.pulping.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.943,
      "unit": "kg seedless puree/kg fresh raspberry",
      "source": "kieltyka_dadasiewicz_2026_citing_martysiak_zurowska_2010",
      "source_detail": "Kieltyka-Dadasiewicz et al. 2026 IJMS 27(1):41 cite Martysiak-Zurowska and Drapala 2010 for seeds constituting 5.7% of raspberry fruit mass and state seeds are removed during manufacture of creamy purees and clear juices. Seedless sieved puree yield = 1 - 0.057 = 0.943 kg/kg fresh raspberry; min/max widened for screen losses and berry maturity variation."
    },
    {
      "product": "raspberry",
      "path": "processing_methods.pulping.co_products.seeds_skins.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.057,
      "unit": "kg seeds and sieve rejects/kg fresh raspberry",
      "source": "kieltyka_dadasiewicz_2026_citing_martysiak_zurowska_2010",
      "source_detail": null
    },
    {
      "product": "rice",
      "path": "co_products.bran_and_hull.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.3,
      "unit": null,
      "source": "estimated",
      "source_detail": "Estimated rice bran + hull residue from wet milling. NOT human-verified."
    },
    {
      "product": "rice",
      "path": "milling_energy_kwh_per_t",
      "quantity": "milling_energy_kwh_per_t",
      "value": 50,
      "unit": null,
      "source": "Thanawong et al. 2014",
      "source_detail": "Rice milling 40-60 kWh/t"
    },
    {
      "product": "rice",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.12,
      "unit": null,
      "source": "USDA FDC",
      "source_detail": "Paddy rice ~12% moisture at milling"
    },
    {
      "product": "rice",
      "path": "plant_drink_mass_balance.drink_yield_kg_per_kg_raw",
      "quantity": "drink_yield_kg_per_kg_raw",
      "value": 7.1,
      "unit": null,
      "source": "bussa_2020",
      "source_detail": "Bussa 2020 Tab. 4.1: 14.1% raw material share = 7.1 kg drink/kg rice."
    },
    {
      "product": "rice",
      "path": "plant_drink_mass_balance.okara_mass_fraction_per_kg_raw",
      "quantity": "okara_mass_fraction_per_kg_raw",
      "value": 0.3,
      "unit": null,
      "source": "estimated",
      "source_detail": "Estimated rice bran + hull residue from wet milling. NOT human-verified."
    },
    {
      "product": "rice",
      "path": "plant_drink_mass_balance.target_solids_fraction",
      "quantity": "target_solids_fraction",
      "value": 0.141,
      "unit": null,
      "source": "bussa_2020",
      "source_detail": "Bussa 2020 Tab. 4.1: 14.1% raw material share (\u2248 target solids for rice drinks)."
    },
    {
      "product": "rice",
      "path": "plant_drink_mass_balance.water_input_kg_per_kg_drink",
      "quantity": "water_input_kg_per_kg_drink",
      "value": 0.86,
      "unit": null,
      "source": "estimated",
      "source_detail": "Estimated from Bussa rice 14.1% substrate fraction: water = 1 - substrate - additives ~= 0.86."
    },
    {
      "product": "rice",
      "path": "processing_methods.husking_polishing_brown.co_products.brown_rice.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.8,
      "unit": null,
      "source": "irri_rice_milling_2019",
      "source_detail": "IRRI fact sheet: brown rice (dehusked but not polished) 80% of paddy weight."
    },
    {
      "product": "rice",
      "path": "processing_methods.husking_polishing_brown.co_products.rice_husk.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.2,
      "unit": null,
      "source": "irri_rice_milling_2019",
      "source_detail": "IRRI fact sheet: husk 20% of paddy weight (dehusking only; no polishing)."
    },
    {
      "product": "rice",
      "path": "processing_methods.husking_polishing_white.co_products.milled_white_rice.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.7,
      "unit": null,
      "source": "irri_rice_milling_2019+mulani_2023_rice_bran",
      "source_detail": "IRRI fact sheet: milled white rice 68-72% of paddy. Mulani et al. 2023 (citing van et al. 2006): 70% endosperm yield. Adopted 0.70 (midpoint of IRRI range; matches Mulani/van 2006 exactly)."
    },
    {
      "product": "rice",
      "path": "processing_methods.husking_polishing_white.co_products.rice_bran.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.08,
      "unit": null,
      "source": "irri_rice_milling_2019+mulani_2023_rice_bran",
      "source_detail": "IRRI fact sheet: bran 8-12% depending on degree of milling. Mulani et al. 2023 citing van et al. 2006: 8%; citing Rao 1988: 5-10% range, India regulation restricts polishing to 5%. Adopted 0.08 (lower bound of IRRI range; van 2006 exact value; Rao 1988 midpoint)."
    },
    {
      "product": "rice",
      "path": "processing_methods.husking_polishing_white.co_products.rice_germ.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.02,
      "unit": null,
      "source": "mulani_2023_rice_bran",
      "source_detail": "Mulani et al. 2023 citing van et al. 2006: rice germ 2% of paddy weight. Separated at the breaker rolls in modern rice milling; typically blended with bran for feed use or extracted for rice germ oil."
    },
    {
      "product": "rice",
      "path": "processing_methods.husking_polishing_white.co_products.rice_husk.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.2,
      "unit": null,
      "source": "irri_rice_milling_2019+mulani_2023_rice_bran",
      "source_detail": "IRRI fact sheet: husk 20% of paddy. Mulani et al. 2023 (citing van et al. 2006): husk 20%. Two independent sources at exactly 20%."
    },
    {
      "product": "rice_bran",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.18,
      "unit": "kg/kg as-is",
      "source": "estimated",
      "source_detail": null
    },
    {
      "product": "rosemary",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.85,
      "unit": null,
      "source": "swiss_fir_v7_462",
      "source_detail": null
    },
    {
      "product": "rosemary",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.678,
      "unit": null,
      "source": "ciqual_2025_11068",
      "source_detail": null
    },
    {
      "product": "rosemary",
      "path": "processing_methods.hot_air.co_products.dried.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.2598,
      "unit": null,
      "source": "derived_from_substrate_moisture_balance",
      "source_detail": "Derived from moisture balance: (1 - moisture_fresh) / (1 - moisture_dried_hot_air) = (1 - 0.764) / (1 - 0.0915) = 0.2598 kg dried rosemary per kg fresh input."
    },
    {
      "product": "rosemary",
      "path": "processing_methods.hot_air.moisture_dried.sources[0]",
      "quantity": "sources[0]",
      "value": 0.0931,
      "unit": null,
      "source": "ciqual_2025_11036",
      "source_detail": null
    },
    {
      "product": "rosemary",
      "path": "processing_methods.hot_air.moisture_dried.sources[1]",
      "quantity": "sources[1]",
      "value": 0.09,
      "unit": null,
      "source": "nevo_2025_v9_1231",
      "source_detail": null
    },
    {
      "product": "rye_conventional",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.13,
      "unit": null,
      "source": "Bushuk 2001",
      "source_detail": "Rye grain moisture at milling ~13%"
    },
    {
      "product": "rye_conventional",
      "path": "processing_methods.roller_milling_flour.co_products.flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.85,
      "unit": null,
      "source": "Bushuk 2001",
      "source_detail": "Rye flour extraction 85% Cross-validated by Dziki 2022 (Processes 10:293) which reports white rye flour at 70% yield as a common European convention; the European range spans 70% (Sweden, Norway, Germany, Czech Republic) to ~100% (Finland, Denmark wholemeal-equivalent). Bushuk 2001 0.85 sits in this range."
    },
    {
      "product": "rye_conventional",
      "path": "processing_methods.roller_milling_flour.co_products.process_loss.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.005,
      "unit": null,
      "source": "halliwell_1904_flour_milling",
      "source_detail": "Residual to close mass balance to 1.0 after flour 0.85 + bran 0.13 + germ 0.015 = 0.995."
    },
    {
      "product": "rye_conventional",
      "path": "processing_methods.roller_milling_flour.co_products.rye_bran.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.13,
      "unit": null,
      "source": "dziki_2022_rye_flour+halliwell_1904_flour_milling",
      "source_detail": "Rye kernel composition closely parallels wheat (Halliwell 1904 wheat 14.4% bran). Dziki 2022 white rye flour at 70% extraction yields ~30% bran; at Bushuk's 85% extraction (existing source), bran fraction is correspondingly ~13%. Adopted 0.13 as central value at the existing 85% extraction baseline."
    },
    {
      "product": "rye_conventional",
      "path": "processing_methods.roller_milling_flour.co_products.rye_germ.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.015,
      "unit": null,
      "source": "halliwell_1904_flour_milling",
      "source_detail": "Rye kernel germ similar to common wheat (Halliwell 1904 pure-kernel germ 1.6%). Adopted 0.015 commercial mill stream."
    },
    {
      "product": "rye_conventional",
      "path": "processing_methods.roller_milling_grist.co_products.grist.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.97,
      "unit": null,
      "source": "Bushuk 2001",
      "source_detail": "Rye grist (Roggenschrot) extraction 97%"
    },
    {
      "product": "rye_conventional",
      "path": "processing_methods.roller_milling_grist.co_products.rye_residual.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.03,
      "unit": null,
      "source": "halliwell_1904_flour_milling",
      "source_detail": "Residual to close mass balance to 1.0 in the grist route (whole-grain crack with minimal bran/germ separation). Bushuk 2001 existing source gives grist 0.97; remaining 3% is loss + minor bran chipping."
    },
    {
      "product": "safflower_seed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.35,
      "unit": "kg/kg as-is",
      "source": "pelaracci_2022",
      "source_detail": null
    },
    {
      "product": "sesame_seed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.52,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soy_meal_defatted",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.12,
      "unit": null,
      "source": "industry_standard",
      "source_detail": null
    },
    {
      "product": "soy_meal_defatted",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.01,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soy_meal_defatted",
      "path": "processing_methods.lm_extrusion.co_products.wet_extrudate.mass_fraction",
      "quantity": "mass_fraction",
      "value": 1.111,
      "unit": "kg useful wet TVP product / kg defatted soymeal feed (as-is). Greater than 1.0 because process water is injected in-barrel; the extra mass is the absorbed water carried out in the wet TVP at ~20% moisture content (pre-drying).",
      "source": "saerens_2021_extrusion",
      "source_detail": "Derived from Saerens Table 1 + Table 3 TVP Soy: 576 kg defatted soymeal feed / 640 kg useful product per cycle (72 kg/h substrate over 8 h extrusion phase, 640 kg useful + 48.66 kg waste + 31.34 kg evaporation = 720 kg accounted from 576 kg substrate + 144 kg process water injection)."
    },
    {
      "product": "soy_meal_defatted",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.44,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soy_sauce",
      "path": "concentrate_moisture",
      "quantity": "concentrate_moisture",
      "value": 0.5,
      "unit": null,
      "source": "industrial_spray_dryer_feed_standard",
      "source_detail": "Industrial spray-dryer feed for soy-sauce powder targets 40-55% moisture (45-60% total solids including added maltodextrin carrier) so the atomiser can handle the high-salt viscosity. 50% moisture adopted as the canonical multi-effect-evaporator target consistent with Beccali 2009 evaporator unit-process operation. Fresh soy sauce at 26.7% solids is concentrated ~1.87x by mass on the evaporator before the spray dryer takes it to 4% moisture."
    },
    {
      "product": "soy_sauce",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "wang_2012_soy_sauce_powder",
      "source_detail": "Wang and Zhou 2012 (J Food Eng 109(3):399-405, DOI 10.1016/j.jfoodeng.2011.11.012) spray-dried liquid soy sauce in a Mobile Minor GEA pilot spray dryer (inlet 185 deg C, outlet 85 deg C, 2 bar compression air, 4 m3/h atomisation air) using maltodextrin DE 5 / 10 / 15 as carrier at 20 percent and 40 percent w/v feed concentration. Table 2 equilibrium moisture content at the lowest measured water activity 0.112 (driest stable storage condition) ranges from 4.11 percent wet basis (40 percent maltodextrin DE 15; lowest reported) to 5.64 percent (20 percent maltodextrin DE 15) for maltodextrin-fortified powders; without maltodextrin the same a_w 0.112 condition yields 9.98 percent wet basis -- maltodextrin is required for powder formation from the highly hygroscopic soy sauce concentrate. The 4 percent value adopted here matches the low end of Wang & Zhou's measured equilibrium range (40 percent maltodextrin DE 15 condition) and is consistent with the industrial commercial spec of 3-5 percent for shelf-stable soy sauce powder."
    },
    {
      "product": "soy_sauce",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.733,
      "unit": null,
      "source": "ciqual_2025+swissfir_v7",
      "source_detail": "CIQUAL 11104 (Sauce soja, preemballee) 75.4%; SwissFIR 13456 (Soy sauce) 71.2%. NEVO Ketjap entries (40-47%) are sweetened Indonesian-style variants and were excluded from the central value."
    },
    {
      "product": "soy_sauce",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.5,
      "unit": null,
      "source": "derived_from_concentrate_moisture",
      "source_detail": "Equal to concentrate_moisture (0.50). The multi-effect evaporator concentrates fresh soy sauce to this moisture before the spray dryer receives it; the cascade walker uses feed_moisture as the spray stage's moisture_in (overriding moisture_fresh)."
    },
    {
      "product": "soy_sauce",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "wang_2012_soy_sauce_powder",
      "source_detail": "Wang and Zhou 2012 spray-dried soy-sauce powder 4% w/w industrial midpoint."
    },
    {
      "product": "soybean",
      "path": "co_products.okara.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.5,
      "unit": null,
      "source": "estimated",
      "source_detail": "Industry estimate: ~0.5 kg okara per kg soybean processed. Birgersson 2009 implies ~0.08 kg unaccounted per L (okara excluded from study). Li 2012 (not in corpus) reports 1.1 kg okara per kg soy product."
    },
    {
      "product": "soybean",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.13,
      "unit": null,
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soybean",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.2,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soybean",
      "path": "plant_drink_mass_balance.okara_mass_fraction_per_kg_raw",
      "quantity": "okara_mass_fraction_per_kg_raw",
      "value": 0.5,
      "unit": null,
      "source": "estimated",
      "source_detail": "Industry estimate: ~0.5 kg okara per kg soybean processed. Birgersson 2009 implies ~0.08 kg unaccounted per L (okara excluded from study). Li 2012 (not in corpus) reports 1.1 kg okara per kg soy product."
    },
    {
      "product": "soybean",
      "path": "plant_drink_mass_balance.target_solids_fraction",
      "quantity": "target_solids_fraction",
      "value": 0.082,
      "unit": null,
      "source": "bussa_2020",
      "source_detail": "Bussa 2020 Tab. 4.1: 8.2% raw material share. Cross-check: Pointke 2022 soy mean 8.4%; Grant density assumption non-water 7%; Geburt 2022 12.5%."
    },
    {
      "product": "soybean",
      "path": "plant_drink_mass_balance.water_input_kg_per_kg_drink",
      "quantity": "water_input_kg_per_kg_drink",
      "value": 0.9,
      "unit": null,
      "source": "grant_2018",
      "source_detail": "Grant 2018 SI Table S3: 0.9 kg tap water per L soy milk."
    },
    {
      "product": "soybean",
      "path": "plant_drink_recipe.sugar_kg_per_kg_drink",
      "quantity": "sugar_kg_per_kg_drink",
      "value": 0.025,
      "unit": "kg/kg drink",
      "source": "grant_2018",
      "source_detail": "Grant 2018 SI Table S3 (Ercin 2012): sugar cane 0.025 kg/L. Range: 0 (unsweetened) to 0.04 (heavily sweetened). Bussa 2020 reports soy drinks vary by brand."
    },
    {
      "product": "soybean",
      "path": "processing_methods.hmme_extrusion.co_products.wet_extrudate.mass_fraction",
      "quantity": "mass_fraction",
      "value": 3.1,
      "unit": "kg useful wet HM extrudate / kg substrate feed-as-fed to the extruder",
      "source": "saerens_2021_extrusion",
      "source_detail": "Derived from Saerens 2021 HME Soy mass balance: 0.3085 kg substrate dry matter + 0.014 kg substrate moisture = 0.3225 kg substrate per kg useful HM extrudate; mass_fraction = 1 / 0.3225 = 3.10. The remainder of the wet extrudate mass is in-barrel process water (0.6226 kg) + cooling-die water transfer (0.0883 kg) at 70.16 percent moisture content. See data/parameters/protein_extrusion/process_exchanges.json soy.hmme_extrusion._mass_balance for the full derivation chain."
    },
    {
      "product": "soybean",
      "path": "processing_methods.hot_air.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.22,
      "unit": null,
      "source": "riaz_2004_mass_balance",
      "source_detail": "Wet-extrudate die-exit moisture derived from Riaz 2004 Ch.22 AOCS Press mass balance for textured soy protein: 1.0373 kg defatted soy flour at 12.5 percent moisture (USDA FDC) + 0.112 kg/kg flour steam conditioning gives ~21.2 percent water at the die inlet per kg finished TVP. Adopted 0.22 as the die-exit moisture; the small flash-off at atmospheric expansion is below this resolution. The cascade walker uses feed_moisture as the hot-air stage moisture_in (overriding moisture_fresh on the substrate root) so the post-extrusion water balance is computed against the extruder output rather than the raw substrate. Applicable as a cross-substrate constant for pea / faba_bean LM extrusion: in-barrel steam conditioning is process-class invariant at first order."
    },
    {
      "product": "soybean",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.089,
      "unit": null,
      "source": "riaz_2004_usda_fdc",
      "source_detail": "Industrial textured vegetable protein storable moisture: Riaz 2004 Ch.22 AOCS Press cites USDA FDC moisture of 8.9 percent for finished TVP chunks. Applicable as a cross-substrate constant for pea / faba_bean textured protein: shelf-stable LM extrudate target moisture is process-class invariant (~8-10 percent across protein-extrusion suppliers)."
    },
    {
      "product": "soybean",
      "path": "processing_methods.isoelectric_protein.co_products.wet_protein_isolate.mass_fraction",
      "quantity": "mass_fraction",
      "value": 2.87,
      "unit": "kg wet protein isolate / kg defatted soy meal-as-fed at the alkaline-extraction step",
      "source": "berardy_2015",
      "source_detail": "Berardy 2015 reports a mass balance of 3 kg defatted soymeal -> 1 kg dry soy protein isolate (SPI) at ~33 percent dry yield (Berk 1992 reference; literature range 24.3-38 percent across Joshi 2011 and Nazareth 2009). Conversion to the wet-output basis at the separation generator's pre-drying boundary uses the Guyomarc'h faba-bean convention of 11.6 percent DM for the post-neutralisation slurry: 0.333 kg dry SPI per kg meal-as-fed / 0.116 wet-DM-fraction = 2.87 kg wet protein isolate per kg meal-as-fed."
    },
    {
      "product": "soybean",
      "path": "processing_methods.lm_extrusion.co_products.wet_extrudate.mass_fraction",
      "quantity": "mass_fraction",
      "value": 1.111,
      "unit": "kg useful wet TVP product / kg substrate feed-as-fed to the extruder",
      "source": "saerens_2021_extrusion",
      "source_detail": "Same value as soy_meal_defatted.processing_methods.lm_extrusion.co_products.wet_extrudate (Saerens 2021 Table 1 + Table 3 TVP Soy: 640 kg useful product / 576 kg defatted soymeal feed = 1.1111). For the soy LM extrusion pool entry the canonical feed is defatted soymeal at ~5-10 percent moisture content; the cascade walker resolves this mass_fraction whenever the protein-extrusion stage queries soybean as the substrate identifier."
    },
    {
      "product": "soybean",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.884,
      "unit": null,
      "source": "guyomarch_2025",
      "source_detail": "Equal to the wet protein isolate water fraction: 1 - 0.116 = 0.884. In the textured-protein wet-route chain the separation stage produces wet isolate at 11.6 percent dry matter (Guyomarc'h 2025 isoelectric_protein operation 10A output, applicable as a cross-substrate constant); the spray dryer receives this slurry directly. The cascade walker uses feed_moisture as the spray-stage moisture_in (overriding moisture_fresh on the substrate root) so the spray-stage water balance is computed against the upstream separation output rather than the raw soybean."
    },
    {
      "product": "soybean",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.05,
      "unit": null,
      "source": "industry_standard_spray_dried_protein_isolate",
      "source_detail": "Industrial commercial spec for spray-dried protein-isolate powder: 4-6 percent residual moisture for shelf-stable storage. Consistent with Schuck 2015 Table 2 xp (final powder solids fraction) = 0.96 for skim milk, whey, WPC35, and soy protein concentrate processed on the same two-stage spray dryer with internal fluid bed."
    },
    {
      "product": "soybean",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.36,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soybean_organic",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.13,
      "unit": null,
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soybean_organic",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.2,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "soybean_organic",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.36,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "spelt",
      "path": "processing_methods.hulling_roller_milling_white.co_products.spelt_bran.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.1,
      "unit": null,
      "source": "halliwell_1904_flour_milling+ruibal-mendieta_2005_spelt_milling_fractions",
      "source_detail": "Ruibal-Mendieta et al. 2005 (JAFC 53:2751) compares spelt and soft winter wheat milling fractions and finds 'milling fractionation produced similar proportions of flour and brans in spelt and wheat'. Justifies applying Halliwell 1904's wheat-kernel bran fraction (14.4%) to the dehulled-spelt kernel mass: 0.72 dehulled fraction x 0.144 bran = 0.104, rounded to 0.10."
    },
    {
      "product": "spelt",
      "path": "processing_methods.hulling_roller_milling_white.co_products.spelt_germ.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.01,
      "unit": null,
      "source": "halliwell_1904_flour_milling+ruibal-mendieta_2005_spelt_milling_fractions",
      "source_detail": "Halliwell 1904 wheat-kernel germ 1.6%, applied to the dehulled-spelt kernel (0.72 fraction): 0.72 x 0.016 = 0.012, rounded to 0.01. Ruibal-Mendieta 2005 measured tocopherol (germ-marker biomolecule) in spelt vs wheat and found spelt actually LOWER -- so wheat-equivalent germ fraction is an upper bound for spelt."
    },
    {
      "product": "spelt",
      "path": "processing_methods.hulling_roller_milling_white.co_products.spelt_hulls.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.28,
      "unit": null,
      "source": "warechowska_2023_spelt_milling",
      "source_detail": "Glumes and outer husk removed at the dehulling step before roller milling. ~28% of paddy spelt weight per the typical 0.72 dehulling yield."
    },
    {
      "product": "spelt",
      "path": "processing_methods.hulling_roller_milling_white.co_products.spelt_white_flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.61,
      "unit": null,
      "source": "warechowska_2023_spelt_milling",
      "source_detail": "Stepniewska et al. 2023 (Sci Rep 13:3174): refined spelt flour ~0.85 extraction from dehulled spelt groat. Combined with the prior dehulling step (~0.72 yield from paddy spelt to groat) the overall paddy-to-white-flour yield is 0.72 * 0.85 = 0.61."
    },
    {
      "product": "spelt",
      "path": "processing_methods.hulling_roller_milling_wholemeal.co_products.spelt_hulls.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.28,
      "unit": null,
      "source": "warechowska_2023_spelt_milling",
      "source_detail": "Hulls removed at the dehulling stage; same as the white-flour route."
    },
    {
      "product": "spelt",
      "path": "processing_methods.hulling_roller_milling_wholemeal.co_products.spelt_wholemeal_flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.72,
      "unit": null,
      "source": "warechowska_2023_spelt_milling",
      "source_detail": "Wholemeal route: hulling yields 0.72 of paddy spelt as dehulled groat; the entire groat is then ground (no bran/germ separation). Overall paddy-to-wholemeal yield 0.72."
    },
    {
      "product": "strawberry",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 7.5,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "strawberry",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard",
      "source_detail": "Powder standard 4% residual moisture"
    },
    {
      "product": "strawberry",
      "path": "moisture_fresh.sources[0]",
      "quantity": "sources[0]",
      "value": 0.912,
      "unit": null,
      "source": "nevo_2025_v9_148",
      "source_detail": null
    },
    {
      "product": "strawberry",
      "path": "moisture_fresh.sources[1]",
      "quantity": "sources[1]",
      "value": 0.903,
      "unit": null,
      "source": "swiss_fir_v7_385",
      "source_detail": null
    },
    {
      "product": "strawberry",
      "path": "moisture_fresh.sources[2]",
      "quantity": "sources[2]",
      "value": 0.903,
      "unit": null,
      "source": "ciqual_2025_13014",
      "source_detail": null
    },
    {
      "product": "strawberry",
      "path": "processing_methods.cold_press.co_products.juice.sources[0]",
      "quantity": "sources[0]",
      "value": 0.75,
      "unit": null,
      "source": "fao_bulletin_146_2001",
      "source_detail": null
    },
    {
      "product": "strawberry",
      "path": "processing_methods.cold_press.co_products.juice.sources[1]",
      "quantity": "sources[1]",
      "value": 0.49,
      "unit": null,
      "source": "questionmark_2015",
      "source_detail": null
    },
    {
      "product": "strawberry",
      "path": "processing_methods.freeze.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.074,
      "unit": null,
      "source": "prosapio_2017",
      "source_detail": "Section 2.5: final moisture content of freeze-dried strawberry 0.074 kg/kg (water activity 0.195, below the 0.6 microbial-stability limit from Stevenson et al. 2015)."
    },
    {
      "product": "strawberry",
      "path": "processing_methods.paddle_pulper_finisher_berry.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.75,
      "unit": "kg/kg fruit",
      "source": "fao_bulletin_146_2001",
      "source_detail": "Source 1: FAO Bulletin 146 Ch 14.2 = 70-80% puree basis with enzyme cold press (50-100 ppm enzyme, 10-20C, 2-3 hr). Source 2: Roibas 2018 Section 3.2 (Okoth 2013) = 90% for fig/strawberry/kiwi IQF pre-processing (upper bound, different process)."
    },
    {
      "product": "strawberry",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_spray_dried_powder",
      "source_detail": "Industrial spray-dried fruit / vegetable powder targets 3-5 percent residual moisture for shelf stability and free-flow handling. Adopted 0.04 as the commercial midpoint."
    },
    {
      "product": "sunflower_seed",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.44,
      "unit": "kg/kg as-is",
      "source": "carre_2021",
      "source_detail": "Table 1: seed oil 48.0% DM. At ~8% moisture: 0.48 * 0.92 = 0.44 as-is."
    },
    {
      "product": "textured_soy_protein",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.064,
      "unit": null,
      "source": "swiss_fcdb_v7_2022",
      "source_detail": "Swiss Food Composition Database v7.0 (BLV, Federal Food Safety and Veterinary Office) record 14147 'Extruded partially defatted soya (pieces, minced), dry': water 6.4 g/100 g. Upper bound 0.10 from Saerens et al. 2021 process description ('dryer for <10% moisture'), already cited by domains/textured_soy_protein.py."
    },
    {
      "product": "textured_soy_protein",
      "path": "protein_content",
      "quantity": "protein_content",
      "value": 0.499,
      "unit": "kg/kg as-is",
      "source": "swiss_fcdb_v7_2022",
      "source_detail": "Swiss FCDB v7.0 record 14147: protein 49.9 g/100 g as-is = 53.3% on dry matter. This is the DEFATTED-FLOUR texturisation route: Saerens et al. 2021 Table 1 gives 67% protein DM for the soy-protein-CONCENTRATE route, so 53.3% identifies the feed as partially defatted soy flour/meal, not concentrate."
    },
    {
      "product": "textured_soy_protein",
      "path": "rehydration_mass_balance.dry_input_kg_per_kg_output",
      "quantity": "dry_input_kg_per_kg_output",
      "value": 0.397436,
      "unit": "kg dry textured soy protein / kg rehydrated output",
      "source": "ciqual_2020",
      "source_detail": null
    },
    {
      "product": "textured_soy_protein",
      "path": "rehydration_mass_balance.moisture_rehydrated",
      "quantity": "moisture_rehydrated",
      "value": 0.628,
      "unit": "kg water / kg rehydrated product",
      "source": "ciqual_2020",
      "source_detail": "ANSES Ciqual 2020 French food composition table, food code 20591 'Proteine de soja texturee, rehydratee': water 62.8 g/100 g, protein 18.6 g/100 g. Licence Ouverte / Open Licence (Etalab)."
    },
    {
      "product": "tomato",
      "path": "concentrate_brix",
      "quantity": "concentrate_brix",
      "value": 28,
      "unit": null,
      "source": "codex_stan_57_1981",
      "source_detail": "Double concentrate tomato paste (24-28 Brix). Triple concentrate 36-40 Brix."
    },
    {
      "product": "tomato",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 5.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "tomato",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.14,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "USDA FDC 170457 raw red tomato 94.52 percent moisture; FDC 169273 sun-dried tomato 14.6 percent (hot-air industrial spec similar)"
    },
    {
      "product": "tomato",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.9452,
      "unit": null,
      "source": "legacy_module_constants_2026",
      "source_detail": "USDA FDC 170457 raw red tomato 94.52 percent moisture; FDC 169273 sun-dried tomato 14.6 percent (hot-air industrial spec similar)"
    },
    {
      "product": "tomato",
      "path": "processing_methods.hot_air.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.14,
      "unit": null,
      "source": "usda_fdc_plus_codex_2026",
      "source_detail": "USDA FDC 169273 dried tomato 14.6 percent moisture (industrial hot-air commercial spec)"
    },
    {
      "product": "tomato",
      "path": "processing_methods.hot_break_screw_tomato.co_products.puree.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.94,
      "unit": "kg/kg fruit",
      "source": "singh_1980",
      "source_detail": "Singh 1980 hot-break screw, Sacramento plant. 94% of fresh tomato passes through as puree."
    },
    {
      "product": "tomato",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.6931,
      "unit": null,
      "source": "derived_from_concentrate_brix_mass_balance",
      "source_detail": "Tomato powder is industrially produced from tomato concentrate/paste (hot/cold break -> multi-effect evaporation to ~28 Brix paste -> spray drying), NOT by single-stage spray drying of 5-Brix fresh tomato juice, which is thermally prohibitive (Goula & Adamopoulos spray-dry concentrated tomato pulp, not fresh juice). feed_moisture is the total-moisture fraction of the 28 Brix concentrate fed to the spray dryer, derived by total-solids mass balance from the substrate's own fields: fresh total solids = 1 - moisture_fresh = 1 - 0.9452 = 0.0548; concentration ratio = concentrate_brix / min_brix = 28 / 5.0 = 5.6; concentrate total solids = 0.0548 * 5.6 = 0.30688; feed_moisture = 1 - 0.30688 = 0.6931. Setting feed_moisture this way makes the two-stage spray_dried_powder_from_concentrate chain close to the SAME 16.52 kg total water removed per kg powder as the prior single-stage model (no water created/destroyed); the bulk of that water is now removed on the energy-efficient multi-effect evaporator rather than the spray tower. min=0.66 (32 Brix paste), max=0.72 (24 Brix Codex paste minimum)."
    },
    {
      "product": "tomato",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "industry_standard_spray_dried_powder",
      "source_detail": "Industrial spray-dried fruit / vegetable powder targets 3-5 percent residual moisture for shelf stability and free-flow handling. Adopted 0.04 as the commercial midpoint."
    },
    {
      "product": "tomato",
      "path": "processing_methods.sundrying.moisture_dried.sources[0]",
      "quantity": "sources[0]",
      "value": 0.146,
      "unit": null,
      "source": "swiss_fir_v7_13463",
      "source_detail": null
    },
    {
      "product": "vinegar",
      "path": "concentrate_moisture",
      "quantity": "concentrate_moisture",
      "value": 0.5,
      "unit": null,
      "source": "industrial_spray_dryer_feed_standard",
      "source_detail": "Industrial spray-dryer feed for vinegar powder targets 40-55% moisture (45-60% total solids including the maltodextrin carrier required by the highly acidic, low-solids fresh vinegar feed). 50% moisture adopted as the canonical multi-effect-evaporator target consistent with Beccali 2009 evaporator unit-process operation. Without the carrier the acetic acid cannot form a stable powder; the cascade two-stage model accounts for the bulk water removal (evaporator) and the final spray-drying step."
    },
    {
      "product": "vinegar",
      "path": "moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "cacatian_2024_bignay_vinegar_powder",
      "source_detail": "Cacatian and Barcena 2024 (Ind J Sci Tech 17(48):5076-5082, DOI 10.17485/ijst/v17i48.3604) spray-dried bignay vinegar with maltodextrin DE10 at 170 C inlet temperature: most-acceptable formulation 7.26% moisture. Commercial spray-dried malt vinegar powder benchmarks at ~4% moisture; industrial process aims for <3.5% for microbial stability."
    },
    {
      "product": "vinegar",
      "path": "moisture_fresh",
      "quantity": "moisture_fresh",
      "value": 0.929,
      "unit": null,
      "source": "ciqual_2025+swissfir_v7",
      "source_detail": "CIQUAL 11018 (Vinaigre) 92.9%; SwissFIR 1693 (Vinegar) 92.9%. NEVO has no plain vinegar entry; closest is balsamic at 70.3% (different product class)."
    },
    {
      "product": "vinegar",
      "path": "processing_methods.spray.feed_moisture",
      "quantity": "feed_moisture",
      "value": 0.5,
      "unit": null,
      "source": "derived_from_concentrate_moisture",
      "source_detail": "Equal to concentrate_moisture (0.50). The multi-effect evaporator concentrates fresh vinegar (with maltodextrin carrier added) to this moisture before the spray dryer receives it; the cascade walker uses feed_moisture as the spray stage's moisture_in (overriding moisture_fresh)."
    },
    {
      "product": "vinegar",
      "path": "processing_methods.spray.moisture_dried",
      "quantity": "moisture_dried",
      "value": 0.04,
      "unit": null,
      "source": "cacatian_2024_bignay_vinegar_powder",
      "source_detail": "Cacatian and Barcena 2024 spray-dried vinegar powder, 4% w/w commercial benchmark."
    },
    {
      "product": "walnut",
      "path": "oil_content",
      "quantity": "oil_content",
      "value": 0.62,
      "unit": "kg/kg as-is",
      "source": "USDA FDC",
      "source_detail": null
    },
    {
      "product": "walnut",
      "path": "processing_methods.cold_press_nut._oil_yield_sources[0]",
      "quantity": "_oil_yield_sources[0]",
      "value": 0.541,
      "unit": null,
      "source": "martinez_2017",
      "source_detail": null
    },
    {
      "product": "watermelon",
      "path": "min_brix",
      "quantity": "min_brix",
      "value": 8.0,
      "unit": null,
      "source": "codex_stan_247_2005",
      "source_detail": null
    },
    {
      "product": "wheat_conventional",
      "path": "moisture",
      "quantity": "moisture",
      "value": 0.13,
      "unit": null,
      "source": "IAOM",
      "source_detail": "Grain moisture at milling ~13%"
    },
    {
      "product": "wheat_conventional",
      "path": "processing_methods.roller_milling_white.co_products.flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.77,
      "unit": null,
      "source": "iaom_existing",
      "source_detail": "Standard wheat flour extraction 77% (IAOM). Cross-validated by Baasandorj et al. 2018 (J Food Properties, Buhler mill 76.2%), Sarfaraz et al. 2017 (J Cereal Science, experimental 80% extraction), and Nirmal et al. 2017 (Sci Rep 7:14181, Buhler mill, threshold 77% used to categorize high-milling vs poor-milling genotypes across 30 worldwide wheat varieties)."
    },
    {
      "product": "wheat_conventional",
      "path": "processing_methods.roller_milling_white.co_products.process_loss.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.005,
      "unit": null,
      "source": "sarfaraz_2017_wheat_co_products",
      "source_detail": "Residual to close mass balance to 1.0 after flour 0.77 + bran 0.15 + germ 0.025 + shorts 0.05 = 0.995. Process loss includes dust, sweepings, and conditioning-water evaporation."
    },
    {
      "product": "wheat_conventional",
      "path": "processing_methods.roller_milling_white.co_products.wheat_bran.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.15,
      "unit": null,
      "source": "halliwell_1904_flour_milling+sarfaraz_2017_wheat_co_products",
      "source_detail": "Halliwell 1904 ch XI: pure-kernel bran 14.4% of grain. Sarfaraz et al. 2017 (J Cereal Sci 77:228) p.39: 13-17% bran across cultivars. Shetlar et al. via Ficco 2020: 3.9% outer pericarp + 0.9% inner pericarp + 0.7% testa + 9.0% aleurone = 14.5% total bran-layer. Adopted 0.15 as the central commercial bran-stream value (includes the kernel bran plus a small entrained-endosperm fraction picked up by the milling stream)."
    },
    {
      "product": "wheat_conventional",
      "path": "processing_methods.roller_milling_white.co_products.wheat_germ.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.025,
      "unit": null,
      "source": "halliwell_1904_flour_milling+sarfaraz_2017_wheat_co_products",
      "source_detail": "Halliwell 1904 ch XI: pure-kernel germ 1.6%. Sarfaraz et al. 2017: 2-3% germ. Commercial wheat-germ separation streams typically run 2-3% by mass (Halliwell's 1.6 is the pure-germ fraction; mill streams include some entrained endosperm). Adopted 0.025 midpoint."
    },
    {
      "product": "wheat_conventional",
      "path": "processing_methods.roller_milling_white.co_products.wheat_shorts_middlings.mass_fraction",
      "quantity": "mass_fraction",
      "value": 0.05,
      "unit": null,
      "source": "sarfaraz_2017_wheat_co_products+kong_2016_wheat_endosperm_separation",
      "source_detail": "Sarfaraz et al. 2017: defines shorts as a mixture of bran, endosperm, and germ (and red dog as a mixture of bran and low-grade endosperm). Kong & Baik 2016 (J Cereal Sci 69:49-56): experimental flour yields 65.1-72.4% imply 15-22% co-product residual after the bran/germ streams are separated. Adopted 0.05 as the residual shorts/middlings/red-dog stream after flour (0.77) + bran (0.15) + germ (0.025) are accounted for."
    },
    {
      "product": "wheat_conventional",
      "path": "processing_methods.roller_milling_wholemeal.co_products.wholemeal_flour.mass_fraction",
      "quantity": "mass_fraction",
      "value": 1.0,
      "unit": null,
      "source": "IAOM",
      "source_detail": "Whole wheat = 100% extraction, ~4.5% processing loss"
    }
  ]
}