/rh/passes and provides a searchable, filterable list of resident pass requests with the ability to create new pass requests.
Overview
The page renders a header with a “New Pass Request” button, a freetext search input, and two select dropdowns for filtering by Status and Type. Pass status and type options are loaded dynamically from the picklistspass_status and pass_type via usePicklistItems. The PassesTable component renders the filtered list. Clicking “New Pass Request” opens the PassDialog modal, which renders PassForm. The form requires an active episode (status admitted), a pass type, start and end datetimes, a destination (minimum 3 characters), and a purpose (minimum 10 characters). Contact person and contact phone are optional. Phase eligibility is checked via usePassEligibility for the selected episode; if the episode is ineligible, the form shows a destructive alert and disables submission.
Who it’s for
RequiresRH_PERMISSIONS.DASHBOARD_VIEW (rh.dashboard.view) via the parent RHViewGuard. No additional permission gate is on this route in rh.tsx.
Before you start
Hold therh.dashboard.view permission. At least one resident episode with status admitted must exist to create a new pass request.
Steps
1
Navigate to Passes
Go to
/rh/passes.2
Filter the list
Use the search box to search by text. Use the Status dropdown to filter by pass status and the Type dropdown to filter by pass type.
3
Open New Pass Request
Click the “New Pass Request” accent button in the header.
4
Select a resident episode
Choose an admitted episode from the “Resident Episode” dropdown. The form checks eligibility and shows the current phase and allowed pass types.
5
Complete the form
Select a pass type (only allowed types are enabled), enter start and end datetimes, destination, and purpose. Optionally add contact person and phone.
6
Submit the request
Click “Request Pass”. The form is disabled if the episode is ineligible or if required fields are missing.
Key concepts
Pass eligibility
Pass eligibility
When an episode is selected in the form,
usePassEligibility returns eligible (boolean), currentPhase (string), allowedTypes (array of pass type values), and reason (shown when ineligible). The form blocks submission when eligible is false.Pass type labels
Pass type labels
The form maps internal pass type codes to labels:
day_pass → “Day Pass”, overnight_pass → “Overnight Pass”, job_interview → “Job Interview”, housing_search → “Housing Search”, other → “Other”.Viewing a pass
The Pass Details screen lives at/rh/passes/:id and displays the complete record for a single resident pass request.
The page fetches a single pass record by id URL parameter via usePassDetail, which queries rh_passes joined to rh_episodes, rh_resident_profiles, pf_profiles, and rh_residences. It renders four sections: Resident Information (resident name, episode number, residence), Pass Schedule (start datetime, expected return, actual return when present), Destination & Purpose (destination, contact phone, purpose), and Notes (combining return_notes, approval_notes, curfew_violation_notes, and phase_override_reason). When status === 'requested', a “Pending Approval” card shows “Approve” and “Deny” buttons. When status === 'approved' and actual_return_datetime is absent, a “Verify Return” card shows a “Record Return” button. A breadcrumb is set to Pass - <formatted start date>.
A pass record must exist. Navigate via the Passes list at /rh/passes or a deep-link with the pass UUID.
1
Navigate to a pass record
Open
/rh/passes/:id directly or click a pass row from the Passes list at /rh/passes.2
Review resident information
Check the resident name, episode number, and residence in the Resident Information card.
3
Review schedule
Verify the start datetime, expected return, and actual return (if recorded) in the Pass Schedule card.
4
Review destination and purpose
Read the destination address, contact phone, and purpose in the Destination & Purpose card.
5
Approve or deny (if pending)
If the pass status is
requested, click “Approve” or “Deny” in the Pending Approval card.6
Record return (if approved)
If the pass status is
approved and no return has been recorded, click “Record Return” in the Verify Return card.Pass not found state
Pass not found state
If the pass record does not exist or the query returns no data, the page displays “Pass not found” in centered muted text. No error is thrown to the user.
Notes fields
Notes fields
The Notes card combines four fields from the database:
return_notes, approval_notes, curfew_violation_notes, and phase_override_reason. The card only renders when at least one of these fields is non-null.Related
Recovery Housing
Recovery Housing references and overview.
Governance & parity
Documentation coverage and governance.
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.
Documentation sources
Documentation sources
- src/routes/rh.tsx
- src/cores/rh/pages/PassesPage.tsx
- src/cores/rh/pages/PassDetailPage.tsx
- src/cores/rh/components/forms/PassDialog.tsx
- src/cores/rh/components/forms/PassForm.tsx
- src/cores/rh/hooks/usePassDetail.ts