FHIR Resources: The Building Blocks of Healthcare Data

~15 min read
FHIR Resources - Building blocks of healthcare data

The Reader's Dilemma

Dear Marilyn,I keep hearing about FHIR "resources" but I'm confused. There are over 150 of them! How do I know which ones to use? And how do they connect to each other? It feels like I need a PhD just to understand a patient record.

Marilyn's Reply

Don't be overwhelmed by the number. Think of FHIR resources like LEGO blocks. Yes, there are thousands of different LEGO pieces, but most creations use only a handful of common ones. In healthcare, about 80% of your work will involve just 10-15 core resources.

The Spark: Understanding Core FHIR Resources

Patient Resource

The Patient resource is the heart of FHIR. It represents the individual receiving care and contains demographics, identifiers, and contact information.

{
  "resourceType": "Patient",
  "id": "example-patient",
  "identifier": [{
    "system": "http://hospital.org/mrn",
    "value": "12345"
  }],
  "name": [{
    "use": "official",
    "family": "Smith",
    "given": ["John", "Michael"]
  }],
  "gender": "male",
  "birthDate": "1980-01-15",
  "address": [{
    "use": "home",
    "line": ["123 Main Street"],
    "city": "Boston",
    "state": "MA",
    "postalCode": "02101"
  }],
  "telecom": [{
    "system": "phone",
    "value": "555-123-4567",
    "use": "mobile"
  }]
}

Key Insight: A patient can have multiple identifiers (MRN, SSN, insurance ID), multiple names (maiden name, married name), and multiple addresses. FHIR handles this complexity elegantly with arrays.

Observation Resource

The Observation resource captures measurements, test results, and clinical findings. It's incredibly versatile—used for vital signs, lab results, social history, and more.

{
  "resourceType": "Observation",
  "id": "blood-pressure",
  "status": "final",
  "category": [{
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/observation-category",
      "code": "vital-signs",
      "display": "Vital Signs"
    }]
  }],
  "code": {
    "coding": [{
      "system": "http://loinc.org",
      "code": "85354-9",
      "display": "Blood pressure panel"
    }]
  },
  "subject": {
    "reference": "Patient/example-patient"
  },
  "effectiveDateTime": "2024-01-15T10:30:00Z",
  "component": [
    {
      "code": {
        "coding": [{
          "system": "http://loinc.org",
          "code": "8480-6",
          "display": "Systolic blood pressure"
        }]
      },
      "valueQuantity": {
        "value": 120,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    },
    {
      "code": {
        "coding": [{
          "system": "http://loinc.org",
          "code": "8462-4",
          "display": "Diastolic blood pressure"
        }]
      },
      "valueQuantity": {
        "value": 80,
        "unit": "mmHg",
        "system": "http://unitsofmeasure.org",
        "code": "mm[Hg]"
      }
    }
  ]
}

Key Insight: Notice the subject field with a reference to the Patient. This is how FHIR resources link together—through references that create a web of connected data.

MedicationRequest Resource

The MedicationRequest resource represents a prescription or order for medication. It captures what drug, how much, how often, and for how long.

{
  "resourceType": "MedicationRequest",
  "id": "prescription-001",
  "status": "active",
  "intent": "order",
  "medicationCodeableConcept": {
    "coding": [{
      "system": "http://www.nlm.nih.gov/research/umls/rxnorm",
      "code": "197361",
      "display": "Lisinopril 10 MG Oral Tablet"
    }]
  },
  "subject": {
    "reference": "Patient/example-patient"
  },
  "authoredOn": "2024-01-15",
  "requester": {
    "reference": "Practitioner/dr-jones"
  },
  "dosageInstruction": [{
    "text": "Take one tablet by mouth once daily",
    "timing": {
      "repeat": {
        "frequency": 1,
        "period": 1,
        "periodUnit": "d"
      }
    },
    "route": {
      "coding": [{
        "system": "http://snomed.info/sct",
        "code": "26643006",
        "display": "Oral route"
      }]
    },
    "doseAndRate": [{
      "doseQuantity": {
        "value": 1,
        "unit": "tablet"
      }
    }]
  }],
  "dispenseRequest": {
    "numberOfRepeatsAllowed": 3,
    "quantity": {
      "value": 30,
      "unit": "tablet"
    },
    "expectedSupplyDuration": {
      "value": 30,
      "unit": "days"
    }
  }
}

Encounter Resource

The Encounter resource represents an interaction between a patient and healthcare provider. It could be an office visit, hospital stay, or telehealth session.

{
  "resourceType": "Encounter",
  "id": "office-visit-001",
  "status": "finished",
  "class": {
    "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
    "code": "AMB",
    "display": "ambulatory"
  },
  "type": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "185349003",
      "display": "Encounter for check up"
    }]
  }],
  "subject": {
    "reference": "Patient/example-patient"
  },
  "participant": [{
    "individual": {
      "reference": "Practitioner/dr-jones"
    }
  }],
  "period": {
    "start": "2024-01-15T09:00:00Z",
    "end": "2024-01-15T09:30:00Z"
  },
  "reasonCode": [{
    "coding": [{
      "system": "http://snomed.info/sct",
      "code": "38341003",
      "display": "Hypertensive disorder"
    }]
  }]
}

How Resources Connect

FHIR resources form a graph of interconnected data. Here's how a typical patient visit connects:

PatientEncounter(subject reference)
EncounterObservation(encounter reference)
EncounterMedicationRequest(encounter reference)

This reference-based architecture allows you to query related data efficiently. Want all observations from a specific encounter? Just search by the encounter reference.

The Gauntlet: Test Your Knowledge

Quick Check

Which FHIR resource would you use to store a patient's blood pressure reading?

Quick Check

How do FHIR resources link to each other?

Quick Check

What coding system is commonly used for medication codes in FHIR?

Quick Check

What does the 'status' field in an Observation resource indicate?

Quick Check

Which resource represents a healthcare interaction like an office visit or hospital stay?