This
page
is
part
of
the
FHIR
Specification
(v3.3.0:
(v3.5.0:
R4
Ballot
2).
#2).
The
current
version
which
supercedes
this
version
is
5.0.0
.
For
a
full
list
of
available
versions,
see
the
Directory
of
published
versions
.
Page
versions:
R5
R4B
R4
R3
R2
Orders
and
Observations
Work
Group
|
Maturity Level : 5 | Normative | Compartments : Device , Encounter , Patient , Practitioner , RelatedPerson |
Normative Candidate Note: This page is candidate normative content for R4 in the Observation Package . Once normative, it will lose it's Maturity Level, and breaking changes will no longer be made.
Measurements and simple assertions made about a patient, device or other subject.
This resource is an event resource from a FHIR workflow perspective - see Workflow .
Observations are a central element in healthcare, used to support diagnosis, monitor progress, determine baselines and patterns and even capture demographic characteristics. Most observations are simple name/value pair assertions with some metadata, but some observations group other observations together logically, or even are multi-component observations. Note that the DiagnosticReport resource provides a clinical or workflow context for a set of observations and the Observation resource is referenced by DiagnosticReport to represent laboratory, imaging, and other clinical and diagnostic data to form a complete report.
Uses for the Observation resource include:
* The boundaries between clinical findings and disorders remains a challenge in medical ontology. Refer the Boundaries section below and in Condition for general guidance. These boundaries can be clarified by profiling Observation for a particular use case.
The following core profiles for the Observation resource have been defined as well. If implementations use this Resource when expressing the profile-specific concepts as structured data, they SHALL conform to the following profiles:
| Profile | Description |
|---|---|
| Vital signs | The FHIR Vital Signs profile sets minimum expectations for the Observation Resource to record, search and fetch the vital signs (e.g. temperature, blood pressure, respiration rate, etc.) associated with a patient |
At
its
core,
Observation
allows
expressing
a
name-value
pair
or
structured
collection
of
name-value
pairs.
As
such,
it
can
support
conveying
any
type
of
information
desired.
However,
that
is
not
its
intent.
Observation
is
intended
for
capturing
measurements
and
subjective
point-in-time
assessments.
It
is
not
intended
to
be
used
for
those
specific
contexts
and
use
cases
already
covered
by
other
FHIR
resources.
For
example,
the
AllergyIntolerance
resource
represents
a
patient
allergies,
MedicationStatement
resource:
medications
taken
by
a
patient,
FamilyMemberHistory
resource:
a
patient's
family
history,
Procedure
resource:
information
about
a
procedure,
and
QuestionnaireResponse
resource:
a
set
of
answers
to
a
set
of
questions.
The
Observation
resource
should
not
be
used
to
record
clinical
diagnosis
about
a
patient
or
subject
that
are
typically
captured
in
the
Condition
resource
or
the
ClinicalImpression
resource.
The
Observation
resource
is
often
referenced
by
the
Condition
resource
to
provide
specific
subjective
and
objective
data
to
support
its
assertions.
There
will
however
be
situations
of
overlap.
For
example,
a
response
to
a
question
of
"have
you
ever
taken
illicit
drugs"
could
in
principle
be
represented
using
MedicationStatement,
but
most
systems
would
treat
such
an
assertion
as
an
Observation.
In
some
cases,
such
as
when
source
data
is
coming
from
an
HL7
v2
feed,
a
system
might
not
have
information
that
allows
it
to
distinguish
diagnosis,
allergy
and
other
"specialized"
types
of
observations
from
laboratory,
vital
sign
and
other
observation
types
intended
to
be
conveyed
with
this
resource.
In
those
circumstances,
such
specialized
observations
may
also
appear
using
this
resource.
Adhering
to
such
convention
is
an
appropriate
use
of
Observation.
If
implementers
are
uncertain
whether
a
proposed
use
of
Observation
is
appropriate,
they're
encouraged
to
consult
with
implementers
on
chat.fhir.org
implementer's
stream
The Media resource captures a specific type of observation whose value is audio, video or image data. This resource is used instead of Observation to represent such forms of information as it exposes the metadata relevant for interpreting the information. See Media's boundaries section to see how Media (and Observation) differs from ImagingStudy and DocumentReference .
In contrast to the Observation resource, the DiagnosticReport resource typically includes additional clinical context and some mix of atomic results, images, imaging reports, textual and coded interpretation, and formatted representations. Laboratory reports, pathology reports, and imaging reports should be represented using the DiagnosticReport resource. The Observation resource is referenced by the DiagnosticReport to provide the atomic results for a particular investigation. "Laboratories routinely have a variable that is summative across a series of discrete variables - these are usually called 'impressions' or 'interpretations'. Sometimes they are algorithmically specified and sometimes they have the imprimatur of pathologists and they are conveyed in Observation or DiagnosticReport instead of the Clinical Impression resource. The Observation resource should not be used to record clinical diagnosis about a patient or subject as discussed above.
This resource is referenced by AdverseEvent , CarePlan , ChargeItem , ClinicalImpression , Communication , CommunicationRequest , Condition , Contract , DeviceRequest , DeviceUseStatement , DiagnosticReport , FamilyMemberHistory , Goal , GuidanceResponse , ImagingStudy , Immunization , MedicationAdministration , MedicationRequest , MedicationStatement , itself, Procedure , QuestionnaireResponse , RequestGroup , RiskAssessment , Sequence , ServiceRequest and SupplyRequest
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
I N | DomainResource |
Measurements
and
simple
assertions
+ Rule: dataAbsentReason SHALL only be present if Observation.value[x] is not present + Rule: If Observation.code is the same as a Observation.component.code then the value element associated with the code SHALL NOT be present |
|
|
Σ | 0..* | Identifier |
Business
Identifier
for
observation
|
|
Σ | 0..* | Reference ( CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest ) |
Fulfills
plan,
proposal
or
order
|
|
Σ | 0..* | Reference ( MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy ) |
Part
of
referenced
event
|
|
?! Σ | 1..1 | code |
registered
|
preliminary
|
final
|
amended
+
ObservationStatus ( Required ) |
|
0..* | CodeableConcept |
Classification
of
type
of
observation
Observation Category Codes ( Preferred ) |
|
|
Σ | 1..1 | CodeableConcept |
Type
of
observation
(code
/
type)
LOINC Codes ( Example ) |
|
Σ | 0..1 | Reference ( Patient | Group | Device | Location ) |
Who
and/or
what
|
|
Σ TU |
|
Reference ( Any ) |
|
|
Σ | 0..1 |
Reference
(
Encounter
|
Healthcare event during which this observation is made |
|
Σ | 0..1 | Clinically relevant time/time-period for observation | |
|
dateTime | |||
|
Period | |||
|
Timing | |||
| instant | |||
|
Σ | 0..1 | instant | Date/Time this version was made available |
|
Σ | 0..* | Reference ( Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson ) |
Who
is
responsible
for
the
observation
|
|
Σ I | 0..1 | Actual result | |
|
Quantity | |||
|
CodeableConcept | |||
|
string | |||
|
boolean | |||
|
integer | |||
|
Range | |||
|
Ratio | |||
|
SampledData | |||
|
time | |||
|
dateTime | |||
|
Period | |||
|
I | 0..1 | CodeableConcept |
Why
the
result
is
missing
DataAbsentReason ( Extensible ) |
|
|
CodeableConcept |
High,
low,
normal,
etc.
Observation Interpretation Codes ( Extensible ) |
|
|
0..1 | string | Comments about the test result value | |
|
0..1 | CodeableConcept |
Observed
body
part
SNOMED CT Body Structures ( Example ) |
|
|
0..1 | CodeableConcept |
How
it
was
done
Observation Methods ( Example ) |
|
|
0..1 | Reference ( Specimen ) | Specimen used for this observation | |
|
0..1 |
Reference
(
Device
|
|
(Measurement) Device | |
|
I | 0..* | BackboneElement |
Provides
guide
for
interpretation
+ Rule: Must have at least a low or a high or text |
|
I | 0..1 | SimpleQuantity | Low Range, if relevant |
|
I | 0..1 | SimpleQuantity | High Range, if relevant |
|
0..1 | CodeableConcept |
Reference
range
qualifier
Observation Reference Range Meaning Codes ( |
|
|
0..* | CodeableConcept |
Reference
range
population
Observation Reference Range Applies To Codes ( Example ) |
|
|
0..1 | Range | Applicable age range, if relevant | |
|
0..1 | string | Text based reference range in an observation | |
|
Σ | 0..* | Reference ( Observation | QuestionnaireResponse | Sequence ) |
Related
resource
that
belongs
to
the
Observation
group
|
|
Σ | 0..* | Reference ( DocumentReference | ImagingStudy | Media | QuestionnaireResponse | Observation | Sequence ) |
Related
measurements
the
observation
is
made
from
|
|
Σ | 0..* | BackboneElement |
Component
results
|
|
Σ | 1..1 | CodeableConcept |
Type
of
component
observation
(code
/
type)
LOINC Codes ( Example ) |
|
Σ | 0..1 | Actual component result | |
|
Quantity | |||
|
CodeableConcept | |||
|
string | |||
|
boolean | |||
|
integer | |||
|
Range | |||
|
Ratio | |||
|
SampledData | |||
|
time | |||
|
dateTime | |||
|
Period | |||
|
I | 0..1 | CodeableConcept |
Why
the
component
result
is
missing
DataAbsentReason ( Extensible ) |
|
|
CodeableConcept |
High,
low,
normal,
etc.
Observation Interpretation Codes ( Extensible ) |
|
|
0..* | see referenceRange |
Provides
guide
for
interpretation
of
component
result
|
|
Documentation
for
this
format
|
||||
UML Diagram ( Legend )
XML Template
<Observation xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <identifier><!-- 0..* Identifier Business Identifier for observation --></identifier>
<|<basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|ImmunizationRecommendation| MedicationRequest|NutritionOrder|ServiceRequest) Fulfills plan, proposal or order --></basedOn> <partOf><!-- 0..* Reference(MedicationAdministration|MedicationDispense| MedicationStatement|Procedure|Immunization|ImagingStudy) Part of referenced event --></partOf> <status value="[code]"/><!-- 1..1 registered | preliminary | final | amended + --> <category><!-- 0..* CodeableConcept Classification of type of observation --></category> <code><!-- 1..1 CodeableConcept Type of observation (code / type) --></code><</subject> <</focus> <</context> <</effective[x]><subject><!-- 0..1 Reference(Patient|Group|Device|Location) Who and/or what the observation is about --></subject> <focus><!-- 0..* Reference(Any) What the observation is about, when it is not about the subject of record --></focus> <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></encounter> <effective[x]><!-- 0..1 dateTime|Period|Timing|instant Clinically relevant time/time-period for observation --></effective[x]> <issued value="[instant]"/><!-- 0..1 Date/Time this version was made available --> <performer><!-- 0..* Reference(Practitioner|PractitionerRole|Organization| CareTeam|Patient|RelatedPerson) Who is responsible for the observation --></performer> <value[x]><!--0..1 Quantity|CodeableConcept|string|boolean|integer|Range|Ratio| SampledData|time|dateTime|Period Actual result --></value[x]> <dataAbsentReason><!--
0..1 CodeableConcept Why the result is missing --></dataAbsentReason>
<</interpretation> <<interpretation><!-- 0..* CodeableConcept High, low, normal, etc. --></interpretation> <comment value="[string]"/><!-- 0..1 Comments about the test result value --> <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite> <method><!-- 0..1 CodeableConcept How it was done --></method> <specimen><!-- 0..1 Reference(Specimen) Specimen used for this observation --></specimen><</device><device><!-- 0..1 Reference(Device|DeviceMetric) (Measurement) Device --></device> <referenceRange> <!-- 0..* Provides guide for interpretation --> <low><!--0..1 Quantity(SimpleQuantity) Low Range, if relevant --></low> <high><!--
0..1 Quantity(SimpleQuantity) High Range, if relevant --></high> <type><!-- 0..1 CodeableConcept Reference range qualifier --></type> <appliesTo><!-- 0..* CodeableConcept Reference range population --></appliesTo> <age><!-- 0..1 Range Applicable age range, if relevant --></age> <text value="[string]"/><!-- 0..1 Text based reference range in an observation --> </referenceRange> <hasMember><!-- 0..* Reference(Observation|QuestionnaireResponse|Sequence) Related resource that belongs to the Observation group --></hasMember> <derivedFrom><!-- 0..* Reference(DocumentReference|ImagingStudy|Media| QuestionnaireResponse|Observation|Sequence) Related measurements the observation is made from --></derivedFrom> <component> <!-- 0..* Component results --> <code><!-- 1..1 CodeableConcept Type of component observation (code / type) --></code> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|boolean|integer|Range| Ratio|SampledData|time|dateTime|Period Actual component result --></value[x]> <dataAbsentReason><!--
0..1 CodeableConcept Why the component result is missing --></dataAbsentReason>
<</interpretation><interpretation><!-- 0..* CodeableConcept High, low, normal, etc. --></interpretation> <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result --></referenceRange> </component> </Observation>
JSON Template
{
"resourceType" : "Observation",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"identifier" : [{ Identifier }], // Business Identifier for observation
"|
"basedOn" : [{ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|
MedicationRequest|NutritionOrder|ServiceRequest) }], // Fulfills plan, proposal or order
"partOf" : [{ Reference(MedicationAdministration|MedicationDispense|
MedicationStatement|Procedure|Immunization|ImagingStudy) }], // Part of referenced event
"status" : "<code>", // R! registered | preliminary | final | amended +
"category" : [{ CodeableConcept }], // Classification of type of observation
"code" : { CodeableConcept }, // R! Type of observation (code / type)
"
"
"
"subject" : { Reference(Patient|Group|Device|Location) }, // Who and/or what the observation is about
"focus" : [{ Reference(Any) }], // What the observation is about, when it is not about the subject of record
"encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made
// effective[x]: Clinically relevant time/time-period for observation. One of these 4:
"effectiveDateTime" : "<dateTime>",
"effectivePeriod" : { Period },
"effectiveTiming" : { Timing },
"effectiveInstant" : "<instant>",
"issued" : "<instant>", // Date/Time this version was made available
"performer" : [{ Reference(Practitioner|PractitionerRole|Organization|
CareTeam|Patient|RelatedPerson) }], // Who is responsible for the observation
// value[x]: Actual result. One of these 11:
"valueQuantity" : { Quantity },
"valueCodeableConcept" : { CodeableConcept },
"valueString" : "<string>",
"valueBoolean" : <boolean>,
"valueInteger" : <integer>,
"valueRange" : { Range },
"valueRatio" : { Ratio },
"valueSampledData" : { SampledData },
"valueTime" : "<time>",
"valueDateTime" : "<dateTime>",
"valuePeriod" : { Period },
"dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing
"
"
"interpretation" : [{ CodeableConcept }], // High, low, normal, etc.
"comment" : "<string>", // Comments about the test result value
"bodySite" : { CodeableConcept }, // Observed body part
"method" : { CodeableConcept }, // How it was done
"specimen" : { Reference(Specimen) }, // Specimen used for this observation
"
"device" : { Reference(Device|DeviceMetric) }, // (Measurement) Device
"referenceRange" : [{ // Provides guide for interpretation
"low" : { Quantity(SimpleQuantity) }, // C? Low Range, if relevant
"high" : { Quantity(SimpleQuantity) }, // C? High Range, if relevant
"type" : { CodeableConcept }, // Reference range qualifier
"appliesTo" : [{ CodeableConcept }], // Reference range population
"age" : { Range }, // Applicable age range, if relevant
"text" : "<string>" // Text based reference range in an observation
}],
"hasMember" : [{ Reference(Observation|QuestionnaireResponse|Sequence) }], // Related resource that belongs to the Observation group
"derivedFrom" : [{ Reference(DocumentReference|ImagingStudy|Media|
QuestionnaireResponse|Observation|Sequence) }], // Related measurements the observation is made from
"component" : [{ // Component results
"code" : { CodeableConcept }, // R! Type of component observation (code / type)
// value[x]: Actual component result. One of these 11:
"valueQuantity" : { Quantity },
"valueCodeableConcept" : { CodeableConcept },
"valueString" : "<string>",
"valueBoolean" : <boolean>,
"valueInteger" : <integer>,
"valueRange" : { Range },
"valueRatio" : { Ratio },
"valueSampledData" : { SampledData },
"valueTime" : "<time>",
"valueDateTime" : "<dateTime>",
"valuePeriod" : { Period },
"dataAbsentReason" : { CodeableConcept }, // C? Why the component result is missing
"
"interpretation" : [{ CodeableConcept }], // High, low, normal, etc.
"referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result
}]
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .[ a fhir:Observation; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:Observation.identifier [ Identifier ], ... ; # 0..* Business Identifier for observation
fhir:|fhir:Observation.basedOn [ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest| NutritionOrder|ServiceRequest) ], ... ; # 0..* Fulfills plan, proposal or order fhir:Observation.partOf [ Reference(MedicationAdministration|MedicationDispense|MedicationStatement|Procedure| Immunization|ImagingStudy) ], ... ; # 0..* Part of referenced event fhir:Observation.status [ code ]; # 1..1 registered | preliminary | final | amended + fhir:Observation.category [ CodeableConcept ], ... ; # 0..* Classification of type of observation fhir:Observation.code [ CodeableConcept ]; # 1..1 Type of observation (code / type)fhir: fhir: fhir: # . One of these 3fhir:Observation.subject [ Reference(Patient|Group|Device|Location) ]; # 0..1 Who and/or what the observation is about fhir:Observation.focus [ Reference(Any) ], ... ; # 0..* What the observation is about, when it is not about the subject of record fhir:Observation.encounter [ Reference(Encounter) ]; # 0..1 Healthcare event during which this observation is made # Observation.effective[x] : 0..1 Clinically relevant time/time-period for observation. One of these 4 fhir:Observation.effectiveDateTime [ dateTime ] fhir:Observation.effectivePeriod [ Period ] fhir:Observation.effectiveTiming [ Timing ] fhir:Observation.effectiveInstant [ instant ] fhir:Observation.issued [ instant ]; # 0..1 Date/Time this version was made available fhir:Observation.performer [ Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|RelatedPerson) ], ... ; # 0..* Who is responsible for the observation # Observation.value[x] : 0..1 Actual result. One of these 11 fhir:Observation.valueQuantity [ Quantity ] fhir:Observation.valueCodeableConcept [ CodeableConcept ] fhir:Observation.valueString [ string ] fhir:Observation.valueBoolean [ boolean ] fhir:Observation.valueInteger [ integer ] fhir:Observation.valueRange [ Range ] fhir:Observation.valueRatio [ Ratio ] fhir:Observation.valueSampledData [ SampledData ] fhir:Observation.valueTime [ time ] fhir:Observation.valueDateTime [ dateTime ] fhir:Observation.valuePeriod [ Period ] fhir:Observation.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the result is missingfhir: fhir:fhir:Observation.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.comment [ string ]; # 0..1 Comments about the test result value fhir:Observation.bodySite [ CodeableConcept ]; # 0..1 Observed body part fhir:Observation.method [ CodeableConcept ]; # 0..1 How it was done fhir:Observation.specimen [ Reference(Specimen) ]; # 0..1 Specimen used for this observationfhir:fhir:Observation.device [ Reference(Device|DeviceMetric) ]; # 0..1 (Measurement) Device fhir:Observation.referenceRange [ # 0..* Provides guide for interpretation fhir:Observation.referenceRange.low [ Quantity(SimpleQuantity) ]; # 0..1 Low Range, if relevant fhir:Observation.referenceRange.high [ Quantity(SimpleQuantity) ]; # 0..1 High Range, if relevant fhir:Observation.referenceRange.type [ CodeableConcept ]; # 0..1 Reference range qualifier fhir:Observation.referenceRange.appliesTo [ CodeableConcept ], ... ; # 0..* Reference range population fhir:Observation.referenceRange.age [ Range ]; # 0..1 Applicable age range, if relevant fhir:Observation.referenceRange.text [ string ]; # 0..1 Text based reference range in an observation ], ...; fhir:Observation.hasMember [ Reference(Observation|QuestionnaireResponse|Sequence) ], ... ; # 0..* Related resource that belongs to the Observation group fhir:Observation.derivedFrom [ Reference(DocumentReference|ImagingStudy|Media|QuestionnaireResponse|Observation|Sequence) ], ... ; # 0..* Related measurements the observation is made from fhir:Observation.component [ # 0..* Component results fhir:Observation.component.code [ CodeableConcept ]; # 1..1 Type of component observation (code / type) # Observation.component.value[x] : 0..1 Actual component result. One of these 11 fhir:Observation.component.valueQuantity [ Quantity ] fhir:Observation.component.valueCodeableConcept [ CodeableConcept ] fhir:Observation.component.valueString [ string ] fhir:Observation.component.valueBoolean [ boolean ] fhir:Observation.component.valueInteger [ integer ] fhir:Observation.component.valueRange [ Range ] fhir:Observation.component.valueRatio [ Ratio ] fhir:Observation.component.valueSampledData [ SampledData ] fhir:Observation.component.valueTime [ time ] fhir:Observation.component.valueDateTime [ dateTime ] fhir:Observation.component.valuePeriod [ Period ] fhir:Observation.component.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the component result is missingfhir:fhir:Observation.component.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.component.referenceRange [ See Observation.referenceRange ], ... ; # 0..* Provides guide for interpretation of component result ], ...; ]
Changes since R3
| Observation | |
| Observation.basedOn |
|
| Observation.partOf |
|
| Observation.focus |
|
| Observation.encounter |
|
| Observation.effective[x] |
|
| Observation.performer |
|
| Observation.value[x] |
|
| Observation.dataAbsentReason |
|
|
|
|
| Observation.referenceRange.type |
|
| Observation.hasMember |
|
| Observation.derivedFrom |
|
| Observation.component.value[x] |
|
| Observation.component.dataAbsentReason |
|
| Observation.component.interpretation |
|
| Observation.context |
|
| Observation.related |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
See
R2
<-->
R3
<-->
R4
Conversion
Maps
(status
=
34
48
tests
that
all
of
which
14
fail
to
execute
ok.
All
tests
pass
.
34
fail
round-trip
testing
and
15
34
r3
resources
are
invalid
(58
(0
errors).
).
Note:
these
have
note
yet
been
updated
to
be
R3
to
R4
)
Structure
| Name | Flags | Card. | Type |
Description
&
Constraints
|
|---|---|---|---|---|
|
I N | DomainResource |
Measurements
and
simple
assertions
+ Rule: dataAbsentReason SHALL only be present if Observation.value[x] is not present + Rule: If Observation.code is the same as a Observation.component.code then the value element associated with the code SHALL NOT be present |
|
|
Σ | 0..* | Identifier |
Business
Identifier
for
observation
|
|
Σ | 0..* | Reference ( CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest ) |
Fulfills
plan,
proposal
or
order
|
|
Σ | 0..* | Reference ( MedicationAdministration | MedicationDispense | MedicationStatement | Procedure | Immunization | ImagingStudy ) |
Part
of
referenced
event
|
|
?! Σ | 1..1 | code |
registered
|
preliminary
|
final
|
amended
+
ObservationStatus ( Required ) |
|
0..* | CodeableConcept |
Classification
of
type
of
observation
Observation Category Codes ( Preferred ) |
|
|
Σ | 1..1 | CodeableConcept |
Type
of
observation
(code
/
type)
LOINC Codes ( Example ) |
|
Σ | 0..1 | Reference ( Patient | Group | Device | Location ) |
Who
and/or
what
|
|
Σ TU |
|
Reference ( Any ) |
|
|
Σ | 0..1 |
Reference
(
Encounter
|
Healthcare event during which this observation is made |
|
Σ | 0..1 | Clinically relevant time/time-period for observation | |
|
dateTime | |||
|
Period | |||
|
Timing | |||
| instant | |||
|
Σ | 0..1 | instant | Date/Time this version was made available |
|
Σ | 0..* | Reference ( Practitioner | PractitionerRole | Organization | CareTeam | Patient | RelatedPerson ) |
Who
is
responsible
for
the
observation
|
|
Σ I | 0..1 | Actual result | |
|
Quantity | |||
|
CodeableConcept | |||
|
string | |||
|
boolean | |||
|
integer | |||
|
Range | |||
|
Ratio | |||
|
SampledData | |||
|
time | |||
|
dateTime | |||
|
Period | |||
|
I | 0..1 | CodeableConcept |
Why
the
result
is
missing
DataAbsentReason ( Extensible ) |
|
|
CodeableConcept |
High,
low,
normal,
etc.
Observation Interpretation Codes ( Extensible ) |
|
|
0..1 | string | Comments about the test result value | |
|
0..1 | CodeableConcept |
Observed
body
part
SNOMED CT Body Structures ( Example ) |
|
|
0..1 | CodeableConcept |
How
it
was
done
Observation Methods ( Example ) |
|
|
0..1 | Reference ( Specimen ) | Specimen used for this observation | |
|
0..1 |
Reference
(
Device
|
|
(Measurement) Device | |
|
I | 0..* | BackboneElement |
Provides
guide
for
interpretation
+ Rule: Must have at least a low or a high or text |
|
I | 0..1 | SimpleQuantity | Low Range, if relevant |
|
I | 0..1 | SimpleQuantity | High Range, if relevant |
|
0..1 | CodeableConcept |
Reference
range
qualifier
Observation Reference Range Meaning Codes ( |
|
|
0..* | CodeableConcept |
Reference
range
population
Observation Reference Range Applies To Codes ( Example ) |
|
|
0..1 | Range | Applicable age range, if relevant | |
|
0..1 | string | Text based reference range in an observation | |
|
Σ | 0..* | Reference ( Observation | QuestionnaireResponse | Sequence ) |
Related
resource
that
belongs
to
the
Observation
group
|
|
Σ | 0..* | Reference ( DocumentReference | ImagingStudy | Media | QuestionnaireResponse | Observation | Sequence ) |
Related
measurements
the
observation
is
made
from
|
|
Σ | 0..* | BackboneElement |
Component
results
|
|
Σ | 1..1 | CodeableConcept |
Type
of
component
observation
(code
/
type)
LOINC Codes ( Example ) |
|
Σ | 0..1 | Actual component result | |
|
Quantity | |||
|
CodeableConcept | |||
|
string | |||
|
boolean | |||
|
integer | |||
|
Range | |||
|
Ratio | |||
|
SampledData | |||
|
time | |||
|
dateTime | |||
|
Period | |||
|
I | 0..1 | CodeableConcept |
Why
the
component
result
is
missing
DataAbsentReason ( Extensible ) |
|
|
CodeableConcept |
High,
low,
normal,
etc.
Observation Interpretation Codes ( Extensible ) |
|
|
0..* | see referenceRange |
Provides
guide
for
interpretation
of
component
result
|
|
Documentation
for
this
format
|
||||
XML Template
<Observation xmlns="http://hl7.org/fhir"><!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <identifier><!-- 0..* Identifier Business Identifier for observation --></identifier>
<|<basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|ImmunizationRecommendation| MedicationRequest|NutritionOrder|ServiceRequest) Fulfills plan, proposal or order --></basedOn> <partOf><!-- 0..* Reference(MedicationAdministration|MedicationDispense| MedicationStatement|Procedure|Immunization|ImagingStudy) Part of referenced event --></partOf> <status value="[code]"/><!-- 1..1 registered | preliminary | final | amended + --> <category><!-- 0..* CodeableConcept Classification of type of observation --></category> <code><!-- 1..1 CodeableConcept Type of observation (code / type) --></code><</subject> <</focus> <</context> <</effective[x]><subject><!-- 0..1 Reference(Patient|Group|Device|Location) Who and/or what the observation is about --></subject> <focus><!-- 0..* Reference(Any) What the observation is about, when it is not about the subject of record --></focus> <encounter><!-- 0..1 Reference(Encounter) Healthcare event during which this observation is made --></encounter> <effective[x]><!-- 0..1 dateTime|Period|Timing|instant Clinically relevant time/time-period for observation --></effective[x]> <issued value="[instant]"/><!-- 0..1 Date/Time this version was made available --> <performer><!-- 0..* Reference(Practitioner|PractitionerRole|Organization| CareTeam|Patient|RelatedPerson) Who is responsible for the observation --></performer> <value[x]><!--0..1 Quantity|CodeableConcept|string|boolean|integer|Range|Ratio| SampledData|time|dateTime|Period Actual result --></value[x]> <dataAbsentReason><!--
0..1 CodeableConcept Why the result is missing --></dataAbsentReason>
<</interpretation> <<interpretation><!-- 0..* CodeableConcept High, low, normal, etc. --></interpretation> <comment value="[string]"/><!-- 0..1 Comments about the test result value --> <bodySite><!-- 0..1 CodeableConcept Observed body part --></bodySite> <method><!-- 0..1 CodeableConcept How it was done --></method> <specimen><!-- 0..1 Reference(Specimen) Specimen used for this observation --></specimen><</device><device><!-- 0..1 Reference(Device|DeviceMetric) (Measurement) Device --></device> <referenceRange> <!-- 0..* Provides guide for interpretation --> <low><!--0..1 Quantity(SimpleQuantity) Low Range, if relevant --></low> <high><!--
0..1 Quantity(SimpleQuantity) High Range, if relevant --></high> <type><!-- 0..1 CodeableConcept Reference range qualifier --></type> <appliesTo><!-- 0..* CodeableConcept Reference range population --></appliesTo> <age><!-- 0..1 Range Applicable age range, if relevant --></age> <text value="[string]"/><!-- 0..1 Text based reference range in an observation --> </referenceRange> <hasMember><!-- 0..* Reference(Observation|QuestionnaireResponse|Sequence) Related resource that belongs to the Observation group --></hasMember> <derivedFrom><!-- 0..* Reference(DocumentReference|ImagingStudy|Media| QuestionnaireResponse|Observation|Sequence) Related measurements the observation is made from --></derivedFrom> <component> <!-- 0..* Component results --> <code><!-- 1..1 CodeableConcept Type of component observation (code / type) --></code> <value[x]><!-- 0..1 Quantity|CodeableConcept|string|boolean|integer|Range| Ratio|SampledData|time|dateTime|Period Actual component result --></value[x]> <dataAbsentReason><!--
0..1 CodeableConcept Why the component result is missing --></dataAbsentReason>
<</interpretation><interpretation><!-- 0..* CodeableConcept High, low, normal, etc. --></interpretation> <referenceRange><!-- 0..* Content as for Observation.referenceRange Provides guide for interpretation of component result --></referenceRange> </component> </Observation>
JSON Template
{
"resourceType" : "Observation",
// from Resource: id, meta, implicitRules, and language
// from DomainResource: text, contained, extension, and modifierExtension
"identifier" : [{ Identifier }], // Business Identifier for observation
"|
"basedOn" : [{ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|
MedicationRequest|NutritionOrder|ServiceRequest) }], // Fulfills plan, proposal or order
"partOf" : [{ Reference(MedicationAdministration|MedicationDispense|
MedicationStatement|Procedure|Immunization|ImagingStudy) }], // Part of referenced event
"status" : "<code>", // R! registered | preliminary | final | amended +
"category" : [{ CodeableConcept }], // Classification of type of observation
"code" : { CodeableConcept }, // R! Type of observation (code / type)
"
"
"
"subject" : { Reference(Patient|Group|Device|Location) }, // Who and/or what the observation is about
"focus" : [{ Reference(Any) }], // What the observation is about, when it is not about the subject of record
"encounter" : { Reference(Encounter) }, // Healthcare event during which this observation is made
// effective[x]: Clinically relevant time/time-period for observation. One of these 4:
"effectiveDateTime" : "<dateTime>",
"effectivePeriod" : { Period },
"effectiveTiming" : { Timing },
"effectiveInstant" : "<instant>",
"issued" : "<instant>", // Date/Time this version was made available
"performer" : [{ Reference(Practitioner|PractitionerRole|Organization|
CareTeam|Patient|RelatedPerson) }], // Who is responsible for the observation
// value[x]: Actual result. One of these 11:
"valueQuantity" : { Quantity },
"valueCodeableConcept" : { CodeableConcept },
"valueString" : "<string>",
"valueBoolean" : <boolean>,
"valueInteger" : <integer>,
"valueRange" : { Range },
"valueRatio" : { Ratio },
"valueSampledData" : { SampledData },
"valueTime" : "<time>",
"valueDateTime" : "<dateTime>",
"valuePeriod" : { Period },
"dataAbsentReason" : { CodeableConcept }, // C? Why the result is missing
"
"
"interpretation" : [{ CodeableConcept }], // High, low, normal, etc.
"comment" : "<string>", // Comments about the test result value
"bodySite" : { CodeableConcept }, // Observed body part
"method" : { CodeableConcept }, // How it was done
"specimen" : { Reference(Specimen) }, // Specimen used for this observation
"
"device" : { Reference(Device|DeviceMetric) }, // (Measurement) Device
"referenceRange" : [{ // Provides guide for interpretation
"low" : { Quantity(SimpleQuantity) }, // C? Low Range, if relevant
"high" : { Quantity(SimpleQuantity) }, // C? High Range, if relevant
"type" : { CodeableConcept }, // Reference range qualifier
"appliesTo" : [{ CodeableConcept }], // Reference range population
"age" : { Range }, // Applicable age range, if relevant
"text" : "<string>" // Text based reference range in an observation
}],
"hasMember" : [{ Reference(Observation|QuestionnaireResponse|Sequence) }], // Related resource that belongs to the Observation group
"derivedFrom" : [{ Reference(DocumentReference|ImagingStudy|Media|
QuestionnaireResponse|Observation|Sequence) }], // Related measurements the observation is made from
"component" : [{ // Component results
"code" : { CodeableConcept }, // R! Type of component observation (code / type)
// value[x]: Actual component result. One of these 11:
"valueQuantity" : { Quantity },
"valueCodeableConcept" : { CodeableConcept },
"valueString" : "<string>",
"valueBoolean" : <boolean>,
"valueInteger" : <integer>,
"valueRange" : { Range },
"valueRatio" : { Ratio },
"valueSampledData" : { SampledData },
"valueTime" : "<time>",
"valueDateTime" : "<dateTime>",
"valuePeriod" : { Period },
"dataAbsentReason" : { CodeableConcept }, // C? Why the component result is missing
"
"interpretation" : [{ CodeableConcept }], // High, low, normal, etc.
"referenceRange" : [{ Content as for Observation.referenceRange }] // Provides guide for interpretation of component result
}]
}
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> .[ a fhir:Observation; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:Observation.identifier [ Identifier ], ... ; # 0..* Business Identifier for observation
fhir:|fhir:Observation.basedOn [ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest| NutritionOrder|ServiceRequest) ], ... ; # 0..* Fulfills plan, proposal or order fhir:Observation.partOf [ Reference(MedicationAdministration|MedicationDispense|MedicationStatement|Procedure| Immunization|ImagingStudy) ], ... ; # 0..* Part of referenced event fhir:Observation.status [ code ]; # 1..1 registered | preliminary | final | amended + fhir:Observation.category [ CodeableConcept ], ... ; # 0..* Classification of type of observation fhir:Observation.code [ CodeableConcept ]; # 1..1 Type of observation (code / type)fhir: fhir: fhir: # . One of these 3fhir:Observation.subject [ Reference(Patient|Group|Device|Location) ]; # 0..1 Who and/or what the observation is about fhir:Observation.focus [ Reference(Any) ], ... ; # 0..* What the observation is about, when it is not about the subject of record fhir:Observation.encounter [ Reference(Encounter) ]; # 0..1 Healthcare event during which this observation is made # Observation.effective[x] : 0..1 Clinically relevant time/time-period for observation. One of these 4 fhir:Observation.effectiveDateTime [ dateTime ] fhir:Observation.effectivePeriod [ Period ] fhir:Observation.effectiveTiming [ Timing ] fhir:Observation.effectiveInstant [ instant ] fhir:Observation.issued [ instant ]; # 0..1 Date/Time this version was made available fhir:Observation.performer [ Reference(Practitioner|PractitionerRole|Organization|CareTeam|Patient|RelatedPerson) ], ... ; # 0..* Who is responsible for the observation # Observation.value[x] : 0..1 Actual result. One of these 11 fhir:Observation.valueQuantity [ Quantity ] fhir:Observation.valueCodeableConcept [ CodeableConcept ] fhir:Observation.valueString [ string ] fhir:Observation.valueBoolean [ boolean ] fhir:Observation.valueInteger [ integer ] fhir:Observation.valueRange [ Range ] fhir:Observation.valueRatio [ Ratio ] fhir:Observation.valueSampledData [ SampledData ] fhir:Observation.valueTime [ time ] fhir:Observation.valueDateTime [ dateTime ] fhir:Observation.valuePeriod [ Period ] fhir:Observation.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the result is missingfhir: fhir:fhir:Observation.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.comment [ string ]; # 0..1 Comments about the test result value fhir:Observation.bodySite [ CodeableConcept ]; # 0..1 Observed body part fhir:Observation.method [ CodeableConcept ]; # 0..1 How it was done fhir:Observation.specimen [ Reference(Specimen) ]; # 0..1 Specimen used for this observationfhir:fhir:Observation.device [ Reference(Device|DeviceMetric) ]; # 0..1 (Measurement) Device fhir:Observation.referenceRange [ # 0..* Provides guide for interpretation fhir:Observation.referenceRange.low [ Quantity(SimpleQuantity) ]; # 0..1 Low Range, if relevant fhir:Observation.referenceRange.high [ Quantity(SimpleQuantity) ]; # 0..1 High Range, if relevant fhir:Observation.referenceRange.type [ CodeableConcept ]; # 0..1 Reference range qualifier fhir:Observation.referenceRange.appliesTo [ CodeableConcept ], ... ; # 0..* Reference range population fhir:Observation.referenceRange.age [ Range ]; # 0..1 Applicable age range, if relevant fhir:Observation.referenceRange.text [ string ]; # 0..1 Text based reference range in an observation ], ...; fhir:Observation.hasMember [ Reference(Observation|QuestionnaireResponse|Sequence) ], ... ; # 0..* Related resource that belongs to the Observation group fhir:Observation.derivedFrom [ Reference(DocumentReference|ImagingStudy|Media|QuestionnaireResponse|Observation|Sequence) ], ... ; # 0..* Related measurements the observation is made from fhir:Observation.component [ # 0..* Component results fhir:Observation.component.code [ CodeableConcept ]; # 1..1 Type of component observation (code / type) # Observation.component.value[x] : 0..1 Actual component result. One of these 11 fhir:Observation.component.valueQuantity [ Quantity ] fhir:Observation.component.valueCodeableConcept [ CodeableConcept ] fhir:Observation.component.valueString [ string ] fhir:Observation.component.valueBoolean [ boolean ] fhir:Observation.component.valueInteger [ integer ] fhir:Observation.component.valueRange [ Range ] fhir:Observation.component.valueRatio [ Ratio ] fhir:Observation.component.valueSampledData [ SampledData ] fhir:Observation.component.valueTime [ time ] fhir:Observation.component.valueDateTime [ dateTime ] fhir:Observation.component.valuePeriod [ Period ] fhir:Observation.component.dataAbsentReason [ CodeableConcept ]; # 0..1 Why the component result is missingfhir:fhir:Observation.component.interpretation [ CodeableConcept ], ... ; # 0..* High, low, normal, etc. fhir:Observation.component.referenceRange [ See Observation.referenceRange ], ... ; # 0..* Provides guide for interpretation of component result ], ...; ]
Changes
since
DSTU2
Release
3
| Observation | |
| Observation.basedOn |
|
| Observation.partOf |
|
| Observation.focus |
|
| Observation.encounter |
|
| Observation.effective[x] |
|
| Observation.performer |
|
| Observation.value[x] |
|
| Observation.dataAbsentReason |
|
|
|
|
| Observation.referenceRange.type |
|
| Observation.hasMember |
|
| Observation.derivedFrom |
|
| Observation.component.value[x] |
|
| Observation.component.dataAbsentReason |
|
| Observation.component.interpretation |
|
| Observation.context |
|
| Observation.related |
|
See the Full Difference for further information
This analysis is available as XML or JSON .
See
R2
<-->
R3
<-->
R4
Conversion
Maps
(status
=
34
48
tests
that
all
of
which
14
fail
to
execute
ok.
All
tests
pass
.
34
fail
round-trip
testing
and
15
34
r3
resources
are
invalid
(58
(0
errors).
).
Note:
these
have
note
yet
been
updated
to
be
R3
to
R4
)
Alternate
See
the
Profiles
&
Extensions
and
the
alternate
definitions:
Master
Definition
XML
+
JSON
,
XML
Schema
/
Schematron
+
JSON
Schema
,
ShEx
(for
Turtle
)
+
see
the
extensions
&
the
dependency
analysis
| Path | Definition | Type | Reference |
|---|---|---|---|
| Observation.status | Codes providing the status of an observation. | Required | ObservationStatus |
| Observation.category | Codes for high level observation categories. | Preferred |
|
|
Observation.code
Observation.component.code |
Codes identifying names of simple observations. | Example |
|
|
Observation.dataAbsentReason
Observation.component.dataAbsentReason |
Codes specifying why the result (`Observation.value[x]`) is missing. | Extensible | DataAbsentReason |
|
Observation.interpretation
Observation.component.interpretation |
Codes identifying interpretations of observations. | Extensible |
|
| Observation.bodySite | Codes describing anatomical locations. May include laterality. | Example |
|
| Observation.method | Methods for simple observations. | Example |
|
| Observation.referenceRange.type | Code for the meaning of a reference range. |
|
|
| Observation.referenceRange.appliesTo | Codes identifying the population the reference range applies to. | Example |
|
| id | Level | Location | Description | Expression |
|
obs-3
|
Rule | Observation.referenceRange |
Must
have
at
least
a
low
or
a
high
or
text
|
|
|
obs-6
|
Rule | (base) |
dataAbsentReason
SHALL
only
be
present
if
Observation.value[x]
is
not
present
|
|
|
obs-7
|
Rule | (base) |
If
Observation.code
is
the
same
as
a
Observation.component.code
then
the
value
element
associated
with
the
code
SHALL
NOT
be
present
|
|
At
its
simplest,
a
resource
instances
instance
can
consist
of
only
a
code
and
a
value,
and
status
flag.
The
relevance
of
other
properties
will
vary
based
on
the
type
of
observation.
Profiles
are
created
to
provide
guidance
on
capturing
certain
types
of
observations
for
a
given
use
case.
The
Observation
resource
focuses
on
the
level
of
detail
captured
by
most
systems.
However,
for
a
given
use
case
there
may
be
additional
constraints
and
additional
information
relevant
in
certain
circumstances.
As
with
other
resources,
extensions
can
be
used
to
introduce
this
additional
complexity.
Typically,
an
observation
is
made
about
the
subject
-
a
patient,
or
group
of
patients,
location,
or
device
-
and
the
distinction
between
the
subject
and
what
is
directly
measured
for
an
observation
is
specified
in
the
observation
code
itself
(
e.g.,
"Blood
Glucose")
and
does
not
need
to
be
represented
separately.
However,
three
attributes
may
be
used
for
representing
the
focus
of
the
observation
if
it
is
not
the
subject
itself.
The
specimen
and
bodySite
elements
are
used
to
represent
measurements
taken
on
subject
samples
or
anatomic
and
morphological
locations,
and
focus
represents
specific
aspect
of
the
subject
that
are
the
point
of
attention
such
as
another
observation
or
a
device
implanted
in
a
patient.
Many
observations
have
important
relationships
to
other
observations
and
need
to
be
grouped
together.
These
structures
have
been
defined
to
do
this:
DiagnosticReport
and
DiagnosticReport.result
,
Observation
and
the
elements:
Observation.component
,
Observation.hasMember
and
Observation.derivedFrom
.
The
sections
below
provides
guidance
around
which
structure
to
use.
Because
the
idea
of
what
to
group
together
is
often
highly
contextual
and
based
upon
the
end
user's
point
of
view,
the
choice
of
which
structure
to
use
will
be
driven
by
jurisdiction,
organizational
practice
and
context.
Profiling
will
normally
be
necessary
for
implementation.
DiagnosticReport
relates
directly
to
an
order
(ServiceRequest).
The
DiagnosticReport.code
names
the
panel
and
serves
as
the
grouping
element,
which
is
traditionally
referred
to
as
a
"panel"
or
"battery"
by
laboratories.
The
DiagnosticReport.result
element
references
the
individual
observations.
Several
examples
demonstrate
observation
grouping
using
DiagnosticReport
as
the
grouping
structure.
Observation.component
is
used
for
any
supporting
result
that
cannot
reasonably
be
interpreted
and
used
outside
the
scope
of
the
Observation
it
is
a
component
of.
Component
observations
may
make
up
the
separate
and
individual
parts
of
the
observation
or
may
provide
qualifying
information
to
Observation.code
and
may
only
be
able
to
be
understood
in
relation
to
the
Observation.code
(for
example,
see
the
$stats
operation
).
Therefore
all
code-value
and
component.code-component.value
pairs
need
to
be
taken
into
account
to
correctly
understand
the
meaning
of
the
observation.
Components
should
only
be
used
when
there
is
only
one
method,
one
observation,
one
performer,
one
device,
and
one
time.
Some
use
cases
for
using
this
structure
include:
On the other hand, any observations that are clinically relevant outside the context of being a component of another observation should be represented by separate Observation resources. For example a Body Mass Index (BMI) Observation should not contain components for height and weight because they are clinically relevant observations on their own and should be represented by separate Observation resources. See the section below on how to relate independent Observations.
Observation.hasMember
and
Observation.derivedFrom
and
the
core
extensions:
Observation-sequel-to
Observation-sequelTo
and
Observation-replaces
are
used
for
any
supporting
result
that
can
be
interpreted
and
used
on
its
own
and
has
one
or
more
different
values
for
method,
observation,
performer,
device,
time,
and/or
error
conditions.
Two
common
use
cases
for
using
this
structure
are:
Observation.code
represents
the
"panel"
code,
typically
Observation.value[x]
is
not
present,
and
the
set
of
member
Observations
are
listed
in
Observation.hasMember
.
This
structure
permits
nested
grouping
when
used
with
DiagnosticReport
(e.g.
complex
micro
isolate
and
sensitivities
report
).
Observation.code
and
Observation.value[x]
are
present,
and
the
linked
observations
are
listed
in
Observation.derivedFrom
.
An
example
of
this
would
be
a
Body
Mass
Index
(BMI)
Observation
where
the
height
and
weight
measurements
are
referenced.
When
a
result
value
is
a
represented
as
a
predefined
concept
using
a
code,
valueCodeableConcept
is
used.
This
element
is
bound
to
a
value
set
comprised
of
a
standard
nomenclature
such
as
SNOMED
CT
or
a
source
system
("local")
coded
result
values.
Results may be coded in multiple value sets based on different code systems and these may be mapped using the ConceptMap resource and/or given as translations directly in the element as shown in the example below.
For
example
the
LOINC
43304-5
Chlamydia
trachomatis
rRNA
[Presence]
in
Unspecified
specimen
by
Probe
and
target
amplification
method
is
typically
associated
with
coded
presence/absence
concepts.
Using
the
coded
value
for
'negative'
with
a
standard
code
translation,
valueCodeableConcept
would
be:
"valueCodeableConcept": {
"coding": [
{
"system": "http://snomed.info/sct",
"code": "260385009",
"display": "Negative"
}, {
"system": "https://acme.lab/resultcodes",
"code": "NEG",
"display": "Negative"
}
],
"text": "Negative for Chlamydia Trachomatis rRNA"
}
When
the
data
element
is
usually
coded
or
the
type
associated
with
the
code
element
defines
a
coded
value,
use
valueCodeableConcept
even
if
there
is
no
appropriate
code
and
only
free
text
is
available.
For
example
using
text
only,
the
valueCodeableConcept
element
would
be:
"valueCodeableConcept": {
"text": "uncoded free text result"
}
When
a
coded
answer
list
includes
a
concept
code
for
"other"
and
there
is
a
free
text
description
of
the
concept,
the
valueCodeableConcept.text
element
should
be
used
to
capture
the
full
meaning
of
the
source.
In
the
example
below,
the
answer
code
"Other"
is
provided
in
the
valueCodeableConcept
element
and
the
text
value
supplied
value
in
the
CodeableConcept.text
element.
{
"resourceType": "Observation",
... snip ...
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "74076-1",
"display": "Medication or substance involved"
}
]
},
.. snip ...
"valueCodeableConcept": {
"coding": [
{
"system": "http://loinc.org",
"code": " LA20343-2",
"display": "Other substance: PLEASE SPECIFY"
}
],
"text": "Other: Blue pills I found under my couch"
}
.. snip ...
}
A
recurring
issue
for
many
observation
events,
regardless
of
the
particular
pattern,
is
determining
how
to
populate
observation.code
and
observation.value.
While
this
is
typically
straight-forward
for
laboratory
observations,
it
can
get
blurry
for
other
types
of
observations,
such
as
findings
and
disorders,
family
history
observations,
etc.
This
discussion
focuses
on
the
way
in
which
the
coded
representation
of
such
statements
is
expressed
using
the
Observation.code
and
Observation.value
elements.
There are two distinct facets that are central to a FHIR Observations:
Several
different
ways
of
representing
the
same
information
exist
using
different
combinations
of
the
Observation.code
and
Observation.value
.
Unconstrained
use
of
the
alternatives
presents
a
major
challenge
for
computation
of
semantic
equivalence
and
for
safe
interpretation
of
observations
originating
from
different
applications
and
users.
The
following
four
patterns
could
reasonably
represent
the
same
case.
Considering
that
the
Observation
resource
needs
to
support
many
use
cases,
the
appropriate
place
to
define
the
specific
pattern
is
expected
to
be
done
through
profiles
and
implementation
guides
as
specified
by
the
jurisdictions
and/or
organizations
implementing
FHIR:
Observation.code
represents
the
nature
of
the
observation
and
the
Observation.value
a
code
represents
the
non-numeric
result
value.
These
are
two
distinct
facets
that
are
central
to
a
FHIR
Observations.
For
example:
Observation.code
is
nearly
identical
to
1)
above,
but
the
level
of
granularity
is
shifted
from
the
value
to
code.
For
example:
Observation.code
is
also
expressed
in
a
way
that
does
not
specify
the
observation
action
but
indicates
a
statement
about
findings
reduced
to
a
single
name
(or
term),
as
in
the
above
item.
In
this
example,
the
Observation.value
is
present
and
"qualifies"
the
finding
typically
confirming
or
refuting
it.
For
example:
Observation.code
is
expressed
in
a
way
that
does
not
specify
the
observation
action
but
indicates
a
statement
about
findings
reduced
to
a
single
name
(or
term).
In
this
particular
example
in
that
context,
the
Observation.value
is
omitted.
For
example:
concept
code.
concept
code
is
used,
the
expression
SHOULD
represent
a
363787002
(Observable
entity(Observable
entity))
or
386053000
(Evaluation
procedure(evaluation
procedure))
.
(
The
code
is
'ASSERTION'
and
the
value
is
a
SNOMED
CT
concept
or
expression
)
The following list provides guidance on using codes or other observations to provide addition context that may alter how an observation is interpreted.:
If possible, use the most specific code you can
e.g.: Observation.code = 49134-0 Glucose [Mass/?volume] in Blood 2 hours post dose glucose
Alternatively, use code translations in Observation.code.
e.g.: Observation.code = coding-1: 20564-1 Oxygen saturation in Blood, coding-2: 59408-5 Oxygen saturation in Arterial blood by Pulse oximetry
Another alternative is to use the precondition extension .
e.g.:
Observation.code = 20564-1 Oxygen saturation in Blood, Observation.value: 98%
observation-precondition extension: Observation.code: 19995-0 Oxygen/Inspired gas Respiratory system by O2 Analyzer on ventilator Observation.value: 100%
value[x]
because
most
observations
result
values
are
never
truly
Boolean
due
to
exceptional
values
such
as
"unknown",
therefore
they
should
use
the
CodeableConcept
data
type
instead
and
select
codes
from
(these
"yes/no"
concepts
can
be
mapped
to
the
display
name
"true/false"
or
other
mutually
exclusive
terms
that
may
be
needed")
valueQuantity
would
be:
"valueQuantity": {
"value": 2.0,
"comparator": "<",
"unit": "mmol/l",
"system": "http://unitsofmeasure.org",
"code": "mmol/L"
}
If
the
value
was
"NaN"
(i.e.
an
error)
the
valueCodeableConcept
element
would
be
absent
and
dataAbsentReason
element
would
be:
"dataAbsentReason": {
"coding": [
{
"system": "http://hl7.org/fhir/data-absent-reason",
"system": "http://terminology.hl7.org/CodeSystem/data-absent-reason",
"code": "NaN",
"display": "Not a Number"
}
]
}
The effectiveDateTime or effectivePeriod is the time that the observation is most relevant as an observation of the subject. For a biological subject (e.g. a human patient), this is the physiologically relevant time of the observation. In the case of an observation using a specimen, this represents the start and end of the specimen collection (e.g. 24-hour Urine Sodium), but if the collection time is sufficiently short, this is reported as a point in time value (e.g. normal venipuncture). In the case of an observation obtained directly from a subject (e.g. BP, Chest X-ray), this is the start and end time of the observation process, which again, is often reported as a single point in time.
Most
common
observations
will
only
have
one
generic
reference
range.
Reference
ranges
may
be
useful
for
laboratory
tests
and
other
measures
like
systolic
blood
pressuer
pressure
but
will
have
little
relevance
for
something
like
"pregnancy
status".
Systems
MAY
choose
to
restrict
to
only
supplying
the
relevant
reference
range
based
on
knowledge
about
the
patient
(e.g.
specific
to
the
patient's
age,
gender,
weight
and
other
factors),
but
this
might
not
be
possible
or
appropriate.
Whenever
more
than
one
reference
range
is
supplied,
the
differences
between
them
SHOULD
be
provided
in
the
reference
range
and/or
age
properties.
If a measurement or test could not be completed (for example if the specimen is unsatisfactory or the provider cancelled the order), then the status value should be updated to "cancelled" and the specific details given - preferably as coded values in the dataAbsentReason or valueCodeableConcept element. Additional information may be provided in comments as well. The specimen reject example demonstrates this using a coded value for unsatisfactory specimen in dataAbsentReason.
Genetic
reporting
makes
heavy
use
of
the
DiagnosticReport
and
Observation
resources.
An
implementation
guide
describing
how
to
represent
genetic
results
can
be
found
here
.
The lastn query operation meets the common need for searching for the most recent or "last known" Observations for a subject. Examples where this query could be used:
See the Last N Observations Query section in the Observation resource operations page for more information and examples
The stats operation performs a set of statistical calculations on a set of clinical measurements such as a blood pressure as stored on the server. This operation is focused on Observation resources with valueQuantity elements that have UCUM unit codes. Examples where this operation could be used:
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
| Name | Type | Description | Expression | In Common |
| based-on | reference | Reference to the service request. |
Observation.basedOn
( CarePlan , MedicationRequest , NutritionOrder , DeviceRequest , ServiceRequest , ImmunizationRecommendation ) |
|
| category | token | The classification of the type of observation | Observation.category | |
| code | token | The code of the observation type | Observation.code |
|
| code-value-concept | composite | Code and coded value parameter pair |
code: code value-concept: value.as(CodeableConcept) |
|
| code-value-date | composite | Code and date/time value parameter pair |
code: code value-date: value.as(DateTime) | value.as(Period) |
|
| code-value-quantity | composite | Code and quantity value parameter pair |
code: code value-quantity: value.as(Quantity) |
|
| code-value-string | composite | Code and string value parameter pair |
code: code value-string: value.as(string) |
|
| combo-code | token | The code of the observation type or component type | Observation.code | Observation.component.code | |
| combo-code-value-concept | composite | Code and coded value parameter pair, including in components |
On
Observation
|
combo-code: code combo-value-concept: value.as(CodeableConcept) |
|
| combo-code-value-quantity | composite | Code and quantity value parameter pair, including in components |
On
Observation
|
combo-code: code combo-value-quantity: value.as(Quantity) |
|
| combo-data-absent-reason | token | The reason why the expected value in the element Observation.value[x] or Observation.component.value[x] is missing. | Observation.dataAbsentReason | Observation.component.dataAbsentReason | |
| combo-value-concept | token | The value or component value of the observation, if the value is a CodeableConcept |
|
|
| combo-value-quantity | quantity | The value or component value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data) |
|
|
| component-code | token | The component code of the observation type | Observation.component.code | |
| component-code-value-concept | composite | Component code and component coded value parameter pair |
component-code: code component-value-concept: value.as(CodeableConcept) |
|
| component-code-value-quantity | composite | Component code and component quantity value parameter pair |
component-code: code component-value-quantity: value.as(Quantity) |
|
| component-data-absent-reason | token | The reason why the expected value in the element Observation.component.value[x] is missing. | Observation.component.dataAbsentReason | |
| component-value-concept | token | The value of the component observation, if the value is a CodeableConcept |
|
|
| component-value-quantity | quantity | The value of the component observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data) |
|
|
| data-absent-reason | token | The reason why the expected value in the element Observation.value[x] is missing. | Observation.dataAbsentReason | |
| date | date | Obtained date/time. If the obtained element is a period, a date that falls in the period | Observation.effective | 17 Resources |
| derived-from | reference | Related measurements the observation is made from |
Observation.derivedFrom
( Media , Observation , ImagingStudy , Sequence , QuestionnaireResponse , DocumentReference ) |
|
| device | reference | The Device that generated the observation data. |
Observation.device
( |
|
| encounter | reference | Encounter related to the observation |
( Encounter ) |
12 Resources |
| focus TU | reference | The focus of an observation when the focus is not the patient of record. |
Observation.focus
(Any) |
|
| has-member | reference | Related resource that belongs to the Observation group |
Observation.hasMember
( Observation , Sequence , QuestionnaireResponse ) |
|
| identifier | token | The unique id for a particular observation | Observation.identifier |
|
| method | token | The method used for the observation | Observation.method | |
| part-of | reference | Part of referenced event |
Observation.partOf
( Immunization , MedicationDispense , MedicationAdministration , Procedure , ImagingStudy , MedicationStatement ) |
|
| patient | reference | The subject that the observation is about (if patient) |
( Patient ) |
29 Resources |
| performer | reference | Who performed the observation |
Observation.performer
( Practitioner , Organization , CareTeam , Patient , PractitionerRole , RelatedPerson ) |
|
| specimen | reference | Specimen used for this observation |
Observation.specimen
( Specimen ) |
|
| status | token | The status of the observation | Observation.status | |
| subject | reference | The subject that the observation is about |
Observation.subject
( Group , Device , Patient , Location ) |
|
| value-concept | token | The value of the observation, if the value is a CodeableConcept |
|
|
| value-date | date | The value of the observation, if the value is a date or period of time |
|
|
| value-quantity | quantity | The value of the observation, if the value is a Quantity, or a SampledData (just search on the bounds of the values in sampled data) |
|
|
| value-string | string | The value of the observation, if the value is a string, and also searches in CodeableConcept.text |
|