{
  "period": [
    "2021-01-01",
    "2026-10-17"
  ],
  "primary_window": "16:00 previous day through15:00 date label IST,24hour window ending16:00",
  "yearly": {
    "16": [
      {
        "year": 2021,
        "valid_station_days": 11624,
        "display_500": 274,
        "exact_ge500": 273,
        "exact_gt500": 273,
        "dates_with_500_station": 48,
        "dates_with_eligible_AQI": 334,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 8570,
        "jan_aug_500": 135
      },
      {
        "year": 2022,
        "valid_station_days": 2658,
        "display_500": 118,
        "exact_ge500": 118,
        "exact_gt500": 118,
        "dates_with_500_station": 23,
        "dates_with_eligible_AQI": 73,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 0,
        "jan_aug_500": null
      },
      {
        "year": 2023,
        "valid_station_days": 13208,
        "display_500": 326,
        "exact_ge500": 321,
        "exact_gt500": 321,
        "dates_with_500_station": 49,
        "dates_with_eligible_AQI": 365,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 8688,
        "jan_aug_500": 52
      },
      {
        "year": 2024,
        "valid_station_days": 13869,
        "display_500": 377,
        "exact_ge500": 376,
        "exact_gt500": 376,
        "dates_with_500_station": 60,
        "dates_with_eligible_AQI": 366,
        "calendar_dates": 366,
        "jan_aug_valid_station_days": 9235,
        "jan_aug_500": 56
      },
      {
        "year": 2025,
        "valid_station_days": 14008,
        "display_500": 192,
        "exact_ge500": 191,
        "exact_gt500": 191,
        "dates_with_500_station": 48,
        "dates_with_eligible_AQI": 365,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 9235,
        "jan_aug_500": 26
      },
      {
        "year": 2026,
        "valid_station_days": 12330,
        "display_500": 61,
        "exact_ge500": 60,
        "exact_gt500": 60,
        "dates_with_500_station": 14,
        "dates_with_eligible_AQI": 284,
        "calendar_dates": 290,
        "jan_aug_valid_station_days": 10190,
        "jan_aug_500": 61
      }
    ],
    "10": [
      {
        "year": 2021,
        "valid_station_days": 11651,
        "display_500": 287,
        "exact_ge500": 287,
        "exact_gt500": 287,
        "dates_with_500_station": 51,
        "dates_with_eligible_AQI": 334,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 8587,
        "jan_aug_500": 128
      },
      {
        "year": 2022,
        "valid_station_days": 2626,
        "display_500": 112,
        "exact_ge500": 112,
        "exact_gt500": 112,
        "dates_with_500_station": 21,
        "dates_with_eligible_AQI": 72,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 0,
        "jan_aug_500": null
      },
      {
        "year": 2023,
        "valid_station_days": 13217,
        "display_500": 323,
        "exact_ge500": 322,
        "exact_gt500": 322,
        "dates_with_500_station": 47,
        "dates_with_eligible_AQI": 365,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 8693,
        "jan_aug_500": 70
      },
      {
        "year": 2024,
        "valid_station_days": 13891,
        "display_500": 363,
        "exact_ge500": 361,
        "exact_gt500": 361,
        "dates_with_500_station": 59,
        "dates_with_eligible_AQI": 366,
        "calendar_dates": 366,
        "jan_aug_valid_station_days": 9257,
        "jan_aug_500": 49
      },
      {
        "year": 2025,
        "valid_station_days": 14043,
        "display_500": 199,
        "exact_ge500": 197,
        "exact_gt500": 197,
        "dates_with_500_station": 47,
        "dates_with_eligible_AQI": 365,
        "calendar_dates": 365,
        "jan_aug_valid_station_days": 9261,
        "jan_aug_500": 19
      },
      {
        "year": 2026,
        "valid_station_days": 12274,
        "display_500": 53,
        "exact_ge500": 53,
        "exact_gt500": 53,
        "dates_with_500_station": 14,
        "dates_with_eligible_AQI": 282,
        "calendar_dates": 290,
        "jan_aug_valid_station_days": 10142,
        "jan_aug_500": 53
      }
    ]
  },
  "unique_station_ids": 61,
  "sources": [
    {
      "source_file": "CREA_Delhi_Raw_Long_2020.csv",
      "year": 2020,
      "sha256": "08086c8efbf61bcade37161b8c64a2fb3a642d5135704e7d27e786e999471d3a",
      "bytes": 363728966,
      "role": "carry-in from31December2020 only"
    },
    {
      "source_file": "CREA_Delhi_Raw_Long_2021.csv",
      "year": 2021,
      "sha256": "f0e964d05250efeb49cd266faab6280760980bdc1c26bb30332f22d23c21e1d4",
      "bytes": 294094543,
      "role": "primary hourly input"
    },
    {
      "source_file": "CREA_Delhi_Raw_Long_2022.csv",
      "year": 2022,
      "sha256": "3d3e43ec25c2e1e97e06e81de764f6ca00263f920519a683731ebc96acfcdbf3",
      "bytes": 154855987,
      "role": "primary hourly input"
    },
    {
      "source_file": "CREA_Delhi_Raw_Long_2023.csv",
      "year": 2023,
      "sha256": "1ee3d2f8b07a0df7bfd72f68d99a7706b8bdeb407fa2bc2b9928a68e7c6417ce",
      "bytes": 374086254,
      "role": "primary hourly input"
    },
    {
      "source_file": "CREA_Delhi_Raw_Long_2024.csv",
      "year": 2024,
      "sha256": "8b969e9863eb41a483943ac3c5e6c3953f38578a20657c3a0acdf3c6b4fd9283",
      "bytes": 381826365,
      "role": "primary hourly input"
    },
    {
      "source_file": "CREA_Delhi_Raw_Long_2025.csv",
      "year": 2025,
      "sha256": "4b84a34fb001539199e36b8783d934652f6cd620d801a1d7f96f3b4f32991c60",
      "bytes": 393520596,
      "role": "primary hourly input"
    },
    {
      "source_file": "CREA_Delhi_Raw_Long_2026_through_2026-10-17.csv",
      "year": 2026,
      "sha256": "86054e2dc0abd63ae9ea73015194b2c391193b40ce1e4905626d80a0f94a12d0",
      "bytes": 356821606,
      "role": "primary hourly input"
    }
  ],
  "observation_checks": [
    {
      "year": 2020,
      "sha256": "08086c8efbf61bcade37161b8c64a2fb3a642d5135704e7d27e786e999471d3a",
      "rows": 2355034,
      "rows_in_scope_and_period_before_QC": 3102,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 0,
      "valid_unique_station_pollutant_hours": 3102
    },
    {
      "year": 2021,
      "sha256": "f0e964d05250efeb49cd266faab6280760980bdc1c26bb30332f22d23c21e1d4",
      "rows": 1902769,
      "rows_in_scope_and_period_before_QC": 1494529,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 24,
      "valid_unique_station_pollutant_hours": 1494505
    },
    {
      "year": 2022,
      "sha256": "3d3e43ec25c2e1e97e06e81de764f6ca00263f920519a683731ebc96acfcdbf3",
      "rows": 995558,
      "rows_in_scope_and_period_before_QC": 871031,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 19,
      "valid_unique_station_pollutant_hours": 871012
    },
    {
      "year": 2023,
      "sha256": "1ee3d2f8b07a0df7bfd72f68d99a7706b8bdeb407fa2bc2b9928a68e7c6417ce",
      "rows": 2425151,
      "rows_in_scope_and_period_before_QC": 1797576,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 58,
      "valid_unique_station_pollutant_hours": 1797518
    },
    {
      "year": 2024,
      "sha256": "8b969e9863eb41a483943ac3c5e6c3953f38578a20657c3a0acdf3c6b4fd9283",
      "rows": 2475282,
      "rows_in_scope_and_period_before_QC": 1850620,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 63,
      "valid_unique_station_pollutant_hours": 1850557
    },
    {
      "year": 2025,
      "sha256": "4b84a34fb001539199e36b8783d934652f6cd620d801a1d7f96f3b4f32991c60",
      "rows": 2551373,
      "rows_in_scope_and_period_before_QC": 1900219,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 24,
      "valid_unique_station_pollutant_hours": 1900195
    },
    {
      "year": 2026,
      "sha256": "86054e2dc0abd63ae9ea73015194b2c391193b40ce1e4905626d80a0f94a12d0",
      "rows": 2294559,
      "rows_in_scope_and_period_before_QC": 1697072,
      "identical_duplicate_rows_collapsed": 0,
      "conflicting_duplicate_groups": 0,
      "invalid_unique_values_excluded": 4,
      "valid_unique_station_pollutant_hours": 1697068
    }
  ],
  "formula_reference": "Original CPCB AQI-Calculator.xls, Sheet1 D8 to D20/G11; 2015 and2026 copies match",
  "tested_formula_cases": 224,
  "independent_raw_window_checks": 13,
  "limitations": [
    "The period is 1 January 2021 to 17 October 2026. Each primary station-day ends at 16:00 IST and uses hourly labels from 16:00 the previous day through 15:00 on the stated date. Data from 31 December 2020 supply the first window.",
    "The source is CREA's saved compilation of CPCB and DPCC station observations. The calculation selects raw observed records identified as CPCB, station level, India, Delhi and the canonical micrograms-per-cubic-metre unit. Identical duplicate source, station, pollutant and hour values count once. Conflicting duplicates block acceptance.",
    "The existing value checks retain positive values below 1,000 micrograms per cubic metre for particles and gases other than carbon monoxide. Carbon monoxide uses a ceiling of 50,000 micrograms per cubic metre and is converted to milligrams for the calculator. Excluded observations and source fingerprints are retained in the data notes.",
    "PM2.5, PM10, nitrogen dioxide, sulphur dioxide and ammonia use 24-hour means when present. Carbon monoxide and ozone use the largest eight-clock-hour mean wholly inside that window. At least 16 distinct hourly observations are required for a pollutant sub-index. Six of eight valid clock hours is our stated completeness convention for an eight-hour block; it is not quoted as a separate CPCB requirement.",
    "An overall index needs at least three qualifying AQI pollutants, including PM2.5 or PM10. It is the largest pollutant sub-index, using the original CPCB calculator formulas. No unavailable pollutant is filled with zero. This report uses observed concentrations; no weather adjustment or model prediction is substituted.",
    "The network and its availability change. A calendar period with no eligible AQI cannot establish clean air. A capped index does not erase a concentration, and missing observations do not establish how an unobserved value would change an average. Emissions, individual exposure and causation are not estimated here."
  ]
}
