Skip to main content

Auto-correction console

Outcome

You understand which CARCs the engine handles, you can review each attempt, you know when to trigger a retry, and you know when to override an engine SKIPPED decision.

Prerequisites

ScopeWhat it lets you do
billing.denial.readView the tab
billing.auto-correction.runTrigger / force-retry

How the engine works

Each handler is named uppercase (e.g. CO4ModifierHandler); each attempt writes a row in auto_correction_attempt. The engine respects partial-unique idempotency on (denial_id, handler_name) where status ≠ FAILED — meaning a SUCCESS cannot be retried by simple trigger; you'd have to explicitly force-retry.

The handler registry (current)

CARCHandlerWhat it does
CO-4CO4ModifierHandlerRe-runs ModifierInjector; if changes are needed, reverses the original and rebuilds.
CO-16Co16MissingInfoHandlerMaps the RARC to a missing-info hint; if auth-related, attaches auth. Rebuilds.
CO-18Co18DuplicateHandlerMarks the duplicate via claim_relationship rel type DUPLICATE. No rebill.
CO-29Co29TimelyFilingHandlerGenerates a timely-filing-exception envelope where rules allow; otherwise SKIPPED.
CO-97Co97BundlingHandlerRe-codes per CCI rules and rebuilds.
CO-197Co197AuthHandlerSearches for an active auth; attaches and rebuilds.
PR-1 / 2 / 3PrPatientHandlerRoutes to patient AR; no rebill.

The engine's success rate widget on the dashboard surfaces by-handler counts: see 8.1 — Billing dashboards.

The Auto-correction tab

Each denial's tab shows every attempt:

ColumnMeaning
HandlerName of the handler.
StatusSUCCESS, FAILED, SKIPPED.
Started / FinishedUTC timestamps.
OutcomePlain-English summary.
Linked rebillIf SUCCESS, the resulting child claim.
Skip reasonIf SKIPPED, why.

When to trigger manually

The engine runs automatically when a denial arrives. Trigger manually when:

  • A handler was added after the denial existed.
  • An admin updated a rule that the handler depends on (e.g. modifier injection rule); you want to re-run.
  • The SKIPPED reason is now obsolete (e.g. an auth was attached after CO197 skipped for "no active auth").

Steps — manual trigger

  1. Open the denial → Auto-correction tab. Read the prior outcomes.

  2. Click Run handlers. The engine queues each registered handler for the denial's CARC. Watch the page; rows appear within 30 seconds.

  3. Review outcomes:

    • SUCCESS → linked rebill ID. Click through to confirm submission.
    • FAILED → read the reason. Often retryable after fixing root cause.
    • SKIPPED → read the skip reason. Often legitimate; sometimes the reason is stale.

Steps — force-retry an existing SUCCESS

Use only when you have a clear cause (e.g. the rebill was wrong, you need a different fix path).

  1. Click Force-retry on the prior SUCCESS row.

  2. Provide a reason (required).

  3. Confirm. The platform writes a new attempt; the prior SUCCESS is preserved (audit trail). The new attempt is the "current" one.

Force-retry is supervisor-grade in many tenants — your tenant may gate it behind billing.auto-correction.override.

Bulk run

Across the worklist:

  1. Filter denials to a CARC + date range.

  2. Bulk select, click Trigger auto-correction.

  3. The engine runs each registered handler on each selected denial, respecting per-row idempotency.

Validation

CheckExpected
Each SUCCESS row links to a child claim with parent_claim_id setYes.
Idempotency prevents duplicate rebills on retryYes; partial-unique on (denial_id, handler_name) where status ≠ FAILED.
SKIPPED rows record the reasonYes.
Force-retry is gated by scopeYes; without it the button is hidden.

Troubleshooting

SymptomCauseFix
Engine doesn't run for a CARCNo handler registeredManual triage; ask admin to consider adding a handler.
SUCCESS shows but no rebill on RelationshipsRace condition during rebill buildRefresh; if persistent, ping support.
Attempt count grows without progressHandler keeps running into the same upstream issueStop bulk-triggering; read the reason; fix upstream.
Force-retry blockedTenant gateAsk supervisor; reason note required.

Where to next