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

Bài 17: LOCATION, CARE_SITE & PROVIDER — Hệ thống cơ sở y tế

Ba bảng Health System Data: LOCATION (địa lý), CARE_SITE (cơ sở khám chữa bệnh), PROVIDER (bác sĩ, nhân viên y tế) và cách chúng liên kết với dữ liệu lâm sàng.

🏗️ Kiến trúc — Bài 17 LOCATION, CARE_SITE & PROVIDER — Hệ thống CSYT OMOP CDM 5.4 cho Người mới — Hiểu từ A đến Z Phần 6: Health System, Economics & Derived Elements xdev.asia

Phân cấp hệ thống y tế: Location → Care Site → Provider

Giới thiệu

Nhóm Health System Data gồm 3 bảng mô tả nơi và ai cung cấp dịch vụ y tế. Trong bệnh viện Việt Nam, đây là nơi lưu thông tin cơ sở y tế (tuyến trung ương, tỉnh, huyện), phòng khoa, và bác sĩ phụ trách.


1. LOCATION — Địa điểm địa lý

1.1. Cấu trúc bảng

CộtKiểuBắt buộcMô tả
location_idINTEGER✅ PKID duy nhất
address_1VARCHAR(50)Địa chỉ dòng 1
address_2VARCHAR(50)Địa chỉ dòng 2
cityVARCHAR(50)Thành phố / Quận / Huyện
stateVARCHAR(2)Bang/Tỉnh (US: 2 ký tự)
zipVARCHAR(9)Mã bưu điện
countyVARCHAR(20)County
location_source_valueVARCHAR(50)Mã nguồn
country_concept_idINTEGERFK → CONCEPT (quốc gia)
country_source_valueVARCHAR(80)Mã quốc gia nguồn
latitudeFLOATVĩ độ
longitudeFLOATKinh độ

1.2. ETL cho Việt Nam

INSERT INTO location (
    location_id,
    address_1,
    city,
    state,
    zip,
    country_concept_id,
    country_source_value,
    latitude,
    longitude
) VALUES (
    1001,
    '78 Giải Phóng',
    'Hai Bà Trưng',
    'HN',            -- Mã tỉnh 2 ký tự
    '100000',        -- Mã bưu điện VN
    4330442,         -- concept_id cho 'Viet Nam'
    'VN',
    21.0024,         -- Latitude
    105.8432         -- Longitude
);

Lưu ý VN: Trường state chỉ 2 ký tự — dùng mã tỉnh rút gọn (HN, HCM, DN...). Nếu cần đầy đủ, dùng location_source_value lưu "Hà Nội".


2. CARE_SITE — Cơ sở khám chữa bệnh

2.1. Cấu trúc bảng

CộtKiểuBắt buộcMô tả
care_site_idINTEGER✅ PKID duy nhất
care_site_nameVARCHAR(255)Tên cơ sở
place_of_service_concept_idINTEGERLoại cơ sở (FK → CONCEPT)
location_idINTEGERFK → LOCATION
care_site_source_valueVARCHAR(50)Mã nguồn
place_of_service_source_valueVARCHAR(50)Mã loại nguồn

2.2. Loại cơ sở y tế (place_of_service_concept_id)

Concept IDConcept NameVí dụ VN
8717Inpatient HospitalKhoa Nội trú
8756Outpatient HospitalPhòng khám ngoại trú
8940OfficePhòng khám tư
8883Skilled Nursing FacilityCơ sở điều dưỡng
8716Home Health AgencyChăm sóc tại nhà
8761Emergency RoomKhoa Cấp cứu
581382TelehealthKhám từ xa

2.3. Ví dụ ETL từ dữ liệu bệnh viện VN

-- Bệnh viện Bạch Mai
INSERT INTO care_site VALUES (
    2001,                        -- care_site_id
    'Bệnh viện Bạch Mai',       -- care_site_name
    8717,                        -- Inpatient Hospital
    1001,                        -- location_id (78 GP, HBT)
    'BV-BACHMAI-001',            -- care_site_source_value
    'TUYEN_TW'                   -- place_of_service_source_value
);

-- Khoa Nội tiêu hóa - Bạch Mai
INSERT INTO care_site VALUES (
    2002,
    'Khoa Nội Tiêu hóa - BV Bạch Mai',
    8756,                        -- Outpatient Hospital
    1001,                        -- cùng location
    'BV-BM-NOI-TIEUHOA',
    'KHOA_NOITRU'
);

2.4. Mô hình phân cấp VN

  CARE_SITE (Tuyến TW)
  ├── BV Bạch Mai (care_site_id = 2001)
  │   ├── Khoa Nội Tiêu hóa (2002)
  │   ├── Khoa Tim mạch (2003)
  │   └── Khoa Cấp cứu (2004)
  │
  CARE_SITE (Tuyến Tỉnh)
  ├── BV Đa khoa Hà Nội (2010)
  │   ├── Khoa Ngoại (2011)
  │   └── Khoa Sản (2012)
  │
  CARE_SITE (Tuyến Huyện)
  └── TTYT Hoàng Mai (2020)
      └── Phòng khám đa khoa (2021)

Lưu ý: OMOP CDM không có cấu trúc parent-child cho CARE_SITE. Nếu cần phân cấp, dùng convention đặt tên hoặc thêm bảng mapping riêng.


3. PROVIDER — Nhân viên y tế

3.1. Cấu trúc bảng

CộtKiểuBắt buộcMô tả
provider_idINTEGER✅ PKID duy nhất
provider_nameVARCHAR(255)Tên (khuyến nghị de-identify)
npiVARCHAR(20)National Provider Identifier (US)
deaVARCHAR(20)DEA Number (US)
specialty_concept_idINTEGERChuyên khoa (FK → CONCEPT)
care_site_idINTEGERFK → CARE_SITE
year_of_birthINTEGERNăm sinh
gender_concept_idINTEGERGiới tính
provider_source_valueVARCHAR(50)Mã nguồn
specialty_source_valueVARCHAR(50)Mã chuyên khoa nguồn
specialty_source_concept_idINTEGERFK → CONCEPT
gender_source_valueVARCHAR(50)Giới tính nguồn
gender_source_concept_idINTEGERFK → CONCEPT

3.2. Specialty trong OMOP

-- Tìm specialty concepts phổ biến
SELECT
    c.concept_id,
    c.concept_name,
    c.vocabulary_id
FROM concept c
WHERE c.domain_id = 'Provider'
  AND c.standard_concept = 'S'
  AND c.concept_name LIKE '%Cardiol%'
ORDER BY c.concept_name;
-- 38004451 | Cardiology | Medicare Specialty

3.3. ETL cho bác sĩ VN

INSERT INTO provider (
    provider_id,
    provider_name,
    specialty_concept_id,
    care_site_id,
    provider_source_value,
    specialty_source_value
) VALUES (
    3001,
    NULL,                    -- De-identify: không lưu tên
    38004451,                -- Cardiology
    2003,                    -- Khoa Tim mạch - BV Bạch Mai
    'BS-BM-TM-001',         -- Mã bác sĩ nội bộ
    'TIM_MACH'               -- Chuyên khoa nguồn
);

De-identification: Ở VN dữ liệu nghiên cứu thường cần ẩn danh bác sĩ. Set provider_name = NULL và chỉ giữ provider_source_value mã hóa.


4. Quan hệ 3 bảng Health System

  ┌──────────┐
  │ LOCATION │  ← Địa lý (tỉnh, thành phố, tọa độ)
  │ 1001     │
  └────┬─────┘
       │ location_id
       ↓
  ┌──────────┐
  │CARE_SITE │  ← Cơ sở y tế (BV, Khoa)
  │ 2001     │
  └────┬─────┘
       │ care_site_id
       ↓
  ┌──────────┐
  │ PROVIDER │  ← Bác sĩ, nhân viên y tế
  │ 3001     │
  └──────────┘

  Ba bảng này được tham chiếu từ:
  ┌───────────────────────┐
  │ PERSON               │ ← location_id, care_site_id, provider_id
  │ VISIT_OCCURRENCE     │ ← care_site_id, provider_id
  │ CONDITION_OCCURRENCE │ ← provider_id
  │ DRUG_EXPOSURE        │ ← provider_id
  │ ... (tất cả bảng     │
  │      clinical)       │
  └───────────────────────┘

5. Truy vấn phân tích

5.1. Phân bổ bệnh nhân theo cơ sở y tế

SELECT
    cs.care_site_name,
    c.concept_name AS facility_type,
    COUNT(DISTINCT vo.person_id) AS patient_count,
    COUNT(vo.visit_occurrence_id) AS visit_count
FROM visit_occurrence vo
JOIN care_site cs ON vo.care_site_id = cs.care_site_id
JOIN concept c ON cs.place_of_service_concept_id = c.concept_id
GROUP BY cs.care_site_name, c.concept_name
ORDER BY visit_count DESC;

5.2. Phân tích theo chuyên khoa bác sĩ

SELECT
    c_spec.concept_name AS specialty,
    COUNT(DISTINCT p.provider_id) AS provider_count,
    COUNT(DISTINCT co.person_id) AS patient_count,
    COUNT(*) AS diagnosis_count
FROM condition_occurrence co
JOIN provider p ON co.provider_id = p.provider_id
JOIN concept c_spec ON p.specialty_concept_id = c_spec.concept_id
GROUP BY c_spec.concept_name
ORDER BY diagnosis_count DESC
LIMIT 10;

5.3. Phân bố địa lý bệnh nhân (VN)

SELECT
    l.state AS province_code,
    l.city,
    COUNT(DISTINCT per.person_id) AS patient_count
FROM person per
JOIN location l ON per.location_id = l.location_id
WHERE l.country_concept_id = 4330442  -- Vietnam
GROUP BY l.state, l.city
ORDER BY patient_count DESC;

Tổng kết

  1. LOCATION: địa lý (VN: mã tỉnh 2 ký tự + mã bưu điện)
  2. CARE_SITE: cơ sở y tế với place_of_service_concept_id phân loại
  3. PROVIDER: nhân viên y tế, cần de-identify trong nghiên cứu
  4. Quan hệ: LOCATION → CARE_SITE → PROVIDER (hệ thống phân cấp)
  5. Tất cả bảng lâm sàng đều tham chiếu provider_id và care_site_id

Bài tiếp theo: PAYER_PLAN_PERIOD & COST — Chi phí y tế và bảo hiểm.


Tài liệu tham khảo