Home › Use Cases › Audit one deal jacket for the documents the deal type requires
Use caseUC0283
🧪 Use-case kit · runnable

Audit one deal jacket for the documents the deal type requires

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 vehicle sale leaves behind a deal jacket: the file of documents that has to be complete before anybody funds, books or audits the deal. Which documents belong in it is not a fixed list — it depends on the deal. A cash sale with no trade owes seven of the store's eighteen checklist rows; a financed sale with a trade, an open payoff, two aftermarket products, a co-buyer, an out-of-state delivery, a lender declination and reportable cash owes fourteen. Somebody has to work out which set applies, check each one is there, signed and dated — and notice when the file's own F&I notes record something the deal summary never declared and no document covers. Reading an eighteen-row checklist against a deal summary by eye, one jacket at a time, and hoping somebody notices the sentence in the notes that owes a document nobody put on the checklist. It does not replace the compliance manager, the document itself, the funding decision, or any judgement about whether a disclosure in the file is adequate.

Audience

A dealer-group F&I compliance ops team working a daily deal-file audit queue, and the compliance manager who resolves what it flags. The decision this report is for is narrower than it looks: not 'should we buy a model', but 'is the reading of a free-text F&I note worth paying for when a parser already handles every clerical check'. 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 64 deal jackets, 0.16 MB (txt 64). It is generated because it has to be. A real deal jacket is a customer's credit application, identity documents, signed contracts and a vehicle identification number — it is among the most sensitive files a retail business holds, and no store would publish one. Generating it also buys the thing that matters more: the answer key is DERIVED from the same structure the text is rendered from, so the key cannot disagree with the page a reader is looking at.

The corpus

  • The 64 deal jacketsgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromNowhere — every one of the 64 jackets and the whole answer key are generated in-process from seed 20260903 by tools/build_corpus.py, and re-running it rebuilds all of them byte-identically. Verified under four PYTHONHASHSEEDs (0, 7, 12345, 99): 66 files compared, 0 mismatches.

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 64
DEAL JACKET -- DOCUMENT COMPLETENESS AUDIT PACK
Jacket id: DJ-0001
Store: Ridgeway Motors
Deal number: D-26-43857    Stock number: ST-5310
Vehicle: 2024 Tulla Coupe GT (vehicle identification number on file, not reproduced in this pack)
Sale date: 16-Jun-2026
Jacket format: dms-export (deal management system export; filing states and signature blocks are system fields)
Checklist: DJCL-2026 rev 3
Tabs in jacket: 4    Tabs in this pack: 4

DEAL SUMMARY (system fields, as written by the F&I office)
  Deal type: lease
  Trade-in: yes, payoff still open with the lienholder
  Products on the deal: vehicle service contract
  Cash taken from the buyer: $400.00
  Co-buyer: none
  Delivery and registration: in this state
  Credit: no lender declined the buyer
  Owed to the customer: nothing

FILING LIST -- every document DJC-2026 requires of THIS deal, and its filing state

--- Tab 1 of 4: Sale and disclosure ---
D01 | Buyer's Order | FILED | buyer signature: M. Alvarez | dealer signature: Z. Marchetti | document date: 2026-06-16
D02 | Odometer Disclosure Statement | FILED | buyer signature: M. Alvarez | dealer signature: Z. Marchetti | document date: 2026-06-16
D03 | Privacy Notice | FILED | buyer signature: M. Alvarez
D04 | Arbitration Agreement | FILED | buyer signature: M. Alvarez | document date: 2026-06-16

--- Tab 2 of 4: Credit and finance ---
D05 | Credit Application | FILED | buyer signature: M. Alvarez | document date: 2026-06-16
D07 | Lease Agreement | FILED | buyer signature: M. Alvarez | dealer signature: Z. Marchetti | document date: 2026-06-16

--- Tab 3 of 4: Title, identity and trade ---
D10 | Identity Verification Record | FILED | dealer signature: [illegible signature] | document date: 2026-06-16

Abridged — the file continues.

The outcomeWhat a good result looks like

One jacket in, five graded answers out: how many gaps the file carries, which document the first one is on in jacket order, the file's single finding under DJC-2026's published precedence, the disposition of the FILE, and one line copied verbatim out of the jacket that shows it.

And when it cannot

And what it does when it cannot. On the scored run it read an ordinary F&I note as owing a document on 4 of the 24 complete jackets — three times on the appraiser road-tested the trade before the number was set and once on buyer asked for the owner's manual to be posted out — and held four files that the key says were finished. ⚠︎ THOSE FOUR ARE ALSO THIS CORPUS'S OWN DEFECT: both sentences contradict the deal summary printed beside them, and an auditor would very likely side with the arm. See Data.breaks_on and data/SOURCES.md. It also counted three gaps where the key says two on one jacket, and named the wrong finding on one absence.

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 want the clerical checks and nothing else — is each required document there, signed and dated — the free rules floor alone — evals/baseline.py
    58 of 64 jackets fully correct for $0.00, and it is exact on every absent document, blank signature, blank date and missing tab in all four layouts. There is nothing for a call to buy on that half of the job.
  • You need the file's own notes read — the document nobody put on the checklist — the paid call
    9 of 9 undeclared documents named against the floor's 4 of 9, and 0 files forwarded that should be held against the floor's 2. That is the only place the two arms separate.
  • You care more about rework than about a missed document — the free rules floor
    the paid arm sends back 4 complete files against the floor's 1. ⚠︎ Read that beside Data.breaks_on: all four are on two generator sentences that contradict the deal summary, so the real rework rate is unknown and is probably lower.

And where nothing here is good enough:

  • You want a number before anybody has read anything — neither — read the null floor first
    37.5 pct is what answering none to every jacket scores, and it forwards all 15 files that must be held. Any accuracy figure on this kit has to be read against that.

At a glanceHow the whole thing runs

91%jacket all correct pct
28,313 msp50, end to end
$19.07per 1,000 deal jackets · Gemini 3 Flash

Run once, for real, on 2026-09-03. 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/policy.json's documents with your own checklist rows and their conditions, src/policy.py::required_ids with your own derivation, and data/corpus/*.txt plus data/gold.jsonl with your own jackets and key. ⚠︎ WHAT STOPS BEING TRUE THE MOMENT YOU DO. Corpus lens →
When is this the wrong choice?Avoid: Paying for lookup. The notations are a closed list the standard publishes and the deal summary is eight labelled system fields; a parser is exactly the right tool and the paid arm has no win against it anywhere on this half. That is the case against the best-fitting scenario (“You want the clerical checks and nothing else — is each required document there, signed and dated”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A scanned or photographed jacket. Every arm here rests on a transcribed or exported text file with a closed set of notations; an OCR error in a filing state is a different problem and this kit measures nothing about it. 7 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Whether the labelled line is the line an auditor would have quoted. The key names ONE per jacket and the scorer has no partial credit; an auditor who quoted a neighbouring true line would score zero. 7 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?8 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-03 — r001-dealjacket-complete. 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 on 127.0.0.1:9283 and scores every graded cell offline: the corpus rebuild from seed 20260903, the filler check, the independent label check, all three free floors and the stub arm are pure Python and need no network. The committed scored run and the attack replay straight off their result files.

A living map of modern AI — kept current every morning