How money reaches the schools
FY2026, from every source the town budgets to the 258 accounts the school department spends from — and the one connection in the middle that cannot be drawn, because no record ties a source to a department.
$495,918 of that fund spending came from grant funds that booked NO revenue at all this year. Money that arrived in an earlier year, or arrived without being recorded — the budget documents do not distinguish those, and neither can we. It is not FY26 income and is not in the revenue figure above; it used to be, which made additional revenue look $2,049,069.
The first three cards are three different KINDS of quantity — a permission, an inflow, an outflow — so the difference between them is not an error. It is money not spent, and it is two separate things.
| The school budget | $26,287,474 |
| + additional revenue | $1,553,151 |
| = everything available | $27,840,625 |
| − what was actually spent | $27,350,055 |
| = not spent | $490,569 |
Which splits in two:
| Appropriation not spent Voted and not used. $236,784 of it is already committed by purchase order, so it is spoken for rather than spare. | $673,795 |
| Fund money not spent this year The funds took in $1,553,151 and spent $1,736,376 — so this is NEGATIVE. They spent balances built up in earlier years. | $-183,225 |
This is NOT the $1,592,256 in the fourth card. That figure is what the funds HOLD — a balance built up across years, most of it put there before FY26. This is one year's flow. A balance and a flow are different quantities and they are not expected to agree.
And the bases are mixed, which cannot be helped. The appropriation side is actual spending through period 12; the fund side is through period 9, because the town publishes no twelve-month fund report. Three more months of fund spending are missing from every figure above, so "not spent" is an upper bound.
And the town spends on schools outside all four figures. $1,528,336 of retiree health and a resource stipend sits in other departments’ appropriations, plus an unknown share of the $2,392,572 pension. Monty Tech is excluded throughout: it is a different district.
Mixed bases, and it cannot be helped. Department 300 is actual spending through period 12; the funds are actual through period 9, because the town publishes no twelve-month fund report. So the middle figure is a floor — three more months of fund spending are not in it, and neither is any part of the pension.
Do not add the right-hand column and call it school spending. It comes to $33,276,289 and that figure means nothing: the school budget box is a BUDGET rather than spending, Monty Tech is a different district, and the pension box is the whole town’s. The column adds because each dollar is drawn once — that is a property of the drawing, not a finding about the schools.
Revenue is not spending. A fund is a tank, not a pipe: it can spend less than it receives and accumulate, or more than it receives and draw a balance down. Reading across a row tells you what a fund took in and what it paid out — it does not tell you those are the same money.
Across all the schools’ own funds in FY2026 to 31 March:
| money in | $1,553,151 |
| money out | $1,736,376 |
| net | -183,225 |
| opening balance derived from the fund identity; the town’s report does not print it | $1,775,481 |
| held at 31 March | $1,592,256 |
The funds collectively spent $183,225 more than they took in. That money is real and it came from balances built in earlier years. A diagram that balanced would be hiding it.
School lunch is the clearest single case — in $572,231, out $739,586, holding $287,771. The program is solvent this year and has a smaller cushion next year, and neither the appropriation nor the “spent” figure shows that.
Only that the fund spent the money. Not what it bought. There is no expense report for the special revenue funds, and fund 1301 — the one fund with a transaction journal — records no vendor on any of its 46 FY26 payments. So “Athletics fund spent” means money left that fund. That it went to athletics is the statute talking, not the ledger.
No offset edges are drawn. The district publishes three amounts (Extended Day $71,247, Facilities $25,000, Athletic $20,000) and none for lunch, school choice, the circuit breaker or the grants. Drawing an edge only where an amount happens to be published would imply the others have no offset, which is a stronger claim than we can make.
What each program costs across both sides. These figures overlap the diagram above and must never be added to it — most of each row is already inside the school budget box.
| program | in the budget | from funds | total |
|---|---|---|---|
| Special education | $5,909,548 | $420,133 | $6,329,681 |
| Transportation | $1,531,234 | not found | $1,531,234 |
| Athletics | $518,334 | $100,467 | $618,801 |
| Food service | — | $739,586 | $739,586 |
| Extended day and after school | — | $340,899 | $340,899 |
Athletics is the case to read. The town appropriates $518,334 and the district’s own athletics documents record a further $146,911 spent through the revolving fund (it took in $188,944 — two different quantities, never one). And the district’s FY26 budget overview says why the line moves: it was cut “with anticipation that athletic revolving may be enough to offset this reduction in the budget line” — and the next year, “athletic revolving can not support these increased costs”, at a 254% line increase.
Every document behind the figures above. This list is recorded while the page is built — SQLite reports each table the render actually reads, and the documents come off doc_id on the rows themselves, so it cannot drift away from what the page does.
All 23 were traced that way.
| document | feeds | how we know | sha256 |
|---|---|---|---|
| Athletics_v10.xlsx (citizen analysis, unpublished) | athletics_history | traced | not on disk |
| budget-workbooks/fy27-proposals.xlsx | athletics_history | traced | not on disk |
| budget-workbooks/school-funds-fy26.xlsx | athletics_history | traced | not on disk |
| district-budget/docs/fy19-proposed-athletics-budget.pdf | athletics_history | traced | not on disk |
| fy24-approved-budget.txt | athletics_history | traced | not on disk |
| fy27-budget-projections-as-of-2-24-26-with-restorations.txt | athletics_history | traced | not on disk |
| fy27-budget-projections-as-of-3-16-26-with-restorations.txt | athletics_history | traced | not on disk |
| data/money-assumptions.csv | read directly by the script | traced | 620c2b74ce21d327… |
| data/money-classification.csv | read directly by the script | traced | 2ece30bf2f0347a9… |
| data/money-edges.csv | read directly by the script | traced | 0b05cefe4369e8d6… |
| data/money-gaps.csv | read directly by the script | traced | 730e24a9b811a365… |
| town-ledgers/expenses/glytdbud-expense-fy2026-p09-ef-peg-access.txt | account, fund, ledger_snapshot | traced | 6e2ada913f7457f2… |
| town-ledgers/expenses/glytdbud-expense-fy2026-p09-ef-sewer.txt | account, fund, ledger_snapshot | traced | f67d785fd5ba15dc… |
| town-ledgers/expenses/glytdbud-expense-fy2026-p09-ef-solid-waste.txt | account, fund, ledger_snapshot | traced | be236a99caa7e8cb… |
| town-ledgers/expenses/glytdbud-expense-fy2026-p09-ef-water.txt | account, fund, ledger_snapshot | traced | 58fa38d6d654d647… |
| town-ledgers/expenses/glytdbud-expense-fy2026-p09-gf-all.txt | account, fund, ledger_snapshot | traced | 449853bc842b2494… |
| town-ledgers/expenses/glytdbud-expense-fy2026-p12-gf-all.xlsx | account, fund, ledger_snapshot | traced | 215dd64f597f1f2d… |
| town-ledgers/fund-balances/special-revenue-fy2026-p09.xlsx | fund_activity | traced | 4b9777d83c747c1c… |
| town-ledgers/revenue/glytdbud-revenue-fy2026-p09-ef-peg-access.txt | account, fund, ledger_snapshot | traced | 668868e19fc24fa6… |
| town-ledgers/revenue/glytdbud-revenue-fy2026-p09-ef-sewer.txt | account, fund, ledger_snapshot | traced | ccaa743215e8fea4… |
| town-ledgers/revenue/glytdbud-revenue-fy2026-p09-ef-solid-waste.txt | account, fund, ledger_snapshot | traced | 78a0f82a9b06f54a… |
| town-ledgers/revenue/glytdbud-revenue-fy2026-p09-ef-water.txt | account, fund, ledger_snapshot | traced | f4647f445bf824ec… |
| town-ledgers/revenue/glytdbud-revenue-fy2026-p09-gf-all.txt | account, fund, ledger_snapshot | traced | 7e0f22acb4934c57… |
Addresses resolve on the published site; the archive is also mirrored on GitHub. A sha256 is here because a file can be replaced at the same URL — see rule 12.
Generated by scripts/build_money_flow.py from
sources/data/lunenburg.db. Every figure is computed; --check
fails if this file stops reproducing. Companion to money-in.html, kept
unchanged beside it.