Observation binding

Observation binding

Resource

https://www.hl7.org/fhir/observation.html



Profile examples



Relevant Confluence pages



Resource – concept model mapping

Yellow rows denote SNOMED CT attributes where there is no specific FHIR counterpart.

  File Modified

Microsoft Excel Spreadsheet FHIR Specimen 20180503.xlsx

2019-Mar-12 by Peter Williams

PNG File image2019-3-12_21-40-15.png

2019-Mar-12 by Jeremy Rogers

PNG File image2019-3-12_21-41-29.png

2019-Mar-12 by Jeremy Rogers

PNG File image2019-3-13_9-21-8.png

2019-Mar-13 by Jeremy Rogers

File Table.url

2019-Mar-13 by Jeremy Rogers



Resource element (CodeableConcept)

FHIR ValueSet

Binding Strength

SNOMED CT attribute

SNOMED CT range

Comments

Resource element (CodeableConcept)

FHIR ValueSet

Binding Strength

SNOMED CT attribute

SNOMED CT range

Comments

Observation.category









Is there a use case for providing SNOMED mappings as an alternative to the preferred set of 9?

Unlikely that will be able to draft a 'tidy' mapping to the exact same set of 9 categories, such that if Observation.code, .method, .bodySite and .type are all known then .category can be computed.

2019-04-16: recommend not to use this, but would be allowed. Category can be determined from the code.

Observation.code



https://www.hl7.org/fhir/valueset-observation-codes.html#expansion





<<363787002|Observable entity|

OR << 386053000|Evaluation procedure|

AP: What happens to the findings like 'pulmonary oedema' from the findings hierarchy? Is that only a Condition, or can it also be an Observation? Many clinical condition labels are synonyms for the primary clinical symptom or observation that they cause. And many genuine symptoms are certainly observations (that a phenomenon exists), not pathologies

DK: Findings are not the "question" component of the question-answer model - they're a conflation of both question AND answer

AP: But where the conflated answer is typically always "is present"

UNRESOLVED....revisit

Observation.Value.valueCodeableConcept







<<362981000|Qualifier value|

MINUS <valueset for Observation.Interpretation> ?

DK thought binding was overly constrained 28May.

LB: why not also members from <<441742003 Evaluation finding

JC: Because they decompose (in theory) into an Observable+Qualifier pair

Observation.dataAbsentReason

DataAbsentReason (Extensible)

HL7 Code

Definition

SNOMED CT

unknown

The value is expected to exist but is not known.



  asked-unknown

The source was asked but does not know the value.



  temp-unknown





  not-asked

The workflow didn't lead to this value being known.



  asked-declined

The source was asked but declined to answer.



masked

The information is not available due to security, privacy or related reasons.



not-applicable

There is no proper value for this element (e.g. last menstrual period for a male).



unsupported

The source system wasn't capable of supporting this element.



as-text

The content of the data is represented in the resource narrative.



error

Some system or workflow process error means that the information is not available.



  not-a-number

The numeric value is undefined or unrepresentable due to a floating point processing error.



  negative-infinity

The numeric value is excessively low and unrepresentable due to a floating point processing error.



  positive-infinity

The numeric value is excessively high and unrepresentable due to a floating point processing error.



not-performed

The value is not available because the observation procedure (test, etc.) was not performed.



not-permitted

The value is not permitted in this context (e.g. due to profiles, or the base data types).











2019-04-16: seems to be out of scope of SNOMED CT

Observation.interpretation

Observation Interpretation Codes (Extensible)

HL7 Code (V3 code system, now harmonized between all HL7 code systems)
HL7 Code Display
SNOMED CT

_GeneticObservationInterpretation





CAR

Carrier

29679002|Carrier of disorder|

(28May this relates to genetic mutation, so not quite appropriate as disorder may not manifest)

_ObservationInterpretationChange





  B

Better

385425000|Improved|

  D

Significant change down

442474009|Decreased relative to previous|

  U

Significant change up

442387004|Increased relative to previous|

  W

Worse

231877006|Worse|

_ObservationInterpretationExceptions





  <

Off scale low



  >

Off scale high



  IE

Insufficient evidence



_ObservationInterpretationNormality





  A

Abnormal

263654008|Abnormal|

    AA

Critical abnormal



      HH

Critical high



      LL

Critical low



    H

High

371879000 | Abnormally high (qualifier value) |

      HU

Significantly high

260360000 | Very high (qualifier value) |

    L

Low

371880002 | Abnormally low (qualifier value) |

      LU

Significantly low

260362008 | Very low (qualifier value) |

  N

Normal

17621005|Normal|

_ObservationInterpretationSusceptibility





  I

Intermediate

264841006|Intermediately susceptible|

  NCL

No CLSI defined breakpoint



  NS

Non-susceptible



  R

Resistant

30714006|Resistant|

    SYN-R

Synergy - resistant



  S

Susceptible

131196009|Susceptible|

    SDD

Susceptible-dose dependent



    SYN-S

Synergy - susceptible



EX

outside threshold

394844007|Outside reference range|

  HX

above high threshold

281302008|Above reference range|

  LX

below low threshold

281300000|Below reference range|

ObservationInterpretationDetection





 IND

Indeterminate

82334004|Indeterminate|

    E

Equivocal

42425007|Equivocal|

  NEG

Negative

260385009|Negative|

    ND

Not detected

260415000|Not detected|

  POS

Positive

10828004|Positive|

    DET

Detected

260373001|Detected|

ObservationInterpretationExpectation





  EXP

Expected



  UNE

Unexpected



ReactivityObservationInterpretation





  NR

Non-reactive

131194007|Non-Reactive|

  RR

Reactive

11214006|Reactive|

    WR

Weakly reactive

117006002|Weakly-reactive|

HL7 valueset (n=48) is extensible, so could add new expressivity as SNOMED codes if there were any gaps in existing list ... but that existing list is already relatively matured and 'metalled' by use, so that seem an unlikely requirement. Many of the existing members of the HL7 valuelist have obvious SNOMED equivalents, so there is scope for a mapping rather than a completely separate SNOMED-only valuelist. Mapping exercise may also reveal some holes in existing SNOMED expressivity.

2019-04-16: gaps could be filled with new SNOMED CT content, e.g. _ObservationInterpretationNormality

2019-06-11: filling Significant low/high,

@Daniel Karlsson create requests for Critical abnormal, Critical high, Critical low, Off scale low, Off scale high, Non-susceptible, Synergy - resistant, Synergy - susceptible, Susceptible-dose dependent, Expected, Unexpected.
@Rob Hausam ask for clarification from HL7 Orders and Observations Work Group about this: Insufficient evidence, No CLSI defined breakpoint (a generic "no breakpoint" concept instead?),

Observation.bodySite

SNOMED CT Body Structures (Example)

Similar to Condition.bodySite, use values from << 442083009 (Anatomical or acquired body structure) unless the body site can be determined from Observation.code eg 433776001 |Temperature of toe (observable entity)| uses Inheres In → Toe Structure. Historical issue with difficulty representing multiple body sites (eg primary and secondary tumor sites). Note that Condition resource allows 0..* bodysites.



2019-06-11: Overlaps with | direct site | of the Observables concept model.



@Daniel Karlsson can you suggest an observable that uses two body sites?

Observation.method

Observation Methods (Example)

Current HL7 list specifies: < 272394005 (Technique) OR < 129264002 (Action) OR < 386053000 (Patient evaluation procedure)





HL7 "Only used if not implicit in code for Observation.code"



Note that Observables model currently using Technique (attribute) taking a technique qualifier. Actions are used as the value for a method in a procedure so is less appropriate here. JR suggested that this field should be restricted to < 272394005 (Technique) to address use case of concerns of a Pathology department.

Could a patient evaluation procedure be decorated with a technique? Currently only used with observables.

TODO - Link to Observables concept model

How would we link resources together so that the Observation could reference the actual procedure undertaken to make the determination? Likely via the "basedOn" linked to the ServiceRequest.

Similar problem to bodysite with conflict if Technique is used and does not align with Observation.code

Observation.referenceRange.type

Observation Reference Range Meaning Codes (Preferred)



Lvl

Code

Display

SNOMED CT

0

type

Type



1

  normal

Normal Range

17621005|Normal|

1

  recommended

Recommended Range



1

  treatment

Treatment Range



1

  therapeutic

Therapeutic Desired Level

262202000|Therapeutic|

2

    pre

Pre Therapeutic Desired Level



2

    post

Post Therapeutic Desired Level



0

endocrine

Endocrine



1

  pre-puberty

Pre-Puberty

NB 251818004|Prepubertal - no pubic hair (finding)|

SNOMED Code(s) needed below 307158003|Temporal periods relating to physiological functions| ?

(Prepubescent, peripubescent, pubescent, postpubertal) ??

1

  follicular

Follicular Stage

SNOMED Code needed below 263845008|Premenstrual| ?

1

  midcycle

MidCycle

NB 37733003|Midstage| (has synonym: midcycle)

SNOMED Code needed below 263845008|Premenstrual| ?

1

  luteal

Luteal

SNOMED Code needed below 263845008|Premenstrual| ?

1

  postmenopausal

Post-Menopause

307429007|After menopause|



The value set is maturity=0 and binding strength is Preferred, so alternatively we can develop our own SNOMED CT value set from scratch.

However, the added value of using SNOMED CT here is... limited.

Observation.referenceRange.appliesTo

Observation Reference Range Applies To Codes (Example)

<<415229000|Racial group (racial group)| OR <<248153007|Male| OR <<248152002|Female| OR <<77386006|Pregnant|

Likely, missing race/ethnicity codes will not be added to SNOMED CT

Observation.component.code

LOINC Codes (Example)

See above.

Observation.component.value[x].valueCodeableConcept





Observation.component.dataAbsentReason

DataAbsentReason (Extensible)



Observation.component.interpretation

Observation Interpretation Codes (Extensible)







Copyright © 2025, SNOMED International