# 検査結果API：HL7 v2、FHIR、LOINC

> 検査結果がHL7 v2およびFHIR R4データとしてどのように伝達されるか、1つの結果が何を伝える必要があるか、そして検査レポートをFHIRレコードに受信する方法について、実際の例を交えて説明します。

Source: https://developers.anpheros.com/ja/guides/lab-results-api

**検査結果APIは、PDFではなく構造化データ（テストコード、値、単位、参照範囲、ステータス、時刻）として検査結果を配信するため、ソフトウェアで保存、比較、グラフ化、共有できます。** 現在、そのデータは3つの形式で伝達されています。HL7 v2 ORU^R01メッセージ（ラボと病院間のバックボーンとして依然として使用）、HL7 FHIR R4 `Observation` および `DiagnosticReport` リソース（最新APIの形式）、そしてラボ固有のCSV、JSON、PDFエクスポートです。このページでは、各要素がどのように連携するか、優れた検査結果APIが何を伝える必要があるか、そしてAnpherosを使用して患者のFHIRレコードに検査データを受信する方法について説明します。

## ラボ結果を交換する主体とフォーマット

| 送信元 → 送信先 | 現在の一般的なフォーマット | 備考 |
|---|---|---|
| 検査機関 → 病院またはクリニックシステム | HL7 v2 ORU^R01 (米国ではHL7 v2.5.1 Laboratory Results Interface guideに準拠することが多い) | オーダーは逆方向でORM/OMLメッセージとして送信される |
| 検査機関 → 公衆衛生機関 | HL7 v2 electronic lab reporting、FHIRの利用が増加 | 報告義務のある疾患のみ |
| クリニックシステム → 患者アプリ | 患者アクセスAPI経由のFHIR R4 | 米国では、認定されたEHRはラボ結果をFHIR (US Core) として公開する。EUでは、European Health Data Spaceがラボ結果を優先データカテゴリにリストアップしている |
| 検査機関 → 患者 | PDFレポート、ポータル、場合によってはCSV | 患者が実際に受け取るフォーマット |
| アプリ → AIモデル | Observationsから構築された構造化コンテキスト | コードと単位が信頼性のために必要 |

方向性は重要です。検査情報システム (LIS) は結果の真実の情報源であり、下流のすべてのシステムはそのコピーを保持します。コピーが信頼できるのは、各コピーが値のコード、単位、範囲、および出所を保持しているためです。

## 1つの検査結果に必要な情報

「グルコース 126」というだけの結果では、安全に解釈できません。完全な結果には以下の情報が必要です。

- **標準コード。** LOINC は分析対象物、検体、測定方法を特定します。`2345-7` は血清または血漿中のグルコース、`2339-0` は全血中のグルコースです。ラボ独自のコードも併記できます。
- **単位付きの値。** UCUM 単位 (`mg/dL`, `mmol/L`, `10*3/uL`) が理想的です。これにより、異なるラボの値も変換して比較できます。
- **ラボが使用した基準範囲**と、ラボが提供する場合の**解釈フラグ** (H, L, N など)。
- **ステータス:** 速報値、確定値、修正、または訂正。修正は発生します。API は、古いバージョンを失うことなく新しいバージョンを表示できる必要があります。
- **日時:** 検体が採取された日時 (`effectiveDateTime`) と、結果がリリースされた日時 (`issued`)。
- **出典:** どのラボが生成したか、どのレポートまたはオーダーに属するか。

FHIR R4 では、各結果は `Observation` であり、`category = laboratory` を持ちます。それらをグループ化するレポートは `DiagnosticReport` であり、`result` に観測結果をリストします。バリデーターが最も頻繁に報告する間違いを含む、両方の有効な例は [FHIR R4 JSON の例](https://developers.anpheros.com/tools/fhir-examples/observation-lab-result) にあります。また、[DiagnosticReport の例](https://developers.anpheros.com/tools/fhir-examples/diagnostic-report) も参照してください。

## HL7 v2 と FHIR の比較

今日の多くの検査機関が送信する形式と、API が保存すべき形式での同じ脂質パネルの結果:

```
OBX|1|NM|2093-3^Cholesterol^LN||212|mg/dL|<200|H|||F|||20261002074500
```

| HL7 v2 フィールド | 意味 | FHIR R4 Observation 要素 |
|---|---|---|
| OBX-3 `2093-3^Cholesterol^LN` | LOINC でコード化された検査 | `code.coding` (システム `http://loinc.org`) |
| OBX-5 `212`, OBX-2 `NM` | 数値 | `valueQuantity.value` |
| OBX-6 `mg/dL` | 単位 | `valueQuantity.unit` |
| OBX-7 `<200` | 参照範囲 | `referenceRange.high` |
| OBX-8 `H` | 異常フラグ | `interpretation` |
| OBX-11 `F` | 最終結果 | `status = final` |
| OBX-14 | 観測時間 | `effectiveDateTime` |

両者の変換は、ほとんどがフィールドのマッピングです。難しい部分は他にあります。LOINC の代わりに独自のコードを送信する検査機関、テキストとして記述された数値 (`"6,4"`, `"<5"`)、複数の表記法での範囲、タイムアウト後に再送信されるレポートなどです。[医療データの正規化方法](https://developers.anpheros.com/ja/guides/normalize-medical-data) で、それらを詳細に説明しています。

## Anpheros で FHIR レコードに検査結果を取り込む

Anpheros は各患者のレコードを HL7 FHIR R4 として保存しており、[ラボコネクタ](https://developers.anpheros.com/ja/guides/lab-connector) を備えています。このコネクタは、HL7 v2、CSV、または JSON 形式のレポート全体を 1 つのリクエストで受け取り、LOINC コード、参照範囲、解釈、および来歴情報を含む検査結果 (Observation) を返します。

```bash
curl -s -X POST "https://platform.anpheros.com/v1/patients/$PID/labs/import" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: x-application/hl7-v2+er7" \
  -H "X-Anpheros-Source-System: springfield-lis" \
  --data-binary @lipid-panel.hl7
```

ローカル環境でプラットフォームを実行した場合、3項目（コレステロール、HDL、トリグリセリド）の脂質パネルの結果は以下のようになります。

```json
{
  "created": 3, "skipped": 0, "unmapped": [], "warnings": [],
  "observations": [
    {"id": "26ed9219-…", "marker": "Cholesterol", "code": "2093-3", "system": "http://loinc.org",
     "value": 212.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"},
    {"id": "2633d1d4-…", "marker": "HDL cholesterol", "code": "2085-9", "system": "http://loinc.org",
     "value": 48.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"},
    {"id": "a02520bb-…", "marker": "Triglyceride", "code": "2571-8", "system": "http://loinc.org",
     "value": 165.0, "unit": "mg/dL", "date": "2026-10-02T07:45:00Z"}
  ]
}
```

保存された各結果は標準的な FHIR R4 Observation であり、どの FHIR クライアントからでも読み取ることができます。

```json
{
  "resourceType": "Observation",
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "2093-3",
                        "display": "Cholesterol [Mass/volume] in Serum or Plasma"}], "text": "Cholesterol"},
  "subject": {"reference": "Patient/4c3062d9-…"},
  "effectiveDateTime": "2026-10-02T07:45:00Z",
  "valueQuantity": {"value": 212.0, "unit": "mg/dL"},
  "interpretation": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation", "code": "H"}]}],
  "referenceRange": [{"high": {"value": 200.0, "unit": "mg/dL"}}]
}
```

同じメッセージを再度送信しても、新しいものは作成されません (`"created": 0, "skipped": 3`)。各行は、レポート ID、コード、日付、および値から安定した識別子を取得します。プラットフォームが LOINC にマッピングできないマーカーは、ラボのコードを保持し、`unmapped` で返されるため、ソースでマッピングを修正できます。

結果の読み取りは標準的な FHIR 検索です。

```bash
curl -s "https://platform.anpheros.com/fhir/R4/Observation?patient=$PID&category=laboratory&code=http://loinc.org|2093-3" \
  -H "Authorization: Bearer $KEY"
```

同じデータへのその他の入出力方法：

- **FHIR 直接:** `POST /fhir/R4/Observation`、または `DiagnosticReport` とその Observation をまとめたトランザクションバンドル。
- **イベント:** Observation ごとに `resource.created` [Webhook](https://developers.anpheros.com/ja/guides/webhooks) が送信されるため、クリニックやアプリは結果が到着したときに反応できます。
- **人間および AI 向け:** 患者はアプリで結果を確認できます。患者が同意したアプリケーションが結果を読み取ることができます。`POST /v1/context` は、最近の検査値を含むソースラベル付きの要約を AI モデルに提供します。
- **来歴:** インポートされた各結果は、`author_type = import`、ソースシステム、およびレポート ID ([医療データ来歴](https://developers.anpheros.com/guides/medical-data-provenance)) を記録します。

CSV レポート、HL7 v2 メッセージ、マッピングされていないマーカー、および合成患者に対する再送信レポートを含む完全なウォークスルーは、チュートリアル [FHIR レコードへの検査結果のインポート方法](https://developers.anpheros.com/ja/guides/import-lab-results-fhir) で提供されています。

## 送信する前に結果を確認する

無料の[FHIR R4バリデーター](https://developers.anpheros.com/tools/fhir-validator)は、Observationの構造と必須バリューセットをチェックします。また、`eu-lab`プロファイルを使用すると、検査結果が持つべき項目（`laboratory`カテゴリ、LOINCコード、被験者、最終ステータス、日時、値、UCUM単位、参照範囲）もチェックします。同じチェックがプラットフォーム上でも`POST /fhir/R4/Observation/$validate?profile=eu-lab`を通じて実行されます。

## 検査結果APIの選択：チェックリスト

- FHIR R4 ObservationとしてLOINCコードで結果を保存しますか、それとも独自のスキーマの行として保存しますか？
- 検査機関が実際に送信する形式（ほとんどの病院ではHL7 v2、小規模な検査機関からはCSVまたはPDF）を受け入れられますか？
- マッピングできないマーカーはどうなりますか？拒否されますか、破棄されますか、それとも検査機関のコードとともに保持されますか？
- リトライは安全ですか、それとも再送信されたレポートが重複を作成しますか？
- 修正された結果はバージョン管理され、以前の値はまだ読み取れますか？
- すべての値の発生元が記録され、患者に表示されますか？
- 結果は誰が読み取ることができますか、そしてそれは患者の同意によって決定されますか？

## Anpheros が行わないこと

Anpheros は、ラボ情報システムではなく、商用ラボネットワークにも接続されていません。レポートは、ラボ、クリニック、または患者のアプリから送信されます。ラボオーダーのルーティング、この API を介した PDF レポートの読み取り（Anpheros Daily アプリは患者側の写真や PDF から結果を抽出します）、および臨床的な結果の解釈は行いません。単位はラボから送信されたまま保存されます。UCUM コードへの変換は送信者側で行う必要があり、これは [医療データを正規化する方法](https://developers.anpheros.com/ja/guides/normalize-medical-data) で説明されています。

## よくある質問

### ラボ結果APIとは何ですか？
ラボ結果を、文書ではなく構造化されたデータ（コード化されたテスト、単位付きの値、参照範囲、ステータス、および時間）として送受信できるインターフェースです。最新のラボ結果APIはHL7 FHIR R4のObservationおよびDiagnosticReportリソースを使用しますが、ほとんどのラボは依然としてHL7 v2 ORU^R01メッセージを発行しています。

### ラボテストを識別するコードシステムは何ですか？
LOINCです。各LOINCコードは、分析対象物、検体、および多くの場合測定方法を指定するため、`2345-7`（血清または血漿中のグルコース）と`2339-0`（全血中のグルコース）は異なる結果となります。単位はUCUMで表現するのが最適です。

### ObservationとDiagnosticReportの違いは何ですか？
Observationは、コレステロール 212 mg/dLのような単一の結果です。DiagnosticReportはレポート全体（依頼されたパネル、発行者、発行日時など）であり、`result`にそのObservationをリストします。

### HL7 v2ラボメッセージをFHIRサーバーにインポートできますか？
はい。各OBXセグメントは1つのObservationにマッピングされます（OBX-3は`code`に、OBX-5およびOBX-6は`valueQuantity`に、OBX-7は`referenceRange`に、OBX-8は`interpretation`に）。Anpherosラボコネクタはこれを1回の要求で実行し、ラボのレポートIDをProvenanceに保持します。

### レポートが再送信された場合に重複するラボ結果を回避するにはどうすればよいですか？
レポート、テスト、時間、および値から派生した安定した識別子を各結果に付与し、識別子が存在する行はスキップします。Anpherosラボコネクタはこれを自動的に行い、カウントを`skipped`として報告します。

## 関連情報

- [HL7 v2 から FHIR へのマッピング](https://developers.anpheros.com/ja/guides/hl7-v2-to-fhir-mapping): 全てのセグメントと OBX フィールド
- [FHIR レコードへの検査結果のインポート方法](https://developers.anpheros.com/ja/guides/import-lab-results-fhir): ステップバイステップチュートリアル
- [ラボコネクタ](https://developers.anpheros.com/ja/guides/lab-connector): エンドポイントリファレンス
- [医療データの正規化方法](https://developers.anpheros.com/ja/guides/normalize-medical-data): LOINC, UCUM, 日付, 範囲, 重複
- [医療データプロベナンスの説明](https://developers.anpheros.com/guides/medical-data-provenance)
- [FHIR コードシステム](https://developers.anpheros.com/ja/guides/fhir-code-systems)
- [クリニックシステムと FHIR バックエンドの連携方法](https://developers.anpheros.com/ja/guides/integrate-clinic-systems-fhir)
- [FHIR vs HL7 v2: 実用的な違い](https://developers.anpheros.com/ja/guides/fhir-vs-hl7-v2)
- [臨床ダッシュボードのための HL7 v2 と FHIR](https://developers.anpheros.com/ja/guides/clinical-dashboard-hl7-fhir): ラボメッセージからダッシュボードタイルまで
