Scheduling & Bed/OR Management Screen Requirements
Screen Inventory
| Screen ID | Screen Name | Primary Actor(s) | Workflow(s) | Access Level |
|---|---|---|---|---|
| SCR-SCHEDULING-001 | Appointment Search & Booking | Scheduling Clerk, Senior Scheduling Clerk, Physician, Patient (Portal) | WF-SCH-001, WF-SCH-003, WF-SCH-008 | Staff with scheduling rights; patients via portal (limited) |
| SCR-SCHEDULING-002 | Patient Check-In | Registration Clerk, Patient (Kiosk) | WF-SCH-002 | Front-desk, kiosk users |
| SCR-SCHEDULING-003 | Provider Schedule Management | Scheduling Administrator, Senior Scheduling Clerk, Department Secretary | WF-SCH-001 (supporting), internal admin | Admin / power users |
| SCR-SCHEDULING-004 | Bed Board (Real-Time) | Bed Management Coordinator, Charge Nurse, Nursing Supervisor | WF-SCH-004, WF-SCH-005, WF-SCH-006 | Inpatient operations roles |
| SCR-SCHEDULING-005 | Admission / Transfer / Discharge | Bed Management Coordinator, Charge Nurse, Physician, Discharge Coordinator | WF-SCH-004, WF-SCH-005, WF-SCH-006 | Inpatient clinical & bed management |
| SCR-SCHEDULING-006 | OR Schedule Board | OR Scheduler, Surgeon, Anesthesiologist, OR Charge Nurse | WF-SCH-007 | Surgical services roles |
| SCR-SCHEDULING-007 | OR Case Booking | OR Scheduler, Surgeon | WF-SCH-007 | Surgical booking roles |
| SCR-SCHEDULING-008 | Waitlist Management | Scheduling Clerk, Senior Scheduling Clerk, Scheduling Administrator | WF-SCH-001, WF-SCH-003, WF-SCH-008 | Scheduling team |
| SCR-SCHEDULING-009 | Clinic Queue Board | Physician, Charge Nurse, Scheduling Clerk | WF-SCH-002 | Clinic staff; wallboard display |
| SCR-SCHEDULING-010 | Scheduling Analytics Dashboard | Scheduling Administrator, Operations Manager, Department Head | All workflows (monitoring KPIs) | Management / reporting roles |
Navigation Flow
Screen Specifications
SCR-SCHEDULING-001: Appointment Search & Booking
Purpose
Search for patients and providers, view real-time availability, and book outpatient appointments (including portal self-booking subset).
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Patient Search | Text + autocomplete | Staff: Optional; Portal: N/A | Min 2 chars; match MRN, Emirates ID, name, mobile | Empty | Staff only; portal uses logged-in patient |
| Provider Search | Text + autocomplete | Yes (if specialty not selected) | Must match active provider | Empty | Search by name, license, specialty |
| Specialty Filter | Dropdown | Yes (if provider not selected) | Must be valid specialty | Empty | From master data; multi-select allowed |
| Date Range | Date picker (from/to) | Yes | From ≤ To; range ≤ 90 days | From=today; To=today+30 | Portal may restrict to 30 days |
| Appointment Type | Dropdown | Yes | Active appointment type; facility/department scoped | None | From appointment_types |
| Facility Filter | Dropdown | No | Must be active facility | User’s default facility | Multi-facility support |
| Department Filter | Dropdown | No | Must be active department | — | Filtered by facility |
| Slot View Mode | Toggle (Day/Week/List) | Yes | — | Week | Persists per user |
| Available Slots Grid | Interactive grid | N/A | Only bookable slots clickable; enforce scheduling rules | — | Shows time, provider, location, status |
| Overbooking Indicator | Badge | N/A | — | — | Shows current_bookings vs max_overbooking |
| Reason for Visit | Text | Recommended | Max 250 chars | — | Stored on appointment |
| Insurance Plan | Read-only (portal) / dropdown (staff) | Staff: Recommended | Must match active coverage | From patient record | For eligibility checks |
| Book Button | Button | N/A | Disabled until required fields valid | — | Creates appointment + encounter shell |
| Add to Waitlist Button | Button | N/A | Disabled unless patient + type selected | — | Opens waitlist dialog |
| Communication Preference | Radio (SMS/Email/Both/None) | No | — | From patient profile | For notifications |
| Language Preference | Radio (EN/AR) | No | — | From patient profile | For message language |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No patient selected (staff) | "Please select a patient before booking an appointment." | Error |
| No provider or specialty | "Select at least a provider or a specialty to search for slots." | Error |
| Date range > 90 days | "Date range cannot exceed 90 days." | Error |
| Appointment type missing | "Appointment type is required." | Error |
| Slot violates scheduling rule | "This slot cannot be booked due to facility scheduling rules: {rule_name}." | Error |
| Overbooking threshold exceeded | "Maximum overbooking limit for this slot has been reached." | Error |
| Insurance ineligible | "Patient’s insurance is not eligible for this appointment type on the selected date." | Warning (allow override with permission) |
| No slots found | "No available slots match your criteria. Adjust filters or add patient to waitlist." | Info |
| Portal: patient tries to book for past date | "You cannot book appointments in the past." | Error |
Actions / Buttons
- Search Slots: Executes availability search with current filters.
- Book:
- Creates
appointmentsrow with statusbooked. - Creates/updates
encountersrow with statusplanned. - Triggers eligibility check (if configured).
- Sends confirmation via SMS/email in selected language.
- Add to Waitlist:
- Opens modal to set priority, preferred dates, acceptable providers.
- Creates
waitlist_entriesrow. - Clear Filters: Resets all filters to defaults.
- View Provider Schedule: Opens SCR-SCHEDULING-003 pre-filtered for selected provider.
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 1000px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
<div style="background: #1a73e8; color: white; padding: 12px 20px; display:flex; justify-content:space-between; align-items:center;">
<h3 style="margin: 0;">Appointment Search & Booking / حجز المواعيد</h3>
<span style="font-size: 12px;">User: Scheduler · Facility: Dubai General Hospital</span>
</div>
<div style="padding: 16px; border-bottom:1px solid #eee;">
<!-- Patient Banner (collapsed if none selected) -->
<div style="background:#f5f5f5; padding:8px 12px; border-radius:4px; display:flex; justify-content:space-between; align-items:center;">
<div>
<strong>Patient:</strong> <span>Not selected</span>
</div>
<button style="padding:6px 10px; font-size:12px;">Search Patient</button>
</div>
</div>
<div style="padding: 16px;">
<!-- Filters -->
<div style="display:flex; flex-wrap:wrap; gap:12px; margin-bottom:16px;">
<div style="flex:1 1 200px;">
<label>Provider / الطبيب</label><br/>
<input type="text" style="width:100%; padding:6px;"/>
</div>
<div style="flex:1 1 200px;">
<label>Specialty / التخصص</label><br/>
<select style="width:100%; padding:6px;">
<option value="">-- Select --</option>
</select>
</div>
<div style="flex:0 0 150px;">
<label>From Date</label><br/>
<input type="date" style="width:100%; padding:6px;"/>
</div>
<div style="flex:0 0 150px;">
<label>To Date</label><br/>
<input type="date" style="width:100%; padding:6px;"/>
</div>
<div style="flex:1 1 200px;">
<label>Appointment Type / نوع الموعد</label><br/>
<select style="width:100%; padding:6px;">
<option value="">-- Select --</option>
</select>
</div>
</div>
<div style="display:flex; justify-content:space-between; align-items:center; margin-bottom:12px;">
<div>
<label>View:</label>
<button style="margin-left:4px; padding:4px 8px; background:#1a73e8; color:#fff; border:none; border-radius:3px;">Week</button>
<button style="margin-left:4px; padding:4px 8px;">Day</button>
<button style="margin-left:4px; padding:4px 8px;">List</button>
</div>
<div>
<button style="padding:6px 12px; margin-right:8px;">Clear</button>
<button style="padding:6px 12px; background:#1a73e8; color:#fff; border:none; border-radius:3px;">Search Slots</button>
</div>
</div>
<!-- Slots Grid -->
<div style="border:1px solid #ddd; border-radius:4px; overflow:auto; max-height:400px;">
<table style="width:100%; border-collapse:collapse; font-size:13px;">
<thead style="background:#f0f4f8;">
<tr>
<th style="padding:8px; border-bottom:1px solid #ddd;">Date</th>
<th style="padding:8px; border-bottom:1px solid #ddd;">Time</th>
<th style="padding:8px; border-bottom:1px solid #ddd;">Provider</th>
<th style="padding:8px; border-bottom:1px solid #ddd;">Location</th>
<th style="padding:8px; border-bottom:1px solid #ddd;">Status</th>
<th style="padding:8px; border-bottom:1px solid #ddd;">Overbooking</th>
<th style="padding:8px; border-bottom:1px solid #ddd;">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:6px; border-bottom:1px solid #eee;">2026-02-08</td>
<td style="padding:6px; border-bottom:1px solid #eee;">09:00–09:15</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Dr. Ahmed Al-Maktoum</td>
<td style="padding:6px; border-bottom:1px solid #eee;">OPD 3 · Dubai</td>
<td style="padding:6px; border-bottom:1px solid #eee;"><span style="color:green;">Available</span></td>
<td style="padding:6px; border-bottom:1px solid #eee;">0 / 1</td>
<td style="padding:6px; border-bottom:1px solid #eee;"><button style="padding:4px 8px;">Book</button></td>
</tr>
</tbody>
</table>
</div>
<!-- Footer -->
<div style="margin-top:12px; display:flex; justify-content:space-between; align-items:center;">
<div>
<label>Reason for Visit</label><br/>
<input type="text" style="width:300px; padding:6px;"/>
</div>
<div>
<button style="padding:6px 10px; margin-right:8px;">Add to Waitlist</button>
<button style="padding:6px 10px;">Close</button>
</div>
</div>
</div>
</div>
Accessibility (WCAG 2.1 AA)
- All inputs have
<label>elements; bilingual labels uselang="ar"spans where needed. - Slots grid is a proper
<table>with<th scope="col">. - Keyboard:
- Tab order: filters → view toggle → Search → grid.
- Arrow keys to move between slots (ARIA grid pattern if implemented).
- Screen reader:
- Available slots announced with time, provider, location.
- Overbooking status includes text (e.g., "1 of 2 booked").
- Colour is not the only indicator; status text used alongside colour.
Responsive / Mobile
- Filters stack vertically; slot view defaults to List mode.
- Slot rows become cards with time, provider, and “Book” button full-width.
- Touch targets ≥ 44px height.
- Portal view hides advanced filters (facility/department) and simplifies to specialty + date.
SCR-SCHEDULING-002: Patient Check-In
Purpose
Allow front-desk staff and self-service kiosks to check in patients, verify demographics and insurance, and update queue status.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Identification Method | Radio (Emirates ID / MRN / Mobile / QR) | Yes | One option selected | Emirates ID (kiosk) | Determines input field |
| Emirates ID | Text / scanner input | Conditional | Format 784-YYYY-NNNNNNN-C; checksum if available |
— | Masked input; kiosk supports card reader |
| MRN | Text | Conditional | Alphanumeric; must exist | — | Staff only |
| Mobile Number | Text | Conditional | +971 5X XXX XXXX format |
— | Staff only |
| QR Code | Scanner | Conditional | Must decode to valid token | — | Kiosk only |
| Appointment List | Table | N/A | Only today’s active appointments | — | Shows time, provider, status |
| Demographics Verify Checkbox | Checkbox | Yes | Must be checked before completing | Unchecked | "I confirm patient details are up to date" |
| Insurance Verify Status | Badge | N/A | — | From last eligibility check | Link to detailed view |
| Copay Amount | Read-only numeric | N/A | ≥ 0 | From billing rules | Staff only |
| Copay Collected | Numeric input | Conditional | ≥ 0; ≤ Copay Amount | 0 | Staff only |
| Payment Method | Dropdown | Conditional | Required if Copay Collected > 0 | — | Cash, Card, Online |
| Check-In Button | Button | N/A | Disabled until appointment selected & demographics verified | — | Sets status to checked_in |
| Queue Number | Read-only | N/A | — | Auto-assigned | Displayed after check-in |
| Estimated Wait Time | Read-only | N/A | — | Calculated from queue | Displayed after check-in |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Invalid Emirates ID format | "Please enter a valid Emirates ID in the format 784-YYYY-NNNNNNN-C." | Error |
| No appointments found | "No appointments found for today with the provided information." | Info |
| Demographics not verified | "Please confirm that patient demographics have been reviewed." | Error |
| Copay collected > copay amount | "Collected amount cannot exceed required co-payment." | Error |
| Payment method missing | "Select a payment method for the collected co-payment." | Error |
| Appointment already checked in | "This appointment has already been checked in." | Warning |
Actions / Buttons
- Search / Identify: Finds today’s appointments for the patient.
- Check-In:
- Updates appointment status to
checked_in. - Activates encounter (status
in_progress). - Generates queue number and updates SCR-SCHEDULING-009.
- Print Queue Ticket (staff/kiosk):
- Prints queue number, clinic, and QR code.
- Update Demographics: Opens patient demographics screen (from EHR module).
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px;">
<div style="background:#1a73e8; color:#fff; padding:12px 20px;">
<h3 style="margin:0;">Patient Check-In / تسجيل الوصول</h3>
</div>
<div style="padding:16px;">
<!-- Identification -->
<fieldset style="border:none; margin:0 0 12px 0; padding:0;">
<legend style="font-weight:bold;">Identify Patient</legend>
<label><input type="radio" name="id_method" checked/> Emirates ID</label>
<label style="margin-left:12px;"><input type="radio" name="id_method"/> MRN</label>
<label style="margin-left:12px;"><input type="radio" name="id_method"/> Mobile</label>
<label style="margin-left:12px;"><input type="radio" name="id_method"/> QR Code</label>
</fieldset>
<div style="margin-bottom:12px;">
<label>Emirates ID / رقم الهوية الإماراتية</label><br/>
<input type="text" style="width:260px; padding:6px;" placeholder="784-YYYY-NNNNNNN-C"/>
<button style="margin-left:8px; padding:6px 10px;">Search</button>
</div>
<!-- Appointment List -->
<div style="border:1px solid #ddd; border-radius:4px; max-height:220px; overflow:auto; margin-bottom:12px;">
<table style="width:100%; border-collapse:collapse; font-size:13px;">
<thead style="background:#f0f4f8;">
<tr>
<th style="padding:6px; border-bottom:1px solid #ddd;">Time</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Provider</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Clinic</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Status</th>
<th style="padding:6px; border-bottom:1px solid #ddd;">Select</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding:6px; border-bottom:1px solid #eee;">09:30</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Dr. Fatima Al-Nahyan</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Family Medicine</td>
<td style="padding:6px; border-bottom:1px solid #eee;">Booked</td>
<td style="padding:6px; border-bottom:1px solid #eee;"><input type="radio" name="appt_select"/></td>
</tr>
</tbody>
</table>
</div>
<!-- Verification & Payment -->
<div style="margin-bottom:8px;">
<label><input type="checkbox"/> I confirm demographics & contact details are up to date.</label>
</div>
<div style="display:flex; justify-content:space-between; align-items:flex-start; gap:16px;">
<div style="flex:1;">
<div style="margin-bottom:6px;">
<strong>Insurance:</strong> Daman Enhanced · <span style="color:green;">Eligible</span>
</div>
<div>
<strong>Copay:</strong> AED 50<br/>
<label>Collected</label><br/>
<input type="number" style="width:100px; padding:4px;"/>
<select style="padding:4px; margin-left:4px;">
<option value="">Payment Method</option>
</select>
</div>
</div>
<div style="text-align:right;">
<button style="padding:6px 10px; margin-right:8px;">Cancel</button>
<button style="padding:6px 14px; background:#1a73e8; color:#fff; border:none; border-radius:3px;">Check-In</button>
</div>
</div>
<!-- Result -->
<div style="margin-top:12px; padding:8px 10px; background:#f0f4f8; border-radius:4px;">
<strong>Queue Number:</strong> A023 · <strong>Estimated Wait:</strong> 15 minutes
</div>
</div>
</div>
Accessibility
- Radio groups and checkboxes use
<fieldset>and<legend>. - Error messages appear inline and are referenced via
aria-describedby. - Kiosk mode uses large fonts and buttons; supports on-screen keyboard.
- Screen reader announces queue number and estimated wait via
aria-live="polite".
Responsive / Mobile
- Identification methods stack vertically.
- Appointment table becomes a list of cards with “Select” button.
- Payment section collapses into an accordion on small screens.
SCR-SCHEDULING-003: Provider Schedule Management
Purpose
Define and manage provider availability, recurring templates, and session blocks used to generate appointment slots.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Provider Selector | Autocomplete dropdown | Yes | Must be active provider | — | Required to load schedule |
| Week View Date | Date picker | Yes | — | Current week Monday | Controls week displayed |
| Session Blocks | Visual blocks | N/A | — | — | Represent clinic sessions |
| Block Time (Start/End) | Time picker | Yes | Start < End; within facility hours | — | For new/edited blocks |
| Session Type | Dropdown | Yes | Valid session type | Clinic | e.g., OPD, Telehealth |
| Max Patients | Numeric | Yes | > 0; ≤ facility max | 20 | Used to generate slots |
| Recurring Templates | Dropdown | No | — | — | From scheduling_templates |
| Apply Template Button | Button | N/A | Disabled until template selected | — | Applies pattern to week |
| Holiday / Closure Overlay | Read-only | N/A | — | — | From holiday calendar |
| Override Dates | Date range | No | From ≤ To | — | For temporary changes |
| Save Schedule | Button | N/A | Disabled if validation fails | — | Writes to provider_schedules & appointment_slots |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Overlapping session blocks | "Session overlaps with an existing block on {date} {time}." | Error |
| Block outside facility hours | "Block time is outside facility operating hours." | Error |
| Max patients too high | "Max patients exceeds allowed limit for this session type." | Error |
| Template conflicts with holiday | "Template includes sessions on a facility closure day: {date}." | Warning |
Actions / Buttons
- Add Block: Opens dialog to define new session block.
- Edit Block: Adjusts existing block; updates future slots.
- Apply Template: Applies weekly pattern; prompts before overwriting.
- Save Schedule: Persists changes and regenerates slots as needed.
Accessibility
- Week view supports keyboard navigation (arrow keys between days).
- Blocks have text labels (e.g., "AM Clinic (20 slots)") and high-contrast colours.
- Screen reader announces block details on focus.
Responsive / Mobile
- Week view switches to one-day-at-a-time with swipe or arrows.
- Block list appears below calendar as a list.
SCR-SCHEDULING-004: Bed Board (Real-Time)
Purpose
Provide real-time view of bed occupancy, status, and cleaning, enabling bed assignment and monitoring.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Facility Selector | Dropdown | Yes | Active facility | User default | Filters board |
| Ward / Unit Filter | Multi-select | No | — | All | From departments / locations |
| View Mode | Toggle (Floor Plan / List) | Yes | — | Floor Plan | User preference |
| Bed Status Legend | Static | N/A | — | — | Shows colours & meanings |
| Bed Status Grid | Interactive | N/A | — | — | Each bed tile shows number, status, patient |
| Patient Info Hover | Tooltip | N/A | — | — | Name, age, gender, LOS, isolation |
| Pending Admissions Panel | List | N/A | — | — | From admission orders |
| Pending Discharges Panel | List | N/A | — | — | From discharge orders |
| Cleaning Status | Badge | N/A | — | — | From cleaning system |
| Occupancy Stats | Read-only | N/A | — | — | Calculated per ward/facility |
| Filter: Gender | Dropdown | No | IN (All, Male, Female) | All | For bed compatibility |
| Filter: Isolation | Checkbox | No | — | Off | Show isolation beds only |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No beds configured | "No beds configured for selected facility/ward." | Info |
| Real-time feed disconnected | "Real-time updates unavailable. Displaying last refreshed data at {time}." | Warning |
Actions / Buttons
- Assign Bed (from pending admission):
- Opens SCR-SCHEDULING-005 with selected patient and suggested beds.
- Transfer (from bed tile):
- Opens SCR-SCHEDULING-005 in transfer mode.
- Refresh:
- Manual refresh in addition to auto-refresh.
HTML Wireframe Mockup
Show HTML code
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 0 auto; border:1px solid #ccc; border-radius:8px;">
<div style="background:#1a73e8; color:#fff; padding:12px 20px;">
<h3 style="margin:0;">Bed Board / لوحة الأسرة</h3>
</div>
<div style="padding:12px; border-bottom:1px solid #eee; display:flex; justify-content:space-between; align-items:center;">
<div>
<label>Facility</label>
<select style="margin-right:8px;">
<option>Dubai General Hospital</option>
</select>
<label>Ward</label>
<select>
<option>All</option>
</select>
</div>
<div>
<label>View:</label>
<button style="margin-left:4px; padding:4px 8px; background:#1a73e8; color:#fff; border:none; border-radius:3px;">Floor Plan</button>
<button style="margin-left:4px; padding:4px 8px;">List</button>
<button style="margin-left:8px; padding:4px 8px;">Refresh</button>
</div>
</div>
<div style="padding:12px; display:flex; gap:12px;">
<!-- Left: Bed grid -->
<div style="flex:2; border:1px solid #ddd; border-radius:4px; padding:8px; min-height:300px;">
<div style="margin-bottom:8px; font-size:12px;">
<strong>Legend:</strong>
<span style="display:inline-block; width:12px; height:12px; background:#4caf50; margin:0 4px;"></span>Occupied
<span style="display:inline-block; width:12px; height:12px; background:#ffeb3b; margin:0 4px;"></span>Pending Discharge
<span style="display:inline-block; width:12px; height:12px; background:#f44336; margin:0 4px;"></span>Isolation
<span style="display:inline-block; width:12px; height:12px; background:#9e9e9e; margin:0 4px;"></span>Cleaning
</div>
<div style="display:grid; grid-template-columns:repeat(6, 1fr); gap:6px;">
<div style="border:1px solid #ccc; border-radius:3px; padding:4px; background:#4caf50; color:#fff; font-size:11px;">
<div><strong>Bed 101</strong></div>
<div>Ahmed A.</div>
<div>LOS: 2d</div>
</div>
<div style="border:1px solid #ccc; border-radius:3px; padding:4px; background:#9e9e9e; font-size:11px;">
<div><strong>Bed 102</strong></div>
<div>Cleaning</div>
</div>
</div>
</div>
<!-- Right: Panels -->
<div style="flex:1; display:flex; flex-direction:column; gap:8px;">
<div style="border:1px solid #ddd; border-radius:4px; padding:8px; max-height:150px; overflow:auto;">
<strong>Pending Admissions</strong>
<ul style="padding-left:16px; font-size:12px;">
<li>MRN 12345 · ED → Ward 3A · Female · Isolation</li>
</ul>
</div>
<div style="border:1px solid #ddd; border-radius:4px; padding:8px; max-height:150px; overflow:auto;">
<strong>Pending Discharges</strong>
<ul style="padding-left:16px; font-size:12px;">
<li>Bed 201 · Discharge before 12:00 target</li>
</ul>
</div>
<div style="border:1px solid #ddd; border-radius:4px; padding:8px; font-size:12px;">
<strong>Occupancy</strong><br/>
Ward 3A: 24 / 28 (86%)<br/>
Facility: 180 / 220 (82%)
</div>
</div>
</div>
</div>
Accessibility
- Bed tiles have
role="button"andaria-labeldescribing bed, patient, and status. - Keyboard navigation through beds using Tab; arrow navigation optional.
- Colour-coded statuses always accompanied by text.
Responsive / Mobile
- Floor plan grid reduces columns (e.g., 2 per row).
- Right-hand panels stack below bed grid.
- List view becomes default on small screens.
SCR-SCHEDULING-005: Admission / Transfer / Discharge
Purpose
Unified screen to manage inpatient admission, bed assignment, transfers, and discharge, including ADT triggers.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Mode | Tabs (Admit / Transfer / Discharge) | Yes | — | Based on entry | Controls visible fields |
| Patient Info | Read-only banner | Yes | — | — | Shows MRN, Emirates ID, allergies, isolation |
| Encounter Details | Read-only / editable | Yes | Encounter must exist or be created | — | Type, class, attending provider |
| Bed Selector | Dropdown + search | Admit/Transfer | Must be compatible (gender, isolation, ward type) | Suggested bed | From beds with rules |
| Transfer Reason | Dropdown + text | Transfer | Required; from reason codes | — | For audit and NABIDH/Malaffi |
| Admission Source | Dropdown | Admit | Required | — | e.g., ED, Clinic, Transfer |
| Discharge Checklist Items | Checkboxes | Discharge | Some items required per policy | — | E.g., meds reconciled, instructions given |
| Disposition | Dropdown | Discharge | Required | — | From discharge dispositions master |
| ADT Triggers Summary | Read-only | N/A | — | — | Shows message type (A01/A02/A03) |
| Effective Date/Time | Datetime picker | Yes | Cannot be future beyond allowed window | Now | For admit/transfer/discharge time |
| Notes | Textarea | No | Max 500 chars | — | Internal notes |
| Save & Generate ADT | Button | N/A | Disabled until required fields valid | — | Sends ADT to downstream systems |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No bed selected (admit) | "Select a bed to complete admission." | Error |
| Bed incompatible | "Selected bed is not compatible with patient gender/isolation requirements." | Error |
| Disposition missing | "Discharge disposition is required." | Error |
| Checklist incomplete | "All mandatory discharge checklist items must be completed." | Error |
| ADT integration failure | "ADT message could not be delivered. Please retry or contact IT support." | Error |
Actions / Buttons
- Admit:
- Creates inpatient encounter (status
admitted). - Creates
bed_assignmentsrow. - Sends ADT A01 to EHR, billing, NABIDH/Malaffi, nutrition, cleaning.
- Transfer:
- Updates
bed_assignments(release + new). - Creates
bed_transfersrow. - Sends ADT A02; triggers cleaning for vacated bed.
- Discharge:
- Sets encounter status
discharged. - Releases bed; triggers cleaning.
- Sends ADT A03; notifies billing and portal.
Accessibility
- Tabbed modes implemented with ARIA tab roles.
- Checklist items have clear labels; mandatory items indicated with text, not colour alone.
- ADT status messages announced via
aria-live.
Responsive / Mobile
- Layout becomes vertical: patient banner → mode tabs → form.
- Bed selector uses full-screen modal list on mobile.
SCR-SCHEDULING-006: OR Schedule Board
Purpose
Gantt-style view of OR rooms and cases for a day, enabling OR schedulers to manage utilisation and rescheduling.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Date Selector | Date picker | Yes | — | Today | Controls schedule day |
| OR Room Lanes | Timeline lanes | N/A | — | — | One lane per OR room |
| Case Blocks | Draggable blocks | N/A | Cannot overlap beyond rules; respect cleaning time | — | Represent or_cases |
| Surgeon Name | Display | N/A | — | — | On case block |
| Procedure | Display | N/A | — | — | CPT code + description |
| Estimated Time | Display | N/A | — | — | From estimated_duration |
| Status Indicators | Badge/colour | N/A | — | — | Scheduled, In Progress, Completed, Cancelled, Delayed |
| Add Case Button | Button | N/A | — | — | Opens SCR-SCHEDULING-007 |
| Utilisation Bar | Read-only | N/A | — | — | Shows % utilisation per room |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Case moved into conflict | "This move causes an overlap with another case in {room}." | Error |
| Case moved outside OR hours | "Selected time is outside configured OR operating hours." | Error |
| Cleaning time violated | "Insufficient turnover time between cases. Minimum required: {minutes} minutes." | Error |
Actions / Buttons
- Add Case: Opens OR Case Booking with selected room/time.
- Drag to Reschedule: Updates case start/end times; may notify team/patient.
- Zoom In/Out: Adjusts timeline granularity.
Accessibility
- Cases listed in an accessible table below the Gantt for screen readers.
- Drag-and-drop operations have keyboard alternatives (e.g., "Move earlier/later by 15 minutes").
Responsive / Mobile
- Timeline simplifies to a vertical list of cases grouped by OR room.
- Editing/rescheduling done via forms rather than drag-and-drop.
SCR-SCHEDULING-007: OR Case Booking
Purpose
Capture all details required to book a surgical case, including procedure, team, equipment, and pre-op checks.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Patient Info | Read-only banner | Yes | — | — | From patient/encounter |
| Procedure Search (CPT) | Autocomplete | Yes | Valid CPT code; active | — | From surgical procedure master |
| Procedure Description | Read-only | Yes | — | From CPT | Can be overridden with free text (optional) |
| Surgeon | Dropdown / autocomplete | Yes | Must have surgical privileges | — | From providers |
| Anesthesiologist | Dropdown / autocomplete | Yes | Must have anesthesia privileges | — | — |
| Duration Estimate | Numeric (minutes) | Yes | > 0; ≤ max allowed | From template | Used in OR board |
| OR Room Selector | Dropdown | Yes | Active OR room; supports "Any" | Suggested | From or_rooms |
| Date & Time | Datetime picker | Yes | Within OR hours; no conflict | — | — |
| Equipment Needs | Multi-select + text | No | — | — | From equipment master; free-text notes |
| Implants Required | Checkbox + text | No | — | — | For inventory prep |
| Pre-Op Checklist Status | Read-only | N/A | — | — | From pre-op module; shows complete/incomplete |
| Consent Verified | Checkbox | Yes | Must be checked before final booking (or flagged) | Unchecked | May allow provisional booking |
| Requires Pre-Auth | Badge | N/A | — | — | From insurance rules |
| Save Case | Button | N/A | Disabled until required fields valid | — | Creates/updates or_cases |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Missing procedure | "Select a procedure code to continue." | Error |
| Surgeon not available | "Selected surgeon is not available at this time." | Error |
| OR room conflict | "Selected OR room is not available at the chosen time." | Error |
| Pre-op checklist incomplete | "Pre-operative checklist is incomplete. Proceeding may require approval." | Warning |
| Consent not verified | "Surgical consent must be verified before finalising the booking." | Error (configurable as soft/hard) |
Actions / Buttons
- Save as Draft: Stores case without OR room/time (optional).
- Save & Schedule: Commits case to OR Schedule Board.
- Cancel: Discards unsaved changes.
Accessibility
- Procedure search supports keyboard and screen reader with clear instructions.
- Error messages summarised at top of form and linked to fields.
Responsive / Mobile
- Form becomes single-column; non-essential sections (equipment) in collapsible panels.
- Date/time picker uses mobile-friendly controls.
SCR-SCHEDULING-008: Waitlist Management
Purpose
Manage waitlisted patients for appointments or beds, including prioritisation and automated offers.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Waitlist Type Filter | Dropdown | No | — | Appointments | Appointments / Beds / OR |
| Specialty / Service Filter | Dropdown | No | — | — | For appointments |
| Waitlist Queue | Table | N/A | — | — | Shows patient, priority, days waiting |
| Priority Indicator | Badge | N/A | — | — | Urgent, Routine, etc. |
| Days Waiting | Calculated | N/A | — | — | today - added_datetime |
| Preferred Dates | Display | N/A | — | — | From waitlist_entries |
| Offer Status | Badge | N/A | — | — | Not Offered / Offered / Accepted / Declined / Expired |
| Auto-Offer Toggle | Switch | No | — | Off | Enables automatic offers for selected row(s) |
| Bulk Offer Button | Button | N/A | Disabled if no rows selected | — | Sends offers to multiple patients |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No entries match filters | "No waitlist entries match the selected criteria." | Info |
| Auto-offer without contact details | "Cannot enable auto-offer: patient has no valid SMS or email contact." | Error |
Actions / Buttons
- Offer Slot: Opens booking dialog (SCR-SCHEDULING-001) with selected patient and slot.
- Enable Auto-Offer: System automatically sends offers when slots free up.
- Mark Resolved: Sets resolution type (Booked/Cancelled/No Response).
Accessibility
- Table supports sorting via keyboard; sort order announced to screen readers.
- Priority indicated by text and icon, not colour alone.
Responsive / Mobile
- Table becomes list of cards; key fields (priority, days waiting, status) shown prominently.
- Bulk actions hidden or simplified.
SCR-SCHEDULING-009: Clinic Queue Board
Purpose
Display real-time queue of checked-in patients for a clinic, for providers and wall-mounted displays.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Clinic / Provider Filter | Dropdown | Yes | — | User’s clinic | Determines queue |
| Checked-In Patients | Table | N/A | — | — | Shows queue order |
| Queue Number | Display | N/A | — | — | From check-in |
| Wait Time | Calculated | N/A | — | — | Current wait vs target |
| Provider Status | Badge | N/A | — | — | In Room, On Break, Not Available |
| Room Status | Badge | N/A | — | — | Ready, Cleaning, Occupied |
| Next Patient Button | Button | N/A | — | — | Moves next patient to "In Room" |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| No patients in queue | "No patients currently waiting." | Info |
Actions / Buttons
- Call Next Patient: Updates queue status; may trigger display/announcement.
- Skip / Reorder (with permission): Adjusts queue order.
Accessibility
- Wallboard mode: high contrast, large fonts.
- Provider desktop mode: supports keyboard and screen reader.
Responsive / Mobile
- Queue table becomes vertical list; “Next Patient” button fixed at bottom for providers.
SCR-SCHEDULING-010: Scheduling Analytics Dashboard
Purpose
Provide KPIs and trends for appointments, beds, and OR utilisation.
Field Specifications
| Field | Type | Required | Validation | Default | Notes |
|---|---|---|---|---|---|
| Date Range | Date range picker | Yes | From ≤ To; max 12 months | Last 30 days | — |
| Facility / Department Filters | Multi-select | No | — | All | — |
| Appointment Volume Chart | Chart | N/A | — | — | By day/week |
| No-Show Rate | KPI tile | N/A | — | — | From appointments |
| Wait Times | Chart | N/A | — | — | From check-in data |
| Bed Occupancy | Chart | N/A | — | — | From beds/assignments |
| OR Utilisation | Chart | N/A | — | — | From OR cases |
| Cancellation Trends | Chart | N/A | — | — | By reason |
Actions / Buttons
- Drill Down: Opens underlying lists (appointments, encounters).
- Export: CSV/PDF export of selected metrics.
Accessibility
- Charts have data tables accessible to screen readers.
- Colour palettes meet contrast requirements; patterns used in addition to colour.
Responsive / Mobile
- Tiles stack; charts become swipeable.
- Some complex charts replaced with summary numbers on very small screens.
Common UI Patterns
Patient Banner
- Displayed on all patient-specific screens (SCR-SCHEDULING-001, 002, 005, 007).
- Fields:
- Name (EN/AR), age, gender
- MRN, Emirates ID
- Contact (mobile), primary language
- Key alerts: allergies, isolation, fall risk
- Behaviour:
- Clickable to open full demographics (EHR module).
- High contrast; icons + text for alerts.
- Bilingual labels: e.g., "Allergies / الحساسية".
Search Components
- Standardised search bar with:
- Debounced autocomplete (300–500 ms).
- Minimum characters (2–3) before search.
- Clear button (×) inside input.
- Results:
- Tabular with sortable columns.
- Keyboard support: Up/Down to navigate, Enter to select.
Alert / Notification Patterns
- Inline Validation: Red text below field, with icon and
aria-describedby. - Toast Notifications: For non-blocking success/info; appear top-right, auto-dismiss.
- Modal Alerts: For critical actions (e.g., ADT failure, bed incompatibility).
- Severity levels:
- Info (blue), Warning (amber), Error (red), Success (green).
- Text always describes issue; colour is supplementary.
Loading States
- Skeleton loaders for tables and grids.
- Spinners with text: "Loading appointments…" / "Updating bed board…".
- For real-time boards (beds, queue), subtle "Last updated at HH:MM" label.
Arabic/English Bilingual UI
- All labels and key buttons support EN/AR text; AR text wrapped with
lang="ar"and right-aligned where appropriate. - Layout:
- For English UI, left-to-right; for Arabic UI, right-to-left mirroring (including tables where feasible).
- Date/time formats:
- Displayed as
DD/MM/YYYY HH:mmby default; locale-aware. - Validation messages:
- Ideally bilingual or per-user language preference; structure supports both.
Accessibility (WCAG 2.1 AA) – Cross-Cutting
- Keyboard:
- All interactive elements reachable via Tab.
- Visible focus indicator.
- Screen reader:
- Landmarks (
role="main",role="navigation"). - ARIA labels for icons and status badges.
- Live regions for dynamic updates (queue changes, bed status).
- Contrast:
- Text contrast ratio ≥ 4.5:1.
- Large text and icons ≥ 3:1.
- Forms:
- Labels explicitly associated with inputs.
- Error summary at top for complex forms (e.g., OR Case Booking).
Responsive / Mobile – Cross-Cutting
- Breakpoints:
- ≥ 1024px: full desktop layout.
- 768–1023px: tablet; some side panels stack.
- < 768px: single-column layouts; tables → cards.
- Touch:
- Buttons and interactive elements ≥ 44×44 px.
- Avoid hover-only interactions; provide tap equivalents.
These screen requirements should be implemented in alignment with UAE PDPL (data minimisation, purpose limitation) and local authority guidelines (DHA/DOH/MOH) for patient data display and access control.