Welcome to MH² Portal
Where Mental Health Meets Metabolic Health
Use the menu for Home, Leadership, Operations, Provider, and any additional areas granted to you. Admins can open Admin to manage roles.
Pending tasks
Your open items from CRM, Tasks, and Treatment Plans.
Loading…
Leadership
Reporting and documentation quality.
Open Record Audit, Sales, Aurora-Hrs, or Provider Retention in the Leadership menu.
Task Templates
Create and launch task playbooks. Generated cards appear on the Tasks board under the template’s shared project. Duplicate an existing template to start a variant, then edit titles, descriptions, roles, and due-date offsets.
Launch
Define roles
Assign users to each role used by this template. Roles with one user are filled automatically; roles with multiple users require a selection.
No roles needed for this template (or steps have no role set yet).
| Title | Assignee | Due | Requires | Offset (biz days) |
|---|
Templates
Steps
| Order | Title | Requires | Roles | Biz days | Active | Actions |
|---|
Recent runs
| When | Template | Patient | Start | Tasks | By |
|---|
Lab Calculations
Load biomarkers from cerbo_sync.lab_results (Quest-style structured results).
Enter a patient ID and load lab data to populate fields and calculate PhenoAge2, FIB-4, and HOMA-IR automatically.
Patient dates
Filled automatically when you load lab data; edit and reload to recalculate.
Chronological age: —
1. Biological age (PhenoAge2)
Adjusted corrected PhenoAge2 (Levine / Liu et al.) from nine standard blood biomarkers and chronological age. Lab values are entered in US units (g/dL, mg/dL, mg/L); the formula converts internally before calculation.
2. FIB-4 (liver fibrosis index)
Sterling formula: (Age × AST) / (Platelets × √ALT). Uses chronological age from dates above. Less reliable under age 35 or over 65.
3. HOMA-IR (insulin resistance)
(Fasting insulin [µU/mL] × fasting glucose [mmol/L]) / 22.5. Insulin in pmol/L is converted using 1 µU/mL = 6.945 pmol/L (MDCalc).
Superbill
Generate a review table of checked-in/out and confirmed appointments for one patient and date range.
CPT codes come from cerbo_cpt_map for the provider used on each appointment.
When an appointment lists more than one provider, choose which one to use before the CPT review.
One set of diagnoses is chosen for the patient and copied onto every appointment.
Edits below are for the upcoming PDF step only — they are not saved to the database.
1. Patient & period
2. Choose diagnoses
Unique diagnoses from every Cerbo encounter for this patient, newest first.
Check the ones to use. The text box is copied onto every appointment when you load them; edit it to add or change a line.
If this patient already has a saved list, it is filled in here. Changing the list clears the provider choices and the appointment table.
Format each line as CODE - Name so the PDF and Word files can show the ICD-10 code.
3. Choose a provider
These appointments list more than one provider. Pick the provider to use for CPT codes and the superbill. The count is signed encounter notes that match the visit: same day, or within 5 days when no later appointment for that provider falls in between.
| Date | Appt type | Providers |
|---|
Select a provider for each appointment.
3. Check CPT codes & diagnoses
Only appointment types in the CPT map are listed; anything else is omitted. Flagged rows need review (multiple notes, missing CPT, no matching encounter, or assumed later note). Each row starts with the diagnoses from step 2. CPT codes are the map row for the provider on that appointment. Diagnosis and CPT fields stay editable for the PDF/Word step.
PDF/Word use the current edited values. These review-table changes are not saved.
CPT catalog (dropdown options)
Source table cerbo_sync.cpt_code_catalog. These options drive the review-table CPT dropdown (code + description linked).
Provider credentials (PDF/Word name)
Source table cerbo_sync.provider_superbill_profile. Provider Name on PDF/Word becomes
First Last, credentials. Credentials also appear after the cursive signature.
NPI here overrides Cerbo when present. Check Requires supervisor and enter that
person’s Supervisor name when the superbill must list a supervising clinician.
The supervisor’s credentials and NPI come from their own profile row. Include former providers so historical superbills still resolve.
CPT map (editable lookup)
Source table cerbo_sync.cerbo_cpt_map. Edits here are saved to the database and affect future Superbill loads.
Use “Seed from CSV” once after migration (or to refresh from the Excel export).
Record Audit
Each morning the portal checks the trailing 5 clinic days through yesterday (Eastern), including weekends, and emails the portal users listed on this page. Appointment status covers patient-treatment visits that were not checked out, cancelled, or no-show, leaving out Patient Huddle - Paid. Encounter notes cover visits that were not cancelled or no-show, leaving out Group - Caregiver Connections, Aurora Transportation, and Aurora Travel. The visit passes when any one provider created and signed a note. The summary counts exceptions by day. Outcome questionnaire counts for patients with a past patient-treatment visit are listed below.
Trailing 5 days
Loading…
Appointment status
Patient-treatment appointments in the trailing 5 days whose status was not checked out, cancelled, or no-show. Patient Huddle - Paid is left out. The morning job emails new rows on this list. Add or remove portal users below; the job reads that list before it sends.
Loading…
Email recipients
Portal users who receive the appointment-status reminder.
No recipients yet. The job will not send this email.
Encounter notes
Non-cancelled, non-no-show appointments in the trailing 5 days that had no encounter note, or a note that was not signed. Cancelled and no-show visits are left out, along with Group - Caregiver Connections, Aurora Transportation, and Aurora Travel. If several providers are on the visit, one of them creating and signing a note is enough. A note matches a provider when the patient is the same and the date of service, created date, or signed date is that day.
Loading…
Email recipients
When this is off, one summary email goes to the people below. When this is on, each provider who did not sign gets an email for their own visits, and the people below are copied.
These people receive the summary when the toggle is off, and are copied on each provider email when it is on.
No recipients yet. The job will not send this email.
Outcome questionnaires — summary
Outcome questionnaires — detail
Provider Retention
One row per provider, patient, and program (from appointments_key) with a patient-treatment appointment on or after July 1, 2025.
Statuses included: confirmed, checked-in, and checked-out.
Programs Group, Lab, None, DXA, and All are excluded.
Total days seen is last appointment date minus first, plus one (a single-day visit counts as 1).
Has future appt is true when that provider and patient have an appointment on or after today (Eastern) in that program, or a future visit in program All (TRM).
Summary counts each patient once per provider (multiple programs do not double-count); a patient is retained if any remaining program row with that provider has a future appointment.
Avg appt count, avg days seen, and median days seen use unique patients: with Program = Any, each patient’s visits across programs are combined first; with a program filter, only that program’s visits are used.
Provider summary
| Provider | Patient count | Has future appt count | Retained % | Avg appt count | Avg days seen | Median days seen |
|---|
Detail
| Provider | Patient ID | Program | First appt | Last appt | Total days seen | Appt count | Has future appt |
|---|
Days retained
One row per provider. Each patient is counted once for that provider; programs are combined unless a program is selected. A patient is counted in every column their span with that provider reaches, starting at 2 days, so one patient can appear in all of them. 1 and done is a single-day span with that provider. The percent is that count divided by the provider’s unique patients.
| Provider | Total patients seen | 1 and done | 2–30 days | 31–90 days | 91–180 days | 181–365 days | >365 days |
|---|
AI Summarizer
Enter a Cerbo patient ID, choose chart sources, and send them to Gemini for a clinical summary. The summary is not saved.
1. Patient
Enter a Cerbo patient ID, choose what to pull, then load chart sources.
Find the patient to list folders. Contracts, releases, consents, insurance, and billing start unchecked.
Leave the dates blank to include every date. A range keeps labs from collection dates in that range.
2. Data to send
This list is limited to the types, folders, and dates chosen above. Preview opens the original file when Cerbo has one, or the full chart text. PDF and common images are sent as the original file. TIFF is converted to PDF, and Word is sent as the document text. Other rows without synced text cannot be sent.
Load a patient to see chart sources.
3. Summary
Choose a prompt or write your own. You can edit the text before sending. Name and date of birth from the chart are added to every Gemini request. This is decision support, not orders.
Select sources, then get a summary.
AI Chat
Enter a Cerbo patient ID, choose chart sources, and ask questions about that chart. Gemini reads the chart once. Ending the chat deletes that context cache.
1. Patient
Enter a Cerbo patient ID, choose what to pull, then load chart sources.
Find the patient to list folders. Contracts, releases, consents, insurance, and billing start unchecked.
Leave the dates blank to include every date. A range keeps labs from collection dates in that range.
2. Data to send
This list is limited to the types, folders, and dates chosen above. Preview opens the original file when Cerbo has one, or the full chart text. PDF and common images are sent as the original file. TIFF is converted to PDF, and Word is sent as the document text. Other rows without synced text cannot be sent.
Load a patient to see chart sources.
3. Chat
Model: …
Instructions are sent with the chart when the chat starts. A chat that is already open keeps the instructions it started with. End chat deletes the context cache.
Instructions
Status:
Select sources, then start the chat.
Patient visits
1. Today's visits
2. Recent activity
Load a patient to see the last 7 days.
| When | Type | Provider |
|---|
3. Saved summaries/notes
Load a patient to see encounter notes and saved summaries.
| Title | By | When |
|---|
Select an encounter note.
Operations
Utilization and CRM for operations.
Open Utilization, Lab Calculations, CRM, Tasks, or Task Templates from the submenu.
Utilization
Capacity by Provider
Capacity by Provider Type
Patient Hours by Provider Type
Forecasted Hours
Eight weeks starting next week. Work hours, patient appointments, and internal meetings match the utilization table. Patient forecast is the trailing-90-day weekly rate for patients this provider met in the last 45 days, on their most recent program, and only for weeks when that patient is not already booked. Programs All, Group, DXA, and None are left out.
Forecast Detail
Each row is the hours one patient adds to Patient Forecast for that week.
Case Loads
Provider by month
July 2025 through the current month plus two months. Patient count is distinct patients per provider per month.
Program hours by provider
Last week, this week, and the next 13 weeks (same window as Utilization). Patient Hours is the sum of Utilization patient hours. Program columns are raw appointment hours plus intake admin time for that program.
Summary Data
| Provider | Patient ID | Month | Appt Count by Month |
|---|
Detailed Data
| Provider | Patient ID | Appointment Type | Program | Month | Appt Count by Month | Total Duration by Month |
|---|
Follow-up Appt
Shows, for completed patient-treatment visits, how many have a follow-up appointment scheduled within one business day (and how many do not). A program All visit, such as TRM, counts as that follow-up for the same provider and patient. Use the program filter to switch between programs, and the period filter to switch the summary window (same presets as CRM Reporting).
Summary Data
| Provider | Completed | Has follow-up | Rate |
|---|
Detailed Data
| Provider | Program | Patient ID | Appointment Type | Date | Has Follow-up Appt |
|---|
Monthly Plans
Define a monthly program, then enroll patients onto it. Appointment hours use 4.33 weeks per month. Team meeting hours are tracked separately.
Programs
One row per program. Provider-type columns are appointment hours only. Team meeting hours are not included in those columns.
Team Huddles
Patients with more than one provider from cerbo_sync.provider_key over a 60-day window
(±30 days from today). Counts include non-cancelled patient-treatment appointments only.
Required Huddle Time per Week
Minimum weekly recurring meeting time to cycle every patient through a care-team huddle at the required cadence:
- Monthly programs (ECP, FSP, WP): 15 min/patient, once per month.
- IND: 10 min/patient, once per 3 months.
- Aurora (AU): 15 min/patient, once per week (2 patients per 30-min meeting).
| Huddle Type | Patients | Min Weekly Meeting Time | Required Care Team Members |
|---|
Huddle Cohorts & Meeting Times
Schedule of patient reviews by cohort (one 30-minute meeting = up to two 15-minute or three 10-minute reviews). Meetings use weeks 1–13. Non-Aurora huddles are capped at 60 minutes/week; Aurora (labeled AU) is uncapped but clinicians are never double-booked across meetings. Standard meetings need >50% care-team overlap (full when possible). Aurora requires psychiatrist(s) plus at least one psychologist/therapist; times are chosen to maximize those roles first, then other care-team members as tiebreakers. Missing Huddle lists members not available for that slot.
Huddle Calendar
Scheduled huddles placed on their actual dates. Week 1 is next week from today, extending across the full 13-week window.
Patients with Multiple Providers
Payment Audit
Billable program patients (Aurora, WP, ECP, FSP, IND, Foundations, AA, EA, CA) with completed appointments in the trailing 60 days or scheduled appointments in the next 30 days. Last appt is the most recent completed visit for that program; next appt is the earliest scheduled visit. Upcoming starts with no payment are highlighted — patients should pay before starting.
| Patient ID |
Program | Pay frequency |
Timing | Last appt |
Next appt |
Days since payment |
Last payment |
Last payment amount |
|---|
Group Attendance
Distinct patient attendees per Group program appointment type for the trailing 13 completed weeks. Columns are Monday week-start dates, oldest week first. Attendance includes only checked-in and checked-out patient-treatment appointments. Active is True when that appointment type is scheduled for anyone at a future time. Provider lists each unique person who has that type on a future calendar. Rooms and other resources are omitted.
Provider Availability
Half-hour slots from 9:00 AM–4:30 PM (Eastern). Providers come from
cerbo_sync.provider_key (active start_date / end_date only).
Gray cells are outside that provider’s scheduled days or hours. Other cells:
open, booked, or admin.
Default range: today plus the next five business days (weekends skipped).
Retention
Completed patient-treatment appointments only (checked-in / checked-out), with program from cerbo_sync.appointments_key.
Appointments in programs Group, Lab, None, All, or DXA are excluded. Months run from July 2025 through the current calendar month.
1st and 2nd program use each program’s earliest qualifying appointment (ties by name).
Retained is true if the patient had a different program after their first program started, or had the same first program in a later calendar month than their first month in that program.
Active patients w/ future appts
Past patients w/ no future appts
Patient detail
Active without future treatment
Retention by time from first treatment
CRM
| Name | Status | Tags | Last engagement | Created Date |
|---|
No contacts. Add one to get started.
Admin
Control who can see which parts of the MH² Portal.
Portal access overview
Assign roles to users, then set which primary views each role can see.
Portal Lite staff typically need home and operations.
Users
Add first and last name (optional), assign roles, and set the Tasks board initials color. Use Edit to change an existing user.
Role Views
Control which primary pages each role can access.
Labs
Active patients who have at least one lab result or one file in the Labs folder. Lab results is how many separate results are in the database: readings saved to the chart at the same time count as one result (ten analytes from one draw are one result). Chart vitals such as glucose, ketones, and sleep are not included. Labs folder is how many files are in the Labs folder under Documents. Lab Requisition Form and Lab Request are not included. Received filters both columns by the date the result or file was received.
Parse into the lab table
Enter a patient ID, a received-date range, or both, then click Go. A patient ID alone parses that patient's JSON and Labs-folder files. Add dates to limit that patient, or leave the patient blank to parse every patient in the dates. JSON lab results are read from the database. PDF reading sends Labs-folder files to Gemini, except Lab Requisition Form and Lab Request. Parsed rows are saved and shown below. Run a wider range later to add older results.
Gemini prompt
Metric summary
Every metric in the stored lab table. Normal range is the range printed most often for that metric. Average and median use numeric values. Out of range counts results marked high, low, critical, or abnormal.
Reading detail
Each reading counted in the metric summary, with the patient and the date it was received.
| Patient ID | Lab results | Labs folder |
|---|---|---|
| Total | 0 | 0 |
Provider
Clinical tools for providers.
Open Labs, Treatment Plans, Meeting, AI Summarizer, or AI Chat in the Provider menu.
Meeting
Create a reusable meeting room, record audio to cloud storage, then transcribe with Google Speech-to-Text or AssemblyAI. Guests join via share link (display name only). Host must sign in and join before recording.
Live meetings are available Monday–Friday, 8:30 AM – 5:30 PM Eastern. Outside those hours the video server is offline — start/join will not work until the next scheduled window.
Meeting room & record
Create a room, open it as host, then start recording (audio to GCS for transcription).
| Room name | Link | Action |
|---|
Select file to transcribe
Upload an audio file, or select a past recording from a room in step 1.
Or select a past recording
| Recording | Started | Status | Action |
|---|
Transcribe
Select a recording or upload a file in step 2 to enable transcription.
Clinical note
Complete transcription first, then generate a SOAP note or visit summary.
Output is temporary — edit, copy, or send to Cerbo as an encounter note. Nothing is saved in the portal database.
Use {transcript} where the session transcript should be inserted.
Treatment Plans
Review signed plans or start a new structured plan on the Create tab (patient ID first).
Submitted plans
Filter by who created the plan or by patient ID. Open PDFs for signed plans; drafts can be reopened from the table.
Keto Tracker
Patients with the Keto Diet tag and/or a ketone custom vital reading (Ketones urine/blood, GKI). Latest glucose, height, and weight are included when present. Filter last ketone reading by type.
Active keto summary
Among patients in the list below who are Active Keto: a non-cancelled, non-no-show patient-treatment appointment in the last 15 days or scheduled in the future. Last-week ketosis counts use blood ketones (highest numeric reading in the last 7 days). Nutritional ≥ 0.5, therapeutic ≥ 1.0, negative = had a blood reading and max < 0.5. “Keto tag, no reading” is tagged Active Keto patients with no ketone reading of any type in that week.
| Active patients | Keto tag | N-ketosis last week (≥0.5) | T-ketosis last week (≥1.0) | Negative ketosis last week (<0.5) | Keto tag, no reading last week |
|---|
| Patient ID | Keto tag? | Active Keto | First reading date | Last reading date | Last reading value | Glucose | Height | Weight |
|---|
Ketosis Analysis
Rules
- Uses blood ketones only (highest reading per calendar day). Patients need at least one blood ketone reading.
- Nutritional ketosis: daily max ≥ 0.5 mmol/L. Therapeutic ketosis: daily max ≥ 1.0 mmol/L.
- % of readings: share of days (with a blood ketone reading) that meet each threshold. Readings is the number of days with a blood ketone reading (the denominator).
- Longest streak: longest run of days meeting the threshold, measured as calendar days from first to last day of the run
(end − start) + 1. A day below threshold breaks the streak; gaps with no reading do not. Readings counts daily readings whose dates fall in that streak window (N / T). - Current streak: only if the most recent reading day meets the threshold and is within the last 7 days; then the day-span of that ongoing run. Otherwise blank. Readings counts daily readings in that current streak window (N / T).
| Patient ID | % of readings | Longest streak | Current streak | ||||||
|---|---|---|---|---|---|---|---|---|---|
| % nutritional ketosis | % therapeutic ketosis | Readings | Nutritional ketosis | Therapeutic ketosis | Readings (N / T) | Nutritional ketosis | Therapeutic ketosis | Readings (N / T) | |
Keto recovery
Patients who had a blood ketone daily max ≥ 0.5, then later a daily max < 0.5. Recovery reading is the next daily max ≥ 0.5 after that drop (blank if they have not returned yet). Days to recover is calendar days from the first below-0.5 day to that recovery day. A patient can appear more than once if they dropped more than once.
| Patient ID | Dropped below 0.5 | Drop reading | Recovery date | Recovery reading | Days to recover |
|---|
Vitals over time
Enter a patient ID to chart ketone, glucose, and weight readings. Toggle the series below the chart.
Tasks
Aurora-Hrs
Paid Aurora months from aurora.xlsx (patient, program month, tier, start/end).
Patient hours are Patient-Treatment and Patient-Info appointment duration whose date falls in that row’s start–end range.
Weekly average is those hours ÷ 4.33.
Total charges are Aurora program charges (amount > 0): first month is all such charges on or before the first start date; later months are after the prior month’s start and before this month’s start.
Months whose start date is not in 2026, or is in the future, are omitted.
The period filter keeps months whose start date falls in the selected range.
Paid months
| Patient ID |
Program month |
Tier | Start date |
End date |
Patient hrs |
Weekly avg |
Total charges |
|---|
Hours by provider type
One row per paid month. Patient-Treatment and Patient-Info hours by primary provider type from provider_key (unmatched = Other).
Appointments
Patient-Treatment and Patient-Info appointments whose date falls in a paid month’s start–end range.
| Patient ID |
Program month |
Date | Provider | Provider type |
Appointment type |
Hours |
|---|