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 |
Navigation Flow
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-labeland 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"andaria-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-labeldescribing 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
<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
<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
<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
<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>withrole="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-expandedandaria-activedescendantmanaged 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"andaria-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.