Observance Solutions
Interoperability

FHIR Observation Integration: Labs, Vitals, and LOINC Coding

Observance Solutions Engineering7 min read

Observation is one of the most heavily used FHIR resources - it covers everything from a single blood pressure reading to a full lab panel - and its biggest integration challenge isn't the resource structure, it's LOINC coding consistency.

What Observation covers

The FHIR Observation resource represents a single measurement or finding - a lab result, a vital sign, an imaging finding's key value, or a device reading (relevant for remote patient monitoring integrations). It carries a code (ideally LOINC-coded) identifying what was measured, a value (quantity, coded value, or component values for panel-style results), a timestamp, and a status (final, preliminary, corrected, and others that matter for knowing whether a value should be trusted yet).

LOINC coding is the real integration challenge

The Observation resource's structure is fairly consistent across systems; what varies enormously is whether the `code` field is reliably populated with a correct, specific LOINC code, or a local/proprietary code, free text, or nothing at all. This directly determines whether your integration can reliably identify 'this is a hemoglobin A1c result' programmatically versus needing manual mapping or fragile text matching - budget real time for building and maintaining a code-mapping layer rather than assuming every source system's Observations arrive cleanly LOINC-coded.

Panel results: component structure

Multi-part results (a CBC with several individual values, a metabolic panel) are typically represented as a parent Observation with `component` entries for each individual measurement, rather than as separate top-level Observations - code that only reads the top-level `value` field will miss panel results entirely. Explicitly handle the `component` array as a first-class case in any Observation-parsing code, not an edge case.

Status matters as much as value

A `preliminary` or `corrected` status changes how a value should be treated and displayed - showing a preliminary lab value with the same confidence as a final one, or failing to update a display when a corrected result supersedes an earlier one, are both real and consequential integration bugs. Track status explicitly and design your data model to represent a result's full history (preliminary, then final, then possibly corrected) rather than overwriting silently.

FAQ

Quick answers

Because the resource's structure is consistent, but whether the code field is reliably populated with a correct, specific LOINC code (versus a local code, free text, or nothing) varies significantly by source system - this determines whether your integration can programmatically identify what was measured, or needs a manual mapping/normalization layer.

Have a project like this in mind?

Tell us what you're building. A senior healthcare technologist — not a salesperson — will get back to you within one business day.