Observation Resource
Remember Bob Smith from our previous post? He just walked into Springfield Family Practice and met with Dr. Alice Doe. Now that we have our foundational resources in place - Patient, Practitioner, Organization, and Encounter - it’s time to capture what actually happens during Bob’s visit.
The first thing any healthcare provider does? They start collecting clinical information. Bob’s heart rate, blood pressure, lab results, even observations like “patient appears tired” - all of this gets captured using FHIR’s most versatile resource: the Observation.
Why Observation is FHIR’s Most Versatile Resource
Let me be direct about this: the Observation resource is probably the most versatile resource in FHIR. No questions asked.
Think about it - in healthcare, we measure everything:
- Vital signs (heart rate, blood pressure, temperature)
- Lab results (blood glucose, hemoglobin, cholesterol)
- Imaging findings (bone density, tumor measurements)
- Clinical assessments (pain scales, cognitive tests)
- Personal characteristics (eye color, height, weight)
- Social history (smoking status, family support)
All of these different types of information can be captured using the same Observation resource. The secret? You just change the code
field to specify what you’re measuring.
A Simple Example: Bob’s Heart Rate
Let’s start with something straightforward - Bob’s heart rate during his visit:
{
"resourceType": "Observation",
"id": "obs-vitals-hr-1",
"status": "final",
"category": [
{
"coding": [
{ "system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs" }
]
}
],
"code": {
"coding": [
{ "system": "http://loinc.org", "code": "8867-4", "display": "Heart rate" }
],
"text": "Heart rate"
},
"subject": { "reference": "Patient/bob-patient" },
"encounter": { "reference": "Encounter/enc-1" },
"effectiveDateTime": "2025-08-08T09:10:00-05:00",
"valueQuantity": {
"value": 72,
"unit": "/min",
"system": "http://unitsofmeasure.org",
"code": "/min"
}
}
Breaking Down the Heart Rate Observation
-
category: This tells us it’s a vital sign. Other categories include “laboratory”, “imaging”, “survey”, etc.
-
code: This is where the magic happens. We’re using LOINC (Logical Observation Identifiers Names and Codes) to specify that we’re measuring heart rate. LOINC is really good for these “question-type” terminologies.
-
subject and encounter: These link back to Bob and his specific visit. We always know which patient and which visit this observation belongs to.
-
effectiveDateTime: When exactly this measurement was taken.
-
valueQuantity: The actual result - 72 beats per minute. Notice how FHIR structures this with the value, unit, and even a standardized code for the unit.
The Power of Value[x]: Different Types for Different Data
Here’s where Observation gets really interesting. That valueQuantity
field? It’s actually part of something called value[x] - and that “x” means it can be many different types.
This is called polymorphism in FHIR. One field, multiple possible data types:
- valueQuantity - for measurable things (heart rate, weight, lab values)
- valueCodeableConcept - for coded answers (blood type, bacterial culture results)
- valueString - for text answers
- valueBoolean - for yes/no questions
- valueInteger - for whole numbers
- valueDateTime - for dates and times
Why does this matter? Because healthcare data is incredibly diverse. You can’t capture everything with just numbers.
A More Complex Example: Lab Results
Let’s look at something different - a bacterial culture result. This isn’t a number like heart rate. It’s a coded result:
{
"resourceType": "Observation",
"id": "obs-culture-1",
"status": "final",
"category": [
{
"coding": [
{ "system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory" }
]
}
],
"code": {
"coding": [
{ "system": "http://loinc.org", "code": "600-7", "display": "Bacteria identified in Blood by Culture" }
],
"text": "Blood culture"
},
"subject": { "reference": "Patient/bob-patient" },
"encounter": { "reference": "Encounter/enc-1" },
"effectiveDateTime": "2025-08-08T10:00:00-05:00",
"valueCodeableConcept": {
"coding": [
{ "system": "http://snomed.info/sct", "code": "3092008", "display": "Staphylococcus aureus" }
],
"text": "Staphylococcus aureus"
},
"method": {
"coding": [
{ "system": "http://snomed.info/sct", "code": "104177005", "display": "Blood culture for bacteria" }
]
}
}
Notice the differences:
- valueCodeableConcept instead of valueQuantity
- LOINC for the question (“what bacteria was found?”)
- SNOMED CT for the answer (“Staphylococcus aureus”)
This pattern is very common in healthcare: LOINC for questions, SNOMED CT for answers.
Multi-Component Observations: Blood Pressure
Sometimes one observation has multiple parts. Blood pressure is a perfect example - you have systolic AND diastolic readings:
{
"resourceType": "Observation",
"id": "obs-bp-1",
"status": "final",
"category": [
{
"coding": [
{ "system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs" }
]
}
],
"code": {
"coding": [
{ "system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel" }
]
},
"subject": { "reference": "Patient/bob-patient" },
"encounter": { "reference": "Encounter/enc-1" },
"effectiveDateTime": "2025-08-08T09:15:00-05:00",
"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]"
}
}
]
}
The component field lets you have multiple values within a single observation. Each component has its own code and value. Pretty neat, right?
Bob’s Lab Work: Hemoglobin Results
Now let’s look at Bob’s actual lab results from his visit. Dr. Alice ordered some blood work because Bob was feeling tired:
{
"resourceType": "Observation",
"id": "obs-hb-1",
"status": "final",
"category": [
{
"coding": [
{ "system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory" }
]
}
],
"code": {
"coding": [
{ "system": "http://loinc.org", "code": "718-7", "display": "Hemoglobin [Mass/volume] in Blood" }
],
"text": "Hemoglobin"
},
"subject": { "reference": "Patient/bob-patient" },
"encounter": { "reference": "Encounter/enc-1" },
"effectiveDateTime": "2025-08-08T10:00:00-05:00",
"valueQuantity": {
"value": 10.0,
"unit": "g/dL",
"system": "http://unitsofmeasure.org",
"code": "g/dL"
}
}
This hemoglobin result (10.0 g/dL) is actually low - normal ranges are typically 13.8-17.2 g/dL for men. This observation will become important evidence when Dr. Alice diagnoses Bob with anemia.
The Observation Ecosystem
Here’s something important to understand: Observations rarely exist in isolation. They’re part of a larger ecosystem:
- ServiceRequest: Dr. Alice orders lab work
- Observation: The lab results come back
- DiagnosticReport: The lab creates a report that includes multiple observations
- Condition: Dr. Alice uses the observation as evidence for a diagnosis
In Bob’s case, his low hemoglobin observation will be:
- Referenced by a DiagnosticReport (the CBC panel results)
- Used as evidence for a Condition resource (anemia diagnosis)
- The basis for treatment decisions
What Can’t Be an Observation?
With all this versatility, you might wonder - can everything be an observation? The answer is no, and it’s important to understand the boundaries.
Don’t use Observation for:
- Allergies - use AllergyIntolerance
- Medications - use MedicationStatement
- Family history - use FamilyMemberHistory
- Procedures - use Procedure
- Diagnoses - use Condition
The FHIR specification is clear: “Observation is intended for capturing measurements and subjective point-in-time assessments.” It’s not meant for ongoing states or complex clinical concepts that have their own specialized resources.
Key Observation Fields You Should Know
Every Observation has these essential elements:
- status: Is this preliminary, final, corrected, or cancelled?
- category: What type of observation is this? (vital-signs, laboratory, imaging, etc.)
- code: What exactly are you measuring? (uses standard terminologies like LOINC)
- subject: Who is this observation about? (usually references a Patient)
- encounter: When/where was this captured? (references an Encounter)
- effective[x]: When was this observation made or valid?
- value[x]: The actual result (can be many different data types)
The Terminology Dance: LOINC and SNOMED
You’ll notice that Observations use a lot of coded terminology. Here’s the typical pattern:
- LOINC codes for the
code
field (what you’re measuring) - SNOMED CT codes for
valueCodeableConcept
(the answer/result) - UCUM codes for units in
valueQuantity
This isn’t just bureaucracy - it’s what makes healthcare data interoperable. When systems use the same codes, they can understand each other’s data.
Why Observations Matter
Observations are the foundation of evidence-based medicine. Every clinical decision starts with data:
- Vital signs tell us if someone is stable
- Lab results reveal hidden conditions
- Imaging findings show us what we can’t see
- Assessment scores help us track progress
In Bob’s story, his heart rate observation shows he’s stable, but his hemoglobin observation reveals he has anemia. Without these observations, Dr. Alice couldn’t make informed decisions about his care.
What’s Next?
Now that we understand how FHIR captures clinical observations, we can start talking about what happens when those observations reveal problems. In our next post, we’ll explore how FHIR handles allergies and family history - two crucial pieces of information that influence every healthcare decision.
Remember, the Observation resource might seem simple, but it’s doing the heavy lifting for most of the clinical data in healthcare systems. Master this resource, and you’ll understand how the majority of healthcare information flows through FHIR.
Want to Explore More?
Check out the official FHIR Observation specification for detailed examples and advanced use cases. The specification includes examples for everything from simple vital signs to complex genomic observations.
The beauty of FHIR’s Observation resource is that once you understand the pattern, you can capture almost any clinical measurement or assessment. It’s truly the Swiss Army knife of healthcare data.