Home › Use Cases › Deal entry QC
Use caseUC0368
🧪 Use-case kit · runnable

Deal entry QC

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 rights administrator keys an executed deal memo into the rights system, and somebody has to say — before that record becomes the system of record — whether what was keyed is what was signed. That is nine separate questions on one packet: is the territory set keyed the territory the grant clause licenses, are the licence dates the memo's dates and inside what this class of deal permits, is the window the one the memo names, is the exclusivity what the clause actually establishes, is the fee the memo's figure, are the media the memo's media, is the holdback recorded and for the right number of days, do the instalments sum to the fee, and is the option's exercise date the memo's. Today that is a person with two documents side by side, and the two questions that take longest are the two a form cannot ask. Reading a keyed rights record against the executed memo field by field — a territory set against a grant clause, two dates against a term clause and against the class maximum, a window and a media list against what the memo grants and what the system publishes, a fee against a fee, a holdback against a holdback, a schedule against its own total, an option date against an option date — and writing down, for each of the nine, the numbered line it was checked against and the row that settles it.

Audience

A rights administration or contract-compliance reviewer who sees entries before they are confirmed, and the rights operations lead who has to say afterwards which records went in wrong and against which clause. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual deal entry QC packets awaiting confirmation

The corpus is 66 deal entry QC packets awaiting confirmation, 0.22 MB (json 4 · jsonl 1 · md 2 · txt 66). Because the asymmetry this kit measures is real and had to be built rather than found: seven of the nine fields on a deal memo are stated in a form a column reader can lift — two ISO dates, an amount, a named window, a media list, a count of days, a count of instalments — and two are not. Territory and exclusivity are qualified by the drafting, and they are the two that get mis-keyed. A corpus of real memos would carry that asymmetry and could not be published; a generated one carries it deliberately, argues in BOTH directions on each reading, and can be re-derived byte for byte.

The corpus

  • The 66 deal entry QC packets awaiting confirmationgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromNowhere — all 66 packets and the whole answer key are written by tools/build_corpus.py. (data/territories.json is NOT generated: it is an authored source, read by src/policy.py and printed on every packet.) There is no real licensor, no real licensee, no real programme, no real memo and no real rights record anywhere in this kit, and no personal data either: no named individual beyond a two-initial signature on an invented company's letterhead, no address, no telephone number, no bank detail and no registration number.

Swap this folder for your own material and the kit is pointed at your deal entry QC packets awaiting confirmation. That is the whole change — there is no database to migrate.

One deal entry QC packets awaiting confirmation, as the model receives itDE-0001.txt · 1 of 66
DEAL ENTRY QC PACKET

PACKET HEADER
  Packet number            DE-0001
  Deal reference           DL-41000
  Licensor                 Rundale Programmes
  Licensee                 Pellsworth Channels
  Programme                The Ashfield Line
  Deal class               Single-title
  Memo executed            2026-02-05
  Entry reference          RS-90001
  Entry date               2026-07-24
  Territory coded          German-speaking Europe
  Exclusivity coded        Exclusive
  Keyed by                 T. Nakamura, for Pellsworth Channels

RIGHTS SYSTEM STANDARD EXTRACT (RSQC-2026 r2, in force 2026-07-01 to 2026-12-31 - the Single-title column)
  Maximum licence term             36 months
  Permitted exhibition windows     Pay 1, Free TV, SVOD
  Permitted media                  Linear television, Catch-up, SVOD
  Worldwide grant keyable          No
  Minimum holdback                 30 days
  Maximum instalments              2

TERRITORY REGISTER
   SET    Territory set                    Countries
   T-UK   United Kingdom                   GB
   T-UKI  United Kingdom and Ireland       GB, IE
   T-USA  United States                    US
   T-NAM  North America                    US, CA
   T-DAC  German-speaking Europe           DE, AT, CH
   T-WXU  Worldwide excluding the US       every territory but US
   T-WWD  Worldwide                        every territory

RIGHTS SYSTEM ENTRY
   #  Field                  Value as keyed
   1  Territory set          T-DAC  German-speaking Europe
   2  Licence start          2027-01-01
   3  Licence end            2029-12-31
   4  Exhibition window      Free TV
   5  Exclusivity            Exclusive
   6  Licence fee            $191,500.00
   7  Media                  Linear television, Catch-up, SVOD

Abridged — the file continues.

The outcomeWhat a good result looks like

All nine checks answered on every packet, each carrying the NUMBERED POLICY LINE it was checked against and, where the entry does not agree, one row copied verbatim out of the packet. Rechecked in code from the model's two readings the kit takes 594 of 594 entry checks, 594 of 594 numbered policy lines, 66 of 66 verdicts and the fee variance to the cent on 66 of 66 packets — and 23 of 23 on the checks only prose can settle, where the free column floor takes 0.

And when it cannot

⚠︎ THE PACKET-LEVEL NUMBER IS 48 OF 66 AND IT IS NOT A TYPO. packet_all_correct demands all nine findings, both readings, the verdict, the mismatched set, the fee variance AND a citation on every finding that needs one and NOTHING quoted on the 550 that do not. After the pure-code station has fixed every status, all 18 remaining packet failures are CITATION and nothing else: the arm over-flagged 19 checks the key calls MATCHED, and each over-flag drags a quoted row with it onto a check that admits none.

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 to know WHICH keyed fields disagree with a signed document, with the clause quoted — this kit, rechecked in code
    594 of 594 statuses and 594 of 594 numbered policy lines, with a locatable row on every finding
  • every field on your memo is stated in a keyable form — the free column floor, or no model at all
    it takes 43 of 66 packets for $0.00, and the paid call does not beat it (p = 1.000)
  • the field that gets mis-keyed is one the drafting qualifies — this kit — that is the entire case for it
    23 of 23 on the checks only prose can settle, against the column floor's 0, p = 2.4e-07
  • you want a verdict you can defend against a tampered document — the pure-code station, not the raw reply
    under 12 direct escalations 0 of 12 READINGS moved, 1 raw verdict flipped to ENTRY MATCHES, and the station recovered the key's verdict on 12 of 12

At a glanceHow the whole thing runs

73%packet all correct rechecked pct
2,227 msp50, end to end

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?Put your own packets in data/corpus/ in the same panel layout — the headings src/rules.py keys on are HEADINGS in that module, in one tuple — and supply a data/gold.jsonl with the same fields. ⚠︎ EVERY NUMBER ON THIS PAGE IS A NUMBER ABOUT THIS CORPUS AND NONE OF IT TRANSFERS. Corpus lens →
When is this the wrong choice?Avoid: Reading the packet-level number as the headline — it is 48 of 66 and citation discipline is what holds it down. That is the case against the best-fitting scenario (“you need to know WHICH keyed fields disagree with a signed document, with the clause quoted”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A packet whose panels are not in the layout src/rules.py parses. The reader is a column reader and a memo delivered as prose paragraphs, a PDF or a scan is not this kit's input — there is no capability stage in front of the model. 5 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?THE MODEL WAS RUN ONCE. Every figure here is one run of one model on one corpus. 6 items this kit says it could not check. Eval lens →
Can I run this on a model I control?The shipped adapter is one provider, one key, configured in .env; the Prompt lens states what swapping it costs. The published figures come from 1 model on the fast tier, reasoning disabled (THE PUBLISHED RUN). Prompt lens →
And if it fits — what do I stand up?4 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-10 — r001-deal-entry-qc. 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 and scores all four free floors offline: the generator rebuilds the corpus and the answer key in 0.05 s, evals/check_labels.py re-derives all 594 findings in 0.05 s at 0 problems, and a floor scores every packet in 0.48 s. The only thing a key buys is the 66 calls of the scored run and the 12 of the adversarial one, and both are already committed under results/ and replayed by the board.

A living map of modern AI — kept current every morning