# Scheduling & Telemedicine UI Reference for appointment scheduling, queue management, pre-visit workflows, telemedicine video consultations, multi-channel communication, and notification systems. Covers **Web (Bootstrap 5/Tabler + PHP)** and **Android (Jetpack Compose + Material 3)**. --- ## 1. Appointment Scheduling ### Provider Search & Discovery **Filter criteria:** specialty, location, insurance accepted, language, gender, availability window. Integrate `gis-mapping` skill for map-based provider search with Leaflet markers. **Provider Card Layout:** ``` ┌──────────────────────────────────────────────┐ │ [Photo] Dr. Jane Kimura, MD │ │ Cardiology | Speaks: EN, SW │ │ Rating: 4.8/5 (142 reviews) │ │ Accepts: BlueCross, Aetna, Medicare │ │ Next Available: Feb 24, 10:30 AM │ │ [Book Now] [View Profile] │ └──────────────────────────────────────────────┘ ``` **Web:** Tabler card grid with sidebar filter panel. Map view via Leaflet (see `gis-mapping`). Combine DataTable search + Flatpickr date range for availability filtering. **Android:** `LazyVerticalGrid` of `ElevatedCard` composables. Filter via `ModalBottomSheet`. Map view using `AndroidView` with Leaflet WebView or Google Maps Compose. ### Calendar Views ``` DAY VIEW WEEK VIEW ┌────────────────────────┐ ┌─────┬─────┬─────┬─────┬─────┐ │ Mon Feb 24, 2026 │ │ Mon │ Tue │ Wed │ Thu │ Fri │ ├────────────────────────┤ ├─────┼─────┼─────┼─────┼─────┤ │ 8:00 [BLUE] New Pt │ │ ██ │ ░░ │ ██ │ ░░ │ ░░ │ │ John D. - Intake │ │ ██ │ ██ │ ░░ │ ██ │ ░░ │ │ 8:30 ░░ Available ░░ │ │ ░░ │ ██ │ ██ │ ░░ │ ██ │ │ 9:00 [TEAL] Follow-up │ │ ██ │ ░░ │ ██ │ ██ │ ░░ │ │ Mary S. - Cardio │ │ ░░ │ ██ │ ░░ │ ░░ │ ██ │ │ 9:30 [AMBER] Urgent │ └─────┴─────┴─────┴─────┴─────┘ │ Bob K. - Pain │ Legend: ██ Booked ░░ Available │ 10:00 [PURPLE] Proc. │ ▓▓ Blocked │ Kim L. - Biopsy │ │ 10:30 [GREEN] Telemed │ │ Pat R. - Video │ └────────────────────────┘ MONTH VIEW PROVIDER SCHEDULE (Multi-Column) ┌───┬───┬───┬───┬───┬───┬───┐ ┌──────────┬──────────┬──────────┐ │Mo │Tu │We │Th │Fr │Sa │Su │ │ Dr.Smith │ Dr.Jones │ Dr.Kim │ ├───┼───┼───┼───┼───┼───┼───┤ ├──────────┼──────────┼──────────┤ │ │ │ │ │ │ 1 │ 2 │ │ 8:00 ██ │ 8:00 ░░ │ 8:00 ██ │ │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ │ 8:30 ░░ │ 8:30 ██ │ 8:30 ██ │ │(3)│(5)│(2)│(4)│(1)│ │ │ │ 9:00 ██ │ 9:00 ██ │ 9:00 ░░ │ │10 │11 │...│ │ │ │ │ │ 9:30 ░░ │ 9:30 ░░ │ 9:30 ██ │ └───┴───┴───┴───┴───┴───┴───┘ └──────────┴──────────┴──────────┘ (n) = appointment count Facility scheduler view ``` **Web:** FullCalendar.js integration with Tabler card wrapper. Use `eventColor` mapped to appointment type. Flatpickr for date navigation. **Android:** Custom Compose calendar grid using `LazyVerticalGrid`. Material 3 `DatePicker` for navigation. Color via `MaterialTheme.colorScheme` extensions. ### Appointment Type Color Coding | Type | Color | Hex | Icon | |------|-------|-----|------| | New Patient | Blue | `#2563EB` | `user-plus` | | Follow-up | Teal | `#0F766E` | `refresh` | | Urgent | Amber | `#D97706` | `alert-triangle` | | Procedure | Purple | `#7C3AED` | `scissors` | | Telemedicine | Green | `#059669` | `video` | ### Booking Flow (3 Steps) ``` Step 1 Step 2 Step 3 ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ Select Provider │ │ Patient Info │ │ Confirmation │ │ ┌──────────────┐ │ │ Name: [........] │ │ Date: Feb 24 │ │ │ Dr. Smith │ │ │ DOB: [........] │ │ Time: 10:30 AM │ │ │ Cardiology │ │ │ Reason: [......] │ │ Dr: Smith │ │ └──────────────┘ │ │ Insurance: │ │ Loc: Main Clinic │ │ Date: [Feb 24 ] │ │ [BlueCross v] │ │ [Map Link] │ │ Time: [10:30 v] │ │ Upload card: [+] │ │ Reminders: │ │ │ │ │ │ [x]SMS [x]Email │ │ [Next ->] │ │ [<- Back] [Next] │ │ [ ]Push │ └──────────────────┘ └──────────────────┘ │ [Add to Calendar]│ │ [Confirm Booking]│ └──────────────────┘ ``` ### Rescheduling & Cancellation - Require reason selection (dropdown: conflict, illness, provider request, other) - Show alternative available slots immediately - Enforce cancellation policy window (e.g., 24h before) - Display fee warning if inside cancellation window - Log all changes to appointment audit trail --- ## 2. Appointment Queue / Waiting Room ### Status Progression ``` Scheduled --> Checked-in --> In Exam Room --> With Provider --> Checkout [Gray] [Blue] [Teal] [Green] [Purple] ``` ### Queue Display ``` ┌──────────────────────────────────────────────────────────────────┐ │ Today's Queue - Main Clinic Feb 24, 2026 │ ├────────┬──────────┬───────────┬──────────┬───────────┬──────────┤ │ Patient│ Sched. │ Status │ Wait │ Provider │ Actions │ ├────────┼──────────┼───────────┼──────────┼───────────┼──────────┤ │ John D.│ 9:00 AM │ [With Dr] │ -- │ Dr.Smith │ │ │ Mary S.│ 9:30 AM │ [In Room] │ 12 min │ Dr.Smith │ [Move] │ │ Bob K. │ 10:00 AM │ [CheckedIn│ 25 min ! │ Dr.Jones │ [Room] │ │ Kim L. │ 10:30 AM │ [Sched] │ -- │ Dr.Jones │ [CheckIn]│ │ Pat R. │ 11:00 AM │ [Sched] │ -- │ Dr.Kim │ [NoShow] │ └────────┴──────────┴───────────┴──────────┴───────────┴──────────┘ ! = Wait exceeds threshold (>20 min = amber, >40 min = red) ``` **Quick actions:** Check-in, Move to room, Mark no-show, Reschedule. **Web:** DataTable with real-time updates (AJAX polling every 30s or WebSocket). Status badges as colored Tabler `badge` components. Countdown timer JS for wait column. **Android:** `LazyColumn` with `AssistChip` status indicators. `SwipeRefresh` for pull-to-refresh. `WorkManager` for background status sync. ```kotlin @Composable fun QueueStatusChip(status: AppointmentStatus) { val (color, label) = when (status) { AppointmentStatus.SCHEDULED -> Pair(Color.Gray, "Scheduled") AppointmentStatus.CHECKED_IN -> Pair(ClinicalBlue, "Checked In") AppointmentStatus.IN_ROOM -> Pair(ClinicalTeal, "In Room") AppointmentStatus.WITH_PROVIDER -> Pair(ClinicalGreen, "With Provider") AppointmentStatus.CHECKOUT -> Pair(ClinicalPurple, "Checkout") } AssistChip( onClick = {}, label = { Text(label, color = Color.White) }, colors = AssistChipDefaults.assistChipColors(containerColor = color) ) } ``` --- ## 3. Pre-Visit Preparation ### Pre-Visit Questionnaire - Digital form sent via SMS/email link (token-authenticated, HIPAA-compliant) - Captures: chief complaint, symptom duration, current medications, allergies updates - Auto-saves progress, mobile-optimized responsive layout - Submission triggers status update on provider dashboard ### Required Documents Checklist | Document | Status | Action | |----------|--------|--------| | Insurance Card (front/back) | Uploaded | [View] | | Photo ID | Pending | [Upload] | | Consent Forms | Signed | [View] | | Prior Auth Letter | N/A | -- | ### Pre-Visit Summary for Providers ``` ┌─────────────────────────────────────────────┐ │ PRE-VISIT SUMMARY: John Doe, M, 45y │ │ MRN: 1234567 | Allergies: Penicillin │ ├─────────────────────────────────────────────┤ │ [v] History Highlights │ │ - Hypertension (dx 2020), Type 2 DM │ │ - Coronary stent placed Jan 2025 │ │ [v] Current Medications │ │ - Metformin 500mg BID │ │ - Lisinopril 10mg QD │ │ - Aspirin 81mg QD │ │ [v] Recent Labs (Feb 10, 2026) │ │ - HbA1c: 7.2% (↑ from 6.8) │ │ - LDL: 110 mg/dL [Warning] │ │ [>] Chief Complaint (from questionnaire) │ │ "Increased fatigue, 3 weeks duration" │ │ [>] Open Orders & Pending Results │ │ [>] Last Vitals (Feb 10): BP 138/88, HR 78 │ └─────────────────────────────────────────────┘ [v] = expanded [>] = collapsed ``` **Web:** Collapsible Tabler accordion cards beside the schedule view. PHP renders server-side with AJAX expand/collapse. **Android:** `ExpandableCard` composable with `AnimatedVisibility` for section toggle. Lazy-load sections from API. --- ## 4. Telemedicine Video Consultation ### Pre-Call Tech Check Verify before connecting: camera, microphone, speaker, network speed. Show pass/fail indicators. Provide troubleshooting links for failures. Minimum bandwidth requirement: 1.5 Mbps. ### Video Call Interface ``` ┌─────────────────────────────────────────────────────────────────┐ │ Telemedicine Session - Dr. Smith & John Doe [00:12:34] │ ├──────────────────────────────────────────┬──────────────────────┤ │ │ Patient: John Doe │ │ │ MRN: 1234567 │ │ MAIN VIDEO (Provider/Patient) │ Allergies: Penicillin│ │ ├──────────────────────┤ │ │ Vitals (last): │ │ ┌──────────┐ │ BP: 138/88 HR: 78 │ │ │ Self-View│ │ SpO2: 97% │ │ │ (small) │ ├──────────────────────┤ │ └──────────┘ │ Medications: │ │ │ - Metformin 500mg │ ├──────────────────────────────────────────┤ - Lisinopril 10mg │ │ [Mute] [Video] [Share] [Chat] [Rx] [End]│ - Aspirin 81mg │ ├──────────────────────────────────────────┼──────────────────────┤ │ TRANSCRIPT (AI-powered, real-time) │ Notes: │ │ Dr: "How has your fatigue been?" │ [........................]│ │ Pt: "Worse in the mornings, better by" │ [........................]│ │ Dr: "Any chest pain or shortness of—" │ [Save Note] │ │ >> KEY: HbA1c 7.2% flagged in context │ │ └──────────────────────────────────────────┴──────────────────────┘ ``` ### In-Call Actions | Action | Web | Android | |--------|-----|---------| | Mute/Unmute | WebRTC `audioTrack.enabled` toggle | CameraX audio toggle | | Video On/Off | WebRTC `videoTrack.enabled` toggle | CameraX video toggle | | Screen Share | `getDisplayMedia()` API | MediaProjection API | | Chat | WebSocket sidebar panel | `ModalBottomSheet` overlay | | Share Rx | Open prescription modal | Navigate to Rx composable | | End Call | `RTCPeerConnection.close()` | Release CameraX + WebRTC | ### Post-Call Workflow 1. **Auto-generated visit summary** -- AI transcription produces structured SOAP note draft 2. **Prescription issuance** -- Provider reviews/signs e-prescriptions 3. **Follow-up scheduling** -- Suggest next appointment with pre-filled context 4. **Patient satisfaction** -- 1-5 star rating + optional comment within 24h ### Accessibility Features | Feature | Implementation | |---------|---------------| | Real-time captions | AI speech-to-text overlay, toggleable by patient/provider | | Large text mode | `font-scale` multiplier (1.5x), affects all UI text | | Low-bandwidth fallback | Auto-detect < 500kbps, switch to audio-only with profile photo | | High-contrast mode | WCAG AAA contrast for all video overlay controls | **Web:** WebRTC via `RTCPeerConnection`, HTML5 `