CPOE Screen Requirements

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

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">&#x2713; 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">&#x2713; 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">&#x26A0; 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 &amp; 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">&#x26A0;</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 &times; 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 &times; 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 &amp; 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">&#x2715;</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">&#x2715;</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 &amp; 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.

content/clinical/cpoe/04-screen-requirements.md Generated 2026-02-20 22:54