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

Bài 2: Kiến trúc tổng thể OMOP CDM 5.4 — Nhóm bảng & Nguyên lý thiết kế

Tổng quan 37 bảng trong OMOP CDM 5.4, 6 nhóm bảng chính (Clinical Data, Health System, Health Economics, Standardized Vocabularies, Derived Elements, Metadata), mô hình Person-centric và các nguyên lý thiết kế cốt lõi.

🏗️ Kiến trúc — Bài 2 Kiến trúc tổng thể OMOP CDM 5.4 Nhóm bảng & Nguyên lý thiết kế OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z Phần 1: Tổng quan & Nền tảng xdev.asia

Kiến trúc 6 nhóm bảng OMOP CDM 5.4 xoay quanh PERSON

Giới thiệu

Ở bài trước, bạn đã hiểu tại sao cần OMOP CDM. Bài này sẽ trả lời câu hỏi: CDM 5.4 trông như thế nào? — 37 bảng được tổ chức ra sao, thuộc nhóm nào, và theo nguyên lý thiết kế gì.

Bạn sẽ có cái nhìn "bird's-eye view" toàn bộ CDM trước khi đi sâu vào từng bảng ở các bài tiếp theo.


1. Tổng quan 6 nhóm bảng

OMOP CDM 5.4 gồm 37 bảng được chia thành 6 nhóm (groups):

┌─────────────────────────────────────────────────────────────────────────┐
│                        OMOP CDM 5.4 — 37 Tables                        │
│                                                                         │
│  ┌─────────────────────────────────────────────────────────────────┐    │
│  │  1. CLINICAL DATA (16 bảng)                                     │    │
│  │  person, observation_period, visit_occurrence, visit_detail,     │    │
│  │  condition_occurrence, drug_exposure, procedure_occurrence,      │    │
│  │  device_exposure, measurement, observation, death, note,         │    │
│  │  note_nlp, specimen, fact_relationship, episode, episode_event   │    │
│  └─────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  ┌──────────────────────────┐  ┌──────────────────────────────────┐    │
│  │  2. HEALTH SYSTEM (3)    │  │  3. HEALTH ECONOMICS (2)         │    │
│  │  location, care_site,    │  │  payer_plan_period, cost          │    │
│  │  provider                │  │                                   │    │
│  └──────────────────────────┘  └──────────────────────────────────┘    │
│                                                                         │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │  4. STANDARDIZED VOCABULARIES (12 bảng)                          │   │
│  │  concept, vocabulary, domain, concept_class, concept_relationship,│   │
│  │  relationship, concept_synonym, concept_ancestor,                 │   │
│  │  source_to_concept_map, drug_strength, cohort, cohort_definition │   │
│  └──────────────────────────────────────────────────────────────────┘   │
│                                                                         │
│  ┌─────────────────────────┐   ┌───────────────────────────────────┐   │
│  │  5. DERIVED ELEMENTS (3) │   │  6. METADATA (2)                  │   │
│  │  drug_era, dose_era,     │   │  cdm_source, metadata              │   │
│  │  condition_era           │   │                                    │   │
│  └─────────────────────────┘   └───────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────────┘

1.1. Clinical Data Tables (16 bảng)

Đây là nhóm lớn nhất và quan trọng nhất — chứa toàn bộ dữ liệu lâm sàng.

BảngMô tả ngắnBài học
personThông tin nhân khẩu bệnh nhânBài 4
observation_periodKhoảng thời gian theo dõiBài 5
visit_occurrenceLượt khám/nhập việnBài 6
visit_detailChi tiết trong một visitBài 6
condition_occurrenceChẩn đoán, bệnh lýBài 7
drug_exposureThuốc, kê đơn, vaccineBài 8
procedure_occurrenceThủ thuật, phẫu thuậtBài 9
measurementXét nghiệm, sinh hiệuBài 10
observationQuan sát lâm sàng, tiền sửBài 11
device_exposureThiết bị y tếBài 12
specimenMẫu bệnh phẩmBài 12
noteGhi chú văn bảnBài 12
note_nlpKết quả NLP từ noteBài 12
deathThông tin tử vongBài 13
episodeGiai đoạn bệnh (mới CDM 5.4)Bài 13
episode_eventLiên kết events-episodes (mới CDM 5.4)Bài 13

1.2. Health System Data Tables (3 bảng)

BảngMô tả
locationĐịa điểm (địa chỉ, tọa độ)
care_siteTổ chức y tế (bệnh viện, phòng khám)
providerNhân viên y tế (bác sĩ, y tá)

1.3. Health Economics Data Tables (2 bảng)

BảngMô tả
payer_plan_periodThông tin bảo hiểm y tế theo thời gian
costChi phí gắn với mọi sự kiện lâm sàng

1.4. Standardized Vocabularies (12 bảng)

BảngMô tả
conceptBảng trung tâm — chứa >10 triệu concepts
vocabularyDanh sách vocabulary sources (SNOMED, ICD-10...)
domainCác domain (Condition, Drug, Procedure...)
concept_classPhân loại concept (Clinical Finding, Ingredient...)
concept_relationshipMối quan hệ giữa concepts
relationshipĐịnh nghĩa các loại relationship
concept_synonymTên gọi khác của concept
concept_ancestorPhả hệ hierarchical của concept
source_to_concept_mapMapping mã nguồn → concept chuẩn
drug_strengthHàm lượng, nồng độ thuốc
cohortDanh sách bệnh nhân theo tiêu chí
cohort_definitionĐịnh nghĩa tiêu chí cohort

1.5. Derived Elements (3 bảng)

BảngMô tả
drug_eraGộp drug exposures liên tục theo ingredient
dose_eraGiai đoạn dùng thuốc ở liều ổn định
condition_eraGộp conditions liên tục thành era

1.6. Metadata (2 bảng)

BảngMô tả
cdm_sourceThông tin nguồn dữ liệu, phiên bản CDM
metadataMetadata bổ sung tùy ý

2. Nguyên lý thiết kế cốt lõi

2.1. Person-Centric (Lấy bệnh nhân làm trung tâm)

Mọi bảng clinical đều liên kết ngược về PERSON qua khóa person_id:

                           ┌─────────────────────┐
                           │      PERSON          │
                           │  person_id (PK)      │
                           │  gender_concept_id   │
                           │  year_of_birth       │
                           └──────────┬──────────┘
                                      │
              ┌───────────────────────┼───────────────────────┐
              │                       │                       │
   ┌──────────┴──────────┐  ┌────────┴────────┐  ┌──────────┴──────────┐
   │ OBSERVATION_PERIOD   │  │ VISIT_OCCURRENCE │  │ CONDITION_OCCURRENCE│
   │ person_id (FK)       │  │ person_id (FK)   │  │ person_id (FK)     │
   └─────────────────────┘  └──────┬──────────┘  └────────────────────┘
                                    │
              ┌────────────────────┼────────────────────┐
              │                    │                     │
   ┌──────────┴──────┐  ┌────────┴────────┐  ┌────────┴────────┐
   │ DRUG_EXPOSURE    │  │ PROCEDURE_OCC.  │  │ MEASUREMENT     │
   │ person_id (FK)   │  │ person_id (FK)  │  │ person_id (FK)  │
   │ visit_occ_id(FK) │  │ visit_occ_id(FK)│  │ visit_occ_id(FK)│
   └─────────────────┘  └────────────────┘  └────────────────┘

Quy tắc: Nếu một dòng dữ liệu không gắn được với person_id, nó không nằm trong các bảng clinical.

2.2. Event-Based (Dựa trên sự kiện)

Mỗi sự kiện y tế tạo một bản ghi riêng trong bảng tương ứng:

Ngày 10/06: Khám ngoại trú → 1 record trong VISIT_OCCURRENCE
  ├── Chẩn đoán tiểu đường  → 1 record trong CONDITION_OCCURRENCE
  ├── Chẩn đoán tăng HA      → 1 record trong CONDITION_OCCURRENCE
  ├── Kê Metformin 500mg      → 1 record trong DRUG_EXPOSURE
  ├── Kê Amlodipine 5mg       → 1 record trong DRUG_EXPOSURE
  ├── XN HbA1c = 7.8%         → 1 record trong MEASUREMENT
  └── XN Creatinine = 1.1     → 1 record trong MEASUREMENT

2.3. Concept-Driven (Dựa trên khái niệm chuẩn)

Mỗi giá trị lâm sàng được mã hóa bằng concept_id từ Standardized Vocabularies:

  Cột trong bảng CDM              Concept                    Vocabulary
  ─────────────────────────────────────────────────────────────────────
  gender_concept_id = 8532     →  "Female"                   [Gender]
  condition_concept_id = 201826 → "Type 2 diabetes mellitus" [SNOMED CT]
  drug_concept_id = 1503297    → "Metformin 500 MG Oral Tab" [RxNorm]
  measurement_concept_id = 3004410 → "Hemoglobin A1c"        [LOINC]
  unit_concept_id = 8554       → "percent (%)"               [UCUM]

2.4. Source Value Preservation (Bảo toàn giá trị gốc)

OMOP CDM luôn giữ lại giá trị gốc bên cạnh concept chuẩn:

-- Ví dụ: Bảng CONDITION_OCCURRENCE
condition_concept_id    = 201826        -- Standard Concept (SNOMED)
condition_source_value  = 'E11'         -- Mã gốc ICD-10 từ HIS
condition_source_concept_id = 443238    -- Concept ID của ICD-10 'E11'

Mô hình 3 cột cho mỗi trường concept:

CộtMô tảBắt buộc
*_concept_idStandard Concept ID (SNOMED, RxNorm...)✅
*_source_valueGiá trị gốc dạng textKhông
*_source_concept_idConcept ID gốc (nếu có trong vocabulary)Không

2.5. Domain-Based Routing (Định tuyến theo miền)

Mỗi concept thuộc một Domain — và Domain quyết định bản ghi nằm ở bảng nào:

  Concept "Type 2 diabetes"
    → Domain = "Condition"
    → Lưu vào CONDITION_OCCURRENCE

  Concept "Metformin 500mg"
    → Domain = "Drug"
    → Lưu vào DRUG_EXPOSURE

  Concept "Hemoglobin A1c"
    → Domain = "Measurement"
    → Lưu vào MEASUREMENT

  Concept "Smoking status"
    → Domain = "Observation"
    → Lưu vào OBSERVATION

Lưu ý quan trọng: Đôi khi mã nguồn ở domain này nhưng Standard Concept ở domain khác. Ví dụ: ICD-10 mã Z87.891 (History of nicotine dependence) thuộc Condition nhưng Standard Concept map sang Observation domain → lưu vào bảng OBSERVATION, không phải CONDITION_OCCURRENCE.


3. Entity-Relationship Diagram tổng quát

┌──────────────────────────────────────────────────────────────────────────┐
│                           HEALTH SYSTEM                                  │
│                                                                          │
│  ┌──────────┐    ┌──────────────┐    ┌──────────────┐                   │
│  │ LOCATION │←───│  CARE_SITE   │───→│   PROVIDER   │                   │
│  │          │    │              │    │              │                   │
│  └────┬─────┘    └──────────────┘    └──────┬───────┘                   │
│       │                                      │                          │
└───────┼──────────────────────────────────────┼──────────────────────────┘
        │                                      │
        ↓                                      ↓
┌─────────────────────────────────────────────────────────────────────────┐
│                           CLINICAL DATA                                  │
│                                                                          │
│  ┌───────────┐       ┌───────────────────┐                              │
│  │  PERSON   │←──────│ OBSERVATION_PERIOD│                              │
│  │           │       └───────────────────┘                              │
│  └─────┬─────┘                                                          │
│        │                                                                 │
│        ├──→ VISIT_OCCURRENCE ──→ VISIT_DETAIL                           │
│        │       │                                                         │
│        │       ├──→ CONDITION_OCCURRENCE                                 │
│        │       ├──→ DRUG_EXPOSURE                                        │
│        │       ├──→ PROCEDURE_OCCURRENCE                                 │
│        │       ├──→ MEASUREMENT                                          │
│        │       ├──→ OBSERVATION                                          │
│        │       ├──→ DEVICE_EXPOSURE                                      │
│        │       ├──→ NOTE ──→ NOTE_NLP                                   │
│        │       └──→ SPECIMEN                                             │
│        │                                                                 │
│        ├──→ DEATH                                                        │
│        ├──→ EPISODE ──→ EPISODE_EVENT                                   │
│        └──→ FACT_RELATIONSHIP                                           │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘
        │
        ↓
┌─────────────────────────────────────────────────────────────────────────┐
│  HEALTH ECONOMICS                                                        │
│  PAYER_PLAN_PERIOD ←── PERSON                                           │
│  COST ←── (bất kỳ clinical event nào)                                   │
└─────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────┐
│  DERIVED ELEMENTS                                                        │
│  DRUG_ERA, DOSE_ERA, CONDITION_ERA ←── tính toán từ clinical data       │
└─────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────┐
│  STANDARDIZED VOCABULARIES                                               │
│  CONCEPT ←→ CONCEPT_RELATIONSHIP ←→ CONCEPT_ANCESTOR                   │
│  VOCABULARY, DOMAIN, CONCEPT_CLASS, RELATIONSHIP                        │
│  SOURCE_TO_CONCEPT_MAP, DRUG_STRENGTH, CONCEPT_SYNONYM                 │
│  COHORT, COHORT_DEFINITION                                              │
└─────────────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────────────┐
│  METADATA: CDM_SOURCE, METADATA                                         │
└─────────────────────────────────────────────────────────────────────────┘

4. Conventions quan trọng trong CDM 5.4

4.1. Các trường chung (Common Fields)

Hầu hết bảng clinical đều có các trường sau:

TrườngKiểuMô tả
*_id (PK)INTEGERKhóa chính, unique
person_id (FK)INTEGERLiên kết đến PERSON
*_concept_idINTEGERStandard Concept ID
*_dateDATENgày sự kiện
*_datetimeDATETIMENgày giờ sự kiện (nếu có)
*_type_concept_idINTEGERNguồn gốc dữ liệu (EHR, claim, self-reported...)
*_source_valueVARCHAR(50)Giá trị gốc từ hệ thống nguồn
*_source_concept_idINTEGERConcept ID gốc
visit_occurrence_id (FK)INTEGERLiên kết đến VISIT_OCCURRENCE
provider_id (FK)INTEGERBác sĩ/nhân viên

4.2. Quy ước về Concept ID

Giá trịÝ nghĩa
0Không map được (No matching concept)
> 0Concept hợp lệ trong bảng CONCEPT
NULLKhông áp dụng hoặc không có thông tin

4.3. Quy ước về Date/Datetime

  • *_date (DATE): Bắt buộc — ngày xảy ra sự kiện
  • *_datetime (DATETIME): Tùy chọn — nếu không có giờ, đặt *_datetime = *_date + 00:00:00
  • Ngày kết thúc: nếu sự kiện 1 ngày, end_date = start_date

4.4. Quy ước về Type Concept

*_type_concept_id cho biết nguồn gốc của bản ghi:

type_concept_idÝ nghĩa
32817EHR (Electronic Health Record)
32810Claim (Bảo hiểm)
32856Lab test (Xét nghiệm)
32883Survey (Khảo sát)
32865Patient self-report

5. CDM 5.4 — Điểm mới so với 5.3

Thay đổiChi tiết
Bảng EPISODEGhi nhận disease episodes (VD: cancer treatment line 1, 2, 3)
Bảng EPISODE_EVENTLiên kết clinical events với episodes
measurement_event_idCho phép Measurement liên kết đến event gốc (VD: Measurement từ Specimen nào)
observation_event_idTương tự cho Observation
production_id (DEVICE_EXPOSURE)Unique Device Identifier (UDI)
quantity (DEVICE_EXPOSURE)Số lượng thiết bị

6. Bắt đầu từ đâu?

Lộ trình đọc series này:

Bài 1-3: Nền tảng (bạn đang ở đây)
    ↓
Bài 4-6: PERSON → OBSERVATION_PERIOD → VISIT
    ↓        (xây nền móng)
Bài 7-10: CONDITION → DRUG → PROCEDURE → MEASUREMENT
    ↓        (sự kiện lâm sàng chính)
Bài 11-13: OBSERVATION → DEVICE/NOTE/SPECIMEN → DEATH/EPISODE
    ↓        (bảng mở rộng)
Bài 14-16: Vocabulary system
    ↓        (hiểu concept sâu hơn)
Bài 17-19: Health System, Economics, Era tables
    ↓        (hạ tầng & tổng hợp)
Bài 20: Tổng kết & bước tiếp theo

Tổng kết

Trong bài này, bạn đã nắm được:

  1. 37 bảng trong OMOP CDM 5.4, chia thành 6 nhóm
  2. 5 nguyên lý thiết kế: Person-centric, Event-based, Concept-driven, Source preservation, Domain routing
  3. ER Diagram tổng quát — cách các bảng liên kết với nhau
  4. Conventions chung — common fields, concept ID rules, date/datetime, type concepts
  5. Điểm mới CDM 5.4 — EPISODE, event linkage, device tracking

Bài tiếp theo: Chúng ta sẽ đi sâu vào Concept — trái tim của OMOP CDM — hiểu Standard vs Source Concept, Domain, Vocabulary, và cách tra cứu trên Athena.


Tài liệu tham khảo