A Medication Request is an order or request for both supply of medication and instructions for administration of the medication to a patient. At its core, it represents the prescriber's intent for a medication to be supplied and/or administered to a patient.

Key Purpose

Core Components

Resource Structure

Version 1

{
  "identifier": "<uuid4>",  // Unique identifier for this medication request
  "status": "option", // active will be the default, other options are active | on-hold | ended | stopped | completed | cancelled | entered-in-error | draft | unknown
  "statusReason": "text" // Example discontinued reason
  "intent": "option", // order will be the default, other options are proposal|plan|order|original-order|reflex-order|filler-order|instance-order
  "priority": "option", // routine|urgent|asap|stat
  "doNotPerform": "boolean", // True if medication is NOT to be given
  "category": "option", // inpatient | outpatient | community | discharge
  "medication": { "system": "str", "code": "str", "display": "str" } // Medication requested, use SNOWMED CT
  "subject": "patient_id" // Patient Id
  "encounter": "encounter_id" // Encounter during which request was created
  "authoredOn": "dateTime",  // When request was initially authored
  "dosageInstruction": [
  {
    "text": "string", // Free text dosage instructions e.g. SIG
    "additionalInstruction": [
	    { // Supplemental instruction or warnings to the patient
			  "system": "str", "code": "str", "display": "str"
			} // <http://hl7.org/fhir/ValueSet/additional-instruction-codes> 
		], 
    "patientInstruction": "string", // Patient or consumer oriented instructions
    "timing": { // Maps to Prescription.frequency
      "repeat": {
        "frequency": "positiveInt", // Indicates the number of repetitions that should occur within a period. 
        "period": 1, // The duration to which the frequency applies. I.e. Event occurs frequency times per period
        "periodUnit": "option", // s | min | h | d | wk | mo | a - unit of time (UCUM)
        "boundsDuration": { // Number of days
          "value": "positiveInt",
          "unit": "option", // days
        }
      },
      "code": {
	      // C | BID | TID | QID | AM | PM | QD | QOD | +
			  "system": "str", "code": "str", "display": "str"
			} // <https://hl7.org/fhir/valueset-timing-abbreviation.html>
    },
    "asNeededBoolean": "bool", // True PRN prescriptions
    "asNeededFor": "text": "string" // Maps to Prescription.indicator for PRN
    "route": { // Maps to Prescription.route
			  "system": "str", "code": "str", "display": "str"
			} // <https://hl7.org/fhir/valueset-route-codes.html>
    },
    "doseAndRate": [
	    {
	      "type": "option" // Ordered | Calculated 
	      "doseRange": { // For titrated doses
	        "low": { "value": "number", "unit": "option" }, // start dosage
	        "high": { "value": "number", "unit": "option" }, // Target dosage
	      },
	      "doseQuantity": { "value": "number", "unit": "option" } // For regular doses
	    } // One of doseRange or doseQuantity should exisit at any point in time. 
    ], 
    "maxDosePerPeriod": { // Upper limit on medication per unit of time
      "numerator": { "value": "number", "unit": "option" }, // start dosage
      "denominator": { "value": "number", "unit": "option" }, // start dosage
    } // Maps to max_dosage and min_hours_between_doses
  }],
  "note": "string"
}

Implementation Example

Below is a sequence diagram showing a typical medication request workflow:

sequenceDiagram
    participant P as Doctor
    participant MR as MedicationRequest
    participant Ph as Pharmacy
    participant MA as MedicationAdministration

    P->>MR: Creates prescription
    Note over MR: Status: draft
    P->>MR: Signs prescription
    Note over MR: Status: active
    MR->>Ph: Sent for fulfillment
    Ph->>MR: Processes request
    Ph->>MA: Dispenses medication
    MA->>MR: Records administration
    Note over MR: Status: completed