# 임상 대시보드를 위한 HL7 v2 및 FHIR

> HL7 v2 ORU^R01 실험실 메시지에서 대시보드 타일로: 범위 및 플래그가 있는 FHIR Observations, 서명된 웹훅, 중복 없음 — 그리고 이것이 왜 침상 모니터링이 아닌지에 대한 설명.

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

**임상 대시보드는 보고되는 순간 구조화되고 코딩된 데이터로 결과를 필요로 합니다 — 테스트, 값, 단위, 참조 범위 및 플래그 — 읽어야 하는 PDF가 아닙니다.** 실험실은 여전히 대부분의 결과를 HL7 v2 ORU^R01 메시지로 보내지만, 대시보드는 FHIR R4 Observations를 기반으로 구축하는 것이 가장 쉽습니다. Anpheros는 이 둘 사이에 위치합니다: 실험실 시스템은 HTTPS를 통해 HL7 v2 메시지(또는 CSV 또는 JSON 보고서)를 게시하고, 각 결과는 코드(실험실에서 보낸 경우 LOINC), 값 및 참조 범위가 있는 FHIR Observation이 되며, 서명된 웹훅은 새 결과가 도착했음을 대시보드에 알립니다.

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

## 대시보드가 수신하는 내용

메시지의 각 OBX 세그먼트는 하나의 검사 관찰(laboratory Observation)이 됩니다.

| HL7 v2 OBX 필드 | FHIR R4 Observation | 대시보드 상 |
|---|---|---|
| OBX-3 검사 코드 | `code` (검사실에서 보낼 때 LOINC; 검사실 자체 코드는 검사실 코드로 유지) | 검사 이름; LOINC는 검사실 간 비교 가능하게 함 |
| OBX-5 값, OBX-6 단위 | `valueQuantity` (UCUM 단위) | 숫자와 단위 |
| OBX-7 참고 범위 | `referenceRange` | 정상 범위 |
| OBX-8 이상 플래그 | `interpretation` (H, L, …) | 빨간색 또는 파란색 플래그 |
| OBX-14 시간 | `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'] });
```

각 전송은 서명되며(SDK의 `verifyWebhookSignature`로 확인) 서버가 응답하지 않으면 재시도됩니다. 이벤트는 리소스 유형, ID 및 환자를 전달합니다. 새 관찰 항목을 읽고 타일을 새로 고칩니다. 재전송된 보고서는 건너뛰므로, 타임아웃 시 재전송하는 실험실은 화면에 중복 행을 생성하지 않습니다.

## 각 링크에 HL7 v2 또는 FHIR 선택하기

| 링크 | 사용 | 이유 |
|---|---|---|
| Laboratory → data layer | HL7 v2 ORU^R01 (또는 CSV/JSON) | 실험실 시스템에서 이미 내보내는 형식; 해당 시스템 측 변경 불필요 |
| Data layer → dashboard | FHIR R4 Observation + webhooks | 프론트엔드에서 직접 읽을 수 있는 코딩되고 버전이 관리되는 JSON |
| Dashboard → other apps | FHIR R4, 환자의 동의 하에 | 모든 소비자에게 적용되는 단일 표준 |

## 이것은 무엇이 아닙니다

- **침대 옆 모니터 피드가 아닙니다.** Anpheros는 HTTPS를 통해 검사실 보고서를 수락합니다. 중환자실 모니터에서 지속적인 파형이나 장치 스트림을 수신하지 않으며, 경보 시스템도 아닙니다. 치료에 영향을 미치는 알림은 인증된 임상 시스템이 필요합니다.
- **MLLP 인터페이스 엔진이 아닙니다.** 메시지는 HTTPS를 통해 도착합니다. 실험실에서 TCP를 통한 MLLP만 지원하는 경우, 앞단의 인터페이스 엔진이 이를 전달합니다.
- **하나의 HL7 v2 메시지 유형입니다.** ORU^R01 검사실 결과는 수락되지만, 주문(ORM/OML) 및 ADT 메시지는 수락되지 않습니다.

## 자주 묻는 질문

### 대시보드에서 HL7 v2 실험실 결과를 직접 읽을 수 있나요?
가능하지만, 모든 대시보드마다 자체 HL7 v2 파서, 코드 매핑 및 중복 제거 기능이 필요합니다. LOINC 코드를 사용하여 FHIR R4 Observations로 한 번 변환하면 모든 화면에서 동일한 깨끗한 데이터를 얻을 수 있습니다.

### 가져온 결과는 대시보드에 얼마나 빨리 도달하나요?
Observations가 저장되면 가져오기 요청이 반환되며, 동시에 각 Observations에 대해 `resource.created` 웹훅이 큐에 추가됩니다. 엔드포인트가 사용할 수 없는 경우 배달이 재시도됩니다.

### 비정상 결과는 어떻게 플래그가 지정되나요?
OBX-8은 Observation의 `interpretation` (예: H 또는 L)이 되고 OBX-7은 `referenceRange`이 되므로, 대시보드에서 플래그와 정상 범위를 모두 표시할 수 있습니다.

### Anpheros는 ICU 모니터링을 지원하나요?
아니요. 실험실 및 임상 결과를 저장하고 새 데이터에 대해 시스템에 알립니다. 지속적인 침대 옆 모니터링 및 임상 경보는 인증된 의료 기기에 유지됩니다.

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

## 관련 자료

- [Lab results API: HL7 v2, FHIR 및 LOINC](https://developers.anpheros.com/ko/guides/lab-results-api)
- [FHIR 레코드에 검사 결과 가져오는 방법](https://developers.anpheros.com/ko/guides/import-lab-results-fhir)
- [Lab connector](https://developers.anpheros.com/ko/guides/lab-connector): 엔드포인트 참조
- [FHIR 대 HL7 v2: 실제 차이점](https://developers.anpheros.com/ko/guides/fhir-vs-hl7-v2)
- [FHIR을 사용한 원격 환자 모니터링](https://developers.anpheros.com/ko/guides/remote-patient-monitoring-fhir)
- [웹훅](https://developers.anpheros.com/ko/guides/webhooks)
