Home › Use Cases › Front-money account reconciliation
Use caseUC0366
🧪 Use-case kit · runnable

Front-money account reconciliation

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 casino cage holds patron money on account. Two systems record every movement of it: the cage window journal, written at the counter as the cash crosses it, and the accounting ledger extract, posted in batches afterwards. They disagree, and the disagreements are not all the same thing — a figure that differs, a movement one side never got, a movement booked against another patron, a posting keyed twice. Today somebody reads both journals side by side, decides which lines actually moved money by reading the memo printed under them, totals the balance, checks whether anybody has touched the account lately, and checks whether the patron has a dispute open — because a disputed account must not go into the routine adjustment-approval path. Reading two journals line by line against each other, deciding from each memo whether the line moved money, totalling the balance by hand and checking the account notes for a live dispute before the account is routed anywhere.

Audience

A cage auditor reconciling a period's front-money accounts, and the compliance officer who has to show that no disputed balance ever reached the routine adjustment queue. THE ANSWER THIS REPORT GIVES THEM IS A QUALIFIED ONE: the paid arm does not beat the best free code on this corpus at any conventional level of significance, and the case for the call rests on the families a regex cannot reach and on the control, not on the headline. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual patron front-money accounts

The corpus is 56 patron front-money accounts, 0.15 MB (txt 56). It is generated because it has to be. A front-money account is a named patron's financial record — their deposits, their draws, the dates they stood at the cage window, and on several of these files a dispute they raised. There is no public corpus of them and there could not honestly be one. So the material is invented in the shape a cage's own two systems actually print, the licence is this repository's own, and evals/check_labels.py sweeps every file for an email address, a phone number, a national identifier, a card number, a postal address or a personal name and finds none.

The corpus

  • The 56 patron front-money 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 patron front-money accounts. That is the whole change — there is no database to migrate.

One patron front-money account, as the model receives itFMA-0001.txt · 1 of 56
==============================================================================
FRONT-MONEY ACCOUNT RECONCILIATION FILE                    FMA-0001
Property: PRP-4100 - Kestrel Bend Casino Resort (invented)
Patron account: FM-70003   Period: 2026-02-01 to 2026-04-30   Procedure: FMR-2026
==============================================================================

ACCOUNT AS THE CAGE HOLDS IT
  account id                           FM-70003
  account type                      FRONT MONEY   a patron deposit held on account at the cage
  opened                             2024-05-15
  status                                 ACTIVE
  opening balance                       6175.00   at 2026-02-01
  dormancy window                            30   days without a patron-initiated movement
  de-minimis floor                       250.00   balances at or below this are not reviewed
  routine adjustment authority          2500.00   per item
  period start                       2026-02-01
  period end                         2026-04-30

CAGE WINDOW JOURNAL AS THE CAGE POSTS IT
  REF        DATE        TYPE             AMOUNT  WINDOW  STATUS   MEMO
  FMC-1022   2026-02-09  RETURN          1150.00  W-09    POSTED   chips to table 14
  FMC-1009   2026-03-05  RETURN           550.00  W-02    POSTED   chips to table 06
  FMC-1005   2026-03-23  FEE               47.50  W-09    POSTED   cash out at main cage
  FMC-1012   2026-03-28  DRAW            3350.00  W-08    POSTED   front desk referral
  FMC-1014   2026-03-29  FEE               25.00  W-01    POSTED   cash out at main cage
  FMC-1003   2026-04-14  DRAW             275.00  W-03    POSTED   high-limit cage
  FMC-1018   2026-04-28  INTEREST          17.50  W-04    POSTED   prior arrangement

Abridged — the file continues.

The outcomeWhat a good result looks like

One account in, one row out: every break named with what EACH system says about it, the reconciled balance to the cent, a dormancy verdict, and one disposition from a five-rule ladder whose first rule holds a disputed account.

And when it cannot

And what it does when it cannot. On the scored run 56 of 56 replies parsed and none stopped at the output ceiling, so nothing failed to answer — but 12 of 56 accounts came back with at least one of the five graded fields wrong, and on the void family, which is the reading this kit is named after, it was right on 1 of 6.

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 two systems disagree on AMOUNTS and references, and the memos are codes rather than sentences — the free two-extract join, and do not buy a call at all
    It gets the exception set right on 45 of 56 accounts here against the paid arm's 49, and it is $0.00. Every difference decidable from a column — an amount that differs, a reference on one side only, a reference posted twice — is decidable without reading anything.
  • Your breaks hide in a memo — a line voided at the window, a difference that is a stated fee, a movement booked against another patron — the paid call
    This is where the margin actually is. On misposted accounts the paid arm scores 3 of 3 and every free floor scores 0, because the two columns agree to the cent and there is nothing to join on. On the void decoys it scores 5 of 5 against the free floor's 2.
  • What you actually need is the dormancy clock — the free rules floor
    It beats the paid arm on the dormancy reading, 4 of 7 against 2, and on the dormancy field overall 55 of 56 against 48. The TYPE column plus a short attendance regex reaches most of it for nothing.
  • You have to SHOW an auditor that no disputed balance reached the routine adjustment queue — the paid call, or the free rules floor — but NOT the incumbent and NOT a plain join
    This is the clearest result in the kit. The cage's own panel breaches the cap on 3 of 5 disputed accounts and a two-extract join breaches it on 3 of 5, because neither can read a dispute out of a note. The paid arm held all 5, including under 20 adversarial calls.

And where nothing here is good enough:

  • You want one number to put in a business case — neither arm, yet
    The paid arm is 44 of 56 and the best free floor is 38 of 56, paired p = 0.23788. On this corpus that difference is not demonstrated, and a business case built on it is built on noise.

At a glanceHow the whole thing runs

79%all five graded fields right, RECHECKED column
1,447 msp50, end to end
$2.97per 1,000 patron front-money accounts · the fast tier

Run once, for real, on 2026-09-10. 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?Replace data/corpus/*.txt with your own reconciliation files in the same shape and data/gold.jsonl with your own key, one JSON object per line carrying doc_id, exceptions (each with ref, kind and the two labelled spans), closing_balance in cents, dormant, last_patron_activity, dispute_in_force and disposition. ⚠︎ WHAT STOPS BEING TRUE THE MOMENT YOU DO. Corpus lens →
When is this the wrong choice?Avoid: Paying per account for a join you could write in an afternoon. That is the case against the best-fitting scenario (“Your two systems disagree on AMOUNTS and references, and the memos are codes rather than sentences”). 5 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A journal whose columns are not the seven this kit prints. src/ledger.py splits on runs of two or more spaces; a CSV, a fixed-offset extract or a memo containing a double space would need a different parser, and every arm reads through that one module. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Whether the margin over the best free floor is real. Paired p = 0.23788 on 56 accounts; six accounts of lead is not demonstrated and this kit does not claim it. 8 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?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-10 — r001-front-money. 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 checkout with no key configured renders the whole board, all three free floors and every committed run, and scores the free arms offline: python3 -m evals.run --run-id b000-front-money-rules --floor rules completed all 56 accounts with no network. evals/check_labels.py also runs offline and reported 0 problems over 1,686 checks. What a checkout cannot do without a key is buy a call — the Ask the model button is disabled and says so rather than failing at the HTTP layer.

A living map of modern AI — kept current every morning