Home › Use Cases › Billing deck vs division-of-interest reconciliation
Use caseUC0186
🧪 Use-case kit · runnable

Billing deck vs division-of-interest 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

An operator bills a well's costs to its partners through a BILLING DECK -- one working-interest decimal per owner -- and the deck has to agree with what the title file supports. The dangerous deck is therefore never one that fails to add up. Every deck in this corpus sums to exactly 1.000000, to the last digit, because the operator's system will not bill one that does not balance -- so a decimal that is wrong on one owner is wrong in the opposite direction on another, and the check everybody runs first passes on both. What is left is a title question wearing a spreadsheet's clothes: a relinquished non-consent share that reverted when the penalty was recouped, an assignment whose effective date is printed nowhere but a letter, a well that paid out and an after-payout column nobody picked up, a revenue decimal billed as a cost-bearing one, and an owner on the deck with no schedule row and no instrument at all -- which no comparison of two tables can see, because there is nothing to compare. Somebody reading a well's whole title file against the deck the accounting system is billing on: checking that every deck owner has a schedule row at all, that the decimal is the working interest rather than the net revenue interest, that a payout has been picked up, that every recorded conveyance which binds the month has been applied and every one that does not has NOT, that a relinquished non-consent share has reverted when the recoupment statement says it did, and then deciding, per owner, whether the correction reaches back into prior accounting months or is carried forward.

Audience

Joint-interest accounting and land staff who check a well's billing deck against the division of interest before the joint account statements go out, and the people who build tooling for them. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual deck review pack (one SYNTHETIC accounting month on one well -- every operator, owner, decimal and instrument INVENTED)

The corpus is 36 deck review pack (one SYNTHETIC accounting month on one well -- every operator, owner, decimal and instrument INVENTED), 0.33 MB (txt 36). A billing deck is the one table in upstream accounting where a six-decimal number and a title chain meet, and both halves are the most commercially sensitive records their holders have -- so there is no public corpus and there never will be. Generating it was not a shortcut, it was the only option, and it bought something a real file could not: every deck FOOTS to exactly 1.000000 including every wrong one, which is what makes the first check anybody runs useless here on purpose. It also let the trap slice be built deliberately: 36 positions where the deck disagrees with the record and the DECK IS RIGHT, which is the failure that gets a deck audit switched off.

The corpus

  • The 36 deck review pack (one SYNTHETIC accounting month on one well -- every operator, owner, decimal and instrument INVENTED)generated 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 deck review pack (one SYNTHETIC accounting month on one well -- every operator, owner, decimal and instrument INVENTED). That is the whole change — there is no database to migrate.

One deck review pack (one SYNTHETIC accounting month on one well -- every operator, owner, decimal and instrument INVENTED), as the model receives itIDK-0001.txt · 1 of 36
Interest Deck Review
------------------------------------------------------------------
  Pack                       IDK-0001
  Operator                   Cardinal Basin Operating LLC
  Well                       WELL-2210 (Elk Draw)
  API number                 42-301-40000
  Accounting month           2026-01
  Joint account charge       915,159.53
  Positions on deck          6
  Deck decimals total        1.000000
  Adjustment window months   24
  De-minimis adjustment      250.00
  Payout status              not reached

Joint Operating Terms
------------------------------------------------------------------
  Billing rules
  BR-1.1    Each party to this agreement bears the costs of operations in the proportion its working interest bears to the whole, and in no other proportion.
  BR-1.2    The billing deck is the operator's record of those proportions. It must agree with the division of interest, decimal for decimal, at the accounting month billed.
  BR-2.1    A recorded assignment binds the operator for billing purposes from the effective date the instrument or the parties' writing states, not from the date it was recorded and not from the date it reached the land department.
  BR-2.2    Upon payout of a well the after-payout interests shown in the division of interest govern all costs billed for accounting months beginning after the payout date.
  BR-3.1    A non-consenting party's relinquished share reverts to it, and ceases to be borne by the consenting parties, once the consenting parties have recouped the multiple this agreement provides. Recoupment is proved by the recoupment statement.
  BR-4.1    Net revenue interest is a revenue decimal. It is never a cost-bearing decimal and may not be used as one.

Abridged — the file continues.

The outcomeWhat a good result looks like

A deck review: one entry per owner position in the deck's own order, each carrying DECK_UNSUPPORTED with one of six named grounds, DECK_SUPPORTED or EVIDENCE_INCOMPLETE, the six-place decimal the title file supports, the money that decimal is worth against this month's joint account charge with its direction, and -- scored separately -- whether the correction reaches back into prior accounting months. Beside every position, what the strongest free code would have written.

And when it cannot

The arm made 35 scored misses on 216 positions and they are concentrated in two classes, not spread. 83.33 pct of the relinquished non-consent positions came back DECK_SUPPORTED -- the arm read the recoupment letter correctly and then applied the reversion in the opposite direction to the key, which is a defect in the question as much as the answer and is published unfixed. And on the OWNER_NOT_IN_TITLE and NRI_USED_AS_WI classes it flags the pair and names the wrong ground on the position that merely ABSORBED the error -- an arithmetic join free code does 100 pct of the time. The free floor beats the paid arm on seven columns including both money columns and the owner with no title row at all. See Eval.taxonomy and Eval.could_not_verify.

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 division of interest is clean and current, and the deck is loaded from it — the free floor (evals/baseline.py, title-gate)
    It takes 100.00 pct of the grounds the printed tables prove, names the ground and cites the clause correctly every time, gets the supported decimal and the money exact every time, and applies both arithmetic limbs of the adjustment terms -- for $0.00 and under a second.
  • Half your title file lives in letters -- assignments with no effective date on the instrument, recoupment confirmed by correspondence — the paid arm
    Two of the three floors -- schedule-diff and title-gate -- score 0.00 pct on those 24 positions, and the arm reaches 58.33 pct; all three floors are correspondence-blind by construction. title-sweep's 100.00 pct on that column is a disposition and not a letter: the column counts calling a position unsupported, and title-sweep queries everything it cannot settle, at 12 sound positions falsely queried and 36.09 pct noise for 72.22 pct overall. The arm also withheld 100.00 pct of the prior-period calls that ONLY a letter bars, against the floor's 25.00 pct.
  • You need the decimal and the dollar figure, not the verdict — the free floor, and read the money columns rather than the discriminator
    A correction memo is built on a six-place decimal and a figure to the cent. title-gate gets both exact on 100.00 pct of the positions it answers; the arm gets 94.74 pct and its direction wrong on 5.
  • Your last deck audit got switched off because it queried everything — read the noise column, not the accuracy one
    title-sweep catches 100.00 pct of everything and puts 36.09 pct noise on the desk and flags 33.33 pct of the differences the file has already answered. The arm and title-gate both sit at 5.33 pct noise and 0.00 pct on answered differences.
  • You are deciding whether to buy anything at all — run all three floors and read the two headline columns side by side
    The gap this kit is selling is 4.17 points on question one and 4.16 on question two, and the floor wins seven columns outright. Everything needed to reproduce that comparison is in the repo and costs $0.00.

At a glanceHow the whole thing runs

88%deck review accuracy pct
141,767 msp50, end to end
$55.47per 1,000 deck review packs · Google Gemini 3 Flash

Run once, for real, on 2026-08-27. 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?Drop your own deck packs into data/corpus/ in the layout data/SOURCES.md describes and everything except the answer key works immediately: the parser, the deck recomputation, all three free floors, the adjustment terms and the UI. The boundary is parse(). Corpus lens →
When is this the wrong choice?Avoid: Paying for the part a join already does. That is the case against the best-fitting scenario (“Your division of interest is clean and current, and the deck is loaded from it”). 5 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?A deck position whose owner code appears on no schedule row and on no instrument: DECK_UNSUPPORTED with the whole decimal unsupported. There is no default and no fuzzy name match -- an owner code that is merely SPELT differently is not modelled. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?Whether a keyword floor over the correspondence would close the casefile gap. It would close most of it and was deliberately not built: a regular expression matching "is effective for billing as of" measures THIS GENERATOR'S SENTENCES rather than the method. 8 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 (src/adapters/__init__.py -- raw HTTP, no vendor SDK; the runtime provider is configured in .env and is not named on this page); 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?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-08-27 — r001-interest-deck. 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 — git clone, then python3 -m src.app -- no install, no key, no network. The corpus, the answer key and every committed run record ship in the repo, and all three free floors are pure Python. python3 -m evals.check_labels proves the key in under a second, --self-test red-proves the gate on eight seeded defects, and python3 -m evals.run --run-id <id> --floor title-gate reproduces the strongest free floor's whole score, on both questions, for $0.00.

A living map of modern AI — kept current every morning