Home › Use Cases › Name every document an aid file still lacks, or route the student to a named counselor
Use caseUC0477
🧪 Use-case kit · runnable

Name every document an aid file still lacks, or route the student to a named counselor

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 student writes to the financial aid office about their own aid file. Most messages ask what is still missing - and the answer is in the dated log, not in the last notice the office sent or in what the student says they uploaded. A few are not paperwork at all: a parent lost their job, or the student wants to know whether they still qualify. Today a person reads every message, opens the file and reads the log. The first pass over an aid office's document inbox: it names exactly the requested documents still outstanding at the minute the student wrote, and it routes every hardship disclosure and every eligibility question to a named counselor instead of answering it.

Audience

Anyone putting an automated desk over an open case file, where the dangerous answer is a document list sent to someone who needed a person, or an eligibility position the desk is not allowed to take. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual aid files

The corpus is 64 aid files, 0.15 MB (md 64). The smallest corpus that makes the interesting mistake unavoidable. Across the 40 procedural messages the requested documents sit behind deliberate states: received only after the message 8, returned and not resent 7, only the other person's copy 6, only another tax year's copy 10, returned then resent 13, returned only after the message 9, withdrawn by the office 10. The latest notice before the message is stale on 34 of 40, and 19 carry the student's own claim to have sent something. A reader that copies the notice or believes the student gets most of them wrong.

The corpus

  • The 64 aid filesgenerated 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 aid files. That is the whole change — there is no database to migrate.

One aid file, as the model receives itfiles/AF-2627-0001.md · 1 of 64
# Aid file -- AF-2627-0001

Synthetic record. Every name, date and figure below was generated by tools/build_corpus.py from a fixed seed.

Aid year: 2026-27
Student: S-47919
File opened: 2026-03-29T15:00Z
Counselor of record (eligibility and award questions): H. Adeyemi
Special circumstances counselor (hardship reviews): A. Ferreira

## Documents requested

- D1 -- signed statement of non-filing (student, tax year 2024)
- D2 -- public benefits letter (parent, tax year 2024)
- D3 -- verification worksheet (student)
- D4 -- tax return transcript (student, tax year 2024)
- D5 -- unemployment benefits statement (student, tax year 2024)
- D6 -- unemployment benefits statement (parent, tax year 2024)

## Contact and document log

### L01
recorded: 2026-03-29T15:00Z
by: L. Brennan, document desk
note: Missing-document notice sent to the student naming: D1 signed statement of non-filing (student, 2024); D2 public benefits letter (parent, 2024); D3 verification worksheet (student); D4 tax return transcript (student, 2024); D5 unemployment benefits statement (student, 2024); D6 unemployment benefits statement (parent, 2024).

### L02
recorded: 2026-04-02T08:40Z
by: L. Brennan, document desk
note: Reminder call placed to the student; no answer, voicemail left.

### L03
recorded: 2026-04-06T02:40Z
by: L. Brennan, document desk
note: Checklist reminder emailed; items listed as open: D1 signed statement of non-filing (student, 2024); D2 public benefits letter (parent, 2024); D3 verification worksheet (student); D4 tax return transcript (student, 2024); D5 unemployment benefits statement (student, 2024); D6 unemployment benefits statement (parent, 2024).

### L04
recorded: 2026-04-15T06:19Z
by: J. Pruitt, document desk

Abridged — the file continues.

The outcomeWhat a good result looks like

A procedural message answered with the exact list of documents the log still shows outstanding, and every hardship disclosure or eligibility question sent to the counselor the file names for it.

And when it cannot

It gets the list wrong - 11 of 40 procedural messages, 4 of them leaving an outstanding document off so the student believes the file is further along than it is - or, once in 64, it answers an eligibility question with a document list.

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.

  • An automated document desk over case files, where some messages must reach a named person rather than be answered carefully — This shape, as it stands.
    The barred classes are a ROUTE with a name on it, not a topic handled delicately - which is why they are gradable in code, and why the name was right on 23 of 24.
  • You need the exact outstanding list and nothing else to be right — This shape with a person checking lists before they go out, on this evidence.
    27 of 40 lists exact clears free code by a wide margin (p = 1.943e-05), and 4 of the misses leave an open document off.
  • Your office's messages and logs are written by a template you control — Free code first - measure a regex written against your own templates.
    On this corpus a regex tuned to the generator's phrasing got 64 of 64 and the kit loses to it (p = 0.0001221). Where the wording is yours to fix, the reading may be too.
  • Aid files too large to send whole — This shape plus a retrieval step, and measure the retrieval separately.
    Everything here assumes the file fits the prompt; the whole 2,415-byte median file goes in and the decoys are resolvable because nothing was dropped.

At a glanceHow the whole thing runs

78%item all correct pct
1,269 msp50, end to end
$20.21per 1,000 student messages · Claude Fable 5

Run once, for real, on 2026-09-16. 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?Point data/files at your own aid files and rewrite src/aidfile.py::parse to return the two counselor names, the requested documents and the dated log entries. Nothing measured here transfers to your corpus. Corpus lens →
When is this the wrong choice?Avoid: If what must be escalated is a matter of degree rather than of kind, this shape gives you a precision you have not got. There is no confidence here to tune. That is the case against the best-fitting scenario (“An automated document desk over case files, where some messages must reach a named person rather than be answered carefully”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A log entry with no recorded time. The whole contract turns on 'the latest entry at or before the minute the student wrote'; an undated entry can be neither admitted nor excluded, and this kit has no third answer for it. 5 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Whether a real office's free code gets closer. The best free arm shipped reached 18 of 64; a regex written against this corpus's own templates reached 64, and the kit loses to it (p = 0.0001221). 6 items this kit says it could not check. Eval lens →
Can I run this on a model I control?The shipped adapter is OpenAI-compatible endpoint; the Prompt lens states what swapping it costs. The published figures come from 4 models on the fast tier and free code - the bar and free code - floor of record and the constant. Prompt lens →
And if it fits — what do I stand up?5 artifacts with a stated home and a stated egress, and 5 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-09-16 — r001-missing-docs-outreach - 64 student messages, 64 model calls, the fast tier, reasoning disabled. 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 — A clean checkout with no key configured rebuilt the corpus byte-identically, re-derived all 64 labels, scored the five free arms at $0.00, proved the reply stop and printed the paired tests - 0.77 seconds for all of it, measured - and the board rendered the whole scored run from the committed record with the one live control disabled.

A living map of modern AI — kept current every morning