Table of Contents

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, payment posting, reconciliation, patient balance management, and analytics — all without leaving their EHR.

Table of Contents

Download and Installation

Requirements

Choose Your Install Method

The ClaimRev Connect module is published on Packagist as claimrevolution/oe-module-claimrev-connect. Starting with v2.1.3 a single build runs on both OpenEMR 7.x and OpenEMR 8.x — runtime compatibility shims in src/Compat/ activate only when the host core lacks the newer APIs. Pick the install method that matches your environment.

Current Version: 2.1.3

If you have CLI access to your OpenEMR install:

cd /path/to/openemr
composer require claimrevolution/oe-module-claimrev-connect:^2.1
sudo systemctl reload php-fpm   # or restart Apache

Composer downloads the latest v2.1.x release, drops it into interface/modules/custom_modules/oe-module-claimrev-connect/, and updates the autoloader. Continue with Activation below.

To update the module later:

composer update claimrevolution/oe-module-claimrev-connect
sudo systemctl reload php-fpm

Method 2: Manual File Drop (Shared Hosting / No CLI)

OpenEMR's Manage Modules page does not have a zip-upload feature for custom modules — it scans interface/modules/custom_modules/ on every page load and lists whatever directories it finds. For installs without CLI access (shared hosting, restricted environments), drop the files into place via SFTP/FTP:

  1. Download the current release zip from the GitHub releases page.
  2. Unzip it locally. You should see a folder named oe-module-claimrev-connect/ containing composer.json, info.txt, src/, public/, templates/, etc.
  3. Connect to your OpenEMR server with SFTP, FTP, or your hosting control panel's file manager.
  4. Upload the entire oe-module-claimrev-connect/ folder into interface/modules/custom_modules/ so the resulting path is interface/modules/custom_modules/oe-module-claimrev-connect/composer.json (and so on for the other files).
  5. Continue with Activation below — OpenEMR will see the new directory on the next page load.

Note: Updates with this method are the same flow — replace the contents of the oe-module-claimrev-connect/ folder with the contents of the new zip. Method 1 (Composer) is much easier if you have any way to run shell commands on the server.

Method 3: Release Tarball

If you installed OpenEMR via an official release tarball that already bundles claimrevolution/oe-module-claimrev-connect in its composer.json, the module arrives pre-extracted at interface/modules/custom_modules/oe-module-claimrev-connect/. No additional download step.

Activation (all methods)

  1. In OpenEMR, navigate to Modules > Manage Modules.
  2. Find ClaimRev Connect in the module list. Click Install, then Enable.
  3. Navigate to ClaimRev Connect > Setup and click Run Upgrade to create the required database tables.

Note: If you do not yet have a ClaimRev account, visit claimrev.com or contact us at sales@claimrev.com to get started.

Configuration

After enabling the module, you need to configure your ClaimRev API credentials.

  1. Navigate to Admin > Config > Connectors.
  2. Scroll to the ClaimRev Settings section.
  3. Enter the following values provided by ClaimRev:
    • Client ID - Your ClaimRev API client ID
    • Client Secret - Your ClaimRev API client secret
    • API Server - The ClaimRev API endpoint URL
    • Client Authority - The OAuth token endpoint
    • Client Scope - The API scope (typically provided by ClaimRev)
  4. Click Save to store your settings.

Tip: To verify your connection, navigate to the ClaimRev module and click the Connectivity tab for a connection status check. Contact ClaimRev support if you need your API credentials.

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

Accounts Receivable

Denials

Patient Responsibility

Quick Actions

Direct links to Search Claims, Payment Advice, Reconciliation, Claim Status, and Denial Analytics.

Claims Submission

The module enables electronic claim submission (837P/837I) to payers through ClaimRev.

Claims Tab

The Claims tab provides a searchable view of claims submitted through ClaimRev, with integrated OpenEMR status tracking and actions.

Search and Filtering

Search for claims using any combination of:

OpenEMR Status Integration

Each claim row displays the OpenEMR claim status alongside the ClaimRev status. This lets you see at a glance whether the two systems agree. OpenEMR statuses include:

Status Badge Color Meaning
Not Billed Gray Claim has not been sent
Unbilled Light Claim is queued but not yet sent
Billed Green Claim has been submitted
Crossover Blue Crossover claim submitted
Denied Red Claim was denied

Actions

Each claim row provides action buttons:

Detail View

Click on any claim row to expand it and see:

Payment Advice

The Payment Advice tab allows you to search for ERA (835) payment advice records from ClaimRev and post them directly into OpenEMR's payment system.

Searching for Payment Advice

  1. Navigate to the Payment Advice tab.
  2. Enter search criteria (date range, payer, trace number, etc.).
  3. Click Search to retrieve matching payment advice records.
  4. Results show the payer name, check/trace number, payment date, total paid amount, and claim count.

Previewing a Payment Advice

Click on a payment advice record to expand it. Each claim line within the ERA shows:

Posting to OpenEMR

Payment advice records can be posted to OpenEMR to record payments, adjustments, and denials.

Single Claim Posting
  1. Expand a payment advice record to see its claim lines.
  2. Click Preview on an individual claim to see exactly what will be posted.
  3. The preview shows the session details, payment amounts, and adjustment codes that will be created.
  4. Click Post to OpenEMR to post the payment.
  5. After posting, the claim line is marked with a green checkmark.
Batch Posting
  1. Click Batch Post All to post all eligible claims in a payment advice at once.
  2. The system processes each claim and shows a results summary with:
    • Posted — Successfully posted claims (green)
    • Skipped — Claims that were already posted or could not be matched (gray)
    • Errors — Claims that encountered an error during posting (red)
    • Needs Approval — Reversals and pended claims that require individual review (yellow, see below)
Reversals and Pended Claims

Some claim statuses require special attention before posting:

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:

Test Mode

When the Enable Test Mode global is on (Admin > Globals > ClaimRev Connect), the Payment Advice, ERA, and Reconciliation pages return mock data generated from local OpenEMR billing rows. Useful for demos, training, and posting-workflow rehearsal without hitting the live ClaimRev API.

Important: Only enable the global in development or training environments. The global is the only switch — there is no longer a per-search checkbox.

Reconciliation

The Reconciliation tab provides a side-by-side comparison of OpenEMR encounters against their status in ClaimRev, helping you identify claims that may need attention.

Purpose

Reconciliation answers questions like:

How to Use

  1. Navigate to the Reconciliation tab.
  2. Set your search filters:
    • Date Range — Filter encounters by service date
    • OpenEMR Status — Choose from:
      • Billed — Encounters marked as billed or crossover (default)
      • Denied — Encounters marked as denied
      • All Billed — All encounters that have entered the billing process
    • Patient Name — Filter by first and/or last name
    • Payer Name — Filter by insurance company
    • Discrepancies Only — Show only encounters where the OE and ClaimRev statuses don't match
  3. Click Search to run the reconciliation.

Summary Cards

At the top of the results, four summary cards show:

Results Table

The comparison table shows each encounter with columns for:

Column Description
Patient Patient name
Encounter Encounter number (click to expand details)
Service Date Date of the encounter
Payer Insurance company name
Charges Total billed charges
OE Status Current OpenEMR claim status (color-coded badge)
CR Status ClaimRev claim status
ERA ERA classification from ClaimRev (e.g., Paid, Denied)
CR Paid Amount paid per ClaimRev
Issue Description of the discrepancy, if any
Actions Available action buttons

Discrepancy Detection

The system automatically detects five types of discrepancies:

Discrepancy Severity Meaning
Billed in OpenEMR but not found in ClaimRev Danger (red) The claim may not have been submitted successfully
Rejected in ClaimRev but still Billed in OpenEMR Danger (red) ClaimRev shows the claim was rejected, but OpenEMR hasn't been updated
Denied in OpenEMR but Accepted in ClaimRev Warning (yellow) OpenEMR shows denied, but ClaimRev shows the payer accepted the claim
ERA shows paid but no payment posted in OpenEMR Warning (yellow) A payment was received but hasn't been recorded in OpenEMR
ERA shows denied but OpenEMR not marked as denied Warning (yellow) The ERA indicates a denial that OpenEMR doesn't reflect

Rows are color-coded: red for danger-level discrepancies, yellow for warnings, and gray for encounters not found in ClaimRev.

Actions

Each row provides action buttons depending on the situation:

Detail View

Click on any row to expand a detailed comparison showing:

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:

Search Filters

Summary Cards

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:

Actions

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

Status Categories

Claims are categorized into actionable groups:

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

  1. Click Analytics > AR Aging Report in the navigation bar.
  2. Optionally filter by payer name, patient name, or minimum balance amount.
  3. Click Run Report.

Summary Cards

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

  1. Click Analytics > Denial Analytics in the navigation bar.
  2. The report auto-runs on page load showing the last 12 months of data.
  3. Optionally filter by date range or payer name.
  4. Click Analyze to refresh.

Summary Cards

Top Adjustment Reasons

The left panel shows the 20 most common adjustment reasons, with:

By Payer

The right panel shows adjustments grouped by 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.

Recoupment Report

The Recoupment Report is found under the Analytics dropdown. It identifies claims where payments were reversed (recouped) — typically from Medicare reprocessing or payer take-backs — and tracks whether a reprocessed payment has been received.

Purpose

When Medicare or another payer reprocesses a claim, they often reverse the original payment (a “recoupment”) and then issue a new payment at the adjusted amount. This report answers:

How to Use

  1. Click Analytics > Recoupment Report in the navigation bar.
  2. Set your filters:
    • Date Range — Filter recoupments by post date (defaults to the last 6 months)
    • Payer — Filter by payer name
    • Patient — Filter by patient name
  3. Click Run Report.

Summary Cards

Results Table

Column Description
Patient Patient name and date of birth
Encounter Encounter number
Service Date Date of the encounter
Payer Insurance company name
Code Procedure code affected
Original Paid Total of payments received before the recoupment
Recouped Amount taken back (shown in red)
Reprocessed Amount received after recoupment (green), or “—” if still pending
Net Impact Gain or loss from the recoupment cycle (bold, color-coded)
Balance Current encounter balance
Status Reprocessed (green badge) or Pending (yellow badge)

Rows with a “Pending” status are highlighted with a yellow background to draw attention to claims still awaiting reprocessed payment.

Detail View

Click any row to expand a three-column detail panel:

How It Works

The report queries ar_activity for records with a negative pay_amount (the recoupment). For each recoupment found, it then looks up:

  1. All positive payments on the same encounter posted before the recoupment date → classified as “original” payments
  2. All positive payments posted after the recoupment date → classified as “reprocessed” payments

This classification helps billers understand the full payment lifecycle for reprocessed claims.

CSV Export

Click Export CSV to download the report as a spreadsheet. The CSV includes: Patient, Encounter, Service Date, Payer, Code, Original Paid, Recoup Amount, Recoup Date, Reference, Reprocessed, Net Impact, Current Balance, and Status.

Eligibility Verification

Real-time eligibility verification is available from the patient demographics page.

Available Products

Note: Eligibility, Coverage Discovery, and MBI Finder are mutually exclusive; only one of them can be selected at a time. Demographics can be combined with any of those three.

How to Run an Eligibility Check

  1. Open a patient's chart and navigate to the Demographics screen.
  2. In the ClaimRev section, select the payer responsibility tab (Primary, Secondary, etc.).
  3. Select one or more products to check using the checkboxes.
  4. Click Check Now for immediate results, or Queue Check to process in the background.
  5. Results appear in tabbed sections: Quick Info, Deductibles, Benefits, Medicare, and Validations. The same layout is used for both Eligibility and Coverage Discovery results, since the payer returns the same response shape for both.

Patients With No Insurance

Coverage Discovery, Demographics, and MBI Finder query the payer using patient demographic data and don't need an insurance row, so the eligibility tab is still available for patients who have no insurance entered. In that case the tab is labelled No Insurance, the Eligibility option is hidden, and Coverage Discovery is pre-selected. Add the matched coverage afterwards through the normal Insurance card workflow if you want to keep it.

Reset Cached Results

A red Reset button next to Check Now clears every cached eligibility row for the current patient (across all payer responsibilities). Useful when re-testing a fresh check or after fixing patient demographics that produced a bad result. The button asks for confirmation before deleting.

Eligibility AI Assistant

The Conversation tab provides an AI-powered assistant that can answer questions about the eligibility response. Ask questions like:

Sync to Insurance Card

Eligibility results can be synced to OpenEMR's native Insurance card Eligibility tab by clicking the Sync to Insurance Card button. This populates the standard eligibility verification and benefit tables so the data is visible on the patient dashboard.

ERA Downloads

Electronic Remittance Advice (ERA/835) files from payers can be downloaded and imported into OpenEMR.

X12 Tracker

The X12 Tracker tab shows the history of X12 files (837, 835, 270/271, 276/277, etc.) that have been transmitted through ClaimRev.

Appointments

The Appointments tab provides a comprehensive view of upcoming appointments with integrated eligibility verification, allowing front-desk staff and billers to ensure patients have active coverage before their visit.

Search and Filtering

Filter appointments using any combination of:

Results Table

Each appointment row displays:

Column Description
Checkbox Select for bulk actions
Date Appointment date
Time Appointment start time
Patient Patient last name, first name
DOB Patient date of birth
Provider Rendering provider
Facility Service location
Eligibility Status Color-coded status: Active Coverage (green), Pending (orange), Error (red), Not Checked (gray). Payer name and response messages are shown below the status.
Last Checked Date/time of the most recent eligibility check, or “Never”
Actions Per-row action buttons

Actions

Detail View

For appointments with completed eligibility results, an expandable detail row shows the full eligibility response including the quick info summary with benefit details parsed from the 271 response.

Calendar Eligibility Indicators

When enabled, color-coded indicators appear on appointment blocks in the main OpenEMR calendar, giving providers and staff an at-a-glance view of each patient's eligibility status.

How It Works

The module hooks into the calendar's event rendering system and adds a colored left border to each appointment block based on the patient's primary insurance eligibility status:

Color CSS Class Meaning
Green event_elig_active Active coverage confirmed
Red event_elig_inactive / event_elig_error Inactive coverage or eligibility check error
Yellow event_elig_unchecked / event_elig_stale Never checked or results older than the stale threshold
Blue event_elig_pending Eligibility check queued and waiting for response

Performance

Eligibility data for all patients visible on the calendar is loaded in a single batch query, minimizing database overhead. However, on very busy calendars with many appointments, enabling this feature may have a minor impact on calendar load time.

Configuration

Eligibility Sweep

The Eligibility Sweep is an automated background service that proactively queues eligibility checks for upcoming appointments on a scheduled basis, ensuring patients have current coverage verification before they arrive.

How It Works

  1. The sweep runs as a background service once per day (every 1440 minutes).
  2. On each run, it checks whether today is one of the configured sweep days.
  3. If it is a sweep day, it looks ahead N days for appointments where eligibility is:
    • Missing — No eligibility record exists (never checked)
    • In Error — Previous check returned an error
    • Stale — Results are older than the configured stale threshold
  4. Appointments already queued (waiting or creating status) are skipped to avoid duplicates.
  5. Matching appointments are queued for the existing eligibility send/receive background service to process.

Configuration

Navigate to Admin > Config > Connectors > ClaimRev Connect and configure:

Setting Description Default
Enable Eligibility Sweep Turn the sweep service on or off Off
Sweep Days Comma-separated day numbers: 0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat 1,4 (Mon, Thu)
Sweep Lookahead Days Number of days ahead to check for appointments 7

The stale threshold is shared with other eligibility features and is controlled by the Eligibility Age To Stale setting.

Example

With the default settings (sweep on Monday and Thursday, 7-day lookahead):

This ensures that by the time a patient arrives, their eligibility has been verified within the last few days.

Notifications

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 ships as a single binary covering:

The src/Compat/ shim layer activates per-host. On OE 8.x cores that already expose the modern APIs the shims are no-ops; on OE 7.x or older 8.0.x cores the shims provide OEGlobalsBag, CryptoInterface, and ServiceContainer via class_alias, and CsrfHelper detects the active CsrfUtils signature at runtime.

Shimmed Components

Component What the shim does on older cores
OEGlobalsBag Wraps $GLOBALS with typed getters (used directly on 7.x; on 8.0.x patch line the module imports the shim explicitly because the core's OEGlobalsBag is thinner than expected)
ServiceContainer Wraps CryptoGen and other services directly
LoggerInterface (getLogger) Provides a PSR-3 logger via OpenEMR's SystemLogger
ClockInterface (getClock) Provides a PSR-20 clock returning the current time
CryptoInterface Wraps CryptoGen behind the 8.x crypto interface
CsrfHelper Detects whether SessionWrapperFactory::getActiveSession exists; routes to CsrfUtils with the correct argument order and $_SESSION fallback when needed
GlobalConfig::getClientSecret Prefers CryptoGen::decryptFromDatabase (upstream PR #11956, May 2026) when available; falls back to decryptStandard on older cores

Compatibility Check

To verify the module works correctly on your OpenEMR version:

  1. Navigate to ClaimRev Connect > Connectivity.
  2. Click the Run Compatibility Check button.
  3. 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
    • LoggerInterface / ClockInterface / CryptoInterface — Whether native or shimmed
    • 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”, the module is running with compatibility shims — all features work normally.

Troubleshooting

Connection Issues

Eligibility Check Returns No Results

"Error communicating with server" When Running Check Now

Claims Not Appearing in ClaimRev

Payment Advice Posting Errors

Patient Balance Shows No Results

Calendar Indicators Not Showing

Eligibility Sweep Not Running

Database Upgrade Errors

Module Not Appearing

"Wrong build" Symptoms

If you installed the OpenEMR 8.x build on a 7.x install (or vice versa), you may see:

Changelog

Version 2.1.3 — May 22, 2026 (Packagist edition)
Version 2.1.3 — May 13, 2026 rebuild for OE 8.0.x
Version 2.1.3 (May 2026)
Version 2.1.2 (May 2026)
Version 2.1.1 (May 2026)
Version 2.1.0 (March 2026)
Version 2.0.0
Version 1.0.0