Every table, what it holds, and which years it covers.
The district's budget, its own funds, and what the town publishes about its schools.
Tier 1 · totalswhat was appropriated and what is left, by department
dese_ch70_formula school Tier 1 · totals fact 259 rows 1993–2026one row per district per fiscal yearThe Chapter 70 formula term by term for every Massachusetts district, FY1993-FY2026: foundation enrollment, foundation budget, required local contribution, aid, required net school spending and what was actually spent. Thirty-four years. It answers a question nobody in town can currently put a number on -- does Lunenburg spend above or below the minimum the state requires -- and its FY2026 aid figure ties exactly to the town's own MUNIS revenue ledger.
THREE COLUMN NAMES IN THE SOURCE MEAN TWO THINGS EACH. required_nss is the workbook's column I, the formula's own arithmetic; required_nss_published is column J, what DESE publishes with carryover included, and the two differ in over a thousand district-years. ch70_aid and ch70_aid_after_penalties are columns H and M. AND nss_stage IS LOAD-BEARING: the source column is headed actualNSS for all thirty-four years, but FY2025 and FY2026 hold BUDGETED net school spending. Rule 1 -- a rate measured from an actual to a budget is partly growth and partly the step between the two. Publish the ratio to required as a measurement and never as a verdict: the required minimum is a floor, not a standard of adequacy. SCOPED to Lunenburg, its six peers and the state row, because the published database has to stay under Cloudflare's 25MB per-asset limit. Every identity the extract asserts is asserted across ALL districts before the scope is applied, and dese_ch70_statewide keeps the all-district comparison as a distribution.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
org4_code | TEXT | not described yet |
lea_number | TEXT | not described yet |
district | TEXT | The district's name as DESE prints it. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
foundation_enrollment | REAL | not described yet |
foundation_budget | REAL | not described yet |
required_local_contribution | REAL | not described yet |
ch70_aid | REAL | not described yet |
ch70_aid_after_penalties | REAL | Chapter 70 aid as the workbook states it after any penalty. dollars Column M, described by the sheet as “From this file, reflecting penalties, if any”. It differs from ch70_aid in several hundred district-years. |
required_nss | REAL | Required net school spending as the Chapter 70 formula computes it: required local contribution plus Chapter 70 aid. dollars The source sheet has TWO columns called rqdnss and they are different numbers in over a thousand district-years. This is column I. What DESE publishes is required_nss_published, column J. |
required_nss_published | REAL | Required net school spending as DESE publishes it, carryover included. dollars Column J of the DataC70 sheet, whose own note reads “from Profile file, includes carryover”. This is the figure DataNSS and the compliance test use, and it is the one to quote. |
net_school_spending | REAL | not described yet |
nss_stage | TEXT | Whether the net school spending on the row is what was SPENT or what was BUDGETED. LOAD-BEARING. The source column is headed actualNSS for all thirty-four years and the last two hold budgeted figures — DESE’s own DataNSS sheet names them budnss. Rule 1: a rate measured from an actual to a budget is partly growth and partly the step between the two. |
nss_pct_of_required | REAL | not described yet |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | org4_code | lea_number | district | level | foundation_enrollment | foundation_budget | required_local_contribution | ch70_aid | ch70_aid_after_penalties | required_nss | required_nss_published | net_school_spending | nss_stage | nss_pct_of_required | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1996 | 01250000 | 0125 | 125 | HARVARD | district | 875.0 | 4772933.0 | 5051132.0 | 685718.0 | 685718.0 | 5736850.0 | 5736850.0 | 5720674.0 | actual | 0.9972 | yes | sources/state-dese/dese-ch70-district-profi… |
| 2011 | 06100000 | 0610 | 610 | ASHBURNHAM WESTMINSTER | district | 2383.0 | 20412503.04 | 10455439.0 | 9882650.0 | 9882650.0 | 20338089.0 | 20338089.0 | 21628659.0 | actual | 1.0635 | yes | sources/state-dese/dese-ch70-district-profi… |
| 2025 | 01250000 | 0125 | 125 | HARVARD | district | 881.0 | 10978851.09 | 8697832.0 | 2288491.0 | 2288491.0 | 10986323.0 | 10986323.0 | 19241826.46 | budgeted | 1.7514 | yes | sources/state-dese/dese-ch70-district-profi… |
dese_circuit_breaker school Tier 1 · totals fact 147 rows 2006–2026one row per district per FISCAL yearState reimbursement for high-cost special education placements, FY2006-FY2026, split into instruction and tuition against transportation, with prior-year adjustments and relief payments separated -- so a year's receipt can be told apart from a year's entitlement. It also carries eligible_students_claimed, a count of CHILDREN.
KEYED ON FISCAL YEAR, NOT SCHOOL YEAR. Every other DESE table here is school year, and this repository has already had a fiscal-year type error that matched nothing silently. This is money the district RECEIVES and it does not appear in the general fund appropriation the town votes -- rule 11: a budget line that fell because circuit breaker rose is not a line that got cheaper. eligible_students_claimed counts CLAIMS, which is not the same set as the children in sources/data/placement-counts.csv. SCOPED to Lunenburg, its six peers and the state row, because the published database has to stay under Cloudflare's 25MB per-asset limit. Every identity the extract asserts is asserted across ALL districts before the scope is applied, and dese_ch70_statewide keeps the all-district comparison as a distribution.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
eligible_students_claimed | REAL | Children whose high-cost special education costs the district claimed circuit breaker reimbursement for. students A count of CLAIMS, which is not the same set as the placements in placement-counts.csv, and not the same as students with disabilities. |
total_eligible_expenses | REAL | not described yet |
threshold_amount | REAL | not described yet |
net_eligible_instruction_tuition | REAL | not described yet |
net_eligible_transport | REAL | not described yet |
total_net_claim | REAL | not described yet |
reimb_instruction_tuition | REAL | not described yet |
reimb_special_circumstance_tuition | REAL | not described yet |
reimb_transport | REAL | not described yet |
reimb_special_circumstance_transport | REAL | not described yet |
prior_year_adjustment | REAL | not described yet |
total_quarterly_payment | REAL | not described yet |
extra_relief_payment | REAL | not described yet |
additional_supplemental_payment | REAL | not described yet |
comments | TEXT | not described yet |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | level | eligible_students_claimed | total_eligible_expenses | threshold_amount | net_eligible_instruction_tuition | net_eligible_transport | total_net_claim | reimb_instruction_tuition | reimb_special_circumstance_tuition | reimb_transport | reimb_special_circumstance_transport | prior_year_adjustment | total_quarterly_payment | extra_relief_payment | additional_supplemental_payment | comments | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2014 | 00000000 | State | state | 10018.0 | 718839274.0 | 402182880.0 | 316656394.0 | NULL | 316656394.0 | 233330539.0 | 5549659.0 | NULL | NULL | -143414.0 | 238737158.0 | 3066047.0 | 374.0 | empty | empty | sources/state-dese/dese-circuit-breaker.xlsx |
| 2024 | 06160000 | Ayer Shirley School District | district | 36.0 | 3292170.0 | 1732290.0 | 847986.0 | 711893.0 | 1559879.0 | 605775.0 | 40287.0 | 377275.0 | 58670.0 | NULL | 1082007.0 | NULL | NULL | empty | yes | sources/state-dese/dese-circuit-breaker.xlsx |
| 2026 | 00000000 | State | state | 10759.0 | 1443824902.0 | 556847072.0 | 652792540.0 | 234185325.0 | 886977865.0 | 475014062.0 | 19440509.0 | 155277106.0 | 5464878.0 | -288500.0 | 654908055.0 | 8730418.0 | NULL | empty | yes | sources/state-dese/dese-circuit-breaker.xlsx |
dese_enrollment school Tier 1 · totals fact 1,194 rows 1992–2026one row per organisation per school yearEnrollment by grade and by selected population -- English learner, low income, economically disadvantaged, high needs, students with disabilities -- per state, district and school, back to SY1992. The denominator for nearly every rate on this site.
Filter org_level. swd_cnt is a published count of students with disabilities and it agrees exactly with dese_sped_program for Lunenburg SY2026; it does NOT agree with the denominator the staffing ratios in dese_sped_indicator use, which is twelve lower in the same year. A per-pupil figure is a division by a count whose definition has to be stated with it -- DESE publishes at least four different counts of Lunenburg's children and none of them equal, see money_gaps.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_level | TEXT | Whether the row is the state, a district, a school, or a collaborative. All four sit in one column in the DESE source. Filter on it before summing anything. And a DISTRICT row is not the sum of its SCHOOL rows: staff and children with no school assignment have a district row and no school row. |
total_cnt | REAL | not described yet |
pk_cnt | REAL | not described yet |
k_cnt | REAL | not described yet |
grade_1_cnt | REAL | not described yet |
grade_2_cnt | REAL | not described yet |
grade_3_cnt | REAL | not described yet |
grade_4_cnt | REAL | not described yet |
grade_5_cnt | REAL | not described yet |
grade_6_cnt | REAL | not described yet |
grade_7_cnt | REAL | not described yet |
grade_8_cnt | REAL | not described yet |
grade_9_cnt | REAL | not described yet |
grade_10_cnt | REAL | not described yet |
grade_11_cnt | REAL | not described yet |
grade_12_cnt | REAL | not described yet |
sp_cnt | REAL | not described yet |
el_cnt | REAL | not described yet |
el_pct | REAL | not described yet |
first_lang_not_english_cnt | REAL | not described yet |
high_needs_cnt | REAL | not described yet |
high_needs_pct | REAL | not described yet |
low_income_cnt | REAL | not described yet |
low_income_pct | REAL | not described yet |
econ_disadvantaged_cnt | REAL | not described yet |
econ_disadvantaged_pct | REAL | not described yet |
swd_cnt | REAL | not described yet |
swd_pct | REAL | not described yet |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | org_code | org_name | org_level | total_cnt | pk_cnt | k_cnt | grade_1_cnt | grade_2_cnt | grade_3_cnt | grade_4_cnt | grade_5_cnt | grade_6_cnt | grade_7_cnt | grade_8_cnt | grade_9_cnt | grade_10_cnt | grade_11_cnt | grade_12_cnt | sp_cnt | el_cnt | el_pct | first_lang_not_english_cnt | high_needs_cnt | high_needs_pct | low_income_cnt | low_income_pct | econ_disadvantaged_cnt | econ_disadvantaged_pct | swd_cnt | swd_pct | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2013 | 06730000 | Groton-Dunstable | 06730001 | Boutwell School | school | 58.0 | 58.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 3.0 | 29.0 | 0.5 | 0.0 | 0.0 | NULL | NULL | 29.0 | 0.5 | yes | sources/state-dese/dese-enrollment-by-grade… |
| 2020 | 07350000 | North Middlesex | 07350035 | Varnum Brook | school | 542.0 | 0.0 | 102.0 | 108.0 | 107.0 | 108.0 | 117.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 3.0 | 0.006 | 7.0 | 189.0 | 0.349 | NULL | NULL | 106.0 | 0.196 | 104.0 | 0.192 | yes | sources/state-dese/dese-enrollment-by-grade… |
| 2022 | 01250000 | Harvard | 01250000 | Harvard | district | 1025.0 | 27.0 | 80.0 | 52.0 | 66.0 | 68.0 | 78.0 | 81.0 | 83.0 | 77.0 | 90.0 | 75.0 | 86.0 | 71.0 | 91.0 | 0.0 | 7.0 | 0.007 | 57.0 | 208.0 | 0.198 | 85.0 | 0.083 | NULL | NULL | 118.0 | 0.112 | yes | sources/state-dese/dese-enrollment-by-grade… |
dese_town_enrollment school Tier 1 · totals fact 1,488 rows 2014–2026one row per school year per town of residence per enrollment reason per enrolling districtWhere a town's resident children actually go to school, and who arrives from where, SY2014-SY2026, by reason: school choice, charter, tuitioned in several ways, METCO, foster care. Both directions of the choice question, and the headcounts behind the choice dollars on the cherry sheet.
ONE TABLE FROM TWO DATASET IDS. DESE publishes vxt3-k35x as Sending and 8xyg-59b2 as Receiving; compared row by row they hold the IDENTICAL rows and differ only in column order, so they are one measurement published twice and are loaded once. Do not treat a net position drawn from this as resting on two agreeing sources. Filter on town for children leaving, on lea for children arriving; town='Lunenburg' AND lea='01620000' is the resident children who stay. SCOPED: every row about Lunenburg in either direction plus both directions for the six peers, because 74,878 statewide rows would take the published database past Cloudflare's 25MB per-asset limit. The two source files were compared on all 74,878 rows before scoping, so the claim that they are one dataset published twice covers the whole publication.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
town | TEXT | not described yet |
enrollment_reason | TEXT | not described yet |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
students | REAL | not described yet |
doc_id_sending | TEXT | not described yet |
doc_id_receiving | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | town | enrollment_reason | lea | district | students | doc_id_sending | doc_id_receiving |
|---|---|---|---|---|---|---|---|
| 2019 | Shirley | Tuitioned In - Agreement With Another In-st… | 07350000 | North Middlesex | 2.0 | sources/state-dese/dese-residents-sending.x… | sources/state-dese/dese-enrollment-receivin… |
| 2021 | Fitchburg | School Choice Program | 06100000 | Ashburnham-Westminster | 21.0 | sources/state-dese/dese-residents-sending.x… | sources/state-dese/dese-enrollment-receivin… |
| 2022 | Clinton | School Choice Program | 06160000 | Ayer Shirley School District | 2.0 | sources/state-dese/dese-residents-sending.x… | sources/state-dese/dese-enrollment-receivin… |
school_special_revenue_fy26_q3 school Tier 1 · totals fact 62 rowsone row per school fundThe schools' own funds at one moment (FY26 period 9): per fund, revenue received, salaries paid, other expenditure, encumbered, and the balance left. Dollars.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
revenue | TEXT | Money received into the fund. dollars Not the same quantity as spending, and the two must never be added. |
salaries | TEXT | The salary portion of the fund's spending. dollars |
expenditure | TEXT | The non-salary portion of the fund's spending. dollars |
encumbered | TEXT | Committed by purchase order but not yet spent. dollars |
balance | TEXT | not described yet |
First 3 rows, in rowid order:
| fund | name | revenue | salaries | expenditure | encumbered | balance |
|---|---|---|---|---|---|---|
| 2748 | FY24 117 EVIDENCE | -0.0 | 0.0 | 0.0 | 0.0 | -0.0 |
| 2653 | FY24 FAMILY & COMMUNITY #237 | -0.0 | 0.0 | 0.0 | 0.0 | 433.7 |
| 2582 | EECBG ENERGY EFFICIENCY GRANT | -0.0 | 0.0 | 0.0 | 0.0 | 316.48 |
total_expenses_history school Tier 1 · totals fact 28 rows 2014–2027one row per year per stageOne dollar total per year per stage — the district's own stated total expenses, as each document states it.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
total | TEXT | The row's total, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
First 3 rows, in rowid order:
| fy | stage | total | documents_disagree |
|---|---|---|---|
| 2018 | settled | 6034260 | 1 |
| 2022 | proposed | 6008705 | 0 |
| 2026 | settled | 9169982 | 0 |
total_salaries_history school Tier 1 · totals fact 28 rows 2014–2027one row per year per stageOne dollar total per year per stage — the district's own stated total salaries.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
total | TEXT | The row's total, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
First 3 rows, in rowid order:
| fy | stage | total | documents_disagree |
|---|---|---|---|
| 2018 | proposed | 13374150 | 0 |
| 2020 | proposed | 14407125 | 0 |
| 2024 | proposed | 16226166 | 0 |
Tier 2 · categorieswhether a category — guidance, special education, transport — is over
budget_figure school the spine Tier 2 · categories fact 9,503 rows 2014–2027one row per line per year per stage per variantDollar amounts per budget LINE from the district's budget documents — no counts, no people. Each figure carries the stage it represents (proposed / settled / actual) and, for FY27, which of four whole budget scenarios it belongs to. FY2014–FY2027, 9,503 figures, plus a flag where two documents state different amounts for the same line-year.
Split on stage AND variant. FY27 carries four whole budgets.
| column | type | what it is |
|---|---|---|
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
variant | TEXT | Which whole-budget scenario the figure belongs to. FY27 has four — Balanced, Core Budget, Level Service, Restoration. Without this you sum all four budgets together. |
value | REAL | The figure, as printed. dollars |
documents_disagree | INTEGER | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| line_key | label | fy | stage | variant | value | documents_disagree | doc_id |
|---|---|---|---|---|---|---|---|
| hs librarian | H.S. Librarian | 2027 | proposed | Core Budget | 55175.0 | 0 | sources/district-budget/text/final-budget-d… |
| hs library books | H.S. Library Books | 2017 | proposed | empty | 0.0 | 0 | sources/district-budget/text/fy18-non-perso… |
| hs repair p e equipment | H.S. Repair P.E. Equipment | 2025 | proposed | empty | 0.0 | 0 | sources/district-budget/text/fy26-school-de… |
workbook_figure school the spine Tier 2 · categories fact 3,261 rows 2023, 2024, 2025, 2026, 2027, 2029one row per worksheet row per year per columnThe FY27 budget workbook unpivoted to one row per worksheet row × year × column, so every figure is quotable by its spreadsheet coordinate. column_kind says which printed column — final_budget, actual_to_date, encumbered_to_date. Dollars only.
every cell quotable by its row.
| column | type | what it is |
|---|---|---|
row | INTEGER | The worksheet row number in the source spreadsheet. Rule 13: quotes a coordinate, so a figure can be traced to its cell. |
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
column_kind | TEXT | not described yet |
value | REAL | The figure, as printed. dollars |
row_kind | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| row | line_key | fy | column_kind | value | row_kind | doc_id |
|---|---|---|---|---|---|---|
| 139 | m.s. general school supplies | 2024 | actual | 7475.99 | line | sources/budget-workbooks/fy27-proposals.xlsx |
| 188 | telephone maintenance/system | 2026 | actual_to_date | 0.0 | line | sources/budget-workbooks/fy27-proposals.xlsx |
| 237 | executive secretaries/supt. | 2025 | actual | 184375.15 | line | sources/budget-workbooks/fy27-proposals.xlsx |
athletics_history school Tier 2 · categories fact 175 rows 2014–2026one row per athletics figure per yearAthletics money from BOTH sides, and these are three different quantities that must never be added: what the town appropriated from the general fund, what the revolving fund took IN, and what the revolving fund SPENT. Dollars per year with the basis and source document for each.
Appropriation, fund revenue and fund spending are three quantities. Never add two of them.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
side | TEXT | not described yet |
item | TEXT | The thing being priced or counted. |
amount | TEXT | The figure, as printed. dollars |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
First 3 rows, in rowid order:
| fy | side | item | amount | basis | source |
|---|---|---|---|---|---|
| 2016 | revolving | Athletic Secretary | 7796 | actual | district-budget/docs/fy19-proposed-athletic… |
| 2018 | revolving | Track and Field Payment | 40000 | budget | district-budget/docs/fy19-proposed-athletic… |
| 2020 | general | Athletic Coaches | 91601.0 | actual | fy24-approved-budget.txt |
budget_line school Tier 2 · categories dimension 688 rowsone row per budget lineThe district's LINE LIST — no money at all. One row per budget line with its section, its function group and what kind of line it is. This is the dimension budget_figure and workbook_figure hang their dollars on.
with its section and function group.
| column | type | what it is |
|---|---|---|
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
section | TEXT | The budget book's own section heading. |
function_group | TEXT | Our grouping of DESE function codes into readable categories. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
First 3 rows, in rowid order:
| line_key | label | section | function_group | kind |
|---|---|---|---|---|
| special ed transp system | Special Education Transp - System | NULL | NULL | NULL |
| curriculum adoption/system | Curriculum Adoption/System | EXPENSES | 2110 - System Curriculum Adop | line |
| h.s. guidance secretary | H.S. Guidance Secretary | SALARIES | 2710 - Guidance Salaries | line |
dese_ap school Tier 2 · categories fact 9,906 rowsone row per publication per organisation per student group per AP subject per school yearAdvanced Placement PARTICIPATION and PERFORMANCE for Lunenburg, SY2007-SY2025: how many students sat AP, how many tests, the distribution of tests per student, and the score distribution 1-5. Extracted from two 174MB statewide DESE workbooks filtered to LEA 01620000.
kind separates the PARTICIPATION extract from the PERFORMANCE extract and they are different quantities in one file. stu_grp OVERLAPS -- "All Students" sits beside race, gender and selected-population groups and they may never be summed. org_type separates district from school. A subject absent for a year is not established to be a published zero; do not read it as one without checking the extractor. Tests are not students: tests_taken_cnt counts sittings and test_takers_cnt counts children. kind is a SECOND level column: participation and performance are two publications in one table and each leaves the other’s figure columns NULL. District and school rows are the SAME SIZE here (4,953 each) because Lunenburg’s AP is all at one school, so summing them doubles silently.
| column | type | what it is |
|---|---|---|
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
sy | INTEGER | not described yet |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_type | TEXT | not described yet |
stu_grp | TEXT | not described yet |
subj_cat | TEXT | not described yet |
subj | TEXT | not described yet |
test_takers_cnt | REAL | not described yet |
tests_taken_cnt | REAL | not described yet |
one_test_cnt | REAL | not described yet |
two_test_cnt | REAL | not described yet |
three_test_cnt | REAL | not described yet |
four_test_cnt | REAL | not described yet |
five_plus_test_cnt | REAL | not described yet |
tests_taken | REAL | not described yet |
score_1 | REAL | not described yet |
score_2 | REAL | not described yet |
score_3 | REAL | not described yet |
score_4 | REAL | not described yet |
score_5 | REAL | not described yet |
pct_1_2 | REAL | not described yet |
pct_3_5 | REAL | not described yet |
First 3 rows, in rowid order:
| kind | sy | org_code | org_name | org_type | stu_grp | subj_cat | subj | test_takers_cnt | tests_taken_cnt | one_test_cnt | two_test_cnt | three_test_cnt | four_test_cnt | five_plus_test_cnt | tests_taken | score_1 | score_2 | score_3 | score_4 | score_5 | pct_1_2 | pct_3_5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| participation | 2017 | 01620505 | Lunenburg High | School | Black or African American | History and Social Science | Govt & Pol: U.S. | 3.0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| performance | 2016 | 01620000 | Lunenburg | District | White | Foreign Languages | Foreign Languages | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 16.0 | 1.0 | 7.0 | 3.0 | 5.0 | 0.0 | 0.5 | 0.5 |
| performance | 2015 | 01620505 | Lunenburg High | School | White | Foreign Languages | Latin: Vergil | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 7.0 | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
dese_attrition school Tier 2 · categories fact 1,061 rowsone row per organisation per student group per school year, carrying a rate per gradeThe share of students who LEFT, by grade, SY2010-SY2026 -- which is the dataset that answers "which grades are students leaving in, over time". Every figure is a PERCENTAGE, not a count.
RATES, NOT COUNTS -- g01_pct through g11_pct and grd_all are percentages, so they may not be summed or averaged across grades without weighting by the enrolment in each grade. stu_grp OVERLAPS ("All Students" beside race and selected-population groups). A rate off a small grade cohort moves violently; read the year-by-year before concluding a trend. Attrition counts leaving for any reason, so it does not separate a move out of town from a transfer to another school.
| column | type | what it is |
|---|---|---|
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
sy | INTEGER | not described yet |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_type | TEXT | not described yet |
stu_grp | TEXT | not described yet |
gk_pct | REAL | not described yet |
g01_pct | REAL | not described yet |
g02_pct | REAL | not described yet |
g03_pct | REAL | not described yet |
g04_pct | REAL | not described yet |
g05_pct | REAL | not described yet |
g06_pct | REAL | not described yet |
g07_pct | REAL | not described yet |
g08_pct | REAL | not described yet |
g09_pct | REAL | not described yet |
g10_pct | REAL | not described yet |
g11_pct | REAL | not described yet |
grd_all | REAL | not described yet |
First 3 rows, in rowid order:
| kind | sy | org_code | org_name | org_type | stu_grp | gk_pct | g01_pct | g02_pct | g03_pct | g04_pct | g05_pct | g06_pct | g07_pct | g08_pct | g09_pct | g10_pct | g11_pct | grd_all |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| attrition | 2022 | 01620505 | Lunenburg High | School | Economically Disadvantaged | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 0.043 | 0.19 | 0.063 | 0.1 |
| attrition | 2013 | 01620020 | Turkey Hill Middle | School | High Needs | NULL | NULL | NULL | NULL | NULL | NULL | 0.114 | NULL | NULL | NULL | NULL | NULL | 0.114 |
| attrition | 2010 | 01620000 | Lunenburg | District | Asian | NULL | NULL | NULL | NULL | NULL | 0.0 | NULL | NULL | NULL | NULL | NULL | NULL | 0.13 |
dese_ch70_aid_factor school Tier 2 · categories fact 155 rows 2007–2026one row per district per fiscal yearThe aid build-up, term by term, FY2007 on: every increment the Chapter 70 formula adds between the foundation budget and the aid actually paid, and every reduction it applies. This is what lets anybody model how the aid RESPONDS to a change in enrollment rather than assuming it moves linearly.
level separates the state row from the districts. Its ch70_aid agrees with dese_ch70_formula in every district-year they share, checked on every build -- they are two sheets of one workbook, not two sources. The increments are the formula's own machinery and several are zero in most years by design; a zero here is a term that did not apply, not a missing figure. SCOPED to Lunenburg, its six peers and the state row, because the published database has to stay under Cloudflare's 25MB per-asset limit. Every identity the extract asserts is asserted across ALL districts before the scope is applied, and dese_ch70_statewide keeps the all-district comparison as a distribution.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
foundation_enrollment | REAL | not described yet |
foundation_budget | REAL | not described yet |
required_local_contribution | REAL | not described yet |
target_aid_pct | REAL | not described yet |
foundation_aid_increment | REAL | not described yet |
down_payment_aid_increment | REAL | not described yet |
growth_aid_increment | REAL | not described yet |
target_aid_phase_in | REAL | not described yet |
minimum_aid_increment | REAL | not described yet |
non_operating_reduction | REAL | not described yet |
ch70_aid | REAL | not described yet |
required_nss | REAL | Required net school spending as the Chapter 70 formula computes it: required local contribution plus Chapter 70 aid. dollars The source sheet has TWO columns called rqdnss and they are different numbers in over a thousand district-years. This is column I. What DESE publishes is required_nss_published, column J. |
ch70_aid_reduction | REAL | not described yet |
hold_harmless_low_income | REAL | not described yet |
minimum_aid_adjustment | REAL | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | level | foundation_enrollment | foundation_budget | required_local_contribution | target_aid_pct | foundation_aid_increment | down_payment_aid_increment | growth_aid_increment | target_aid_phase_in | minimum_aid_increment | non_operating_reduction | ch70_aid | required_nss | ch70_aid_reduction | hold_harmless_low_income | minimum_aid_adjustment | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 | 00190000 | Ayer | district | 1068.0 | 9386274.0 | 6352709.0 | 41.1 | 0.0 | 0.0 | 211553.0 | NULL | 0.0 | 0.0 | 4095225.0 | 10447934.0 | NULL | NULL | NULL | sources/state-dese/dese-ch70-key-factors.xl… |
| 2022 | 01620000 | Lunenburg | district | 1656.0 | 18408485.4 | 10908378.0 | 39.31 | 0.0 | NULL | NULL | NULL | 49680.0 | 0.0 | 7823618.0 | 18731996.0 | NULL | NULL | 0.0 | sources/state-dese/dese-ch70-key-factors.xl… |
| 2023 | 01250000 | Harvard | district | 873.0 | 9947885.43 | 8018632.0 | 17.5 | 0.0 | NULL | NULL | NULL | 52380.0 | 0.0 | 2061331.0 | 10079963.0 | NULL | NULL | 0.0 | sources/state-dese/dese-ch70-key-factors.xl… |
dese_class_size school Tier 2 · categories fact 3,160 rowsone row per organisation per subject per school yearHOW MANY CLASSES RAN, and how full they were, by school and by subject, SY2011-SY2025. The only table here that counts what was TAUGHT rather than who was employed, what was appropriated or how many children enrolled -- so it is what answers "did the cuts change what a child can take" without reaching for teacher FTE, which cannot tell four Spanish sections from two.
THREE SPLITS BEFORE ANY SUM. org_type separates the DISTRICT rollup from its own schools. subj = "All" is a rollup of the 25 named subjects beside it. And the fifteen subjects prefixed "CH74 - " are a SECOND, PARALLEL classification -- Chapter 74 vocational programme areas, every Lunenburg row of them zero -- which are not part of the subject total. THE THREE FIGURE COLUMNS ARE THREE QUANTITIES: tot_clss_cnt is classes that ran, avg_clss_cnt is DESE’s own average class size (seats over classes), and tot_stu_cnt is DISTINCT students who took the subject -- NOT seats, and not the product of the other two. sy is the school year ENDING and equals fy in every other DESE table here; it keeps the publisher’s own column name. AND A SCHOOL NAME IS NOT A FIXED SCHOOL: Lunenburg High held grades 8-12 from SY2013 to SY2016 and grades 9-12 either side, so join dese_enrollment for the grade span before comparing two years. The demographic percentage columns OVERLAP each other and may never be added. Two school-years report an average class size no primary school can have -- 87.1 in SY2011 and 36.5 in SY2022, both Lunenburg Primary -- so the elementary series is not trendable.
| column | type | what it is |
|---|---|---|
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
sy | INTEGER | not described yet |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_type | TEXT | not described yet |
subj | TEXT | not described yet |
tot_clss_cnt | REAL | not described yet |
avg_clss_cnt | REAL | not described yet |
tot_stu_cnt | REAL | not described yet |
aian_pct | REAL | not described yet |
as_pct | REAL | not described yet |
baa_pct | REAL | not described yet |
hl_pct | REAL | not described yet |
mnhl_pct | REAL | not described yet |
nhpi_pct | REAL | not described yet |
wh_pct | REAL | not described yet |
fe_pct | REAL | not described yet |
ma_pct | REAL | not described yet |
el_pct | REAL | not described yet |
li_pct | REAL | not described yet |
ecd_pct | REAL | not described yet |
swd_pct | REAL | not described yet |
First 3 rows, in rowid order:
| kind | sy | org_code | org_name | org_type | subj | tot_clss_cnt | avg_clss_cnt | tot_stu_cnt | aian_pct | as_pct | baa_pct | hl_pct | mnhl_pct | nhpi_pct | wh_pct | fe_pct | ma_pct | el_pct | li_pct | ecd_pct | swd_pct |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| class_size | 2020 | 01620305 | Lunenburg Middle School | School | Science | 18.0 | 23.5 | 415.0 | 0.005 | 0.012 | 0.015 | 0.082 | 0.029 | 0.005 | 0.853 | 0.477 | 0.523 | 0.193 | NULL | 0.123 | 0.005 |
| class_size | 2013 | 01620000 | Lunenburg | District | CH74 - Agriculture and Natural Resources | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | NULL | 0.0 |
| class_size | 2011 | 01620000 | Lunenburg | District | Mathematics | 34.0 | 26.3 | 878.0 | 0.005 | 0.021 | 0.015 | 0.016 | 0.01 | 0.001 | 0.933 | 0.518 | 0.482 | 0.001 | 10.8 | NULL | 0.115 |
dese_educator_workforce school Tier 2 · categories fact 840 rows 2021–2023one row per district per race/ethnicity per job class per school yearHEADCOUNT by job class -- Administrator, Teacher, Paraprofessional, Other Licensed, Other Non-Licensed -- with hires and retention, SY2021-SY2023. The only DESE table here that counts administrators and paraprofessionals as PEOPLE rather than as FTE or as dollars.
race_level is the level column and getting it wrong doubles every figure. All Educators is a TOTAL row sitting beside the seven reported races; summing the whole job class gives exactly twice the truth, and this project's own notes recorded 118 paraprofessionals and 38 administrators for SY2023 that way when the file holds 59 and 19. There is no all-job-classes row, so a district total is the sum of the five race_level='all' rows and no published figure states it. Headcount is not FTE: a half-time director and a principal are one each. Three years is a thin series on a base of tens, and a reclassification would look identical to a change in staffing.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
race_ethnicity | TEXT | not described yet |
race_level | TEXT | Whether the row is the All Educators total or one reported race/ethnicity.The total sits beside the detail. Summing a job class without filtering gives exactly TWICE the headcount, which is how 59 paraprofessionals were once recorded here as 118. |
job_class | TEXT | not described yet |
educators_headcount | REAL | not described yet |
educators_pct | REAL | not described yet |
hires_headcount | REAL | not described yet |
hires_pct | REAL | not described yet |
retained_headcount | REAL | not described yet |
retained_pct | REAL | not described yet |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | race_ethnicity | race_level | job_class | educators_headcount | educators_pct | hires_headcount | hires_pct | retained_headcount | retained_pct | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2022 | 00000000 | State Totals | Amer. Ind. or Alaska Nat. | detail | Administrator | 9.0 | 0.001 | 1.0 | 0.001 | 10.0 | 0.909 | yes | sources/state-dese/dese-educators-retention… |
| 2022 | 01250000 | Harvard | Asian | detail | Other - Licensed | 0.0 | 0.0 | NULL | NULL | NULL | NULL | yes | sources/state-dese/dese-educators-retention… |
| 2022 | 06100000 | Ashburnham-Westminster | Amer. Ind. or Alaska Nat. | detail | Administrator | 0.0 | 0.0 | NULL | NULL | NULL | NULL | yes | sources/state-dese/dese-educators-retention… |
dese_function_expenditure school Tier 2 · categories fact 6,930 rows 2009–2025one row per district per year per function code per levelDESE's spending by function code with the GENERAL FUND and GRANTS/REVOLVING money in separate columns, SY2009-SY2025, for Lunenburg and its six peers. The only published split of the two in this archive: Lunenburg SY2025 shows $478,097 of grant and revolving money against function 2330, Paraprofessionals, beside $1,338,477 of general fund.
Filter on level before aggregating ANYTHING. The source puts rollups beside detail and nothing in its column names says which is which -- summing every Lunenburg SY2025 row gives $117,996,913 against an in-district total of $27,903,187. level='total' is TTPP; level='rollup' is IIII and OODD; level='category' is the ten in-district categories plus ODTR and COMM; level='detail' is the printed function codes, plus TUIT, which has no category row. ODTR is already inside OODD -- adding it again double counts -- and its detail is only ever code 9130, a component and not the whole, which is what reconciles='partial' means. This is DESE's definition of spending, all funds, and it is NOT the town's appropriation; it must never be subtracted from one. A function code is not a budget line and not a post, so this bounds the funding-source question rather than settling it.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
func_cat_code | TEXT | DESE’s four-letter function CATEGORY code — ADMN, TCHR, TSER, BENE, TUIT, ODTR, and the rollup codes IIII, OODD, TTPP. TUIT has no summary row of its own; its detail rolls straight into OODD. ODTR is inside OODD and must not be added to it again. |
func_cat_desc | TEXT | What DESE calls that category in words. |
func_code | TEXT | DESE’s function code. Numeric on a detail row (2330 is Paraprofessionals); on a summary row it repeats func_cat_code, which is how the two are told apart.A function code aggregates many budget lines and many posts. It is not a budget line and it is not a position. |
func_desc | TEXT | What DESE calls that function in words. |
in_out_dist | TEXT | Whether DESE counts the spending as in-district or out-of-district. Blank on every summary row. |
gen_fund | REAL | The part DESE attributes to the general fund. dollars This is DESE’s measure of SPENDING across the district, not the town’s appropriation. The two are different definitions and must never be subtracted from one another. |
grants_revolving | REAL | The part DESE attributes to grants and revolving funds rather than the general fund. dollars The split is by FUNCTION CODE. It says how much grant money a function carried, never which grant, which post or which budget line — see money_gaps. |
total | REAL | The row's total, as printed. dollars |
per_pupil | REAL | DESE’s own per-pupil figure for the row. dollars DESE prints 0 against every out-of-district row. That is not a measurement of zero; per-pupil is simply not published there. |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | level | func_cat_code | func_cat_desc | func_code | func_desc | in_out_dist | gen_fund | grants_revolving | total | per_pupil | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2012 | 06100000 | Ashburnham-Westminster | detail | TUIT | Payments to Out-of-District Schools | 9200 | Tuition to Out-of-State Schools | Out-of-District | 77948.0 | 0.0 | 77948.0 | 0.0 | empty | sources/state-dese/district-expenditures-by… |
| 2020 | 07350000 | North Middlesex | detail | TUIT | Payments to Out-of-District Schools | 9400 | Tuition to Collaboratives | Out-of-District | 1223935.0 | 537960.0 | 1761895.0 | 0.0 | empty | sources/state-dese/district-expenditures-by… |
| 2025 | 07350000 | North Middlesex | detail | BENE | Insurance, Retirement Programs and Other | 5200 | Insurance for Active Employees | In-District | 6783525.0 | 0.0 | 6783525.0 | 2343.0 | empty | sources/state-dese/district-expenditures-by… |
dese_sped_indicator school Tier 2 · categories fact 4,860 rows 2017–2026one row per district per grade group per student group per indicator per school yearSpecial education indicators SY2017-SY2026: the context counts, the special education staffing ratios per 100 students with disabilities, and the outcome, assessment and postsecondary measures, each with students with disabilities set beside students without.
Three things. (1) grades_level says all or subset and THE SUBSETS OVERLAP -- Grade 10 is inside Grades 9-12 is inside K-12 -- so no sum across grades means anything. (2) denominator_cnt is the population the percentage is OF; the indicator's own figure is measure_cnt, and on the SPECIAL EDUCATION STAFF rows measure_cnt is the students-with-disabilities denominator while measure_pct is the FTE per 100 of them. (3) value_type says whether a row is a percentage, an average, an FTE or an FTE per 100 -- read it before doing arithmetic. The staffing ratios times the count are what produce the unresolved $69,161 per paraprofessional FTE; see money_gaps. printing is part of the key -- DESE publishes a handful of these rows twice -- so collapse on it before aggregating.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
geo_level | TEXT | not described yet |
grades | TEXT | not described yet |
grades_level | TEXT | Whether the grade group on the row is everything or a subset of it. In dese_sped_indicator THE SUBSETS OVERLAP -- Grade 10 inside Grades 9-12 inside K-12 -- so no sum across them means anything. In dese_sped_movement the value is all or grade, and even there the grade rows are NOT the K-12 row broken down. |
student_group | TEXT | not described yet |
student_group_level | TEXT | Whether the row is all students or one of the two groups beneath.All Students = Students with Disabilities + Students without Disabilities, asserted per grade group on every build. |
indicator_category | TEXT | not described yet |
indicator | TEXT | not described yet |
printing | INTEGER | Which of several rows published under one natural key this is: 1 for the first, 2 for the next. Part of the primary key of three DESE tables and of enterprise_balance_sheet. It exists because the publisher printed the same key twice — sometimes identically, sometimes with the district under a different name, and sometimes with DIFFERENT FIGURES. Nothing may be dropped, so collapse on it before aggregating rather than assuming the key is unique. |
denominator_cnt | REAL | The population a percentage on the row is a percentage OF. students It is NOT the indicator’s own count -- that is measure_cnt. |
measure_cnt | REAL | The figure the indicator states. varies — read value_type On the SPECIAL EDUCATION STAFF rows of dese_sped_indicator this is the students-with-disabilities denominator, not a count of staff; the staff figure is measure_pct, which is an FTE per 100 students with disabilities. value_type says which each row is. |
measure_pct | REAL | not described yet |
value_type | TEXT | What kind of quantity the row holds: a percentage, an average, an FTE, or an FTE per 100 students with disabilities. Read it before doing arithmetic. In dese_sped_program it says Percent on EVERY row including the FTE-ratio rows, so in that table it does not tell you the unit and the indicator category does. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | geo_level | grades | grades_level | student_group | student_group_level | indicator_category | indicator | printing | denominator_cnt | measure_cnt | measure_pct | value_type | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2021 | 06100000 | Ashburnham-Westminster | district | K-12 | all | All Students | all | STUDENT OUTCOMES | 9th to 10th grade promotion rate (first-tim… | 1 | 166.0 | 159.0 | 95.8 | Percent of Students | sources/state-dese/dese-sped-indicators.xlsx |
| 2021 | 06100000 | Ashburnham-Westminster | district | K-12 | all | Students without Disabilities | detail | ASSESSMENTS (AP and SAT) | SAT average score - Mathematics | 1 | 60.0 | NULL | 600.0 | Average | sources/state-dese/dese-sped-indicators.xlsx |
| 2025 | 06730000 | Groton-Dunstable | district | K-12 | all | All Students | all | STUDENT OUTCOMES | Students suspended in-school at least once | 1 | 2342.0 | 1.0 | 0.0 | Percent of Students | sources/state-dese/dese-sped-indicators.xlsx |
dese_sped_movement school Tier 2 · categories fact 684 rows 2019–2025one row per district per grade group per school yearCaseload movement: how many children entered special education services in a year and how many left. The dynamic behind the spending line that a headcount alone cannot show. SY2019-SY2025.
TWO TRAPS. repeats_prior_year is yes where all four figures exactly equal the same district's previous year -- Lunenburg's SY2024 and SY2025 are such a pair, and four independently counted quantities landing identically two years running is not plausible where a row carried forward is. Never sum two such years as two years of movement. And grade_rows_sum is NOT enrolled_cnt: the grade rows are not the K-12 row broken down, because the Grade 12 row is a fraction of the size of the others. What the residual is has not been established.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
geo_level | TEXT | not described yet |
grades | TEXT | not described yet |
grades_level | TEXT | Whether the grade group on the row is everything or a subset of it. In dese_sped_indicator THE SUBSETS OVERLAP -- Grade 10 inside Grades 9-12 inside K-12 -- so no sum across them means anything. In dese_sped_movement the value is all or grade, and even there the grade rows are NOT the K-12 row broken down. |
enrolled_cnt | REAL | not described yet |
on_iep_cnt | REAL | not described yet |
moved_in_cnt | REAL | not described yet |
moved_out_cnt | REAL | not described yet |
grade_rows_sum | REAL | The sum of that district’s individual grade rows, written onto the K-12 row. students It does NOT equal enrolled_cnt, and it is not meant to. The grade rows are not the K-12 row broken down — the Grade 12 row is a fraction of the size of the others. The residual is published rather than explained. |
repeats_prior_year | TEXT | Whether every figure on this row exactly equals the same district’s previous year. Lunenburg’s SY2024 and SY2025 movement rows are such a pair. Four independently counted quantities landing identically two years running is not plausible and a carried-forward row is; two such years must never be summed as two years of movement. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | geo_level | grades | grades_level | enrolled_cnt | on_iep_cnt | moved_in_cnt | moved_out_cnt | grade_rows_sum | repeats_prior_year | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2021 | 00000000 | State | state | Grade 8 | grade | 68634.0 | 13621.0 | 962.0 | 1002.0 | NULL | empty | sources/state-dese/dese-sped-movement.xlsx |
| 2024 | 01620000 | Lunenburg | district | Grade 9 | grade | 110.0 | 15.0 | 0.0 | 2.0 | NULL | empty | sources/state-dese/dese-sped-movement.xlsx |
| 2025 | 07350000 | North Middlesex | district | Grade 1 | grade | 219.0 | 39.0 | 13.0 | 0.0 | NULL | yes | sources/state-dese/dese-sped-movement.xlsx |
dese_sped_program school Tier 2 · categories fact 2,403 rows 2020–2026one row per district per indicator category per indicator per school yearWhat the students with disabilities are: disability type, race, gender, grade span, in district against out of district, placement, and the special education FTE ratios. SY2020-SY2026. It carries a PUBLISHED count of students with disabilities, which used to be reachable here only by multiplying a percentage by enrollment.
indicator_level is total or member and every category carries its own total row. Three categories do not behave like the others: Placement runs SHORT of its own total because its four members are IN-DISTRICT placements and children placed out of district appear in the total and in none of them; Disability Type is a collapsed rendering of Disability Type All with several disabilities folded into Other Disability, so adding the two counts every child twice; and Special Education FTEs per 100 SWDs is a RATIO despite sitting in the same column and despite value_type saying Percent on every row of this file. printing is part of the key: 95 rows are published twice, most of them the same district under two different names (Ayer Shirley and Ayer Shirley School District share one org code). Collapse on it before aggregating.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
geo_level | TEXT | not described yet |
indicator_category | TEXT | not described yet |
indicator | TEXT | not described yet |
indicator_level | TEXT | Whether the row is a category total or one member of it. Every indicator category in dese_sped_program carries its own total row. Placement runs SHORT of its total because its members are in-district placements only; Disability Type and Disability Type All are two renderings of one breakdown and must never be added. |
printing | INTEGER | Which of several rows published under one natural key this is: 1 for the first, 2 for the next. Part of the primary key of three DESE tables and of enterprise_balance_sheet. It exists because the publisher printed the same key twice — sometimes identically, sometimes with the district under a different name, and sometimes with DIFFERENT FIGURES. Nothing may be dropped, so collapse on it before aggregating rather than assuming the key is unique. |
denominator_cnt | REAL | The population a percentage on the row is a percentage OF. students It is NOT the indicator’s own count -- that is measure_cnt. |
measure_cnt | REAL | The figure the indicator states. varies — read value_type On the SPECIAL EDUCATION STAFF rows of dese_sped_indicator this is the students-with-disabilities denominator, not a count of staff; the staff figure is measure_pct, which is an FTE per 100 students with disabilities. value_type says which each row is. |
measure_pct | REAL | not described yet |
value_type | TEXT | What kind of quantity the row holds: a percentage, an average, an FTE, or an FTE per 100 students with disabilities. Read it before doing arithmetic. In dese_sped_program it says Percent on EVERY row including the FTE-ratio rows, so in that table it does not tell you the unit and the indicator category does. |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | geo_level | indicator_category | indicator | indicator_level | printing | denominator_cnt | measure_cnt | measure_pct | value_type | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2022 | 01250000 | Harvard | district | Disability Type | Communication Disability | member | 1 | 118.0 | 20.0 | 0.169 | Percent | no | sources/state-dese/dese-sped-program-charac… |
| 2023 | 01250000 | Harvard | district | Gender | Male | member | 1 | 105.0 | 73.0 | 0.695 | Percent | yes | sources/state-dese/dese-sped-program-charac… |
| 2024 | 06160000 | Ayer Shirley | district | Disability Type All | Autism | member | 1 | 352.0 | 59.0 | 0.168 | Percent | no | sources/state-dese/dese-sped-program-charac… |
dese_sped_trajectory school Tier 2 · categories fact 252 rows 2018–2026one row per district per grade span per starting placement per school yearWhere a child's placement started and where the same children are now -- no IEP, included, substantially separate, or out of district. SY2018-SY2026. Out-of-district tuition is the largest single line in the special education budget and this is the pathway into it.
THE BASES ARE TINY. A Lunenburg cohort is tens of children, so a percentage here must never travel without its count -- 14.3% of 28 is four children, and one year of one cohort establishes nothing. grade_span K-12 and K-2 OVERLAP and must never be summed. unaccounted_cnt is the cohort less the four destinations: what it IS -- moved away, left for a private school, aged out, suppressed -- is not established by this file.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
geo_level | TEXT | not described yet |
grade_span | TEXT | not described yet |
placement_at_start | TEXT | not described yet |
cohort_cnt | REAL | not described yet |
no_iep_cnt | REAL | not described yet |
no_iep_pct | REAL | not described yet |
included_cnt | REAL | not described yet |
included_pct | REAL | not described yet |
sub_separate_cnt | REAL | not described yet |
sub_separate_pct | REAL | not described yet |
out_of_district_cnt | REAL | not described yet |
out_of_district_pct | REAL | not described yet |
unaccounted_cnt | REAL | The starting cohort less the four destinations the row accounts for. students What it IS — moved away, left for a private school, aged out, suppressed as a small cell — is not established by the source. |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | geo_level | grade_span | placement_at_start | cohort_cnt | no_iep_cnt | no_iep_pct | included_cnt | included_pct | sub_separate_cnt | sub_separate_pct | out_of_district_cnt | out_of_district_pct | unaccounted_cnt | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2019 | 06730000 | Groton-Dunstable | district | K-2 | Inclusive Setting | 58.0 | 12.0 | 0.207 | 43.0 | 0.741 | 2.0 | 0.034 | 1.0 | 0.017 | 0.0 | yes | sources/state-dese/dese-sped-placement-traj… |
| 2020 | 01620000 | Lunenburg | district | K-2 | Inclusive Setting | 49.0 | 21.0 | 0.429 | 27.0 | 0.551 | 1.0 | 0.02 | 0.0 | 0.0 | 0.0 | yes | sources/state-dese/dese-sped-placement-traj… |
| 2022 | 01620000 | Lunenburg | district | K-2 | Substantially Separate Classroom | 11.0 | 2.0 | 0.182 | 3.0 | 0.273 | 5.0 | 0.455 | 0.0 | 0.0 | 1.0 | no | sources/state-dese/dese-sped-placement-traj… |
dese_teacher_grade_subject school Tier 2 · categories fact 8,467 rows 2008–2026one row per organisation per subject per school year, FTE split across six grade bandsTeacher FTE by grade band AND subject AND school. This breaks a limit recorded here as structural: the town's staff rosters give grade detail with no FTE, and DESE elsewhere gives FTE with no grade. This gives both.
Two level columns and both matter: org_level and subject_level. Summing every subject for one organisation counts each teacher about three times over -- the build asserts that it would, so a lost level column fails there rather than in your query. agrees_with_teacher_subject is written on the All rows only and says whether this dataset and dese_teacher_subject state the same total FTE for that organisation; where they do not, BOTH are kept and neither corrects the other. A SUBJECT ABSENT FROM THIS TABLE for an organisation and year we hold is a PUBLISHED ZERO, not a gap -- rows where every grade band and the total are nought are not written, and they outnumber the real rows two to one. That is the opposite of the usual reading here, which is why it is said twice. printing is part of the key: DESE publishes the same organisation, subject and year twice with different figures in a small number of cases, and both are kept.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_level | TEXT | Whether the row is the state, a district, a school, or a collaborative. All four sit in one column in the DESE source. Filter on it before summing anything. And a DISTRICT row is not the sum of its SCHOOL rows: staff and children with no school assignment have a district row and no school row. |
subject | TEXT | not described yet |
subject_level | TEXT | Whether the subject on the row is every teacher, a GROUP of subjects, or one subject.all is All/All Teachers. group is Core-All Subjects and Total Non-Core Academic Subjects, which are groups of the subjects beside them, so the members of this column DO NOT PARTITION. Summing subjects counts a teacher about three times. |
pk_2_fte | REAL | not described yet |
grade_3_5_fte | REAL | not described yet |
grade_6_8_fte | REAL | not described yet |
grade_9_12_fte | REAL | not described yet |
multi_grade_fte | REAL | not described yet |
all_grade_fte | REAL | not described yet |
total_fte | REAL | not described yet |
printing | INTEGER | Which of several rows published under one natural key this is: 1 for the first, 2 for the next. Part of the primary key of three DESE tables and of enterprise_balance_sheet. It exists because the publisher printed the same key twice — sometimes identically, sometimes with the district under a different name, and sometimes with DIFFERENT FIGURES. Nothing may be dropped, so collapse on it before aggregating rather than assuming the key is unique. |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
agrees_with_teacher_subject | TEXT | Whether two DESE datasets state the same total teacher FTE for this organisation and year. Written on the All rows only. Where it is no, both figures are kept and neither publication is treated as correcting the other. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | org_code | org_name | org_level | subject | subject_level | pk_2_fte | grade_3_5_fte | grade_6_8_fte | grade_9_12_fte | multi_grade_fte | all_grade_fte | total_fte | printing | reconciles | agrees_with_teacher_subject | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2011 | 00000000 | State | 00000000 | State | state | English/Language Arts | subject | 794.3 | 1144.2 | 3026.6 | 3244.0 | 824.4 | 171.9 | 9205.4 | 1 | yes | empty | sources/state-dese/dese-teachers-by-grade-s… |
| 2024 | 06100000 | Ashburnham-Westminster | 06100010 | Meetinghouse School | school | Miscellaneous | subject | 1.5 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.5 | 1 | yes | empty | sources/state-dese/dese-teachers-by-grade-s… |
| 2026 | 06100000 | Ashburnham-Westminster | 06100000 | Ashburnham-Westminster | district | Reading | subject | 2.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 3.0 | 1 | yes | empty | sources/state-dese/dese-teachers-by-grade-s… |
dese_teacher_program_area school Tier 2 · categories fact 659 rows 2008–2026one row per organisation per school yearTeacher FTE split into general education, special education, career/technical and English learner, per state, district and school, SY2008-SY2026, for Lunenburg and its six peers. This is where Lunenburg's special education teacher FTE falls from 18.5 to 2.0 while its total FTE holds flat.
Filter org_level before summing ANYTHING: state, district and school rows sit in one table. A DISTRICT ROW IS NOT THE SUM OF ITS SCHOOL ROWS -- staff with no school assignment have a district row and no school row, and the gap reaches several hundred FTE in the largest districts, so the two must not be added or differenced. FTE here is EPIMS FTE, defined per ASSIGNMENT rather than per person, so it is not comparable with a budget line that pays whole salaries. The sped collapse is the signature of RECODING; nothing here establishes that staff left.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_level | TEXT | Whether the row is the state, a district, a school, or a collaborative. All four sit in one column in the DESE source. Filter on it before summing anything. And a DISTRICT row is not the sum of its SCHOOL rows: staff and children with no school assignment have a district row and no school row. |
gen_ed_fte | REAL | not described yet |
gen_ed_pct | REAL | not described yet |
sped_fte | REAL | not described yet |
sped_pct | REAL | not described yet |
career_tech_fte | REAL | not described yet |
career_tech_pct | REAL | not described yet |
el_fte | REAL | not described yet |
el_pct | REAL | not described yet |
total_fte | REAL | not described yet |
comments | TEXT | not described yet |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | org_code | org_name | org_level | gen_ed_fte | gen_ed_pct | sped_fte | sped_pct | career_tech_fte | career_tech_pct | el_fte | el_pct | total_fte | comments | reconciles | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 | 07350000 | North Middlesex | 07350035 | Varnum Brook | school | 25.0 | 0.807 | 6.0 | 0.193 | 0.0 | 0.0 | 0.0 | 0.0 | 31.0 | empty | yes | sources/state-dese/dese-teachers-by-program… |
| 2017 | 07350000 | North Middlesex | 07350005 | Spaulding Memorial | school | 28.9 | 0.828 | 5.0 | 0.143 | 0.0 | 0.0 | 1.0 | 0.029 | 34.9 | empty | yes | sources/state-dese/dese-teachers-by-program… |
| 2024 | 07350000 | North Middlesex | 07350010 | Ashby Elementary | school | 10.2 | 0.836 | 2.0 | 0.164 | 0.0 | 0.0 | 0.0 | 0.0 | 12.2 | empty | yes | sources/state-dese/dese-teachers-by-program… |
line_history school Tier 2 · categories fact 9,503 rows 2014–2027one row per line per year per stageEvery budget line × year × stage as EXTRACTED, before disagreements between documents are resolved. Dollars. This is the raw reading; budget_figure is the settled one.
every year
| column | type | what it is |
|---|---|---|
key | TEXT | The row's join key. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
variant | TEXT | Which whole-budget scenario the figure belongs to. FY27 has four — Balanced, Core Budget, Level Service, Restoration. Without this you sum all four budgets together. |
value | TEXT | The figure, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
First 3 rows, in rowid order:
| key | label | fy | stage | variant | value | documents_disagree | source |
|---|---|---|---|---|---|---|---|
| es principal asst prin | E.S. Principal/Asst. Prin. | 2026 | settled | empty | 241000 | 0 | final-budget-document.txt |
| hs nurses | H.S. Nurses | 2017 | restated | empty | 38096 | 0 | fy21-approved-school-budget-6-13-20.txt |
| plus total revolving fund | plus TOTAL Revolving Fund | 2017 | restated | empty | 113819 | 0 | fy19-proposed-athletics-budget.txt |
lps_budget_lines school Tier 2 · categories fact 356 rowsone row per budget book lineThe district's budget book in ITS OWN shape: one row per line with every year's column side by side (FY23 actual through the four FY27 scenarios) rather than unpivoted. Includes the workbook's own comments column, which is where the district explains a line to itself.
in its own shape and column order.
| column | type | what it is |
|---|---|---|
row | TEXT | The worksheet row number in the source spreadsheet. Rule 13: quotes a coordinate, so a figure can be traced to its cell. |
section | TEXT | The budget book's own section heading. |
function_group | TEXT | Our grouping of DESE function codes into readable categories. |
line_item | TEXT | not described yet |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
fy23_actual | TEXT | not described yet |
fy24_actual | TEXT | not described yet |
fy25_actual | TEXT | not described yet |
fy25_budget | TEXT | not described yet |
fy26_final | TEXT | not described yet |
fy26_actual_td | TEXT | not described yet |
fy26_encumb_td | TEXT | not described yet |
fy27_restoration | TEXT | not described yet |
fy27_core | TEXT | not described yet |
fy27_level_service | TEXT | not described yet |
fy27_balanced | TEXT | not described yet |
forecast_outyear | TEXT | not described yet |
restoration_2_24_26 | TEXT | not described yet |
comments | TEXT | not described yet |
First 3 rows, in rowid order:
| row | section | function_group | line_item | kind | fy23_actual | fy24_actual | fy25_actual | fy25_budget | fy26_final | fy26_actual_td | fy26_encumb_td | fy27_restoration | fy27_core | fy27_level_service | fy27_balanced | forecast_outyear | restoration_2_24_26 | comments |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 50 | EXPENSES | 2210 - H.S. Principals Office | H.S. Graduation Expenses | line | 7934.71 | 8250.65 | 8038.54 | 10000.0 | 10378.0 | 33.35 | 1616.65 | 10378.0 | 10378.0 | 10378.0 | 10378.0 | 10378.0 | 10378.0 | empty |
| 116 | EXPENSES | 2420 - P.S. Instr. Equipment | P.S. Science Supplies (includes STEM) | line | 3329.04 | 6357.76 | 3332.24 | 5290.0 | 5222.0 | 0.0 | 556.21 | 3500.0 | 3500.0 | 3500.0 | 3500.0 | 3858.75 | 3500.0 | empty |
| 198 | EXPENSES | 4230 - M.S. Repairs | 4230 - M.S. Repairs | line | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | empty | 1800.0 | empty | empty |
ood_tuition_history school Tier 2 · categories fact 30 rows 2014–2027one row per year per stageOut-of-district special education tuition in DOLLARS, split private vs collaborative, per year per stage. Not a count of children — placement_counts is that, and the two do not divide into each other.
private and collaborative.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
private | TEXT | not described yet |
collaborative | TEXT | Children placed with an educational collaborative. count Children, not dollars. |
total | TEXT | The row's total, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
First 3 rows, in rowid order:
| fy | stage | private | collaborative | total | documents_disagree |
|---|---|---|---|---|---|
| 2017 | proposed | 581345 | 74189 | 655534 | 0 |
| 2019 | restated | 706879 | 251616 | 958495 | 0 |
| 2021 | proposed | 589156 | 130113 | 719269 | 0 |
sped_para_history school Tier 2 · categories fact 26 rows 2014–2027one row per year per stageBudgeted DOLLARS for special education paraprofessionals, split by school, per year per stage. A budget line, never a headcount.
A budget line, not a headcount.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
ps | TEXT | not described yet |
es | TEXT | not described yet |
ms | TEXT | not described yet |
hs | TEXT | not described yet |
ace | TEXT | not described yet |
total | TEXT | The row's total, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
First 3 rows, in rowid order:
| fy | stage | ps | es | ms | hs | ace | total | documents_disagree |
|---|---|---|---|---|---|---|---|---|
| 2018 | restated | 169424 | 122049 | 214030 | 136132 | 0 | 641635 | 0 |
| 2021 | restated | 342946 | 129681 | 286383 | 136485 | 24850 | 920345 | 0 |
| 2026 | settled | 424416 | 225152 | 373590 | 275473 | 43742 | 1342373 | 0 |
sped_teacher_history school Tier 2 · categories fact 21 rows 2017–2027one row per year per stageBudgeted DOLLARS for special education teachers, split by school, per year per stage. A budget line, never a headcount.
A budget line, not a headcount.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
ps | TEXT | not described yet |
es | TEXT | not described yet |
ms | TEXT | not described yet |
hs | TEXT | not described yet |
ace | TEXT | not described yet |
total | TEXT | The row's total, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
First 3 rows, in rowid order:
| fy | stage | ps | es | ms | hs | ace | total | documents_disagree |
|---|---|---|---|---|---|---|---|---|
| 2021 | restated | 516646 | 362179 | 407895 | 378784 | 57649 | 1723153 | 0 |
| 2021 | settled | 516646 | 362179 | 407895 | 378784 | 57649 | 1723153 | 0 |
| 2022 | restated | 541721 | 342512 | 407145 | 454812 | 31049 | 1777239 | 0 |
sped_transport_history school Tier 2 · categories fact 25 rows 2015–2027one row per year per stageBudgeted DOLLARS for special education transportation, per year per stage.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
system | TEXT | not described yet |
total | TEXT | The row's total, as printed. dollars |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
First 3 rows, in rowid order:
| fy | stage | system | total | documents_disagree |
|---|---|---|---|---|
| 2020 | restated | 223350 | 223350 | 1 |
| 2022 | proposed | 297843 | 297843 | 0 |
| 2023 | settled | 329360 | 329360 | 0 |
stated_cuts school Tier 2 · categories fact 193 rows 2020, 2021, 2025, 2026, 2027one row per reduction or restoration NAMED in a district budget documentWhat the district said in writing it was cutting, cycle by cycle, FY2020 to FY2027 — the position, the school, the FTE and the dollar figure WHERE THE DOCUMENT PRINTS THEM, and the district’s own stated consequence, quoted. Every row is a CLAIM: a reduction list is a document somebody assembled to argue for a budget (rule 13a), so basis is stated on all 193 rows and none of it is evidence that a post was removed. direction separates a reduction from a restoration or an addition; conditional_on records that FY2025 has TWO lists, one for each outcome of a ballot question that passed. /cut-register sets DESE’s teacher counts beside it.
NEVER aggregate across documents without splitting on doc_date: a position named on three lists in one cycle is three rows, because the register keeps every draft. Most rows carry no FTE and no amount because the document printed none, and a blank is an absence in the SOURCE rather than in the extract.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
doc_date | TEXT | not described yet |
doc_title | TEXT | not described yet |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
block | TEXT | not described yet |
direction | TEXT | not described yet |
conditional_on | TEXT | not described yet |
printed | TEXT | The total the source itself prints. dollars |
position | TEXT | The job, classified by us from the printed title. A roster carries no FTE, so a 0.4 music teacher and a full-timer are one row each. |
school | TEXT | Which school, as the roster prints it. |
school_printed | TEXT | not described yet |
fte | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
consequence | TEXT | not described yet |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
doc_text | TEXT | not described yet |
doc_pdf | TEXT | not described yet |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
First 3 rows, in rowid order:
| fy | doc_date | doc_title | stage | block | direction | conditional_on | printed | position | school | school_printed | fte | amount | consequence | page | doc_text | doc_pdf | sha256 | basis |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2020 | 2019-04-03 | Superintendent’s Recommended FY20 Budget, b… | recommended budget as presented for adoption | Superintendent’s Recommended FY20 Budget (3… | addition | empty | Athletic Trainer (1.0 FTE) | Athletic Trainer (1.0 FTE) | not stated | empty | 1 | empty | empty | 23 | district-budget/text/superintendent-s-recom… | district-budget/docs/superintendent-s-recom… | b9542c0f02c48dddda4b71e5856c421ec7c1ec2df6c… | stated |
| 2025 | 2024-04 | Lunenburg School Committee Override Stateme… | two lists, one conditional on a ballot ques… | Cuts without / with Override | reduction | the override failing | Instructional Coach Districtwide | Instructional Coach Districtwide | district | districtwide | empty | empty | empty | 2 | district-budget/text/lunenburg-school-commi… | district-budget/docs/lunenburg-school-commi… | 7d45eac447431f812a7c02cd00e7ae73315a0612cdc… | stated |
| 2025 | 2024-03-21 | FY25 Superintendent’s Budget Update | reductions recommended, with the district’s… | Positions CUT in the FY25 budget due to los… | reduction | empty | PE Teacher (PS/THES) | PE Teacher (PS/THES) | primary-and-turkey-hill | ps/thes | empty | empty | empty | 43 | district-budget/text/fy25-superintendent-39… | district-budget/docs/fy25-superintendent-39… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… | stated |
v_budget_scenario school Tier 2 · categories view 1,000 rows 2027–2027one row per line per year per stage per named scenarioThe FY27 budget SCENARIOS side by side -- the four whole budgets the district published (Balanced, Core Budget, Level Service, Restoration), 250 lines each. Every row of budget_figure whose variant is not blank, which is exactly the figures that belong to a named scenario rather than to the year.
These are FOUR ALTERNATIVE BUDGETS for the same year, not four parts of one. Summing across variant counts the same year four times; always group by variant. None of them is the year's budget -- the un-scenarioed figures are the ones with variant = '', which this view deliberately excludes. A scenario is a proposal, never something that happened.
| column | type | what it is |
|---|---|---|
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
variant | TEXT | Which whole-budget scenario the figure belongs to. FY27 has four — Balanced, Core Budget, Level Service, Restoration. Without this you sum all four budgets together. |
value | REAL | The figure, as printed. dollars |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_line_budget_vs_actual school Tier 2 · categories view 4,506 rows 2014–2027one row per budget line per year, stages pivoted into columnsBudget against what was actually spent, one row per line per year: the settled budget, the proposed budget and the actual (stage restated) side by side, FY2014-FY2027. This is the starting point for asking which lines underspend or overspend their budget. Scenario figures are excluded -- variant = '' only.
documents_disagree IS WRONG AS A BUDGET-VS-ACTUAL FLAG. It is MAX() across ALL stages, so a line where two documents disagree about the PROPOSED column is reported as a line whose budget and actual are disputed. Of the disagreeing line-year-stage cells, 254 are proposed against 45 settled and 35 restated, and the view flags 322 of its 4,506 rows on that basis. scripts/build_variance_charts.py does NOT use this view: it pivots the flag PER STAGE and records that the difference moved every figure on the budget-vs-actual page by about 15%. Do the same, or read the flag from budget_figure with a stage filter. Separately: a NULL column is a line the documents state at only one stage, not a zero.
| column | type | what it is |
|---|---|---|
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
settled | TEXT | not described yet |
proposed | TEXT | not described yet |
actual | TEXT | not described yet |
documents_disagree | TEXT | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_workbook_budget_vs_actual school Tier 2 · categories view 245 rows 2025–2025one row per worksheet row per year, budget column against actual columnBudget against actual TAKEN FROM ONE DOCUMENT -- the district's own workbook, matching a budget or final_budget column to the actual column on the same worksheet row, same year, same document. under_budget is budget minus actual. 245 lines, FY2025.
The join is doc_id AND row AND fy, so both figures come from the SAME sheet and the same printed row -- which is the like-for-like comparison, but it also means the coverage is whatever that one workbook prints, not the district's whole budget. row_kind = 'line' excludes subtotals, so these do not add to any printed total. under_budget is a difference between two columns of one document; it is not a statement about what was appropriated. And rule 13a applies: a hand-built workbook is an argument, not a printout from the books -- check document_basis for what produced this one.
| column | type | what it is |
|---|---|---|
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
row | INTEGER | The worksheet row number in the source spreadsheet. Rule 13: quotes a coordinate, so a figure can be traced to its cell. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
budget | REAL | not described yet |
actual | REAL | not described yet |
under_budget | TEXT | not described yet |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
Tier 3 · accountswhat one account spent
dese_ch70_statewide school Tier 3 · accounts fact 122 rows 1993–2026one row per fiscal year per measure, across every Massachusetts districtWhere Lunenburg sits among every Massachusetts district on four ratios: net school spending as a share of what the state requires, Chapter 70 aid per foundation pupil, the required local contribution as a share of the foundation budget, and circuit breaker claim per eligible student. Min, quartiles, median, max, Lunenburg's own figure and its rank.
Read the denominator before quoting a rank -- districts is it, and it counts only districts that reported the measure that year. basis says on every row what the ratio is OF, because each is a division by a count or a dollar whose definition has to travel with it: foundation enrollment is not a headcount of children in the buildings, and the circuit breaker rows are FISCAL year where the rest are the Chapter 70 fiscal year. Publish the share-of-required as a measurement and never as a verdict -- the required minimum is a floor, not a standard of adequacy, and a district above it is not thereby adequately funded.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
measure | TEXT | Which DESE measure this row reports. |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
districts | INTEGER | How many districts are in the distribution on this row — the denominator. count Includes charter and virtual districts, which are in DESE’s file and are not municipal school districts. |
p_min | REAL | not described yet |
p25 | REAL | not described yet |
median | REAL | not described yet |
p75 | REAL | not described yet |
p_max | REAL | not described yet |
lunenburg | REAL | not described yet |
lunenburg_rank_of_districts | TEXT | Lunenburg’s position in that distribution, highest first, with the denominator: “299 of 318”. Read the denominator. It includes charter and virtual districts. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | measure | basis | districts | p_min | p25 | median | p75 | p_max | lunenburg | lunenburg_rank_of_districts | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1994 | net school spending as a share of required | stage: actual | 368 | 0.9499 | 1.0 | 1.0152 | 1.0434 | 34.0426 | 1.0392 | 103 of 368 | sources/state-dese/dese-ch70-district-profi… |
| 2003 | required local contribution as a share of t… | the rest is Chapter 70 aid | 355 | 0.0 | 0.4507 | 0.6752 | 0.897 | 3.6768 | 0.7003 | 167 of 355 | sources/state-dese/dese-ch70-district-profi… |
| 2022 | net school spending as a share of required | stage: actual | 361 | 0.1659 | 1.1149 | 1.2948 | 1.5944 | 53.7349 | 1.2769 | 191 of 361 | sources/state-dese/dese-ch70-district-profi… |
dese_function_statewide school Tier 3 · accounts fact 1,438 rows 2009–2025one row per year per function code per level, across every Massachusetts districtWhere Lunenburg sits among all Massachusetts districts on per-pupil spending, function by function, SY2009-SY2025 -- min, quartiles, median, max, Lunenburg's own figure and its rank. Also the statewide dollar totals and the share of each function paid by grants and revolving money rather than the general fund.
Read the denominator before quoting a rank. districts is the denominator and it INCLUDES charter and virtual districts, which are in DESE's file and are not municipal school districts. per_pupil_basis says on every row whether a per-pupil figure exists at all: DESE prints 0 against every out-of-district row, so the quartiles are blank there rather than a median of zeros. Filter on level here too -- a category and its own detail are separate rows.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
func_cat_code | TEXT | DESE’s four-letter function CATEGORY code — ADMN, TCHR, TSER, BENE, TUIT, ODTR, and the rollup codes IIII, OODD, TTPP. TUIT has no summary row of its own; its detail rolls straight into OODD. ODTR is inside OODD and must not be added to it again. |
func_code | TEXT | DESE’s function code. Numeric on a detail row (2330 is Paraprofessionals); on a summary row it repeats func_cat_code, which is how the two are told apart.A function code aggregates many budget lines and many posts. It is not a budget line and it is not a position. |
func_desc | TEXT | What DESE calls that function in words. |
districts | INTEGER | How many districts are in the distribution on this row — the denominator. count Includes charter and virtual districts, which are in DESE’s file and are not municipal school districts. |
gen_fund_total | REAL | The general fund part summed across every district in the distribution. dollars |
grants_revolving_total | REAL | The grants and revolving part summed across every district in the distribution. dollars |
total | REAL | The row's total, as printed. dollars |
grant_share | REAL | grants_revolving_total divided by total — the share of this function statewide that grants and revolving money paid for. fraction |
per_pupil_basis | TEXT | Whether a per-pupil figure exists for this row, and what its denominator is. Says so explicitly where one does not, rather than leaving a blank that reads as missing data. |
per_pupil_min | REAL | The lowest per-pupil figure any district in the distribution reported for this function. dollars |
per_pupil_p25 | REAL | The 25th percentile of per-pupil spending across the districts in the distribution. dollars |
per_pupil_median | REAL | The median per-pupil spending across the districts in the distribution. dollars The comparable quantity. Districts differ in size, grade span and whether they are regional, so a raw dollar comparison between two of them means very little. |
per_pupil_p75 | REAL | The 75th percentile of per-pupil spending across the districts in the distribution. dollars |
per_pupil_max | REAL | The highest per-pupil figure any district in the distribution reported for this function. dollars |
lunenburg_per_pupil | REAL | Lunenburg’s own per-pupil figure for this function and year. dollars |
lunenburg_rank_of_districts | TEXT | Lunenburg’s position in that distribution, highest first, with the denominator: “299 of 318”. Read the denominator. It includes charter and virtual districts. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | level | func_cat_code | func_code | func_desc | districts | gen_fund_total | grants_revolving_total | total | grant_share | per_pupil_basis | per_pupil_min | per_pupil_p25 | per_pupil_median | per_pupil_p75 | per_pupil_max | lunenburg_per_pupil | lunenburg_rank_of_districts | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009 | category | BENE | BENE | Insurance, Retirement Programs and Other | 328 | 1828183590.0 | 228924257.0 | 2057107844.0 | 0.1113 | per pupil, in-district FTE | 568.0 | 1522.8 | 1975.5 | 2450.5 | 5743.0 | 1693.0 | 216 of 328 | sources/state-dese/district-expenditures-by… |
| 2023 | detail | SERV | 3400 | Food Services | 314 | 23976281.0 | 531405802.0 | 555382083.0 | 0.9568 | per pupil, in-district FTE | 0.0 | 477.2 | 571.5 | 690.8 | 1717.0 | 508.0 | 211 of 314 | sources/state-dese/district-expenditures-by… |
| 2024 | detail | BENE | 5550 | School Crossing Guards | 139 | 16646449.0 | 147911.0 | 16794360.0 | 0.0088 | per pupil, in-district FTE | 0.0 | 9.0 | 18.0 | 33.0 | 75.0 | NULL | empty | sources/state-dese/district-expenditures-by… |
dese_teacher_subject school Tier 3 · accounts fact 5,527 rows 2008–2026one row per organisation per subject per school yearTeacher FTE by subject, with the share licensed, the share teaching in field, the share experienced and the students-per-teacher ratio, SY2008-SY2026.
teacher_fte IS AN FTE even though DESE names the column TCHR_CNT. Filter subject_level: all is every teacher, group is Core-All Subjects and Total Non-Core Academic Subjects which are groups of the subjects beside them, and the members therefore DO NOT PARTITION -- summing subjects double counts. students_per_teacher is parsed from the sentence DESE prints, which is kept beside it in student_teacher_ratio_printed. A SUBJECT ABSENT FROM THIS TABLE for an organisation and year we hold is a PUBLISHED ZERO, not a gap: rows with no FTE at all are not written, and they outnumber the real ones.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
org_code | TEXT | not described yet |
org_name | TEXT | not described yet |
org_level | TEXT | Whether the row is the state, a district, a school, or a collaborative. All four sit in one column in the DESE source. Filter on it before summing anything. And a DISTRICT row is not the sum of its SCHOOL rows: staff and children with no school assignment have a district row and no school row. |
subject | TEXT | not described yet |
subject_level | TEXT | Whether the subject on the row is every teacher, a GROUP of subjects, or one subject.all is All/All Teachers. group is Core-All Subjects and Total Non-Core Academic Subjects, which are groups of the subjects beside them, so the members of this column DO NOT PARTITION. Summing subjects counts a teacher about three times. |
teacher_fte | REAL | Full-time equivalent teachers. FTE DESE names the source column TCHR_CNT. It is not a headcount: the state row is 76,718.6. And FTE here is EPIMS FTE, defined as the share of a workday given to an ASSIGNMENT rather than to a person, so it cannot be divided into a budget line to get a cost per employee. |
licensed_pct | REAL | not described yet |
students_per_teacher | REAL | not described yet |
student_teacher_ratio_printed | TEXT | not described yet |
experienced_pct | REAL | not described yet |
teachers_without_license | REAL | not described yet |
in_field_pct | REAL | not described yet |
core_academic_fte | REAL | not described yet |
core_academic_pct | REAL | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea | district | org_code | org_name | org_level | subject | subject_level | teacher_fte | licensed_pct | students_per_teacher | student_teacher_ratio_printed | experienced_pct | teachers_without_license | in_field_pct | core_academic_fte | core_academic_pct | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2014 | 01250000 | Harvard | 01250000 | Harvard | district | All Teachers | all | 86.5 | 1.0 | 13.5 | 13.5 to 1 | NULL | NULL | NULL | 428.0 | 1.0 | sources/state-dese/dese-teacher-data.xlsx |
| 2020 | 06730000 | Groton-Dunstable | 06730305 | Groton Dunstable Regional Middle | school | Reading | subject | 2.0 | 1.0 | NULL | N/A | NULL | NULL | NULL | NULL | NULL | sources/state-dese/dese-teacher-data.xlsx |
| 2021 | 06160000 | Ayer Shirley School District | 06160001 | Lura A. White Elementary School | school | Arts | subject | 1.6 | 1.0 | NULL | N/A | NULL | NULL | NULL | NULL | NULL | sources/state-dese/dese-teacher-data.xlsx |
fund_1301_cash_journal school Tier 3 · accounts fact 277 rows 2024–2026one row per transactionTRANSACTIONS — the athletics revolving fund line by line: effective and posting dates, journal, references, vendor, amount, running balance, check and warrant numbers, and the comments the clerk typed. The only transaction-level data in the archive, obtained by records request.
from a records request.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
source_row | TEXT | not described yet |
eff_date | TEXT | not described yet |
post_date | TEXT | not described yet |
src | TEXT | not described yet |
src_meaning | TEXT | not described yet |
period | TEXT | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
journal | TEXT | not described yet |
ref1 | TEXT | not described yet |
po_ref2 | TEXT | not described yet |
ref3 | TEXT | not described yet |
reference | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
running_balance_derived | TEXT | not described yet |
check_no | TEXT | not described yet |
warrant | TEXT | not described yet |
voucher | TEXT | not described yet |
vendor | TEXT | not described yet |
comments | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | source_row | eff_date | post_date | src | src_meaning | period | journal | ref1 | po_ref2 | ref3 | reference | amount | running_balance_derived | check_no | warrant | voucher | vendor | comments |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2024 | 20 | 2024-05-23 | 2024-05-23 | APP | accounts payable — warrant disbursement | 11 | 476 | 58 24 | empty | empty | 58 24 | -5504.91 | 49527.63 | 0 | empty | empty | empty | empty |
| 2025 | 84 | 2024-08-07 | 2024-08-14 | GRV | general journal reversal / correction | 2 | 106 | 12WP24 | empty | empty | 2412001378 | -586.50 | 17029.10 | 0 | empty | empty | empty | TO CORRECT FY |
| 2026 | 13 | 2026-04-02 | 2026-04-02 | APP | accounts payable — warrant disbursement | 10 | 40 | 44 26 | empty | empty | 44 26 | -9900.00 | 160044.80 | 0 | empty | empty | empty | empty |
munis_school_ytd school Tier 3 · accounts fact 3,784 rowsone row per account per report (8 reports: FY2023-FY2026 period 13, general fund and special funds)The school department's own MUNIS year-to-date budget reports at the CLOSE of each fiscal year (period 13): original and revised budget, expended, encumbered and available, per account. Read from the published spreadsheets the Town delivered on 6 October 2026, tied to every total the sheet prints.
Fiscal year and period come from the FILENAME -- the workbooks state neither. Period 13 is the closed year; period 12 is June before the closing entries.
| column | type | what it is |
|---|---|---|
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
fiscal_year | INTEGER | not described yet |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
report | TEXT | not described yet |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
org | TEXT | The MUNIS org segment of the account. |
obj | TEXT | not described yet |
project | TEXT | not described yet |
account | TEXT | not described yet |
description | TEXT | not described yet |
type | TEXT | not described yet |
rollup | TEXT | not described yet |
sub_rollup | TEXT | not described yet |
original_approp | REAL | not described yet |
transfers_adjustments | REAL | not described yet |
revised_budget | REAL | not described yet |
ytd_expended | REAL | not described yet |
encumbrances | REAL | not described yet |
available_budget | REAL | not described yet |
pct_used | REAL | Share of the revised budget used. percent |
First 3 rows, in rowid order:
| source | fiscal_year | period | report | fund | org | obj | project | account | description | type | rollup | sub_rollup | original_approp | transfers_adjustments | revised_budget | ytd_expended | encumbrances | available_budget | pct_used |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sources/town-ledgers/expenses/glytdbud-expe… | 2023 | 13 | special-school | 1309 | 13094042 | 531006 | NULL | 1309-3-300-4000-04-0-00-2-531006 | PURCHASE OF SERVICE | E | NULL | NULL | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| sources/town-ledgers/expenses/glytdbud-expe… | 2024 | 13 | gf-school | 0100 | S3991562 | 575001 | NULL | 0100-3-300-3200-99-1-56-2-575001 | TRAVEL/OTHER EXPENSES | E | NULL | NULL | 620.0 | 0.0 | 620.0 | 620.0 | 0.0 | 0.0 | 100.0 |
| sources/town-ledgers/expenses/glytdbud-expe… | 2026 | 13 | special-school | 2800 | 280022 | 555050 | NULL | 2800-3-300-2000-00-0-00-2-555050 | NEW EQUIPMENT | E | NULL | NULL | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
munis_trial_balance_account school Tier 3 · accounts fact 17 rowsone row per account in fund 1300, FY2026 periods 1-13The FY2026 trial balance of fund 1300 per account: beginning balance, debits, credits, net change, ending balance -- as the MUNIS report prints it.
Fund 1300 only. One fiscal year (FY2026); the workbook's own cell B5 states the year and is checked against the filename.
| column | type | what it is |
|---|---|---|
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
fiscal_year | INTEGER | not described yet |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
key | TEXT | The row's join key. |
org | TEXT | The MUNIS org segment of the account. |
account | TEXT | not described yet |
description | TEXT | not described yet |
beginning | REAL | not described yet |
debits | REAL | not described yet |
credits | REAL | not described yet |
net_change | REAL | not described yet |
ending | REAL | not described yet |
First 3 rows, in rowid order:
| source | fiscal_year | period | fund | key | org | account | description | beginning | debits | credits | net_change | ending |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sources/town-ledgers/account-details/accoun… | 2026 | 13 | 1300 | 1300 321100 | 1300 | 321100 | RESERVED FOR ENCUMBRANCES | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| sources/town-ledgers/account-details/accoun… | 2026 | 13 | 1300 | 13002022 545001 | 13002022 | 545001 | GENERAL SUPPLIES | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| sources/town-ledgers/account-details/accoun… | 2026 | 13 | 1300 | 13002052 545001 | 13002052 | 545001 | GENERAL SUPPLIES | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
munis_trial_balance_journal school Tier 3 · accounts fact 102 rowsone row per journal line in fund 1300, FY2026Every journal line behind the fund 1300 trial balance: period, journal, source, effective date, reference, debits, credits, running balance. What moved each fund 1300 account, line by line.
is_soy_opening_balance marks the start-of-year opening entry, which is a balance and not an activity -- exclude it when summing a year's movement.
| column | type | what it is |
|---|---|---|
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
fiscal_year | INTEGER | not described yet |
key | TEXT | The row's join key. |
org | TEXT | The MUNIS org segment of the account. |
account | TEXT | not described yet |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
journal | TEXT | not described yet |
src | TEXT | not described yet |
is_soy_opening_balance | INTEGER | not described yet |
eff_date | TEXT | not described yet |
reference | TEXT | not described yet |
debits | REAL | not described yet |
credits | REAL | not described yet |
running_balance | REAL | not described yet |
First 3 rows, in rowid order:
| source | fiscal_year | key | org | account | period | journal | src | is_soy_opening_balance | eff_date | reference | debits | credits | running_balance |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sources/town-ledgers/account-details/accoun… | 2026 | 1300 104000 | 1300 | 104000 | 1 | 37 | APP | 0 | 2025-07-08 00:00:00 | 1W/P25 | 0.0 | 876.73 | -876.73 |
| sources/town-ledgers/account-details/accoun… | 2026 | 13003004 432000 | 13003004 | 432000 | 11 | 584 | CRP | 0 | 2026-05-28 00:00:00 | T145 Cash Receipts Journal | 3.0 | 0.0 | -3101.25 |
| sources/town-ledgers/account-details/accoun… | 2026 | 13003004 432000 | 13003004 | 432000 | 12 | 1443 | CRP | 0 | 2026-06-30 00:00:00 | T145 Cash Receipts Journal | 0.0 | 53.0 | -3195.25 |
Not about moneyCounts, names, dates and documents — everything this archive holds that is not a dollar figure
athletic_fee_schedule school fact 31 rows 2024–2027one row per fee per yearThe published fee a family pays to play: dollars per fiscal year × school level × item, with the date it was set and the document that set it. Includes family caps and sibling discounts.
by level and year.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
school_year | TEXT | not described yet |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
item | TEXT | The thing being priced or counted. |
amount | TEXT | The figure, as printed. dollars |
unit | TEXT | What the figure is counted in. |
unit_status | TEXT | not described yet |
unit_basis | TEXT | not described yet |
unit_quote | TEXT | not described yet |
set_on | TEXT | The date the rate or fee was set. |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
source_file | TEXT | The file the figure was read from. |
source_ref | TEXT | Where in the source the figure sits — a cell, a line, a page. Rule 13: a coordinate, so a figure can be checked rather than taken. |
verified | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | school_year | level | item | amount | unit | unit_status | unit_basis | unit_quote | set_on | source | source_file | source_ref | verified |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025 | 2024-25 | HS | third_child | 85.00 | per student, per season | structural | The workbook nowhere writes the word season… | empty | empty | District athletics workbook, by sport (Town… | town-ledgers/account-details/athletics-by-s… | Spring!L3 | Spring!L3 |
| 2025 | 2024-25 | MS | reduced_fee | 26.00 | per student, per season | structural | The workbook nowhere writes the word season… | empty | empty | District athletics workbook, by sport (Town… | town-ledgers/account-details/athletics-by-s… | Spring!U3 | Spring!U3 |
| 2026 | 2025-26 | HS | full_pay | 325.00 | per student, per season | structural | The 26 February 2025 minutes state an amoun… | empty | 2025-02-26 | School Committee minutes, 26 February 2025 … | minutes/text/school-committee/2025-02-26-mi… | up to $325 | quoted in source |
athletics_by_sport school fact 960 rows 2024–2026one row per sport per season per metricPer sport × season × level: participation COUNTS and DOLLAR figures mixed in one table, told apart by metric. raw keeps the value exactly as printed and is_numeric says whether it parsed, because some cells are text.
| column | type | what it is |
|---|---|---|
season | TEXT | Which athletic season. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
sport | TEXT | The sport. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
metric | TEXT | Which quantity this row measures. |
value | TEXT | The figure, as printed. dollars |
raw | TEXT | The value exactly as printed, before parsing. Rule 13: what the source says, beside what we made of it. |
is_numeric | TEXT | Whether the raw value parsed as a number. |
cell | TEXT | The spreadsheet cell the figure came from. A coordinate, so the figure can be checked. |
First 3 rows, in rowid order:
| season | level | sport | fy | metric | value | raw | is_numeric | cell |
|---|---|---|---|---|---|---|---|---|
| Fall | HS | Boys CC | 2024 | Costs for all 3 Seasons | empty | MIAA 1/3 4550. -1516.67 | 0 | AX6 |
| Spring | HS | Baseball | 2025 | Expected Fees Received | 4592.5 | 4592.5 | 1 | X6 |
| Spring | HS | Softball | 2025 | Full Pay | 21.0 | 21 | 1 | F5 |
athletics_by_sport_reconciliation school provenance 342 rows 2024–2026one row per printed totalNot data — checks. For each total the source prints, what our rows sum to, the difference, and whether it ties.
| column | type | what it is |
|---|---|---|
season | TEXT | Which athletic season. |
scope | TEXT | Whose money or whose subject the table is about: school, town, both, state or archive.both is not a hedge — the ledger and the chart of accounts genuinely carry every department, and splitting them would be inventing a division the source does not make. |
metric | TEXT | Which quantity this row measures. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
printed | TEXT | The total the source itself prints. dollars |
printed_cell | TEXT | Where that printed total sits. |
printed_raw | TEXT | The printed total exactly as it appears. |
summed_from_rows | TEXT | What our rows add to. dollars |
difference | TEXT | Ours less the source's. dollars |
ties | TEXT | Whether the two agree. |
First 3 rows, in rowid order:
| season | scope | metric | fy | printed | printed_cell | printed_raw | summed_from_rows | difference | ties |
|---|---|---|---|---|---|---|---|---|---|
| Winter | ALL | Equipment | 2024 | 2567.2 | BH23 | 2567.2 | 2567.2 | 0.0 | 1 |
| Winter | HS | Coaches | 2025 | 36133.0 | AQ16 | 36133 | 36133.0 | 0.0 | 1 |
| Winter | HS | Full Pay | 2024 | 118.0 | E16 | 118 | 118.0 | 0.0 | 1 |
grant_award school fact 79 rows 2020, 2021, 2022, 2023, 2024, FY21-24one row per grant per yearGrant AWARDS: name, amount in dollars, who holds it, and the fiscal year — except one ESSER award that genuinely spans FY21–24, which is why fy is TEXT here.
by name and amount.
| column | type | what it is |
|---|---|---|
fy | TEXT | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
amount | REAL | The figure, as printed. dollars |
owner | TEXT | Who holds the grant. |
documents_disagree | INTEGER | Two documents state different figures for the same thing. Kept rather than resolved: which is right is often not established. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
url | TEXT | The publisher's own address for the document. |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
First 3 rows, in rowid order:
| fy | kind | name | amount | owner | documents_disagree | doc_id | url | sha256 |
|---|---|---|---|---|---|---|---|---|
| 2022 | federal | Special Education, 240 Grant | 399152.0 | Director of Special Services | 1 | fy25-superintendent-39-s-budget-update.txt | https://drive.google.com/file/d/1yJNhIyBLVT… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… |
| 2022 | federal | Special Education, AARP | 8229.0 | Director of Special Services | 0 | fy25-superintendent-39-s-budget-update.txt | https://drive.google.com/file/d/1yJNhIyBLVT… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… |
| 2023 | state | Grant | 25000.0 | empty | 0 | fy25-superintendent-39-s-budget-update.txt | https://drive.google.com/file/d/1yJNhIyBLVT… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… |
grants_history school fact 79 rows 2020, 2021, 2022, 2023, 2024, FY21-24one row per grant per yearThe same awards with their source addresses and checksums, plus whether documents disagree about an amount and whether it is ESSER money.
fy is TEXT — see grant_award.
| column | type | what it is |
|---|---|---|
fy | TEXT | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
amount | TEXT | The figure, as printed. dollars |
owner | TEXT | Who holds the grant. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
doc | TEXT | not described yet |
esser | TEXT | not described yet |
disagreement | TEXT | not described yet |
source_url | TEXT | not described yet |
our_copy | TEXT | not described yet |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
First 3 rows, in rowid order:
| fy | kind | name | amount | owner | page | doc | esser | disagreement | source_url | our_copy | sha256 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2021 | federal | Title IV, 309 Grant | 18466.0 | Director of Teaching & Learning | 35 | fy25-superintendent-39-s-budget-update.txt | 0 | empty | https://drive.google.com/file/d/1yJNhIyBLVT… | https://lunenburgbudgetproject.org/docs/dis… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… |
| 2023 | federal | Title IV, Grant, 309 Grant | 12904.0 | empty | 16 | fy24-superintendent-39-s-recommended-budget… | 0 | empty | https://drive.google.com/file/d/1yJNhIyBLVT… | https://lunenburgbudgetproject.org/docs/dis… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… |
| 2024 | state | Arts & Cultural Vitality, 718 Grant | 5200.0 | Director of Teaching & Learning | 32 | fy25-superintendent-39-s-budget-update.txt | 0 | empty | https://drive.google.com/file/d/1yJNhIyBLVT… | https://lunenburgbudgetproject.org/docs/dis… | 9169e2700def0c1a2b6bebbc55d4e7f737ea5c3a735… |
line_history_coverage school provenance 86 rowsone row per source documentNot figures — a report on extraction. Per source document: how many data rows, how many carried a usable layout, how many fell short of the expected column count, and why a document was or was not usable.
| column | type | what it is |
|---|---|---|
document | TEXT | The source file the figure was read from. |
doc_year | TEXT | not described yet |
data_rows | TEXT | not described yet |
rows_with_layout | TEXT | not described yet |
rows_short_of_columns | TEXT | not described yet |
figures | TEXT | not described yet |
header_line | TEXT | not described yet |
header_years | TEXT | not described yet |
header_kinds | TEXT | not described yet |
doc_date | TEXT | not described yet |
covers | TEXT | not described yet |
reason | TEXT | not described yet |
First 3 rows, in rowid order:
| document | doc_year | data_rows | rows_with_layout | rows_short_of_columns | figures | header_line | header_years | header_kinds | doc_date | covers | reason |
|---|---|---|---|---|---|---|---|---|---|---|---|
| fy21-recommended-budget-presentation-4-22-2… | 2021 | 30 | 0 | 0 | 0 | empty | FY20 Budget FY21 Budget | empty | 2020-04-22 | FY2020 FY2021 | header wrapped: line 101 states 2 fiscal ye… |
| fy23-quarterly-budget-update.txt | 2023 | 1 | 0 | 0 | 0 | empty | FY23 Quarterly Budget Update November 11, 2… | empty | 2022-11-11 | FY2023 | single-column table: line 3 states one fisc… |
| school-committee-approved-fy26-budget-perso… | 2026 | 2 | 0 | 0 | 0 | empty | School Committee Approved FY26 Budget | empty | empty | FY2026 | single-column table: line 2 states one fisc… |
line_history_disagreements school provenance 1,502 rows 2014–2027one row per disagreeing readingOne row per disagreeing READING: where two documents state different dollar amounts for the same line-year, both values are kept with their source and the spread between them. Nothing here is resolved.
Kept rather than resolved. Which document is right is often not established.
| column | type | what it is |
|---|---|---|
key | TEXT | The row's join key. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
variant | TEXT | Which whole-budget scenario the figure belongs to. FY27 has four — Balanced, Core Budget, Level Service, Restoration. Without this you sum all four budgets together. |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
value | TEXT | The figure, as printed. dollars |
is_kept | TEXT | not described yet |
spread | TEXT | not described yet |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
First 3 rows, in rowid order:
| key | label | fy | stage | variant | source | value | is_kept | spread | kind |
|---|---|---|---|---|---|---|---|---|---|
| hs general school supplies | H.S. General School Supplies | 2025 | proposed | empty | final-fy26-town-manager-39-s-target-budget-… | 16000 | 0 | 5500 | documents |
| maintenance system salaries | Maintenance/System Salaries | 2019 | proposed | empty | fy19-budget-hearing-document-4-4-18.txt | 280090 | 0 | 12094 | documents |
| ps guidance supplies | P.S. Guidance Supplies | 2019 | proposed | empty | fy19-budget-hearing-document-4-4-18.txt | 200 | 0 | 258 | documents |
placement_counts school fact 15 rows 2011–2025one row per yearCHILDREN, not dollars. Students placed outside the district, split collaborative / day / residential, measured on 1 March each year from SIMS Report 7. FY2013–FY2025. Carries its own checks: whether the parts sum to the total, and whether each year agrees with the next year's restatement of it.
split collaborative/day/residential.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
as_of | TEXT | The date the count was taken. Placement counts are measured on 1 March, not at year end. |
total | TEXT | The row's total, as printed. dollars |
collaborative | TEXT | Children placed with an educational collaborative. count Children, not dollars. |
day | TEXT | Children in a day placement. count Children, not dollars. |
residential | TEXT | Children in a residential placement. count Children, not dollars. |
collaborative_within_day | TEXT | Whether the collaborative count is inside the day count. |
collaborative_basis | TEXT | How the collaborative figure was arrived at. |
report_says_prior_year | TEXT | The prior-year figure this report restates. Each year states last year's number, which checks the chain. |
parts_tie | TEXT | Whether the parts sum to the printed total. |
chain_agrees | TEXT | Whether this year's report agrees with last year's about last year. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
document | TEXT | The source file the figure was read from. |
checks | TEXT | Which checks this row passed. |
First 3 rows, in rowid order:
| fy | as_of | total | collaborative | day | residential | collaborative_within_day | collaborative_basis | report_says_prior_year | parts_tie | chain_agrees | page | document | checks |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2011 | 2011-03-01 | 15 | empty | 13 | 2 | 1 | subset of day placements | empty | yes | n/a | 35 | FY2011 | parts 13+2=15 ties to stated 15 |
| 2017 | 2017-03-01 | 14 | 2 | 8 | 4 | empty | parallel category | 19 | yes | yes | 102 | FY2017 | parts 2+8+4=14 ties to stated 14; report sa… |
| 2023 | 2023-03-01 | 7 | 3 | 3 | 1 | empty | parallel category | 8 | yes | yes | 120 | FY2023 | parts 3+3+1=7 ties to stated 7; report says… |
report_enrollment_mcas school extract 338 rows 2011–2025one row per printed lineEnrollment counts and MCAS results as the annual reports print them. Mixed measures in ordinal columns; read column_meaning before using any of them.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| enrollment_mcas | 2012 | FY2012 | 33 | 1 | Health Promotion | PK | empty | row | empty | empty | empty | empty | Confirmed 25 | Communicable Disease Number … | 43 | 41 | empty | empty | empty | empty | empty | empty | 2 | empty | 0 | empty | empty | no check | no total printed |
| enrollment_mcas | 2014 | FY2014 | 120 | empty | empty | empty | empty | page_number | the page number, not a line of the table | empty | empty | empty | LUNENBURG PRIMARY SCHOOL | 2014-2015 | The … | 120 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| enrollment_mcas | 2023 | FY2023 | 144 | 1 | empty | and a deep understanding of the | empty | row | empty | empty | empty | empty | Our School Community | Montachusett Regiona… | 2019 | 2020 | 2021 | 2022 | 2023 | empty | empty | empty | 5 | empty | 0 | empty | empty | no check | no total printed |
report_monty_tech school extract 70 rows 2017–2017one row per printed lineFigures for Montachusett Regional Vocational Technical School as the annual reports print them. A DIFFERENT DISTRICT: Lunenburg pays it an assessment, and its figures must never be added to Lunenburg's own schools.
Monty Tech is a DIFFERENT DISTRICT. Never add it to Lunenburg's schools.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| monty_tech | 2017 | FY2017 | 143 | empty | Debt Service … | Retired Employee Benefits 859,100 | empty | row | empty | empty | empty | empty | General Fund- Income and Expense Summary | … | 5250.00 | 821348.00 | 969651.00 | 1004045.00 | 1068842.00 | 64797.00 | empty | empty | 6 | empty | 0 | empty | empty | no check | no total printed |
| monty_tech | 2017 | FY2017 | 143 | empty | Debt Service … | FUNCTION 8000 DEBT RETIREMENT 1,213,204 | empty | subtotal | subtotal: equals the 2 rows above it, in 4 … | empty | empty | empty | General Fund- Income and Expense Summary | … | empty | 1210099.00 | 1208628.00 | 1204669.00 | 1201263.00 | -3406.00 | empty | empty | 5 | empty | 0 | empty | empty | no check | no total printed |
| monty_tech | 2017 | FY2017 | 143 | empty | Debt Service … | Total $24,785,240 $ | empty | subtotal | empty | empty | empty | empty | General Fund- Income and Expense Summary | … | empty | 25548074.00 | 26228813.00 | 26364958.00 | 26895680.00 | 530722.00 | empty | empty | 5 | yes | 0 | empty | empty | no check | no total printed |
role_classification school dimension 1,016 rowsone row per printed roster titleOur classification of each printed roster title into a role category and grade, with how it was classified. Judgement, recorded so it can be disputed.
| column | type | what it is |
|---|---|---|
role_raw | TEXT | The job title exactly as printed. |
grade_or_dept | TEXT | not described yet |
rows | TEXT | How many rows the extract produced. count |
role_category | TEXT | not described yet |
role_grade | TEXT | not described yet |
classified_by | TEXT | not described yet |
First 3 rows, in rowid order:
| role_raw | grade_or_dept | rows | role_category | role_grade | classified_by |
|---|---|---|---|---|---|
| Director | Facilities & Grounds | 5 | administrator | empty | director |
| TLC Teacher | Achieve | 2 | teacher | empty | teacher-title |
| Gr. 6 Teacher | Learning Center/ Spec. Ed. | 1 | teacher | 6 | teacher-title |
ski_coop school fact 15 rowsone row per co-op participant town or measureThe ski co-operative: which towns send athletes, how many, and what is paid — the one athletics programme Lunenburg runs jointly with other districts.
A CO-OP TOTAL IS NOT A ONE-TOWN TOTAL, which is the whole reason this is its own table. Its figures cover every participating town, so setting them beside another sport’s Lunenburg-only cost compares two different populations. cell carries the spreadsheet coordinate each figure was read from, per rule 13.
| column | type | what it is |
|---|---|---|
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
town | TEXT | not described yet |
athletes | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
cell | TEXT | The spreadsheet cell the figure came from. A coordinate, so the figure can be checked. |
note | TEXT | What we recorded about this row. |
First 3 rows, in rowid order:
| kind | label | town | athletes | amount | cell | note |
|---|---|---|---|---|---|---|
| line | Practices at Wachusett Mountain | empty | empty | 1870 | B8 | empty |
| line | Race 2/13/26 | empty | empty | 1030 | B17 | empty |
| share | 1 Athlete | Narragansett | 1 | 885.1428571428571 | B35 | $325 paid by the athlete direct to Lunenbur… |
staff_position_map school dimension 525 rowsone row per printed roster titleA lookup, not data: each printed roster title, how many times it was seen, and the position it maps to.
| column | type | what it is |
|---|---|---|
role_as_printed | TEXT | not described yet |
position | TEXT | The job, classified by us from the printed title. A roster carries no FTE, so a 0.4 music teacher and a full-timer are one row each. |
times_seen | TEXT | not described yet |
First 3 rows, in rowid order:
| role_as_printed | position | times_seen |
|---|---|---|
| (TLC) Theraputic Learning Center | Special Education Teacher | 1 |
| AD | empty | 7 |
| Occup Therap | empty | 1 |
staff_roster_counts school fact 698 rows 2011–2025one row per school per position per yearCounts of the names above, per school × position × year. A count of names the town printed. It is not a staffing level and cannot be turned into one.
A count of NAMES, with no FTE and no funding source. It is not a staffing level.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
school | TEXT | Which school, as the roster prints it. |
position | TEXT | The job, classified by us from the printed title. A roster carries no FTE, so a 0.4 music teacher and a full-timer are one row each. |
count | TEXT | How many. count |
First 3 rows, in rowid order:
| fy | school | position | count |
|---|---|---|---|
| 2011 | primary | Classroom Teacher | 9 |
| 2012 | high | (unmapped) | 28 |
| 2019 | primary | (unmapped) | 13 |
staff_roster_entries school fact 3,751 rows 2011–2025one row per person per yearPEOPLE — one row per name the town printed, per year, with the school, the page, the printed job title and our classification of it. FY2011–FY2025, 3,815 entries. No FTE, no salary, no funding source, and undated within the year.
name by name
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
school | TEXT | Which school, as the roster prints it. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
role_raw | TEXT | The job title exactly as printed. |
position | TEXT | The job, classified by us from the printed title. A roster carries no FTE, so a 0.4 music teacher and a full-timer are one row each. |
position_from | TEXT | not described yet |
grade_or_dept | TEXT | not described yet |
line | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
First 3 rows, in rowid order:
| fy | school | page | name | role_raw | position | position_from | grade_or_dept | line | document |
|---|---|---|---|---|---|---|---|---|---|
| 2014 | high | 110 | Joseph Adamowicz | empty | Paraprofessional | section heading | Paraprofessionals: | 7 | 4120-fy-2014-annual-town-report.pdf |
| 2016 | primary | 110 | Sheila Bilotta | Teacher | Classroom Teacher | printed role | K3 | 28 | 4123-fy-2016-annual-town-report.pdf |
| 2019 | middle | 131 | Kathleen Hyatt | empty | Paraprofessional | section heading | Paraprofessionals | 25 | 4126-fy-2019-annual-town-report.pdf |
v_budget_disagreement school view 1,502 rows 2014–2027one row per disagreeing reading (line, year, stage, variant, source document)Where two documents state DIFFERENT dollar amounts for the same budget line and year -- both readings kept, each with the document it came from and the spread between them. This is the table to read when you want to know which budget figures are disputed and by how much, and which document said what. A pass-through of line_history_disagreements with the numbers cast to REAL.
Nothing here is resolved: which document is right is usually not established, and is_kept records which reading the model took, not which is correct. Rows are READINGS, not lines -- counting rows counts documents, so use COUNT(DISTINCT line_key || fy) for a count of disputed line-years. Split on stage and variant: 254 of the disagreeing line-year-stage cells are at stage proposed and only 45 settled and 35 restated, so a disagreement is most often two proposals, not a contested actual.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
stage | TEXT | What the figure IS: proposed, settled, or actual. Rule 1. A rate measured from one stage to another is partly growth and partly the step between them. |
variant | TEXT | Which whole-budget scenario the figure belongs to. FY27 has four — Balanced, Core Budget, Level Service, Restoration. Without this you sum all four budgets together. |
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
value | NUM | The figure, as printed. dollars |
is_kept | NUM | not described yet |
spread | NUM | not described yet |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_staff_roster school view 3,751 rows 2011–2025one row per person per year, with our classification of their printed titlePEOPLE -- every name the town printed in a school staff roster, FY2011-FY2025, with the school, the page, the job title exactly as printed (role_raw) and our classification of it into a role category and grade. This is the dataset for counting how many teachers, paraprofessionals or secretaries a school listed in a year.
A COUNT OF NAMES IS NOT A STAFFING LEVEL. There is NO FTE, so a 0.4 music teacher and a full-timer are one row each; NO FUNDING SOURCE, which is the question rule 11 says actually matters; no salary; and the roster is a point in time undated within the year. role_category and role_grade are OUR judgement (see classified_by), not the town's words -- role_raw is the town's words. The join to role_classification is a LEFT JOIN, so an unclassified title would arrive NULL; none is NULL today. position_legacy is the superseded column and is kept only so an older query still resolves.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
school | TEXT | Which school, as the roster prints it. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
role_raw | TEXT | The job title exactly as printed. |
grade_or_dept | TEXT | not described yet |
position_legacy | TEXT | not described yet |
role_category | TEXT | not described yet |
role_grade | TEXT | not described yet |
classified_by | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
The other 67 departments, the receipts that fund them, and what the annual reports print about the town.
Tier 1 · totalswhat was appropriated and what is left, by department
annual_report_receipts town Tier 1 · totals extract 1,137 rows 2011–2023one row per revenue line per yearTown REVENUE — every receipt line the annual reports print, by name and amount, per year, FY2011–FY2023. Only five years are checked against the report's own printed total.
as printed.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
amount | TEXT | The figure, as printed. dollars |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
First 3 rows, in rowid order:
| fy | source | amount | status | document | page |
|---|---|---|---|---|---|
| 2015 | CEMETERIES BURIALS | 4000.00 | checked | 4121-fy-2015-annual-town-report.pdf | 22 |
| 2017 | MEDICAL RECORDS | 135.00 | checked | 4124-fy-2017-annual-town-report.pdf | 22 |
| 2022 | DOG LICENSES | 10670.00 | checked | 4129-fy-2022-annual-town-report.pdf | 26 |
census_acs town Tier 1 · totals fact 889 rowsone row per ACS table per variable per geography per 5-year vintageWHO LIVES IN LUNENBURG -- the only table here that measures RESIDENTS rather than children, dollars or documents. Age by sex (B01001), households by presence of a child under 18 (B11005), median household income by age of householder (B19049) and owner against renter (B25003) for Lunenburg town, plus median household income for EVERY Massachusetts municipality (B19013) so the town can be ranked rather than described. Two 5-year vintages, 2018 (2014-2018) and 2023 (2019-2023), which do not overlap.
EVERY FIGURE IS A SAMPLE ESTIMATE WITH A MARGIN AND THE MARGINS ARE WIDE. This is not a DESE count: 1,568 children means 1,568, while households with a child under 18 is 1,477 +/- 198. Never quote an estimate without moe; two figures whose intervals overlap are NOT different, and a difference between the two vintages smaller than the combined margin is not a change. level IS THE ROLLUP GUARD -- town is Lunenburg alone and municipality is the 350-town statewide income column, and reading one for the other turns a town figure into a statewide one. THE NEGATIVE VALUES IN estimate_raw AND moe_raw ARE SENTINELS, NOT FIGURES: -666666666 is no estimate, -222222222 and -333333333 are no computable margin, -555555555 is an estimate CONTROLLED to an independent total and is not a margin of zero. estimate and moe are NULL wherever one of those was published and usable says so. A rank off this column is arithmetic, not a ranking: 205 of the 350 municipalities have an income interval overlapping Lunenburg's. And it counts households with a child under 18, which is a CEILING on households with a child in the Lunenburg public schools -- see money_gaps.
| column | type | what it is |
|---|---|---|
vintage | INTEGER | not described yet |
table | TEXT | Which table this row describes. |
variable | TEXT | not described yet |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
geography | TEXT | not described yet |
estimate | REAL | not described yet |
moe | REAL | not described yet |
estimate_raw | TEXT | not described yet |
moe_raw | TEXT | not described yet |
usable | INTEGER | not described yet |
moe_note | TEXT | not described yet |
about | TEXT | not described yet |
source_file | TEXT | The file the figure was read from. |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
First 3 rows, in rowid order:
| vintage | table | variable | level | geography | estimate | moe | estimate_raw | moe_raw | usable | moe_note | about | source_file | sha256 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2023 | B19013 | B19013_001E | municipality | Cohasset town, Norfolk County, Massachusetts | 187060.0 | 25192.0 | 187060 | 25192 | 1 | empty | Median household income — every Massachuset… | acs5-2023-B19013-massachusetts-lunenburg.js… | 4edbe5e1bf435d9579d277fbafa9456385ea29bb868… |
| 2018 | B19013 | B19013_001E | municipality | Haverhill city, Essex County, Massachusetts | 67579.0 | 2706.0 | 67579 | 2706 | 1 | empty | Median household income — every Massachuset… | acs5-2018-B19013-massachusetts-lunenburg.js… | ec6f1555065f35324f4b76f0f645bb76baf20386b61… |
| 2018 | B19013 | B19013_001E | municipality | Westfield city, Hampden County, Massachuset… | 63660.0 | 4228.0 | 63660 | 4228 | 1 | empty | Median household income — every Massachuset… | acs5-2018-B19013-massachusetts-lunenburg.js… | ec6f1555065f35324f4b76f0f645bb76baf20386b61… |
report_appropriations town Tier 1 · totals extract 5,345 rows 2011–2025one row per printed lineAPPROPRIATIONS as the annual reports print them — the largest extract here, 4,665 rows across sixteen years. Values sit in ORDINAL columns (v1..v8) whose meaning changes page to page; column_meaning names them where the table states an identity that fixes them, and says not established where it does not.
v1..v8 are ORDINALS. Read column_meaning and split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| appropriations | 2014 | FY2014 | 24 | empty | Assessor's Administrati | empty | empty | subtotal | subtotal: equals the 1 rows above it, in 1 … | empty | accountant-schedule | empty | GENERAL FUND APPROPRIATIONS | SUMMARY & CLA… | 30004.80 | 30004.80 | empty | empty | empty | empty | empty | empty | 2 | empty | 0 | empty | not established -- this page states no iden… | check failed | v1: 31,075,051.58 vs 31,356,354.04 (-281,30… |
| appropriations | 2014 | FY2014 | 139 | 1 | General Government | Town Accountant | empty | row | empty | empty | omnibus-budget | 23 | GENERAL FUND APPROPRIATIONS | SUMMARY & CLA… | 146768.00 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | v1=voted (from the shape of the column, not… | check failed | v1: 28,979,384.00 vs 29,079,384.00 (-100,00… |
| appropriations | 2015 | FY2015 | 140 | 1 | Health & Sanitation | General Health Expense | empty | row | empty | empty | omnibus-budget | 54 | TOWN OF LUNENBURG | GENERAL FUND APPROPRIAT… | 32590.00 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | v1=voted (from the shape of the column, not… | check failed | voted: 32,025,895.00 vs 32,025,895.00 ; TOT… |
revenue_history town Tier 1 · totals fact 504 rows 2014, 2015, 2017, 2018, 2022one row per revenue source per yearThe checked subset of the above joined to our classification: the printed name, our normalised key, what KIND of revenue it is (levy, state aid, local receipt, transfer, one-time), the amount, and the document and page it came from. Five years.
with our classification of what KIND it is.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
printed_name | TEXT | not described yet |
source_key | TEXT | not described yet |
class | TEXT | Our classification of what KIND of revenue this is. Says where the money came FROM. It does NOT say what the money went on to pay for — general fund money is fungible and no document apportions it. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
amount | REAL | The figure, as printed. dollars |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
First 3 rows, in rowid order:
| fy | printed_name | source_key | class | label | amount | document | page |
|---|---|---|---|---|---|---|---|
| 2014 | DISHONORED CHECK FEE | DISHONOREDCHECKFEE | local | DISHONORED CHECK FEE | 475.0 | 4120-fy-2014-annual-town-report.pdf | 22 |
| 2017 | POLICE PERMITS | POLICEPERMITS | local | POLICE PERMITS | 5012.5 | 4124-fy-2017-annual-town-report.pdf | 22 |
| 2017 | SUBDIVISION/FORM A FILING FEES | SUBDIVISIONFORMAFILINGFEES | local | SUBDIVISION/FORM A FILING FEES | 2100.0 | 4124-fy-2017-annual-town-report.pdf | 22 |
special_revenue_funds town Tier 1 · totals extract 2,473 rows 2011–2025one row per fund per yearEvery fund OUTSIDE the general appropriation, FY2011–FY2025: balance brought forward, receipts, disbursements, balance carried forward. Grants, revolving funds and gifts that pay for real staff and appear nowhere in the appropriation. Dollars.
fifteen years
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
is_subtotal | TEXT | This row is a total of other rows, not a fund or a line of its own. Must be excluded from column sums or the rows it summarises are counted twice. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
fund_balance | TEXT | not described yet |
accounts_receivable | TEXT | not described yet |
deferred_revenue | TEXT | not described yet |
receipts | TEXT | Total money the fund took in during the year. dollars Not the same quantity as disbursements and must never be added to it. |
bans | TEXT | not described yet |
remaining_deficit | TEXT | not described yet |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
columns_tying | TEXT | not described yet |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| fy | edition | group | fund | page | is_subtotal | columns_as_printed | fund_balance | accounts_receivable | deferred_revenue | receipts | bans | remaining_deficit | read_by | column_meaning | v1 | v2 | v3 | v4 | v5 | v6 | n_values | ruler_spanned | row_check | derived_cell | columns_tying | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2012 | FY2012 | empty | 109 CDBG Sewer Hookup Grant CDBG Sewer Hook… | 70 | empty | empty | empty | empty | empty | empty | empty | empty | claude-opus-5, read off each page's OWN STO… | named by the reader, off the printed heading | empty | empty | empty | empty | empty | empty | 2 | empty | empty | empty | 4 | checked | balance_fwd: 2,062,621.79 vs printed 2,062,… |
| 2016 | FY2016 | empty | Sped Early Childhood Grant :: disbursements… | 32 | empty | empty | empty | empty | empty | empty | empty | empty | claude-opus-5 reading the page's own TEXT L… | named by the reader, off the printed heading | empty | empty | empty | empty | empty | empty | 2 | empty | empty | empty | 4 | checked | carried: 3,173,622.70 vs printed 3,173,622.… |
| 2017 | FY2017 | LIBRARY | FY07 Public Libraries Fund | 32 | empty | FISCAL YEAR ENDING 6/30/17 ; FORWARD | TOTA… | empty | empty | empty | empty | empty | empty | empty | empty | 571.17 | empty | empty | 571.17 | empty | empty | 2 | empty | empty | empty | 3 | check failed | v1: 3,097,802.70 vs printed 3,173,622.70 (-… |
town_ledger_fy26_q3 town Tier 1 · totals fact 67 rowsone row per departmentThe town's 67 departments at FY26 period 9: appropriation, transfers, revised, expended, encumbered, available and percent used. EXPENSE side only, department grain only.
by department.
| column | type | what it is |
|---|---|---|
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
original | TEXT | The appropriation as originally voted. dollars |
transfers | TEXT | Money moved into or out of the appropriation after it was voted. dollars This is why original and revised differ. |
revised | TEXT | The appropriation after transfers. dollars |
expended | TEXT | Spent. dollars |
encumbered | TEXT | Committed by purchase order but not yet spent. dollars |
available | TEXT | Revised less expended less encumbered. dollars |
pct_used | TEXT | Share of the revised budget used. percent |
First 3 rows, in rowid order:
| dept | name | original | transfers | revised | expended | encumbered | available | pct_used |
|---|---|---|---|---|---|---|---|---|
| 525 | PHYSICALS | 3500.0 | 0.0 | 3500.0 | 416.0 | 234.0 | 2850.0 | 18.6 |
| 754 | LOAN ADMINISTRATIVE FEES | 1230.0 | 0.0 | 1230.0 | 1230.47 | 0.0 | 0.0 | 100.0 |
| 825 | STATE ASSESSMENTS | 1028529.0 | 0.0 | 1028529.0 | 765004.0 | 0.0 | 263525.0 | 74.4 |
Tier 2 · categorieswhether a category — guidance, special education, transport — is over
dese_ch70_contribution town Tier 2 · categories fact 7,040 rows 2007–2026one row per MUNICIPALITY per fiscal yearThe municipal side of the Chapter 70 formula: equalized valuation, income, the effort each implies, the target local contribution and how the required contribution was arrived at. This is where the town's ability to pay is computed, and it is the half of the formula the school budget never shows.
A DIFFERENT GRAIN FROM EVERY OTHER CHAPTER 70 TABLE HERE: a row is a TOWN, not a district, and lea_number is the workbook's own municipal key rather than a DESE org code. For a regional district several towns contribute to one district, so this must not be joined one to one with dese_ch70_formula. AND THE TOWN'S REQUIRED CONTRIBUTION IS NOT THE DISTRICT'S: for FY2026 Lunenburg the town figure is $14,605,342 and the Lunenburg school district figure in dese_ch70_formula is $13,334,631, because a town also contributes to any regional district it belongs to. Every district is kept here rather than the seven-district peer scope the other Chapter 70 tables use, because a town in a regional district has a contribution row and no district row and scoping by district would drop exactly those.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
lea_number | TEXT | not described yet |
municipality | TEXT | not described yet |
equalized_valuation | REAL | not described yet |
property_local_effort | REAL | not described yet |
income | REAL | not described yet |
income_local_effort | REAL | not described yet |
combined_effort_yield | REAL | not described yet |
town_foundation_enrollment | REAL | not described yet |
town_foundation_budget | REAL | not described yet |
target_local_contribution | REAL | not described yet |
municipal_revenue_growth_factor | REAL | not described yet |
preliminary_contribution | REAL | not described yet |
excess_effort | REAL | not described yet |
effort_reduction | REAL | not described yet |
shortfall | REAL | not described yet |
dollar_increment | REAL | not described yet |
acceleration | REAL | not described yet |
required_local_contribution | REAL | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fy | lea_number | municipality | equalized_valuation | property_local_effort | income | income_local_effort | combined_effort_yield | town_foundation_enrollment | town_foundation_budget | target_local_contribution | municipal_revenue_growth_factor | preliminary_contribution | excess_effort | effort_reduction | shortfall | dollar_increment | acceleration | required_local_contribution | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009 | 284 | Stoneham | 3346362100.0 | 10395441.591181029 | 644514000.0 | 10029073.356834596 | 20424515.0 | 2685.0 | 23464260.293199997 | 19358015.0 | 0.029300000000000003 | 20878617.0 | 1520602.0 | 501798.66000000003 | 0.0 | 0.0 | NULL | 20376818.0 | sources/state-dese/dese-ch70-key-factors.xl… |
| 2016 | 242 | Provincetown | 2588786400.0 | 9857633.932808915 | 120356000.0 | 1796919.6057796448 | 11654554.0 | 133.0 | 1347322.27 | 1111541.0 | 0.0313 | 1328053.0 | 216512.0 | 108256.0 | 0.0 | 0.0 | NULL | 1212590.043 | sources/state-dese/dese-ch70-key-factors.xl… |
| 2024 | 289 | Sunderland | 458245200.0 | 1619450.5426057174 | 115008000.0 | 1763187.2175191646 | 3382638.0 | 280.25667350872 | 3899501.2136389366 | 3217089.0 | 0.051 | 3087232.0 | 0.0 | 0.0 | 129857.0 | 29374.0 | NULL | 3116606.0 | sources/state-dese/dese-ch70-key-factors.xl… |
Not about moneyCounts, names, dates and documents — everything this archive holds that is not a dollar figure
ballot_questions town fact 9 rowsone row per ballot questionVOTES, not dollars — though each carries the amount at stake. Per ballot question: type, purpose, yes / no / blank counts, registered voters, turnout and the result.
| column | type | what it is |
|---|---|---|
date | TEXT | not described yet |
election | TEXT | not described yet |
question | TEXT | not described yet |
type | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
purpose | TEXT | not described yet |
yes | TEXT | not described yet |
no | TEXT | not described yet |
blanks | TEXT | not described yet |
total | TEXT | The row's total, as printed. dollars |
registered | TEXT | not described yet |
turnout_pct | TEXT | not described yet |
result | TEXT | not described yet |
fy_report | TEXT | not described yet |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
checks | TEXT | Which checks this row passed. |
First 3 rows, in rowid order:
| date | election | question | type | amount | purpose | yes | no | blanks | total | registered | turnout_pct | result | fy_report | page | read_by | checks |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2024-05-18 | Annual Town Election | QUESTION 1. OVERRIDE | Proposition 2½ override | empty | Override approved by voters in May 2024; Ar… | 753 | 664 | empty | empty | empty | empty | PASSED | 2024 | 174 | plain | YES 189+149+157+258=753; NO 195+118+175+176… |
| 2025-05 | Annual Town Meeting | ARTICLE 28 | Proposition 2½ debt exclusion | 13800000 | Bonds for construction and revitalization | empty | empty | empty | empty | empty | empty | SEE REPORT | 2025 | empty | plain | amount as printed in the FY2025 warrant sum… |
| 2026-05-16 | Annual Town Election | QUESTION 2. OVERRIDE | Proposition 2½ override | 3300000 | Tier 2 override for the FY2027 school budge… | 760 | 1862 | 16 | 2638 | 9565 | 27.6 | FAILED | empty | empty | plain | YES 226+145+171+218=760; NO 480+399+451+532… |
capital_funding_history town fact 10 rows 2017–2026one row per yearPer year, how capital spending was PAID FOR: free cash, taxation, unexpended prior-year capital, other. Dollars.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
total | TEXT | The row's total, as printed. dollars |
free_cash | TEXT | not described yet |
taxation | TEXT | not described yet |
unexpended_prior_year_capital | TEXT | not described yet |
other | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | total | free_cash | taxation | unexpended_prior_year_capital | other |
|---|---|---|---|---|---|
| 2017 | 619475.00 | 250000.00 | 349023.05 | 20451.95 | 0.00 |
| 2023 | 2162849.30 | 983034.39 | 967725.00 | 212089.91 | 0.00 |
| 2024 | 1039010.00 | 467268.98 | 556789.09 | 14951.93 | 0.00 |
capital_plan_fy27 town fact 22 rowsone row per projectThe FY27 capital plan as proposed: project, department, cost, running cumulative, whether it was funded and from where.
ranked.
| column | type | what it is |
|---|---|---|
rank | TEXT | not described yet |
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
project | TEXT | not described yet |
cost | TEXT | not described yet |
cumulative | TEXT | not described yet |
funded | TEXT | not described yet |
funding | TEXT | not described yet |
First 3 rows, in rowid order:
| rank | dept | project | cost | cumulative | funded | funding |
|---|---|---|---|---|---|---|
| 2 | Police | Patrol Cruiser (replacement) | 68627.00 | 418627.00 | yes | free_cash_or_taxation |
| 12 | IT | Adult Activity Center Network Upgrade | 20405.00 | 1830203.00 | yes | free_cash_or_taxation |
| 19 | Schools | Heat for THES Maintenance Garage | 60000.00 | 2718608.00 | no | unfunded |
capital_plans town fact 201 rowsone row per project, per plan yearThe Capital Planning Committee's ranked recommendation, FY2015-FY2023 -- which extends capital_plan_fy27 backwards nine years.
WHAT WAS ASKED FOR, NOT WHAT WAS FUNDED. FY2016 prints both and this holds the Committee's list; capital_funding_history holds the funded figure. A different table from report_capital_projects, which is the fund balance schedule.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
report_fy | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
copy | TEXT | not described yet |
plan_fiscal_year | TEXT | not described yet |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
project | TEXT | not described yet |
cost | TEXT | not described yet |
cumulative | TEXT | not described yet |
printed_total | TEXT | The total the source itself prints, quoted. This is the independent check. An extract that does not tie to it is not trusted. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | edition | report_fy | document | page | copy | plan_fiscal_year | line_no | project | cost | cumulative | printed_total | columns_as_printed | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| capital_plan | FY2014 | 2014 | 4120-fy-2014-annual-town-report.pdf | 85 | committee report | 2015 | 13 | Marshall Park Parking Lot | 37000.0 | empty | 1114152.0 | At the Annual Town Meeting May 2014, the fo… | checked | 19 project rows sum to 1,114,152.00 = the t… |
| capital_plan | FY2016 | 2016 | 4123-fy-2016-annual-town-report.pdf | 94 | committee report | 2017 | 11 | LPS16-19 11 THMS, Asbestos Abatement / Ceil… | 145000.0 | 764475.0 | 780975.0 | Total $ 780,975 | checked | 12 project rows sum to 780,975.00 = the tot… |
| capital_plan | FY2021 | 2021 | 4128-fy-2021-annual-town-report.pdf | 96 | committee report | 2022 | 11 | FM21-03 Town Facilities Ritter, Envelope Re… | 120000.0 | empty | 1597825.0 | Total Capital Plan 1,597,825 | checked | 15 project rows sum to 1,597,825.00 = the t… |
capital_plans_refused town what refused 2 rowsone row per refused pageThe capital-plan pages that would not read, with the total the page states and its columns as printed.
A REFUSAL IS NOT A READING. These are kept out of capital_plans deliberately, because a row saying refused inside the data marked its own page as read and cleared it off the ingestion queue.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
report_fy | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
state | TEXT | not described yet |
printed_total | TEXT | The total the source itself prints, quoted. This is the independent check. An extract that does not tie to it is not trusted. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 2 rows, in rowid order:
| dataset | edition | report_fy | document | page | state | printed_total | columns_as_printed | reconciliation |
|---|---|---|---|---|---|---|---|---|
| capital_plan | FY2013 | 2013 | 4119-fy-2013-annual-town-report.pdf | 12 | refused | 129000.0 | Additional recommendations from the Town Ma… | 11 candidate rows ruled into 2 money column… |
| capital_plan | FY2024 | 2024 | 4132-fy-2024-annual-town-report.pdf | 87 | refused | 1317119.0 | funding 10 of the prioritized projects tota… | 11 candidate rows ruled into 2 money column… |
debt_repayment town fact 37 rowsone row per future year, per reportWhat debt service falls DUE in each future year, out to FY2047: principal, interest, MWPAT admin fee and the printed total.
NOT THE SAME QUANTITY AS outstanding_debt, which is principal owed on a date. Only the GRAND TOTAL block publishes -- the per-issue detail cannot be footed off these scans -- so this cannot say what any one bond costs. And the overlap between reports is MOVEMENT, not disagreement: new borrowing between two books raises a future year.
| column | type | what it is |
|---|---|---|
report_fy | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
as_of | TEXT | The date the count was taken. Placement counts are measured on 1 March, not at year end. |
due_fy | TEXT | not described yet |
principal | TEXT | not described yet |
interest | TEXT | not described yet |
principal_and_interest | TEXT | not described yet |
mwpat_admin_fee | TEXT | not described yet |
total_debt | TEXT | not described yet |
First 3 rows, in rowid order:
| report_fy | document | page | as_of | due_fy | principal | interest | principal_and_interest | mwpat_admin_fee | total_debt |
|---|---|---|---|---|---|---|---|---|---|
| 2014 | 4120-fy-2014-annual-town-report.pdf | 40 | June 30, 2014 | 2015 | 2189028 | 893532 | 3082560 | empty | 3082560 |
| 2021 | 4128-fy-2021-annual-town-report.pdf | 44 | June 30, 2021 | 2022 | 3136223 | 1376940 | 4513162 | 3396 | 4516558 |
| 2021 | 4128-fy-2021-annual-town-report.pdf | 44 | June 30, 2021 | 2025 | 1679754 | 1101717 | 2781471 | 1365 | 2782836 |
free_cash_proof town fact 630 rowsone row per line of the state's proofThe state's own line-by-line proof of certified free cash, for nine towns — every component with its role in the calculation. Dollars.
for nine towns.
| column | type | what it is |
|---|---|---|
town | TEXT | not described yet |
year | TEXT | not described yet |
line | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
role | TEXT | What kind of table it is: fact, dimension, extract, classification, provenance or derived. Facts carry the measurements. Everything else describes, extracts, classifies or checks them. |
source_file | TEXT | The file the figure was read from. |
source_ref | TEXT | Where in the source the figure sits — a cell, a line, a page. Rule 13: a coordinate, so a figure can be checked rather than taken. |
label_ref | TEXT | not described yet |
First 3 rows, in rowid order:
| town | year | line | amount | role | source_file | source_ref | label_ref |
|---|---|---|---|---|---|---|---|
| Lunenburg | 2022 | Free Cash Certified Prior Year | 2666962.00 | prior_year_certified | state-dls/free-cash-proof-lunenburg.xlsx | Sheet1!C4 | Sheet1!A4 |
| Townsend | 2024 | Add Overlay Surplus Closed (CL#13) | 0.00 | component | state-dls/free-cash-proof-townsend.xlsx | Sheet1!E13 | Sheet1!A13 |
| Uxbridge | 2022 | Revenue Deficits | 0.00 | component | state-dls/free-cash-proof-uxbridge.xlsx | Sheet1!C6 | Sheet1!A6 |
outstanding_debt town fact 1,038 rowsone row per purpose, per as-of year, per reportWhat the town owed on 30 June, by purpose, split inside and outside the Chapter 44 debt limit. FY2007-FY2025, from the FIVE YEARS OUTSTANDING DEBT table in fifteen annual reports.
TWO YEAR COLUMNS AND THEY MEAN DIFFERENT THINGS. report_fy is the book it was read from; as_of_fy is the year the figure is about. Every report reprints five years, so most years appear up to FIVE times and summing without splitting counts one year five times over. They agree to the dollar in 18 of 19 years; FY2017 is $51,797,859 in its own report and $51,797,860 in the four after it, and neither is corrected.
| column | type | what it is |
|---|---|---|
report_fy | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
as_of_fy | TEXT | not described yet |
as_of_basis | TEXT | not described yet |
section | TEXT | The budget book's own section heading. |
category | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
identities_closed | TEXT | not described yet |
First 3 rows, in rowid order:
| report_fy | document | page | as_of_fy | as_of_basis | section | category | amount | identities_closed |
|---|---|---|---|---|---|---|---|---|
| 2021 | 4128-fy-2021-annual-town-report.pdf | 42 | 2018 | printed year header, which matches the desc… | printed total | Total Long-Term Indebtedness | 49662322 | within+outside=long|long+short=outstanding|… |
| 2023 | 4131-fy-2023-annual-town-report.pdf | 52 | 2023 | printed year header, which matches the desc… | printed total | Total Long-Term Indebtedness | 35563302 | within+outside=long|long+short=outstanding|… |
| 2024 | 4132-fy-2024-annual-town-report.pdf | 36 | 2024 | printed year header, which matches the desc… | printed total | Total Short-Term Indebtedness | 152499 | within+outside=long|long+short=outstanding|… |
peg_access_fund town fact 165 rowsone row per line item or ledger line, per yearThe cable access fund, FY2015-FY2025: what Comcast pays the town under the licence, and what it buys -- salaries, equipment, expenses.
IT IS IN NO BUDGET LINE ANYBODY VOTES ON, which is the point of it: this money pays real staff and appears in no appropriation, so a reader of the budget alone cannot see the people it employs (rule 11). Three years disagree with themselves and are recorded rather than reconciled -- FY2017's printed TOTAL omits a $450.00 vendor expense, and FY2025's ending balance ignores the year's own $262,565 of revenue.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
report_fy | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
table | TEXT | Which table this row describes. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
amount | TEXT | The figure, as printed. dollars |
share_percent | TEXT | not described yet |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | edition | report_fy | document | page | table | label | kind | amount | share_percent | columns_as_printed | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| peg_access_fund | FY2016 | 2016 | 4123-fy-2016-annual-town-report.pdf | 73 | line_items | Line Item Amount Salaries | row | 30162.59 | empty | FY16 LINE ITEM EXPENSES | checked | expenses: 96,166.13 = the printed Total ; s… |
| peg_access_fund | FY2019 | 2019 | 4126-fy-2019-annual-town-report.pdf | 82 | line_items | Equipment/Maintenance | row | 9875.65 | empty | FY19 LINE ITEM EXPENSES | checked | expenses: 83,215.87 = the printed Total ; s… |
| peg_access_fund | FY2020 | 2020 | 4127-fy-2020-annual-town-report.pdf | 75 | line_items | Lease | row | 6000.0 | 5.13 | FY20 Line Item Expenses by Percentage | checked | expenses: 116,933.22 = the printed Total ; … |
receivables town fact 319 rows 2016, 2017, 2018, 2020, 2021, 2022, 2023, 2024one row per levy or charge, per yearWhat the town was still owed on 30 June, levy by levy, out of the Collector's RECEIVABLES SUMMARY. Eight columns from BALANCE FORWARD through to BALANCES.
READ IT WITH tax_collection, WHICH IS THE SAME TABLE FOR OTHER YEARS -- UNION them, never join. Column names differ between the two (balance_forward here, forward there). The printed COLUMN ORDER changes mid-archive, and FY2023 and FY2024 are both headed FY2021 COLLECTION OF TAXES, so the fiscal year cannot be read off the heading. Years absent here are in receivables_reconciliation with a reason.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
table | TEXT | Which table this row describes. |
section | TEXT | The budget book's own section heading. |
levy_year | TEXT | not described yet |
forward | TEXT | Balance the fund brought forward from the previous year, as the schedule prints it. dollars |
committed | TEXT | not described yet |
refunds | TEXT | not described yet |
payments | TEXT | not described yet |
abatements | TEXT | not described yet |
transfers | TEXT | Money moved into or out of the appropriation after it was voted. dollars This is why original and revised differ. |
adjustments | TEXT | not described yet |
balance | TEXT | not described yet |
checked | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | page | table | section | levy_year | forward | committed | refunds | payments | abatements | transfers | adjustments | balance | checked |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2016 | 47 | collection of taxes | REAL ESTATE | 2011 | 30.71 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 30.71 | parts sum to the printed balance |
| 2018 | 52 | collection of taxes | MOTOR VEHICLE EXCISE | 2005 | 5471.35 | 0.00 | 0.00 | -182.81 | 0.00 | 0.00 | 0.00 | 5288.54 | parts sum to the printed balance |
| 2018 | 52 | collection of taxes | PERSONAL PROPERTY | 2010 | 4173.67 | 0.00 | 0.00 | -1029.68 | 0.00 | 0.00 | 0.00 | 3143.99 | parts sum to the printed balance |
receivables_reconciliation town what refused 12 rows 2015–2025one row per year, per documentWhich years of the receivables table publish and which refuse, with the reason, the column order as printed, both grand totals, and the ROLL-FORWARD carry.
THE ONLY CHECK IN THIS ARCHIVE THAT TESTS A YEAR AGAINST A DIFFERENT BOOK. One year's closing balance must be the next year's opening. Every readable pair ties to the cent except FY2017 to FY2018, which is $13,300.00 apart in two printed grand totals. A refused year is our instrument failing, not the town declining to print: all twelve publish the table and all twelve print a total.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
document | TEXT | The source file the figure was read from. |
pages | TEXT | Which pages of the source this covers. |
state | TEXT | not described yet |
rows | TEXT | How many rows the extract produced. count |
column_order | TEXT | not described yet |
header_read_from_page | TEXT | not described yet |
grand_total_forward | TEXT | not described yet |
grand_total_balance | TEXT | not described yet |
opens_where_prior_closed | TEXT | not described yet |
rows_failing_row_identity | TEXT | not described yet |
unparsed_figures | TEXT | not described yet |
reason | TEXT | not described yet |
notes | TEXT | What we recorded about this row while reading it. |
First 3 rows, in rowid order:
| fy | document | pages | state | rows | column_order | header_read_from_page | grand_total_forward | grand_total_balance | opens_where_prior_closed | rows_failing_row_identity | unparsed_figures | reason | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2015 | sources/town-budget/ocr/4121-fy-2015-annual… | 44;45 | refused | empty | empty | empty | empty | empty | empty | empty | empty | no page anchors enough columns: the fullest… | empty |
| 2016 | sources/town-budget/ocr/4122-fy-2016-annual… | 9;10;11;12 | refused | empty | empty | empty | empty | empty | empty | empty | empty | no page names all eight columns: the fulles… | empty |
| 2019 | sources/town-budget/ocr/4126-fy-2019-annual… | 53;54;55 | refused | empty | empty | empty | empty | empty | empty | empty | empty | no page names all eight columns: the fulles… | empty |
report_capital_projects town extract 618 rows 2011–2025one row per printed lineCapital project funds as the annual reports print them: appropriated, expended, encumbered and balance, per article.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| capital_projects | 2016 | FY2016 | 36 | empty | empty | Drainage Culvert Repair, 2 Phases | empty | row | empty | empty | empty | empty | CAPITAL PROJECT FUNDS FY 2016 | APPROPRIATE… | 43728.00 | 0.00 | 43728.00 | empty | empty | empty | empty | empty | 3 | empty | 0 | empty | empty | check failed | v1: 1,207,111.79 vs 11,120,094.93 (-9,912,9… |
| capital_projects | 2023 | FY2023 | 44 | empty | empty | Flat Hill Culvert Construction - DPW … | empty | row | empty | empty | empty | empty | CAPITAL PROJECT FUNDS FY 2023 | EXPENDED/EN… | 24663.51 | 403838.49 | empty | empty | empty | empty | empty | empty | 2 | empty | 0 | empty | empty | check failed | v1: 542,843.30 vs 843,181.55 (-300,338.25) … |
| capital_projects | 2025 | FY2025 | 30 | empty | empty | 3053 4/5 STM Eng/Constr Sewers | empty | row | empty | empty | capital_projects | empty | fund balance | receipts | remaining deficits | 440.17 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | empty | empty | v1=fund balance | v2=receipts | v3=remainin… | checked | every row sums to the total the table print… |
report_debt town extract 366 rows 2011, 2017, 2019, 2020, 2021, 2023, 2024, 2025one row per printed lineOutstanding DEBT and repayment schedules as the annual reports print them. Dollars, town-wide — school building debt is inside these figures and is not separated out.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| debt | 2020 | FY2020 | 45 | empty | empty | INTEREST | empty | row | empty | empty | empty | empty | TOWN OF LUNENBURG DEBT REPAYMENT SCHEDULE A… | empty | empty | empty | 177394.00 | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| debt | 2025 | FY2025 | 39 | empty | empty | INTEREST | empty | footnote | printed below the grand total, which ends t… | empty | empty | empty | TRUST & STABILIZATION FUNDS HELD BY OTHER B… | 226700.00 | 217775.00 | 208675.00 | 199225.00 | 189425.00 | empty | 160625.00 | empty | 7 | empty | 0 | $180,145 $170,545 | empty | checked | v3: 2,981,199.55 vs 2,981,199.55 [v-numbers… |
| debt | 2025 | FY2025 | 39 | empty | DPW-ROADS GENERAL OBLIGATION | TOTAL GOB MPL OF 2020 | empty | subtotal | empty | empty | empty | empty | TRUST & STABILIZATION FUNDS HELD BY OTHER B… | 136344.00 | 136094.00 | empty | empty | empty | empty | empty | empty | 3 | empty | 0 | empty | empty | checked | v3: 2,981,199.55 vs 2,981,199.55 [v-numbers… |
report_dept_activity town extract 515 rows 2011–2025one row per printed lineDepartmental activity tables — permits issued, inspections done, cases handled. Mostly COUNTS rather than dollars, and what is counted differs by department and by year.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dept_activity | 2016 | FY2016 | 53 | empty | Cemetery Commissioners, Ch | * Arthur Weidenhoff | empty | row | empty | empty | empty | empty | CEMETERY DEPARTMENT | Cemetery Commissioner… | 81 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| dept_activity | 2016 | FY2016 | 53 | empty | Cemetery Commissioners, Ch | Murray S. Smith Jr. | empty | row | empty | empty | empty | empty | CEMETERY DEPARTMENT | Cemetery Commissioner… | 81 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| dept_activity | 2017 | FY2017 | 88 | empty | CEMETERY NAME | empty | empty | row | empty | empty | empty | empty | CEMETERY DEPARTMENT - 2017 | NAME AGE CEMET… | 50 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
report_elections town extract 2,012 rows 2011–2025one row per printed lineElection results as the annual reports print them: candidates, offices and vote counts in ordinal columns.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| elections | 2014 | FY2014 | 159 | 1 | empty | TOTAL | empty | subtotal | parts sum to the printed total | empty | empty | empty | trailing figures | 1187 | 955 | 1053 | 1052 | 4247 | empty | empty | empty | 5 | empty | 0 | empty | empty | check failed | 181 full rows tie, 1 do not; 28 partial not… |
| elections | 2017 | FY2017 | 186 | 1 | empty | BLANKS | empty | row | parts sum to the printed total | empty | empty | empty | trailing figures | 171 | 96 | 124 | 173 | 564 | empty | empty | empty | 5 | empty | 0 | empty | empty | check failed | 42 full rows tie, 5 do not; 12 partial not … |
| elections | 2024 | FY2024 | 173 | 1 | empty | BLANKS | empty | row | parts sum to the printed total | empty | empty | empty | trailing figures | 99 | 77 | 84 | 114 | 374 | empty | empty | empty | 5 | empty | 0 | empty | empty | check failed | 96 full rows tie, 14 do not; 124 partial no… |
report_gross_wages town extract 3,547 rows 2011 … 2025 (13 years)one row per printed lineGROSS WAGES paid per named employee per year, as the annual reports print them. 3,545 rows. Actual pay rather than budget, including overtime and details.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| gross_wages | 2016 | FY2016 | 202 | empty | FIRE | VASADY-KOVACS | empty | row | empty | empty | empty | empty | FIRE SCHOOL | NEIL SCHOOL | SCHOOL | SCHOOL | 5683.64 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| gross_wages | 2021 | FY2021 | 166 | empty | empty | RICHARD ALICIA | empty | row | empty | empty | empty | empty | OUDAIN DUVV CIV NUTAND | 21201.38 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| gross_wages | 2025 | FY2025 | 182 | empty | empty | WELTON MICHELLE | empty | row | empty | empty | empty | empty | 2025 GROSS WAGES | 36575.03 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
report_officials town extract 237 rows 2011 … 2024 (13 years)one row per printed lineNames and offices of town officials as each annual report lists them. No money.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| officials | 2011 | FY2011 | 13 | empty | empty | *Shirley A. Levesque | empty | row | empty | empty | empty | empty | Marion Benson, c/o Planning Board | D.P.W. … | 80 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| officials | 2023 | FY2023 | 166 | empty | Health & Sanitation | Highway Labor | empty | row | empty | empty | empty | empty | APPOINTED OFFICIALS | INSPECTOR OF PLUMBING… | 59 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | 587,160.00 | empty | no check | no total printed |
| officials | 2023 | FY2023 | 167 | empty | Highway | Vehicle Mtc - Highway | empty | row | empty | empty | empty | empty | APPOINTED OFFICIALS | INSPECTOR OF PLUMBING… | 64 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | 62,750.00 | empty | no check | no total printed |
report_trust_funds town extract 644 rows 2011 … 2025 (13 years)one row per printed lineTrust fund balances and activity as the annual reports print them.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| trust_funds | 2011 | FY2011 | 73 | empty | LIBRARY FU | EMMA DIMOND LIBRARY BOOKS | empty | subtotal | subtotal: equals the 2 rows below it, in 2 … | empty | empty | empty | TRUST FUNDS | BEGINNING BEGINNING DISBURSE … | 300.00 | 125.46 | 0.00 | 3.09 | 0.00 | empty | empty | empty | 5 | empty | 0 | empty | empty | check failed | v1: 354,751.46 vs 1,905,698.11 (-1,550,946.… |
| trust_funds | 2019 | FY2019 | 46 | empty | LIBRARY FUNDS | PHILIP CROUSE | empty | row | empty | empty | empty | empty | TOWN OF LUNENBURG | TRUST FUNDS STABILIZATI… | 66.69 | 4.48 | empty | 30.00 | 0.00 | 72.00 | 1.63 | empty | 6 | empty | 0 | empty | empty | check failed | v1: 2,856,386.21 vs 2,528,358.08 (+328,028.… |
| trust_funds | 2020 | FY2020 | 41 | empty | LIBRARY FUNDS | TOUCHSTONE PBHG FUNDS | empty | footnote | printed below the grand total, which ends t… | empty | empty | empty | TOWN OF LUNENBURG Page 1 of 2 | TRUST FUNDS… | 8114.00 | 480.48 | empty | empty | 480.48 | empty | empty | empty | 3 | empty | 0 | empty | empty | check failed | v3: 2,540,103.52 vs 7.00 (+2,540,096.52) [v… |
report_valuation town extract 321 rows 2011–2019one row per printed lineAssessed property VALUATION by class, as the annual reports print it. Dollars — and the base the tax levy is computed on.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| valuation | 2015 | FY2015 | 35 | empty | Assessor's Account | empty | empty | page_number | the page number, not a line of the table | empty | empty | empty | BOARD OF ASSESSORS | Fiscal 2015 Assessment… | empty | empty | empty | 35.00 | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| valuation | 2018 | FY2018 | 41 | empty | Assessor's Account for | Potential Liability | empty | row | empty | empty | empty | empty | BOARD OF ASSESSORS | Fiscal 2018 Assessment… | empty | empty | 8571.54 | 0.00 | 0.00 | 0.00 | empty | empty | 4 | empty | 0 | empty | empty | no check | no total printed |
| valuation | 2019 | FY2019 | 43 | empty | empty | 600-821 Chapter 61, 61A, 61B | empty | row | empty | empty | empty | empty | Valuation and Tax History | Fiscal Year Tax… | empty | empty | 931539944.00 | 16559.00 | empty | empty | empty | empty | 2 | empty | 0 | empty | empty | no check | no total printed |
report_vital_records town extract 96 rows 2011 … 2025 (14 years)one row per printed lineCounts of births, marriages and deaths as the annual reports print them.
v1..v8 are ORDINALS. Split on status.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
panel | TEXT | Which block of the page this row came from, where a page prints several tables. Two panels on one page have different column rulers. Summing across panels mixes them. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
label_missing | TEXT | The row's label did not survive extraction. The figures may still be good. A missing label is not a missing row. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
row_check | TEXT | Whether the row satisfies an identity the table itself states. |
derived_cell | TEXT | A cell we computed from the row's own other cells, recorded here and NEVER written into a v column. An inference kept out of the readings, on purpose. |
table_family | TEXT | Which printed table shape this row came from. |
line_no | TEXT | Position of the row on the page, counting from the top. Positional, so it identifies a row within a page and nothing beyond it. |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
v1 | TEXT | ORDINAL, NOT A COLUMN NAME: the first column of THIS PAGE that held figures. dollars The ruler is built per page, so v1 on one page and v1 on the next can be different printed columns. Read column_meaning. Summing v1 down a run adds one page's APPROPRIATED to another's TOTAL EXPENDED. |
v2 | TEXT | ORDINAL: the second column of this page that held figures. dollars See v1. |
v3 | TEXT | ORDINAL: the third column of this page that held figures. dollars See v1. |
v4 | TEXT | ORDINAL: the fourth column of this page that held figures. dollars See v1. |
v5 | TEXT | ORDINAL: the fifth column of this page that held figures. dollars See v1. |
v6 | TEXT | ORDINAL: the sixth column of this page that held figures. dollars See v1. |
v7 | TEXT | ORDINAL: the seventh column of this page that held figures. dollars See v1. |
v8 | TEXT | ORDINAL: the eighth column of this page that held figures. dollars See v1. |
n_values | TEXT | How many money cells this row actually carried. count Fewer than the table's column count means blank cells, and which ones were blank is positional. |
ruler_spanned | TEXT | The column ruler could not cut this row cleanly. Flagged rather than dropped: a dropped row shifts nothing and is invisible. |
repaired_cells | TEXT | Cells we corrected, and what the correction was. A repair is a change we made to a reading. It is recorded so it can be disputed. |
unparsed_cells | TEXT | Cells we could not read. Kept rather than dropped: a dropped cell is invisible. |
column_meaning | TEXT | What each ordinal column is, where the table states an identity that fixes it. Says not established where the table does not fix it, and that is not the same as unknown-and-guessable. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | fy | edition | page | panel | group | label | label_missing | kind | row_check | derived_cell | table_family | line_no | columns_as_printed | v1 | v2 | v3 | v4 | v5 | v6 | v7 | v8 | n_values | ruler_spanned | repaired_cells | unparsed_cells | column_meaning | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| vital_records | 2011 | FY2011 | 13 | empty | empty | *Betty Ann Sikora | empty | row | empty | empty | empty | empty | JANUARY JULY | Nancy L Woodruff 79 N *Richa… | 72 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| vital_records | 2012 | FY2012 | 105 | 1 | empty | TOTAL | empty | subtotal | empty | empty | empty | empty | trailing figures | 2760 | 2154 | 2520 | 2688 | 10122 | empty | empty | empty | 5 | empty | 0 | empty | empty | no check | no total printed |
| vital_records | 2013 | FY2013 | 92 | 1 | empty | TOTAL | empty | subtotal | empty | empty | empty | empty | trailing figures | 564 | 436 | 482 | 535 | 2017 | empty | empty | empty | 5 | empty | 0 | empty | empty | no check | no total printed |
stabilization_balances town fact 41 rows 2011–2025one row per fund, per yearEvery stabilization fund's ending cash and ending market value, FY2011-FY2025, read off the trust tables in the annual reports.
ONLY PROVEN ROWS ARE HERE. Each exists because an identity the table states about itself closed -- beginning plus activity equals ending cash, ending cash plus unrealised equals ending market. A fund-year that is absent was refused, not zero. FY2023 refuses on OCR alone: its page prints the arithmetic correctly and the scanner returns the figure block as two tokens.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
code | TEXT | not described yet |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
registry_name | TEXT | not described yet |
name_disagrees | TEXT | not described yet |
ending_cash | TEXT | not described yet |
ending_market | TEXT | not described yet |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
document | TEXT | The source file the figure was read from. |
First 3 rows, in rowid order:
| fy | code | name | registry_name | name_disagrees | ending_cash | ending_market | page | basis | document |
|---|---|---|---|---|---|---|---|---|---|
| 2020 | empty | STABILIZATION FUNDS SUBTOTALS | empty | empty | 2432441.65 | 2504294.2 | 41 | both identities hold (the page READ, and ch… | sources/town-annual-reports/docs/4127-fy-20… |
| 2023 | empty | HEALTH INSURANCE STABILIZATION | empty | empty | 380741.82 | 380036.32 | 51 | both identities hold (the page READ, and ch… | sources/town-annual-reports/docs/4131-fy-20… |
| 2024 | empty | STABILIZATION | empty | empty | 2901157.6 | 2967682.91 | 34 | both identities hold | sources/town-budget/ocr/4132-fy-2024-annual… |
tax_collection town fact 250 rows 2014, 2015, 2025one row per levy or charge, per yearThe same RECEIVABLES SUMMARY, for FY2014, FY2015 and FY2025 -- the years that carry a real PDF text layer rather than a scan, and so read exact to the cent.
ONE TABLE, TWO READERS, PARTITIONED BY YEAR WITH NO OVERLAP. It skips at runtime every year receivables proves. UNION the two for the full series (9 of 15 years tie to the Collector's own printed GRAND TOTAL); never join them. Refusals and their reasons are in tax_collection_unreconciled.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
section | TEXT | The budget book's own section heading. |
item | TEXT | The thing being priced or counted. |
forward | TEXT | Balance the fund brought forward from the previous year, as the schedule prints it. dollars |
committed | TEXT | not described yet |
adjustments | TEXT | not described yet |
refunds | TEXT | not described yet |
payments | TEXT | not described yet |
abatements | TEXT | not described yet |
transfer | TEXT | not described yet |
balance | TEXT | not described yet |
proof | TEXT | not described yet |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
instrument | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
First 3 rows, in rowid order:
| fy | section | item | forward | committed | adjustments | refunds | payments | abatements | transfer | balance | proof | page | instrument | document |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2014 | empty | 2014 RE | 0.00 | 19747418.40 | -1947.52 | 9689.24 | -19193857.66 | -109799.45 | -18793.88 | 432709.13 | footed to its own printed balance | 43 | text layer | sources/town-budget/ocr/4120-fy-2014-annual… |
| 2015 | REAL ESTATE | LEVY OF 2015 | 0.00 | 20459870.43 | -62763.58 | 1870.04 | -19783598.09 | -123598.35 | empty | 491780.45 | footed to its own printed balance | 44 | text layer | sources/town-budget/ocr/4121-fy-2015-annual… |
| 2025 | empty | MEADOW WOODS WATER BETTERMENT | 890000.00 | empty | empty | empty | empty | empty | -25000.00 | 865000.00 | footed to its own printed balance | 41 | text layer | sources/town-budget/ocr/4130-fy-2025-annual… |
tax_collection_unreconciled town what refused 13 rows 2011 … 2024 (12 years)one row per refused yearThe thirteen years of the receivables table that will not publish, and why each one refuses.
THE REASONS ARE NOT INTERCHANGEABLE AND THAT IS THE USE OF THIS TABLE. Six were already proved by receivables. FY2016 and FY2019 are CROPPED -- BALANCES is off the right edge of the image -- so no re-scan or parser recovers them; only an uncropped copy from the Town does. Three more are torn by scan distortion exactly where the GRAND TOTAL row sits.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
pages | TEXT | Which pages of the source this covers. |
why | TEXT | Why the classification was made, in words that can be argued with. |
document | TEXT | The source file the figure was read from. |
First 3 rows, in rowid order:
| fy | pages | why | document |
|---|---|---|---|
| 2018 | empty | read and published by scripts/extract_recei… | sources/town-budget/ocr/4125-fy-2018-annual… |
| 2019 | 53 54 55 | p53 prints only forward, committed, abateme… | sources/town-budget/ocr/4126-fy-2019-annual… |
| 2020 | empty | read and published by scripts/extract_recei… | sources/town-budget/ocr/4127-fy-2020-annual… |
valuation_by_class town fact 170 rowsone row per class, per table, per editionWhat the town is worth and the levy on it: valuation and levy by major class, new growth, average values, the LA4 totals and the levy build-up, FY2011-FY2025.
SPLIT ON status. FY2021 is check failed because its page REPRINTS FY2020’s TOTALS row -- its four class rows sum $194,412,308 above the total printed beneath them. Prefer this over report_valuation, which covers the same pages and whose every row is no check: one column ruler cannot serve the three or four tables the Assessors print on one page.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
report_fy | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
table | TEXT | Which table this row describes. |
table_fiscal_year | TEXT | not described yet |
column_year | TEXT | not described yet |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
levy_percent | TEXT | not described yet |
levy_from_percent | TEXT | not described yet |
valuation | TEXT | not described yet |
tax_rate | TEXT | not described yet |
tax_levy | TEXT | not described yet |
value | TEXT | The figure, as printed. dollars |
share_percent | TEXT | not described yet |
added_valuation | TEXT | not described yet |
new_revenue | TEXT | not described yet |
change_percent | TEXT | not described yet |
prior_value | TEXT | not described yet |
columns_as_printed | TEXT | The column headings of this table, verbatim, as that page prints them. This is what says which printed column v1 actually is. It is the only thing that does. |
repaired | TEXT | not described yet |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
reconciliation | TEXT | The per-column result of that check: what we summed against what the report printed. |
First 3 rows, in rowid order:
| dataset | edition | report_fy | document | page | table | table_fiscal_year | column_year | label | kind | levy_percent | levy_from_percent | valuation | tax_rate | tax_levy | value | share_percent | added_valuation | new_revenue | change_percent | prior_value | columns_as_printed | repaired | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| valuation | FY2016 | 2016 | 4123-fy-2016-annual-town-report.pdf | 37 | major_class | 2016 | empty | Personal Property | row | 2.9241 | empty | 35078223.0 | 19.61 | 687883.95 | empty | empty | empty | empty | empty | empty | Property Class | Levy Percent | Valuation b… | empty | checked | valuation: Residential repaired from '21,17… |
| valuation | FY2020 | 2020 | 4127-fy-2020-annual-town-report.pdf | 38 | new_growth | 2017 | empty | 2017 | row | empty | empty | empty | 19.61 | empty | empty | empty | 24883011.0 | 487955.0 | 35.22 | empty | Fiscal Year | Added Valuation | Tax Rate | … | empty | checked | added valuation x rate / 1000 = new revenue… |
| valuation | FY2025 | 2025 | 4130-fy-2025-annual-town-report.pdf | 34 | la4_totals | 2025 | empty | Class3 Commercial | total | empty | empty | empty | empty | empty | 97763006.0 | empty | empty | empty | empty | empty | Property Type | Parcel Count | Class1 Resid… | empty | checked | the four class columns sum to 2,360,706,780… |
Tables that carry every department together. The town's books do not separate school from town, and neither do these: splitting them would invent a division the source does not make.
Tier 1 · totalswhat was appropriated and what is left, by department
balance_sheet school + town Tier 1 · totals fact 774 rows 2011–2022one row per line per fund column per yearWhat the town HOLDS, read from the COMBINED BALANCE SHEET — assets, liabilities and fund equity across six fund columns (general, special revenue, enterprise, capital project, trust and agency, long-term debt). Everything else in this archive measures money MOVING; this is the only table that measures what is sitting there.
Read from the page, like special_revenue_read. It is trusted because three checks hold: each column foots to its own printed total, the sheet's identity (liabilities + fund equity = assets) holds per column, and special revenue + enterprise fund equity ties to the special revenue schedule's carried-forward total — an INDEPENDENT document. One printed sheet does not balance itself (FY2019 trust and agency, $657,297.35 apart); that is the town's print, recorded not corrected.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page_printed | TEXT | not described yet |
page_pdf | TEXT | not described yet |
section | TEXT | The budget book's own section heading. |
line | TEXT | not described yet |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
amount | TEXT | The figure, as printed. dollars |
document | TEXT | The source file the figure was read from. |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
report_fy | TEXT | not described yet |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | section | line | fund | amount | document | read_by | report_fy | page |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2011 | FY2011 | 53 | 56 | assets | FY 11 REAL ESTATE TAXES | general | 445664.60 | sources/town-annual-reports/docs/4117-fy-20… | vision | 2011 | 56 |
| 2012 | FY2012 | 53 | 56 | assets | FY 12 REAL ESTATE TAXES | general | 356747.49 | sources/town-annual-reports/docs/4118-fy-20… | vision | 2012 | 56 |
| 2022 | FY2022 | 24 | 24 | assets | FY19 REAL ESTATE TAXES | general | -104.00 | sources/town-annual-reports/docs/4129-fy-20… | vision | 2022 | 24 |
enterprise_balance_sheet school + town Tier 1 · totals fact 114 rows 2024–2025one row per line per fund column per printing per yearWhat the four ENTERPRISE funds hold at 30 June — Sewer, Water, Solid Waste and PEG Access, side by side, with a memorandum-only total column. Read from the COMBINING BALANCE SHEET — ENTERPRISE FUNDS, which is the only balance sheet FY2024 and FY2025 print; neither report contains the town-wide combined balance sheet balance_sheet holds for FY2011–FY2023.
RATEPAYER MONEY. Sewer and water user charges, betterments, trash fees and cable franchise money — none of it is available to the town's general operations and none of it is a tax dollar. This is NOT an extension of balance_sheet: that table's enterprise value is one of six fund-type COLUMNS on a different sheet, and the two must never be unioned. FY2024 prints the same sheet TWICE (printed pages 21 and 28), so printing is 1 or 2 and must be collapsed on before anything is summed — summing across it doubles the money. FY2024's memorandum column is $102,000.00 out on two offsetting lines; that is the town's print, recorded not corrected. Only cells that print a figure are recorded; the sheet's 0.00 and '-' template cells are not rows here.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page_printed | TEXT | not described yet |
page_pdf | TEXT | not described yet |
printing | TEXT | Which of several rows published under one natural key this is: 1 for the first, 2 for the next. Part of the primary key of three DESE tables and of enterprise_balance_sheet. It exists because the publisher printed the same key twice — sometimes identically, sometimes with the district under a different name, and sometimes with DIFFERENT FIGURES. Nothing may be dropped, so collapse on it before aggregating rather than assuming the key is unique. |
section | TEXT | The budget book's own section heading. |
line | TEXT | not described yet |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
amount | TEXT | The figure, as printed. dollars |
document | TEXT | The source file the figure was read from. |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | printing | section | line | fund | amount | document | read_by |
|---|---|---|---|---|---|---|---|---|---|---|
| 2024 | FY2024 | 21 | 21 | 1 | liabilities | Deferred revenue: Special assessments | total_memorandum | 3139121.60 | sources/town-annual-reports/docs/4132-fy-20… | vision |
| 2024 | FY2024 | 28 | 28 | 2 | liabilities | Warrants payable | peg_access | 283.50 | sources/town-annual-reports/docs/4132-fy-20… | vision |
| 2025 | FY2025 | 21 | 25 | 1 | assets | Due to/Due From | solid_waste | 26973.93 | sources/town-annual-reports/docs/4130-fy-20… | text layer |
fund_activity school + town Tier 1 · totals fact 61 rows 2026–2026one row per fund per year per periodPer fund per period: opening balance, revenue in, salaries, other expenditure, encumbered and closing balance. FY2026 period 9 only — and opening_balance is NULL for every one of the 61 funds.
spent and holds.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
opening_balance | REAL | What the fund held at the start of the year. dollars |
revenue | REAL | Money received into the fund. dollars Not the same quantity as spending, and the two must never be added. |
salaries | REAL | The salary portion of the fund's spending. dollars |
expenditure | REAL | The non-salary portion of the fund's spending. dollars |
encumbered | REAL | Committed by purchase order but not yet spent. dollars |
closing_balance | REAL | What the fund held at the end of the period. dollars |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| fund | fy | period | opening_balance | revenue | salaries | expenditure | encumbered | closing_balance | doc_id |
|---|---|---|---|---|---|---|---|---|---|
| 2765 | 2026 | 9 | NULL | 0.0 | 0.0 | 0.0 | 0.0 | -502.0 | sources/town-ledgers/fund-balances/special-… |
| 2769 | 2026 | 9 | NULL | 0.0 | 0.0 | 0.0 | 0.0 | 4.55 | sources/town-ledgers/fund-balances/special-… |
| 1311 | 2026 | 9 | NULL | 22485.91 | 0.0 | 2910.68 | 0.0 | 109397.82 | sources/town-ledgers/fund-balances/special-… |
special_revenue_read school + town Tier 1 · totals fact 1,882 rows 2011–2023one row per fund per yearThe special revenue schedule READ from the rendered page rather than OCR'd: balance brought forward, total receipts, total disbursements, balance carried forward, per fund. The only version of this table that ties to its own printed grand total — FY2022, 167 funds, all four columns to the penny and every row balancing.
A figure read off an image is a READING, not a published number — same status as the OCR's. It is trustworthy because the report's own printed total and the table's own identity both check it, not because a model produced it. Years that do not tie are not in here.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
forward | TEXT | Balance the fund brought forward from the previous year, as the schedule prints it. dollars |
receipts | TEXT | Total money the fund took in during the year. dollars Not the same quantity as disbursements and must never be added to it. |
disbursements | TEXT | Total money the fund paid out during the year. dollars |
carried | TEXT | Balance the fund carried forward into the next year. dollars Ties to the NEXT year's forward, which is a check across years the schedule makes possible. |
row_ties | TEXT | Whether this row satisfies forward + receipts − disbursements = carried. The identity the table itself states. A row that does not tie is a transcription error or a printing error, and which one is not decided here. |
document | TEXT | The source file the figure was read from. |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
First 3 rows, in rowid order:
| fy | edition | page | group | fund | forward | receipts | disbursements | carried | row_ties | document | read_by |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2020 | FY2020 | 32 | PUBLIC SAFETY | Community Policing FY 96 | 6.55 | empty | empty | 6.55 | yes | sources/town-annual-reports/docs/4127-fy-20… | vision |
| 2017 | FY2017 | 32 | LIBRARY | FY07 Public Libraries Fund | 571.17 | empty | empty | 571.17 | yes | sources/town-annual-reports/docs/4124-fy-20… | vision |
| 2013 | FY2013 | 68 | SCHOOL DEPARTMENT | Full Day Kindergarten Grant | 1470.00 | 48382.00 | 49852.00 | 0.00 | yes | sources/town-annual-reports/docs/4119-fy-20… | vision |
v_fund_year school + town Tier 1 · totals view 61 rows 2026–2026one row per fund per year per periodEvery town FUND on one line: what came in (revenue), what went out (spent, salaries plus other expenditure added together), and what the fund is holding at the end (closing_balance), with the fund's name, kind and what restricts it. This is where to look for money that is not the general fund -- revolving funds, grants, the circuit breaker, trusts.
opening_balance is not carried here and is NULL for all 61 funds in fund_activity anyway, so closing_balance cannot be reconciled to a starting point. FY2026 period 9 only -- a balance at 31 March, not a year end. spent FOLDS salaries and expenditure together; query fund_activity if you need them apart. The join to fund is a LEFT JOIN, so name, kind and restriction can be NULL for a fund the fund dimension does not carry.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
restriction | TEXT | not described yet |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
revenue | REAL | Money received into the fund. dollars Not the same quantity as spending, and the two must never be added. |
spent | TEXT | Money paid out of the fund. dollars Not the same quantity as revenue. |
closing_balance | REAL | What the fund held at the end of the period. dollars |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
Tier 2 · categorieswhether a category — guidance, special education, transport — is over
peg_access school + town Tier 2 · categories fact 110 rows 2015–2025one row per printed expense line per yearWhat the town's PEG Access / Public Access Cable operation spent, line by line, FY2015-FY2025, read from the expense table each annual town report prints. From FY2020 the report also prints a % of Expense column and it is recorded here beside the amount.
CABLE FRANCHISE MONEY, not tax money. Comcast pays it under the Town's cable licence; from FY2020 it sits in a PEG Access enterprise fund established under MGL c.44 s53F1/2 and is appropriated by its own Town Meeting article. None of it is available to general operations. The line LIST changes: Insurance disappears after FY2020 and Indirect Costs appears, so a line-by-line series across that boundary is comparing different things. FY2017's ten lines add to 450.01 MORE than that report's own printed TOTAL; the total is what the rest of the record uses. Join to peg_access_printed_totals for the total each year actually prints -- never sum these rows and call it the year's expenses without saying so.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page_printed | TEXT | not described yet |
page_pdf | TEXT | not described yet |
ordinal | TEXT | not described yet |
line | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
pct | TEXT | not described yet |
quote | TEXT | What the source says, verbatim. |
document | TEXT | The source file the figure was read from. |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | ordinal | line | amount | pct | quote | document | read_by |
|---|---|---|---|---|---|---|---|---|---|---|
| 2022 | FY2022 | 72 | 72 | 5 | Office Supplies | 0.00 | 0.00 | $0.00 | sources/town-annual-reports/docs/4129-fy-20… | vision |
| 2022 | FY2022 | 72 | 72 | 9 | Videographers | 25516.28 | 20.06 | $25,516.28 | sources/town-annual-reports/docs/4129-fy-20… | vision |
| 2023 | FY2023 | 80 | 80 | 8 | New Equip | 15205.50 | 9.32 | $15,205.50 | sources/town-annual-reports/docs/4131-fy-20… | vision |
variance_by_group school + town Tier 2 · categories derived 59 rowsone row per function groupComputed, not read: per function group, how far spending ran from budget across years — budgeted, spent, net, gross, churn, and the best and worst years.
across years.
| column | type | what it is |
|---|---|---|
function_group | TEXT | Our grouping of DESE function codes into readable categories. |
years | TEXT | not described yet |
budgeted | TEXT | not described yet |
spent | TEXT | Money paid out of the fund. dollars Not the same quantity as revenue. |
net | TEXT | not described yet |
gross | TEXT | not described yet |
churn | TEXT | not described yet |
worst_year | TEXT | not described yet |
best_year | TEXT | not described yet |
First 3 rows, in rowid order:
| function_group | years | budgeted | spent | net | gross | churn | worst_year | best_year |
|---|---|---|---|---|---|---|---|---|
| 2320 - Therapeutic Services | 5 | 3093610 | 3014841 | -78769 | 78769 | 1.00 | -0.0532 | -0.0100 |
| (unmapped) | 4 | 2722759 | 2748038 | 25279 | 62963 | 2.49 | -0.0371 | 0.0590 |
| 2325 - Special Education Substitutes | 5 | 322364 | 274236 | -48128 | 153472 | 3.19 | -0.6591 | 0.9754 |
Tier 3 · accountswhat one account spent
ledger_snapshot school + town the spine Tier 3 · accounts fact 983 rows 2026–2026one row per account per year per period per documentBOTH revenue and expense accounts from the town's MUNIS books, told apart by account_type — revenue is stored NEGATIVE. Six money measures per row: original appropriation, transfers, revised, expended, encumbered, available, plus percent used. Two grains in the same table (level): 67 department roll-ups and 916 detail accounts. FY2026 only, at two periods — 9 carries the department rows, 12 the account rows.
at a moment in the year.
| column | type | what it is |
|---|---|---|
account_id | TEXT | The full MUNIS account, fund-org-object. The stable identity. Never identify an account by its name. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
original | REAL | The appropriation as originally voted. dollars |
transfers | REAL | Money moved into or out of the appropriation after it was voted. dollars This is why original and revised differ. |
revised | REAL | The appropriation after transfers. dollars |
expended | REAL | Spent. dollars |
encumbered | REAL | Committed by purchase order but not yet spent. dollars |
available | REAL | Revised less expended less encumbered. dollars |
pct_used | REAL | Share of the revised budget used. percent |
rounded_columns | TEXT | Which columns the source printed rounded. Sets the tolerance a reconciliation may use — one dollar per rounded row, not a blanket. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| account_id | fy | period | original | transfers | revised | expended | encumbered | available | pct_used | rounded_columns | doc_id |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0100-11462-573100 | 2026 | 12 | 750.0 | 0.0 | 750.0 | 250.0 | 0.0 | 500.0 | 0.0 | empty | sources/town-ledgers/expenses/glytdbud-expe… |
| 0100-11751-511000 | 2026 | 12 | 0.0 | 0.0 | 0.0 | 12796.8 | 0.0 | -12796.8 | 0.0 | empty | sources/town-ledgers/expenses/glytdbud-expe… |
| 0100-14112-521016 | 2026 | 12 | 750.0 | -750.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | empty | sources/town-ledgers/expenses/glytdbud-expe… |
account school + town Tier 3 · accounts dimension 981 rowsone row per MUNIS accountThe chart of accounts — no money at all. One row per MUNIS account number split into fund, department, org and object, with its DESE function code, its name, whether it is revenue or expense, whether it is a roll-up or a detail account, and the years it appears.
department and function code.
| column | type | what it is |
|---|---|---|
account_id | TEXT | The full MUNIS account, fund-org-object. The stable identity. Never identify an account by its name. |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
fund_name | TEXT | The fund's name as MUNIS prints it. CHAPTER 658 REVOLVING FUND is athletics. Identify a fund by number. |
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
org | TEXT | The MUNIS org segment of the account. |
object | TEXT | The MUNIS object code — what kind of thing the money buys. |
account_string | TEXT | not described yet |
function | TEXT | The DESE function code. Joins a CATEGORY, never a line. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
account_type | TEXT | Whether the account is expense or revenue. Revenue is stored NEGATIVE. Omitting this once made the town's whole budget compute as minus $997,871. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
first_seen_fy | INTEGER | not described yet |
last_seen_fy | INTEGER | not described yet |
First 3 rows, in rowid order:
| account_id | fund | fund_name | dept | org | object | account_string | function | name | account_type | level | first_seen_fy | last_seen_fy |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0100-11462-534400 | 0100 | GENERAL FUND | 146 | 11462 | 534400 | 0100-1-146-0000-00-0-00-2-534400 | NULL | POSTAGE | expense | account | 2026 | 2026 |
| 0100-19142-570002 | 0100 | GENERAL FUND | 914 | 19142 | 570002 | 0100-9-914-0000-00-0-00-2-570002 | NULL | LIFE INS | expense | account | 2026 | 2026 |
| 0100-01001-432800 | 0100 | GENERAL FUND | NULL | 01001 | 432800 | NULL | NULL | ZN BD FILE | revenue | account | 2026 | 2026 |
account_names school + town Tier 3 · accounts dimension 124 rowsone row per abbreviated account nameA decoder, not data: what each ten-character MUNIS abbreviation expands to, and the basis for each expansion.
The expansions are ours except where basis says otherwise.
| column | type | what it is |
|---|---|---|
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
object | TEXT | The MUNIS object code — what kind of thing the money buys. |
org | TEXT | The MUNIS org segment of the account. |
code | TEXT | not described yet |
readable | TEXT | not described yet |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
note | TEXT | What we recorded about this row. |
First 3 rows, in rowid order:
| dept | object | org | code | readable | basis | note |
|---|---|---|---|---|---|---|
| 300 | 511002 | empty | HS GUID SE | High school guidance secretary | department context | Object 511002 is the secretarial salary obj… |
| 300 | 512103 | empty | KIND SUBS | Kindergarten substitutes | district document | The district budget prints “Kind Regular Su… |
| 300 | 519104 | empty | UNIFSPORTS | Unified sports coach (payroll) | ledger full name | The unabbreviated MUNIS name is P/R UNIFIED… |
crosswalk school + town Tier 3 · accounts dimension 0 rowsone row per budget line mapped to an accountEMPTY, deliberately. It would map a budget line to a ledger account, and it cannot: MUNIS truncates names to ten characters so MS GUIDANC and HS GUIDANC collide. Only the CATEGORY joins, through account.function.
Deliberately empty. MUNIS truncates to ten characters so MS GUIDANC and HS GUIDANC collide; only the CATEGORY can be joined, through account.function. Populating this would record an inference as a mapping.
| column | type | what it is |
|---|---|---|
line_key | TEXT | Our normalised join key for a budget line. Normalisation differs between budget_figure and workbook_figure — joining them on line_key matches only a fraction. Join on the normalised label instead. |
account_id | TEXT | The full MUNIS account, fund-org-object. The stable identity. Never identify an account by its name. |
method | TEXT | not described yet |
confidence | TEXT | not described yet |
evidence | TEXT | What establishes the claim in this row. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
munis_ledger school + town Tier 3 · accounts fact 983 rows 2026–2026one row per account per reportThe MUNIS chart of accounts exactly as DELIVERED, before our normalisation — including the report parameters (totals_only, suppress_zero) that decide what a report shows and therefore what is missing from it.
| column | type | what it is |
|---|---|---|
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | TEXT | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
fund_name | TEXT | The fund's name as MUNIS prints it. CHAPTER 658 REVOLVING FUND is athletics. Identify a fund by number. |
funds_covered | TEXT | not described yet |
account_type | TEXT | Whether the account is expense or revenue. Revenue is stored NEGATIVE. Omitting this once made the town's whole budget compute as minus $997,871. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
org | TEXT | The MUNIS org segment of the account. |
object | TEXT | The MUNIS object code — what kind of thing the money buys. |
account | TEXT | not described yet |
function | TEXT | The DESE function code. Joins a CATEGORY, never a line. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
original | TEXT | The appropriation as originally voted. dollars |
transfers | TEXT | Money moved into or out of the appropriation after it was voted. dollars This is why original and revised differ. |
revised | TEXT | The appropriation after transfers. dollars |
expended | TEXT | Spent. dollars |
encumbered | TEXT | Committed by purchase order but not yet spent. dollars |
available | TEXT | Revised less expended less encumbered. dollars |
pct_used | TEXT | Share of the revised budget used. percent |
totals_only | TEXT | not described yet |
suppress_zero | TEXT | not described yet |
rounded_columns | TEXT | Which columns the source printed rounded. Sets the tolerance a reconciliation may use — one dollar per rounded row, not a blanket. |
First 3 rows, in rowid order:
| doc_id | fy | period | fund | fund_name | funds_covered | account_type | level | dept | org | object | account | function | name | original | transfers | revised | expended | encumbered | available | pct_used | totals_only | suppress_zero | rounded_columns |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sources/town-ledgers/expenses/glytdbud-expe… | 2026 | 12 | 0100 | GENERAL FUND | empty | expense | account | 300 | S1011022 | 535003 | 0100-3-300-1210-01-1-02-2-535003 | 1210 | DUES/MTGS | 8000.0 | -3584.8 | 4415.2 | 3521.0 | 0.0 | 894.2 | 0.0 | 0 | 1 | empty |
| sources/town-ledgers/expenses/glytdbud-expe… | 2026 | 12 | 0100 | GENERAL FUND | empty | expense | account | 411 | 14112 | 540000 | 0100-4-411-0000-00-0-00-2-540000 | 0000 | OFF SUPPLI | 1100.0 | 0.0 | 1100.0 | 392.19 | 523.31 | 184.5 | 0.0 | 0 | 1 | empty |
| sources/town-ledgers/revenue/glytdbud-reven… | 2026 | 9 | 0100 | GENERAL FUND | 0100 GENERAL FUND | revenue | account | empty | 01001 | 417900 | empty | empty | INT FARM A | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0 | 0 | original,transfers,revised |
v_appropriation_vs_spend school + town Tier 3 · accounts view 0 rowsone row per account per year at period 13What was appropriated against what was actually spent, at the year-end close: original appropriation, transfers, revised, expended, encumbered and what was left over (surplus), with the leftover as a percent of the revised budget. Over ledger_snapshot joined to account, filtered to period = 13.
EMPTY TODAY -- it returns 0 rows. ledger_snapshot holds FY2026 at periods 9 and 12 only, and period 13 (the year-end close after the lapse period, per fiscal_period) has not been obtained. Nothing in the view says so; an empty result here is a document we do not hold, not a town that appropriated nothing. It also does not filter account_type, so when period 13 arrives revenue accounts -- stored NEGATIVE in ledger_snapshot -- will appear beside expense ones and surplus_pct on them will not mean what it means on an expense line. Two grains sit together: filter level before summing.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
level | TEXT | School level, where the row is about athletics rather than accounts. Means something different in account (department roll-up against detail account) and in dese_function_expenditure / dese_function_statewide, where it is the DESE hierarchy: total, rollup, category, detail. Filter on it before summing in all three. |
original | REAL | The appropriation as originally voted. dollars |
transfers | REAL | Money moved into or out of the appropriation after it was voted. dollars This is why original and revised differ. |
revised | REAL | The appropriation after transfers. dollars |
expended | REAL | Spent. dollars |
encumbered | REAL | Committed by purchase order but not yet spent. dollars |
surplus | REAL | not described yet |
surplus_pct | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_burn school + town Tier 3 · accounts view 759 rows 2026–2026one row per account per year per non-final periodSpending PACE part-way through the year: how much of the revised budget has been expended, how much is expended-plus-encumbered, and pace_gap -- the committed share minus the share of the year elapsed. A positive pace_gap is a line committed ahead of the calendar. Over ledger_snapshot at every period fiscal_period marks not final.
IT DOES NOT FILTER account_type, so 224 of its 983 rows are REVENUE accounts, whose amounts are stored negative -- spent_share on those is not a burn rate at all (PS TUITION reads 7.53). Filter a.account_type = 'expense' yourself, which means joining account again. pace_gap is a calendar proxy, not a schedule: it assumes even spending across twelve months, and nothing here establishes that any line spends evenly. fiscal_period marks period 12 as not final, so period-12 rows carry year_elapsed = 1.0. Two grains: period 9 carries department roll-ups AND accounts, period 12 accounts only.
| column | type | what it is |
|---|---|---|
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
year_elapsed | TEXT | not described yet |
spent_share | TEXT | not described yet |
committed_share | TEXT | not described yet |
pace_gap | TEXT | not described yet |
available_now | REAL | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_function_budget_vs_ledger school + town Tier 3 · accounts view 46 rows 2026–2026one row per DESE function code per year per periodThe town's ledger rolled up to DESE FUNCTION CODE -- revised, expended and encumbered summed per function, with a count of the accounts behind it and a count of the district budget lines whose function_group starts with the same four characters. The crosswalk between how the Town codes spending and how the district's book groups it.
budget_lines is a COUNT OF LINES, not dollars -- it is how many budget lines carry that function group, and it is 0 for 5 of the 46 function codes, which is a code the district's book does not use rather than a function nobody budgeted. Expense accounts only, and only accounts where a.function is set; anything uncoded is silently absent, so these sums do not add to the town's total. FY2026 period 12 only.
| column | type | what it is |
|---|---|---|
function_code | TEXT | not described yet |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
ledger_revised | TEXT | not described yet |
ledger_expended | TEXT | not described yet |
ledger_encumbered | TEXT | not described yet |
accounts | TEXT | not described yet |
budget_lines | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_interfund school + town Tier 3 · accounts view 12 rows 2026–2026one row per interfund transfer-in revenue account per year per periodTRANSFERS BETWEEN FUNDS as they appear on the revenue side -- money moving into a fund from another fund rather than from a taxpayer or the state. v_revenue filtered to objects beginning 490 plus object 499900; 12 rows, FY2026 period 9.
This is money the town moved from one of its own pockets to another. Adding it to tax and state aid double-counts, because the same dollar is a receipt in one fund and a disbursement in the other -- and the disbursement side is not in this view. The membership test is an OBJECT-CODE PATTERN (490% or 499900) written into the view, not a classification anybody published; an interfund transfer coded to another object would not appear.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
fund_name | TEXT | The fund's name as MUNIS prints it. CHAPTER 658 REVOLVING FUND is athletics. Identify a fund by number. |
org | TEXT | The MUNIS org segment of the account. |
object | TEXT | The MUNIS object code — what kind of thing the money buys. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
budgeted | TEXT | not described yet |
revised | TEXT | The appropriation after transfers. dollars |
received | TEXT | not described yet |
still_to_come | TEXT | not described yet |
pct_received | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_revenue school + town Tier 3 · accounts view 224 rows 2026–2026one row per revenue account per year per periodMONEY COMING IN -- every revenue account in the town's MUNIS books with the sign flipped to positive: what was budgeted, what has been received, what is still to come, and the percent received. Property tax, state aid, local receipts, fees, transfers in. FY2026 at period 9, 224 accounts.
THE SIGNS ARE NEGATED HERE. ledger_snapshot stores revenue negative and this view multiplies by -1, so figures are positive in the view and negative in the table it reads -- never mix the two in one sum. pct_received is computed from the RAW columns, not the negated ones. A part-year snapshot: 74.5% of the tax levy received at 31 March is the calendar, not a shortfall. still_to_come is the ledger's available, negated -- it is what has not been collected yet, not a forecast.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
fund_name | TEXT | The fund's name as MUNIS prints it. CHAPTER 658 REVOLVING FUND is athletics. Identify a fund by number. |
org | TEXT | The MUNIS org segment of the account. |
object | TEXT | The MUNIS object code — what kind of thing the money buys. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
budgeted | TEXT | not described yet |
revised | TEXT | The appropriation after transfers. dollars |
received | TEXT | not described yet |
still_to_come | TEXT | not described yet |
pct_received | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_revenue_classified school + town Tier 3 · accounts view 224 rows 2026–2026one row per revenue account per year per period, with our class attachedMoney coming in, grouped by WHERE IT COMES FROM: property tax levy, state aid, local receipts, one-time money, transfers in. v_revenue left-joined to our money_classification rows for revenue accounts. This is the view behind the revenue side of the money-flow diagrams.
THE CLASS IS A DEFAULT, NOT ALWAYS A MEASUREMENT. Any account with no classification row falls through to local / 'Local receipts' by COALESCE, and 171 of the 224 rows carry that label -- so 'Local receipts' means 'classified as local OR not classified at all' and the two cannot be told apart from this view. Join money_classification yourself if you need to know which. The classification is ours, recorded so it can be argued with; how and why in money_classification carry the basis. Amounts are the negated (positive) figures from v_revenue.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
account | TEXT | not described yet |
class | TEXT | Our classification of what KIND of revenue this is. Says where the money came FROM. It does NOT say what the money went on to pay for — general fund money is fungible and no document apportions it. |
class_label | TEXT | not described yet |
budgeted | TEXT | not described yet |
received | TEXT | not described yet |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_spending_classified school + town Tier 3 · accounts view 67 rows 2026–2026one row per town department per year per periodMoney going out, grouped by HOW MUCH CONTROL the town has over it: assessed, bargained, committed, delegated, transfer or discretionary, with how that was established (control_how). Voted, revised and expended per department. 67 departments, FY2026 period 9. This is the view behind the question 'how much of the budget could the town actually change'.
discretionary IS THE RESIDUAL AND IT IS NOT A FINDING. 49 of the 67 departments carry control = discretionary with control_how = residual, which means nobody classified them -- not that the town established they are discretionary. Read control_how before quoting control. Department roll-ups only (level = 'department'), expense only, so this does not tie to any account-level total. The classification is ours.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
department | TEXT | not described yet |
control | TEXT | not described yet |
control_how | TEXT | not described yet |
voted | REAL | not described yet |
revised | REAL | The appropriation after transfers. dollars |
expended | REAL | Spent. dollars |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_state_aid school + town Tier 3 · accounts view 29 rows 2026–2026one row per state-aid revenue account per year per periodSTATE AID as the town's own books record it -- Chapter 70 and the rest of the cherry sheet, budgeted against received. v_revenue filtered to objects beginning 45; 29 accounts, FY2026 period 9. Chapter 70 is the single account CH 70 AID, $9,229,410 budgeted in FY2026.
CHAPTER 70 IS NOT STATE AID. It is one account in this view, and the rest of the cherry sheet -- Unrestricted General Government Aid and everything else -- is not school money. Summing this view gives total state aid, which is what model/finance.py grows; do not call that figure Chapter 70, and do not call Chapter 70 the town's state aid. Membership is an OBJECT-CODE PATTERN (45%) written into the view, not a list DESE published. Figures are negated to positive by v_revenue, and a part-year pct_received is the payment calendar rather than a shortfall.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
fund_name | TEXT | The fund's name as MUNIS prints it. CHAPTER 658 REVOLVING FUND is athletics. Identify a fund by number. |
org | TEXT | The MUNIS org segment of the account. |
object | TEXT | The MUNIS object code — what kind of thing the money buys. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
budgeted | TEXT | not described yet |
revised | TEXT | The appropriation after transfers. dollars |
received | TEXT | not described yet |
still_to_come | TEXT | not described yet |
pct_received | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
v_transfer_history school + town Tier 3 · accounts view 759 rows 2026–2026one row per account per year per periodMoney MOVED BETWEEN LINES after the budget was voted: the original appropriation, the cumulative transfers into or out of it, and the revised figure, per account. moved_since_last is meant to be the change in transfers since the previous period.
moved_since_last IS EFFECTIVELY EMPTY AND SHOULD NOT BE USED: it is non-NULL on 2 of 983 rows, because the LAG needs the same account_id at two periods and ledger_snapshot holds none -- period 9 carries the department roll-ups plus 277 accounts and period 12 carries a different 635 accounts. The two non-NULL values are duplicate rows within period 9, not a movement between periods. transfers itself is real and cumulative to the snapshot date, not per-period. The view does not filter account_type, so 224 revenue accounts are included, and their amounts are stored NEGATIVE and are not negated here as they are in v_revenue. It mixes department roll-ups with detail accounts -- filter level before summing.
| column | type | what it is |
|---|---|---|
dept | TEXT | The MUNIS department number. A department is not a purpose: school retiree health sits in the insurance department. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
original | REAL | The appropriation as originally voted. dollars |
transfers | REAL | Money moved into or out of the appropriation after it was voted. dollars This is why original and revised differ. |
revised | REAL | The appropriation after transfers. dollars |
moved_since_last | NUM | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
Not about moneyCounts, names, dates and documents — everything this archive holds that is not a dollar figure
balance_sheet_printed_totals school + town provenance 288 rows 2011–2022one row per printed total per fund column per yearThe totals each balance sheet PRINTS — total assets, total liabilities, total fund equity — quoted with the page they appear on.
The independent check on balance_sheet, so it must be read off the page and never computed from our own rows.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page_printed | TEXT | not described yet |
page_pdf | TEXT | not described yet |
total_row | TEXT | not described yet |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
amount | TEXT | The figure, as printed. dollars |
quote | TEXT | What the source says, verbatim. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | total_row | fund | amount | quote |
|---|---|---|---|---|---|---|---|
| 2012 | FY2012 | 53 | 56 | TOTAL ASSETS | general | 6185491.72 | TOTAL ASSETS row, printed page 53 |
| 2018 | FY2018 | 26 | 26 | TOTAL LIABILITIES/FUND EQUITY | capital_project | 1671644.20 | TOTAL LIABILITIES/FUND EQUITY row, printed … |
| 2020 | FY2020 | 22 | 22 | TOTAL LIABILITIES/FUND EQUITY | special_revenue | 2650524.60 | TOTAL LIABILITIES/FUND EQUITY row, printed … |
enterprise_balance_sheet_printed_totals school + town provenance 75 rows 2024–2025one row per printed total per fund column per printing per yearThe totals the enterprise balance sheet PRINTS — Total Assets, Total Liabilities, Total Fund Equity, Total Liabilities and Fund Equity, and the sheet's own PROOF row — quoted with the raw cell text and the page.
The independent check on enterprise_balance_sheet, so it must be read off the page and never computed from our own rows. The PROOF row is the sheet's own self-check and is what a reading is reconciled to. FY2025 prints its Proof as '(0.00)' and '-' in different columns; the amount recorded is 0.00 and the raw glyph is in quote.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page_printed | TEXT | not described yet |
page_pdf | TEXT | not described yet |
printing | TEXT | Which of several rows published under one natural key this is: 1 for the first, 2 for the next. Part of the primary key of three DESE tables and of enterprise_balance_sheet. It exists because the publisher printed the same key twice — sometimes identically, sometimes with the district under a different name, and sometimes with DIFFERENT FIGURES. Nothing may be dropped, so collapse on it before aggregating rather than assuming the key is unique. |
total_row | TEXT | not described yet |
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
amount | TEXT | The figure, as printed. dollars |
quote | TEXT | What the source says, verbatim. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | printing | total_row | fund | amount | quote |
|---|---|---|---|---|---|---|---|---|
| 2024 | FY2024 | 21 | 21 | 1 | TOTAL LIABILITIES AND FUND EQUITY | sewer | 5573383.92 | printed 'Total Liabilities and Fund Equity'… |
| 2024 | FY2024 | 28 | 28 | 2 | TOTAL LIABILITIES AND FUND EQUITY | water | 65079.88 | printed 'Total Liabilities and Fund Equity'… |
| 2025 | FY2025 | 21 | 25 | 1 | TOTAL LIABILITIES | sewer | 3172048.99 | read from the PDF's own text layer, FY2025 … |
fiscal_period school + town dimension 13 rowsone row per MUNIS periodWhat each MUNIS accounting period means and how many months of the year had elapsed. Period 13 is the year-end close after the lapse period, not a thirteenth month.
Period 13 is the year-end close after the lapse period, not a thirteenth month.
| column | type | what it is |
|---|---|---|
period | INTEGER | MUNIS accounting period: a point in time INSIDE the fiscal year. A period is not a stage. Period 9 and period 12 are two different reports of the same year; adding them adds one report to the other. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
months_elapsed | REAL | not described yet |
is_final | INTEGER | not described yet |
First 3 rows, in rowid order:
| period | label | months_elapsed | is_final |
|---|---|---|---|
| 10 | April | 10.0 | 0 |
| 11 | May | 11.0 | 0 |
| 12 | June | 12.0 | 0 |
fund school + town dimension 68 rowsone row per MUNIS fundOne row per MUNIS fund: its number, its name, what kind of fund it is and what restricts it. No money.
with its kind and restriction.
| column | type | what it is |
|---|---|---|
fund | TEXT | The MUNIS fund number. School money spans 13xx, 15xx, 22xx and 26xx-29xx. There is no single range that means school. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
restriction | TEXT | not described yet |
First 3 rows, in rowid order:
| fund | name | kind | restriction |
|---|---|---|---|
| 1311 | SCHOOL GIFT FUND | gift | NULL |
| 2709 | FY12 REG DISSEMINATION GR#321 | NULL | NULL |
| 2653 | FY24 FAMILY & COMMUNITY #237 | NULL | NULL |
money_assumptions school + town our model 6 rowsone row per assumptionEvery assumption the money model rests on, what it rests on, and what single document would settle it.
with what would settle it.
| column | type | what it is |
|---|---|---|
assumption | TEXT | not described yet |
evidence | TEXT | What establishes the claim in this row. |
rests_on | TEXT | not described yet |
settled_by | TEXT | not described yet |
First 3 rows, in rowid order:
| assumption | evidence | rests_on | settled_by |
|---|---|---|---|
| `SCHRESSTIP` is a school resource officer s… | Read from the abbreviation, in the police d… | A $6,800 line. Immaterial, and still an inf… | The account’s full name from MUNIS, which t… |
| The district workbook total ties to the dep… | They land 0.4% apart for FY2026. | Used to argue the $26m is the town’s bill r… | Whether the 0.4% is netting or simply that … |
| The pension assessment includes school non-… | Standard Massachusetts practice: teachers i… | The reason the pension is treated as a scho… | The WRRS annual actuarial valuation, which … |
money_classification school + town our model 252 rowsone row per revenue account or fund or departmentOur model, not measurement. One row per revenue account, fund or department: what we classified it as, HOW that was established, and WHY. 252 rows covering every money node in the school and town diagrams.
how and why carry the basis so a classification can be argued with.
| column | type | what it is |
|---|---|---|
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
key | TEXT | The row's join key. |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
label | TEXT | The row's name, as printed. Not a key. MUNIS truncates to ten characters, so MS GUIDANC and HS GUIDANC collide. |
classification | TEXT | Our classification of the node. |
how | TEXT | How that classification was established. |
why | TEXT | Why the classification was made, in words that can be argued with. |
First 3 rows, in rowid order:
| kind | key | group | label | classification | how | why |
|---|---|---|---|---|---|---|
| revenue_account | SALE STAND | onetime | One-time money | general_fund_revenue | named | Free cash and proceeds. Spendable once |
| report_receipt | SENIORCENTERRENTALFEES | local | SENIOR CENTER RENTAL FEES | general_fund_revenue | residual | Local receipts — a residual: fees, permits,… |
| report_receipt | STUDENTPARKINGFEES | local | STUDENT PARKING FEES | general_fund_revenue | residual | Local receipts — a residual: fees, permits,… |
money_edges school + town our model 11 rowsone row per traced edgeWhere a restricted fund's money is PERMITTED to go, with the statute or grant award that permits it. An edge is a presumption about purpose, never an observation of spending.
An edge is the statute or grant award — a PRESUMPTION about purpose, never an observation of spending.
| column | type | what it is |
|---|---|---|
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
use | TEXT | not described yet |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
why | TEXT | Why the classification was made, in words that can be argued with. |
First 3 rows, in rowid order:
| source | use | basis | why |
|---|---|---|---|
| Fund 1301 (athletics) | Athletics spending | restricted | The fund is athletics — established from it… |
| Grant funds 26xx–29xx | The purpose of each grant | restricted | Restricted by the grant award rather than b… |
| State teachers’ pension system | District teaching staff | unknown | Not appropriated by Lunenburg, not in our a… |
money_gaps school + town our model 266 rowsone row per gapThe honest list of what CANNOT be answered — per side (money in, money out), what is missing and why the published documents do not close it.
This table is the honest list of what cannot be answered.
| column | type | what it is |
|---|---|---|
side | TEXT | not described yet |
what | TEXT | not described yet |
why | TEXT | Why the classification was made, in words that can be argued with. |
First 3 rows, in rowid order:
| side | what | why |
|---|---|---|
| money_in | What a family spends in the cafeteria when … | Massachusetts funds universal free school m… |
| people | How many Lunenburg homes have a child in th… | The Census answers the second and not the f… |
| people | How many people each TOWN department employ… | CORRECTED. This row previously said the onl… |
peg_access_identities school + town provenance 23 rows 2015–2025one row per arithmetic statement each PEG statement makes about itselfThe arithmetic the printed statement states about itself, written over the row ORDINALS in peg_access_printed_totals -- 1 + 2 = 3 and so on. It is transcribed from the page, because the arithmetic changes every few years.
This is what verify_peg_access.py recomputes, and it is also a completeness check: every printed row must be reached by some identity. FY2020's row 5 is not, and that is recorded as a printed defect rather than removed.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
statement | TEXT | not described yet |
identity | TEXT | not described yet |
note | TEXT | What we recorded about this row. |
First 3 rows, in rowid order:
| fy | edition | statement | identity | note |
|---|---|---|---|---|
| 2017 | FY2017 | revenue_vs_expenses | 3 - 4 = 5 | empty |
| 2022 | FY2022 | revenue_vs_expenses | 1 + 2 = 3 | empty |
| 2024 | FY2024 | revenue_vs_expenses | 1 + 2 + 3 = 4 | empty |
peg_access_printed_totals school + town provenance 77 rows 2015–2025one row per printed figure per statement per yearThe REVENUE vs EXPENSES statement each report prints, row by row in printed order, plus the line-item TOTAL and what the prose says the revenue was -- each with the raw cell text, the printed page and the PDF index.
total_row is the label the page prints and it is NOT unique: FY2019's statement carries two rows labelled Subtotal. Use ordinal. The rows do not mean the same thing across years -- FY2015-FY2019 Starting Balance is the prior year's Ending Balance, FY2021 and FY2025 it is the BUDGET, and FY2022 has no balance at all, so TOTAL there is one year's surplus and not a fund balance. precision says whether the statement is printed in cents or whole dollars; FY2024 and FY2025 are in dollars while the expense table beside them is in cents.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page_printed | TEXT | not described yet |
page_pdf | TEXT | not described yet |
statement | TEXT | not described yet |
ordinal | TEXT | not described yet |
total_row | TEXT | not described yet |
amount | TEXT | The figure, as printed. dollars |
pct | TEXT | not described yet |
precision | TEXT | not described yet |
quote | TEXT | What the source says, verbatim. |
document | TEXT | The source file the figure was read from. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | statement | ordinal | total_row | amount | pct | precision | quote | document |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 2017 | FY2017 | 68 | 68 | prose | 1 | REVENUE STATED IN PROSE | 107849.80 | empty | cents | The overall payments received for FY17 were… | sources/town-annual-reports/docs/4124-fy-20… |
| 2019 | FY2019 | 81 | 83 | revenue_vs_expenses | 6 | Comcast Tech Fund (Undesignated Fund) | 124796.01 | empty | cents | $124,796.01 | sources/town-annual-reports/docs/4126-fy-20… |
| 2024 | FY2024 | 63 | 63 | revenue_vs_expenses | 2 | Enterprise Fund Interest | 24498.00 | empty | dollars | $ 24,498 | sources/town-annual-reports/docs/4132-fy-20… |
rate_register school + town fact 71 rows 2024–2029one row per rateEvery rate and fee the model uses: the value, what kind of value it is, when it was set, when it expires, its source document and cell reference, and whether the model actually uses it.
with where it was set.
| column | type | what it is |
|---|---|---|
fy | TEXT | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
category | TEXT | not described yet |
unit | TEXT | What the figure is counted in. |
item | TEXT | The thing being priced or counted. |
value | TEXT | The figure, as printed. dollars |
value_type | TEXT | What kind of quantity the row holds: a percentage, an average, an FTE, or an FTE per 100 students with disabilities. Read it before doing arithmetic. In dese_sped_program it says Percent on EVERY row including the FTE-ratio rows, so in that table it does not tell you the unit and the indicator category does. |
set_on | TEXT | The date the rate or fee was set. |
expires | TEXT | not described yet |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
source_file | TEXT | The file the figure was read from. |
source_ref | TEXT | Where in the source the figure sits — a cell, a line, a page. Rule 13: a coordinate, so a figure can be checked rather than taken. |
status | TEXT | Whether this row's table was CHECKED against a total the report itself prints.checked, check failed, no check. NOTHING may be aggregated without splitting on this — check failed is not slightly-worse data, it is data whose columns do not sum to the printed total. |
in_model | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | category | unit | item | value | value_type | set_on | expires | source | source_file | source_ref | status | in_model |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025 | athletic_fee | HS | reduced_fee | 32.50 | dollars | empty | empty | District athletics workbook, by sport (Town… | town-ledgers/account-details/athletics-by-s… | Spring!R3 | verified | reference |
| 2025 | athletic_fee | MS | second_child | 150.00 | dollars | empty | empty | LHS Athletics FAQ (rschoolteams.com) | district-budget/text/lhs-athletics-faq.txt | 2nd student=$150.00 | verified | reference |
| 2026 | bus_fee | Transportation, to school | eligibility — grades K-6, under 2 miles | empty | charged | 2025-05 | empty | Superintendent's email, May 2025 | correspondence/2025-05-bus-fees-superintend… | Grades K-6 : 0-1.99 miles are charged | verified | no |
special_revenue_printed_totals school + town provenance 13 rows 2011–2023one row per editionThe GRAND TOTAL each annual report PRINTS for the special revenue schedule, quoted with its page. Four columns.
This is the independent check on special_revenue_read, so it must be read off the page and never computed from our own rows — the OCR misread this very figure by $1,010 and the reconciliation was measured against it for months.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
forward | TEXT | Balance the fund brought forward from the previous year, as the schedule prints it. dollars |
receipts | TEXT | Total money the fund took in during the year. dollars Not the same quantity as disbursements and must never be added to it. |
disbursements | TEXT | Total money the fund paid out during the year. dollars |
carried | TEXT | Balance the fund carried forward into the next year. dollars Ties to the NEXT year's forward, which is a check across years the schedule makes possible. |
quote | TEXT | What the source says, verbatim. |
First 3 rows, in rowid order:
| fy | edition | page | forward | receipts | disbursements | carried | quote |
|---|---|---|---|---|---|---|---|
| 2015 | FY2015 | 33 | 2599893.63 | 5285016.77 | 5180429.68 | 2704480.72 | GRAND TOTAL row, page 33 |
| 2021 | FY2021 | 36 | 5596048.89 | 7088091.52 | 6269397.74 | 6414742.67 | GRAND TOTAL row, PDF page 36 (printed folio… |
| 2023 | FY2023 | 43 | 8663349.91 | 9102807.73 | 7735057.86 | 10031099.78 | GRAND TOTAL row, page 43 |
stated_figure school + town fact 2 rows 2025–2025one row per figure the town statedFigures the town or district ASSERTED in their own words, with the quote, who said it, when, and what it supersedes. Claims, kept as claims.
with the quote.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
metric | TEXT | Which quantity this row measures. |
amount | REAL | The figure, as printed. dollars |
stated_on | TEXT | not described yet |
stated_by | TEXT | not described yet |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
source_ref | TEXT | Where in the source the figure sits — a cell, a line, a page. Rule 13: a coordinate, so a figure can be checked rather than taken. |
quote | TEXT | What the source says, verbatim. |
supersedes | REAL | not described yet |
note | TEXT | What we recorded about this row. |
First 2 rows, in rowid order:
| fy | metric | amount | stated_on | stated_by | basis | doc_id | source_ref | quote | supersedes | note |
|---|---|---|---|---|---|---|---|---|---|---|
| 2025 | school_surplus | 582115.44 | 2025-09-03 | Superintendent (memo read into the record b… | close | sources/meetings/text/school-committee/2025… | line 36 | recently discovered in the amount of $582,1… | NULL | The Chair read a prepared statement about a… |
| 2025 | school_surplus | 603885.97 | 2025-09-17 | Business Administrator (Mr. McNamara) to th… | close | sources/meetings/text/school-committee/2025… | line 123 | the surplus number has gone up to $603,885.… | 582115.44 | The $21,770.53 difference is encumbrances r… |
DESE's own published measures, for Lunenburg and every other district. All-funds, so NOT comparable with a general fund appropriation.
Not about moneyCounts, names, dates and documents — everything this archive holds that is not a dollar figure
dese_measure state fact 5,344 rows 2009–2025one row per district per year per measureThe state's published measures for SEVEN districts -- Lunenburg and the six peers -- per year, SY2009-SY2025: enrollment, staffing FTE, per-pupil spending by function, demographics and MCAS. Each value carries whether it reconciles to DESE's own printed total.
SEVEN districts, not every one, despite what this row said until 8 September 2026 -- the RADAR workbook was scoped down so the published database would fit. dese_function_statewide is the all-district view. DESE dataset er3w-dyti publishes these same measures for all 421 districts and agrees with this table on all 2,982 values; percentages are stored here as 0.57 where DESE prints 57.0.
| column | type | what it is |
|---|---|---|
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
measure | TEXT | Which DESE measure this row reports. |
value | REAL | The figure, as printed. dollars |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| lea | district | fy | group | measure | value | reconciles | doc_id |
|---|---|---|---|---|---|---|---|
| 01530000 | Leominster | 2021 | Student Enrollment | In-District FTE Pupils | 5829.0 | yes | sources/state-dese/radar-district-compariso… |
| 07350000 | North Middlesex | 2019 | Expenditures Per Pupil | Teachers | 5860.0 | yes | sources/state-dese/radar-district-compariso… |
| 08320000 | Montachusett Regional Vocational Technical | 2012 | Teacher Salaries | Teacher FTE | 104.0 | yes | sources/state-dese/radar-district-compariso… |
dese_radar state fact 5,344 rows 2009–2025one row per district per year per measureDESE's ALL-FUNDS per-pupil expenditure figures for every district. All funds means grants and revolving funds are included, so these are NOT comparable with a general fund appropriation.
All-funds, so NOT comparable with the town's general fund appropriation.
| column | type | what it is |
|---|---|---|
lea | TEXT | The state's district code. |
district | TEXT | The district's name as DESE prints it. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
group | TEXT | The department heading the row sits under, as printed. A heading governs every row below it until the next one. |
measure | TEXT | Which DESE measure this row reports. |
value | TEXT | The figure, as printed. dollars |
reconciles | TEXT | Whether this figure ties to DESE's own printed total. |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
First 3 rows, in rowid order:
| lea | district | fy | group | measure | value | reconciles | doc_id |
|---|---|---|---|---|---|---|---|
| 06100000 | Ashburnham-Westminster | 2024 | Expenditures Per Pupil | Total In-District Expenditures | 16209 | yes | sources/state-dese/radar-district-compariso… |
| 06100000 | Ashburnham-Westminster | 2015 | MCAS Performance | ELA Grades 3-8 % Meets or Exceeds | 0.934 | yes | sources/state-dese/radar-district-compariso… |
| 06730000 | Groton-Dunstable | 2017 | Expenditures Per Pupil | Total In-District Expenditures | 14475 | yes | sources/state-dese/radar-district-compariso… |
dls_health_insurance state fact 8,775 rows 2002–2026one row per municipality, per yearWhat every Massachusetts municipality spent on HEALTH INSURANCE, as the Division of Local Services reports it. All 351 towns and cities, so Lunenburg can be set beside anyone rather than only its usual eleven peers.
ALL 351 MUNICIPALITIES, NOT THE PEER SET. Filter by dor_code or municipality before aggregating or the figures are the Commonwealth’s, not a town’s. It is REPORTED SPENDING and not a rate, a plan design or a headcount — a town spending less may insure fewer people rather than insure them more cheaply, and nothing here distinguishes the two.
| column | type | what it is |
|---|---|---|
dor_code | TEXT | not described yet |
municipality | TEXT | not described yet |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
expenditure | TEXT | The non-salary portion of the fund's spending. dollars |
source_file | TEXT | The file the figure was read from. |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
First 3 rows, in rowid order:
| dor_code | municipality | fy | expenditure | source_file | sha256 |
|---|---|---|---|---|---|
| 048 | Burlington | 2007 | 10320560 | health-insurance-expenditures-2026-09-26-92… | 92a72d5d93a465ad150808c726e838ebdeb6c9736ea… |
| 135 | Holland | 2023 | 368797 | health-insurance-expenditures-2026-09-26-92… | 92a72d5d93a465ad150808c726e838ebdeb6c9736ea… |
| 204 | New Salem | 2018 | 59176 | health-insurance-expenditures-2026-09-26-92… | 92a72d5d93a465ad150808c726e838ebdeb6c9736ea… |
dls_health_self_insured state fact 8,424 rows 2003–2026one row per municipality, per yearThe same DLS series for SELF-INSURED municipalities, which report a fund rather than a premium: starting balance, revenues, expenditures and closing fund balance.
A SELF-INSURED TOWN AND AN INSURED ONE ARE NOT COMPARABLE LINE FOR LINE. This is a fund’s activity; dls_health_insurance is money paid out. Adding them together, or ranking towns across the two, compares a premium with a cash flow. The flag column is the Commonwealth’s own marking and must be read before use.
| column | type | what it is |
|---|---|---|
dor_code | TEXT | not described yet |
municipality | TEXT | not described yet |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
starting_balance | TEXT | not described yet |
revenues | TEXT | not described yet |
expenditures | TEXT | not described yet |
fund_balance | TEXT | not described yet |
flag | TEXT | not described yet |
source_file | TEXT | The file the figure was read from. |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
First 3 rows, in rowid order:
| dor_code | municipality | fy | starting_balance | revenues | expenditures | fund_balance | flag | source_file | sha256 |
|---|---|---|---|---|---|---|---|---|---|
| 062 | Chilmark | 2003 | empty | empty | empty | empty | N | health-self-insured-funds-2026-09-26-386b09… | 386b09a3b23502d463cf5323a2cc191d55c563f812d… |
| 098 | Florida | 2003 | empty | empty | empty | empty | N | health-self-insured-funds-2026-09-26-386b09… | 386b09a3b23502d463cf5323a2cc191d55c563f812d… |
| 149 | Lawrence | 2020 | 2273772 | 2309756 | 1874040 | 2709488 | N | health-self-insured-funds-2026-09-26-386b09… | 386b09a3b23502d463cf5323a2cc191d55c563f812d… |
Which document a figure came from, what has been read, and what these tables mean.
Tier 2 · categorieswhether a category — guidance, special education, transport — is over
build_inputs archive Tier 2 · categories provenance 125 rowsone row per CSV file this database was built fromWhich files, by sha256, produced the figures in this database — so a reader can tell whether it still matches them. The database is a derived read model rebuilt from the CSVs; this is the only thing that records WHEN and FROM WHAT, which is what makes staleness detectable.
A hash here is of the bytes at build time. It says nothing about whether those bytes were correct, only whether they have since changed. Ask scripts/db_freshness.py rather than reading this by hand.
| column | type | what it is |
|---|---|---|
path | TEXT | Where our copy lives in the archive. |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
First 3 rows, in rowid order:
| path | sha256 |
|---|---|
| sources/data/dls-health-insurance.csv | c638d0e1979da9fd5d0ac59ef288bca74ea241a5421… |
| sources/data/lps-budget-lines.csv | 5089db312b3407908d9ccb30166a45a8b66c57f9ce3… |
| sources/data/money-classification.csv | 2ece30bf2f0347a96198725838d23ec43cc35b383e0… |
build_meta archive Tier 2 · categories provenance 2 rowsone row per fact about this build (key, value)When this database was built, and how many input files it hashed. It exists because a four-day-old copy of receivables.csv went on crediting ten annual-report pages as read after the rows were deleted for not proving, and nothing anywhere recorded the copy’s age.
built_at is when the build ran, not when the underlying documents were published. Values are stored as text.
| column | type | what it is |
|---|---|---|
key | TEXT | The row's join key. |
value | TEXT | The figure, as printed. dollars |
First 2 rows, in rowid order:
| key | value |
|---|---|
| built_at | 2026-10-16T11:11:27Z |
| inputs | 125 |
Not about moneyCounts, names, dates and documents — everything this archive holds that is not a dollar figure
annual_report_catalogue archive provenance 866 rows 2011–2025one row per table per annual reportA catalogue of what EXISTS, not of what has been extracted. Every table found by reading all sixteen annual reports end to end: its printed heading verbatim, its pages, its grain, its printed total, and whether it is extractable.
A catalogue of what EXISTS, not of what has been extracted.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
document | TEXT | The source file the figure was read from. |
name | TEXT | The name as the source prints it. MUNIS truncates account names to ten characters. |
printed_heading | TEXT | not described yet |
pages | TEXT | Which pages of the source this covers. |
what_it_is | TEXT | not described yet |
grain | TEXT | What one row of this table represents. The field that decides whether two tables can be joined or summed. |
columns | TEXT | not described yet |
layout | TEXT | not described yet |
printed_total | TEXT | The total the source itself prints, quoted. This is the independent check. An extract that does not tie to it is not trusted. |
approx_rows | TEXT | not described yet |
extractable | TEXT | not described yet |
notes | TEXT | What we recorded about this row while reading it. |
cluster | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | edition | document | name | printed_heading | pages | what_it_is | grain | columns | layout | printed_total | approx_rows | extractable | notes | cluster |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2013 | FY2013 | 4119-fy-2013-annual-town-report.pdf | Nashoba Environmental Health Department act… | Environmental Health Department / Environme… | 16 | Counts of regional health district activity… | one activity type | (activity) | (count) | label with dot leaders, count right | empty | 12 | clean | THE MOST COMPLETE OF THE THREE YEARS: Lunen… | activity counts department environmental |
| 2017 | FY2017 | 4124-fy-2017-annual-town-report.pdf | Monty Tech assessment ratio percentages by … | ASSESSMENT RATIO PERCENTAGES | 147 | Each member town's operating and capital ap… | one member town | COMMUNITIES | TRANSPORTATION & OTHER OPERAT… | Seven-column table | TOTALS 100.00% 100.00% 0.00% 100.00% 100.00… | 18 | clean | Footnote: '* Capital Percentages are used f… | assessment monty percentages ratio |
| 2018 | FY2018 | 4125-fy-2018-annual-town-report.pdf | Fire department calls for service, 2018 | empty | 96 | Calendar 2018 fire department run volume sp… | one call category | category | count | Two side-by-side label/number pairs embedde… | stated in the prose above it: 'your Fire De… | 4 | clean | Fires & Hazardous Conditions 452, Emergency… | calls department fire service |
annual_report_contents archive provenance 199 rows 2011–2025one row per extracted tableWhat was actually READ: which tables, from which pages, how many figures, and whether the extract is checkable against a printed total.
from which pages
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
table | TEXT | Which table this row describes. |
pages | TEXT | Which pages of the source this covers. |
page_count | TEXT | not described yet |
pages_with_figures | TEXT | not described yet |
figure_rows | TEXT | not described yet |
figures | TEXT | not described yet |
columns | TEXT | not described yet |
read_by | TEXT | Which instrument produced the figures: vision for a page read directly.A reading, whichever instrument made it. It is checked by the printed total, not trusted for its source. |
printed_total | TEXT | The total the source itself prints, quoted. This is the independent check. An extract that does not tie to it is not trusted. |
checkable | TEXT | not described yet |
csv_fields | TEXT | not described yet |
grain | TEXT | What one row of this table represents. The field that decides whether two tables can be joined or summed. |
First 3 rows, in rowid order:
| fy | table | pages | page_count | pages_with_figures | figure_rows | figures | columns | read_by | printed_total | checkable | csv_fields | grain |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2018 | payroll | 5,248-254 | 8 | 7 | 304 | 586 | 7 | layout+plain | empty | no | fy, department, position_count, gross | AGGREGATE ONLY -- never one row per named p… |
| 2019 | capital_project | 36 | 1 | 1 | 9 | 189 | 2 | ocr | empty | no | fy, project_number, project_name, balance | one row per capital project per year |
| 2025 | enterprise | 25,35,53,64,67,140,142-143,152 | 9 | 8 | 96 | 155 | 6 | layout+plain | empty | no | fy, fund, line, amount | one row per enterprise fund line per year |
annual_report_survey archive provenance 2,751 rows 2011–2025one row per page surveyedA measurement of PAGES, not of figures: per page, the extraction mode, how many gutters and money tokens it holds, how many characters and rows. This is how the right instrument is chosen per page.
A survey, not data: it measures pages, it does not read figures.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
document | TEXT | The source file the figure was read from. |
page | TEXT | The page number printed on the page, not the PDF's index. The two differ by a cover offset that is not constant across years. |
mode | TEXT | not described yet |
gutters | TEXT | not described yet |
money | TEXT | not described yet |
chars | TEXT | not described yet |
rows | TEXT | How many rows the extract produced. count |
sections | TEXT | not described yet |
totals | TEXT | not described yet |
note | TEXT | What we recorded about this row. |
First 3 rows, in rowid order:
| fy | document | page | mode | gutters | money | chars | rows | sections | totals | note |
|---|---|---|---|---|---|---|---|---|---|---|
| 2016 | 4123-fy-2016-annual-town-report.pdf | 174 | plain | 2 | 39 | 2291 | 39 | empty | empty | empty |
| 2022 | 4129-fy-2022-annual-town-report.pdf | 26 | plain | 1 | 110 | 3450 | 54 | receipts | GRAND TOTAL=46,695,138.62 | empty |
| 2022 | 4129-fy-2022-annual-town-report.pdf | 154 | layout | 0 | 0 | 3297 | 0 | town_meeting | empty | text, no figures |
column_glossary archive provenance 179 rowsone row per DISTINCT column name across the whole databaseOne row per DISTINCT column name across the whole database: what it means, its unit, whether it is published or ours, and the caution attached to it.
Keyed on the NAME, not on table plus name, because v1 and status mean the same dangerous thing everywhere they appear. Where a name genuinely differs by table, the table entry says so.
| column | type | what it is |
|---|---|---|
column | TEXT | not described yet |
meaning | TEXT | What the column holds. |
unit | TEXT | What the figure is counted in. |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
caution | TEXT | What goes wrong if this is used without knowing the above. Every entry here was written after getting it wrong at least once. |
First 3 rows, in rowid order:
| column | meaning | unit | basis | caution |
|---|---|---|---|---|
| v4 | ORDINAL: the fourth column of this page tha… | dollars | derived | See v1. |
| path | Where our copy lives in the archive. | empty | ours | empty |
| lunenburg_rank_of_districts | Lunenburg’s position in that distribution, … | empty | derived | Read the denominator. It includes charter a… |
dataset_document archive provenance 225 rowsone row per dataset per documentThe join between an extracted dataset and the document it came from: which pages, how many rows, whether it reconciled, and the publisher's own label, size and checksum.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
rows | TEXT | How many rows the extract produced. count |
pages | TEXT | Which pages of the source this covers. |
page_count | TEXT | not described yet |
reconciled | TEXT | not described yet |
partial | TEXT | not described yet |
document | TEXT | The source file the figure was read from. |
publisher_label | TEXT | not described yet |
upstream | TEXT | The publisher's address, as deeply as it goes. |
sha256 | TEXT | Checksum of our copy. Here because a file can be replaced at the same URL without the URL changing. |
bytes | TEXT | Size of our copy. bytes |
First 3 rows, in rowid order:
| dataset | edition | rows | pages | page_count | reconciled | partial | document | publisher_label | upstream | sha256 | bytes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| special-revenue-funds | FY2015 | 129 | 29,30,31,32,33 | 5 | 0 | 0 | 4121-fy-2015-annual-town-report.pdf | FY 2015 Annual Town Report | https://www.lunenburgma.gov/DocumentCenter/… | 712afbb458b2a452a1c4b3ce618478c8f59a31d7f04… | 7590404 |
| report-officials | FY2021 | 21 | 16,90,96 | 3 | 0 | 0 | 4128-fy-2021-annual-town-report.pdf | FY 2021 Annual Town Report | https://www.lunenburgma.gov/DocumentCenter/… | 7ec4740034a2b9bd3aa7450f63c91d10e6ead472450… | 82620223 |
| report-enrollment-mcas | FY2018 | 13 | 112,125,137,139,143 | 5 | 0 | 0 | 4125-fy-2018-annual-town-report.pdf | FY 2018 Annual Town Report | https://www.lunenburgma.gov/DocumentCenter/… | 364a1138df754668ee59a499cf3d76b6ac006d47a4a… | 8052398 |
document archive provenance 4,790 rowsone row per source documentOne row per source document: its archive path, how it reached us, its publisher URL, whether that link still opens (link_state), whether our copy still matches the publisher's (copy_state), and both checksums. Also which columns a workbook HIDES from a reader.
link_state says whether the publisher's copy still opens; copy_state whether it still matches ours.
| column | type | what it is |
|---|---|---|
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
path | TEXT | Where our copy lives in the archive. |
source_type | TEXT | not described yet |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
ledger_at | TEXT | not described yet |
hidden_columns | TEXT | not described yet |
url | TEXT | The publisher's own address for the document. |
link_state | TEXT | not described yet |
copy_state | TEXT | not described yet |
remote_sha256 | TEXT | not described yet |
local_sha256 | TEXT | not described yet |
First 3 rows, in rowid order:
| doc_id | path | source_type | basis | ledger_at | hidden_columns | url | link_state | copy_state | remote_sha256 | local_sha256 |
|---|---|---|---|---|---|---|---|---|---|---|
| sources/budget-workbooks/finance-committee/… | sources/budget-workbooks/finance-committee/… | primary | NULL | NULL | NULL | empty | NULL | NULL | NULL | f5c807913c2342a2d8f619e927b53281443b20d53fc… |
| sources/district-budget/docs/sc-meetings/20… | sources/district-budget/docs/sc-meetings/20… | primary | NULL | NULL | NULL | https://drive.google.com/file/d/1F99SUjGtrN… | NULL | NULL | NULL | 170e840ac8913b40085f54ef246ca9190fb6ba63493… |
| sources/state-law/2026-10-08/updated-guidan… | sources/state-law/2026-10-08/updated-guidan… | primary | NULL | NULL | NULL | https://www.mass.gov/info-details/updated-g… | NULL | NULL | NULL | 328f58eb7eb3200a439e9b9a00e3a0e900b2a50cbbb… |
extraction_plan archive provenance 555 rows 2011–2025one row per planned extractWhat is planned to be read out of the annual reports and what state each item is in — including items deliberately not attempted, and why.
and what state each is in.
| column | type | what it is |
|---|---|---|
dataset | TEXT | Which extract family this row belongs to. |
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
pages | TEXT | Which pages of the source this covers. |
printed_heading | TEXT | not described yet |
table | TEXT | Which table this row describes. |
grain | TEXT | What one row of this table represents. The field that decides whether two tables can be joined or summed. |
printed_total | TEXT | The total the source itself prints, quoted. This is the independent check. An extract that does not tie to it is not trusted. |
checkable | TEXT | not described yet |
extractable | TEXT | not described yet |
rows | TEXT | How many rows the extract produced. count |
notes | TEXT | What we recorded about this row while reading it. |
First 3 rows, in rowid order:
| dataset | fy | edition | pages | printed_heading | table | grain | printed_total | checkable | extractable | rows | notes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| officials | 2016 | FY2016 | 7 | ELECTED OFFICIALS | Elected officials -- state and federal | one officeholder | empty | no | messy | 9 | Substantively identical to FY2015 p8. |
| officials | 2016 | FY2016 | 10-15 | APPOINTED OFFICIALS | Appointed town officials | one appointed position/member | empty | no | messy | 180 | Header: 'TERMS ARE FOR ONE YEAR UNLESS OTHE… |
| monty_tech | 2024 | FY2024 | 118 | OUR SCHOOL COMMUNITY | Monty Tech member towns | one member town | empty | no | clean | 18 | 'Barre' is spelled correctly this year (FY2… |
report_anomalies archive provenance 521 rows 2011–2025one row per anomalyThings found while reading the annual reports that need a person: a total that does not tie, a heading that moved, a column that vanished.
| column | type | what it is |
|---|---|---|
fy | INTEGER | Fiscal year, ending 30 June. FY2026 runs 1 July 2025 to 30 June 2026. year INTEGER everywhere except grant_award/grants_history (a multi-year ESSER award) and rate_register (one rate with no year). |
edition | TEXT | Which annual town report the row was read from, as that report names itself. FY2016 has TWO editions — the report and an addendum. Summing on fy rather than edition counts that year twice. |
document | TEXT | The source file the figure was read from. |
pages | TEXT | Which pages of the source this covers. |
table | TEXT | Which table this row describes. |
kind | TEXT | What sort of row or record this is. Meaning differs by table — see the per-table entry. |
source | TEXT | Where the figure came from, as the extractor recorded it. A loose reference — a filename — not a resolved address. |
detail | TEXT | not described yet |
First 3 rows, in rowid order:
| fy | edition | document | pages | table | kind | source | detail |
|---|---|---|---|---|---|---|---|
| 2016 | FY2016 | 4123-fy-2016-annual-town-report.pdf | empty | empty | note | surprise | The fire department publishes a genuine wor… |
| 2016 | FY2016-addendum | 4122-fy-2016-annual-town-report-addendum.pdf | 9-12 | Collection of taxes -- receivables summary … | unreadable / OCR damage | table note | The main report's pp47-49 print the header … |
| 2020 | FY2020 | 4127-fy-2020-annual-town-report.pdf | 40-41 | Trust funds fiscal year 2020 summary | unreadable / OCR damage | table note | Here the table is transposed into column ru… |
table_semantics archive provenance 138 rowsone row per table in this databaseThis page's own source. One row per table: its role, whose money it is, how finely it resolves money, its grain, what it holds, and what goes wrong if it is used carelessly.
Self-describing, and checked both ways: a table with no row here fails the build, and a row naming a table that no longer exists fails it too.
| column | type | what it is |
|---|---|---|
table_name | TEXT | Which table this row describes. Named table_name rather than table because table is an SQL reserved word and this table exists to be queried. |
role | TEXT | What kind of table it is: fact, dimension, extract, classification, provenance or derived. Facts carry the measurements. Everything else describes, extracts, classifies or checks them. |
scope | TEXT | Whose money or whose subject the table is about: school, town, both, state or archive.both is not a hedge — the ledger and the chart of accounts genuinely carry every department, and splitting them would be inventing a division the source does not make. |
tier | TEXT | How finely the money is resolved: 1 totals, 2 categories, 3 accounts. Blank where the table is not about money. From the join map. Tier 1 answers what was appropriated and what is left; tier 2 which category is over; tier 3 what one account spent. The tier below 3 — which revenue paid which expense — no report reaches. |
grain | TEXT | What one row of this table represents. The field that decides whether two tables can be joined or summed. |
what_it_answers | TEXT | The question one row of this table answers. |
caution | TEXT | What goes wrong if this is used without knowing the above. Every entry here was written after getting it wrong at least once. |
default_query | TEXT | The query the schema page's modal opens this table with. Set only where a bare SELECT is unhelpful — a fact table keyed on a code shows numbers with no words until its dimension is joined back. |
First 3 rows, in rowid order:
| table_name | role | scope | tier | grain | what_it_answers | caution | default_query |
|---|---|---|---|---|---|---|---|
| special_revenue_read | fact | both | 1 | one row per fund per year | The special revenue schedule READ from the … | A figure read off an image is a READING, no… | SELECT fy, page, [group], fund, forward, re… |
| dese_sped_program | fact | school | 2 | one row per district per indicator category… | What the students with disabilities are: di… | `indicator_level` is `total` or `member` an… | SELECT fy, indicator_category, indicator, i… |
| receivables_reconciliation | register | town | empty | one row per year, per document | Which years of the receivables table publis… | THE ONLY CHECK IN THIS ARCHIVE THAT TESTS A… | empty |
v_provenance archive view 40 rowsone row per source document per kind of factWhich DOCUMENT every money fact came out of, and how many rows it produced: the ledger rows, the budget figures and the workbook figures, each grouped by doc_id and joined to the document's archive path, what produced its figures (basis) and whether our copy still matches the publisher's (copy_state). The answer to 'where did this number come from' at the document level.
A count of ROWS, not of dollars -- a document with 1,148 figures is not therefore more authoritative than one with 12. basis is rule 13a's distinction (a printout from the accounting system versus a sheet somebody assembled) and it is what decides how much weight a figure carries, not the row count. copy_state is NULL where verify_source_copies.py has not checked that document. Covers the three money tables only; datasets extracted from the annual reports get their provenance from dataset-provenance.csv instead.
| column | type | what it is |
|---|---|---|
fact | TEXT | not described yet |
doc_id | TEXT | The archive path of the document this row's figures came from. Every fact row carries one. A figure that cannot name its document is not loaded. |
path | TEXT | Where our copy lives in the archive. |
basis | TEXT | Whether a figure is published, contractual, statutory, our measurement or our assumption. |
copy_state | TEXT | not described yet |
rows | TEXT | How many rows the extract produced. count |
No rows. That is the honest state of this table, not a load that failed — see its entry in SCHEMA.md.
Grouped by whose money it is, because that is the question people arrive with. Two other facets ride along as badges on every table.
| badge | what it tells you |
|---|---|
| Tier 1 · totals | What was appropriated and what is left, by department. Not which category, not which school, not which fund paid. |
| Tier 2 · categories | Whether
guidance, special education or transport is over — and whether the town's books and the
district's budget agree on a code. Not which school inside a category: names truncate at
ten characters, so MS GUIDANC and HS GUIDANC are both 2710. |
| Tier 3 · accounts | What one account spent, and how much came in per fund. |
| fact dimension | How the table is built. Facts carry the figures; dimensions say what a key means and are joined to, never summed. |
| the spine | The three grains everything else describes, extracts or checks. |
There is a tier below 3, and no report reaches it. Which revenue paid which expense. That is the grey edge in the join map, and it is why this archive measures appropriations and says so.
None of these raises an error when omitted. Each returns a number that is the sum of two different things, which is why every one of them has been got wrong here at least once.
| column | in | what happens if you omit it |
|---|---|---|
status | annual report extracts | checked, check failed, no check. Summing across them mixes verified figures with unverified ones. |
level | account, ledger_snapshot | department roll-ups sit in the same table as their own detail. Summing both adds the budget to itself. |
account_type | account | Revenue is stored NEGATIVE. Omitting it once made the town’s whole budget compute as minus $997,871. |
period | ledger_snapshot | Two periods are two different MUNIS reports of the same year, not two halves of it. |
stage | budget_figure | proposed, settled, actual. Rule 1: a rate measured across stages is partly growth and partly the step between them. |
variant | budget_figure | FY27 has four whole budgets — Balanced, Core, Level Service, Restoration. Without this you sum all four. |
v1 … v8 | annual report extracts | ORDINALS, not column names: the first column of THAT PAGE that held figures. Summing v1 down a run adds one page’s APPROPRIATED to another’s TOTAL EXPENDED. |
And one that is now fixed. fy was stored as TEXT in 44 tables and INTEGER in 18, so WHERE fy = 2023 answered against a third of the database and returned zero rows, with no error, against the rest. It is INTEGER everywhere now except three documented exceptions, and check_fy_types in build_db.py fails the build if a new table arrives without it.
Two databases, and they are not always the same one.
Everything printed on this page — row counts, samples, coverage — is read from the LOCAL
sources/data/lunenburg.db when the page is built. Open full table
queries {api_base}, a copy pushed to Cloudflare D1 that can lag behind.
Point it elsewhere with ?api=<base-url> on this page's own URL, or set
LUNENBURG_API before building.
If a table opens empty, or the button reports that it does not exist, that copy has not
been pushed yet: python3 scripts/sync_d1.py. This is stated rather than
hidden because two sources that usually agree are the ones that mislead when they
stop.
A view is the safe way to ask a question that needs two tables. Each one carries the splitting columns above in its own WHERE, so it cannot be got wrong the way a hand-written join can.
| view | columns |
|---|---|
v_appropriation_vs_spend | fy, fund, dept, name, level, original, transfers, revised, expended, encumbered, surplus, surplus_pct, doc_id |
v_budget_disagreement | fy, stage, variant, line_key, label, source, value, is_kept, spread, kind |
v_budget_scenario | line_key, label, fy, stage, variant, value, doc_id |
v_burn | dept, name, fy, period, year_elapsed, spent_share, committed_share, pace_gap, available_now, doc_id |
v_function_budget_vs_ledger | function_code, fy, period, ledger_revised, ledger_expended, ledger_encumbered, accounts, budget_lines, doc_id |
v_fund_year | fund, name, kind, restriction, fy, period, revenue, spent, closing_balance, doc_id |
v_interfund | fund, fund_name, org, object, name, fy, period, budgeted, revised, received, still_to_come, pct_received, doc_id |
v_line_budget_vs_actual | line_key, label, fy, settled, proposed, actual, documents_disagree |
v_provenance | fact, doc_id, path, basis, copy_state, rows |
v_revenue | fund, fund_name, org, object, name, fy, period, budgeted, revised, received, still_to_come, pct_received, doc_id |
v_revenue_classified | fy, period, fund, account, class, class_label, budgeted, received |
v_spending_classified | fy, period, dept, department, control, control_how, voted, revised, expended |
v_staff_roster | fy, school, page, name, role_raw, grade_or_dept, position_legacy, role_category, role_grade, classified_by, document |
v_state_aid | fund, fund_name, org, object, name, fy, period, budgeted, revised, received, still_to_come, pct_received, doc_id |
v_transfer_history | dept, name, fy, period, original, transfers, revised, moved_since_last, doc_id |
v_workbook_budget_vs_actual | line_key, row, fy, budget, actual, under_budget |
Read from money_gaps, so this list is data rather than a thing somebody remembered to write down. Each is a question the published documents do not close.
| side | what is missing | why it cannot be answered |
|---|---|---|
| comparison | Do two districts put the same purchase on the same side of the line, so that their per-pupil figures compare like for like? | DESE’s per-pupil figure counts functions 1000-5000 and leaves out capital (7000) and debt service (8000); its expenditures-by-function file carries no 6000, 7000 or 8000 row for any district, so no district’s figure contains capital. But the line between counted and capital is a coding rule, and DESE’s FY2025 End of Year Report form draws it: instructional equipment, “including vocational equipment and science lab equipment irrespective of unit cost”, goes in 2420 and is counted; non-instructional equipment over $5,000 and extraordinary maintenance over $150,000 a project go in 7000 and are not. Whether every district applies that rule the same way cannot be seen: DESE publishes each district’s reported totals, not the purchases behind them. So a difference between two districts on an equipment or maintenance line may be spending, or may be coding. — closes: each district’s own End of Year Financial Report workbook with its 7000 schedule, lease schedule and depreciation schedule, and DESE’s desk-review or audit findings on them. |
| comparison | How is a regional school district’s assessment apportioned between its member towns, and what does each town actually appropriate for schools? | NARROWED 26 September 2026. This used to say a regional town could not be compared at all. That was asking at the wrong level: Chapter 70 is computed per MUNICIPALITY whatever district its children attend, so DESE publishes, for all 351 towns, the foundation budget for that town’s own children, the contribution the town is REQUIRED to make and by subtraction what the state adds — Ashby is required to raise $7,819 per child, Groton $10,748, Lunenburg $8,571. What is still unpublished is the step between: how the district divides its assessment among members, and what each member town actually appropriates, which may be well above the required minimum. — closes: each regional district’s annual assessment schedule, voted by its member towns’ meetings and filed with DESE. |
| comparison | Which towns does Lunenburg consider comparable to itself, for tax and budget purposes? | This project compares Lunenburg with five peer towns and that set is OURS. Nothing the town has published names a cohort: a 2023 Finance Committee minute cites "the 8 communities that were surveyed" for a salary study and never lists them, and no budget document, capital plan or assessors’ report names a comparison group. So every "compared with similar towns" statement on either side rests on a set nobody has agreed. — closes: the eight-community list behind the 2023 salary survey, which the Town Administrator or the bargaining unit that commissioned it holds. |
| curriculum | How many classes ran in each subject at Lunenburg Middle School and Lunenburg High before SY2017 | Every trend on /what-courses-actually-ran is read inside an era, because for four years — SY2013 to SY2016 — Thomas C Passios was closed and every remaining school held one grade band higher, with grade 8 in the high school building. Four subjects move by more than ten points of participation into those years and back out of them without anything changing about what a ninth to twelfth grader was offered. So the file cannot say what the schools as they are now offered before SY2017 — the schools as they are now did not exist. — closes: nothing published can. DESE files by school and the schools changed; the question is only answerable by grade, and the state’s class-size collection carries no grade inside a school. |
| curriculum | How many classes ran in each subject at the two elementary schools | The counts swing by a factor of two between adjacent years with no matching change in enrolment, and two school-years report an average class size no primary school can have — 87.1 at Lunenburg Primary in SY2011 and 36.5 in SY2022, against a maximum of 24.1 everywhere else. The subject coding of a self-contained classroom is not stable enough to trend, so the elementary half of the district cannot be read at all. — closes: DESE’s Student Course Schedule submission detail for Lunenburg, which carries the course records behind the published aggregate. |
| curriculum | What is taught in the fifth of Lunenburg High sections DESE files as Miscellaneous | 51 of the high school’s 247 sections in SY2025, averaging 4.9 students, in a subject area DESE gives no course names for — and the single largest mover in the section count since SY2017. The only public account of one is a student describing a new elective with four on the register and eight on the first day. — closes: The LHS master schedule by year, or the district’s own Student Course Schedule submission to DESE, which holds the course records the published aggregate is built from. |
| curriculum | Which courses a Lunenburg High student could actually choose from, in any year | DESE publishes sections by SUBJECT AREA and never by course, so an elective ending is invisible inside a subject total that rose — a student told the School Committee on 7 February 2024 that Music Tech would be "non-existent", and the high school's Arts sections went from 24 that year to 25 the next. Both statements are true and this archive cannot hold them together. — closes: The district’s own Program of Studies for each year, which the High School Principal handed the School Committee on 6 March 2024, and the LHS master schedule presented to the School Committee on 4 December 2024. Neither is published. |
| curriculum | Why fewer Lunenburg High students take a history or a language course than before SY2020 | Three DESE series move together for both subjects — teacher FTE, student places and the share of the school taking one — and the fall in each begins in the years the school closed and reopened. A staffing decision, a change in what the timetable allowed, and students choosing differently all fit the same three numbers, and the state files nothing that separates them. — closes: the district’s course-request tallies for each year — what students asked for beside what ran. The High School Principal told the School Committee on 6 March 2024 that courses are whittled away once student choices are entered, so the tally exists at the moment the decision is made and is not published. |
| document_wanted | DESE End of Year Financial Report | NARROWED 5 October 2026. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include the district's FY2023 and FY2024 End of Year Financial Report WORKBOOKS (eoy23 and eoy24, district 162, Schedules 1, 3, 18, 19 and 20), which separate spending by fund. Both are working copies passed on from a Select Board member's records request, not the reports as filed: the FY24 grant columns do not match DESE's published file. The filed reports remain the remedy. Published by the state. — closes: Separates district spending by FUND, which is the one thing the town’s budget documents never show. |
| document_wanted | How the Montachusett regional agreement apportions costs among its member towns | The apportionment method is now on the record twice: the district printed it in Lunenburg’s FY2017 annual town report — four parts, with transportation and other operating divided by each town’s 1 October enrollment share and capital divided by each town’s school-attending children in grades 1 to 12 — and DESE’s own apportionment sheet, reprinted in the FY2027 budget presentation, shows the required-contribution part split between a town’s two districts by foundation-budget share. WHAT IS STILL MISSING IS THE INSTRUMENT. A budget book states current practice; the regional agreement is what binds it, and it is the document that would say whether the ratios can be changed, how bonds are apportioned and over what term, what a member town’s withdrawal would require, and what amendments have been made. Asked at the Finance Committee on 5 February 2026 whether the agreement was indefinite or could be renegotiated, the Superintendent-Director said he believed it was ongoing and that amendments were very rare. A recollection at a meeting is not the instrument. — closes: the Montachusett Regional Vocational Technical School District regional agreement and its amendments, filed with the Department of Elementary and Secondary Education and held by the district and by each member town’s clerk. |
| document_wanted | The Cherry Sheet itself — what the state told Lunenburg to expect, receipt by receipt | This archive holds no Cherry Sheet for any year. The Cherry Sheet is the state’s own statement of estimated aid and assessments to a Massachusetts town, and it is what a tax rate is set on. Without it the only measurement of aid estimate error this project can make is one net line on the Division of Local Services free cash proof — Excess/Shortfall Cherry Sheet Receipts (CL#8) — which lumps Chapter 70, Unrestricted General Government Aid, the abatement reimbursements and every other receipt into a single figure. So a year that came in $390,814 short can be reported as short and cannot be reported as short in anything. — closes: DLS Cherry Sheet CS 1-ER (estimated receipts) and CS 1-EB (estimated charges) for Lunenburg, FY2021 to FY2027. |
| document_wanted | The Town Manager’s revenue apportionment worksheet | Seen once; we do not hold it. — closes: Documents the convention by which general-fund revenue is presented as split across departments. It cannot make the edge traceable — nothing can — but it makes the convention citable. |
| document_wanted | The period 13 ledger | The year-end close. — closes: Reconciles FY2026 properly; period 12 is used for now. |
| document_wanted | The town’s Chapter 32B enrollment schedule | NARROWED 5 October 2026. The Finance Committee's general fund history (FY2010-FY2025, sources/data/gl-history.csv) carries a separate SCHOOL RETIREES health insurance line in the town's budget in every year FY2022-FY2025, original budget 1,149,925 rising to 1,411,181 -- so the RETIREE split is printed in four years, not two. The split of active employees' insurance between town and schools is still not printed. Not published anywhere in this archive; the town must hold one to administer the plan and set premium shares. — closes: Splits every insurance account between the town and the schools, in every year, instead of in the two years the split happens to be printed. |
| document_wanted | WRRS annual actuarial valuation, by member unit | Published by the retirement system. — closes: Sizes the school share of the $2.39M pension assessment. |
| document_wanted | Where bus fee receipts are booked | A revenue account, a fund, or a statement that they are netted before booking. — closes: The fee schedule is published and verified; STUDENTBUS shows zero. A charged fee with no observable destination is the clearest single gap in this model. |
| document_wanted | Which TABLE in a document is ledger-backed, rather than which document is | document-basis.csv carries one basis per document — 322 paths, 322 rows — and that granularity is wrong for the annual town reports, which are the source of a great deal of what this project publishes. The FY2022 annual town report is classified forward, and it contains both 'Combined balance sheet, all fund types and account groups, 30 June 2022' and 'FY 2023 Omnibus Budget (as voted)'. A closing statement prepared by the Town Accountant and next year's budget, in one PDF, under one label. All twelve annual town reports carry forward, which would make the special revenue schedule and the combined balance sheet look like budget documents when each ties to its own printed totals every year. Nothing published rests on this being wrong, because those datasets are validated by their own control totals rather than by the basis label — but the column cannot be used to answer 'is this figure ledger-backed', which is what it looks like it answers. — closes: nothing external. This is ours to fix: a basis per table family in annual_report_catalogue, set where the reconciliation is already known, rather than one per document in document-basis.csv. |
| document_wanted | glytdbud-expense for the special revenue funds | NARROWED 5 October 2026 for the SCHOOL funds in FY2024. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include the school department's FY2024 period 13 glytdbud report covering every school fund, grants and revolving funds included, at org and object level. The town's own special revenue funds are not in it. The identical report the town already runs for the general fund and for each of the four enterprise funds, pointed at funds 13xx/22xx/26xx–29xx instead. — closes: Turns every restricted edge above from presumption into traced fact — athletics, lunch, circuit breaker, extended day, and every grant. |
| extraction | Can we trust gross wages, name by name enough to chart what the town pays its people in total? | 0 of 3,547 rows in report_gross_wages are reconciled to a total the document itself prints — 0 failed that check and 3,547 were never checked. The figures are read and published, so a query returns them and they look confident; only the status column says otherwise. Every page was surveyed before anyone tried: of 16 years, 6 need real PDF geometry rather than text, 9 are messy and 1 are clean — mirrored layouts, rows offset from their own names, a missing fund-name column, and column counts that change between years. NO year of this family prints a grand total, so there is no arithmetic on the page to foot a row against and no extractor can supply one. — closes: nothing we can build. What stands in for a total here is the PAIRING and the order the list prints itself in, both of which prove the assignment and say nothing about the digits; a reconcilable figure needs a total from the Town. The per-year survey is in sources/data/extraction-plan.csv. |
| extraction | Can we trust the capital projects and what they cost enough to chart what the town has built and what it paid? | 48 of 618 rows in report_capital_projects are reconciled to a total the document itself prints — 544 failed that check and 26 were never checked. The figures are read and published, so a query returns them and they look confident; only the status column says otherwise. Every page was surveyed before anyone tried: of 19 years, 2 need real PDF geometry rather than text, 9 are messy and 8 are clean — mirrored layouts, rows offset from their own names, a missing fund-name column, and column counts that change between years. 16 of 19 years do print a grand total to reconcile against, so the anchor exists. — closes: a geometry-aware extractor for this table family, tied to the printed total on each page. The per-year survey is in sources/data/extraction-plan.csv. |
| extraction | Can we trust the debt schedule enough to chart what the town owes and when it falls due? | 75 of 366 rows in report_debt are reconciled to a total the document itself prints — 99 failed that check and 192 were never checked. The figures are read and published, so a query returns them and they look confident; only the status column says otherwise. Every page was surveyed before anyone tried: of 43 years, 11 need real PDF geometry rather than text, 13 are messy and 19 are clean — mirrored layouts, rows offset from their own names, a missing fund-name column, and column counts that change between years. 40 of 43 years do print a grand total to reconcile against, so the anchor exists. — closes: a geometry-aware extractor for this table family, tied to the printed total on each page. The per-year survey is in sources/data/extraction-plan.csv. |
| extraction | Can we trust the stabilization and trust fund balances enough to chart how much the town holds in reserve, and how that has moved? | 12 of 644 rows in report_trust_funds are reconciled to a total the document itself prints — 418 failed that check and 214 were never checked. The figures are read and published, so a query returns them and they look confident; only the status column says otherwise. Every page was surveyed before anyone tried: of 17 years, 10 need real PDF geometry rather than text, 5 are messy and 2 are clean — mirrored layouts, rows offset from their own names, a missing fund-name column, and column counts that change between years. 16 of 17 years do print a grand total to reconcile against, so the anchor exists. — closes: a geometry-aware extractor for this table family, tied to the printed total on each page. The per-year survey is in sources/data/extraction-plan.csv. |
| extraction | Can we trust what Town Meeting appropriated, article by article enough to chart what the town voted to spend, year over year? | 311 of 5,345 rows in report_appropriations are reconciled to a total the document itself prints — 5,034 failed that check and 0 were never checked. The figures are read and published, so a query returns them and they look confident; only the status column says otherwise. Every page was surveyed before anyone tried: of 30 years, 1 need real PDF geometry rather than text, 16 are messy and 13 are clean — mirrored layouts, rows offset from their own names, a missing fund-name column, and column counts that change between years. 30 of 30 years do print a grand total to reconcile against, so the anchor exists. — closes: a geometry-aware extractor for this table family, tied to the printed total on each page. The per-year survey is in sources/data/extraction-plan.csv. |
| extraction | How many financial pages do the annual town reports actually contain? | The page tracker's universe is built from what RECOGNITION found: a page is listed only if fifteen money figures were recognised on it. FY2024 page 189 prints ninety-six wages and recognition found ZERO, so it was not unfinished, it was ABSENT -- and five of the eight pages of that wage run were. FY2024 was reported as 22 financial pages and is at least 28. A page a person has now read is added to the map, so the eight are on it; nothing finds the pages nobody has looked at yet, and the same failure is unmeasured in the other fifteen reports. A screen for candidates -- many boxes, almost no recognised money -- returns about 1,800 pages archive-wide, but it catches every page of ordinary prose too and is a finding aid rather than a count. — closes: nothing from the Town. Every page is already held; what is missing is somebody looking at the ones recognition could not read. |
| extraction | RESOLVED 2 October 2026 — PDF page 51 of the FY2019 debt schedule was never absent from the tracker, and it is now read | CLOSED, AND BOTH HALVES OF THE ORIGINAL CLAIM WERE WRONG. The tracker held 2019,51,debt,3,unread,... — the page was unread, not absent, so this row was a statement about our reading of the tracker rather than about the archive (learning-loop entry 12). And it is not "the missing middle": p51 carries the TOTAL column every issue is proved against, plus the second half of the fiscal years. Its figures=50 was a RECOGNITION count, low by 2.7x — the page prints 136. All four pages (49-52) were read off their own JPEG2000 bitmaps at 150 dpi on 2 October 2026: 879 figures, 34 files, 17 groups, four nested identities, and the printed corner closing on itself exactly — 46,568,549 + 18,922,925 = 65,491,474 and + 25,861 = 65,517,335. — closes: nothing further; the question was ours and it is answered. |
| extraction | What cash did the Treasurer hold in the years whose column does not foot to the page’s own printed total? | 1 page of the Treasurer’s cash on hand in the annual town reports is READ AND REFUSED: an extractor reached it, could not tie the rows to a total the page itself prints, and published nothing. So a query about the Treasurer’s cash on hand returns silence for FY2019, and the silence is ours rather than the town’s — every one of these pages IS printed. Refusals and their reasons are in sources/data/extraction-blocked.csv; the pages are listed in sources/data/annual-report-pages.csv where state is refused. Re-running a model over them returns the same refusal and pays for it. — closes: the column ruler in the treasurer’s-cash reader; the page prints the total the column must reach, and sources/data/extraction-blocked.csv records both figures. |
| extraction | What did the Town have receivable at 30 June 2020, line by line, across all three pages of the summary? | receivables.csv holds 43 rows for FY2020 -- 31 on annual-report page 47, 12 on page 48 and NONE on page 49 -- while receivables-reconciliation.csv records the same run as 87 rows and says it ties to its printed GRAND TOTAL on all eight columns. Page 47 alone prints about 44 rows. Page 49 was read by eye on 2 October 2026 and all eleven of its rows (ten detail plus the run's GRAND TOTAL) close on the identity the page states, so the page is readable and the extractor's refusal -- no single sign convention proves the page (2 of 5 rows at best) -- is a statement about the instrument. Summing the 43 published rows plus the ten read from page 49 gives $375,657.49 forward against a printed GRAND TOTAL of $9,108,033.04, so the published extract is short of what the pages print by most of the table. WHAT THIS DOES NOT ESTABLISH: whether the missing rows were dropped by the reader or were never published -- nobody has read pages 47 and 48 by eye. -- closes: nothing from the Town is needed. The remedy is ours: read pages 47 and 48 of the FY2020 annual town report the way page 49 was read, and foot all three pages to the printed GRAND TOTAL. |
| extraction | What did the town owe on each bond issue, principal and interest, in the years whose repayment schedule cannot be read? | 1 page of the debt repayment schedule in the annual town reports is READ AND REFUSED: an extractor reached it, could not tie the rows to a total the page itself prints, and published nothing. So a query about the debt repayment schedule returns silence for FY2011, and the silence is ours rather than the town’s — every one of these pages IS printed. Refusals and their reasons are in sources/data/debt-repayment-detail-refused.csv; the pages are listed in sources/data/annual-report-pages.csv where state is refused. Re-running a model over them returns the same refusal and pays for it. — closes: a reader of scripts/extract_debt_tables.py measuring the year header and splitting the merged year boxes by the pitch the page itself sets, then publishing only the columns where PRINCIPAL + INTEREST foots to the printed TOTAL for that issue. |
| extraction | What did the town pay its people, name by name, in the years whose payroll listing produced nothing? | 1 page of gross wages, name by name in the annual town reports is READ AND REFUSED: an extractor reached it, could not tie the rows to a total the page itself prints, and published nothing. So a query about gross wages, name by name returns silence for FY2012, and the silence is ours rather than the town’s — every one of these pages IS printed. Refusals and their reasons are in sources/data/gross-wages-refused.csv; the pages are listed in sources/data/annual-report-pages.csv where state is refused. Re-running a model over them returns the same refusal and pays for it. — closes: a Vision RE-READ of the page, which is free and is what closed FY2019: its seven pages held 871 boxes in our cache against 1,753 on a re-read, and two of them held the surname column and no money at all. The refusals that survive a re-read are scan defects rather than layout — FY2019 p200 loses a 21-row band that produced no box at scale 2, 3, 4, 5, 6 or 8 — and those close only with a better copy of the page from the Town. Note that the town stopped printing the department beside each name after FY2016, so these pages bound the question rather than settling it. |
| extraction | What did the town receive in FY2023, receipt line by receipt line? | The FY2023 receipts page -- annual report page 25 -- cannot be read. It is a photograph embedded at 93 dpi, and it packs about 150 line items across three column-pairs of a landscape page, so the digits are below the resolution of the stored image: 588 and 568, 405 and 465, 009 and 000 are not distinguishable at any magnification, because the detail is not in the file to magnify. Reading the SUMMARY OF RECEIPTS block gives a total $20 from the printed GRAND TOTAL of $45,549,438.56, consistent with exactly one misread digit, and choosing the digit that makes it close would be fitting the answer to the check. For contrast the same report stores page 50 at 183 dpi and page 53 at 156 dpi, and both are legible. RE-CHECKED 1 October 2026 off the page's own embedded bitmap rather than off the recognition cache, with the grid measured by projection and the amount columns rendered at 20x: the labels are legible and the figures are not, so what the town received money FOR in FY2023 is readable and how much is not. And a better scan is not a remedy that exists. Of the two publisher addresses on record, DocumentCenter/View/4131 now returns HTTP 404 and ArchiveCenter/ViewFile/Item/160 returns 18,274,143 bytes -- byte-for-byte the copy this archive already holds. — closes: the Treasurer's own FY2023 receipts file, or a MUNIS revenue report for FY2023; this archive holds neither, and no MUNIS revenue export for any year. |
| extraction | What does each individual debt issue cost the town in a given year, and which of them fall off when? | FY2022 NO LONGER BELONGS TO THIS GAP: its schedule was read by issue on 29 September 2026 -- 14 borrowings against 25 fiscal years, 184 issue-years, each closing on its own printed TOTAL row and reconciling to the GRAND TOTAL block on pages 46 and 48. The FY2023 AND FY2024 annual reports' debt repayment schedules each print about fifty debt issues against twenty-three fiscal years, roughly 1,200 figures, and only its GRAND TOTAL block has been read: principal, interest, principal and interest, MWPAT admin fees and total debt, FY2025 to FY2047, which foot to the schedule's own TOTAL column. So the town's debt SERVICE by year is established and the COMPOSITION of it is not — a resident cannot see which bond ends in which year, or what the Meadow Woods water general obligation costs on its own. — closes: nothing further is needed from the Town. The figures are printed on page 53 of the FY2023 report and page 37 of the FY2024 report and have simply not been transcribed. |
| extraction | What is on the pages a model read and returned no rows for? | 2 pages of pages with no extractor of their own in the annual town reports are READ AND REFUSED: an extractor reached them, could not tie the rows to a total the page itself prints, and published nothing. So a query about pages with no extractor of their own returns silence for FY2013, FY2017, and the silence is ours rather than the town’s — every one of these pages IS printed. Refusals and their reasons are in sources/data/read-and-refused.csv; the pages are listed in sources/data/annual-report-pages.csv where state is refused. Re-running a model over them returns the same refusal and pays for it. — closes: reading the refusal note in sources/data/annual-report-reads/ and deciding whether the page holds a table at all — some of them correctly do not. |
| extraction | What was appropriated on the supplementary pages that do not foot to their own subtotals? | 1 page of what Town Meeting appropriated in the annual town reports is READ AND REFUSED: an extractor reached it, could not tie the rows to a total the page itself prints, and published nothing. So a query about what Town Meeting appropriated returns silence for FY2017, and the silence is ours rather than the town’s — every one of these pages IS printed. Refusals and their reasons are in sources/data/appropriations-supplement-refused.csv; the pages are listed in sources/data/annual-report-pages.csv where state is refused. Re-running a model over them returns the same refusal and pays for it. — closes: the subtotal identity those pages state about themselves, applied per column. |
| extraction | What was the town owed, account by account, in the years whose receivables page will not foot? | 3 pages of what is owed to the town in the annual town reports are READ AND REFUSED: an extractor reached them, could not tie the rows to a total the page itself prints, and published nothing. So a query about what is owed to the town returns silence for FY2013, FY2017, FY2020, and the silence is ours rather than the town’s — every one of these pages IS printed. Refusals and their reasons are in sources/data/receivables-refused.csv; the pages are listed in sources/data/annual-report-pages.csv where state is refused. Re-running a model over them returns the same refusal and pays for it. — closes: scripts/extract_receivables.py made to sum to the totals those pages print; the pages are legible and they grade the extractor. |
| extraction | Which of the town's two FY2023 statements of what the special revenue and enterprise funds held is right? | The FY2023 combined balance sheet gives special revenue fund equity as 6,131,303.68 and enterprise fund equity as 3,812,502.24, together 9,943,805.92. The special revenue schedule in the SAME annual report prints a grand total carried forward of 10,031,099.78. They are 87,293.86 apart. The comparison ties to the cent in FY2011, FY2013, FY2019 and FY2022, and the balance sheet's own arithmetic is complete -- every column foots to its own printed totals and liabilities plus equity equals assets -- so this is two published tables disagreeing and not a reading error. — closes: the Town Accountant's FY2023 trial balance, which would say which of the two the books support. |
| held | How much the Special Education Reserve Fund holds, and what the law lets it do | Special Town Meeting on 18 November 2025 accepted Mass. General Laws chapter 40 section 13E and established a Special Education Reserve Fund for unanticipated or unbudgeted special education, out-of-district tuition and transportation costs (FY2025 annual town report). The Town Manager told the Select Board on 7 October 2025 that spending from it needs a majority of both the School Committee and the Select Board and that its balance may not exceed 2% of annual net school spending. The statute itself is not in this archive, so the cap and the vote are as described at a meeting; and no balance, deposit or withdrawal is in any ledger held here. The School Committee's agenda for 7 October 2026 carries an item to vote an amount to fund it. — closes: the text of chapter 40 section 13E (malegislature.gov, public); and the Treasurer's balance of the fund with every vote to fund or spend it, from the Town Accountant. |
| held | What spending the general Stabilization Fund would do to the town’s borrowing | The town’s reserves are one of the things a rating agency weighs, and this archive holds NO bond rating for Lunenburg, no rating report, and no official statement from any bond issue — so what the rating is, what any agency has said about the reserves, and what a downgrade would cost per million borrowed are all unknown here. The question is live and has been asked in public: at the Finance Committee on 13 March 2025 a resident asked whether not contributing to OPEB affects the town’s bond rating, and the minutes record the question and no reply. Until this closes, any sentence about "what the rating agencies would think" is a hypothesis, including on /analysis/stabilization-option, which says so. — closes: the official statement for the town’s most recent bond issue, and the rating agency report that accompanied it, both of which the Treasurer holds. |
| held | What the $102,000.00 is that the FY2024 enterprise balance sheet classifies two ways at once | The Combining Balance Sheet - Enterprise Funds in the FY2024 annual town report — printed twice, on printed pages 21 and 28, identically — prints 'Reserved for expenditures' as 400,000.00 in the Sewer column and 502,000.00 in the Totals (Memorandum Only) column, and prints 'Unreserved retained earnings' as 2,973,842.15 in the memorandum column where the four fund columns (1,813,817.53 Sewer, 51,333.93 Water, 181,853.82 Solid Waste, 1,028,836.87 PEG Access) add to 3,075,842.15. The memorandum column is $102,000.00 high on the first line and $102,000.00 low on the second, so the two cancel and Total Fund Equity (3,483,633.65), Total Assets, the identity and the sheet's own printed PROOF row all still tie in every column — compensating errors, invisible to any check that reads only totals. WHAT IS NOT ESTABLISHED: which presentation is right, or what the $102,000.00 is. A reservation sitting in a fund column that prints blank, a memorandum column keyed to a different worksheet row, and a reclassification made only in the total column all fit the same signature, and nothing on the page distinguishes them. These are ratepayer funds; nothing here is general-fund money. — closes: the Town Accountant's FY2024 trial balance for the enterprise funds, which would state the reserved and unreserved balance of each fund separately. |
| held | What the $87,293.86 is that the FY2023 annual report states twice and differently | Two tables printed in the same FY2023 annual town report state the money held in special revenue and enterprise funds, and they disagree. The combined balance sheet on printed page 24 gives TOTAL FUND EQUITY of $6,131,303.68 for SPECIAL REVENUE and $3,812,502.24 for ENTERPRISE, $9,943,805.92 together. The special revenue schedule in the same report prints a GRAND TOTAL carried forward of $10,031,099.78. The difference is $87,293.86, where FY2011, FY2013, FY2019 and FY2022 agree to the cent. It is not a misreading: the FY2023 page was transcribed and every column foots to its own printed TOTAL ASSETS, TOTAL LIABILITIES and TOTAL FUND EQUITY, the accounting identity holds in all six columns, and the long-term debt mirror agrees. So FY2023 is transcribed and deliberately NOT written into the dataset, which is why the combined balance sheet here stops at FY2022 while the special revenue schedule runs to FY2023. One explanation has been tested and RULED OUT: the fund 'Sale of Cemetery Lots' carried $87,308.09 in FY2023, within $14.23 of the gap, which suggested a fund counted in one statement and classified elsewhere in the other. It is not that — the same fund appears in the schedule in all thirteen years including the four where the two documents agree to the cent, so it is counted consistently and the near-match is a coincidence. What the difference IS remains unestablished; nothing here says which document is right, nor whether it is connected to the $17,861.24 of grant funds the town restated between the FY2022 and FY2023 reports. Those are two different amounts and nothing joins them. — closes: the Town's FY2023 trial balance or general ledger fund balances as of 30 June 2023, which would say which of its own two published tables the accounting system agrees with. |
| held | What the PEG Access enterprise fund actually held at 30 June 2025 | Three figures for the same fund on the same date appear in the same FY2025 annual town report and no document in this archive prints a line between any two of them. The PAC report's FY25 REVENUE vs EXPENSES table (printed page 60, pdf 64) gives an Ending Balance of $30,632, computed on its own face as Beginning Balance $208,772 less Expenses $178,140 -- and the prose beside it says the $208,772 was "the budget starting balance", so the ending balance is unspent spending authority rather than money. The Treasurer's Cash schedule in the same report prints Bartholomew- PEG Access Enterprise Fund 782,591.31$. The Combining Balance Sheet - Enterprise Funds (printed page 21, pdf 25) prints PEG Access Total Fund Equity of $1,072,661.74, against $1,028,836.87 the year before -- a rise of $43,824.87, where the statement's own revenue less expenses is $262,565 - $178,140 = $84,425. The two do not reconcile and nothing on either page relates them. WHAT IS NOT ESTABLISHED: which quantity any of the three is; a budget balance, a bank balance and a fund equity are three different things and the report labels none of them as such. -- closes: the Town Accountant's FY2025 year-end statement of revenues, expenditures and changes in fund balance for the PEG Access and Cable Related Enterprise Fund, which the annual report does not contain. |
| held | What the Sewer Reserve Capacity and Arts Lottery funds held at 30 June 2023 | The FY2023 annual town report prints each of these balances TWICE, in two different tables, and the two printings disagree. TRUST AND STABILIZATION FUNDS HELD BY OTHER BANKS (pdf page 49) gives SEWER RESERVE CAPACITY (UNIBANK) an ENDING CASH VALUE of $28,144.20 and ARTS LOTTERY (MMDT) $19,120.90. Treasurer's Cash as of 6/30/2023 (pdf page 48) gives Unibank Sewer Capacity Reserve Stabilization $28,144.50 and Mass Municipal Depository Trust (MMDT) Arts Lottery $19,121.07. NEITHER IS A MISREADING: each column foots to its own printed total to the cent -- page 49's eleven funds sum to the printed GRAND TOTALS of $2,363,536.23, and page 48's thirty-nine accounts sum to the printed Total Treasurer Cash of $27,244,162.79 -- so the report disagrees with itself by $0.30 and $0.17. Six other funds appear on both pages and match exactly, which is what makes the two the odd ones rather than the tables a different measure. WHAT IS NOT ESTABLISHED: which of the two each pair is. An ending cash value on a custodian's trust statement and a treasurer's cash balance are produced by different parties on different books and the report relates them nowhere, so the difference may be a posting date, an accrual, or a typing error in one of them, and nothing here can tell those apart. The amounts are small; the pattern is not, because these two tables are the only two statements of these balances the town publishes and they are printed in every annual report. -- closes: the Treasurer's year-end reconciliation of cash to the custodian's statements at 30 June 2023, which the annual report does not contain. |
| held | What the school grant funds held at 30 June 2024, 2025 and 2026 | Fourteen school funds -- circuit breaker, school choice, lunch, eight fee-funded revolving funds and three gift funds -- are carried from the annual report's 30 June 2023 balance through the MUNIS period-13 ledgers, and the result ties to the cent to the Town's March 2026 special revenue report for every one. The grant funds cannot be carried that way: the annual report names a grant by programme and year, MUNIS numbers it, and nothing published maps one to the other; and a reimbursement grant spends before it is paid, so one year's revenue less expense is not a change in what it holds. So the school total after 2023 covers the fourteen and not the grants. Measured in /analysis/sitting-on-money. — closes: a MUNIS fund balance report at period 13 for the school grant funds (26xx-29xx), FY2024 to FY2026, with each fund's opening and closing balance. |
| held | What the town held town-wide at 30 June 2024 and 30 June 2025 | The FY2024 and FY2025 annual town reports print NO combined balance sheet across all fund types and account groups — the schedule the reports carried every year from FY2011 to FY2023. In both editions the table of contents lists 'Balance Sheet for FY Ending June 30, 2024' at Page 21 and 'Balance Sheet for FY Ending June 30, 2025' at Page 21 respectively, and printed page 21 of each holds the Combining Balance Sheet - Enterprise Funds instead; FY2024 prints that enterprise sheet a second time on page 28, which is where its contents page says it should be. So for two consecutive years the only balance sheet the town published covers four ratepayer enterprise funds and says nothing about the general fund, special revenue, capital projects, trust and agency, or long-term debt. The consequence is that the general fund's cash, receivables, reserves and undesignated fund balance — the figures free cash is built out of — cannot be read for either year, and the balance_sheet dataset stops at FY2023 for that reason rather than by choice. WHAT IS NOT ESTABLISHED: whether the town-wide sheet was produced and dropped in layout or never produced; nothing in either report says. — closes: the Town Accountant's year-end balance sheet submitted to the Division of Local Services for FY2024 and FY2025, or the town's audited financial statements for those years. |
| held | What the town’s own special revenue funds held at 30 June 2024, 2025 and 2026 | The annual town reports print every special revenue fund's balance at 30 June, and this project has read and proved FY2011 to FY2023 -- forward, receipts, disbursements and carried, every row and every printed GRAND TOTAL tying (special-revenue-read.csv). FY2024 and FY2025 print a DIFFERENT table, a balance detail with no receipts or disbursements, no row identity and no stable fund key: it is printed and has not yet been read into a dataset, which is our gap rather than the town's. FY2026's annual report is not yet published. The school side of 'is anyone sitting on money' runs to 30 June 2026 through the MUNIS period-13 ledgers; the town side stops at 30 June 2023, so whether the town's own funds kept growing cannot be said. Measured in /analysis/sitting-on-money. — closes: a MUNIS fund balance report (or trial balance) at period 13 for FY2024, FY2025 and FY2026 covering the town's special revenue funds -- the same system that produced the school delivery of 6 October 2026, pointed at the town's funds. |
| held | Whether Lunenburg has a written reserve target, and what it is | NARROWED 5 October 2026. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include a Free Cash Fact Sheet for the FY27 warrant quoting the Town of Lunenburg Free Cash Policy, Section 3.03 (amended 09/02/2014 and 10/18/2018). That is a quotation of the policy, not the adopted policy document, which remains the remedy. Nothing in this archive states a level the town intends to keep in stabilization or free cash — no reserve policy, no fund balance policy, no target as a share of the operating budget. So there is no stated floor any drawdown could be measured against, and "the reserves are healthy" and "the reserves are excessive" are both unfalsifiable here. The Finance Committee has had "Financial Related Policies" as standing Old Business (agenda, 10 September 2026) and funded a financial policies line, so a document may exist or be in progress. — closes: the town’s adopted financial reserve policy, or the Finance Committee’s confirmation in writing that none has been adopted. |
| held | Which cell of DESE’s contribution sheet is mislabelled in FY2020 | In eighteen of the nineteen differenced years the town’s preliminary contribution equals the previous year’s required contribution multiplied by that year’s municipal revenue growth factor, exactly as DESE’s own User Guide defines it, and the required contribution is that figure adjusted toward target. In FY2020 the two are the other way round: dataContribution!O2593 prints $10,427,328, which is FY2019’s required contribution un-grown, and dataContribution!U2593 prints $10,889,259, which is that figure grown by the 4.43% factor. One of the two cells is carrying the other’s quantity and nothing in the workbook says which. The extract records what the sheet holds rather than repairing it. — closes: DESE’s FY2020 required local contribution worksheet for Lunenburg, which prints the preliminary contribution and the required contribution as separate stated steps. |
| held | Why the district and the town state different FY2027 Monty Tech assessments | Monty Tech’s FY2027 budget presentation puts Lunenburg’s total assessment at $1,452,379, built from a required minimum contribution of $1,378,183 and a transportation and operating assessment of $74,196 with no capital and no bonds. The Town’s own FY2027 operating budget book carries the same line at $1,452,426, in all three of its scenarios. The difference is $47 and neither document acknowledges the other. It is small enough to be a rounding or a late revision and it is not nothing: the two figures are the district’s bill and the town’s appropriation for the same year, and every other year in this archive where both exist ties to the dollar or to eighteen cents. — closes: the district’s FY2027 assessment certification to the Town of Lunenburg, and the Monty Tech line as finally voted at Annual Town Meeting. |
| money | Does FY2024's debt service include the Mass Water Pool 9 balloon payment, or not? | The FY2013 annual town report's debt repayment schedule (PDF pages 81-82) prints, in its 2024 column, GRAND TOTAL PRINCIPAL 846,635 and GRAND TOTAL INTEREST 120,310 -- 966,945 -- against a printed TOTAL DEBT of 548,241. The document is out by 418,704 in that one column, and by the same 418,704 in its own TOTAL column (24,298,664 + 7,307,840 = 31,606,504 against a printed 31,187,800). Every other year of the 34 closes exactly. The figures were read off the page's own 400 dpi bitmap twice. 418,704 is also the principal the FY2014 annual report prints for MASS WATER POOL 9 in the FY2024 column -- the only row in that report's 156-row schedule with a principal and NO interest and NO total beside it (sources/data/page-reads/fy2014-p40-debt-schedule.csv). So the discrepancy is located on one borrowing, and it is still not known whether the town excludes that payment from debt service on purpose because the Trust subsidises it, or whether one of the two printed figures is simply wrong. The difference matters: it is 76% of what the town otherwise shows itself owing in FY2024. The per-issue rows of the FY2013 schedule are NOT read -- that limit is already registered as “What does each individual debt issue cost the town in a given year” and is not refiled here. — closes: the Treasurer's debt service schedule for the Mass Water Pollution Abatement Trust loan numbered 9, showing the FY2024 payment and any Trust subsidy against it. |
| money | Does the FY2018 debt repayment schedule's printed grand total account for every issue's INTEREST? | IN FY2019 IT DOES NOT, BY THE EXACT INTEREST OF ONE ISSUE. Pages 48-51 of the FY2018 annual town report print sixteen debt issues against FY2019-FY2047 and, separately, GRAND TOTAL rows per year. Read in full, the issues reconcile to those grand totals within $2 in all 29 years -- the schedule shows whole dollars over amounts carrying cents -- except FY2019, where the issues' interest exceeds the printed GRAND TOTAL INTEREST by 272 and TOTAL DEBT by the same 272 while principal ties EXACTLY. 272 is precisely the FY2019 interest of MASS WATER POOL 4, whose own row closes to the dollar (10,409 + 272 = 10,681) and whose 10,409 of principal IS inside the grand total. So one of the two printed figures is wrong and the document does not say which; the archive publishes both and asserts neither. This is the same defect the FY2015 row in this register names for PRINCIPAL, in a different year and a different column, and the two may be worth merging. - closes: the Treasurer's own debt service schedule for FY2019, or the Massachusetts Clean Water Trust (formerly MWPAT) amortization schedule for Pool 4, either of which states that loan's FY2019 interest and admin fee independently of the town's own summary. |
| money | Does the town’s printed debt repayment grand total include all of its debt? | IN THE FY2015 REPORT IT DOES NOT, BY THE EXACT AMOUNT OF TWO BONDS. The GRAND TOTAL PRINCIPAL row is short by the two MS-HS CONSTRUCTION bonds in every year column — $625,000 in 2016, $640,000 in 2017, $665,000 in 2018 — while both bonds are printed in the table directly above it. The school construction bonds are the second largest debt on the page. Nothing here establishes whether the row or the table is the intended figure. — closes: the Treasurer’s debt service schedule for FY2015, or the official statement for the MS-HS bonds. |
| money | What added valuation produced fiscal 2009's $138,168 of new growth? | THE ARITHMETIC ON THE PAGE DOES NOT WORK AND FIVE EDITIONS REPRINT IT UNCHANGED. $5,077,276 of added valuation, at the $12.23 rate printed on the same line, gives $62,095 — not the $138,168 beside it. The report’s own percentage-change column corroborates $138,168, so the added-valuation figure is the one that cannot be right. Recorded rather than corrected: which of the two the town meant is not something this archive can say. — closes: DOR’s LA-13 new growth certification for FY2009. |
| money | What are the $25,276.56 of fines and $3,110.00 of fees that FY2012 receipts counts but does not name? | The FY2012 annual town report, PDF p58 (FY 2012 RECEIPTS - JUNE 2012), prints 91 detail lines and a nine-category SUMMARY OF RECEIPTS. The nine categories foot to the printed GRAND TOTAL of $28,471,842.32 exactly; the 91 lines sum to $28,443,455.76, short by $28,386.56. Seven of the nine categories are reproduced to the cent by a partition of those lines, which puts the whole shortfall in two: FINES & FORFEITS, where the page prints only PARKING FINES $2,120.25 and DOG FINES $2,550.00 against a category total of $29,946.81, and FEES, short by $3,110.00. The page was swept end to end and prints no further row, so this is the document omitting detail rather than our reading missing it. Court fines are the obvious candidate for the larger figure and nothing in the report says so. — closes: the Town Accountant's FY2012 general ledger revenue detail (MUNIS), which lists every receipt account by code rather than by the summary categories this page prints. |
| money | What the $600.00 is between the FY2013 receipts page's own detail and its own GRAND TOTAL | PDF page 63 of the FY2013 annual town report prints FY 2013 RECEIPTS - JUNE 2013: 91 detail lines in three label/amount column-pairs, and beside them a nine-line SUMMARY OF RECEIPTS footing to a printed GRAND TOTAL of $29,744,547.31. The nine summary categories sum to that GRAND TOTAL EXACTLY. The 91 detail lines sum to $29,743,947.31 -- $600.00 less. The reading is not the problem: the page has no text layer and was read off its own 400 dpi bitmap twice, and three of its printed detail blocks foot to their matching summary line to the cent (LICENSES/PERMITS to 174,193.45, STATE REVENUE to 7,010,803.56, FINES & FORFEITS to 27,405.00), which bounds the difference away from 29 of the 91 lines and leaves it inside the fees and departmental revenue lines. The page never states that the detail is exhaustive of the summary, so this is NOT recorded as the town's arithmetic failing -- it may be one receipt listed only in the summary, a line printed $600 low, or two different universes. Nothing on the page distinguishes them. sources/data/page-reads/fy2013-p63-.csv. — closes: the Town Accountant's FY2013 year-end revenue report out of the accounting system (the MUNIS revenue ledger for fiscal 2013, which this project already holds for FY2026 as sources/munis-ledgers/revenue/), which lists receipts by account and foots itself. |
| money | What was Lunenburg's certified assessed valuation and tax rate for fiscal 2021? | THREE DOCUMENTS GIVE THREE ANSWERS AND NONE OF THEM IS THE TOWN'S OWN TABLE ADDING UP. The FY2021 annual report, page 38, prints four property classes totalling $1,742,668,758.00 under a Totals line that reads $1,548,256,450 -- and that Totals line, with its $28,054,406.88 levy, is to the cent the one the FY2020 report prints, where it foots FY2020's own four classes at FY2020's rate of 18.12. DLS's assessed-value series puts Lunenburg's FY2021 total at $1,628,643,589, which matches neither. And the rate is printed as 17.19 in every row of the table while the prose above it says the rate went from $18.12 to $17.74 for FY 2021. Until one of these is settled, no FY2021 valuation, levy or rate can be quoted from the annual report, and the class SHARES -- which /commercial-base is built on -- rest on a base the town does not state. The four class rows are internally consistent and are not in doubt: each one's valuation x 17.19 / 1000 is its own printed levy to the cent. — closes: the Division of Local Services Tax Rate Recapitulation (the certified recap, with the LA-4 assessed values) for Lunenburg, fiscal 2021, which DLS publishes per municipality per year on its Gateway/Municipal Databank. |
| money | What was Lunenburg's certified new growth in fiscal 2012? | THE TOWN’S OWN REPORTS GIVE TWO FIGURES AND DISAGREE ABOUT WHICH YEAR EACH BELONGS TO. The FY2013 report prints $19,124,255 against fiscal 2012. The FY2014 through FY2017 reports print $27,729,619 against fiscal 2012 and re-date $19,124,255 to fiscal 2013. Nothing in the archive resolves which labelling is right, and new growth is what the levy limit grows by, so the two readings imply different ceilings. — closes: DOR’s LA-13 new growth certification for FY2012. |
| money | What were Lunenburg’s fiscal 2011 class valuations, where the town’s own two printings disagree by $7,295,100? | The FY2011 annual town report prints the same quantity twice on one page (PDF p12, printed folio 9) and the two do not reconcile. Fiscal 2011 Assessments and Revenues by Major Property Class puts Commercial at 64,514,700 and foots its tax levy to the printed 18,006,811.48 to the cent; the Fiscal Year 2011 Abstract of Assessments below it puts 300 - 393 Commercial at 56,208,300 and 600 - 821 Chapter 61, 61A, 61B at 1,011,300, so its twelve classes sum to 1,106,987,789 against its own printed TOTALS of 1,114,282,889. The residual is 7,295,100 and it sits entirely in the commercial class: the abstract’s eight residential lines sum to 1,000,004,500, which is the first table’s Residential valuation to the dollar, and its account count ties exactly at 5,185, so no row is missing from the reading. Both cells were re-read off the page’s own 400 dpi bitmap at 6x. Which printing is wrong is not established, and the report itself settles nothing — the first table’s own TOTALS cell is misprinted 1,114,2828,889, ten digits. — closes: the Assessors’ certified fiscal 2011 Tax Recapitulation (DOR Form LA-4/LA-5) for Lunenburg, which states valuation by class as the Department of Revenue certified it and is the only document that outranks both printings. |
| money | Which figure is wrong in the FY2013 Omnibus Budget: the eleven section totals, or the $600 larger Total Omnibus? | The budget Town Meeting voted under Article 8 is printed in the FY2012 annual town report, PDF pp.81-82. Every one of its eleven sections foots to its own printed subtotal exactly, and those eleven subtotals sum to $27,488,841.00 against a printed Total Omnibus of $27,489,441.00 — six hundred dollars more. Both figures were re-read upright at full scale off the page's own 518 dpi bitmap, so this is the document disagreeing with itself and not a misreading. The $600 could be a line the page does not print, a section total understated, or the grand total overstated, and nothing on those two pages distinguishes them. — closes: the Town Clerk's certified copy of the Article 8 motion and the FY2013 budget handouts it refers to (Refer to Handouts on pages 27 – 30), which the annual report does not reproduce. |
| money | Whose $92,709.54 is the unnamed line in the FY2015 receivables summary? | THE REPORT PRINTS A FIGURE ON A LINE WITH NO NAME. $92,709.54 in the PAYMENTS column, under UTILITY LIENS ADDED TO TAXES, with an empty name cell — confirmed by rendering page 45 rather than off the scan. Seven of the eight columns tie to the cent without it and PAYMENTS is short by exactly that amount, so the figure is real and the name is what is missing. Carried in the data as (the page prints no name for this line). — closes: the Collector’s detail behind the FY2015 receivables summary. |
| money | Why does the same $1,085,674.86 appear twice in the town’s FY2015 opening receivables? | THE TOWN’S OWN TWO BOOKS DO NOT MEET, AND THE AMOUNT IS EXACT. FY2014 closes MEADOW BETTERMENT at $1,085,674.86. FY2015 opens SEWER BETTERMENT $1,085,674.86 higher than FY2014 closed it, AND carries the same $1,085,674.86 again on a new MEADOW WOODS WATER BETT line. Both years tie to their own printed GRAND TOTAL, and line by line every other balance rolls forward near-exactly. A recoding of Meadow Woods into the sewer betterment line would explain it; so would a restatement; nothing published distinguishes them. — closes: the town’s FY2015 receivable roll-forward, or the MUNIS receivable detail for both years. |
| money | Why does the town open FY2018 owed $13,300 more than it closed FY2017 owing? | THE TOWN PRINTS BOTH FIGURES AND THEY DO NOT MEET. A receivable balance rolls forward: what the town was owed on 30 June is what it starts the next year owed. Every other consecutive pair we can read ties to the cent (FY2020 through FY2024, one pair off by 2c). The Collector’s grand total on FY2017 page 45 reads $9,008,228.35 and on FY2018 page 54 reads $9,021,528.35 — checked on the pages, not off our extract. A prior-year adjustment, a reclassified charge and a typo all fit it equally and nothing published distinguishes them. — closes: the Collector’s receivable control reconciliation for FY2018, which is a report the accounting system can print. |
| money_in | Bus fees | charged by published policy · no destination found in any ledger |
| money_in | Grants received in earlier years | spent now, booked then · nine funds, no FY26 revenue |
| money_in | How do Ipswich, Woburn, Lenox, Medford, Canton, Norwood fund schools in the top quarter of spending while taxing homes in the lightest quarter? | Of the 20 towns that spend among the most per pupil while asking the least of a home’s value, 6 fit none of the four routes this report can test: an unusual amount of state aid, many houses per child, houses worth a great deal each, or an unusually large business base. Three of them — Woburn, Canton, Norwood — carry business shares of roughly twice the median and fail only the exact 2x test. Whatever the rest are doing is the most directly useful thing on this page and nothing here identifies it. — closes: DLS Schedule A for each town, which reports every revenue source a municipality collects, so local receipts, enterprise funds and reserves can be compared rather than inferred. |
| money_in | How many Montachusett foundation-enrolment students did Harvard have in FY2018 — 7 or 8? | The FY2017 annual town report prints the figure twice and the two disagree by one student. Page 144 is DESE's own FY18 Chapter 70 / Regional District Enrollment and Contributions by Member City or Town for LEA 832 and prints HARVARD at 7; page 148 is the district's COMMUNITY ASSESSMENTS table and prints its FOUNDATION ENROLLMENT at 8. The two agree on all 17 other towns and on all 18 Required Minimum Contributions to the dollar. Only page 148's column foots to the District Total of 1,496 that BOTH pages print; page 144's 18 rows sum to 1,495, although its own per-row Change identities all close. Foundation enrolment is the input Chapter 70 runs on, so a member town's count is load-bearing for every town's assessment — and neither page says which of its own figures is the error. — closes: DESE's published FY18 Chapter 70 regional district enrolment file for LEA 832 Montachusett, at doe.mass.edu, which is the source both pages reproduce. |
| money_in | How much of Monty Tech’s FY2026 spending is outside its operating budget, and from which funds | The district’s FY 2027 Budget Summary sets out its operating (general fund) budget for FY2026 and FY2027 and the five sources that pay for it: Chapter 70, the member towns’ assessments, state transportation aid, its Regional Transportation Fund and its Excess & Deficiency reserve. Grants and revolving funds are not in it. DESE’s expenditures-by-function file DOES split the district’s total by fund, general fund against grants and revolving, but only through FY2025, and that total, which DESE titles Expenditure (Admin, Instruction, Operations), carries no capital or debt service row. So the operating budget on /enrolment/monty-tech-funding and DESE’s per-pupil figure are different years and different scopes, and nothing here reconciles them. — closes: DESE’s End of Year Financial Report for LEA 08320000 for FY2026, which splits spending by fund. |
| money_in | How much of free cash is the schools’ | Free cash is certified for the town as a whole. Neither the DLS proof nor the Town’s own undesignated fund balance roll-forward attributes any component to any department, so nothing published says how much of it the school department’s unspent appropriation produced — nor how much of any appropriation of it reaches the schools. The projection on this site is built from budget columns and free cash is derived from actuals; they are subtracted once, side by side, and never joined. — closes: a departmental turnback schedule for the year-end close, which would split the unexpended appropriations line by department. |
| money_in | How much of the FY2027 enacted state-aid increase is receipts and how much is offsetting assessments | model/finance.py grows a FY2027 base of $11,404,917 + $471,121. The first is the Governor’s GROSS cherry sheet Total Receipts, printed by the FY2027 Town Meeting booklet. The second is recorded in fy27-and-the-override.md as NET — "+$471,121 net (Ch.70, charter/choice receiving tuition, Smart Growth, UGGA, vets/elderly exemptions; offset by higher charter assessments)". A gross figure and a net figure are being added, so the gross FY2027 receipt estimate the projection actually grows is not established, and neither is how much of the increase the Town keeps. This archive holds no Cherry Sheet for any year, which is the only document that prints receipts and assessments side by side. — closes: the FY2027 Cherry Sheet for Lunenburg on the enacted budget (DLS form CS 1-ER), which states each receipt and each assessment separately. |
| money_in | How much of the SY2025 grant fall was ESSER, as against every other grant and revolving fund | The meeting record names ESSER as the cause repeatedly and with figures — the district told the School Committee on 15 November 2023 “We have a loss of $650,000 in ESSER funds, this is much more significant than we expected”, and on 17 January 2024 put the loss at $600,000 beside a $500,000 health insurance rise. DESE reports one combined grants_revolving column, which holds ESSER, Title I and the other federal and state grants together with circuit breaker, school choice, athletics, food service and every other revolving fund. The SY2025 fall of $2,023,188 across matched functions therefore cannot be attributed to any one of them. The district's own stated ESSER figures and this fall are different quantities measured at different stages — a forward budget gap against a closed-year fund total — and this project does not difference one against the other. — closes: the district's end-of-year grant expenditure detail by grant code for FY2024 and FY2025, or Schedule 19 of its End of Year Financial Report as filed, which lists each grant separately. |
| money_in | How much of the special education circuit breaker account's balance is already committed to the next year's tuition? | The account (fund 2640) pays out-of-district tuition every year, overrun or not, and its 30 June balance is computed on /analysis/special-education-costs and /analysis/sitting-on-money. Whether that balance is free to meet a mid-year surprise, or is already planned against next year's placements, is not published: the year-end ledgers show what was spent, not what was intended, and in one year the account carried a tuition budget while in the others it carried none. So a resident cannot tell how much of the balance is a cushion beside the new special education reserve. — closes: the district's circuit breaker spending plan for the year, or the budget narrative for the out-of-district tuition line stating how much it assumes the account will pay. |
| money_in | How the $1,500 athletic family cap was arrived at, and over what period | The School Committee minutes of 26 February 2025 record the decision and not the derivation: "A slideshow presentation of athletic user fees is presented ... with a family cap of $1500. ... all approve via roll call vote". A slideshow WAS presented, so the arithmetic exists somewhere; this archive does not hold it, and the only athletics presentation material here is two Athletic Advisory Council agendas from the preceding weeks. Minutes summarise, so the absence of arithmetic in them is not evidence that there was none — what is established is that no document we hold derives the figure or states the period it covers. The figure itself is unreachable per season by family size alone: five children at one sport each come to between $1,220 and $1,375 depending on how the sibling discount is carried past the third child, both under $1,500. — closes: the athletic user fee presentation given to the School Committee on 26 February 2025, which is the slideshow the minutes name. |
| money_in | Student activity accounts | held by the school under its own authority · not in the town’s books at all |
| money_in | Trust fund income | scholarships, cemetery, stabilisation · extract is check-failed |
| money_in | What Chapter 70 aid would actually do if enrollment fell | MUCH NARROWER THAN IT WAS. DESE’s Chapter 70 trends workbook breaks the aid calculation into its named components, and for Lunenburg they show that this year’s aid is last year’s aid plus named increments — an identity that holds to the dollar in every one of the last seven years. In FY2026 the whole of the increase is the minimum aid increment, $240,450, which is exactly $150.00 for each of the 1,603 foundation pupils, and the foundation aid increment is zero. Over thirty-four years foundation enrollment fell in 17 and aid fell in 3 — FY1997, FY2010 and FY2011. DESE’s component columns show a reduction applied in FY2010 and FY2011; they start at FY2007, so nothing in this archive says why aid fell in FY1997. So the marginal aid attached to one foundation pupil is currently about $150 and not the $14,440 foundation budget per pupil. What is NOT established: that the Legislature sets the same minimum aid rate next year — it has ranged from $30 to $150 a pupil in the years published — nor what happens if a large enough enrollment fall moves the district off the minimum aid track, which no document here models. — closes: DESE’s preliminary Chapter 70 aid calculation for Lunenburg for the year in question, which states the foundation aid, minimum aid and hold-harmless components before the year is set. |
| money_in | What FY2027 athletic fees are for anyone other than a full-paying high school family | The only account this archive has of the 2026-27 athletic fees is a Superintendent’s email to families in August 2026 that we do not hold, reported as four figures: a first, second and third child and a family cap. FY2026 published more than that — a middle school rate, a reduced rate for high school and for middle school, and a sibling discount — and none of those has an FY2027 successor in any document here. So a middle school family, a family paying the reduced fee and a family whose fee is waived cannot be priced for the year now running. — closes: the district’s athletic fee schedule as published to families for 2026-27, in full, including the reduced and waived rates and the middle school schedule. |
| money_in | What Lunenburg receives for a child who chooses IN, and what the fall from 51 to 15 is worth | DESE counts the children arriving in Lunenburg from other towns in every school year from SY2014 to SY2026: 51 at the start, 15 at the end, a fall of 71% while the number leaving stayed flat. The town’s own School Choice fund receipts fell over the ten years the two series share, from $220,058 in FY2014 to $116,976 in FY2023. Neither document states a RATE. The statutory base tuition is set by M.G.L. c.76 §12B, no document in this archive states it, and it is higher for special education; the arriving children also come by three different mechanisms — school choice, tuition waived by local agreement, and foster placement — which do not carry money the same way. So the two series can be published side by side and cannot be divided into each other: a per-student figure produced that way would be an assumption in a measurement’s clothes, and the money value of a 71% fall in arrivals is therefore not established anywhere on this site. — closes: the DLS Cherry Sheet CS 1-ER (estimated receipts) for Lunenburg, which prints School Choice Receiving Tuition as its own receipt line, for the years the DESE counts cover. |
| money_in | What Parks & Recreation’s programme fees and beach-pass sales became on the town’s books — how much of the $38,955.50 of programme fees and $8,828.00 of passes MyRec recorded for FY2025 reached fund 1500 (Park Revolving) or the general fund, and when | MyRec is the registration system, not the ledger: its FY2025 sales reports foot to their own totals but say nothing about deposits, refunds or the fund each fee was posted to, and the FY2025 special-revenue report is not in the archive — closes: the FY2025 special-revenue report and the journal detail for fund 1500, the same report the archive holds for fund 1301. |
| money_in | What a family spends in the cafeteria when the standard meal is free | Massachusetts funds universal free school meals and the district takes the programme, so the standard reimbursable meal is not billed to a household — that much is established and it is a real reduction in what families pay. What is outside the programme is not: a la carte items, snacks and second meals are charged, and no price list for them is held here. The School Lunch fund’s own revenue cannot separate the two. — closes: the district’s cafeteria a la carte price list for 2026-27. |
| money_in | What a fourth child in one family pays for high school athletics | The FY2027 schedule names a first, second and third child — $400, $300 and $225 — and stops. The FY2024 and FY2025 schedules did the same, and there the cap resolved it: the three published rates sum to exactly the $475 the FAQ prints as the cap, so a fourth child added nothing. That identity does not hold in FY2027, where the three rates sum to $925 against a $1,500 cap, so the fourth child is neither priced nor obviously free. A family of four children — the case residents ask about most often — therefore cannot be costed from anything published. — closes: the district’s athletic fee schedule as published to families for 2026-27, stating the rate for each additional child or the point at which the ladder stops. |
| money_in | What a single-child family pays for the bus at the reduced rate in 2026-27 | The Superintendent’s May 2025 email states five bus tiers for FY2026 including $50 for a single-child family qualifying for a reduced fee. The August 2026 email for FY2027 states three tiers and does not restate that one. Whether the tier was dropped or simply omitted from the email is not established, and the difference decides whether a qualifying single-child household pays $50, $180, or nothing. — closes: the adopted transportation fee schedule for 2026-27, with every tier and the free/reduced provision, as approved by the School Committee. |
| money_in | What did each of the ~130 individual receipt lines on the FY2019 receipts page bring in? | PDF page 30 of the FY2019 annual town report (printed folio 28), FY 2019 RECEIPTS - JUNE 2019, prints about 130 named receipt lines in three label/amount column pairs, and separately a nine-category SUMMARY OF RECEIPTS with a GRAND TOTAL. The SUMMARY is now read and closes to the printed GRAND TOTAL of $40,734,004.07 to the cent (sources/data/page-reads/fy2019-p30-receipts.csv). THE DETAIL IS NOT READ. The page is a ~150 dpi photograph with no text layer, and recognition finds only about 75 of the ~130 printed money figures, so the second identity the page states about itself -- that the detail lines also sum to the GRAND TOTAL -- is untested. Until it is, FY2019 has category subtotals and no line-level receipts, so questions like what the town took in from building permits or from ambulance billing cannot be answered for that year from this page. - closes: nothing from the Town is needed and no better scan is required; the page is legible. This closes by transcribing the three column pairs and footing them to the nine category subtotals already proven, which is about 130 figures against ten independent assertions. |
| money_in | What else did the Town receive in FY2016 after CH 70 SCHOOL AID, and what did its receipts add up to? | THE FY2016 RECEIPTS PAGE IS CUT OFF MID-LIST AND PRINTS NO TOTAL. FY 2016 RECEIPTS - JUNE 2016, PDF page 23 of the annual town report, is a two-column list of about 54 figures. The left column ends at RELEASE FEES in the middle of the FEES block; the right column ends at CH 70 SCHOOL AID in the middle of the STATE REVENUE block. Both stop at the same height on the page, which is what a print that ran out of room looks like. There is no SUMMARY OF RECEIPTS block and no GRAND TOTAL anywhere on it. The comparison is the Town's own later practice: the FY2020 and FY2021 receipts pages print about 100 detail lines AND a nine-category summary footing to a printed grand total, which is what let both of those years be read and checked. FY2016 prints neither, so the page cannot be footed, the receipts cannot be classified into the Town's own categories, and what the Town took in during FY2016 is not stated in this report. — closes: the Treasurer's FY2016 cash receipts report as the accounting system produces it, the same report whose later editions the FY2020 and FY2021 annual reports print in full. |
| money_in | What part of Lunenburg’s Monty Tech assessment the property tax levy pays, rather than state aid or other receipts | A member town pays its regional assessment out of one budget that the levy, Chapter 70 and local receipts fund together, and no document assigns one revenue to one appropriation. So /homes-and-taxes/regional-school-share can only ESTIMATE the assessment’s weight in an average bill, in proportion to its share of the levy (our arithmetic on DLS values and rates by class). For the other seventeen member towns only the state-required minimum is held, not the whole assessment. — closes: nothing assigns it; the town’s tax recapitulation sheet sets every appropriation against the levy and every receipt, and each member town’s voted Monty Tech appropriation would replace the minimum. |
| money_in | What period the school athletic family cap covers | The $1,500 family cap was set by the School Committee on 26 February 2025 and the minutes state the amount and no period: "with a family cap of $1500". The cap it replaced did state one — the LHS Athletics FAQ prints "Total Cap per season=$475.00" — so the schedule has moved from a stated period to none. The district workbook obtained by records request carries the per-student rates on three worksheets named for the three seasons and carries no family cap in any cell, so the corroboration that dates the other rates does not reach this one. Read per season and read per year, $1,500 is a different bill for the same family. The arithmetic argues for the annual reading — with the published FY2027 ladder a family of five children playing one sport each in one season reaches $1,375, still under the cap — but that is an inference from the cap being unreachable, not a statement in any document. — closes: the district’s athletic fee schedule as published to families for 2026-27, which is the document the Superintendent’s August 2026 email to families attached or described. |
| money_in | What put $62,231 into the School Facilities Use fund (1306) in FY2025 — the balance went from $3,010.67 at 30 June 2024 to $65,241.82 at 30 June 2025, more than the fund has taken in in any of the thirteen years the annual reports print | Rent alone cannot produce the rise: the best receipts year on record is $39,944. Either revenue arrived that is not field rent — a transfer, a reimbursement, an insurance recovery — or something that had been charged to the fund stopped being charged to it, and the two balances cannot tell those apart. FY2025 is the one year no special-revenue schedule is published for. THE TEST WHEN THE DATA ARRIVES: read FY2025 line by line, total the receipts that are field or building rent, and see whether the remainder is a transfer in or an expenditure that moved elsewhere — closes: the journal detail for fund 1306, FY2024–FY2026, and the FY2025 special-revenue report. |
| money_in | What quantity the Town’s own published state-aid growth rates of 5.3% and 1.4% measure | The FY2027 Town Meeting booklet states that "From FY13-FY23 state aid increased at an annual rate of 5.3%, but in the last four years, it has slowed to approximately 1.4%" (3765-town-meeting-booklet-including-warrant, line 338), and does not say which figure it grew. Rebuilding the Town’s own Subtotal State Aid line from its own revenue/expenditure worksheets — 23 consecutive budget years, FY2005 to FY2027, notes/findings/state-aid-budget-series.csv — gives 4.5660% for FY2013→FY2023 and 1.9144% for FY2023→FY2027. Neither published rate is reproducible from the Town’s own published series, so a rate quoted to Town Meeting cannot be checked against anything. — closes: the Cherry Sheets themselves (DLS form CS 1-ER for Lunenburg, one per year), or the Town Manager’s working file behind the FY2027 booklet’s revenue narrative. |
| money_in | What the athletic fee fund held at each 30 June, FY2021 to FY2026 | The school special funds year-end reports give fund 1301 (athletics) its receipts and its spending for FY2023 to FY2026, and no balance. Receipts fell short of spending in FY2023 and FY2024 and exceeded it in FY2025 and FY2026, from the year athletic bus costs began to be reclassified onto the general fund line; the district said in its FY2026 budget overview that the fund could not support those costs, and its FY2027 plan draws on the fund again to restore high school buses. The last balance this archive holds is the Finance Committee’s FY2020 special revenue fund workbook, at 30 June 2020. So whether the fund ran below zero in FY2024, and what it holds now, cannot be said; /analysis/transportation sets receipts beside spending and stops there. — closes: the Town Accountant’s fund 1301 balance at each 30 June from FY2021 to FY2026 (beginning balance, receipts, expenditures, ending balance), or the special revenue fund balance report for those years. |
| money_in | What the foundation budget pays per pupil for each kind of child | DESE builds the foundation budget from per-pupil rates that differ by grade and by category, and it publishes the CATEGORIES for Lunenburg — FY2026 foundation enrollment of 1,603, of whom 54 are English learners (3.4%), 452 are low income (28.8%, low-income group 5) and none is vocational, at a wage adjustment factor of 1.000 — without publishing the rate attached to any of them in the same file. So which children leave a district changes the foundation effect and not only how many, and this archive can state that it matters and cannot size it. — closes: DESE’s FY26 foundation budget rate schedule, the table of per-pupil rates by grade and category and the low-income increment by decile group. |
| money_in | What the processing fee is on every school payment made online | The Superintendent’s email of 17 August 2026 tells families paying online that "RevTrak charges a small processing fee" and does not say what it is. It is added to every other fee a family pays through the portal, so it scales with the rest of the bill rather than sitting beside it, and a household paying athletics, bus and activity fees online pays it three times. "Small" is not a rate. — closes: the RevTrak merchant agreement or the portal’s own fee disclosure, stating whether the charge is a percentage, a flat amount per transaction, or both. |
| money_in | What the six fees the district’s payment portal sells actually cost | The district’s RevTrak portal offers an Afterschool Activity Fee, a Chromebook Repair Fee, Extended Day & ELC, Field Trips, an LHS Parking Permit and a Primary Preschool Program. The portal renders in JavaScript and serves no amounts to a plain fetch, and no fee schedule for any of them appears in a budget book, a warrant or a set of minutes in this archive. So the existence of each fee is established and the amount of every one of them is not, and any total of what a Lunenburg family pays the schools in a year is a floor with six named items sitting above it. — closes: the district’s published schedule of student fees for the current year, listing every fee the portal charges with its amount. |
| money_in | What the student activity fee is for 2026-27, and what period the $70 covers | The School Committee voted a universal student activity fee of $70, up from $55, on 7 May 2025 — the motion carried and the minute records the amount and no period. So whether a family pays $70 a child once a year, once a term, or once for each activity joined is not established, and those are a threefold difference on the same household. Nothing in this archive restates the fee for 2026-27 at all, and it is charged. — closes: the adopted student activity fee schedule for the 2026-27 school year, stating whether the fee is per student per year, per activity, or a base fee with activity fees on top, and any family cap or free/reduced provision. |
| money_in | What was the Town owed in motor vehicle excise, user charges and betterments at 30 June 2016? | THE FY2016 RECEIVABLES SUMMARY IS PRINTED CLIPPED, AND THE CLOSING COLUMNS ARE THE ONES CUT OFF. Page 47 of the FY2016 annual town report prints the property-tax half of the schedule with EIGHT columns -- FORWARD, COMMITTMENTS, ADJUSTMENTS, REFUNDS, PAYMENTS, ABATEMENTS, TRANSFER, BALANCES -- and every row closes on the identity those columns state. Page 48 (motor vehicle excise, twenty levy years) stops after PAYMENTS. Page 49 (deferred taxes, water and sewer user charges, utility liens, sewer/water/street/septic betterments, apportioned assessments) stops after REFUNDS, and its own title is cut mid-word -- FY2016 COLLECTION OF TAXE. Page 50 is blank but for its folio, so nothing continues. Both pages were rendered and looked at on 2 October 2026: the ruled table simply ends at the right-hand edge of the page. SO THERE IS NO PUBLISHED BALANCE for any of those accounts and no arithmetic on either page can be closed. The combined balance sheet on page 20 does not substitute: it prints one undivided EXCISES $243,852.65 against page 48's five columns netting $303,306.05, which are not the same quantity. This is NOT the same gap as the FY2013/FY2017/FY2020 receivables refusals, which are about an extractor failing on pages that ARE fully printed -- here the document does not carry the figures. — closes: the Collector's and Treasurer's own FY2016 receivables control report, or an un-clipped printing of the same worksheet, which the Town Accountant's system can reproduce. |
| money_in | What would regionalising actually be worth to Lunenburg, once the transport reimbursement is set against the transport costs it would also take on? | NARROWED 26 September 2026, and half of it is now answered. The reimbursement side is measured: the DLS Cherry Sheet is in the archive, FY2010–FY2027, and Regional Transportation under M.G.L. c.71 s.16C is $88,183,608 statewide in FY2026 to 84 regional districts and nothing to any single-town district. North Middlesex draws $1,195,321, Ashburnham-Westminster $1,190,725, Groton-Dunstable $1,001,384. What is NOT answerable from any file is the other half: a regional district also INCURS the busing it is reimbursed for, and no published figure separates a district’s transport cost from its reimbursement — DESE’s twelve per-pupil categories carry no transport line at all. Nor is the counterfactual observable: what three towns would spend merged is not what other merged towns spend today. — closes: the regional districts’ own budgets, which state transportation as a line and the reimbursement against it; and a regional agreement, which sets how the net cost is apportioned. |
| money_in | Where do the other towns’ ski co-op reimbursements land when they are paid? | Lunenburg bills Littleton, Narragansett and Leominster for their skiers’ shares — $9,736.57 for 2025-26 — and which account receives the money decides whether it offsets the athletics line, the athletic revolving fund, or general revenue. The invoice is a bill and does not show receipt — closes: the revenue detail for the account the checks are deposited to, or the athletic revolving fund cashbook for the season |
| money_in | Where the PEG Access balance went between FY2019 and FY2021 | The fund's carried balance is continuous in the report from FY2015 to FY2019 -- each edition's Starting Balance is the previous edition's Ending Balance to the cent -- and then stops being a series. FY2019 prints a Total of $573,837.37 (starting balance, plus revenue, less expenses, plus the Comcast Tech Fund of $124,796.01); FY2020 opens at $447,813.36, $126,024.01 lower; FY2021 opens at $272,000.00, which the same page's prose states is the budget rather than a balance. One document explains part of it: Article 16 of the FY2019 Annual Town Meeting established a PEG Access Enterprise Fund under MGL c.44 s53F1/2 and transferred into it the balances of the PEG Access and Cable Related Receipts Reserved For Appropriation Fund and the Comcast Tech Capital Grant Fund as of 30 June 2019. So the fund changed legal form at exactly this point, which is why the statement changes shape. WHAT IS NOT ESTABLISHED: the amounts transferred, and therefore whether the $126,024.01 step is the transfer, a closing entry, a restatement, or something else. There is also a smaller unexplained step earlier, FY2017's Ending Balance $303,909.77 against FY2018's Starting Balance $303,551.54, $358.23 apart, with no fund change to account for it. -- closes: the Town Accountant's opening and closing trial balances for the PEG Access and Cable Related funds for FY2018, FY2019 and FY2020, showing the transfers in and out. |
| money_in | Whether Lunenburg’s free cash is unusual for a town its size | The DLS proof carries no denominator — no population, budget, revenue or levy for any of the nine towns, Lunenburg included. So Littleton’s $11.3M against Shirley’s $272K says nothing about which is closer to its own target, and free cash as a share of the operating budget cannot be computed for a peer at all. Composition and volatility are ratios and do compare; the level does not, and is not shown. — closes: the Tax Rate Recapitulation (Schedule A) for each town, which prints the operating budget the ratio needs. |
| money_in | Whether a shortfall in state aid falls on the schools or on the rest of the town | Chapter 70 is 35% of the school appropriation and the town has no vote on it, so which side of the budget absorbs a miss is the question a resident actually has. Nothing published answers it. The free cash proof states one net cherry sheet figure for the whole town; the general ledger’s state aid accounts share no organisation code with any expense account, 0 of 222, so no aid dollar can be followed to anything it paid for; and the appropriation is voted before the final aid number is known. A year where aid rose and the appropriation rose with it and a year where aid was flat and the town covered the difference are different facts about the world and identical facts on the page. — closes: the Town’s FY-end recap (Form A-1) beside the Cherry Sheet for the same year, which states estimated and actual receipts on one page. |
| money_in | Whether the district charges anything for music, and what an instrument costs a family | A resident told the School Committee on 26 February 2025 that "Instruments cost a lot, you need reeds and that can cost $50 a semester", and that band families "just aren’t paying anything directly to the school". That establishes music as a real household cost and establishes nothing about a district charge: no music fee, instrument rental rate or materials fee appears anywhere in this archive. A cost paid to a shop and a fee paid to the district are different things and neither is currently priced. — closes: the district’s music program fee schedule for 2026-27, or a statement that it charges no music fee and rents no instruments. |
| money_in | Whether the school choice fund’s SCH. CHOICE BUS FEE account is where the student bus fees are booked | In the school special funds year-end reports, fund 1308 (school choice) carries revenue account 437601, SCH. CHOICE BUS FEE. It took in nothing in FY2023 and FY2024, began receiving money in FY2025 -- the year the first student bus fees fell due -- and received again in FY2026, while the town general fund's STUDENTBUS revenue account shows nothing. That timing fits the fees and does not establish them: the account is named for school choice, and a fee charged only to school choice students would book the same way. Narrows 'Where bus fee receipts are booked' without closing it. — closes: the Town Accountant's definition of account 1308-437601, or the cash receipts detail behind it for FY2025 and FY2026 showing whether the deposits are the RevTrak and check payments for the student bus fee. |
| money_in | Which Lunenburg budget lines the circuit breaker reimbursement offsets | dese_circuit_breaker gives the reimbursement the district receives for high-cost special education placements, split into instruction and tuition against transportation, FY2006 to FY2026. It is real money and it is not in the general fund appropriation the town votes. Rule 11: a tuition line that fell because circuit breaker rose is not a line that got cheaper, and the budget document cannot tell the two apart. WHAT IS NOT ESTABLISHED is which lines it lands against, or whether the district budgets net of it — the workbook nets other lines down against expected receipts and says so in its own comments column, so this is not a hypothetical. — closes: the district’s circuit breaker revolving fund cashbook for the year, which shows what the receipt was spent on. |
| money_in | Which departments’ unspent appropriations produced the free cash | Money appropriated and not spent is the largest single component of Lunenburg’s free cash — 47% of five years of it, and 66% of the record 2025 certification. It is published as one town-wide figure across 67 departments. Prudence, a post left vacant, a project that slipped into the next year and a line that was over-budgeted from the start are four different facts about the world and one number on the page. — closes: the period 13 general ledger, showing budget, expended and turnback for each department at the year-end close. |
| money_in | Which fund and account each field-rental receipt from Lunenburg Youth Soccer was posted to, and whether the $15,000 turf contribution is inside or beside them | The district’s records-request answer lists seven receipts, FY2024–FY2026, $39,073.50 in all, with one MUNIS reference; the town’s FY26 special-revenue report carries fund 1306 School Facilities Use Revolving and fund 1545 Artificial Turf Revolving as balances only — closes: the journal detail export for funds 1306 and 1545, FY2024–FY2026, the same report the archive holds for fund 1301 |
| money_in | Which fund pays the teacher salaries a district charges to grants and revolving accounts? | DESE’s function-code file splits spending into general fund and grants-plus-revolving, and the gap between comparable districts is large: Harvard charges $2,482 per pupil of TEACHER salaries to grants and revolving funds where Lunenburg charges $363 (FY2025, over total FTE pupils). That single line is the largest part, about half, of the difference in what the two draw from outside the appropriation. (Corrected 15 October 2026: this row said $4,964 and $726, each exactly double -- DESE's category subtotal row had been summed with its own line items.) The file does not say WHICH fund — a specific grant, school choice tuition received, a tuition agreement — and the answer decides whether it is something Lunenburg could pursue or a feature of one district’s circumstances. — closes: DESE’s End of Year Pupil and Financial Report for the district, which reports spending by individual fund. |
| money_in | Which of the FY2011 receipts the Town collected are TAXES & EXCISES, which are FEES, and which are NON RECURRING REVENUE? | Page 58 of the FY2011 annual town report prints 90 receipt lines under ten block headings and then a nine-category SUMMARY OF RECEIPTS footed to a GRAND TOTAL of $27,388,537.87. The summary ties to the cent, and every detail figure on the page is now transcribed, but the page never says which detail line belongs to which category and the headings are not the categories — ten blocks against nine categories, one block unheaded, and FEES naming both a block and a category without the two agreeing. Five categories can be reproduced exactly (LICENSES AND PERMITS, STATE REVENUE, SPECIAL ASSESSMENTS, INVESTMENT INCOME, TRANSFER FROM OTHER FUNDS); four cannot. TAXES & EXCISES comes out $23,947.19 OVER its printed total, FINES & FORFEITS $2,025.00 SHORT, and FEES ($502,520.65) and NON RECURRING REVENUE ($71,325.29) cannot be reconstructed by any grouping the page states. So the town’s own revenue mix for FY2011 — how much is tax, how much is fee, how much is one-off — cannot be read off the document that reports it. This is the same limit already registered for FY2016, FY2020 and FY2021 and it recurs because the format does. — closes: the Treasurer’s or Accountant’s FY2011 receipts detail as the accounting system prints it, with each receipt account carrying its revenue classification (a MUNIS revenue report by account), which is the only document that states the mapping rather than assuming it. |
| money_in | Which of the FY2020 receipts the Town collected are TAXES & EXCISES, which are FEES, and which are NON RECURRING REVENUE? | The Treasurer's FY2020 receipts page (annual town report PDF p24) prints 100 line items in three free-form label/amount columns with NO column header, and a SUMMARY OF RECEIPTS block of nine categories footing to a GRAND TOTAL of $43,089,202.54. Both halves of the page were read off its own embedded bitmap on 2 October 2026 and both close to the cent: the 100 detail lines add to the GRAND TOTAL, and so, separately, do the nine summary lines. Six of the nine categories are defined by a heading the page prints above their lines and each foots exactly -- licenses and permits $331,254.75 (19 lines), state revenue $9,790,141.52 (12), special assessments $68,681.50 (3), fines and forfeits $37,182.61 (4), investment income $102,340.41 (1) and transfers from other funds $2,291,492.46 (1). The other three print no heading that separates them, and their 60 lines foot as ONE block to $30,468,109.29, the sum of the three printed category totals. A residual does fit -- moving SUPPL TAX-NEW CONSTRUCTION $10,057.81 out of taxes and $100,180.88 of RESCUE WAGON out of non-recurring would close all three -- but that is arithmetic choosing a grouping rather than the document stating one, and other partitions fit the same three printed totals equally well. So we can say what the town took in, and not how it classified 60 of the lines. This is the SAME gap already registered for FY2021 and it is a property of the form, not of one year. -- closes: the Treasurer's own receipts workbook for FY2020, the file the page is printed from, which carries the category each line is coded to. Not published; a records request to the Town Treasurer would obtain it. |
| money_in | Which of the FY2021 receipts the Town collected are TAXES & EXCISES, which are FEES, and which are NON RECURRING REVENUE? | The Treasurer's FY2021 receipts page (annual town report PDF p25) prints 100 line items in three free-form label/amount columns with NO column header, and a SUMMARY OF RECEIPTS block of nine categories footing to a GRAND TOTAL of $44,252,049.61. Six of the nine categories are defined by a heading the page prints above the lines and each foots exactly -- licenses and permits, state revenue, special assessments, fines and forfeits, investment income, transfers from other funds. The other three print no heading that separates them, and their 60 lines foot as one block to $31,988,239.19. A residual does fit -- the taxes/interest/demands lines plus prior year excise and prior year interest, LESS supplemental tax on new construction, is $31,200,742.70 to the cent -- but that is arithmetic choosing a grouping rather than the document stating one, and other partitions fit the same three printed totals equally well. So we can say what the town took in, and not how it classified 60 of the lines. -- closes: the Treasurer's own receipts workbook for FY2021, the file the page is printed from, which carries the category each line is coded to. Not published; a records request to the Town Treasurer would obtain it. |
| money_in | Which school special revenue funds the period-13 special funds report leaves out | The FY2023 annual town report's special revenue schedule prints $3,667,636 received and $4,333,280 spent across every school special revenue fund; the MUNIS period-13 special funds report for the same year, delivered 6 October 2026, carries $2,440,883 and $2,962,716. The difference is funds that report does not carry -- among them, the annual report's FY22 ESSER II #115, FY22 ARP Idea #252 and FY22 Idea ARP #264 rows have no fund of that name or number in the MUNIS report. And the FY2026 report books $59,333 of grant revenue against $557,427 of grant spending. A reimbursement booked after the close, a grant receipt held in a fund outside the report, and both together all fit; the report cannot separate them, so whether the schools spend the grant money that comes in can be said only for the funds it carries. Measured in /analysis/spending-what-comes-in. — closes: the MUNIS period-13 revenue and expense report for EVERY school special revenue fund, FY2023 to FY2026, with each fund's opening and closing balance (or the trial balance for funds 2xxx at each close). |
| money_in | Why Chapter 70 aid moved by more than the components DESE publishes, in FY2010, FY2011, FY2012 and FY2019 | DESE’s Chapter 70 trends workbook prints the aid build-up as named increments — foundation aid, down payment aid, growth aid, target aid phase-in, minimum aid — and in fifteen of the nineteen differenced years they sum to the change in aid to the dollar. In four they do not. FY2010 and FY2011 carry a separate c70aidreduct column of −$92,416 and −$279,101, and only the first of the two accounts for its year; FY2012 moved +$24,149 with every increment printed as zero; FY2019 moved $13,365 more than its single increment. The workbook prints no residual line, so the difference has no name in the source. It matters because this page reads the components to say what the formula did, and in those four years the components do not add up to what it did. — closes: DESE’s Chapter 70 aid calculation worksheet for FY2010, FY2011, FY2012 and FY2019, which states every adjustment applied to a district between the prior year’s aid and the current year’s. |
| money_in | Why DLS certifies a different amount from the free cash its own proof identifies | The Division of Local Services’ free cash proof cross-foots exactly: in all 45 town-years of the nine-town set the eleven component lines sum, to the cent, to the workbook’s own Identified Free Cash July 1,. But that is not the figure DLS certifies. Current Year Calculation — the number the Town quotes, the number the Finance Director announced, and the number that carries into the next year — differs from it in all 45, by $361,912 for Lunenburg in 2025 and by 69% for Uxbridge in 2024. The workbook prints no reconciling line, and nothing in this archive states what the adjustment is. — closes: DLS’s free cash certification letter to the Town, which states the adjustments made between the balance sheet the Town submitted and the amount certified. |
| money_in | Why does DESE's FY2024 figure for out-of-district tuition paid from funds other than the general fund exceed what the circuit breaker account paid by exactly the FY2024 circuit breaker payment? | DESE's End of Year Financial Report reports FY2024 tuition (functions 9300 and 9400) paid from funds other than the general fund. The town's year-end report for the school special funds shows what the circuit breaker account (fund 2640) paid in tuition that year. The remainder between the two is, to the dollar, the circuit breaker payment DESE's reimbursement file lists for FY2024; in FY2023 and FY2025 the remainder is small. The figures are computed, not typed, in the report's payload under circuit_breaker.unexplained. It may be a coincidence, a second fund, or the receipt reported as an expenditure; nothing in this archive distinguishes them, so /analysis/special-education-costs shows the figure as 'other funds' and says it cannot explain it. Computed in scripts/build_sped_costs.py, which refuses to print the sentence if the equality stops holding. — closes: the district's FY2024 End of Year Financial Report as submitted to DESE (Schedule 1 by fund), or the school special funds year-end report for any fund other than 2640 that paid tuition in FY2024. |
| money_in | Why local receipts come in above the town’s own estimate | The state's free cash proof shows receipts above the town's estimate (its line CL#6) as one of the largest components of Lunenburg's free cash in every one of the five years it covers, and above a million dollars in four of them. On 28 May 2026 a Finance Committee member told the committee the town had not collected less than four million dollars in local receipts in ten years, against a current estimate of 3.535 million. Three readings fit the same line: an estimate set low on purpose as a buffer; receipts that grew faster than any forecast could know; or one-time receipts that should not be estimated at all. They imply different things about how much of each year's free cash is predictable, and so about how much the budget could count on. Measured in /analysis/sitting-on-money. — closes: the town's local receipts estimate against actual collections, by category, for each year -- the local receipts page of each year's Tax Rate Recapitulation beside DLS Schedule A. |
| money_in | Why the Town’s undesignated fund balance and DLS’s free cash differ | Two publishers describe the same 30 June balance sheet and print three different figures. The Town’s annual report roll-forward gives an undesignated fund balance of $4,236,488.24 at 30 June 2025; DLS identifies $3,716,282 of free cash on the same date and certifies $3,354,370. Each worksheet cross-foots exactly to its own printed total, and the FY2024 report’s closing balance is the FY2025 report’s opening one to the cent — so neither is in error, and no document in this archive prints a line between any pair of the three. — closes: the Town’s free cash submission to DLS (the balance sheet and the reconciliation of receivables and deferred revenue that accompanies it). |
| money_in | Why the general fund’s starting budget grew more slowly than the levy limit, FY2010 to FY2025 | Measured from the general fund history against the Division of Local Services’ certified levy limits, the whole starting budget grew more slowly each year, on average, than the levy limit did — even with the FY2025 override taken back out of the limit. Three readings fit: the rest of the revenue (state aid, local receipts, free cash) grew more slowly than the levy; the town levied below its limit; or money raised under the limit went outside the general fund operating budget, to capital articles or enterprise subsidies. They imply different things about how much room the levy has left. Measured in /analysis/department-budgets. — closes: the Tax Rate Recapitulation for each fiscal year, which states the levy actually raised, the excess levy capacity and every other source the budget was balanced with. |
| money_in | Would regionalising change what the state sends Lunenburg, and by how much? | This is among the most common arguments made about the deficit and the archive cannot price the whole of it. Regional districts receive regional transportation reimbursement under c.71 s16C that single-town districts do not, and that part IS held: the DLS Cherry Sheet line, FY2010-FY2027, priced in the row 'What would regionalising actually be worth to Lunenburg...'. What is not held is how the Chapter 70 formula would treat a newly regionalised district, or the busing cost a regional district takes on against the reimbursement. Per-pupil SPENDING is held and is a different quantity: it says what a district spends, not what the state sends. — closes: DESE guidance on how the Chapter 70 formula treats a newly regionalised district, and a regional district's own budget stating transportation cost beside the reimbursement. |
| money_out | Debt service by project | two accounts for ALL town borrowing · school buildings cannot be separated |
| money_out | How many athletic bus trips each sport took, and what each trip cost | The district's sport-by-sport workbook gives transportation dollars per sport for FY2024 to FY2026 as sums of charges, and the posted schedules (ArbiterLive) list each team's away games and venues from FY2022. /analysis/transportation prices the schedules at the Dee Bus contract's per-mile and per-hour rates as our estimate, with the waiting hours an assumption from the bid form. What no document shows is which games actually got a bus, whether teams shared one, how long each bus waited, and what each charge on the sheet was. — closes: the Dee Bus athletic and field-trip invoices for FY2024 to FY2026, with date, team, miles and waiting hours per trip, from the Business Office |
| money_out | How many vans, monitors and routes special education transportation pays for, and at what rates | The general fund special education transportation line is the only published figure: voted and spent, by year. The district's FY2026 budget overview attributes the line's rise to a rate increase and to more vans and monitors, and the August 2026 route list for the regular buses excludes the special education vans. The van contract is not in this archive, so price, routes, children and monitors cannot be separated, and no cost per child transported can be computed. — closes: the district's contract with Van Pool Transportation for special education transportation and its rate schedule, with the number of vans, routes and monitors by year; from the Business Office by records request. |
| money_out | How much of DESE’s general fund figure for Lunenburg the school budget paid, and how much other town budgets paid | DESE’s per-pupil figure counts general fund spending on the schools whoever paid it: insurance for retired school staff (function 5250) is in it, and in FY2026 the town carries that insurance in its own insurance department (SCHRETHLTH), not in the school appropriation. DESE’s expenditures-by-function file has one GEN_FUND column and does not say which budget paid which line, so the school appropriation divided by pupils is not DESE’s figure a pupil, and the difference cannot be itemised from it. Found building /school-spending/per-pupil-line-by-line. — closes: the district’s End of Year Financial Report as filed with DESE, whose Schedule 1 reports expenditures by the school committee and, separately, expenditures by city or town (part B, row 1016 of DESE’s FY2025 form), for the same year. |
| money_out | How much of Harvard’s higher spending a pupil comes from being a smaller district | Harvard spends more a pupil than Lunenburg on DESE’s all-funds measure, and divides its spending among fewer pupils. A smaller district spreads costs that do not shrink with enrolment — a principal, a building, a superintendent’s office — over fewer pupils, so part of any per-pupil gap may be scale rather than programme, and DESE’s function-code file cannot say how much: it reports dollars by function, not which costs are fixed. The Bromfield shelf states this as a hypothesis and tests nothing. — closes: nothing published settles it; DESE’s staffing by job classification and salary (EPIMS) for both districts, school by school, would bound the share that is fixed posts. |
| money_out | How much of a receiving district’s per-pupil spending Lunenburg actually pays | 177 Lunenburg children were educated outside Lunenburg Public Schools in FY2026 and DESE publishes what each receiving district spends for every pupil, all funds. It does not publish what LUNENBURG pays towards any of it, and the two are different quantities by construction: a receiving district’s per-pupil figure is its whole spending over its whole pupil count, paid for by its own levy, its own Chapter 70 aid, its grants and its revolving funds as well as by any tuition or assessment. Lunenburg’s side arrives as three unlike mechanisms — a member-town assessment for Montachusett, a school choice tuition set by statute, and a charter tuition set by formula — and none of them equals the receiving district’s per-pupil figure. So the honest statement is that the districts our children go to spend more for each pupil than Lunenburg does; what a Lunenburg child costs the town at each of them cannot be read off it. — closes: the Town’s cherry sheet assessment detail for the fiscal year, which states the charter tuition, school choice tuition and regional assessment by receiving district, set beside DESE’s End of Year Financial Report for each of those districts. |
| money_out | How much of a school budget stops being spent when a student leaves | A student leaving removes revenue at once and in full. It removes cost only where a staffing or programme decision is taken, and nothing published says at what enrollment a class section is removed, a bus route is dropped or a teacher is not replaced. So the avoidable share of a per-pupil figure is an assumption in every scenario on this site, and it is the input the answer is most sensitive to: at the FY2027 appropriation per pupil, the difference between assuming none of it is avoidable and assuming all of it is is larger than the entire revenue effect being modelled. — closes: the district’s own staffing and section plan by grade — the document behind the School Committee’s 16 April 2025 discussion of "each grade, their size, and potential seats" — which states the class sizes at which a section is added or removed. |
| money_out | How much of each earlier year’s ski team cost was Lunenburg’s, and how much the other co-op towns’? | The district’s by-sport workbook prints one figure for the ski team and it is the whole four-town co-op’s cost — $12,984 in FY2025, $10,960 in FY2024. The only invoice held is the 2025-26 one, where Lunenburg’s share was 21.4%. Nothing says any earlier year split the same way, or that the co-op had the same members — closes: the co-op invoices for the earlier seasons, which the athletic department issues and holds |
| money_out | How much of the $236,766.94 still encumbered in the FY2026 school general fund at period 13 will be paid, how much released to the surplus, and how much carried into FY2027? | The FY2026 period-13 MUNIS report for department 300 (sources/data/munis-school-ytd.csv), run on 6 October 2026, shows $482,118.07 unspent and $236,766.94 still encumbered across 27 accounts -- the largest electricity ($62,362.13) and collaborative tuitions ($58,708.07). Between the period-12 run of 1 September 2026 and that run, spending did not move in any account and one encumbrance of $16.95 was released, so the FY26 school surplus is still anywhere from $482,118.07 to $718,885.01. The FY2025 report run the same day shows nothing encumbered. A ledger shows a commitment, not whether it will be paid, cancelled or carried forward, and which of those happens decides the surplus. /analysis/fy26-school-surplus. — closes: the FY2026 period-13 report for department 300 run again after the year-end close, and the Town Accountant's list of FY2026 encumbrances carried forward into FY2027, by account. |
| money_out | How the Monty Tech assessment splits between operating, transportation and capital | A regional assessment is four parts, and the district names them: required minimum contribution set by the state, transportation and other operating above minimum net school spending, capital outlay, and bonds. The split is published for FY2024, FY2026 and FY2027 in the district’s own budget books, and for FY2023 it was itemised in prose at a Finance Committee meeting. Every other year holds only the total. That includes FY2025, and it includes all eleven annual-report years FY2011 to FY2022 — so for the whole of the series this project charts, the roughly 4-10% of the assessment sitting above the state minimum cannot be attributed to transportation, to capital or to debt. It matters because those three behave nothing alike: one tracks a busing contract, one is voted year by year, and one is fixed until it ends. — closes: the district’s annual assessment certification to each member town, which states the four components separately; the Town Accountant receives one every year and the district retains all of them. |
| money_out | How the district built its FY2027 athletic transportation estimate | On 26 August 2026 the Superintendent put restoring high school athletic buses at about $58,880, attributing the lower figure to scheduling competitions closer to Lunenburg, more home competitions, and estimating from actual schedules and prior-year spring costs. /analysis/transportation tests the first two reasons against the posted schedules and prices the schedules with the contract's rates, but most of its result is the hours a bus waits, which is an assumption. Without the worksheet behind the estimate, the two cannot be set side by side assumption for assumption. — closes: the worksheet or calculation behind the $58,880 FY2027 athletic transportation estimate (trips, miles and waiting hours by team), from the Superintendent's office. |
| money_out | How the district’s own accounts add up to the net school spending DESE reports | NARROWED 5 October 2026 for FY2024. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include the district's FY24 End of Year Financial Report workbook, whose own Schedule 19 states net school spending as 22,496,198 (reports sheet, row 28) -- a working copy, so DESE's filed figure governs. Net school spending excludes debt service, capital, transportation and food service — stated in the town’s own record, to the Finance Committee on 20 March 2024: “This is the minimum spending every school district must spend not including debt services, capital transportation, meals.” Because of those exclusions no figure in the town’s appropriation, the district’s budget book or the MUNIS ledger equals the net school spending DESE reports, and nothing in this archive maps the district’s line items onto DESE’s definition. So a reader cannot get from a budget line they can see to the one number the state enforces. — closes: the district’s End of Year Financial Report as filed with DESE, whose schedules derive net school spending from the district’s own accounts line by line; requestable from the Superintendent’s office or from DESE. |
| money_out | School share of Medicare, active health insurance and the insurance reserves | Five of the seven FY2026 insurance accounts — active health insurance, Medicare, life insurance, insurance cost control and Public Employee Committee expenses — carry nothing in their names that says which side of the town they are for, so the school portion of them is not separable in any year. — closes: The town’s Chapter 32B enrollment schedule, which counts insured employees and retirees by department. |
| money_out | School share of the pension | inside WRRS · town and school staff together, no published split |
| money_out | School share of the town’s health insurance before FY2026 | The town’s insurance department prints one undivided Health Insurance CH 32B line in fifteen of the sixteen annual reports · a school share is named only in the FY2023 report and in the FY2026 ledger, so no year between them can be split. — closes: The town’s Chapter 32B enrollment schedule, which counts insured employees and retirees by department and would split every year rather than the two that happened to be printed. |
| money_out | Was the FY2026 school surplus thrift — did discretionary spending slow late in the year? | A speaker at the School Committee on 7 October 2026 said, per our machine captions, "We were thrifty"; no posted minutes record a decision to hold FY2026 spending. The period-13 ledger shows where money was left (by our category table, 59% of it in supplies, upkeep and equipment) but only as year-end totals, so restraint, a postponed project and a line budgeted high look identical. — closes: the school general-fund journal (MUNIS GL detail) for department 300 by month, FY2023 to FY2026, so discretionary spending in the last quarter can be set against prior years. |
| money_out | What DESE’s per-pupil figure buys | DESE publishes dollars over a pupil count, by function, for every district. It does not publish what those dollars bought: a Teachers line is not a class size, an Instructional Materials line is not a textbook count, and a Paraprofessional FTE is not a person or a caseload. So Lunenburg spending $226 a pupil on instructional materials, equipment and technology against a statewide median of $626 is a measured difference in money and not a measured difference in what children have. Rule 7’s standing form: dollars are not services. — closes: the district’s own inventory and purchasing records for the materials and technology line, which would say what was bought and when. |
| money_out | What Lunenburg pays in school choice sending tuition, and for how many children | The town pays tuition to every district a Lunenburg child chooses into, and that money is assessed rather than appropriated: it sits inside the single State Assessments (Outside Operating FY27) line of $1,069,349 in the FY2027 Town Meeting booklet, which is never broken out. The archive now holds DESE’s count of the children — 58 leaving under school choice in SY2026 — and still not one figure for what they cost. The statutory base rate is $5,000 a child under M.G.L. c.76 §12B and is higher for special education, and no document in this archive states either, so every scenario of students transferring out is priced on an assumption. — closes: DLS Cherry Sheet CS 1-EB (estimated charges) for Lunenburg, which prints the school choice sending assessment on its own line. |
| money_out | What Lunenburg’s Chapter 32B §19 Public Employee Committee agreement actually sets — the premium split, the opt-out payment, and the plan menu | CLOSED 6 October 2026 for FY27–FY29. The memorandum of agreement (sources/contracts/pdf/pec-agreement-fy27-fy29.pdf, 5 October) sets the plan menu, in-network cost-sharing, the HSA contribution, the $96 Medicare Part B reimbursement and the splits — 75/25 for active plans and Managed Blue for Seniors, 50/50 for Medex — 1 July 2026 to 30 June 2029. Its two blank attachments arrived on 6 October from the Town’s Human Resources Director, who wrote that ""The Benefit Summaries are Attachment A, and the Opt-Out Policy is Attachment B"": four Blue Cross summaries of benefits for the four active plans (pec-fy27-attachment-a-1 to -4) and the FY27 opt-out guidelines (pec-fy27-attachment-b-opt-out-policy.pdf), which pay $3,000 for individual coverage, $6,000 for family and $3,000 for a change from family to individual. Still open: summaries for the two Medicare plans, registered separately. — closes: closed by the documents named. |
| money_out | What Lunenburg’s net school spending actually was in the two most recent years | DESE publishes net school spending against the Chapter 70 requirement for thirty-three fiscal years, and the last two of them are BUDGETED rather than actual — the column carries a stage flag saying so. So the most recent MEASURED position Lunenburg has against the state is FY2024, and every statement about where the town sits NOW rests on a budget somebody voted rather than on money anybody spent. The two may not be differenced and are never drawn as one line, which is why /what-the-state-requires-us-to-spend carries them as separate series. — closes: DESE’s Chapter 70 district profile workbook for the year in which FY2025 moves into the actual column, published annually at educationtocareer.data.mass.gov; the district’s own End of Year Financial Report to DESE for FY2025 is the filing that produces it. |
| money_out | What Monty Tech spends, and on what | Lunenburg is assessed $1,334,521 for Montachusett Regional Vocational Technical in FY2026 and that figure is what the town is BILLED, not what educating 101 foundation pupils costs. PART OF THIS ROW HAS CLOSED. DESE’s RADAR district comparison publishes an all-funds per-pupil total for LEA 08320000 for FY2009 to FY2025 — seventeen consecutive years, every one of them summing to the workbook’s own printed in-district total — so the district’s per-pupil spending CAN now be tracked over time and set beside Lunenburg Public Schools’ own, measured the same way, which is what /what-other-districts-spend does. WHAT REMAINS OPEN is the composition and the attribution. RADAR gives ten per-pupil function columns and no dollars, no fund split and nothing specific to Lunenburg’s children; the archive holds two of the district’s own budget books — the FY2024 hearing book and the FY2027 presentation — so a FY24-to-FY27 view by DESE function code exists in dollars, with no year before FY2024 and nothing for the years between the two books. So what the district spends on a Lunenburg child, as against on any child, is still not established. — closes: Monty Tech’s annual budget book for each year, presented to its own School Committee and to the Lunenburg Finance Committee every March, and DESE’s End of Year Financial Report for LEA 08320000, which gives all-funds spending by function in dollars after the year closes. |
| money_out | What a fee-funded school programme costs that is not booked to its own fund | A revolving fund that takes in more than it spends covers the costs BOOKED TO IT, and nothing more (rule 11). The ledger can test whether the general fund also carries a programme's costs only where both book to the same programme-specific DESE function code, and among the schools' fee and lunch funds that is true of athletics alone (function 3510, where the general fund booked most of the four years' athletics spending). Extended day, after-school activities, facilities rental and adult education book their spending to function codes that name no programme -- 2000, 4000, 5200 -- so whether the general fund pays any of their custodians, utilities, administration or benefits cannot be shown either way. 'Pays its own way' therefore cannot be stated for any of them beyond their own books. Measured in /analysis/spending-what-comes-in. — closes: the district's indirect-cost allocation for each revolving programme, or a cost study listing the general fund accounts that carry part of each programme's cost. |
| money_out | What a level-service budget for each town department would have cost, year by year | The general fund history the Finance Committee supplied holds each department’s original budget, transfers, revised budget and actual spending, FY2010–FY2025, and no request: nothing in it says what a department asked for or what keeping its service level would have cost. The schools present a level-service budget, and its difference from the appropriation is what is reported as the school deficit. For the town’s departments no equivalent figure is in this archive for any year before FY2027 — the year the Town Manager asked department heads for level-service budgets (Finance Committee minutes, 12 February 2026) and the override questions covered town and school alike — so whether they would have shown a gap in earlier years cannot be measured, and the difference between the two sides may be one of process rather than of cost. — closes: each town department’s budget request as submitted to the Town Manager, with the Town Manager’s recommendation beside it, for each fiscal year, held by the Town Manager’s office. |
| money_out | What any individual sport actually costs | Three documents state per-sport costs and they disagree — see “Which of the three published per-sport athletics cost figures is correct”, which supersedes this row's original claim that the district's own athletics workbook was the only place per-sport costs appear. The district has publicly declined to stand behind the figures: School Committee minutes of 24 June 2026 record that community members 'have asked straightforward questions regarding the actual cost of middle school athletics' and that 'the answers have been inconsistent'. The one independent record we hold does not reconcile to the workbook — in FY2024 the revolving fund paid out $317,004 and the general fund carried $285,281 against a stated workbook cost of $351,643, and nothing published explains the difference. And the fund's own disbursements cannot close it either: each carries a warrant number and nothing else, with no vendor, no description, and not one mention of any sport across three years of transactions. So participations, fees, and the fund's total in and out are established; what a sport costs is not. — closes: the accounts-payable detail behind the athletics warrants — vendor and description per payment — which the town's accounting system holds and does not publish. |
| money_out | What any special revenue fund bought | no expense report exists for these funds · purpose is presumed, never observed |
| money_out | What did Lunenburg owe, by borrowing and by fiscal year, from FY2020 to FY2035? | FY2019 PDF pages 49-52 print the whole forward debt repayment schedule -- about seventeen named borrowings against sixteen fiscal-year columns, each printed as PRINCIPAL / INTEREST / ADMIN FEE under a TOTAL row, on the order of 800 cells. It is fully self-proving (PRINCIPAL + INTEREST + ADMIN FEE = TOTAL, per issue per year, roughly 270 independent assertions). None of it has been read: debt-repayment-detail-refused.csv records 3 issue rows on p50 and 5 on p52 and no closing block, because the column header band at the top of each page sits inside the top 22.7% that the clipped render discarded. So the town's own forward debt service for sixteen years is published and unread. - closes: nothing from the Town is needed. The pages are legible at 150 dpi; this closes by reading them, after the document is re-OCR'd with the current renderer so the header band is visible. RESOLVED 2 October 2026: read in full, and the sizing in this row was wrong in every figure — it is FIFTEEN borrowings not seventeen, TWENTY-EIGHT fiscal years plus a TOTAL column not sixteen, 879 printed figures not ~800, and 213 issue-year identities not ~270. Measured off the pages. 198 of 213 close exactly and the 15 that miss by $1 are every one of them a Mass Water Pool trust line, which is displayed-dollar rounding and not a misread: bond principal, the column with no cents beneath it, ties exactly for 13 of 15 issues and the fifteen printed issue principals sum to $46,568,549 at ZERO tolerance. |
| money_out | What does Lunenburg pay, per child, for each place a resident child is schooled outside the district’s own schools? | DESE publishes WHERE Lunenburg children are enrolled — 177 outside the district in FY2026 — and nothing about what any of them costs. A count of children is not a tuition, a charter assessment or a share of a regional assessment, and the general fund budget shows the appropriation rather than the fund each payment leaves. So the two halves of the question a resident actually asks — how many leave, and what that costs us — cannot be joined. — closes: DESE’s End of Year Financial Report for Lunenburg, which separates tuition and assessment spending by fund and by receiving district. |
| money_out | What does one out-of-district placement cost Lunenburg in a year? | DESE publishes what the district spent on tuition to private schools and collaboratives (functions 9300 and 9400), by fund, and the town publishes how many children were placed on 1 March. Nothing in this archive prices a single placement. /analysis/special-education-costs divides the first by the second and labels the result our estimate; /what-special-education-costs refuses to, and both are right about what the quotient is not: it mixes residential, day and collaborative places, it counts a child placed for part of a year as either a whole year or nothing depending on one day, and transportation is in a different line. A reserve for an unplanned placement needs the price of one, and the only figure available is that estimate. — closes: the accounts-payable detail behind general fund and fund 2640 accounts in functions 9300 and 9400 -- vendor, invoice period and amount, no student names -- from the Town Accountant, or the district's tuition rate sheets for the year. |
| money_out | What does the FY2027 out-of-district tuition budget assume: which placements, for which months, and how much the circuit breaker will pay? | The district's FY2027 workbook (budget-workbooks/fy27-proposals.xlsx) budgets $700,142 across private and collaborative tuition, the same figure in every scenario. The same two general-fund lines spent and committed $1,202,770.94 in FY2026 at period 13, and the circuit breaker fund (2640) paid $333,494.89 more. Placements ending, a larger circuit-breaker share, or FY2027 tuition paid in advance out of FY2026 money all fit, and the ledger cannot tell them apart. /analysis/fy26-school-surplus — closes: the FY2027 tuition worksheet (each placement anonymised: setting, rate, months, and the fund expected to pay it) and the service period of every FY2026 tuition invoice. |
| money_out | What each announced school position cut was worth | Only the FY2027 documents print a dollar figure beside a position. The FY2026 list the School Committee approved names 39 positions and prints no amount against any of them; the FY2025 impact slides print an FTE and a consequence and no money. So the register can say what was cut and, for one cycle in five, what it saved — and a figure beside a post is a budget-line saving, net of grants and fees (rule 11), rather than what the post costs. — closes: the personnel cost worksheet behind each year’s approved school budget, from the Business Office. |
| money_out | What each of the town’s 500-odd accounting measures did before FY2026, line by line — the appropriation history of every department and the year-by-year activity of every fund | The registry (fund-owners.csv) lists every measure the FY26 reports print, but only the special-revenue funds have a read, tied history (FY2011–FY2023); the appropriation lines’ history sits in the annual reports where the extract cannot yet say which printed column is which, and FY2024–FY2025 fund activity was never printed — closes: the year-to-date budget reports and special-revenue reports for FY2023–FY2025 from the Town Accountant. |
| money_out | What each town department was appropriated and spent in FY2024 and FY2025 | NARROWED 5 October 2026 for FY2024. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include a general fund budget-vs-actual history for every department, FY2010-FY2025, by MUNIS account (original, transfers, revised, actual). Its FY2025 column is part-year, so FY2025 stays open. Special revenue funds are not in it. The town published a General Fund Appropriations / Summary & Classification of Accounts schedule in every annual report through FY2023 — every department, appropriated against expended, with a printed GRAND TOTAL — and STOPPED. Its own contents pages show it: the FY2023 Accountant section lists the schedule and the General Fund Revenue and Expenditures charts; FY2024 lists a balance sheet, receivables, special revenue, capital, enterprise, trust and undesignated fund balance, and no appropriations at all; FY2025 is shorter again. FY2024 still prints the warrant’s FY 2025 Omnibus Budget, which is what was VOTED and not what was spent; FY2025 prints no department figures in any form, only Article 10’s total of $49,374,465.00 split across five funding sources. So for two consecutive years there is no published answer to what any single department was given or used — the question this archive answers for FY2011 through FY2023. — closes: the Town Accountant’s general fund appropriation and expenditure report for FY2024 and FY2025, the same schedule the annual report printed through FY2023, or the MUNIS year-end expense report by department for those years. |
| money_out | What folding one athletics team would actually stop the town spending | A per-sport figure is not a saving. The district’s own workbook divides district-wide costs into thirds and pushes them into season totals — the notes column headed “Costs for all 3 Seasons” reads, at AX6, “MIAA 1/3 4550. -1516.67”, and at AY10 “MIDWACH - 1/3 7000 - 2333.33” — so league membership, trainer supplies, CPR certification and the online forms subscription sit inside per-sport totals. Whether any of those actually falls when one team folds is untested: a league assessment, a trainer’s hours and an insurance premium may each scale with the number of teams or not at all. This app answers it structurally rather than empirically — the FY27 athletics lines are split into a coaching-and-equipment pool that follows the teams and an overhead that does not, and the published per-sport figures are used only as weights to spread the pool — which bounds the saving without establishing it. — closes: the district’s athletics budget for a year in which a team was actually dropped, line by line against the year before, or a quotation from the MIAA and MIDWACH showing how each assessment varies with the number of teams entered. |
| money_out | What share of the schools’ grounds, custodial, heating and utility cost is athletics | The town’s ledger codes every school account to a function, and athletics is function 3510 — 12 accounts, $518,334 appropriated in FY2026, which ties to the cent to the district’s own budget book. Custodians, heating, utilities, grounds and building maintenance are separate functions in the same printout, $2,035,523 revised across the whole school department in FY2026, and not one of those accounts carries the athletics program segment. The fields are mown, the gym is lit and heated and the lines are painted, so some of that $2,035,523 is a cost of school sports — but nothing published splits it out, no document states an allocation, and the athletics revolving fund’s cashbook does not name a field, a light or a custodian on any of its 277 postings. So every published athletics total, including this project’s, is a floor and not a total. — closes: a cost allocation from the district or the Town Accountant apportioning functions 4110, 4120, 4130, 4210 and 4220 across the programmes that use the buildings and grounds; failing that, the accounts-payable detail behind the grounds-maintenance warrants, which would at least name what was mown, lined or resurfaced and when. |
| money_out | What the Dee Bus rates and fleet were in FY2025, so the 7.6% FY2026 increase can be split into price and buses | The FY2026 budget's "7.6% line increase = $69,300" is exactly the new contract's first-year regular-route price ($976,500: 8 buses at $485 and 3 at $515 a day, 180 days) over the FY2025 budget line ($907,200). The new contract fixes every year's price per bus per day, so FY2027 and FY2028 are known; the FY2025 side is one number, $907,200, which fits eleven buses at an average $458.18 a day (all of the 7.6% is price) and ten at $504.00 (the increase is a bus, not price) equally well. A district presentation says 11 buses were in use; that is a statement, not a rate. Requested on 9 October 2026 and not delivered. See notes/findings/DEE-BUS-CONTRACT.md. — closes: the FY2023-FY2025 Dee Bus contract and its bid form (daily price per bus by size, number of buses), or the FY2025 Dee Bus invoices. |
| money_out | What the PEG Access fund spent in FY2020 and in FY2024 | In both years the annual town report prints two totals for the same year's PEG expenses and they differ. FY2020, both tables on printed page 75: FY20 Line Item Expenses by Percentage foots to Total $116,933.22 and FY20 REVENUE vs EXPENSES prints Expenses $116,933.54 -- 32 cents apart. FY2024: the statement on printed page 63 prints Expenses $174,150 and the line-item table on printed page 64 foots to Total $174,151.16, and since that statement is printed in whole dollars throughout, rounding 174,151.16 gives 174,151 rather than 174,150. Each table foots to its own printed total exactly, so neither is internally wrong; they disagree with each other. FY2017 is a third case of the same shape: its ten printed expense lines add to $74,665.74 against a printed TOTAL of $74,215.73, a difference of $450.01, of which $450.00 is the Vendor Expenses line that the facing pie chart also omits. WHAT IS NOT ESTABLISHED: which figure is the year's expenditure in any of the three years. -- closes: the MUNIS year-to-date expense report (glytdbud) for the PEG Access and Cable Related Enterprise Fund for FY2017, FY2020 and FY2024, the same report the town already runs for the general fund. |
| money_out | What the athletic fee fund’s high school purchase-of-service account paid for in FY2026 | Account 1301-3-300-3510-06-0-00-2-531006, where athletic buses were charged before they moved to the general fund, books officials, ice time, dues and transportation together. In FY2026 -- the first year the general fund athletic transportation line was budgeted to carry the full cost of athletic buses -- it spent about as much as in FY2024, when it still carried most of them. Fits equally: officials, ice time or other costs rose; some buses are still charged to the fund; reclassifications landed in a different year. Nothing published separates them. — closes: the accounts-payable detail for fund 1301 account 531006, FY2024 to FY2026, by vendor and invoice, from the Town Accountant. |
| money_out | What the capital transfers bought | two transfer lines · no project detail |
| money_out | What the four ADJ EXP journal entries moved, and from where | $254,121.18 — 65% of everything that reached the athletics revolving fund in FY2025 — arrived on four general-journal entries whose entire description is an expense adjustment made per a memo. An entry raising cash in a fund and labelled as an expense adjustment fits at least three readings: expenses charged here and later moved elsewhere, a transfer in from another fund, or a correction of charges posted to the wrong account. Those are different facts about the world and identical facts on the page, and the same shape of entry could be adjusting any fund in the town without either budget document showing a trace. — closes: the five memos the ledger names, dated 08/12/24, 01/30/25, 05/02/25, 07/02/25 and 08/20/2025. |
| money_out | What the money was that reached departments’ revised budgets outside any recorded transfer | In the general fund history the revised budget differs from original plus transfers in and out on about one account-year in twenty, almost always upward, in every year FY2010–FY2025, and the workbook’s own Grand Total shows the same gap. By dollars, most of it is no larger than what the same account left unspent the year before, which is what a carried-forward encumbrance would look like; the rest fits a supplemental appropriation at a special Town Meeting. Neither is confirmed, and the difference matters: a carry-forward is last year’s money, a supplemental appropriation is new money. Measured in /analysis/department-budgets. — closes: the MUNIS budget amendment detail for each fiscal year, or the Town Accountant’s appropriations schedule with its APPROPRIATED FORWARD column, which the annual report printed through FY2023. |
| money_out | What the schools actually spent, per line, in any year before FY2026 | NARROWED 5 October 2026. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include the school department's FY2024 MUNIS year-to-date report at PERIOD 13 (glytdbud, FOR 2024 13, generated 08/07/2024, every school fund), which answers FY2024 by ledger, and a general fund budget-vs-actual history, FY2010-FY2025 by account, assembled from MUNIS into one workbook. FY2025 in that workbook is part-year. The district publishes a column headed ACTUAL in its forward budget books, and twelve years of it load as budget_figure where stage='restated' — the stage was called actual until 7 September 2026, and the rename is the point. Those are RESTATEMENTS — a prior year re-presented inside a document written by the party that spent it — and document-basis.csv classifies all sixteen source documents behind them as restatement (14) or forward (2). None is a ledger. The archive holds ten ledger documents in total, and the only ones reaching school general-fund spending are one quarter of FY23 and FY2026 period 12. So the question 'did the schools spend what they budgeted' cannot be settled before FY2026 from anything published: both sides of the comparison come out of the same budget book, and a restatement cannot show money moved between lines mid-year because approved transfers do not appear in a budget document. — closes: the MUNIS year-end expense report (glytdbud, period 13) for the school department for each year wanted, which is the same report we already hold for FY2026. |
| money_out | What the town’s 2020 post-65 Medicare transfer actually saved | The town states it cut the active renewal 2% and reduced OPEB liability by $5–6M; both are figures in a budget presentation with no actuarial valuation behind them in the archive, and c.32B §20A means a valuation exists — closes: the OPEB valuation filed with PERAC for the year of the transfer. |
| money_out | What was paid from the school budget lines that spent against a $0 budget, FY2023–FY2026 | The closed MUNIS ledger (sources/data/munis-school-ytd.csv, report gf-school, period 13) gives one spent figure per account per year and nothing else: not the payee, not the warrant, not whether it was salary for a person or a coding correction. /analysis/spent-with-no-budget lists every general fund line that spent against a $0 voted budget; for every one of them, what the money bought is unknown. — closes: a MUNIS general ledger detail (journal) export for department 300, FY2023–FY2026, for those accounts, with the warrant or payroll reference on each entry. |
| money_out | Where did each FY2026 school line-item transfer come from, and where did it go? | The MUNIS year-to-date report gives one NET transfer figure per account, so a line that gave and received money in the same year shows only the difference. The 29 July 2026 School Committee minutes record $11,000 moved out of natural-gas heating; the ledger shows heating up $11,024.22, net. The 5 November 2025 minutes record $13,500 moved to School Committee dues "to cover superintendent search invoice"; that line closed FY2026 with $13,689 unspent and had spent less than its original budget. /analysis/fy26-school-surplus — closes: the MUNIS budget transfer report for department 300, FY2026, gross, with each entry's date and counterparty account. |
| money_out | Where did the $122,502.44 that moved out of the FY2025 school department mid-year go, and what posted to department 300 after the School Committee's 17 September 2025 surplus statement? | The closed MUNIS ledger (sources/data/munis-school-ytd.csv, FY2025 period 13, department 300) carries transfers_adjustments as a net figure per account, with no counterparty -- so a line moved in cannot be matched to the line it moved out of. And the ledger's own $627,116.86 available at the close exceeds the $603,885.97 the district reported that day by $23,230.89, with no single account or pair of accounts equal to the gap, which is consistent with activity posted after 17 September 2025 but not established by anything held here. — closes: the FY2025 transfer schedule for department 300 with counterparties and authority, and the journal entries posted to department 300 after 17 September 2025. |
| money_out | Where was the schools’ FY2024 employee insurance reported, if not in the school department’s End of Year Financial Report? | NARROWED 5 October 2026, and possibly reframed. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include a general fund budget-vs-actual history that carries the school department's active health insurance inside the SCHOOL general fund in every year FY2010-FY2025: account 0100-3-300-5200-99-1-99-2-570001, FY2024 actual 3,212,078.37 (sheet School Only, row 396). A Budget Master note records '$1,522,236 SHIFTED TO SCHOOL DEPT.' at FY2003 to FY2004. Why the EOYR total differs is not established. DESE’s EOYR shows function 5200 Insurance for Active Employees at $485,010 in FY2024 against $3,286,872 in FY2023 and $3,511,566 in FY2025; a difference read across that year looks like a $3M rise and is a reporting gap closing. Whether the year was mis-filed or the town appropriated and reported the insurance outside the school department is not established. — closes: the district’s FY2024 EOYR as submitted, Schedule 1, and the town’s FY2024 appropriation for group insurance by department. |
| money_out | Whether Lunenburg spends the foundation budget the way the state assumes it will, category by category | Chapter 70 builds its foundation budget from about eleven CATEGORIES — classroom teachers, administration, instructional leadership, materials, and so on — each with a per-pupil rate the state sets. That is the state saying what an adequate education costs and how it decomposes. Comparing it line for line against what the district actually spends on the same categories would show exactly where Lunenburg is above and below the state’s own model, and it is the single most useful unanswered question about the expense side. WE HOLD THE TOTAL AND NOT THE PARTS. dese-ch70-foundation-nss.xlsx carries required net school spending, actual net school spending and the foundation budget as single figures per district per year, and dese-ch70-key-factors.xlsx carries the aid calculation; neither breaks the foundation budget into its categories. So the comparison cannot be made from this archive at all, in any year. WHAT MUST NOT BE DONE INSTEAD: dividing the foundation total by DESE’s statewide category shares to estimate Lunenburg’s. That produces a number for every category and establishes nothing, because the shares are what the comparison is meant to test. — closes: DESE’s foundation budget detail workbook, which prints the per-pupil rates and the resulting category amounts for every district, published annually beside the Chapter 70 aid figures this project already holds. |
| money_out | Whether a general fund athletics line is net of the revolving fund | In FY2024 the town’s comparable athletics lines came to $124,301 against $351,643 the district’s own sport-by-sport workbook totals for the same categories — so the appropriation covered 35% of the cost. That is measurable for FY2024 and FY2025 only, because those are the only years anybody published both halves. For every other year, and every other programme, a line that rose because the cost rose looks exactly like a line that rose because a fund stopped paying part of it. — closes: the MUNIS Account_Detail export for the general fund athletics orgs S3066672 and S3066671, all object codes. |
| money_out | Whether a general fund rise beside a grant fall is the same cost, or a different cost in the same function | DESE's End of Year Financial Report splits every function code into general fund and grants/revolving, so a function where grants fell and the general fund rose in the same year can be MEASURED — 8 of them in Lunenburg in SY2025, grants -$1,127,647 against general fund +$1,136,013 (dese_function_expenditure). Sorting those functions into “swapped” and “reduced” is OUR label on the signs of two numbers, and the state publishes no such classification. A function code is a bucket: Teachers, Classroom covers every classroom teacher in four schools, and both funds can move inside it for reasons that have nothing to do with each other. So the split establishes that the funding mix moved and cannot establish that the town picked up the thing the grant was paying for. — closes: the district's grant award letters and end-of-grant expenditure reports, naming the posts and object codes each grant paid, set against the general fund payroll and object detail for the same function in the following year. |
| money_out | Whether a school line that stops appearing in the district’s book stopped being funded | A line can leave the book because the money stopped, or because the book changed shape. Both look identical: an absence. Between FY2022 and FY2023 the restated series moves from one district budget book to another, the number of printed lines falls by about a third, and the reported total RISES — so the lines that stop appearing at that boundary cannot have taken their money with them. At least five of the disappearances are established renames, two lines differing only in spelling and carrying the identical value in every year they share (Maint. of Buildings/Contrcted Services and Maint. of Buildings/Contracted Services). Nothing published maps the older line list onto the newer one, so for any individual line, absence is a fact about the document and not about the service. — closes: the district’s own crosswalk from the FY2022 budget-book line list to the FY2023 presentation, or the MUNIS year-end expense report (glytdbud, period 13) for the school department for those years, which is keyed on accounts rather than on printed line names. |
| money_out | Whether a town department’s budget growth is more service or a cost moved into it from another budget | Several town departments’ starting budgets grew in single steps — general highway maintenance, facilities and grounds, public buildings and recycling each have one year in which the starting budget rose by more than a third — and a step that size fits a service being taken on, or a cost moved in from another line or fund, as well as it fits the same service costing more. The ledger records dollars by account and nothing about why an account moved, so a growth rate measured across such a step is not a trend. Measured in /analysis/department-budgets. — closes: the Town Manager’s budget message, or the Finance Committee’s report to Town Meeting, for each year in which a department’s starting budget stepped. |
| money_out | Whether spending less per pupil is a choice or a constraint | Lunenburg’s total per-pupil spending has been below the statewide first quartile in every one of the seventeen years DESE publishes, and its net school spending is a smaller multiple of the required minimum than the median district’s. Nothing in any of these documents distinguishes a town that decided to spend less from a town that could not raise more: the levy limit, two failed overrides, the district’s proposed budget and Town Meeting’s vote all resolve into the same single number, and the number is the outcome of all of them at once. This matters because the two readings imply opposite remedies. — closes: nothing published settles it; the nearest evidence is the district’s own level-service request against the appropriation voted, year by year, which the archive holds for FY2024 onward only. |
| money_out | Whether the FY2025 spring section of the district’s by-sport athletics workbook is complete | The district's sport-by-sport workbook prints $0.00 as its FY2025 spring season total, in cell AT25, while its spring rows sum to $18,242.50, 46.1% below FY2024's spring rows; spring is 58.9% of the whole fall in athletic transportation from FY2024 to FY2025. Outdoor track, baseball, softball and lacrosse all look cheaper in FY2025 on that sheet, and /analysis/transportation cannot say whether that is fewer or shorter trips or a section filled in before the season's bills arrived. Every other season total the workbook prints equals its own rows. — closes: the district's confirmation that the FY2025 spring transportation column is final, or Dee Bus's spring 2025 athletic invoices, from the Business Office. |
| money_out | Whether the schools’ stated field and grounds costs match the books — about $126,000 of grounds work in FY2024 and $38,100 of outsourced mowing and field repair, paid, the Superintendent says, from the same revolving fund the field rent goes into | The figures are the district’s own, read back from FY24 budget requests in an email of September 2026, and nothing in the archive tests them: fund 1306’s FY2024 expenditure is not published and the fund’s journal is not held — closes: the journal detail for fund 1306, FY2024–FY2026, and the FY2024 and FY2025 special-revenue reports. |
| money_out | Which accounts Lunenburg's FY2025 health insurance figure on the state's Schedule A counts | The state's figure for Lunenburg equals the town insurance department less Medicare and life insurance in every year FY2010-FY2023, and the whole department in FY2024 (asserted in scripts/build_health_insurance_topics.py). So any growth rate measured across FY2024 mixes a change in what was counted with a change in spending, and FY2025 cannot be tied because the ledger history's FY2025 actuals are part-year. — closes: the town's FY2025 Schedule A health insurance detail, set against the year-end ledger. |
| money_out | Which budget line each dollar of grant and revolving money paid for | The fund split now exists at DESE's function level and nowhere below it. Lunenburg SY2025 spent $3,044,898 of grants and revolving money against $26,986,344 of general fund across all functions. But the district's budget book prints one NET figure per printed line (rule 11), DESE prints one figure per function code, and no published document maps the second onto the first — so a line that rose because a grant ended still looks identical to a line that rose because the district grew. This is the budget-line half of Which fund pays which post, which is the same wall approached from the staffing side. — closes: DESE's End of Year Financial Report Schedule 1 as Lunenburg files it, which separates revenues and expenditures by source of funds; or the MUNIS year-to-date expense report run for the school grant and revolving funds rather than the general fund. |
| money_out | Which budget lines the School Committee's line item transfers moved, when the minutes record only the vote | Of the transfers the School Committee approved in the minutes read so far (every set the archive holds, 6 September 2023 to 26 August 2026), some are recorded only as a vote to approve transfers "as outlined" or "as presented", or as one total for a batch, with no from-line, to-line or amount -- 24 June 2026 approved four transfers with no figure printed, and 4 October 2023 approved $127,786 as a single total. The minutes are the record of the VOTE; the lines are on the district's transfer sheet the committee is shown, and the archive holds that sheet for only three: 26 September 2025 (the athletic $20,000), 5-6 October 2026 (FY2027) and one from October 2022. The recordings cannot substitute: a caption model hears figures unreliably. And the town's ledger extracts held here carry no budget-transfer journal for the school department, so nothing can tie a vote to the accounts it moved. — closes: the line item transfer sheets presented at each School Committee meeting (in the meeting packets), or the MUNIS budget transfer journal for the school department, by fiscal year. |
| money_out | Which department carried forward the $362.00 the FY2017 appropriations schedule does not print? | The FY2017 GENERAL FUND APPROPRIATIONS schedule, pages 24-28 of the annual town report, states twice that a $362.00 carry-forward exists and never prints the line. Its APPROPRIATED FORWARD column sums to $37,626,083.44 against a printed GRAND TOTAL of $37,626,445.44, and its footer legend fwd - forward from FY 2016 $637,981.43 exceeds the 26 fwd lines actually printed by the same $362.00 — while the srt and rft legend totals reproduce to the cent and the other three columns tie exactly. The subtotal for Police Fire Medical Expenses on page 25 is $5,362.00 over a single line item of $5,000.00, so the money belongs to that block; which prior-year appropriation it is a carry-forward OF is not stated anywhere in the document. The amount is trivial; the question is not, because the same schedule is the basis of every departmental growth rate this project measures and a carry-forward line changes which year a dollar belongs to. — closes: the Town Accountant's FY2017 year-end MUNIS encumbrance and carry-forward detail, which lists each forwarded balance by account. |
| money_out | Which games Lunenburg’s athletic teams played in the seasons their posted schedules do not cover | /analysis/transportation builds its athletic bus model from the schedules the district posts on ArbiterLive, the scheduling site linked from its athletics page. ArbiterLive lists only what a coach posts: cheer posts no schedule at all, some teams post none in some years, and indoor and outdoor track list far fewer meets than the district's by-sport sheet has charges. A team with no listed game is not a team that took no bus, so the model is a floor for those teams and cannot be checked against the sheet for them. — closes: the athletic department's final game and meet schedule for each team, FY2022 to FY2026, with home and away and the venue, from the Athletic Director by records request. |
| money_out | Which of the three published per-sport athletics cost figures is correct | NARROWED 5 October 2026: one of the three is now traced to its workbook. The Finance Committee's files hold Athletics Costs (1).xlsx, whose FY24 Programmatic Cost column (sheet ALL, rows 2-26) sums to 275,947.63 -- the published 'Athletic Program Costs by Sport' total -- once cell K26 is counted: Girls Ice Hockey, typed as the TEXT 1100, an estimate. The workbook's own printed total, 255,042.35, comes from =SUM(K3:K26), which leaves out both row 2 (Football, 19,805.28) and that text cell. So that figure was built from these rows, an estimate included; it does not say which of the three is correct. Three documents the district produced state three different costs for the same team in the same year, FY2024. Across all 25 teams they total $185,355.62 (the Athletic Program Funding Overview deck of 1 May 2024), $275,947.63 (“Athletic Program Costs by Sport”, published with the FY26 budget materials) and $349,145.39 (the Total Expenses column of the district’s own by-sport workbook, obtained by records request) — a spread of $163,789.77, 88.4%. Per team it is far wider: Boys' Lacrosse is stated at $612.79 and at $14,189.18, 2215.5% apart, and not one of the 25 teams carries the same figure in every column. The three may be answering different questions — a programmatic cost, an all-in cost and a season’s booked expenses would all differ legitimately — but no document we hold says which each column is, and nothing published reconciles them. So a resident choosing which sport to give up is choosing between figures that disagree by a multiple. — closes: a reconciliation from the district of its own three per-sport cost statements, sport by sport, naming what each column counts. |
| money_out | Which school lines stopped being funded in FY2023, FY2024 or FY2025 | The restated figures for those years come from the FY27 budget projection workbooks, which print a shorter line list and almost no zeros. Not one line in them goes from funded in one year to a printed zero in the next — so the measurement this project can make for FY2015 through FY2022 has no evidence at all for the three most recent years. That is a property of which document restates which year, not a finding that nothing stopped. — closes: a district budget book for FY2026 or later printing the full line list with prior-year columns, in the same shape as fy24-approved-budget. |
| money_out | Why FY2024’s regular-route bus spending was higher than FY2025’s | The general fund regular-route transportation account spent more in FY2024 than in FY2025, and closed FY2024 past its revised budget even after a transfer in, while FY2025 spent its budget exactly. Both years were under the Dee Bus contract that preceded the current one, which this archive does not hold, so whether FY2024 carried an extra bus, extra routes, a price step that later reversed, or a cost booked in the wrong year cannot be told. A Finance Committee member asked for the bus contracts in March 2024. — closes: the Dee Bus contract in force for FY2024 and FY2025 with its rate schedule, and the FY2024 Dee Bus invoices (the contract was requested on 9 October 2026). |
| money_out | Why FY2026 private special-education tuition came in far under budget while collaborative tuition ran far over | In the FY2026 period-13 ledger the general fund’s private-tuition line (9300) ended well under budget and its collaborative-tuition line (9400) well over, netting to a small surplus; the circuit breaker fund (2640) paid collaborative tuition that year and no private tuition, the reverse of FY2025. Fewer private placements, placements moved to collaboratives, and the line a payment was charged to all fit the same rows. — closes: the FY2026 out-of-district placement list by setting, with start dates and each tuition invoice and the fund it was paid from. |
| money_out | Why a budget line came in under plan, as against by how much | A line under plan can be a post left vacant, a service cut, a grant that covered the cost instead, money transferred to another line, or a line over-budgeted from the start. All five produce the same smaller number in the spent column. The accounting system narrows it — it records mid-year transfers, so money moved can be distinguished from money not spent, and we hold that for FY2026 — but it cannot separate a vacancy from a cancelled service from a funding switch. Every published explanation of a Lunenburg school surplus is therefore a hypothesis about a measurement, and this project must not restate one as the measurement. — closes: payroll detail by position and date for the year in question, which separates a vacancy from every other cause, plus the grant award records for the same year. |
| money_out | Why has school electricity run past its voted budget in every year from FY2023 to FY2026? | Account 0100-3-300-4130-99-1-74-2-521011 spent and committed $303,101.82 more than it was voted across FY2023-FY2026, and the FY2027 budget, $316,250, is below the $319,108.72 FY2026 had already paid. Natural-gas heating beside it was voted above its spending in FY2024-FY2026 and received transfers in every year. Usage, rates, load moving from gas to electricity, and the solar panels a Finance Committee member asked about on 26 February 2026 all fit. /analysis/fy26-school-surplus — closes: the school utility bills by building and month, with kilowatt-hours and any solar or net-metering credit. |
| money_out | Why the school department's FY2024 actual spending differs between its period 13 ledger and the general fund history, on 12 of 265 lines | Measured 5 October 2026 from the Finance Committee files: the period 13 report (glytdbud, generated 7 August 2024) and the FY2010-FY2025 general fund history agree to the cent on 253 of 265 school general-fund lines; 12 differ, by a net 243,636.29, the history higher -- led by a paraprofessional line and a clerical salary line, with some lines moving the other way. Entries posted to FY2024 after 7 August 2024 would produce this pattern; nothing here tests that. — closes: the Town Accountant's FY2024 journal entries posted after 7 August 2024 for fund 0100, department 300. |
| money_out | Will the school accounts that closed FY2026 past their revised budgets be covered by year-end transfers, and from which lines? | The FY2026 period-13 MUNIS report for department 300 (sources/data/munis-school-ytd.csv, run 6 October 2026) shows 57 accounts past their revised budgets by $1,201,433.81, after the ten year-end transfers the School Committee approved on 29 July 2026 ($148,364.31), whose minutes say more "may still be forthcoming". FY2025 closed with 4 such accounts; FY2023 with 70 and FY2024 with 52. The school appropriation is a bottom-line total, so this is not spending past the appropriation; it is whether the line budgets the next budget is built from say where the money goes. /analysis/fy26-school-surplus — closes: the FY2026 year-end line-item transfer schedule for department 300 as posted, by account, with the vote that authorised each. |
| people | Are long-tenured homeowners being taxed out — what do households who bought decades ago earn against what they pay? | The Census publishes tenure (B25038) and income by age of householder (B19049) but never the two together for a town this size; the assessor publishes the bill per parcel and nothing about the household. — closes: Census PUMS microdata for the PUMA containing Lunenburg, which carries tenure, year moved in and income per household, at the cost of covering several towns at once. |
| people | How many Lunenburg applicants Monty Tech turns away | Lunenburg’s count at Monty Tech has risen in nine of the last twelve years, and a count is the outcome of two things at once: families applying, and Monty Tech admitting. The lottery exists precisely because more apply than there are places. Asked at the Finance Committee on 5 February 2026 how many Lunenburg students were turned away, the district’s business manager said she was unsure of the exact number. The Class of 2030 lottery result in this archive gives one cohort’s admissions — 24 Lunenburg students of 365 places — and its per-applicant pages are OCR of an image PDF and cannot be counted from. So a rising count cannot be read as rising demand, and the two have opposite implications for what the town should expect next. — closes: Monty Tech’s admissions summary by sending town and year — applications received, offers made, waitlisted — which the district produces for its own School Committee. |
| people | How many Lunenburg children are educated at private or parochial schools | DESE publishes where a town’s resident children go to school by receiving district, every year since SY2014 — and every row is keyed on the eight-digit code that identifies a Massachusetts PUBLIC district. Private schools do not have one and do not report enrolment to the state, so a Lunenburg child at Cushing Academy, Notre Dame or St Bernard’s generates no record: not a zero, not an “other”, nothing, for any town in any year (checked across the whole table). WHAT THIS BREAKS: the count of children educated outside Lunenburg’s own schools — 177 in FY2026 — is a FLOOR and reads as a total. A resident asked why Cushing was missing before the page admitted the limit. AND IT MATTERS IN THE OPPOSITE DIRECTION FROM THE REST: a child at a private school costs the town no tuition and no assessment, and moves Chapter 70 aid by about $150 a pupil, so those departures are close to free for the school budget. They are the only kind of leaving that does not cost money, and they are the kind nobody can count. IT IS NOT: evidence that the number is large, or small. Nothing here bounds it at all. — closes: the town census, which counts every resident child of school age regardless of where they enrol, or the district’s own October 1 resident count, which is compiled annually and not published. |
| people | How many Lunenburg homes have a child in the LUNENBURG PUBLIC SCHOOLS — as opposed to a child under 18? | The Census answers the second and not the first. B11005 puts 1,477 of 4,529 households — 32.6% — with a child under 18, which is what people mean when they say "about 30% of taxpaying homes", and on that reading the claim is fair. But that count includes children at Monty Tech, at private and charter schools, and children not yet of school age, so it is a CEILING rather than the figure. The arithmetic suggests the gap is real: 1,477 households against roughly 1,745 school-age children is about 1.2 per household, low enough that a meaningful share of those homes have only pre-school children. Nothing published joins a child to a household to a school. — closes: a count of DISTINCT HOUSEHOLDS with at least one child enrolled, which the district can produce from its own student information system and DESE cannot, because DESE counts children and the Census counts households and neither knows about the other. |
| people | How many administrators does the district employ, and how has that changed over ten years? | The annual-report rosters carry names without FTE, classify department liaisons as administrators, and print no central office at all in FY2025, so a series read off them shows administration falling by a quarter in a year in which nothing of the kind happened; DESE publishes administration only as dollars per pupil. — closes: the district’s position control list by FTE and funding source, for any two years ten apart. |
| people | How many children Chapter 70 is actually paid for | The aid is calculated on a Foundation enrollment of 1,599 in DESE’s FY27 Chapter 70 summary. DESE publishes three other counts for the same district — Student Headcount, In-District FTE Pupils and Total FTE Pupils — and in the latest year published they are 1,563, 1,568.9 and 1,665.9. Four numbers, one agency, none of them equal, measured on different dates and counting different things. So every per-pupil figure on this project, including aid per pupil, is a division by a count whose definition has to be stated with it, and no published document reconciles the foundation count to the children in the buildings. — closes: DESE’s FY27 foundation enrollment worksheet for Lunenburg, which states the October 1 count by grade and category the formula was run on. |
| people | How many children Lunenburg has with disabilities, given that DESE publishes three different counts | NARROWED, 8 September 2026, and the narrowing is itself the finding. The denominator behind the staffing ratios in yamx-769q is NOT unexplained: it equals the published IN-DISTRICT count exactly, in all six years the file covers, and the difference between it and the count printed beside it is the published out-of-district count to the child. Computed on every build by scripts/build_special_education.py, which fails rather than publishing the page if it stops reconciling. WHAT SURVIVES is a THIRD count: dese_sped_movement reports 10 to 26 fewer children on an IEP than dese_sped_program in every overlapping year, on a different enrollment figure, and nothing published states the census date or the inclusion rule behind either. — closes: DESE’s SIMS submission detail for Lunenburg stating the census date and the inclusion rule behind each published count. |
| people | How many children enter or leave an out-of-district placement during a school year, and when? | Only two snapshots are published, months apart and taken by different bodies: DESE's count of students with disabilities placed out of district in October, and the town's count of placements on 1 March in the Special Services report of each annual town report. Their difference is a NET change -- an arrival and a departure between the two dates cancel, and a child placed and returned between them is in neither -- and some of it may be the two bodies counting differently. DESE's caseload-movement file (8aww-sugs) counts children entering and leaving special education SERVICES, not placements. The district has said at public meetings that children have moved in already needing a placement and that a child entering after 1 April is the sending district's cost; neither is a count. A mid-year reserve for tuition is sized by exactly this number, which is why /analysis/special-education-costs cannot size one from children and sizes it from the ledger instead. — closes: the district's out-of-district placement log, one row per placement with its start date, end date and setting (collaborative, day or residential) and no names, from the Director of Student Services by records request. |
| people | How many children play sports | Two town documents give 593 and 649 for the same year and count different things: one counts fee categories, the other counts participations by sport, and a participation is not a child — one student playing three seasons is three of them. Some workbook rows are negative, subtracting out-of-district athletes back out, so a season total is a net figure rather than a headcount of bodies. Nothing published is an unduplicated count. — closes: an unduplicated athlete roster, or a participation report that states whether it counts students or participations. |
| people | How many children ride the school buses, and how many pay the fee | The only count in the record is the Superintendent's report to the School Committee on 4 June 2025 of bus requests received, and how many were unpaid, for the first fee year. A request is not a rider and an unpaid request is not a refusal. Without riders, no cost per rider and no share of the bus cost covered by the fee can be computed, and whether the fee changed ridership cannot be seen. — closes: the district's transportation registration count for each school year by grade band, fee tier (one child, family, reduced, free) and paid status, with the ridership counts the routes are planned on. |
| people | How many of the children who leave Lunenburg under school choice have an IEP | DESE publishes where every town’s resident children are enrolled, by district and by programme — 58 leaving under school choice in SY2026, 22 at charter schools, 97 at Montachusett Regional as members — and publishes NO disability status with it. So a special education student who transfers out and a student with no plan who transfers out are one row. This is why /where-students-go-instead is a separate report from the other three special education pages rather than a section inside one: merged, “58 children left” becomes “58 special education children left” in a single retelling. — closes: DESE’s SIMS detail crossing enrollment reason with IEP status, which is not published at town level at all. |
| people | How many out-of-district placements are children who arrived already placed | The trajectory file measures the route through the district’s own settings, and the district told the School Committee on 4 February 2026 that “we have also had students move into the district that require out of district placements”. Such a child enters the town’s placement count without ever appearing in a cohort followed from an in-district setting, so the count and the route measure overlapping but different populations. The quote is evidence that it happens; nothing establishes how often, and the two published counts of placed children — the town’s on 1 March and DESE’s — agree in only 2 of the 5 years they overlap. — closes: the district’s own record of placements by origin, showing how many were referred from an in-district setting and how many arrived already placed. |
| people | How many paraprofessionals Lunenburg needs, against how many it employs | 603 CMR 28.06(6)(d) is now in this archive, and it sets the class-size rule everybody argues around: a substantially separate group may not exceed eight students to one certified special educator, or twelve to a special educator AND AN AIDE. So a paraprofessional is partly what PERMITS a larger group rather than being a ratio in itself — which means paraprofessional counts track PROGRAM STRUCTURE and not student headcount, and would explain the thing /school-staffing measures and cannot account for: paras rising while enrolment fell. WHAT STILL CANNOT BE COMPUTED: the regulation binds INSTRUCTIONAL GROUPS and nothing published says how many groups Lunenburg runs, how large each is, or how its 41 substantially separate students are divided among them. 41 students could be four groups or seven, needing very different staffing, and both are lawful. THREE THINGS THAT WOULD DEFEAT ANY RATIO ANYWAY, all in the regulation itself: the sizes are MAXIMUMS and districts are expected to go smaller for complex needs (28.06(6)(c)); grouping must match each student’s own IEP, which can require one-to-one support no class-size rule predicts (b); and a group at maximum may take two further students mid-year by decision of the Administrator of Special Education (e). IT IS NOT: evidence that staffing is too high or too low. Nothing here supports either. — closes: the district’s own list of special education instructional groups by school and setting, with the students and staff assigned to each — compiled for DESE’s program approval under 603 CMR 28.09 and not published. |
| people | How many people each TOWN department employs, in FTE, in a form that can be counted the same way twice | CORRECTED. This row previously said the only published series stops at FY2016, when the gross-wages list stopped tagging each name with a department. That is true of the WAGE LIST and it is not true of the reports. Every annual report carries departments describing their own staffing in the prose of their narrative section -- 77 such statements across FY2011 to FY2025, in every year. The Fire Department gives a series on its own: 5 Career and 40-45 On Call in FY2017, 7 Career from FY2018, 10 Career and 30-35 On Call/Per Diem from FY2022. The DPW states its establishment post by post: one Director, one Executive Assistant shared with Facilities, one Highway Superintendent, 5 Heavy Equipment Operators, one Mechanic, one Cemetery Superintendent, two Seasonal Cemetery Laborers, one Sewer Business Manager and one Assistant. The Building Department, the Council on Aging and the Assessor's office do the same. WHAT REMAINS A GAP is that none of it is FTE and none of it is consistent: a range (30-45 on call), a headcount, and a list of titles are three different quantities, stated in whichever form that year's department head chose, and they cannot be summed into a town total or compared like for like across departments. -- closes: the town's payroll register by department, or the personnel schedule behind the omnibus budget, which sets an FTE per line before Town Meeting votes it. |
| people | How many people the schools actually employ | The town publishes per-school staff ROSTERS in every annual report, FY2011 to FY2025 — a list of names. A roster carries no FTE, so a 0.4 music teacher and a full-timer are one row each, and it is a point in time, undated within the year. A count of names the town printed is a real quantity and it is not a staffing level. AND THE DISTRICT’S OWN CONTACT SHEETS DO NOT AGREE WITH EACH OTHER, which this project did not know until it held them: its roll-up of every employee names 257 people, the five listings the office and the four schools keep name 45 the roll-up does not, and the roll-up names people no building lists — Primary leaves its own paraprofessionals off the sheet the school keeps. Some of that difference is one person written two ways (Skye Abreu on one, Skye Abrue on the other) and nothing published distinguishes a second spelling from a second person, because no sheet carries an employee identifier. So there is no count of district staff here that two documents support. — closes: a staffing report stating FTE by position and year. |
| people | How many people work in the offices voted as General Government — the Town Manager, the Town Clerk, the Treasurer/Collector and Information Technology | Nine town departments now state a headcount somewhere in their own report, but General Government is voted as ONE figure covering several offices and only the Assessing office inside it states a number. Health & Sanitation, Central Purchasing, Solid Waste and Employee benefits state none at all. The gross-wages list named a department beside each employee through FY2016 and stopped — closes: the Town’s gross wages list with its department column restored, or any payroll headcount by department. |
| people | How many school choice seats Lunenburg opened, by grade and by year | Children arriving from other towns fell from 51 in SY2014 to 15 in SY2026. Two readings fit that equally well and the published record separates them in one year only. A receiving district DECIDES each year how many school choice seats to open and at which grades — the School Committee minutes record that decision being taken on 22 January 2025 (elementary seats against high school only, tabled until the budget was settled), on 16 April 2025 (options beyond grade 9, moved contingent on free cash passing) and on 4 February 2026 (“We are looking to only add school choice options to the high school”). So fewer arrivals is consistent with fewer seats offered and equally consistent with fewer families applying. The Superintendent stated both counts to the Finance Committee on 26 February 2026 — 24 seats opened, 5 students applied — which points at applications for that one year and cannot speak for the other twelve. — closes: the School Committee’s annual school choice vote, seats by grade, for every year from SY2014 onward; the minutes hold it in pieces and nobody has compiled it as a series. |
| people | How many school employees are enrolled in the district’s active health insurance, and on which plan tiers? | NARROWED 5 October 2026. the Finance Committee files received by records request on 4 October 2026 (sources/budget-workbooks/finance-committee/, see its PROVENANCE note) include a school department presentation whose second page counts active subscribers by plan for FY26 budgeting: HMO Blue family 110, HMO Blue individual 32, Blue Care Elect family 19, individual 9, Blue Select 1 -- 171 in all. A district slide, not the carrier's census; the per-employee sheet behind it is held privately and not cited. The $3,701,195 FY2026 active line is the largest piece of the schools’ $5.22M health insurance and no document states its headcount. The Town Manager’s FY27 Unclassified presentation (12 March 2026, pp. 6–7) gives the town side to the person — 55 town actives, 67 town retirees, 203 school retirees, November 2025 enrollment — and the school active side only as a method (FY25 Superintendent’s budget update, p. 41: “counting all staff currently subscribing”). Subscribers are not people covered: a family plan is one subscriber. — closes: the MIIA renewal census by plan tier for the school department, or the PEC negotiation packet; both exist and neither is published. |
| people | How many students played a school sport in each of the last ten years? | The district has published season participation counts for three years (FY2024–FY2026), and the archive holds no earlier ones; a ten-year trend in athletes cannot be drawn. — closes: the athletic department’s season participation reports for FY2016–FY2023, which the department compiles each season. |
| people | How much of a department’s headcount is full-time | A roster counts the Council on Aging's Tuesday van driver and its Director as one each. ONE FTE FIGURE DOES EXIST and this row used to deny it: the FY2025 Finance Committee report states the FY2026 school budget “necessitates eliminating approximately 28 Full-Time Equivalents (39 employees)”, which also measures the gap between posts and people — 39 people in 28 FTE. That is one department in one year; no FTE is published for any other department or any other year — closes: an FTE schedule, or the wage list read in full. |
| people | How much of the property tax levy is paid by households headed by someone 65 or over? | The Census now gives income by age of householder — a household headed by someone 65 or over has a median income of $72,935 ± $8,677, against $129,183 ± $21,150 for a 45-to-64 household — and that is income, not tax. The override argument is about a BILL: what a $3,000,000 override adds to a household is quoted at meetings as a town-wide average, and the town publishes no split of the levy by who pays it, by age or by anything else. Nor does it publish how many households take the statutory elderly exemptions and abatements that would change the answer. So "seniors on fixed incomes cannot carry it" cannot be checked in either direction, and neither can its opposite. — closes: the Board of Assessors’ commitment list with the Clause 41A, 41C and 17D exemptions granted, joined to the town census by age of owner — both held by the Town and neither published. |
| people | Is a rate printed in a town salary schedule the rate that was paid, and is the schedule itself internally consistent? | The Salary Administration Plan schedule voted at the 2022 annual town meeting -- page 152 of the FY2022 annual report -- prints 20 grades against 8 steps and NO TOTAL of any kind, so nothing on the page tests its own figures. Its 160 hourly rates sit about 3% apart step to step and no single rounding rule reproduces them: round(step 1 x 1.03^(n-1)) misses 50 of the 140 derived cells, and grade 2 step 2 computes 15.38 where the page prints 15.37. The reading is safe because the page carries its own text layer and the characters are exact, but the DOCUMENT has no internal check a reader could apply, and a typo in a published schedule would be invisible. Separately, the schedule says what a grade and step pay per hour and says nothing about who is in which grade, at which step, or for how many hours -- so it cannot be turned into what the town spent on anyone. WHAT IS NOT ESTABLISHED: whether the printed rates are the rates the payroll system actually applied. -- closes: the Personnel Committee’s own rate table as submitted to the Town Clerk, which the warrant says is on file, read against the payroll register for the same year. |
| people | What Lunenburg’s counsellors, social workers and psychologists do, as a series | None of them is a teacher on DESE’s teacher returns, so the FTE files that carry fifteen years of teaching staff carry none of these people. The state’s educator retention file reaches them for three years only (FY2021–FY2023), as headcount rather than FTE, and folds them into two residual buckets named Other - Licensed and Other - Non-Licensed. The town’s annual report rosters name them every year FY2011–FY2025 and carry no FTE, no funding source and no date within the year. The district itself holds the missing instrument: it told the School Committee on 6 December 2023, while deciding what to cut, that “Information is broken out to social worker caseloads by bui lding”. That document is not published. Public comment at the same board on 24 January 2024 named MassHealth reimbursement and outside agencies as ways to pay for the same work, which is why a count without a funding source cannot answer the question anybody is asking. — closes: the per-building social worker and adjustment counsellor caseload the district prepared for the FY2025 budget, with FTE and funding source, which is a records request rather than a download. |
| people | What a DESE special education FTE and a district special education budget line have in common | DESE's dese_sped_indicator publishes special education paraprofessionals per 100 students with disabilities; times the published count that implies about 18 FTE for SY2026 against a district paraprofessional line that has roughly doubled since SY2019, which works out at some $69,000 per FTE. A paraprofessional does not cost $69,000, so the two are not measurements of the same population. The EPIMS Data Handbook gives half the reason: it defines FTE as “the percent of workday staff are involved in an assignment” — per ASSIGNMENT, not per person — while a budget line pays whole salaries. The other half is vocabulary: the district calls a line Special Ed Paraprofessionals and DESE has its own definition of a paraprofessional on the return, and neither is wrong. WHAT IS ESTABLISHED is that the two figures cannot both describe the same set of people. WHAT IS NOT is which is narrower, or by how much, or whether the line carries anything besides paraprofessionals. — closes: the district’s own crosswalk between its budget line names and what it reports to the state on EPIMS, which may exist nowhere in writing and would then be a records request rather than a download. |
| people | What each town department spends on wages, so departments can be compared by payroll rather than by headcount | The town prints a Town & School Employee Gross Wages list every year, name by name — but it stopped printing the DEPARTMENT beside each name after FY2016, so the list cannot be split by department. Joining the names to the rosters we hold matches only a third to a half of them, so any departmental total built this way would rank our reading of the scan rather than the town’s payroll. THE REASON RECORDED HERE UNTIL 28 SEPTEMBER 2026 WAS WRONG: it said the two-column layout loses the second column’s given names, which was a measurement of OUR OCR CACHE written down as a fact about the town’s typesetting. The FY2019 pages print both columns in full, and a re-read lifted that year from 44 names to 516 in gross-wages.csv, and a reading of the pages themselves on 2 October 2026 found the pages print 599 -- so 83 names are in no dataset, 65 of them on PDF page 200 alone. 516 was a count of OUR dataset; 599 is a count of the town’s page. Nothing from it is published for that reason — closes: the wage list with its department column restored, or any payroll report by department. |
| people | What share of a post any non-teaching adult in a school holds | DESE publishes a full-time equivalent for TEACHERS at school level and for nobody else. There is no published FTE — in any file, in any year — for a paraprofessional, an administrator, a nurse, a counsellor, a custodian or a kitchen post at a named school in this town. The one job-class table DESE publishes (dese_educator_workforce) is DISTRICT-only and carries headcount rather than FTE. So a school panel can say Lunenburg High printed 64 names and that 35.8 full-time-equivalent TEACHING posts sat among them, and it cannot say what the other 28 names amount to. The difference between a roster count and a teaching FTE is not part-timers — it is everybody the FTE file does not cover. — closes: DESE’s EPIMS work-assignment detail by job classification and school, or the district’s own staffing plan stating FTE by building and post. |
| people | What the children who leave the district cost, as against how many there are | The COUNTS are published and this project now holds them: DESE’s enrollment of town residents by district (dataset vxt3-k35x) states, for every school year from SY2014 to SY2026, how many Lunenburg residents attend each other district and under which programme. SY2026: 58 children under School Choice, 22 at charter schools and 97 at Montachusett Regional as members rather than by choice. The companion file (8xyg-59b2) counts the children arriving the other way, 11 in SY2026. So "a fall in enrollment is not a count of departures" is no longer a reason to refuse the question — the departures are counted. What is NOT published anywhere in this archive is the MONEY: not one document states the tuition Lunenburg is assessed for those 58 children, or for the 22 at charters, and the two rates are set differently and are higher for special education. — closes: DLS Cherry Sheet CS 1-EB (estimated charges) for Lunenburg, which prints the school choice sending and charter tuition assessments on their own lines. |
| people | What the corrected paraprofessional salary scale costs, and what was underpaid | The School Committee approved a corrected paraprofessional scale on 7 October 2026: 107 of 120 hourly rates rose, steps 1-8 by about 4% (FY2026-FY2027) and 4.5% (FY2028), and the top steps did not move. Draft agreements released with it offer a lump sum of FY2027 retroactive pay and one personal day in exchange for a Wage Act waiver covering FY2026 and part of FY2027; the Superintendent's estimate is about 52 people. The cost cannot be computed: the scale is a full-year figure at 6.5 hours a day, and nothing published says how many paraprofessionals sit in each column and step or on what hours, nor what each was actually paid. See notes/findings/PARA-SALARY-CORRECTION.md. — closes: payroll's calculation of the FY2027 retroactive payment (headcount by column, step and appointed hours, with the sums), or the costing put to the School Committee for the 7 October vote. |
| people | What the special education staffing ratio requires moment to moment | 603 CMR 28.06(6) sets the group sizes everybody quotes — eight students to one certified special educator, twelve with an aide — and residents are asking a further question the regulation does not answer: what happens when the group splits, when students go to recess or specials, or when the teacher leaves the room. THE FULL TEXT WAS SEARCHED. There is no mention of recess, none of "under the direction of", nothing about a group dividing, and nothing about a teacher stepping out. The only supervision clause is general and applies to every student in the Commonwealth: "The school staff shall at all times provide appropriate supervision of students while they are engaged in any school related activity on or off school grounds." And 28.06(6) says nothing about an aide beyond the two group-size clauses — it never defines what an aide does, what qualifications one needs, or whether one may supervise alone. WHAT THIS MEANS: the ratio governs THE SIZE OF AN INSTRUCTIONAL GROUP, not the staffing of a moment. It is not a supervision rule and cannot be read as one, in either direction — it neither permits nor forbids a paraprofessional holding a group while the teacher steps out. This is the second time this regulation has turned out to bind less than people assume. — closes: the district’s own program descriptions filed for DESE approval under 603 CMR 28.09, which describe staffing as operated rather than as capped; an individual IEP, which CAN specify one-to-one support at named times and is the only document that binds a moment; and the paraprofessional provisions of the collective bargaining agreement, for duties and coverage. |
| people | When an agenda was actually POSTED, and so whether a meeting had its 48 hours’ notice | The Open Meeting Law requires 48 hours’ notice excluding weekends and holidays, and NOTHING THE TOWN PUBLISHES SAYS WHEN AN AGENDA WENT UP. Checked rather than assumed: the AgendaCenter listing that every agenda is fetched from was searched in full for posted, published, uploaded, created and modified, and for any date-bearing attribute — zero occurrences of any of them. The row carries the MEETING date and nothing else.
Two things stand in for it and neither is the answer. A PDF’s own creation timestamp is a LOWER BOUND on posting, since a file cannot be posted before it is made — the School Committee Policy Sub-Committee agenda of 25 September 2026 was created at 14:29 the previous afternoon, so the most notice possible for that file was 19 hours, and whether that is the notice actually given is not established. The AgendaCenter also allows a file to be replaced in place, so an earlier version could have been posted earlier and overwritten.
And our own first_seen is worse, because it measures US. The watcher did not run on 18, 22 or 24 September 2026, so a document first seen on the 25th could have been posted on any of three days. A gap in the crawl silently becomes a gap in what can be said. — closes: the AgendaCenter’s posting log, which CivicEngage records internally and the site does not display; the Town Clerk can produce it. |
| people | Where 16 of Lunenburg’s students with disabilities are placed, in FY2026 | DESE’s placement breakdown prints four categories — Full Inclusion, Partial Inclusion, Substantially Separate and Separate School in District — and in FY2026 they sum to 242 of the 258 the same file prints as the total. Element DOE034 has nine acceptable values and this breakdown is in-district only, so the other 16 children are in categories the file does not print, and nothing published says which. That bounds every reading of the placement mix: the four printed rows are not a partition, and adding them and treating the result as the whole is the same error as summing a column that was never the total’s parts. — closes: DESE’s full DOE034 distribution for Lunenburg, or the district’s 1 October SIMS placement submission. |
| people | Whether Lunenburg’s paraprofessionals moved out of special education, or were recoded, or the state changed what it counts | Two DESE files count Lunenburg paraprofessionals over FY2020–FY2025 and move in opposite directions. The district comparison sheet’s all-programmes Paraprofessional FTE rises 57.0 to 67.0; the special education staff table in n62c-bx65 falls 44.0 to 20.0, at every one of the five year-steps, while the number of children with a plan goes 244 to 238. The difference between the two therefore goes from 13.0 to 47.0 FTE. WHAT IS ESTABLISHED is that the two published series diverge. WHAT IS NOT is why: paraprofessionals moving onto general education assignments, the same people being recoded, and a change in what the state’s special education staff table counts all produce this shape, and subtracting one file from the other assumes the second sits inside the first, which nothing published says. This matters because the town’s own in-district special education escalator is built on a paraprofessional budget line. — closes: Lunenburg’s EPIMS work assignment detail by job classification and program area, year by year, which would show whether the same people were reported under a different code. |
| people | Whether a budgeted position was filled | A budget line is money the town has to raise, not a person in a chair. A line funded all year for a post vacant half of it looks identical on the page to one that was filled. Bounded, not settled: the rosters show who was printed, which narrows the question without answering it. — closes: a filled-position list, or payroll by position rather than by name. |
| people | Whether a department cut SERVICE, as opposed to cutting dollars or people | A budget line that falls is not a cut and a headcount that falls is not a service reduction -- the thing a resident notices is hours, response times, programmes and waits. The annual reports do carry that: every year's department narratives print activity statistics such as calls for service, items circulated, patron visits, permits issued and inspections performed. None of it is extracted, and it is prose rather than tables, which is the same reason fifteen years of out-of-district placement counts went unread. Until it is read, no claim that a department held its service level while another cut can be tested in either direction. -- closes: nothing external is needed. This one is ours to do -- the figures are already in documents the archive holds. |
| people | Whether a fall in a department’s headcount is a post being cut or a post standing empty | A roster is people IN post; a cut removes a POST. The two come apart both ways — somebody leaves a funded post and the count falls with nothing cut, or a post is eliminated and its holder moves into another vacancy so the count holds. The Assessing office reported being “fully staffed for the first time in over a year” in FY2024, which is a year of posts that existed and stood empty and would have read here as a smaller department. Only the DPW and the Assessing office publish an establishment at all — closes: an authorised-post schedule, or a vacancy report, for any department. |
| people | Whether a position the district announced it would cut was removed | The district publishes a cut list most budget cycles — 158 named reductions across five cycles in this archive — and nothing published says what became of any of them. The only independent series that reaches any of it is DESE teacher FTE by school and subject, one October snapshot a year, and teachers are a minority of every list: paraprofessionals, secretaries, custodians, guidance staff, social workers, maintenance and BCBAs are counted by nothing at school level. A list of intended cuts is not a record of staffing. — closes: the district’s year-end position control report — filled posts by FTE, school and funding source — which the Business Office produces for payroll and does not publish. |
| people | Whether a rise in the paraprofessional line is more posts or a grant unwinding | DESE now publishes the split at the level of its own FUNCTION CODES, SY2009-SY2025: Lunenburg's function 2330, Paraprofessionals, is $1,338,477 of general fund beside $478,097 of grants and revolving money in SY2025 (dese_function_expenditure). That BOUNDS the question and does not settle it. A function code aggregates many posts and many funding sources; it is DESE's measure of spending rather than the town's appropriation; and nothing in it says which post any dollar paid, or whether the same posts were general-funded the year before. The in-district special education escalator still rests on a line that cannot be distinguished from grant money unwinding. — closes: the district's grant award and payroll charge detail for the paraprofessional posts, by fund and fiscal year. |
| people | Whether an aide assigned to one child also counts as the aide that raises a group from eight students to twelve | 603 CMR 28.06(6)(c) and (d) raise the maximum group size from eight students to twelve when the certified special educator is "assisted by one aide". The regulation never defines the aide, never states their duties, and — searched on every build for eight phrasings — contains NO rule about one-to-one support of any kind. So where a child’s IEP assigns an aide to that child, nothing published says whether that person also satisfies the tier. THE DIRECTION OF THE ERROR IS THE POINT: assuming they do understates the staffing a group needs, and assuming they do not overstates it, so neither assumption is safe and this project makes neither. It is the same wall as the paraprofessional gap, hit from the other side — the rule counts students and the staffing record counts posts, and nothing converts one into the other. — closes: DESE’s program approval materials under 603 CMR 28.09, which describe how each approved group is staffed; or the district’s own group descriptions naming which adults are counted against which tier. |
| people | Whether an announced cut was reversed by a hire during the school year | Residents describe posts being cut in the spring and filled again a month into the school year. The one instrument that reaches teacher staffing is DESE’s EPIMS return, collected on 1 October, so a post cut in June and refilled in November is invisible to it and a post filled on 1 October and vacated in January counts as filled. Nothing in this archive is a within-year series. — closes: the district’s monthly payroll position report, or the School Committee’s personnel action items compiled as a series — the minutes carry appointments one meeting at a time and nobody has assembled them. |
| people | Whether an “aide” in the class-size regulation is a paraprofessional the town budgets | 603 CMR 28.06(6) sets every group size in terms of a certified special educator AND AN AIDE — a group of eight becomes lawful at twelve because an aide is present. 28.02(3) defines the certified special educator in full and the regulation defines no counterpart for the aide anywhere; the word “paraprofessional” appears in the whole of 603 CMR 28.00 only in the staff-training clauses of 28.03(1)(a), one of which names “teachers, paraprofessionals, and teacher assistants” as three separate things. DESE’s staffing return and every Lunenburg budget line say paraprofessional. So the term that DECIDES whether a group of twelve is lawful cannot be matched to any post the town funds, and a count of paraprofessionals is not a count of aides in the regulation’s sense. This sits directly under the gap about how many paraprofessionals the town needs: even with the group list, the units would not match. — closes: DESE’s guidance on what qualifies a person as an aide for 603 CMR 28.06(6), or the district’s own job descriptions mapped to that clause. |
| people | Whether the FY2026 spending on the kindergarten aide lines paid for aides in kindergarten classrooms | The ledger books FY2026 spending to two accounts titled kindergarten aides and kindergarten paraprofessionals (orgs S2032121 and S2032131), both voted at $0; a Finance Committee minute of 12 January 2026 records the School Committee chair saying kindergarten classrooms had no aides. An account title is not a person in a room: staff coded to the line while assigned elsewhere, a reclassification, or posts moved between lines all print the same ledger, and nothing published joins the account to a building. — closes: the FY2026 payroll distribution for the two accounts, naming position and building (names may be redacted). |
| people | Which building a shared school employee actually works in, and for how much of the week | Twenty-eight people are printed as staff by more than one Lunenburg school on the schools’ own listings, one of them by four of them. THAT REPETITION IS THE MEASUREMENT AND NOTHING MORE: it is consistent with a specialist splitting a week between two buildings, with a district post housed in one school and serving all of them, and with two buildings both claiming somebody neither employs alone — and the documents do not separate those. The district’s roll-up encodes sharing a second way, in a free-text column that reads Primary School & THES, and the two encodings agree about five of the 28. Neither carries a fraction, so Carol Saranich, listed by the high school, the middle school and Turkey Hill, could be a third of a post in each or a full post in one. This is rule 11 pointed at people: a name on a list is not a share of a job, and the budget lines that pay for these posts are netted and per-district, so they cannot be split by building either. — closes: the district’s FTE-by-building assignment schedule, the sheet behind the personnel lines in the school budget. |
| people | Which fund pays which post | This is the load-bearing one. The rosters name people and the budget names dollars, and nothing published joins them to a funding source. So a paraprofessional line rising cannot be distinguished from a grant that was paying for those posts ending — which is exactly what the special education escalator rests on. — closes: DESE's End of Year Financial Report, which separates spending by fund. |
| people | Which grades Lunenburg children leave the district in | DESE publishes where a town’s resident children go to school and by which route — school choice, charter, regional vocational — by receiving district and by year, FY2014 to FY2026. It does not publish that by GRADE. dese_town_enrollment carries no grade column, and the grade counts that do exist (dese_enrollment) are headcounts INSIDE a district rather than an outflow from a town, so they cannot be differenced to recover it. WHAT THIS BLOCKS: the question everyone actually asks, which is whether families leave at a transition year — entering grade 9, or entering grade 7 — or steadily throughout. Those imply completely different things about what the district could change, and the published data cannot tell them apart. IT IS NOT: an absence of evidence that transitions matter. It is an absence of evidence either way, and the plausible story (that choice-outs cluster at grade 9 when families pick a high school) is a hypothesis nothing here tests. — closes: DESE SIMS Report 7 or the district’s own October 1 enrollment submission broken out by grade and residence, which the district files annually and does not publish; or the receiving districts’ school choice enrollment by sending town and grade. |
| people | Which of DESE’s special education staff figures can be read at all | Every row of the SPECIAL EDUCATION STAFF table in yamx-769q prints an FTE, a count of students and a rate per 100 of them, so the rate has to reproduce from the other two. Recomputed for Lunenburg on every build: paraprofessionals reproduce in 8 of 8 years, teachers in 1 of 8, service FTE in 0 of 7, support FTE in 0 of 6. So three of the four rows do not describe what their own column headings say, and /how-many-students-are-on-an-iep publishes the paraprofessional row and refuses to publish the others as figures. WHAT IS NOT ESTABLISHED is which of the three columns is the one that is wrong. — closes: DESE’s data dictionary for dataset yamx-769q, or the EPIMS aggregation behind it, stating what each column is. |
| people | Which of the people on the school district's master staff list still work for the district | The district publishes its staff two ways: a sheet per building, and one master list ("Directory of Staff - All Lunenburg Public Schools Staff", a published Google Sheet). They disagree. On the 9 October 2026 fetch, 36 people appear on the master list at a building that keeps its own sheet -- 25 at the Primary School, 10 at Turkey Hill, 1 at the High School -- and that building's own sheet does not list them; a resident who knows the schools reports that at least one of them left years ago. The org chart takes each building's own sheet as the authority and sets those 36 aside, named, on the chart; it keeps 11 people the master list places district-wide or at the shared Middle/High building, marked as on that list alone. Neither list says which is current, and neither carries a start or end date. — closes: the district's current staff roster from Human Resources (or the MUNIS payroll employee list), dated. |
| people | Which school counselor, social-worker and psychologist posts were vacant or on leave in FY2026, and for how long? | The FY2026 period-13 ledger leaves these salary lines well under budget — one psychologist account spent nothing of its budget — and no posted minutes explain it. A dollar is not a post (rule 11): vacancy, leave, a lower hiring step and contracted cover all produce the same row. — closes: the district’s position-control roster by month for functions 2710 and 2800, each budgeted post with who held it and from when. |
| people | Which school year a printed staff roster describes | The rosters in the annual town reports carry no date, and the town’s own prose suggests the school section may run a year ahead of the cover. Three sentences in fifteen reports name a fall and a student count; matched against DESE’s October enrolment for the same school, two are closer to the year AFTER the report’s fiscal year and one to the year on the cover. So a roster labelled FY2024 may describe the autumn of 2024, which the state calls FY2025 — and any children-per-adult figure drawn from the two may be a year out of step. The FY2024 report makes the hazard concrete: it prints two complete Turkey Hill rosters, 33 names in common, one naming the leadership the town printed in FY2025 and the other the leadership it printed from FY2011 to FY2022, and neither page says which year it is. — closes: a dated staff roster, or the district’s October 1 EPIMS submission, either of which states the day the count was taken. |
| people | Which town posts are funded but standing empty? | a roster names who is there and an establishment names the posts, and only the DPW and the Assessing office publish the second — so a department that shrank and a department that could not hire look identical. The Police Department’s FY27 budget presentation marks every post Funded or Funded – Vacant, which is exactly the distinction, for one department in one year — closes: the FY27 budget presentations for every department, if they all mark posts that way |
| people | Who actually lives in Lunenburg — how many are over 65, how many households have a child in the schools, and what each group can afford? | ANSWERED IN PART, 11 September 2026, and the part that remains is the part the argument actually runs on. The Census tables named below were fetched and are loaded as census_acs: 11,804 ± 19 residents, 1,979 ± 309 of them 65 or over, 4,529 ± 235 households, 1,477 ± 198 with a child under 18, median household income $109,753 ± $12,275 and $72,935 ± $8,677 where the householder is 65 or over. See /lunenburg-by-the-numbers, where every figure carries its margin. WHAT SURVIVES is the third clause — what each group can AFFORD. Income is not wealth, not savings, not equity and not a tax bill, and nothing published joins a property tax payment to the age of the person who paid it; the two rows below carry the two halves of what is still missing. — closes: the town census, which counts every resident by name, age and household rather than sampling them, held by the Town Clerk. |
| people | Who are the ten people the Public Library employs? | the Library told the town in FY2019 that it employs ten — “we only employ ten total” — and it has never printed a roster. Its annual report is signed by the Director and names a colleague only in passing prose (a Young Adult Services Librarian in FY2024, a Digital Services Librarian the same year), so the org chart holds ONE of ten. The town staff directory does not carry the Library at all: it is governed by elected Trustees rather than run from Town Hall, and has no category on lunenburgma.gov — closes: the Library’s own staff page, or the Trustees’ minutes, which record appointments |
| people | Who chaired each town board after FY2016? | the officials listing marked its chairs with denotes chairperson and stopped printing the footnote after FY2016; 46 bodies name a chair somewhere in their own report and 53 do not, so 218 body-years have members and nobody at the top — closes: the Town Clerk’s record of board organisational votes, which every board takes annually |
| people | Who is in which of the two lists the gross wage pages print, and is anyone in both? | The Calendar Year 2022 Gross Wages pages (186-192 of the FY2022 annual town report) print TWO columns, and each is alphabetised A to Z independently all the way through the seven pages -- the left column runs ABRAHAM to ZRATE across 332 names and the right BIERY to YOURK across 329. Neither is a continuation of the other, and the document puts NO HEADING over either column and no total under either, so nothing in it says what separates the two. The obvious reading -- one is the town payroll and the other the school payroll -- is a HYPOTHESIS and nothing on the page tests it. It matters because a resident adding the two columns is adding two populations they cannot name, because several surnames appear in both columns, and because the list carries no department, no position and no hours for anyone: it is 661 names and 661 gross figures. WHAT IS NOT ESTABLISHED: what the two lists are, whether any person is counted in both, and which fund paid any of it. -- closes: the Town Accountant’s payroll register for calendar year 2022 with its department and fund coding, which is the report the wage list is printed from. |
| people | Who works in Accounting, Human Resources, Land Use and Facilities? | the town’s own staff directory lists 29 departments and these four are in none of this project’s 61 bodies — a department that files no annual report is absent from the contents page, and one whose head is not an APPOINTED OFFICIAL is absent from the officials listing, so both our sources miss the same four. The Facilities Director is named in the FY2023 report and on the Town Office Hours page and appears in no roster — closes: the town staff directory at lunenburgma.gov/directory.aspx, whose PEOPLE tab names everyone by department |
| people | Why DESE special education teacher FTE falls from 18.5 to 2.0 while total teacher FTE holds flat | dese_teacher_program_area shows Lunenburg’s special education teacher FTE at 18.5 in SY2008 and 2.0 in SY2026 — a 90% collapse — while general education FTE holds between 100 and 113 and the district total is flat. A district that had lost nine tenths of its special education teachers would show it everywhere else in these files and does not. Teachers being RECODED from special education to general education produces exactly this signature. WHAT IS NOT ESTABLISHED is that any recoding happened: a change in how FTE is apportioned when one person works across categories, a change in DESE’s program-area definitions, and a real staffing change all fit the same series. Rule 6, and nothing in the archive tests it. — closes: EPIMS work assignment records for Lunenburg aggregated by job classification and program area by year, which would show whether the same people were reported under a different code. |
| people | Why DESE’s foundation enrollment for Lunenburg at Monty Tech differs from its own October headcount | Two DESE counts of the same thing disagree in every year. The Chapter 70 foundation enrollment used to compute the assessment — derived on /monty-tech by subtracting the Lunenburg district’s from the town’s — runs between eight below and fifteen above the October headcount of Lunenburg residents attending Montachusett Regional in DESE’s own residents-by-district file, and the gap has no consistent sign or size. One documented mechanism puts children into the assessment who are not at Monty Tech: the district’s business director told the Finance Committee in March 2022 that four Lunenburg students attending trade programmes at Leominster and Nashoba “become part of the Monty Tech assessment”. That accounts for a difference in one direction and not for the years running the other way. Until it is reconciled, no per-student figure on this page can be quoted without saying which count is the denominator. — closes: DESE’s foundation enrollment detail for the Chapter 70 calculation, which states the collection date and the categories included, published beside the key factors workbook this project already holds. |
| record | Did the town ever adopt c.32B §§21–23, the expedited plan-design route? | This decides whether plan design here is bargained in full or changed through 30 days and a binding panel. §21(a) makes it a vote of the board of selectmen in a town, so Town Meeting warrants were never the place to look; no such vote has been found in the Select Board record we hold. The Board was walked through the reform and its "Maximum Possible Savings" on 22 January 2013 and the follow-ups went to executive session. — closes: the Select Board vote adopting or declining §§21–23, or a statement that none exists. |
| record | Does segment 51 of a school account string mean special education? | The town's account string is nine segments; the fourth is the DESE function code. The fifth is 51 on every general fund school account whose own description names special education, except special education transportation, and /analysis/special-education-costs classifies in-district special education by it -- less two accounts the district's own budget book labels as English learner costs, which shows the segment is not purely special education. The meaning of the segment is read from the account names, not from a published chart of accounts, so the in-district total rests on our reading. — closes: the Town's MUNIS chart of accounts, with the definition of each segment and its values, from the Town Accountant. |
| record | How many meetings the town held, and how many of them left no record at all | This project can count meetings it has EVIDENCE of — 7,014 occasions where an agenda, a set of minutes or a recording says a board met on a day. It cannot count meetings. The town publishes documents rather than a schedule of what took place, so a meeting with no agenda, no minutes and no recording is indistinguishable from a meeting that never happened, and neither appears in sources/data/meeting-register.csv. That the gap is real rather than theoretical is shown by the meetings that survive on ONE thread: 231 occasions have a recording and no paperwork whatever, 162 of them School Committee, and 2,395 have an agenda announcing the meeting and no minutes saying what happened. Each of those would have been invisible if the other source had also been missing. WHAT THIS IS NOT: it is not a finding that the town met in secret. Open Meeting Law notice and the filing of minutes are separate obligations, and nothing here establishes which unrecorded meetings were noticed. — closes: the Town Clerk’s own record of meetings posted under the Open Meeting Law, which is a list of meetings NOTICED rather than a list of documents published, and is the only source that would give this register a denominator it did not derive from its own contents. |
| record | How many votes each FY2027 override question received on 16 May 2026 | Two records disagree and neither is the certified count. The Town's unofficial tally sheet (town-supplementary/docs/town-2026-election-unofficial-results.pdf) foots precinct by precinct to its own ballots-cast total; the Division of Local Services' override record prints different yes and no counts for both questions, whose yes plus no alone exceed that ballots-cast total. Which is right is not established here. — closes: the Town Clerk's certified results of the 16 May 2026 Annual Town Election. |
| record | How much of what was said in a public meeting does a search of the archive actually reach? | Our own text extraction inserts spaces inside words, at scale -- w ell, s elling, dep artment, B oard are all in the extracted minutes. Nine of the eleven hits for ELL are this rather than English learners. It costs twice: it manufactures tokens that were never printed, and -- the part that matters -- it makes PHRASE SEARCH MISS, because study hall broken as study h all will not match "study hall". So a search that returns nothing may mean the words were said and our copy cannot be read, which is the exact failure the coverage denominator exists to prevent, arriving underneath it. The rate has not been measured and neither has the phrase-search undercount; both are countable against the source PDFs. This belongs to extract_minutes.py, not to the index. -- closes: nothing anybody publishes. A re-extraction with a layout-aware reader, measured against the same PDFs, is the only thing that settles it. |
| record | Is account 8129 the Zoning Incentive Stabilization Fund or the playground fund? | The annual reports print 8129 as ZONING INCENTIVE STABILIZATION (TD BANKNORTH) in FY2020 and as Zoning Stabilization Fund in FY2025. This project’s own account registry, sources/data/fund-owners.csv, records 8129 as the playground fund with its owner unresolved. Both cannot be right, and the registry is what several pages read to name an account. The extracted balances keep the document’s name and flag the disagreement rather than resolving it. — closes: the Treasurer’s chart of accounts, or the Town Meeting article that created 8129. |
| record | Over what period does DESE’s placement trajectory measure movement | Dataset 92x3-2qj9 follows a cohort from the setting its placement started in to where the same children are now, and it is the only published route into out-of-district placement. The workbook is a single Data sheet with no notes, and nothing in it or on the portal page states the interval between the start and the destination. Every rate drawn from it — including the finding that Lunenburg children who started in a substantially separate classroom are out of district about fifteen times as often as those who started in an inclusive setting — is a rate over an unstated span, so none of them can be annualised or compared with a rate measured over a known one. — closes: DESE’s methodology note for dataset 92x3-2qj9, stating the cohort rule and the interval. |
| record | Was a meeting recorded at all, when no video was posted? | The video index establishes THAT a recording was posted, which is a fact the written record does not always carry — the town posts minutes for a fraction of the meetings it holds. It cannot establish the reverse: a meeting recorded and not posted, or held and not recorded, looks identical from here. — closes: the PEG station’s own cablecast log, which lists what was recorded rather than what was uploaded. |
| record | What did Ayer and Shirley each spend for each pupil BEFORE they regionalised? | Ayer and Shirley regionalised for FY2012, which is the one local case anybody could learn from. The archive holds Ayer for FY2009-FY2011 and Ayer Shirley School District from FY2012, and nothing for Shirley alone beforehand - so the figure before is one town and the figure after is two. That is a different denominator, not a measured change, and comparing them would produce a confident number about the wrong thing. - closes: DESE per-pupil expenditure for Shirley, FY2009-FY2011. |
| record | What do the two Medicare plans in the FY27–FY29 PEC agreement cover? | The FY27 memorandum names six plans and puts ""benefit brochures"" in Attachment A; the Attachment A received on 6 October 2026 holds four, all for active plans (Network Blue New England, Network Blue Select, Access Blue New England Saver, Blue Care Elect). Managed Blue for Seniors and Medex — the plans the memorandum sets at 75/25 and 50/50 for retirees — have only their prescription copays stated in the memorandum itself. — closes: the MIIA summaries of benefits for Managed Blue for Seniors with PDP and Medex with PDP, FY27. |
| record | What is in the PEC agreement that sets the town’s health insurance split and terms? | NARROWED 6 October 2026. The PEC Agreement of 16 June 2008 is held (sources/contracts/pdf/pec-agreement-2008.pdf, a 16-page scan holding the 8-page agreement twice), received from the Town’s Human Resources Director by email. It names BCBS plans, a 75% Town share on the PPO, 80% then 75% from 1 July 2011 on the HMO and the two senior plans, 50% on Medex, 75% of the Medicare Part B premium, and a term of 1 July 2008 to 30 June 2012 continuing ""until the new agreement is reached"". What sits BETWEEN it and the FY27 memorandum, which amends ""the current in-force health insurance agreement"" without naming it, is not held: the Select Board minutes record ""the amendment dated May 14, 2013"" and a further amendment approved 11 March 2014, an agreement expiring 30 June 2016 (10 May 2016), and a Public Employee Agreement approved 12 April 2022 ""effective July 1, 2022"". Which of these the FY27 memorandum amends is not established. — closes: the complete, current agreement the Human Resources Director wrote on 6 October 2026 she was ""working on producing"", or the 2013, 2014, 2016 and 2022 instruments themselves. DECIDED 6 October 2026 (TJ): the current terms are modelled from the FY27 memorandum and its Attachments A and B, which restate every money term in full -- plans, the 75/25 and 50/50 splits, the $96 Part B payment, the $3,000/$6,000 opt-out, and the term to 30 June 2029. The missing instruments do not change any figure the model uses. They matter for the HISTORY of the split (when it moved, and to what) and for the procedural terms the memorandum carries over unrestated (eligibility, retiree and spouse definitions). Lower priority; ask when convenient. |
| record | What was actually said in the 232 executive sessions the Select Board entered citing collective bargaining? | 624 Select Board documents mention executive session and 232 cite collective bargaining; NO executive session minutes are in this archive. Health insurance is bargained there, so the open-session minutes catch the PEC only in passing — a phrase, an agenda line, a date — and never its substance. — closes: released executive session minutes, which the Open Meeting Law requires once the reason for secrecy has passed. |
| record | What was said at a meeting whose minutes the town published only as a photograph | 3,116 of the 12,015 agendas and sets of minutes this project holds (26%) contain no text a search can match. 3,096 are image scans, 3 draw their text as vector outlines, 14 are blank, 2 have a text layer our extractor could not read and 1 will not parse; a further 50 are listed by the town and not held here. WHAT THIS IS NOT: it is not evidence that anything was left unsaid. The words are on the page and the page is a picture of a page, so an unreadable document and a subject nobody raised produce the identical empty result. Rule 15a instructs everyone working here to search the meeting archive before concluding a thing was never discussed, and until this was measured that search silently skipped a quarter of the record while printing a coverage line saying otherwise. IT IS NOT EVEN: the coverage is not evenly spread, so an archive-wide figure understates the boards that carry it — Board of Assessors 255 of 488 (52%); Select Board 629 of 1,347 (47%); Lunenburg Housing Authority 110 of 255 (43%). Measured per board and year in sources/data/minutes-searchable.csv, which scripts/build_minutes_searchable.py regenerates and check_generated.py refuses to let go stale. — closes: OCR of the image-only documents, already on the roadmap in notes/QUEUE.md, which recovers the scans and the vector-outline pages but produces OUR rendering rather than the town's own words (rule 13) and so must never be quoted as the document's text; and, for the documents the town lists that we do not hold, a records request to the Town Clerk for the minutes of the named meetings in a text-bearing format. |
| record | What was the School Committee told under "FY26 Year End Budget review" on 2 and 9 September 2026? | Both agendas carry the item (Old Business, 5 minutes). The archive's catalogue of the Town's AgendaCenter lists no minutes for either meeting, so the only written statement on the FY26 school year-end held here is the 29 July 2026 minutes, in which the business manager was "confident the remaining amount would be well below" the approximately $600,000 returned in FY25. The machine captions of the recordings can locate a moment but are not a record. /analysis/fy26-school-surplus. — closes: the approved School Committee minutes of 2 and 9 September 2026, and any year-end budget document presented under that item. |
| record | When the town actually POSTED each agenda and each set of minutes — the two timestamps the Open Meeting Law turns on (48 hours of notice; minutes in a timely way) | The AgendaCenter publishes no posting timestamp and our watch was seeded on 8 September 2026, so only 24 of 12,089 documents have a first-seen date. The documents’ own creation timestamps (sources/data/meeting-document-timestamps.csv) bound the posting from below and cannot prove when a file went up, and a file replaced in place takes a new date — closes: an AgendaCenter export carrying the posted-on date per document, or the town’s own record of when each was uploaded. |
| record | When the town actually posted an agenda or a set of minutes, as against when we first saw it | The AgendaCenter lists a document's MEETING date and publishes no posting date anywhere -- not in the listing markup, not in the file's URL, not in the response headers. So scripts/watch_meetings.py can record only first_seen, the day this project's crawler first observed a document, and the gap between a meeting and its minutes appearing is bounded by how often we look rather than measured. Every such field in sources/data/meeting-watch-events.csv and in fy28/public/data/meeting-feed.json is named days_after_meeting_upper_bound for that reason. WHAT IT IS NOT: it is not a measurement of how long the town takes, and a document posted the day after a meeting and one posted three weeks later are indistinguishable if we looked once in between. It is also blind backwards: the 12,065 documents the watch adopted when it was seeded on 8 September 2026 carry no first_seen at all -- an empty cell rather than a guess -- so no lag figure exists for anything published before that date, and the series begins the day the watch did. The separate question of how many meetings the town HELD is registered above, “How many meetings the town held, and how many of them left no record at all”. -- closes: the CivicEngage AgendaCenter's own record of when each document was uploaded, which the platform stores and the public listing does not render; the Town Clerk or the site administrator can export it. |
| record | When was a meeting recording made, where the title does not say? | The PEG channel’s video titles are the only chronology there is: a flat channel extraction returns no upload dates, and 652 of the 4,671 titles state no date at all (as indexed 8 September 2026). For those the recording can be placed only by its position in the channel listing, which is not a date. — closes: the channel’s own per-video publication date, which the YouTube Data API returns as snippet.publishedAt. Even that is an UPLOAD date and not the meeting date. |
| record | Whether Lunenburg’s MCAS results are high or low for Massachusetts | Residents have argued the comparison in both directions at School Committee — that the town is “in the top 20% for school performance while being in the bottom 10% for spending”, and that “neighboring districts… have faced similar challenges while achieving stronger outcomes”. The spending half of that can be checked here, because DESE publishes the statewide distribution of per-pupil spending with quartiles and a rank. The results half cannot: this archive holds MCAS for six districts and no statewide distribution of it at all, so no percentile, rank or state median can be computed for any of the four measures. — closes: DESE’s district-level MCAS achievement file for all districts, published per year at profiles.doe.mass.edu, extracted the way the finance distribution already is. |
| record | Whether a board discussed a thing at a meeting it noticed but left no minutes and no recording of | 1,754 of the 6,990 meetings in sources/data/meeting-register.csv (25%) have a posted AGENDA and neither minutes nor a recording, so the only surviving record is that the meeting was noticed and what it meant to take up. 235 of them are since 1 July 2024. It is worst where a body is small: School Advisory Councils & Committees 229 of 268 (85%), Capital Planning 63 of 182 (35%), Board of Health 101 of 297 (34%). WHAT THIS IS NOT: it is not evidence that nothing was discussed, and a search that returns nothing for one of these dates has not searched the meeting -- it has searched an agenda. The practical cost is the inverse question. Parks Commission can be shown DISCUSSING its budget (44 of 192 meeting dates carry the word, and Budget / Finance Review is a named agenda item from 22 July 2026), and cannot be shown NOT to have, because 40 of its 193 meetings left no account at all -- including 30 September 2026, whose agenda item was Budget Check-in. This is distinct from the register's own limit, that a meeting with no agenda either is indistinguishable from one never held: here the town has published a notice, so the meeting is established and only its content is missing. — closes: the minutes themselves. G.L. c.30A §22 requires a public body to create and maintain accurate minutes of every meeting and to make them available on request, so for each of these dates the document is owed whether or not it was ever posted to the AgendaCenter. Requested by board and date. |
| record | Which body met, for a recording whose title names none? | 14 of 4,671 videos are undetermined — Informational Symposium, Lunenburg Town Charrette . FULL, Master Plan Public Forum, School Funding Forum, 911 YouTube. The title is all we fetch; the channel also carries a description field on each video and several of these titles say "See Description". — closes: the per-video description text from the channel, which the index does not currently store. |
| record | Which capital project is the unnamed $25,000.00 on the FY2016 capital projects schedule? | THE PAGE PRINTS A RULED ROW WITH A FIGURE AND NO NAME. On CAPITAL PROJECT FUNDS FY 2016, PDF page 36 of the FY2016 annual town report, the row between the column header and 08/02 ATM Development of Cemeteries carries $25,000.00 in APPROPRIATED FORWARD and nothing else -- no purpose, no article reference, no fwd flag, no expended figure, no balance. IT IS NOT A READING ERROR AND IT IS NOT IGNORABLE. All three columns of the page tie to the printed Grand Total to the cent only when that $25,000.00 is counted, so the figure is part of the schedule. And the Cemeteries row immediately below it does not close as printed -- $1,019.01 less $35,229.38 is ($34,210.37) against a printed balance of ($9,210.37), short by exactly $25,000.00. WHAT IS NOT ESTABLISHED: that the $25,000.00 belongs to the Cemeteries project. A label that failed to print, a second article against the same project, and a separate project whose text was lost all fit the same evidence, and nothing in the report tests between them. — closes: the Town Accountant's FY2016 capital project fund detail by article, which names the article every capital appropriation sits under. |
| record | Which figure did the 2018 Annual Town Meeting actually vote where the printed FY 2019 Omnibus Budget does not add up? | The budget as printed on pages 155-158 of the FY2018 annual town report carries TWO arithmetic misprints and the document contradicts itself about both. Total General Government $1,401,119.25 is 709.00 MORE than the 22 lines beneath it, and the printed Total Omnibus $36,804,408.83 agrees with the subtotal rather than with the lines. Total Assistance $243,493.56 is 2,000.00 LESS than the two subtotals above it, and there the Total Omnibus agrees with the subtotals rather than with the line. Ten of the twelve section totals foot their own line items to the cent, every subtotal foots exactly, and the pages carry a digital text layer, so this is the town's arithmetic and not our reading. What a resident cannot tell from the published report is which number was put to the meeting: the appropriation is voted as one sum, and a 709.00 or 2,000.00 difference changes what the departments beneath it were authorised to spend. - closes: the Town Clerk's certified record of the vote on Article 7 of the 5 May 2018 Annual Town Meeting, which states the sum voted and the schedule attached to it. |
| record | Which figure did the 2019 Annual Town Meeting vote for Central Purchasing, where the printed FY 2020 Omnibus Budget prints two that are a factor of ten apart? | The budget is printed on pages 161-164 of the FY2019 annual town report (printed pages 159-162) and the document contradicts itself in two places. p162 prints 38 Central Purchasing $ 603,030.00 and, three rows beneath it, Total Central Purchasing $ 60,303.00 -- $542,727.00 apart. And p162 prints four Fire lines (1,093,374.24 + 20,000.00 + 15,000.00 + 10,000.00 = 1,138,374.24) above Subtotal Fire Dept. $1,138,434.24, $60.00 more than its own lines. Sixteen of the eighteen printed group totals foot their own line items to the cent and the twelve section totals sum to the printed Total Omnibus $38,058,164.30 exactly, so this is the town's arithmetic and not our reading: both pairs were read at 400 dpi off the page's own bitmap. The town's grand total is footed on $60,303.00 and on $1,138,434.24, so the printed Total Omnibus cannot distinguish a misprinted line from a misprinted subtotal. A resident cannot tell from the published report what Central Purchasing was authorised to spend in FY2020, and the two readings differ by more than half a million dollars. -- closes: the Town Clerk's certified record of the vote on the FY2020 omnibus budget article at the 2019 Annual Town Meeting, with the schedule attached to the motion as moved. |
| record | Which fiscal year did Town Meeting vote the left-hand half of the FY 2016 Omnibus Budget for? | The omnibus schedule on pages 140-141 of the FY2015 annual town report is titled FY 2016 Omnibus Budget and is set as two panels per page. Its right panel is headed VOTED FY 2016 and its left panel VOTED FY 2015. Everything else on the page says it is one column: the line numbers run 1 to 82 continuously across both panels and both pages, the 91 line items sum exactly to the single TOTAL OMNIBUS of $32,025,895.00, and so do the twelve printed section totals. But the report itself never states which heading is wrong, and the arithmetic cannot tell a misprinted heading from a correct one. Until it is settled, no figure from the left panel may be cited as an FY2015 appropriation or as an FY2016 one without saying which. - closes: the Town Clerk's record of the vote at the 2015 Annual Town Meeting, with the warrant article and the amount as moved, which the town holds and does not publish. |
| record | Who appoints each appointed official, and to whom do they answer? | the annual report heads six pages APPOINTED OFFICIALS and names nobody as the appointing authority, so a Constable, a Town Clockwinder and a Wellness Coordinator sit in the record with no department and no stated superior. The town charter is the document that says which appointments belong to the Select Board and which to the Town Manager, and this archive does not hold it — closes: the Lunenburg town charter and the general bylaws |
| record | Why DESE’s FY2025 transportation spending for Lunenburg differs from the town ledger | DESE's End of Year Financial Report gives general fund in-district transportation (function 3300) and out-of-district transportation, and their sum equals the town's MUNIS regular plus special education transportation accounts to the dollar in FY2022, FY2023 and FY2024. In FY2025 DESE's sum is higher than the ledger and nothing published explains it. In FY2020 and FY2021 the two differ by equal and opposite amounts, which is what one payment booked in different years by the two would look like. — closes: the district's FY2025 End of Year Financial Report workpapers mapping MUNIS accounts to DESE functions, from the Business Office. |
| record | Why these six districts and not six others | Every comparison on this page runs against a set of six districts chosen by this project — Ashburnham-Westminster, Ayer Shirley, Groton-Dunstable, Harvard, North Middlesex and Lunenburg. DESE’s RADAR workbook covers all 421 Massachusetts districts and this archive extracts six because the full file takes the published database past Cloudflare’s per-asset limit. No document here records the criterion by which those six were picked, and a peer set is an argument: whoever chooses it has already made a claim about what Lunenburg is comparable to. That is why every headline figure on /what-other-districts-spend is stated against DESE’s statewide distribution of 318 districts rather than against the six. — closes: DESE’s own DART comparison group for Lunenburg, which names the districts the Department considers similar and states the criteria it used. |
| students | How many of the children counted as leaving a Lunenburg school moved out of town | Attrition is leaving for ANY reason, so a family that moves to another state and a family that keeps its address and enrolls a child elsewhere are the same number. Without the split, the rate cannot be read as a statement about the schools at all -- and it is the reading every resident supplies. The town's own records could bound it: residency is what the district verifies at enrollment and what the assessor's and clerk's records track. — closes: the district's withdrawal records coded by reason (moved out of district / transferred within Massachusetts / private / home school), which is a field SIMS already requires the district to report on every exit. |
| students | Which school a Lunenburg student who left went to, by grade | DESE publishes two files that each hold half of this and never the join. dese_attrition gives an attrition rate for every grade, every year, and names no destination. dese_residents_sending names every receiving district and the reason -- Monty Tech, school choice, charter, foster care -- and carries no grade at all. So the single largest measured departure in this town, about one in five of every eighth grade, cannot be attributed to anywhere: a vocational admission, a private school, a charter, a school choice transfer, an out-of-district placement and a family moving out of town are one number. — closes: one column. DESE's residents-sending file with a grade on each row, or the district's own October SIMS submission broken out by exit grade and exit reason, which the district files to the state every 1 October and does not report to its own School Committee. |
| students | Why one in five Lunenburg eighth graders does not return for grade 9 | The rate is measured and stable across seventeen years, two building reorganisations and a pandemic. The reason is not measured anywhere. Monty Tech admits at grade 9 and Lunenburg is a member town there, so a child going there moves part of the town's bill rather than adding to it -- but nothing published links the two quantities, and the same rate is equally consistent with private and parochial admission at grade 9, with charter admission, with an out-of-district special education placement made at the transition, and with families moving. — closes: nothing anybody currently publishes. The nearest thing is an exit survey or an exit-reason tally kept by the district at the point a student is withdrawn, which is a record the district could choose to keep and report and does not. |
Every query below is run against the live database when this page is built, so a question that stops answering breaks the build rather than sitting here looking answerable. Two of them return nothing, and that is the honest state of the archive rather than a fault.
SELECT fy, printed_name, label, class, amount, document, page FROM revenue_history WHERE fy = 2022 ORDER BY amount DESC
100 rows
| fy | printed_name | label | class | amount | document | page |
|---|---|---|---|---|---|---|
| 2022 | REAL ESTATE TAXES | REAL ESTATE TAXES | levy | 28756474.97 | 4129-fy-2022-annual-town-report.pdf | 26 |
| 2022 | CH 70 SCHOOL AID | CH 70 SCHOOL AID | state | 7823618.0 | 4129-fy-2022-annual-town-report.pdf | 26 |
| 2022 | TRANSFERS FROM OTHER FUNDS | TRANSFERS FROM OTHER FUNDS | transfer | 2391150.83 | 4129-fy-2022-annual-town-report.pdf | 26 |
| 2022 | MOTOR VEHICLE EXCISE | MOTOR VEHICLE EXCISE | local | 1839037.96 | 4129-fy-2022-annual-town-report.pdf | 26 |
| 2022 | UNRESTRICTED GEN'L GOVT AID | UNRESTRICTED GEN'L GOVT AID | state | 1162230.0 | 4129-fy-2022-annual-town-report.pdf | 26 |
…and 95 more.
class says what KIND of revenue it is — levy, state aid, local receipt, transfer — which is a property of where the money came FROM. It does not say what the money went on to pay for, and for anything landing in the general fund nothing can: that money is fungible by law and no document apportions it. Only restricted funds have a traceable destination, and those are in money_edges.
The classification is joined in at build time from money_classification, so the name the report printed and the group we assigned are in one row.
SELECT fy, printed_name, amount FROM revenue_history WHERE fy = 2023
0 rows
Returns nothing, and that is the correct answer rather than a failure. revenue_history carries only years whose extract was CHECKED against the report’s own printed total. FY2023 has 10 unchecked rows in annual_report_receipts; loading them here would make five verified years and one guess look identical.
SELECT fy, stage, label, value FROM budget_figure WHERE label LIKE '%Superintendent%' AND fy BETWEEN 2022 AND 2025 ORDER BY fy, stage
10 rows
| fy | stage | label | value |
|---|---|---|---|
| 2022 | proposed | Superintendent | 157000.0 |
| 2022 | restated | Superintendent | 165000.0 |
| 2022 | settled | Superintendent | 165000.0 |
| 2023 | proposed | Superintendent | 171000.0 |
| 2023 | restated | Superintendent | 171000.0 |
…and 5 more.
One row per stage, and they are different quantities: proposed is what was asked for, settled what was voted, actual what the later document reported. Rule 1 — never compute a growth rate from one stage to another.
budget_figure is one row per line × year × stage × variant. Filtering on a label works here because "Superintendent" is unique; most lines are not, which is what line_key is for.
SELECT fy, stage, label, value FROM budget_figure WHERE fy = 2024 AND stage = 'proposed' ORDER BY value DESC
319 rows
| fy | stage | label | value |
|---|---|---|---|
| 2024 | proposed | Health Insurance | 3076306.0 |
| 2024 | proposed | H.S. Teachers/Regular | 2899395.0 |
| 2024 | proposed | M.S. Teachers/Regular | 2027997.0 |
| 2024 | proposed | E.S. Teachers/Regular | 1527124.0 |
| 2024 | proposed | P.S. Teachers/Regular | 1033468.0 |
…and 314 more.
FY2024 has no settled stage in the archive — only proposed and actual. So this is what the district ASKED for that year, not what the town voted. The stage you get is not the stage you named, and the coverage table below is the only place that difference is visible before you query.
Which stages exist varies by year, so a query written for one year can silently return nothing for another.
SELECT department, control, voted, expended FROM v_spending_classified WHERE fy = 2026 AND period = 9 ORDER BY expended DESC LIMIT 12
12 rows
| department | control | voted | expended |
|---|---|---|---|
| SCHOOL DEPARTMENT | delegated | 26247474.0 | 15736640.86 |
| WRRS ASSESSMENT | assessed | 2392572.0 | 2392572.0 |
| INSURANCE | bargained | 3713520.0 | 2240086.02 |
| POLICE DEPARTMENT | discretionary | 2406172.0 | 1686886.24 |
| FIRE DEPARTMENT | discretionary | 1717588.0 | 1169012.23 |
…and 7 more.
control is our classification of who holds the decision, not a published field. voted and expended are the town’s own figures; the column beside them is ours and is labelled that way everywhere it appears.
Spending IS traceable to a department, which is why this answers where the revenue question above cannot.
SELECT l.fy, l.period, a.name, a.account_id, l.original, l.revised, l.expended, l.available FROM ledger_snapshot l JOIN account a USING (account_id) WHERE a.account_id LIKE '0100-S%' AND l.fy = 2026 ORDER BY l.expended DESC LIMIT 10
10 rows
| fy | period | name | account_id | original | revised | expended | available |
|---|---|---|---|---|---|---|---|
| 2026 | 12 | HEALTH INS | 0100-S5991992-570001 | 3701195.0 | 3701195.0 | 3622881.65 | 78313.35 |
| 2026 | 12 | HS TEACHER | 0100-S2066101-511001 | 2719099.0 | 2719099.0 | 2791452.42 | -72353.42 |
| 2026 | 12 | MS TEACHER | 0100-S2055101-511001 | 2038757.0 | 2038757.0 | 2022044.44 | 16712.56 |
| 2026 | 12 | ES TEACHER | 0100-S2044101-511001 | 1552471.0 | 1552471.0 | 1556544.17 | -4073.17 |
| 2026 | 12 | PS TEACH R | 0100-S2072101-511001 | 1172728.46 | 1172728.46 | 1095292.39 | 77436.07 |
…and 5 more.
period is a point in time inside the year, not a stage. Two periods of the same year are two different MUNIS reports and adding them double-counts.
The S prefix is the structural way to find school accounts — it does not depend on any name, and MUNIS names are ten characters typed by a person.
Generated by scripts/build_schema_page.py from the live
database on 2026-10-16. Do not edit — run the script. The CSVs in sources/data/
are the source of truth; this database is a derived read model, rebuilt from scratch on
every run.