Medication Prescription and Dispense (MPD)
1.0.0-comment-2 - ballot
Medication Prescription and Dispense (MPD), published by Integrating the Healthcare Enterprise (IHE). This guide is not an authorized publication; it is the continuous build for version 1.0.0-comment-2 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/IHE/pharm-mpd/tree/jct-draft and changes regularly. See the Directory of published versions
Built from commit b05e71ce. Branch: jct-draft.
This page details the patterns for changing, cancelling, refusing, or holding medication orders. These patterns follow the fundamental principle that only the order placer modifies orders — all other parties request changes through Tasks.
For general principles and context, see Status and Workflow Management.
When the prescriber decides to cancel their own order, they update the order status directly. This is the simplest case — no Task-based negotiation is needed.
cancelledstopped# Before: active order
MedicationRequest:
id: "order-123"
status: "active"
intent: "order"
medication: Amoxicillin 500mg
subject: Patient/patient-1
requester: Practitioner/dr-smith
# After: prescriber cancels
MedicationRequest:
id: "order-123"
status: "cancelled" # or "stopped" if execution had begun
statusReason:
text: "Treatment plan changed"
intent: "order"
medication: Amoxicillin 500mg
subject: Patient/patient-1
requester: Practitioner/dr-smith
The filler observes the status change (via polling or subscription) and stops any pending activities.
When a pharmacist or other filler identifies a reason to cancel an order (e.g., drug interaction, patient request), they cannot cancel the order directly. Instead, they create a Task requesting the prescriber to consider cancellation.
This is the "request about a request" pattern: a Task asking the order owner to act on the order.
# Step 1: Pharmacist creates a request-to-cancel Task
Task:
status: "requested"
intent: "order"
code:
coding:
- system: "http://hl7.org/fhir/CodeSystem/task-code"
code: "abort"
display: "Mark the focal resource as no longer active"
focus:
reference: "MedicationRequest/order-123"
requester:
reference: "Practitioner/pharmacist-jones" # Who is asking
owner:
reference: "Practitioner/dr-smith" # Who should act (the prescriber)
reasonCode:
text: "Drug interaction detected with current medication"
The prescriber receives this Task, evaluates the request, and takes action:
If agreed:
# Step 2a: Prescriber cancels the order
MedicationRequest:
id: "order-123"
status: "stopped"
statusReason:
text: "Cancelled per pharmacist request - drug interaction"
# Step 2b: Prescriber completes the request Task
Task:
status: "completed"
If not agreed:
# Step 2: Prescriber rejects the request
Task:
status: "rejected"
statusReason:
text: "Interaction is clinically acceptable in this context"
When a pharmacy receives an order but determines it cannot or should not fulfill it, the pharmacy communicates this by rejecting the execution Task — not the order itself.
# Step 1: Execution Task was created when order was received
Task:
id: "exec-task-456"
status: "accepted"
intent: "order"
code:
coding:
- system: "http://hl7.org/fhir/CodeSystem/task-code"
code: "fulfill"
display: "Fulfill the focal request"
focus:
reference: "MedicationRequest/order-123"
owner:
reference: "Organization/pharmacy-abc"
# Step 2: Pharmacy refuses — updates the Task
Task:
id: "exec-task-456"
status: "rejected"
statusReason:
text: "Medication not in stock, unable to source within required timeframe"
focus:
reference: "MedicationRequest/order-123"
owner:
reference: "Organization/pharmacy-abc"
The order itself remains active — the prescriber observes the rejection and decides the next step:
The order is still valid and authorized. The filler simply cannot act on it. The decision of what to do next belongs to the placer.
The prescriber directly sets the order to on-hold:
MedicationRequest:
id: "order-123"
status: "on-hold"
statusReason:
text: "Pending lab results"
To resume, the prescriber sets status back to active.
A pharmacist requests a hold through a Task:
Task:
status: "requested"
intent: "order"
code:
coding:
- system: "http://hl7.org/fhir/CodeSystem/task-code"
code: "suspend"
display: "Suspend the focal resource"
focus:
reference: "MedicationRequest/order-123"
requester:
reference: "Practitioner/pharmacist-jones"
owner:
reference: "Practitioner/dr-smith"
reasonCode:
text: "Patient reports adverse reaction, requesting clinical review"
The prescriber evaluates and decides whether to place the order on hold.
When the prescriber needs to change order details (e.g., dosage adjustment based on lab results), they update the MedicationRequest directly.
Depending on the system and jurisdiction, this may be done by:
priorPrescription)# Option A: Update in place
MedicationRequest:
id: "order-123"
status: "active"
medication: Amoxicillin 500mg
dosageInstruction:
- text: "Take 1 tablet three times daily" # Changed from twice daily
timing:
repeat:
frequency: 3 # Changed from 2
period: 1
periodUnit: "d"
# Option B: Replace with new order
MedicationRequest:
id: "order-456"
status: "active"
medication: Amoxicillin 500mg
priorPrescription:
reference: "MedicationRequest/order-123" # Links to the replaced order
dosageInstruction:
- text: "Take 1 tablet three times daily"
When using replacement, the previous order should be set to stopped or cancelled.
When a pharmacist or other party needs to request a change to order details, they create a Task describing the requested modification. This follows the same "request about a request" pattern as cancellation requests.
# Pharmacist requests a dosage change
Task:
status: "requested"
intent: "order"
code:
coding:
- system: "http://hl7.org/fhir/CodeSystem/task-code"
code: "change"
display: "Change the focal resource"
focus:
reference: "MedicationRequest/order-123"
requester:
reference: "Practitioner/pharmacist-jones"
owner:
reference: "Practitioner/dr-smith"
reasonCode:
text: "Patient has difficulty swallowing tablets, requesting change to liquid form"
note:
- text: "Suggest: Amoxicillin 250mg/5ml oral suspension, 10ml three times daily"
The prescriber evaluates, and if agreed, modifies the order and completes the Task. If not agreed, the Task is rejected with a reason.
In all cases, the pattern is the same: the filler creates a Task, the placer evaluates, and only the placer modifies the order. This keeps the authorization chain intact and the workflow predictable.