Take group session attendance
Outcome
A group session's attendance is recorded during or right after the session, the supervision-ratio and group-size compliance checks ran live so issues are caught in the room, and the eventual claim builds without the scrubber flagging anything you did not already see.
Prerequisites
| Scope | What it lets you do |
|---|---|
clinical.group-session.read | View session list / detail / billing preview |
clinical.attendance.write | Update attendance status |
A group session already exists. Sessions arrive from the scheduling feed, or a supervisor can create one ad-hoc from the list page.
The list page
/group-sessions. Filters:
| Filter | Default |
|---|---|
| Date range | Today |
| Facility | Yours |
| Group type | All |
| Status | All |
Each row shows the session's date/time, facility, group type, supervisor, roster size, and attendance state (e.g. 3 attended, 1 absent, 1 scheduled).
The detail page
Click a session for /group-sessions/:id.
Header
Date, time window, facility, group type. The Supervisors card lists every
distinct provider whose staff_assignment.role = 'SUPERVISING' is joined to a
participant in the session.
Roster
One row per participant. Each row carries an attendance status with buttons limited to legal next states:
| From | Allowed next |
|---|---|
SCHEDULED | ATTENDED, ABSENT, LATE |
ATTENDED | ABSENT, LATE |
LATE | ATTENDED, ABSENT |
ABSENT | ATTENDED, LATE |
Buttons for illegal transitions are not rendered; if you craft a request manually, the server returns HTTP 409.
Billing preview
Lives at the bottom of the detail. The platform runs the same helpers the
post-claim scrubber will use (countBillableParticipants,
resolveGroupSizeBand) so warnings shown here are warnings the scrubber
will fire later.
The preview resolves the primary active coverage policy of any participant
in the session and uses that payer + the session facility's state for
supervision-rule and size-band lookups. When no coverage matches (e.g.
unenrolled roster), the preview reports billableCount and any
GROUP_UNATTENDED_BILLED issue but skips payer-scoped checks.
Steps
Open the session at
/group-sessions/:idbefore or right when it starts.Mark the supervisor's attendance. The Supervisors card carries the same buttons the roster does (a supervisor counts as participating but not billable).
As participants arrive, click
ATTENDED(orLATEfor arrivals after the start time). Default isSCHEDULED→ leave alone if a participant no-shows the entire session, then markABSENTat the end.Watch the Billing preview. As you mark attendance, the preview recomputes. Common warnings:
Warning Meaning SUPERVISION_RATIO_BREACHToo many participants per supervisor for the payer's rule. GROUP_SIZE_BAND_MISMATCHThe group size falls between billable bands; the claim will be coded to the next band down. GROUP_UNATTENDED_BILLEDA scheduled-but-unmarked participant remains; clarify before billing. Resolve in the room when possible (call in another supervisor; mark a no- show as
ABSENT).At session close, finalize. Any participant left at
SCHEDULEDis a prompt to mark themABSENT. Once every row is in a terminal state, the session is ready to bill.The platform builds charges automatically for
ATTENDEDandLATEparticipants when the session crosses its end time, using the group-size-band rate. No further action is needed unless billing is locked.
Locked sessions
Once charges are built and a claim has been created, the session is locked
— attendance edits return HTTP 409 with status LOCKED. To force a
correction:
Confirm the consequence. Reverting attendance after billing means voiding the existing charges and rebuilding the claim. This re-renders any already-submitted EDI as a void/replace.
Pass
force=trueby clickingForce updateon the row's menu. The platform voids the affected charges, re-runs the billing pipeline, and audit-logs the override.
Validation
| Check | Expected |
|---|---|
| Roster transitions to terminal states | All participants ATTENDED, LATE, or ABSENT. |
| Billing preview shows zero blocking issues | Warnings either green or knowingly accepted. |
| Charges built post-session | Visible on each member's Encounters tab. |
| Claim builds without group-billing scrubber issues | Claim → Validation tab is clean. |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
Supervisors card is empty | No staff_assignment.role = 'SUPERVISING' linked | Add the supervisor assignment via the staff admin; reload. |
SUPERVISION_RATIO_BREACH cannot be cleared | Genuine over-ratio | Add another supervisor's name (if a second supervisor was present) or document the exception per state rule and accept the breach. |
GROUP_UNATTENDED_BILLED remains after marking everyone | A late-added participant exists on the roster but has no row visible | Reload the page; the roster is fetched fresh on each open. |
Force update not visible | Missing clinical.attendance.write.force scope | Ask a supervisor with the scope. |