{
  "schema_version": 3,
  "version": "NP176-I21",
  "status": "partial_demonstration_basket_annual_energy_test_not_continuity_model_or_forecast",
  "territory": "one user-defined territory",
  "period": "one user-defined calculation year",
  "population_unit": "million persons",
  "row_status_enum": [
    "unknown",
    "required",
    "na"
  ],
  "formula": "minimum_energy_gwh_s = population_million * minimum_access_fraction_s * minimum_service_quantity_per_served_person_year_s * final_energy_intensity_kwh_per_service_unit_s",
  "total_formula": "total_minimum_energy_gwh = sum(minimum_energy_gwh_s for required rows only)",
  "services": [
    {
      "id": "comfort",
      "service": "temperature comfort",
      "quantity_unit": "m2 serviced floor area per served person-year at a fixed climate and temperature band",
      "intensity_unit": "kWh final energy per m2-year"
    },
    {
      "id": "mobility",
      "service": "passenger mobility",
      "quantity_unit": "passenger-km per served person-year",
      "intensity_unit": "kWh final energy per passenger-km"
    },
    {
      "id": "water",
      "service": "water supply and treatment",
      "quantity_unit": "m3 delivered and treated water per served person-year",
      "intensity_unit": "kWh final energy per m3"
    },
    {
      "id": "lighting",
      "service": "lighting at point of use",
      "quantity_unit": "1000 lumen-hours per served person-year",
      "intensity_unit": "kWh final energy per 1000 lumen-hours"
    }
  ],
  "row_status_policy": {
    "unknown": "Row requirement has not been classified; overall result is UNKNOWN unless a directly observed shortfall is already known elsewhere.",
    "required": "Normative numeric inputs (population, access, quantity and intensity) must be finite and strictly positive; available energy must be finite and non-negative. A zero or blank normative input returns UNKNOWN and cannot create PASS.",
    "na": "Service is explicitly not required for this case and is excluded from aggregation; no coverage percentage is assigned.",
    "no_required_rows": "NO_REQUIRED_SERVICE; the tool cannot infer adequacy when the case contains no required rows."
  },
  "unknown_policy": "Any unknown row status, or any blank, non-finite, zero, negative or out-of-range input in a required row, keeps the annual test UNKNOWN. No global defaults are substituted.",
  "aggregation_rule": "Rows may be summed only after all energy intensities use final kWh per stated physical service unit, all energy allocations cover the same territory and year, and the same energy is not allocated to more than one row.",
  "availability_input": "available_final_energy_gwh_s is annual final energy explicitly allocated to one required service in the same territory and year; it is neither firm capacity nor proof of delivery and may not be double-counted",
  "service_capacity_formula": "service_capacity_units_s = available_final_energy_gwh_s * 1000000 / final_energy_intensity_kwh_per_service_unit_s for a valid required row",
  "coverage_formula": "coverage_percent_s = 100 * available_final_energy_gwh_s / minimum_energy_gwh_s for a valid required row with minimum_energy_gwh_s > 0",
  "shortfall_formulas": {
    "energy": "shortfall_gwh_s = max(0, minimum_energy_gwh_s - available_final_energy_gwh_s)",
    "service_units": "shortfall_units_s = max(0, population_million * 1000000 * minimum_access_fraction_s * minimum_service_quantity_per_served_person_year_s - service_capacity_units_s)"
  },
  "basket_rule": "The minimum K_s supplies only the Boolean answer whether every required row is covered annually. Publish the complete K_s vector, the number of required rows below 100 percent, and absolute energy and service-unit deficits; do not treat the minimum as a complete adequacy scale.",
  "scenario_link": "all valid required rows covered annually -> services=met; one or more valid required rows short -> services=shortfall; unknown status or invalid required input -> services=unknown; no required rows -> services=unknown. A manual scenario override persists until the user explicitly restores calculator synchronisation or resets the scenario.",
  "dynamic_eroi_coupling": "Lower system-boundary-consistent EROI can reduce net energy available for investment, maintenance and replacement; those changes can affect future service capacity and reliability. This causal chain requires dated stock-flow data and is not calculated by the present annual tool.",
  "continuity_required_inputs": [
    "hourly and seasonal demand profiles",
    "firm capacity and availability by technology",
    "network, storage, reserve and delivery constraints",
    "infrastructure condition, maintenance and replacement rates",
    "non-energy constraints including equipment, materials and labour",
    "spatial distribution, access and vulnerable-group outcomes"
  ],
  "excluded_claims": [
    "The result is not an EROI forecast.",
    "The result is not a probability or date of collapse.",
    "Annual K_s greater than or equal to one does not prove continuous ability to deliver a service.",
    "The four rows are a partial demonstration basket, not a complete universal minimum set.",
    "The unit example is an arithmetic test, not an empirical scenario."
  ],
  "method_sources": [
    {
      "id": "D12",
      "url": "https://www.iea.org/data-and-statistics/data-tools/energy-efficiency-indicators-data-explorer"
    },
    {
      "id": "D13",
      "url": "https://doi.org/10.1016/j.gloenvcha.2020.102168"
    }
  ],
  "limitations": [
    "Annual energy coverage does not prove hourly peaks, seasonal adequacy or network deliverability.",
    "Energy-derived service capacity assumes that required equipment, materials, labour and delivery chains are available.",
    "The four included rows are a partial demonstration basket and not a complete universal essential-service set.",
    "User-defined minima are assumptions, not empirical universal thresholds.",
    "EROI, prices and welfare indices are not current-year inputs to the annual coverage calculation.",
    "The tool does not observe population subgroups, spatial inequality or continuity failures."
  ],
  "manual_override_policy": "Calculator status is always displayed. After a manual services selection, later calculator edits do not overwrite that selection; an explicit restore control or scenario reset re-enables automatic synchronisation."
}
