Interactive view of OSU salary reports (2014-2025) focused on "upper-middle management" titles. Counts and payroll shares are derived from the published salary PDFs parsed in this repo.
Loading chart data...
Titles are tagged client-side using a conservative heuristic on each snapshot job title:
| Included if title contains… | Excluded if title contains… |
|---|---|
| "Director", "Assistant Director", "Associate Director", "Senior Director", "Manager", "Head", "Chair" | "Vice President", "Provost", "Chancellor", "President", "Chief", "Dean" |
Decision rule: Each employee can have multiple jobs per snapshot. A person is counted as upper-middle management when at least one title matches the inclusion list and none of their titles match the exclusion list in that same snapshot.
Important: This is a title-text heuristic for analysis, not an official OSU HR level or bargaining-unit designation. Payroll share uses the snapshot's calculated pay.
reports/.convert_data.sh calls pdftotext then a Python parser to produce data.json (per-person timelines).split_data.py creates data/index.json, data/aggregates.json, and bucketed data/people/*.json.aggregates.json for dates, then streams all data/people/*.json. For each snapshot, it applies the title heuristic above and sums headcount and payroll.