Pharmacy Information System Workflows

Pharmacy Information System Workflows

This document defines eight core workflows for the Pharmacy Information System (PIS) module. Each workflow includes process steps, decision points, integration hooks, exception handling, and the paperless transformation achieved by the HIS.

Regulatory context (UAE):
- UAE Federal Decree-Law No. 45/2021 on Personal Data Protection (UAE PDPL) — governs patient data processing, consent, and access logging.
- UAE MOH controlled substance regulations (Federal Law No. 14 of 1995 and amendments) — schedule checks, vault management, reporting.
- DOH (Abu Dhabi) ADHICS and DHA security standards — logging, access control, encryption.
- NABIDH (Dubai) and Malaffi (Abu Dhabi) HIE requirements — timely, accurate medication and dispensing data submission.

All workflows must ensure role-based access control, full audit trails, and minimal necessary data exposure in line with UAE PDPL.


WF-PIS-001: Medication Order Verification

Process Flow

Actor: Clinical Pharmacist
Trigger: Medication order received from CPOE (HL7 RDE^O11 or FHIR MedicationRequest)
Pre-conditions:

  • Patient exists in patients and active encounter in encounters
  • Order received into pharmacy_orders with status = PENDING_VERIFICATION
  • Patient allergies and current medications available from patient_allergies and EHR medication list
  • Formulary and CDS master data loaded (formulary, formulary_items, drug_interactions, dose rules)
  1. System receives medication order from CPOE and inserts into pharmacy_orders with order_status = 'PENDING_VERIFICATION', linking to patients, encounters, and providers.
  2. System retrieves patient context (age, weight, height, renal/hepatic labs, allergies, active meds) from EHR and displays in the verification queue (SCR-PIS-001).
  3. System runs CDS checks in sequence using drug_interactions and dose rules:
    a. Drug–allergy check (against patient_allergies)
    b. Drug–drug interaction check (against active meds)
    c. Dose range check (age/weight/renal-based)
    d. Duplicate therapy check (same drug/class)
    e. Renal/hepatic adjustment suggestions.
  4. System logs each CDS alert (including severity, recommendation, and whether it is hard/soft stop) in a PIS CDS log table (not owned entity but assumed, e.g., pharmacy_cds_alerts).
  5. Pharmacist opens the order from the queue and reviews: patient context, CDS alerts, order details (dose, route, frequency, duration, PRN indication, priority).
  6. Pharmacist checks formulary status via formulary_items (on-formulary, non-formulary, restricted) and sees suggested therapeutic alternatives if applicable.
  7. Pharmacist checks payer coverage (via Billing & Claims integration) and prior-authorization flags; if non-covered, pharmacist may propose an alternative.
  8. Decision 1 – Clinical appropriateness:
    - If dose/route/frequency inappropriate or contraindicated → pharmacist initiates intervention (go to step 9).
    - If appropriate → proceed to step 11.
  9. Pharmacist creates a record in pharmacy_interventions (type: dose adjustment, therapy change, clarification, etc.), documents recommendation, and contacts prescriber (phone/secure messaging).
  10. Decision 2 – Prescriber response:
    • If prescriber accepts recommendation → pharmacist updates pharmacy_orders (e.g., new dose, route) and marks intervention outcome as ACCEPTED.
    • If prescriber rejects → pharmacist documents reason and marks outcome as REJECTED; order may still be verified if safe, or cancelled if unsafe.
  11. Decision 3 – Formulary compliance:
    • If non-formulary and no justified exception → pharmacist requests change to formulary alternative; if prescriber agrees, update order; if not, require supervisor approval per policy.
    • If formulary-compliant or approved exception → continue.
  12. Pharmacist sets order_status = 'VERIFIED' in pharmacy_orders, records verified_by, verified_datetime, and any override justifications.
  13. System releases order to dispensing queue (SCR-PIS-002) and creates corresponding entry in pharmacy_dispensing with status PENDING_PICK (or a separate queue table).
  14. System generates medication label data (patient name, MRN, Emirates ID, drug, dose, route, frequency, barcode) and stores label metadata in pharmacy_dispensing.
  15. System sends status update back to CPOE/EHR (order verified) and, if applicable, triggers billing pre-charge logic.

Data Modified:

  • pharmacy_orders — INSERT (on receipt), UPDATE (status, verified_by, verified_datetime, modified details)
  • pharmacy_interventions — INSERT (when intervention created), UPDATE (outcome, prescriber_response)
  • pharmacy_dispensing — INSERT (queue entry for dispensing)
  • pharmacy_cds_alerts (or equivalent) — INSERT (one per alert fired)
  • order_audit_log (shared/audit table) — INSERT (verification and overrides; referenced, not owned)

Mermaid Flowchart

flowchart TD A["Order received from CPOE<br/>pharmacy_orders.PENDING_VERIFICATION"] --> B["Load patient context & CDS checks"] B --> C["Display order in verification queue"] C --> D["Pharmacist reviews order, alerts, formulary"] D --> E{"Clinically appropriate?"} E -->|"No"| F["Create pharmacy_intervention<br/>Contact prescriber"] E -->|"Yes"| H F --> G{"Prescriber accepts recommendation?"} G -->|"Yes"| G1["Update pharmacy_orders<br/>Mark intervention ACCEPTED"] G1 --> H G -->|"No"| G2["Document REJECTED<br/>Assess safety"] G2 --> E1{"Still safe to proceed?"} E1 -->|"No"| Z["Cancel order<br/>Update status=CANCELLED"] E1 -->|"Yes"| H H --> I{"Formulary compliant or approved?"} I -->|"No"| J["Request change or supervisor approval"] J --> J1{"Approved exception?"} J1 -->|"No"| Z J1 -->|"Yes"| K I -->|"Yes"| K["Verify order<br/>Set status=VERIFIED"] K --> L["Create dispensing queue entry<br/>pharmacy_dispensing.PENDING_PICK"] L --> M["Generate label data"] M --> N["Notify CPOE/EHR: order verified"] Z --> Z1["Log cancellation & reason"]

Decision Points

  1. Clinical appropriateness
    - If CDS alerts indicate contraindication or unsafe dose → pharmacist must intervene.
    - If only minor alerts or acceptable risk with justification → pharmacist may override with documented reason.

  2. Prescriber acceptance of intervention
    - If accepted → order updated and verified.
    - If rejected → pharmacist must decide if order is still safe; unsafe orders are cancelled or escalated.

  3. Formulary compliance
    - If non-formulary and no exception → require change to alternative or supervisor approval.
    - If formulary-compliant or exception approved → proceed.

Integration Points

  • CPOE (cpoe module)
  • Inbound: HL7 RDE^O11 / FHIR MedicationRequest with order details.
  • Outbound: Order status updates (verified/cancelled) via HL7 ACK or internal API.

  • EHR Patient Management (ehr-patient-mgmt)

  • Read: patients, patient_demographics, patient_allergies, active medication list, labs (renal/hepatic).
  • Write: Order status and pharmacist notes visible in patient chart.

  • Billing & Claims (billing-claims)

  • Outbound: Pre-charge data (drug, quantity, RxNorm, cost) for verified orders.

  • CDS Engine / Drug Database

  • Internal: Use drug_interactions, dose rules, formulary master data.

Exception Handling

  • Missing patient data (e.g., weight, creatinine):
  • System flags missing data; pharmacist may request updated measurements or use conservative dosing; must document assumption in pharmacy_interventions.

  • CDS engine timeout or error:

  • System displays banner “CDS unavailable”; pharmacist can proceed with manual checks but must document in intervention log; system logs outage for IT.

  • Integration failure with CPOE:

  • Order stored locally; status updates queued with retry; if not delivered after threshold, alert pharmacy supervisor and CPOE support.

  • PDPL-related access violation:

  • If user lacks permission to view certain data (e.g., restricted diagnoses), system masks fields and logs access attempt; pharmacist must proceed with available data or escalate.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Handwritten medication orders and faxed prescriptions Electronic orders via CPOE with structured fields Eliminates legibility errors and transcription mistakes
Manual drug interaction checking using printed references Automated CDS checks using drug_interactions and dose rules Real-time safety alerts; consistent application of guidelines
Handwritten pharmacist intervention notes Structured pharmacy_interventions records linked to orders Enables reporting on intervention types, acceptance rates, and impact
Paper formulary binders Electronic formulary / formulary_items with real-time status Ensures prescribers and pharmacists use current formulary data

Remaining Paper Touchpoints: Optional printed pharmacist notes for external providers if electronic channels are unavailable.

Inputs and Outputs

Inputs:

Source Data Element Format
CPOE Medication order (drug RxNorm, dose, route, frequency, duration, priority, indication, PRN details) HL7 RDE^O11 / FHIR MedicationRequest (INT-PIS-001)
EHR / Patient Chart Patient demographics, age, weight, height, renal/hepatic labs, allergies, active medications patients, patient_allergies, lab_results, medication_orders tables
EHR / Patient Chart Encounter details, ordering provider encounters, providers tables
Master Data Formulary status, drug interactions, dose rules, therapeutic alternatives formulary, formulary_items, drug_interactions tables
Billing & Claims Payer coverage and prior-authorization flags payer_contracts, coverage_rules tables
Clinical Pharmacist Verification decision, intervention details, override justification Manual entry via SCR-PIS-001

Outputs:

Destination Data Element Format
pharmacy_orders Updated order with status VERIFIED, verified_by, verified_datetime, any modifications SQL UPDATE
pharmacy_interventions Intervention record (type, recommendation, prescriber response, outcome) SQL INSERT/UPDATE
pharmacy_dispensing New dispensing queue entry with status PENDING_PICK and label metadata SQL INSERT
pharmacy_cds_alerts CDS alert records (one per alert fired, with severity and provider response) SQL INSERT
CPOE / EHR Order status update (verified/cancelled/modified) HL7 ACK / internal API
Billing & Claims Pre-charge data (drug, quantity, RxNorm, cost) Internal API
order_audit_log Audit trail for verification and any overrides SQL INSERT

Post-conditions:

  • Medication order verified with pharmacist sign-off and documented clinical review
  • All CDS alerts logged with pharmacist response (accepted/overridden with reason)
  • Dispensing queue entry created for pharmacy technician pickup
  • Label data generated for patient-specific medication labels
  • CPOE/EHR updated with verification status
  • Any interventions documented with prescriber response and outcome

SLA and Timing

Step Target Time Escalation Measurement Source
Order receipt to pharmacist queue display < 2 seconds Alert IT if > 10s pharmacy_orders.order_received_datetime
STAT order verification < 15 minutes from receipt Alert charge pharmacist at 15 min pharmacy_orders.verified_datetime
First-dose verification < 30 minutes from receipt Alert at 30 min pharmacy_orders.verified_datetime
Routine order verification < 2 hours from receipt Alert at 2 h pharmacy_orders.verified_datetime
CDS check response time < 2 seconds per check If > 5s, degrade to async; alert IT pharmacy_cds_alerts.response_time_ms
Intervention resolution (prescriber response) < 1 hour Alert pharmacy supervisor at 1 h pharmacy_interventions.prescriber_response_datetime

State Transition Diagram

stateDiagram-v2 [*] --> PendingVerification : Order received from CPOE PendingVerification --> InReview : Pharmacist opens order InReview --> InterventionRequired : CDS alert or clinical concern InterventionRequired --> AwaitingPrescriberResponse : Pharmacist contacts prescriber AwaitingPrescriberResponse --> InReview : Prescriber responds (accept/reject) InReview --> Verified : Pharmacist verifies, clinically appropriate InReview --> Cancelled : Unsafe, pharmacist cancels with reason Verified --> PendingDispensing : Released to dispensing queue (WF-PIS-002/003) PendingDispensing --> Dispensed : Medication dispensed Dispensed --> Active : First dose administered (eMAR) Active --> Modified : Provider modifies order Modified --> PendingVerification : Re-verification required Active --> Discontinued : Provider discontinues Active --> Completed : Duration expired / all doses given Cancelled --> [*] Completed --> [*] Discontinued --> [*]

WF-PIS-002: Inpatient Dispensing (Unit-Dose)

Process Flow

Actor: Pharmacy Technician, Clinical Pharmacist
Trigger: Medication order verified and released to dispensing queue
Pre-conditions:

  • pharmacy_orders.order_status = 'VERIFIED'
  • Corresponding dispensing task exists in pharmacy_dispensing with status PENDING_PICK
  • Inventory available in pharmacy_inventory for required drug/location
  • For controlled substances, controlled schedule and vault location defined
  1. System displays dispensing worklist (SCR-PIS-002) filtered by facility, pharmacy location, and priority (STAT, first-dose, routine).
  2. Technician selects a task; system shows patient details, drug, dose, quantity, location, and any special instructions.
  3. System checks pharmacy_inventory for stock at the assigned location; if insufficient, suggests alternate locations or triggers replenishment.
  4. Technician retrieves medication from shelf or Automated Dispensing Cabinet (ADC) and scans the product barcode.
  5. System validates scanned barcode against pharmacy_dispensing and pharmacy_inventory (drug, strength, form, lot, expiry).
  6. Decision 1 – Barcode match:
    - If mismatch (wrong drug/strength/lot/expired) → system blocks progress and prompts technician to correct (step 3–5).
    - If match → proceed.
  7. Technician repackages into unit-dose if necessary and prints patient-specific label with barcode; system updates pharmacy_dispensing.label_printed = TRUE.
  8. For controlled substances, system checks pharmacy_orders.is_controlled = TRUE and routes to controlled workflow (WF-PIS-006) for dual-signature and logging.
  9. Pharmacist performs final check (visual or barcode re-scan) and sets pharmacy_dispensing.verified_by and dispensing_status = 'VERIFIED_READY'.
  10. System decrements pharmacy_inventory.quantity_on_hand and inserts a record into inventory_transactions (type: DISPENSE_TO_PATIENT or DISPENSE_TO_UNIT).
  11. Technician delivers medication to nursing unit (cart, tube, or ADC restock) and records delivery method/time in pharmacy_dispensing.
  12. System updates pharmacy_dispensing.dispensing_status = 'DISPENSED' and dispensing_datetime.
  13. System sends dispensing event to EHR (for eMAR scheduling), Billing & Claims (charges), and NABIDH/Malaffi if applicable (for Abu Dhabi/Dubai encounters).
  14. For failed picks (e.g., stockout), technician marks task as ON_HOLD_STOCKOUT; system alerts inventory manager.

Data Modified:

  • pharmacy_dispensing — UPDATE (pick status, label_printed, verified_by, dispensing_status, dispensing_datetime, location)
  • pharmacy_inventory — UPDATE (quantity_on_hand, last_count_date)
  • inventory_transactions — INSERT (dispensing transaction)
  • controlled_substance_log — INSERT/UPDATE (if controlled; see WF-PIS-006)
  • integration_message_log (shared) — INSERT (for HIE and billing messages)

Mermaid Flowchart

flowchart TD A["Order VERIFIED<br/>Dispensing task PENDING_PICK"] --> B["Display dispensing worklist"] B --> C["Technician selects task"] C --> D["Check inventory at location"] D --> E{"Sufficient stock?"} E -->|"No"| F["Mark ON_HOLD_STOCKOUT<br/>Alert inventory manager"] F --> X["Await restock"] E -->|"Yes"| G["Pick medication from shelf/ADC"] G --> H["Scan medication barcode"] H --> I{"Barcode matches order & not expired?"} I -->|"No"| J["Block, show error<br/>Re-pick medication"] J --> G I -->|"Yes"| K["Repackage to unit-dose if needed<br/>Print patient label"] K --> L{"Controlled substance?"} L -->|"Yes"| M["Invoke WF-PIS-006<br/>Controlled logging"] L -->|"No"| N M --> N["Pharmacist final check<br/>Set status=VERIFIED_READY"] N --> O["Update inventory & insert inventory_transaction"] O --> P["Deliver to ward / ADC<br/>Record delivery"] P --> Q["Set dispensing_status=DISPENSED"] Q --> R["Send events to EHR, Billing, NABIDH/Malaffi"]

Decision Points

  1. Stock availability
    - If insufficient stock → task put on hold, inventory manager notified; urgent STAT items may trigger emergency procurement or borrowing.

  2. Barcode validation
    - If mismatch or expired → system prevents dispensing and logs near-miss; technician must re-pick.

  3. Controlled substance flag
    - If controlled → additional steps (dual-signature, controlled log) enforced; if not → standard workflow.

Integration Points

  • Scheduling / Patient Location (scheduling)
  • Read: encounters, locations to determine delivery location and ward.

  • EHR (eMAR) (ehr-patient-mgmt)

  • Outbound: Dispensing events to update medication administration schedule.

  • Billing & Claims (billing-claims)

  • Outbound: HL7 DFT^P03 or internal charge messages with drug, quantity, RxNorm/NDC, cost.

  • NABIDH / Malaffi

  • Outbound: HL7 v2.5.1 dispensing messages for Dubai/Abu Dhabi encounters (INT-PIS-005/006).

  • ADC / Automation Systems (if present)

  • Internal/External: Stock levels, pick confirmations, restock tasks.

Exception Handling

  • Inventory mismatch (negative stock):
  • System prevents dispensing if quantity_on_hand would go negative; flags discrepancy for investigation; inventory manager must adjust via inventory_transactions.

  • Label printer failure:

  • System allows reprint; logs reprint count; if printer offline, technician may redirect to another printer; no manual labels allowed without supervisor override.

  • Integration failure to HIE or Billing:

  • Dispensing recorded locally; messages queued with retry; if persistent failure, alert IT and pharmacy supervisor; PDPL-compliant logging of failed transmissions.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Printed pick lists and cart-fill sheets Dynamic dispensing worklist (SCR-PIS-002) Real-time prioritisation; no manual updates
Handwritten unit-dose labels System-generated barcode labels linked to pharmacy_dispensing Improves identification and supports eMAR scanning
Manual stock cards and tally sheets pharmacy_inventory and inventory_transactions with real-time updates Accurate perpetual inventory and audit trail
Paper delivery logs to wards Electronic delivery timestamps and status in pharmacy_dispensing Traceability for every dose

Remaining Paper Touchpoints: None — fully digital for standard inpatient dispensing.

Inputs and Outputs

Inputs:

Source Data Element Format
pharmacy_orders Verified order with drug, dose, quantity, priority, special instructions SQL SELECT
pharmacy_dispensing Dispensing task with status PENDING_PICK SQL SELECT via SCR-PIS-002
pharmacy_inventory Stock levels at assigned location (drug, strength, form, lot, expiry) SQL SELECT
Pharmacy Technician Medication pick, barcode scan, repackaging, delivery details Manual action / barcode scan
Clinical Pharmacist Final verification check Manual action / barcode re-scan
Master Data Controlled substance flags, ADC configuration formulary_items, system configuration

Outputs:

Destination Data Element Format
pharmacy_dispensing Updated dispensing record (pick status, label_printed, verified_by, dispensing_status, dispensing_datetime) SQL UPDATE
pharmacy_inventory Decremented quantity_on_hand SQL UPDATE
inventory_transactions Dispensing transaction record SQL INSERT
controlled_substance_log Controlled substance transaction (if applicable) SQL INSERT (via WF-PIS-006)
EHR / eMAR Dispensing event for medication administration scheduling Internal API / FHIR MedicationDispense (INT-PIS-002)
Billing & Claims Charge details (drug, quantity, RxNorm/NDC, cost) HL7 DFT^P03 / Internal API (INT-PIS-004)
NABIDH / Malaffi Dispensing event for HIE HL7 v2.5.1 (INT-PIS-005/006)
Label Printers Patient-specific medication label with barcode Print job

Post-conditions:

  • Medication dispensed to patient/ward with barcode-verified pick
  • Inventory decremented and transaction logged
  • eMAR schedule updated with dispensed dose availability
  • Billing charge captured
  • HIE notified (for Dubai/Abu Dhabi encounters)
  • For controlled substances, additional logging completed per WF-PIS-006

SLA and Timing

Step Target Time Escalation Measurement Source
STAT first-dose dispensing < 15 minutes from verification Alert charge pharmacist at 15 min pharmacy_dispensing.dispensing_datetime minus pharmacy_orders.verified_datetime
Routine dispensing (cart fill) < 2 hours from verification Alert at 2 h Same as above
Barcode scan validation < 5 seconds per scan Alert IT if scanner offline Scan event timestamp
Pharmacist final check < 5 minutes per order Alert if queue backlog > 15 min pharmacy_dispensing.verified_datetime
Delivery to ward < 30 minutes after dispensing (routine), < 10 minutes (STAT) Alert if delivery not confirmed Delivery timestamp
Stockout resolution < 4 hours Alert inventory manager and pharmacy supervisor pharmacy_dispensing.stockout_datetime

State Transition Diagram

stateDiagram-v2 [*] --> PendingPick : Order verified, dispensing task created PendingPick --> Picking : Technician selects task Picking --> BarcodeVerified : Product scanned and validated Picking --> PickError : Barcode mismatch or expired PickError --> Picking : Re-pick correct medication BarcodeVerified --> LabelPrinted : Patient label generated LabelPrinted --> PharmacistChecked : Pharmacist final verification PharmacistChecked --> ReadyForDelivery : Verification passed ReadyForDelivery --> Dispensed : Delivered to ward/patient Dispensed --> Administered : Nurse gives dose via eMAR (WF-PIS-004) PendingPick --> OnHoldStockout : Insufficient inventory OnHoldStockout --> PendingPick : Stock replenished Dispensed --> Returned : Unused dose returned to pharmacy Returned --> [*] Administered --> [*]

WF-PIS-003: Outpatient Dispensing

Process Flow

Actor: Pharmacist, Pharmacy Technician
Trigger: Patient presents with prescription (electronic from CPOE or scanned paper)
Pre-conditions:

  • Patient identified and linked to patients (Emirates ID / MRN)
  • Prescription captured as pharmacy_orders (for outpatient context) with order_status = 'PENDING_VERIFICATION' or already verified
  • Insurance details available via payers and insurance plan tables
  • Formulary and pricing data configured
  1. Patient arrives at outpatient pharmacy; technician searches or registers patient using Emirates ID (e.g., 784-1990-1234567-1) and MRN.
  2. For electronic prescriptions, system retrieves orders from CPOE; for paper prescriptions, technician scans and enters structured data into pharmacy_orders.
  3. System checks for duplicate prescriptions and active refills for the same drug; flags potential duplication to pharmacist.
  4. System verifies insurance eligibility and coverage (via Billing & Claims integration) and calculates estimated co-pay based on payer and plan.
  5. Pharmacist reviews order(s) in outpatient queue (similar to WF-PIS-001) including CDS checks and formulary status; updates pharmacy_orders to VERIFIED when appropriate.
  6. Technician picks medication, scans barcode, and verifies against order; system checks pharmacy_inventory for outpatient location.
  7. Decision 1 – Stock availability:
    - If out of stock → system offers partial fill or alternative pharmacy; marks order as ON_HOLD_STOCKOUT.
    - If in stock → proceed.
  8. Technician counts and packages medication; system prints bilingual (EN/AR) patient label with directions, and updates pharmacy_dispensing (quantity_dispensed, label_printed).
  9. Pharmacist performs final check, including label accuracy and counseling needs; sets pharmacy_dispensing.dispensing_status = 'READY_FOR_PICKUP'.
  10. Pharmacist counsels patient (indication, dose, side effects, storage, missed dose instructions) and records counseling completion in pharmacy_dispensing or a counseling log.
  11. Cashier collects co-payment; Billing & Claims receives charge details (drug, quantity, cost, payer, patient share).
  12. At pickup, staff verifies patient identity (Emirates ID) and marks pharmacy_dispensing.dispensing_status = 'DISPENSED' with dispensing_datetime.
  13. System updates patient’s active medication list in EHR and exposes data to Patient Portal via FHIR MedicationRequest/MedicationDispense.

Data Modified:

  • pharmacy_orders — INSERT (for scanned prescriptions), UPDATE (status, verification)
  • pharmacy_dispensing — INSERT (dispensing record), UPDATE (quantity_dispensed, label_printed, status, dispensing_datetime)
  • pharmacy_inventory — UPDATE (quantity_on_hand)
  • inventory_transactions — INSERT (outpatient dispense)
  • Counseling log table (e.g., pharmacy_counseling) — INSERT
  • Billing/charge tables — INSERT (via integration)

Mermaid Flowchart

flowchart TD A["Patient presents with prescription"] --> B["Identify patient via Emirates ID/MRN"] B --> C{"Electronic prescription?"} C -->|"Yes"| D["Retrieve orders from CPOE"] C -->|"No"| E["Scan paper Rx<br/>Enter into pharmacy_orders"] D --> F["Check duplicates & refills"] E --> F F --> G["Verify insurance & calculate co-pay"] G --> H["Pharmacist verifies order & runs CDS"] H --> I["Technician picks & scans medication"] I --> J{"Stock available & barcode match?"} J -->|"No"| K["Offer partial fill/alt pharmacy<br/>Mark ON_HOLD_STOCKOUT"] K --> X["Await resolution"] J -->|"Yes"| L["Package & print EN/AR label"] L --> M["Pharmacist final check<br/>Set READY_FOR_PICKUP"] M --> N["Counsel patient & record counseling"] N --> O["Collect co-pay & send charge"] O --> P["Verify patient ID at pickup"] P --> Q["Set DISPENSED & update EHR/Portal"]

Decision Points

  1. Prescription source
    - Electronic vs paper; paper requires manual entry and scanning for legal record.

  2. Stock and barcode validation
    - If stock unavailable or barcode mismatch → no dispensing; alternative options discussed.

  3. Insurance coverage
    - If not covered or high co-pay → pharmacist may suggest lower-cost alternative; requires prescriber approval.

Integration Points

  • CPOE
  • Inbound: Outpatient electronic prescriptions.

  • EHR Patient Management

  • Read: Patient demographics, allergies.
  • Write: Outpatient medication list and dispensing events.

  • Billing & Claims

  • Outbound: Charges and co-pay details; eClaimLink formats for Dubai when applicable.

  • Patient Portal

  • Outbound: FHIR MedicationRequest and MedicationDispense for active meds and refill status.

Exception Handling

  • Unreadable paper prescription:
  • System requires pharmacist to contact prescriber; order remains PENDING_CLARIFICATION; no dispensing until resolved.

  • Insurance system timeout:

  • System allows “cash sale” option with patient consent; marks transaction for later insurance submission if policy allows.

  • Patient declines counseling:

  • System records “counseling offered, declined” to maintain documentation.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper prescriptions and manual transcription Electronic prescriptions or scanned images with structured pharmacy_orders Reduces transcription errors; preserves legal image
Manual price lookups and handwritten bills Automated insurance eligibility and co-pay calculation Faster service; fewer billing errors
Paper counseling forms Electronic counseling documentation linked to dispensing record Supports quality audits and patient safety metrics
Handwritten outpatient dispensing logbooks pharmacy_dispensing and inventory_transactions Complete, searchable audit trail

Remaining Paper Touchpoints: Scanned image of original paper prescription retained for legal compliance; optional printed medication information leaflets.

Inputs and Outputs

Inputs

Source Data Element Format / Standard
CPOE / Paper Rx scan Prescription order (drug, dose, route, frequency, quantity, refills) HL7 RDE^O11 / FHIR MedicationRequest / scanned image
EHR Patient demographics, allergies, active medications, weight FHIR Patient, AllergyIntolerance, MedicationStatement
Policy & Contract Mgmt Insurance eligibility, co-pay schedule, coverage limits Internal API / FHIR Coverage, CoverageEligibilityResponse
Formulary Drug formulary status, pricing, therapeutic alternatives formulary_items lookup
Inventory Stock availability, lot, expiry, shelf location pharmacy_inventory query

Outputs

Destination Data Element Format / Standard
Patient Dispensed medication, label, printed receipt, counseling notes Physical handoff + printed label
Billing & Claims Dispensing charge (drug, quantity, price, co-pay, payer) HL7 DFT^P03 / Internal API
EHR Updated medication list, dispensing event FHIR MedicationDispense, MedicationStatement
NABIDH / Malaffi Outpatient dispensing event HL7 v2.5.1 (HIE pharmacy profile)
Inventory Stock decrement, lot consumption inventory_transactions INSERT

Post-conditions

  • pharmacy_dispensing record created with status DISPENSED and patient signature captured electronically
  • pharmacy_inventory decremented; inventory_transactions logged
  • Billing charge generated and sent to Billing & Claims
  • Patient counseling documented in pharmacy_dispensing.counseling_notes
  • Dispensing event submitted to NABIDH/Malaffi within SLA

SLA and Timing

Step Target Time Escalation Measurement Source
Prescription receipt to pharmacist review < 5 min Alert pharmacy supervisor if queue > 15 min pharmacy_orders.received_datetime to pharmacy_orders.verified_datetime
Insurance eligibility check < 10 sec Offer cash-sale path if timeout > 30 sec API response time in integration_message_log
Dispensing (pick, label, verify) < 10 min (routine), < 5 min (urgent) Escalate to senior pharmacist if > 15 min pharmacy_dispensing.pick_datetime to pharmacy_dispensing.dispensed_datetime
Patient counseling < 3 min Log if declined; no escalation pharmacy_dispensing.counseling_datetime
End-to-end (Rx receipt to patient handoff) < 20 min (routine) Pharmacy manager alert if > 30 min pharmacy_orders.received_datetime to pharmacy_dispensing.dispensed_datetime
NABIDH/Malaffi submission < 15 min post-dispense Alert compliance if > 60 min integration_message_log.created_at to .acknowledged_at

WF-PIS-004: Medication Administration (eMAR)

Process Flow

Actor: Nurse (eMAR role)
Trigger: Scheduled administration time or PRN medication request
Pre-conditions:

  • Verified medication orders exist in pharmacy_orders
  • Dispensed doses recorded in pharmacy_dispensing (where applicable)
  • Patient wristband with barcode present and linked to patients
  • Nurse authenticated and authorised (users, roles)
  • eMAR schedule generated in medication_administration (planned rows or on-demand creation)
  1. Nurse opens eMAR (SCR-PIS-003) for assigned patients and views scheduled and PRN medications.
  2. At administration time, nurse authenticates (badge/username/password) and system logs user context.
  3. Nurse scans own ID badge; system verifies role and permissions (e.g., can administer IV meds).
  4. Nurse scans patient wristband; system confirms correct patient and loads that patient’s eMAR.
  5. Nurse selects the due medication; system prompts to scan medication barcode.
  6. Nurse scans medication barcode; system matches to pharmacy_dispensing and pharmacy_orders.
  7. System performs “five rights” check (right patient, drug, dose, route, time) plus allergy and duplicate dose checks.
  8. Decision 1 – Five rights check:
    - If any mismatch (e.g., wrong patient, wrong drug, early/late beyond allowed window) → system displays hard/soft stop alert and blocks or warns accordingly.
    - If all checks pass → proceed.
  9. Nurse administers medication and records actual administration details (time, dose, route, site, comments) in medication_administration.
  10. For PRN medications, nurse documents indication and later records patient response (pain score, symptom relief).
  11. If dose is held/refused/omitted, nurse selects reason (e.g., patient refused, NPO, clinical decision) and system records status and reason.
  12. For high-risk or controlled medications, system may require witness scan; witness user ID stored in medication_administration.witness_id.
  13. System updates patient’s medication timeline in EHR and marks dose as completed/held in eMAR.
  14. System updates barcode verification flag (barcode_verified = TRUE) for successfully scanned administrations to support KPI tracking.

Data Modified:

  • medication_administration — INSERT (each administration event), UPDATE (PRN response, status changes)
  • pharmacy_dispensing — UPDATE (optional link to mark dose used)
  • order_audit_log — INSERT (administration and exceptions)

Mermaid Flowchart

flowchart TD A["Nurse opens eMAR"] --> B["Scan nurse badge<br/>Authenticate"] B --> C["Scan patient wristband"] C --> D["Select due medication"] D --> E["Scan medication barcode"] E --> F{"Five rights & safety checks OK?"} F -->|"No"| G["Display alert<br/>Block or require override"] G --> H{"Override allowed?"} H -->|"No"| Z["Do not administer<br/>Record reason"] H -->|"Yes"| I["Document override reason"] I --> J["Administer medication"] F -->|"Yes"| J["Administer medication"] J --> K["Record administration in medication_administration"] K --> L{"PRN medication?"} L -->|"Yes"| M["Record indication & later response"] L -->|"No"| N M --> N["Update eMAR & EHR timeline"] N --> O["Set barcode_verified=TRUE"] Z --> P["Update eMAR with held/refused status"]

Decision Points

  1. Five rights validation
    - If mismatch → system may enforce hard stop (e.g., wrong patient) or soft stop (slightly early/late within policy).

  2. Override capability
    - For certain alerts (e.g., early dose), nurse may override with reason; for critical mismatches, override not allowed.

  3. PRN vs scheduled
    - PRN requires indication and response; scheduled does not.

Integration Points

  • EHR Patient Chart
  • Outbound: Administration records and status updates to patient timeline.

  • CPOE

  • Read: Order details (dose, route, frequency, special instructions).

  • PIS Dispensing

  • Read: pharmacy_dispensing to validate that dose was dispensed (for unit-dose workflows).

Exception Handling

  • Barcode scanner failure:
  • System allows manual entry with mandatory reason; flags administration as barcode_verified = FALSE for audit.

  • Patient not found or wristband unreadable:

  • System prevents administration until patient identity confirmed; nurse must request new wristband.

  • Network outage at bedside:

  • Offline mode may allow local caching and later sync; all offline administrations logged for reconciliation.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper MAR sheets at bedside eMAR with real-time updates and barcode scanning Reduces omission and wrong-patient errors
Manual five-rights checks Automated five-rights validation with alerts Standardises safety checks
Handwritten notes for PRN response Structured PRN indication/response in medication_administration Enables outcome tracking and audit
Paper witness signatures for high-risk meds Electronic witness capture via user ID Stronger audit trail and easier reporting

Remaining Paper Touchpoints: None — fully digital for standard eMAR workflow.

Inputs and Outputs

Inputs

Source Data Element Format / Standard
PIS / eMAR schedule Scheduled administration times, drug, dose, route medication_administration planned rows
Pharmacy dispensing Dispensed unit-dose with barcode, lot, expiry pharmacy_dispensing linked to pharmacy_orders
Patient wristband Patient identity barcode Barcode scan (Code 128 / GS1)
Medication barcode Drug identity, lot, expiry Barcode scan (GS1 DataMatrix / NDC)
EHR Patient allergies, vitals (for hold/assess rules) FHIR AllergyIntolerance, Observation

Outputs

Destination Data Element Format / Standard
EHR (Patient Chart) Administration record (drug, dose, route, site, time, nurse) FHIR MedicationAdministration
eMAR display Updated administration status (given, held, refused, omitted) medication_administration UPDATE
PIS Inventory Dose consumption confirmation (for ADC restock triggers) inventory_transactions / ADC interface
Billing & Claims Billable administration event (if applicable, e.g., IV infusions) Internal API / HL7 DFT^P03
Audit trail Five-rights verification result, barcode scan log, witness ID medication_administration_audit INSERT

Post-conditions

  • medication_administration record updated with status = 'GIVEN' (or HELD, REFUSED, OMITTED) and administered_datetime
  • Five-rights verification result recorded (barcode match = TRUE/FALSE with override reason if FALSE)
  • For high-alert medications, witness user ID captured
  • PRN effectiveness assessment scheduled if applicable (prn_assessment_due_datetime)
  • EHR medication timeline updated in real time

SLA and Timing

Step Target Time Escalation Measurement Source
Medication available at bedside before scheduled time Ready at least 30 min before scheduled time ADC restock alert if not available pharmacy_dispensing.dispensed_datetime vs. medication_administration.scheduled_datetime
Administration within scheduled window +/- 30 min of scheduled time (routine); immediate (STAT) Overdue alert at +30 min; escalate to charge nurse at +60 min medication_administration.scheduled_datetime vs. .administered_datetime
Barcode scanning (five-rights check) < 30 sec per scan N/A (immediate feedback) Scan event timestamps
Documentation of administration < 2 min post-administration Undocumented alert at +15 min medication_administration.administered_datetime to .documented_datetime
PRN effectiveness reassessment Per protocol (e.g., 30–60 min post-admin) Reminder alert at due time; escalate if not completed within 30 min medication_administration.prn_assessment_due_datetime
Held/refused/omitted documentation Immediate (at scheduled time) Alert if scheduled dose has no status within +60 min medication_administration.scheduled_datetime vs. status update

WF-PIS-005: IV Admixture Preparation

Process Flow

Actor: IV Pharmacist, Pharmacy Technician
Trigger: IV medication order requiring compounding appears on IV admixture worklist
Pre-conditions:

  • IV order exists in pharmacy_orders with route indicating IV infusion/bolus and flagged as requiring compounding
  • Order verified by pharmacist (order_status = 'VERIFIED')
  • IV base products and recipes defined in master data (IV Solution Base Products, compounding rules)
  • Cleanroom and laminar airflow hood available and within environmental specs
  1. System identifies IV orders requiring compounding and lists them in IV Admixture Preparation screen (SCR-PIS-005).
  2. IV pharmacist reviews each order: base solution, additives, concentration, total volume, infusion rate, stability, and patient-specific factors (weight, renal function).
  3. System generates a compounding worksheet from iv_admixture_orders including ingredient list, quantities, sequence of addition, and safety checks.
  4. Technician prepares in the cleanroom; before starting, scans own ID and the order barcode to ensure correct patient and product.
  5. Technician scans each ingredient barcode (base solution, vials, ampoules); system validates against worksheet and pharmacy_inventory.
  6. Decision 1 – Ingredient validation:
    - If ingredient mismatch or expired lot → system blocks and requires correction.
    - If all ingredients valid → proceed.
  7. If gravimetric verification is enabled, technician places bag on scale; system compares expected vs actual weight and prompts for adjustment if out of tolerance.
  8. Technician completes compounding following on-screen steps; system records preparation steps and timestamps in iv_admixture_orders.
  9. IV pharmacist performs final visual check and, if required, re-scans bag barcode; sets iv_admixture_orders.status = 'PREPARED_VERIFIED'.
  10. System calculates beyond-use date/time (BUD) based on product type and stability rules; stores in iv_admixture_orders.beyond_use_datetime.
  11. System prints IV label (patient name, MRN, drug, concentration, volume, rate, BUD, barcode) and attaches to bag.
  12. System updates pharmacy_inventory (deducts used ingredients) and inserts inventory_transactions for each component.
  13. Prepared IV is delivered to nursing unit; delivery details recorded in iv_admixture_orders and linked pharmacy_dispensing record.
  14. System updates EHR/eMAR with IV preparation status and BUD to support administration scheduling.

Data Modified:

  • iv_admixture_orders — INSERT (order-level record), UPDATE (preparation details, status, BUD, prepared_by, verified_by)
  • pharmacy_inventory — UPDATE (quantity_on_hand for each ingredient)
  • inventory_transactions — INSERT (component usage)
  • pharmacy_dispensing — UPDATE (link to admixture_id, dispensing_status)

Mermaid Flowchart

flowchart TD A["IV order VERIFIED<br/>Requires compounding"] --> B["Display IV admixture worklist"] B --> C["IV pharmacist reviews order & patient factors"] C --> D["Generate compounding worksheet"] D --> E["Tech scans ID & order barcode"] E --> F["Scan each ingredient barcode"] F --> G{"All ingredients valid & not expired?"} G -->|"No"| H["Block, show error<br/>Re-select ingredients"] H --> F G -->|"Yes"| I{"Gravimetric verification enabled?"} I -->|"Yes"| J["Weigh bag & compare to expected"] J --> K{"Within tolerance?"} K -->|"No"| L["Adjust volume/ingredients<br/>Re-weigh"] L --> J K -->|"Yes"| M["Complete compounding steps"] I -->|"No"| M M --> N["Pharmacist final check<br/>Set status=PREPARED_VERIFIED"] N --> O["Calculate BUD & print IV label"] O --> P["Update inventory & insert transactions"] P --> Q["Deliver IV to ward<br/>Update dispensing record"] Q --> R["Notify eMAR/EHR of IV availability & BUD"]

Decision Points

  1. Ingredient validation
    - If wrong or expired ingredient scanned → compounding blocked; prevents contamination or incorrect therapy.

  2. Gravimetric verification
    - If enabled and weight out of tolerance → technician must adjust; ensures accurate concentration.

  3. Final pharmacist verification
    - If pharmacist identifies issue (e.g., incompatibility) → admixture rejected, new order or preparation required.

Integration Points

  • CPOE
  • Read: IV order details and special instructions.

  • EHR/eMAR

  • Outbound: IV preparation status, BUD, and administration instructions.

  • Inventory Management

  • Internal: pharmacy_inventory and inventory_transactions for component usage.

Exception Handling

  • Cleanroom environmental failure (e.g., pressure out of range):
  • System may block new compounding tasks and display warning; tasks deferred until environment restored.

  • Missing IV recipe:

  • If no standard recipe found, pharmacist must manually define compounding parameters; system logs as non-standard preparation.

  • Printer failure for IV labels:

  • System allows reprint; if persistent, labels may be printed at alternate device; manual labels require supervisor override and documentation.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper compounding worksheets Electronic iv_admixture_orders with stepwise guidance Reduces calculation errors and improves traceability
Handwritten IV labels System-generated labels with barcodes and BUD Supports eMAR scanning and stability tracking
Manual logs of ingredient usage Automated inventory_transactions per component Enables precise cost and waste analysis
Paper cleanroom logs for each batch Electronic timestamps and user IDs for each step Stronger compliance evidence for inspections

Remaining Paper Touchpoints: Environmental monitoring logs may remain partially paper-based depending on facility equipment.

Inputs and Outputs

Inputs

Source Data Element Format / Standard
PIS (verified order) IV order details: drug, dose, base solution, volume, rate, duration pharmacy_orders with route = IV and compounding flag
EHR Patient weight, renal function, fluid balance FHIR Observation (weight, creatinine, fluid I/O)
IV Recipe Master Standard compounding recipe: base solution, additives, concentrations, stability data, BUD iv_recipes / iv_recipe_components
Inventory Base solutions, additives, diluents — lot, expiry, NDC pharmacy_inventory query
Environmental monitoring Cleanroom temperature, humidity, particle count, hood certification status Environmental monitoring system / manual log

Outputs

Destination Data Element Format / Standard
Dispensing queue Prepared IV bag/syringe with barcode label (drug, dose, volume, rate, BUD, lot) iv_admixture_orders status = READY, label printed
eMAR / Nursing IV medication available for administration with preparation details pharmacy_dispensing linked to iv_admixture_orders
Inventory Component deductions (base, additive, diluent quantities consumed) inventory_transactions INSERT per component
Quality log Compounding record: preparer, verifier, components used, BUD, environmental conditions iv_admixture_orders compounding audit fields
Waste tracking Partial-use vial waste, expired components discarded inventory_transactions (waste type)

Post-conditions

  • iv_admixture_orders record created with status COMPOUNDED and pharmacist verification
  • Each component lot tracked in inventory_transactions for recall traceability
  • Beyond-use date (BUD) calculated and printed on label
  • Compounding steps timestamped with preparer and verifier user IDs
  • Prepared product added to dispensing queue for nursing pickup or pneumatic tube delivery

SLA and Timing

Step Target Time Escalation Measurement Source
IV order to compounding start < 30 min (routine), < 15 min (urgent), immediate (STAT) Alert IV pharmacist if unstarted > 45 min (routine) pharmacy_orders.verified_datetime to iv_admixture_orders.prep_start_datetime
Compounding (preparation + verification) < 20 min per bag (standard), < 30 min (complex TPN) Alert pharmacy supervisor if > 40 min iv_admixture_orders.prep_start_datetime to .prep_complete_datetime
Pharmacist final check < 5 min Alert if pharmacist queue > 10 unchecked items iv_admixture_orders.prep_complete_datetime to .verified_datetime
Delivery to nursing unit < 15 min post-verification Alert charge nurse and pharmacy if > 30 min iv_admixture_orders.verified_datetime to .delivered_datetime
End-to-end (order to bedside-ready) < 60 min (routine), < 30 min (urgent), < 15 min (STAT) Escalate to pharmacy manager and attending physician pharmacy_orders.verified_datetime to iv_admixture_orders.delivered_datetime
Cleanroom environmental check Continuous monitoring; out-of-spec alert immediate Stop compounding; alert pharmacy director Environmental monitoring system timestamps

WF-PIS-006: Controlled Substance Management

Process Flow

Actor: Pharmacist, Pharmacy Technician, Nurse
Trigger: Controlled substance ordered, dispensed, administered, or wasted
Pre-conditions:

  • Medication flagged as controlled in formulary_items.is_controlled = TRUE with controlled_schedule per UAE MOH schedules
  • Prescriber authorised for controlled substances
  • Controlled substance vault/ADC configured and mapped to pharmacy_inventory locations
  • Dual-signature policy configured for specified schedules
  1. During order verification (WF-PIS-001), system checks formulary_items.controlled_schedule and flags order as controlled; pharmacy_orders.is_controlled = TRUE.
  2. System verifies prescriber authorisation (e.g., MOH/DOH/DHA license attributes) and logs check in audit trail.
  3. For dispensing, system requires pharmacist login and a witness (pharmacist or nurse) for vault access; both users authenticated.
  4. Pharmacist selects controlled substance transaction (dispense to patient, return, waste, inventory count) in Controlled Substance Register screen (SCR-PIS-006).
  5. Pharmacist scans medication from vault; system validates drug, strength, lot, and quantity against pharmacy_inventory.
  6. Decision 1 – Transaction type:
    - Dispense to patient → link to pharmacy_orders and pharmacy_dispensing.
    - Return from ward → increase inventory.
    - Waste → record waste amount and witness.
    - Inventory adjustment → require supervisor approval.
  7. For dispense to patient, system records transaction in controlled_substance_log with from_user, to_user, patient_id, quantity, and witness_id; updates pharmacy_inventory and inventory_transactions.
  8. Medication is delivered to ward; nurse administers via eMAR (WF-PIS-004), scanning patient and medication; system links administration to controlled_substance_log.
  9. For partial doses or unused portions, nurse initiates waste transaction; system requires witness scan and records waste_amount and waste_witnessed_by.
  10. System supports daily reconciliation: compares controlled_substance_log balances with pharmacy_inventory for each controlled item and location.
  11. Decision 2 – Reconciliation result:
    • If balances match → mark reconciliation_status = BALANCED.
    • If discrepancy → flag discrepancy, create investigation record, and alert supervisor.
  12. Monthly, system generates MOH-compliant controlled substance reports (dispensing, returns, wastes, discrepancies) and exports via secure file transfer or portal upload.
  13. All controlled substance actions are logged with user IDs, timestamps, and workstation IDs for ADHICS/DHA security compliance.

Data Modified:

  • pharmacy_orders — UPDATE (is_controlled, controlled_schedule)
  • pharmacy_dispensing — INSERT/UPDATE (controlled-related dispensing)
  • pharmacy_inventory — UPDATE (controlled stock levels)
  • inventory_transactions — INSERT (controlled movements)
  • controlled_substance_log — INSERT (each transaction), UPDATE (balance_after, reconciliation_status)
  • controlled_discrepancy_investigations (assumed) — INSERT (for discrepancies)

Mermaid Flowchart

flowchart TD A["Order flagged as controlled"] --> B["Verify prescriber authorisation"] B --> C["Pharmacist & witness authenticate to vault"] C --> D["Select transaction type"] D --> E{"Dispense / Return / Waste / Adjustment?"} E -->|"Dispense"| F["Scan medication<br/>Validate against inventory"] E -->|"Return"| G["Record return<br/>Increase inventory"] E -->|"Waste"| H["Record waste<br/>Require witness"] E -->|"Adjustment"| I["Supervisor approval required"] F --> J["Insert controlled_substance_log<br/>Update inventory & transactions"] J --> K["Deliver to ward<br/>Link to dispensing record"] K --> L["Nurse administers via eMAR<br/>Link admin to log"] H --> J G --> J I --> J L --> M["Daily reconciliation<br/>Compare log vs inventory"] M --> N{"Balanced?"} N -->|"Yes"| O["Mark BALANCED"] N -->|"No"| P["Flag discrepancy<br/>Create investigation<br/>Alert supervisor"] O --> Q["Monthly MOH report generation"] P --> Q

Decision Points

  1. Transaction type
    - Different logic for dispense, return, waste, and adjustment; each with specific documentation requirements.

  2. Reconciliation outcome
    - Balanced vs discrepancy; discrepancies trigger investigation and potential MOH reporting.

  3. Prescriber authorisation
    - If prescriber not authorised → order cannot proceed; pharmacist must contact prescriber or supervisor.

Integration Points

  • EHR / CPOE
  • Read: Controlled order details and prescriber credentials.
  • Write: Notes about controlled substance status and any restrictions.

  • UAE MOH Reporting

  • Outbound: Monthly controlled substance dispensing and discrepancy reports via secure file transfer or portal (INT-PIS-007).

  • Security / IAM

  • Internal: Role-based access and dual-authentication for vault access; logging per ADHICS/DHA standards.

Exception Handling

  • Witness not available:
  • System may allow temporary override only for emergency administration with supervisor approval; all such events flagged for audit.

  • Vault inventory mismatch:

  • System prevents further dispensing of affected item until discrepancy investigated or temporary override authorised.

  • MOH report transmission failure:

  • System retries; if still failing, alerts Chief Pharmacist; report can be manually downloaded and uploaded via MOH portal.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper controlled substance registers controlled_substance_log with real-time updates Eliminates illegible entries and missing pages
Manual daily count sheets Automated reconciliation against pharmacy_inventory Faster detection of discrepancies
Handwritten witness signatures Electronic witness capture with user IDs Stronger non-repudiation and auditability
Paper MOH reporting forms System-generated electronic reports Reduces administrative burden and errors

Remaining Paper Touchpoints: Printed copies of MOH reports may be kept in physical binders per facility policy.

Inputs and Outputs

Inputs

Source Data Element Format / Standard
CPOE Controlled substance order (drug, schedule, dose, quantity, prescriber authority) HL7 RDE^O11 / FHIR MedicationRequest with isControlledSubstance extension
Formulary Controlled schedule classification (UAE MOH schedules), dual-signature rules formulary_items.controlled_schedule, policy rules
Provider credentials MOH/DOH/DHA prescriber controlled substance authority provider_credentials lookup
Inventory (vault/ADC) Current vault/ADC stock count, lot, expiry, shelf position pharmacy_inventory filtered by is_controlled = TRUE
Nursing (eMAR) Administration record, waste documentation, witness ID medication_administration with controlled substance fields
Prior count Previous reconciliation count, expected balance controlled_substance_log (last reconciliation entry)

Outputs

Destination Data Element Format / Standard
Controlled substance register Dispensing record: drug, quantity, patient, prescriber, pharmacist, witness, timestamp controlled_substance_log INSERT
Inventory Stock adjustment (decrement on dispense, increment on return/receipt) inventory_transactions with transaction_type = controlled
Reconciliation report Expected vs. actual count, discrepancy flag, investigator, resolution controlled_substance_reconciliation
UAE MOH Monthly controlled substance report; event-driven discrepancy reports SFTP batch (CSV/XML) / MOH portal upload
Audit trail Every access, dispense, waste, return, count — with dual-witness where required controlled_substance_audit INSERT

Post-conditions

  • Each controlled substance movement is double-documented (system + witness confirmation)
  • Vault/ADC counts reconciled at shift change; discrepancies flagged immediately
  • MOH monthly report generated with all transactions for the period
  • Any discrepancy triggers investigation workflow with resolution documented
  • Full chain of custody maintained from receipt to patient administration or waste

SLA and Timing

Step Target Time Escalation Measurement Source
Order verification (controlled substance) < 15 min Alert pharmacy supervisor if > 20 min pharmacy_orders.received_datetime to .verified_datetime
Vault dispensing (dual-witness) < 10 min Alert if witness unavailable > 10 min controlled_substance_log.requested_datetime to .dispensed_datetime
Shift-change reconciliation < 30 min per vault/ADC Alert pharmacy director if not completed within 1 hour of shift change controlled_substance_reconciliation.started_datetime to .completed_datetime
Discrepancy investigation initiation < 1 hour from detection Alert pharmacy director and facility security controlled_substance_reconciliation.discrepancy_detected_datetime to .investigation_started_datetime
Discrepancy resolution < 24 hours Escalate to Chief Pharmacist and compliance officer controlled_substance_reconciliation.investigation_started_datetime to .resolved_datetime
MOH monthly report submission By 10th of following month Alert compliance team 5 days before deadline; escalate to Chief Pharmacist at 3 days moh_report_submissions.due_date vs. .submitted_datetime
Waste documentation (dual-witness) Immediate (at time of waste) Alert if waste not documented within 15 min of administration controlled_substance_log.waste_datetime vs. medication_administration.administered_datetime

State Transition Diagram

The following state diagram tracks the controlled substance inventory adjustment lifecycle — from receipt into the facility vault through dispensing, administration, waste, and reconciliation.

stateDiagram-v2 [*] --> RECEIVED : Shipment received & verified RECEIVED --> IN_VAULT : Stored in vault (dual-count confirmed) IN_VAULT --> DISPENSED_TO_UNIT : Dispensed to ADC/nursing unit (dual-witness) IN_VAULT --> DISPENSED_TO_PATIENT : Direct vault dispense (outpatient) DISPENSED_TO_UNIT --> IN_ADC : Loaded into ADC (count verified) IN_ADC --> DISPENSED_TO_PATIENT : Dispensed for specific patient DISPENSED_TO_PATIENT --> ADMINISTERED : Nurse administers to patient (eMAR) DISPENSED_TO_PATIENT --> RETURNED : Unused dose returned to vault/ADC ADMINISTERED --> PARTIAL_WASTE : Partial dose used, remainder wasted (dual-witness) ADMINISTERED --> FULLY_CONSUMED : Full dose administered PARTIAL_WASTE --> WASTE_DOCUMENTED : Waste witnessed and recorded DISPENSED_TO_PATIENT --> FULL_WASTE : Dose not administered, full waste (dual-witness) FULL_WASTE --> WASTE_DOCUMENTED : Waste witnessed and recorded RETURNED --> IN_VAULT : Returned to vault (count updated) RETURNED --> IN_ADC : Returned to ADC (count updated) IN_VAULT --> DISCREPANCY_DETECTED : Count mismatch during reconciliation IN_ADC --> DISCREPANCY_DETECTED : Count mismatch during reconciliation DISCREPANCY_DETECTED --> UNDER_INVESTIGATION : Investigation initiated UNDER_INVESTIGATION --> RESOLVED_ADJUSTED : Resolved (count corrected) UNDER_INVESTIGATION --> RESOLVED_LOSS : Confirmed loss (reported to MOH) RESOLVED_ADJUSTED --> IN_VAULT : Adjusted count, normal operations resume RESOLVED_LOSS --> REPORTED_TO_MOH : Loss reported per regulation FULLY_CONSUMED --> [*] WASTE_DOCUMENTED --> [*] REPORTED_TO_MOH --> [*]

WF-PIS-007: Medication Reconciliation

Process Flow

Actor: Pharmacist, Physician, Nurse
Trigger: Patient admission, transfer, or discharge
Pre-conditions:

  • Active encounter in encounters
  • Access to external medication history sources (NABIDH/Malaffi, community pharmacy records) where available
  • Reconciliation task created for the encounter (admission/transfer/discharge)
  1. At admission/transition, system creates a medication reconciliation task and displays it in Medication Reconciliation screen (SCR-PIS-009).
  2. Pharmacist or nurse collects Best Possible Medication History (BPMH) via patient/caregiver interview, medication bottles, and external sources (NABIDH/Malaffi, community pharmacy).
  3. System imports available external medication lists and merges them with patient-reported medications; user confirms and edits entries.
  4. Home medications are recorded in medication_reconciliation with type HOME and source (patient, HIE, pharmacy).
  5. System displays side-by-side comparison of home medications vs current inpatient orders from pharmacy_orders.
  6. User identifies discrepancies (omissions, duplications, dose differences, new meds) and flags each in medication_reconciliation.discrepancy_type.
  7. Decision 1 – Discrepancy type:
    - Intentional (e.g., medication appropriately discontinued) → document rationale.
    - Unintentional → requires prescriber review.
  8. Pharmacist proposes actions (continue, hold, modify, discontinue, new order) and records action_taken and new_order_id (if order created).
  9. Physician reviews reconciliation summary, confirms or adjusts actions, and signs electronically.
  10. At discharge, system compares discharge medication list to admission and inpatient meds; user finalises discharge list and prints or sends to Patient Portal.
  11. Discharge medications are recorded as reconciliation_type = 'DISCHARGE' in medication_reconciliation and linked to new outpatient pharmacy_orders where applicable.
  12. System updates EHR medication list and sends discharge medications to NABIDH/Malaffi if required by local policy.
  13. System marks reconciliation task as complete and records reconciled_by, reconciled_datetime.

Data Modified:

  • medication_reconciliation — INSERT (home, inpatient, discharge reconciliation entries), UPDATE (actions, discrepancy_type, reconciled_by, reconciled_datetime)
  • pharmacy_orders — INSERT (new orders resulting from reconciliation), UPDATE (discontinued/modified orders)
  • EHR medication list tables — UPDATE (active meds)

Mermaid Flowchart

flowchart TD A["Admission/Transfer/Discharge event"] --> B["Create reconciliation task"] B --> C["Collect BPMH from patient & external sources"] C --> D["Record home meds in medication_reconciliation"] D --> E["Compare home meds vs inpatient orders"] E --> F["Identify discrepancies & classify"] F --> G{"Discrepancy intentional?"} G -->|"Yes"| H["Document rationale<br/>No change needed"] G -->|"No"| I["Propose actions<br/>Continue/Hold/Modify/Discontinue/New order"] I --> J["Physician reviews & signs reconciliation"] H --> J J --> K["At discharge, generate final med list"] K --> L["Record discharge reconciliation entries"] L --> M["Update EHR med list & send to Portal/HIE"] M --> N["Mark reconciliation task complete"]

Decision Points

  1. Discrepancy classification
    - Intentional vs unintentional; unintentional discrepancies must be resolved.

  2. Action selection
    - Continue, hold, modify, discontinue, or new order; each has different downstream effects.

  3. Discharge list finalisation
    - Physician may choose to stop certain chronic meds or add new ones; system must clearly show changes from admission.

Integration Points

  • NABIDH / Malaffi
  • Inbound: External medication history where available.
  • Outbound: Updated medication lists at discharge.

  • EHR Patient Chart

  • Read: Current inpatient orders and historical meds.
  • Write: Updated active medication list and reconciliation notes.

  • CPOE

  • Outbound: New or modified orders generated during reconciliation.

Exception Handling

  • Patient unable to provide history:
  • System records limitation (e.g., unconscious, language barrier) and source of any partial data; prompts for follow-up when caregiver available.

  • HIE unavailable:

  • System logs failure and prompts user to rely on other sources; can schedule later reconciliation update when HIE access restored.

  • Reconciliation not completed within SLA (e.g., 24h):

  • System escalates task to pharmacist supervisor and notifies attending physician.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper medication reconciliation forms medication_reconciliation with structured discrepancy tracking Improves completeness and legibility
Handwritten discharge medication lists Electronic discharge list with EN/AR formatting and Portal delivery Enhances patient understanding and access
Manual comparison of home vs inpatient meds Side-by-side digital comparison with discrepancy flags Reduces oversight and speeds workflow
Verbal-only communication of changes Electronic summary for physician sign-off and audit Supports PDPL-compliant documentation and accountability

Remaining Paper Touchpoints: Printed discharge medication lists for patients who prefer paper or lack portal access.

Inputs and Outputs

Inputs

Source Data Element Format / Standard
EHR / Scheduling Encounter event (admission, transfer, discharge) triggering reconciliation FHIR Encounter status change / ADT A01/A02/A03
Patient / Caregiver Self-reported home medications, OTC, supplements, herbals Structured interview → medication_reconciliation entries
NABIDH / Malaffi External medication history (community pharmacy dispensing records) HL7 query/response or FHIR MedicationStatement
EHR Current inpatient medication orders pharmacy_orders active list for encounter
Pharmacy (PIS) Formulary mapping, therapeutic equivalences, dose conversion data formulary_items, dose conversion tables

Outputs

Destination Data Element Format / Standard
EHR (Patient Chart) Reconciled medication list with discrepancy annotations FHIR MedicationStatement (reconciled), DetectedIssue
CPOE New orders, modified orders, or discontinuation requests based on reconciliation FHIR MedicationRequest / HL7 RDE^O11
Physician Reconciliation summary for review and sign-off In-app notification + reconciliation report
Patient Portal Discharge medication list (EN/AR) with instructions FHIR MedicationStatement, CarePlan
Audit trail Reconciliation completion record: pharmacist, physician sign-off, timestamp medication_reconciliation.completed_datetime, signed_off_by

Post-conditions

  • medication_reconciliation record completed with all home medications compared against inpatient orders
  • Each discrepancy (omission, addition, dose change, therapeutic substitution) documented with clinical rationale
  • Physician has reviewed and signed off on reconciled list
  • At discharge: patient receives printed and/or portal-accessible medication list in preferred language
  • Reconciliation task marked complete; KPI timer stopped

SLA and Timing

Step Target Time Escalation Measurement Source
Reconciliation task creation Automatic at admission/transfer/discharge event Alert if not created within 30 min of ADT event medication_reconciliation.created_datetime vs. encounters.admit_datetime
BPMH collection (admission) < 24 hours from admission Alert pharmacist supervisor at 18 hours; escalate to pharmacy director at 24 hours medication_reconciliation.bpmh_completed_datetime
Reconciliation completion (admission) < 24 hours from admission Same escalation as BPMH medication_reconciliation.completed_datetime
Reconciliation completion (transfer) < 4 hours from transfer Alert receiving unit pharmacist at 3 hours medication_reconciliation.completed_datetime vs. transfer event
Reconciliation completion (discharge) Before discharge order is finalized Block discharge if not completed (soft stop with override) medication_reconciliation.completed_datetime vs. encounters.discharge_datetime
Physician sign-off < 2 hours after pharmacist completion Notify attending physician; escalate to department head at 4 hours medication_reconciliation.completed_datetime to .signed_off_datetime
HIE medication history retrieval < 15 sec (NABIDH/Malaffi query) Proceed without HIE data if timeout > 30 sec; schedule retry integration_message_log response time

WF-PIS-008: Antimicrobial Stewardship Review

Process Flow

Actor: Antimicrobial Stewardship Pharmacist, Infectious Disease Physician
Trigger: Antimicrobial order placed, culture results available, or therapy exceeds defined duration (e.g., 72 hours)
Pre-conditions:

  • Antimicrobial orders recorded in pharmacy_orders with antibiotic RxNorm codes
  • Stewardship rules configured (restricted antibiotics, duration thresholds)
  • LIS integration available for culture and sensitivity results
  • Patient clinical data accessible (diagnosis, vitals, labs)
  1. System continuously monitors pharmacy_orders for antimicrobial agents and applies stewardship rules (e.g., restricted drugs, broad-spectrum, prolonged therapy).
  2. Orders meeting criteria are added to Antimicrobial Stewardship worklist and antimicrobial_stewardship_reviews entries are created with status PENDING_REVIEW.
  3. When LIS finalises culture/sensitivity results, system links results to relevant orders via culture_result_id and updates review records.
  4. Stewardship pharmacist opens a case from the worklist and reviews: indication, diagnosis, current antibiotics, culture/sensitivity, renal/hepatic function, and previous antimicrobial history.
  5. System suggests potential actions based on rules and antibiogram data (e.g., de-escalate from broad-spectrum to narrow-spectrum, IV-to-oral switch, stop if no infection).
  6. Decision 1 – Recommendation type:
    - De-escalation, escalation, IV-to-oral switch, duration adjustment, or discontinuation.
  7. Pharmacist documents recommendation and rationale in antimicrobial_stewardship_reviews.recommendation and sets review_type (prospective, retrospective, day-3 review).
  8. Pharmacist communicates recommendation to prescriber (secure messaging, phone, or EHR note).
  9. Decision 2 – Prescriber acceptance:
    - If accepted → prescriber updates orders in CPOE; system sets accepted = TRUE and records prescriber_response.
    - If rejected → accepted = FALSE with documented reason.
  10. System tracks outcome (e.g., therapy changed, dose adjusted) and updates antimicrobial_stewardship_reviews.outcome.
  11. Aggregated data (DDD per 1000 patient-days, acceptance rates, use of restricted antibiotics) is available for reporting and quality improvement.
  12. Annually, system supports generation of facility antibiogram using LIS data and stewardship review outcomes.

Data Modified:

  • antimicrobial_stewardship_reviews — INSERT (new reviews), UPDATE (recommendation, accepted flag, reviewed_by, reviewed_datetime, prescriber_response, outcome)
  • pharmacy_orders — UPDATE (if orders changed following recommendation)
  • LIS result tables — referenced only

Mermaid Flowchart

flowchart TD A["Monitor antimicrobial orders"] --> B["Apply stewardship rules"] B --> C{"Meets review criteria?"} C -->|"No"| D["No action"] C -->|"Yes"| E["Create stewardship review<br/>Add to worklist"] E --> F["Link culture/sensitivity results when available"] F --> G["Pharmacist reviews case<br/>Clinical & lab data"] G --> H["Determine recommendation type"] H --> I["Document recommendation in review record"] I --> J["Communicate with prescriber"] J --> K{"Prescriber accepts?"} K -->|"Yes"| L["Orders updated in CPOE<br/>Mark accepted=TRUE"] K -->|"No"| M["Document rejection reason<br/>accepted=FALSE"] L --> N["Update outcome & metrics"] M --> N N --> O["Aggregate data for reports & antibiogram"]

Decision Points

  1. Review criteria
    - Restricted drug, broad-spectrum use, prolonged duration, or high-risk indication; configurable per facility.

  2. Recommendation type
    - De-escalation vs escalation vs IV-to-oral vs stop; depends on culture results and clinical status.

  3. Prescriber acceptance
    - Acceptance indicates alignment with stewardship; rejection requires documented rationale and may prompt further discussion.

Integration Points

  • LIS (Laboratory Information System)
  • Inbound: Culture and sensitivity results for microbiology tests.

  • CPOE / EHR

  • Read: Orders, diagnoses, vitals, labs.
  • Write: Stewardship notes and order changes (via prescriber).

  • Analytics / Quality Reporting

  • Internal: Use antimicrobial_stewardship_reviews and LIS data to compute utilisation metrics and antibiograms.

Exception Handling

  • Missing culture results:
  • System may prompt for de-escalation based on clinical improvement even without culture; pharmacist documents uncertainty.

  • LIS integration failure:

  • System flags cases where culture results are delayed; pharmacist may contact lab directly and manually enter key results.

  • High alert resistance patterns:

  • If antibiogram shows high resistance to chosen agent, system may escalate alert severity and require ID physician review.

Paperless Transformation

Previously Paper-Based Now Digital In-System Notes
Paper stewardship tracking forms and spreadsheets antimicrobial_stewardship_reviews with structured fields Enables robust analytics and KPI tracking
Manual antibiogram compilation Automated aggregation of LIS data with stewardship outcomes Faster, more accurate annual reports
Informal phone-only recommendations Documented recommendations and responses in system Supports accountability and quality improvement
Paper-based utilisation reports Dashboards and exportable reports Easier sharing with MOH/DOH/DHA if requested

Remaining Paper Touchpoints: None — stewardship workflow is fully digital, though printed summary reports may be produced for committee meetings.

Inputs and Outputs

Inputs

Source Data Element Format / Standard
PIS (pharmacy orders) Antimicrobial orders: drug (RxNorm), dose, route, frequency, start date, duration pharmacy_orders filtered by antimicrobial RxNorm codes
LIS Culture and sensitivity results: organism, MIC values, susceptibility interpretation Internal API / FHIR DiagnosticReport, Observation (LOINC-coded)
EHR Patient clinical data: diagnosis (ICD-10-AM), vitals, inflammatory markers (CRP, procalcitonin), WBC FHIR Condition, Observation
Stewardship rules engine Restricted drug list, duration thresholds, de-escalation rules, antibiogram data antimicrobial_stewardship_rules, facility_antibiogram
Pharmacy (formulary) Antibiotic cost, formulary tier, IV-to-PO conversion eligibility formulary_items

Outputs

Destination Data Element Format / Standard
Prescriber Stewardship recommendation: de-escalate, switch IV→PO, stop, adjust dose, change agent In-app alert + antimicrobial_stewardship_reviews
CPOE Modified medication order (if prescriber accepts recommendation) FHIR MedicationRequest update / HL7 RDE^O11 (XO)
Stewardship dashboard Review status, recommendation type, prescriber response, outcome antimicrobial_stewardship_reviews aggregated
Infection control Resistance patterns, antibiogram updates, outbreak alerts Internal report / dashboard feed
MOH / DOH / DHA Antimicrobial utilization reports (if requested by regulatory bodies) Export (CSV/PDF) per regulatory template

Post-conditions

  • antimicrobial_stewardship_reviews record completed with recommendation and prescriber response
  • If recommendation accepted: medication order updated in pharmacy_orders (de-escalated, switched, or stopped)
  • Stewardship KPIs updated (DOT, DDD, de-escalation rate, IV-to-PO conversion rate)
  • Facility antibiogram data enriched with new culture/sensitivity results
  • 72-hour review compliance documented for accreditation and quality reporting

SLA and Timing

Step Target Time Escalation Measurement Source
Restricted antibiotic pre-authorization < 30 min from order placement Alert ID physician if no response in 30 min; escalate to department head at 60 min antimicrobial_stewardship_reviews.created_datetime to .authorization_datetime
72-hour therapy review At 72 hours from antimicrobial start Auto-alert stewardship pharmacist at 66 hours; overdue alert at 72 hours pharmacy_orders.start_datetime + 72h vs. antimicrobial_stewardship_reviews.review_datetime
Culture result review < 4 hours after culture finalized Alert stewardship pharmacist when culture result available LIS result effective_datetime to stewardship review created_datetime
De-escalation recommendation < 8 hours after susceptibility available Alert ID physician if not reviewed by 12 hours Culture sensitivity reported_datetime to recommendation created_datetime
Prescriber response to recommendation < 24 hours Reminder at 12 hours; escalate to department head at 24 hours antimicrobial_stewardship_reviews.recommendation_datetime to .prescriber_response_datetime
IV-to-PO conversion assessment Daily for all IV antimicrobials > 48 hours Auto-flag on stewardship worklist pharmacy_orders.start_datetime + 48h; daily worklist generation
content/clinical/pis/01-workflows.md Generated 2026-02-20 22:54