Bảng OBSERVATION ghi nhận sự kiện lâm sàng không thuộc Condition, Drug, Procedure, hay Measurement. Tiền sử bệnh, lối sống, dị ứng, tiền sử gia đình, observation_event_id mới CDM 5.4.
Giới thiệu
OBSERVATION là bảng "catch-all" — nơi lưu trữ mọi sự kiện lâm sàng không phù hợp với Condition, Drug, Procedure, hay Measurement. Tiền sử bệnh, lối sống (hút thuốc, uống rượu), dị ứng, tiền sử gia đình, tình trạng hôn nhân — tất cả đều nằm ở đây.
1. Cấu trúc bảng
Cột
Kiểu
Bắt buộc
Mô tả
observation_id
INTEGER
✅ PK
ID duy nhất
person_id
INTEGER
✅ FK
Bệnh nhân
observation_concept_id
INTEGER
✅
Standard Concept
observation_date
DATE
✅
Ngày ghi nhận
observation_datetime
DATETIME
Ngày giờ
observation_type_concept_id
INTEGER
✅
Nguồn dữ liệu
value_as_number
FLOAT
Giá trị số
value_as_string
VARCHAR(60)
Giá trị text
value_as_concept_id
INTEGER
Giá trị danh mục
qualifier_concept_id
INTEGER
Bổ sung ngữ cảnh
unit_concept_id
INTEGER
Đơn vị
provider_id
INTEGER
FK
Provider ghi nhận
visit_occurrence_id
INTEGER
FK
Visit liên quan
visit_detail_id
INTEGER
FK
Visit detail
observation_source_value
VARCHAR(50)
Mã gốc
observation_source_concept_id
INTEGER
Concept gốc
unit_source_value
VARCHAR(50)
Đơn vị gốc
qualifier_source_value
VARCHAR(50)
Qualifier gốc
value_as_datetime
DATETIME
⭐ CDM 5.4
observation_event_id
BIGINT
⭐ CDM 5.4
obs_event_field_concept_id
INTEGER
⭐ CDM 5.4
2. Lưu gì vào OBSERVATION?
2.1. Danh sách use case
Use case
observation_concept_id
value
Ví dụ
Hút thuốc
4275495 (Tobacco smoking)
value_as_concept_id
4298794 (Current smoker)
Dị ứng
439224 (Allergy)
value_as_concept_id
Concept thuốc/thức ăn
Tiền sử gia đình
4167217 (Family history of)
value_as_concept_id
Concept bệnh
Tình trạng hôn nhân
4053609 (Marital status)
value_as_concept_id
4338692 (Married)
Nhóm máu
4041671 (Blood type)
value_as_concept_id
36308332 (Type O)
Tiền sử bệnh
4214956 (History of) + condition concept
value_as_concept_id
Thai kỳ
4299535 (Pregnancy)
value_as_concept_id
Nghề nghiệp
4019962 (Occupation)
value_as_string
"Giáo viên"
2.2. OBSERVATION vs CONDITION — Khi nào lưu ở đâu?
Dữ liệu
Bảng
Giải thích
"Bệnh nhân bị tiểu đường type 2"
CONDITION
Bệnh đang hoạt động
"Tiền sử tiểu đường gia đình"
OBSERVATION
Family history
"BN từng bị viêm gan B (đã khỏi)"
OBSERVATION
History of
"Dị ứng Penicillin"
OBSERVATION
Allergy
"BN hút thuốc 20 năm"
OBSERVATION
Lifestyle
"Sốt 38.5°C"
MEASUREMENT
Có giá trị đo
3. Ví dụ chi tiết
3.1. Hút thuốc
INSERT INTO observation (
observation_id, person_id, observation_concept_id,
observation_date, observation_type_concept_id,
value_as_concept_id,
observation_source_value
) VALUES (
130001, 100001,
4275495, -- Tobacco smoking behavior
'2024-06-15', 32817,
4298794, -- Current every day smoker
'SMOKING_STATUS'
);
3.2. Dị ứng thuốc
-- Dị ứng Penicillin
INSERT INTO observation (
observation_id, person_id, observation_concept_id,
observation_date, observation_type_concept_id,
value_as_concept_id,
qualifier_concept_id,
observation_source_value
) VALUES (
130002, 100001,
439224, -- Allergy to substance
'2024-06-15', 32817,
1713332, -- Penicillin (RxNorm ingredient)
4129512, -- Severe (qualifier)
'ALLERGY_PENICILLIN'
);
3.3. Tiền sử gia đình
-- Mẹ bị ung thư vú
INSERT INTO observation (
observation_id, person_id, observation_concept_id,
observation_date, observation_type_concept_id,
value_as_concept_id,
qualifier_concept_id,
observation_source_value
) VALUES (
130003, 100001,
4167217, -- Family history of clinical finding
'2024-06-15', 32817,
4112853, -- Malignant neoplasm of breast
4166847, -- Mother (qualifier)
'FHX_BREAST_CANCER_MOTHER'
);
4. observation_event_id — CDM 5.4
Tương tự measurement_event_id, cho phép liên kết observation với event khác.
-- Ghi nhận: "Lý do nhập viện: Đau ngực"
-- Liên kết với visit_occurrence_id = 50001
INSERT INTO observation (
observation_id, person_id, observation_concept_id,
observation_date, observation_type_concept_id,
value_as_concept_id,
observation_event_id,
obs_event_field_concept_id
) VALUES (
130004, 100001,
4148832, -- Chief complaint
'2024-06-15', 32817,
77670, -- Chest pain
50001, -- visit_occurrence_id
1147082 -- Field = visit_occurrence.visit_occurrence_id
);
5. qualifier_concept_id — Bổ sung ngữ cảnh
Concept ID
Qualifier
Dùng cho
4129512
Severe
Mức độ nặng
4148136
Mild
Mức độ nhẹ
4129511
Moderate
Mức độ vừa
4166847
Mother
Mối quan hệ gia đình
4166848
Father
Mối quan hệ gia đình
4192403
Sibling
Anh/chị/em
4167233
First degree relative
Họ hàng bậc 1
6. ETL dữ liệu VN
-- Tiền sử từ HIS
SELECT
ROW_NUMBER() OVER() AS observation_id,
pm.person_id,
COALESCE(stcm.target_concept_id, 0) AS observation_concept_id,
ts.ngay_ghinhan AS observation_date,
32817 AS observation_type_concept_id,
-- Map giá trị
CASE ts.loai_tiensu
WHEN 'HUT_THUOC' THEN
CASE ts.gia_tri
WHEN 'CO' THEN 4298794 -- Current smoker
WHEN 'DA_BO' THEN 4144272 -- Former smoker
WHEN 'KHONG' THEN 4144273 -- Never smoker
END
WHEN 'DI_UNG' THEN
COALESCE(stcm_drug.target_concept_id, 0)
END AS value_as_concept_id,
ts.mo_ta AS value_as_string,
ts.ma_tiensu AS observation_source_value
FROM tiensu_his ts
JOIN person_mapping pm ON ts.ma_bn = pm.source_id
LEFT JOIN source_to_concept_map stcm
ON ts.loai_tiensu = stcm.source_code
AND stcm.source_vocabulary_id = 'VN_OBS_TYPE'
LEFT JOIN source_to_concept_map stcm_drug
ON ts.gia_tri = stcm_drug.source_code
AND stcm_drug.source_vocabulary_id = 'VN_DRUG';
7. SQL phân tích
-- Tỉ lệ hút thuốc theo giới tính
SELECT
g.concept_name AS gender,
s.concept_name AS smoking_status,
COUNT(DISTINCT o.person_id) AS patients
FROM observation o
JOIN person p ON o.person_id = p.person_id
JOIN concept g ON p.gender_concept_id = g.concept_id
JOIN concept s ON o.value_as_concept_id = s.concept_id
WHERE o.observation_concept_id = 4275495 -- Tobacco smoking
GROUP BY g.concept_name, s.concept_name
ORDER BY g.concept_name, patients DESC;
-- Top dị ứng thuốc
SELECT
c.concept_name AS allergen,
COUNT(DISTINCT o.person_id) AS patients
FROM observation o
JOIN concept c ON o.value_as_concept_id = c.concept_id
WHERE o.observation_concept_id = 439224 -- Allergy
GROUP BY c.concept_name
ORDER BY patients DESC
LIMIT 10;
Tổng kết
OBSERVATION = bảng "catch-all" cho dữ liệu không thuộc bảng chuyên biệt
Use case chính: hút thuốc, dị ứng, tiền sử gia đình, lối sống, hôn nhân
qualifier_concept_id thêm ngữ cảnh (mức độ, mối quan hệ)
CDM 5.4: observation_event_id liên kết với event khác
Domain routing quyết định Observation vs Condition vs Measurement
Bài tiếp theo: DEVICE_EXPOSURE, SPECIMEN & NOTE — thiết bị y tế, mẫu bệnh phẩm, và ghi chú lâm sàng.