/pm/denials) is the central work queue for tracking and resolving claim denials received from payers.
Overview
The Denials page displays denial records from thepm_claim_denials table, each linked to a claim, a payer, and optional CARC/RARC codes. The list is sorted by payer appeal deadline (ascending, nulls last) and then by denial date (descending), so the most urgent items surface first. Two tabs organize the workspace: Queue shows the filterable, actionable denial list; Analytics provides aggregate views via the DenialAnalyticsTab component. Users with pm.denials.manage permission can add denials manually, select multiple rows for bulk assignment, and bulk-update selected denials to resubmitted status.
Each denial card shows the status badge, denial category, CARC code (if present), the linked claim number and payer name, denial date, denied amount, and the payer appeal deadline. Deadline dates are highlighted in a destructive color when past due, and in a warning color when within 7 days.
Who it’s for
Requires permission:PM_PERMISSIONS.DENIALS_VIEW (pm.denials.view).
Bulk actions (assign, resubmit, add denial) additionally require pm.denials.manage.
Before you start
- Ensure you have the
pm.denials.viewpermission. - Denials appear automatically when ERA processing records them, or they can be added manually via the Add Denial button (requires
pm.denials.manage).
Steps
Open the Denials queue
/pm/denials. The Queue tab is active by default, showing all denial records sorted by appeal deadline.Filter by status or category
New, In Review, Appealed, Resubmitted, Resolved, Written Off). Use the All Categories dropdown to filter by denial category (Medical Necessity, Coding, Authorization, Eligibility, Timely Filing, Duplicate, Other). Click Clear to remove active filters.Select denials for bulk action
pm.denials.manage see a checkbox on each card and a Select all control. Select one or more denials to reveal the Assign and Resubmit toolbar buttons.Bulk assign denials
BulkAssignDenialsDialog and assign the selected denials to a staff member.Bulk resubmit denials
resubmitted status in a single operation.View denial detail
/pm/denials/:denialId for the full detail view.Add a denial manually
pm.denials.manage) to open the CreateDenialDialog and enter denial details.View analytics
DenialAnalyticsTab.Key concepts
Denial statuses: values arenew, in_review, appealed, resubmitted, resolved, and written_off. Deadline color-coding is suppressed for resolved and written_off denials.
Denial categories: medical_necessity, coding, authorization, eligibility, timely_filing, duplicate, other.
CARC / RARC codes: and codes are stored on the denial record and displayed as monospace badges on each card.
Empty states
Empty states
- No filters active: “Denials from ERA processing will appear here, or add one manually.”
- Filters active: “Try adjusting your filters.”
Error state
Error state
Creating an appeal
The New Appeal page at/pm/appeals/new launches a full-page six-step wizard for building and submitting a denial appeal package. Requires pm.appeals.submit (PM_PERMISSIONS.APPEALS_SUBMIT).
An optional ?denialId= query parameter pre-fills the wizard from an existing denial record. The wizard uses DenialAppealWizard inside a WizardShell timeline layout. Step navigation activates once at least one step has been completed. On successful submission the user is redirected to /pm/denials; the exit action navigates back in browser history.
Before you start: your role must include pm.appeals.submit. A denial record in pm_denials should exist before opening the wizard; navigate from the Denials list or detail page to pre-populate ?denialId=. The payer associated with the denial should be configured in pm_payers.
Step 1 — Denial Intake
?denialId= was supplied, the denial ID field is pre-filled.Step 2 — Deadline & Strategy
payerAppealDeadlineDays and the receipt date) and select the appeal strategy.Step 3 — Evidence
onChange as you work.Step 4 — Appeal Letter
denialCategory and payerId from the Intake step to support template selection.Step 5 — Submission Path
Step 6 — Review & Submit
/pm/denials.payerAppealDeadlineDays plus the denial receipt date entered in step 1. Displayed in steps 2 and 6.
?denialId query parameter — When present, pre-populates the Intake step with the referenced denial’s ID so the wizard can be launched directly from the Denials list or detail page.
Timeline layout — The WizardShell renders step progress as a vertical timeline on the side; step titles and icons are shown for all six steps simultaneously, with the current step highlighted.
Exit behavior — Clicking the exit control calls onExit, which navigates back one step in browser history (navigate(-1)). Unsaved wizard data is lost on exit.
Detail view
The Denial screen displays a single claim denial record and provides status management and appeal creation at route/pm/denials/:denialId.
Overview
The page loads a denial viauseClaimDenialDetail. The Denial Details card shows denial date, category (from DENIAL_CATEGORY_LABELS), denied amount, CARC code with description (from joined pm_carc_codes), RARC code with description (from joined pm_rarc_codes), and denial reason. The appeal deadline field highlights in warning color if within 7 days and in destructive color if past due. Status-action buttons (In Review, Resubmitted, Resolved, Write Off) are gated by pm.denials.manage. The Appeals card lists linked appeal submissions with status badges (from APPEAL_STATUS_LABELS), appeal level, and created/submitted dates. Users with pm.appeals.submit can launch the Appeal Wizard (navigates to /pm/appeals/new?denialId=...) or open a Quick Draft via CreateAppealSheet.
Who it’s for
Requires permissionPM_PERMISSIONS.DENIALS_VIEW (enforced via RequirePermission in the route definition). Managing denials requires pm.denials.manage. Submitting appeals requires pm.appeals.submit.
Before you start
- You need
pm.denials.viewto access this page. - Navigate here from the Denials list (
/pm/denials).
Steps
Open a denial record
/pm/denials), click a row to open the denial detail page.Review denial details
Update status (pm.denials.manage)
Create an appeal (pm.appeals.submit)
Submit a draft appeal (pm.appeals.submit)
Key concepts
Related
Practice Management
Governance & parity
Documentation sources
Documentation sources
- src/routes/pm.tsx
- src/cores/pm/pages/DenialsListPage.tsx
- src/cores/pm/hooks/useClaimDenialList.ts
- src/cores/pm/hooks/useClaimDenialMutation.ts
- src/cores/pm/types/denials.ts
- src/cores/pm/pages/DenialAppealWizardPage.tsx
- src/cores/pm/components/wizards/denial-appeal/DenialAppealWizard.tsx
- src/platform/permissions/constants.ts
- src/cores/pm/pages/DenialDetailPage.tsx
- src/cores/pm/hooks/useClaimDenialDetail.ts
- src/cores/pm/hooks/useAppealSubmissionList.ts
- src/cores/pm/hooks/useAppealSubmissionMutation.ts