Skip to main content

Trigger or review auto-corrections

Outcome

You know which denials the platform fixes automatically, you can confirm an attempt's outcome, and you can manually trigger or override the engine when the default behavior doesn't fit a specific case.

Prerequisites

ScopeWhat it lets you do
billing.denial.readView Auto-correction tab
billing.auto-correction.runTrigger the engine; force-retry a SUCCESS

Familiarity with denials triage (2.2) and CARC/RARC codes (8.3).

Built-in handlers

CARCHandlerWhat it does
CO-4CO4ModifierHandlerAdds the missing modifier per modifier injection rules; rebills.
CO-16CO16MissingInfoHandlerReads the RARC for the missing item; attaches the relevant auth or hint; rebills.
CO-18CO18DuplicateHandlerConfirms the duplicate via claim_relationship; closes the duplicate denial.
CO-29CO29TimelyFilingHandlerFiles a late-filing appeal where contractual rules permit; otherwise marks for manual write-off.
CO-97CO97BundleHandlerRe-codes the bundled line per CCI; rebills.
CO-197CO16MissingInfoHandlerRe-runs with auth attached.
PR-1 / PR-2 / PR-3(posted automatically by ERA)Routed to patient AR; not denial-engine cases.

The handler registry is configured at createDenialModule boot time; the list above is what ships in the platform.

Where to see attempts

/denials/:idAuto-correction tab. Each attempt is one row:

ColumnMeaning
WhenTimestamp of the attempt.
HandlerWhich handler ran.
StatusSUCCESS, FAILED, SKIPPED.
Replacement claimLink to the rebilled claim, if a rebill was generated.
NotesEngine output — why it skipped, or which fix was applied.

A denial can have multiple rows if the engine has retried, but only one non-FAILED attempt per (denial, handler) — the partial-unique index prevents a duplicate SUCCESS.

Steps to manually trigger

  1. Open the denial at /denials/:id.

  2. Open the Auto-correction tab. If the engine hasn't run, click Run handlers. If a FAILED attempt is visible, click Retry.

  3. Force-retry past a SUCCESS with the Force retry button. This overrides the partial-unique index and runs the handler again — useful if a payer reversed their decision and you want to retry the chain. Audit logged with the force flag.

  4. Override the suggested handler with the dropdown next to Run. Pick a specific handler from the list. The engine runs only that handler against the denial; if its preconditions are not met, it returns SKIPPED.

Steps to override or disable

If a handler is producing bad rebills for a specific payer:

  1. Open Configuration → Rules and pick POST_REMITTANCE for the kind.

  2. Find the rule set scoped to that payer. Add or edit a denial_classifier rule that returns SKIP for the CARC + handler combo you want to suppress.

  3. Submit / approve / publish. Future denials matching the scope skip the offending handler; existing attempts are not retroactively undone.

Auto-correction success rate

The dashboard panel Auto-correction success rate (Reporting category) aggregates mv_auto_correction_success_rate and shows the percentage of denials resolved without manual intervention, broken out by handler.

A handler dropping below 70% is a signal that something has changed at the payer — usually a companion guide update — and the handler logic needs review.

Validation

CheckExpected
Triggered attempt completes within 30sYes — handlers are synchronous.
SUCCESS produces a child claimYes; visible in the Replacement claim column and on the denial's Original claim → Relationships tab.
FAILED attempt records reason in NotesYes.
Force retry past SUCCESS auditedYes — the audit row carries force=true.

Troubleshooting

SymptomCauseFix
Run handlers returns "no handler matched"The CARC has no registered handlerThis denial requires manual handling — appeal or write-off.
Handler returns SKIPPED with "missing precondition"The denial lacks data the handler needs (auth, alternate modifier, patient liability split)Manually supply the missing data on the original claim, then retry.
Same denial keeps being retriedA scheduled retry job is firingOpen the Auto-correction tab; click Cancel retries to stop the loop.
Replacement claim links back to a different parentThe chain has multiple correctionsUse Original claim → Relationships tab to walk the full lineage.

Next

2.4 — Post an ERA / receivables walkthrough