# Athletics: what it costs, who pays, and what the budget line does not say


> **Working state:** `notes/HANDOFF.md` carries the current branch and what is established
> versus assumed. `CLAUDE.md` carries the rules. Fee revenue and fund balances are worked
> in `sped-and-funds.md` §2.2 and are not restated here.

Analysis, August 2026. Part of the source archive.

Every section is written twice: **In plain terms** for anyone, and **The evidence** for
anyone who wants to check it. The plain version never states anything the evidence does
not support.

Verify every figure below with:

    python3 scripts/verify_athletics.py

---

## Why athletics needed its own document

Athletics is 1.7% of the school budget. By rule 4 — weight times excess rate — it is not
a driver of the gap and never will be. It earned a document anyway, for two reasons.

The first is that it is the one program where the town has a real choice, and residents
argue about it more than about anything else its size. A tool that helps somebody
understand their options has to get this one right.

The second is the reason this document exists at all. **Athletics is the only part of the
budget where we can see both sides of the money.** For every other line, the town publishes
an appropriation and nothing else — no grants, no fees, no revolving funds. For athletics,
one document published both, once, and a records request produced the fund's own year-end
reconciliation. That makes athletics a test case for a question that applies to the entire
budget: *how far is an appropriation from what a thing costs?*

The answer, here, is very far.

---

## The approach

**In plain terms.** We stopped asking what athletics costs and started asking who is
paying. That meant separating three kinds of document that all use the word "actual", and
only one of which is a record of money moving.

**The evidence.** Every document in the archive is now classified in
`data/document-basis.csv`, generated by `scripts/classify_document_basis.py`:

| type | what it means | count |
|---|---|---:|
| `ledger` | the accounting system — a figure exists because a transaction did | 18 |
| `restatement` | a prior year re-presented inside a document written by the party that spent it | 46 |
| `forward` | proposed, requested, level service, balanced | 103 |
| `narrative` | money discussed, no figure table | 53 |

Of those ledger documents, exactly one reaches school budget **lines** on the general fund:
`district-budget-page/text/fy23-quarterly-budget-update.txt`, covering one quarter of FY23.
Everything else the school analysis rests on is restatement.

**Three of the eighteen arrived after this document was written**, on 17 June 2026, and they
are the athletics revolving fund's own cashbook for FY2024, FY2025 and FY2026 — the first
complete fiscal years of ledger data this project has held for anything touching school money.
They are read in `analyses/athletics-ledger.md`, and several claims in the sections below are
settled or sharpened there. The general fund still rests on one quarter of FY23.

This matters for athletics specifically because the two are not interchangeable, and the
difference is visible on this very line — see §4 below.

---

## 1. The one document that shows both sides

**In plain terms.** Once, for FY19, the athletic director submitted a budget that listed
every athletics line twice: once as money from the town, once as money from the fund the
fees go into. It is the only document in the archive that does this. It shows that the
town's athletics lines were never the whole cost.

**The evidence.** `district-budget-page/docs/fy19-proposed-athletics-budget.pdf`, off the
district's own budget page, link live as of 2026-08-29,
sha256 `e0a7c5ba…`. Titled *Proposed FY19 MSHS Athletic Budget (Submitted to the
Superintendent of Schools) AMENDED PROPOSED BUDGET*.

`Athletic Transportation` appears on two consecutive lines — the appropriation, and the
Chapter 658 revolving fund:

| FY | appropriated | revolving 658 | total | fund share | basis |
|---|---:|---:|---:|---:|---|
| 2014 | 17,000 | 30,085 | 47,085 | 63.9% | actual |
| 2015 | 21,600 | 40,742 | 62,342 | 65.4% | actual |
| 2016 | 23,000 | 33,308 | 56,308 | 59.2% | actual |
| 2017 | 23,000 | 50,986 | 73,986 | 68.9% | actual |
| 2018 | 33,500 | 27,450 | 60,950 | 45.0% | budgeted |
| 2019 | 24,975 | 40,000 | 64,975 | 61.6% | requested |

**In every year it reports as actual, the fund paid more of athletic transportation than
the town did.**

The same document totals the whole program:

| | FY14 | FY15 | FY16 | FY17 | FY18 | FY19 |
|---|---:|---:|---:|---:|---:|---:|
| TOTAL GENERAL APPROPRIATION | 194,316 | 224,799 | 210,911 | 222,695 | 326,478 | 307,931 |
| plus TOTAL Revolving Fund 658 | 108,147 | 111,938 | 113,819 | 156,550 | 103,001 | 87,902 |
| GRAND TOTAL ATHLETICS | 302,462 | 336,738 | 324,730 | 379,245 | 429,479 | 395,833 |
| Total Revenues (Fees & Gates) | 110,474 | 140,748 | 121,555 | 109,351 | 108,000 | 108,000 |

Its own grand totals are $1 off its own two columns in FY14 and FY15 and exact in the
other four years.

**Credit where it is due, per rule 8.** The district published this. It is the clearest
account of how athletics is actually paid for anywhere in the record, and no document
published since shows both sides. It is surfaced in the app for that reason.

**And the district says the same thing in words.** `school-department-fy26-budget-overview`
lists *"Revolving account offsets applied to personnel in local budget: Extended Day
($71,247), Facilities ($25,000)"*, and beside athletics: *"156% line increase (reduced from
Level Service with anticipation that athletic revolving may be enough to offset this
reduction in the budget line)"*.

That is rule 11 in the district's own hand: **the appropriation is set net of what the
fund is expected to carry.**

---

## 2. The netting swapped direction — it was not a withdrawal

**In plain terms.** People assume the town has been picking up costs the fees used to
cover. That is half right. Transportation did move from the fund to the town — but
officials and uniforms moved the other way at the same time, and they were about the same
size. It was closer to a trade than a retreat.

**The evidence.**

| | FY19 | FY26 |
|---|---|---|
| transportation | revolving fund, $40,000 | general fund, $127,550 |
| officials | general fund, $40,117 | general fund **$0**; fund pays ArbiterSports $59,400 |
| uniforms | general fund, $8,000 | general fund **$0**; fund pays Prime Time Sports $25,421 |

In FY19 the general fund carried officials and uniforms together at $48,117 while the fund
carried $40,000 of transportation. At the point of the trade the two sides were within
about $8,000 of each other.

FY26 general fund figures are the `FY26 FINAL BUDGET` column of `xlsx/fy27-proposals.xlsx`;
`ATHLETIC OFFICIALS` and `REPLACEMENT OF UNIFORMS` are budgeted `-` from FY26 on. The fund
vendors are `xlsx/school-funds-fy26.xlsx`, sheet `Athletics Revolving`, A23.

---

## 3. The fund's share of athletics did not change

**In plain terms.** The fund pays about the same slice of athletics it paid seven years
ago — roughly a fifth. What changed is which bills it pays, not how much.

**The evidence.**

| | FY19 | FY26 |
|---|---:|---:|
| general fund athletics | 307,931 | 518,334 |
| athletics revolving fund | 87,902 | 146,911 |
| **whole program** | **395,833** | **665,245** |
| fund share | 22.2% | 22.1% |

FY26 general fund is functions `3510 - Athletic Expenses` + `3510 - Athletics Salaries`
from the `FY26 FINAL BUDGET` column. The fund figure is FY26 net expenditures from the
year-end reconciliation.

**What this does not show.** Two observations, seven years apart, with nothing in the
archive between them. **Two points cannot show a line**, and 22.2% against 22.1% could be
coincidence. It is recorded because it contradicts an obvious story, not because it
establishes a stable one.

**The number that matters for the app.** The whole FY26 athletics program is **$665,245**.
Every athletics figure the app currently shows is the general fund portion.

---

## 4. What "athletic transportation actual" actually is

**In plain terms.** For years the reported spending on athletic buses came out exactly
equal to the budget. That is not a coincidence and it is not sloppiness. The whole year's
transportation is committed as a single purchase order at the start of the year, and the
figure published later is that order — not a count of buses run.

**The evidence.** From the only ledger document that reaches school lines,
`fy23-quarterly-budget-update.txt`, 11 November 2022:

    S3066672  535016  TRANSPORTATION
       Original Budget   40,000.00
       Revised Budget    40,000.00
       Expended               0.00
       Encumbrances      40,000.00
       % Used               100.00

Nothing paid. The entire year committed. Regular transportation (`535025`) and special
education transportation (`535026`) show the same shape in the same report.

Set against the restated actuals for the same line:

| FY | budget | reported actual | note |
|---|---:|---:|---|
| 2017 | 23,000 | 23,000 | exact |
| 2018 | 33,500 | 33,500 | exact |
| 2019 | 24,975 | 36,975 | |
| 2020 | 38,801 | 38,795 | |
| 2021 | 45,000 | 45,000 | exact — FY21 books were not closed, excluded elsewhere |
| 2022 | 45,000 | 48,755 | |
| 2023 | 40,000 | 39,880 | ledger: $0 expended, $40,000 encumbered at Q1 |
| 2024 | 40,000 | 40,000 | exact |
| 2025 | 40,000 | 87,822 | |
| 2026 | 127,550 | 47,847 spent + 13,169 encumbered at Q3 | |

Four of nine usable years land on the budget to the dollar — three of eight if FY21
is excluded, as it is everywhere else in this project because its books were not closed.

**A possible explanation, offered as a hypothesis.** The line is managed by lump-sum
encumbrance and the figure later published as an "actual" is the liquidated purchase
order. That would make an exact match the expected result rather than an anomaly.
**Nothing here tests it** — we hold one quarter of one year of ledger data. **What would
settle it:** the year-end MUNIS report for the school department, or account detail history
for object `535016`.

**And note the same word doing two jobs.** The Finance Committee memo for the same quarter
reports *"Total General Fund expenditures through March 31, 2026, were $36.845 million"*.
The ledger for that period says $34,219,013.80 expended and $2,626,115.87 encumbered —
which sum to $36,845,129.67. The memo reports committed money under the word for money
paid out. That is the same conflation as the line above, one level up.

---

## 4a. The FY25 deficit — reported, corroborated in outline, not established

**In plain terms.** Several people said in 2025 that the athletics fee account had run into
trouble, and that costs landed on the town budget as a result. The account's own year-end
figures do not show that, but we do not hold the year they are talking about. This is the
most likely explanation on offer and it is not yet a fact.

**The evidence, all of it.** Three references, in one six-month window:

**School Committee, 3 September 2025**, public comment — the only place the account is
named:

> "in the past 6 months or so there have been things that have come up, athletic revolving
> fund was running in a deficit, I was told over $100,000"

This is a resident reporting what she was told. It is not a district statement, and no
document we hold contains the figure.

**Finance Committee, 8 July 2025** — a committee member, on the record, not naming
athletics:

> "Ms. Lockwood ... emphasized the need for all revolving accounts to have a budget, even
> if they are not town meeting revolving accounts, **to prevent negative balances from
> going unnoticed**."

Corroborates that a revolving account went negative and was not caught. Does not say which.

**School Committee, 12 March 2025** — the day the FY26 budget was approved, public comment
from a resident identifying as a finance professional:

> "Splitting everything into revolving funds is not a good way to manage finances. We need
> to lay out all revenues and all expenses."

**What the fund's own figures say.** The athletics fund opened FY26 at **+$110,247.89** on
1 July 2025 — which is its closing balance for FY25. So at FY25 year-end the account was
positive, not $100,000 down. And FY26 ended at **+$152,280.91** after a **$42,033** surplus.

**These are not necessarily in conflict.** A fund can run a deficit mid-year on cash flow —
seasons are paid for before fees are collected — and close positive. It can also be made
whole by a transfer. We hold the endpoint and not the path: **there is no FY25 fund report
in the archive**, only FY26's, which reports FY25's closing balance as its own opening one.

**On the sequence, offered as a hypothesis.** The dates fit a story, and only a story:

| when | what the documents show |
|---|---|
| 12 March 2025 | FY26 budget approved. Athletic transportation goes 40,000 → 102,550, and the budget overview says it was *"reduced from Level Service with anticipation that athletic revolving may be enough to offset this reduction in the budget line"* |
| spring–summer 2025 | the deficit is reportedly discovered |
| 8 July 2025 | Finance Committee raises negative balances going unnoticed |
| by 16 March 2026 | the FY26 final budget for the line is 127,550, up 25,000 from what was approved |
| 30 June 2026 | fund closes at +152,281, having gained 42,033 |

**What this does not show, and it is the important part.** The large rebase — 40,000 to
102,550, a 156% increase — happened in **March 2025, before** the deficit was reportedly
discovered, and the district's own stated reason for the number it chose was that it
expected the fund to carry *more*, not less. So the deficit cannot explain the rebase; at
most it explains the later $25,000. A cost shift caused by a drained account is a coherent
reading of some of this and is contradicted by the timing of most of it.

**What would settle it:** the FY25 special revenue report or fund balance sheet for fund
1301 — one document, and the same records request that produced the FY26 one.

---

## 5. Is $127,550 defensible?

**In plain terms.** It looks indefensible against the old budget line and ordinary against
what athletic buses actually cost. Both are true, because the old budget line was never
the cost.

**The evidence.** No document in the archive states a justification for the size of the
line. Every statement about it explains a *reduction*. Measured against each base we have:

| base | value | ratio to 127,550 | implied rate |
|---|---:|---:|---:|
| FY17 all-in (approp 23,000 + fund 50,986) | 73,986 | ×1.72 | 6.24%/yr over 9 years |
| FY14 all-in | 47,085 | ×2.71 | 8.66%/yr over 12 years |
| FY25 reported actual (appropriation only) | 87,822 | ×1.45 | 45.24% in one year |
| FY24 reported actual (appropriation only) | 40,000 | ×3.19 | 78.57%/yr over two years |
| FY26 committed at Q3 | 61,016 | ×2.09 | — spring still to run |

The district reports a **7.6% Dee Bus rate increase** for FY26. Six and a quarter percent a
year, compounded from the FY17 all-in figure, lands on $127,550.

**What this does not show.** The 6.24% is solved for, not sourced — we found the rate that
reaches the number, we did not find it in a document. That it falls near the one published
rate increase is corroboration, not proof.

---

## 6. UNPROVEN — a citizen's workbook, and what it would mean if it holds

> **Nothing in this section is acted on anywhere.** No figure here feeds the model, the
> app, or any other section of this document. It is recorded because it is the only
> evidence that bears on the central question, and because if it holds it points the
> *opposite* way from what this project has been publishing.

**In plain terms.** A resident filed a public records request and got three years of the
athletics general ledger, plus the district's own sport-by-sport file. They built a
spreadsheet from it. That spreadsheet says athletic transportation cost about $117,000 in
FY24 — a year the town's budget recorded $40,000. If that is right, the town's line was
never the cost, and everything this project has said about that line being over-budgeted is
backwards.

### What the document is

`Athletics_v10.xlsx`, sha256 `63fc34d428ea09d9db8129597666e0de02adc84a315223028a0430c2c76780d1`.
Workbook metadata: single author, created and last modified `2026-07-04 17:35:35`.

**It is not a town document.** It is a third party's analysis built on two things obtained
under M.G.L. c.66 — the athletics GL for three years, and a sport-by-sport file the
district already held. That makes it a fourth kind of source, outside the three in
`data/document-basis.csv`: not `ledger`, not a district `restatement`, not `forward`, but a
derived model built on a ledger we do not hold.

We hold a copy. **It is not published in the archive**, because it is someone else's work
product and permission has not been asked.

### What in it is measurement and what is arithmetic

Its own cell `A2` declares the answer, and the arithmetic confirms it exactly:

    Fall     43,446.06 x 1.065 = 46,270.05    workbook says 46,270.05
    Winter   29,377.50 x 1.065 = 31,287.04    workbook says 31,287.03
    Spring   18,242.50 x 1.065 = 19,428.26    workbook says 19,428.24

The 25/26 column is the prior year escalated 6.5%. So is 26/27. **Only 23/24 and 24/25 are
observations** — two of its four year-columns are model output, and they must never be
quoted as data.

### The finding

| FY | general fund | fund / other | total | fund share | source |
|---|---:|---:|---:|---:|---|
| 2014 | 17,000 | 30,085 | 47,085 | 63.9% | FY19 split doc |
| 2015 | 21,600 | 40,742 | 62,342 | 65.4% | FY19 split doc |
| 2016 | 23,000 | 33,308 | 56,308 | 59.2% | FY19 split doc |
| 2017 | 23,000 | 50,986 | 73,986 | 68.9% | FY19 split doc |
| 2018 | 33,500 | 27,450 | 60,950 | 45.0% | FY19 split doc, budgeted |
| 2019 | 24,975 | 40,000 | 64,975 | 61.6% | FY19 split doc, requested |
| 2020–2023 | — | — | — | not published | |
| **2024** | **40,000** | **77,555** | **117,555** | **66.0%** | **workbook — unproven** |
| **2025** | **87,822** | **3,244** | **91,066** | **3.6%** | **workbook — unproven** |

Two documents with nothing in common, a decade apart, agree that the fund carried about
two-thirds: 59.2%–68.9% across FY14–17, and 66.0% in FY24. Then FY25 is **3.6%**.

Not a drift and not the trade described in §2 — **a single-year transfer of roughly $77,000
of annual cost from fee payers onto the town.**

### What it would resolve

Three things this document could not otherwise explain, all resolved by the same fact:

- **FY25's $87,822 against a $40,000 budget.** §4 records that as the one real miss on this
  line. It would not be a miss. It would be the town paying the whole bill for the first
  time, against a budget sized for its share.
- **FY24's actual being exactly $40,000.** §4 offers lump-sum encumbrance as a hypothesis.
  This does not compete with it — it completes it. The appropriation was capped at its
  purchase order and the remaining $77,555 was carried elsewhere.
- **Why $127,550.** §5 finds the line defensible against the all-in cost and absurd against
  the appropriation. This says the all-in cost was $91,066–$117,555 in the two observed
  years, and the line is the first one sized to it.

### What it would mean for the app — and why that matters most

The FY27 line-item note on athletic transportation, shipped in the deployed `v3` build,
reads:

> "Budgeted well above what athletics has ever actually spent. Actuals were $39,880 (FY23),
> $40,000 (FY24) and $87,822 (FY25)…"

If the workbook holds, **$40,000 in FY24 was 34% of what athletics actually spent.** That
sentence takes the town's share, calls it what athletics spent, and concludes the budget is
padded. It is rule 11 broken in one sentence, in public, and it accuses the district of
over-budgeting a line that may be the only honestly sized one in the section.

Note the direction. `notes/HANDOFF.md` §2 says the app *overstates* athletics costs by
double-counting fee revenue. On this evidence the app **understates** the cost of athletic
transportation. Both cannot be the shape of the error, and neither is settled.

### Why this is not acted on

- **It is one unsourced spreadsheet.** We hold the analysis, not the ledger under it.
- **It is internally inconsistent.** `Summary!I41` (Spring 25/26 revenue) is `75,275.00`,
  identical to the cent to `I17` (Fall) — two seasons cannot match exactly. The season
  sheets' own `Total` rows are incomplete: Fall's 25/26 fee total reads 0, Spring's
  transportation totals read 0 in two years, and summing the sport rows gives different
  answers than the total rows do. Column layouts and header names differ across the three
  sheets — `Total Received` on Fall against `Total Fees Received` on Spring, Transportation
  at `AR` on Fall and `AS` on the others.
- **We cannot tell which figures came from the GL and which from the district's
  sport-by-sport file.** They are fused in one workbook and have different reliability.
- **It does not say why the fund stopped paying.** A fund that ran out looks different in a
  ledger from one that was redirected, and §4a's reported FY25 deficit is only one of the
  readings. The others are a deliberate policy change, or a change in what Town Meeting
  authorised the fund to spend on.

### Why FY25 and not the seven years before — the fund never had slack

The obvious objection to the table above is that a fund which carried two-thirds of
transportation for a decade does not simply stop. The FY19 document answers it: **the fund
was never comfortable.** It ran within a few percent of break-even every year, and it has
shed a major obligation once before under exactly this pressure.

Fund 658's own costs and revenue, from the FY19 split document:

| FY | coaches | secretary | supplies | transport | fund cost | fees + gates | margin |
|---|---:|---:|---:|---:|---:|---:|---:|
| 2014 | 45,278 | — | 31,894 | 30,085 | 107,257 | 110,474 | +3,217 |
| 2015 | 27,221 | 5,245 | 38,730 | 40,742 | 111,938 | 140,748 | +28,810 |
| 2016 | 40,092 | 7,796 | 32,623 | 33,308 | 113,819 | 121,555 | +7,736 |
| 2017 | 34,815 | 8,594 | 37,156 | 50,986 | 131,551 | 109,351 | **−22,200** |
| 2018 | **0** | 5,437 | 27,114 | 27,450 | 60,001 | 108,000 | +47,999 |
| 2019 | **0** | 5,593 | 28,309 | 40,000 | 73,902 | 108,000 | +34,098 |

**The fund went negative in FY17, and in FY18 it dropped coaches entirely** — from $34,815
to zero — and the margin went from −$22,200 to +$47,999. That is the same move as FY25, a
decade earlier, in a document the district published itself.

And the workbook, if it holds, shows the same shape:

| FY | officials | transport | fund cost | fees | margin |
|---|---:|---:|---:|---:|---:|
| 2024 | 51,570 | 77,555 | 129,125 | 128,252 | **−872** |
| 2025 | 50,696 | 3,244 | 53,940 | 117,069 | +63,129 |

Officials cost the fund about $51,000 a year, and the general fund budgeted **$0** for
officials from FY24 on. So FY24 is the year the fund took on a new obligation roughly the
size of its entire margin. It landed at **−$872** — break-even to within a thousand
dollars, on a $128,000 fund. FY25 it shed transportation and the margin returned.

**So the answer to "why that year" is that nothing about transportation changed. What
changed is what else the fund was asked to carry.** A fund with no margin absorbs a new
obligation only by dropping an old one, and this fund has now done that twice: coaches in
FY18, transportation in FY25.

**A possible trigger, offered as a hypothesis.** FY24 is the first year in the grants record
with no ESSER money — `data/grants-history.csv` shows ESSER running through FY23 and
stopping, about half a million a year. The general fund was under pressure in exactly the
year officials moved off it. **Nothing here tests that**, and the correlation is one year
against one event. **What would settle it:** the FY24 general fund athletics detail showing
where the officials line went, which is in the GL already requested.

**And it reframes "drained".** A fund sitting at −$872 on $128,000 of revenue is one late
invoice or one slow collection month away from a visible negative balance. "The fund was
drained" and "the fund was at break-even and given something new to pay for" are the same
arithmetic described with different blame attached. The second is what the numbers show.
Neither is established.

### What would settle it

The raw GL, requested 29 August 2026: the general fund athletics org `S3066672` (especially
object `535016`) and fund `1301`, both as native export rather than PDF, plus the RevTrak
receipts detail and the district's original sport-by-sport file. Recorded in
`notes/DATA-WANTED.md` §3c.

**If it arrives and holds, the first work is not to publish the new number.** It is to stop
the deployed note asserting the old one.

---

## How to reproduce every figure in this document

Nothing here rests on a step that is not written down. Each source is named by its path in
the published archive, its sha256, and — where a figure comes from a spreadsheet — the sheet
and cell or column it comes from.

**Run the verifier first.** It recomputes every figure below from the sources and fails if
one drifted:

    python3 scripts/verify_athletics.py

### The sources

| file | sha256 (first 16) | what is taken from it |
|---|---|---|
| `district-budget-page/docs/fy19-proposed-athletics-budget.pdf` | `e0a7c5baa041112c` | §1, §2 — the FY19 split, all six years, both columns |
| `xlsx/fy27-proposals.xlsx` | `94184d3b167a6e80` | §2, §3, §5 — FY26 general fund athletics; the transportation line |
| `xlsx/school-funds-fy26.xlsx` | `2662ca779de6170d` | §2, §3, §4a — the fund's FY26 year-end reconciliation and vendors |
| `q3-fy26/town-special-revenue-fy26-q3.xlsx` | `4b9777d83c747c1c` | §4a — fund 1301 as the town books it |
| `district-budget-page/docs/fy23-quarterly-budget-update.pdf` | `6fb1e3a1b304e64d` | §4 — the only ledger view of a school line |
| `q3-fy26/town-general-fund-expenditures-fy26-q3.pdf` | `5875562be5ee615f` | §4 — the ledger behind the Finance Committee memo |

Minutes cited in §4a: `minutes/school-committee/2025-09-03-minutes-7385`,
`minutes/finance-committee/2025-07-08-minutes-7295`,
`minutes/school-committee/2025-03-12-minutes-7098`.

### Where each figure lives

**§1, the FY19 split.** Text extraction of the PDF, lines 16 and 17. The line labelled
`Athletic Transportation` is the appropriation; the line labelled `Athletic Transportation
(685)` is the revolving fund — `(685)` is a typo for `(658)`, consistent with the same
document's `plus TOTAL Revolving Fund 658` on line 31. Column headers are on lines 4 and 5:
`FY14 FY15 FY16 FY17 FY18 FY19` over `Actual Actual Actual Actual Budgeted Requested`.
Transcribed into `model/athletics.py → SPLIT_REPORTING` and rendered in the app.

    grep -n 'Athletic Transportation' \
      sources/district-budget-page/text/fy19-proposed-athletics-budget.txt

**§2 and §3, FY26 general fund athletics.** `xlsx/fy27-proposals.xlsx`, sheet
`FY27 Budget Projection`, **column G** (`FY26` over `FINAL BUDGET`, cells `G4`/`G5`), summed
over every row whose function header in column A begins `3510` — that is both
`3510 - Athletic Expenses` and `3510 - Athletics Salaries`. Function headers are rows where
column A matches `^\d{4}\s*-`.

**Read the workbook by cell reference, not by opening it.** Nine columns are hidden —
`C, H, I, N, O, P, T, U, V` — including `C` (FY23 ACTUALS), `H` (FY26 actuals to date) and
`I` (FY26 encumbrances to date). They do not appear on screen. Our second copy,
`xlsx/fy27-budget-projection-3-25-26.xlsx`, is data-identical and hides a *different* set,
so the two files show a reader different tables. `data/document-basis.csv` records the
hidden set for every workbook in the archive.

**§2 and §3, the fund.** `xlsx/school-funds-fy26.xlsx`, sheet `Athletics Revolving`.
Vendors are a single text cell, `A23`. The expenditure categories are `A19`–`A22`; note
that `A20` names transportation inside purchase of service. The roll-forward is `B5`–`B8`.

**§3, the FY19 programme totals.** Lines 30–32 of the same text extraction. Its stated
grand totals are $1 off its own two columns in FY14 and FY15 and exact in the other four
years; the verifier asserts that rather than hiding it.

**§4, the ledger view.** Text extraction, the row beginning `S3066672  535016`. `S3066672`
is the athletics expense org; `535016` is the transportation object code. The same object
appears under three other orgs in that report, which is why the org code matters.

**§4, the memo's arithmetic.** `q3-fy26/town-general-fund-expenditures-fy26-q3.txt`, the
`GRAND TOTAL` line. Extracted by `scripts/extract_town_ledger.py`, which reconciles its
output to that printed total before it will write.

**§5, the implied rates.** Solved, not sourced: the compound rate that carries each base to
$127,550 over the years between. `(127550 / base) ** (1 / years) - 1`.

### The classification behind the method

    python3 scripts/classify_document_basis.py     # writes data/document-basis.csv

Every document in the archive by what produced its figures — `ledger`, `restatement`,
`forward`, `narrative` — each row quoting the raw header text the call rests on, with its
line number or cell reference. The counts in "The approach" above come from it.

### A caution about method, learned here

Every serious error in building this document was the same one: **reading a rendering
instead of the source.** A concatenated header quoted as though the sheet said it. A hidden
column read as though a reader could see it. A budget workbook's `ACTUALS` column described
as an actuals document. A verifier that checked a sentence was present rather than that its
count was right, and passed while the count was wrong.

So: quote cell references and raw text, never a rendered label; check what a reader
actually sees, not only what the file contains; and make a check assert the number, not the
prose around it.

---

## 7. Both sides, every year we can see either one

**In plain terms.** This is the whole picture in one place: what the town appropriated for
athletics, and what the fee-funded revolving account paid, line by line, for every year
either is visible. The blank stretch in the middle is the point — for four years nobody
published the fund side at all.

**The evidence.** Generated from `data/athletics-history.csv` by
`scripts/extract_athletics_history.py`. The FY14–FY19 reconstruction is checked rather than
asserted: the itemised rows are summed against the document's own stated column totals, and
five of six years tie to the dollar on each side. The two that do not are the document's own
rounding — FY16 general by $2, FY17 revolving by $1 — and the script fails if any year is
off by more than that.

**General fund appropriation**

FY14–FY19 from the FY19 athletics document; FY20–FY25 actuals from `data/line-history.csv`; FY26 is the FY26 FINAL BUDGET column.

| line | FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | FY26 |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| Athletic Coaches | 114,636 | 130,661 | 120,646 | 130,020 | 163,146 | 150,636 | 91,601 | 139,492 | 145,991 | 100,351 | 46,733 | 155,614 | 159,444 |
| Athletic Director | — | — | — | — | 48,000 | 49,440 | 90,000 | 91,800 | 103,752 | 85,977 | 90,200 | 96,044 | 74,406 |
| Athletic Transportation | 17,000 | 21,600 | 23,000 | 23,000 | 33,500 | 24,975 | 38,795 | 45,000 | 48,755 | 39,880 | 40,000 | 87,822 | 127,550 |
| Athletic Officials | 39,875 | 40,469 | 38,997 | 38,059 | 39,221 | 40,117 | 201 | 21,148 | 47,967 | — | — | — | — |
| Athletic Trainer | — | — | — | — | — | — | — | — | — | 51,660 | 61,800 | 63,900 | 66,200 |
| Athletic Dues & Fees | 9,519 | 9,759 | 9,751 | 10,782 | 12,499 | 12,529 | 22,290 | 20,623 | 20,789 | 22,251 | 18,486 | 31,995 | 20,000 |
| Special Detail/Athletic Events | 444 | 5,559 | 139 | 1,592 | 5,900 | 5,344 | 9,773 | 5,000 | 5,897 | 3,705 | 5,807 | 72,864 | 7,100 |
| Athletic Insurance | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 5,990 | 8,980 | 8,980 | 8,980 | 8,980 | 9,000 |
| Athletic Equipment/Reconditioning | 3,065 | 4,361 | 5,265 | 157 | 4,500 | 4,500 | 5,898 | 10,000 | 4,897 | 1,932 | 7,602 | 7,190 | 10,000 |
| Athletic New Equipment | — | 1,440 | 5,456 | 5,151 | 5,850 | 6,400 | 4,498 | 5,850 | 5,188 | 5,648 | 5,673 | 9,055 | 6,000 |
| Athletic Replacement of Uniforms | 3,787 | 4,960 | 1,669 | 7,944 | 7,872 | 8,000 | 10,560 | 7,872 | 1,690 | — | 10,698 | — | — |
| Athletic Secretary | — | — | — | — | — | — | — | — | — | — | — | — | 20,407 |
| Freshman & MS Coaches | — | — | — | — | — | — | — | — | — | — | 14,415 | — | — |
| Freshman & Ms Coaches | — | — | — | — | — | — | — | — | — | — | — | — | 14,415 |
| Athletic Expenses/Supplies | — | — | — | — | — | — | 11,243 | — | 834 | — | — | — | — |
| Unified Sports Coach | — | — | — | — | — | — | 1,200 | 3,925 | 1,200 | — | 3,925 | — | — |
| Unified Sports,Track/Basketball Coach | — | — | — | — | — | — | — | — | — | — | — | — | 3,812 |
| **total** | **194,316** | **224,799** | **210,913** | **222,695** | **326,478** | **307,931** | **292,049** | **356,700** | **395,940** | **320,384** | **314,319** | **533,464** | **518,334** |

**Chapter 658 revolving fund — where the fees go**

**FY20–FY23 is blank because nothing was published, not because the fund paid nothing.** FY24 and FY25 carry only two lines, both from the unproven workbook of §6 — the fund certainly paid for more than officials and transportation in those years. FY26 is the fund’s own year-end reconciliation.

| line | FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | FY26 |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| Athletic Transportation | 30,085 | 40,742 | 33,308 | 50,986 | 27,450 | 40,000 | — | — | — | — | 77,555 | 3,244 | — |
| Athletic Expenses/Supplies | 31,894 | 38,730 | 32,623 | 37,156 | 27,114 | 28,309 | — | — | — | — | — | — | — |
| Athletic Coaches | 45,278 | 27,221 | 40,092 | 34,815 | — | — | — | — | — | — | — | — | — |
| Purchase of service (officials, uniforms, transportation, ice time, dues) | — | — | — | — | — | — | — | — | — | — | — | — | 113,602 |
| Athletic Officials | — | — | — | — | — | — | — | — | — | — | 51,570 | 50,696 | — |
| Track and Field Payment | — | — | — | 25,000 | 40,000 | — | — | — | — | — | — | — | — |
| Athletic Secretary | — | 5,245 | 7,796 | 8,594 | 5,437 | 5,593 | — | — | — | — | — | — | — |
| Salaries (4 revolving-fund staff) | — | — | — | — | — | — | — | — | — | — | — | — | 30,514 |
| Field upgrades / turf | — | — | — | — | — | 10,000 | — | — | — | — | — | — | — |
| Athletic New Equipment | 890 | — | — | — | 3,000 | 4,000 | — | — | — | — | — | — | — |
| General supplies | — | — | — | — | — | — | — | — | — | — | — | — | 2,795 |
| **total** | **108,147** | **111,938** | **113,819** | **156,551** | **103,001** | **87,902** | **—** | **—** | **—** | **—** | **129,125** | **53,940** | **146,911** |

**Both sides, and the distribution**

| | FY14 | FY15 | FY16 | FY17 | FY18 | FY19 | FY20 | FY21 | FY22 | FY23 | FY24 | FY25 | FY26 |
|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| general fund | 194,316 | 224,799 | 210,913 | 222,695 | 326,478 | 307,931 | 292,049 | 356,700 | 395,940 | 320,384 | 314,319 | 533,464 | 518,334 |
| revolving fund | 108,147 | 111,938 | 113,819 | 156,551 | 103,001 | 87,902 | *not published* | *not published* | *not published* | *not published* | 129,125 *partial* | 53,940 *partial* | 146,911 |
| all in | **302,463** | **336,737** | **324,732** | **379,246** | **429,479** | **395,833** | ≥ 292,049 | ≥ 356,700 | ≥ 395,940 | ≥ 320,384 | ≥ 443,444 | ≥ 587,404 | **665,245** |
| fund share of all-in | **36%** | **33%** | **35%** | **41%** | **24%** | **22%** | — | — | — | — | ≥ 29% | ≥ 9% | **22%** |
| fund revenue (fees, gates) | — | 135,767 | 121,456 | 108,551 | 108,000 | 108,000 | — | — | — | — | — | — | 188,944 |

**Read the blanks as the finding.** FY20–FY23 shows no fund side because no document
published one, not because the fund paid nothing — it certainly did. FY24 and FY25 carry
two lines only, both from the unproven workbook. So the all-in row is a floor for six of
thirteen years, and the fund's share is understated wherever it is marked ≥.

**What the visible years show.** Where both sides are published — FY14–FY19 and FY26 — the
fund carries between 22% and 41% of all-in athletics, and it is the *composition* that
moves rather than the share: coaches and supplies early, transportation throughout, and by
FY26 officials, uniforms and video. The one thing that does not appear on the general fund
side in any year is the fund itself.

---

## Conclusions

1. **An athletics appropriation is not what athletics costs, and the district has said so
   twice** — once by publishing both columns in FY19, once in words in the FY26 budget
   overview. Rule 11 is not a suspicion about this line. It is documented.

2. **The whole FY26 athletics program is $665,245**, of which the general fund carries
   $518,334 and the fee-funded revolving fund carries $146,911.

3. **The fund's share is unchanged across the only two years we can compare** — 22.2% in
   FY19, 22.1% in FY26. The town did not absorb a retreating fund. Transportation and
   officials/uniforms traded places at comparable size.

4. **$127,550 is not the outlier it appears to be**, once measured against the all-in cost
   rather than against an appropriation that excluded the fund's larger share.

5. **The reported actuals on this line are encumbrances, not payments**, at least in the
   one year we can see. Any rate measured off them measures commitment, not spending.

6. **No document in the archive names a carrier beside a dollar figure for athletics.** The
   only actual payment to Dee Bus recorded anywhere is $731.50 for a single field trip,
   in School Committee minutes of 4 March 2026.

---

## Open questions

**On funding**

- Whether the general fund transportation line is still net of anything today. The FY26
  fund's unnamed purchase-of-service residual is $4,099, which caps any bus payment it
  could be making — but that is a ceiling, not a measurement.
- When transportation moved from the fund to the appropriation, and whether in one step.
  Nothing between FY19 and FY25 shows the split.
- Whether the FY19 split format continued and simply stopped being published. Nine
  department-level submissions exist for FY19 and none for any other year.
- **Whether the athletics fund ran a deficit in FY25, and how large.** Reported in public
  comment as "over $100,000" and corroborated in outline by the Finance Committee, but the
  fund closed FY25 at +$110,248 and no FY25 fund report exists in the archive. See §4a.
  This is the single most likely explanation for a cost shift onto the town and it is not
  established. **The FY25 special revenue report for fund 1301 would settle it.**

**On cost**

- What athletic transportation actually cost in any year. Every figure we hold is a budget,
  an encumbrance, or a restatement of one of those.
- The FY26 year-end figure for the line, which would settle whether $127,550 was right.

**On fees** — worked in `sped-and-funds.md` §2.2, restated here as open:

- Why the fund collected $188,944 net in FY26 when the app's model of the same fee produces
  $130,129. Implied per participation is $287.82 high school and $248.60 middle school,
  against a stated first-child fee of $250. Either participations are undercounted or there
  are sport surcharges we do not hold.
- Whether the $152,281 fund balance is committed to anything. It is a balance, not a
  windfall, and revolving spending is capped by annual Town Meeting authorisation.

**The one request that would answer the most**

The **vendor warrant** — the list of bills the Select Board approves for payment, itemised
by vendor. It is a public record produced roughly weekly, and it is the only document that
would put a carrier's name beside an amount. Failing that, the account detail history for
object `535016`.

---

## What this changes in the app

Not yet done. In order:

1. `model/athletics.py` asserts `FEE_REVENUE_IN_BUDGET = False` on the reasoning that fees
   flow through revolving accounts so the budget figures are gross. The mechanism is the
   opposite: fees pay for officials and uniforms, and those lines are budgeted `$0` in the
   general fund. The figures are net because the cost never appears.
2. The fee curve's base should be the whole program, $665,245, not the general fund
   portion — and it must count the $146,911 the fee already pays.
3. `estimatedFy26Revenue` is 31% below what the fund reports collecting. The $960
   self-funding fee and `feeIncreaseValue` are calibrated off it.
4. `FEE_ACCOUNTING` infers that athletics fees sit under M.G.L. c.71 §47 from their absence
   from the §53E½ warrant article. The town books the fund as `1301 CHAPTER 658 REVOLVING
   FUND`. The inference can be replaced with the fact.
5. Conclusion 5 — *"athletics cannot pay for itself once you put the buses back"* — rests on
   all of the above and should not be restated until they are fixed.
