Page tree


Profile examples

Value sets (attribute, cardinality, binding strength)

All SNOMED CT value set bindings in the base resource are example bindings, but could be made required or extensible in a SNOMED CT-focused profile.

The discussion below considers pre-coordinated content (as of 2017-07-31 international release of SNOMED CT).

AllergyIntolerance Substance/Product, Condition and Negation Codes (AllergyIntolerance.code, 0..1, Example)

The value set contains substances, products, some conditions and also some negation (situation) concepts. Making different choices within the value set may lead to lack of interoperability, e.g. 293584003 |Allergy to paracetamol (disorder)| is not equivalent to 387517004 |Paracetamol (substance)| or to 322237000 |Paracetamol 500mg soluble tablet (product)| but "transforms" can be made in some cases through the concept model, e.g. code = 293584003 |Allergy to paracetamol (disorder)| → code = 387517004 |Paracetamol (substance)| and vice versa, but code = 322237000 |Paracetamol 500mg soluble tablet (product)| does not necessarily imply code = 387517004 |Paracetamol (substance)| or, more clearly, code = 358501001 |Paracetamol+caffeine 500mg/65mg soluble tablet (product)| does not imply code = 387517004 |Paracetamol (substance)| (nor code = 293584003 |Allergy to paracetamol (disorder)| ) while the opposite holds.

Ruled-out specific allergies or intolerances can be represented either using verificationStatus = refuted or using code = <negation code> from this value set, or possibly an extended value set. "No known (X) allergies" may also be represented as an empty list and a specific emptyReason.

Other potential overlaps include overlap between code and category, type and between reaction.manifestation and reaction.severity.

Substance Code (AllergyIntolerance.reaction.substance, 0..1, Example)

The value set contains substances and products, thus see discussion above.

SNOMED CT Clinical Findings (AllergyIntolerance.reaction.manifestation, 1..*, Example)

The value set contains all clinical findings (<< 404684003 |Clinical finding (finding)|) and could possibly be more constrained like <<282100009 |Adverse reaction caused by substance (disorder)| (although this set probably does have (significant) gaps and overlaps (e.g. 735449006 |Hypersensitivity reaction caused by food (disorder)|)).

SNOMED CT Route Codes (AllergyIntolerance.reaction.exposureRoute, 0..1, Example)

The value set contains routes of administration primarily developed for drug use (<<284009009 |Route of administration value (qualifier value)|) and should be reviewed for gaps (e.g. what is the route(s) for a cat dander reaction, noting that reaction.exposureRoute is not mandatory)

Mapping (atribute, cardinality, binding strength)

AllergyIntoleranceClinicalStatus (AllergyIntolerance.clinicalStatus, 0..1, Required)

active | inactive | resolved

AllergyIntoleranceVerificationStatus (AllergyIntolerance.verificationStatus, 1..1, Required)

unconfirmed | confirmed | refuted | entered-in-error

AllergyIntoleranceType (AllergyIntolerance.type, 0..1, Required)

allergy | intolerance

AllergyIntoleranceCategory (AllergyIntolerance.category, 0..*, Required)

food | medication | environment | biologic

AllergyIntoleranceCriticality (AllergyIntolerance.criticality, 0..1, Required)

low | high | unable-to-assess

AllergyIntoleranceSeverity (AllergyIntolerance.reaction.severity, 0..1, Required)

mild | moderate | severe

Bindings and constraints

In addition to specifying the binding strength of a ValueSet binding, a combination of binding strength and invariants may be used to fine tune the ValueSet binding.

Some options (thanks to Grahame Grieve) are:

"there has to be a snomed code, and from the specified value set if one of them is an appropriate code"

  binding = extensible to value set [Allergy-Code-Set]

  invariant: code.where(code.coding.system = '').count() > 0

"there has to be a snomed code in the extensible binding, or there has to be some text"

  binding = extensible to value set [Allergy-Code-Set]

  invariant: coding.any($this in [Allergy-Code-Set]) or text.exists()

"there has to be a SNOMED CT code if any code, text must be provided via note element if there is no code"


  binding = required to value set [Allergy-Code-Set]

  invariant (on top level): code.exists() or note.exists()

  • No labels

1 Comment

  1. Interesting to run the Expression Constraint used as the Concept Domain Binding for the Resource against Ontoserver and my dev environment...

    < 413350009 |Finding with explicit context|: 246090004 |Associated finding| = << 473010000 |Hypersensitivity condition|

    Produced the same 26 concepts - but not quite what I was expecting, although I guess that the focus concept constrains this to history and "no known"  instances. What do others think about this as defining the meaning of the resource?