# HL7 v2 到 FHIR 映射

> 从 HL7 v2 ORU^R01 到 FHIR R4 的段到资源以及 OBX 字段到字段的映射，导致集成中断的陷阱，以及一个可以通过 HTTPS 调用转换器。

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

**将 HL7 v2 映射到 FHIR 意味着将管道分隔的 v2 消息的每个段转换为 FHIR R4 资源：PID 映射到 Patient，OBR 映射到 DiagnosticReport（或 ServiceRequest），每个 OBX 映射到 Observation，代码、单位、范围和时间按字段逐一传递。** HL7 发布了官方的 [V2-to-FHIR implementation guide](https://hl7.org/fhir/uv/v2mappings/)，其中包含常见段的概念映射。本页提供了实验室结果（ORU^R01）的实际映射、导致实际集成中断的陷阱，以及一个可以通过 HTTPS 调用的转换器：Anpheros lab connector。

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

## 段到资源

| HL7 v2 段 | 包含内容 | FHIR R4 资源 | Anpheros 实验室连接器中的对应 |
|---|---|---|---|
| MSH | 分隔符、发送系统、消息类型、消息 ID | `MessageHeader` (或 provenance) | 从 MSH 读取分隔符；检查 ORU^R01 类型；保留消息 ID 以供追溯 |
| PID | 患者标识符、姓名、出生日期、性别 | `Patient` | 未使用：患者是请求 URL 中的患者，因此消息无法写入错误的记录 |
| PV1 | 就诊 | `Encounter` | 未使用 |
| ORC / OBR | 订单和报告：执行者/放置者 ID、日期 | `ServiceRequest`, `DiagnosticReport` | OBR-3 (或 OBR-2) 是报告 ID，OBR-7 是默认日期 |
| OBX | 单个结果 | `Observation` | 每个 OBX 对应一个实验室 Observation |
| NTE | 自由文本注释 | `Observation.note` | 未使用 |

## OBX 字段详解

| OBX 字段 | FHIR Observation 元素 | 备注 |
|---|---|---|
| OBX-2 值类型 (NM, SN, ST, CWE) | `value[x]` 的选择项 | NM 和 SN 转换为 `valueQuantity`；文本保持不变 |
| OBX-3 标识符 `code^text^system` | `code.coding` | OBX-3.3 中的 `LN` 表示 LOINC；其他系统为实验室本地代码 |
| OBX-5 值, OBX-6 单位 | `valueQuantity.value`, `.unit` / `.code` (UCUM) | `<5` 和 `6,4` 必须仔细解析 |
| OBX-7 参考范围 | `referenceRange.low` / `.high` | `3.5-5.1`, `<200`, `>40` |
| OBX-8 异常标志 | `interpretation` | H, L, HH, LL, A, N |
| OBX-11 结果状态 | `status` | F → final (最终), C → amended (已修改), P → preliminary (初步), I → registered (已注册) |
| OBX-14 观察时间 | `effectiveDateTime` | v2 时间通常缺少时区；FHIR 需要时区 |

## 转换包含一个请求的消息

```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 及其代码。每个 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，在一个 HTTPS 请求中完成，并将其存储在患者记录中。

### Anpheros 接受哪些 HL7 v2 消息类型？
ORU^R01 实验室结果。其他类型的消息会收到警告，并且只读取其 OBX 段；不支持 ADT、订单和其他消息。

### HL7 v2 中的异常标志如何在 FHIR 中表示？
OBX-8 使用 HL7 ObservationInterpretation 代码（H、L、HH、LL、A、N）转换为 `Observation.interpretation`。

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

## 相关

- [实验室结果 API：HL7 v2、FHIR 和 LOINC](https://developers.anpheros.com/zh/guides/lab-results-api)
- [FHIR 与 HL7 v2：实际区别](https://developers.anpheros.com/zh/guides/fhir-vs-hl7-v2)
- [如何将实验室结果导入 FHIR 记录](https://developers.anpheros.com/zh/guides/import-lab-results-fhir)
- [HL7 v2 和 FHIR 用于临床仪表板](https://developers.anpheros.com/zh/guides/clinical-dashboard-hl7-fhir)
- [实验室连接器](https://developers.anpheros.com/zh/guides/lab-connector)
