Chuyển đến nội dung chính

Bài 14: CONCEPT & VOCABULARY — Nền tảng từ điển chuẩn

Hai bảng trung tâm của hệ thống Vocabulary: CONCEPT chứa mọi khái niệm y tế, VOCABULARY quản lý nguồn gốc. Tìm hiểu standard_concept, domain_id, concept_class_id, vocabulary_id và cách tra cứu trên Athena.

🏗️ Kiến trúc — Bài 14 CONCEPT & VOCABULARY Nền tảng từ điển chuẩn OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z Phần 5: Standardized Vocabularies xdev.asia

Hệ sinh thái Vocabulary — CONCEPT, VOCABULARY, RELATIONSHIP, ANCESTOR

Giới thiệu

Hệ thống Standardized Vocabularies là "bộ não" của OMOP CDM — mọi dữ liệu lâm sàng đều liên kết về đây. Bài này tập trung vào hai bảng trung tâm: CONCEPT (chứa ~10 triệu khái niệm y tế) và VOCABULARY (quản lý 70+ nguồn từ điển). Hiểu hai bảng này là chìa khóa để thành thạo OMOP.


1. Bảng CONCEPT

1.1. Cấu trúc

CộtKiểuMô tảVí dụ
concept_idINTEGERPK — ID duy nhất toàn cục201826
concept_nameVARCHAR(255)Tên concept"Type 2 diabetes mellitus"
domain_idVARCHAR(20)Domain (bảng nào)"Condition"
vocabulary_idVARCHAR(20)FK → VOCABULARY"SNOMED"
concept_class_idVARCHAR(20)Phân loại trong vocab"Clinical Finding"
standard_conceptVARCHAR(1)S=Standard, C=Classification, NULL"S"
concept_codeVARCHAR(50)Mã gốc trong vocabulary"44054006"
valid_start_dateDATENgày bắt đầu có hiệu lực2002-01-31
valid_end_dateDATENgày hết hiệu lực2099-12-31
invalid_reasonVARCHAR(1)NULL=valid, U=updated, D=deletedNULL

1.2. standard_concept — Ba loại Concept

  ┌─────────────────────────────────────────────────────┐
  │ standard_concept = 'S' (Standard)                    │
  │ → Concept "chính thống" dùng trong *_concept_id     │
  │ → VD: SNOMED 201826 "Type 2 diabetes mellitus"      │
  │ → Dùng cho condition_concept_id                      │
  └──────────────────────┬──────────────────────────────┘
                         │ Maps to (nguồn → đích)
  ┌──────────────────────┴──────────────────────────────┐
  │ standard_concept = NULL (Non-standard / Source)      │
  │ → Concept nguồn từ ICD, CPT4, ATC...               │
  │ → VD: ICD10CM 45591837 "E11 - Type 2 DM"           │
  │ → Dùng cho *_source_concept_id                       │
  └─────────────────────────────────────────────────────┘

  ┌─────────────────────────────────────────────────────┐
  │ standard_concept = 'C' (Classification)              │
  │ → Concept dùng cho phân cấp / ancestor              │
  │ → VD: MedDRA PT "Diabetes mellitus"                 │
  └─────────────────────────────────────────────────────┘

1.3. domain_id — Xác định bảng đích

domain_idBảng CDMVí dụ
ConditionCONDITION_OCCURRENCEBệnh, triệu chứng
DrugDRUG_EXPOSUREThuốc
ProcedurePROCEDURE_OCCURRENCEThủ thuật
MeasurementMEASUREMENTXét nghiệm
ObservationOBSERVATIONGhi nhận
DeviceDEVICE_EXPOSUREThiết bị
Spec Anatomic SiteSPECIMENVị trí lấy mẫu
VisitVISIT_OCCURRENCELoại visit
Type Concept*_type_concept_idNguồn dữ liệu
GenderPERSONGiới tính
RacePERSONChủng tộc
UnitMEASUREMENT.unitĐơn vị
RouteDRUG_EXPOSURE.routeĐường dùng

2. Bảng VOCABULARY

2.1. Cấu trúc

CộtKiểuMô tả
vocabulary_idVARCHAR(20)PK — ID vocabulary
vocabulary_nameVARCHAR(255)Tên đầy đủ
vocabulary_referenceVARCHAR(255)URL tham chiếu
vocabulary_versionVARCHAR(255)Phiên bản
vocabulary_concept_idINTEGERFK → Concept đại diện

2.2. Vocabulary phổ biến

vocabulary_idTênDomain chínhVai trò
SNOMEDSNOMED-CTCondition, Procedure, ObservationStandard cho lâm sàng
RxNormRxNormDrugStandard cho thuốc
LOINCLOINCMeasurementStandard cho xét nghiệm
ICD10CMICD-10-CMConditionSource concept chẩn đoán
ICD10PCSICD-10-PCSProcedureSource concept thủ thuật
CPT4CPT-4Procedure, MeasurementSource billing code
ATCATCDrugClassification thuốc
UCUMUCUMUnitĐơn vị đo lường
GenderOMOP GenderGenderGiới tính
RaceRaceRaceChủng tộc
CVXVaccinesDrugVaccine codes

3. Tra cứu Concept trên Athena

3.1. Bước tra cứu

  1. Vào athena.ohdsi.org
  2. Gõ từ khóa: "Type 2 diabetes"
  3. Filter:
     - Standard Concept: Standard ✓
     - Domain: Condition ✓
     - Vocabulary: SNOMED ✓
  4. Kết quả:
     concept_id:     201826
     concept_name:   Type 2 diabetes mellitus
     vocabulary_id:  SNOMED
     concept_code:   44054006
     standard_concept: S
     domain_id: Condition

3.2. SQL tra cứu

-- Tìm Standard Concept cho "tiểu đường type 2"
SELECT concept_id, concept_name, vocabulary_id,
       domain_id, standard_concept, concept_code
FROM concept
WHERE LOWER(concept_name) LIKE '%type 2 diabetes%'
  AND standard_concept = 'S'
  AND domain_id = 'Condition'
ORDER BY concept_name;

-- Tìm Source Concept (ICD-10) mapping đến Standard
SELECT
    c_src.concept_id AS source_concept_id,
    c_src.concept_code AS icd10_code,
    c_src.concept_name AS icd10_name,
    c_std.concept_id AS standard_concept_id,
    c_std.concept_name AS standard_name,
    c_std.vocabulary_id AS standard_vocab
FROM concept c_src
JOIN concept_relationship cr
    ON c_src.concept_id = cr.concept_id_1
    AND cr.relationship_id = 'Maps to'
JOIN concept c_std
    ON cr.concept_id_2 = c_std.concept_id
    AND c_std.standard_concept = 'S'
WHERE c_src.concept_code = 'E11'
  AND c_src.vocabulary_id = 'ICD10CM';

4. concept_class_id — Phân loại trong Vocabulary

4.1. SNOMED

concept_class_idÝ nghĩaVí dụ
Clinical FindingBệnh, triệu chứngType 2 DM
ProcedureThủ thuậtAppendectomy
Body StructureCấu trúc cơ thểLiver
SubstanceChấtGlucose
Observable EntityQuantity đo đượcBlood pressure
Qualifier ValueGiá trị bổ sungSevere

4.2. RxNorm

concept_class_idLevelVí dụ
Ingredient (IN)Hoạt chấtMetformin
Clinical Drug Form (CDF)HC + dạng bào chếMetformin Oral Tablet
Clinical Drug (CD)HC + liều + dạngMetformin 500mg Tab
Branded Drug (BD)Tên thương mạiGlucophage 500mg Tab
Clinical Drug Comp (CDC)HC + liềuMetformin 500mg
Brand Name (BN)Tên thương mạiGlucophage
Dose Form (DF)Dạng bào chếOral Tablet

5. Bảng DOMAIN

CộtKiểuMô tả
domain_idVARCHAR(20)PK
domain_nameVARCHAR(255)Tên domain
domain_concept_idINTEGERFK → concept

6. Bảng CONCEPT_CLASS

CộtKiểuMô tả
concept_class_idVARCHAR(20)PK
concept_class_nameVARCHAR(255)Tên class
concept_class_concept_idINTEGERFK → concept

7. concept_id = 0 — Ý nghĩa đặc biệt

ConceptÝ nghĩaKhi nào dùng
concept_id = 0"No matching concept"Không map được
concept_name"No matching concept"
domain_idNULL
vocabulary_id"None"
-- Kiểm tra % records không map được
SELECT
    'condition_occurrence' AS table_name,
    COUNT(*) AS total_records,
    SUM(CASE WHEN condition_concept_id = 0 THEN 1 ELSE 0 END) AS unmapped,
    ROUND(SUM(CASE WHEN condition_concept_id = 0 THEN 1 ELSE 0 END) * 100.0
          / COUNT(*), 1) AS unmapped_pct
FROM condition_occurrence
UNION ALL
SELECT 'drug_exposure', COUNT(*),
    SUM(CASE WHEN drug_concept_id = 0 THEN 1 ELSE 0 END),
    ROUND(SUM(CASE WHEN drug_concept_id = 0 THEN 1 ELSE 0 END) * 100.0
          / COUNT(*), 1)
FROM drug_exposure
UNION ALL
SELECT 'measurement', COUNT(*),
    SUM(CASE WHEN measurement_concept_id = 0 THEN 1 ELSE 0 END),
    ROUND(SUM(CASE WHEN measurement_concept_id = 0 THEN 1 ELSE 0 END) * 100.0
          / COUNT(*), 1)
FROM measurement;

Tổng kết

  1. CONCEPT: ~10 triệu records, mỗi khái niệm y tế có 1 concept_id duy nhất
  2. standard_concept: S = Standard (dùng chính), C = Classification, NULL = Source
  3. domain_id quyết định dữ liệu lưu ở bảng CDM nào
  4. VOCABULARY: 70+ nguồn từ điển (SNOMED, RxNorm, LOINC, ICD-10...)
  5. concept_id = 0: "không map được" — dùng khi ETL không tìm được Standard Concept
  6. Tra cứu: athena.ohdsi.org hoặc query trực tiếp bảng CONCEPT

Bài tiếp theo: CONCEPT_RELATIONSHIP & CONCEPT_ANCESTOR — mối quan hệ và phân cấp giữa Concepts.


Tài liệu tham khảo