Mapping of FHIR Medication to SNOMED CT Concept
Logic
If only the ingredient(s) present, construct a Medicinal Product, OR
If form is also present, construct a Medicinal Product Form, OR
If amount is also present construct a Clinical Drug
Construct one role group in the template per ingredient object.
Assertion: Cannot have an amount without form.
Assertion: Cannot have numerator value without denominator value, although this may be "per 1 tablet"
Ignore any non-active ingredients - not part of SNOMED Drug Model.
Issues
Does not allow for amounts being based on the Basis of Substance Strength (BoSS). Might be better to leave this attribute out, to avoid errors in subsumption calculation.
Will we have to create a map for the unit of presentation from the dose form?
SNOMED CT is still using "concepts as numbers" which we'd have to map to.
ingredient.amount.numerator.unit is a string. We'll have to map to the SNOMED CT code from there, if "code" is not supplied. Check system = snomed if code is supplied.
Still waiting for finalization of "Ingredient Count" attribute.
We'd want to normalize the amount using >1000 <1 rules eg 1500mg → 1.5g and 0.05 g → 50mg.
No current SNOMED model for the "amount" which sits above the ingredient eg I want 5ml of 250mg/10ml We have no representation for the 5ml, only the concentration.
SNOMED CT Template for Drugs
763158003 |Medicinal product (product)| :
[[0..1]] 411116001 |Has manufactured dose form (attribute)| = [[(<736542009 | Pharmaceutical dose form (dose form)|) @form ]],
[[0..1]] 763032000 |Has unit of presentation (attribute)| = [[+(<732935002 | Unit of presentation (unit of presentation)|) @??? ]],
[[1..*]] {
[[1..1]] 762949000 |Has precise active ingredient (attribute)| = [[+(<261217004 |Substance (attribute)|) @ingredient.item ]],
[[0..1]] 7732943007 |Has basis of strength substance (attribute)| = [[+(<261217004 |Substance (attribute)|) @ingredient.item ]],
[[0..1]] 732944001 |Has presentation strength numerator value (attribute)| = [[+(<260299005|Number (qualifier value)|) @ingredient.amount.numerator.value ]],
[[0..1]] 732945000 |Has presentation strength numerator unit (attribute)| = [[+(<258666001|Unit (qualifier value)) @ingredient.amount.numerator.code ]],
[[0..1]] 732947008 |Has presentation strength denominator unit (attribute)| = [[+(<260299005|Number (qualifier value)|) @ingredient.amount.denominator.value ]],
[[0..1]] 732947008 |Has presentation strength denominator unit (attribute)| = [[+(<258666001|Unit (qualifier value)) @ingredient.amount.denominator.code ]]
}
Worked Example
Copyright © 2025, SNOMED International