Skip to main content

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

ScopeWhat it lets you do
clinical.group-session.readView session list / detail / billing preview
clinical.attendance.writeUpdate 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:

FilterDefault
Date rangeToday
FacilityYours
Group typeAll
StatusAll

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.

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:

FromAllowed next
SCHEDULEDATTENDED, ABSENT, LATE
ATTENDEDABSENT, LATE
LATEATTENDED, ABSENT
ABSENTATTENDED, 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

  1. Open the session at /group-sessions/:id before or right when it starts.

  2. Mark the supervisor's attendance. The Supervisors card carries the same buttons the roster does (a supervisor counts as participating but not billable).

  3. As participants arrive, click ATTENDED (or LATE for arrivals after the start time). Default is SCHEDULED → leave alone if a participant no-shows the entire session, then mark ABSENT at the end.

  4. Watch the Billing preview. As you mark attendance, the preview recomputes. Common warnings:

    WarningMeaning
    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).

  5. At session close, finalize. Any participant left at SCHEDULED is a prompt to mark them ABSENT. Once every row is in a terminal state, the session is ready to bill.

  6. The platform builds charges automatically for ATTENDED and LATE participants 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:

  1. 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.

  2. Pass force=true by clicking Force update on the row's menu. The platform voids the affected charges, re-runs the billing pipeline, and audit-logs the override.

Validation

CheckExpected
Roster transitions to terminal statesAll participants ATTENDED, LATE, or ABSENT.
Billing preview shows zero blocking issuesWarnings either green or knowingly accepted.
Charges built post-sessionVisible on each member's Encounters tab.
Claim builds without group-billing scrubber issuesClaim → Validation tab is clean.

Troubleshooting

SymptomCauseFix
Supervisors card is emptyNo staff_assignment.role = 'SUPERVISING' linkedAdd the supervisor assignment via the staff admin; reload.
SUPERVISION_RATIO_BREACH cannot be clearedGenuine over-ratioAdd 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 everyoneA late-added participant exists on the roster but has no row visibleReload the page; the roster is fetched fresh on each open.
Force update not visibleMissing clinical.attendance.write.force scopeAsk a supervisor with the scope.

Next

3.2 — Bulk-enter charges