Medication Prescription and Dispense (MPD)
1.0.0-comment-2 - ballot International flag

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.

Order Lifecycle Management

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.

1. Cancellation by the Placer

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.

  • If no execution has occurred: set status to cancelled
  • If execution had already begun (e.g., partial dispense): set status to stopped
# 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.

2. Cancellation Requested by the Filler

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"

3. Refusing to Fulfill an Order

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:

  • Reassign to another pharmacy (create a new execution Task)
  • Cancel the order
  • Modify the order and resubmit

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.

4. Placing an Order on Hold

4.1. By 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.

4.2. Requested by the Filler

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.

5. Order Modification by the Placer

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:

  • Updating the existing resource in place
  • Creating a new MedicationRequest that replaces the previous one (using 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.

6. Order Modification Requested by the Filler

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.