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.

Execution and Fulfillment Tracking

This page details the patterns for tracking the execution and fulfillment of medication orders using Task. For general principles, see Status and Workflow Management.

1. Straightforward Prescription and Dispense

The basic fulfillment flow: a prescriber creates an order, a pharmacy fulfills it, and both sides track progress through Task.

# Step 1: Prescriber creates the order
MedicationRequest:
  id: "order-123"
  status: "active"
  intent: "order"
  medication:
    concept:
      text: "Amoxicillin 500mg capsule"
  subject:
    reference: "Patient/patient-1"
  requester:
    reference: "Practitioner/dr-smith"
  dispenseRequest:
    quantity:
      value: 21
      unit: "capsule"
# Step 2: Pharmacy creates an execution Task
Task:
  id: "exec-task-001"
  status: "accepted"
  intent: "order"
  code:
    coding:
      - system: "http://hl7.org/fhir/CodeSystem/task-code"
        code: "fulfill"
  focus:
    reference: "MedicationRequest/order-123"
  owner:
    reference: "Organization/pharmacy-abc"
  businessStatus:
    text: "accepted"
# Step 3: Pharmacy dispenses and creates a MedicationDispense
MedicationDispense:
  id: "dispense-001"
  status: "completed"
  medication:
    concept:
      text: "Amoxicillin 500mg capsule"
  subject:
    reference: "Patient/patient-1"
  authorizingPrescription:
    - reference: "MedicationRequest/order-123"
  quantity:
    value: 21
    unit: "capsule"
  performer:
    - actor:
        reference: "Organization/pharmacy-abc"

# Task is updated to reflect completion
Task:
  id: "exec-task-001"
  status: "completed"
  businessStatus:
    text: "dispensed"
# Step 4: Prescriber observes completion, may close the order
MedicationRequest:
  id: "order-123"
  status: "completed"

2. Partial and Split Dispenses

A single prescription may be fulfilled through multiple dispensation events — for example, when the pharmacy has limited stock, or the patient prefers to collect in batches.

Each partial dispense is recorded as a separate MedicationDispense. The execution Task tracks overall progress.

# First partial dispense: 10 of 21 capsules
MedicationDispense:
  id: "dispense-partial-1"
  status: "completed"
  medication:
    concept:
      text: "Amoxicillin 500mg capsule"
  authorizingPrescription:
    - reference: "MedicationRequest/order-123"
  quantity:
    value: 10
    unit: "capsule"
  subject:
    reference: "Patient/patient-1"

# Task updated with progress
Task:
  id: "exec-task-001"
  status: "in-progress"
  businessStatus:
    text: "partially-dispensed"
# Second partial dispense: remaining 11 capsules
MedicationDispense:
  id: "dispense-partial-2"
  status: "completed"
  medication:
    concept:
      text: "Amoxicillin 500mg capsule"
  authorizingPrescription:
    - reference: "MedicationRequest/order-123"
  quantity:
    value: 11
    unit: "capsule"
  subject:
    reference: "Patient/patient-1"

# Task updated to completed
Task:
  id: "exec-task-001"
  status: "completed"
  businessStatus:
    text: "dispensed"

The order itself remains active throughout partial dispensing. It is only set to completed by the prescriber when all expected fulfillment is done. The Task carries the execution progress.

3. Tracking Progress

For orders that involve repeated activities — such as a chronic medication with monthly dispenses, or a treatment course requiring multiple administrations — progress toward completion can be tracked using Task.output.

The completion status is expressed as a ratio: the numerator is the number of completed activities, and the denominator is the total expected.

# Task tracking progress: 2 of 6 monthly dispenses completed
Task:
  id: "exec-task-chronic"
  status: "in-progress"
  code:
    coding:
      - system: "http://hl7.org/fhir/CodeSystem/task-code"
        code: "fulfill"
  focus:
    reference: "MedicationRequest/chronic-order-789"
  owner:
    reference: "Organization/pharmacy-abc"
  businessStatus:
    text: "in-progress"
  output:
    - type:
        text: "completion-progress"
      valueRatio:
        numerator:
          value: 2
        denominator:
          value: 6

This pattern enables both the placer and filler to have a clear, quantifiable view of fulfillment progress. For detailed guidance, see the COW IG - Tracking Progress.

4. Task in Different Architectures

The degree of Task usage depends on system architecture, but the principles remain the same regardless.

4.1. Central Prescription Repository

A national or regional system acts as intermediary between prescribers and pharmacies. Tasks are central to coordination:

# Prescriber submits order to central repository
MedicationRequest:
  id: "order-central-001"
  status: "active"
  subject:
    reference: "Patient/patient-1"
  requester:
    reference: "Practitioner/dr-smith"

# Repository creates execution Task, unassigned
Task:
  id: "central-task-001"
  status: "requested"                 # Waiting for a pharmacy to accept
  code:
    coding:
      - system: "http://hl7.org/fhir/CodeSystem/task-code"
        code: "fulfill"
  focus:
    reference: "MedicationRequest/order-central-001"
  owner: ...                          # Assigned when a pharmacy accepts

# Pharmacy accepts
Task:
  id: "central-task-001"
  status: "accepted"
  owner:
    reference: "Organization/pharmacy-abc"

4.2. Direct Prescriber-to-Pharmacy

In simpler settings, the prescriber sends orders directly to a known pharmacy. Tasks may be simpler:

# Order sent directly to a specific pharmacy
MedicationRequest:
  id: "order-direct-001"
  status: "active"
  dispenseRequest:
    dispenser:
      reference: "Organization/pharmacy-abc"

# Pharmacy creates and immediately accepts the Task
Task:
  id: "direct-task-001"
  status: "accepted"
  code:
    coding:
      - system: "http://hl7.org/fhir/CodeSystem/task-code"
        code: "fulfill"
  focus:
    reference: "MedicationRequest/order-direct-001"
  owner:
    reference: "Organization/pharmacy-abc"

4.3. Hospital Setting

Hospital systems often have rich workflows with multiple departments involved. Sub-Tasks can track each department's contribution:

# Main coordination Task
Task:
  id: "hospital-task-main"
  status: "in-progress"
  code:
    coding:
      - system: "http://hl7.org/fhir/CodeSystem/task-code"
        code: "fulfill"
  focus:
    reference: "MedicationRequest/order-hospital-001"

# Sub-Task: pharmacy preparation
Task:
  id: "hospital-task-pharmacy"
  status: "completed"
  partOf:
    - reference: "Task/hospital-task-main"
  owner:
    reference: "Organization/hospital-pharmacy"
  businessStatus:
    text: "prepared"

# Sub-Task: nursing administration
Task:
  id: "hospital-task-nursing"
  status: "in-progress"
  partOf:
    - reference: "Task/hospital-task-main"
  owner:
    reference: "Organization/ward-3b"
  businessStatus:
    text: "scheduled"

Regardless of architecture, the fundamentals hold: orders carry authorization status, Tasks carry execution status, and only the placer modifies orders.