Home › Use Cases › Per-credit-line refund disposition and payee, staged for a bursar to approve.
Use caseUC0508
🧪 Use-case kit · runnable

Per-credit-line refund disposition and payee, staged for a bursar to approve.

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 refund run is staged on a student account and somebody has to say, line by line, what may be done with each posted credit and where a refund on it would go. The account is a charges table, a credits table where every credit carries a free-text posting description, and a dated note log typed in prose by whoever handled it - 8 to 20 entries, some declined, some hedged, some corrected later, some superseded, some recorded after the run moment, some about a different credit reference altogether. Two facts have to come out of it per open line, each with the note it came from, and the honest answer is often that no admitted note states one. The first pass over a student account at a refund run: reading the note log, deciding which note states each cell for each open credit line, and writing the disposition and the payee with their source note ids - or leaving a cell unstated when no admitted note says.

Audience

Anyone putting an automated reader over a money worksheet a person has to approve, where the dangerous answer is not a wrong value but a value on a line where the record states nothing. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual student accounts

The corpus is 64 student accounts, 0.28 MB (md 64). The smallest corpus that makes the interesting mistake unavoidable. The open-adjustment mirror is the whole design: 34 lines carry an admitted open adjustment and 26 carry one a LATER admitted note records worked through, and the two are written from the same sentence with the same stated disposition - separated only by when the worked-through note was recorded. An arm that answers hold to both wins one and loses the other, which is why the bar sits at 170 of 257 rather than near the ceiling. Every value is also written two ways sharing no keyword, 273 notes carry a lead-in naming somebody who is not the subject, and 5 accounts admit nothing at all.

The corpus

  • The 64 student accountsgenerated 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 student accounts. That is the whole change — there is no database to migrate.

One student account, as the model receives itaccounts/AR-2609-0001.md · 1 of 64
# Student account -- AR-2609-0001

Synthetic record. Every reference, name, date, amount and note below was generated by tools/build_corpus.py from a fixed seed. Nothing here is a real student, a real account, a real payer, a real department or a real institution.

Account reference: AR-2609-0001
Term: 2026 spring term
Account opened: 2026-02-16T13:00Z
Refund run staged: 2026-03-12T02:35Z
Earlier refund run on this account: 2026-01-13
Bursar named for this run: C. Oyelaran
Countersignature threshold: USD 2,500.00

The countersignature threshold above is this institution's own current practice, set by the operator of this pack. Every figure, gate and keeping rule on this record is the institution's own; nothing here is drawn from any rule outside it, and no deadline, cut-off or keeping period is stated anywhere on it.

## Posted charges

| item | amount (USD) |
|---|---|
| General fee, 2026 spring term | 8,747.66 |
| Residence charge, 2026 spring term | 7,190.84 |
| Course materials charge, 2026 spring term | 2,277.20 |
| Late registration charge, 2026 spring term | 7,297.54 |

## Posted credits

| credit | posted | amount (USD) | posting description | status |
|---|---|---|---|---|
| CR-01 | 2026-02-14 | 3,326.09 | SPONSOR BILLING - EXTERNAL BODY | open |
| CR-02 | 2026-01-03 | 2,026.09 | RESIDENCE LIFE DEPOSIT | closed at an earlier run |
| CR-03 | 2026-01-23 | 276.83 | DEPARTMENTAL AWARD POSTING | open |
| CR-04 | 2026-02-04 | 2,146.61 | ONLINE PMT - STUDENT PORTAL | open |
| CR-05 | 2026-01-22 | 4,160.02 | AGENCY VOUCHER APPLIED | open |

Only credits marked open are lines on this run's worksheet. The posting description names the fund a credit came through; it does not say where a refund on that line goes.

## What this worksheet is for

Abridged — the file continues.

The outcomeWhat a good result looks like

A staged worksheet: two cells per open credit line, each with the account note it was read from, and unstated with a null source wherever no admitted note states the cell.

And when it cannot

It holds a credit whose adjustment a later admitted note records as worked through - 21 of the 26 lines where that happens - and it fills in 17 of the 164 cells nobody recorded. The second is the failure this pack exists to prevent.

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.

  • You need two cells per open credit line and the note each came from, and a wrong cell is caught by the bursar who approves the worksheet — the free attributed arm (evals/floors.py::arm_attributed)
    It is LEVEL with the paid call on the row of two - 170 against 169, p = 1.0000 - and it costs nothing.
  • The lines that matter are the ones a careful word list already gets wrong — the paid call, and only on that slice
    On the 87 pre-registered headroom lines the paid arm takes 41 against every shipped free arm's 0 (p = 9.1e-13). That is the one thing it decisively buys.
  • The cost of a filled-in cell is higher than the cost of an empty one — free code - the attributed arm, or in the limit the all-unstated constant
    The paid arm fills in 17 of the 164 cells nobody recorded; the bar fills in 1 and the constant 0. Free code is safer here and it is not close.

And where nothing here is good enough:

  • You want a number to put in front of somebody — nothing on this page, on its own
    The headline is null, both cells were tested separately and neither separates, and the safety number is a loss. The publishable finding is the SHAPE: an open adjustment is held correctly and is not lifted when a later note says it was worked through.

At a glanceHow the whole thing runs

66%credit line row pct
1,181 msp50, end to end
$30.80per 1,000 refund worksheet lines · Claude Fable 5

Run once, for real, on 2026-09-18. 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/accounts at your own student-account records and rewrite src/record.py::parse to return the same four things: a header with the run moment, a charges table, a credits table where each credit carries its posting description and its open/closed status, and a list of dated notes each with an id. Nothing measured here transfers to your corpus. Corpus lens →
When is this the wrong choice?Avoid: Do not expect it to reach the 87 lines it already misses: it takes 0 of them, and so does every other free arm this kit ships. That is the case against the best-fitting scenario (“You need two cells per open credit line and the note each came from, and a wrong cell is caught by the bursar who approves the worksheet”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A note with no recorded time. Every reading rule in the prompt is ordered on the note timestamps against the run moment, and an undated note has no place in that order. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Four of this kit's numbers are won or matched outright by free code and are never a result on their own. Both guardrail counts go to an all-unstated constant at 164 of 164 called right and 0 filled in, and both arithmetic figures - the staged release total and the countersignature flag - are pure code recomputed identically for every arm from whatever dispositions it gave. 7 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 1 model on the fast tier. Prompt lens →
And if it fits — what do I stand up?6 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-09-18 — r001-credit-refund - 64 student accounts, 64 billed model calls, the fast tier, reasoning off. 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 renders the whole board, rebuilds all 66 corpus files byte-identically under two PYTHONHASHSEEDs, re-derives all 514 graded cells with 0 disagreements, scores all five free arms and re-derives the paid run's rechecked column from its committed reply cache - all offline, at $0.00. python3 -m src.app --check completes in under a second. The one live control on the board is disabled without a key, and the shooter aborts any request to it.

A living map of modern AI — kept current every morning