Pharmacy Information System Screen Requirements

Pharmacy Information System Screen Requirements

Screen Inventory

Screen ID Screen Name Primary Actor(s) Workflow(s) Access Level
SCR-PIS-001 Pharmacist Order Verification Queue Clinical Pharmacist, Pharmacy Supervisor, IV Pharmacist, Antimicrobial Stewardship Pharmacist WF-PIS-001, WF-PIS-005, WF-PIS-008 Pharmacy clinical roles
SCR-PIS-002 Dispensing Worklist Pharmacy Technician, Clinical Pharmacist, Pharmacy Supervisor WF-PIS-002, WF-PIS-003, WF-PIS-006 Pharmacy operations roles
SCR-PIS-003 eMAR (Medication Administration Record) Nurse (eMAR role), Clinical Pharmacist (read-only) WF-PIS-004, WF-PIS-006 Nursing + read-only pharmacy
SCR-PIS-004 Outpatient Dispensing Clinical Pharmacist, Pharmacy Technician, Pharmacy Supervisor WF-PIS-003 Outpatient pharmacy staff
SCR-PIS-005 IV Admixture Preparation IV Pharmacist, Pharmacy Technician WF-PIS-005 IV room staff
SCR-PIS-006 Controlled Substance Register Clinical Pharmacist, Pharmacy Technician, Pharmacy Supervisor, Chief Pharmacist WF-PIS-002, WF-PIS-004, WF-PIS-006 Controlled substance–authorised staff
SCR-PIS-007 Formulary Management Pharmacy Supervisor, Chief Pharmacist / Director, Antimicrobial Stewardship Pharmacist WF-PIS-001, WF-PIS-008 Pharmacy leadership & informatics
SCR-PIS-008 Inventory Dashboard Pharmacy Inventory Manager, Pharmacy Supervisor, Chief Pharmacist WF-PIS-002, WF-PIS-003, WF-PIS-005, WF-PIS-006 Inventory & management roles
SCR-PIS-009 Medication Reconciliation Clinical Pharmacist, Antimicrobial Stewardship Pharmacist, Physician, Nurse WF-PIS-007 Clinical roles with reconciliation permission
SCR-PIS-010 Pharmacy Analytics Dashboard Pharmacy Supervisor, Chief Pharmacist / Director, Antimicrobial Stewardship Pharmacist, Quality Officer WF-PIS-001–WF-PIS-008 Management & quality roles

flowchart LR H["Pharmacy Home"] --> Q1["SCR-PIS-001<br/>Order Verification Queue"] H --> D1["SCR-PIS-002<br/>Dispensing Worklist"] H --> O1["SCR-PIS-004<br/>Outpatient Dispensing"] H --> IV1["SCR-PIS-005<br/>IV Admixture Prep"] H --> CS1["SCR-PIS-006<br/>Controlled Substance Register"] H --> F1["SCR-PIS-007<br/>Formulary Management"] H --> I1["SCR-PIS-008<br/>Inventory Dashboard"] H --> R1["SCR-PIS-009<br/>Medication Reconciliation"] H --> A1["SCR-PIS-010<br/>Pharmacy Analytics"] Q1 -->|"Select Order"| D1 Q1 -->|"IV Order"| IV1 Q1 -->|"Antimicrobial Order"| R1 Q1 -->|"Non-formulary / Restricted"| F1 D1 -->|"Controlled Item"| CS1 D1 -->|"Inventory Adjust"| I1 O1 -->|"Controlled Item"| CS1 O1 -->|"Stock Issue"| I1 R1 -->|"Open Patient eMAR"| EM1["SCR-PIS-003<br/>eMAR"] EM1 -->|"Back to Reconciliation"| R1 N["Ward Nurse Home"] --> EM1 N --> R1 M["Management Home"] --> I1 M --> A1 M --> F1

Screen Specifications

SCR-PIS-001: Pharmacist Order Verification Queue

Purpose

Central worklist for pharmacists to review and verify inpatient and outpatient medication orders, apply clinical decision support (CDS), manage formulary restrictions, and release orders to dispensing or IV preparation.

Field Specifications

Filters / Header Controls

Field Type Required Validation Default Notes
Facility Dropdown Yes Must be valid facilities.facility_id User’s default facility Multi-facility users can switch; affects queue scope
Pharmacy Location Dropdown No Must be valid pharmacy location User’s default location Central, satellite, IV room, etc.
Queue Type Dropdown Yes IN (Inpatient, Outpatient, IV, Antimicrobial, All) Inpatient Filters orders by type
Priority Filter Multi-select chips No Values: STAT, First Dose, Routine, Discharge All selected Used for triage
Status Filter Multi-select No IN (Pending Verification, On Hold, Clarification Requested) Pending Verification
Patient Search Text No Min 2 chars Search by name, MRN, Emirates ID
Time Window Dropdown No IN (Last 2h, 6h, 24h, All) Last 6h Performance optimisation

Queue List Columns

Field Type Required Validation Default Notes
Priority Badge Display STAT must be highlighted STAT (red), First Dose (orange), Routine (blue) with text
Patient Name Link text Display Opens patient chart / eMAR in new tab
MRN Text Display From patients
Location Text Display Ward/bed from encounters
Drug Name Text Display From pharmacy_orders.drug_name
Dose / Route / Frequency Text Display Concatenated order details
Order Type Badge Display IN (Inpatient, Outpatient, IV, Antimicrobial)
CDS Alerts Summary Icon + count Display 0 Shows count by severity (e.g., 1 major, 2 minor)
Formulary Status Badge Display IN (On Formulary, Non-formulary, Restricted) Colour + text
Ordering Provider Text Display Provider name
Ordered Date/Time DateTime Display From CPOE
Age / Weight Text Display From patient chart (for dosing context)
Actions Buttons Yes “Verify”, “Hold”, “Intervene”

Order Detail Panel (on row click)

Field Type Required Validation Default Notes
Patient Banner Composite Display Standard patient banner pattern (see Common UI Patterns)
Full Order Details Read-only Display Includes indication, duration, PRN indication
Allergies List Display Highlight drug-allergy matches
Current Medications Table Display For interaction review
Labs Summary Table Display Renal/hepatic function, levels (e.g., creatinine, ALT/AST)
CDS Alert List List Display Each alert with severity, description, recommendation
Formulary Alternatives List Display From formulary_items
Insurance Coverage Badge + text Display Covered / Prior Auth / Not Covered
Verification Decision Radio group Yes IN (Approve, Reject, Clarify with Prescriber) Approve Required to complete verification
Verification Notes Textarea Conditional Max 1000 chars Required if Reject or Clarify
Intervention Type Dropdown Conditional From pharmacy_interventions.intervention_type list Shown if “Create Intervention” checked
Create Intervention Checkbox No Unchecked When checked, intervention fields appear

Validation Messages

Condition Message Severity
Verification decision not selected "Select a verification decision before proceeding." Error
Reject/Clarify without notes "Please document the reason for rejection or clarification." Error
Approve with unresolved hard-stop CDS "This order has a hard-stop alert that must be resolved or the order modified." Error (block)
Approve restricted non-formulary without justification "Restricted or non-formulary orders require an intervention note or justification." Error
Missing required patient data (e.g., weight for weight-based drug) "Patient weight is required to verify this medication. Please obtain and document weight." Warning (can proceed with justification)
Insurance requires prior auth "Insurance requires prior authorisation. Consider formulary alternatives or proceed with prior auth process." Warning

Actions / Buttons

Button Location Behaviour
Verify & Release Order detail footer Validates fields; if pass, sets pharmacy_orders.order_status = 'Verified', logs verified_by and verified_datetime, pushes to dispensing/IV queues, sends status update to CPOE/EHR.
Reject Order Order detail footer Requires notes; sets status to Rejected, sends message to ordering provider, logs intervention if selected.
Request Clarification Order detail footer Sets status Clarification Requested, sends message to provider, keeps order in queue with flag.
Create Intervention Detail panel Opens intervention sub-form; on save, inserts into pharmacy_interventions.
Open Patient Chart Detail header Opens EHR patient chart in new tab with same encounter.
Open eMAR Detail header Opens SCR-PIS-003 for this patient.
Filter / Reset Filters Header Applies or clears filters; updates queue.

Accessibility (WCAG 2.1 AA)

  • Queue table uses <table> with <thead> and <th scope="col">.
  • All icons (priority, alerts, formulary) have aria-label and text labels.
  • Order detail panel is reachable via keyboard; focus moves into panel when opened and returns to the selected row when closed.
  • CDS alerts region uses role="region" and aria-live="polite" for new alerts.
  • Colour is not the only indicator for severity; severity text (e.g., “Major”) is always shown.

Responsive / Mobile

  • On tablets, queue becomes single-column cards (patient + drug + priority + key alerts).
  • Filters collapse into a slide-down panel.
  • Order detail panel becomes full-screen overlay with sticky action bar at bottom.
  • Buttons sized for touch (min 44x44 px); horizontal scrolling avoided.

SCR-PIS-002: Dispensing Worklist

Purpose

Operational worklist for pharmacy technicians and pharmacists to pick, prepare, barcode-verify, and label medications for dispensing (inpatient unit-dose and outpatient fills), with integration to inventory and controlled substance workflows.

Field Specifications

Filters / Header

Field Type Required Validation Default Notes
Facility Dropdown Yes Valid facility User default
Dispensing Location Dropdown Yes Valid pharmacy location User default Determines inventory source
Queue Type Dropdown Yes IN (Inpatient, Outpatient, ADC Refill, All) Inpatient
Priority Filter Multi-select No STAT, First Dose, Routine, Discharge All
Status Filter Multi-select No IN (Pending Pick, Picked, Ready for Check, Completed) Pending Pick
Patient / Order Search Text No Min 2 chars Search by patient, MRN, order ID

Worklist Columns

Field Type Required Validation Default Notes
Priority Badge Display Same scheme as SCR-PIS-001
Patient Name Text Display For inpatient; outpatient may show “Walk-in” if no encounter
Location Text Display Ward/bed or “OP Pharmacy”
Drug Text Display Name + strength + form
Dose / Quantity Text Display Dose for inpatient, quantity for outpatient
Order ID Text Display For traceability
Pick Status Badge Display IN (Pending, In Progress, Picked, Checked, Dispensed) Pending
Label Printed Icon Display Boolean False Shows if label printed
Barcode Verify Icon Display Boolean False Indicates successful scan
Dispensing Location Text Display Shelf/ADC bin
Actions Buttons Yes “Open”, “Print Label”, “Mark Dispensed”

Dispensing Detail Panel

Field Type Required Validation Default Notes
Patient Banner Composite Display Standard banner
Order Summary Read-only Display From pharmacy_orders
Quantity to Dispense Numeric Yes > 0; <= ordered quantity (or refill rules) From order Editable for partial fills with reason
Lot Number Dropdown / text Yes Must match existing inventory lot Auto-selected if single lot Required for traceability
Expiry Date Date Display Must be >= today From inventory Read-only from selected lot
ADC / Shelf Location Text Display From pharmacy_inventory.location_id
Barcode Scan Input Hidden text Yes (for barcode workflow) Must match expected drug barcode Populated via scanner; failure triggers alert
Picked By User Auto Current user Logged on first “Pick” action
Checked By User Conditional Required for high-risk / controlled drugs
Dispensing Notes Textarea No Max 500 chars For anomalies (e.g., partial fill)

Validation Messages

Condition Message Severity
Quantity <= 0 "Quantity to dispense must be greater than zero." Error
Quantity > available inventory "Requested quantity exceeds available stock at this location." Error
Lot not selected "Select a lot number before dispensing." Error
Barcode scan mismatch "Scanned item does not match the expected medication or strength." Error (block)
High-risk medication without double-check "A second check is required for this medication before dispensing." Error (block)
Controlled substance without CS register entry "Controlled substance dispensing must be logged in the Controlled Substance Register." Error (block)

Actions / Buttons

Button Behaviour
Start Pick Sets status to “In Progress”, assigns picked_by.
Mark Picked Confirms quantity and lot; sets status to “Picked”; updates pharmacy_inventory and inserts inventory_transactions.
Print Label Generates patient-specific label with barcode, EN/AR instructions; sets label_printed = true.
Mark Checked For pharmacist; sets status to “Ready for Dispense” or “Checked”; logs verified_by.
Mark Dispensed Finalises dispensing; inserts into pharmacy_dispensing, triggers billing (INT-PIS-004) and HIE messages (INT-PIS-005/006).
Report Issue Opens incident form (e.g., stock discrepancy, wrong order).

Accessibility

  • Barcode scan field is focusable but normally hidden; scanner input is captured via keyboard events.
  • Status badges include text labels; icons have aria-label.
  • Table rows have role="button" for screen readers when clickable.
  • All actions accessible via keyboard (Enter/Space on row, Tab to buttons).

Responsive / Mobile

  • On handheld devices (e.g., handheld scanners), each worklist item is a card with large “Pick” and “Dispense” buttons.
  • Detail panel uses vertical layout; label preview is collapsible.
  • Sticky footer with primary actions to reduce scrolling.

SCR-PIS-003: eMAR (Medication Administration Record)

Purpose

Nursing interface to view scheduled and PRN medications, perform barcode-based five-rights verification, record administrations, and document holds/refusals and PRN responses.

Field Specifications

Header / Patient Context

Field Type Required Validation Default Notes
Patient Banner Composite Display Standard banner with allergy summary and weight
Date Selector Date picker Yes Today Allows navigation by day
View Mode Toggle Yes IN (Timeline, List) Timeline Timeline for visual schedule; list for accessibility

Scheduled Medications Timeline/List

Field Type Required Validation Default Notes
Medication Row Composite Display Drug name, dose, route, frequency
Administration Slots Clickable cells Display Each scheduled time; colour-coded by status
PRN Medications Section List Display Shows PRN meds with last given time and min interval

Administration Dialog (opened when slot clicked)

Field Type Required Validation Default Notes
Nurse Badge Scan Text (barcode) Yes Must match logged-in nurse ID Can be auto-filled from SSO; scanning required in high-security mode
Patient Wristband Scan Text (barcode) Yes Must match patient ID Required for barcode verification
Medication Barcode Scan Text (barcode) Yes Must match expected drug/dose Required before recording administration
Five-Rights Check Result Read-only Display Shows pass/fail for patient, drug, dose, route, time
Actual Date/Time DateTime picker Yes Cannot be > 30 min in future; cannot be too far in past without justification Now Editable for late/early doses with reason
Dose Given Numeric Yes > 0; <= ordered dose unless partial allowed Ordered dose
Route Dropdown Yes Must match order route unless override with reason Order route
Site Dropdown Conditional Required for injections e.g., left deltoid
Status Radio group Yes IN (Given, Held, Refused, Omitted) Given
Hold/Refuse Reason Dropdown + text Conditional Required if Status != Given Predefined reasons + free-text
PRN Indication Text Conditional Required if PRN and Status = Given e.g., “pain score 7/10”
PRN Response Text Conditional Required for PRN follow-up e.g., “pain reduced to 3/10 after 30 min”
Witness ID User selector / scan Conditional Required for controlled substance waste or high-risk meds Nurse or pharmacist witness
Notes Textarea No Max 500 chars Additional comments

Validation Messages

Condition Message Severity
Nurse badge mismatch "Scanned ID does not match the logged-in nurse. Please verify your credentials." Error
Patient wristband mismatch "Patient barcode does not match the selected patient." Error (block)
Medication barcode mismatch "Scanned medication does not match the ordered drug, strength, or form." Error (block)
Status = Given but barcode not verified "Barcode verification is required before documenting administration." Error (block, unless override role)
PRN without indication "Indication is required when administering PRN medications." Error
PRN without response "Please document the patient's response to the PRN medication." Warning (can be deferred with reminder)
Controlled substance without witness for waste "A witness is required to document controlled substance waste." Error
Administration time far from scheduled "Administration time is significantly different from the scheduled time. Please confirm and document reason." Warning

Actions / Buttons

Button Behaviour
Administer Validates five-rights; if pass, inserts row in medication_administration with status='Given', barcode_verified=true, updates eMAR status.
Hold Sets status Held with reason; logs in medication_administration.
Refuse Sets status Refused with reason; logs in medication_administration.
Omit Sets status Omitted with reason; logs in medication_administration.
Scan Again Clears barcode fields and refocuses for re-scan.
View Order Details Opens read-only view of pharmacy_orders for this medication.

Accessibility

  • Timeline view must have an alternative list view with high contrast and clear text for screen readers.
  • All interactive slots have aria-label describing medication, dose, scheduled time, and status.
  • Barcode scanning fields are accessible via keyboard; manual entry allowed as fallback with reason.
  • Status colours (e.g., green for given, red for overdue) always accompanied by text labels.

Responsive / Mobile

  • On mobile devices (e.g., nurse handhelds), eMAR uses list view by default.
  • Large tap targets for each administration slot.
  • Administration dialog is full-screen with step-by-step sections (Scan Patient → Scan Medication → Confirm → Document).

SCR-PIS-004: Outpatient Dispensing

Purpose

Workflow for community/outpatient pharmacy to process prescriptions (electronic or scanned), verify patient identity and insurance, perform CDS, document counselling, and dispense medications with bilingual labels.

Field Specifications

Header / Patient Search

Field Type Required Validation Default Notes
Emirates ID Text Conditional Regex ^784-\d{4}-\d{7}-\d$ Auto-format with dashes; required for UAE nationals/residents when available
MRN / Patient Search Autocomplete text Yes Min 2 chars Search by name, MRN, mobile
Prescription Source Dropdown Yes IN (Electronic, Paper Scanned, Walk-in) Electronic Determines subsequent fields
Insurance Plan Dropdown No Must match active plan From patient Required if insurance billing

Prescription List

Field Type Required Validation Default Notes
Prescription Table Table Display Each row = medication
Drug Text Display From CPOE or OCR
Dose / Sig Text Display Directions in EN; AR translation preview
Quantity Numeric Yes > 0; <= max allowed by regulation (esp. controlled) From prescription Editable with reason
Refills Numeric Display Controlled substances may have 0 refills
Insurance Check Status Badge Display Eligible / Not Covered / Prior Auth
Copay Currency Display >= 0 Calculated from billing rules
Counselling Required Checkbox No Checked by default for new meds

Counselling & Dispense Section

Field Type Required Validation Default Notes
Counselling Checklist Multi-checkbox Conditional At least one item checked if counselling documented Items: Indication, Dose, Side effects, Storage, Missed dose, etc.
Counselling Provided Radio Yes IN (Yes, Declined, Not Required) Yes
Counselling Notes Textarea Conditional Max 1000 chars Required if Yes or Declined
Payment Method Dropdown Yes IN (Insurance, Cash, Mixed) Insurance
Amount Due Currency Display >= 0 From billing
Amount Collected Currency Conditional >= 0; must equal Amount Due Required before final dispense
Label Language Multi-select Yes IN (English, Arabic) English + Arabic Both recommended in UAE
Dispense All Checkbox No Checked If unchecked, per-line dispense controls appear

Validation Messages

Condition Message Severity
Invalid Emirates ID format "Enter Emirates ID in format 784-YYYY-NNNNNNN-C." Error
Insurance not selected when Payment Method = Insurance "Select an insurance plan for insurance billing." Error
Amount Collected < Amount Due "Collected amount is less than the amount due." Error
Counselling = Yes but checklist empty "Select at least one counselling topic discussed." Error
Controlled substance with refills > allowed "Refills for this controlled substance exceed UAE MOH limits." Error
Label language none selected "Select at least one label language." Error

Actions / Buttons

Button Behaviour
Retrieve eRx Loads electronic prescriptions for selected patient from CPOE.
Scan Paper Rx Opens scanning/upload dialog; triggers OCR and manual verification.
Run Insurance Check Calls eligibility API; updates Insurance Check Status and Copay.
Run CDS Runs interaction/allergy/dose checks; shows alerts similar to SCR-PIS-001.
Print Labels Generates bilingual labels for selected medications.
Record Counselling Saves counselling documentation to patient record.
Collect Payment Opens payment dialog; posts to billing system.
Dispense Finalises dispensing; inserts into pharmacy_dispensing, updates inventory, triggers HIE and patient portal updates.

Accessibility

  • Emirates ID field has clear input mask and instructions; screen readers read “Emirates ID, format 784 dash year dash number dash check digit”.
  • Counselling checklist uses standard checkboxes with labels; not icon-only.
  • Monetary values formatted with currency and aria-label (e.g., “Amount due 50 dirhams”).

Responsive / Mobile

  • Designed for desktop as primary; on tablets, prescription list becomes stacked cards.
  • Payment and counselling sections collapse into accordions.
  • Label preview is optional on small screens to reduce clutter.

SCR-PIS-005: IV Admixture Preparation

Purpose

Guided interface for IV room staff to prepare compounded sterile products, including compounding worksheets, ingredient scanning, BUD calculation, and verification.

Field Specifications

Admixture Queue

Field Type Required Validation Default Notes
Queue Filter Dropdown No IN (All, Pending, In Progress, Completed) Pending
Patient Name Text Display
Location Text Display Ward/bed
Base Solution Text Display e.g., D5W 500 mL
Additive Drug Text Display
Total Volume Text Display
Status Badge Display IN (Pending, In Progress, Awaiting Check, Completed) Pending
Priority Badge Display STAT vs Routine
Actions Buttons Yes “Open Worksheet”

Compounding Worksheet

Field Type Required Validation Default Notes
Patient Banner Composite Display
Order Details Read-only Display Drug, dose, rate, indication
Base Solution Product Dropdown Yes Must match IV base master From order
Additive Product Dropdown Yes Must match formulary From order
Required Volume Base Numeric Display > 0 Calculated
Required Volume Additive Numeric Display > 0 Calculated
Ingredient Barcode Scan Text (barcode) Yes Must match selected product Separate scan for base and each additive
Gravimetric Weight Numeric Conditional Within tolerance vs expected If gravimetric system integrated
Beyond-Use Date/Time (BUD) DateTime Yes Must be <= max stability; >= now Calculated Based on product, storage, guidelines
Prepared By User Auto Current user
Verified By User Conditional Required before completion
Preparation Date/Time DateTime Auto Now

Validation Messages

Condition Message Severity
Ingredient scan mismatch "Scanned product does not match the expected ingredient." Error
Gravimetric weight out of range "Measured weight is outside the acceptable range. Please recheck preparation." Error
BUD beyond allowed stability "Beyond-use date exceeds allowed stability for this preparation." Error
Verified By not set "Pharmacist verification is required before releasing the admixture." Error

Actions / Buttons

Button Behaviour
Start Preparation Sets status to “In Progress”, logs start time.
Scan Base / Scan Additive Opens scan step; validates barcode.
Calculate BUD Applies facility rules to compute BUD; allows override with reason.
Mark Verified For pharmacist; sets status to “Awaiting Delivery”, logs verified_by.
Complete & Release Marks admixture as “Completed”; triggers notification to nursing unit.

Accessibility

  • Step-by-step layout with headings for each step (Select Ingredients, Scan, Verify, Label).
  • Screen reader announces step changes and validation errors.
  • Barcode scanning fields have text alternatives.

Responsive / Mobile

  • Intended primarily for workstation in IV room; on tablets, steps become vertical with collapsible sections.
  • Large buttons for gloved use.

SCR-PIS-006: Controlled Substance Register

Purpose

Electronic controlled substance register for UAE MOH compliance: real-time perpetual inventory, dual-signature capture, chain-of-custody tracking, discrepancy management, and reporting.

Field Specifications

Header / Filters

Field Type Required Validation Default Notes
Facility Dropdown Yes Valid facility User default
Location Dropdown Yes Valid CS storage location (vault, ADC) User default
Drug Name / Code Autocomplete No Min 2 chars Search by name, RxNorm, NDC
Schedule Dropdown No From MOH schedules master All
Date Range Date range picker No Start <= End Today For transaction log

Drug Register View

Field Type Required Validation Default Notes
Drug Name Text Display
Controlled Schedule Badge Display e.g., Schedule II
Current Balance Numeric Display >= 0 From controlled_substance_log.balance_after
Last Transaction Text Display Summary of last entry
Discrepancy Flag Icon Display If any unresolved discrepancy

Transaction Log Table

Field Type Required Validation Default Notes
Date/Time DateTime Display
Transaction Type Text Display IN (Receipt, Dispense, Return, Waste, Adjustment)
Quantity Numeric Display Positive for in, negative for out
Balance After Numeric Display
From User Text Display
To User / Patient Text Display
Witness Text Display Required for waste and some dispenses
Location Text Display
Discrepancy Badge Display Yes/No

New Transaction Form

Field Type Required Validation Default Notes
Transaction Type Dropdown Yes IN (Receipt, Dispense to Patient, Return, Waste, Adjustment)
Patient Search Autocomplete Conditional Required if Dispense to Patient Links to patients
Quantity Numeric Yes > 0
From User User selector Conditional Required for Return/Waste Current user
To User User selector Conditional Required for Receipt/Return
Witness ID User selector / scan Conditional Required for Waste and high-schedule Dispense
Reason Textarea Conditional Required for Waste/Adjustment
Emirates ID (for patient) Text Conditional Regex ^784-\d{4}-\d{7}-\d$ For MOH reporting when available

Validation Messages

Condition Message Severity
Missing witness for required transaction "Witness is required for this controlled substance transaction." Error
Negative resulting balance "Transaction would result in a negative balance. Please verify quantity." Error
Missing patient for Dispense "Select a patient for dispensing transactions." Error
Invalid Emirates ID format "Enter Emirates ID in format 784-YYYY-NNNNNNN-C." Error

Actions / Buttons

Button Behaviour
Add Transaction Validates and inserts into controlled_substance_log, updates balance.
Mark Discrepancy Flags a transaction as discrepant; opens investigation form.
Resolve Discrepancy Records resolution details; clears discrepancy flag.
Export MOH Report Generates period report (CSV/PDF) for MOH portal.

Accessibility

  • Transaction log table supports keyboard navigation and screen reader headers.
  • Discrepancy icons have descriptive aria-label (e.g., “Unresolved discrepancy”).

Responsive / Mobile

  • On smaller screens, transaction log rows collapse into cards with key fields.
  • New transaction form uses vertical layout with grouped sections.

SCR-PIS-007: Formulary Management

Purpose

Administrative interface to manage facility formulary, formulary status, restriction types, therapeutic alternatives, and approval workflows.

Field Specifications

Search / Filter

Field Type Required Validation Default Notes
Drug Search Autocomplete No Min 2 chars Search by name, RxNorm
Formulary Status Filter Multi-select No IN (On, Non-formulary, Restricted, Deprecated) On + Restricted
Therapeutic Class Dropdown No From ATC classes
Facility Dropdown Yes Valid facility User default

Formulary Item Detail

Field Type Required Validation Default Notes
Drug Name Text Display
RxNorm Code Text Display
Formulary Status Dropdown Yes IN (On Formulary, Non-formulary, Restricted, Deprecated) On Formulary
Restriction Type Dropdown Conditional e.g., ID Approval, ICU Only, Step Therapy Required if Restricted
Therapeutic Class Dropdown Yes From ATC
Therapeutic Alternatives Multi-select No RxNorm codes
Requires Prior Auth Checkbox No
Is Controlled Checkbox No
Controlled Schedule Dropdown Conditional From MOH schedules Required if Is Controlled
Approval Workflow Dropdown No e.g., Pharmacy-only, P&T Committee, Chief Pharmacist Pharmacy-only
Effective Date Date Yes >= today or <= today for existing Today
Status History Timeline Display Read-only audit trail

Validation Messages

Condition Message Severity
Restricted without restriction type "Select a restriction type for restricted formulary items." Error
Is Controlled without schedule "Select a controlled substance schedule." Error
Effective date in past for new item "Effective date for new formulary items cannot be in the past." Warning (allow with justification)

Actions / Buttons

Button Behaviour
Add New Item Opens blank formulary item form.
Save Changes Validates and updates formulary_items; logs change in history.
Submit for Committee Routes change to P&T committee workflow.
View History Shows full audit trail of formulary decisions.

Accessibility

  • Form fields grouped with <fieldset> and <legend> for screen readers.
  • Status history timeline uses list structure with dates and descriptions.

Responsive / Mobile

  • Detail view becomes single-column; history collapses into accordion.
  • Search and filters in collapsible panel.

SCR-PIS-008: Inventory Dashboard

Purpose

Real-time view of stock levels, reorder and expiry alerts, consumption trends, and purchase order management for pharmacy inventory.

Field Specifications

Summary Cards

Card Content
Total Inventory Value Sum of quantity_on_hand * unit_cost by facility/location
Items Below Reorder Point Count and link to filtered list
Imminent Expiry Items expiring within X days
Stockouts Items with quantity_on_hand = 0 and demand > 0

Stock Levels Table

Field Type Required Validation Default Notes
Drug Name Text Display
RxNorm / NDC Text Display
Location Text Display
Quantity on Hand Numeric Display >= 0
Reorder Point Numeric Display >= 0
PAR Level Numeric Display >= 0
Days of Supply Numeric Display >= 0 Calculated from consumption trends
Expiry Date (earliest) Date Display
Alerts Icons Display Low stock, expiry, stockout

Purchase Orders Section

Field Type Required Validation Default Notes
Vendor Dropdown Yes Valid vendor
Items Multi-row form Yes Each row: drug, quantity, unit cost
Expected Delivery Date Date No >= today
PO Status Badge Display IN (Draft, Submitted, Received, Closed) Draft

Validation Messages

Condition Message Severity
Reorder quantity 0 "Reorder quantity must be greater than zero." Error
Expected delivery date in past "Expected delivery date cannot be in the past." Error

Actions / Buttons

Button Behaviour
Generate Reorder List Suggests items below reorder point with recommended quantities.
Create Purchase Order Opens PO form pre-populated from reorder list.
Export Inventory Exports current inventory snapshot to CSV/Excel.
View Consumption Trend Opens chart for selected item (daily/weekly usage).

Accessibility

  • Charts must have textual summaries for screen readers.
  • Alert icons include text and aria-label.

Responsive / Mobile

  • Summary cards stack vertically.
  • Tables become horizontally scrollable with sticky headers.

SCR-PIS-009: Medication Reconciliation

Purpose

Side-by-side comparison of home medications, inpatient medications, and proposed discharge medications to identify and resolve discrepancies at admission, transfer, and discharge.

Field Specifications

Header

Field Type Required Validation Default Notes
Reconciliation Type Dropdown Yes IN (Admission, Transfer, Discharge) Admission
Source of History Multi-select No e.g., Patient Interview, NABIDH, Malaffi, Community Pharmacy
Last Updated DateTime Display

Side-by-Side Comparison Grid

Columns: Home Medications, Inpatient Orders, Reconciliation Action.

Field Type Required Validation Default Notes
Home Medication Text Display Drug, dose, route, frequency, source
Inpatient Medication Text Display Matching or related order
Discrepancy Flag Badge Display IN (None, Omission, Duplication, Dose Change, Route Change, New Med) None
Action Taken Dropdown Yes IN (Continue, Hold, Modify, Discontinue, New Order)
New Order Link Button Conditional Opens CPOE to place new/modified order
Comments Textarea No Max 500 chars

Sign-off Section

Field Type Required Validation Default Notes
Reconciled By User Auto Current user
Reconciled Date/Time DateTime Auto Now
Physician Approval Checkbox Conditional Required for final discharge reconciliation
Physician Name User selector Conditional

Validation Messages

Condition Message Severity
Missing action for discrepancy "Select an action for each medication with a discrepancy." Error
Discharge reconciliation without physician approval "Physician approval is required before finalising discharge reconciliation." Error

Actions / Buttons

Button Behaviour
Import from NABIDH/Malaffi Queries HIE for external medication list; merges into home meds with source tag.
Mark as Best Possible History Flags that history is as complete as possible.
Finalise Reconciliation Validates and inserts into medication_reconciliation; updates EHR discharge med list.

Accessibility

  • Grid uses ARIA attributes to describe relationships between home and inpatient meds.
  • Discrepancy badges include text labels.

Responsive / Mobile

  • Side-by-side grid becomes stacked: each medication group shows home vs inpatient vs action in a single card.

SCR-PIS-010: Pharmacy Analytics Dashboard

Purpose

Management dashboard with KPI visualisations and drill-down for operational, clinical, and regulatory metrics.

Field Specifications

KPI Tiles

Each tile shows current value, target, and trend:

  • Order Verification Turnaround Time
  • Dispensing Error Rate
  • Pharmacist Intervention Rate
  • Formulary Compliance Rate
  • eMAR Barcode Scanning Rate
  • Controlled Substance Discrepancy Rate
  • Antimicrobial Stewardship Acceptance Rate
  • Medication Reconciliation Completion Rate
  • Inventory Stockout Rate
  • Medication Waste Rate
  • NABIDH/Malaffi Dispensing Submission Rate

Filters

Field Type Required Validation Default Notes
Facility Dropdown Yes Valid facility All
Date Range Date range picker Yes Start <= End Last 30 days
Department Dropdown No Valid department All
Medication Class Dropdown No From ATC All

Actions / Buttons

Button Behaviour
Drill Down On tile click, opens detailed chart and table for that KPI.
Export Exports current view to CSV/PDF.
Schedule Report Sets up periodic email reports to selected recipients.

Accessibility

  • Charts must have alternative text summaries.
  • Colour-coded KPI statuses (e.g., red/amber/green) always accompanied by text (e.g., “Off target”).

Responsive / Mobile

  • Tiles stack in one column.
  • Charts simplified; drill-down tables become scrollable.

HTML Wireframe Mockups (Key Screens)

Wireframe: SCR-PIS-001 Pharmacist Order Verification Queue

Show HTML code
HTML
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
  <div style="background: #1a73e8; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">Pharmacist Order Verification Queue</h3>
  </div>
  <div style="padding: 16px; border-bottom: 1px solid #eee;">
    <!-- Filters -->
    <div style="display: flex; flex-wrap: wrap; gap: 8px;">
      <select style="padding: 4px 8px;">
        <option>Sheikh Khalifa Medical City</option>
      </select>
      <select style="padding: 4px 8px;">
        <option>Central Inpatient Pharmacy</option>
      </select>
      <select style="padding: 4px 8px;">
        <option>Inpatient</option>
        <option>Outpatient</option>
        <option>IV</option>
        <option>Antimicrobial</option>
      </select>
      <input type="text" placeholder="Search patient / MRN / order" style="flex: 1; padding: 4px 8px;">
      <button style="padding: 4px 10px;">Filter</button>
      <button style="padding: 4px 10px; background:#f5f5f5;">Reset</button>
    </div>
  </div>
  <div style="padding: 0 16px 16px 16px;">
    <!-- Queue Table -->
    <table style="width: 100%; border-collapse: collapse; font-size: 13px;">
      <thead>
        <tr style="background:#f8f9fa;">
          <th style="text-align:left; padding:6px;">Priority</th>
          <th style="text-align:left; padding:6px;">Patient</th>
          <th style="text-align:left; padding:6px;">Location</th>
          <th style="text-align:left; padding:6px;">Medication</th>
          <th style="text-align:left; padding:6px;">CDS</th>
          <th style="text-align:left; padding:6px;">Formulary</th>
          <th style="text-align:left; padding:6px;">Provider</th>
          <th style="text-align:left; padding:6px;">Ordered</th>
          <th style="text-align:left; padding:6px;">Actions</th>
        </tr>
      </thead>
      <tbody>
        <tr style="border-top:1px solid #eee;">
          <td style="padding:6px;"><span style="background:#d93025; color:white; padding:2px 6px; border-radius:4px; font-size:11px;">STAT</span></td>
          <td style="padding:6px;">Ahmed Al-Maktoum<br><span style="color:#666;">MRN 0012345</span></td>
          <td style="padding:6px;">ICU 3 / Bed 12</td>
          <td style="padding:6px;">Piperacillin-Tazobactam 4.5 g IV q8h</td>
          <td style="padding:6px;"><span style="background:#fbbc04; padding:2px 6px; border-radius:4px; font-size:11px;">2 alerts</span></td>
          <td style="padding:6px;"><span style="background:#34a853; color:white; padding:2px 6px; border-radius:4px; font-size:11px;">On Formulary</span></td>
          <td style="padding:6px;">Dr. Fatima Al-Nahyan</td>
          <td style="padding:6px;">07 Feb 2026 10:12</td>
          <td style="padding:6px;">
            <button style="padding:2px 6px; font-size:12px;">Verify</button>
            <button style="padding:2px 6px; font-size:12px; background:#f5f5f5;">Intervene</button>
          </td>
        </tr>
        <!-- more rows -->
      </tbody>
    </table>
  </div>
</div>

Wireframe: SCR-PIS-003 eMAR

Show HTML code
HTML
<div style="font-family: Arial, sans-serif; max-width: 1100px; margin: 0 auto; border: 1px solid #ccc; border-radius: 8px; overflow: hidden;">
  <div style="background: #00695c; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">eMAR - Medication Administration Record</h3>
  </div>
  <!-- Patient Banner -->
  <div style="padding: 10px 20px; background:#f0f4f8; border-bottom:1px solid #ddd; display:flex; justify-content:space-between; font-size:13px;">
    <div>
      <strong>Ahmed Al-Maktoum</strong> (MRN 0012345) • Male • 45 yrs<br>
      Ward 5B / Bed 10 • Weight: 78 kg
    </div>
    <div style="text-align:right;">
      Allergies: <span style="color:#d93025;">Penicillin</span><br>
      Date: <input type="date" value="2026-02-07" style="font-size:12px;">
    </div>
  </div>
  <!-- Timeline Header -->
  <div style="padding: 10px 20px; border-bottom:1px solid #eee; display:flex; justify-content:space-between; align-items:center;">
    <div>
      <button style="padding:4px 8px; font-size:12px;">Timeline View</button>
      <button style="padding:4px 8px; font-size:12px; background:#f5f5f5;">List View</button>
    </div>
    <div style="font-size:12px;">
      <span style="display:inline-block; width:12px; height:12px; background:#c8e6c9; border:1px solid #81c784; margin-right:4px;"></span> Given
      <span style="display:inline-block; width:12px; height:12px; background:#ffe0b2; border:1px solid #ffb74d; margin:0 4px 0 12px;"></span> Due
      <span style="display:inline-block; width:12px; height:12px; background:#ffcdd2; border:1px solid #e57373; margin:0 4px 0 12px;"></span> Overdue
    </div>
  </div>
  <!-- Medications Timeline -->
  <div style="padding: 10px 20px;">
    <table style="width:100%; border-collapse:collapse; font-size:12px;">
      <thead>
        <tr>
          <th style="text-align:left; padding:4px;">Medication</th>
          <th style="text-align:center; padding:4px;">08:00</th>
          <th style="text-align:center; padding:4px;">12:00</th>
          <th style="text-align:center; padding:4px;">16:00</th>
          <th style="text-align:center; padding:4px;">20:00</th>
        </tr>
      </thead>
      <tbody>
        <tr style="border-top:1px solid #eee;">
          <td style="padding:4px;">
            Paracetamol 1 g PO q6h PRN pain<br>
            <span style="color:#666;">PRN • Last given: 06:30</span>
          </td>
          <td style="text-align:center; padding:4px;">
            <div style="background:#c8e6c9; border:1px solid #81c784; border-radius:4px; padding:2px 4px; cursor:pointer;">Given</div>
          </td>
          <td style="text-align:center; padding:4px;">
            <div style="background:#ffe0b2; border:1px solid #ffb74d; border-radius:4px; padding:2px 4px; cursor:pointer;">Due</div>
          </td>
          <td style="text-align:center; padding:4px;">
            <div style="background:#ffe0b2; border:1px solid #ffb74d; border-radius:4px; padding:2px 4px; cursor:pointer;">Due</div>
          </td>
          <td style="text-align:center; padding:4px;">
            <div style="background:#ffe0b2; border:1px solid #ffb74d; border-radius:4px; padding:2px 4px; cursor:pointer;">Due</div>
          </td>
        </tr>
        <!-- more meds -->
      </tbody>
    </table>
  </div>
</div>

Wireframe: SCR-PIS-004 Outpatient Dispensing

Show HTML code
HTML
<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: #4a148c; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">Outpatient Dispensing</h3>
  </div>
  <!-- Patient & Insurance -->
  <div style="padding: 16px; border-bottom:1px solid #eee;">
    <div style="display:flex; flex-wrap:wrap; gap:10px; align-items:flex-end;">
      <div>
        <label style="font-size:12px; display:block;">Emirates ID</label>
        <input type="text" placeholder="784-YYYY-NNNNNNN-C" style="padding:4px 8px; width:180px;">
      </div>
      <div style="flex:1;">
        <label style="font-size:12px; display:block;">Patient Search</label>
        <input type="text" placeholder="Name / MRN / Mobile" style="padding:4px 8px; width:100%;">
      </div>
      <div>
        <label style="font-size:12px; display:block;">Prescription Source</label>
        <select style="padding:4px 8px;">
          <option>Electronic</option>
          <option>Paper Scanned</option>
          <option>Walk-in</option>
        </select>
      </div>
      <div>
        <label style="font-size:12px; display:block;">Insurance Plan</label>
        <select style="padding:4px 8px;">
          <option>Daman</option>
          <option>THIQA</option>
          <option>Oman Insurance</option>
        </select>
      </div>
      <button style="padding:6px 12px;">Retrieve eRx</button>
    </div>
  </div>
  <!-- Prescription List -->
  <div style="padding: 16px; border-bottom:1px solid #eee;">
    <h4 style="margin:0 0 8px 0; font-size:14px;">Prescriptions</h4>
    <table style="width:100%; border-collapse:collapse; font-size:12px;">
      <thead>
        <tr style="background:#f8f9fa;">
          <th style="text-align:left; padding:4px;">Medication</th>
          <th style="text-align:left; padding:4px;">Sig</th>
          <th style="text-align:right; padding:4px;">Qty</th>
          <th style="text-align:center; padding:4px;">Insurance</th>
          <th style="text-align:right; padding:4px;">Copay (AED)</th>
        </tr>
      </thead>
      <tbody>
        <tr style="border-top:1px solid #eee;">
          <td style="padding:4px;">Atorvastatin 20 mg tab</td>
          <td style="padding:4px;">Take 1 tablet by mouth once daily at night</td>
          <td style="padding:4px; text-align:right;"><input type="number" value="30" style="width:60px; padding:2px 4px;"></td>
          <td style="padding:4px; text-align:center;"><span style="background:#c8e6c9; border-radius:4px; padding:2px 6px;">Eligible</span></td>
          <td style="padding:4px; text-align:right;">10.00</td>
        </tr>
        <!-- more rows -->
      </tbody>
    </table>
  </div>
  <!-- Counselling & Payment -->
  <div style="padding: 16px; display:flex; flex-wrap:wrap; gap:20px;">
    <div style="flex:2; min-width:260px;">
      <h4 style="margin:0 0 8px 0; font-size:14px;">Counselling</h4>
      <label style="font-size:12px;"><input type="radio" name="counsel" checked> Provided</label>
      <label style="font-size:12px; margin-left:10px;"><input type="radio" name="counsel"> Declined</label>
      <div style="margin-top:6px;">
        <label style="font-size:12px; display:block;">Topics Covered</label>
        <label style="font-size:12px; display:inline-block; margin-right:10px;"><input type="checkbox"> Indication</label>
        <label style="font-size:12px; display:inline-block; margin-right:10px;"><input type="checkbox"> Dose & Timing</label>
        <label style="font-size:12px; display:inline-block; margin-right:10px;"><input type="checkbox"> Side Effects</label>
      </div>
      <textarea placeholder="Counselling notes" style="margin-top:6px; width:100%; height:60px; font-size:12px;"></textarea>
    </div>
    <div style="flex:1; min-width:220px;">
      <h4 style="margin:0 0 8px 0; font-size:14px;">Payment & Labels</h4>
      <div style="font-size:12px; margin-bottom:4px;">Amount Due: <strong>20.00 AED</strong></div>
      <div style="font-size:12px; margin-bottom:4px;">
        <label>Amount Collected</label><br>
        <input type="number" value="20.00" style="width:100%; padding:4px 6px;">
      </div>
      <div style="font-size:12px; margin-bottom:4px;">
        <label>Label Language</label><br>
        <label style="font-size:12px;"><input type="checkbox" checked> English</label>
        <label style="font-size:12px; margin-left:8px;"><input type="checkbox" checked> العربية</label>
      </div>
      <button style="width:100%; padding:6px 0; margin-top:6px;">Print Labels</button>
      <button style="width:100%; padding:6px 0; margin-top:6px; background:#1a73e8; color:white;">Dispense</button>
    </div>
  </div>
</div>

Wireframe: SCR-PIS-006 Controlled Substance Register

Show HTML code
HTML
<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: #b71c1c; color: white; padding: 12px 20px;">
    <h3 style="margin: 0;">Controlled Substance Register</h3>
  </div>
  <!-- Filters -->
  <div style="padding: 12px 20px; border-bottom:1px solid #eee;">
    <div style="display:flex; flex-wrap:wrap; gap:8px;">
      <select style="padding:4px 8px;">
        <option>Dubai General Hospital</option>
      </select>
      <select style="padding:4px 8px;">
        <option>Main CS Vault</option>
        <option>ICU ADC</option>
      </select>
      <input type="text" placeholder="Drug name / code" style="flex:1; padding:4px 8px;">
      <select style="padding:4px 8px;">
        <option>All Schedules</option>
        <option>Schedule II</option>
        <option>Schedule III</option>
      </select>
    </div>
  </div>
  <!-- Drug Summary -->
  <div style="padding: 12px 20px; border-bottom:1px solid #eee; display:flex; justify-content:space-between; font-size:13px;">
    <div>
      <strong>Morphine 10 mg/mL ampoule</strong><br>
      Schedule II • Current Balance: <strong>120 mg</strong>
    </div>
    <div style="text-align:right;">
      Last Transaction: 07 Feb 2026 09:15 • Dispense to Ward 3A<br>
      <span style="color:#d93025;">No discrepancies</span>
    </div>
  </div>
  <!-- Transaction Log -->
  <div style="padding: 12px 20px;">
    <table style="width:100%; border-collapse:collapse; font-size:12px;">
      <thead>
        <tr style="background:#f8f9fa;">
          <th style="text-align:left; padding:4px;">Date/Time</th>
          <th style="text-align:left; padding:4px;">Type</th>
          <th style="text-align:right; padding:4px;">Qty</th>
          <th style="text-align:right; padding:4px;">Balance</th>
          <th style="text-align:left; padding:4px;">From</th>
          <th style="text-align:left; padding:4px;">To / Patient</th>
          <th style="text-align:left; padding:4px;">Witness</th>
          <th style="text-align:left; padding:4px;">Discrepancy</th>
        </tr>
      </thead>
      <tbody>
        <tr style="border-top:1px solid #eee;">
          <td style="padding:4px;">07 Feb 2026 09:15</td>
          <td style="padding:4px;">Dispense</td>
          <td style="padding:4px; text-align:right;">-10 mg</td>
          <td style="padding:4px; text-align:right;">120 mg</td>
          <td style="padding:4px;">Main CS Vault</td>
          <td style="padding:4px;">Ward 3A / Patient MRN 0012345</td>
          <td style="padding:4px;">Nurse ID 5678</td>
          <td style="padding:4px;">No</td>
        </tr>
        <!-- more rows -->
      </tbody>
    </table>
  </div>
  <!-- New Transaction -->
  <div style="padding: 12px 20px; border-top:1px solid #eee; background:#fafafa;">
    <h4 style="margin:0 0 8px 0; font-size:14px;">New Transaction</h4>
    <div style="display:flex; flex-wrap:wrap; gap:10px; font-size:12px;">
      <select style="padding:4px 8px;">
        <option>Dispense to Patient</option>
        <option>Receipt</option>
        <option>Return</option>
        <option>Waste</option>
        <option>Adjustment</option>
      </select>
      <input type="number" placeholder="Quantity (mg)" style="padding:4px 8px; width:140px;">
      <input type="text" placeholder="Patient / To User" style="flex:1; padding:4px 8px;">
      <input type="text" placeholder="Witness ID" style="padding:4px 8px; width:140px;">
      <input type="text" placeholder="Reason (for waste/adjustment)" style="flex:1; padding:4px 8px;">
      <button style="padding:6px 12px; background:#b71c1c; color:white;">Add Transaction</button>
    </div>
  </div>
</div>

Common UI Patterns

Patient Banner

  • Appears on all clinical screens (SCR-PIS-001, 003, 004, 005, 009).
  • Fields:
  • Patient name (EN + optional AR), MRN
  • Age, sex
  • Emirates ID (if available)
  • Location (ward/bed or clinic)
  • Allergies summary (with severity)
  • Weight, height, BMI (if available)
  • Behaviour:
  • Clicking name opens full patient chart (read-only from PIS).
  • Allergy section clickable to open detailed allergy list.
  • Accessibility:
  • Use <header> or <section> with role="banner" and clear headings.
  • Allergies announced with emphasis (e.g., “Allergies: Penicillin – severe”).

Search Components

  • Standard autocomplete with:
  • Min 2–3 characters before search.
  • 300–500 ms debounce.
  • Keyboard navigation (Up/Down arrows, Enter to select).
  • Used for:
  • Patient search, drug search, provider search, vendor search.
  • Accessibility:
  • aria-autocomplete="list", role="listbox" for results, role="option" for items.
  • aria-expanded and aria-activedescendant managed dynamically.

Alert / Notification Patterns

  • Severity levels: Info, Warning, Error, Critical.
  • Visual:
  • Info: blue icon, neutral background.
  • Warning: amber icon, light amber background.
  • Error/Critical: red icon, light red background.
  • Always include:
  • Icon + text label (e.g., “Warning”).
  • Clear message and, where applicable, suggested action.
  • Accessibility:
  • Use aria-live="polite" for non-blocking alerts.
  • Use aria-live="assertive" for blocking errors (e.g., barcode mismatch).
  • Do not rely on colour alone; include text and icons.

Loading States

  • Use skeleton loaders or simple “Loading…” text with spinner for:
  • Large tables (queues, dashboards).
  • HIE queries (NABIDH/Malaffi).
  • Accessibility:
  • role="status" and aria-live="polite" for loading messages.
  • Ensure focus is not trapped while loading unless in modal.

Arabic/English Bilingual UI

  • All patient-facing text (labels, instructions, counselling notes, labels) must support EN and AR.
  • UI-level:
  • Language toggle (EN / العربية) at application header.
  • When AR selected, support right-to-left layout where feasible.
  • Data-level:
  • Medication labels: English + Arabic directions where available.
  • Store multilingual strings where needed (e.g., counselling templates).
  • Typography:
  • Use fonts that support Arabic script.
  • Ensure adequate line height for Arabic text.

Accessibility & WCAG 2.1 AA

  • Keyboard:
  • All interactive elements reachable via Tab.
  • Visible focus indicators.
  • Screen readers:
  • Use semantic HTML (<button>, <label>, <table>, <th>, <fieldset>).
  • Associate labels with inputs via for/id.
  • Colour contrast:
  • Text contrast ratio at least 4.5:1.
  • Large text (≥18pt or 14pt bold) at least 3:1.
  • Error handling:
  • Errors described near the field and summarised at top of form where appropriate.
  • Link error messages to fields via aria-describedby.

Responsive / Mobile Guidelines

  • Breakpoints:
  • ≥1024px: desktop layout with multi-column tables.
  • 768–1023px: tablet layout with stacked sections and simplified tables.
  • <768px: mobile layout with cards instead of wide tables.
  • Touch targets:
  • Minimum 44x44 px for buttons and interactive icons.
  • Avoid hover-only interactions; provide click/tap equivalents.

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