@xdev-asia/xdev-knowledge-mcp 1.0.55 → 1.0.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/01-phan-1-tong-quan-nen-tang/lessons/bai-1-omop-cdm-la-gi-tai-sao-can-chuan-hoa-du-lieu-y-te.md +339 -0
  2. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/01-phan-1-tong-quan-nen-tang/lessons/bai-2-kien-truc-tong-the-omop-cdm-5-4-nhom-bang-nguyen-ly-thiet-ke.md +440 -0
  3. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/01-phan-1-tong-quan-nen-tang/lessons/bai-3-hieu-concept-trai-tim-cua-omop-cdm.md +441 -0
  4. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/02-phan-2-person-visit-nen-tang/lessons/bai-4-bang-person-quan-ly-danh-tinh-benh-nhan.md +323 -0
  5. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/02-phan-2-person-visit-nen-tang/lessons/bai-5-observation-period-khoang-thoi-gian-theo-doi-benh-nhan.md +308 -0
  6. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/02-phan-2-person-visit-nen-tang/lessons/bai-6-visit-occurrence-visit-detail-luot-kham-chi-tiet.md +353 -0
  7. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/03-phan-3-su-kien-lam-sang-chinh/lessons/bai-10-measurement-xet-nghiem-do-luong.md +409 -0
  8. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/03-phan-3-su-kien-lam-sang-chinh/lessons/bai-7-condition-occurrence-chan-doan-benh-ly.md +285 -0
  9. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/03-phan-3-su-kien-lam-sang-chinh/lessons/bai-8-drug-exposure-thuoc-dieu-tri.md +354 -0
  10. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/03-phan-3-su-kien-lam-sang-chinh/lessons/bai-9-procedure-occurrence-thu-thuat-phau-thuat.md +291 -0
  11. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/04-phan-4-bang-lam-sang-mo-rong/lessons/bai-11-observation-su-kien-lam-sang-tong-hop.md +289 -0
  12. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/04-phan-4-bang-lam-sang-mo-rong/lessons/bai-12-device-exposure-specimen-note.md +313 -0
  13. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/04-phan-4-bang-lam-sang-mo-rong/lessons/bai-13-death-episode-episode-event.md +346 -0
  14. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/05-phan-5-standardized-vocabularies/lessons/bai-14-concept-vocabulary-nen-tang-tu-dien-chuan.md +298 -0
  15. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/05-phan-5-standardized-vocabularies/lessons/bai-15-concept-relationship-concept-ancestor.md +336 -0
  16. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/05-phan-5-standardized-vocabularies/lessons/bai-16-drug-strength-cac-bang-vocabulary-con-lai.md +295 -0
  17. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/06-phan-6-health-system-economics-derived/lessons/bai-17-location-care-site-provider.md +334 -0
  18. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/06-phan-6-health-system-economics-derived/lessons/bai-18-payer-plan-period-cost.md +343 -0
  19. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/06-phan-6-health-system-economics-derived/lessons/bai-19-condition-era-drug-era-dose-era.md +418 -0
  20. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/chapters/07-phan-7-metadata-cohort-tong-ket/lessons/bai-20-cdm-source-metadata-cohort-tong-ket.md +517 -0
  21. package/content/series/architecture/omop-cdm-5-4-cho-nguoi-moi-bat-dau/index.md +385 -0
  22. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/01-bai-1-gioi-thieu-vyos-va-cai-dat.md +10 -1
  23. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/02-bai-2-cau-hinh-interface-va-ip-co-ban.md +4 -3
  24. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/03-bai-3-nat-source-nat-destination-nat-va-masquerade.md +1 -0
  25. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/04-bai-4-firewall-co-ban-rules-chains-va-groups.md +2 -2
  26. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/05-bai-5-zone-based-firewall.md +2 -2
  27. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/06-bai-6-dhcp-server-dns-forwarding-va-ntp.md +4 -1
  28. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/07-bai-7-vlans-bonding-va-bridge.md +2 -0
  29. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/08-bai-8-static-routing-va-policy-based-routing.md +2 -0
  30. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/09-bai-9-dynamic-routing-ospf.md +2 -0
  31. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/10-bai-10-dynamic-routing-bgp.md +2 -0
  32. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/11-bai-11-vpn-wireguard-va-openvpn.md +2 -0
  33. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/12-bai-12-vpn-ipsec-site-to-site.md +2 -0
  34. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/13-bai-13-high-availability-vrrp-va-conntrack-sync.md +2 -0
  35. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/14-bai-14-wan-load-balancing-qos-va-monitoring.md +2 -0
  36. package/content/series/devsecops/vyos-tu-co-ban-den-nang-cao/chapters/01-vyos-tu-co-ban-den-nang-cao/lessons/15-bai-15-containers-automation-va-production-best-practices.md +2 -0
  37. package/package.json +1 -1
@@ -0,0 +1,346 @@
1
+ ---
2
+ id: 019f1a00-a113-7b01-e001-omopcdm54013
3
+ title: "Bài 13: DEATH, EPISODE & EPISODE_EVENT"
4
+ slug: bai-13-death-episode-episode-event
5
+ description: >-
6
+ Ghi nhận tử vong (DEATH), quá trình bệnh lý dài hạn
7
+ (EPISODE — mới CDM 5.4) như điều trị ung thư, và
8
+ liên kết event trong episode (EPISODE_EVENT).
9
+ duration_minutes: 50
10
+ is_free: true
11
+ video_url: null
12
+ sort_order: 13
13
+ section_title: "Phần 4: Bảng lâm sàng mở rộng"
14
+ course:
15
+ id: 019f1a00-a100-7b01-e001-omopcdm54001
16
+ title: "OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z"
17
+ slug: omop-cdm-5-4-cho-nguoi-moi-bat-dau
18
+ ---
19
+
20
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 340" style="max-width: 100%; height: auto; border-radius: 12px; margin-bottom: 1.5rem;">
21
+ <defs>
22
+ <linearGradient id="bg-omop13" x1="0%" y1="0%" x2="100%" y2="100%">
23
+ <stop offset="0%" style="stop-color:#0c1222"/>
24
+ <stop offset="100%" style="stop-color:#1e293b"/>
25
+ </linearGradient>
26
+ </defs>
27
+ <rect width="1200" height="340" rx="12" fill="url(#bg-omop13)"/>
28
+ <g>
29
+ <circle cx="700" cy="85" r="20" fill="#818cf8" opacity="0.12"/>
30
+ <circle cx="780" cy="115" r="28" fill="#818cf8" opacity="0.08"/>
31
+ <circle cx="870" cy="95" r="24" fill="#818cf8" opacity="0.06"/>
32
+ <line x1="640" y1="150" x2="1100" y2="230" stroke="#818cf8" stroke-width="0.5" opacity="0.1"/>
33
+ </g>
34
+ <rect x="60" y="50" width="4" height="60" rx="2" fill="#818cf8"/>
35
+ <rect x="80" y="50" width="130" height="28" rx="14" fill="#818cf8" opacity="0.15"/>
36
+ <text x="92" y="69" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#818cf8">🏗️ Kiến trúc — Bài 13</text>
37
+ <text x="60" y="140" font-family="system-ui,-apple-system,sans-serif" font-size="34" font-weight="700" fill="#f1f5f9">
38
+ <tspan x="60" dy="0">DEATH, EPISODE</tspan>
39
+ <tspan x="60" dy="42">&amp; EPISODE_EVENT</tspan>
40
+ </text>
41
+ <text x="60" y="244" font-family="system-ui,-apple-system,sans-serif" font-size="15" fill="#94a3b8" opacity="0.8">OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z</text>
42
+ <text x="60" y="268" font-family="system-ui,-apple-system,sans-serif" font-size="13" fill="#64748b" opacity="0.6">Phần 4: Bảng lâm sàng mở rộng</text>
43
+ <text x="1140" y="320" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#475569" text-anchor="end" opacity="0.4">xdev.asia</text>
44
+ </svg>
45
+
46
+ ## Giới thiệu
47
+
48
+ Ba bảng cuối cùng trong nhóm Clinical Data: **DEATH** ghi nhận sự kiện tử vong, **EPISODE** (mới trong CDM 5.4) ghi nhận quá trình bệnh lý/điều trị dài hạn, và **EPISODE_EVENT** liên kết các sự kiện thuộc một episode. EPISODE là addition đáng chú ý nhất của CDM 5.4, đặc biệt quan trọng cho nghiên cứu ung thư.
49
+
50
+ ---
51
+
52
+ ## 1. DEATH — Ghi nhận tử vong
53
+
54
+ ### 1.1. Cấu trúc bảng
55
+
56
+ | Cột | Kiểu | Bắt buộc | Mô tả |
57
+ |-----|------|----------|-------|
58
+ | `person_id` | INTEGER | ✅ PK/FK | Bệnh nhân (1 record/BN) |
59
+ | `death_date` | DATE | ✅ | Ngày tử vong |
60
+ | `death_datetime` | DATETIME | | Ngày giờ tử vong |
61
+ | `death_type_concept_id` | INTEGER | ✅ | Nguồn dữ liệu |
62
+ | `cause_concept_id` | INTEGER | | Nguyên nhân tử vong (SNOMED) |
63
+ | `cause_source_value` | VARCHAR(50) | | ICD gốc |
64
+ | `cause_source_concept_id` | INTEGER | | Concept gốc |
65
+
66
+ ### 1.2. Đặc điểm quan trọng
67
+
68
+ - **1 record duy nhất** per person — nếu có nhiều nguồn, chọn đáng tin nhất
69
+ - **person_id** vừa là PK vừa là FK → không có death_id riêng
70
+ - **cause_concept_id**: dùng SNOMED cho nguyên nhân chính
71
+
72
+ ### 1.3. death_type_concept_id
73
+
74
+ | Concept ID | Nguồn | Mô tả |
75
+ |-----------|------|-------|
76
+ | 32817 | EHR | Ghi nhận từ HIS |
77
+ | 32810 | Claim | Dữ liệu BHXH |
78
+ | 32885 | Death certificate | Giấy chứng tử |
79
+ | 32886 | National Death Index | Sổ bộ quốc gia |
80
+
81
+ ### 1.4. Ví dụ
82
+
83
+ ```sql
84
+ -- BN tử vong do nhồi máu cơ tim cấp
85
+ INSERT INTO death (
86
+ person_id, death_date,
87
+ death_type_concept_id,
88
+ cause_concept_id,
89
+ cause_source_value,
90
+ cause_source_concept_id
91
+ ) VALUES (
92
+ 100001, '2024-06-20',
93
+ 32885, -- Death certificate
94
+ 4329847, -- SNOMED: AMI
95
+ 'I21.9', -- ICD-10
96
+ 45572161 -- ICD10CM concept
97
+ );
98
+ ```
99
+
100
+ ### 1.5. SQL phân tích
101
+
102
+ ```sql
103
+ -- Top 10 nguyên nhân tử vong
104
+ SELECT
105
+ c.concept_name AS cause_of_death,
106
+ COUNT(*) AS death_count,
107
+ ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER(), 1) AS pct
108
+ FROM death d
109
+ JOIN concept c ON d.cause_concept_id = c.concept_id
110
+ WHERE d.cause_concept_id != 0
111
+ GROUP BY c.concept_name
112
+ ORDER BY death_count DESC
113
+ LIMIT 10;
114
+
115
+ -- Tỉ lệ tử vong sau nhập viện ICU
116
+ SELECT
117
+ ROUND(
118
+ COUNT(DISTINCT d.person_id) * 100.0 /
119
+ NULLIF(COUNT(DISTINCT v.person_id), 0), 1
120
+ ) AS mortality_rate_pct
121
+ FROM visit_occurrence v
122
+ LEFT JOIN death d ON v.person_id = d.person_id
123
+ AND d.death_date BETWEEN v.visit_start_date
124
+ AND v.visit_start_date + INTERVAL '30 days'
125
+ WHERE v.visit_concept_id = 32037; -- ICU visit
126
+ ```
127
+
128
+ ---
129
+
130
+ ## 2. EPISODE — Quá trình bệnh lý (CDM 5.4 mới)
131
+
132
+ ### 2.1. Tại sao cần EPISODE?
133
+
134
+ Trước CDM 5.4, không có cách thể hiện "quá trình điều trị ung thư" — các sự kiện (chẩn đoán, hóa trị, xạ trị, phẫu thuật) nằm rải rác ở nhiều bảng. EPISODE gom chúng lại thành một "câu chuyện" hoàn chỉnh.
135
+
136
+ ```
137
+ Trước CDM 5.4:
138
+
139
+ CONDITION: Ung thư phổi ─────────── (rời rạc)
140
+ PROCEDURE: Sinh thiết phổi ────────── (rời rạc)
141
+ DRUG: Cisplatin cycle 1 ──────── (rời rạc)
142
+ DRUG: Cisplatin cycle 2 ──────── (rời rạc)
143
+ PROCEDURE: Phẫu thuật cắt thùy phổi ─ (rời rạc)
144
+
145
+ Sau CDM 5.4:
146
+
147
+ EPISODE: "Điều trị ung thư phổi giai đoạn 3"
148
+
149
+ ├── EPISODE_EVENT → CONDITION (chẩn đoán)
150
+ ├── EPISODE_EVENT → PROCEDURE (sinh thiết)
151
+ ├── EPISODE_EVENT → DRUG (hóa trị cycle 1)
152
+ ├── EPISODE_EVENT → DRUG (hóa trị cycle 2)
153
+ └── EPISODE_EVENT → PROCEDURE (phẫu thuật)
154
+ ```
155
+
156
+ ### 2.2. Cấu trúc bảng EPISODE
157
+
158
+ | Cột | Kiểu | Bắt buộc | Mô tả |
159
+ |-----|------|----------|-------|
160
+ | `episode_id` | BIGINT | ✅ PK | ID duy nhất |
161
+ | `person_id` | INTEGER | ✅ FK | Bệnh nhân |
162
+ | `episode_concept_id` | INTEGER | ✅ | Loại episode |
163
+ | `episode_start_date` | DATE | ✅ | Ngày bắt đầu |
164
+ | `episode_start_datetime` | DATETIME | | |
165
+ | `episode_end_date` | DATE | | Ngày kết thúc |
166
+ | `episode_end_datetime` | DATETIME | | |
167
+ | `episode_parent_id` | BIGINT | | Episode cha (phân cấp) |
168
+ | `episode_number` | INTEGER | | Số thứ tự |
169
+ | `episode_object_concept_id` | INTEGER | ✅ | Đối tượng episode |
170
+ | `episode_type_concept_id` | INTEGER | ✅ | Nguồn dữ liệu |
171
+ | `episode_source_value` | VARCHAR(50) | | Mã gốc |
172
+ | `episode_source_concept_id` | INTEGER | | |
173
+
174
+ ### 2.3. episode_concept_id — Loại Episode
175
+
176
+ | Concept ID | Episode Type | Ví dụ |
177
+ |-----------|-------------|-------|
178
+ | 32528 | Disease first occurrence | Ung thư phổi lần đầu |
179
+ | 32529 | Disease recurrence | Ung thư tái phát |
180
+ | 32531 | Treatment regimen | Phác đồ Cisplatin-Etoposide |
181
+ | 32532 | Treatment cycle | Cycle 1, Cycle 2... |
182
+
183
+ ### 2.4. Ví dụ: Điều trị ung thư phổi
184
+
185
+ ```sql
186
+ -- Episode cha: Bệnh ung thư phổi
187
+ INSERT INTO episode (
188
+ episode_id, person_id,
189
+ episode_concept_id,
190
+ episode_start_date, episode_end_date,
191
+ episode_parent_id,
192
+ episode_object_concept_id,
193
+ episode_type_concept_id
194
+ ) VALUES (
195
+ 200001, 100001,
196
+ 32528, -- Disease first occurrence
197
+ '2024-01-15', NULL, -- Chưa kết thúc
198
+ NULL, -- Không có cha
199
+ 4311499, -- SNOMED: Lung cancer
200
+ 32817 -- EHR
201
+ );
202
+
203
+ -- Episode con: Phác đồ hóa trị
204
+ INSERT INTO episode (
205
+ episode_id, person_id,
206
+ episode_concept_id,
207
+ episode_start_date, episode_end_date,
208
+ episode_parent_id,
209
+ episode_number,
210
+ episode_object_concept_id,
211
+ episode_type_concept_id
212
+ ) VALUES (
213
+ 200002, 100001,
214
+ 32531, -- Treatment regimen
215
+ '2024-02-01', '2024-06-30',
216
+ 200001, -- Thuộc episode ung thư phổi
217
+ 1,
218
+ 35804410, -- Cisplatin regimen
219
+ 32817
220
+ );
221
+
222
+ -- Episode con: Cycle 1
223
+ INSERT INTO episode (
224
+ episode_id, person_id,
225
+ episode_concept_id,
226
+ episode_start_date, episode_end_date,
227
+ episode_parent_id,
228
+ episode_number,
229
+ episode_object_concept_id,
230
+ episode_type_concept_id
231
+ ) VALUES (
232
+ 200003, 100001,
233
+ 32532, -- Treatment cycle
234
+ '2024-02-01', '2024-02-21',
235
+ 200002, -- Thuộc phác đồ
236
+ 1, -- Cycle 1
237
+ 35804410,
238
+ 32817
239
+ );
240
+ ```
241
+
242
+ ---
243
+
244
+ ## 3. EPISODE_EVENT — Liên kết sự kiện
245
+
246
+ ### 3.1. Cấu trúc bảng
247
+
248
+ | Cột | Kiểu | Bắt buộc | Mô tả |
249
+ |-----|------|----------|-------|
250
+ | `episode_id` | BIGINT | ✅ FK | Episode |
251
+ | `event_id` | BIGINT | ✅ | ID của sự kiện |
252
+ | `episode_event_field_concept_id` | INTEGER | ✅ | Bảng chứa event |
253
+
254
+ ### 3.2. episode_event_field_concept_id
255
+
256
+ | Concept ID | Bảng sự kiện |
257
+ |-----------|-------------|
258
+ | 1147127 | condition_occurrence.condition_occurrence_id |
259
+ | 1147094 | drug_exposure.drug_exposure_id |
260
+ | 1147082 | procedure_occurrence.procedure_occurrence_id |
261
+ | 1147138 | measurement.measurement_id |
262
+ | 1147165 | device_exposure.device_exposure_id |
263
+
264
+ ### 3.3. Ví dụ: Gắn events vào Cycle 1
265
+
266
+ ```sql
267
+ -- Chẩn đoán ung thư → Episode chẩn đoán
268
+ INSERT INTO episode_event VALUES (
269
+ 200001, -- Episode: lung cancer
270
+ 70010, -- condition_occurrence_id
271
+ 1147127 -- condition_occurrence table
272
+ );
273
+
274
+ -- Hóa trị Cisplatin → Episode Cycle 1
275
+ INSERT INTO episode_event VALUES (
276
+ 200003, -- Episode: Cycle 1
277
+ 80010, -- drug_exposure_id (Cisplatin)
278
+ 1147094 -- drug_exposure table
279
+ );
280
+
281
+ -- XN máu trước hóa trị → Episode Cycle 1
282
+ INSERT INTO episode_event VALUES (
283
+ 200003,
284
+ 110020, -- measurement_id (CBC)
285
+ 1147138 -- measurement table
286
+ );
287
+ ```
288
+
289
+ ---
290
+
291
+ ## 4. Ứng dụng EPISODE trong nghiên cứu
292
+
293
+ ```sql
294
+ -- Tìm BN ung thư phổi có >= 4 cycle hóa trị
295
+ SELECT
296
+ e_disease.person_id,
297
+ c_disease.concept_name AS cancer_type,
298
+ COUNT(e_cycle.episode_id) AS total_cycles
299
+ FROM episode e_disease
300
+ JOIN concept c_disease
301
+ ON e_disease.episode_object_concept_id = c_disease.concept_id
302
+ JOIN episode e_regimen
303
+ ON e_disease.episode_id = e_regimen.episode_parent_id
304
+ AND e_regimen.episode_concept_id = 32531 -- Treatment regimen
305
+ JOIN episode e_cycle
306
+ ON e_regimen.episode_id = e_cycle.episode_parent_id
307
+ AND e_cycle.episode_concept_id = 32532 -- Treatment cycle
308
+ WHERE e_disease.episode_concept_id = 32528 -- First occurrence
309
+ AND c_disease.concept_id = 4311499 -- Lung cancer
310
+ GROUP BY e_disease.person_id, c_disease.concept_name
311
+ HAVING COUNT(e_cycle.episode_id) >= 4;
312
+
313
+ -- Timeline điều trị 1 BN
314
+ SELECT
315
+ e.episode_number,
316
+ ec.concept_name AS episode_type,
317
+ e.episode_start_date,
318
+ e.episode_end_date,
319
+ oc.concept_name AS episode_object
320
+ FROM episode e
321
+ JOIN concept ec ON e.episode_concept_id = ec.concept_id
322
+ JOIN concept oc ON e.episode_object_concept_id = oc.concept_id
323
+ WHERE e.person_id = 100001
324
+ ORDER BY e.episode_start_date, e.episode_number;
325
+ ```
326
+
327
+ ---
328
+
329
+ ## Tổng kết
330
+
331
+ 1. **DEATH**: 1 record/person, nguyên nhân tử vong dùng SNOMED
332
+ 2. **EPISODE** (CDM 5.4 mới): quá trình bệnh lý/điều trị, hỗ trợ phân cấp cha-con
333
+ 3. **EPISODE_EVENT**: liên kết events từ nhiều bảng vào episode
334
+ 4. EPISODE thiết kế chủ yếu cho **oncology** nhưng áp dụng được cho mọi bệnh mạn tính
335
+ 5. Cấu trúc: Disease → Treatment Regimen → Treatment Cycle → Events
336
+
337
+ **Bài tiếp theo:** Bắt đầu Phần 5 — Standardized Vocabularies, hệ thống từ điển chuẩn hóa.
338
+
339
+ ---
340
+
341
+ ## Tài liệu tham khảo
342
+
343
+ - [OMOP CDM 5.4 — DEATH](https://ohdsi.github.io/CommonDataModel/cdm54.html#DEATH)
344
+ - [OMOP CDM 5.4 — EPISODE](https://ohdsi.github.io/CommonDataModel/cdm54.html#EPISODE)
345
+ - [OMOP CDM 5.4 — EPISODE_EVENT](https://ohdsi.github.io/CommonDataModel/cdm54.html#EPISODE_EVENT)
346
+ - [OHDSI Oncology WG](https://www.ohdsi.org/web/wiki/doku.php?id=documentation:next_cdm:oncology)
@@ -0,0 +1,298 @@
1
+ ---
2
+ id: 019f1a00-a114-7b01-e001-omopcdm54014
3
+ title: "Bài 14: CONCEPT & VOCABULARY — Nền tảng từ điển chuẩn"
4
+ slug: bai-14-concept-vocabulary-nen-tang-tu-dien-chuan
5
+ description: >-
6
+ Hai bảng trung tâm của hệ thống Vocabulary: CONCEPT chứa
7
+ mọi khái niệm y tế, VOCABULARY quản lý nguồn gốc. Tìm hiểu
8
+ standard_concept, domain_id, concept_class_id, vocabulary_id
9
+ và cách tra cứu trên Athena.
10
+ duration_minutes: 60
11
+ is_free: true
12
+ video_url: null
13
+ sort_order: 14
14
+ section_title: "Phần 5: Standardized Vocabularies"
15
+ course:
16
+ id: 019f1a00-a100-7b01-e001-omopcdm54001
17
+ title: "OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z"
18
+ slug: omop-cdm-5-4-cho-nguoi-moi-bat-dau
19
+ ---
20
+
21
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 340" style="max-width: 100%; height: auto; border-radius: 12px; margin-bottom: 1.5rem;">
22
+ <defs>
23
+ <linearGradient id="bg-omop14" x1="0%" y1="0%" x2="100%" y2="100%">
24
+ <stop offset="0%" style="stop-color:#0c1222"/>
25
+ <stop offset="100%" style="stop-color:#1e293b"/>
26
+ </linearGradient>
27
+ </defs>
28
+ <rect width="1200" height="340" rx="12" fill="url(#bg-omop14)"/>
29
+ <g>
30
+ <circle cx="690" cy="88" r="22" fill="#818cf8" opacity="0.11"/>
31
+ <circle cx="770" cy="108" r="30" fill="#818cf8" opacity="0.08"/>
32
+ <circle cx="850" cy="130" r="26" fill="#818cf8" opacity="0.07"/>
33
+ <line x1="630" y1="160" x2="1100" y2="240" stroke="#818cf8" stroke-width="0.5" opacity="0.1"/>
34
+ </g>
35
+ <rect x="60" y="50" width="4" height="60" rx="2" fill="#818cf8"/>
36
+ <rect x="80" y="50" width="130" height="28" rx="14" fill="#818cf8" opacity="0.15"/>
37
+ <text x="92" y="69" font-family="system-ui,-apple-system,sans-serif" font-size="13" font-weight="600" fill="#818cf8">🏗️ Kiến trúc — Bài 14</text>
38
+ <text x="60" y="140" font-family="system-ui,-apple-system,sans-serif" font-size="34" font-weight="700" fill="#f1f5f9">
39
+ <tspan x="60" dy="0">CONCEPT &amp; VOCABULARY</tspan>
40
+ <tspan x="60" dy="42">Nền tảng từ điển chuẩn</tspan>
41
+ </text>
42
+ <text x="60" y="244" font-family="system-ui,-apple-system,sans-serif" font-size="15" fill="#94a3b8" opacity="0.8">OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z</text>
43
+ <text x="60" y="268" font-family="system-ui,-apple-system,sans-serif" font-size="13" fill="#64748b" opacity="0.6">Phần 5: Standardized Vocabularies</text>
44
+ <text x="1140" y="320" font-family="system-ui,-apple-system,sans-serif" font-size="12" fill="#475569" text-anchor="end" opacity="0.4">xdev.asia</text>
45
+ </svg>
46
+
47
+ ![Hệ sinh thái Vocabulary — CONCEPT, VOCABULARY, RELATIONSHIP, ANCESTOR](/storage/uploads/2026/04/omop-cdm-bai14-vocabulary-ecosystem.png)
48
+
49
+ ## Giới thiệu
50
+
51
+ 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.
52
+
53
+ ---
54
+
55
+ ## 1. Bảng CONCEPT
56
+
57
+ ### 1.1. Cấu trúc
58
+
59
+ | Cột | Kiểu | Mô tả | Ví dụ |
60
+ |-----|------|-------|-------|
61
+ | `concept_id` | INTEGER | PK — ID duy nhất toàn cục | 201826 |
62
+ | `concept_name` | VARCHAR(255) | Tên concept | "Type 2 diabetes mellitus" |
63
+ | `domain_id` | VARCHAR(20) | Domain (bảng nào) | "Condition" |
64
+ | `vocabulary_id` | VARCHAR(20) | FK → VOCABULARY | "SNOMED" |
65
+ | `concept_class_id` | VARCHAR(20) | Phân loại trong vocab | "Clinical Finding" |
66
+ | `standard_concept` | VARCHAR(1) | S=Standard, C=Classification, NULL | "S" |
67
+ | `concept_code` | VARCHAR(50) | Mã gốc trong vocabulary | "44054006" |
68
+ | `valid_start_date` | DATE | Ngày bắt đầu có hiệu lực | 2002-01-31 |
69
+ | `valid_end_date` | DATE | Ngày hết hiệu lực | 2099-12-31 |
70
+ | `invalid_reason` | VARCHAR(1) | NULL=valid, U=updated, D=deleted | NULL |
71
+
72
+ ### 1.2. standard_concept — Ba loại Concept
73
+
74
+ ```
75
+ ┌─────────────────────────────────────────────────────┐
76
+ │ standard_concept = 'S' (Standard) │
77
+ │ → Concept "chính thống" dùng trong *_concept_id │
78
+ │ → VD: SNOMED 201826 "Type 2 diabetes mellitus" │
79
+ │ → Dùng cho condition_concept_id │
80
+ └──────────────────────┬──────────────────────────────┘
81
+ │ Maps to (nguồn → đích)
82
+ ┌──────────────────────┴──────────────────────────────┐
83
+ │ standard_concept = NULL (Non-standard / Source) │
84
+ │ → Concept nguồn từ ICD, CPT4, ATC... │
85
+ │ → VD: ICD10CM 45591837 "E11 - Type 2 DM" │
86
+ │ → Dùng cho *_source_concept_id │
87
+ └─────────────────────────────────────────────────────┘
88
+
89
+ ┌─────────────────────────────────────────────────────┐
90
+ │ standard_concept = 'C' (Classification) │
91
+ │ → Concept dùng cho phân cấp / ancestor │
92
+ │ → VD: MedDRA PT "Diabetes mellitus" │
93
+ └─────────────────────────────────────────────────────┘
94
+ ```
95
+
96
+ ### 1.3. domain_id — Xác định bảng đích
97
+
98
+ | domain_id | Bảng CDM | Ví dụ |
99
+ |-----------|---------|-------|
100
+ | Condition | CONDITION_OCCURRENCE | Bệnh, triệu chứng |
101
+ | Drug | DRUG_EXPOSURE | Thuốc |
102
+ | Procedure | PROCEDURE_OCCURRENCE | Thủ thuật |
103
+ | Measurement | MEASUREMENT | Xét nghiệm |
104
+ | Observation | OBSERVATION | Ghi nhận |
105
+ | Device | DEVICE_EXPOSURE | Thiết bị |
106
+ | Spec Anatomic Site | SPECIMEN | Vị trí lấy mẫu |
107
+ | Visit | VISIT_OCCURRENCE | Loại visit |
108
+ | Type Concept | *_type_concept_id | Nguồn dữ liệu |
109
+ | Gender | PERSON | Giới tính |
110
+ | Race | PERSON | Chủng tộc |
111
+ | Unit | MEASUREMENT.unit | Đơn vị |
112
+ | Route | DRUG_EXPOSURE.route | Đường dùng |
113
+
114
+ ---
115
+
116
+ ## 2. Bảng VOCABULARY
117
+
118
+ ### 2.1. Cấu trúc
119
+
120
+ | Cột | Kiểu | Mô tả |
121
+ |-----|------|-------|
122
+ | `vocabulary_id` | VARCHAR(20) | PK — ID vocabulary |
123
+ | `vocabulary_name` | VARCHAR(255) | Tên đầy đủ |
124
+ | `vocabulary_reference` | VARCHAR(255) | URL tham chiếu |
125
+ | `vocabulary_version` | VARCHAR(255) | Phiên bản |
126
+ | `vocabulary_concept_id` | INTEGER | FK → Concept đại diện |
127
+
128
+ ### 2.2. Vocabulary phổ biến
129
+
130
+ | vocabulary_id | Tên | Domain chính | Vai trò |
131
+ |--------------|-----|-------------|---------|
132
+ | **SNOMED** | SNOMED-CT | Condition, Procedure, Observation | Standard cho lâm sàng |
133
+ | **RxNorm** | RxNorm | Drug | Standard cho thuốc |
134
+ | **LOINC** | LOINC | Measurement | Standard cho xét nghiệm |
135
+ | **ICD10CM** | ICD-10-CM | Condition | Source concept chẩn đoán |
136
+ | **ICD10PCS** | ICD-10-PCS | Procedure | Source concept thủ thuật |
137
+ | **CPT4** | CPT-4 | Procedure, Measurement | Source billing code |
138
+ | **ATC** | ATC | Drug | Classification thuốc |
139
+ | **UCUM** | UCUM | Unit | Đơn vị đo lường |
140
+ | **Gender** | OMOP Gender | Gender | Giới tính |
141
+ | **Race** | Race | Race | Chủng tộc |
142
+ | **CVX** | Vaccines | Drug | Vaccine codes |
143
+
144
+ ---
145
+
146
+ ## 3. Tra cứu Concept trên Athena
147
+
148
+ ### 3.1. Bước tra cứu
149
+
150
+ ```
151
+ 1. Vào athena.ohdsi.org
152
+ 2. Gõ từ khóa: "Type 2 diabetes"
153
+ 3. Filter:
154
+ - Standard Concept: Standard ✓
155
+ - Domain: Condition ✓
156
+ - Vocabulary: SNOMED ✓
157
+ 4. Kết quả:
158
+ concept_id: 201826
159
+ concept_name: Type 2 diabetes mellitus
160
+ vocabulary_id: SNOMED
161
+ concept_code: 44054006
162
+ standard_concept: S
163
+ domain_id: Condition
164
+ ```
165
+
166
+ ### 3.2. SQL tra cứu
167
+
168
+ ```sql
169
+ -- Tìm Standard Concept cho "tiểu đường type 2"
170
+ SELECT concept_id, concept_name, vocabulary_id,
171
+ domain_id, standard_concept, concept_code
172
+ FROM concept
173
+ WHERE LOWER(concept_name) LIKE '%type 2 diabetes%'
174
+ AND standard_concept = 'S'
175
+ AND domain_id = 'Condition'
176
+ ORDER BY concept_name;
177
+
178
+ -- Tìm Source Concept (ICD-10) mapping đến Standard
179
+ SELECT
180
+ c_src.concept_id AS source_concept_id,
181
+ c_src.concept_code AS icd10_code,
182
+ c_src.concept_name AS icd10_name,
183
+ c_std.concept_id AS standard_concept_id,
184
+ c_std.concept_name AS standard_name,
185
+ c_std.vocabulary_id AS standard_vocab
186
+ FROM concept c_src
187
+ JOIN concept_relationship cr
188
+ ON c_src.concept_id = cr.concept_id_1
189
+ AND cr.relationship_id = 'Maps to'
190
+ JOIN concept c_std
191
+ ON cr.concept_id_2 = c_std.concept_id
192
+ AND c_std.standard_concept = 'S'
193
+ WHERE c_src.concept_code = 'E11'
194
+ AND c_src.vocabulary_id = 'ICD10CM';
195
+ ```
196
+
197
+ ---
198
+
199
+ ## 4. concept_class_id — Phân loại trong Vocabulary
200
+
201
+ ### 4.1. SNOMED
202
+
203
+ | concept_class_id | Ý nghĩa | Ví dụ |
204
+ |-----------------|---------|-------|
205
+ | Clinical Finding | Bệnh, triệu chứng | Type 2 DM |
206
+ | Procedure | Thủ thuật | Appendectomy |
207
+ | Body Structure | Cấu trúc cơ thể | Liver |
208
+ | Substance | Chất | Glucose |
209
+ | Observable Entity | Quantity đo được | Blood pressure |
210
+ | Qualifier Value | Giá trị bổ sung | Severe |
211
+
212
+ ### 4.2. RxNorm
213
+
214
+ | concept_class_id | Level | Ví dụ |
215
+ |-----------------|-------|-------|
216
+ | Ingredient (IN) | Hoạt chất | Metformin |
217
+ | Clinical Drug Form (CDF) | HC + dạng bào chế | Metformin Oral Tablet |
218
+ | Clinical Drug (CD) | HC + liều + dạng | Metformin 500mg Tab |
219
+ | Branded Drug (BD) | Tên thương mại | Glucophage 500mg Tab |
220
+ | Clinical Drug Comp (CDC) | HC + liều | Metformin 500mg |
221
+ | Brand Name (BN) | Tên thương mại | Glucophage |
222
+ | Dose Form (DF) | Dạng bào chế | Oral Tablet |
223
+
224
+ ---
225
+
226
+ ## 5. Bảng DOMAIN
227
+
228
+ | Cột | Kiểu | Mô tả |
229
+ |-----|------|-------|
230
+ | `domain_id` | VARCHAR(20) | PK |
231
+ | `domain_name` | VARCHAR(255) | Tên domain |
232
+ | `domain_concept_id` | INTEGER | FK → concept |
233
+
234
+ ---
235
+
236
+ ## 6. Bảng CONCEPT_CLASS
237
+
238
+ | Cột | Kiểu | Mô tả |
239
+ |-----|------|-------|
240
+ | `concept_class_id` | VARCHAR(20) | PK |
241
+ | `concept_class_name` | VARCHAR(255) | Tên class |
242
+ | `concept_class_concept_id` | INTEGER | FK → concept |
243
+
244
+ ---
245
+
246
+ ## 7. concept_id = 0 — Ý nghĩa đặc biệt
247
+
248
+ | Concept | Ý nghĩa | Khi nào dùng |
249
+ |---------|---------|-------------|
250
+ | concept_id = 0 | "No matching concept" | Không map được |
251
+ | concept_name | "No matching concept" | |
252
+ | domain_id | NULL | |
253
+ | vocabulary_id | "None" | |
254
+
255
+ ```sql
256
+ -- Kiểm tra % records không map được
257
+ SELECT
258
+ 'condition_occurrence' AS table_name,
259
+ COUNT(*) AS total_records,
260
+ SUM(CASE WHEN condition_concept_id = 0 THEN 1 ELSE 0 END) AS unmapped,
261
+ ROUND(SUM(CASE WHEN condition_concept_id = 0 THEN 1 ELSE 0 END) * 100.0
262
+ / COUNT(*), 1) AS unmapped_pct
263
+ FROM condition_occurrence
264
+ UNION ALL
265
+ SELECT 'drug_exposure', COUNT(*),
266
+ SUM(CASE WHEN drug_concept_id = 0 THEN 1 ELSE 0 END),
267
+ ROUND(SUM(CASE WHEN drug_concept_id = 0 THEN 1 ELSE 0 END) * 100.0
268
+ / COUNT(*), 1)
269
+ FROM drug_exposure
270
+ UNION ALL
271
+ SELECT 'measurement', COUNT(*),
272
+ SUM(CASE WHEN measurement_concept_id = 0 THEN 1 ELSE 0 END),
273
+ ROUND(SUM(CASE WHEN measurement_concept_id = 0 THEN 1 ELSE 0 END) * 100.0
274
+ / COUNT(*), 1)
275
+ FROM measurement;
276
+ ```
277
+
278
+ ---
279
+
280
+ ## Tổng kết
281
+
282
+ 1. **CONCEPT**: ~10 triệu records, mỗi khái niệm y tế có 1 concept_id duy nhất
283
+ 2. **standard_concept**: S = Standard (dùng chính), C = Classification, NULL = Source
284
+ 3. **domain_id** quyết định dữ liệu lưu ở bảng CDM nào
285
+ 4. **VOCABULARY**: 70+ nguồn từ điển (SNOMED, RxNorm, LOINC, ICD-10...)
286
+ 5. **concept_id = 0**: "không map được" — dùng khi ETL không tìm được Standard Concept
287
+ 6. Tra cứu: **athena.ohdsi.org** hoặc query trực tiếp bảng CONCEPT
288
+
289
+ **Bài tiếp theo:** CONCEPT_RELATIONSHIP & CONCEPT_ANCESTOR — mối quan hệ và phân cấp giữa Concepts.
290
+
291
+ ---
292
+
293
+ ## Tài liệu tham khảo
294
+
295
+ - [OMOP CDM 5.4 — CONCEPT](https://ohdsi.github.io/CommonDataModel/cdm54.html#CONCEPT)
296
+ - [OMOP CDM 5.4 — VOCABULARY](https://ohdsi.github.io/CommonDataModel/cdm54.html#VOCABULARY)
297
+ - [Athena](https://athena.ohdsi.org/)
298
+ - [Book of OHDSI — Chapter 5: Standardized Vocabularies](https://ohdsi.github.io/TheBookOfOhdsi/StandardizedVocabularies.html)