Skip to content
TH Intelligence, home

Coding gaps, with the evidence attached

A coding-gap list gets worked only when every line shows where it came from.

Status
in production
Built
September and October 2026
  • 357 → 2,154

    conditions confirmed as captured for one health plan, once the bot read the practice's own claims

    Source: The bot's run logs and build notes, Oct 2026

  • 37,077

    claims read in the history backfill

    Source: The bot's run logs, Oct 2026

  • 29.7 s → 3 ms

    provider summary, after its results were prepared ahead of time

    Source: Build notes, Oct 2026

What the list looks like

Every row carries its evidence: a plan claim, our own billing or the problem list. The rows here are invented sample data; no screen on this site is a real system.

Coding gaps · this week

Sample data

  • M-0412 · Type 2 diabetes with CKD

    Open

    Plan claims · Nephrology claim, Mar 2026

  • M-0097 · Chronic systolic heart failure

    Captured

    Our billing · Visit claim, Jun 2026

  • M-1183 · Major depressive disorder

    Open

    Problem list · Active since 2024, not billed this year

  • M-0655 · COPD

    Needs review

    Plan claims · Reported once, nothing else on file

  • M-0730 · Morbid obesity

    Captured

    Our billing · Visit claim, Feb 2026

  • M-0921 · Atrial fibrillation

    Open

    Problem list · Cardiology note, Jan 2026

3 open · 2 captured · 1 for a person to decide

Illustrative, not a real system

The problem

Which risk-adjusting conditions haven't been billed this year, and why? The health plans' claims files answer part of it, but they arrive weeks to months late and barely show the practice's own office visits. The first version of the tool matched diagnoses by approximate names, and most of its problem-list suggestions were wrong. A list like that gets ignored.

What was built

A coding-gap engine maps diagnoses from three places, the plans' claims, the practice's own billing and the EHR problem list, to the official CMS-HCC V28 categories, including the rule that a more serious condition outranks a milder related one. Each patient's categories are marked captured or open; open gaps are ranked, for example "dropped since last year" or "billed only by a specialist". Every suggestion cites its evidence.

To stop waiting on the plans, an RPA bot opens the claim forms the practice sent from the EHR every 30 minutes during work hours and records the diagnosis and procedure codes, with no names or birth dates.

Each provider's page shows, in plain words, which of their own patients have a code worth a second look, and the whole report prints in landscape for a one-on-one.

What was hard

The first fix was exact codes instead of names. The second was the practice manager checking six flagged patients by hand and finding false alarms: a more serious code already coded, a cancer that was history only, a patient who had switched plans. Each one became a rule, and anything staff rule out stays off the list for the rest of the year instead of coming back every day.

Removing finished rows had to happen on the server, not only on screen, or the headline counts and the lists would disagree.

Result

For one health plan, conditions confirmed as captured went from 357 to 2,154 once the bot read the practice's own claims. The history backfill read 37,077 claims. Preparing the provider summary ahead of time took it from 29.7 seconds to 3 milliseconds, and the all-providers list went from about 3.9 seconds to about 0.6.

What would show the business result is the share of open gaps closed by year end, validated against the plans' accepted claims. That is being tracked and is not yet claimed here.

Where the numbers come from

Build notes, the bot's run logs and database counts from September and October 2026.

Start with 20 minutes.

Bring one process that eats your team’s day. We’ll talk through what to measure first, and whether automation or AI fits it at all.