openemr_manual
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| openemr_manual [2026/03/13 20:14] – Add documentation for Claims tab enhancements, Payment Advice posting, Reconciliation tab, and X12 Tracker brad.sharp | openemr_manual [2026/03/16 23:13] (current) – Add documentation for Patient Balance, KPI Dashboard, AR Aging Report, Denial Analytics, Claim Status, Compatibility Check, and 7.x support brad.sharp | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== OpenEMR ClaimRev Connect Module ====== | ====== OpenEMR ClaimRev Connect Module ====== | ||
| - | The **ClaimRev Connect** module integrates ClaimRev' | + | The **ClaimRev Connect** module integrates ClaimRev' |
| ===== Table of Contents ===== | ===== Table of Contents ===== | ||
| Line 7: | Line 7: | ||
| - [[# | - [[# | ||
| - [[# | - [[# | ||
| + | - [[# | ||
| - [[#Claims Submission|Claims Submission]] | - [[#Claims Submission|Claims Submission]] | ||
| - [[#Claims Tab|Claims Tab]] | - [[#Claims Tab|Claims Tab]] | ||
| - [[#Payment Advice|Payment Advice]] | - [[#Payment Advice|Payment Advice]] | ||
| - [[# | - [[# | ||
| + | - [[#Patient Balance|Patient Balance]] | ||
| + | - [[#Claim Status|Claim Status]] | ||
| + | - [[#AR Aging Report|AR Aging Report]] | ||
| + | - [[#Denial Analytics|Denial Analytics]] | ||
| - [[# | - [[# | ||
| - [[#ERA Downloads|ERA Downloads]] | - [[#ERA Downloads|ERA Downloads]] | ||
| Line 16: | Line 21: | ||
| - [[# | - [[# | ||
| - [[# | - [[# | ||
| + | - [[# | ||
| - [[# | - [[# | ||
| - [[# | - [[# | ||
| Line 24: | Line 30: | ||
| ==== Requirements ==== | ==== Requirements ==== | ||
| - | * OpenEMR **8.0.0** or later | + | * OpenEMR **7.0.0** or later (8.x recommended) |
| * PHP **8.2** or later | * PHP **8.2** or later | ||
| * An active ClaimRev account with API credentials | * An active ClaimRev account with API credentials | ||
| Line 37: | Line 43: | ||
| | **Module File** | {{ : | | **Module File** | {{ : | ||
| - | | **Released** | March 12, 2026 | | + | | **Released** | March 16, 2026 | |
| | **Changelog** | See [[# | | **Changelog** | See [[# | ||
| Line 50: | Line 56: | ||
| - After upload completes, find **ClaimRev Connect** in the module list and click **Install**. | - After upload completes, find **ClaimRev Connect** in the module list and click **Install**. | ||
| - Once installed, click **Enable** to activate the module. | - Once installed, click **Enable** to activate the module. | ||
| + | - Navigate to **ClaimRev Connect > Setup** and click **Run Upgrade** to create the required database tables. | ||
| --- | --- | ||
| Line 72: | Line 79: | ||
| ===== Features ===== | ===== Features ===== | ||
| + | |||
| + | ==== Dashboard ==== | ||
| + | |||
| + | The **Home** tab is a KPI dashboard that gives billers a one-glance overview of the entire revenue cycle. It refreshes every time you open the module. | ||
| + | |||
| + | === Claim Pipeline === | ||
| + | * **Claims In Flight** — Encounters billed and awaiting payer response | ||
| + | * **Pending ERAs** — ERAs received from ClaimRev but not yet posted to OpenEMR | ||
| + | * **Rejected / Denied** — Claims denied in the last 90 days | ||
| + | * **Clean Claim Rate** — Percentage of claims accepted on first pass (90-day window). Color-coded: | ||
| + | |||
| + | === Accounts Receivable === | ||
| + | * **Total AR** — Sum of all outstanding balances, with the amount over 90 days shown below | ||
| + | * **Avg Days in AR** — Average age of outstanding balances. Color-coded: | ||
| + | * **Collections This Month** — Total payments received this month, with last month shown for comparison | ||
| + | * **Collections This Quarter** — Quarterly total | ||
| + | |||
| + | === Denials === | ||
| + | * **Denial Rate** — Percentage of claims denied vs. total processed (90-day window) | ||
| + | * **Top Adjustment Reasons** — The five most common adjustment reasons from posted ERAs | ||
| + | |||
| + | === Patient Responsibility === | ||
| + | * **Patient AR** — Total outstanding patient balances (encounters where insurance has responded) | ||
| + | * **Need Statements** — Encounters with a patient balance that have never had a statement sent | ||
| + | |||
| + | === Quick Actions === | ||
| + | Direct links to Search Claims, Payment Advice, Reconciliation, | ||
| ==== Claims Submission ==== | ==== Claims Submission ==== | ||
| Line 161: | Line 195: | ||
| In **batch mode**, reversals and pended claims are **not** auto-posted. Instead, they are separated into a "Needs Approval" | In **batch mode**, reversals and pended claims are **not** auto-posted. Instead, they are separated into a "Needs Approval" | ||
| + | |||
| + | == What Gets Posted == | ||
| + | When an ERA is posted, the following data flows into OpenEMR: | ||
| + | |||
| + | * **Payments** — Insurance payments are recorded in '' | ||
| + | * **Contractual Adjustments** — CO (Contractual Obligation) group adjustments reduce the balance | ||
| + | * **Patient Responsibility Memos** — PR (Patient Responsibility) adjustments are recorded as zero-dollar memos with labels like '' | ||
| + | * **Insurance Level Close** — The '' | ||
| === Test Mode === | === Test Mode === | ||
| Line 242: | Line 284: | ||
| * **ClaimRev Info** — Claim status, payer acceptance, worked status | * **ClaimRev Info** — Claim status, payer acceptance, worked status | ||
| * **ERA Info** — ERA classification, | * **ERA Info** — ERA classification, | ||
| + | |||
| + | ==== Patient Balance ==== | ||
| + | |||
| + | The **Patient Balance** tab surfaces encounters with outstanding patient responsibility after insurance has responded. It helps billers identify who owes money and manage the statement workflow. | ||
| + | |||
| + | === When Encounters Appear === | ||
| + | An encounter appears in the Patient Balance queue when: | ||
| + | * Insurance has responded ('' | ||
| + | * There is a remaining balance after all payments and adjustments (using the same formula as OpenEMR' | ||
| + | |||
| + | === Search Filters === | ||
| + | * **Service Date Range** — Filter by encounter date | ||
| + | * **Patient Name** — Search by patient first or last name | ||
| + | * **Payer** — Filter by primary insurance company | ||
| + | * **Min Amount** — Only show balances above a threshold (default: $0.01) | ||
| + | * **Statement Status** — Filter by: | ||
| + | * **All** — Show everything | ||
| + | * **Never Sent** — Encounters where no statement has been sent | ||
| + | * **Sent 1x** — Exactly one statement sent | ||
| + | * **Sent 2+** — Two or more statements sent | ||
| + | * **In Collection** — Encounters marked as in collection | ||
| + | |||
| + | === Summary Cards === | ||
| + | * **Total w/ Balance** — Number of encounters with outstanding patient balances | ||
| + | * **Total Amount** — Sum of all outstanding patient balances | ||
| + | * **Never Sent** — Encounters needing their first statement | ||
| + | * **Sent 1x / Sent 2+** — Statement frequency breakdown | ||
| + | * **In Collection** — Encounters flagged for collections | ||
| + | |||
| + | === Results Table === | ||
| + | |||
| + | | **Column** | **Description** | | ||
| + | | Patient | Patient name and date of birth | | ||
| + | | Encounter | Encounter number | | ||
| + | | Service Date | Date of the encounter | | ||
| + | | Payer | Primary insurance | | ||
| + | | Charges | Total billed charges | | ||
| + | | Ins Paid | Total insurance payments | | ||
| + | | Patient Owes | Outstanding balance (bold) | | ||
| + | | Stmts | Statement status badge: "Never Sent" (yellow), count (blue), or " | ||
| + | | Last Statement | Date of the most recent statement | | ||
| + | | Actions | Action buttons | | ||
| + | |||
| + | === Detail View === | ||
| + | Click any row to expand and see: | ||
| + | |||
| + | * **Patient Responsibility Breakdown** — Parsed from the ERA posting memos. Shows the breakdown of //why// the patient owes money: | ||
| + | * **Deductible** — Amount applied to the patient' | ||
| + | * **Coinsurance** — Patient' | ||
| + | * **Copay** — Copay amount | ||
| + | * **Pt Resp** — Other patient responsibility amounts | ||
| + | * **Per-Code Breakdown** — Each procedure code with its charge, adjustment, and remaining balance (from OpenEMR' | ||
| + | * **Statement History** — Log of all statements sent for this encounter, with date, method, amount, and who sent it | ||
| + | |||
| + | === Actions === | ||
| + | |||
| + | * **Generate Statement** (file icon) — Opens OpenEMR' | ||
| + | * **Mark Sent** (check icon) — Records that a statement was sent for this encounter. Logs the date, amount, and user to the statement history. | ||
| + | * **Add Note** (sticky note icon) — Add a free-text note to the encounter' | ||
| + | * **View Ledger** (book icon) — Opens the OpenEMR payment ledger for the encounter | ||
| + | * **Open Encounter** (folder icon) — Opens the encounter in OpenEMR | ||
| + | * **Generate via ClaimRev** (cloud icon, disabled) — Placeholder for future ClaimRev statement generation integration | ||
| + | |||
| + | === Statement Tracking === | ||
| + | The module tracks statements in its own '' | ||
| + | |||
| + | ==== Claim Status ==== | ||
| + | |||
| + | The **Claim Status** tab provides a work-queue style dashboard for tracking claims through their lifecycle, with real-time 276/277 status checks. | ||
| + | |||
| + | === Features === | ||
| + | * **Work Queue** — Claims sorted by status, showing which need attention | ||
| + | * **Timeline View** — Click any claim to see its full event history: submitted, accepted, rejected, ERA received, payment posted, manual notes | ||
| + | * **Real-Time Status Check** — Send a 276 status inquiry to the payer and get a 277 response showing current claim status | ||
| + | * **Batch Sync** — Sync multiple claims from ClaimRev at once to update local tracking data | ||
| + | * **Manual Notes** — Add notes to any claim' | ||
| + | * **Dashboard Stats** — Summary cards showing claims by status category | ||
| + | |||
| + | === Status Categories === | ||
| + | Claims are categorized into actionable groups: | ||
| + | * **Needs Attention** — Rejected, denied, stale (no update in 30+ days), or paid but not posted | ||
| + | * **In Progress** — Submitted, accepted by payer, awaiting adjudication | ||
| + | * **Completed** — Paid and posted, or worked and resolved | ||
| + | |||
| + | ==== AR Aging Report ==== | ||
| + | |||
| + | The **AR Aging Report** is found under the **Analytics** dropdown in the navigation bar. It provides a standard 30/ | ||
| + | |||
| + | === How to Use === | ||
| + | - Click **Analytics > AR Aging Report** in the navigation bar. | ||
| + | - Optionally filter by payer name, patient name, or minimum balance amount. | ||
| + | - Click **Run Report**. | ||
| + | |||
| + | === Summary Cards === | ||
| + | * **Total AR** — Sum of all outstanding balances | ||
| + | * **Aging Buckets** — Dollar amounts in each bucket: 0-30, 31-60, 61-90, 91-120, 120+ days | ||
| + | * **Payer Count** — Number of distinct payers with outstanding balances | ||
| + | * **Encounter Count** — Total encounters with balances | ||
| + | |||
| + | === Payer Aging Table === | ||
| + | Each row represents a payer and shows: | ||
| + | |||
| + | | **Column** | **Description** | | ||
| + | | Payer | Insurance company name (or " | ||
| + | | 0-30 | Balance for encounters 0-30 days old | | ||
| + | | 31-60 | Balance for encounters 31-60 days old | | ||
| + | | 61-90 | Balance for encounters 61-90 days old | | ||
| + | | 91-120 | Balance for encounters 91-120 days old (red text) | | ||
| + | | 120+ | Balance for encounters over 120 days old (bold red) | | ||
| + | | Total | Total AR for this payer | | ||
| + | | Enc | Number of encounters | | ||
| + | | Distribution | Visual bar showing the percentage of AR that is over 90 days old. Green = healthy, yellow = caution, red = problem. | | ||
| + | |||
| + | Payers are sorted by total AR descending — the biggest balances appear first. | ||
| + | |||
| + | === CSV Export === | ||
| + | Click **Export CSV** to download the full encounter-level aging data as a spreadsheet. The CSV includes patient name, encounter, service date, payer, age in days, aging bucket, balance, insurance level, and statement count. | ||
| + | |||
| + | ==== Denial Analytics ==== | ||
| + | |||
| + | The **Denial Analytics** page is found under the **Analytics** dropdown. It analyzes adjustment and denial patterns to help identify systemic issues with specific payers or procedure codes. | ||
| + | |||
| + | === How to Use === | ||
| + | - Click **Analytics > Denial Analytics** in the navigation bar. | ||
| + | - The report auto-runs on page load showing the last 12 months of data. | ||
| + | - Optionally filter by date range or payer name. | ||
| + | - Click **Analyze** to refresh. | ||
| + | |||
| + | === Summary Cards === | ||
| + | * **Total Adjustments** — Number of individual adjustment line items in the period | ||
| + | * **Total Adjusted** — Dollar amount of all adjustments | ||
| + | * **Encounters** — Number of distinct encounters affected | ||
| + | * **Payers** — Number of distinct payers | ||
| + | |||
| + | === Top Adjustment Reasons === | ||
| + | The left panel shows the 20 most common adjustment reasons, with: | ||
| + | * **Reason** — The adjustment memo as recorded during ERA posting (e.g., " | ||
| + | * **CARC Code** — The Claim Adjustment Reason Code number, if present | ||
| + | * **CARC Description** — Human-readable description (e.g., " | ||
| + | * **Count** — How many times this adjustment appeared | ||
| + | * **Amount** — Total dollar amount adjusted | ||
| + | * **Visual bar** — Relative frequency compared to the top reason | ||
| + | |||
| + | === By Payer === | ||
| + | The right panel shows adjustments grouped by payer: | ||
| + | * Which payers have the most adjustments | ||
| + | * Total adjusted amount per payer | ||
| + | * Number of encounters affected per payer | ||
| + | |||
| + | This helps identify payers that are consistently adjusting or denying claims. | ||
| + | |||
| + | === Monthly Trend === | ||
| + | Below the payer breakdown, a monthly trend table shows adjustment counts and amounts over time, with visual bars. This helps answer: "Are our denials getting better or worse?" | ||
| + | |||
| + | === CSV Export === | ||
| + | Click **Export CSV** to download the denial reason data as a spreadsheet for further analysis. | ||
| ==== Eligibility Verification ==== | ==== Eligibility Verification ==== | ||
| Line 292: | Line 490: | ||
| Portal notifications from ClaimRev are accessible within the module, keeping you informed of important updates about your claims and account. | Portal notifications from ClaimRev are accessible within the module, keeping you informed of important updates about your claims and account. | ||
| + | |||
| + | --- | ||
| + | |||
| + | ===== Compatibility ===== | ||
| + | |||
| + | ==== Supported OpenEMR Versions ==== | ||
| + | The ClaimRev Connect module supports: | ||
| + | * **OpenEMR 8.x** — Full native support | ||
| + | * **OpenEMR 7.x** — Supported via built-in compatibility shims | ||
| + | |||
| + | The module includes automatic compatibility shims for classes introduced in OpenEMR 8.x ('' | ||
| + | |||
| + | ==== Compatibility Check ==== | ||
| + | To verify the module works correctly on your OpenEMR version: | ||
| + | |||
| + | - Navigate to **ClaimRev Connect > Connectivity**. | ||
| + | - Click the **Run Compatibility Check** button. | ||
| + | - A diagnostic page shows the status of each critical component: | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * OpenEMR version and PHP version | ||
| + | |||
| + | If all checks show green, the module is fully operational. If any check shows "Using ClaimRev shim (7.x mode)", | ||
| --- | --- | ||
| Line 318: | Line 540: | ||
| * Review the error message in the posting results for specific details | * Review the error message in the posting results for specific details | ||
| * If using test mode, remember that mock data may not match real encounters | * If using test mode, remember that mock data may not match real encounters | ||
| + | |||
| + | ==== Patient Balance Shows No Results ==== | ||
| + | * Make sure ERAs have been posted — the Patient Balance queue only shows encounters where '' | ||
| + | * Navigate to **Setup** and click **Run Upgrade** to ensure the '' | ||
| + | * Try lowering the **Min Amount** filter or clearing all filters | ||
| + | |||
| + | ==== Database Upgrade Errors ==== | ||
| + | * If you see SQL errors when clicking **Run Upgrade** on the Setup tab, check the OpenEMR error log for the specific query that failed | ||
| + | * The upgrade process is idempotent — it skips tables and rows that already exist, so it is safe to run multiple times | ||
| ==== Module Not Appearing ==== | ==== Module Not Appearing ==== | ||
| Line 326: | Line 557: | ||
| ===== Changelog ===== | ===== Changelog ===== | ||
| + | |||
| + | == Version 2.1.0 (March 2026) == | ||
| + | * **KPI Dashboard** — Home tab replaced with a full revenue cycle dashboard showing claim pipeline, AR metrics, collections, | ||
| + | * **Patient Balance Queue** — New tab showing encounters with outstanding patient responsibility after insurance has responded. Includes PR breakdown (deductible/ | ||
| + | * **Claim Status Dashboard** — New work-queue tab with claim lifecycle timeline, real-time 276/277 status checks, batch sync, and manual notes | ||
| + | * **AR Aging Report** — New analytics page with 30/ | ||
| + | * **Denial Analytics** — New analytics page analyzing adjustment patterns by reason code, payer, and monthly trend with CARC code descriptions and CSV export | ||
| + | * **Analytics Dropdown** — AR Aging Report and Denial Analytics grouped under an " | ||
| + | * **OpenEMR 7.x Compatibility** — Built-in compatibility shims allow the module to run on OpenEMR 7.x without modification. A compatibility check tool is available under Connectivity. | ||
| + | * **Compatibility Check** — New diagnostic page (Connectivity > Run Compatibility Check) verifies all module dependencies resolve correctly | ||
| + | * **Statement Tracking Table** — New '' | ||
| == Version 2.0.0 == | == Version 2.0.0 == | ||
openemr_manual.txt · Last modified: by brad.sharp
