Skip to content

stn 02 · rec 2026 · orrery — home health compliance

Turning a Medicare Manual into 108 Testable Rules

Compiled the Medicare home-health pre-claim review requirement set into 108 machine-readable rules, each carrying its own regulatory quote, citation and pass/fail contract — so an agency can see what is missing before it submits, not after it is denied.

LLM-as-a-judgeChecklist decompositionKnowledge graphRegulatory compliancePythonClaude
contextORRERY — home health compliance
roleSolo — research, rule authoring and system design
period2026
scale108 rules · 19 source documents · 351 typed edges
cat.noBOG–002

sec 01 · brief

The problem

Medicare's Review Choice Demonstration puts home health agencies in Florida on a pre-claim footing: under Choice 1 the documentation goes to the contractor before the claim does, and a non-affirmed request is a denial. Staying on the light-touch path means holding at least 90% full affirmation over a minimum of ten requests every six-month cycle. Florida reached full implementation in September 2021, and the demonstration now runs to May 2029.

The trouble is that no single document says what a compliant request looks like. The requirement set is spread across a manual chapter, four sections of the Code of Federal Regulations, an operational guide, 115 published FAQs, a contractor audit form and three therapy coverage determinations — several of which disagree with each other. Nobody holds that in their head, so a chart audit is a person reading a hundred pages against a checklist they half-remember.

The ask was a system that checks a case against the requirement set and says exactly what is missing, with the citation and the fix beside it — before the request goes out the door.

sec 02 · approach

What I built

A rulepack, not a prompt. One YAML file per rule, compiled and validated by a Python build script into a single JSON artifact that anything downstream can read. A rule that cannot be pointed at its own line of regulation does not compile.

The load-bearing decision was to type each check by how it decides rather than treating the whole set as a language problem. 64 of the 108 rules are deterministic — dates, presence of a document, identifier equality — and run as pure functions at no model cost. 30 are genuine judgment calls, and 14 are hybrids with an arithmetic prong and a judged one. Naive per-rule model execution of the full set was estimated at $3–5 a case; typing them this way puts most of the answer on the free side of the line.

Rules are graph nodes rather than a flat list: 351 typed edges across seven relations carry definition dependencies, sibling links, G-code activation and escalation from the always-on core tier into the deep one. Two relations do real regulatory work — `defeats`, which lets a carve-out shield a rule it would otherwise fail (a death exception over the face-to-face timing rule), and a document index that makes "which rules rest on this manual section" a query instead of a grep.

sec 03 · method

Method

  1. 01

    Build the corpus and rank its authority

    Nineteen documents, registered with a version and a currency date, arranged in four tiers: statute, the Code of Federal Regulations, sub-regulatory manuals and the demonstration notices. The tiering is not decoration — it decides which instrument wins when two disagree, and Azar v. Allina Health Services is the warrant for resolving conflicts in favour of the manual over an unpublished contractor position.

  2. 02

    Extract requirement candidates with their quotes

    A first pass over the corpus produced roughly 190 requirement candidates, each captured with the verbatim sentence that creates it and a page reference. The same pass registered five outright conflicts between documents — a retired review option, a decision window that moved from twenty business days to ten, a postpayment window quoted two ways, two incompatible task numberings and a swapped criteria order — so that later disagreements were known rather than discovered.

  3. 03

    Design the rule schema against the evaluation literature

    Judgment rules answer a checklist of binary questions rather than producing a score, which is CheckEval's finding: decomposition raised average agreement across evaluator models by 0.45 and cut score variance. The grader contract — a boolean plus a quoted evidence span plus a one-sentence explanation — is HealthBench's. And because small models in boolean output default to "compliant" regardless of what they detected, chain-of-thought is off, three samples vote, and disagreement routes to a human instead of being averaged away.

  4. 04

    Author, consolidate and conserve

    121 fine-grained proto-rules were consolidated into a coherent pack, with 35 retired identifiers conserved in supersedes entries so that nothing quietly vanished in the merge and any historical reference still resolves. Rules split into a 25-rule core tier that always runs and an 83-rule deep tier a reviewer can call per area.

  5. 05

    Compile, validate, then audit against the sources

    The build script is the gate: filenames must match ids, folders must match areas, every edge target must resolve, and the superseded index must account for every retired id. Two audits then read every rule back against the document it cites — one for fidelity to the regulation, one for internal consistency across the pack.

sec 04 · legend

Instruments

legend · methods

LLM-as-a-judgeChecklist decompositionSelf-consistencyk=3 voteCross-family panelKnowledge graphs7 relationsLegal informatics

legend · language & data

Pythonthe compilerYAMLone file per ruleJSONthe artifact

legend · models

Claude Opusjudgment rulesAmazon Bedrock

legend · review surface

Rule explorerstatic HTMLEvidence bundlesone per rule

sec 05 · readings

Results

rules in the pack

108

25 core · 83 deep

deterministic checks

64 of 108

run with no model call

auto non-affirm rules

18 of 108

all 18 sit in the core tier

source documents registered

19

7 cited by no rule

typed graph edges

351

7 relations · 18 definition nodes

legacy ids conserved

35

each mapped forward in a supersedes entry

fabricated quotes found

0

95 rules · two full audits

fidelity audit

1 blocker

64 clean · 30 advisory · of 95 rules

judgment rules calibrated

0 of 44

κ null · 0 labelled examples · 0 of 108 reviewed

plate 01

Most of the pack needs no model at all

deterministic

64

llm judgment

30

hybrid

14
03570

Rules by how they decide. The deterministic 64 are pure functions over dates, document presence and identifier equality — they cost nothing to run and cannot hallucinate. Only the 30 judgment rules and the judged prong of the 14 hybrids reach a model.

source

Compiled rulepack, check.type across all 108 rules. Accent marks the share that runs free.

plate 02

Eighteen rules can sink a request on their own

auto non-affirm

18

high

51

medium

31

advisory

8
0204060

Rules by severity. An auto non-affirm rule is one where a single failure denies the request outright, so those eighteen decide what has to be checked every time — and they are exactly the rules that make up the core tier, alongside seven high-severity date checks.

source

Compiled rulepack, severity across all 108 rules. Ordered by severity rank, not by count.

plate 03

One manual chapter carries the pack

Benefit Policy Manual ch.7

77

Medical record audit form

16

Claims Processing Manual ch.10

15

RCD FAQs

13

Operational Guide

10
020406080

How many rules cite each source document. Chapter 7 of the Benefit Policy Manual grounds 77 of 108 rules; nothing else reaches twenty. Building the index that produced this also surfaced the inverse — seven of the nineteen registered documents are cited by no rule at all.

source

Compiled rulepack, distinct rules per document in the document index. Twelve documents have at least one citation; the other seven are plotted nowhere because they have none.

sec 06 · reference

The core rules

The core tier — 25 of the 108 rules, with the 12 shared definitions they depend on. This is not a sample: the core tier is a real division in the pack, the rules that run on every request, and it is exactly the 18 auto non-affirm rules plus 7 high-severity date checks. The other 83 are deep-tier and run when a reviewer asks for an area. Drag the graph around; click any node to open what it actually says.

source

Compiled rulepack artifact, built 2026-07-29. Ids, labels, severities, check types, checklist items and quotes are transcribed verbatim. No case is evaluated, so no rule carries a verdict.

graph · core subgraph · drag a node, click to open

ruledefinitionopendepends on definitionsibling · see also · g-code

The same 25 rules as a graph, with the 12 shared definitions they depend on — 85 edges over 81 node pairs. Mark size is degree. Position encodes connectivity and nothing else: there are no axes here, and two marks sitting close together means they pull on each other, not that they measure anything. The layout is computed once at build time from a fixed seed, so it is the same drawing on every build. What it shows is that the pack is held together by its definitions rather than by its rules — the busiest node is not a rule at all but the two-clocks definition, the 30-day billing period against the 60-day episode, which six rules depend on and three other definitions cross-reference.

DEF-CLOCKS-PDGMdefinition · 6 rules reference it

The two clocks - 30-day billing period vs 60-day episode

text

Since PDGM (1/1/2020) the unit of payment is the 30-DAY BILLING PERIOD: one PCR request per 30-day period, each generating its own 14-byte UTN; claims are per period; each period is reviewed independently with the full episode documentation. Certification, recertification, the F2F encounter, POC review, and OASIS remain on the 60-DAY EPISODE: two billing periods nest inside each 60-day certification period; the POC must account for all dates on the request (a POC covering only the first 30 days gets the second period non-affirmed); no new F2F is required mid-episode absent discharge and readmission; a new Start-of-Care OASIS triggers a new PCR. Every dated rule must declare which clock it runs on.

authority Operational Guide Ch.4 · p.9 · RCD FAQs Q103-Q109

sec 07 · findings

What the data said

finding · result

Most of a compliance-AI problem is not AI

Sixty-four of the 108 checks resolve without a model: is the document in the packet, does the encounter date fall inside the window, do the identifiers match across the OASIS, the 485 and the request. Typing the pack this way, rather than sending every rule to a model, is what moves the cost of a case from an estimated $3–5 to a fraction of it — and the free checks are the ones that catch the most common denials.

finding · negative result

A stricter-than-regulation rule is a false-denial hazard

The fidelity audit found one blocker in 95 rules: the homebound absences rule had encoded "infrequent OR of short duration" as a conjunction. The manual disqualifies an absence only when it is both frequent and prolonged, so the rule would have failed cases the regulation permits — the direction of error that costs an agency money for nothing. Fixed in the same session, and the reason the audit reads the source rather than the rule.

finding · negative result

A search summary invented a requirement, and the audit caught it

An earlier pass, working from a summarised search result rather than the document, recorded that therapy goals must carry an expected date of accomplishment. Reading the physical therapy coverage determination directly showed that revision R11, in October 2016, deleted that phrase. Encoding it would have manufactured a denial reason that no longer exists.

finding · result

One document carries the pack, and the index proves it both ways

Chapter 7 of the Benefit Policy Manual grounds 77 of 108 rules. Building a document index to establish that also answered the question nobody asks: seven of the nineteen registered documents are cited by no rule at all — either a coverage gap or a corpus that carries weight it does not need.

finding · result

Closed technical sets and open genera cannot route the same way

"Supportive devices such as crutches, canes, wheelchairs, and walkers" is an open genus — the enumeration is illustrative, so a walker-equivalent the manual never names still qualifies, and the check has to be judged. The 19 therapy G-codes look similar on the page and are the opposite: a closed set where membership is decidable, and deterministic. An earlier analysis had grouped them together, which would have sent a decidable check to a model and a judgement call to an equality test.

finding · negative result

Transitive definition closure was measured, then rejected

Rules inject the definitions they depend on into the judge's context, and promoting that transitively looked obviously correct. Measuring first killed it: the 18-definition graph carries 29 cross-references including nine mutual pairs, so blanket promotion would inject up to seven extra definitions into a single rule's context — diluting the prompt to satisfy a tidiness argument.

sec 08 · forward

Recommendations

  1. 01

    Calibrate against real decision letters. Every judgment rule ships uncalibrated, and historical pre-claim review outcomes with their unique tracking numbers and reason codes are the one input that would turn agreement from an assumption into a measurement.

  2. 02

    Map non-affirmation reason codes back to rule ids, so a denial teaches the pack instead of only teaching the reviewer.

  3. 03

    Cite or retire the seven uncited documents. Each is either a gap in coverage or weight the corpus does not need, and the index cannot tell you which.

  4. 04

    Obtain Chapter 6 of the Program Integrity Manual, the one instrument in the authority stack still missing from the corpus.

  5. 05

    Put a human sign-off on every rule. The reviewer field is empty across all 108, which is honest and is not a resting state.

  6. 06

    Pilot the pack to replace the cost and latency estimates with measurements, and to test the routing thresholds against cases where a reviewer disagrees with the panel.

sec 09 · notes

Notes

disclosure

The organisation this work was done for ships under a pseudonym, ORRERY, and no individual is named. Everything else on this page is real: every rule id, label, severity, check type, citation and quote is transcribed from the compiled rulepack, and every count and audit figure is the measured one. The regulatory material is public federal regulation and is named as itself. No patient data appears — the product view this catalogue is drawn from evaluates a case, and no case, real or invented, is shown here.

limits

  • The engagement delivered the rulepack, the corpus and the system design. No product application was built in this phase, so nothing here has been observed running against live cases.
  • All 44 judgment and hybrid rules ship uncalibrated — agreement kappa null, zero labelled examples — and no rule carries a human reviewer. That is recorded in the artifact rather than papered over, but it means no accuracy claim is available.
  • Cost and latency figures are design estimates from the model pricing and the prompt sizes, not pilot measurements.
  • The pack is grounded in the Florida jurisdiction and its contractor. The demonstration runs in six states, and the others would need their coverage determinations re-read before any of this transfers.
  • The two audit figures quoted above were run against a 95-rule snapshot; the pack has since grown to 108. They are reported with that denominator rather than restated against a set they never covered.
  • The corpus is copyright-bound and not redistributable, so the quotes shown in the reference below are the short operative excerpts each rule already carries.