June 16, 2026
ScrubCheck: An NCCI claim scrubber that runs before submission
It checks a claim's procedure codes for NCCI bundling and unit cap edits before submission and explains each flag in plain language.
Billing staff usually spot denials by submitting the claim and then waiting to read the rejection on an EOB weeks later. ScrubCheck moves that check to the desk. Paste a claim’s procedure codes and it runs the same two checks a payer runs before paying. It then returns a verdict for each line with the reason for every flag. ScrubCheck is the companion to SourceFetch. SourceFetch explains what the policy says. ScrubCheck applies it to a specific claim.
The code is on GitHub. The design is described below.
System Design
ScrubCheck runs two deterministic checks against the CMS edit tables. PTP (procedure to procedure) catches code pairs that are bundled. One example is a comprehensive metabolic panel that already includes the basic panel billed beside it. MUE (medically unlikely edits) catches a single code billed above its daily unit cap. For each finding it reports the rule behind the decision. That rule is either the modifier indicator on a bundle or the MAI value that determines whether a unit cap overage can be appealed.

Deterministic Logic and Model Phrasing
ScrubCheck was built around one deliberate split. The checks themselves are pure table lookups with no model involved because “do these two codes bundle?” has a single correct answer. A model that is 98 percent right is still 100 percent wrong on the claims that matter. The optional explanation layer is the only part that calls a model. With a key configured it rewrites the facts the engine already computed into a sentence a biller can act on. The prompt forbids it from adding any code or rule that was not passed in. The model never decides whether two codes bundle. It only phrases what the deterministic core has already found.
Modifier Indicators
The most instructive part of this domain is that a bundle is not always a hard stop. A modifier indicator of 0 means the pair can never be unbundled. A modifier indicator of 1 means the pair can be unbundled if the second service was distinct and the correct modifier is appended. Encoding that difference and checking whether the claim already carries a bypass modifier is what turns a flag into advice the user can act on rather than an alert with no guidance.
Deployment and Hosting
The deterministic core would be safe to expose because it is only lookups. The explanation layer makes paid API calls and that invites abuse. For this reason ScrubCheck runs locally and the demo above stands in for a live link. The source is on GitHub and the video shows it running.
Receipts
- Data Built against Medicare's published NCCI edit tables (PTP and MUE).
- Engine Deterministic core runs with no model and no API key.
- Source github.com/rajeshnandipaty/scrubcheck
- Demo scrubcheck-…run.app