A workers'-compensation intake system

It reads the mail, understands it, files it, and rates it — and every number can be checked.

A law firm's daily mail arrives as a wall of scanned paper — hundreds of pages, dozens of documents, all mixed together. This system reads it the way a person would, decides what each piece is, files it on the right case, and when a medical report comes through, it computes the permanent-disability rating and shows its work. Here's how, and why it isn't like anything else that does this.

Reads native PDF, not OCR Runs local, on the firm's files Rating deterministic, verified Proven on 2,957 pages

01The problem it solves

In workers' compensation, the mail is the case. Utilization-review denials, medical-legal reports, hearing notices, benefit letters, records bundles — the file moves forward through paper, and deadlines run whether anyone opened the envelope or not.

A single day's mail can be a 2,000-page scan holding forty separate documents for forty different clients, from a dozen different senders, in no particular order. Someone has to pull each one apart, figure out what it is, find the right case, file it correctly, calendar any deadline, and flag anything that needs a lawyer. It's the work that quietly eats an afternoon and where a missed page becomes a missed deadline.

Then there's the sharpest task of all: when a doctor's rating report arrives, someone has to turn the medical impairment into a permanent-disability percentage — a lookup-table computation that decides what the claim is worth. Firms have used rating software for this for twenty years. It works, but it's a closed box: you type in numbers, it hands back a number, and the derivation is invisible.

This system does both jobs — the sorting and the rating — and it does them in a way that is auditable at every step.

A morning, concretely

The scanner finishes a batch: 2,094 pages. Inside are 43 separate documents — a denial for one client, an approval for another, a delay letter, a hearing notice, a 1,438-page records bundle, several medical-legal reports — for forty-odd different people, from a handful of different claims administrators, the review organization, and the appeals board, in whatever order they fed the scanner.

By the time anyone opens it, the system has already gone document by document: separated the stack, read each piece, matched it to the right case, filed it under a conforming name, calendared the deadlines, assembled the appeal packets for the denials that qualify, and left each case manager a task explaining what arrived and what needs doing. What waited on a desk was a wall of paper. What's there now is forty-three handled items and a short list of the ones that need a lawyer's eye.

02How it reads a document

Everything starts with reading, and the reading is different from what most "AI document" tools do.

Native reading — no OCR, no text-scraping

Most tools run optical character recognition: they guess at the letters, produce a noisy text transcript, and reason over that. This system hands the actual page images to the model and lets it read them directly — the way a person reads a scanned letter. A smudged fax, a stamped signature, a handwritten note in the margin, a table that OCR would scramble — it sees all of it in context. There is no lossy transcription step to introduce errors.

On top of that native read sits the principle that governs the whole system:

The model reads and understands. Deterministic code does anything that must be exact.

Reading a document is judgment — what kind of letter is this, whose case, what's the determination. That belongs to the model. But a rating, a deadline, a filename that has to follow a standard — those must be exact, so they belong to code. The two are kept strictly apart. The model never "estimates" a rating; code never guesses what a document means. Blurring the two is how you get an answer that's confident, plausible, and wrong — and this system is built specifically not to do that.

Why native reading earns its keep shows up in the cases a text-scrape would fail. A 1,438-page bundle arrived that, on a keyword scan, looked like many patients — different reference numbers on interior pages, even another person's caregiver log filed as evidence. Reading it in context, the system recognized it correctly as one client's complete records submission and filed it whole, on the right case. Or the everyday task of building an appeal: the client's signed HIPAA authorization and representative form sit buried inside a 25-page intake packet — on page 6 in one client's file, page 20 in the next, somewhere else again in the third. The system finds them by reading what each page is, not by counting to a fixed page number. OCR gives you noisy letters; this gives you meaning.

03The mail pipeline, step by step

A scanned batch goes through the same sequence, one document at a time, start to finish before moving on. Each step is tagged by who does it — model reads and judges, code computes exactly, human confirms.

1

Separate the batchcode

The day's scan is one giant PDF. On-device vision detects the separator cover sheets between documents and cuts the stack into individual files — with a fail-loud guard: if it can't find clean boundaries, it refuses rather than lumping documents together.

2,094-page batch → 43 documents
2

Read each documentmodel

Native read of the actual pages. It pulls out who the document is about, the claim and case numbers, the sender, the determination — exactly as written.

3

Find the casemodel

It searches the case-management system by the injured worker's name, then confirms the match by claim number, date of injury, and employer. If it isn't confident, it stops and flags — it never guesses which case a document belongs to.

4

Check it isn't already filedmodel

An e-served copy may already be on the case. It checks the matter's recent documents so the same letter isn't filed twice.

5

Decide how to handle itmodel

Under the governing rules: is this an approval, an appealable denial, an administrative matter that belongs at the appeals board, a delay letter, a records bundle? This is judgment about the content, not just filing.

6

File it, name it, tag itcode

Uploaded to the right case with a filename that follows the firm's naming standard (claim number, never the client's name), tagged, and — for legal mail — any hearing or deadline placed on the calendar for the handling attorney.

7

Notify the right personhuman

The matter's case manager gets a task and an email explaining what came in and what needs doing — written to be checked, not trusted. For an appealable denial, it assembles the entire appeal packet and sends it to the filing service before the deadline.

Proven at real scale

This isn't a demo. It has processed two live production batches end-to-end against the firm's real case system — 2,094 pages / 43 documents and 863 pages / 86 documents — including a single 1,438-page records bundle it correctly recognized as one client's file, and roughly two dozen full appeal packets it assembled and filed with the state's filing service.

04What "understanding" actually means here

It's easy to say a tool "understands" a document. Here's the concrete version — the judgment calls it makes that separate reading from sorting:

The deadlines are their own hard problem

Filing a document is the easy part. Knowing which clock it starts is not. A denial can carry a 30-day appeal window, or a 10-day one when the dispute is only about a drug's formulary status — and getting that wrong forfeits the client's appeal. Some denials look appealable but aren't; some toll the clock because a required form wasn't enclosed; some belong at the appeals board on an entirely different timeline. The system reads the determination to decide which rule applies, and when a deadline is short, uncertain, or looks like the formulary trap, it treats it as a fail-safe: flag it, don't quietly assume. A missed deadline is the one error that can't be undone, so the system is built to be loud about them.

05When a piece of mail becomes a rating

Here is where the two halves of the system meet — and it's the part that's genuinely novel.

When the mail pipeline reads an incoming document and recognizes it as a medical-legal rating report — a QME or AME evaluation that assigns a whole-person impairment — it doesn't just file it. It hands the facts it read straight into the rating engine. The same read that sorted the mail becomes the input to the computation. The document arrives; a filed rating and a plain-English breakdown come out the other side.

One continuous motion

Read the report → extract the impairment, method, and any pain add-on or apportionment → pull the age and occupation from the case file → validate the inputs for the classic extraction traps → compute the rating against the state's tables → write the attorney an email that shows every step. No re-keying, no separate rating program, no copy-paste between systems.

To see why that's worth anything, picture the same task without it. A rating report comes in. Someone has to notice it's a rating report and not one of the forty other things in the batch; open it; find the impairment number, the whole-person figure, the method the doctor used, and any pain or apportionment; open a second program — or a rating service — and re-type all of it; look up the client's age and job in the case-management system and type those too; read back a number; and then compose an email explaining what it means. Every hand-off is a chance to transpose a digit, grab the superseded figure instead of the current one, or use the age today instead of the age at injury. It's careful, slow work that a busy desk does under time pressure — which is exactly when those mistakes happen.

The system collapses that whole round-trip into the read it was already doing. The document that got sorted is the document that gets rated; the facts don't leave the machine to be re-entered, so there's nothing to transpose. And critically, the rating that comes out is the same file you'd get from the standalone engine — the pipeline doesn't do a rougher version of it. When a report flows through the mail, we do the rating exactly the way the dedicated rating tool does, because it is the same engine.

06Inside the rating engine

The rating rules are public and fixed — California's 2005 Schedule for Rating Permanent Disabilities, an 89-page book of lookup tables built on the AMA Guides, 5th Edition. The problem was never what the rules are; it's that applying them by hand is slow and the software that automates them is a black box. The engine is the opposite of a black box.

A rating is written as a string — this is the state's own format:

16.01.02.03  –  5  –  [1.4]7  –  340F  –  7  –  7% PD
impairment    WPI   earning-cap  occupation  age    final

The engine reproduces that string exactly, and every step is a real table lookup, not a guess:

StepWhat happensAuthority
Impairment → whole personRegional values (upper-extremity, hand, leg, foot, finger) convert to whole-person impairment firstAMA Guides 5th Ed.
Future earning capacity×1.4 for injuries on/after 1/1/2013, or the FEC-rank table before thatLabor Code 4660 / 4660.1
OccupationJob title → occupation group → variant letter → adjusted ratingSchedule §§3–5
AgeAge at injury adjusts the rating up or down by bandSchedule §6
Multiple impairmentsCombined Values Chart, with same-limb impairments combined at the regional scale firstSchedule §8 / Guides
Apportionment · prior awardsNon-industrial reduction, prior-award subtraction, statutory capsLabor Code 4663 / 4664

It handles the hard cases a real rater faces — psychiatric ratings from a GAF score, the pain add-on and its per-injury cap, the statutory bar on certain post-2013 add-ons, continuous-trauma dates, the conclusive total-disability presumptions — and it converts the final percentage into weeks and dollars. Twenty-one distinct rating operations, all deterministic.

It flags what isn't its call

The engine does the legal math; the physician does the medicine. Whether grip strength is even ratable, whether two impairments add or combine, whether a rating survives an objection — those are the doctor's and the attorney's calls, under the Guides. The engine computes exactly once those are settled and flags the cases where the choice isn't its to make. It also refuses to rate on a missing age, and it catches the extraction traps a real report contains — a regional value fed as whole-person, a pain add-on already baked into the total, a rating a supplemental report already superseded.

What that produces — an illustrative walkthrough

A supplemental medical-legal report withdrew an earlier 12% grip-strength rating as unreliable and re-rated a forearm nerve at 5% whole-person. Here's the engine's read on the operative 5%:

  1. Impairment: 5% whole-person — the operative figure from the report.
  2. Earning capacity: injury is post-2013, so 5 × 1.4 = 7.
  3. Occupation: a patient-care role → group 340, variant F — no change (7).
  4. Age: 34 at injury, derived from the intake filing — no change (7% PD).

16.01.02.03 – 5 – [1.4]7 – 340F – 7 – 7% PD  ≈ 21 weeks, ~$6,090.

The part that matters: because the report withdrew the earlier 12%, the engine shows both, side by side —

Current (5% WPI)
7% PD
~$6,090
Withdrawn (12% WPI)
16% PD
~$16,095

The withdrawal is worth roughly 9 PD points and ~$10,000.

It doesn't argue the grip rating should have stayed — that's the attorney's call. It surfaces the opening: here's the swing, here's where the money is, worth a look. And every number in that email is computed by the same code, so it can never drift from the math.

07Why it's genuinely new

Two kinds of tools already exist near this problem. Neither does what this does.

Versus commercial rating software

DimensionRating programs firms useThis system
Gets its inputsA person types them in by handReads them off the report itself
Shows its workA final number; derivation hiddenEvery step of the rating string traced — WPI → 1.4/FEC → occupation → age — each a checkable table lookup
Bad inputsComputes whatever you typed, silentlyFlags the extraction traps before it computes — pain double-counted, a superseded figure, exam age vs. age at injury, apportionment sign, CT date-of-injury — and refuses on a missing age
Connected to the mailNo — a separate, standalone programThe mail feeds it directly
Verification"Trust the vendor"Matched to 8 independent professional ratings to the digit, plus a 15,840-rating consistency sweep with zero errors
Where it runsA subscription cloudLocal, on the firm's own files
Whose tool it isOften built and hosted by the other side of the aisleBuilt for this firm, running on this firm's machines

Whose side the tool is on

There's a quieter reason a standalone rating calculator can be the wrong choice, and it has nothing to do with features. Several of the best-known rating tools in this field are built and hosted by the defense — the same side the firm argues against. They're login-required cloud platforms: to rate a case, you type your client's impairment figures, apportionment, and the operative numbers into the other side's system.

Even assuming nothing is ever misused, that's the wrong default for an applicant's advocate. A rating is a position — the highest defensible number for the client — and a tool authored from the defense perspective is calibrated to read the schedule the way the defense reads it, not to press for the client. And the case data, by design, leaves the firm and lands on someone else's server. This system inverts both: it runs locally, on the firm's own machines, so a client's figures never leave the building, and it's built to work the case from the applicant's side. Nothing is submitted to anyone.

Versus a general AI assistant

You could ask a general-purpose AI to "rate this report." It would give you a number — and sometimes it would be wrong, confidently, with no way to tell. That's the exact failure this system is engineered against. Here the AI never computes the rating; it only reads. The computation is deterministic code checked against the state's own worked examples. An AI that reads like a person but computes like a calculator is a different kind of tool than an AI that does both by guessing.

Other tools treat the rating as an answer to trust. This one treats it as an argument to verify — a well-prepared first draft with every step laid bare.

That's the real novelty, and it runs through the whole system, not just the rating: it reads natively instead of scraping, it separates judgment from computation, it fails loud instead of guessing quietly, it shows its work instead of hiding it, and it runs on the firm's own machine instead of shipping the client's file to someone else's cloud.

08How we know it's right

"Deterministic" only means reproducibly the same — not correct. Correctness had to be earned, and this is the part a black box can't show you.

107
automated checks, all passing
15,840
ratings swept for consistency — zero errors
8
independent published ratings matched exactly

Every rating it produces is framed, explicitly, as an estimate to verify against a formal rating — never a final determination. That honesty is the point. A tool whose job is to be checked should make itself easy to check, and should say plainly where its judgment ends and the attorney's begins.

09The shape of the whole thing

Step back and the design is one idea applied everywhere. A person reads a document with judgment; a calculator computes a number with certainty. Most software collapses those into one — it either scrapes text and reasons over the noise, or it lets a model produce numbers it can't stand behind. This system keeps them separate on purpose, and hands each half to the thing that's actually good at it.

That single choice is why it can read a smudged fax and still be exact about a deadline; why it can sort forty documents by meaning and still refuse to guess which case one belongs to; why it can rate a medical report and still show every step so an attorney can check it. Reading and computing are different jobs. Doing each one honestly — and never pretending one is the other — is the whole thing.

It does the tedious work at scale, keeps the judgment with the people who should have it, and leaves a trail you can follow the whole way down.