From 17dc873d9b2646176ed199c337082727266e8d34 Mon Sep 17 00:00:00 2001 From: Manohar Gupta Date: Fri, 29 May 2026 18:24:02 +0530 Subject: [PATCH] fix: land cost calculation - filter by both id and attribution - Solar land cost: only items with id containing 'land' AND attribution 'SolarOnly' - Wind land cost: only items with id containing 'land' AND attribution 'WindOnly' - Prevents wind land cost from appearing in pure solar projects --- packages/web/components/InputsTab.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/web/components/InputsTab.tsx b/packages/web/components/InputsTab.tsx index 048e174..9a77105 100644 --- a/packages/web/components/InputsTab.tsx +++ b/packages/web/components/InputsTab.tsx @@ -791,7 +791,9 @@ export function InputsTab({ scenarioId, inputsJson, onSaved }: Props) { const solarBOS = solarItems.filter(it => ["solar_inverter", "solar_dc_bos", "solar_ac_bos", "solar_hr"].includes(it.id)).reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0); const solarModule = solarItems.filter(it => it.id === "solar_module").reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0); const windWTG = windItems.filter(it => ["wind_wtg", "wind_tower", "wind_bop", "wind_e_and_c"].includes(it.id)).reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0); + // Solar land: only include items with id containing "land" AND attribution "SolarOnly" const solarLandCost = solarItems.filter(it => it.id.includes("land") && it.attribution === "SolarOnly").reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0); + // Wind land: only include items with id containing "land" AND attribution "WindOnly" const windLandCost = windItems.filter(it => it.id.includes("land") && it.attribution === "WindOnly").reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0); const bessAll = bessItems.reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0); const solarEPC = solarItems.filter(it => it.category === "EPCOverhead").reduce((acc, it) => acc + (computeItemCr(it, solarDcMwp, windMw, bessMwh, 0, effectiveLandAcres) ?? 0), 0);