ObservationDefinition — Catalogue entry of an observation
The logical counterpart of SpecimenDefinition on the analyte side. Describes the catalogue entry of a laboratory or clinical measurement: LOINC code, result unit, reference ranges, analysis method, required analytic platform.
Purpose of the resource
For a lab test to be reproducible, its catalogue must carry the full set of business rules: LOINC code (or local), result unit (UCUM), reference ranges (which depend on age, sex and clinical context), analytic method (Hexokinase for glucose, GOD-PAP, ELISA, LC-MS…), analytic platform. ObservationDefinition is the FHIR carrier of that specification.
Where Observation is a real dated measurement on a patient,
ObservationDefinition is the catalogue template. ServiceRequest references
ObservationDefinition to order a test, and Observation cites
ObservationDefinition to signal which definition was applied.
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
url | uri | 0..1 | Canonical URL. |
identifier | Identifier[] | 0..* | Business identifier (catalogue number). |
version | string | 0..1 | Semantic version. |
status | code | 1..1 | draft, active, retired, unknown. |
permittedDataType | code[] | 0..* | Allowed types (Quantity, CodeableConcept, string, boolean, integer, Range, Ratio, SampledData, Period, dateTime). |
code | CodeableConcept | 1..1 | LOINC or local code. |
category | CodeableConcept[] | 0..* | Category (laboratory, vital-signs, imaging…). |
preferredReportName | string | 0..1 | Preferred report name. |
specimen | Reference(SpecimenDefinition)[] | 0..* | Required specimen. |
device | Reference(DeviceDefinition)[] | 0..* | Analytic platform. |
method | CodeableConcept | 0..1 | Analysis method. |
quantitativeDetails | BackboneElement | 0..1 | Quantitative details (unit, decimal precision). |
qualifiedValue | BackboneElement[] | 0..* | Reference ranges and thresholds. |
component | BackboneElement[] | 0..* | Sub-components (for panels, CBC, electrolyte panel). |
JSON example
Fasting glucose, LOINC 1558-6, Hexokinase method, adult normal interval 70-99 mg/dL, diabetes threshold ≥ 126 mg/dL:
{
"resourceType": "ObservationDefinition",
"id": "glucose-fasting",
"url": "https://example.lab.org/ObservationDefinition/glucose-fasting",
"identifier": [{ "system": "http://lab.example.org/catalog", "value": "GLU-F-001" }],
"version": "2.0",
"title": "Plasma fasting glucose",
"status": "active",
"experimental": false,
"publisher": "Acme Reference Lab",
"permittedDataType": ["Quantity"],
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "1558-6",
"display": "Fasting glucose [Mass/volume] in Serum or Plasma"
}]
},
"category": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "laboratory"
}]
}],
"preferredReportName": "Fasting glucose",
"specimen": [{ "reference": "SpecimenDefinition/serum-tube-gold" }],
"device": [{ "reference": "DeviceDefinition/chemistry-analyzer-x" }],
"method": {
"coding": [{
"system": "http://snomed.info/sct",
"code": "359789004",
"display": "Hexokinase method"
}]
},
"quantitativeDetails": {
"unit": {
"coding": [{
"system": "http://unitsofmeasure.org",
"code": "mg/dL"
}]
},
"decimalPrecision": 0
},
"qualifiedValue": [{
"context": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/referencerange-meaning",
"code": "normal"
}]
},
"appliesTo": [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/age-range",
"code": "adult"
}]
}],
"range": {
"low": { "value": 70, "unit": "mg/dL" },
"high": { "value": 99, "unit": "mg/dL" }
},
"condition": "Adult, fasting"
}, {
"context": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/referencerange-meaning",
"code": "high"
}]
},
"range": {
"low": { "value": 126, "unit": "mg/dL" }
},
"condition": "Adult, fasting — diabetes diagnostic threshold"
}]
} Typical use cases
- LOINC ordering catalogue: electronic lab order catalogue.
- Structured pre-analytics: linked to SpecimenDefinition to describe tube + analyte.
- Automatic interpretation: the EHR automatically applies H/L/N status from the intervals.
- Clinical studies: protocol mandating a specific method (Hexokinase vs GOD-PAP produce different results).
- Multi-lab reconciliation: align units and methods across labs in a network.
Common pitfalls
- Unit missing or not UCUM: "mg%" is not UCUM. Always use
mg/dLormmol/L. - Range without context: the adult interval does not apply to children. Always qualify
appliesTo. - Method forgotten: for analytes with high inter-method variability (TSH, troponin),
methodis critical. - ObservationDefinition / Observation confusion: ObservationDefinition is a reusable template, Observation is a dated measurement.
- Decimal precision missing: a glucose in mg/dL has no meaning at 4 decimals. Specify
decimalPrecision.
Related resources
- Observation — actual measurement.
- SpecimenDefinition — required specimen.
- ServiceRequest — test order.
- ActivityDefinition, PlanDefinition — multi-test protocol.
- DiagnosticReport — report bundling Observations.
See also: Observation — the actual measurement and SpecimenDefinition — required specimen.