
はじめに
PERSON は OMOP CDM 全体の中心テーブルです - すべての臨床テーブルは PERSON を参照します person_id。ここに患者の人口統計情報が保存されます。
PERSON の各行 = 一意の患者 (一意の人物)。
1. PERSON テーブルの構造
###1.1.完全な列リスト
| コラム | タイプ | 必須 | 説明 |
|---|---|---|---|
person_id | 整数 | ✅PK | 各患者に固有の ID |
gender_concept_id | 整数 | ✅ | ジェンダー(標準コンセプト) |
year_of_birth | 整数 | ✅ | 誕生年 |
month_of_birth | 整数 | 誕生月 | |
day_of_birth | 整数 | 生年月日 | |
birth_datetime | 日時 | 完全な生年月日と時刻 | |
race_concept_id | 整数 | ✅ | レース(スタンダードコンセプト) |
ethnicity_concept_id | 整数 | ✅ | エスニシティ(標準コンセプト) |
location_id | 整数 | FK | 住所 (参照場所) |
provider_id | 整数 | FK | 主治医 (参照提供者) |
care_site_id | 整数 | FK | 医療機関(CARE_SITE参照) |
person_source_value | VARCHAR(50) | HIS からのオリジナルの患者コード | |
gender_source_value | VARCHAR(50) | 元の性別 (例: "Nu"、"F") | |
gender_source_concept_id | 整数 | オリジナルの性別 ID コンセプト | |
race_source_value | VARCHAR(50) | オリジンレース | |
race_source_concept_id | 整数 | オリジンレース ID コンセプト | |
ethnicity_source_value | VARCHAR(50) | 民族的起源 | |
ethnicity_source_concept_id | 整数 | 概念の民族 ID |
###1.2.エンティティ関係
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ LOCATION │←──────│ PERSON │──────→│ PROVIDER │
│ location_id │ │ person_id │ │ provider_id │
│ address_1 │ │ gender_* │ │ provider_name│
│ city │ │ birth_* │ │ specialty_* │
│ state │ │ race_* │ └──────────────┘
│ zip │ │ ethnicity_* │ ↑
│ country_* │ │ location_id │ │
└──────────────┘ │ provider_id │ ┌──────┴───────┐
│ care_site_id│──────→│ CARE_SITE │
└──────┬───────┘ │ care_site_id │
│ │ care_site_name│
┌───────────┼───────────┐ └──────────────┘
↓ ↓ ↓
VISIT_OCC. CONDITION DRUG_EXPOSURE
OBSERVATION MEASUREMENT ... (tất cả clinical)
2. 重要なフィールドの詳細
###2.1. person_id
- タイプ: INTEGER、主キー
- ルール: 固有、変更なし、臨床的意義なし
- ではありません 元の患者コード (元の患者コードは、
person_source_value)
-- ĐÚNG: person_id là số tự tăng hoặc hash
person_id = 100001
person_source_value = 'BN-2024-00123' -- Mã gốc từ HIS
-- SAI: Không dùng mã gốc làm person_id
-- person_id = 'BN-2024-00123' ← SAI (phải là INTEGER)
###2.2.ジェンダーコンセプトID
| コンセプトID | コンセプト名 | 説明 |
|---|---|---|
| 8507 | 男性 | 男性 |
| 8532 | 女性 | 女性 |
| 8551 | 不明 | 不明 |
| 8521 | その他 | その他 |
-- Ví dụ ETL cho dữ liệu Việt Nam
CASE
WHEN gioi_tinh IN ('Nam', 'M', '1') THEN 8507 -- Male
WHEN gioi_tinh IN ('Nữ', 'Nu', 'F', '2') THEN 8532 -- Female
ELSE 8551 -- UNKNOWN
END AS gender_concept_id,
gioi_tinh AS gender_source_value
###2.3.誕生年、誕生月、誕生日
year_of_birth: 必須 — 存在しない場合は、患者をロードしません。month_of_birth、day_of_birth: オプション — 存在しない場合は NULL を設定しますbirth_datetime: オプション — 小児科に役立ちます (正確な年齢計算)
-- Ví dụ: BN sinh ngày 15/03/1980
year_of_birth = 1980
month_of_birth = 3
day_of_birth = 15
birth_datetime = '1980-03-15 00:00:00'
###2.4. Race_concept_id と民族性_concept_id
これらは、米国国勢調査の基準によると 2 つの学校です。ベトナムのデータの場合:
| 学校 | ベトナムのおすすめ |
|---|---|
race_concept_id | 8515 (アジア) |
race_source_value | 「キン」、「タイ」、「ムオン」... |
ethnicity_concept_id | 0 (一致する概念なし) |
ethnicity_source_value | 民族的出身があれば記録する |
注:
raceそしてethnicity米国規格 (OMB) に準拠した OMOP で。 ETL VN データの場合、値を設定する必要がありますが (マップできない場合は 0 を使用します)、元の情報は保持されます。*_source_value。
3. 実際の例
###3.1.ベトナム人患者
INSERT INTO person VALUES (
100001, -- person_id
8532, -- gender_concept_id (Female)
1980, -- year_of_birth
3, -- month_of_birth
15, -- day_of_birth
'1980-03-15 00:00:00', -- birth_datetime
8515, -- race_concept_id (Asian)
0, -- ethnicity_concept_id (N/A)
1001, -- location_id (→ LOCATION table)
5001, -- provider_id (→ PROVIDER table)
2001, -- care_site_id (→ CARE_SITE table)
'BN-2024-00123', -- person_source_value
'Nữ', -- gender_source_value
0, -- gender_source_concept_id
'Kinh', -- race_source_value
0, -- race_source_concept_id
NULL, -- ethnicity_source_value
0 -- ethnicity_source_concept_id
);
###3.2.基本的な SQL クエリ
-- Đếm bệnh nhân theo giới tính
SELECT
c.concept_name AS gender,
COUNT(*) AS patient_count
FROM person p
JOIN concept c ON p.gender_concept_id = c.concept_id
GROUP BY c.concept_name;
-- Phân bố tuổi
SELECT
EXTRACT(YEAR FROM CURRENT_DATE) - year_of_birth AS age,
COUNT(*) AS count
FROM person
GROUP BY 1
ORDER BY 1;
-- Tìm bệnh nhân có dữ liệu gốc
SELECT
person_id,
person_source_value AS ma_bn_goc,
gender_source_value AS gioi_tinh_goc,
race_source_value AS dan_toc
FROM person
WHERE person_source_value IS NOT NULL
LIMIT 10;
4. ETL 規約
###4.1.重要なルール
| ルール | 詳細 |
|---|---|
| 1 人 = 1 レコード | 重複はありません。重複排除が必要です。 |
| 誕生年は必須です | 誕生年がない場合は患者を無視する |
| gender_concept_id が必要です | 不明な場合は 8551 (UNKNOWN) を入力します。 |
| person_id には意味がありません | オリジナルの患者コードや ID カード/CCCD は使用しないでください。 |
| PII を直接保存しません | PERSON |
###4.2.匿名化
OMOP CDM には、名前、ID/CCCD 番号、電話番号の列はありません。これは意図的なデザインです:
HIS gốc (có PII): OMOP CDM (de-identified):
┌─────────────────────────┐ ┌──────────────────────────┐
│ ma_bn: BN-2024-00123 │ → │ person_id: 100001 │
│ ho_ten: Nguyễn Thị Lan │ → │ (không có cột tên!) │
│ cmnd: 079123456789 │ → │ (không có cột CMND!) │
│ sdt: 0901234567 │ → │ (không có cột SĐT!) │
│ ngay_sinh: 15/03/1980 │ → │ year_of_birth: 1980 │
│ gioi_tinh: Nữ │ → │ gender_concept_id: 8532 │
└─────────────────────────┘ └──────────────────────────┘
注:
person_source_value元の患者コード(追跡用)が含まれる場合があります。組織によっては、この値はハッシュ化または暗号化される場合があります。
###4.3.重複の処理
患者が複数のシステムに 2 つ以上のコードを持っている場合:
HIS BV Chợ Rẫy: BN-CR-001 ┐
HIS BV Bạch Mai: BN-BM-555 ├──→ person_id = 100001
BHXH: DN-7900123456789 ┘ (1 person duy nhất)
ETL は、PERSON にロードする前に Patient Matching (患者のマッチング) を実行する必要があります。
5. 他のテーブルとの関係
-- Tất cả dữ liệu lâm sàng của 1 bệnh nhân
SELECT 'Visits' AS data_type, COUNT(*) AS count
FROM visit_occurrence WHERE person_id = 100001
UNION ALL
SELECT 'Conditions', COUNT(*)
FROM condition_occurrence WHERE person_id = 100001
UNION ALL
SELECT 'Drugs', COUNT(*)
FROM drug_exposure WHERE person_id = 100001
UNION ALL
SELECT 'Measurements', COUNT(*)
FROM measurement WHERE person_id = 100001
UNION ALL
SELECT 'Observations', COUNT(*)
FROM observation WHERE person_id = 100001;
6. 一般的な ETL エラー
| エラー | 結果 | 修正方法 |
|---|---|---|
| person_id が重複しています | データを上書きする | 一意の制約を確認する |
| 誕生年 = NULL | NOT NULL | の違反無視または代入する |
| gender_concept_id が間違っています | ミスジェンダー分析 | 正確なマッピング |
| PII をsource_value に入力します | 匿名化の違反 | ハッシュまたは削除 |
| 重複しないでください | 1人の患者が多くの人になる | ETL 前の患者マッチング |
概要
- PERSON は中央テーブルです - すべての臨床テーブルが参照されます
person_id - 必須フィールド: person_id、gender_concept_id、year_of_birth、race_concept_id、esnicity_concept_id
- PII は含まれません (名前、ID カード、電話番号) — 匿名化されたデザイン
- リンク: LOCATION (住所)、CARE_SITE (施設)、PROVIDER (主治医)
- ETL VN: 性別マッピング、人種 = アジア人 (8515)、民族 = 0
次の記事: OBSERVATION_PERIOD — 「監視期間」を知ることが重要な理由と、それがすべての分析にどのような影響を与えるか。