Curriculum
Module 6·~40 min

Medications

Medication, MedicationRequest, MedicationDispense, Immunization.

6.1

The medication resources, mapped

Five resources cover the medication lifecycle: Medication (the drug), MedicationRequest (the prescription), MedicationDispense (the fill), MedicationStatement (what the patient is taking), MedicationAdministration (a dose given).

Think of it as a pipeline:

text
Medication (the drug definition)
        |
MedicationRequest  --->  MedicationDispense  --->  MedicationAdministration
   (the order)             (pharmacy fill)            (a dose given)

US Core focuses primarily on MedicationRequest (Rx history) and MedicationDispense (added in 6+). MedicationStatement and MedicationAdministration are out of scope for current US Core but commonly used in inpatient extensions.

Inline vs. Reference

The drug itself can be carried two ways on a MedicationRequest:

  • medicationCodeableConcept — inline RxNorm coding (most common, simplest)
  • medicationReference — points to a separate Medication resource (used when you need to model formulation, ingredients, or batches)

US Core requires you to support both ways as a consumer.

6.2

MedicationRequest in detail

Required: status, intent, medication[x], subject, authoredOn, requester. Must Support: dosageInstruction, reportedBoolean (med history vs. active prescription).

status lifecycle: active | on-hold | cancelled | completed | entered-in-error | stopped | draft | unknown.

intent: proposal | plan | order | original-order | reflex-order | filler-order | instance-order | option.

reportedBoolean: true = this MedicationRequest was *reported* (e.g. by the patient at intake) rather than authored by a prescriber here.

dosageInstruction is a rich nested structure: text + timing + route + dose. The text field is the Sig the patient sees ("Take one tablet by mouth twice daily"); the structured fields let machines reason about it.

Example · Active outpatient prescription
json
{
  "resourceType": "MedicationRequest",
  "id": "rx-1",
  "meta": {
    "profile": [
      "http://hl7.org/fhir/us/core/StructureDefinition/us-core-medicationrequest"
    ]
  },
  "status": "active",
  "intent": "order",
  "medicationCodeableConcept": {
    "coding": [
      {
        "system": "http://www.nlm.nih.gov/research/umls/rxnorm",
        "code": "1049221",
        "display": "Acetaminophen 325 MG Oral Tablet"
      }
    ]
  },
  "subject": {
    "reference": "Patient/amy-shaw"
  },
  "authoredOn": "2024-09-01",
  "requester": {
    "reference": "Practitioner/practitioner-1"
  },
  "dosageInstruction": [
    {
      "text": "Take 1 tablet by mouth every 6 hours as needed for pain",
      "timing": {
        "repeat": {
          "frequency": 1,
          "period": 6,
          "periodUnit": "h"
        }
      },
      "route": {
        "coding": [
          {
            "system": "http://snomed.info/sct",
            "code": "26643006",
            "display": "Oral route"
          }
        ]
      },
      "doseAndRate": [
        {
          "doseQuantity": {
            "value": 1,
            "unit": "tablet"
          }
        }
      ]
    }
  ]
}
6.3

Immunization

Vaccinations have their own resource because they're administered events, not prescriptions. Required: status, vaccineCode (CVX), patient, occurrence[x].

vaccineCode is bound to CVX (CDC's vaccine code system, http://hl7.org/fhir/sid/cvx).

status: completed | entered-in-error | not-done. statusReason is required when status = not-done.

Must Support: primarySource (true = this org administered it; false = reported), lotNumber, performer, location, site (left/right deltoid), route, doseQuantity.

Checkpoint quiz

Answer all questions to check your understanding before moving on.

1. Which two ways can a MedicationRequest carry the drug itself?

2. What does `reportedBoolean: true` on a MedicationRequest mean?

3. What code system is used for Immunization.vaccineCode?