Querying the Drug Model
Overview
Querying SNOMED CT drug content is a fundamental capability for supporting clinical workflows, product selection, and analytics.
Because drug concepts are defined using structured attributes, effective querying depends on understanding both the hierarchy and the concept model.
The SNOMED CT Drug Model is designed to enable flexible querying across:
hierarchical relationships (e.g. ingredient → product → package)
defining attributes (e.g. ingredient, dose form, strength)
levels of abstraction (MP, MPF, CD, RCD, RPCD)
Effective querying relies on the use of Expression Constraint Language (ECL), which allows both hierarchical and attribute-based constraints to be combined. More information, see SNOMED CT Expression Constraint Language
Hierarchical Queries
Hierarchical queries use subtype relationships to retrieve groups of related concepts. These are particularly useful for aggregation and broad filtering.
Example: Aggregate by ingredient
<< 372687004 |Amoxicillin (substance)|Explanation:
Retrieves all medicinal products containing amoxicillin, across all levels of the drug model (MP, MPF, CD, RCD, RPCD).
Typical use cases:
drug interaction checking
allergy alerts
population-level reporting
Example: Retrieve all capsule drugs
Explanation:
Retrieves all medicinal products that have unit of presentation of capsule, regardless of ingredient or strength.
Typical use cases:
filtering drug lists in prescribing systems
form-specific clinical rules
Attribute-Based Queries
Attribute-based queries refine results using specific characteristics of medicinal products.
Example: Dose-specific Clinical Drugs
The following expression constraint is satisfied by oral medicinal products, which contain amoxicillin and have a presentation strength greater than or equal to 250 mg.
Retrieves Clinical Drugs containing amoxicillin at a strength of 250 mg.
Typical use cases:
dose validation
prescribing decision support
Cross-Level Navigation
A key feature of the SNOMED CT Drug Model is the ability to move between levels of abstraction.
Upward navigation (aggregation)
RCD → CD → MP
Used to:
aggregate dispensing or administration data
support reporting and analytics
Downward navigation (product identification)
MP → CD → RCD → RPCD
Used to:
identify available products for a given clinical definition
support substitution and dispensing workflows
ECLs for Selecting Drug Model Classes
Selecting specific drug model classes is essential for accurate data entry and meaningful analytics. This can be achieved using ECL expressions that constrain content based on hierarchical structure, as well as the presence or absence of relevant attributes.
The following table shows the ECLs required to query specific Drug model classes.
Medicinal product (MP)
<< 763158003 |Medicinal product| : [0..0] 1142139005 |Count of base of active ingredient| = *, [0..0] 411116001 |Has manufactured dose form| = *, [0..0] 774158006 |Has product name| = *
Medicinal product only (MPO)
<< 763158003 |Medicinal product| : 1142139005 |Count of base of active ingredient| = *, [0..0] 411116001 |Has manufactured dose form| = *, [0..0] 774158006 |Has product name| = *
Medicinal product form (MPF)
<< 763158003 |Medicinal product| : [0..0] 1142139005 |Count of base of active ingredient| = *, 411116001 |Has manufactured dose form| = *, [0..0] 774158006 |Has product name| = *
Medicinal product form only (MPFO)
<< 763158003 |Medicinal product| : 1142139005 |Count of base of active ingredient| = *, 411116001 |Has manufactured dose form| = *, [0..0] 732943007 |Has basis of strength substance (attribute)| = *, [0..0] 774158006 |Has product name| = *
Medicinal product precisely (MPP)
<< 763158003 |Medicinal product| : 762949000 |Has precise active ingredient (attribute)| = *, 1142139005 |Count of base of active ingredient| = *, [0..0] 732943007 |Has basis of strength substance (attribute)| = *, [0..0] 774158006 |Has product name| = *
Real medicinal product (RMP)
<< 763158003 |Medicinal product| : [0..0] 411116001 |Has manufactured dose form| = *, 774158006 |Has product name| = *
Clinical drug (CD)
<< 763158003 |Medicinal product| : 732943007 |Has basis of strength substance (attribute)| = *, [0..0] 774158006 |Has product name| = *
Real clinical drug (RCD)
<< 763158003 |Medicinal product| : 732943007 |Has basis of strength substance (attribute)| = *, 774158006 |Has product name| = *
Packaged clinical drug (PCD)
<< 781405001 |Medicinal product package|: [0..0] 774158006 |Has product name| = *
Real packaged clinical drug (RPCD)
<< 781405001 |Medicinal product package|: 774158006 |Has product name| = *
These ECLs can be tested live in this demonstrator:
https://ihtsdo.github.io/sct-implementation-demonstrator/#/medicinal-product-classes
Querying by Use Case
The appropriate query pattern depends on the use case and required level of detail.
Drug interaction checking (MP level)
Uses ingredient-level aggregation to ensure that all relevant products are included.
Dose validation (CD level)
Targets Clinical Drugs to ensure precise matching of strength and formulation.
Product selection (RCD level)
Retrieves all products containing a given ingredient, supporting dispensing and inventory workflows.
