Home › Use Cases › Rate markup and fee policy review
Use caseUC0375
🧪 Use-case kit · runnable

Rate markup and fee policy review

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 finance and insurance office signs a deal jacket: a retail installment contract, a menu of products the customer accepted, and a list of fees. The lender's policy sets a ceiling on each of those — how far above its approved buy rate the contract rate may be sold, what a documentation fee may reach in that state, what a menu product may be priced at, which products are on the contracted menu at all, and which charges are pass-throughs collected at cost. Checking a jacket today means a reviewer reading it beside the policy, line by line, deciding what each charge IS before they can decide whether it is inside a cap. Most jackets are clean, the exceptions are small and scattered, and the reading is the slow part. Reading a signed deal jacket beside the lender's rate-cap and fee policy and deciding, line by line, what each charge is and whether it sits inside the ceiling that charge earns.

Audience

The person who has to decide whether to buy a reading. A compliance or dealer-services reviewer queuing exceptions, and the engineer costing the pipeline that feeds them. The answer this board gives is unusual for this estate and is stated plainly in both directions: the paid call wins on one reading and does not win on the other. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual deal jackets

The corpus is 60 deal jackets, 0.09 MB (txt 60). SYNTHETIC ON PURPOSE, AND THAT IS THE FIRST THING TO SAY ABOUT A KIT THAT SITS NEXT TO CONSUMER-PROTECTION LAW. Nothing here is scraped, purchased, leaked or redacted from anything real. Every dealership, lender program, product brand, state code and deal is invented. There is no person in the corpus and no attribute of a person — no name, address, income, credit score or age — so there is nothing in it for a reader to reason from, which is what the adversarial probe's fair-lending bait measures. The 60 jackets exercise the four things a rate-cap and fee policy actually turns on: a rate participation against a cap that moves with the contract term, a product priced above its menu ceiling, a product the program's menu does not carry at all, and the same fee class charged twice under two different names.

The corpus

  • The 60 deal jacketsgenerated 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 deal jackets. That is the whole change — there is no database to migrate.

One deal jacket, as the model receives itDJ-0001.txt · 1 of 60
DEAL JACKET  DJ-0001
==========================================================================
Dealer ................ Bluestem Auto Sales (dealer id D-701)
State ................. ST-B
Lender program ........ CREDIT-UNION-B
Contract date ......... 2026-01-19
Vehicle ............... 2023 wagon, stock 1-1985
Amount financed ....... $48,813.00
Term .................. 75 months
Title ................. paper certificate, mailed

APPROVAL
  Lender approved buy rate ............ 13.740%
  Contract rate signed by customer .... 15.490%

ITEMISED CHARGES AND PRODUCTS
  L1   Rate participation, dealer .................................... 175 bps over buy rate
       Contract rate signed above the lender's approved buy rate.
  L2   Tire and wheel protection ..................................... $820.00
       Replaces a rim or a tire ruined by a pothole or debris, mounting included.
  L3   Key replacement coverage ...................................... $275.00
       Replaces a lost or damaged key fob, programming included. Part of the bundled package above; shown separately on the menu.
  L4   Documentation fee ............................................. $55.36
       Charged for preparation of the retail installment contract.
  L5   Registration and plate fee .................................... $125.00
       Collected for the state at cost, no dealer participation.

DEALER NOTES
  Customer declined the maintenance plan at the first pencil.

This document is synthetic. It was generated for an evaluation corpus and describes
no real transaction, lender, dealership or person.

The outcomeWhat a good result looks like

Every itemised line of the jacket carries a verdict, the policy clause that governs it, the ceiling that clause sets and the amount above it, with the line quoted verbatim from the deal document — and the jacket carries an exception queue and a total at issue. A reviewer opens the queue instead of the jacket.

And when it cannot

When a reading is wrong, the board says so rather than repairing it. One reading of 610 on this run disagreed with the answer key — a title courier line read as a pass-through where the key says retail — and the misread band names it above the tables that rest on it. On that line the verdict did not move, because RC-7 caps a courier charge at zero on an electronic title either way; on a line where it would move, the wrong verdict is what gets published.

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.

  • Every charge in your jackets is printed under the lender's own form wording — the free ledger floor
    an exact lookup table is already perfect on those lines and costs nothing
  • Products are sold under dealer brand names that change every quarter — the paid reading
    on the 74 lines carrying an invented product name the call took 74 of 74 and the strongest free floor took 59 — that gap is the entire measured margin
  • You only need to know whether a charge was a pass-through or a retail sale — the free keyword floor
    charge_status is a phrase lookup; the floor matches the paid call at 303 against 304, p = 1.000000

And where nothing here is good enough:

  • You need the arithmetic — caps, schedules, amounts above a ceiling — neither; it is pure code either way
    src/engine.py does every cap comparison in integer cents and integer basis points, for every arm equally. No arm is better at arithmetic than another

At a glanceHow the whole thing runs

99.7%line all correct pct
1,499 msp50, end to end
$0.45per 1,000 deal jackets · GPT-5.6 Luna

Run once, for real, on 2026-09-11. 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?Three edits and no code change for the policy half: put your ceilings in data/policy.json, your contracted menus in data/menu.json, and your jackets in data/corpus/ as text. What does NOT travel is the measured margin. Corpus lens →
When is this the wrong choice?Avoid: Paying per jacket for a reading a regular expression finishes. That is the case against the best-fitting scenario (“Every charge in your jackets is printed under the lender's own form wording”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A jacket whose ITEMISED CHARGES block is not laid out the way tools/build_corpus.py writes it — src/packet.py raises rather than guessing, because a missing term would silently pick RC-1's widest cap and publish a clean verdict on a line nobody measured. 4 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?WHETHER THE MARGIN SURVIVES A REAL DEAL JACKET. Every product in this corpus is described by a sentence that says what the product does, drawn from a fixed pool of four per class. 5 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 (THE PUBLISHED RUN), 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 4 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-11 — r001-rate-markup-audit. 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: the 60 jackets, RC-2026, the contracted menus, the answer key, the recorded paid run, all three free floors and the adversarial probe all come off disk. Re-scoring the recorded run and re-running every free floor costs $0.00 and needs no network, because every grader is pure code.

A living map of modern AI — kept current every morning