Payment integrity SOP reasoner
Centene · payment integrity
Reasoning

SOP reasoner

Every claim is walked node by node through the procedure that governs its type. Deterministic checks resolve first; a node only needs a scoped model call where the rules cannot answer on the data available. Every terminal decision traces to the node that produced it, and every node carries what it cited.

Claims walked
25
16 approved · 9 routed to a human
Resolved deterministically
97%
292 of 302 nodes · 0 model calls here. On the platform 80% of these nodes are deterministic — the gap is retrieval and drafting, which are scoped calls there and local code here.
Nodes that cite a source
79%
336 citations across the batch
Payload coverage
99%
435 of 438 claim paths resolved · 3 nodes took on_field_missing

How the batch terminated

25 claims

The agent never denies and never pends. APPROVE is the only disposition it reaches on its own; every negative outcome is a hand-off that carries what the agent recommends the human do. A single “route to a reviewer” would lose exactly that.

Approve APPROVE 16
Every check resolved and none found a variance. This is the only disposition the agent decides on its own.
Route to a human ROUTE_TO_HUMAN 2
The agent has no recommendation. Something on the claim needs a person's judgement and the rules do not reach it.
Route to a human — criteria not met ROUTE_TO_HUMAN_CRITERIA_NOT_MET 4
The agent recommends the claim does not meet the criteria. It does not deny — a person confirms.
Route to a human — pend ROUTE_TO_HUMAN_PEND 3
The agent recommends holding for missing information. A check could not be evaluated, so no recommendation on the merits is offered.

Missing information outranks a recommendation to deny: a walk that could not evaluate a material check does not recommend on the merits. The engine resolves that structurally, by whichever terminal the graph reaches first; a linear procedure has to choose, and this is the choice.

Traversal trace

CLM-0000021 · Drug and biologic unit review · v1.2
Open the claim
DRX-1 Rule on match
Active on the date of service
Coverage ran 2026-01-01 to 2026-12-31; the service on 19 Mar 2026 falls inside it. Re-verified at audit with no retroactive change.
Read $.eligibility.coverage_from$.eligibility.coverage_to$.service_date
DRX-2 Rule on match
Covered under the plan
Physician-administered drug on the medical benefit — covered subject to prior authorization. Wellcare Medicare Advantage HMO · Louisiana.
Read $.eligibility.benefit$.eligibility.plan
DRX-3 Rule on match
Primacy confirmed
This plan is primary. Other coverage: None on file.
Read $.eligibility.primacy$.eligibility.other_coverage
DRX-4 Rule on no match
Authorization does not cover the claim as billed
PA-2026-219044 valid 2026-03-01 to 2026-05-31. Authorised: Nivolumab 200 mg per cycle, every two weeks, six cycles. Billed: 240 units on 19 Mar 2026 — 240 mg, 40 mg above the authorised dose.
Read $.prior_auth.status$.prior_auth.required
route [5] Authorization PA-2026-219044 [6] CPP-085 · prior authorization
DRX-5 Rule on match
Resolved to v2.0
CPP-061 v2.0, effective 2026-03-01, was in force on 19 Mar 2026.
Read $.policy_refs$.service_date
DRX-6 Lookup on match
Codes valid on the date of service
J9299 against C34.90. Every code was billable on 19 Mar 2026.
Read $.lines
pass [8] ICD-10-CM FY2026 [9] HCPCS / CPT 2026
DRX-7 Lookup on match
Per-unit rate matches the ASP file
J9299 is $33.62 per 1 mg in the file effective 2026-04-01 to 2026-06-30. 240 units billed = $8,069.76.
Read $.lines
pass [10] Knowledge Base · smi · J9299 [11] CMS Part B ASP pricing file 2026 Q2
DRX-8 Rule on match
Inside the unit ceiling — which is not validation
240 of J9299 against a published ceiling of 480. Derived from the maximum labelled dose over body surface area. The ceiling is a maximum, not an allowance: passing it validates nothing on its own.
Read $.lines
DRX-9 Needs a scoped call on field missing
Requires the medication administration record
The medication administration record for 19 March documents 200 mg administered. J9299 bills in 1 mg units, so 200 mg is 200 units. The 40 units above that are recoverable at the 2026 Q2 ASP rate of $33.624 per unit. The agent is sent the claim, not the administration record, so the rules cannot resolve this on the data available.
On the platform this node is a scoped model call over the retrieved record.
Not in the claim $.record.medication_administration.administered_dose The branch taken is on field missing, which is a different outcome from the check evaluating to false.
DRX-10 Rule on no match
Billed beyond the authorised dose
Authorised: Nivolumab 200 mg per cycle, every two weeks, six cycles. Billed: 240 units on 19 Mar 2026 — 240 mg, 40 mg above the authorised dose.
Read $.prior_auth.authorized$.lines
DRX-11 Formula on no match
$1,344.96 recoverable
40 units above the supported dose at $33.624 per unit = $1,344.96.
fail
DRX-12 Retrieval on match
2 passages retrieved
Scoped to CPP-061 v2.0, the version in force on 19 Mar 2026. Best match on page 1.
On the platform this node is a scoped model call against the indexed policy.
Read $.lines$.findings
DRX-13 Drafted on no match
Finding and letter drafted for a reviewer
Separated into 3 layers — coding defect, clinical-evidence defect, payment consequence — with the policy citation and dispute rights already in the letter. Neither is sent by the agent.
On the platform this node is a scoped model call that writes the finding and the letter.
Terminal disposition
Route to a human — pend ROUTE_TO_HUMAN_PEND

1 check could not be evaluated: the field it reads is not on the claim. 2 other checks did not pass, but the agent does not recommend on the merits while a material check is unresolved. $1,344.96 is at stake. The agent recommends holding for the missing information; a person decides.

The agent recommends holding for missing information. A check could not be evaluated, so no recommendation on the merits is offered.

13 nodes
12 deterministic
0 model calls
18 citations
95% of paths resolved

Compiled procedures

Each declares its nodes and their order in the audit book; the evaluators live in services/sop.py. A key with no evaluator, or an evaluator with no key, fails a test.

Professional claims post-pay review v1.9 · 12 nodes · 15 claims in this batch Professional claims — office visits, procedures, laboratory, imaging Live signed off 2026-01-14
Inpatient DRG validation v2.7 · 12 nodes · 8 claims in this batch Institutional inpatient admissions priced by MS-DRG Live signed off 2025-12-04
Drug and biologic unit review v1.2 · 13 nodes · 2 claims in this batch Physician-administered drugs billed on the medical benefit Live signed off 2026-02-20

How nodes resolve

Across all 302 nodes walked in this batch. The engine's own taxonomy has two values, not six — deterministic (242) and llm_reasoning (60). The six below are this demo's sub-classification of them, which is why a node can be llm_reasoning on the platform and still resolve without a model here.

Rule 167
Lookup 42
Formula 33
Retrieval 25
Drafted 25
Needs a scoped call 10

Where a scoped call is genuinely needed

These are the nodes that took the on_field_missing branch — not because a check evaluated to false, but because the path it reads is not in the claim at all. The field it needed is named, so this is a demonstrated dependency rather than an assertion. The other 292 nodes resolved on what the claim carries.

on field missing Requires the inpatient record
Not in the claim $.record.inpatient.clinical_indicators

mcc_substantiation · 2 claims: CLM-0000013, CLM-0000014

on field missing Requires the medication administration record
Not in the claim $.record.medication_administration.administered_dose

dose_reconciliation · 1 claim: CLM-0000021

The three-way branch — on_match, on_no_match, on_field_missing — the four terminal dispositions, the two approaches and the path statuses are cgn-sop-reasoner's vocabulary, taken from the engine itself. What differs is what they resolve against: a synthetic claim in this audit book, not a payload assembled from upstream systems. A missing path below is a fact about this book.