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

第 16 課:DRUG_STRENGTH 和剩餘詞彙表

DRUG_STRENGTH 提供藥物劑量資訊、CONCEPT_SYNONYM、RELATIONSHIP 表以及所有 12 個標準化詞彙表的摘要。

🏗️ 建築 — 第 16 課 藥物強度和表格 詞彙依然存在 初學者的 OMOP CDM 5.4 — 從頭到尾了解 第 5 部分:標準化詞彙 亞洲開發網

簡介

詞彙部分的最後一篇文章介紹了表 DRUG_STRENGTH(從 RxNorm 中提取的劑量資訊),並總結了標準化詞彙組中的所有 12 個表。讀完本文後,您將對 OMOP 字典系統有完整的了解。


1. DRUG_STRENGTH — 藥物劑量

1.1。表結構

專欄類型說明
drug_concept_id整數FK → 概念(藥物)
ingredient_concept_id整數FK → CONCEPT (active ingredient)
amount_value浮動Content (tablets, capsules)
amount_unit_concept_id整數單位(毫克、克、國際單位)
numerator_value浮動分子(解)
numerator_unit_concept_id整數單位分子
denominator_value浮動型號
denominator_unit_concept_id整數單位分母
box_size整數藥片數量/盒
valid_start_date日期
valid_end_date日期
invalid_reasonVARCHAR(1)VARCHAR(1)

1.2。 Two types of dose representation

類型 1:固體(片劑、膠囊)→ amount_value

-- Metformin 500mg Oral Tablet
SELECT
    c_drug.concept_name AS drug_name,
    c_ing.concept_name AS ingredient,
    ds.amount_value,
    c_unit.concept_name AS unit
FROM drug_strength ds
JOIN concept c_drug ON ds.drug_concept_id = c_drug.concept_id
JOIN concept c_ing ON ds.ingredient_concept_id = c_ing.concept_id
LEFT JOIN concept c_unit ON ds.amount_unit_concept_id = c_unit.concept_id
WHERE ds.drug_concept_id = 1503328;
-- Kết quả: Metformin | 500 | milligram

類型2:液體(溶液、注射液)→分子/分母

-- Amoxicillin 250mg/5mL Oral Suspension
SELECT
    c_drug.concept_name,
    ds.numerator_value,
    c_num.concept_name AS num_unit,
    ds.denominator_value,
    c_den.concept_name AS den_unit
FROM drug_strength ds
JOIN concept c_drug ON ds.drug_concept_id = c_drug.concept_id
LEFT JOIN concept c_num ON ds.numerator_unit_concept_id = c_num.concept_id
LEFT JOIN concept c_den ON ds.denominator_unit_concept_id = c_den.concept_id
WHERE ds.drug_concept_id = 19077795;
-- Kết quả: 250 mg / 5 mL

1.3。 Application: Calculate actual dose

-- Tính tổng mg Metformin BN đã dùng
SELECT
    de.person_id,
    SUM(
        de.quantity *
        COALESCE(ds.amount_value, ds.numerator_value)
    ) AS total_mg,
    SUM(de.days_supply) AS total_days
FROM drug_exposure de
JOIN drug_strength ds
    ON de.drug_concept_id = ds.drug_concept_id
WHERE ds.ingredient_concept_id = 1503297  -- Metformin ingredient
  AND de.person_id = 100001
GROUP BY de.person_id;

1.4。 Find all formulations of an active ingredient

-- Tất cả dạng bào chế chứa Metformin
SELECT DISTINCT
    c_drug.concept_id,
    c_drug.concept_name,
    c_drug.concept_class_id,
    ds.amount_value,
    c_unit.concept_name AS unit
FROM drug_strength ds
JOIN concept c_drug ON ds.drug_concept_id = c_drug.concept_id
JOIN concept c_unit ON ds.amount_unit_concept_id = c_unit.concept_id
WHERE ds.ingredient_concept_id = 1503297  -- Metformin
  AND c_drug.standard_concept = 'S'
ORDER BY c_drug.concept_class_id, ds.amount_value;

2.標準化詞彙12表匯總

#表記錄(~)角色
1概念〜10MDictionary of all medical concepts
2字彙〜70字彙來源列表
3域名〜50域列表(條件、藥物...)
4概念類別〜400Classification in vocabulary
5概念_關係〜60M概念之間的關係
6關係〜600關係類型的定義
7概念_同義詞〜10M同義字名稱
8CONCEPT_ANCESTOR~80M預先計算的層次結構
9SOURCE_TO_CONCEPT_MAP自訂自訂映射
1010 藥物強度約 150 萬藥物劑量
1111 群組定義自訂佇列的定義
1212 ATTRIBUTE_DEFINITION自訂屬性定義(很少使用)

3.群組定義

專欄類型說明
cohort_definition_id整數PK
cohort_definition_nameVARCHAR(255)群組名稱
cohort_definition_descriptionCLOB詳細說明
definition_type_concept_id整數型別定義
cohort_definition_syntaxCLOBJSON/SQL 查詢建立群組
subject_concept_id整數主題(通常=人)
cohort_initiation_date日期建立日期

與 COHORT 表(在派生元素中)結合使用 - 第 20 課將詳細介紹。


4. ER 圖 — 詞彙

  ┌──────────┐     ┌──────────────────┐
  │ VOCABULARY│────→│     CONCEPT      │←─── DOMAIN
  └──────────┘     │                  │←─── CONCEPT_CLASS
                   │ concept_id (PK)  │
                   │ concept_name     │
                   │ domain_id        │
                   │ vocabulary_id    │
                   │ concept_class_id │
                   │ standard_concept │
                   └─────────┬────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
              ↓              ↓              ↓
  ┌────────────────┐ ┌──────────────┐ ┌──────────────┐
  │CONCEPT_        │ │CONCEPT_      │ │CONCEPT_      │
  │RELATIONSHIP    │ │ANCESTOR      │ │SYNONYM       │
  │                │ │              │ │              │
  │concept_id_1 →  │ │ancestor →    │ │concept_id →  │
  │concept_id_2 →  │ │descendant →  │ │synonym_name  │
  │relationship_id │ │min_levels    │ │language       │
  └────────────────┘ │max_levels    │ └──────────────┘
         │           └──────────────┘
         ↓
  ┌──────────────┐
  │ RELATIONSHIP │    ┌──────────────┐
  └──────────────┘    │DRUG_STRENGTH │
                      │              │
                      │drug_concept→ │
                      │ingredient → │
                      │amount_value  │
                      │numerator     │
                      │denominator   │
                      └──────────────┘
  ┌─────────────────────┐
  │SOURCE_TO_CONCEPT_MAP│  (custom mapping)
  │source_code          │
  │target_concept_id →  │
  └─────────────────────┘

5. 詞彙管理的最佳實踐

5.1。更新詞彙

  1. Download từ athena.ohdsi.org (CPT4 cần license)
  2. Load vào schema vocabulary riêng
  3. Chạy script consistency check
  4. KHÔNG tự modify bảng CONCEPT / CONCEPT_RELATIONSHIP
  5. Dùng SOURCE_TO_CONCEPT_MAP cho mã tùy chỉnh

5.2。檢查詞彙質量

-- Kiểm tra concepts hết hạn đang được dùng
SELECT
    'condition_occurrence' AS source_table,
    COUNT(*) AS invalid_concept_count
FROM condition_occurrence co
JOIN concept c ON co.condition_concept_id = c.concept_id
WHERE c.invalid_reason IS NOT NULL

UNION ALL

SELECT 'drug_exposure', COUNT(*)
FROM drug_exposure de
JOIN concept c ON de.drug_concept_id = c.concept_id
WHERE c.invalid_reason IS NOT NULL;

-- Kiểm tra mapping completeness
SELECT
    c.vocabulary_id,
    COUNT(*) AS total_concepts,
    SUM(CASE WHEN cr.concept_id_2 IS NOT NULL THEN 1 ELSE 0 END) AS mapped,
    ROUND(
        SUM(CASE WHEN cr.concept_id_2 IS NOT NULL THEN 1 ELSE 0 END) * 100.0
        / COUNT(*), 1
    ) AS mapped_pct
FROM concept c
LEFT JOIN concept_relationship cr
    ON c.concept_id = cr.concept_id_1
    AND cr.relationship_id = 'Maps to'
    AND cr.invalid_reason IS NULL
WHERE c.vocabulary_id IN ('ICD10CM', 'ICD10', 'CPT4')
  AND c.invalid_reason IS NULL
GROUP BY c.vocabulary_id;

總結

  1. DRUG_STRENGTH:固體(量)和液體(分子/分母)劑量
  2. 12個詞彙表構成約1000萬個醫學概念的管理系統
  3. SOURCE_TO_CONCEPT_MAP 用於 VN 內部代碼 → 標準概念
  4. 詞彙需要Athena定期更新,而不是自我修正
  5. DRUG_STRENGTH結合DRUG_EXPOSURE計算實際劑量

下一篇文章: 第 6 部分 — 地點、護理地點、提供者和衛生系統小組。


參考文獻