CPOE Screen Requirements
Screen Inventory
| Screen ID | Screen Name | Primary Actor(s) | Workflow(s) | Access Level |
|---|---|---|---|---|
| SCR-CPOE-001 | Medication Order Form | Physician, NP/PA | WF-CPOE-001, WF-CPOE-008 | Ordering providers |
| SCR-CPOE-002 | CDS Alert Dialog | Physician, NP/PA | WF-CPOE-001/002/003 | Ordering providers |
| SCR-CPOE-003 | Laboratory Order Form | Physician, NP/PA | WF-CPOE-002 | Ordering providers |
| SCR-CPOE-004 | Imaging Order Form | Physician, NP/PA | WF-CPOE-003 | Ordering providers |
| SCR-CPOE-005 | Order Review & Sign | Physician, NP/PA | WF-CPOE-001–008 | Ordering providers |
| SCR-CPOE-006 | Active Orders List | All clinical roles | All | All CPOE users |
| SCR-CPOE-007 | Order Set Browser | Physician, NP/PA | WF-CPOE-007 | Ordering providers |
| SCR-CPOE-008 | Verbal Order Entry | RN, Unit Clerk | WF-CPOE-006 | Verbal order enterers |
| SCR-CPOE-009 | Pharmacy Queue Dashboard | Pharmacist | WF-CPOE-001, WF-CPOE-008 | Pharmacists |
| SCR-CPOE-010 | Co-Signature Queue | Attending MD | WF-CPOE-006, WF-CPOE-008 | Providers with pending co-signs |
Navigation Flow
flowchart LR
A["Patient Chart"] --> B["CPOE Order Entry"]
B --> C{"Order Type?"}
C -->|"Medication"| D["SCR-CPOE-001: Medication Order Form"]
C -->|"Laboratory"| E["SCR-CPOE-003: Lab Order Form"]
C -->|"Imaging"| F["SCR-CPOE-004: Imaging Order Form"]
C -->|"Order Set"| G["SCR-CPOE-007: Order Set Browser"]
C -->|"Verbal Order"| H["SCR-CPOE-008: Verbal Order Entry"]
D --> I{"CDS Alert?"}
E --> I
F --> I
G --> I
I -->|"Yes"| J["SCR-CPOE-002: CDS Alert Dialog"]
I -->|"No"| K["SCR-CPOE-005: Order Review & Sign"]
J -->|"Resolved"| K
K --> L["Order Signed — Return to Chart"]
L --> M["SCR-CPOE-006: Active Orders List"]
N["Pharmacist Home"] --> O["SCR-CPOE-009: Pharmacy Queue"]
P["Provider Home"] --> Q["SCR-CPOE-010: Co-Signature Queue"]
Screen Specifications
SCR-CPOE-001: Medication Order Form
Purpose: Primary interface for entering and submitting medication orders.
Field Specifications
| Field | Type | Required | Default | Validation | Data Binding |
|---|---|---|---|---|---|
| Medication Search | Autocomplete text | Yes | — | Min 3 chars; queries medication_master |
medication_master.generic_name, brand_name, rxnorm_code |
| Selected Medication | Read-only display | Yes | From search | — | medication_orders.medication_id |
| Formulary Status | Badge (green/yellow/red) | Display | From master | — | medication_master.formulary_tier |
| Controlled Substance Indicator | Badge (CDa/CDb) | Display | From master | — | medication_master.controlled_class |
| Dose | Numeric input | Yes | Auto-calculated | > 0; range check vs max_dose_per_day |
medication_orders.dose |
| Dose Unit | Dropdown | Yes | From medication default | FK → dose_units |
medication_orders.dose_unit |
| Route | Dropdown | Yes | From medication default | FK → medication_routes |
medication_orders.route |
| Frequency | Dropdown | Yes | — | FK → order_frequencies |
medication_orders.frequency |
| Duration Value | Numeric | Conditional | — | > 0; max 30 (CDa), 90 (CDb) | medication_orders.duration_value |
| Duration Unit | Dropdown | Conditional | 'days' |
IN (days, weeks, months) | medication_orders.duration_unit |
| PRN Toggle | Checkbox | No | Unchecked | — | medication_orders.prn_flag |
| PRN Indication | Text | If PRN | — | Required if PRN checked | medication_orders.prn_indication |
| Priority | Radio group | Yes | Routine | IN (STAT, ASAP, Today, Routine) | medication_orders.priority |
| Indication (ICD-10-AM) | Autocomplete | Recommended | — | ICD-10-AM code lookup | medication_orders.indication_code |
| Special Instructions | Textarea | No | — | Max 500 chars | medication_orders.sig (appended) |
| Start Date/Time | Datetime picker | Yes | Now | Cannot backdate | medication_orders.start_datetime |
Validation Messages
| Condition | Message | Severity |
|---|---|---|
| Medication search < 3 chars | "Enter at least 3 characters to search" | Info |
| Dose exceeds max range | "Dose exceeds maximum recommended ({max} {unit}/day). Please verify or provide justification." | Warning |
| PRN checked but no indication | "PRN indication is required for as-needed orders." | Error |
| CDa duration > 30 days | "Maximum duration for CDa controlled substances is 30 days." | Error |
| No active encounter | "An active encounter is required to place orders." | Error |
| Prescriber lacks CS authorisation | "You do not have MOH controlled substance authorisation for this medication." | Error (hard block) |
| Telehealth + controlled substance | "Controlled substance prescribing is not permitted during telehealth encounters." | Error (hard block) |
Accessibility (WCAG 2.1 AA)
- All form fields have associated
<label>elements - Error messages linked via
aria-describedby - Keyboard navigation: Tab order follows visual layout; Enter to select from autocomplete
- Colour is not the sole indicator: formulary badges include text labels alongside colour
- Focus indicator visible on all interactive elements
- Screen reader: CDS alerts announced via
aria-live="assertive"region
Mobile / Responsive Notes
- On screens < 768px: form switches to single-column stacked layout
- Medication search uses full-width input with larger touch targets (min 44px)
- Dosing calculator accessible via expandable panel (not modal on mobile)
- Priority selection uses large segmented control instead of radio buttons
SCR-CPOE-002: CDS Alert Dialog
Purpose: Modal dialog displaying clinical decision support alerts that require provider action before proceeding.
Field Specifications
| Field | Type | Required | Description | Data Binding |
|---|---|---|---|---|
| Alert Severity Icon | Visual indicator | Display | Colour-coded: red (contraindicated), orange (severe/major), yellow (moderate), blue (informational) | clinical_alerts.severity |
| Alert Type | Header text | Display | "Drug-Allergy Interaction", "Drug-Drug Interaction", etc. | clinical_alerts.alert_type |
| Alert Message | Body text | Display | Detailed description with interacting entities | clinical_alerts.alert_message |
| Interacting Entity | Highlighted text | Display | The conflicting medication, allergy, or test | clinical_alerts.interacting_entity |
| Recommended Action | Formatted text | Display | System recommendation (cancel, change, add preventive) | clinical_alerts.recommended_action |
| Alternative Suggestions | List of links | Display | Clickable alternatives that auto-populate order form | Linked medication_master entries |
| Action Buttons | Button group | Yes | Depends on severity (see below) | — |
| Override Reason | Dropdown + text | If overriding | Required for soft-stop overrides | clinical_alerts.override_reason_code, override_reason_text |
Action Button Matrix by Severity:
| Severity | Available Actions |
|---|---|
| Contraindicated (hard stop) | Cancel Order, Request Co-Signature from Attending |
| Severe | Cancel Order, Select Alternative, Override with Co-Signature |
| Major | Cancel Order, Select Alternative, Override with Reason |
| Moderate | Cancel Order, Override with Reason, Acknowledge |
| Minor / Informational | Acknowledge (continue) |
Override Reason Codes:
| Code | Label |
|---|---|
CLIN_NECESSITY |
Clinical necessity despite risk |
PRIOR_TOLERANCE |
Patient previously tolerated this combination |
SHORT_DURATION |
Short-duration therapy, low risk |
ALLERGY_UNCERTAIN |
Documented allergy is questionable |
NO_ALTERNATIVE |
No therapeutic alternative available |
SPECIALIST_CONSULT |
Discussed with specialist |
PATIENT_PREFERENCE |
Patient refuses alternative |
INCORRECT_ALERT |
Alert fired inappropriately |
SCR-CPOE-003: Laboratory Order Form
Purpose: Interface for ordering laboratory tests, panels, and managing specimen requirements.
Field Specifications
| Field | Type | Required | Default | Validation | Data Binding |
|---|---|---|---|---|---|
| Test Search | Autocomplete | Yes | — | Min 2 chars; searches by name, LOINC, CPT | laboratory_orders.loinc_code, test_name |
| Selected Tests | Checklist | Yes | — | At least one test | laboratory_orders (one row per test) |
| Favourite Tests | Quick-select pills | No | Provider-specific | — | Provider preferences table |
| Panel Expansion | Collapsible list | Display | — | Shows component tests | — |
| Collection Date/Time | Datetime picker | Yes | ASAP | Cannot backdate | laboratory_orders.collection_datetime |
| Priority | Radio group | Yes | Routine | IN (STAT, Today, Routine) | laboratory_orders.priority |
| Specimen Type | Dropdown | Yes | Auto-selected per test | FK → specimen types (SNOMED) | laboratory_orders.specimen_type |
| Clinical Indication | Autocomplete | Yes | — | ICD-10-AM code | laboratory_orders.clinical_indication |
| Fasting Required | Indicator | Display | Per test definition | — | laboratory_orders.fasting_required |
| Special Instructions | Textarea | No | — | Max 500 chars | laboratory_orders.special_instructions |
SCR-CPOE-005: Order Review & Sign
Purpose: Final review screen showing complete order summary before electronic signature.
Layout
| Section | Content |
|---|---|
| Patient Banner | Name, MRN, DOB, allergies (abbreviated), encounter type |
| Order Summary | All order details in read-only format |
| CDS Summary | Count of alerts fired / overridden; link to review details |
| Formulary Info | Tier, estimated cost (AED), alternatives if non-formulary |
| Controlled Substance Notice | If applicable: CDa/CDb class, UEP submission status, special Rx number |
| Signature Block | Provider name, credential, timestamp; "Sign Order" button |
Action Buttons:
- Cancel — return to order form without saving
- Back to Edit — return to order form with current values
- Sign Order — submit with Tier 2 (standard) or Tier 3 (CDa) e-signature
HTML Wireframe: Medication Order Form (SCR-CPOE-001)
Show HTML code
HTML
<div class="cpoe-container" role="main" aria-label="Medication Order Entry">
<!-- Patient Banner -->
<header class="patient-banner">
<div class="patient-info">
<span class="patient-name">Ahmed Al-Maktoum</span>
<span class="patient-mrn">MRN: 2024-001234</span>
<span class="patient-dob">DOB: 1985-03-15 (41y)</span>
<span class="patient-weight">Weight: 78 kg</span>
</div>
<div class="allergy-badge allergy-active" role="alert">
<strong>Allergies:</strong> Penicillin (Anaphylaxis), Sulfa (Rash)
</div>
<div class="encounter-info">
<span class="encounter-type">Inpatient — Ward 4B, Bed 12</span>
<span class="attending">Attending: Dr. Sara Khan</span>
</div>
</header>
<!-- Medication Search -->
<section class="order-section" aria-label="Medication Search">
<h2>Medication Order</h2>
<div class="search-container">
<label for="med-search">Search Medication</label>
<input type="text" id="med-search" placeholder="Type medication name, brand, or indication..."
autocomplete="off" aria-describedby="search-help" />
<small id="search-help">Enter at least 3 characters. Results ranked by formulary status.</small>
</div>
<!-- Search Results -->
<div class="search-results" role="listbox" aria-label="Medication search results">
<div class="result-item selected" role="option" aria-selected="true">
<span class="drug-name">Lisinopril (Zestril)</span>
<span class="drug-strength">10 mg Tablet</span>
<span class="formulary-badge tier-1">✓ Preferred</span>
<span class="rxnorm">RxNorm: 314076</span>
</div>
<div class="result-item" role="option">
<span class="drug-name">Lisinopril (Zestril)</span>
<span class="drug-strength">20 mg Tablet</span>
<span class="formulary-badge tier-1">✓ Preferred</span>
</div>
<div class="result-item" role="option">
<span class="drug-name">Lisinopril-Hydrochlorothiazide</span>
<span class="drug-strength">10-12.5 mg Tablet</span>
<span class="formulary-badge tier-2">⚠ Non-preferred</span>
</div>
</div>
</section>
<!-- Order Details -->
<section class="order-details" aria-label="Order Details">
<h3>Order Details</h3>
<div class="form-grid">
<div class="form-group">
<label for="dose">Dose</label>
<div class="input-group">
<input type="number" id="dose" value="10" min="0" step="0.5"
aria-describedby="dose-help" />
<select id="dose-unit" aria-label="Dose unit">
<option selected>mg</option>
<option>g</option>
<option>mL</option>
<option>mcg</option>
</select>
</div>
<small id="dose-help">Recommended: 10 mg (adult standard dose)</small>
</div>
<div class="form-group">
<label for="route">Route</label>
<select id="route">
<option selected>PO (Oral)</option>
<option>IV (Intravenous)</option>
<option>IM (Intramuscular)</option>
<option>SC (Subcutaneous)</option>
</select>
</div>
<div class="form-group">
<label for="frequency">Frequency</label>
<select id="frequency">
<option selected>QD (Once daily)</option>
<option>BID (Twice daily)</option>
<option>TID (Three times daily)</option>
<option>QID (Four times daily)</option>
<option>Q6H (Every 6 hours)</option>
<option>Q8H (Every 8 hours)</option>
<option>Q12H (Every 12 hours)</option>
<option>PRN (As needed)</option>
</select>
</div>
<div class="form-group">
<label for="duration">Duration</label>
<div class="input-group">
<input type="number" id="duration" placeholder="Until discontinued" min="1" />
<select id="duration-unit" aria-label="Duration unit">
<option selected>days</option>
<option>weeks</option>
<option>months</option>
</select>
</div>
</div>
<div class="form-group">
<label for="priority">Priority</label>
<fieldset class="radio-group" id="priority">
<label><input type="radio" name="priority" value="routine" checked /> Routine</label>
<label><input type="radio" name="priority" value="today" /> Today</label>
<label><input type="radio" name="priority" value="asap" /> ASAP</label>
<label><input type="radio" name="priority" value="stat" /> STAT</label>
</fieldset>
</div>
<div class="form-group">
<label for="indication">Clinical Indication (ICD-10-AM)</label>
<input type="text" id="indication" placeholder="Search diagnosis code..."
value="I10 — Essential hypertension" />
</div>
<div class="form-group full-width">
<label for="instructions">Special Instructions</label>
<textarea id="instructions" maxlength="500" rows="2"
placeholder="Additional instructions for pharmacy..."></textarea>
<small><span id="char-count">0</span>/500 characters</small>
</div>
</div>
</section>
<!-- Action Bar -->
<footer class="order-actions">
<button type="button" class="btn-secondary">Cancel</button>
<button type="button" class="btn-secondary">Save as Draft</button>
<button type="button" class="btn-primary" aria-label="Review and sign order">
Review & Sign Order
</button>
</footer>
</div>
HTML Wireframe: CDS Alert Dialog (SCR-CPOE-002)
Show HTML code
HTML
<div class="modal-overlay" role="dialog" aria-modal="true"
aria-labelledby="alert-title" aria-describedby="alert-body">
<div class="alert-dialog alert-major">
<!-- Alert Header -->
<header class="alert-header">
<span class="severity-icon severity-major" aria-hidden="true">⚠</span>
<h2 id="alert-title">Major Drug-Drug Interaction</h2>
</header>
<!-- Alert Body -->
<div class="alert-body" id="alert-body">
<div class="alert-details">
<div class="detail-row">
<strong>New Order:</strong> Clarithromycin 500 mg PO BID
</div>
<div class="detail-row">
<strong>Interacting Drug:</strong> Simvastatin 40 mg PO daily (active)
</div>
<div class="detail-row">
<strong>Severity:</strong>
<span class="severity-badge major">MAJOR</span>
— Risk of rhabdomyolysis
</div>
<div class="detail-row">
<strong>Mechanism:</strong> CYP3A4 inhibition increases simvastatin levels
</div>
</div>
<div class="recommendations">
<h3>Recommended Actions</h3>
<ol>
<li>Discontinue simvastatin during antibiotic course</li>
<li>Switch to azithromycin (no interaction)</li>
<li>Reduce simvastatin to 10 mg if clarithromycin required</li>
</ol>
</div>
<div class="alternatives">
<h3>Formulary Alternatives (No Interaction)</h3>
<button class="alt-option" aria-label="Select Azithromycin 250mg">
Azithromycin 250 mg PO daily × 5 days
<span class="formulary-badge tier-1">Preferred</span>
</button>
<button class="alt-option" aria-label="Select Amoxicillin 500mg">
Amoxicillin 500 mg PO TID × 7 days
<span class="formulary-badge tier-1">Preferred</span>
</button>
</div>
</div>
<!-- Override Section (collapsed by default) -->
<details class="override-section">
<summary>Override this alert and continue with Clarithromycin</summary>
<div class="override-form">
<label for="override-reason">Override Reason (required)</label>
<select id="override-reason" required>
<option value="">— Select reason —</option>
<option value="CLIN_NECESSITY">Clinical necessity despite risk</option>
<option value="NO_ALTERNATIVE">No therapeutic alternative available</option>
<option value="SPECIALIST_CONSULT">Discussed with specialist</option>
<option value="SHORT_DURATION">Short-duration therapy, low risk</option>
<option value="PATIENT_PREFERENCE">Patient refuses alternative</option>
<option value="INCORRECT_ALERT">Alert fired inappropriately</option>
</select>
<label for="override-notes">Additional Notes</label>
<textarea id="override-notes" rows="2"
placeholder="Provide clinical justification..."></textarea>
</div>
</details>
<!-- Action Buttons -->
<footer class="alert-actions">
<button class="btn-danger" aria-label="Cancel order">Cancel Order</button>
<button class="btn-secondary" aria-label="Select alternative medication">
Select Alternative
</button>
<button class="btn-warning" aria-label="Override alert and continue"
disabled id="btn-override">
Override & Continue
</button>
</footer>
</div>
</div>
HTML Wireframe: Lab Order Form (SCR-CPOE-003)
Show HTML code
HTML
<div class="cpoe-container" role="main" aria-label="Laboratory Order Entry">
<!-- Patient Banner (same component as SCR-CPOE-001) -->
<header class="patient-banner">
<div class="patient-info">
<span class="patient-name">Ahmed Al-Maktoum</span>
<span class="patient-mrn">MRN: 2024-001234</span>
</div>
<div class="encounter-info">Inpatient — Ward 4B, Bed 12</div>
</header>
<section class="order-section" aria-label="Lab Test Search">
<h2>Laboratory Order</h2>
<!-- Favourites Quick-Select -->
<div class="favourites-bar" aria-label="Frequently ordered tests">
<span class="label">Favourites:</span>
<button class="favourite-pill">CBC</button>
<button class="favourite-pill">BMP</button>
<button class="favourite-pill">CMP</button>
<button class="favourite-pill">Lipid Panel</button>
<button class="favourite-pill">HbA1c</button>
<button class="favourite-pill">TSH</button>
</div>
<!-- Search -->
<div class="search-container">
<label for="lab-search">Search Test</label>
<input type="text" id="lab-search"
placeholder="Test name, LOINC code, or clinical indication..." />
</div>
<!-- Selected Tests -->
<div class="selected-tests" aria-label="Selected laboratory tests">
<h3>Selected Tests</h3>
<table class="test-table" aria-label="Selected tests details">
<thead>
<tr>
<th scope="col">Test</th>
<th scope="col">LOINC</th>
<th scope="col">Specimen</th>
<th scope="col">Fasting</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Complete Blood Count (CBC)</td>
<td>58410-2</td>
<td>Blood (venous)</td>
<td>No</td>
<td><button class="btn-remove" aria-label="Remove CBC">✕</button></td>
</tr>
<tr>
<td>Basic Metabolic Panel (BMP)</td>
<td>51990-0</td>
<td>Blood (venous)</td>
<td>Recommended</td>
<td><button class="btn-remove" aria-label="Remove BMP">✕</button></td>
</tr>
</tbody>
</table>
</div>
<!-- Order Details -->
<div class="form-grid">
<div class="form-group">
<label for="collection-time">Collection Date/Time</label>
<select id="collection-time">
<option selected>ASAP</option>
<option>Today</option>
<option>Tomorrow AM</option>
<option>Specific date/time...</option>
</select>
</div>
<div class="form-group">
<label for="lab-priority">Priority</label>
<fieldset class="radio-group" id="lab-priority">
<label><input type="radio" name="lab-priority" value="routine" checked /> Routine</label>
<label><input type="radio" name="lab-priority" value="today" /> Today</label>
<label><input type="radio" name="lab-priority" value="stat" /> STAT</label>
</fieldset>
</div>
<div class="form-group">
<label for="lab-indication">Clinical Indication (ICD-10-AM)</label>
<input type="text" id="lab-indication" placeholder="Search diagnosis..." />
</div>
<div class="form-group full-width">
<label for="lab-instructions">Special Instructions</label>
<textarea id="lab-instructions" maxlength="500" rows="2"></textarea>
</div>
</div>
</section>
<footer class="order-actions">
<button class="btn-secondary">Cancel</button>
<button class="btn-primary">Review & Sign Orders</button>
</footer>
</div>
Screen Behaviour Notes
SCR-CPOE-006: Active Orders List
- Default view: All active orders for current patient grouped by type (Medications, Labs, Imaging)
- Filters: Order type, status, date range, ordering provider
- Sort: By date (newest first), priority, or type
- Inline actions: Modify (pencil icon), Cancel/Discontinue (X icon), Reorder (copy icon)
- Status indicators: Colour-coded badges (Active=green, Pending=yellow, Completed=grey, Discontinued=red)
- Controlled substance flag: Lock icon displayed next to CDa/CDb medications
SCR-CPOE-007: Order Set Browser
- Categories: Searchable by diagnosis, speciality, or keyword
- Preview: Expandable view showing all items before execution
- Customisation: Per-item checkbox (select/deselect), inline dose/frequency modification
- Conditional items: Highlighted with criteria shown (e.g., "If eGFR < 30")
- Last reviewed: Date and reviewer shown; warning if > 12 months since last review
SCR-CPOE-009: Pharmacy Queue Dashboard
- Layout: Kanban-style columns: Pending → In Review → Verified → Dispensed
- Priority sorting: STAT orders at top with visual urgency indicator (red pulse)
- Controlled substance: Separate section/tab with dual-verification workflow
- Turnaround timer: Live countdown showing time since order received vs target SLA
- Actions: Verify, Reject (with reason), Place on Hold, Flag for Clarification
SCR-CPOE-010: Co-Signature Queue
- List view: All orders pending co-signature, sorted by urgency (oldest first)
- Details: Original order, entered-by, entry time, time remaining before escalation
- Actions: Co-sign (requires e-signature), Modify then co-sign, Reject (cancels order, notifies enterer)
- Badge count: Shown in navigation as unread notification count
Responsive Design Summary
| Breakpoint | Layout Changes |
|---|---|
| ≥ 1200 px (Desktop) | Full multi-column layout; side panels for CDS alerts; split-view for order review |
| 768–1199 px (Tablet) | Two-column form layout; modals for CDS alerts; stacked order review |
| < 768 px (Mobile) | Single-column stacked layout; full-screen CDS alerts; larger touch targets (≥ 44px); simplified navigation |
All screens follow WCAG 2.1 AA guidelines: minimum contrast ratio 4.5:1 for text, 3:1 for large text and UI components; focus indicators on all interactive elements; aria-live regions for dynamic content updates.