# Сопоставление HL7 v2 с FHIR

> Сопоставление сегментов с ресурсами и полей OBX по отдельности из HL7 v2 ORU^R01 с FHIR R4, ловушки, которые нарушают интеграцию, и конвертер, который вы вызываете через HTTPS.

Source: https://developers.anpheros.com/ru/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 lab |
|---|---|---|---|
| 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` | Одно лабораторное наблюдение (Observation) на OBX |
| NTE | Примечание свободного текста | `Observation.note` | Не используется |

## Поля OBX: подробное описание

| Поле OBX | Элемент FHIR Observation | Примечания |
|---|---|---|
| OBX-2 тип значения (NM, SN, ST, CWE) | choice of `value[x]` | NM и SN становятся `valueQuantity`; текст остается текстом |
| OBX-3 идентификатор `code^text^system` | `code.coding` | `LN` в OBX-3.3 означает 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
```

Ответ содержит информацию о количестве созданных наблюдений, количестве пропущенных как уже импортированных, маркерах, которые не удалось сопоставить, и новых наблюдениях с их кодами. Каждому присваивается стабильный идентификатор, полученный из отчета, теста, времени и значения, поэтому лаборатория, повторно отправляющая то же сообщение, не создает дубликатов.

## Ловушки, нарушающие реальные интеграции

1.  **Часовые пояса.** `20261002074500` не имеет смещения; явно определите зону отправителя.
2.  **Локальные коды.** Сохраняйте собственный код лаборатории, когда LOINC отсутствует; никогда не удаляйте его.
3.  **Повторные отправки.** Без стабильного идентификатора для каждого результата повторные попытки приводят к дубликатам.
4.  **Исправления.** OBX-11 `C` является исправлением; решите, заменяет ли он или добавляет, и пометьте старый результат.
5.  **Нечисловые значения.** `positive`, `<5`, `6,4` требуют явных правил, а не предположений.

## Что коннектор не делает

Он принимает лабораторные результаты ORU^R01 по HTTPS. Он не принимает сообщения ADT или заказов, не работает по MLLP через TCP (интерфейсный движок спереди может перенаправлять), не создает 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-запросом и сохраняет их в карте пациента.

### Какие типы сообщений HL7 v2 принимает Anpheros?
ORU^R01 — лабораторные результаты. Сообщение другого типа получает предупреждение, и читаются только его сегменты OBX; ADT, сообщения заказов и другие сообщения не поддерживаются.

### Как представлены флаги аномалий HL7 v2 в FHIR?
OBX-8 становится `Observation.interpretation` с использованием кодов интерпретации наблюдений HL7 (H, L, HH, LL, A, N).

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

## Связанные материалы

- [API лабораторных результатов: HL7 v2, FHIR и LOINC](https://developers.anpheros.com/ru/guides/lab-results-api)
- [FHIR против HL7 v2: практические различия](https://developers.anpheros.com/ru/guides/fhir-vs-hl7-v2)
- [Как импортировать лабораторные результаты в запись FHIR](https://developers.anpheros.com/ru/guides/import-lab-results-fhir)
- [HL7 v2 и FHIR для клинических панелей мониторинга](https://developers.anpheros.com/ru/guides/clinical-dashboard-hl7-fhir)
- [Коннектор для лабораторных данных](https://developers.anpheros.com/ru/guides/lab-connector)
