Care Time and chronic care management
Log the minutes your team spends managing a patient between appointments, and close the month into draft CCM claims — thresholds, consent, the CPT code ladder, and what blocks a close.
Chronic care management pays for the work that happens when the patient isn't in front of you — the phone calls, the medication reconciliation, the coordination with the specialist, the record review. It is real work that historically went unbilled because nobody was counting it.
Care Time counts it. Staff log minutes against a patient's plan as they go, and at month end the total is turned into draft CCM claims. The counting is easy. The part that catches people out is that logging time and being able to bill it are two different things, and the gap between them only shows up at close.
Turning it on
Care management lives inside Settings → Care Plans, underneath the main toggle — it only appears once care plans are on, because CCM time is always logged against a plan.
The toggle reads Track care-management time — "Adds a care-management tab where staff log minutes against a patient's plan." Two settings sit under it:
- Minimum billable minutes — "Minutes required in a calendar month before it can be claimed." Defaults to 20.
- Place of service code — "Two-digit CMS place-of-service code used on CCM claim lines." Defaults to 11, the code for an office.
Owners and admins only, and it autosaves. One quirk to know: neither field shows a validation error. Type something that isn't a whole number, or a place-of-service code that isn't two digits, and it simply isn't saved — the previous value stays. Reload the page if you want to be certain what stuck.
Before you bill anything, price the codes. CCM codes have no default prices in Ona. If 99490 has no active entry in your fee schedule, every patient who would otherwise have been billed on it is blocked at close. Set them under Settings → Insurance → Fee schedule, and verify the amounts against the current CMS fee schedule for the year you're billing — Ona ships the code structure, not the money.
Logging time
On a patient record, go to Billing → Care Time.
Two ways in. Log time opens the dialog directly, for work you've already done. Start timer counts while you do it, and Stop & log hands the minutes to the same dialog.
The timer is deliberately not saved anywhere. Refresh the page, navigate to another tab of the chart, or close the browser, and a running timer is gone without warning. That's on purpose — a timer restored from storage after a reload would keep counting through lunch and you'd bill it. Treat it as a stopwatch you're watching, not a session you can walk away from. Stopping it doesn't submit anything either; it pre-fills the dialog, and closing that dialog throws the minutes away.
In the dialog:
- Activity — phone call, patient message, care coordination, medication management, care plan review, record review, referral coordination, caregiver communication, or other. This drives your reporting, not the price — the code is chosen by who logged the time, not what they did.
- Minutes — whole minutes, 1 to 480. A single entry longer than a working day is a typo, not a shift.
- When — "Leave blank for now." You can backdate, but not into the future.
- Note — "What you did, briefly." Worth writing. It's the documentation behind the claim.
The timer rounds to the nearest whole minute with a floor of one, so a twenty-second call logs as a minute.
Who the minutes are billed as
Under the fields is a panel you can't edit: "Billed as clinical staff time" or "Billed as physician / qhcp time", explained as "Set from your role — it decides which CCM code the minutes are priced against."
This is the money field, and it is read from who is logged in rather than offered as a choice — a free dropdown here would let anyone bill at physician rates. Doctors log on the practitioner ladder; everyone else logs on the clinical-staff ladder.
One trap. The split follows your dashboard role, not your clinical credentials. An owner or admin who is also the treating physician logs at clinical-staff rates, because Ona sees them as an admin. If that matters to your billing, the physician needs to be logging their own time from a clinician account.
Enrolling the patient
Time is recorded whether or not the patient is enrolled — the tab says so: "Time is being recorded, but it cannot be billed until the patient is enrolled." Enrollment is what makes it billable, and it needs two things.
An active care plan. Without one you get "This patient needs an active care plan before they can be enrolled. Time logged now still counts once they are."
A signed consent whose type is Care Management. CCM has a cost to the patient, so CMS requires consent, and Ona checks for that specific consent type — a signed treatment or telehealth consent is not authorisation to bill. If there isn't one, the dialog says so and points you at the patient's Consents tab. The stock Chronic Care Management Enrollment consent in the consent library covers the required attestations, including the single-practitioner acknowledgement and the cost disclosure.
Designated practitioner is optional and purely documentary — "CMS expects one practitioner responsible at a time. Recorded for documentation." Nothing in the close reads it; the obligation is carried by the consent.
Enrollment belongs to the plan, not the patient
This is the single most expensive thing to misunderstand.
Enrollment is attached to one specific care plan, and the close only ever looks at the patient's active plan. Enroll a draft while a different plan is active and everything looks fine until month end, when the patient comes back as "Patient is not enrolled in CCM" with no earlier warning.
It follows that ending a plan ends the enrollment. Supersede or cancel a plan and it becomes terminal — you can't even unenroll it — and the replacement plan starts unenrolled. If you rebuild a patient's plan mid-year, re-enroll them.
Unenroll is the clinic's side only. It stops the billing; it does not withdraw the patient's consent, which is theirs to revoke.
Two thresholds, not one
The progress bar reads something like "12 min of 20 needed to bill", with a breakdown underneath: "Clinical staff 12 · Practitioner 0 · 8 more to bill this month".
That breakdown is there for a reason, and it's the thing worth understanding before you trust the bar.
Your Minimum billable minutes setting is one gate. The CPT code ladder is a second, independent one — and the ladder is evaluated per role. Fifteen clinical-staff minutes plus fifteen practitioner minutes clears a 20-minute org threshold, shows Threshold met, shows Billable on the biller's list, and then closes as "No code threshold met for either performer role" — because neither role reached a rung on its own.
Read the split, not just the total.
The code ladder
Four codes, in two ladders that never mix:
- 99490 — clinical staff, from 20 minutes. The base code for staff time.
- 99439 — clinical staff add-on, from 40 minutes, one unit per further 20 minutes, capped at 2 units.
- 99491 — physician or qualified health care professional, from 30 minutes.
- 99437 — practitioner add-on, from 60 minutes, one unit per further 30 minutes, capped at 2 units.
So 25 staff minutes bills 99490 alone; 45 bills 99490 plus one unit of 99439; 100 still bills 99490 plus two units, because the add-on caps.
One base code per patient per month. The staff and practitioner codes are two ways of billing the same service, not two services — putting both on a claim is a rejection at best. When both roles qualify, Ona bills the practitioner code, flags the row Both roles qualified — review, and tells you plainly: "Only the practitioner code was billed. The clinical-staff minutes were still marked claimed." Worth reviewing when it appears, because it is the one case where minutes are consumed without being separately paid.
These thresholds reflect the long-standing CCM structure and are a starting point. Verify them against the fee schedule for the year you're billing.
Closing the month
Billing → Care Time in the main sidebar is the biller's version of the same feature. Owners, admins and front-desk staff can reach it; doctors can't — they record their own time but don't close billing.
The period defaults to last month. Below it is every patient with unbilled time, each showing the per-role split and either Billable or how far short they are.
Closing is two steps, and you can't skip the first.
Run preview does a dry run: it evaluates every patient exactly as the real close would, and writes nothing. Read the result. Only then does Close period unlock, and only if the preview found something claimable — you cannot bill what you have not read.
The real close drafts insurance claims — not invoices, not superbills. One claim per patient, dated the last day of the period, carrying up to four diagnosis codes taken from the plan's health concerns and a service line per resolved CPT code. The confirmation says what it costs you: "This creates 6 draft claims and permanently marks the underlying time as claimed. Voiding or editing that time afterwards is not possible — corrections have to be made on the claim."
From there they're ordinary draft claims — see How claims move through Ona.
It runs itself too. "The monthly close runs automatically at 03:00 UTC on the 2nd for the previous month." The 2nd rather than the 1st, because care management time is routinely entered a day late. The automatic run skips anything blocked without telling anyone — "Anything blocked below will not be picked up by it — someone has to act first." Which is the argument for looking at this page in the first week of every month.
Closing twice is safe. Patients already claimed come back as skipped and nothing is written.
What blocks a close
Every row that isn't claimed carries its reason, and blocked rows are sorted to the top with a one-click fix.
- "Patient has no active care plan" — build and activate one.
- "Patient is not enrolled in CCM" — the usual cause is enrollment sitting on a plan that isn't the active one.
- "No signed, in-effect CCM consent for this period" — send the Care Management consent.
- "No fee schedule entry for 99490" — price the code.
- "Below the 20-minute threshold" — not a block, a skip. Nothing to fix; there wasn't enough time.
- "This period has already been claimed" — also a skip. This patient's month is done.
That last one has a sharp edge. The check is per patient, so time logged after a close for the same month — a backdated entry, someone catching up — sits there unbilled forever. The period can't be reopened, and a re-run reports the patient as already claimed. If you know time is still coming in, close later rather than twice.
Details that matter
- Time is recorded before enrollment and counts once they're enrolled — but only if they're enrolled before the close runs.
- Enrollment lives on a care plan. Ending the plan ends the enrollment; the replacement starts unenrolled.
- The timer doesn't survive a refresh, and stopping it doesn't submit anything.
- Entries are voided, never deleted, and a reason is required. Voiding can't be undone — log a fresh entry instead.
- Claimed time is frozen. The row menu disappears entirely, which looks like a bug until you know why. Corrections happen on the claim.
- Billing periods follow your organisation's timezone. If no timezone is set it falls back to UTC, which can push a late-evening entry into the next month. Set it under Settings → Organization.
- A patient who withdraws consent mid-month is still billable for that month, and not after.
- A mid-month plan switch splits the patient in two, each half checked against the threshold on its own — so 15 minutes on the old plan and 15 on the new bills nothing.
- A closed period cannot be reopened.
Related guides