Home / Case studies / Risk adjustment coding
Case study · Engine validation, risk adjustment

HCC coding engine audit: 1,500 weights checked, one RAF bug caught, and why a coder still signs off

Short answer: the V28 crosswalk passed a 1,500-of-1,500 random weight audit, a double-count that showed one chart as 3.535 instead of 2.339 was caught and locked, and three runs on the same chart still returned 0.299, 0.659 and 1.332. The engine proposes; a credentialed coder signs. No client outcome is claimed.
7,903 ICD-10 codes · 115 HCCsJun to Aug 2026 · 10 real charts0 PHI leaks · 39/0 gateNot payment-grade unattended

October 27, 20265 min readASP-RCM Solutions

Focus
Engine audit
Audience
Coding
Framework
V28 crosswalk
Horizon
Jun to Aug 2026
Archetype
10 real charts
Length
5 min
1,500of 1,500
Randomly sampled ICD-10 codes carried the correct V28 HCC weight, 0 mismatches ASP-RCM engagement records
115HCCs
Payment HCCs mapped from 7,903 ICD-10 codes in the V28 crosswalk ASP-RCM engagement records
2.339vs 3.535
The correct RAF versus the inflated RAF on one chart, caught and fixed ASP-RCM engagement records
0outcomes
Client RAF, recapture or audit outcomes claimed on this page ASP-RCM engagement records
What this page is, and what it is not

An engine validation, June to August 2026

The engine maps documented diagnoses to CMS-HCC V28 categories and computes a RAF per chart. Before it goes near a submission file we test the arithmetic, the privacy boundary and the stability of the output.

This page is

  • An engine validation on reference tables and 10 de-identified real charts
  • One bug we caught, one weakness we have not closed
  • Why a credentialed coder signs every chart

This page is not

  • A client outcome: no panel RAF change, recapture rate or audit result measured on a client book
  • A vendor accuracy claim: prospect-deck percentages are projections, not repeated here
  • Evidence that the engine can code unattended
  1. 1
    Crosswalk loadedJun 20267,903 ICD-10 codes to 115 HCCs; 1,500-code random weight audit
  2. 2
    De-identification gateAug 202610 real charts, 0 leaks on the per-chart scan
  3. 3
    Throughput runAug 2026Digital charts under 50 s; scanned charts cut to about 110 s
  4. 4
    RAF double-count foundAug 20262.339 shown as 3.535 on one chart; fixed
  5. 5
    Variance measuredAug 2026Same chart, three RAF values; coder sign-off made mandatory
  6. 6
    StatusOct 2026Validated engine, coder in the loop, no client outcome yet
The weight audit

7,903 codes, 1,500 sampled, 0 wrong

Crosswalk and random weight audit, June 2026

Each sampled code's HCC and coefficient compared with the CMS model tables. Many codes map to no payment HCC; the engine must return nothing for those, and did.

ICD-10-CM codes in the V28 crosswalkmapping to 115 payment HCCs
7,903100%
Codes drawn at random
1,50019% of the crosswalk
Codes matching the CMS tablesHCC and coefficient
1,500100% of the sample
Mismatches
00%
02,0004,0006,0007,903
CrosswalkSampleMatchedMismatched
Why it mattersA wrong coefficient is invisible on a chart review and only shows up when the payer's RAF disagrees with yours. The cheapest test we run, and the one we never skip.
The bug we caught

One chart, RAF 2.339 shown as 3.535

RAF on one test chart: the double-count and the fix

A condition reached the total through two routes and was added twice. The fix is a locked rule: one HCC per chart after hierarchy trimming, then sum the coefficients.

3.535
+51% inflated
Before the fixdouble-counted
2.339
correct
After the fixone HCC per chart
InflatedCorrect

Same chart, three runs: RAF values returned

The arithmetic is deterministic; diagnosis extraction from narrative text is not yet. Not payment-grade: a credentialed coder signs every RAF before it reaches a submission file.

0.299
Run 1
0.659
2.2x run 1
Run 2
1.332
4.5x run 1
Run 3
Diagnostic: spread not yet closed
Speed and the privacy boundary

Throughput and privacy gate, August 2026

The engine reads de-identified text only; that gate has its own case study.

MeasureBeforeAfterChange
Digital chart, bulk run45 to 49 s45 to 49 sNo change needed
Scanned chart, 18 to 23 pages170 to 200 sAbout 110 sParallel page chunking
Page cap per chart20 pages5,000 pagesLong records no longer truncated
De-identification, 10 real chartsn/a0 leaksPer-chart leak scan clean; 39-case regression gate
What we did

Each finding became a standing control

1. Audit the tables

Quarterly

  • Random-sample the crosswalk against CMS tables after every refresh; 1,500 codes, 0 mismatches is the bar

2. Lock the arithmetic

Regression test

  • One HCC per chart after hierarchy trimming, then sum; the 2.339 versus 3.535 case is permanent

3. Fence the reader

Coder gate

  • Narrative extraction varies run to run, so every proposed HCC shows its evidence sentence and waits for a coder

4. Keep PHI inside

Fail closed

  • De-identify before the model reads anything; scan the output; stop if a scan is not clean

5. Publish the gaps

No projections

  • No client RAF, recapture or audit outcome is quoted until one is measured on a real panel
StepWho decidesEvidence shown
Diagnosis extraction from chart textEngine proposesSentence and page the condition was read from
ICD-10 to HCC mapping and coefficientEngine, audited tablesV28 table version and weight
Hierarchy trimming and RAF sumEngine, locked ruleOne HCC per chart, listed
Accept, reject or query a conditionCredentialed coderMEAT support present or not
Release to a submission fileCoder sign-offAudit trail per chart
What is still open

Listed, rather than assumed

  • O
    No client outcomeNo panel RAF, recapture, annual wellness or suspect-closure result measured on a client book; the engine has not been the basis of a submission.
  • O
    Run-to-run varianceThree runs on one chart returned 0.299, 0.659 and 1.332. Until the spread closes, the engine is a reader with a coder, not an autonomous coder.
  • O
    Secondary diagnosesOn our adjacent surgical coding engine, secondary-diagnosis accuracy was 53.5 percent against 79.5 percent for the primary diagnosis. HCC capture lives in the secondary list, so that is the number to watch.
  • O
    Vendor-style accuracy claimsPercent-accuracy and seconds-per-chart figures in prospect decks for tools like this are projections, not results.
Takeaway

Audited tables and a locked sum make the arithmetic trustworthy. A reader that returns three RAFs for one chart does not get to submit; the coder does.

FAQ

Frequently asked questions

Is this a client case study?

No. It is an engine validation. The figures are measured on reference tables and ten de-identified real charts between June and August 2026. No client RAF, recapture or audit outcome is claimed because none has been measured yet.

What did the 1,500-code weight audit check?

We sampled 1,500 of the 7,903 ICD-10 codes in the V28 crosswalk at random and compared the HCC and coefficient the engine returned with the CMS model tables. All 1,500 matched, with 0 mismatches.

Why does a coder still sign off if the arithmetic is audited?

Because the arithmetic is only half the job. Extracting diagnoses from narrative text still varies run to run: one chart returned RAF values of 0.299, 0.659 and 1.332 on three runs. A credentialed coder accepts or rejects each proposed condition against the chart before anything is released.

Does the engine see protected health information?

It reads de-identified text only. On 10 real charts the per-chart leak scan found 0 leaks after de-identification, and a 39-case regression gate runs before every release.

Sources
  1. CMS: Risk Adjustment (CMS-HCC model documentation and software)
  2. CMS: Announcement of Calendar Year 2026 Medicare Advantage Capitation Rates and Part C and Part D Payment Policies

Checked October 25, 2026. Engagement figures are from ASP-RCM records for the periods stated; rules change, confirm against the source before relying on them.

Related

Ask us for the engine evidence, not a demo

We will walk your coding or compliance lead through the weight audit, the de-identification gate and the variance data, on your own de-identified sample charts.