hl7-pam-parser について
hl7-pam-parserは、HL7 v2.5 IHE PAMの患者管理メッセージを解析し、説明するスキルです。ADTイベントの識別、フィールド抽出、必須構造の検証を行い、医療データ分析向けに読みやすく説明します。
主な機能
- 01ADTメッセージの種類とイベントを識別
- 02メッセージのセグメントとフィールドを抽出
- 03必須構造とフィールドを検証
- 04患者情報と受診情報を説明
- 05日付とコード値を確認
活用シーン
- 01生のHL7 ADTメッセージの解読
- 02不足フィールドや構造上の問題の特定
- 03分析用メッセージ例の説明作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dedalus-erp-pas/ foundation-skills --skill hl7-pam-parserインストール後、Claude Code で/hl7-pam-parserを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
fixtures/adt/a01_admission.jsona02_transfer.jsona03_discharge.jsonreference/README.md詳細
HL7 IHE PAM メッセージパーサーと解説
概要
このスキルは、HL7 v2.5 IHE PAM(Patient Administration Management)メッセージを解析し、解説します。これらは、患者管理イベントに用いられる医療分野の標準的な相互運用形式です。パーサーはメッセージ種別を特定し、セグメントとフィールドを抽出し、IHE PAM 2.10 仕様に従って構造を検証し、人が読みやすい形式で解説します。
このスキルを使用する場面:
- HL7 ADT メッセージ(生の HL7 テキスト)を解析して解説する
- HL7 メッセージ種別とイベントコード(ADT^A01、ADT^A02 など)を特定する
- すべてのセグメントとフィールド(MSH、EVN、PID、PV1、PV2)を抽出してラベル付けする
- HL7 メッセージの構造と必須フィールドを検証する
- IHE PAM のビジネスルールとフィールドマッピングを理解する
- HL7 メッセージの問題やデータ品質の問題をデバッグする
- HL7 メッセージの例を解説付きで記録する
HL7 v2.5 メッセージ形式
HL7 メッセージでは、次の区切り文字を使用します。
Field delimiter: | (pipe)
Component delimiter: ^ (caret)
Repetition delimiter: ~ (tilde)
Escape character: \ (backslash)
Subcomponent delimiter: & (ampersand)
基本構造:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|Timestamp||MessageType|MessageControlId|ProcessingId|VersionId
EVN|EventTypeCode|RecordedDateTime|...
PID|SetId||PatientId||PatientName||BirthDate|Sex|...
PV1|SetId|PatientClass|AssignedPatientLocation|...
セグメント終端文字:各セグメントは、復帰文字(\r)または改行文字(\n)で終わります。
IHE PAM メッセージ種別
ADT メッセージ(入院、退院、転棟)
ADT^A01 - 入院/受診通知
目的:入院診療への患者の入院または登録
必須セグメント:
- MSH(メッセージヘッダー)
- EVN(イベント種別)
- PID(患者識別情報)
- PV1(患者受診情報)
例:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260122140000||ADT^A01^ADT_A01|MSG001|P|2.5
EVN|A01|20260122140000|||USER001
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M|||15 RUE DE LA PAIX^^PARIS^^75001^FRA||(33)612345678
PV1|1|I|CHU_PARIS^CARDIO^LIT_001^CHU_PARIS||||PR_MARTIN^MARTIN^SOPHIE|||CARDIO||||||||||VIS20260122001|||||||||||||||||||||||||20260122140000
解説:
- イベント:A01(患者の入院)
- 患者:DUPONT JEAN(M.)、1975年3月15日生まれ
- 患者 ID:PAT12345
- 受診:VIS20260122001
- 場所:CHU_PARIS、循環器科、ベッド LIT_001
- 入院日時:2026年1月22日 14:00:00
- 患者クラス:I(入院患者)
- 担当医:Dr. MARTIN SOPHIE
ADT^A02 - 患者の転棟
目的:病棟、病室、または診療科間での患者の転棟
必須セグメント:
- MSH、EVN、PID、PV1
- PV2(以前の場所を示すため推奨。省略可)
例:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260123090000||ADT^A02^ADT_A02|MSG002|P|2.5
EVN|A02|20260123090000|||USER002
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M
PV1|1|I|CHU_PARIS^NEURO^LIT_102^CHU_PARIS||||PR_DURAND^DURAND^PAUL|||NEURO||||||||||VIS20260122001
PV2||||||||||||||||||||||CHU_PARIS^CARDIO^LIT_001^CHU_PARIS
解説:
- イベント:A02(患者の転棟)
- 患者:PAT12345(DUPONT JEAN)
- 移動元:循環器科、ベッド LIT_001(PV2-1:以前の場所)
- 移動先:神経内科、ベッド LIT_102(PV1-3:割り当てられた場所)
- 転棟日時:2026年1月23日 09:00:00
ADT^A03 - 患者の退院
目的:患者の退院
必須セグメント:
- MSH、EVN、PID、PV1
例:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260125180000||ADT^A03^ADT_A03|MSG003|P|2.5
EVN|A03|20260125180000|||USER003
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M
PV1|1|I|CHU_PARIS^CARDIO^LIT_001^CHU_PARIS||||PR_MARTIN^MARTIN^SOPHIE|||CARDIO||||||||||VIS20260122001|||||||||||||||||||||||||||20260125180000|||||HOME
解説:
- イベント:A03(患者の退院)
- 患者:PAT12345(DUPONT JEAN)
- 退院日時:2026年1月25日 18:00:00(PV1-45)
- 退院先:自宅(PV1-36)
- 受診:VIS20260122001
ADT^A04 - 患者の登録
目的:入院前登録または外来登録
必須セグメント:
- MSH、EVN、PID、PV1
ADT^A05 - 患者の入院前登録
目的:入院前通知
ADT^A06 - 外来から入院への変更
目的:外来受診を入院に切り替える
ADT^A07 - 入院から外来への変更
目的:入院を外来受診に切り替える
ADT^A08 - 患者情報の更新
目的:患者の人口統計情報を更新する
例:
MSH|^~\&|HEXAFLUX|CHU_PARIS|TARGET|DEST|20260122150000||ADT^A08^ADT_A08|MSG004|P|2.5
EVN|A08|20260122150000|||USER001
PID|1||PAT12345^^^CHU_PARIS^PI||DUPONT^JEAN^^M.||19750315|M|||15 RUE DE LA PAIX^^PARIS^^75001^FRA||(33)612345678|||||||1234567890123||FRA
PV1|1|O||||||||||||||||||||VIS20260122001
解説:
- イベント:A08(患者情報の更新)
- 患者:PAT12345 の人口統計情報が更新されました
- 更新されたフィールド:住所、電話番号、国民識別番号(NIR)
ADT^A11 - 入院の取り消し
目的:以前の入院を取り消す
ADT^A12 - 転棟の取り消し
目的:以前の転棟を取り消す
ADT^A13 - 退院の取り消し
目的:以前の退院を取り消す
セグメント定義
MSH - メッセージヘッダー(必須)
目的:メッセージのメタデータとルーティング情報
フィールド構造:
MSH|^~\&|SendingApp|SendingFacility|ReceivingApp|ReceivingFacility|Timestamp||MessageType^EventCode^MessageStructure|MessageControlId|ProcessingId|VersionId
主なフィールド:
- MSH-3:送信元アプリケーション
- MSH-4:送信元施設
- MSH-5:受信先アプリケーション
- MSH-6:受信先施設
- MSH-7:メッセージの日時(YYYYMMDDHHmmss)
- MSH-9:メッセージ種別(ADT^A01^ADT_A01)
- MSH-10:メッセージ制御 ID(一意の識別子)
- MSH-11:処理 ID(P=本番、T=トレーニング、D=デバッグ)
- MSH-12:バージョン ID(2.5)
EVN - イベントタイプ(必須)
目的:イベント固有の情報
フィールド構造:
EVN|EventTypeCode|RecordedDateTime|EventDateTime|EventReasonCode|OperatorId
主なフィールド:
- EVN-1:イベントタイプコード(A01、A02、A03 など)
- EVN-2:記録日時(イベントが記録された日時)
- EVN-3:イベント発生日時(イベントが実際に発生した日時)
- EVN-5:オペレーター ID(イベントを実行したユーザー)
PID - 患者識別(必須)
目的:患者の人口統計情報
フィールド構造(30 以上のフィールド):
PID|SetId||PatientId^^^AssigningAuthority^IdType~AltId||LastName^FirstName^MiddleName^Suffix^Prefix||BirthDate|Sex|PatientAlias|Race|PatientAddress||PhoneHome|PhoneBusiness|PrimaryLanguage|MaritalStatus|Religion|PatientAccountNumber|SSN|DriverLicense|MotherIdentifier|EthnicGroup|BirthPlace|MultipleBirth|BirthOrder|Citizenship|VeteranStatus|Nationality|DeathDateTime|DeathIndicator
主なフィールド:
- PID-1:セット ID
- PID-3:患者識別子リスト(PatientId^^^Facility^PI)
- PID-5:患者名(LastName^FirstName^MiddleName^Suffix^Prefix)
- PID-7:生年月日(YYYYMMDD)
- PID-8:性別(M/F/O/U)
- PID-11:患者住所(Street^^City^^PostalCode^Country)
- PID-13:電話番号 - 自宅
- PID-14:電話番号 - 勤務先
- PID-22:民族グループ
- PID-29:死亡日時
- PID-30:死亡インジケーター(Y/N)
PV1 - 患者の来院(必須)
目的:来院/受診情報
フィールド構造(52 フィールド):
PV1|SetId|PatientClass|AssignedLocation^Room^Bed^Facility|AdmissionType|PreadmitNumber|PriorLocation|AttendingDoctor^LastName^FirstName|ReferringDoctor|ConsultingDoctor|HospitalService|TemporaryLocation|PreadmitTestIndicator|ReadmissionIndicator|AdmitSource|AmbulatoryStatus|VIPIndicator|AdmittingDoctor|PatientType|VisitNumber|FinancialClass
主なフィールド:
- PV1-1:セット ID
- PV1-2:患者クラス(I=入院、O=外来、E=緊急、R=再来)
- PV1-3:割り当てられた患者の場所(Facility^Service^Room^Bed)
- PV1-4:入院区分(E=緊急、R=通常など)
- PV1-6:前の患者の場所(転送の場合)
- PV1-7:担当医(DoctorId^LastName^FirstName)
- PV1-10:病院の診療科
- PV1-19:来院番号(来院を一意に識別する番号)
- PV1-36:退院先(HOME、SNF、EXP など)
- PV1-44:入院日時
- PV1-45:退院日時
PV2 - 患者の来院 - 追加情報(任意)
目的:拡張された来院情報
主なフィールド:
- PV2-1:前の保留中の場所(転送の場合)
- PV2-3:入院理由
- PV2-8:退院予定日
- PV2-9:退院予定先
- PV2-47:外出許可からの帰院予定日時
IHE PAM の必須フィールド
すべての ADT メッセージで必須
- MSH-3:送信アプリケーション
- MSH-4:送信施設
- MSH-7:メッセージ日時
- MSH-9:メッセージタイプ
- MSH-10:メッセージ制御 ID
- MSH-12:バージョン ID(2.5)
- EVN-1:イベントタイプコード
- EVN-2:記録日時
- PID-3:患者識別子
- PID-5:患者名
- PID-7:生年月日
- PID-8:性別
入院/転送メッセージ(A01、A02)で必須
- PV1-2:患者クラス
- PV1-3:割り当てられた患者の場所
- PV1-19:来院番号
- PV1-44:入院日時
退院メッセージ(A03)で必須
- PV1-36:退院先
- PV1-45:退院日時
解析ロジック
HL7 IHE PAM メッセージの解析を依頼された場合:
-
セグメント終端文字で分割する:
segments = message.split('\r')またはsplit('\n') -
MSH セグメントを解析する(常に先頭):
- MSH-2 から区切り文字を抽出する:
^~\& - フィールド区切り文字:
| - コンポーネント区切り文字:
^ - 繰り返し区切り文字:
~ - エスケープ文字:
\ - サブコンポーネント区切り文字:
&
- MSH-2 から区切り文字を抽出する:
-
メッセージタイプを特定する:MSH-9 を確認する
- ADT^A01 = 入院
- ADT^A02 = 転送
- ADT^A03 = 退院
- など
-
各セグメントを解析する:
- フィールド区切り文字
|で分割する ^でコンポーネントを解析する~で繰り返しを解析する&でサブコンポーネントを解析する
- フィールド区切り文字
-
主なフィールドを抽出する:
- 患者 ID(PID-3)
- 患者名(PID-5)
- 生年月日(PID-7)
- 来院番号(PV1-19)
- 場所(PV1-3)
- 日時(PV1-44、PV1-45)
-
構造を検証する:
- 必須セグメントが含まれているか確認する
- 必須フィールドに値が入力されているか確認する
- 日付形式(YYYYMMDD、YYYYMMDDHHmmss)を検証する
- コード値(患者クラス、性別など)を検証する
-
説明を生成する:
- メッセージの目的を特定する
- イベントタイプを説明する
- 主な患者情報を列挙する
- 来院/受診の詳細を説明する
- 臨床的な背景を示す
出力形式の例
メッセージを解析する際は、次の内容を提示してください:
### HL7 IHE PAM Message Analysis
**Raw Message**:
[可視の区切り文字を含む元の HL7 メッセージ]
**Message Identification**:
- Message Type: ADT^A01
- Event Code: A01 (Admit/Visit Notification)
- Message Control ID: [MSH-10]
- Timestamp: [formatted MSH-7]
- Version: 2.5
**MSH - Message Header**:
- Sending Application: [MSH-3]
- Sending Facility: [MSH-4]
- Receiving Application: [MSH-5]
- Receiving Facility: [MSH-6]
- Processing ID: [MSH-11] (Production/Test)
**EVN - Event Type**:
- Event Code: [EVN-1]
- Recorded DateTime: [formatted EVN-2]
- Event Occurred: [formatted EVN-3]
- Operator: [EVN-5]
**PID - Patient Identification**:
- Patient ID: [PID-3]
- Patient Name: [formatted PID-5]
- Date of Birth: [formatted PID-7]
- Sex: [PID-8]
- Address: [formatted PID-11]
- Phone: [PID-13]
- [other relevant fields]
**PV1 - Patient Visit**:
- Patient Class: [PV1-2] ([description])
- Assigned Location: [formatted PV1-3]
- Attending Doctor: [formatted PV1-7]
- Hospital Service: [PV1-10]
- Visit Number: [PV1-19]
- Admit DateTime: [formatted PV1-44]
- [other relevant fields based on message type]
**PV2 - Additional Visit Info** (if present):
- Prior Location: [PV2-1]
- [other relevant fields]
**Business Context**:
[Explain what this message represents, the workflow event, and clinical significance]
**IHE PAM Compliance**:
- Required segments: [✓ or ✗ for MSH, EVN, PID, PV1]
- Required fields: [list of mandatory field validation results]
- Field formats: [✓ or ✗ for dates, codes, etc.]
一般的な ADT イベントコード
| コード | イベント名 | 目的 |
|---|---|---|
| A01 | 入院/来院通知 | 患者の入院 |
| A02 | 患者の転棟 | 病棟/病室間の移動 |
| A03 | 患者の退院 | 患者の退院 |
| A04 | 患者の登録 | 入院前または外来の登録 |
| A05 | 患者の入院前登録 | 入院予定の通知 |
| A06 | 外来から入院への変更 | ステータスの変更 |
| A07 | 入院から外来への変更 | ステータスの変更 |
| A08 | 患者情報の更新 | 人口統計情報の更新 |
| A09 | 患者の一時退出 — 追跡 | 患者が一時的に施設を離れた |
| A10 | 患者の帰着 — 追跡 | 患者が施設に戻った |
| A11 | 入院の取消 | 以前の入院を取り消す |
| A12 | 転棟の取消 | 以前の転棟を取り消す |
| A13 | 退院の取消 | 以前の退院を取り消す |
| A21 | 患者の一時外出 | 一時的な外出 |
| A22 | 患者の一時外出からの帰着 | 外出からの帰着 |
| A28 | 個人情報の追加 | データベースに新しい個人を追加 |
| A31 | 個人情報の更新 | 個人の人口統計情報を更新 |
患者クラスコード
| コード | 説明 |
|---|---|
| I | 入院 |
| O | 外来 |
| E | 救急 |
| P | 入院前 |
| R | 定期通院患者 |
| B | 産科 |
| C | 商業アカウント |
| N | 該当なし |
| U | 不明 |
退院時転帰コード
| コード | 説明 |
|---|---|
| HOME | 自宅または自己管理 |
| SNF | 熟練看護施設 |
| RH | リハビリテーション施設 |
| EXP | 死亡 |
| HOS | ホスピス |
| AADVICE | 医師の助言に反して退院 |
| OTH | その他 |
検証ルール
メッセージ構造
- 最初のセグメントは必ず MSH でなければなりません
- MSH-1 は必ず
|でなければなりません - MSH-2 は必ず
^~\&(エンコーディング文字)でなければなりません - セグメントは CR または LF で区切る必要があります
- フィールドは
|で区切る必要があります
メッセージタイプごとの必須セグメント
- A01、A04、A05: MSH、EVN、PID、PV1
- A02: MSH、EVN、PID、PV1(以前の場所には PV2 を推奨)
- A03: MSH、EVN、PID、PV1
- A08: MSH、EVN、PID(PV1 は任意)
- A11、A12、A13: MSH、EVN、PID
日付/時刻の形式
- 日付: YYYYMMDD
- 日時: YYYYMMDDHHmmss または YYYYMMDDHHmmss.SSSS
- 時刻: HHmmss
患者識別子の形式
- PID-3: PatientId^^^AssigningAuthority^IdentifierType
- 例: PAT12345^^^CHU_PARIS^PI
名前の形式
- PID-5: LastName^FirstName^MiddleName^Suffix^Prefix^Degree
- 例: DUPONT^JEAN^^M.
場所の形式
- PV1-3: PointOfCare^Room^Bed^Facility^LocationStatus^PersonLocationType^Building
- 例: CHU_PARIS^CARDIO^LIT_001^CHU_PARIS
参考ドキュメント
IHE PAM 仕様:
- フランス語: https://github.com/Interop-Sante/ihe.iti.pam.fr
- 国際版: https://profiles.ihe.net/ITI/TF/Volume1/ch-14.html
HL7 v2.5 標準:
- 公式: http://www.hl7.eu/HL7v2x/v25/std25/ch02.html
- セグメント: http://www.hl7.eu/HL7v2x/v25/std25/ch03.html
- データ型: http://www.hl7.eu/HL7v2x/v25/std25/ch02a.html
関連ツール:
- simple-hl7(Node.js): https://github.com/Bugs5382/node-hl7-client
- HAPI(Java): https://hapifhir.github.io/hapi-hl7v2/
クイックリファレンス
区切り文字
| Field delimiter
^ Component delimiter
~ Repetition delimiter
\ Escape character
& Subcomponent delimiter
一般的なフィールド
MSH-9 : Message Type (ADT^A01^ADT_A01)
MSH-10 : Message Control ID
EVN-1 : Event Type Code (A01, A02, etc.)
EVN-2 : Recorded DateTime
PID-3 : Patient ID
PID-5 : Patient Name
PID-7 : Birth Date
PID-8 : Sex
PV1-2 : Patient Class (I/O/E)
PV1-3 : Assigned Location
PV1-19 : Visit Number
PV1-44 : Admit DateTime
PV1-45 : Discharge DateTime