Search by

anun333 / oe-module-care-management

anun333

Care management for OpenEMR: enrollment with CMS's consent elements, monthly time logged by clinical staff and the billing practitioner, and each month's list of who meets which chronic care management (CCM), principal care management (PCM) or behavioral health integration (BHI) code

Package info

github.com/anun333/oe-module-care-management

Type:openemr-module

pkg:composer/anun333/oe-module-care-management

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.2.0 2026-10-20 04:41 UTC

This package is auto-updated.

Last update: 2026-10-20 05:30:16 UTC


README

Monthly care management for OpenEMR: enroll a patient with the consent CMS requires, log the time clinical staff and the billing practitioner spend, and see each month who meets which code. It covers:

  • chronic care management (CCM);
  • principal care management (PCM);
  • behavioral health integration (BHI).

It bills nothing: staff add the codes on a fee sheet, as for any other service.

Status: 0.2.0, a pre-release. Tested on OpenEMR 8.4.1 with synthetic data only. The codes and rules are as read from CMS's documents on 2026-10-18; check them with your billing staff and payer before billing.

What installing it changes in your database, what it reads and writes, and what it hooks into are listed in FOOTPRINT.md, generated from the source.

What it does

  • Care Management (main menu): every enrollment active in a month, with the minutes logged, the codes they meet, and what blocks billing, with a CSV for billing staff.
  • The patient's page (from the dashboard card):
    • enroll in a service, with the billing practitioner and the conditions managed (from the active problem list);
    • record consent, with the four things the patient must be told, and for BHI and CoCM their permission to consult specialists;
    • for CCM, the billing practitioner records a month's moderate or high complexity decision-making, which complex CCM needs;
    • log time;
    • record that the patient stopped.
  • Dashboard card: this month's minutes against each enrollment's threshold, and what blocks billing.

The codes

Time is counted per calendar month and never carries over.

Service Clinical staff time (general supervision) The billing practitioner's own time
CCM: two or more chronic conditions expected to last at least 12 months 99490 at 20 minutes, 99439 for each further 20 (at most twice) 99491 at 30 minutes, 99437 for each further 30
PCM: one high-risk condition expected to last at least 3 months 99426 at 30 minutes, 99427 for each further 30 99424 at 30 minutes, 99425 for each further 30
BHI 99484 at 20 minutes —
Complex CCM, in a month the billing practitioner records moderate or high complexity decision-making 99487 at 60 minutes, 99489 for each further 30 (the practitioner's time counts when not used for 99491) —
Psychiatric collaborative care (CoCM): the behavioral health care manager's time 99492 at 70 minutes in the first month of an episode, 99493 at 60 in a later month, 99494 for each further 30; G2214 at 30 when neither is met —
Advanced primary care management (APCM) No time: G0556 for one chronic condition or none, G0557 for two or more, G0558 for a Qualified Medicare Beneficiary with two or more, once a month —
APCM add-ons, for the practitioner billing APCM that month (2026) No time: G0568 with CoCM in an episode's first month, G0569 in a later month, G0570 with general BHI —
  • CCM's two routes: the practitioner's time counts toward the staff codes when it isn't used for 99491. 99491 and 99437 can't be billed in the same month as 99490 and 99439, so when both routes are met the page shows both and says to bill one.
  • Who can log practitioner time: only the enrollment's billing practitioner, logging their own work. Anyone else's time is clinical staff time.
  • Conservative where CMS is silent. CMS's booklet and FAQ say "each additional 20 minutes" and give no monthly limit, so each add-on unit needs its full time, and 99439 is limited to two a month (CPT's limit, as most sources cite it). Check both with your payer.
  • Complex CCM is a route of its own, billed instead of 99490 or 99491 in that month. Only the billing practitioner can record the decision-making: CMS says it "cannot be subcontracted".
  • CoCM's episode starts with the first month of care manager time. A new one, with a new first month, starts after 6 calendar months without CoCM. CMS says only that "CPT time rules apply" and publishes no lower figures, so full minutes are used. Only the care manager's time is counted: CMS doesn't say the practitioner's own counts.
  • APCM's add-ons are shown beside a CoCM or BHI enrollment with time logged that month, when the same practitioner bills APCM. Billed outside APCM, the time-based codes keep their time requirements.
  • Alternatives: when more than one route is met, the page lists them all and says to bill one.

What blocks billing

  • Consent not recorded, or recorded without all four things CMS requires the patient be told (for BHI and CoCM, also the patient's permission for the practitioner to consult specialists, a psychiatric consultant included):
    • that the service is available;
    • that cost-sharing applies;
    • that only one practitioner can furnish and bill it in a calendar month;
    • that they can stop, effective at the end of the month.
  • Too few conditions: two for CCM, one for PCM, BHI and CoCM. APCM's code follows the number of conditions instead.
  • No initiating visit, when the patient had no visit in the year before the enrollment started. For practices billing under the fee schedule, CMS's booklet says CCM must have been discussed at that visit. Its RHC/FQHC manual says it need not have been.
  • CCM and PCM by the same practitioner in the same month. A different practitioner may bill PCM for another condition.
  • CoCM and general BHI for the same patient in the same month, whoever bills them.
  • APCM and CCM or PCM by the same practitioner in the same month (CY 2025 PFS rule, Table 26). The same table also bars TCM, interprofessional consultations, virtual check-ins and e-visits by that practitioner; the module doesn't track those, so check them on the fee sheet.

A patient who stops can still be billed for the month they stop in, since stopping takes effect at the end of the month.

Health centers

RHCs and FQHCs bill these individual codes. CMS ended G0511 (billing was allowed "through September 30, 2025") and G0512 ("no longer payable … beginning January 1, 2026"). Since 2026 they may bill APCM and its add-ons too, "with or without a qualifying visit" (APCM FAQ). They're paid separately from the RHC AIR or FQHC PPS rate, at national non-facility fee schedule rates. Part B coinsurance applies, which the consent covers.

Who can open what

Page Check Same as
Month list and menu entry patients/med the Staff Worklist
The month list's CSV acct/bill OpenEMR's billing pages
The patient's page (enroll, consent, log time) patients/med write the Staff Worklist's actions
Dashboard card patients/med the module's pages

Every view and every change is written to OpenEMR's audit log. Time entries are never edited: a wrong one is removed, and the removal is kept with who made it and when.

Not done yet

  • Creating the month's encounter and fee sheet lines. It writes billing, so it waits until the month list has been used.
  • Checking for TCM, e-visits and the other codes APCM excludes, which the module doesn't track.
  • Checking the care plan itself. CMS requires an electronic care plan; OpenEMR's Care Plan form is where it lives.

Install

composer require anun333/oe-module-care-management

Then in OpenEMR, Modules › Manage Modules: Register, Install and Enable Care Management.

Compatibility

Tested with synthetic data on OpenEMR 8.4.1 (Docker image openemr/openemr:8.4.1), with dev/care_management_check.py in the openhealthcare repository. That check:

  • installs the module through Module Manager;
  • enrolls five patients with conditions from their problem lists;
  • logs staff and practitioner time across two months;
  • confirms the codes by both CCM routes, BHI, and each blocker (no consent, CCM and PCM by one practitioner, no initiating visit);
  • stops an enrollment;
  • checks that time logged as the practitioner's by someone else becomes staff time;
  • produces the month list, its CSV and the card;
  • removes entries;
  • removes everything.

The same check passes on current master (8.5.0-dev, 1faefbbeb9, 2026-10-18). It uses OpenEMR features present since 8.1.0, but it hasn't been run on 8.1 to 8.4.0. It needs PHP 8.3 or later.

Development

composer install
vendor/bin/phpunit
php tools/footprint.php          # regenerate FOOTPRINT.md after changing the module
php tools/footprint.php --check  # what CI runs

The unit tests need no database or OpenEMR install. CI runs them, and the footprint check, on PHP 8.3, 8.4 and 8.5.

Sources

Read 2026-10-18, and for 0.2.0 on 2026-10-19:

Other modules for OpenEMR

From the same project. Each installs with composer require anun333/<module> and is then enabled in Modules › Manage Modules.

Module What it does
Clinic Forms Printable clinic paperwork: consents, privacy notices, referral letters and validated screening questionnaires, with the clinic's own details, in English and Spanish
UDS Report HRSA's Uniform Data System report for health centers: the patient, visit and diagnosis tables, eCQM readiness, a Table 9D worksheet and grant evidence
Staff Worklist One queue of outstanding staff work: unsigned results, orders with no result, referrals with no reply, screening and claims follow-up
Sliding Fee Discount HRSA's sliding fee discount program: the schedule checked against Chapter 9, income assessments, and the discount applied
Migration Records from another EHR, read from the FHIR export certified EHRs offer, checked before import and safe to rerun
Layout Export Layouts and lists exported to files you can keep in version control, compared with the site or another file; reads the old Backup page's SQL files without running them

License

GPL-3.0-or-later. See LICENSE.