Source document

data/analysis/chalkbeat_verification.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": {
  "purpose": "Claim-by-claim verification of a Chalkbeat draft on NYC chronic absenteeism, recomputed from the primary public source.",
  "primary_source": {
   "name": "NYC DOE InfoHub \u2014 End-of-Year Attendance and Chronic Absenteeism Data (2018-19 through 2024-25)",
   "url": "https://saintrafileprod01.blob.core.windows.net/prd-intra/docs/default-source/large-files/public-school-attendance-results-2019-2025.xlsx",
   "sha256": "d42143b32bd60024029ab0bde655349f74f4c4dde432c28c5c6fb82f8b604c44",
   "bytes": 88082293,
   "sheet": "All Students",
   "definition": "chronically absent = attendance of 90% or less, among students contributing 10+ total days and 1+ present day (workbook NOTES sheet)"
  },
  "universes": {
   "curated": "schools in the repo's published comparison list (data/reference/nysed_instid_crosswalk.json; excludes District 75, District 79, charters, and schools added to the file after 2018-19) \u2014 reproduces the analysis exactly",
   "ex75": "every school in the file except District 75 (DBN prefix '75')",
   "all": "every school in the file (Districts 1-32 + 75)",
   "panel": "ex-D75 schools with a reported rate in BOTH 2018-19 and 2024-25"
  },
  "band_rule": "from the grades a school serves in the same sheet that year (contributing>0): max>=9 & min>=6 -> HS; max>=9 & min<6 -> K12; max 7-8 & min<=2 -> K8; max 7-8 & min>=3 -> MS; max<=6 -> ES (PK not counted in span)",
  "threshold": "'majority chronically absent' = school-wide % Chronically Absent STRICTLY > 50 ('All Grades' row)",
  "verified_at": "2026-08-27"
 },
 "claims": [
  {
   "id": "C1",
   "draft": "Historically, high schoolers have had the highest rates of chronic absenteeism. And while they still do, their rates have remained fairly consistent.",
   "verdict": "CONFIRMED_WITH_NUANCE",
   "computed": {
    "hs_share_by_year": {
     "2018-19": {
      "n": 413,
      "n_gt50": 94,
      "pct_gt50": 22.8
     },
     "2024-25": {
      "n": 413,
      "n_gt50": 101,
      "pct_gt50": 24.5
     }
    },
    "hs_share_all_years_curated": {
     "2018-19": {
      "n": 413,
      "n_gt50": 94,
      "pct_gt50": 22.8
     },
     "2019-20": {
      "n": 414,
      "n_gt50": 59,
      "pct_gt50": 14.3
     },
     "2020-21": {
      "n": 412,
      "n_gt50": 103,
      "pct_gt50": 25.0
     },
     "2021-22": {
      "n": 411,
      "n_gt50": 206,
      "pct_gt50": 50.1
     },
     "2022-23": {
      "n": 411,
      "n_gt50": 138,
      "pct_gt50": 33.6
     },
     "2023-24": {
      "n": 412,
      "n_gt50": 118,
      "pct_gt50": 28.6
     },
     "2024-25": {
      "n": 413,
      "n_gt50": 101,
      "pct_gt50": 24.5
     }
    },
    "per_grade_check": {
     "PK_2018_19": 43.4,
     "grade12_2018_19": 40.2,
     "PK_2024_25": 48.0,
     "grade12_2024_25": 40.2
    }
   },
   "nuance": "True under the draft's own school-level framing: high schools have the largest share of >50%-chronically-absent schools in every year of the file. Three caveats: (1) 'fairly consistent' hides the pandemic spike (roughly half of high schools exceeded 50% in 2021-22) \u2014 'has returned to near pre-pandemic levels' is more accurate; (2) at the per-GRADE level the claim inverts: pre-K has the city's highest grade-level rate in both years, and kindergarten now exceeds grades 9-11; (3) the file only reaches back to 2018-19, so 'historically' means 'pre-pandemic' here."
  },
  {
   "id": "C2",
   "draft": "The majority of students were chronically absent in about 23% of the city's high schools in the 2018-19 school year compared to roughly 25% in 2024-25.",
   "verdict": "CONFIRMED",
   "computed": {
    "curated_band": {
     "2018-19": {
      "n": 413,
      "n_gt50": 94,
      "pct_gt50": 22.8
     },
     "2024-25": {
      "n": 413,
      "n_gt50": 101,
      "pct_gt50": 24.5
     }
    },
    "hs_definition_sensitivity_ex75": {
     "strict_9_12_only": {
      "2018-19": [
       26.8,
       336
      ],
      "2024-25": [
       26.3,
       339
      ]
     },
     "serves_grade_12_secondary": {
      "2018-19": [
       22.8,
       404
      ],
      "2024-25": [
       24.6,
       399
      ]
     }
    }
   },
   "nuance": "22.7% -> 24.9% under the published band classification (94/414 -> 101/406). Robust for any 'serves grade 12' definition; a strict 9-12-only definition gives 26.8% -> 26.3% (a slight decline), so 'roughly a quarter, essentially unchanged' is the most definition-proof phrasing."
  },
  {
   "id": "C3",
   "draft": "Meanwhile, the share of elementary schools where most students were chronically absent tripled for elementary, middle, and K-8 schools.",
   "verdict": "CONFIRMED_WITH_NUANCE",
   "computed": {
    "growth_factors": {
     "ES": 2.78,
     "MS": 3.95,
     "K8": 3.67,
     "combined_ES_MS_K8": 3.08,
     "combined_counts": "43 -> 130 schools"
    },
    "bands": {
     "2018-19": {
      "ES": {
       "n": 662,
       "n_gt50": 30,
       "pct_gt50": 4.5
      },
      "K8": {
       "n": 133,
       "n_gt50": 8,
       "pct_gt50": 6.0
      },
      "HS": {
       "n": 413,
       "n_gt50": 94,
       "pct_gt50": 22.8
      },
      "MS": {
       "n": 257,
       "n_gt50": 5,
       "pct_gt50": 1.9
      },
      "K12": {
       "n": 4,
       "n_gt50": 0,
       "pct_gt50": 0.0
      }
     },
     "2024-25": {
      "ES": {
       "n": 659,
       "n_gt50": 83,
       "pct_gt50": 12.6
      },
      "K8": {
       "n": 127,
       "n_gt50": 28,
       "pct_gt50": 22.0
      },
      "HS": {
       "n": 413,
       "n_gt50": 101,
       "pct_gt50": 24.5
      },
      "MS": {
       "n": 247,
       "n_gt50": 19,
       "pct_gt50": 7.7
      },
      "K12": {
       "n": 4,
       "n_gt50": 0,
       "pct_gt50": 0.0
      }
     }
    }
   },
   "nuance": "The combined elementary+middle+K-8 group tripled exactly (43 -> 130 schools >50%, x3.0), and middle and K-8 each more than tripled (x3.6-4.0 and x3.7 across band rules) \u2014 but elementary alone grew x2.8 (30 -> 83; 4.7% -> 13.0% of schools), short of tripling. Suggested wording: 'roughly tripled across elementary, middle and K-8 schools' or 'nearly tripled for elementary schools and more than tripled for middle and K-8 schools'."
  },
  {
   "id": "C4",
   "draft": "In all, across the city, the number of schools with a majority of students who are chronically absent jumped from 137 pre-pandemic to 231 in 2024-25.",
   "verdict": "CONFIRMED_WITH_NUANCE",
   "computed": {
    "curated": {
     "2018-19": {
      "n": 1469,
      "n_gt50": 137,
      "pct_gt50": 9.3,
      "n_ge50": 137
     },
     "2024-25": {
      "n": 1450,
      "n_gt50": 231,
      "pct_gt50": 15.9,
      "n_ge50": 236
     }
    },
    "ex75": {
     "2018-19": {
      "n": 1471,
      "n_gt50": 137,
      "pct_gt50": 9.3,
      "n_ge50": 137
     },
     "2024-25": {
      "n": 1499,
      "n_gt50": 250,
      "pct_gt50": 16.7,
      "n_ge50": 255
     }
    },
    "all_districts": {
     "2018-19": {
      "n": 1526,
      "n_gt50": 168,
      "pct_gt50": 11.0,
      "n_ge50": 168
     },
     "2024-25": {
      "n": 1559,
      "n_gt50": 298,
      "pct_gt50": 19.1,
      "n_ge50": 303
     }
    },
    "balanced_panel": {
     "2018-19": {
      "n": 1450,
      "n_gt50": 129,
      "pct_gt50": 8.9,
      "n_ge50": 129
     },
     "2024-25": {
      "n": 1450,
      "n_gt50": 231,
      "pct_gt50": 15.9,
      "n_ge50": 236
     }
    },
    "d75_only_2024_25": {
     "n": 60,
     "n_gt50": 48
    },
    "schools_at_exactly_50_in_2024_25": [
     "02M534",
     "04M372",
     "13K270",
     "13K351",
     "19K409"
    ],
    "peak_2021_22_ex75": {
     "n": 1474,
     "n_gt50": 525,
     "pct_gt50": 35.6,
     "n_ge50": 531
    }
   },
   "nuance": "137 -> 231 reproduces exactly under the analysis's fixed comparison set (the published school list; 2018-19's 137 equals the full ex-District-75 count that year). The jump is robust in every universe (~1.7-1.8x) but the 2024-25 LEVEL depends on it: 250 counting all non-D75 schools in the file (the comparison set omits Pre-K centers and schools added to the file after 2018-19), 298 including District 75 \u2014 where 48 of 60 schools exceed 50%. A balanced same-schools panel gives 129 -> 231. Recommend a methods note naming the exclusions (District 75 special education, District 79/charters \u2014 never in this file \u2014 and schools added to the file after 2018-19), and note the counts have FALLEN every year since the 2021-22 peak (525 ex-D75), so 'driving up' is true only against the pre-pandemic baseline. 5 schools sit at exactly 50.0% in 2024-25, so keep the strict 'more than half' wording."
  },
  {
   "id": "C5",
   "draft": "pre-kindergartners were chronically absent most often, with 48% of the city's youngest students missing school",
   "verdict": "CONFIRMED_WITH_NUANCE",
   "computed": {
    "PK_ex75": 48.0,
    "PK_incl_d75": 48.2,
    "PK_denominator_ex75": 32580,
    "full_curve_2024_25_ex75": {
     "PK": 48.0,
     "0K": 37.8,
     "1": 33.2,
     "2": 30.6,
     "3": 28.1,
     "4": 27.3,
     "5": 26.6,
     "6": 26.6,
     "7": 28.7,
     "8": 31.2,
     "9": 33.6,
     "10": 33.7,
     "11": 31.5,
     "12": 40.2
    }
   },
   "nuance": "PK is the highest grade at 48.0-48.2% under every aggregation tried. If anything an undercount: FERPA-suppressed District Pre-K Centers (recoverable from their own school-total rows) would push it to roughly 51%. 'Missing school' should read 'chronically absent \u2014 missing at least 10% of enrolled school days'; note this file covers public-school pre-K programs only."
  },
  {
   "id": "C6",
   "draft": "High school seniors had the next highest rate of chronic absenteeism (40%)",
   "verdict": "CONFIRMED",
   "computed": {
    "grade12_ex75": 40.2,
    "grade12_incl_d75": 41.6,
    "ordering_2024_25_ex75": [
     "PK",
     "12",
     "0K",
     "10",
     "9",
     "1",
     "11",
     "8",
     "2",
     "7",
     "3",
     "4",
     "5",
     "6"
    ]
   },
   "nuance": "40.1% excluding District 75 (41.6% including it); the ordering PK > grade 12 > K is robust to every aggregation choice tried. Transfer high schools are excluded from the school-level file, so the senior rate is mildly understated either way."
  },
  {
   "id": "C7",
   "draft": "followed by kindergarten \u2014 which is also not mandatory \u2014 at about 38%",
   "verdict": "NUMBER_CONFIRMED_FACT_INCORRECT",
   "computed": {
    "K_ex75": 37.8,
    "K_incl_d75": 38.7
   },
   "nuance": "The 38% is right (37.8% ex-D75 / 38.7% incl). But 'not mandatory' is INCORRECT for NYC: kindergarten has been mandatory for five-year-olds since 2013-14 (Ch. 157, Laws of 2012, amending Education Law 3205(2)(c); Chancellor's Regulation A-101: children who turn 5 'are required to attend and must be admitted to kindergarten'), with a parental election to delay entry to first grade at age 6 and private/homeschool exemptions. See the k_mandatory_factcheck annex for sources. Suggested fix: drop the clause or say 'mandatory only since 2013, and parents can opt to wait until first grade'."
  },
  {
   "id": "C8",
   "draft": "Grades 5 and 6 saw the lowest rates at about 27%.",
   "verdict": "CONFIRMED_WITH_NUANCE",
   "computed": {
    "grade5_ex75": 26.6,
    "grade6_ex75": 26.6,
    "grade4_ex75": 27.3
   },
   "nuance": "26.6% and 26.7% (ex-D75), the two lowest grades under the student-weighted aggregation the analysis uses; grade 4 is a narrow 0.6-0.7pp above them \u2014 a gap that survives even worst-case FERPA-suppression bounds, though only by ~0.1pp \u2014 and under unweighted school-averaging the lowest pair is 5 and 4. 'Grades 4-6 saw the lowest rates, around 27%' is bulletproof."
  },
  {
   "id": "C9",
   "draft": "Still the rates were significantly higher for pre-K - 8 compared to pre-pandemic years",
   "verdict": "CONFIRMED",
   "computed": {
    "per_grade_delta_pp_ex75": {
     "PK": 4.6,
     "0K": 6.3,
     "1": 7.6,
     "2": 7.9,
     "3": 7.1,
     "4": 7.6,
     "5": 7.3,
     "6": 8.5,
     "7": 8.9,
     "8": 8.1,
     "9": 4.4,
     "10": 3.3,
     "11": 3.4,
     "12": 0.0
    },
    "pk_same_school_panel": {
     "2018-19": 43.2,
     "2024-25": 48.3
    },
    "curve_2018_19_ex75": {
     "PK": 43.4,
     "0K": 31.5,
     "1": 25.6,
     "2": 22.7,
     "3": 21.0,
     "4": 19.7,
     "5": 19.3,
     "6": 18.1,
     "7": 19.8,
     "8": 23.1,
     "9": 29.2,
     "10": 30.4,
     "11": 28.1,
     "12": 40.2
    }
   },
   "nuance": "Every grade PK-8 is up 4.6-8.9pp vs 2018-19; robust to universe. PK's raw delta (+4.6pp) spans a universe change (District Pre-K Centers enter the file in 2022-23), but the same-schools panel still rises +5.0pp, so the increase is real."
  },
  {
   "id": "C10",
   "draft": "while the rate for high school seniors was essentially flat from before the pandemic.",
   "verdict": "CONFIRMED_WITH_NUANCE",
   "computed": {
    "grade12": {
     "2018-19": 40.2,
     "2024-25": 40.2
    },
    "grades_9_10_11_delta_pp": {
     "9": 4.4,
     "10": 3.3,
     "11": 3.4
    }
   },
   "nuance": "Exactly right for seniors: 40.2% -> 40.1% (ex-D75). But flatness is unique to grade 12 \u2014 grades 9, 10 and 11 each rose 3.3-4.4pp \u2014 so avoid generalizing to 'high schoolers'."
  },
  {
   "id": "W1",
   "draft": "Digging deeper into student-level data...",
   "verdict": "WORDING_FIX",
   "computed": {},
   "nuance": "The source is school-by-grade AGGREGATE data (DOE-published counts per school per grade), not student-level microdata. Say 'grade-level data'."
  }
 ],
 "tables": {
  "tail_by_universe_and_year": {
   "all": {
    "2018-19": {
     "n": 1526,
     "n_gt50": 168,
     "pct_gt50": 11.0,
     "n_ge50": 168
    },
    "2019-20": {
     "n": 1527,
     "n_gt50": 107,
     "pct_gt50": 7.0,
     "n_ge50": 111
    },
    "2020-21": {
     "n": 1530,
     "n_gt50": 245,
     "pct_gt50": 16.0,
     "n_ge50": 246
    },
    "2021-22": {
     "n": 1529,
     "n_gt50": 578,
     "pct_gt50": 37.8,
     "n_ge50": 584
    },
    "2022-23": {
     "n": 1554,
     "n_gt50": 400,
     "pct_gt50": 25.7,
     "n_ge50": 406
    },
    "2023-24": {
     "n": 1558,
     "n_gt50": 346,
     "pct_gt50": 22.2,
     "n_ge50": 350
    },
    "2024-25": {
     "n": 1559,
     "n_gt50": 298,
     "pct_gt50": 19.1,
     "n_ge50": 303
    }
   },
   "ex75": {
    "2018-19": {
     "n": 1471,
     "n_gt50": 137,
     "pct_gt50": 9.3,
     "n_ge50": 137
    },
    "2019-20": {
     "n": 1472,
     "n_gt50": 77,
     "pct_gt50": 5.2,
     "n_ge50": 81
    },
    "2020-21": {
     "n": 1475,
     "n_gt50": 209,
     "pct_gt50": 14.2,
     "n_ge50": 210
    },
    "2021-22": {
     "n": 1474,
     "n_gt50": 525,
     "pct_gt50": 35.6,
     "n_ge50": 531
    },
    "2022-23": {
     "n": 1495,
     "n_gt50": 350,
     "pct_gt50": 23.4,
     "n_ge50": 356
    },
    "2023-24": {
     "n": 1499,
     "n_gt50": 296,
     "pct_gt50": 19.7,
     "n_ge50": 300
    },
    "2024-25": {
     "n": 1499,
     "n_gt50": 250,
     "pct_gt50": 16.7,
     "n_ge50": 255
    }
   },
   "curated": {
    "2018-19": {
     "n": 1469,
     "n_gt50": 137,
     "pct_gt50": 9.3,
     "n_ge50": 137
    },
    "2019-20": {
     "n": 1470,
     "n_gt50": 77,
     "pct_gt50": 5.2,
     "n_ge50": 81
    },
    "2020-21": {
     "n": 1465,
     "n_gt50": 205,
     "pct_gt50": 14.0,
     "n_ge50": 206
    },
    "2021-22": {
     "n": 1463,
     "n_gt50": 520,
     "pct_gt50": 35.5,
     "n_ge50": 526
    },
    "2022-23": {
     "n": 1462,
     "n_gt50": 332,
     "pct_gt50": 22.7,
     "n_ge50": 338
    },
    "2023-24": {
     "n": 1459,
     "n_gt50": 277,
     "pct_gt50": 19.0,
     "n_ge50": 281
    },
    "2024-25": {
     "n": 1450,
     "n_gt50": 231,
     "pct_gt50": 15.9,
     "n_ge50": 236
    }
   },
   "panel": {
    "2018-19": {
     "n": 1450,
     "n_gt50": 129,
     "pct_gt50": 8.9,
     "n_ge50": 129
    },
    "2019-20": {
     "n": 1450,
     "n_gt50": 71,
     "pct_gt50": 4.9,
     "n_ge50": 74
    },
    "2020-21": {
     "n": 1450,
     "n_gt50": 204,
     "pct_gt50": 14.1,
     "n_ge50": 205
    },
    "2021-22": {
     "n": 1450,
     "n_gt50": 513,
     "pct_gt50": 35.4,
     "n_ge50": 519
    },
    "2022-23": {
     "n": 1450,
     "n_gt50": 325,
     "pct_gt50": 22.4,
     "n_ge50": 331
    },
    "2023-24": {
     "n": 1450,
     "n_gt50": 271,
     "pct_gt50": 18.7,
     "n_ge50": 275
    },
    "2024-25": {
     "n": 1450,
     "n_gt50": 231,
     "pct_gt50": 15.9,
     "n_ge50": 236
    }
   }
  },
  "band_tail_2018_19_and_2024_25_curated": {
   "2018-19": {
    "ES": {
     "n": 662,
     "n_gt50": 30,
     "pct_gt50": 4.5
    },
    "K8": {
     "n": 133,
     "n_gt50": 8,
     "pct_gt50": 6.0
    },
    "HS": {
     "n": 413,
     "n_gt50": 94,
     "pct_gt50": 22.8
    },
    "MS": {
     "n": 257,
     "n_gt50": 5,
     "pct_gt50": 1.9
    },
    "K12": {
     "n": 4,
     "n_gt50": 0,
     "pct_gt50": 0.0
    }
   },
   "2024-25": {
    "ES": {
     "n": 659,
     "n_gt50": 83,
     "pct_gt50": 12.6
    },
    "K8": {
     "n": 127,
     "n_gt50": 28,
     "pct_gt50": 22.0
    },
    "HS": {
     "n": 413,
     "n_gt50": 101,
     "pct_gt50": 24.5
    },
    "MS": {
     "n": 247,
     "n_gt50": 19,
     "pct_gt50": 7.7
    },
    "K12": {
     "n": 4,
     "n_gt50": 0,
     "pct_gt50": 0.0
    }
   }
  },
  "per_grade_citywide": {
   "2018-19_ex75": {
    "PK": 43.4,
    "0K": 31.5,
    "1": 25.6,
    "2": 22.7,
    "3": 21.0,
    "4": 19.7,
    "5": 19.3,
    "6": 18.1,
    "7": 19.8,
    "8": 23.1,
    "9": 29.2,
    "10": 30.4,
    "11": 28.1,
    "12": 40.2
   },
   "2024-25_ex75": {
    "PK": 48.0,
    "0K": 37.8,
    "1": 33.2,
    "2": 30.6,
    "3": 28.1,
    "4": 27.3,
    "5": 26.6,
    "6": 26.6,
    "7": 28.7,
    "8": 31.2,
    "9": 33.6,
    "10": 33.7,
    "11": 31.5,
    "12": 40.2
   },
   "2024-25_incl_d75": {
    "PK": 48.2,
    "0K": 38.7,
    "1": 34.3,
    "2": 31.7,
    "3": 29.1,
    "4": 28.3,
    "5": 27.6,
    "6": 27.7,
    "7": 29.5,
    "8": 32.0,
    "9": 34.6,
    "10": 34.4,
    "11": 32.2,
    "12": 41.6
   },
   "denominators_2024_25_ex75": {
    "PK": 32580,
    "0K": 57958,
    "1": 58850,
    "2": 58554,
    "3": 59940,
    "4": 59181,
    "5": 59389,
    "6": 53936,
    "7": 60313,
    "8": 59598,
    "9": 75048,
    "10": 71441,
    "11": 62833,
    "12": 59557
   }
  },
  "suppressed_grade_cells": {
   "2018-19": {
    "PK": 33,
    "0K": 4,
    "1": 1,
    "2": 5,
    "3": 3,
    "4": 2,
    "5": 14,
    "6": 65,
    "7": 19,
    "8": 28,
    "9": 63,
    "10": 8,
    "11": 4,
    "12": 7
   },
   "2024-25": {
    "PK": 47,
    "0K": 26,
    "1": 4,
    "2": 8,
    "3": 5,
    "4": 3,
    "5": 24,
    "6": 67,
    "7": 12,
    "8": 31,
    "9": 54,
    "10": 4,
    "11": 8,
    "12": 13
   }
  }
 },
 "annex": {
  "_meta": {
   "generated": "2026-08-27",
   "role": "Research annex for the Chalkbeat draft verification: content that comes from live web checks and legal research (rather than from the attendance file itself). Assembled from a six-agent verification run; every URL was requested on the date above and its HTTP status recorded. Merged into chalkbeat_verification.json by verify_chalkbeat_claims.py."
  },
  "primary_source_file": {
   "bytes": 88082293,
   "sha256": "d42143b32bd60024029ab0bde655349f74f4c4dde432c28c5c6fb82f8b604c44",
   "public_download_url": "https://saintrafileprod01.blob.core.windows.net/prd-intra/docs/default-source/large-files/public-school-attendance-results-2019-2025.xlsx",
   "download_url_head_check": {
    "http_status": 200,
    "content_length": 88082293,
    "content_length_matches_local_file": true,
    "last_modified": "Fri, 19 Dec 2025 16:16:15 GMT",
    "content_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
    "checked_at": "2026-08-27"
   },
   "infohub_page": {
    "title": "End-of-Year Attendance and Chronic Absenteeism Data",
    "url": "https://infohub.nyced.org/reports/students-and-schools/school-quality/information-and-data-overview/end-of-year-attendance-and-chronic-absenteeism-data",
    "http_status": 200,
    "checked_at": "2026-08-27",
    "confirmed": "Page H1 is 'End-of-Year Attendance and Chronic Absenteeism Data' and it links the exact file URL above (public-school-attendance-results-2019-2025.xlsx)."
   },
   "infohub_parent_page": {
    "url": "https://infohub.nyced.org/reports/students-and-schools/school-quality/information-and-data-overview",
    "http_status": 200,
    "checked_at": "2026-08-27"
   },
   "verify_this_file_yourself": [
    "1. Download: curl -L -o nyc_attendance.xlsx 'https://saintrafileprod01.blob.core.windows.net/prd-intra/docs/default-source/large-files/public-school-attendance-results-2019-2025.xlsx' (about 88 MB; linked from the InfoHub page above).",
    "2. Hash: sha256sum nyc_attendance.xlsx  ->  must print d42143b32bd60024029ab0bde655349f74f4c4dde432c28c5c6fb82f8b604c44 (and the file must be exactly 88,082,293 bytes).",
    "3. Open the 'All Students' sheet (75,330 data rows), filter DBN = the school's code, Grade = 'All Grades', Category = 'All Students', Year = '2018-19' or '2024-25', and read '% Chronically Absent' and '# Contributing 10+ Total Days and 1+ Pres Day'. Note the denominator column's full header includes 'and 1+ Pres Day'."
   ]
  },
  "source_conventions": {
   "infohub_xlsx": [
    "Chronic absenteeism = attendance of 90% or less; denominator = students contributing 10+ total days and 1+ present day (column '# Contributing 10+ Total Days and 1+ Pres Day').",
    "Universe: Districts 1-32 plus District 75; D75 short-term-stay schools were ADDED starting 2022-23, so citywide trend comparisons to earlier years shift slightly.",
    "FERPA: cells covering 5 or fewer students appear as the string 's'; the file also applies COMPLEMENTARY suppression - e.g. at I.S. 61 (24Q061) grades 5 AND 6 are both 's' in 2024-25 even though grade 6 is large, so grade rows cannot always be summed to rebuild All Grades.",
    "'All Grades' includes students missing a grade level, so grade rows may not sum exactly to it.",
    "2019-20 covers only Sept 2019 - Mar 13 2020 (COVID); do not compare it as a full year.",
    "% values in the file carry full precision (e.g. 54.71478653); public pages round to 1 decimal or whole numbers."
   ],
   "nysed_data_site": {
    "url_pattern": "https://data.nysed.gov/essa.php?year=YYYY&instid=INSTID (instid from crosswalk.json). YYYY is the SPRING year of the school year: year=2025 -> SY 2024-25.",
    "one_click_chronic_report": "Append &createreport=1&HSchronic=1 for grades 9-12 schools, or &createreport=1&EMchronic=1 for elementary/middle schools. The resulting page server-renders a 'Chronic Absenteeism Rate' table (curl-visible; confirmed for all 8 schools today).",
    "latest_year_visible": "year=2025 (SY 2024-25) is live as of 2026-08-27 - the state has caught up to the InfoHub file's latest year. WARNING: an out-of-range year (e.g. year=2026) still returns HTTP 200 but silently falls back to an old report (title showed '2018') - always confirm the year shown in the page <title>/banner.",
    "what_to_expect": [
     "Grades 9-12 high schools: NYSED should match the InfoHub All Grades row almost exactly - Stuyvesant matched EXACTLY (3,268 / 267 / 8.2%); Transit Tech and DeWitt Clinton were within 1-3 students.",
     "Elementary/middle schools: NYSED's indicator covers grades 1-8 ONLY (no PK, no kindergarten), and uses state SIRS enrollment-day rules, so it will NOT equal the InfoHub All Grades figure. Denominators track the InfoHub grades 1-8 sum within ~1-2%, but rates can differ by roughly 1-4 percentage points (see per-school comparison notes).",
     "NYSED rounds to 1 decimal; race/subgroup rows under ~5 students show em-dashes."
    ]
   },
   "nyc_school_quality_snapshot": {
    "page_pattern": "https://tools.nycenet.edu/snapshot/2025/DBN/ (2025 = SY 2024-25).",
    "js_rendered_warning": "The page is a Vue single-page app: EVERY path returns HTTP 200 with the same ~1.5 KB shell (even invalid DBNs), so an HTTP 200 does NOT confirm the school exists and curl cannot see the figures - open it in a browser.",
    "data_api_pattern": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/DBN/TYPE where TYPE is HS (grades 9-12) or EMS (elementary/middle). Returns JSON; the wrong TYPE returns an empty list []. This is the curl-checkable route.",
    "metric_convention": "The Snapshot reports the INVERSE metric - 'percent of students who were NOT chronically absent' (varname val_chronic_absent_*_all) - EXCLUDES PK, and rounds to a whole percent. Expected value = round(100 - [InfoHub rate recomputed without PK]). Recompute the PK-excluded rate as (All-Grades # chronically absent minus PK # chronically absent) / (All-Grades denominator minus PK denominator).",
    "observed_fit": "7 of 8 schools matched that expectation EXACTLY today; 29Q116 was off by 1 point (48% expected vs 49% shown - rounding/universe edge). So: expect exact agreement or at most +/-1 point, and remember Snapshot 45% = 55% chronically absent.",
    "pavg_note": "'pavg_chronic_absent_*_all' in the same JSON is the comparison-group average, not this school's value - do not confuse the two."
   }
  },
  "citywide_reference": {
   "school_level_median_pct_chronically_absent_2024_25_excl_D75": 35.8,
   "note": "Median across schools' All-Grades rates (not student-weighted); used to pick slot (f)."
  },
  "spot_check_schools": [
   {
    "slot": "a_large_hs_over50",
    "why_chosen": "(a) Large high school over 50% chronically absent in 2024-25 (CTE school, East New York, Brooklyn; also crossed the 50% line since 2018-19)",
    "dbn": "19K615",
    "school_name": "Transit Tech Career and Technical Education High School",
    "school_name_as_in_xlsx": "Transit Tech Career and Technical Education High S",
    "borough": "Brooklyn",
    "grades_served_2024_25": [
     "9",
     "10",
     "11",
     "12"
    ],
    "nysed_ids": {
     "beds": "331900011615",
     "instid": "800000043461",
     "nysed_name": "TRANSIT TECH CAREER AND TECHNICAL"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "19K615",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 45.773,
      "n_chronically_absent": 314,
      "n_contributing_10plus_days": 686
     },
     "2024-25": {
      "pct_chronically_absent": 54.715,
      "n_chronically_absent": 470,
      "n_contributing_10plus_days": 859
     },
     "change_2019_to_2025_pp": 8.9
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000043461",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000043461&createreport=1&HSchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 858,
       "ca": 471,
       "rate": "54.9%"
      },
      "comparison_to_infohub": "NYSED 858/471/54.9% vs InfoHub All Grades 859/470/54.7% - agrees within 1 student / 0.2 points (grades 9-12 school, so the universes align)."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/19K615/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/19K615/HS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "HS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_hs_all": "55%",
       "val_chronic_absent_hs_all": "45%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 54.71,
     "expected_snapshot_value": "45%",
     "snapshot_value_observed_today": "45%",
     "exact_match": true
    }
   },
   {
    "slot": "b_large_elem_over50",
    "why_chosen": "(b) Large elementary school over 50% chronically absent in 2024-25 (Staten Island, giving all five boroughs coverage across the 8 picks)",
    "dbn": "31R044",
    "school_name": "P.S. 044 Thomas C. Brown",
    "school_name_as_in_xlsx": "P.S. 044 Thomas C. Brown",
    "borough": "Staten Island",
    "grades_served_2024_25": [
     "PK",
     "0K",
     "1",
     "2",
     "3",
     "4",
     "5"
    ],
    "nysed_ids": {
     "beds": "353100010044",
     "instid": "800000042032",
     "nysed_name": "PS 44 THOMAS C BROWN"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "31R044",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 45.283,
      "n_chronically_absent": 384,
      "n_contributing_10plus_days": 848
     },
     "2024-25": {
      "pct_chronically_absent": 58.163,
      "n_chronically_absent": 342,
      "n_contributing_10plus_days": 588
     },
     "change_2019_to_2025_pp": 12.9
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000042032",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000042032&createreport=1&EMchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 426,
       "ca": 244,
       "rate": "57.3%"
      },
      "comparison_to_infohub": "NYSED 426/244/57.3% covers grades 1-5 only. InfoHub grades 1-5 sum is 426/236/55.4% - identical denominator, chronic count differs by 8 students (state vs city day-counting rules). Do NOT compare to the InfoHub All Grades figure (58.2%), which includes PK and K."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/31R044/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/31R044/EMS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "EMS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_ems_all": "62%",
       "val_chronic_absent_ems_all": "45%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 55.42,
     "expected_snapshot_value": "45%",
     "snapshot_value_observed_today": "45%",
     "exact_match": true
    }
   },
   {
    "slot": "c_k8_over50",
    "why_chosen": "(c) K-8 school over 50% chronically absent in 2024-25 (largest K-8 above 50%, southeast Queens)",
    "dbn": "29Q116",
    "school_name": "P.S./I.S. 116 William C. Hughley",
    "school_name_as_in_xlsx": "P.S./I.S. 116 William C. Hughley",
    "borough": "Queens",
    "grades_served_2024_25": [
     "PK",
     "0K",
     "1",
     "2",
     "3",
     "4",
     "5",
     "6",
     "7",
     "8"
    ],
    "nysed_ids": {
     "beds": "342900010116",
     "instid": "800000042492",
     "nysed_name": "PS/IS 116 WILLIAM C HUGHLEY"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "29Q116",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 38.908,
      "n_chronically_absent": 342,
      "n_contributing_10plus_days": 879
     },
     "2024-25": {
      "pct_chronically_absent": 53.312,
      "n_chronically_absent": 499,
      "n_contributing_10plus_days": 936
     },
     "change_2019_to_2025_pp": 14.4
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000042492",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000042492&createreport=1&EMchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 754,
       "ca": 395,
       "rate": "52.4%"
      },
      "comparison_to_infohub": "NYSED 754/395/52.4% covers grades 1-8 only. InfoHub grades 1-8 sum is 769/386/50.2% - within about 2 points. Do NOT compare to the InfoHub All Grades figure (53.3%), which includes PK and K."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/29Q116/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/29Q116/EMS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "EMS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_ems_all": "63%",
       "val_chronic_absent_ems_all": "49%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 51.54,
     "expected_snapshot_value": "48%",
     "snapshot_value_observed_today": "49%",
     "exact_match": false
    }
   },
   {
    "slot": "d_crossed_50",
    "why_chosen": "(d) School that crossed from under 50% (2018-19) to over 50% (2024-25) - dramatic rise from 17.9% to 55.7% at a well-known Kips Bay/Murray Hill elementary",
    "dbn": "02M116",
    "school_name": "P.S. 116 Mary Lindley Murray",
    "school_name_as_in_xlsx": "P.S. 116 Mary Lindley Murray",
    "borough": "Manhattan",
    "grades_served_2024_25": [
     "PK",
     "0K",
     "1",
     "2",
     "3",
     "4",
     "5",
     "6"
    ],
    "nysed_ids": {
     "beds": "310200010116",
     "instid": "800000048388",
     "nysed_name": "PS 116 MARY LINDLEY MURRAY"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "02M116",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 17.944,
      "n_chronically_absent": 96,
      "n_contributing_10plus_days": 535
     },
     "2024-25": {
      "pct_chronically_absent": 55.654,
      "n_chronically_absent": 315,
      "n_contributing_10plus_days": 566
     },
     "change_2019_to_2025_pp": 37.7
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000048388",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000048388&createreport=1&EMchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 365,
       "ca": 200,
       "rate": "54.8%"
      },
      "comparison_to_infohub": "NYSED 365/200/54.8% covers grades 1-6 only. InfoHub unsuppressed grade rows 1-6 sum to 300/167/55.7% but grades 4 and 6 are FERPA-suppressed in the xlsx, so an exact rebuild is impossible from the public file; rates agree within about 1 point."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/02M116/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/02M116/EMS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "EMS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_ems_all": "67%",
       "val_chronic_absent_ems_all": "45%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 55.34,
     "expected_snapshot_value": "45%",
     "snapshot_value_observed_today": "45%",
     "exact_match": true
    }
   },
   {
    "slot": "e_selective_low_anchor",
    "why_chosen": "(e) Selective-admissions low-rate anchor (Stuyvesant): a school where the rate should be LOW; catches sign errors and column mix-ups",
    "dbn": "02M475",
    "school_name": "Stuyvesant High School",
    "school_name_as_in_xlsx": "Stuyvesant High School",
    "borough": "Manhattan",
    "grades_served_2024_25": [
     "9",
     "10",
     "11",
     "12"
    ],
    "nysed_ids": {
     "beds": "310200011475",
     "instid": "800000046741",
     "nysed_name": "STUYVESANT HIGH SCHOOL"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "02M475",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 5.592,
      "n_chronically_absent": 186,
      "n_contributing_10plus_days": 3326
     },
     "2024-25": {
      "pct_chronically_absent": 8.17,
      "n_chronically_absent": 267,
      "n_contributing_10plus_days": 3268
     },
     "change_2019_to_2025_pp": 2.6
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000046741",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000046741&createreport=1&HSchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 3268,
       "ca": 267,
       "rate": "8.2%"
      },
      "comparison_to_infohub": "NYSED 3,268/267/8.2% vs InfoHub All Grades 3,268/267/8.2% - EXACT match on all three numbers (grades 9-12 school)."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/02M475/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/02M475/HS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "HS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_hs_all": "89%",
       "val_chronic_absent_hs_all": "92%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 8.17,
     "expected_snapshot_value": "92%",
     "snapshot_value_observed_today": "92%",
     "exact_match": true
    }
   },
   {
    "slot": "f_typical_elem_near_median",
    "why_chosen": "(f) Large, typical elementary near the 2024-25 citywide school-level median rate (~35.8% across schools, excluding District 75)",
    "dbn": "27Q060",
    "school_name": "P.S. 060 Woodhaven",
    "school_name_as_in_xlsx": "P.S. 060 Woodhaven",
    "borough": "Queens",
    "grades_served_2024_25": [
     "PK",
     "0K",
     "1",
     "2",
     "3",
     "4",
     "5"
    ],
    "nysed_ids": {
     "beds": "342700010060",
     "instid": "800000042966",
     "nysed_name": "PS 60 WOODHAVEN"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "27Q060",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 25.563,
      "n_chronically_absent": 318,
      "n_contributing_10plus_days": 1244
     },
     "2024-25": {
      "pct_chronically_absent": 36.13,
      "n_chronically_absent": 366,
      "n_contributing_10plus_days": 1013
     },
     "change_2019_to_2025_pp": 10.6
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000042966",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000042966&createreport=1&EMchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 713,
       "ca": 249,
       "rate": "34.9%"
      },
      "comparison_to_infohub": "NYSED 713/249/34.9% covers grades 1-5 only. InfoHub grades 1-5 sum is 717/224/31.2% - denominator within 4 students, chronic count ~25 students higher on the state side; expect a gap of up to ~4 points at elementary schools. Do NOT compare to All Grades (36.1%)."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/27Q060/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/27Q060/EMS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "EMS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_ems_all": "67%",
       "val_chronic_absent_ems_all": "67%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 33.18,
     "expected_snapshot_value": "67%",
     "snapshot_value_observed_today": "67%",
     "exact_match": true
    }
   },
   {
    "slot": "g_large_middle_school",
    "why_chosen": "(g) Largest middle school in the file (Corona, Queens) - middle-grades coverage",
    "dbn": "24Q061",
    "school_name": "I.S. 061 Leonardo Da Vinci",
    "school_name_as_in_xlsx": "I.S. 061 Leonardo Da Vinci",
    "borough": "Queens",
    "grades_served_2024_25": [
     "5",
     "6",
     "7",
     "8"
    ],
    "nysed_ids": {
     "beds": "342400010061",
     "instid": "800000043401",
     "nysed_name": "IS 61 LEONARDO DA VINCI"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "24Q061",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 18.24,
      "n_chronically_absent": 431,
      "n_contributing_10plus_days": 2363
     },
     "2024-25": {
      "pct_chronically_absent": 31.475,
      "n_chronically_absent": 717,
      "n_contributing_10plus_days": 2278
     },
     "change_2019_to_2025_pp": 13.2
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000043401",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000043401&createreport=1&EMchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 2255,
       "ca": 754,
       "rate": "33.4%"
      },
      "comparison_to_infohub": "NYSED 2,255/754/33.4% covers grades 5-8. InfoHub grade rows 5 and 6 are FERPA-suppressed (complementary suppression), so the public xlsx cannot rebuild the same subset; the All Grades rate (31.5%, no PK/K at this school) is within about 2 points."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/24Q061/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/24Q061/EMS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "EMS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_ems_all": "70%",
       "val_chronic_absent_ems_all": "69%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 31.47,
     "expected_snapshot_value": "69%",
     "snapshot_value_observed_today": "69%",
     "exact_match": true
    }
   },
   {
    "slot": "g_bronx_hs_improver",
    "why_chosen": "(g) Recognizable Bronx high school whose rate IMPROVED (48.2% down to 29.1%) - checks that the packet is not cherry-picking risers",
    "dbn": "10X440",
    "school_name": "DeWitt Clinton High School",
    "school_name_as_in_xlsx": "DeWitt Clinton High School",
    "borough": "Bronx",
    "grades_served_2024_25": [
     "9",
     "10",
     "11",
     "12"
    ],
    "nysed_ids": {
     "beds": "321000011440",
     "instid": "800000045624",
     "nysed_name": "DEWITT CLINTON HIGH SCHOOL"
    },
    "infohub_xlsx_values": {
     "filter": {
      "sheet": "All Students",
      "DBN": "10X440",
      "Grade": "All Grades",
      "Category": "All Students"
     },
     "2018-19": {
      "pct_chronically_absent": 48.171,
      "n_chronically_absent": 540,
      "n_contributing_10plus_days": 1121
     },
     "2024-25": {
      "pct_chronically_absent": 29.085,
      "n_chronically_absent": 372,
      "n_contributing_10plus_days": 1279
     },
     "change_2019_to_2025_pp": -19.1
    },
    "public_check_urls": {
     "nysed_report_card_landing": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000045624",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "note": "Report Card builder page for SY 2024-25 (year=2025). Tick 'Chronic Absenteeism' and click Build Report, or use the one-click deep link below."
     },
     "nysed_chronic_absenteeism_deep_link": {
      "url": "https://data.nysed.gov/essa.php?year=2025&instid=800000045624&createreport=1&HSchronic=1",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "server_rendered": true,
      "all_students_row_observed_today": {
       "enrolled": 1279,
       "ca": 375,
       "rate": "29.3%"
      },
      "comparison_to_infohub": "NYSED 1,279/375/29.3% vs InfoHub All Grades 1,279/372/29.1% - identical denominator, chronic count differs by 3 students (grades 9-12 school)."
     },
     "nyc_school_quality_snapshot_page": {
      "url": "https://tools.nycenet.edu/snapshot/2025/10X440/",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "js_rendered": true,
      "note": "Returns HTTP 200 with an empty Vue.js shell for ANY path (even invalid DBNs), so curl cannot confirm content; must be opened in a browser. The rendered page shows 'X% of students were NOT chronically absent'."
     },
     "nyc_snapshot_data_api": {
      "url": "https://tools.nycenet.edu/api/v1/data/school/app/snapshot/all/2025/10X440/HS",
      "http_status": 200,
      "checked_at": "2026-08-27",
      "report_type": "HS",
      "chronic_values_observed_today": {
       "pavg_chronic_absent_hs_all": "56%",
       "val_chronic_absent_hs_all": "71%"
      },
      "note": "JSON feed behind the Snapshot page (curl-checkable). 'val_chronic_absent_*_all' = % of this school's students NOT chronically absent; 'pavg_*' = comparison-group average."
     }
    },
    "snapshot_reconciliation": {
     "infohub_2024_25_rate_excluding_PK_pct": 29.09,
     "expected_snapshot_value": "71%",
     "snapshot_value_observed_today": "71%",
     "exact_match": true
    }
   }
  ],
  "url_check_log_summary": {
   "checked_at": "2026-08-27",
   "all_urls_returned": "HTTP 200 (37 URLs: 8 NYSED landings, 8 NYSED deep links, 8 Snapshot pages, 8 Snapshot API calls, InfoHub page, InfoHub parent page, xlsx HEAD; plus data.nysed.gov/profile.php?instid=... also works as an alternate landing).",
   "js_rendered_pages_unconfirmed_by_curl": [
    "https://tools.nycenet.edu/snapshot/2025/DBN/ pages (Vue shell; content verified instead via the data API endpoints, which are server-side JSON)."
   ],
   "not_working": [
    "https://data.nysed.gov/chronicabsenteeism.php?... -> 404 (no such endpoint; use essa.php with the createreport parameters)."
   ]
  },
  "spot_check_caveats": [
   "Public pages re-render live data: NYSED or DOE could revise figures after 2026-08-27; the observed values in this packet are as-of today.",
   "NYSED year=2024 (SY 2023-24) figures were within 1-2 students of the InfoHub file for Stuyvesant (3,258/228/7% vs 3,259/230/7.06%) - earlier years drift slightly more than 2024-25.",
   "The xlsx truncates some school names at ~50 characters (e.g. 'Transit Tech Career and Technical Education High S'); match schools by DBN, not name.",
   "Snapshot 'EMS' JSON for K-8 and middle schools also reports band-level values (elementary vs middle) on the rendered page; the *_all varname used here is the school-wide (PK-excluded) figure."
  ],
  "k_mandatory_factcheck": {
   "pk_mandatory": {
    "verdict": "DRAFT_CORRECT",
    "detail": "Pre-K is not mandatory in New York City. New York State's compulsory education law (Education Law sec. 3205(1)) requires full-time instruction only 'from six to sixteen years of age' (NYC extends required attendance through the school year a student turns 17, and NYC separately requires kindergarten at age 5 -- see k_mandatory). Nothing in state law or NYC DOE regulation compels attendance at age 4. NYC's Pre-K for All program is universal and free -- every 4-year-old is entitled to apply for a seat -- but Chancellor's Regulation A-101 frames pre-K admission as eligibility ('are to be admitted... subject to admissions priorities and available seats'), in explicit contrast to its kindergarten language ('required to attend'), and A-101 sec. II.C.5 states required attendance begins at age 5, not 4. The DOE's own enrollment page says children of pre-K age 'are eligible to attend,' not required.",
    "sources": [
     {
      "url": "https://www.nysenate.gov/legislation/laws/EDN/3205",
      "quote": "In each school district of the state, each minor from six to sixteen years of age shall attend upon full time instruction."
     },
     {
      "url": "https://www.schools.nyc.gov/docs/default-source/default-document-library/a101-admissions-readmissions-transfers-english.pdf",
      "quote": "Children whose 4th birthday falls within the calendar year of admission are to be admitted to pre-Kindergarten (\"pre-K\") (subject to admissions priorities (see Section II.C.) and available seats)."
     },
     {
      "url": "https://www.schools.nyc.gov/docs/default-source/default-document-library/a101-admissions-readmissions-transfers-english.pdf",
      "quote": "Children are required to attend school from age 5, except as set forth in paragraphs 4a or 4b above. Attendance is required through the end of the school year in which children turn 17..."
     },
     {
      "url": "https://www.schools.nyc.gov/enrollment/enroll-grade-by-grade/pre-k",
      "quote": "If your child was born in 2021 and lives in New York City, they are eligible to attend pre-k in the current 2025-2026 school year."
     }
    ]
   },
   "k_mandatory": {
    "verdict": "DRAFT_INCORRECT",
    "detail": "The draft's claim that kindergarten 'is also not mandatory' in NYC is wrong for the 2024-25 school year. In July 2012, Gov. Cuomo signed A.9861 (Nolan) / Chapter 157 of the Laws of 2012, amending Education Law sec. 3205(2)(c) to authorize the New York City school district to require 5-year-olds to attend kindergarten (a parallel law, Ch. 167 of 2012, covered Rochester; the paragraph has since been amended to authorize 'every school district within the state'). NYC exercised that authority: the DOE amended Chancellor's Regulation A-101 to make kindergarten attendance mandatory 'commencing in the 2013-14 school year' (InsideSchools, Dec. 6, 2012), and the current A-101 (last revised 02/17/2022, in force in 2024-25) states that children who turn 5 in the calendar year of admission 'are required to attend and must be admitted to kindergarten,' and that 'children are required to attend school from age 5.' IMPORTANT NUANCE the fix should preserve: the mandate has a built-in parental election -- parents may lawfully skip kindergarten by delaying entry until 1st grade the following year, when the child is 6 (statute: parents may 'elect not to enroll their children in school until the following September'), and children in non-public school or registered homeschool are exempt. So kindergarten is mandatory-with-an-opt-out, but it is not accurate to state flatly that it is not mandatory.",
    "sources": [
     {
      "url": "https://www.schools.nyc.gov/docs/default-source/default-document-library/a101-admissions-readmissions-transfers-english.pdf",
      "quote": "Children whose 5th birthday falls within the calendar year of admission are required to attend and must be admitted to kindergarten, whether these children are entering school for the first time or being transferred from another school, except that such children are not required to attend kindergarten at a DOE school if: a. their parents elect instead to enroll them in 1st grade as a 6-year-old the following school year, or b. they are enrolled in a non-public school or if their parent has registered them with the DOE's Office of Home Schooling."
     },
     {
      "url": "https://www.nysenate.gov/legislation/laws/EDN/3205",
      "quote": "The board of education of every school district within the state is hereby authorized to require minors who are five years of age on or before December first to attend kindergarten instruction. However, the provisions of this paragraph shall not apply to: (i) Minors whose parents elect not to enroll their children in school until the following September. (ii) Students enrolled in non-public schools or in home instruction."
     },
     {
      "url": "https://assembly.ny.gov/comm/Ed/2012Annual/index.pdf",
      "quote": "A.9861, Nolan; Chapter 157 of the laws of 2012 This Chapter authorizes the New York City school district to require minors who are five years old on or before December first to attend kindergarten. Parents are not required to enroll their children in kindergarten when the children are five years old and students who attend non-public school or are in home instruction are not required to attend kindergarten at five years old."
     },
     {
      "url": "https://council.nyc.gov/press/2012/07/18/684/",
      "quote": "Joint Statement... Re: Governor Cuomo Signs Mandatory Kindergarten for New York City Bill into Law (July 18, 2012) -- the legislation grants New York City authority to lower the compulsory age of schooling to age five."
     },
     {
      "url": "https://insideschools.org/news-&-views/city-to-require-kindergartenwith-exceptions",
      "quote": "Commencing in the 2013-14 school year... children who are five years old 'are required to attend and must be admitted to kindergarten' [per the amended Chancellor's Regulation], except if 'their parents elect instead to enroll them in first grade the following academic year' or 'they are enrolled in non-public schools or in home instruction.' (InsideSchools, Dec. 6, 2012)"
     },
     {
      "url": "https://www.schools.nyc.gov/enrollment/enroll-grade-by-grade/kindergarten",
      "quote": "Every five-year-old New York City resident is guaranteed a seat in a public school kindergarten program beginning in September the calendar year they turn five."
     }
    ]
   },
   "suggested_wording": "Pre-K is free and open to every 4-year-old in New York City, but it is not mandatory. Kindergarten, by contrast, has been mandatory in the city since the 2013-14 school year: under a 2012 state law and the education department's own regulations, children must attend school starting in September of the calendar year they turn 5 -- though parents can opt to wait a year and enroll their child directly in first grade at age 6, and children in private school or homeschool are exempt."
  },
  "adversarial_tail": {
   "method": {
    "source": "nyc_attendance.xlsx (sha256 d42143b3..., verified before load), sheet 'All Students' only, 75,330 data rows, read with pandas.read_excel dtype=str then numeric coercion.",
    "suppression_handling": "'s' coerced to NaN and COUNTED: 2,518 suppressed '# Contributing 10+ Total Days and 1+ Pres Day' cells, 2,523 suppressed '# Chronically Absent' and '% Chronically Absent' cells across all rows. At the school (All Grades) level only 4 of 1,563 schools are suppressed in 2024-25 and 0 in 2018-19, so suppression cannot move any headline number; suppressed schools counted as not-majority and reported separately.",
    "school_unit": "One observation per DBN x Year using the Grade='All Grades', Category='All Students' row (10,787 school-years, no DBN-Year duplicates). Note actual column name in file is '# Contributing 10+ Total Days and 1+ Pres Day', not '# Contributing 10+ Total Days'.",
    "majority_rule": "share_CA = '# Chronically Absent' / '# Contributing 10+ Total Days and 1+ Pres Day'; 'more than half' = share > 0.50 strictly (primary), with >= 0.50 tested as sensitivity. Recomputed share matches the file's '% Chronically Absent' column to within 3.8e-6 percentage points, so rounded-%-column semantics are a non-issue.",
    "band_derivation": "The file has no school-type field, so bands are derived per DBN-Year from which per-grade rows exist (PK, 0K, 1..12; a suppressed grade row still exists, so suppression does not distort grade spans). Every school-year had at least one grade row.",
    "pre_pandemic_year": "2018-19. 2019-20 is rejected as a baseline because the file only covers Sept 2019-Mar 13 2020 (COVID truncation) and its majority counts collapse to 77 (ex-D75) - using it would roughly double every growth claim.",
    "file_universe_facts": "DBN districts present: 01-32 and 75 ONLY. District 79, charters, home instruction are excluded by DOE before publication, and transfer schools are removed from school-level files per the NOTES sheet - so no analytic choice about D79/charters/transfer schools is even possible with this file. Two universe CHANGES over time are documented in NOTES and confirmed in the data: D75 short-term-stay schools added from 2022-23 (D75 goes 55 schools in 2018-19 to 60 in 2024-25), and District Pre-K Centers added from 2022-23 (PK/K-only 'schools' go from 2 in 2018-19 to 21 in 2024-25, 14 of which have majority chronic absenteeism in 2024-25)."
   },
   "band_rule": {
    "mapping": "PK=-1, 0K=0, '1'..'12' numeric; mn/mx = min/max grade row present",
    "high": "mn >= 9 (serves only 9-12)",
    "elementary": "mx <= 5, or mx == 6 with mn <= 3 (K-6 schools)",
    "middle": "mn >= 4 and 6 <= mx <= 8",
    "K-8": "mn <= 3 and 7 <= mx <= 8",
    "secondary(6-12)": "4 <= mn <= 8 and mx >= 9",
    "K-12": "mn <= 3 and mx >= 9",
    "PK-K only": "grade set within {PK, 0K} (mostly District Pre-K Centers added to the file in 2022-23)",
    "alt_definitions_tested": [
     "serves any grade 9-12 (overlapping)",
     "serves grade 12",
     "high + secondary(6-12) combined",
     "high + secondary + K-12",
     "school name contains 'High School'",
     "balanced panel (DBN present in both 2018-19 and 2024-25)"
    ]
   },
   "totals_by_universe": {
    "all_districts": {
     "2018-19": 168,
     "2019-20": 107,
     "2020-21": 245,
     "2021-22": 578,
     "2022-23": 400,
     "2023-24": 346,
     "2024-25": 298
    },
    "ex_D75": {
     "2018-19": 137,
     "2019-20": 77,
     "2020-21": 209,
     "2021-22": 525,
     "2022-23": 350,
     "2023-24": 296,
     "2024-25": 250
    },
    "ex_D75_ex_PKonly": {
     "2018-19": 137,
     "2024-25": 236
    },
    "ex_D75_balanced_panel_1454_schools": {
     "2018-19": 132,
     "2024-25": 231
    },
    "threshold_ge50_instead_of_gt50": {
     "ex_D75 2018-19": 137,
     "ex_D75 2024-25": 255,
     "all 2024-25": 303
    }
   },
   "per_claim": [
    {
     "claim": "The majority of students were chronically absent in about 23% of the city's high schools in 2018-19 compared to roughly 25% in 2024-25 (and high schoolers' rates 'have remained fairly consistent').",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "strict 9-12-only schools, ex-D75": {
       "2018-19": "86/321 = 26.8%",
       "2024-25": "78/318 = 24.5%"
      },
      "strict 9-12-only, all districts": {
       "2018-19": "90/326 = 27.6%",
       "2024-25": "83/323 = 25.7%"
      },
      "high + 6-12 secondary, ex-D75": {
       "2018-19": "97/470 = 20.6%",
       "2024-25": "104/457 = 22.8%"
      },
      "high + 6-12 secondary, all districts": {
       "2018-19": "109/484 = 22.5%",
       "2024-25": "117/471 = 24.8%"
      },
      "serves grade 12, ex-D75": {
       "2018-19": "93/415 = 22.4%",
       "2024-25": "104/416 = 25.0%"
      },
      "serves any grade 9-12, all districts": {
       "2018-19": "123/528 = 23.3%",
       "2024-25": "153/527 = 29.0%"
      },
      "name contains 'High School', ex-D75": {
       "2018-19": "52/218 = 23.9%",
       "2024-25": "44/222 = 19.8%"
      }
     },
     "sensitivity": "The pair '23% -> 25%' reproduces almost exactly under two reasonable broad definitions (serves-grade-12 ex-D75: 22.4% -> 25.0%; high+secondary all districts: 22.5% -> 24.8%) but NOT under a strict 9-12-only definition, where the level starts near 27% and the direction REVERSES to a slight decline (26.8% -> 24.5%). Under the widest definition (serves any 9-12, all districts) the endpoint is 29%, and under a name-based definition the share falls to 19.8%. 2018-19 values span 20.3-27.6% and 2024-25 values span 19.8-29.0% across defensible definitions.",
     "nuance": "'Fairly consistent' is the robust part: under every definition the 2024-25 share is within about 3 points of 2018-19, after a huge 2021-22 spike (54.7% under strict ex-D75) that fully receded. The specific 23/25 figures and especially the implied slight INCREASE are definition-dependent - a strict high-school universe shows a slight decrease. Robust wording: 'roughly a quarter of high schools in both years, essentially flat, while younger-grade schools tripled off a low base.'"
    },
    {
     "claim": "The share of schools where most students were chronically absent tripled for elementary, middle, and K-8 schools (2018-19 -> 2024-25).",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "elementary (strict, ex-D75)": {
       "2018-19": "30/653 = 4.6%",
       "2024-25": "84/666 = 12.6%",
       "growth_share": "x2.74",
       "growth_count": "x2.80"
      },
      "elementary (strict, all districts)": {
       "growth_share": "x2.74",
       "growth_count": "x2.77"
      },
      "elementary incl PK-only centers, ex-D75": {
       "2018-19": "30/655 = 4.6%",
       "2024-25": "98/687 = 14.3%",
       "growth_share": "x3.11",
       "growth_count": "x3.27"
      },
      "middle (ex-D75 = all)": {
       "2018-19": "2/204 = 1.0%",
       "2024-25": "18/222 = 8.1%",
       "growth_share": "x8.1",
       "growth_count": "x9.0"
      },
      "K-8 (ex-D75)": {
       "2018-19": "7/129 = 5.4%",
       "2024-25": "25/118 = 21.2%",
       "growth_share": "x3.93",
       "growth_count": "x3.57"
      },
      "K-8 (all districts)": {
       "2018-19": "12/138 = 8.7%",
       "2024-25": "27/125 = 21.6%",
       "growth_share": "x2.48",
       "growth_count": "x2.25"
      },
      "elem+middle+K-8 combined (ex-D75)": {
       "2018-19": "39/986 = 4.0%",
       "2024-25": "127/1006 = 12.6%",
       "growth_share": "x3.15"
      },
      "elem+middle+K-8 combined (all districts)": {
       "2018-19": "45/996 = 4.5%",
       "2024-25": "131/1015 = 12.9%",
       "growth_share": "x2.87"
      }
     },
     "sensitivity": "As a COMBINED statement 'roughly tripled' holds (x2.87-x3.15 depending on D75). Band-by-band it does not: elementary alone does NOT reach 3x under any strict definition (x2.74-2.80, 'nearly tripled'); it only crosses 3x (x3.11-3.27) if PK/K-only Pre-K Centers - which were ADDED to the data file starting 2022-23 and 14 of 21 of which have majority chronic absenteeism - are counted as elementary schools, which is a universe-change artifact, not measured growth. Middle 'tripled' massively understates an x8-9 increase, but off a base of just 2 schools, so the factor is unstable. K-8 more than triples ex-D75 (x3.6-3.9) but only x2.25-2.48 if D75 K-8 schools are included. Threshold >=50 vs >50 changes elementary 2024-25 by 1 school (84 vs 85) - immaterial.",
     "nuance": "The defensible core: schools with majority chronic absenteeism roughly tripled across the elementary/middle/K-8 sector combined, from a very low base (4% -> 13%), while high schools stayed flat at ~a quarter. Precise per-band claims should be: elementary nearly tripled (x2.7-2.8), K-8 more than tripled, middle went from 2 schools to 18. Also note all these bands peaked far higher in 2021-22 and have been FALLING since - 'driving up' is only true relative to pre-pandemic, not as a current trend."
    },
    {
     "claim": "Across the city, the number of schools with a majority of students chronically absent jumped from 137 pre-pandemic to 231 in 2024-25.",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "ex-D75, full universe": {
       "2018-19": 137,
       "2024-25": 250
      },
      "ex-D75, balanced panel (schools in both years, n=1454)": {
       "2018-19": 132,
       "2024-25": 231
      },
      "ex-D75, ex PK-only centers": {
       "2018-19": 137,
       "2024-25": 236
      },
      "all districts incl D75": {
       "2018-19": 168,
       "2024-25": 298
      },
      "D75 alone": {
       "2018-19": "31 of 55 schools",
       "2024-25": "48 of 60 schools"
      },
      "threshold >=50": {
       "ex-D75 2018-19": 137,
       "ex-D75 2024-25": 255
      }
     },
     "sensitivity": "Both printed numbers reproduce EXACTLY, but not under the same universe: 137 is the full ex-D75 count for 2018-19 (robust to >50 vs >=50), while 231 is the ex-D75 2024-25 count only after ALSO dropping the 49 schools that entered the file after 2018-19 (of which 19 are majority-CA: 14 new Pre-K Centers, 3 high, 1 elementary, 1 middle). Under that same panel restriction the 2018-19 figure is 132, not 137; under the unrestricted ex-D75 universe the 2024-25 figure is 250, not 231. Internally consistent pairs are 137 -> 250, 132 -> 231, 137 -> 236 (dropping only Pre-K Centers), or 168 -> 298 (with D75). Including D75 adds ~31 majority schools in 2018-19 and ~48 in 2024-25 (D75 schools overwhelmingly exceed 50%); 4 of the 5 D75 schools new to the file since 2022-23 (short-term-stay additions) are majority-CA. D79 and charter sensitivity is moot: the file contains only districts 01-32 and 75, and DOE removes transfer schools from school-level files.",
     "nuance": "The direction and rough magnitude are robust - every consistent universe shows a +72% to +78% jump (x1.72-1.78; 137->250 is x1.82 but mixes new-school additions in). The exact pair as printed slightly understates growth on the panel (132->231) or the endpoint on the full universe (137->250). Robust wording: 'from 137 to about 250, excluding District 75; roughly 20 of the newly appearing schools are Pre-K centers and other schools added to the data after 2019'. Also worth stating that 2024-25's 250 is less than half the 2021-22 peak of 525."
    },
    {
     "claim": "Historically, high schoolers have had the highest rates of chronic absenteeism, and they still do.",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "school_level_pct_of_band_with_majority_CA_ex75": {
       "2018-19": {
        "high": 26.8,
        "secondary(6-12)": 7.4,
        "K-8": 5.4,
        "elementary": 4.6,
        "middle": 1.0,
        "K-12": 7.7,
        "PK-K only": 0.0
       },
       "2024-25": {
        "high": 24.5,
        "K-8": 21.2,
        "secondary(6-12)": 18.7,
        "elementary": 12.6,
        "middle": 8.1,
        "K-12": 26.3,
        "PK-K only": 66.7
       }
      },
      "student_level_CA_rate_by_grade_band_all_districts": {
       "2018-19": {
        "PK": 43.7,
        "K-5": 23.9,
        "6-8": 21.0,
        "9-12": 32.4
       },
       "2024-25": {
        "PK": 48.2,
        "K-5": 31.6,
        "6-8": 29.8,
        "9-12": 35.6
       }
      },
      "single_grades_2018-19": {
       "PK": 43.7,
       "0K": 32.0,
       "grade9": 29.9,
       "grade10": 31.0,
       "grade11": 28.6,
       "grade12": 41.0
      },
      "single_grades_2024-25": {
       "PK": 48.2,
       "0K": 38.7,
       "grade9": 34.6,
       "grade10": 34.4,
       "grade11": 32.2,
       "grade12": 41.6
      }
     },
     "sensitivity": "Holds among the four bands the article names (elementary/middle/K-8/high) in every year and universe: high schools' majority-CA share (26.8% -> 24.5% ex-D75) tops elementary/middle/K-8 in both endpoint years, and the 9-12 student-level rate (32.4% -> 35.6%) tops K-5 and 6-8 every year. BUT it is no longer true against every comparison group in 2024-25: PK/K-only centers (66.7% of 21 schools) and K-12 schools (26.3% ex-D75; 64.3% including D75) now exceed the high-school band's 24.5%, and K-8 (21.2%) is close. At the individual-grade level the claim was never strictly true: Pre-K has had the highest CA rate of ANY grade in six of seven years including 2018-19 (43.7% vs grade 12's 41.0%) and 2024-25 (48.2% vs 41.6%), and kindergarten (38.7%) now exceeds grades 9-11 (32.2-34.6%) - as it already did for grades 9 and 11 in 2018-19.",
     "nuance": "Safe if scoped: 'among elementary, middle, K-8 and high schools, high schools still have the largest share above 50%, but the gap has collapsed (27-vs-5 points pre-pandemic to 25-vs-21 for K-8 now)'. The growth story is unambiguous: 2018-19 -> 2024-25 student-level increases are K-5 +7.7 pts and 6-8 +8.8 pts versus 9-12 +3.2 pts, which is the real support for 'elementary and middle school students are driving the increase' relative to pre-pandemic. Caveat on framing: every band's rate has DECLINED each year since 2021-22, so nothing is being 'driven up' currently."
    }
   ]
  },
  "adversarial_grades": {
   "method": "Independent re-derivation from sheet 'All Students' (75,330 data rows) of the hash-verified file nyc_attendance.xlsx, loaded fresh with pandas (all cells as strings, 's' suppression markers coerced to NaN and counted, never silently dropped). No citywide rows exist in the file, so citywide per-grade rates were aggregated from school-by-grade rows four ways: student-weighted sum(# Chronically Absent)/sum(# Contributing 10+ Total Days and 1+ Pres Day) vs simple mean of school '% Chronically Absent', each including and excluding District 75 (DBN prefix '75'). Suppression impact bounded per grade by assuming each fully suppressed row holds 0-5 students who are all/none chronically absent. Row-level consistency verified: reported '% Chronically Absent' equals 100*#CA/#Contributing exactly on all 72,807 unsuppressed rows. NOTE the exact column name: '# Contributing 10+ Total Days and 1+ Pres Day' - the denominator requires >=10 enrolled days AND >=1 day present, confirmed by the NOTES sheet. NOTES also states: transfer schools are in citywide counts but REMOVED from school-level files, and citywide DOE figures de-duplicate students who attended multiple schools, so my school-row aggregation is an approximation of (not identical to) DOE's official citywide figures; D75 short-term-stay schools added 2022-23; District Pre-K Centers added 2022-23 (NYCEECs never included); 2018-19 used as the pre-pandemic baseline (2019-20 is truncated at Mar 13 2020).",
   "aggregation_choices": [
    "student-weighted, Districts 1-32 + 75 (file's official universe)",
    "student-weighted, Districts 1-32 only (D75 excluded)",
    "simple unweighted mean of school-level percentages, incl D75",
    "simple unweighted mean of school-level percentages, excl D75",
    "suppression worst-case bounds (all suppressed rows 0% vs 100% chronic, <=5 students each)",
    "PK consistent-universe check (Pre-K Center schools removed from 2024-25; only 17 school rows / 60 contributing students in this file, so negligible here)"
   ],
   "per_claim": [
    {
     "claim": "Pre-kindergartners were chronically absent most often, with 48% of the city's youngest students missing school",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "PK_2024_25_weighted_incl_D75": 48.24,
      "PK_weighted_excl_D75": 48.03,
      "PK_simple_incl_D75": 47.8,
      "PK_simple_excl_D75": 47.39,
      "PK_suppression_bounds": [
       47.87,
       48.63
      ],
      "PK_contributing_students": 33041
     },
     "sensitivity": "PK is the highest grade under all four aggregation choices and under worst-case suppression handling; the 48% figure reproduces to within 0.9 points everywhere (47.4-48.2). Rank #1 is fully robust.",
     "nuance": "The number holds but the wording has three problems. (1) '48% ... missing school' actually means 48% were chronically absent, i.e., missed at least 10% of their enrolled days - not 48% absent on a given day. (2) The denominator excludes students enrolled <10 days AND students never present at all (a 100%-absent enrollee is dropped from the calculation entirely), so the literal 'missing school most often' share could be higher. (3) 'the city's youngest students' overstates coverage: the file covers public-school PK only (~33k contributing 4-year-olds; NYC Early Education Centers are excluded in all years, and 3-K does not appear), and PK's cohort is roughly half the size of other grades."
    },
    {
     "claim": "Ordering: PK highest, then grade 12 (40%), then kindergarten (~38%), above all other grades",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "top3_weighted_incl_D75": {
       "PK": 48.24,
       "12": 41.58,
       "0K": 38.71,
       "next_highest_9": 34.57
      },
      "top3_weighted_excl_D75": {
       "PK": 48.03,
       "12": 40.15,
       "0K": 37.82,
       "next_highest_10": 33.74
      },
      "top3_simple_incl_D75": {
       "PK": 47.8,
       "12": 46.26,
       "0K": 41.82,
       "next_highest_10": 40.44
      }
     },
     "sensitivity": "The ordering PK > 12 > K > all else survives all four aggregation choices and suppression bounds - fully robust (K's lead over the 4th-place grade is 1.4-4.1 points depending on method). The LEVELS are method-dependent: grade 12 = 41.6% and K = 38.7% including D75 (the file's stated universe) vs 40.2% and 37.8% excluding D75. Under simple school-averaging the PK-vs-12 gap narrows to 1.5 points.",
     "nuance": "The draft's exact figures (40%, 38%) match an ex-District-75 weighted derivation, not the incl-D75 universe the file officially covers, where seniors are 41.6% (rounds to 42, not 40). Additionally, transfer schools - disproportionately high-absence high schools - are removed from the school-level file but included in DOE's official citywide numbers, so the true official grade-12 rate is likely at or above my 41.6%, making '40%' a mild understatement either way. Recommend 'about 41%' or 'roughly 40%'."
    },
    {
     "claim": "Grades 5 and 6 saw the lowest rates at about 27%",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "weighted_incl_D75": {
       "5": 27.55,
       "6": 27.67,
       "4": 28.26
      },
      "weighted_excl_D75": {
       "5": 26.58,
       "6": 26.6,
       "4": 27.31
      },
      "simple_incl_D75_lowest3": {
       "5": 30.63,
       "4": 31.02,
       "3": 32.36,
       "6": 33.24
      },
      "suppression_bounds_incl_D75": {
       "5": [
        27.49,
        27.71
       ],
       "6": [
        27.49,
        28.15
       ],
       "4": [
        28.25,
        28.29
       ]
      }
     },
     "sensitivity": "Holds under student-weighted aggregation in both universes (5 and 6 are the lowest two; suppression cannot flip grade 4 below grade 6 - grade 4's lower bound 28.25 exceeds grade 6's upper bound 28.15, barely). But it does NOT survive the school-average choice: under simple averaging (either universe) the lowest two grades are 5 and 4, with grade 6 1.5-2.6 points higher (grade 6 has the most suppressed rows of any grade, 75 of 645 school rows, because many K-6 schools have tiny 6th grades).",
     "nuance": "Grade 4 (28.26% incl D75, 27.31% ex D75) is only 0.6-0.7 points above grades 5-6 - within rounding, all three print as 'about 27-28%'. 'About 27%' is exact for the ex-D75 numbers (26.6) and slightly generous for incl-D75 (27.6, rounds to 28). Safer phrasing: 'grades 4 through 6 saw the lowest rates, around 27-28%'."
    },
    {
     "claim": "Rates were significantly higher for pre-K-8 compared to pre-pandemic years",
     "verdict": "SUPPORTED",
     "my_numbers": {
      "deltas_2018_19_to_2024_25_weighted_incl_D75": {
       "PK": 4.58,
       "0K": 6.66,
       "1": 8.03,
       "2": 8.4,
       "3": 7.32,
       "4": 7.93,
       "5": 7.53,
       "6": 8.8,
       "7": 9.03,
       "8": 8.23
      },
      "pooled_PK_8": {
       "2018_19": 23.85,
       "2024_25": 31.97,
       "delta": 8.11
      },
      "PK_consistent_universe_delta": 4.63
     },
     "sensitivity": "Every grade PK-8 is up 4.6-9.0 points; excluding D75 changes each delta by <0.5 points, and removing the District Pre-K Centers added to the file in 2022-23 (only 60 contributing students here) leaves the PK delta at +4.63. Robust to all choices tried.",
     "nuance": "Two honest caveats that do not threaten the claim: (a) PK's rise (+4.6) is the SMALLEST in PK-8 - about half of grades 1-8 (+7.3 to +9.0) - so PK is highest in level, not in growth; (b) the universe changed slightly across the comparison (D75 short-term-stay schools and District Pre-K Centers added 2022-23), though the ex-D75 replication shows this moves nothing materially. Baseline is 2018-19, the file's only full pre-pandemic year (2019-20 is COVID-truncated)."
    },
    {
     "claim": "The rate for high school seniors was essentially flat from before the pandemic",
     "verdict": "SUPPORTED_WITH_CAVEATS",
     "my_numbers": {
      "grade12_incl_D75": {
       "2018_19": 41.05,
       "2024_25": 41.58,
       "delta": 0.53
      },
      "grade12_excl_D75": {
       "2018_19": 40.21,
       "2024_25": 40.15,
       "delta": -0.06
      },
      "grades_9_11_deltas_incl_D75": {
       "9": 4.66,
       "10": 3.41,
       "11": 3.55
      },
      "pooled_9_11": {
       "2018_19": 29.91,
       "2024_25": 33.8,
       "delta": 3.88
      },
      "pooled_9_12": {
       "2018_19": 32.42,
       "2024_25": 35.59,
       "delta": 3.17
      }
     },
     "sensitivity": "Grade 12 is flat under every choice (delta between -0.06 and +0.53 points). Robust.",
     "nuance": "The seniors-only statement is correct, but flatness is UNIQUE to grade 12: grades 9, 10, and 11 each rose 3.4-4.7 points, and pooled 9-11 rose 3.9 points (29.9% to 33.8%). Any surrounding framing that high schoolers overall were 'fairly consistent' with pre-pandemic needs a caveat - high school as a whole (9-12) is up 3.2 points; only the senior class matches its pre-pandemic (already very high, ~41%) rate. Also note transfer schools are excluded from the school-level file but present in official citywide HS figures."
    },
    {
     "claim": "Phrasing: 'digging deeper into student-level data' and '48% ... missing school'",
     "verdict": "REFUTED",
     "my_numbers": {
      "what_the_file_contains": "school-by-DBN x grade x year aggregates (counts and percentages), FERPA-suppressed below 6 students - no student microdata",
      "metric_definition": "chronically absent = attendance <= 90% (absent >= 10% of enrolled days), among students enrolled >= 10 days with >= 1 day present; NYSED definition applied retroactively to all years in the file"
     },
     "sensitivity": "Not a numeric claim; definitional.",
     "nuance": "Both phrases are imprecise as written. The public file is school-by-grade aggregate data, not 'student-level data' (say 'grade-level data' or 'a grade-by-grade breakdown'). '48% missing school' should be '48% were chronically absent - missing at least 10% of school days'. Also worth knowing: the metric excludes students who never attended a single day, excludes charters/District 79/home instruction, and the '%' is of students enrolled 10+ days, not of all enrollees."
    }
   ]
  },
  "recompute_notes": {
   "tail_band_rule": {
    "rule": {
     "source": "Per-grade rows of the same 'All Students' sheet for the same DBN-Year; a grade counts as served if '# Contributing 10+ Total Days and 1+ Pres Day' is numeric and > 0. PK excluded from span; 0K=0, grades 1-12 numeric.",
     "classification": "max>=9 & min>=6 -> HS; max>=9 & min<6 -> K12; max in 7-8 & min<=2 -> K8; max in 7-8 & min>=3 -> MS; max<=6 -> ES",
     "unclassifiable": "0 schools in the curated universe in any year (every school has at least one served K-12 grade)",
     "sensitivity": "Counting suppressed 's' grade rows as served changes the band of 455 school-years (mostly to K12/HS via <=5-student stray grades) and degrades the match to published; primary rule (numeric>0) retained."
    },
    "band_tables_all_years": {
     "2018-19": {
      "ES": {
       "n_gt50": 30,
       "n": 662,
       "share_pct": 4.53
      },
      "MS": {
       "n_gt50": 5,
       "n": 257,
       "share_pct": 1.95
      },
      "K8": {
       "n_gt50": 8,
       "n": 133,
       "share_pct": 6.02
      },
      "HS": {
       "n_gt50": 94,
       "n": 413,
       "share_pct": 22.76
      },
      "K12": {
       "n_gt50": 0,
       "n": 4,
       "share_pct": 0.0
      },
      "ALL": {
       "n_gt50": 137,
       "n": 1469,
       "share_pct": 9.33
      }
     },
     "2019-20": {
      "ES": {
       "n_gt50": 14,
       "n": 661,
       "share_pct": 2.12
      },
      "MS": {
       "n_gt50": 3,
       "n": 260,
       "share_pct": 1.15
      },
      "K8": {
       "n_gt50": 1,
       "n": 131,
       "share_pct": 0.76
      },
      "HS": {
       "n_gt50": 59,
       "n": 414,
       "share_pct": 14.25
      },
      "K12": {
       "n_gt50": 0,
       "n": 4,
       "share_pct": 0.0
      },
      "ALL": {
       "n_gt50": 77,
       "n": 1470,
       "share_pct": 5.24
      }
     },
     "2020-21": {
      "ES": {
       "n_gt50": 59,
       "n": 659,
       "share_pct": 8.95
      },
      "MS": {
       "n_gt50": 22,
       "n": 260,
       "share_pct": 8.46
      },
      "K8": {
       "n_gt50": 21,
       "n": 130,
       "share_pct": 16.15
      },
      "HS": {
       "n_gt50": 103,
       "n": 412,
       "share_pct": 25.0
      },
      "K12": {
       "n_gt50": 0,
       "n": 4,
       "share_pct": 0.0
      },
      "ALL": {
       "n_gt50": 205,
       "n": 1465,
       "share_pct": 13.99
      }
     },
     "2021-22": {
      "ES": {
       "n_gt50": 215,
       "n": 659,
       "share_pct": 32.63
      },
      "MS": {
       "n_gt50": 57,
       "n": 259,
       "share_pct": 22.01
      },
      "K8": {
       "n_gt50": 41,
       "n": 130,
       "share_pct": 31.54
      },
      "HS": {
       "n_gt50": 206,
       "n": 411,
       "share_pct": 50.12
      },
      "K12": {
       "n_gt50": 1,
       "n": 4,
       "share_pct": 25.0
      },
      "ALL": {
       "n_gt50": 520,
       "n": 1463,
       "share_pct": 35.54
      }
     },
     "2022-23": {
      "ES": {
       "n_gt50": 141,
       "n": 661,
       "share_pct": 21.33
      },
      "MS": {
       "n_gt50": 22,
       "n": 259,
       "share_pct": 8.49
      },
      "K8": {
       "n_gt50": 30,
       "n": 127,
       "share_pct": 23.62
      },
      "HS": {
       "n_gt50": 138,
       "n": 411,
       "share_pct": 33.58
      },
      "K12": {
       "n_gt50": 1,
       "n": 4,
       "share_pct": 25.0
      },
      "ALL": {
       "n_gt50": 332,
       "n": 1462,
       "share_pct": 22.71
      }
     },
     "2023-24": {
      "ES": {
       "n_gt50": 108,
       "n": 659,
       "share_pct": 16.39
      },
      "MS": {
       "n_gt50": 21,
       "n": 256,
       "share_pct": 8.2
      },
      "K8": {
       "n_gt50": 30,
       "n": 128,
       "share_pct": 23.44
      },
      "HS": {
       "n_gt50": 118,
       "n": 412,
       "share_pct": 28.64
      },
      "K12": {
       "n_gt50": 0,
       "n": 4,
       "share_pct": 0.0
      },
      "ALL": {
       "n_gt50": 277,
       "n": 1459,
       "share_pct": 18.99
      }
     },
     "2024-25": {
      "ES": {
       "n_gt50": 83,
       "n": 659,
       "share_pct": 12.59
      },
      "MS": {
       "n_gt50": 19,
       "n": 247,
       "share_pct": 7.69
      },
      "K8": {
       "n_gt50": 28,
       "n": 127,
       "share_pct": 22.05
      },
      "HS": {
       "n_gt50": 101,
       "n": 413,
       "share_pct": 24.46
      },
      "K12": {
       "n_gt50": 0,
       "n": 4,
       "share_pct": 0.0
      },
      "ALL": {
       "n_gt50": 231,
       "n": 1450,
       "share_pct": 15.93
      }
     }
    },
    "published_vs_mine": {
     "2018-19": {
      "HS": {
       "published_gt50": 94,
       "published_n": 414,
       "mine_gt50": 94,
       "mine_n": 413,
       "delta_gt50": 0,
       "delta_n": -1
      },
      "ES": {
       "published_gt50": 30,
       "published_n": 643,
       "mine_gt50": 30,
       "mine_n": 662,
       "delta_gt50": 0,
       "delta_n": 19
      },
      "MS": {
       "published_gt50": 5,
       "published_n": 244,
       "mine_gt50": 5,
       "mine_n": 257,
       "delta_gt50": 0,
       "delta_n": 13
      },
      "K8": {
       "published_gt50": 8,
       "published_n": 164,
       "mine_gt50": 8,
       "mine_n": 133,
       "delta_gt50": 0,
       "delta_n": -31
      },
      "ALL": {
       "published_gt50": 137,
       "published_n": 1469,
       "mine_gt50": 137,
       "mine_n": 1469,
       "delta_gt50": 0,
       "delta_n": 0
      }
     },
     "2024-25": {
      "HS": {
       "published_gt50": 101,
       "published_n": 406,
       "mine_gt50": 101,
       "mine_n": 413,
       "delta_gt50": 0,
       "delta_n": 7
      },
      "ES": {
       "published_gt50": 83,
       "published_n": 638,
       "mine_gt50": 83,
       "mine_n": 659,
       "delta_gt50": 0,
       "delta_n": 21
      },
      "MS": {
       "published_gt50": 17,
       "published_n": 238,
       "mine_gt50": 19,
       "mine_n": 247,
       "delta_gt50": 2,
       "delta_n": 9
      },
      "K8": {
       "published_gt50": 30,
       "published_n": 164,
       "mine_gt50": 28,
       "mine_n": 127,
       "delta_gt50": -2,
       "delta_n": -37
      },
      "ALL": {
       "published_gt50": 231,
       "published_n": 1450,
       "mine_gt50": 231,
       "mine_n": 1450,
       "delta_gt50": 0,
       "delta_n": 0
      }
     }
    },
    "delta_interpretation": "All gt50 numerators match published exactly in 2018-19 (30/5/8/94) and for ES (83) and HS (101) in 2024-25. MS/K8 differ by a 2-school boundary swap in 2024-25 (mine MS 19 / K8 28 vs published 17/30): the curated DB classifies as K-8 two >50% schools my served-grades rule calls MS - one identifiable candidate is 04M206 P.S. 206 Jose Celso Barbosa (served span 3-8, 54.05%), i.e. schools chartered K-8 but currently serving only upper grades. Denominator deltas (ES +19..21, MS +9..13, K8 -31..-37) reflect the same span-vs-official-designation boundary, not data discrepancies. Combined ES+MS+K8 gt50 is identical to published both years: 43 and 130."
   },
   "grade_suppression": {
    "sheet_total_s_cells": {
     "# Chronically Absent": 2523,
     "# Contributing 10+ Total Days and 1+ Pres Day": 2518,
     "% Chronically Absent": 2523,
     "# Total Days": 0
    },
    "subset_2018_19_and_2024_25_suppressed_rows": 697,
    "ferpa_rule": "rows with <=5 students (proxy: <=900 total days) suppressed as 's'; ADDITIONAL complementary suppression of larger rows that could be recovered by addition/subtraction; also suppressed if <=5 students contribute 20+ days",
    "complementary_suppression_finding": "297 of the 697 suppressed rows in the two study years have >900 total days, so they hold MORE than 5 students (largest: District 20 Pre-K Center PK 2024-25, 221,864 total days ~ 1,233 students). Mechanism verified: e.g. Pre-K Centers have a tiny 0K row (primary-suppressed) forcing suppression of the big PK row; I.S. 061 has a tiny grade-5 row forcing suppression of its ~650-student grade-6 row.",
    "bound_definitions": {
     "bounds_if_all_suppressed_rows_le5_students_pct": "assumes every suppressed row holds at most 5 students (0% or 100% chronic): valid for primary suppression only",
     "worstcase_bounds_incl_complementary_suppression_pct": "suppressed-row student count estimated as 5 (if <=900 total days) else ceil(total_days/180); worst case all-0% vs all-100% chronic. Extremely conservative: real schools cluster near citywide rates."
    },
    "grades_most_affected": "PK 2024-25 (est ~9,200 suppressed students, mostly Pre-K Centers), grade 6 both years (est ~4,200-4,500, feeder-school pattern), grade 8, grade 12 (~1,300-1,500 each)."
   },
   "grade_pk_sensitivities": {
    "recovery_of_suppressed_pk_via_all_grades_rows": {
     "method": "for suppressed PK rows where the same school's 'All Grades' row is visible and PK accounts for >=90% of total days (i.e., Pre-K Centers), use the All Grades chronic/contributing counts as ~PK (differs by the <=5-student suppressed 0K cell)",
     "2018-19": {
      "recovered_schools": 0,
      "rate_unchanged_pct": 43.65,
      "note": "suppressed PK rows sit inside K-12 schools; max ~1,423 students unrecovered"
     },
     "2024-25": {
      "recovered_schools": 17,
      "extra_contributing": 9180,
      "extra_chronic": 5494,
      "recovered_schools_rate_pct": 59.85,
      "rate_incl_d75_after_recovery_pct": 50.76,
      "base_rate_incl_d75_pct": 48.24,
      "note": "the published 48% EXCLUDES ~9,200 Pre-K Center students whose chronic rate is ~60%; true citywide PK rate is plausibly ~50-51%"
     }
    },
    "same_school_pk_comparison": {
     "method": "restrict both years to the 631 DBNs with a PK row in both 2018-19 and 2024-25 (neutralizes the 2022-23 addition of District Pre-K Centers noted in the NOTES sheet)",
     "pk_2018_19_pct": 43.58,
     "pk_2024_25_pct": 48.6,
     "delta_pp": 5.02,
     "new_2024_25_pk_schools_visible": {
      "n_dbns": 54,
      "contributing": 2343,
      "rate_pct": 43.49
     },
     "notes_sheet_caveat": "Prior to 2022-23, Pre-K data exclude NYC Early Education Centers and District Pre-K Centers; District Pre-K Centers added from 2022-23. So the PK 2018-19 vs 2024-25 comparison is not a fixed universe; the same-school delta (+5.0pp) confirms the rise is real, not an artifact of the added schools."
    },
    "same_school_grade12_comparison": {
     "2018-19_pct": 40.95,
     "2024-25_pct": 41.43,
     "delta_pp": 0.48,
     "n_schools": 432
    }
   },
   "grade_wording_checks": {
    "student_level_data": {
     "issue": "Draft says 'Digging deeper into student-level data'. The file is school-by-grade-by-year AGGREGATE data (counts and rates per school-grade), not student-level microdata. Also, per the NOTES sheet, students attending multiple schools contribute to multiple rows, so sums over schools are not exact student counts.",
     "suggested": "'Digging deeper into grade-by-grade data' or 'A grade-level breakdown of the citywide data shows ...'"
    },
    "missing_school": {
     "issue": "'48% of the city's youngest students missing school' is imprecise. Precise meaning: 48% of pre-K students who were enrolled at least 10 days (and present at least once) were chronically absent, i.e., attended 90% or less of their enrolled days - they missed at least 10% of school days, roughly 18+ days over a full year. Every enrolled child 'misses school' occasionally; the statistic is about crossing the 10%-of-days threshold.",
     "suggested": "'... with 48% of the city's youngest students chronically absent - meaning they missed at least 10% of school days' (optionally: 'among children enrolled at least 10 days')"
    },
    "grade_labels": "Kindergarten is coded '0K' and pre-K 'PK' in the file; 'PK' spans 3-K/4-year-old programs offered in the covered schools (District Pre-K Centers only from 2022-23; NYC Early Education Centers, charter, and D79 pre-K are never included), so 'the city's youngest students' overstates coverage slightly.",
    "universe_reminder": "All figures exclude charter schools, District 79, home/hospital instruction; 'citywide' here means NYC DOE districts 1-32 (packet) with/without District 75."
   }
  }
 }
}