{
  "publisher": {
    "name": "SeedMatch Group",
    "url": "https://seedmatchgroup.com",
    "partOf": "Global B2B Group",
    "role": "Independent commercial agriculture sourcing and project-planning platform. Not a lender, engineer, agronomist or EPC contractor."
  },
  "documentation": "https://seedmatchgroup.com/calculator-methodology",
  "notices": {
    "planningEstimate": "Planning estimate only. Final crop, variety, greenhouse, irrigation, fertigation, structural, hydraulic, energy and financial decisions must be confirmed by qualified independent professionals, the selected provider and applicable authorities.",
    "noGuarantee": "SeedMatch Group does not guarantee germination, emergence, yield, quality, crop cycle, disease resistance, water consumption, energy savings, market price, revenue or project return."
  },
  "generated": "2026-09-17",
  "models": [
    {
      "id": "plant-population",
      "name": "Plant population and spacing",
      "version": "1.0.0",
      "purpose": "Convert a planting geometry into an indicative plant population for an area, so seed, transplant, dripline and yield planning all start from the same number.",
      "applicability": {
        "crops": "Row-planted field and greenhouse crops with a regular spacing grid.",
        "productionSystems": "Open field, protected cultivation, substrate rows.",
        "climate": "Climate-independent — geometry only."
      },
      "confidenceLevel": "planning",
      "inputs": [
        {
          "id": "areaHa",
          "label": "Planted area",
          "unit": "ha",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "rowSpacingM",
          "label": "Row spacing",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "plantSpacingM",
          "label": "In-row plant spacing",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "plantsPerPosition",
          "label": "Plants per position",
          "unit": "count",
          "valueClass": "buyer-input",
          "validation": ">= 1",
          "defaultValue": 1
        }
      ],
      "outputs": [
        {
          "id": "plantsPerHa",
          "label": "Plants per hectare",
          "unit": "plants/ha",
          "valueClass": "calculated-output"
        },
        {
          "id": "totalPlants",
          "label": "Total plants",
          "unit": "plants",
          "valueClass": "calculated-output"
        },
        {
          "id": "areaPerPlantM2",
          "label": "Area per plant",
          "unit": "m²",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "area per plant (m²) = row spacing (m) × in-row spacing (m) ÷ plants per position",
        "plants per hectare = 10,000 ÷ area per plant",
        "total plants = plants per hectare × planted area (ha)"
      ],
      "agronomicAssumptions": [
        "A uniform, fully planted grid with no gaps, headlands, roads or service areas deducted.",
        "Spacing is the agronomic decision of the grower or agronomist; the model does not propose a density."
      ],
      "engineeringAssumptions": [
        "None — the model is pure geometry."
      ],
      "limitations": [
        "Does not account for field shape, headlands, paths, gutters or service corridors.",
        "Does not adjust for expected field establishment; use the seed-rate model for that."
      ],
      "sources": [],
      "usedOn": [
        "https://seedmatchgroup.com/plant-population-calculator",
        "https://seedmatchgroup.com/seed-rate-calculator",
        "https://seedmatchgroup.com/greenhouse-size-planner"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#plant-population"
    },
    {
      "id": "greenhouse-area",
      "name": "Greenhouse area and production planner",
      "version": "1.0.0",
      "purpose": "Work backwards from an annual marketable-production target to the net growing area, gross covered area and indicative plant population a project needs.",
      "applicability": {
        "crops": "Greenhouse vegetable and leafy crops where a marketable yield scenario can be stated with its context.",
        "productionSystems": "Protected cultivation: soil, substrate, hydroponic gutters, NFT.",
        "climate": "Any — the yield scenario must be supplied for the specific climate and technology."
      },
      "confidenceLevel": "planning",
      "inputs": [
        {
          "id": "annualTargetKg",
          "label": "Annual marketable production target",
          "unit": "kg/year",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "yieldKgPerM2PerCycle",
          "label": "Marketable yield scenario per cycle",
          "unit": "kg/m²/cycle",
          "valueClass": "crop-reference",
          "validation": "> 0 — must state crop, variety context, climate, technology, system, period, source and date"
        },
        {
          "id": "cyclesPerYear",
          "label": "Crop cycles per year",
          "unit": "cycles/year",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "packOutPct",
          "label": "Pack-out percentage",
          "unit": "%",
          "valueClass": "buyer-input",
          "validation": "0 < value <= 100"
        },
        {
          "id": "cropLossPct",
          "label": "Crop-loss scenario",
          "unit": "%",
          "valueClass": "buyer-input",
          "validation": "0 <= value < 100"
        },
        {
          "id": "supportAreaPct",
          "label": "Support, path, nursery and packing area",
          "unit": "% of net growing area",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "expansionPct",
          "label": "Future expansion allowance",
          "unit": "%",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        }
      ],
      "outputs": [
        {
          "id": "netGrowingAreaM2",
          "label": "Net growing area",
          "unit": "m²",
          "valueClass": "calculated-output"
        },
        {
          "id": "supportAreaM2",
          "label": "Support area",
          "unit": "m²",
          "valueClass": "calculated-output"
        },
        {
          "id": "grossAreaM2",
          "label": "Gross greenhouse area",
          "unit": "m²",
          "valueClass": "calculated-output"
        },
        {
          "id": "productionPerCycleKg",
          "label": "Marketable production per cycle",
          "unit": "kg",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "effective marketable yield (kg/m²/cycle) = yield scenario × (1 − crop loss %) × pack-out %",
        "net growing area (m²) = annual target ÷ (effective yield × cycles per year)",
        "support area (m²) = net growing area × support area %",
        "gross area (m²) = (net growing area + support area) × (1 + expansion %)"
      ],
      "agronomicAssumptions": [
        "No universal yield per m² is applied. The yield scenario is an input that must name its crop, variety context, climate, greenhouse technology, growing system, production period, source and date.",
        "Cycles per year reflect the planned cropping calendar for the site, not a theoretical maximum."
      ],
      "engineeringAssumptions": [
        "Gross area is a planning envelope, not a structural layout. Bay width, gutter height, module length and orientation come from the supplier's or engineer's layout."
      ],
      "limitations": [
        "Sensitive to the yield, pack-out and loss scenario; a 10% change in any of them moves the required area by roughly the same proportion.",
        "Does not size climate equipment, structure or foundations."
      ],
      "sources": [
        {
          "id": "fao-good-agricultural-practices-greenhouse",
          "title": "Good Agricultural Practices for greenhouse vegetable production",
          "organization": "Food and Agriculture Organization of the United Nations (FAO)",
          "url": "https://www.fao.org/family-farming/detail/en/c/386949/",
          "published": "2013",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/greenhouse-size-planner",
        "https://seedmatchgroup.com/plan-my-commercial-greenhouse"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#greenhouse-area"
    },
    {
      "id": "crop-water-requirement",
      "name": "Crop water requirement and irrigation demand",
      "version": "1.0.0",
      "purpose": "Produce a preliminary net and gross irrigation requirement from reference evapotranspiration, a crop coefficient, the irrigated area and system efficiency.",
      "applicability": {
        "crops": "Any crop for which a crop coefficient (Kc) is available for the growth stage in question.",
        "productionSystems": "Open field and protected cultivation (with a greenhouse reduction factor).",
        "climate": "Any, provided ETo is supplied for the location and period."
      },
      "confidenceLevel": "planning",
      "inputs": [
        {
          "id": "etoMmPerDay",
          "label": "Reference evapotranspiration (ETo)",
          "unit": "mm/day",
          "valueClass": "location-derived",
          "validation": "> 0 — label the source and period; no live weather is used"
        },
        {
          "id": "kc",
          "label": "Crop coefficient (Kc) for the growth stage",
          "unit": "ratio",
          "valueClass": "crop-reference",
          "validation": "> 0",
          "defaultSource": "fao-irrigation-56"
        },
        {
          "id": "areaHa",
          "label": "Irrigated area",
          "unit": "ha",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "irrigationEfficiency",
          "label": "Irrigation system efficiency",
          "unit": "fraction",
          "valueClass": "buyer-input",
          "validation": "0 < value <= 1"
        },
        {
          "id": "effectiveRainfallMmPerDay",
          "label": "Effective rainfall",
          "unit": "mm/day",
          "valueClass": "location-derived",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "leachingFraction",
          "label": "Leaching requirement",
          "unit": "fraction",
          "valueClass": "buyer-input",
          "validation": "0 <= value < 1",
          "defaultValue": 0
        },
        {
          "id": "greenhouseFactor",
          "label": "Greenhouse reduction factor",
          "unit": "ratio",
          "valueClass": "editorial-assumption",
          "validation": "0 < value <= 1 — enter 1 for open field",
          "defaultValue": 1
        },
        {
          "id": "peakFactor",
          "label": "Peak-to-average design factor",
          "unit": "ratio",
          "valueClass": "buyer-input",
          "validation": ">= 1",
          "defaultValue": 1.3
        }
      ],
      "outputs": [
        {
          "id": "etcMmPerDay",
          "label": "Crop evapotranspiration (ETc)",
          "unit": "mm/day",
          "valueClass": "calculated-output"
        },
        {
          "id": "netMmPerDay",
          "label": "Net irrigation requirement",
          "unit": "mm/day",
          "valueClass": "calculated-output"
        },
        {
          "id": "grossMmPerDay",
          "label": "Gross irrigation requirement",
          "unit": "mm/day",
          "valueClass": "calculated-output"
        },
        {
          "id": "dailyM3",
          "label": "Average daily volume",
          "unit": "m³/day",
          "valueClass": "calculated-output"
        },
        {
          "id": "peakDailyM3",
          "label": "Peak daily volume",
          "unit": "m³/day",
          "valueClass": "calculated-output"
        },
        {
          "id": "seasonalM3",
          "label": "Volume over the operating period",
          "unit": "m³",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "ETc (mm/day) = ETo × Kc × greenhouse factor",
        "net requirement (mm/day) = max(0, ETc − effective rainfall)",
        "gross requirement (mm/day) = net requirement ÷ (irrigation efficiency × (1 − leaching fraction))",
        "volume (m³/day) = gross requirement (mm/day) × area (ha) × 10",
        "peak daily volume = average daily volume × peak factor",
        "period volume = average daily volume × operating days"
      ],
      "agronomicAssumptions": [
        "Kc is stage-specific. A single seasonal Kc understates peak demand and is only acceptable for a first screening.",
        "Effective rainfall is the fraction that reaches the root zone, not total rainfall."
      ],
      "engineeringAssumptions": [
        "Irrigation efficiency covers distribution uniformity and system losses as one factor; a hydraulic design separates them.",
        "1 mm over 1 ha = 10 m³."
      ],
      "limitations": [
        "No live weather feed is used. ETo must be supplied with its source and period.",
        "Does not replace a hydraulic design, a water balance or a laboratory water analysis."
      ],
      "sources": [
        {
          "id": "fao-irrigation-56",
          "title": "FAO Irrigation and Drainage Paper 56 — Crop evapotranspiration (guidelines for computing crop water requirements)",
          "organization": "Food and Agriculture Organization of the United Nations (FAO)",
          "url": "https://www.fao.org/4/x0490e/x0490e00.htm",
          "published": "1998",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/crop-water-requirement-calculator",
        "https://seedmatchgroup.com/greenhouse-water-consumption-calculator",
        "https://seedmatchgroup.com/greenhouse-irrigation-planner"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#crop-water-requirement"
    },
    {
      "id": "drip-zone",
      "name": "Drip, emitter and zone screening",
      "version": "1.0.0",
      "purpose": "Convert a drip layout into emitter counts, zone flow and total system flow so a buyer can state a credible flow requirement in an RFQ.",
      "applicability": {
        "crops": "Row crops irrigated by dripline.",
        "productionSystems": "Open-field drip, greenhouse drip, substrate drip.",
        "climate": "Climate-independent — geometry and hydraulics only."
      },
      "confidenceLevel": "screening",
      "inputs": [
        {
          "id": "areaHa",
          "label": "Irrigated area",
          "unit": "ha",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "rowSpacingM",
          "label": "Row spacing",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "driplinesPerRow",
          "label": "Driplines per row",
          "unit": "count",
          "valueClass": "buyer-input",
          "validation": ">= 1",
          "defaultValue": 1
        },
        {
          "id": "emitterSpacingM",
          "label": "Emitter spacing",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "emitterFlowLph",
          "label": "Emitter nominal flow",
          "unit": "L/h",
          "valueClass": "supplier-confirmed",
          "validation": "> 0"
        },
        {
          "id": "zones",
          "label": "Number of irrigation zones",
          "unit": "count",
          "valueClass": "buyer-input",
          "validation": ">= 1",
          "defaultValue": 1
        },
        {
          "id": "runHoursPerShift",
          "label": "Irrigation duration per shift",
          "unit": "h",
          "valueClass": "buyer-input",
          "validation": "> 0"
        }
      ],
      "outputs": [
        {
          "id": "driplineLengthM",
          "label": "Total dripline length",
          "unit": "m",
          "valueClass": "calculated-output"
        },
        {
          "id": "emitterCount",
          "label": "Emitter count",
          "unit": "count",
          "valueClass": "calculated-output"
        },
        {
          "id": "systemFlowLph",
          "label": "Flow if all zones run together",
          "unit": "L/h",
          "valueClass": "calculated-output"
        },
        {
          "id": "zoneFlowM3H",
          "label": "Flow per zone",
          "unit": "m³/h",
          "valueClass": "calculated-output"
        },
        {
          "id": "appliedPerShiftM3",
          "label": "Water applied per zone shift",
          "unit": "m³",
          "valueClass": "calculated-output"
        },
        {
          "id": "appliedPerShiftMm",
          "label": "Depth applied per zone shift",
          "unit": "mm",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "dripline length (m) = area (ha) × 10,000 ÷ row spacing × driplines per row",
        "emitter count = dripline length ÷ emitter spacing",
        "system flow (L/h) = emitter count × emitter flow",
        "zone flow (m³/h) = system flow ÷ zones ÷ 1,000",
        "applied per zone shift (m³) = zone flow × run hours",
        "depth applied (mm) = applied volume (m³) ÷ (zone area in ha × 10)"
      ],
      "agronomicAssumptions": [
        "Application depth is compared with the crop's net requirement by the buyer or agronomist; the model does not schedule irrigation."
      ],
      "engineeringAssumptions": [
        "Emitter flow is the manufacturer's nominal flow at its rated pressure. Actual flow varies with pressure, temperature and clogging.",
        "Zones are assumed equal in area; unequal zones must be calculated separately."
      ],
      "limitations": [
        "Does not determine pipe sizes, pressure losses, valve selection, mainline routing or lateral run limits — those require a hydraulic design.",
        "Uniformity is not modelled; a manufacturer's emission uniformity figure is a supplier-confirmed value."
      ],
      "sources": [
        {
          "id": "fao-irrigation-56",
          "title": "FAO Irrigation and Drainage Paper 56 — Crop evapotranspiration (guidelines for computing crop water requirements)",
          "organization": "Food and Agriculture Organization of the United Nations (FAO)",
          "url": "https://www.fao.org/4/x0490e/x0490e00.htm",
          "published": "1998",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/greenhouse-irrigation-planner",
        "https://seedmatchgroup.com/crop-water-requirement-calculator"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#drip-zone"
    },
    {
      "id": "pump-hydraulic",
      "name": "Pump and hydraulic screening",
      "version": "1.0.0",
      "purpose": "Estimate total dynamic head, hydraulic power and electrical input for a pumping duty so a buyer can request comparable pump proposals.",
      "applicability": {
        "crops": "Not crop-specific.",
        "productionSystems": "Any irrigation or water-transfer duty.",
        "climate": "Climate-independent."
      },
      "confidenceLevel": "screening",
      "inputs": [
        {
          "id": "flowM3H",
          "label": "Required flow",
          "unit": "m³/h",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "staticSuctionM",
          "label": "Static suction head",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "staticDeliveryM",
          "label": "Static delivery head (elevation)",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "frictionLossM",
          "label": "Pipe and fitting friction losses",
          "unit": "m",
          "valueClass": "requires-professional-review",
          "validation": ">= 0"
        },
        {
          "id": "filtrationLossM",
          "label": "Filtration loss allowance",
          "unit": "m",
          "valueClass": "supplier-confirmed",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "fertigationLossM",
          "label": "Fertigation loss allowance",
          "unit": "m",
          "valueClass": "supplier-confirmed",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "operatingPressureM",
          "label": "Required operating pressure at the emitter",
          "unit": "m head",
          "valueClass": "supplier-confirmed",
          "validation": ">= 0"
        },
        {
          "id": "pumpEfficiency",
          "label": "Pump efficiency",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 1"
        },
        {
          "id": "motorEfficiency",
          "label": "Motor efficiency",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 1"
        }
      ],
      "outputs": [
        {
          "id": "tdhM",
          "label": "Preliminary total dynamic head",
          "unit": "m",
          "valueClass": "calculated-output"
        },
        {
          "id": "hydraulicKw",
          "label": "Hydraulic power",
          "unit": "kW",
          "valueClass": "calculated-output"
        },
        {
          "id": "shaftKw",
          "label": "Pump shaft power",
          "unit": "kW",
          "valueClass": "calculated-output"
        },
        {
          "id": "electricalKw",
          "label": "Estimated electrical input",
          "unit": "kW",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "TDH (m) = static suction + static delivery + friction losses + filtration loss + fertigation loss + operating pressure",
        "hydraulic power (kW) = ρ × g × Q(m³/s) × H(m) ÷ 1,000, with ρ = 1,000 kg/m³ and g = 9.81 m/s²",
        "shaft power (kW) = hydraulic power ÷ pump efficiency",
        "electrical input (kW) = shaft power ÷ motor efficiency"
      ],
      "agronomicAssumptions": [
        "None."
      ],
      "engineeringAssumptions": [
        "Clean water at ambient temperature, density 1,000 kg/m³.",
        "Friction losses are an input, not a derived value: they depend on pipe material, diameter, length, fittings and flow.",
        "Duty/standby redundancy, NPSH, cavitation margin, starting method and variable-speed control are engineering decisions outside this model."
      ],
      "limitations": [
        "Does not select a pump model, impeller or motor frame.",
        "Hydraulic power depends on flow, total head, fluid density and gravity; the electrical input additionally depends on pump and motor efficiency, which are supplier-confirmed values."
      ],
      "sources": [
        {
          "id": "fao-irrigation-56",
          "title": "FAO Irrigation and Drainage Paper 56 — Crop evapotranspiration (guidelines for computing crop water requirements)",
          "organization": "Food and Agriculture Organization of the United Nations (FAO)",
          "url": "https://www.fao.org/4/x0490e/x0490e00.htm",
          "published": "1998",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/pump-sizing-calculator"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#pump-hydraulic"
    },
    {
      "id": "ventilation-cooling",
      "name": "Greenhouse ventilation and evaporative cooling screening",
      "version": "1.0.0",
      "purpose": "Convert greenhouse geometry and a target air-exchange rate into an indicative airflow and fan count, and flag where evaporative cooling is limited by humidity.",
      "applicability": {
        "crops": "Not crop-specific; the target internal condition is a crop decision.",
        "productionSystems": "Naturally ventilated and mechanically ventilated greenhouses.",
        "climate": "Any — but evaporative cooling performance depends on the local wet-bulb condition."
      },
      "confidenceLevel": "screening",
      "inputs": [
        {
          "id": "lengthM",
          "label": "Greenhouse length",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "widthM",
          "label": "Greenhouse width",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "averageHeightM",
          "label": "Average internal height",
          "unit": "m",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "airChangesPerHour",
          "label": "Target air changes per hour",
          "unit": "1/h",
          "valueClass": "requires-professional-review",
          "validation": "> 0"
        },
        {
          "id": "fanCapacityM3H",
          "label": "Rated fan capacity at design static pressure",
          "unit": "m³/h",
          "valueClass": "supplier-confirmed",
          "validation": "> 0"
        },
        {
          "id": "ventAreaM2",
          "label": "Natural vent opening area",
          "unit": "m²",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "dryBulbC",
          "label": "External design dry-bulb temperature",
          "unit": "°C",
          "valueClass": "location-derived",
          "validation": "any"
        },
        {
          "id": "wetBulbC",
          "label": "External design wet-bulb temperature",
          "unit": "°C",
          "valueClass": "location-derived",
          "validation": "<= dry bulb"
        },
        {
          "id": "padEfficiency",
          "label": "Cooling pad saturation efficiency",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 1"
        }
      ],
      "outputs": [
        {
          "id": "volumeM3",
          "label": "Greenhouse volume",
          "unit": "m³",
          "valueClass": "calculated-output"
        },
        {
          "id": "floorAreaM2",
          "label": "Floor area",
          "unit": "m²",
          "valueClass": "calculated-output"
        },
        {
          "id": "airflowM3H",
          "label": "Indicative airflow requirement",
          "unit": "m³/h",
          "valueClass": "calculated-output"
        },
        {
          "id": "fanCount",
          "label": "Indicative fan count at the entered rated capacity",
          "unit": "count",
          "valueClass": "calculated-output"
        },
        {
          "id": "ventRatioPct",
          "label": "Vent area as a share of floor area",
          "unit": "%",
          "valueClass": "calculated-output"
        },
        {
          "id": "padOutletC",
          "label": "Theoretical pad outlet temperature",
          "unit": "°C",
          "valueClass": "calculated-output"
        },
        {
          "id": "achievableDropC",
          "label": "Theoretical temperature drop",
          "unit": "K",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "volume (m³) = length × width × average height",
        "airflow (m³/h) = volume × air changes per hour",
        "fan count = ceiling(airflow ÷ rated fan capacity at design static pressure)",
        "vent ratio (%) = vent area ÷ floor area × 100",
        "pad outlet (°C) = dry bulb − pad efficiency × (dry bulb − wet bulb)"
      ],
      "agronomicAssumptions": [
        "The target internal temperature and humidity band belong to the crop plan and must come from an agronomist."
      ],
      "engineeringAssumptions": [
        "Rated fan capacity must be the manufacturer's figure at the project's design static pressure, not free air.",
        "Air changes per hour is a design parameter set by the climate designer; the model does not propose one.",
        "Evaporative cooling cannot go below the ambient wet-bulb temperature, and the achievable drop shrinks as humidity rises."
      ],
      "limitations": [
        "No internal temperature is guaranteed. Solar load, crop transpiration, screen configuration, elevation, leakage and control strategy all change the result.",
        "Does not size vents, screens, pad area, pumps or controls — that is a climate design."
      ],
      "sources": [
        {
          "id": "fao-good-agricultural-practices-greenhouse",
          "title": "Good Agricultural Practices for greenhouse vegetable production",
          "organization": "Food and Agriculture Organization of the United Nations (FAO)",
          "url": "https://www.fao.org/family-farming/detail/en/c/386949/",
          "published": "2013",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/greenhouse-climate-calculator"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#ventilation-cooling"
    },
    {
      "id": "heating-load",
      "name": "Greenhouse peak heating load screening",
      "version": "1.0.0",
      "purpose": "Estimate the peak heat loss of a greenhouse envelope at the design outside temperature.",
      "applicability": {
        "crops": "Not crop-specific; the internal target is a crop decision.",
        "productionSystems": "Protected cultivation.",
        "climate": "Heating climates; requires a design outside temperature for the site."
      },
      "confidenceLevel": "screening",
      "inputs": [
        {
          "id": "envelopeAreaM2",
          "label": "Envelope (covered) surface area",
          "unit": "m²",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "uValue",
          "label": "Covering U-value",
          "unit": "W/m²·K",
          "valueClass": "supplier-confirmed",
          "validation": "> 0"
        },
        {
          "id": "insideC",
          "label": "Inside target temperature",
          "unit": "°C",
          "valueClass": "requires-professional-review",
          "validation": "any"
        },
        {
          "id": "outsideDesignC",
          "label": "Outside design temperature",
          "unit": "°C",
          "valueClass": "location-derived",
          "validation": "< inside target"
        },
        {
          "id": "screenReduction",
          "label": "Thermal screen reduction",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 <= value < 1",
          "defaultValue": 0
        },
        {
          "id": "infiltrationAllowance",
          "label": "Infiltration allowance",
          "unit": "fraction",
          "valueClass": "requires-professional-review",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "systemEfficiency",
          "label": "Heating system efficiency",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 1",
          "defaultValue": 1
        }
      ],
      "outputs": [
        {
          "id": "transmissionKw",
          "label": "Transmission heat loss",
          "unit": "kW",
          "valueClass": "calculated-output"
        },
        {
          "id": "peakLoadKw",
          "label": "Peak heating load including infiltration",
          "unit": "kW",
          "valueClass": "calculated-output"
        },
        {
          "id": "inputKw",
          "label": "Required heat input at system efficiency",
          "unit": "kW",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "ΔT (K) = inside target − outside design temperature",
        "transmission loss (kW) = envelope area × U-value × (1 − screen reduction) × ΔT ÷ 1,000",
        "peak load (kW) = transmission loss × (1 + infiltration allowance)",
        "required input (kW) = peak load ÷ system efficiency"
      ],
      "agronomicAssumptions": [
        "The inside target temperature comes from the crop plan."
      ],
      "engineeringAssumptions": [
        "Steady-state envelope loss only. Solar gain, thermal mass, wind exposure, floor and perimeter losses and the control strategy are not modelled.",
        "U-value must be the covering's certified value for the installed configuration."
      ],
      "limitations": [
        "A screening figure for comparing options, not a heating design or an equipment selection.",
        "Annual energy cannot be derived from a peak load without a declared operating profile."
      ],
      "sources": [],
      "usedOn": [
        "https://seedmatchgroup.com/greenhouse-energy-calculator",
        "https://seedmatchgroup.com/greenhouse-climate-calculator"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#heating-load"
    },
    {
      "id": "seed-rate",
      "name": "Seed rate and seed quantity",
      "version": "1.0.0",
      "purpose": "Convert a target plant population into a seed quantity, correcting for germination, purity and expected field establishment.",
      "applicability": {
        "crops": "Directly sown field and vegetable crops; transplanted crops use the nursery variant with the same correction chain.",
        "productionSystems": "Open field and protected cultivation.",
        "climate": "Climate-independent — establishment expectation carries the site effect."
      },
      "confidenceLevel": "planning",
      "inputs": [
        {
          "id": "targetPlantsPerHa",
          "label": "Target plant population",
          "unit": "plants/ha",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "germinationPct",
          "label": "Germination percentage on the lot certificate",
          "unit": "%",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 100"
        },
        {
          "id": "purityPct",
          "label": "Analytical purity percentage",
          "unit": "%",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 100",
          "defaultValue": 100
        },
        {
          "id": "establishmentPct",
          "label": "Expected field establishment",
          "unit": "%",
          "valueClass": "buyer-input",
          "validation": "0 < value <= 100"
        },
        {
          "id": "thousandSeedWeightG",
          "label": "Thousand-seed weight",
          "unit": "g",
          "valueClass": "supplier-confirmed",
          "validation": "> 0 — or supply seeds per kg instead"
        },
        {
          "id": "areaHa",
          "label": "Planted area",
          "unit": "ha",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "safetyAllowancePct",
          "label": "Safety allowance",
          "unit": "%",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "bagSizeKg",
          "label": "Bag size",
          "unit": "kg",
          "valueClass": "supplier-confirmed",
          "validation": "> 0"
        }
      ],
      "outputs": [
        {
          "id": "seedsPerHa",
          "label": "Seeds required per hectare",
          "unit": "seeds/ha",
          "valueClass": "calculated-output"
        },
        {
          "id": "kgPerHa",
          "label": "Seed rate",
          "unit": "kg/ha",
          "valueClass": "calculated-output"
        },
        {
          "id": "totalSeedKg",
          "label": "Total seed quantity",
          "unit": "kg",
          "valueClass": "calculated-output"
        },
        {
          "id": "bags",
          "label": "Bags at the entered bag size",
          "unit": "count",
          "valueClass": "calculated-output"
        },
        {
          "id": "expectedPlantsPerHa",
          "label": "Resulting plant population",
          "unit": "plants/ha",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "seeds per hectare = target population ÷ (germination % × purity % × establishment %) × (1 + safety allowance)",
        "seeds per kg = 1,000,000 ÷ thousand-seed weight (g)",
        "seed rate (kg/ha) = seeds per hectare ÷ seeds per kg",
        "total seed (kg) = seed rate × area",
        "bags = ceiling(total seed ÷ bag size)"
      ],
      "agronomicAssumptions": [
        "Germination and purity are the figures on the lot's own analysis certificate, not catalogue values.",
        "Field establishment is a site expectation set by the grower or agronomist; it is not a property of the seed."
      ],
      "engineeringAssumptions": [
        "Sowing equipment calibration and singulation accuracy are outside the model."
      ],
      "limitations": [
        "Does not predict emergence, yield or crop performance, and is not a variety recommendation.",
        "Coated, pelleted and primed seed change thousand-seed weight — use the figure for the lot actually supplied."
      ],
      "sources": [
        {
          "id": "ista-rules",
          "title": "International Rules for Seed Testing",
          "organization": "International Seed Testing Association (ISTA)",
          "url": "https://www.seedtest.org/en/publications/international-rules-seed-testing.html",
          "published": null,
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/seed-rate-calculator",
        "https://seedmatchgroup.com/seed-requirement-calculator",
        "https://seedmatchgroup.com/rice-seed-rate-calculator",
        "https://seedmatchgroup.com/oil-crop-calculators"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#seed-rate"
    },
    {
      "id": "capex-opex",
      "name": "Project CAPEX, OPEX and unit cost",
      "version": "1.0.0",
      "purpose": "Separate equipment-only cost from installed cost and total project cost, and express both CAPEX and OPEX per unit of area and of marketable production.",
      "applicability": {
        "crops": "Not crop-specific.",
        "productionSystems": "Any commercial agricultural project.",
        "climate": "Not applicable."
      },
      "confidenceLevel": "planning",
      "inputs": [
        {
          "id": "equipmentCost",
          "label": "Equipment and materials cost",
          "unit": "currency",
          "valueClass": "supplier-confirmed",
          "validation": ">= 0"
        },
        {
          "id": "installationCost",
          "label": "Installation and commissioning",
          "unit": "currency",
          "valueClass": "supplier-confirmed",
          "validation": ">= 0"
        },
        {
          "id": "freightAndDuties",
          "label": "Freight, insurance and duties",
          "unit": "currency",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "sitePreparation",
          "label": "Site preparation, drainage and civil works",
          "unit": "currency",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "professionalServices",
          "label": "Professional services and permits",
          "unit": "currency",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "otherProjectCosts",
          "label": "Other project costs (land, support buildings, utilities)",
          "unit": "currency",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "contingencyPct",
          "label": "Contingency",
          "unit": "%",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "workingCapital",
          "label": "Working capital",
          "unit": "currency",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        },
        {
          "id": "annualOpex",
          "label": "Annual operating cost",
          "unit": "currency/year",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "areaM2",
          "label": "Gross project area",
          "unit": "m²",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "annualMarketableKg",
          "label": "Annual marketable production",
          "unit": "kg/year",
          "valueClass": "calculated-output",
          "validation": "> 0"
        }
      ],
      "outputs": [
        {
          "id": "equipmentOnly",
          "label": "Equipment-only CAPEX",
          "unit": "currency",
          "valueClass": "calculated-output"
        },
        {
          "id": "installedCapex",
          "label": "Installed CAPEX",
          "unit": "currency",
          "valueClass": "calculated-output"
        },
        {
          "id": "totalProjectCapex",
          "label": "Total project CAPEX including contingency and working capital",
          "unit": "currency",
          "valueClass": "calculated-output"
        },
        {
          "id": "capexPerM2",
          "label": "CAPEX per m²",
          "unit": "currency/m²",
          "valueClass": "calculated-output"
        },
        {
          "id": "capexPerHa",
          "label": "CAPEX per hectare",
          "unit": "currency/ha",
          "valueClass": "calculated-output"
        },
        {
          "id": "opexPerKg",
          "label": "Operating cost per marketable kg",
          "unit": "currency/kg",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "equipment-only CAPEX = equipment and materials",
        "installed CAPEX = equipment-only + installation + freight and duties",
        "base project cost = installed CAPEX + site preparation + professional services + other project costs",
        "total project CAPEX = base project cost × (1 + contingency %) + working capital",
        "CAPEX per m² = total project CAPEX ÷ gross area; CAPEX per hectare = CAPEX per m² × 10,000",
        "operating cost per kg = annual OPEX ÷ annual marketable production"
      ],
      "agronomicAssumptions": [
        "Annual marketable production comes from the greenhouse-area model or the buyer's own plan."
      ],
      "engineeringAssumptions": [
        "Cost inputs must be quotations or the buyer's own budget figures. The model publishes no price benchmarks."
      ],
      "limitations": [
        "Equipment price is never presented as total project cost — the three levels are reported separately.",
        "Excludes financing cost, tax effects and currency movement unless the buyer includes them in the inputs."
      ],
      "sources": [],
      "usedOn": [
        "https://seedmatchgroup.com/capex-calculator",
        "https://seedmatchgroup.com/project-budget-calculator",
        "https://seedmatchgroup.com/greenhouse-project-budget-planner"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#capex-opex"
    },
    {
      "id": "roi-scenarios",
      "name": "ROI, payback, NPV and IRR scenarios",
      "version": "1.0.0",
      "purpose": "Express a project's cash-flow arithmetic under conservative, base and upside scenarios, including break-even yield and price.",
      "applicability": {
        "crops": "Not crop-specific.",
        "productionSystems": "Any commercial agricultural project.",
        "climate": "Not applicable."
      },
      "confidenceLevel": "comparative",
      "inputs": [
        {
          "id": "capex",
          "label": "Total project CAPEX",
          "unit": "currency",
          "valueClass": "calculated-output",
          "validation": "> 0"
        },
        {
          "id": "annualMarketableKg",
          "label": "Annual marketable production",
          "unit": "kg/year",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "pricePerKg",
          "label": "Selling price entered by the buyer",
          "unit": "currency/kg",
          "valueClass": "buyer-input",
          "validation": "> 0 — no market price is supplied by SeedMatch"
        },
        {
          "id": "annualOpex",
          "label": "Annual operating cost",
          "unit": "currency/year",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "projectLifeYears",
          "label": "Project life",
          "unit": "years",
          "valueClass": "buyer-input",
          "validation": ">= 1"
        },
        {
          "id": "discountRate",
          "label": "Discount rate",
          "unit": "fraction",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "rampUp",
          "label": "Ramp-up factors by year",
          "unit": "fraction per year",
          "valueClass": "buyer-input",
          "validation": "each 0 <= value <= 1"
        },
        {
          "id": "residualValue",
          "label": "Residual value at end of life",
          "unit": "currency",
          "valueClass": "buyer-input",
          "validation": ">= 0",
          "defaultValue": 0
        }
      ],
      "outputs": [
        {
          "id": "annualRevenue",
          "label": "Revenue at full production",
          "unit": "currency/year",
          "valueClass": "calculated-output"
        },
        {
          "id": "annualOperatingMargin",
          "label": "Operating margin at full production",
          "unit": "currency/year",
          "valueClass": "calculated-output"
        },
        {
          "id": "simplePaybackYears",
          "label": "Simple payback",
          "unit": "years",
          "valueClass": "calculated-output"
        },
        {
          "id": "discountedPaybackYears",
          "label": "Discounted payback",
          "unit": "years",
          "valueClass": "calculated-output"
        },
        {
          "id": "npv",
          "label": "Net present value",
          "unit": "currency",
          "valueClass": "calculated-output"
        },
        {
          "id": "irr",
          "label": "Internal rate of return",
          "unit": "fraction",
          "valueClass": "calculated-output"
        },
        {
          "id": "breakEvenPricePerKg",
          "label": "Break-even price",
          "unit": "currency/kg",
          "valueClass": "calculated-output"
        },
        {
          "id": "breakEvenYieldKg",
          "label": "Break-even volume",
          "unit": "kg/year",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "year n production = annual marketable production × ramp-up factor for year n",
        "year n cash flow = year n production × price − annual OPEX",
        "NPV = −CAPEX + Σ (year n cash flow ÷ (1 + discount rate)^n) + residual value ÷ (1 + discount rate)^life",
        "IRR = the discount rate at which NPV = 0, found by bisection; reported only when a sign change exists",
        "simple payback = the first year in which cumulative undiscounted cash flow turns positive, interpolated within the year",
        "break-even price = annual OPEX ÷ annual marketable production",
        "break-even volume = annual OPEX ÷ price"
      ],
      "agronomicAssumptions": [
        "Yield and pack-out scenarios come from the greenhouse-area model or the buyer's own plan."
      ],
      "engineeringAssumptions": [
        "Replacement of covering and equipment is included only where the buyer enters it in OPEX or as a separate cash flow."
      ],
      "limitations": [
        "Arithmetic only. It does not state whether a project is viable, profitable, bankable or fundable — that is a lender's and an investor's assessment.",
        "No market price is supplied. Revenue is only as reliable as the price the buyer enters.",
        "IRR is undefined when cash flows never change sign; the model returns null rather than a misleading number."
      ],
      "sources": [
        {
          "id": "ifc-agribusiness",
          "title": "IFC Agribusiness and Forestry — investment and advisory approach",
          "organization": "International Finance Corporation (IFC)",
          "url": "https://www.ifc.org/en/what-we-do/sector-expertise/agribusiness",
          "published": null,
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/greenhouse-roi-calculator",
        "https://seedmatchgroup.com/greenhouse-payback-calculator",
        "https://seedmatchgroup.com/greenhouse-investment-calculator"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#roi-scenarios"
    },
    {
      "id": "solar-backup",
      "name": "Solar and battery backup screening",
      "version": "1.0.0",
      "purpose": "Give an indicative PV array and battery capacity for a stated load, and separate the critical load from the total load.",
      "applicability": {
        "crops": "Not crop-specific.",
        "productionSystems": "Irrigation pumping, climate equipment, packhouse and support loads.",
        "climate": "Requires a solar resource figure for the site."
      },
      "confidenceLevel": "screening",
      "inputs": [
        {
          "id": "dailyLoadKwh",
          "label": "Average daily electrical load",
          "unit": "kWh/day",
          "valueClass": "buyer-input",
          "validation": "> 0"
        },
        {
          "id": "peakSunHours",
          "label": "Peak sun hours",
          "unit": "h/day",
          "valueClass": "location-derived",
          "validation": "> 0 — state the source and period"
        },
        {
          "id": "performanceRatio",
          "label": "System performance ratio",
          "unit": "fraction",
          "valueClass": "editorial-assumption",
          "validation": "0 < value <= 1",
          "defaultValue": 0.75
        },
        {
          "id": "criticalLoadKwh",
          "label": "Critical load to be covered",
          "unit": "kWh/day",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "autonomyDays",
          "label": "Autonomy requirement",
          "unit": "days",
          "valueClass": "buyer-input",
          "validation": ">= 0"
        },
        {
          "id": "depthOfDischarge",
          "label": "Usable depth of discharge",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 1"
        },
        {
          "id": "roundTripEfficiency",
          "label": "Round-trip efficiency",
          "unit": "fraction",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 1",
          "defaultValue": 0.9
        }
      ],
      "outputs": [
        {
          "id": "pvKwp",
          "label": "Indicative PV capacity",
          "unit": "kWp",
          "valueClass": "calculated-output"
        },
        {
          "id": "annualPvKwh",
          "label": "Indicative annual PV generation",
          "unit": "kWh/year",
          "valueClass": "calculated-output"
        },
        {
          "id": "batteryKwh",
          "label": "Indicative battery capacity",
          "unit": "kWh",
          "valueClass": "calculated-output"
        },
        {
          "id": "criticalCoveragePct",
          "label": "Share of daily load classed as critical",
          "unit": "%",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "PV capacity (kWp) = daily load ÷ (peak sun hours × performance ratio)",
        "annual generation (kWh) = PV capacity × peak sun hours × performance ratio × 365",
        "battery capacity (kWh) = critical load × autonomy days ÷ (depth of discharge × round-trip efficiency)",
        "critical share (%) = critical load ÷ daily load × 100"
      ],
      "agronomicAssumptions": [
        "None."
      ],
      "engineeringAssumptions": [
        "Performance ratio bundles soiling, temperature, wiring, inverter and availability losses into one factor.",
        "Seasonal variation, the hourly load profile, night-time pumping and inverter sizing are not modelled.",
        "Battery degradation over life is not applied; the supplier's warranty terms govern."
      ],
      "limitations": [
        "No claim of energy independence or continuous irrigation. Night-time operation, seasonal resource, storage and backup generation must be checked in a design.",
        "Savings depend on the tariff the buyer enters, which is a location-derived value that must be dated."
      ],
      "sources": [
        {
          "id": "irena-agrisolar",
          "title": "Renewable energy for agri-food systems",
          "organization": "International Renewable Energy Agency (IRENA) / FAO",
          "url": "https://www.irena.org/Publications/2021/Nov/Renewable-Energy-for-Agri-food-Systems",
          "published": "2021",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/solar-roi-calculator",
        "https://seedmatchgroup.com/energy-backup-calculators"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#solar-backup"
    },
    {
      "id": "fertigation-dosing",
      "name": "Fertigation stock solution and injection",
      "version": "1.0.0",
      "purpose": "Convert a nutrient target set by the buyer or their agronomist into a product quantity, a stock-solution volume and an injection requirement.",
      "applicability": {
        "crops": "Any fertigated crop — the nutrient target itself is always an agronomic input.",
        "productionSystems": "Drip fertigation, hydroponic recirculation, substrate systems.",
        "climate": "Not applicable."
      },
      "confidenceLevel": "planning",
      "inputs": [
        {
          "id": "targetPpm",
          "label": "Target nutrient concentration entered by the buyer or agronomist",
          "unit": "mg/L (ppm)",
          "valueClass": "requires-professional-review",
          "validation": "> 0"
        },
        {
          "id": "irrigationVolumeM3",
          "label": "Irrigation volume to be dosed",
          "unit": "m³",
          "valueClass": "calculated-output",
          "validation": "> 0"
        },
        {
          "id": "nutrientContentPct",
          "label": "Nutrient content of the fertilizer",
          "unit": "% w/w",
          "valueClass": "supplier-confirmed",
          "validation": "0 < value <= 100"
        },
        {
          "id": "sourceWaterPpm",
          "label": "Nutrient already present in the source water",
          "unit": "mg/L",
          "valueClass": "requires-professional-review",
          "validation": ">= 0 — from a laboratory analysis",
          "defaultValue": 0
        },
        {
          "id": "stockConcentrationFactor",
          "label": "Stock concentration factor",
          "unit": "×",
          "valueClass": "buyer-input",
          "validation": ">= 1"
        },
        {
          "id": "tankVolumeL",
          "label": "Stock tank volume",
          "unit": "L",
          "valueClass": "buyer-input",
          "validation": "> 0"
        }
      ],
      "outputs": [
        {
          "id": "netPpm",
          "label": "Nutrient to be supplied by fertilizer",
          "unit": "mg/L",
          "valueClass": "calculated-output"
        },
        {
          "id": "productKg",
          "label": "Fertilizer product required",
          "unit": "kg",
          "valueClass": "calculated-output"
        },
        {
          "id": "stockVolumeL",
          "label": "Stock solution volume required",
          "unit": "L",
          "valueClass": "calculated-output"
        },
        {
          "id": "injectionRatio",
          "label": "Injection ratio",
          "unit": "1:x",
          "valueClass": "calculated-output"
        },
        {
          "id": "batches",
          "label": "Stock tank batches",
          "unit": "count",
          "valueClass": "calculated-output"
        }
      ],
      "formula": [
        "net concentration (mg/L) = max(0, target − concentration already in the source water)",
        "nutrient mass (kg) = net concentration (mg/L) × irrigation volume (m³) ÷ 1,000",
        "product mass (kg) = nutrient mass ÷ nutrient content %",
        "stock solution volume (L) = irrigation volume (m³) × 1,000 ÷ stock concentration factor",
        "injection ratio = 1 : stock concentration factor",
        "batches = ceiling(stock volume ÷ tank volume)"
      ],
      "agronomicAssumptions": [
        "The nutrient target is never generated by SeedMatch. It is entered by the buyer or their agronomist for the crop, stage, substrate and water analysis in question."
      ],
      "engineeringAssumptions": [
        "Assumes the fertilizer fully dissolves at the stock concentration and temperature in use; solubility limits are product-specific.",
        "Injector accuracy, pressure and calibration are supplier-confirmed values."
      ],
      "limitations": [
        "Not a fertilizer programme and not a nutrient recommendation.",
        "Does not check chemical compatibility automatically. Keep calcium sources separate from sulphates and phosphates in concentrated stock, handle acids according to local safety requirements, and have the recipe reviewed before mixing.",
        "Source-water nutrients require a current laboratory analysis; without one, the net concentration cannot be trusted."
      ],
      "sources": [
        {
          "id": "fao-water-quality-29",
          "title": "FAO Irrigation and Drainage Paper 29 — Water quality for agriculture",
          "organization": "Food and Agriculture Organization of the United Nations (FAO)",
          "url": "https://www.fao.org/4/t0234e/t0234e00.htm",
          "published": "1985 (rev. 1)",
          "accessed": "2026-08-21",
          "tier": "primary"
        }
      ],
      "usedOn": [
        "https://seedmatchgroup.com/fertigation-calculator",
        "https://seedmatchgroup.com/npk-calculator",
        "https://seedmatchgroup.com/fertilizer-calculator"
      ],
      "reviewedDate": "2026-08-21",
      "reviewedBy": "SeedMatch Group editorial team",
      "documentation": "https://seedmatchgroup.com/calculator-methodology#fertigation-dosing"
    }
  ]
}