| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| openemr_manual [2026/05/13 22:03] – Refresh OE 8.x download notes for the release/v8-0 rebuild verified against 8.0.0.3-2026-03-25 brad.sharp | openemr_manual [2026/08/26 21:25] (current) – [Module Version Compatibility] brad.sharp |
|---|
| * An active ClaimRev account with API credentials | * An active ClaimRev account with API credentials |
| |
| ==== Download ==== | ==== Choose Your Install Method ==== |
| |
| Two builds are available — pick the one that matches your OpenEMR major version. Both builds ship the ''src/Compat/'' shim layer that lets a single module codebase run cleanly across the supported OpenEMR versions. | 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** | **Current Version: 2.1.X** |
| |
| ~~NOTOC~~ | === Method 1: Composer (Recommended) === |
| |
| === For OpenEMR 8.x === | If you have CLI access to your OpenEMR install: |
| |
| | **Module File** | {{ :oe-module-claimrev-connect-v2.1.3-openemr-8.zip | OpenEMR 8.x Module}} | | <code bash> |
| | **Compatible with** | OpenEMR **8.0.x patch line** (verified against the official ''openemr/openemr:8.0.0.3-2026-03-25'' Docker image) and later 8.x / master | | cd /path/to/openemr |
| | **Released** | May 13, 2026 (rebuild from ''release/v8-0'' branch) | | composer require claimrevolution/oe-module-claimrev-connect:^2.1 |
| | **Notes** | Includes the ''src/Compat/'' shim layer covering ''CryptoInterface'' and ''ServiceContainer'' for cores that lack them. ''CsrfHelper'' runtime-detects ''SessionWrapperFactory::getActiveSession'' and the two ''CsrfUtils::collectCsrfToken'' signatures so the same build works on the OE 8.0.x line and on newer 8.x cores. ''GlobalConfig::getClientSecret'' prefers ''CryptoGen::decryptFromDatabase'' where available and falls back to ''decryptStandard''. | | sudo systemctl reload php-fpm # or restart Apache |
| | </code> |
| |
| === For OpenEMR 7.x === | 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|Activation]] below. |
| |
| | **Module File** | {{ :oe-module-claimrev-connect-v2.1.3-openemr-7.zip | OpenEMR 7.x Module}} | | To **update** the module later: |
| | **Compatible with** | OpenEMR 7.0.0 through 7.x | | |
| | **Released** | May 12, 2026 | | |
| | **Notes** | Same ''src/Compat/'' shim layer plus the ''OEGlobalsBag'' class_alias path needed when the host has no ''OpenEMR\Core\OEGlobalsBag'' class at all. | | |
| |
| **Changelog**: See [[#Changelog|Changelog]] below. | <code bash> |
| | composer update claimrevolution/oe-module-claimrev-connect |
| | sudo systemctl reload php-fpm |
| | </code> |
| |
| **Note:** If you do not yet have a ClaimRev account, visit [[https://www.claimrev.com|claimrev.com]] or contact us at [[mailto:sales@claimrev.com|sales@claimrev.com]] to get started. | === Method 2: Manual File Drop (Shared Hosting / No CLI) === |
| |
| ==== Installation Steps ==== | 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: |
| |
| - Download the appropriate zip for your OpenEMR version from the section above. | - Download the current release zip from [[https://github.com/claimrevolution/oe-module-claimrev-connect/releases|the GitHub releases page]]. |
| - Log into OpenEMR as an administrator. | - Unzip it locally. You should see a folder named ''oe-module-claimrev-connect/'' containing ''composer.json'', ''info.txt'', ''src/'', ''public/'', ''templates/'', etc. |
| - Navigate to **Modules > Manage Modules**. | - Connect to your OpenEMR server with SFTP, FTP, or your hosting control panel's file manager. |
| - Click the **Install** tab, then click **Upload Module** and select the downloaded zip file. | - 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). |
| - After upload completes, find **ClaimRev Connect** in the module list and click **Install**. | - Continue with [[#Activation|Activation]] below — OpenEMR will see the new directory on the next page load. |
| - Once installed, click **Enable** to activate the module. | |
| | **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) ==== |
| | |
| | - In OpenEMR, navigate to **Modules > Manage Modules**. |
| | - Find **ClaimRev Connect** in the module list. Click **Install**, then **Enable**. |
| - 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://www.claimrev.com|claimrev.com]] or contact us at [[mailto:sales@claimrev.com|sales@claimrev.com]] to get started. |
| |
| --- | --- |
| |
| ===== Compatibility ===== | ===== Compatibility ===== |
| | |
| | ==== Module Version Compatibility ==== |
| | |
| | **Always run the current release.** A single build covers every supported OpenEMR version — the ''src/Compat/'' shim layer adapts to the host core at runtime, so there is no version-specific build to choose. |
| | |
| | ^ Module version ^ OpenEMR 7.0.2 ^ OpenEMR 7.0.4 ^ OpenEMR 8.0.x ^ OpenEMR 8.2 ^ OpenEMR 8.3 ^ |
| | | **v2.1.9** (current) | Yes | Yes | Yes | Yes | Yes | |
| | |
| | |
| | Requires **PHP 8.2 or later** on any core. v2.1.8 verified live against the ClaimRev API on 8.3.0, 7.0.4 and 7.0.2, including 837P claim submission. |
| | |
| | === Running an older module version? === |
| | |
| | **v2.1.6 and earlier fail on OpenEMR 7.0.4 and on the 8.0.x patch line.** Module pages die with: |
| | |
| | <code>Call to undefined method OpenEMR\Core\OEGlobalsBag::getKernel()</code> |
| | |
| | Those cores ship an ''OEGlobalsBag'' //without// ''getKernel()''. Because the class itself is present, the module's shim does not engage, and the direct call fails. Symptoms are blank module pages, or the **Patient Portal / API** panel vanishing from the patient dashboard. v2.1.3 is worse still — it fails during login bootstrap and returns HTTP 500 for the entire site. |
| | |
| | Upgrading to v2.1.7 or later resolves all of it. |
| | |
| | === Pinning a specific version === |
| | |
| | Every release stays available on Packagist. To hold a particular version: |
| | |
| | <code>composer require claimrevolution/oe-module-claimrev-connect:2.1.8</code> |
| | |
| | There is no separate branch per OpenEMR version. A single build covers both 7.x and 8.x, and older cores are supported by pinning the last release that supported them. |
| |
| ==== Supported OpenEMR Versions ==== | ==== Supported OpenEMR Versions ==== |
| The ClaimRev Connect module supports: | The ClaimRev Connect module ships as a **single binary** covering: |
| * **OpenEMR 8.0.x patch line** — use the //OpenEMR 8.x// build above. Verified against ''openemr/openemr:8.0.0.3-2026-03-25''. | * **OpenEMR 8.x** (master and the 8.0.x patch line) — verified against ''openemr/openemr:flex'' and ''openemr/openemr:8.0.0.3-2026-03-25''. |
| * **OpenEMR 8.x newer / master** — same //OpenEMR 8.x// build; the shim layer's runtime detection no-ops on hosts that already expose the newer APIs. | * **OpenEMR 7.x** (7.0.0 and later) — verified against ''openemr/openemr:7.0.2''. |
| * **OpenEMR 7.x** — use the //OpenEMR 7.x// build above. | |
| |
| Both builds ship a ''src/Compat/'' directory that adapts the module to whatever OpenEMR core is hosting it. Some shims use ''class_alias'' to provide classes the host doesn't have at all (e.g., ''CryptoInterface'', ''ServiceContainer''). Others (''CsrfHelper'', ''GlobalConfig'') detect at runtime which API is available and route accordingly — for example, ''CsrfHelper'' falls back to ''$_SESSION'' on cores whose ''SessionWrapperFactory'' lacks ''getActiveSession()''. | 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 === | === Shimmed Components === |
| | ''CsrfHelper'' | Detects whether ''SessionWrapperFactory::getActiveSession'' exists; routes to ''CsrfUtils'' with the correct argument order and ''$_SESSION'' fallback when needed | | | ''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 | | | ''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: | |
| |
| - 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 | |
| * ''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. | |
| |
| --- | --- |
| |
| ===== Changelog ===== | ===== Changelog ===== |
| | |
| | == Version 2.1.3 — May 22, 2026 (Packagist edition) == |
| | * **Now published on Packagist** as ''claimrevolution/oe-module-claimrev-connect''. Install via ''composer require claimrevolution/oe-module-claimrev-connect:^2.1''. Replaces the previous May 12 (OE 7.x) and May 13 (OE 8.0.x rebuild) separate-zip builds with a single binary. |
| | * **Single-binary cross-version compatibility** — the ''src/Compat/'' shim layer lives in the module's own repo on GitHub, not duplicated across two build branches. Same code path runs on OE 8.x master, the OE 8.0.x patch line, and OE 7.x. |
| | * **Crypto helper hardened for cross-version** — ''GlobalConfig::getClientSecret'' uses ''CryptoGen::decryptStandard'' (works on both OE 7.x and 8.x) instead of the OE 8.x-only ''decryptFromDatabase''. |
| | * **X12_SFTP install fix** — module enable no longer references the non-existent ''background_services.last_run'' column that had been breaking installs on OE 8.x master. |
| |
| == Version 2.1.3 — May 13, 2026 rebuild for OE 8.0.x == | == Version 2.1.3 — May 13, 2026 rebuild for OE 8.0.x == |
| * **Eligibility Sweep Background Service** — New ''ClaimRev_Elig_Sweep'' background service that proactively queues eligibility checks for upcoming appointments on configured days of the week. Configurable sweep days (default Monday and Thursday) and lookahead window (default 7 days). Skips appointments with fresh results or already-queued checks. | * **Eligibility Sweep Background Service** — New ''ClaimRev_Elig_Sweep'' background service that proactively queues eligibility checks for upcoming appointments on configured days of the week. Configurable sweep days (default Monday and Thursday) and lookahead window (default 7 days). Skips appointments with fresh results or already-queued checks. |
| * **OpenEMR 7.x Compatibility** — Built-in compatibility shims (''OEGlobalsBag'', ''ServiceContainer'', ''LoggerInterface'', ''ClockInterface'', ''CryptoInterface'') allow the module to run on OpenEMR 7.x without modification | * **OpenEMR 7.x Compatibility** — Built-in compatibility shims (''OEGlobalsBag'', ''ServiceContainer'', ''LoggerInterface'', ''ClockInterface'', ''CryptoInterface'') allow the module to run on OpenEMR 7.x without modification |
| * **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 | * **Statement Tracking Table** — New ''mod_claimrev_patient_statements'' database table for tracking statement history per encounter |
| |