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
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 |
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 | proposed | empty | 68100 | 0 | fy18-personnel-supt-recommended-budget-revi… |
| plus total revolving fund | plus TOTAL Revolving Fund | 2017 | actual | 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 | actual | 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 | actual | 169424 | 122049 | 214030 | 136132 | 0 | 641635 | 0 |
| 2021 | actual | 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 | actual | 516646 | 362179 | 407895 | 378784 | 57649 | 1723153 | 0 |
| 2021 | settled | 516646 | 362179 | 407895 | 378784 | 57649 | 1723153 | 0 |
| 2022 | actual | 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 | actual | 223350 | 223350 | 1 |
| 2022 | proposed | 297843 | 297843 | 0 |
| 2023 | settled | 329360 | 329360 | 0 |
Tier 3 · accountswhat one account spent
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 |
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 — see that table's entry. |
item | TEXT | The thing being priced or counted. |
amount | TEXT | The figure, as printed. dollars |
unit | TEXT | What the figure is counted in. |
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 | set_on | source | source_file | source_ref | verified |
|---|---|---|---|---|---|---|---|---|---|---|
| 2025 | 2024-25 | HS | third_child | 85.00 | per student per sport per season | empty | District athletics workbook, by sport (Town… | munis-ledgers/account-details/athletics-by-… | Spring!L3 | Spring!L3 |
| 2025 | 2024-25 | MS | reduced_fee | 26.00 | per student per sport per season | empty | District athletics workbook, by sport (Town… | munis-ledgers/account-details/athletics-by-… | Spring!U3 | Spring!U3 |
| 2026 | 2025-26 | HS | full_pay | 325.00 | per student per sport per season | 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 — see that table's entry. |
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,497 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 | fy26-school-dept-approved-budget-3-12-25.txt | 16000 | 1 | 5500 | documents |
| maintenance system salaries | Maintenance/System Salaries | 2019 | proposed | empty | fy19-supt-proposed-personnel-budget.txt | 292184 | 1 | 12094 | documents |
| ps guidance supplies | P.S. Guidance Supplies | 2025 | proposed | empty | 3-12-25-town-manager-39-s-budget.txt | 250 | 0 | 50 | 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 337 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 | 2024 | FY2024 | 109 | 1 | empty | Grade 6 ELA | empty | row | empty | empty | empty | empty | trailing figures | 49 | 40 | empty | empty | empty | empty | empty | empty | 2 | 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,030 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 |
|---|---|---|---|---|---|
| empty | Technology IT: | 9 | technology | empty | heading-technology |
| Admin. Assistant | empty | 3 | secretary | empty | clerical |
| Occup. Therapist | Specialists | 1 | specialist | empty | heading-specialists |
staff_position_map school dimension 534 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 |
| A | empty | 2 |
| Music MS | Specialist Teacher | 1 |
staff_roster_counts school fact 699 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,815 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 |
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 |
report_appropriations town Tier 1 · totals extract 4,665 rows 2011 … 2025 (14 years)one 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 | 141 | 1 | Health & Sanitation | 62 Town Highway Garage | empty | row | empty | empty | omnibus-budget | empty | GENERAL FUND APPROPRIATIONS | SUMMARY & CLA… | 1000.00 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | v1=voted (from the shape of the column, not… | check failed | voted: 28,979,584.00 vs 29,079,384.00 (-99,… |
| appropriations | 2015 | FY2015 | 28 | empty | UNCLASSIFIED | Choice Tuitions | empty | row | empty | empty | accountant-schedule | empty | TOWN OF LUNENBURG | GENERAL FUND APPROPRIAT… | 531000.00 | 531000.00 | 524349.00 | 6651.00 | empty | empty | empty | empty | 4 | empty | 0 | empty | v1=appropriated | v2=available | v3=expende… | check failed | appropriated: 31,922,571.97 vs 32,216,220.5… |
| appropriations | 2016 | FY2016 | 144 | 1 | Unclassified | Group Health Insurance | empty | row | empty | empty | omnibus-budget | empty | TOWN OF LUNENBURG | GENERAL FUND APPROPRIAT… | 1907185.00 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | v1=voted (from the shape of the column, not… | check failed | voted: 33,802,373.00 vs 33,802,328.00 (+45.… |
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,387 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. |
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 | v1 | v2 | v3 | v4 | v5 | v6 | n_values | ruler_spanned | row_check | derived_cell | columns_tying | status | reconciliation |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2012 | FY2012 | LIBRARY | Water Enterprise Fund | 70 | empty | empty | 12380.65 | 17308.06 | 15950.86 | 13737.85 | empty | empty | 4 | empty | fund balances: forward + receipts - disburs… | empty | 0 | check failed | v1: 2,897,297.02 vs printed 2,766,954.67 (+… |
| 2016 | FY2016 | SCHOOL DEPARTMENT | Extended Day Revolving Fund | 33 | empty | FISCAL YEAR ENDING 6/30/16 ; FORWARD | TOTA… | 112884.10 | 300590.66 | 246943.94 | 166530.82 | empty | empty | 4 | empty | fund balances: forward + receipts - disburs… | empty | 0 | check failed | v1: 2,711,371.31 vs printed 2,704,480.72 (+… |
| 2018 | FY2018 | GENERAL GOVERNMENT | Sewer Gift Fund | 35 | empty | FISCAL YEAR ENDING 6/30/18 ; FORWARD | TOTA… | 387.09 | empty | empty | 387.09 | empty | empty | 2 | empty | empty | empty | 2 | check failed | v1: 3,560,171.36 vs printed 3,564,136.36 (-… |
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 |
Not about moneyCounts, names, dates and documents — everything this archive holds that is not a dollar figure
ballot_questions town fact 7 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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2014-01-11 | Special Town Election | QUESTION 1. DEBT EXCLUSION | Proposition 2½ debt exclusion | 72975321 | Bonds to construct a new Lunenburg Middle/H… | 1414 | 543 | 0 | 1957 | 7059 | 27.7 | PASSED | 2014 | 152 | plain | YES 413+234+323+444=1414; NO 163+111+140+12… |
| 2016-05 | Annual Town Election | QUESTION 1 – Pavement Management Plan | Proposition 2½ debt exclusion | 4000000 | Pavement Management Plan — town roads | 181 | 127 | 55 | 363 | empty | empty | PASSED | 2016 | 193 | plain | YES 58+27+34+62=181; NO 28+36+32+31=127; Bl… |
| 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… |
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 |
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 |
report_capital_projects town extract 616 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 | Technology, School Department | empty | row | empty | empty | empty | empty | CAPITAL PROJECT FUNDS FY 2016 | APPROPRIATE… | 30000.00 | 28228.93 | 1771.07 | 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 | Public Safety Building Engineering Design f… | empty | row | empty | empty | empty | empty | CAPITAL PROJECT FUNDS FY 2023 | EXPENDED/EN… | 0.00 | 25000.00 | 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 | 3114 11/23 TC Passios Roof | empty | row | empty | empty | empty | empty | CAPITAL PROJECT FUND BALANCE DETAIL | TOWN … | 300000.00 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
report_debt town extract 354 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 | PRINCIPAL | empty | row | empty | empty | empty | empty | TOWN OF LUNENBURG DEBT REPAYMENT SCHEDULE A… | 965000.00 | 1070000.00 | 18510000.00 | empty | empty | empty | empty | empty | 3 | empty | 0 | empty | empty | no check | no total printed |
| debt | 2020 | FY2020 | 45 | empty | empty | PRINCIPAL | empty | row | empty | empty | empty | empty | TOWN OF LUNENBURG DEBT REPAYMENT SCHEDULE A… | empty | empty | 1045000.00 | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| debt | 2025 | FY2025 | 39 | empty | empty | TOTAL MASS WATER POL TRUST-SEWER | empty | subtotal | empty | empty | empty | empty | TRUST & STABILIZATION FUNDS HELD BY OTHER B… | 73779.00 | 73792.00 | 73806.00 | 73820.00 | 73835.00 | 73881.00 | 73896.00 | 73913.00 | 9 | 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,545 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 | RIOS JENNIFER | empty | row | empty | empty | empty | empty | OUDAIN DUVV CIV NUTAND | 67253.64 | empty | empty | empty | empty | empty | empty | empty | 1 | empty | 0 | empty | empty | no check | no total printed |
| gross_wages | 2025 | FY2025 | 182 | empty | empty | WENTWORTH | empty | row | empty | empty | empty | empty | 2025 GROSS WAGES | 51673.54 | 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 642 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 | empty | empty | footnote | printed below the grand total, which ends t… | empty | empty | empty | TOWN OF LUNENBURG Page 1 of 2 | TRUST FUNDS… | 8129.00 | empty | empty | 28434.40 | empty | empty | empty | empty | 2 | empty | 0 | empty | empty | check failed | v2: 29,909.86 vs 7.00 (+29,902.86) [v-numbe… |
report_valuation town extract 316 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 | 2016 | FY2016 | 37 | empty | empty | Industrial | empty | row | empty | empty | empty | empty | BOARD OF ASSESSORS | Fiscal 2016 Assessment… | empty | empty | empty | 19994000.00 | 19.61 | 392082.34 | empty | empty | 3 | empty | 0 | 1.6667% | empty | no check | no total printed |
| valuation | 2019 | FY2019 | 43 | empty | empty | empty | empty | row | empty | empty | empty | empty | Valuation and Tax History | Fiscal Year Tax… | 1442248677.00 | 4.23 | empty | empty | empty | empty | empty | empty | 2 | empty | 0 | empty | empty | no check | no total printed |
| valuation | 2019 | FY2019 | 43 | empty | Assessor's Account for | Charges to 6/30/2019 | empty | row | empty | empty | empty | empty | Valuation and Tax History | Fiscal Year Tax… | 118953.20 | 133830.01 | empty | empty | 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 |
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. |
First 3 rows, in rowid order:
| fy | edition | page_printed | page_pdf | section | line | fund | amount | document | read_by |
|---|---|---|---|---|---|---|---|---|---|
| 2011 | FY2011 | 53 | 56 | assets | FY 11 REAL ESTATE TAXES | general | 445664.60 | sources/town-annual-reports/docs/4117-fy-20… | vision |
| 2012 | FY2012 | 53 | 56 | assets | FY 12 REAL ESTATE TAXES | general | 356747.49 | sources/town-annual-reports/docs/4118-fy-20… | vision |
| 2022 | FY2022 | 24 | 24 | assets | FY19 REAL ESTATE TAXES | general | -104.00 | sources/town-annual-reports/docs/4129-fy-20… | vision |
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 | 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. |
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… | vision |
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 |
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 — see that table's entry. |
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 | Sports uniforms | district document | The district budget prints “Replacement of … |
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 — see that table's entry. |
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 |
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 | 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 | 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 | printed 'Total Liablities' row, FY2025 prin… |
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 39 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 |
|---|---|---|
| document_wanted | DESE End of Year Financial Report | Published by the state. — closes: Separates… |
| people | Which fund pays which post | This is the load-bearing one. The rosters n… |
| money_out | School share of Medicare, active health ins… | Five of the seven FY2026 insurance accounts… |
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 62 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 | not described yet |
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 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2024 | athletic_fee | MS | reduced_fee | 26.00 | dollars | empty | empty | District athletics workbook, by sport (Town… | munis-ledgers/account-details/athletics-by-… | Spring!T3 | verified | reference |
| 2025 | athletic_fee | ANY | unified_track | 100.00 | dollars | empty | empty | LHS Athletics FAQ (rschoolteams.com) | district-budget/text/lhs-athletics-faq.txt | Unified Track =$100.00 | verified | reference |
| 2027 | contract_cola | Paraprofessionals | cost-of-living adjustment to the salary sca… | 2.0 | percent | empty | June 30, 2028 | Lunenburg school employee contracts — Parap… | contracts/CONTRACTS.md | Paraprofessionals | FY26–FY28 | 3.0% · 2.0%… | recorded | deliberately not used — the line has never … |
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 | 35 | 5596048.89 | 7088091.52 | 6269397.74 | 6414742.67 | GRAND TOTAL row, page 35 |
| 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 2,982 rows 2009–2025one row per district per year per measureThe state's published measures for EVERY Massachusetts district, per year: enrollment, per-pupil spending, selected populations. Each value carries whether it reconciles to DESE's own printed total.
| 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 |
|---|---|---|---|---|---|---|---|
| 01620000 | Lunenburg | 2025 | MCAS Performance | ELA Grade 10 % Meets or Exceeds | 0.57 | yes | sources/state-dese/radar-district-compariso… |
| 06730000 | Groton-Dunstable | 2024 | Expenditures Per Pupil | Pupil Services | 2073.0 | yes | sources/state-dese/radar-district-compariso… |
| 06730000 | Groton-Dunstable | 2012 | Expenditures Per Pupil | Teachers | 4483.0 | yes | sources/state-dese/radar-district-compariso… |
dese_radar state fact 2,982 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 | 2019 | MCAS Performance | Math Grades 3-8 % Meets or Exceeds | 0.518 | yes | sources/state-dese/radar-district-compariso… |
| 06160000 | Ayer Shirley School District | 2017 | MCAS Performance | Math Grades 3-8 % Meets or Exceeds | 0.433 | yes | sources/state-dese/radar-district-compariso… |
| 07350000 | North Middlesex | 2019 | Expenditures Per Pupil | Operations and Maintenance | 1513 | yes | sources/state-dese/radar-district-compariso… |
Which document a figure came from, what has been read, and what these tables mean.
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 139 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. |
| variant | Which whole-budget scenario the figure belo… | empty | ours | FY27 has four — Balanced, Core Budget, Leve… |
| path | Where our copy lives in the archive. | empty | ours | empty |
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 616 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/district-budget/text/fy23-quarterly… | sources/district-budget/text/fy23-quarterly… | ledger | budget | 2 | empty | NULL | NULL | NULL | NULL | 5d3c93143333601a78715745056dc3d794dc2c55ed4… |
| sources/town-annual-reports/text/4128-fy-20… | sources/town-annual-reports/text/4128-fy-20… | forward | budget | empty | empty | NULL | NULL | NULL | NULL | 751b434df07d4e54eb17aa35601fb49eda03ce43cb1… |
| sources/town-budget/text/a106-fy24-finance-… | sources/town-budget/text/a106-fy24-finance-… | forward | budget | empty | empty | NULL | NULL | NULL | NULL | e5b4f1ab3fe6bf3e0a1424ba2e318db988221897dc4… |
extraction_plan archive provenance 553 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 81 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 |
|---|---|---|---|---|---|---|---|
| money_gaps | classification | both | empty | one row per gap | The honest list of what CANNOT be answered … | This table is the honest list of what canno… | empty |
| report_debt | extract | town | empty | one row per printed line | Outstanding DEBT and repayment schedules as… | v1..v8 are ORDINALS. Split on `status`. | empty |
| staff_roster_entries | fact | school | empty | one row per person per year | PEOPLE — one row per name the town printed,… | name by name | empty |
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 |
|---|---|---|
| document_wanted | DESE End of Year Financial Report | Published by the state. — closes: Separates district spending by FUND, which is the one thing the town’s budget documents never show. |
| 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 enrolment schedule | 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 | glytdbud-expense for the special revenue funds | 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. |
| 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 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. |
| 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 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 | 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 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 | 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 | 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 | 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 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_out | Debt service by project | two accounts for ALL town borrowing · school buildings cannot be separated |
| 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 enrolment 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 enrolment 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 | What any special revenue fund bought | no expense report exists for these funds · purpose is presumed, never observed |
| 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 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 | 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. |
| 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 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 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. — closes: a staffing report stating FTE by position and year. |
| 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 | 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. |
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 | actual | Superintendent | 165000.0 |
| 2022 | proposed | Superintendent | 157000.0 |
| 2022 | settled | Superintendent | 165000.0 |
| 2023 | actual | Superintendent | 171000.0 |
| 2023 | proposed | 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-09-07. 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.