Home › Use Cases › Check a funding claim line against the attendance record
Use caseUC0166
🧪 Use-case kit · runnable

Check a funding claim line against the attendance record

A small, forkable project that does one job end to end. Run once for real, and every figure on these pages captured from that run.

The business caseThe problem this solves

A district's state funding claim is arithmetic over its own attendance register: which days count, at what fraction of a day, under enrolment status, excused and unexcused absence, minimum-day thresholds, part-time and dual-enrolment proration, and the board's adopted calendar. The claim goes out; months later a state apportionment auditor reads the same register and asks the same question. What a business analyst does today is subtract two numbers in a spreadsheet -- days present against funded days claimed -- and that subtraction cannot tell a holiday from a day before enrolment from a short day from a duplicate, cannot see a prorated day at all, and cites nothing. The pre-certification pass a district business analyst makes over an apportionment claim: reading the daily attendance register against the state's funding rules, claim line by claim line, and then against the district's own correspondence file for the amendments, waivers and backdated transactions that answer half of what the register appears to say.

Audience

The business analyst who signs the certification, and the person who will answer for it at audit. The decision is not 'is this number wrong' -- it is 'which rule was misapplied, which provision says so, and what document proves it'. This report's own answer on that decision is measured against a free calculator that answers most of it for nothing, and the calculator's number is printed beside every one of the model's. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual funding claim reconciliation pack (one SYNTHETIC claim period for one school -- every district, student reference and register row INVENTED)

The corpus is 48 funding claim reconciliation pack (one SYNTHETIC claim period for one school -- every district, student reference and register row INVENTED), 0.79 MB (txt 48). Because the answer is COMPUTED rather than opined, and that is rare enough in a document task to be worth building a kit around. The funded-days figure is arithmetic over stated rules: given the register, the calendar, the enrolment window, the minimum-day threshold and the rate table, the number of funded days a claim line supports is not a matter of judgement. So a deterministic checker produces ground truth, every arm is scored against a calculator rather than against an author, and evals/check_labels.py property 13 re-performs the whole arithmetic from the rendered text to prove it. The price is that no real attendance data exists here, and none could: daily attendance is a student record.

The corpus

  • The 48 funding claim reconciliation pack (one SYNTHETIC claim period for one school -- every district, student reference and register row INVENTED)generated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromwritten for this kit rather than collected — the corpus is generated in the kit's own repository, so there is no third-party data in it.

Swap this folder for your own material and the kit is pointed at your funding claim reconciliation pack (one SYNTHETIC claim period for one school -- every district, student reference and register row INVENTED). That is the whole change — there is no database to migrate.

One funding claim reconciliation pack (one SYNTHETIC claim period for one school -- every district, student reference and register row INVENTED), as the model receives itFCR-0001.txt · 1 of 48
Funding Claim Reconciliation
----------------------------------------------------------------
  Pack                        FCR-0001
  District                    Weatherly Unified School District
  School                      Tarnbury Middle School
  Claim period                2026-01-05 to 2026-01-30
  Instructional days          17
  Apportionment cycle         First Period (P-1)
  Prepared by                 District Business Office

Funding Rules And Rates
----------------------------------------------------------------
  Apportionment rules
  AR-1.1    A day is fundable only while the student's enrolment is active on that day
  AR-1.2    A day recorded under an attendance code the table below marks not fundable earns no apportionment, whether the absence is excused or unexcused
  AR-1.3    An excused absence does not affect the student's continuing eligibility, but it is still not a fundable day
  AR-2.1    A day on which the student received fewer than the claim line's minimum-day minutes is not fundable
  AR-2.2    A day is funded at the rate the enrolment status recorded for that day carries
  AR-2.3    A day not in session on the governing board's adopted instructional calendar is not fundable
  AR-2.4    One instructional day earns apportionment once only, across every program code the student is enrolled in

  Attendance codes
  AC-P    Present                                       fundable
  AC-S    Suspension, in-school                         fundable
  AC-I    Independent study, signed agreement on file   fundable
  AC-E    Excused absence                               not fundable
  AC-U    Unexcused absence                             not fundable
  AC-X    Day not in session                            not fundable

  Enrolment rates

Abridged — the file continues.

The outcomeWhat a good result looks like

One entry per claim line, in the pack's order: the disposition, and on an overstatement the rule that was misapplied, the provision the pack itself prints for it, the record that proves it, and the funded days overstated to two decimal places. All five together, scored as one cell -- that is attendance_claim_accuracy_pct.

And when it cannot

When the pack does not settle a claim line -- a register row under an attendance code the pack's own table does not carry, or a difference with no attendance certification on file -- the honest output is INSUFFICIENT_EVIDENCE naming what is missing, not a finding. 36 of the 288 claim lines in this corpus are exactly that, and how often an arm recognises them is published on its own denominator.

Where it fitsWhat did work

Every line below is a measured result from this kit's own runs, with the figure that supports it. The headline above is not softened by any of them.

  • Your register is a clean table and your rules are printed beside it — the free floor (evals/baseline.py, claim-gate)
    It takes every rule the printed columns prove, cites the provision correctly and attaches the record, for $0.00 and under a second.
  • Half your answers are in an email thread, a board minute or a note — the paid arm
    It is the only thing here that reaches the district-file channel at all -- every free floor scores 0.00 pct there by construction.
  • You need the number, not the verdict — read overstated_days_accuracy_pct, not the discriminator
    A claim amendment is built on a figure. The verdict is the easy half.
  • You are deciding whether to buy anything at all — run both and read the channel split
    The two columns answer different questions and the estate's own experience is that the free floor wins more often than anyone expects.

At a glanceHow the whole thing runs

77%attendance claim accuracy pct
221,174 msp50, end to end
$82.10per 1,000 funding claim packs · Google Gemini 3 Flash

Run once, for real, on 2026-08-26. Every figure on these pages was captured from that run — nothing is written from intent.

14 steps, grouped by the question that sends you to them rather than by build order. Each tile carries the one figure that step is about, and opens the page behind it.

Should you use this?What you bring, where it stops, and when not to use it

Before you commit an afternoon to this, these are the answers that decide it. Each one is rendered from the record it lives in — and links the page that holds it in full.

What do I have to bring?Drop your own reconciliation packs into data/corpus/ in the layout data/SOURCES.md describes and everything except the answer key works immediately: the parser, the apportionment calculator, all three free floors and the UI. ⚠︎ WHAT DOES NOT TRANSFER. Corpus lens →
When is this the wrong choice?Avoid: Paying a model for the 102 overstatements the register's printed columns already prove -- claim-gate takes every one of them for $0.00. That is the case against the best-fitting scenario (“Your register is a clean table and your rules are printed beside it”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A pack layout that is not this one. src/pack.py is seven regular expressions written for these headings, this fixed-width attendance register and these key/value blocks; against a real SIS apportionment export -- a CSV, a state submission file, a report PDF -- it parses nothing and returns empty tables rather than guessing. 7 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Whether a reconciliation this scorer calls wrong would be called wrong by a state auditor. Scoring stops at the key: a defensible-but-different reading -- a different provision that also covers the rule, a record that also proves it -- scores as a miss. 10 items this kit says it could not check. Eval lens →
Can I run this on a model I control?Yes — any OpenAI-compatible endpoint, including one on your own hardware. The shipped adapter takes its host from BASE_URL and its model from MODEL, so nothing in src/ changes. The published figures come from 1 model on the fast tier, one provider, one key. Prompt lens →
And if it fits — what do I stand up?4 artifacts with a stated home and a stated egress, and 3 decisions each with what you provision past its ceiling — plus what was not measured. That is the next page, not this one. step 14 — Run it in your environment →

Not asked of this kit — 2 questions: clone (a fresh clone of this kit runs with nothing fetched); judge (nothing here is graded by a model).

Last verified 2026-08-26 — r002-attendance-funding. Every figure on these pages was captured from that run.

Run itHow this reaches your data

Every result on this page was produced by pure code over checked-in files, with no API key — which is why you can read the numbers before anyone spends anything.

Run this on your own data

  • The pipeline, its eval harness and the runs behind every numberdeployed inside your environment, on your own model endpoints, against your own documents.
  • The corpus above is the shape, not the limitit is a folder swap, and there is no database to migrate.

Talk to us →

Checked before this shipped — git clone, then python3 -m src.app -- no install, no key, no network. The corpus, the answer key and every committed run record ship in the repo, and all three free floors are pure Python. python3 -m evals.check_labels proves the key in under a second and python3 -m evals.run --run-id <id> --floor claim-gate reproduces the strongest free floor's whole score for $0.00.

A living map of modern AI — kept current every morning