Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
HL7 v2からFHIRへのマッピング
HL7 v2 ORU^R01からFHIR R4へのセグメント対リソース、OBXフィールドごとのマッピング、連携を妨げる落とし穴、そしてHTTPSで呼び出せるコンバーターについて説明します。
HL7 v2 を FHIR にマッピングするとは、パイプ区切りの v2 メッセージの各セグメントを FHIR R4 リソースに変換することです。PID は Patient に、OBR は DiagnosticReport (または ServiceRequest) に、各 OBX は Observation に変換され、コード、単位、範囲、時刻はフィールドごとに引き継がれます。 HL7 は、一般的なセグメントのコンセプトマップを含む公式の V2-to-FHIR 実装ガイド を公開しています。このページでは、検査結果 (ORU^R01) の実際のマッピング、実際の統合を妨げる落とし穴、そして HTTPS 経由で呼び出せるコンバーター、すなわち Anpheros ラボコネクターについて説明します。
- MSHSeparators, message type, message id → MessageHeader or provenance
- PIDPatient identity → Patient (or, in Anpheros, the patient in the URL)
- OBRThe order and report → DiagnosticReport, report id and date
- OBXOne result each → Observation with LOINC, value, range, flag
- FHIR recordCoded, versioned resources your apps can read
セグメントからリソースへ
| HL7 v2 セグメント | 運ぶ内容 | FHIR R4 リソース | Anpheros ラボコネクタでの扱い |
|---|---|---|---|
| MSH | 区切り文字、送信システム、メッセージタイプ、メッセージID | MessageHeader (または provenance) |
MSH から区切り文字を読み取り、ORU^R01 のタイプをチェックし、トレーサビリティのためにメッセージIDを保持 |
| PID | 患者識別子、氏名、生年月日、性別 | Patient |
使用しない: 患者はリクエストURLの患者であるため、メッセージが誤ったレコードに書き込まれることはない |
| PV1 | 訪問情報 | Encounter |
使用しない |
| ORC / OBR | オーダーとレポート: filler/placer ID、日付 | ServiceRequest, DiagnosticReport |
OBR-3 (または OBR-2) はレポートID、OBR-7 はデフォルトの日付 |
| OBX | 1つの結果 | Observation |
OBX ごとに 1 つのラボ Observation |
| NTE | フリーテキストノート | Observation.note |
使用しない |
OBXフィールドごとのマッピング
| OBXフィールド | FHIR Observation 要素 | 備考 |
|---|---|---|
| OBX-2 value type (NM, SN, ST, CWE) | choice of value[x] |
NM および SN は valueQuantity になります。テキストはそのままテキストとして扱われます。 |
OBX-3 identifier code^text^system |
code.coding |
OBX-3.3 の LN は LOINC を意味します。その他のシステムは、検査機関のローカルコードです。 |
| OBX-5 value, OBX-6 unit | valueQuantity.value, .unit / .code (UCUM) |
<5 および 6,4 は意図的に解析する必要があります。 |
| OBX-7 reference range | referenceRange.low / .high |
3.5-5.1, <200, >40 |
| OBX-8 abnormal flag | interpretation |
H, L, HH, LL, A, N |
| OBX-11 result status | status |
F → final, C → amended, P → preliminary, I → registered |
| OBX-14 observation time | effectiveDateTime |
v2 の時刻にはタイムゾーンがないことがよくありますが、FHIR では必須です。 |
1つのリクエストでメッセージを変換する
curl -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: x-application/hl7-v2+er7" \
-H "Idempotency-Key: $(uuidgen)" \
--data-binary @oru_r01.hl7
回答には、作成されたObservationの数、既にインポート済みとしてスキップされた数、マッピングできなかったマーカー、そしてコード付きの新しいObservationがリストされます。それぞれにレポート、テスト、時間、値から派生した安定した識別子が割り当てられるため、同じメッセージを再送信しても重複は作成されません。
実運用で問題となる落とし穴
- タイムゾーン。
20261002074500にはオフセットがありません。送信者のタイムゾーンを明示的に決定してください。 - ローカルコード。 LOINC がない場合は、ラボ固有のコードを保持してください。決して削除しないでください。
- 再送信。 結果ごとに安定した識別子がないと、リトライが重複になります。
- 修正。 OBX-11
Cは修正です。置き換えか追加かを決定し、古い結果にマークを付けてください。 - 非数値値。
positive、<5、6,4には、推測ではなく明示的なルールが必要です。
コネクタの機能外
HTTPS 経由で ORU^R01 の検査結果を受け付けます。ADT またはオーダーメッセージは受信せず、TCP 経由の MLLP (インターフェースエンジンがフォワード可能) は使用せず、DiagnosticReport を作成せず、PID から患者をマッチングしません。
よくある質問
HL7 v2 を FHIR にマッピングするにはどうすればよいですか?
セグメントごとに行います。PID は Patient に、PV1 は Encounter に、ORC/OBR は ServiceRequest および DiagnosticReport に、OBX は Observation に、NTE は notes にマッピングされます。HL7 の V2-to-FHIR 実装ガイドで、フィールドレベルの概念マッピングが定義されています。
HL7 v2 から FHIR へのコンバーターはありますか?
はい。インターフェースエンジンやオープンソースライブラリがメッセージを変換します。検査結果については、Anpheros のラボコネクタが ORU^R01 メッセージを FHIR R4 Observations に1回の HTTPS リクエストで変換し、患者の記録に保存します。
Anpheros はどの HL7 v2 メッセージタイプを受け入れますか?
ORU^R01 検査結果です。他のタイプのメッセージは警告が表示され、OBX セグメントのみが読み取られます。ADT、オーダー、その他のメッセージはサポートされていません。
HL7 v2 の異常フラグは FHIR でどのように表現されますか?
HL7 ObservationInterpretation コード(H, L, HH, LL, A, N)を使用して、OBX-8 は Observation.interpretation になります。
関連情報
- 検査結果API: HL7 v2, FHIR, LOINC
- FHIRとHL7 v2: 実用的な違い
- FHIRレコードへの検査結果のインポート方法
- 臨床ダッシュボードのためのHL7 v2とFHIR
- ラボコネクタ
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card