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

レッスン 10: 測定 — テストと測定

検査結果、バイタルサイン、臨床測定値を記録します。 value_as_number / value_as_concept_id、operator_concept_id、unit_concept_id、range_low / range_high、LOINC ボキャブラリー、measurement_event_id 新しい CDM 5.4。

🏗️ アーキテクチャ — レッスン 10 測定 試験と測定 初心者向け OMOP CDM 5.4 — A to Z を理解する パート 3: 主要な臨床事象 xdev.asia

医療検査と測定のダッシュボード

はじめに

測定は、すべての検査結果、バイタルサイン、臨床測定値、つまり測定可能な値 (数値またはカテゴリー) を持つあらゆるデータの記録です。これは、ほとんどの OMOP データベースで最大のテーブルであり、各検査で多くの行が作成されるため、通常は総レコードの > 50% を占めます (例: 20 のインジケーターを持つ血液検査テーブル = 20 レコード)。


1. テーブル構造

コラムタイプ必須説明
measurement_id整数✅PK固有の ID
person_id整数✅FK患者
measurement_concept_id整数✅スタンダードコンセプト(LOINC)
measurement_date日付✅試験日
measurement_datetime日時日付と時刻
measurement_timeVARCHAR(10)現在 (レガシー)
measurement_type_concept_id整数✅データソース
operator_concept_id整数演算子 (<, >、=、 <=, >=)
value_as_numberフロート数値
value_as_concept_id整数カテゴリ値
unit_concept_id整数ユニット (UCUM)
range_lowフロート正常の下限
range_highフロート通常の上限
provider_id整数FK医師の指示
visit_occurrence_id整数FK関連する訪問
visit_detail_id整数FK訪問詳細
measurement_source_valueVARCHAR(50)元のテストコード
measurement_source_concept_id整数オリジナルコンセプト
unit_source_valueVARCHAR(50)オリジナルユニット
unit_source_concept_id整数オリジナルユニットコンセプト
value_source_valueVARCHAR(50)元の値
measurement_event_idビッグINT⭐ 新しい CDM 5.4
meas_event_field_concept_id整数⭐ 新しい CDM 5.4

2. value_as_number と value_as_concept_id の比較

###2.1. NUMBER 結果 → value_as_number

-- Glucose máu: 6.5 mmol/L
INSERT INTO measurement VALUES (
    110001, 100001, 3004501,         -- LOINC: Glucose [Mass/volume] in Blood
    '2024-06-15', NULL, NULL,
    32817,                            -- EHR
    4172703,                          -- = (equals)
    6.5,                              -- value_as_number
    NULL,                             -- no concept value
    8753,                             -- UCUM: mmol/L
    3.9, 6.1,                         -- range: 3.9-6.1
    5001, 50001, NULL,
    'GLU', 0, 'mmol/L', 0,
    '6.5', NULL, NULL
);

###2.2.結果カテゴリ → value_as_concept_id

-- Xét nghiệm nhóm máu: O
INSERT INTO measurement VALUES (
    110002, 100001, 3003694,         -- LOINC: ABO group [Type] in Blood
    '2024-06-15', NULL, NULL,
    32817,                            -- EHR
    NULL,                             -- no operator
    NULL,                             -- no numeric value
    36308332,                         -- Concept: Blood group O
    NULL,                             -- no unit
    NULL, NULL,                       -- no range
    5001, 50001, NULL,
    'BLOOD_TYPE', 0, NULL, 0,
    'O', NULL, NULL
);

###2.3.選択ルール

結果数値としての値コンセプトとしての値
「6.5mmol/L」6.5NULL
「ポジティブ」NULL4181412 (ポジティブ)
「ネガティブ」NULL4132135 (ネガティブ)
「血液型はO型」NULL36308332
> 100"100NULL + 演算子 = >
「通常」NULL4069590 (ノーマル)

3.operator_concept_id — 比較演算子

結果が正しくない場合に使用されます (例: "< 0.5", "> 100インチ)。

コンセプトIDオペレーター意味
4171756<下
4171754<=
4172703=等しい (デフォルト)
4172704>=
4172702>より高い
-- Kết quả HBsAg: < 0.05 (dưới ngưỡng phát hiện)
INSERT INTO measurement (
    measurement_id, person_id, measurement_concept_id,
    measurement_date, measurement_type_concept_id,
    operator_concept_id, value_as_number,
    unit_concept_id, measurement_source_value
) VALUES (
    110003, 100001, 3013721,         -- LOINC: HBsAg
    '2024-06-15', 32817,
    4171756,                          -- operator: <
    0.05,                             -- value
    8647,                             -- IU/mL
    'HBSAG'
);

4. LOINC — 語彙テスト

###4.1. LOINCの構造

LOINC Code = Component : Property : Time : System : Scale : Method
VD: 2345-7 = Glucose : MCnc : Pt : Ser/Plas : Qn

  Component  = Glucose         (đo gì)
  Property   = MCnc            (mass concentration)
  Time       = Pt              (point in time)
  System     = Ser/Plas        (huyết thanh/huyết tương)
  Scale      = Qn              (quantitative - số)

###4.2. LOINCは人気です

| LOINC コード |コンセプトID |名前 |ベトナム | |----------|----------||-----|-----| | 2345-7 | 3004501 |血清中のグルコース [質量/体積] |血糖値 | | 4548-4 | 3034639 | HbA1c | HbA1c | | 2160-0 | 3016723 |血清中のクレアチニン |血中クレアチニン | | 6768-6 | 3006923 |血清中のALT | SGPT | | 33914-3 | 3027018 | GFR の推定値 | eGFR | | 718-7 | 3000963 |ヘモグロビン |ヘモグロビン | | 26515-7 | 3010813 |血小板 |血小板 | | 2093-3 | 3027114 |総コレステロール |総コレステロール |


5.unit_concept_id — UCUM ユニット

コンセプトIDUCUM コード単位
8840mg/dLミリグラム/デシリットル
8753ミリモル/Lミリモル/リットル
8647IU/mL国際単位/ミリリットル
8554%パーセント
9529kg/m2BMI
8876mm[Hg]水銀ミリメートル
8582/uLマイクロリットルあたり (血球)
8845mg/Lミリグラム/リットル

重要: 同じテストですが、単位が異なるため、値も異なります。例: グルコース 100 mg/dL = 5.6 mmol/L。 ETL は単位を標準化する必要があります。


6. Measurement_event_id — CDM 5.4 の新機能

測定を他のイベントにリンクできるようにします。

  ┌──────────────────────────────┐
  │     MEASUREMENT              │
  │  "Lab: BUN = 35 mg/dL"      │
  │  measurement_event_id = 70001│
  │  meas_event_field_concept_id │
  │  = 1147127                   │──→ condition_occurrence
  │     (condition_occurrence_id)│     .condition_occurrence_id
  └──────────────────────────────┘     = 70001

アプリケーション: テストを、そのテストを要求した特定の診断または手順に関連付けます。

-- Xét nghiệm BUN liên quan đến chẩn đoán suy thận
INSERT INTO measurement (
    measurement_id, person_id, measurement_concept_id,
    measurement_date, measurement_type_concept_id,
    value_as_number, unit_concept_id,
    measurement_event_id,
    meas_event_field_concept_id
) VALUES (
    110010, 100001, 3013682,         -- LOINC: BUN
    '2024-06-15', 32817,
    35, 8840,                         -- 35 mg/dL
    70001,                            -- Liên kết condition_occurrence_id = 70001
    1147127                           -- Field = condition_occurrence.condition_occurrence_id
);

7. ETL テスト VN

###7.1.よくある問題

問題ソリューション
BV 内部試験コードSOURCE_TO_CONCEPT_MAP → LOINC 経由で地図を作成
テキスト結果「肯定的」value_as_concept_id
「結果」< 0.5"個別の演算子 + value_as_number
非標準単位UCUMの地図
範囲は研究室によって異なりますマシン/ラボから範囲を取得するには、 range_low/range_high
20 個のインジケーターのテスト表 = 1 行20 の測定記録に分割

7.2. SQL ETL

-- Mỗi chỉ số xét nghiệm = 1 record MEASUREMENT
SELECT
    ROW_NUMBER() OVER() AS measurement_id,
    pm.person_id,
    COALESCE(stcm.target_concept_id, 0) AS measurement_concept_id,
    xn.ngay_xetnghiem AS measurement_date,
    32817 AS measurement_type_concept_id,
    -- Parse operator từ giá trị gốc
    CASE
        WHEN xn.gia_tri LIKE '<%' THEN 4171756    -- <
        WHEN xn.gia_tri LIKE '>%' THEN 4172702 -- >
        他 4172703 -- =
    END AS オペレーターコンセプト ID、
    -- 値から数値を解析します
    ケース
        WHEN xn.price ~ '^[<>]?[0-9.]+'
        THEN REGEXP_REPLACE(xn.value, '[^0-9.]', '', 'g')::FLOAT
        それ以外の場合は NULL
    END AS value_as_number、
    -- カテゴリの結果
    CASE xn.value
        「陽性」の場合 THEN 4181412 -- 陽性
        「ネガティブ」の場合 THEN 4132135 -- ネガティブ
        「通常」の場合 THEN 4069590 -- 通常
        それ以外の場合は NULL
    END AS value_as_concept_id、
    COALESCE(u.target_concept_id, 0) AS ユニットコンセプト ID,
    xn.gioi_han_duoi AS range_low、
    xn.gioi_han_tren AS range_high、
    xn.ma_xetnghiem AS 測定ソース値、
    xn.don_vi_goc ASのunit_source_value、
    xn.value AS value_source_value
xetnghiem_his xn から
JOIN person_mapping pm ON xn.ma_bn = pm.source_id
LEFT JOIN source_to_concept_map stcm
    ON xn.ma_xetnghiem = stcm.source_code
    かつ stcm.source_vocabulary_id = 'VN_LAB'
LEFT JOIN source_to_concept_map u
    ON xn.don_vi_goc = u.source_code
    かつ u.source_vocabulary_id = 'VN_UNIT';

8. 測定におけるバイタルサイン

バイタルサインロインクコンセプトID単位
最高血圧8480-63004249mmHg
拡張期血圧8462-43012888mmHg
心拍数8867-43027018/分
温度8310-53020891℃
SpO259408-540762499%
重量29463-73025315kg
高さ8302-23036277センチ
BMI39156-53038553kg/m²
-- バイタルサインを記録します: 血圧 130/85、NT 80、体温 37.2、SpO2 97%
INSERT INTO 測定 (measurement_id、person_id、measurement_concept_id、
    測定日、測定タイプコンセプト ID、
    value_as_number、unit_concept_id、measurement_source_value)
価値観
    (120001, 100001, 3004249, '2024-06-15', 32817, 130, 8876, 'SBP'),
    (120002、100001、3012888、'2024-06-15'、32817、85、8876、'DBP')、
    (120003, 100001, 3027018, '2024-06-15', 32817, 80, 8541, 'HR'),
    (120004, 100001, 3020891, '2024-06-15', 32817, 37.2, 586323, 'TEMP'),
    (120005、100001、40762499、'2024-06-15'、32817、97、8554、'SPO2');

9. SQL 分析

-- 集団内の HbA1c の分布
選択
    ケース
        WHEN m.value_as_number < 5.7 THEN 'Bình thường (<5.7%)'
        WHEN m.value_as_number BETWEEN 5.7 AND 6.4 THEN 'Tiền ĐTĐ (5.7-6.4%)'
        WHEN m.value_as_number >= 6.5 THEN '糖尿病 (>=6.5%)'
    hba1c_group として終了、
    COUNT(DISTINCT m.person_id) AS 患者、
    ROUND(AVG(m.value_as_number), 2) AS avg_hba1c
FROM測定m
WHERE m.measurement_concept_id = 3034639 -- HbA1c
  かつ、m.value_as_number が NULL ではありません
  AND m.value_as_number BETWEEN 2 AND 20 -- 外れ値を入力します
hba1c_group によるグループ化
hba1c_group で注文;

-- HbA1c の経時的傾向 (患者 1 名)
選択
    m.測定日、
    m.value_as_number AS hba1c、
    ケース
        WHEN m.value_as_number < 7.0 THEN '✅ Kiểm soát tốt'
        ELSE '⚠️ Cần cải thiện'
    END AS status
FROM measurement m
WHERE m.person_id = 100001
  AND m.measurement_concept_id = 3034639
ORDER BY m.measurement_date;

-- Xét nghiệm bất thường (ngoài range)
SELECT
    c.concept_name AS test_name,
    COUNT(*) AS abnormal_count,
    COUNT(DISTINCT m.person_id) AS patients
FROM measurement m
JOIN concept c ON m.measurement_concept_id = c.concept_id
WHERE m.value_as_number IS NOT NULL
  AND (m.value_as_number < m.range_low
       OR m.value_as_number > m.range_high)
  そして、m.range_low は NULL ではありません
  そして、m.range_high は NULL ではありません
c.concept_name によるグループ化
ORDER BY 異常数 DESC
リミット10;

概要

  1. 測定 = 検査 + バイタルサイン + すべての測定値
  2. 2 つの結果タイプ: value_as_number (数値) または value_as_concept_id (カテゴリ)
  3. operator_concept_id の結果は「<」または「>」
  4. unit_concept_id は UCUM を使用し、measurement_concept_id は LOINC を使用します
  5. 通常の基準値の range_low / range_high
  6. CDM 5.4: measurement_event_id はテストを別のイベントに関連付けます

次の記事: 観察 — 専門的な表ではカバーされていない臨床事象。


参考文献