# HL7 v2 から FHIR へのマッピング

> セグメントからリソースへのマッピング、および HL7 v2 ORU^R01 から FHIR R4 への OBX フィールドごとのマッピング、統合を妨げる落とし穴、そして HTTPS 経由で呼び出せるコンバーターについて。

Source: https://developers.anpheros.com/ja/guides/hl7-v2-to-fhir-mapping

**HL7 v2 を FHIR にマッピングするとは、パイプ区切りの v2 メッセージの各セグメントを FHIR R4 リソースに変換することです。PID は Patient に、OBR は DiagnosticReport (または ServiceRequest) に、各 OBX は Observation に変換され、コード、単位、範囲、時刻はフィールドごとに引き継がれます。** HL7 は、一般的なセグメントのコンセプトマップを含む公式の [V2-to-FHIR 実装ガイド](https://hl7.org/fhir/uv/v2mappings/) を公開しています。このページでは、検査結果 (ORU^R01) の実際のマッピング、実際の統合を妨げる落とし穴、そして HTTPS 経由で呼び出せるコンバーター、すなわち Anpheros ラボコネクターについて説明します。

<!-- visual:v2map-flow -->

## セグメントからリソースへ

| 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つのリクエストでメッセージを変換する

```bash
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がリストされます。それぞれにレポート、テスト、時間、値から派生した安定した識別子が割り当てられるため、同じメッセージを再送信しても重複は作成されません。

## 実運用で問題となる落とし穴

1.  **タイムゾーン。** `20261002074500` にはオフセットがありません。送信者のタイムゾーンを明示的に決定してください。
2.  **ローカルコード。** LOINC がない場合は、ラボ固有のコードを保持してください。決して削除しないでください。
3.  **再送信。** 結果ごとに安定した識別子がないと、リトライが重複になります。
4.  **修正。** OBX-11 `C` は修正です。置き換えか追加かを決定し、古い結果にマークを付けてください。
5.  **非数値値。** `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` になります。

<!-- visual:cta-v2map -->

## 関連情報

- [検査結果API: HL7 v2, FHIR, LOINC](https://developers.anpheros.com/ja/guides/lab-results-api)
- [FHIRとHL7 v2: 実用的な違い](https://developers.anpheros.com/ja/guides/fhir-vs-hl7-v2)
- [FHIRレコードへの検査結果のインポート方法](https://developers.anpheros.com/ja/guides/import-lab-results-fhir)
- [臨床ダッシュボードのためのHL7 v2とFHIR](https://developers.anpheros.com/ja/guides/clinical-dashboard-hl7-fhir)
- [ラボコネクタ](https://developers.anpheros.com/ja/guides/lab-connector)
