> ## Documentation Index
> Fetch the complete documentation index at: https://docs.encoreos.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Virtual Group Session

> The /cl/virtual-groups/:sessionId route is not registered. Session join and host flows are at /cl/virtual-groups/:sessionId/join and /cl/virtual-groups/:sessio…

The path `/cl/virtual-groups/:sessionId` (without a sub-path) is **not a registered route** in the Clinical core. Virtual group session participation is split into two distinct sub-routes: a join flow for attendees and a host flow for facilitators.

## Overview

`/cl/virtual-groups/:sessionId` is **not a registered route**. Navigating to it without `/join` or `/host` renders `NotFound`.

The two active sub-routes are:

| Route                                | Component              | Permission                |
| ------------------------------------ | ---------------------- | ------------------------- |
| `/cl/virtual-groups/:sessionId/join` | `VirtualGroupJoinPage` | `cl.group.virtual.attend` |
| `/cl/virtual-groups/:sessionId/host` | `VirtualGroupHostPage` | `cl.group.virtual.host`   |

`VirtualGroupJoinPage` is a patient-facing pre-session preparation screen. It requires two steps before enabling the telehealth room join button:

1. **Technology Check** — opens `TechnologyCheckSheet` to verify camera, microphone, and connection. Completion is recorded in `technology_check_completed_at` on the attendance record.
2. **Recording Consent** — shown only if `recording_enabled` is true on the session. Opens `RecordingConsentDialog`. Consent is locked once captured (`recording_consent_captured_at`).

The "Open telehealth room" button is enabled only when both checks are complete and the session status is `scheduled` or `in_progress`. The join URL (`vendor_session_ref`) is sourced from `useTelehealthMetadata`; if absent, the button shows "Awaiting host to start."

## Who it's for

* `/join` route: `cl.group.virtual.attend` permission
* `/host` route: `cl.group.virtual.host` permission

## Before you start

* For the join flow: you need `cl.group.virtual.attend` permission and an attendance record for the session. The `attendanceId` can be passed as a query parameter (`?attendanceId=<uuid>`).
* For the host flow: you need `cl.group.virtual.host` permission.
* The session must be in `scheduled` or `in_progress` status to join.

## Steps

<Steps>
  <Step title="Navigate to the join page">
    Open `/cl/virtual-groups/:sessionId/join` (optionally appending `?attendanceId=<uuid>`). The page loads session details and your attendance record.
  </Step>

  <Step title="Complete the technology check">
    Click "Start" next to "Technology Check". The `TechnologyCheckSheet` guides you through verifying camera, microphone, and network. On completion, the step shows a green checkmark.
  </Step>

  <Step title="Capture recording consent (if required)">
    If the session has recording enabled, click "Capture" next to "Recording Consent". The `RecordingConsentDialog` opens. Once consent is captured, it is locked and cannot be changed for this session.
  </Step>

  <Step title="Join the session">
    When both steps are complete and the session is active, the "Open telehealth room" button becomes enabled. Click it to open the telehealth room URL in a new tab.
  </Step>
</Steps>

## Key concepts

| Term                            | Meaning                                                                                                      |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `vendor_session_ref`            | Telehealth vendor URL for the virtual room, sourced from `useTelehealthMetadata`; owned by PM-13 integration |
| `technology_check_completed_at` | Timestamp on the attendance record indicating the tech check was completed                                   |
| `recording_consent_captured_at` | Timestamp on the attendance record when recording consent was given; locks the consent for the session       |
| `recording_consent_modality`    | How consent was captured (`RecordingConsentModality` type)                                                   |
| `TechnologyCheckSheet`          | Slide-over component guiding users through camera/mic/network verification                                   |
| `RecordingConsentDialog`        | Dialog for capturing and locking recording consent for a specific attendance record                          |

## Related

<Columns cols={2}>
  <Card title="Clinical" icon="stethoscope" href="/cl/overview">
    Clinical core overview.
  </Card>

  <Card title="Governance & parity" icon="scale-balanced" href="/governance/index" />
</Columns>

<Note>
  This page documents shipped product behavior. It is not medical, legal, or
  billing advice. Verify against your organization's policies and applicable
  regulations before using it for clinical, compliance, or billing decisions.
  Protected health information (PHI) shown in the product is governed by your
  tenant's access controls and is never exposed in this documentation.
</Note>

<Accordion title="Documentation sources">
  * src/routes/cl.tsx
  * src/cores/cl/pages/VirtualGroupJoinPage.tsx
  * src/cores/cl/hooks/useGroupSessions.ts
  * src/cores/cl/hooks/useGroupAttendance.ts
  * src/cores/cl/hooks/useVirtualGroupSessions.ts
  * src/cores/cl/components/virtual-group/TechnologyCheckSheet.tsx
  * src/cores/cl/components/virtual-group/RecordingConsentDialog.tsx
  * src/cores/cl/types/virtual-group.ts
</Accordion>
