Source document

data/analysis/nyc-enrollment-capacity.json

Served verbatim from the project repository. Internal working document conventions apply: documents may reference file paths, branch names, and findings-ledger anchors from the repo.

{
 "meta": {
  "generated_at": "2026-09-09T00:00:00.000",
  "generated_at_basis": "max data_as_of in gkd7-3vk7; a wall clock would churn the committed diff",
  "script": "scripts/analysis/nyc-capacity-packet.ts",
  "years": [
   "2013-14",
   "2014-15",
   "2015-16",
   "2016-17",
   "2017-18",
   "2018-19",
   "2019-20",
   "2021-22",
   "2022-23",
   "2023-24",
   "2024-25",
   "2025-26"
  ],
  "missing_years": [
   "2020-21"
  ],
  "recovered_years": [
   {
    "year": "2014-15",
    "snapshot": "2014-10-31",
    "rows": 2717,
    "source": "SCA PDF, parsed by pipeline_nyc/parse/bluebook.py under a two-parser gate"
   },
   {
    "year": "2019-20",
    "snapshot": "2019-10-31",
    "rows": 3157,
    "source": "SCA PDF, parsed by pipeline_nyc/parse/bluebook.py under a two-parser gate"
   },
   {
    "year": "2022-23",
    "snapshot": "2022-10-31",
    "rows": 3106,
    "source": "SCA PDF, parsed by pipeline_nyc/parse/bluebook.py under a two-parser gate"
   },
   {
    "year": "2023-24",
    "snapshot": "2023-10-31",
    "rows": 3121,
    "source": "SCA PDF, parsed by pipeline_nyc/parse/bluebook.py under a two-parser gate"
   },
   {
    "year": "2024-25",
    "snapshot": "2024-10-31",
    "rows": 3121,
    "source": "SCA PDF, parsed by pipeline_nyc/parse/bluebook.py under a two-parser gate"
   }
  ],
  "panel_note": "Twelve school years, 2013-14 to 2025-26, with one gap: 2020-21, which the SCA never published. Seven come from NYC Open Data; the other five are parsed from the SCA's own PDFs and carry the same check (iv). A time-series figure plots twelve points and breaks the line at 2020-21.",
  "snapshot_year": {
   "2014-10-31": "2014-15",
   "2015-04-27": "2013-14",
   "2017-09-12": "2015-16",
   "2018-01-08": "2016-17",
   "2019-01-31": "2017-18",
   "2019-10-31": "2019-20",
   "2019-12-18": "2018-19",
   "2022-10-31": "2022-23",
   "2023-01-04": "2021-22",
   "2023-10-31": "2023-24",
   "2024-10-31": "2024-25",
   "2026-09-09": "2025-26"
  },
  "snapshot_year_note": "data_as_of identifies the vintage and is not a school year: for the seven Socrata vintages it is a posting date, three to eighteen months after the count, and for the five PDF years it is the audited-register date the report states. The school year is measured against the DOE Demographic Snapshot (doc §2), not read off the date.",
  "universe_note": "School grain covers organizations whose org code resolves to exactly one DBN in the 2019-20 School Locations directory plus every year of the DOE Demographic Snapshot. Building grain covers every building with an enrollment, a target capacity and a published utilization.",
  "capacity_note": "Target capacity is the SCA's planning construct, not a fire-code occupancy limit. It counts Pre-K rooms, each at up to 18 seats full-day or 36 half-day (capped by the room's area ÷ 35 sq ft), and enrollment includes 3-K and Pre-K students, so Pre-K is on both sides of the ratio; the Blue Book's separate PK capacity column restates the Pre-K share and is not added to it. Charters in private space are absent from the Blue Book, so any citywide figure is a DOE-buildings figure.",
  "direction_note": "Every measure here is NEUTRAL. Utilization describes how full a building is; it does not rank the school in it.",
  "quantile_method": "exclusive (the default of Python's statistics.quantiles), which is what produced the percentile table in doc §4.1",
  "sources": [
   {
    "id": "gkd7-3vk7",
    "url": "https://data.cityofnewyork.us/resource/gkd7-3vk7.json",
    "name": "Enrollment Capacity And Utilization Reports (SCA Blue Book)",
    "rows": 20754,
    "role": "enrollment, target capacity and published utilization at both grains, seven school years"
   },
   {
    "id": "sca_bluebook_pdf",
    "url": "https://www.nycsca.org/Community/Capital-Plan-Reports-Data",
    "name": "SCA Enrollment, Capacity & Utilization Report (the annual PDF)",
    "rows": 15222,
    "role": "the five school years Socrata does not carry — 2014-15, 2019-20, 2022-23, 2023-24, 2024-25. Parsed by pipeline_nyc/parse/bluebook.py under a two-parser gate and committed to data/cities/nyc/reference/parsed/"
   },
   {
    "id": "q9xk-w9iv",
    "url": "https://data.cityofnewyork.us/resource/q9xk-w9iv.json",
    "name": "Enrollment Capacity And Utilization Reports - Historical by Organization",
    "rows": 2658,
    "role": "the pre-2014 capacity formula, 2013-14 only — the second denominator"
   },
   {
    "id": "socrata:wg9x-4ke6",
    "url": "https://data.cityofnewyork.us/resource/wg9x-4ke6.json",
    "name": "2019-20 School Locations",
    "dbns_contributed": 2131,
    "role": "DBN universe the org-code join resolves against"
   },
   {
    "id": "socrata:s52a-8aq6",
    "url": "https://data.cityofnewyork.us/resource/s52a-8aq6.json",
    "name": "Demographic Snapshot (school level)",
    "dbns_contributed": 24,
    "role": "DBN universe the org-code join resolves against"
   },
   {
    "id": "socrata:c7ru-d68s",
    "url": "https://data.cityofnewyork.us/resource/c7ru-d68s.json",
    "name": "Demographic Snapshot (school level)",
    "dbns_contributed": 27,
    "role": "DBN universe the org-code join resolves against"
   },
   {
    "id": "infohub:demographic-snapshot-2021-22-to-2025-26",
    "url": "https://infohub.nyced.org/docs/default-source/default-document-library/demographic-snapshot-2021-22-to-2025-26-public.xlsx",
    "name": "Demographic Snapshot (school level)",
    "dbns_contributed": 54,
    "role": "DBN universe the org-code join resolves against"
   }
  ],
  "source_dependency_note": "The InfoHub spreadsheet is the only input without a Socrata copy, and its filename carries its year range, so it rolls annually. When it 404s this script fails rather than rebuilding a shorter universe, because a shorter universe restates every school-grain figure quietly.",
  "qa_verdict": "PASS"
 },
 "universe": {
  "dbns": 2236,
  "org_codes": 2232,
  "ambiguous_org_codes": [
   "K594",
   "K646",
   "M505",
   "M610"
  ],
  "by_year": {
   "2013-14": {
    "organizations": 1819,
    "with_enrollment_and_capacity": 1747,
    "matched": 1741,
    "match_rate": 99.7,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP HS - M",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL -QUEENS",
      "reason": "unknown"
     }
    ]
   },
   "2014-15": {
    "organizations": 1844,
    "with_enrollment_and_capacity": 1759,
    "matched": 1753,
    "match_rate": 99.7,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP HS - M",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL -QUEENS",
      "reason": "unknown"
     }
    ]
   },
   "2015-16": {
    "organizations": 1841,
    "with_enrollment_and_capacity": 1749,
    "matched": 1743,
    "match_rate": 99.7,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP HS - M",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL -QUEENS",
      "reason": "unknown"
     }
    ]
   },
   "2016-17": {
    "organizations": 1809,
    "with_enrollment_and_capacity": 1722,
    "matched": 1716,
    "match_rate": 99.7,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2017-18": {
    "organizations": 1818,
    "with_enrollment_and_capacity": 1721,
    "matched": 1715,
    "match_rate": 99.7,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2018-19": {
    "organizations": 1802,
    "with_enrollment_and_capacity": 1703,
    "matched": 1697,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2019-20": {
    "organizations": 1811,
    "with_enrollment_and_capacity": 1712,
    "matched": 1706,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2021-22": {
    "organizations": 1810,
    "with_enrollment_and_capacity": 1711,
    "matched": 1704,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K891",
      "name": "BROOKLYN NAVY YARD STEM CENTER",
      "reason": "unknown"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2022-23": {
    "organizations": 1802,
    "with_enrollment_and_capacity": 1709,
    "matched": 1702,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K891",
      "name": "BROOKLYN NAVY YARD STEM CENTER",
      "reason": "unknown"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2023-24": {
    "organizations": 1786,
    "with_enrollment_and_capacity": 1710,
    "matched": 1704,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2024-25": {
    "organizations": 1778,
    "with_enrollment_and_capacity": 1708,
    "matched": 1702,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     }
    ]
   },
   "2025-26": {
    "organizations": 1776,
    "with_enrollment_and_capacity": 1705,
    "matched": 1698,
    "match_rate": 99.6,
    "dropped": [
     {
      "org_code": "K418",
      "name": "P.S. 418 - K",
      "reason": "unknown"
     },
     {
      "org_code": "K594",
      "name": "GOTHAM PROFESSIONAL ARTS ACAD - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "K646",
      "name": "ASPIRATIONS DIPLOMA HS - K",
      "reason": "ambiguous"
     },
     {
      "org_code": "M505",
      "name": "EDWARD A. REYNOLDS WEST SIDE HS-M",
      "reason": "ambiguous"
     },
     {
      "org_code": "M610",
      "name": "YOUNG WOMEN'S LEADERSHIP SCHOOL",
      "reason": "ambiguous"
     },
     {
      "org_code": "Q675",
      "name": "RENAISSANCE CHARTER SCHOOL - Q",
      "reason": "unknown"
     },
     {
      "org_code": "X651",
      "name": "BRONX STEAM CENTER",
      "reason": "unknown"
     }
    ]
   }
  },
  "sensitivity_all_orgs": {
   "2013-14": {
    "n": 1747,
    "p10": 55,
    "p25": 71,
    "median": 91,
    "p75": 111,
    "p90": 130.2,
    "share_under_50": 6.4,
    "share_under_33": 2.3,
    "share_over_100": 36.6,
    "sum_over_sum": 93.7,
    "enrollment": 1029304,
    "capacity": 1098912
   },
   "2014-15": {
    "n": 1759,
    "p10": 58,
    "p25": 75,
    "median": 95,
    "p75": 116,
    "p90": 138,
    "share_under_50": 5.8,
    "share_under_33": 1.8,
    "share_over_100": 42.8,
    "sum_over_sum": 96.7,
    "enrollment": 1035737,
    "capacity": 1071285
   },
   "2015-16": {
    "n": 1749,
    "p10": 56,
    "p25": 74,
    "median": 94,
    "p75": 115,
    "p90": 139,
    "share_under_50": 6.6,
    "share_under_33": 1.9,
    "share_over_100": 42,
    "sum_over_sum": 95.9,
    "enrollment": 1035565,
    "capacity": 1080136
   },
   "2016-17": {
    "n": 1722,
    "p10": 55.3,
    "p25": 74,
    "median": 93,
    "p75": 115,
    "p90": 136,
    "share_under_50": 6.3,
    "share_under_33": 1.3,
    "share_over_100": 41.1,
    "sum_over_sum": 95.1,
    "enrollment": 1033699,
    "capacity": 1086567
   },
   "2017-18": {
    "n": 1721,
    "p10": 54,
    "p25": 72,
    "median": 92,
    "p75": 113,
    "p90": 134,
    "share_under_50": 6.7,
    "share_under_33": 1.5,
    "share_over_100": 38.8,
    "sum_over_sum": 93.6,
    "enrollment": 1025875,
    "capacity": 1096551
   },
   "2018-19": {
    "n": 1703,
    "p10": 55,
    "p25": 72,
    "median": 91,
    "p75": 112,
    "p90": 132,
    "share_under_50": 6.8,
    "share_under_33": 1.5,
    "share_over_100": 37.8,
    "sum_over_sum": 92.5,
    "enrollment": 1012342,
    "capacity": 1094322
   },
   "2019-20": {
    "n": 1712,
    "p10": 53,
    "p25": 70,
    "median": 91,
    "p75": 113,
    "p90": 135,
    "share_under_50": 7.5,
    "share_under_33": 1.4,
    "share_over_100": 37.7,
    "sum_over_sum": 92.4,
    "enrollment": 999453,
    "capacity": 1081671
   },
   "2021-22": {
    "n": 1711,
    "p10": 47,
    "p25": 64,
    "median": 83,
    "p75": 102,
    "p90": 121,
    "share_under_50": 11.9,
    "share_under_33": 3.3,
    "share_over_100": 26.8,
    "sum_over_sum": 84.4,
    "enrollment": 916078,
    "capacity": 1085109
   },
   "2022-23": {
    "n": 1709,
    "p10": 45,
    "p25": 62,
    "median": 82,
    "p75": 102,
    "p90": 121,
    "share_under_50": 12.7,
    "share_under_33": 3.6,
    "share_over_100": 26.7,
    "sum_over_sum": 84.1,
    "enrollment": 892909,
    "capacity": 1062324
   },
   "2023-24": {
    "n": 1710,
    "p10": 46,
    "p25": 63,
    "median": 82,
    "p75": 103,
    "p90": 122,
    "share_under_50": 12.3,
    "share_under_33": 3.4,
    "share_over_100": 27.4,
    "sum_over_sum": 84.5,
    "enrollment": 896857,
    "capacity": 1061799
   },
   "2024-25": {
    "n": 1708,
    "p10": 45,
    "p25": 61,
    "median": 80,
    "p75": 101,
    "p90": 120,
    "share_under_50": 13.3,
    "share_under_33": 3.6,
    "share_over_100": 26.2,
    "sum_over_sum": 83.1,
    "enrollment": 889925,
    "capacity": 1071052
   },
   "2025-26": {
    "n": 1705,
    "p10": 42,
    "p25": 58,
    "median": 78,
    "p75": 98,
    "p90": 116,
    "share_under_50": 15.5,
    "share_under_33": 4.8,
    "share_over_100": 21.9,
    "sum_over_sum": 80.3,
    "enrollment": 863190,
    "capacity": 1074906
   }
  },
  "sensitivity_note": "sensitivity_all_orgs drops the DBN filter and keeps every organization with students and seats. It is the same population plus the six or seven unmatched organizations a year, and it is reported so the filter's effect is measurable rather than assumed."
 },
 "by_year": {
  "2013-14": {
   "snapshot": "2015-04-27",
   "school": {
    "n": 1741,
    "p10": 55,
    "p25": 71,
    "median": 91,
    "p75": 111,
    "p90": 130.8,
    "share_under_50": 6.4,
    "share_under_33": 2.4,
    "share_over_100": 36.6,
    "sum_over_sum": 93.7,
    "enrollment": 1026956,
    "capacity": 1096286
   },
   "building": {
    "n": 1311,
    "p10": 61,
    "p25": 77,
    "median": 96,
    "p75": 117,
    "p90": 138,
    "share_under_50": 3.2,
    "share_under_33": 1,
    "share_over_100": 43.9,
    "sum_over_sum": 92.9,
    "enrollment": 1022505,
    "capacity": 1100937,
    "multi_org_buildings": 505,
    "multi_org_share": 38.5
   }
  },
  "2014-15": {
   "snapshot": "2014-10-31",
   "school": {
    "n": 1753,
    "p10": 58,
    "p25": 75,
    "median": 95,
    "p75": 116,
    "p90": 138.6,
    "share_under_50": 5.8,
    "share_under_33": 1.8,
    "share_over_100": 42.8,
    "sum_over_sum": 96.7,
    "enrollment": 1033364,
    "capacity": 1068786
   },
   "building": {
    "n": 1320,
    "p10": 64,
    "p25": 78,
    "median": 100,
    "p75": 123,
    "p90": 144,
    "share_under_50": 3.3,
    "share_under_33": 0.8,
    "share_over_100": 49.2,
    "sum_over_sum": 95.9,
    "enrollment": 1029321,
    "capacity": 1073341,
    "multi_org_buildings": 535,
    "multi_org_share": 40.5
   }
  },
  "2015-16": {
   "snapshot": "2017-09-12",
   "school": {
    "n": 1743,
    "p10": 56,
    "p25": 74,
    "median": 94,
    "p75": 115,
    "p90": 139.6,
    "share_under_50": 6.7,
    "share_under_33": 1.9,
    "share_over_100": 42,
    "sum_over_sum": 95.9,
    "enrollment": 1033210,
    "capacity": 1077597
   },
   "building": {
    "n": 1323,
    "p10": 63,
    "p25": 79,
    "median": 99,
    "p75": 121,
    "p90": 144,
    "share_under_50": 4.5,
    "share_under_33": 1.3,
    "share_over_100": 48.3,
    "sum_over_sum": 95.8,
    "enrollment": 1035660,
    "capacity": 1080888,
    "multi_org_buildings": 540,
    "multi_org_share": 40.8
   }
  },
  "2016-17": {
   "snapshot": "2018-01-08",
   "school": {
    "n": 1716,
    "p10": 55,
    "p25": 74,
    "median": 93,
    "p75": 115,
    "p90": 136,
    "share_under_50": 6.4,
    "share_under_33": 1.3,
    "share_over_100": 41.1,
    "sum_over_sum": 95.1,
    "enrollment": 1031400,
    "capacity": 1084056
   },
   "building": {
    "n": 1320,
    "p10": 61,
    "p25": 78,
    "median": 98,
    "p75": 120,
    "p90": 142,
    "share_under_50": 4.8,
    "share_under_33": 1.1,
    "share_over_100": 47.1,
    "sum_over_sum": 95.1,
    "enrollment": 1033647,
    "capacity": 1087334,
    "multi_org_buildings": 530,
    "multi_org_share": 40.2
   }
  },
  "2017-18": {
   "snapshot": "2019-01-31",
   "school": {
    "n": 1715,
    "p10": 54,
    "p25": 72,
    "median": 92,
    "p75": 113,
    "p90": 134,
    "share_under_50": 6.8,
    "share_under_33": 1.5,
    "share_over_100": 38.8,
    "sum_over_sum": 93.6,
    "enrollment": 1023638,
    "capacity": 1094054
   },
   "building": {
    "n": 1326,
    "p10": 58,
    "p25": 77,
    "median": 97,
    "p75": 119,
    "p90": 138,
    "share_under_50": 5.1,
    "share_under_33": 1.4,
    "share_over_100": 45.7,
    "sum_over_sum": 93.5,
    "enrollment": 1025875,
    "capacity": 1097394,
    "multi_org_buildings": 536,
    "multi_org_share": 40.4
   }
  },
  "2018-19": {
   "snapshot": "2019-12-18",
   "school": {
    "n": 1697,
    "p10": 55,
    "p25": 72,
    "median": 91,
    "p75": 112,
    "p90": 132.2,
    "share_under_50": 6.8,
    "share_under_33": 1.5,
    "share_over_100": 37.8,
    "sum_over_sum": 92.5,
    "enrollment": 1010123,
    "capacity": 1091864
   },
   "building": {
    "n": 1323,
    "p10": 58,
    "p25": 76,
    "median": 95,
    "p75": 116,
    "p90": 134,
    "share_under_50": 5.6,
    "share_under_33": 1.4,
    "share_over_100": 42.9,
    "sum_over_sum": 92.5,
    "enrollment": 1012330,
    "capacity": 1094636,
    "multi_org_buildings": 531,
    "multi_org_share": 40.1
   }
  },
  "2019-20": {
   "snapshot": "2019-10-31",
   "school": {
    "n": 1706,
    "p10": 53,
    "p25": 70,
    "median": 91,
    "p75": 113,
    "p90": 135,
    "share_under_50": 7.5,
    "share_under_33": 1.4,
    "share_over_100": 37.7,
    "sum_over_sum": 92.4,
    "enrollment": 997330,
    "capacity": 1079091
   },
   "building": {
    "n": 1324,
    "p10": 59,
    "p25": 75,
    "median": 95,
    "p75": 117,
    "p90": 137,
    "share_under_50": 4.9,
    "share_under_33": 1.1,
    "share_over_100": 43.6,
    "sum_over_sum": 92.3,
    "enrollment": 999453,
    "capacity": 1082452,
    "multi_org_buildings": 533,
    "multi_org_share": 40.3
   }
  },
  "2021-22": {
   "snapshot": "2023-01-04",
   "school": {
    "n": 1704,
    "p10": 47,
    "p25": 64,
    "median": 83,
    "p75": 102,
    "p90": 121,
    "share_under_50": 11.9,
    "share_under_33": 3.2,
    "share_over_100": 26.8,
    "sum_over_sum": 84.4,
    "enrollment": 913804,
    "capacity": 1082315
   },
   "building": {
    "n": 1327,
    "p10": 51,
    "p25": 67,
    "median": 86,
    "p75": 105,
    "p90": 122.2,
    "share_under_50": 8.6,
    "share_under_33": 2,
    "share_over_100": 30.5,
    "sum_over_sum": 84.3,
    "enrollment": 915272,
    "capacity": 1085873,
    "multi_org_buildings": 543,
    "multi_org_share": 40.9
   }
  },
  "2022-23": {
   "snapshot": "2022-10-31",
   "school": {
    "n": 1702,
    "p10": 45,
    "p25": 62,
    "median": 82,
    "p75": 102,
    "p90": 121,
    "share_under_50": 12.7,
    "share_under_33": 3.5,
    "share_over_100": 26.7,
    "sum_over_sum": 84,
    "enrollment": 890616,
    "capacity": 1059656
   },
   "building": {
    "n": 1323,
    "p10": 50,
    "p25": 65,
    "median": 85,
    "p75": 105,
    "p90": 122,
    "share_under_50": 9.8,
    "share_under_33": 2.3,
    "share_over_100": 30.7,
    "sum_over_sum": 84,
    "enrollment": 892729,
    "capacity": 1062235,
    "multi_org_buildings": 547,
    "multi_org_share": 41.3
   }
  },
  "2023-24": {
   "snapshot": "2023-10-31",
   "school": {
    "n": 1704,
    "p10": 46,
    "p25": 63,
    "median": 82,
    "p75": 102.8,
    "p90": 122,
    "share_under_50": 12.3,
    "share_under_33": 3.4,
    "share_over_100": 27.3,
    "sum_over_sum": 84.5,
    "enrollment": 894829,
    "capacity": 1059363
   },
   "building": {
    "n": 1322,
    "p10": 50,
    "p25": 66,
    "median": 86,
    "p75": 106,
    "p90": 124,
    "share_under_50": 9.3,
    "share_under_33": 2.5,
    "share_over_100": 30.9,
    "sum_over_sum": 84.4,
    "enrollment": 896571,
    "capacity": 1062224,
    "multi_org_buildings": 548,
    "multi_org_share": 41.5
   }
  },
  "2024-25": {
   "snapshot": "2024-10-31",
   "school": {
    "n": 1702,
    "p10": 45,
    "p25": 61,
    "median": 80,
    "p75": 101,
    "p90": 120,
    "share_under_50": 13.3,
    "share_under_33": 3.6,
    "share_over_100": 26.2,
    "sum_over_sum": 83.1,
    "enrollment": 887933,
    "capacity": 1068711
   },
   "building": {
    "n": 1329,
    "p10": 50,
    "p25": 65,
    "median": 84,
    "p75": 103,
    "p90": 124,
    "share_under_50": 9.5,
    "share_under_33": 2.3,
    "share_over_100": 29.1,
    "sum_over_sum": 83.1,
    "enrollment": 889640,
    "capacity": 1071013,
    "multi_org_buildings": 557,
    "multi_org_share": 41.9
   }
  },
  "2025-26": {
   "snapshot": "2026-09-09",
   "school": {
    "n": 1698,
    "p10": 42,
    "p25": 58,
    "median": 78,
    "p75": 98,
    "p90": 116,
    "share_under_50": 15.5,
    "share_under_33": 4.8,
    "share_over_100": 21.9,
    "sum_over_sum": 80.3,
    "enrollment": 861164,
    "capacity": 1072343
   },
   "building": {
    "n": 1334,
    "p10": 47,
    "p25": 62,
    "median": 81,
    "p75": 101,
    "p90": 120,
    "share_under_50": 11.5,
    "share_under_33": 3,
    "share_over_100": 25.3,
    "sum_over_sum": 80.3,
    "enrollment": 862834,
    "capacity": 1074014,
    "multi_org_buildings": 561,
    "multi_org_share": 42.1
   }
  }
 },
 "decomposition": {
  "from": "2018-19",
  "to": "2025-26",
  "grain": "building",
  "continuing_buildings": 1273,
  "buildings_from": 1323,
  "buildings_to": 1334,
  "enrollment_from": 1001480,
  "enrollment_to": 847345,
  "enrollment_change_pct": -15.4,
  "capacity_from": 1082413,
  "capacity_to": 1049116,
  "capacity_change_pct": -3.1,
  "utilization_from_pct": 92.5,
  "utilization_to_pct": 80.8,
  "utilization_change_pp": -11.8,
  "enrollment_effect_pp": -14.2,
  "capacity_effect_pp": 2.5,
  "span_years": 7,
  "span_published_between": [
   "2019-20",
   "2021-22",
   "2022-23",
   "2023-24",
   "2024-25"
  ],
  "span_unpublished": [
   "2020-21"
  ],
  "span_note": "2018-19 and 2025-26 are 7 school years apart and the panel carries 5 of the 6 years in between — every one except 2020-21, which the SCA never published. Four of those intermediate years are not on NYC Open Data and are read from the SCA's own PDFs (pipeline_nyc/parse/bluebook.py). `segments` is the path between the endpoints, so the endpoint figures can be read against it.",
  "segments": [
   {
    "from": "2018-19",
    "to": "2019-20",
    "continuing_buildings": 1316,
    "utilization_from_pct": 92.5,
    "utilization_to_pct": 92.4,
    "utilization_change_pp": -0.1,
    "enrollment_effect_pp": -1.2,
    "capacity_effect_pp": 1,
    "enrollment_change_pct": -1.3,
    "capacity_change_pct": -1.1
   },
   {
    "from": "2019-20",
    "to": "2021-22",
    "continuing_buildings": 1312,
    "utilization_from_pct": 92.3,
    "utilization_to_pct": 84.4,
    "utilization_change_pp": -7.9,
    "enrollment_effect_pp": -7.9,
    "capacity_effect_pp": 0,
    "enrollment_change_pct": -8.6,
    "capacity_change_pct": 0
   },
   {
    "from": "2021-22",
    "to": "2022-23",
    "continuing_buildings": 1314,
    "utilization_from_pct": 84.3,
    "utilization_to_pct": 84.1,
    "utilization_change_pp": -0.2,
    "enrollment_effect_pp": -2.1,
    "capacity_effect_pp": 1.9,
    "enrollment_change_pct": -2.5,
    "capacity_change_pct": -2.3
   },
   {
    "from": "2022-23",
    "to": "2023-24",
    "continuing_buildings": 1317,
    "utilization_from_pct": 84,
    "utilization_to_pct": 84.5,
    "utilization_change_pp": 0.4,
    "enrollment_effect_pp": 0.4,
    "capacity_effect_pp": 0.1,
    "enrollment_change_pct": 0.5,
    "capacity_change_pct": -0.1
   },
   {
    "from": "2023-24",
    "to": "2024-25",
    "continuing_buildings": 1311,
    "utilization_from_pct": 84.5,
    "utilization_to_pct": 83.4,
    "utilization_change_pp": -1.1,
    "enrollment_effect_pp": -0.9,
    "capacity_effect_pp": -0.2,
    "enrollment_change_pct": -1.1,
    "capacity_change_pct": 0.2
   },
   {
    "from": "2024-25",
    "to": "2025-26",
    "continuing_buildings": 1319,
    "utilization_from_pct": 83.1,
    "utilization_to_pct": 80.5,
    "utilization_change_pp": -2.6,
    "enrollment_effect_pp": -2.5,
    "capacity_effect_pp": -0.1,
    "enrollment_change_pct": -3,
    "capacity_change_pct": 0.2
   }
  ],
  "segments_note": "Each segment is computed on the buildings complete in both of ITS endpoint years, so the continuing sets differ from segment to segment and the segment effects are not required to sum to the whole-span effects. The 2019-20 → 2021-22 segment spans the unpublished 2020-21 and is two years wide; every other segment is one.",
  "note": "Capacity fell over the period, which raised utilization; the decline is enrollment. Continuing buildings only, so seats in buildings opened after 2018-19 are outside this.",
  "rounding_note": "The two effects are additive before rounding (unrounded: -14.240 and +2.485 against a total of -11.755). To one decimal they read -14.2 and +2.5, which sum to -11.7 against a printed total of -11.8; the 0.1 pp is display rounding, not a residual term."
 },
 "by_district": {
  "year": "2025-26",
  "grain": "school",
  "statistic": "Σenrollment / Σcapacity within the district, and the share of its schools under 50%",
  "schools_without_a_district": 0,
  "districts": {
   "1": {
    "schools": 32,
    "utilization_pct": 58,
    "share_under_50": 34.4
   },
   "2": {
    "schools": 127,
    "utilization_pct": 80.9,
    "share_under_50": 10.2
   },
   "3": {
    "schools": 46,
    "utilization_pct": 74.7,
    "share_under_50": 17.4
   },
   "4": {
    "schools": 34,
    "utilization_pct": 68.4,
    "share_under_50": 20.6
   },
   "5": {
    "schools": 34,
    "utilization_pct": 59.3,
    "share_under_50": 29.4
   },
   "6": {
    "schools": 47,
    "utilization_pct": 73,
    "share_under_50": 14.9
   },
   "7": {
    "schools": 59,
    "utilization_pct": 70.4,
    "share_under_50": 22
   },
   "8": {
    "schools": 60,
    "utilization_pct": 74.1,
    "share_under_50": 13.3
   },
   "9": {
    "schools": 72,
    "utilization_pct": 68,
    "share_under_50": 20.8
   },
   "10": {
    "schools": 84,
    "utilization_pct": 75.6,
    "share_under_50": 11.9
   },
   "11": {
    "schools": 66,
    "utilization_pct": 81.1,
    "share_under_50": 6.1
   },
   "12": {
    "schools": 51,
    "utilization_pct": 68.4,
    "share_under_50": 25.5
   },
   "13": {
    "schools": 54,
    "utilization_pct": 75.8,
    "share_under_50": 25.9
   },
   "14": {
    "schools": 47,
    "utilization_pct": 66.2,
    "share_under_50": 25.5
   },
   "15": {
    "schools": 58,
    "utilization_pct": 79,
    "share_under_50": 10.3
   },
   "16": {
    "schools": 30,
    "utilization_pct": 45.6,
    "share_under_50": 46.7
   },
   "17": {
    "schools": 54,
    "utilization_pct": 64.3,
    "share_under_50": 38.9
   },
   "18": {
    "schools": 41,
    "utilization_pct": 65,
    "share_under_50": 34.1
   },
   "19": {
    "schools": 56,
    "utilization_pct": 68,
    "share_under_50": 21.4
   },
   "20": {
    "schools": 48,
    "utilization_pct": 103.8,
    "share_under_50": 6.2
   },
   "21": {
    "schools": 46,
    "utilization_pct": 94.4,
    "share_under_50": 8.7
   },
   "22": {
    "schools": 40,
    "utilization_pct": 95.9,
    "share_under_50": 7.5
   },
   "23": {
    "schools": 32,
    "utilization_pct": 58.6,
    "share_under_50": 40.6
   },
   "24": {
    "schools": 64,
    "utilization_pct": 90.2,
    "share_under_50": 3.1
   },
   "25": {
    "schools": 47,
    "utilization_pct": 100.7,
    "share_under_50": 0
   },
   "26": {
    "schools": 40,
    "utilization_pct": 102.4,
    "share_under_50": 2.5
   },
   "27": {
    "schools": 67,
    "utilization_pct": 92.8,
    "share_under_50": 3
   },
   "28": {
    "schools": 50,
    "utilization_pct": 95,
    "share_under_50": 4
   },
   "29": {
    "schools": 47,
    "utilization_pct": 82.9,
    "share_under_50": 2.1
   },
   "30": {
    "schools": 55,
    "utilization_pct": 79.9,
    "share_under_50": 9.1
   },
   "31": {
    "schools": 80,
    "utilization_pct": 95.7,
    "share_under_50": 5
   },
   "32": {
    "schools": 30,
    "utilization_pct": 57.4,
    "share_under_50": 36.7
   }
  },
  "ranked_by_utilization": [
   "16",
   "32",
   "1",
   "23",
   "5",
   "17",
   "18",
   "14",
   "9",
   "19",
   "4",
   "12",
   "7",
   "6",
   "8",
   "3",
   "10",
   "13",
   "15",
   "30",
   "2",
   "11",
   "29",
   "24",
   "27",
   "21",
   "28",
   "31",
   "22",
   "25",
   "26",
   "20"
  ]
 },
 "capacity_definitions": {
  "year": "2013-14",
  "schools_on_both_bases": 1767,
  "schools_with_both_utilizations": 1747,
  "ratio_target_over_historical": {
   "n": 1767,
   "median": 0.917,
   "p10": 0.804,
   "p90": 1.022
  },
  "utilization_gap_pp": {
   "n": 1747,
   "median": 7,
   "p10": -2,
   "p90": 21
  },
  "share_under_50_n": 1747,
  "share_under_50_target": 6.4,
  "share_under_50_historical": 8.8,
  "note": "Same schools, same year, two capacity formulas. The capacity RATIO is over the schools carrying both capacity figures; the utilization gap and both under-50% shares are over the smaller set that also carries a utilization on each basis, which needs an enrollment as well. A figure naming no denominator is therefore ambiguous."
 },
 "qa": {
  "verdict": "PASS",
  "checks": [
   {
    "check": "iv_published_utilization_reconstructed",
    "pass": true,
    "detail": "single-building organizations within 1 pp of the published figure, worst year 100%"
   },
   {
    "check": "panel_years_mapped",
    "pass": true,
    "detail": "12 snapshots, 12 school years; an unmapped vintage throws rather than guessing"
   },
   {
    "check": "join_match_rate",
    "pass": true,
    "detail": "org code → DBN, worst year 99.6% of organizations carrying students and seats"
   },
   {
    "check": "building_row_consistency",
    "pass": true,
    "detail": "0 buildings where two complete rows disagree on enrollment, capacity or utilization"
   },
   {
    "check": "decomposition_additive",
    "pass": true,
    "detail": "unrounded enrollment and capacity effects sum to the total change within 0.0e+0 pp"
   }
  ],
  "utilization_agreement": {
   "2013-14": {
    "singleBuilding": {
     "n": 1446,
     "within1pp": 1446,
     "max": 0
    },
    "splitSite": {
     "n": 301,
     "within1pp": 143,
     "max": 65
    }
   },
   "2014-15": {
    "singleBuilding": {
     "n": 1452,
     "within1pp": 1452,
     "max": 0
    },
    "splitSite": {
     "n": 307,
     "within1pp": 127,
     "max": 204
    }
   },
   "2015-16": {
    "singleBuilding": {
     "n": 1443,
     "within1pp": 1443,
     "max": 0
    },
    "splitSite": {
     "n": 306,
     "within1pp": 123,
     "max": 103
    }
   },
   "2016-17": {
    "singleBuilding": {
     "n": 1437,
     "within1pp": 1437,
     "max": 0
    },
    "splitSite": {
     "n": 285,
     "within1pp": 115,
     "max": 79
    }
   },
   "2017-18": {
    "singleBuilding": {
     "n": 1455,
     "within1pp": 1455,
     "max": 0
    },
    "splitSite": {
     "n": 266,
     "within1pp": 85,
     "max": 70
    }
   },
   "2018-19": {
    "singleBuilding": {
     "n": 1446,
     "within1pp": 1446,
     "max": 0
    },
    "splitSite": {
     "n": 257,
     "within1pp": 90,
     "max": 52
    }
   },
   "2019-20": {
    "singleBuilding": {
     "n": 1455,
     "within1pp": 1455,
     "max": 0
    },
    "splitSite": {
     "n": 257,
     "within1pp": 82,
     "max": 59
    }
   },
   "2021-22": {
    "singleBuilding": {
     "n": 1469,
     "within1pp": 1469,
     "max": 0
    },
    "splitSite": {
     "n": 242,
     "within1pp": 70,
     "max": 64
    }
   },
   "2022-23": {
    "singleBuilding": {
     "n": 1479,
     "within1pp": 1479,
     "max": 0
    },
    "splitSite": {
     "n": 230,
     "within1pp": 66,
     "max": 70
    }
   },
   "2023-24": {
    "singleBuilding": {
     "n": 1481,
     "within1pp": 1481,
     "max": 0
    },
    "splitSite": {
     "n": 229,
     "within1pp": 64,
     "max": 78
    }
   },
   "2024-25": {
    "singleBuilding": {
     "n": 1489,
     "within1pp": 1489,
     "max": 0
    },
    "splitSite": {
     "n": 219,
     "within1pp": 61,
     "max": 79
    }
   },
   "2025-26": {
    "singleBuilding": {
     "n": 1496,
     "within1pp": 1496,
     "max": 0
    },
    "splitSite": {
     "n": 209,
     "within1pp": 51,
     "max": 75
    }
   }
  },
  "multi_org_definition": {
   "reported": "organizations with more than 0 students in the building",
   "alternative": "organizations with a non-null enrollment in the building, zero included",
   "alternative_counts": {
    "2013-14": 514,
    "2014-15": 541,
    "2015-16": 546,
    "2016-17": 538,
    "2017-18": 545,
    "2018-19": 539,
    "2019-20": 543,
    "2021-22": 556,
    "2022-23": 558,
    "2023-24": 559,
    "2024-25": 567,
    "2025-26": 570
   }
  },
  "not_verified": [
   "No second publisher states NYC school capacity; doc §5.2 tests it against the room inventory, which is the same publisher.",
   "2020-21 cannot be checked because the SCA never published it (doc §2).",
   "The five years read from the SCA PDFs are checked against Socrata only by proxy: run on the 2025-26 PDF, the parser reproduces the published 2025-26 extract on every row key and every organization-grain enrollment, target capacity and utilization (doc §2.1). The report prints no zero in the PK-capacity and cluster-room columns, so on about 2% of rows those read absent where Socrata reads 0.",
   "There is no public closure list for NYC, so nothing here supports a predictive claim (doc §6)."
  ]
 }
}