Back to Guides
Clinical Standards

SNOMED CT Guide

SNOMED CT is the world's most comprehensive clinical terminology, used in EHRs, FHIR, and clinical decision support. Learn the concept model, database design, ICD-10 mapping, and implementation patterns.

What is SNOMED CT?

SNOMED CT (Systematized Nomenclature of Medicine — Clinical Terms) is a structured clinical vocabulary that enables consistent, computable representation of clinical information. Unlike ICD-10 which classifies diseases for billing, SNOMED CT is designed for precise clinical documentation and interoperability.

SNOMED CT contains over 350,000 concepts covering clinical findings, diseases, procedures, body structures, organisms, substances, pharmaceuticals, and more — with 1.5 million descriptions (names) and 2 million relationships linking concepts together in a rich semantic network.

SNOMED CT is required or recommended by US Core FHIR profiles, ONC certification criteria, and numerous national health information exchange frameworks worldwide.

The Three Core Components

Concepts

Each clinical idea is a unique concept with a permanent numeric identifier (SCTID). A concept never changes meaning, and retired concepts are never reused.

SCTID: 44054006 | FSN: "Diabetes mellitus type 2 (disorder)"
SCTID: 22298006 | FSN: "Myocardial infarction (disorder)"

Descriptions

Human-readable names for concepts. Each concept has exactly one Fully Specified Name (FSN), one Preferred Term, and optionally many Synonyms — all in multiple languages.

FSN: "Diabetes mellitus type 2 (disorder)"
Preferred Term: "Type 2 diabetes mellitus"
Synonyms: "Non-insulin-dependent diabetes", "Adult-onset diabetes"

Relationships

Logic-based links between concepts that define their meaning. The "Is a" hierarchy enables subsumption testing — a powerful query feature.

44054006 | Is a → 73211009 (Diabetes mellitus)
44054006 | Finding site → 113331007 (Endocrine system)
44054006 | Pathological process → 441862004

SNOMED CT Hierarchy (Top-Level Concepts)

SCTIDTop-Level HierarchyExamples
404684003Clinical findingDiseases, symptoms, lab findings
71388002ProcedureSurgeries, medications, lab tests
123037004Body structureOrgans, tissue types, anatomical sites
410607006OrganismBacteria, viruses, parasites
105590001SubstanceDrugs, chemicals, nutrients
373873005Pharmaceutical / biologic productMedication products
308916002Environment or geographical locationHealthcare settings
272379006EventAccidents, exposures

SNOMED CT Database Schema

-- SNOMED CT Concepts
CREATE TABLE snomed_concept (
  id                  BIGINT PRIMARY KEY,              -- SCTID (e.g., 44054006)
  effective_time      DATE NOT NULL,
  active              BOOLEAN NOT NULL DEFAULT TRUE,
  module_id           BIGINT,                          -- Module (e.g., US Extension)
  definition_status   BIGINT,                          -- Primitive vs Fully Defined
  CONSTRAINT chk_def_status CHECK (definition_status IN (900000000000074008, 900000000000073002))
);

CREATE INDEX idx_snomed_concept_active ON snomed_concept(active);

-- SNOMED CT Descriptions (names/synonyms)
CREATE TABLE snomed_description (
  id                  BIGINT PRIMARY KEY,
  effective_time      DATE NOT NULL,
  active              BOOLEAN NOT NULL DEFAULT TRUE,
  concept_id          BIGINT NOT NULL REFERENCES snomed_concept(id),
  language_code       CHAR(2) DEFAULT 'en',
  type_id             BIGINT NOT NULL,                 -- FSN: 900000000000003001, Synonym: 900000000000013009
  term                TEXT NOT NULL,
  case_significance   BIGINT
);

CREATE INDEX idx_desc_concept ON snomed_description(concept_id, active);
CREATE INDEX idx_desc_term ON snomed_description USING gin(to_tsvector('english', term));

-- SNOMED CT Relationships (logical links between concepts)
CREATE TABLE snomed_relationship (
  id                  BIGINT PRIMARY KEY,
  effective_time      DATE NOT NULL,
  active              BOOLEAN NOT NULL DEFAULT TRUE,
  source_id           BIGINT NOT NULL REFERENCES snomed_concept(id),
  destination_id      BIGINT NOT NULL REFERENCES snomed_concept(id),
  relationship_group  INTEGER DEFAULT 0,
  type_id             BIGINT NOT NULL,                 -- Is a: 116680003, Finding site: 363698007, etc.
  characteristic_type BIGINT,
  modifier            BIGINT
);

CREATE INDEX idx_rel_source ON snomed_relationship(source_id, type_id, active);
CREATE INDEX idx_rel_dest ON snomed_relationship(destination_id, type_id, active);

-- SNOMED to ICD-10 Map (SNOMED refsets)
CREATE TABLE snomed_icd10_map (
  id                  BIGINT PRIMARY KEY,
  effective_time      DATE NOT NULL,
  active              BOOLEAN DEFAULT TRUE,
  refset_id           BIGINT,
  referenced_concept  BIGINT REFERENCES snomed_concept(id),  -- SNOMED SCTID
  map_group           INTEGER,
  map_priority        INTEGER,
  map_rule            TEXT,
  map_advice          TEXT,
  map_target          VARCHAR(10),                            -- ICD-10 code
  correlation_id      BIGINT
);

CREATE INDEX idx_map_snomed ON snomed_icd10_map(referenced_concept, active);
CREATE INDEX idx_map_icd10 ON snomed_icd10_map(map_target, active);

SQL Query Examples

Find All Children of a Concept (Subsumption)

-- Get all diabetes concepts (children of SCTID 73211009)
WITH RECURSIVE diabetes_hierarchy AS (
  -- Base: the parent concept
  SELECT id, 73211009 AS parent_id
  FROM snomed_concept
  WHERE id = 73211009 AND active = TRUE

  UNION ALL

  -- Recursive: all "Is a" children
  SELECT r.source_id, r.destination_id
  FROM snomed_relationship r
  JOIN diabetes_hierarchy dh ON r.destination_id = dh.id
  WHERE r.type_id = 116680003   -- "Is a" relationship
    AND r.active = TRUE
)
SELECT
  dh.id                    AS sctid,
  d.term                   AS preferred_term
FROM diabetes_hierarchy dh
JOIN snomed_description d ON d.concept_id = dh.id
  AND d.type_id = 900000000000013009  -- Synonym type
  AND d.active = TRUE
ORDER BY d.term;

Map SNOMED Concept to ICD-10

-- Get ICD-10 equivalent for a SNOMED concept
SELECT
  sc.id                   AS snomed_id,
  sd.term                 AS snomed_term,
  sim.map_target          AS icd10_code,
  sim.map_group,
  sim.map_priority,
  sim.map_advice
FROM snomed_concept sc
JOIN snomed_description sd ON sd.concept_id = sc.id
  AND sd.type_id = 900000000000013009  -- Synonym
  AND sd.active = TRUE
JOIN snomed_icd10_map sim ON sim.referenced_concept = sc.id
  AND sim.active = TRUE
WHERE sc.id = 44054006  -- Type 2 Diabetes
ORDER BY sim.map_group, sim.map_priority;

SNOMED CT Best Practices

  • Always store SCTIDs, not terms: Terms change between releases; SCTIDs are permanent. Store the SCTID and look up display text at render time
  • Use the Preferred Term for display: The Preferred Term (not FSN) is appropriate for clinical display — FSNs include semantic tags like "(disorder)" intended for disambiguation
  • Leverage subsumption for queries: Query using "Is a" hierarchies to find all related concepts — "find all patients with any type of diabetes" should traverse the concept hierarchy
  • Update releases regularly: SNOMED CT is released monthly (International) — new concepts are added, old ones retired. Keep your release current
  • Map to ICD-10 for billing: Use the official SNOMED-to-ICD-10 maps maintained by NLM for billing translation — don't create ad-hoc mappings

Frequently Asked Questions

What is SNOMED CT?

SNOMED CT (Systematized Nomenclature of Medicine — Clinical Terms) is the world's most comprehensive multilingual clinical healthcare terminology. It provides a consistent way to represent clinical content in EHRs, covering diseases, findings, procedures, body structures, substances, and more. It is maintained by SNOMED International.

What is the difference between SNOMED CT and ICD-10?

ICD-10 is primarily a classification system for billing and statistical reporting — each condition maps to a single code. SNOMED CT is a rich clinical terminology for precise clinical documentation — a single condition may have multiple representations. Many systems use SNOMED CT for data entry and map to ICD-10 for billing.

What is a SNOMED CT concept?

A SNOMED CT concept is a unique clinical idea, identified by a concept ID (SCTID). Each concept has descriptions (human-readable names — one Fully Specified Name and potentially multiple Synonyms) and relationships to other concepts (e.g., "Is a" hierarchy, "Finding site", "Causative agent").

How are SNOMED CT and FHIR related?

SNOMED CT is one of the primary terminology systems used in HL7 FHIR resources. FHIR Coding elements reference SNOMED CT with system "http://snomed.info/sct". US Core and many FHIR Implementation Guides require SNOMED CT for conditions, procedures, and observations.

Is SNOMED CT free to use?

SNOMED CT is free for use in 40+ member countries including the US, UK, Australia, and Canada. US users access SNOMED CT through the NLM (National Library of Medicine). Non-member countries require an Affiliate License from SNOMED International.

Related Healthcare Guides