> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encoreos.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Revenue Cycle

> Real-time RCM KPI dashboard with A/R aging, denial analysis, payer mix, and provider productivity at /pm/revenue.

The Revenue Cycle Dashboard is the primary analytics hub for revenue cycle management, accessible at the route `/pm/revenue`.

## Overview

The Revenue Cycle Dashboard aggregates live data from `pm_claims`, `pm_payments`, and `pm_charges` into eight KPI cards: Days in A/R, Clean Claim Rate, Denial Rate, Net Collection Rate, First-Pass Resolution Rate, Charge Lag, Claim Lag, and Payment Lag. Above the KPI cards a contract expiration banner appears automatically when active payer contracts expire within 90 days (critical alert for within 30 days).

Below the KPI grid, six analytics tabs provide deeper views: **A/R Aging** (outstanding balances by bucket with bar chart), **Denial Analysis** (total denials, appeals count, and top denial reasons by frequency), **Payer Mix** (revenue breakdown by payer up to top 5), **Provider Productivity** (encounters, charges, and collections per provider up to top 10), **Service Line P\&L** (charges, collections, and margin per service line), and **Contracts** (active contract count and contracts expiring within 90 days). A charge reconciliation summary section from `ChargeReconDashboardSection` is rendered above the KPI cards.

## Who it's for

Requires permission: `pm.rcm_dashboard.view`

## Before you start

* You must hold `pm.rcm_dashboard.view` to access this page.
* KPI calculations require data in `pm_claims`, `pm_payments`, and `pm_charges` for the current organization; empty tables result in zero values across all metrics.

## Steps

<Steps>
  <Step title="Navigate to the Revenue Cycle Dashboard">
    Go to `/pm/revenue`. Eight KPI cards load immediately; each shows a trend indicator (up or down arrow) based on whether the value meets the configured threshold.
  </Step>

  <Step title="Review KPI cards">
    The top section displays Days in A/R, Clean Claim Rate, Denial Rate, Net Collection Rate, First-Pass Resolution Rate, Charge Lag, Claim Lag, and Payment Lag. Values are computed in real time from source tables via `useRcmKpis` (5-minute stale time).
  </Step>

  <Step title="Check contract expiration alerts">
    If any active payer contracts expire within 90 days, a banner appears above the KPI cards. Contracts expiring within 30 days trigger a destructive (red) alert variant.
  </Step>

  <Step title="Explore analytics tabs">
    Use the scrollable tabs below the KPI grid to view A/R Aging, Denial Analysis, Payer Mix, Provider Productivity, Service Line P\&L, or Contract Analytics in detail.
  </Step>

  <Step title="Review A/R aging buckets">
    The A/R Aging tab shows outstanding balances per aging bucket with a proportional progress bar and a total outstanding row. Data comes from `useArAging`.
  </Step>

  <Step title="Analyze denials">
    The Denial Analysis tab shows total denial count, number appealed, and a ranked list of top denial reasons with counts and percentages. Data comes from `useDenialAnalysis`.
  </Step>
</Steps>

## Key concepts

<AccordionGroup>
  <Accordion title="KPI definitions (code-derived)">
    * **Days in A/R:** Total outstanding A/R on open (submitted/accepted) claims divided by average daily charges.
    * **Clean Claim Rate:** Percentage of first-submission claims accepted, paid, or partially paid without resubmission.
    * **Denial Rate:** Percentage of submitted claims with status `denied`.
    * **Net Collection Rate:** Payments collected divided by (total charges minus contractual adjustments from `pm_claims.adjustment_amount`).
    * **First-Pass Resolution Rate:** Percentage of first-submission claims that reached paid or partial\_payment status.
    * **Charge / Claim / Payment Lag:** Average days between service date and charge creation, charge creation and claim submission, and claim submission and adjudication respectively.
  </Accordion>

  <Accordion title="Empty / zero states">
    * KPI cards show "0" values when no claims, payments, or charges exist for the organization.
    * Payer Mix shows "No payment data available" when no payment rows exist.
    * Provider Productivity shows "No encounter data available" when no productivity records exist.
    * Service Line shows "No service line data available" when no lines exist.
    * Contracts shows "No contracts configured yet" when no payer contracts are saved.
  </Accordion>
</AccordionGroup>

<Tooltip tip="Accounts Receivable — money owed to the organization for services rendered but not yet collected.">A/R</Tooltip> aging buckets are defined by the `useArAging` hook. <Tooltip tip="The percentage of claims paid on first submission without correction or resubmission.">Clean Claim Rate</Tooltip> and <Tooltip tip="Key Performance Indicator">KPI</Tooltip> thresholds are applied in the component to determine trend direction.

## Related

<Columns cols={2}>
  <Card title="Practice Management" icon="briefcase" href="/pm/overview">
    Overview of the Practice Management core.
  </Card>

  <Card title="Governance & parity" icon="scale-balanced" href="/governance/index">
    Documentation coverage and governance.
  </Card>
</Columns>

<Note>
  This page documents shipped product behavior. It is not medical, legal, or
  billing advice. Verify against your organization's policies and applicable
  regulations before using it for clinical, compliance, or billing decisions.
  Protected health information (PHI) shown in the product is governed by your
  tenant's access controls and is never exposed in this documentation.
</Note>

<Accordion title="Documentation sources">
  * src/routes/pm.tsx
  * src/cores/pm/pages/RevenueCycleDashboardPage.tsx
  * src/cores/pm/hooks/useRcmKpis.ts
  * src/platform/permissions/constants.ts
</Accordion>
