User Tools

Site Tools


openemr_manual

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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.sharpopenemr_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's clearinghouse services directly into OpenEMR, giving practices access to claims processing, eligibility verification, ERA downloads, and more without leaving their EHR.+The **ClaimRev Connect** module integrates ClaimRev's clearinghouse services directly into OpenEMR, giving practices access to claims processing, eligibility verification, ERA downloads, payment posting, reconciliation, patient balance management, and analytics — all without leaving their EHR.
  
 ===== Table of Contents ===== ===== Table of Contents =====
Line 7: Line 7:
   - [[#Configuration|Configuration]]   - [[#Configuration|Configuration]]
   - [[#Features|Features]]   - [[#Features|Features]]
 +    - [[#Dashboard|Dashboard (Home)]]
     - [[#Claims Submission|Claims Submission]]     - [[#Claims Submission|Claims Submission]]
     - [[#Claims Tab|Claims Tab]]     - [[#Claims Tab|Claims Tab]]
     - [[#Payment Advice|Payment Advice]]     - [[#Payment Advice|Payment Advice]]
     - [[#Reconciliation|Reconciliation]]     - [[#Reconciliation|Reconciliation]]
 +    - [[#Patient Balance|Patient Balance]]
 +    - [[#Claim Status|Claim Status]]
 +    - [[#AR Aging Report|AR Aging Report]]
 +    - [[#Denial Analytics|Denial Analytics]]
     - [[#Eligibility Verification|Eligibility Verification]]     - [[#Eligibility Verification|Eligibility Verification]]
     - [[#ERA Downloads|ERA Downloads]]     - [[#ERA Downloads|ERA Downloads]]
Line 16: Line 21:
     - [[#Appointments|Appointments]]     - [[#Appointments|Appointments]]
     - [[#Notifications|Notifications]]     - [[#Notifications|Notifications]]
 +  - [[#Compatibility|Compatibility]]
   - [[#Troubleshooting|Troubleshooting]]   - [[#Troubleshooting|Troubleshooting]]
   - [[#Support|Support]]   - [[#Support|Support]]
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** | {{ :oe-module-claimrev-connect.zip | OpenEMR Module}} | | **Module File** | {{ :oe-module-claimrev-connect.zip | OpenEMR Module}} |
-| **Released** | March 12, 2026 |+| **Released** | March 16, 2026 |
 | **Changelog** | See [[#Changelog|Changelog]] below | | **Changelog** | See [[#Changelog|Changelog]] below |
  
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: green (≥95%), yellow (90-94%), red (<90%)
 +
 +=== 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: green (≤35 days), yellow (36-50), red (>50)
 +  * **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, Claim Status, and Denial Analytics.
  
 ==== 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" section in the batch results, where you can review each one individually and click **Approve & Post** to post them one at a time. In **batch mode**, reversals and pended claims are **not** auto-posted. Instead, they are separated into a "Needs Approval" section in the batch results, where you can review each one individually and click **Approve & Post** to post them one at a time.
 +
 +== What Gets Posted ==
 +When an ERA is posted, the following data flows into OpenEMR:
 +
 +  * **Payments** — Insurance payments are recorded in ''ar_session'' and ''ar_activity''
 +  * **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 ''Ins1 dedbl: 150.00'', ''Ins1 coins: 45.00'', ''Ins1 copay: 25.00''. These memos are later parsed by the Patient Balance screen to show the PR breakdown.
 +  * **Insurance Level Close** — The ''last_level_closed'' flag on the encounter is updated, indicating insurance has finished processing
  
 === 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, payer paid amount   * **ERA Info** — ERA classification, payer paid amount
 +
 +==== 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 (''last_level_closed >= 1'' on the encounter)
 +  * There is a remaining balance after all payments and adjustments (using the same formula as OpenEMR's collections report: charges + drug sales - payments - adjustments)
 +
 +=== 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 "Collections" (red) |
 +| 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's deductible
 +    * **Coinsurance** — Patient's coinsurance portion
 +    * **Copay** — Copay amount
 +    * **Pt Resp** — Other patient responsibility amounts
 +  * **Per-Code Breakdown** — Each procedure code with its charge, adjustment, and remaining balance (from OpenEMR's InvoiceSummary)
 +  * **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's built-in statement tool (sl_eob_search) where you can print or email patient statements
 +  * **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's statement history
 +  * **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 ''mod_claimrev_patient_statements'' table. The queue shows whichever count is higher: the module's own count or OpenEMR's native ''stmt_count'' on the encounter. This means statements sent through either system are reflected.
 +
 +==== 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's timeline for team communication
 +  * **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/60/90/120 day aging breakdown of accounts receivable, grouped by payer.
 +
 +=== 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 "Self-Pay") |
 +| 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., "Adjust code 45")
 +  * **CARC Code** — The Claim Adjustment Reason Code number, if present
 +  * **CARC Description** — Human-readable description (e.g., "Charge exceeds fee schedule/max allowable"). The module includes descriptions for 30+ common CARC codes.
 +  * **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 (''OEGlobalsBag'' and ''ServiceContainer''). On OpenEMR 7.x, these shims provide equivalent functionality by wrapping ''$GLOBALS'' and ''CryptoGen'' directly. On 8.x, the shims are never loaded — the native classes are used.
 +
 +==== 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:
 +    * ''OEGlobalsBag'' — Whether the native class or shim is in use
 +    * ''ServiceContainer'' — Whether the native class or shim is in use
 +    * ''GlobalConfig'' and ''Bootstrap'' — Whether they instantiate successfully
 +    * 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)", the module is running with compatibility shims — all features work normally.
  
 --- ---
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 ''last_level_closed >= 1'' (insurance has responded)
 +  * Navigate to **Setup** and click **Run Upgrade** to ensure the ''mod_claimrev_patient_statements'' table exists
 +  * 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, denial rates, and patient responsibility at a glance
 +  * **Patient Balance Queue** — New tab showing encounters with outstanding patient responsibility after insurance has responded. Includes PR breakdown (deductible/coinsurance/copay parsed from ERA memos), per-code detail, statement tracking, and actions to generate statements or mark as sent
 +  * **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/60/90/120 day aging buckets grouped by payer, distribution visualization, and CSV export
 +  * **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 "Analytics" dropdown in the navigation bar
 +  * **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 ''mod_claimrev_patient_statements'' database table for tracking statement history per encounter
  
 == Version 2.0.0 == == Version 2.0.0 ==
openemr_manual.1773432848.txt.gz · Last modified: by brad.sharp

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki