Home › Use Cases › Check one meter exchange record against the exchange procedure's eight checks
Use caseUC0342
🧪 Use-case kit · runnable

Check one meter exchange record against the exchange procedure's eight checks

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 meter is taken out at a service point and another one is put in, and the field record of that swap is what every subsequent bill rests on. Eight things have to hold. The meter that came out has to be the meter of record for the service point. The final read has to continue from the last billed read — unless the register wrapped, which has to be DECLARED, and a declaration on a register that did not wrap is its own error. The installed meter's opening read has to be zero on a new unit and the certificate register on a reconditioned one. The closing span, the multiplier applied to it and the units it comes to have to agree with the billing record. The installed meter's multiplier has to be the removed one's where the transformers stayed in service, and the product of its own CT and PT ratios where they did not. A change of dial count has to be declared. Both reads have to carry the exchange date. And the installed meter has to begin recording on the day the removed one stopped, or days of consumption go unmetered or get counted twice. A meter-data reviewer does that by eye, at cycle close, on every exchange. Joining a field copy to a billing record by eye: two serials, two registers against a last billed read, a span with a rollover in it, a multiplier against a ratio product, two dial counts, three dates, and a field note that may overturn two of them.

Audience

A meter-data reviewer at a utility, working a queue of exchange records at cycle close before any closing read is released to billing. Every number on these pages came from one real run of this code, not from a vendor page.

The inputThe actual meter exchange records

The corpus is 60 meter exchange records, 0.10 MB (json 3 · jsonl 1 · md 2 · txt 60). Because the shape of a meter-exchange failure is not the arithmetic, it is the coding. The CT-set column on the meter panel is what the technician typed; whether new instrument transformers actually went in is described in a field note and nowhere else, and it decides which half of X-6 the installed multiplier is judged against — 8 records are coded against what the note describes, in both directions. The other reading is the date: the initial read is always dated the exchange date, and on 7 records a note says the meter did not come on load until later or was energised early. Those 15 records are the whole measurement; the other 45 are a comparison, a date test and two multiplications. 36 records also carry a date in a note that means nothing — a work order, a planned outage, a shop test, a customer call — so a floor that grabs the first date it sees is wrong on all of them.

The corpus

  • The 60 meter exchange recordsgenerated from a fixed seed, so no real record, person or institution appears in it.
  • Where each came fromNowhere — all 60 exchange records, data/service_points.json and the whole answer key are generated in-process by the file that sits beside them. Every utility, service point, account, meter serial, register value, ratio, multiplier, date and field note is invented, and there is no personal data anywhere in it.

Swap this folder for your own material and the kit is pointed at your meter exchange records. That is the whole change — there is no database to migrate.

One meter exchange record, as the model receives itMX-0001.txt · 1 of 60
METER EXCHANGE RECORD - FIELD SERVICE COPY

RECORD HEADER
  Exchange record    MX-0001
  Utility            Northmere Electric Cooperative
  Service point      SP-400000
  Account            ACCT-6600000
  Service class      Commercial secondary, single-phase
  Exchange date      2026-01-03
  Field technician   M. Hallberg, badge 4452

BILLING RECORD (what the utility already holds for this service point)
  Meter of record         A1-910747
  Last billed read        189497 on 2025-12-11
  Billing cycle           cycle 01, monthly
  Metering configuration  CT ratio 200:5, PT ratio 4:1, billing multiplier 160
  Register format         6 dials, kWh

METER PANEL
   Role       Serial      Condition      Dials  CT ratio  PT ratio  Multiplier  CT set
   Removed    A1-910747   in service     6      200:5     4:1       160         -
   Installed  D5-669199   new            6      200:5     4:1       160         carried

EXCHANGE READS
   #  Reading                        Meter       Register  Date         Time
   1  Final read, removed meter      A1-910747   189841    2026-01-03   08:05
   2  Initial read, installed meter  D5-669199   000000    2026-01-03   08:16

CLOSING SPAN AS RECORDED
  Register span       344
  Multiplier applied  160
  Units to closing    55,040 kWh

FIELD NOTES
  Nothing was touched above the socket. The old current transformers are the ones fitted at construction and they are still in service
  The customer's copy was left with the site contact
  The work order for this exchange was raised on 2025-12-25

SIGN-OFF
  Submitted for the exchange recorded above, at the service point named in the
  header. The customer's copy was left at the premises.
  Raised  M. Hallberg, for Northmere Electric Cooperative   2026-01-03

END OF RECORD

The outcomeWhat a good result looks like

One record in, all eight checks answered with the row each breach turns on, both quantities stated and signed, and RELEASE or HOLD. Rechecked, 58 of 60 dispositions and 15 of the 15 records whose disposition a field note flips — where the free column pass gets 0 of 15.

And when it cannot

Two ways, and they are opposite. A check called met that is breached releases a closing read that should have been held — measured at 9 of 480 cells as answered and 0 rechecked. A check called breached that is met sends a clean exchange back to the field — 38 as answered, 0 rechecked. And a missing panel called a breach turns a paperwork gap into a finding about the exchange: 2 as answered. The station closes all three; what it cannot close is a WRONG READING, because it has no signal that one was made.

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 CT-set coding is reliable and your energisation dates are printed on the record. — the free column floor alone — python3 -m evals.run --floor rules
    Every one of the eight checks is then a comparison, a date test or two multiplications. The floor gets 465 of 480 check statuses and 45 of 60 records for $0.00 and no network.
  • Your technicians code the CT set from habit and your energisation dates live in free-text notes. — the paid call, with the station
    That is the whole of what it buys: 15 of 15 checks a column reader cannot settle, 8 of 8 mis-coded records and 7 of 7 records a note moves, carried into 58 of 60 dispositions.
  • You need the quoted row beside every finding on a reviewer's queue. — the free floor, or a person
    The arm quoted a row on 40 of the 480 cells that admit none, and the station does not repair it. The floors quote from their own determination and do not.
  • You want a number about YOUR exchange records. — label fifty of them first
    Every accuracy figure here is scored against a key a generator derived. The floors, the engine, the station and the citation scorer all run on your records the same afternoon for $0.00; nothing produces an accuracy number until somebody labels a set.

At a glanceHow the whole thing runs

97%disposition correct rechecked pct
2,834 msp50, end to end

Run once, for real, on 2026-09-09. 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?Point data/corpus/ at your own exported exchange records and data/service_points.json at your own billing records, keep the panel headings and the row columns, and every free floor, the engine, the recheck station, the citation scorer and the board work immediately with no key and no network. The boundary is the ANSWER KEY, not the documents. Corpus lens →
When is this the wrong choice?Avoid: Paying for a reading you do not need — and paying it on every exchange, every cycle. That is the case against the best-fitting scenario (“Your CT-set coding is reliable and your energisation dates are printed on the record.”). 4 scenarios scored in all, each with its own. Eval lens →
Where does it stop working?An exchange record whose panels are not the six this parser knows. src/rules.py splits on the headings RECORD HEADER, BILLING RECORD, METER PANEL, EXCHANGE READS, CLOSING SPAN AS RECORDED and FIELD NOTES, and reads the panel and read rows with fixed-column regular expressions. 6 recorded failure modes, each from a run rather than a guess. Corpus lens →
What was never verified?A second scored run at the same tier. One run, one model; no repeat was bought, so nothing here separates a model's variance from a real difference. 5 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-09 — r001-meter-exchange. 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 — Clone and run python3 -m evals.baseline with no key, no network and nothing installed: all four floors score all 60 records in a few seconds. python3 tools/build_corpus.py --check rebuilds the whole corpus and the whole key in memory and compares bytes, and python3 -m evals.check_labels re-derives the key from a retyped procedure. None of it costs anything.

A living map of modern AI — kept current every morning