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

# Practice Management Time Off

> Submit and manage provider time-off requests with an approval workflow at /pm/time-off.

The Time Off page at `/pm/time-off` displays all provider time-off requests for the current organization and supports submitting new requests, and approving or denying pending requests for users with the appropriate permission.

## Overview

The Time Off page fetches records from `pm_provider_time_off` scoped to the current organization, ordered by start date descending. Each card shows the time-off type label, status badge, date range, and optional reason text. Submitting a request publishes a `pm_time_off_requested` domain event; approving publishes `pm_time_off_approved`; denying publishes `pm_time_off_denied`. Approve and deny actions are only visible on pending requests and only to users with the `pm.time_off.approve` permission.

## Who it's for

Requires permission `pm.time_off.view` (`PM_PERMISSIONS.TIME_OFF_VIEW`) to access the route. Submitting new requests additionally requires `pm.time_off.create` (`PM_PERMISSIONS.TIME_OFF_CREATE`). Approving or denying pending requests requires `pm.time_off.approve` (`PM_PERMISSIONS.TIME_OFF_APPROVE`).

## Before you start

* You must hold the `pm.time_off.view` permission.
* To submit a request, you must also hold `pm.time_off.create` and be authenticated (a `provider_id` derived from the current user is attached to the request).

## Steps

<Steps>
  <Step title="Navigate to Time Off">
    Go to `/pm/time-off`. The page loads and displays all time-off records for the organization.
  </Step>

  <Step title="Submit a time-off request">
    Click "Request Time Off" (requires `pm.time_off.create`). The `TimeOffRequestDialog` opens. Fill in start date, end date, type, and optional reason, then submit. The request is saved with status `pending` and a `pm_time_off_requested` event is published.
  </Step>

  <Step title="Approve or deny a pending request">
    On any card with status "Pending", users holding `pm.time_off.approve` see "Approve" and "Deny" buttons. Clicking "Approve" sets the status to `approved` and publishes `pm_time_off_approved`. Clicking "Deny" sets the status to `denied` and publishes `pm_time_off_denied`.
  </Step>
</Steps>

## Key concepts

<AccordionGroup>
  <Accordion title="Time-off types">
    Observable types from the code: `vacation` (Vacation), `sick` (Sick Leave), `personal` (Personal), `continuing_education` (Continuing Education), `conference` (Conference), `other` (Other).
  </Accordion>

  <Accordion title="Status values">
    `pending` (Pending — outline badge), `approved` (Approved — default badge), `denied` (Denied — destructive badge), `cancelled` (Cancelled — secondary badge).
  </Accordion>

  <Accordion title="Empty state">
    When no records exist, an `EmptyState` component with the message "No time-off requests — Submit a time-off request to get started." is shown, with an inline "Request Time Off" action link.
  </Accordion>

  <Accordion title="Error state">
    If the query fails, an `EmptyState` component with the title "Unable to load time-off requests" and description "Please try again later." is rendered instead of the list.
  </Accordion>
</AccordionGroup>

## Related

<Columns cols={2}>
  <Card title="Practice Management" icon="briefcase" href="/pm/overview">
    Overview of the Practice Management core.
  </Card>

  <Card title="Governance & parity" icon="scale-balanced" href="/governance/index">
    Documentation coverage and governance.
  </Card>
</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/pm.tsx
  * src/cores/pm/pages/TimeOffPage.tsx
  * src/cores/pm/hooks/useProviderTimeOffList.ts
  * src/cores/pm/hooks/useProviderTimeOffMutation.ts
  * src/platform/permissions/constants.ts
</Accordion>
