openemr_manual
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| openemr_manual [2026/03/20 15:11] – Add Recoupment Report docs, update version to 2.1.0, expand compat shim list brad.sharp | openemr_manual [2026/05/22 22:34] (current) – Fix Method 2: OE Manage Modules has no zip-upload UI for custom modules — extract zip and drop files into custom_modules/ via SFTP instead brad.sharp | ||
|---|---|---|---|
| Line 21: | Line 21: | ||
| - [[#X12 Tracker|X12 Tracker]] | - [[#X12 Tracker|X12 Tracker]] | ||
| - [[# | - [[# | ||
| + | - [[#Calendar Eligibility Indicators|Calendar Eligibility Indicators]] | ||
| + | - [[# | ||
| - [[# | - [[# | ||
| - [[# | - [[# | ||
| Line 35: | Line 37: | ||
| * An active ClaimRev account with API credentials | * An active ClaimRev account with API credentials | ||
| - | ==== Download | + | ==== Choose Your Install Method |
| - | Download the latest version of the ClaimRev Connect module: | + | The ClaimRev Connect module |
| - | **Current Version: 2.1.0** | + | **Current Version: 2.1.3** |
| - | ~~NOTOC~~ | + | === Method 1: Composer (Recommended) === |
| - | | **Module File** | {{ : | + | If you have CLI access to your OpenEMR |
| - | | **Released** | March 20, 2026 | | + | |
| - | | **Changelog** | See [[# | + | |
| - | **Note:** If you do not yet have a ClaimRev account, visit [[https://www.claimrev.com|claimrev.com]] | + | <code bash> |
| + | cd /path/to/ | ||
| + | composer require claimrevolution/ | ||
| + | sudo systemctl reload php-fpm | ||
| + | </ | ||
| - | ==== Installation Steps ==== | + | Composer downloads the latest v2.1.x release, drops it into '' |
| - | - Download the **oe-module-claimrev-connect.zip** file above. | + | To **update** the module later: |
| - | - Log into OpenEMR as an administrator. | + | |
| - | - Navigate | + | <code bash> |
| - | - Click the **Install** tab, then click **Upload Module** and select the downloaded zip file. | + | composer update claimrevolution/ |
| - | - After upload completes, find **ClaimRev Connect** in the module list and click **Install**. | + | sudo systemctl reload php-fpm |
| - | - Once installed, click **Enable** | + | </ |
| + | |||
| + | === Method 2: Manual File Drop (Shared Hosting / No CLI) === | ||
| + | |||
| + | OpenEMR' | ||
| + | |||
| + | - Download the current release | ||
| + | - Unzip it locally. You should see a folder named '' | ||
| + | - Connect | ||
| + | - Upload | ||
| + | - Continue with [[# | ||
| + | |||
| + | **Note:** Updates with this method are the same flow — replace the contents of the '' | ||
| + | |||
| + | === Method 3: Release Tarball === | ||
| + | |||
| + | If you installed OpenEMR via an official release tarball that already bundles '' | ||
| + | |||
| + | ==== Activation (all methods) ==== | ||
| + | |||
| + | - In OpenEMR, navigate to **Modules > Manage Modules**. | ||
| + | - Find **ClaimRev Connect** in the module list. Click **Install**, | ||
| - Navigate to **ClaimRev Connect > Setup** and click **Run Upgrade** to create the required database tables. | - 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 [[https:// | ||
| --- | --- | ||
| Line 110: | Line 137: | ||
| ==== Claims Submission ==== | ==== Claims Submission ==== | ||
| - | The module enables electronic claim submission (837P/837I/837D) to payers through ClaimRev. | + | The module enables electronic claim submission (837P/837I) to payers through ClaimRev. |
| * Claims are submitted from the OpenEMR billing manager | * Claims are submitted from the OpenEMR billing manager | ||
| Line 206: | Line 233: | ||
| === Test Mode === | === Test Mode === | ||
| - | A **Test Mode** | + | When the **Enable |
| - | * The search returns | + | |
| - | * Posting still writes to OpenEMR (useful for testing with a development database). | + | |
| - | * Claims are **not** marked as worked in ClaimRev | + | |
| - | * A yellow warning banner is displayed to remind you that test mode is active. | + | |
| - | **Important: | + | * Posting still writes to OpenEMR — useful when running against a development database. |
| + | * Claims are **not** marked as worked in ClaimRev while the global is on. | ||
| + | * Reconciliation row actions (Sync rejected status, Requeue) short-circuit to a fake-success response. | ||
| + | * ERA Download returns a 0-byte placeholder file. | ||
| + | |||
| + | **Important: | ||
| ==== Reconciliation ==== | ==== Reconciliation ==== | ||
| Line 511: | Line 539: | ||
| * **Demographics** - Verify patient demographic information with the payer | * **Demographics** - Verify patient demographic information with the payer | ||
| * **MBI Finder** - Look up a patient' | * **MBI Finder** - Look up a patient' | ||
| + | |||
| + | **Note:** Eligibility, | ||
| === How to Run an Eligibility Check === | === How to Run an Eligibility Check === | ||
| Line 517: | Line 547: | ||
| - Select one or more products to check using the checkboxes. | - Select one or more products to check using the checkboxes. | ||
| - Click **Check Now** for immediate results, or **Queue Check** to process in the background. | - Click **Check Now** for immediate results, or **Queue Check** to process in the background. | ||
| - | - Results appear in tabbed sections: Quick Info, Deductibles, | + | - Results appear in tabbed sections: Quick Info, Deductibles, |
| + | |||
| + | === Patients With No Insurance === | ||
| + | Coverage Discovery, Demographics, | ||
| + | |||
| + | === 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 === | === Eligibility AI Assistant === | ||
| Line 535: | Line 571: | ||
| * Search for available ERA files by date range | * Search for available ERA files by date range | ||
| * Download individual files for import into the OpenEMR billing system | * Download individual files for import into the OpenEMR billing system | ||
| + | * When **Enable Test Mode** is on, the ERA tab returns mock search results from local billing data and the Download button returns a 0-byte placeholder file. | ||
| ==== X12 Tracker ==== | ==== X12 Tracker ==== | ||
| Line 546: | Line 583: | ||
| ==== Appointments ==== | ==== Appointments ==== | ||
| - | The **Appointments** tab provides | + | The **Appointments** tab provides |
| + | |||
| + | === Search and Filtering === | ||
| + | Filter appointments using any combination of: | ||
| + | * **Date Range** — Start and end date (defaults to today through 7 days out) | ||
| + | * **Facility** — Filter by service location | ||
| + | * **Provider** — Filter by rendering provider | ||
| + | * **Eligibility Status** — Filter by: | ||
| + | * **All** — Show all appointments | ||
| + | * **Needs Attention** — Appointments with no eligibility check, errors, or stale results | ||
| + | * **Active Coverage** — Appointments where eligibility returned successfully | ||
| + | * **Not Checked** — Appointments with no eligibility record at all | ||
| + | * **Stale** — Appointments where the eligibility check is older than the configured stale threshold | ||
| + | |||
| + | === Results Table === | ||
| + | Each appointment | ||
| + | |||
| + | | **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 " | ||
| + | | Actions | Per-row action buttons | | ||
| + | |||
| + | === Actions === | ||
| + | * **Check Now** — Immediately runs an eligibility check for the appointment via AJAX and updates the status in-place without a page reload. Shows a spinner while processing. | ||
| + | * **Queue** — Queues the eligibility check for background processing by the send/ | ||
| + | * **Queue Selected** — Queues all checked appointments (or all if none are checked) for background eligibility processing. | ||
| + | * **Check Now Selected** — Runs immediate eligibility checks for all checked appointments in parallel via AJAX, updating each row's status as results come back. | ||
| + | |||
| + | === 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' | ||
| + | |||
| + | === How It Works === | ||
| + | The module hooks into the calendar' | ||
| + | |||
| + | | **Color** | **CSS Class** | **Meaning** | | ||
| + | | Green | '' | ||
| + | | Red | '' | ||
| + | | Yellow | '' | ||
| + | | Blue | '' | ||
| + | |||
| + | === Performance === | ||
| + | Eligibility | ||
| + | |||
| + | === Configuration === | ||
| + | * Navigate to **Admin > Config > Connectors > ClaimRev Connect** | ||
| + | * Set **Enable Calendar Eligibility Indicators** to //Yes// | ||
| + | * The stale threshold is controlled by the **Eligibility Age To Stale** setting (in days) | ||
| + | |||
| + | ==== Eligibility Sweep ==== | ||
| + | |||
| + | The Eligibility Sweep is an automated background service that proactively queues | ||
| + | |||
| + | === How It Works === | ||
| + | - The sweep runs as a background service once per day (every 1440 minutes). | ||
| + | - On each run, it checks whether today is one of the configured sweep days. | ||
| + | - 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 | ||
| + | - Appointments already queued ('' | ||
| + | - Matching appointments are queued for the existing eligibility send/ | ||
| + | |||
| + | === 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): | ||
| + | * On Monday morning, the sweep queues eligibility checks for all appointments through the following Monday. | ||
| + | * On Thursday, it queues checks for appointments through the following Thursday. | ||
| + | * Appointments that already have fresh eligibility results are skipped. | ||
| + | |||
| + | This ensures that by the time a patient arrives, their eligibility has been verified within the last few days. | ||
| ==== Notifications ==== | ==== Notifications ==== | ||
| Line 557: | Line 683: | ||
| ==== Supported OpenEMR Versions ==== | ==== Supported OpenEMR Versions ==== | ||
| - | The ClaimRev Connect module | + | The ClaimRev Connect module |
| - | * **OpenEMR 8.x** — Full native support | + | * **OpenEMR 8.x** (master and the 8.0.x patch line) — verified against '' |
| - | * **OpenEMR 7.x** — Supported via built-in compatibility shims | + | * **OpenEMR 7.x** (7.0.0 and later) |
| - | The module includes automatic compatibility shims for classes and interfaces introduced in OpenEMR 8.x. On OpenEMR 7.x, these shims provide equivalent functionality by wrapping legacy | + | The '' |
| === Shimmed Components === | === Shimmed Components === | ||
| - | | **Component** | **What the shim does on 7.x** | | + | | **Component** | **What the shim does on older cores** | |
| - | | '' | + | | '' |
| | '' | | '' | ||
| | '' | | '' | ||
| | '' | | '' | ||
| | '' | | '' | ||
| + | | '' | ||
| + | | '' | ||
| ==== Compatibility Check ==== | ==== Compatibility Check ==== | ||
| Line 584: | Line 712: | ||
| * OpenEMR version and PHP version | * 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. | + | 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. |
| --- | --- | ||
| Line 600: | Line 728: | ||
| * Ensure the payer is enrolled for eligibility transactions — see [[payer_enrollment|Payer Enrollments]] | * Ensure the payer is enrolled for eligibility transactions — see [[payer_enrollment|Payer Enrollments]] | ||
| * Check that the subscriber ID and patient demographics are accurate | * Check that the subscriber ID and patient demographics are accurate | ||
| + | |||
| + | ==== "Error communicating with server" | ||
| + | * Most common cause is the upstream ClaimRev API taking longer than the script' | ||
| + | * Click **Reset** next to **Check Now** to clear cached results and try again. A retry usually succeeds because the previous request finished server-side after the browser gave up. | ||
| + | * If the error reproduces every time on a specific patient, capture the OpenEMR error log entry around the failed check (see **Connectivity** for log location) and contact ClaimRev support. | ||
| ==== Claims Not Appearing in ClaimRev ==== | ==== Claims Not Appearing in ClaimRev ==== | ||
| Line 616: | Line 749: | ||
| * Navigate to **Setup** and click **Run Upgrade** to ensure the '' | * Navigate to **Setup** and click **Run Upgrade** to ensure the '' | ||
| * Try lowering the **Min Amount** filter or clearing all filters | * Try lowering the **Min Amount** filter or clearing all filters | ||
| + | |||
| + | ==== Calendar Indicators Not Showing ==== | ||
| + | * Verify the **Enable Calendar Eligibility Indicators** setting is turned on in **Admin > Config > Connectors > ClaimRev Connect** | ||
| + | * Make sure the module is fully configured (API credentials set) — calendar indicators only register when the module is configured | ||
| + | * Check that patients have eligibility records in the system — appointments for patients with no eligibility data will show a yellow (unchecked) indicator | ||
| + | * Clear your browser cache and reload the calendar | ||
| + | |||
| + | ==== Eligibility Sweep Not Running ==== | ||
| + | * Verify the **Enable Eligibility Sweep** setting is turned on | ||
| + | * Check that today is one of the configured **Sweep Days** (0=Sun through 6=Sat) | ||
| + | * Confirm the '' | ||
| + | * Check the OpenEMR error log for sweep-related messages (search for " | ||
| + | * The sweep runs once per day (every 1440 minutes) — it will not re-run on the same day | ||
| ==== Database Upgrade Errors ==== | ==== Database Upgrade Errors ==== | ||
| Line 624: | Line 770: | ||
| * Confirm the module is both **installed** and **enabled** in Modules > Manage Modules | * Confirm the module is both **installed** and **enabled** in Modules > Manage Modules | ||
| * Clear your browser cache and reload the page | * Clear your browser cache and reload the page | ||
| + | |||
| + | ==== "Wrong build" Symptoms ==== | ||
| + | If you installed the //OpenEMR 8.x// build on a 7.x install (or vice versa), you may see: | ||
| + | * **Fatal error: Class " | ||
| + | * **Call to undefined method ... CsrfUtils:: | ||
| --- | --- | ||
| ===== Changelog ===== | ===== Changelog ===== | ||
| + | |||
| + | == Version 2.1.3 — May 22, 2026 (Packagist edition) == | ||
| + | * **Now published on Packagist** as '' | ||
| + | * **Single-binary cross-version compatibility** — the '' | ||
| + | * **Crypto helper hardened for cross-version** — '' | ||
| + | * **X12_SFTP install fix** — module enable no longer references the non-existent '' | ||
| + | |||
| + | == Version 2.1.3 — May 13, 2026 rebuild for OE 8.0.x == | ||
| + | * **OpenEMR 8.x build rebuilt from the '' | ||
| + | * **Verified against '' | ||
| + | * **Cross-core crypto handling** — '' | ||
| + | * Module version constant stays at **2.1.3**; this is a rebuild of the same release for the actual 8.0.x patch line. | ||
| + | |||
| + | == Version 2.1.3 (May 2026) == | ||
| + | * **Security release** — Closes the ten findings raised by the Aisle security review on the upstream PR. The fixes are layered: | ||
| + | * **IDOR guards on eligibility endpoints** — A new '' | ||
| + | * **CSRF on appointment queue actions** — '' | ||
| + | * **Authoritative re-fetch for posting + status sync** — '' | ||
| + | * **Test-mode gating** — The '' | ||
| + | * **Path traversal hardening** — '' | ||
| + | * **CSV export header sanitization** — '' | ||
| + | * **Module-enable consent** — '' | ||
| + | * **Payment posting race window** — '' | ||
| + | * **Cross-core crypto compatibility** — '' | ||
| + | |||
| + | == Version 2.1.2 (May 2026) == | ||
| + | * **Eligibility request body** — Send '' | ||
| + | * **MBI Finder mutex + request shape** — MBI Finder is now mutually exclusive with Eligibility (matching the existing Coverage Discovery / Eligibility mutex). The '' | ||
| + | * **Coverage Discovery results render correctly** — Coverage Discovery now renders with the full Quick Info / Deductibles / Benefits / Medicare / Validations layout. The API returns the same response shape as Eligibility, | ||
| + | * **Run without insurance** — Coverage Discovery, Demographics, | ||
| + | * **Stop "Error communicating with server" | ||
| + | * **Reset button** — A red **Reset** button next to **Check Now** clears every cached eligibility row for the current patient (across all payer responsibilities) after a confirmation prompt. Useful when re-testing a check from a clean slate. | ||
| + | |||
| + | == Version 2.1.1 (May 2026) == | ||
| + | * **Two-build distribution** — The module now ships as separate downloads for OpenEMR 8.x and 7.x. The 8.x build targets the native 8.x classes directly; the 7.x build adds the compatibility shim layer. Pick the build that matches your OpenEMR major version. | ||
| + | * **Hardening pass** — CSRF verification added to all state-changing AJAX endpoints (eligibility check/ | ||
| + | * **Bug fixes** — Eligibility Sweep now correctly includes Sunday ('' | ||
| + | * **Standards** — All module PHP files declare '' | ||
| + | * **Internal** — '' | ||
| == Version 2.1.0 (March 2026) == | == Version 2.1.0 (March 2026) == | ||
| Line 633: | Line 823: | ||
| * **Patient Balance Queue** — New tab showing encounters with outstanding patient responsibility after insurance has responded. Includes PR breakdown (deductible/ | * **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 | * **Claim Status Dashboard** — New work-queue tab with claim lifecycle timeline, real-time 276/277 status checks, batch sync, and manual notes | ||
| + | * **Claim Lifecycle Tracking Tables** — New '' | ||
| * **AR Aging Report** — New analytics page with 30/ | * **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 | * **Denial Analytics** — New analytics page analyzing adjustment patterns by reason code, payer, and monthly trend with CARC code descriptions and CSV export | ||
| * **Recoupment Report** — New analytics page identifying claims with reversed/ | * **Recoupment Report** — New analytics page identifying claims with reversed/ | ||
| * **Analytics Dropdown** — AR Aging Report, Denial Analytics, and Recoupment Report grouped under an " | * **Analytics Dropdown** — AR Aging Report, Denial Analytics, and Recoupment Report grouped under an " | ||
| + | * **Appointments Page Enhancements** — Added facility, provider, and eligibility status filters. Eligibility status filter supports All, Needs Attention, Active Coverage, Not Checked, and Stale views. Added "Check Now" and "Check Now Selected" | ||
| + | * **Calendar Eligibility Indicators** — Color-coded left borders on appointment blocks in the main OpenEMR calendar showing eligibility status at a glance (green=active, | ||
| + | * **Eligibility Sweep Background Service** — New '' | ||
| * **OpenEMR 7.x Compatibility** — Built-in compatibility shims ('' | * **OpenEMR 7.x Compatibility** — Built-in compatibility shims ('' | ||
| * **Compatibility Check** — New diagnostic page (Connectivity > Run Compatibility Check) verifies all module dependencies resolve correctly | * **Compatibility Check** — New diagnostic page (Connectivity > Run Compatibility Check) verifies all module dependencies resolve correctly | ||
| Line 650: | Line 844: | ||
| == Version 1.0.0 == | == Version 1.0.0 == | ||
| * Initial release | * Initial release | ||
| - | * Claims submission (837P/I/D) | + | * Claims submission (837P/837I) |
| * Real-time eligibility verification (Eligibility, | * Real-time eligibility verification (Eligibility, | ||
| * AI-powered eligibility assistant | * AI-powered eligibility assistant | ||
| Line 656: | Line 850: | ||
| * Portal notifications | * Portal notifications | ||
| * Native OpenEMR eligibility sync | * Native OpenEMR eligibility sync | ||
| - | |||
| - | --- | ||
| - | |||
| - | ===== Support ===== | ||
| - | |||
| - | If you need help with the ClaimRev Connect module: | ||
| - | |||
| - | * **Email**: [[mailto: | ||
| - | * **Phone**: 918-942-9564 | ||
| - | * **Hours**: Monday - Friday, 9 AM to 5 PM (CST) | ||
openemr_manual.1774019475.txt.gz · Last modified: by brad.sharp
