# HL7 v2 и FHIR для клинических дашбордов

> От лабораторного сообщения HL7 v2 ORU^R01 до плитки дашборда: FHIR Observations с диапазонами и флагами, подписанные вебхуки, отсутствие дубликатов — и почему это не мониторинг у постели больного.

Source: https://developers.anpheros.com/ru/guides/clinical-dashboard-hl7-fhir

**Клиническому дашборду нужны результаты в виде структурированных, кодированных данных в момент их получения — тест, значение, единица измерения, референсный диапазон и флаг — а не PDF-файлы, которые ему приходится читать.** Лаборатории по-прежнему отправляют большинство результатов в виде сообщений HL7 v2 ORU^R01, в то время как дашборды проще всего создавать на основе FHIR R4 Observations. Anpheros находится между ними: лабораторная система отправляет сообщение HL7 v2 (или отчет в формате CSV или JSON) через HTTPS, каждый результат становится FHIR Observation с его кодом (LOINC, если его отправила лаборатория), значением и референсным диапазоном, а подписанный вебхук уведомляет ваш дашборд о поступлении новых результатов.

<!-- visual:dashboard-pipeline -->

## Что получает дашборд

Каждый сегмент OBX сообщения становится одним лабораторным наблюдением (Observation):

| Поле HL7 v2 OBX | FHIR R4 Observation | На дашборде |
|---|---|---|
| OBX-3 test code | `code` (LOINC, если лаборатория его отправляет; локальный код сохраняется как код лаборатории) | Название теста; LOINC делает его сопоставимым между лабораториями |
| OBX-5 value, OBX-6 unit | `valueQuantity` (единица UCUM) | Число и его единица измерения |
| OBX-7 reference range | `referenceRange` | Нормальный диапазон |
| OBX-8 abnormal flag | `interpretation` (H, L, …) | Красный или синий флажок |
| OBX-14 time | `effectiveDateTime` | Время взятия образца |

<!-- visual:dashboard-mock -->

## Импорт сообщения и реакция на него

Отправьте сообщение для созданного вами пациента (или того, на кого у вас есть разрешение):

```ts
import { readFile } from 'node:fs/promises';
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });   // a sandbox key, sk_test_…
const message = await readFile('oru_r01.hl7', 'utf8');
const result = await anpheros.labs.importHl7(patientId, message, { sourceSystem: 'lab-lis' });
console.log(result);   // created, skipped and unmapped counts
```

Затем позвольте платформе вызвать ваш бэкенд панели управления вместо опроса:

```ts
await anpheros.webhooks.create('https://dashboard.example.org/anpheros/hook', { events: ['resource.created'] });
```

Каждая доставка подписана (проверьте ее с помощью `verifyWebhookSignature` из SDK) и повторяется, если ваш сервер не отвечает. Событие содержит тип ресурса, идентификатор и пациента; прочитайте новые Observations и обновите плитку. Повторно отправленные отчеты пропускаются, поэтому лаборатория, которая повторно передает данные при тайм-ауте, не создает дублирующихся строк на экране.

## Выбор HL7 v2 или FHIR для каждого канала связи

| Канал связи | Использование | Причина |
|---|---|---|
| Лаборатория → слой данных | HL7 v2 ORU^R01 (или CSV/JSON) | То, что уже генерируют лабораторные системы; никаких изменений с их стороны |
| Слой данных → панель управления | FHIR R4 Observation + webhooks | Кодированный, версионированный JSON, который ваш фронтенд может читать напрямую |
| Панель управления → другие приложения | FHIR R4, с согласия пациента | Единый стандарт для всех потребителей |

## Чем это не является

- **Не поток данных с прикроватного монитора.** Anpheros принимает лабораторные отчеты по HTTPS. Он не получает непрерывные волновые формы или потоки данных с мониторов интенсивной терапии и не является системой оповещения: оповещения, влияющие на уход, требуют сертифицированной клинической системы.
- **Не интерфейсный движок MLLP.** Сообщения поступают по HTTPS; если ваша лаборатория работает только с MLLP через TCP, интерфейсный движок на переднем плане перенаправляет их.
- **Один тип сообщения HL7 v2.** Принимаются лабораторные результаты ORU^R01; заказы (ORM/OML) и сообщения ADT не принимаются.

## Часто задаваемые вопросы

### Может ли дашборд напрямую читать лабораторные результаты HL7 v2?
Может, но тогда каждому дашборду потребуется собственный парсер HL7 v2, сопоставление кодов и дедупликация. Однократное преобразование в FHIR R4 Observations с кодами LOINC предоставляет каждому экрану одни и те же чистые данные.

### Как быстро импортированные результаты достигают дашборда?
Запрос на импорт возвращается, когда Observations сохранены, и одновременно ставится в очередь `resource.created` вебхуков для каждого из них. Повторные попытки доставки выполняются, если ваш конечный пункт недоступен.

### Как помечаются аномальные результаты?
OBX-8 становится `interpretation` Observation (например, H или L), а OBX-7 — его `referenceRange`, чтобы дашборд мог отображать как флаг, так и нормальный диапазон.

### Поддерживает ли Anpheros мониторинг в реанимации?
Нет. Он хранит лабораторные и клинические результаты и уведомляет ваши системы о новых данных; непрерывный мониторинг у постели больного и клинические сигналы остаются за сертифицированными медицинскими устройствами.

<!-- visual:cta-dashboard -->

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

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