FHIR에서 Bed Occupancy(병상 점유) 관리를 위한 표준 구현
FHIR에서 병상(Bed) 점유 관리는 **Location** 리소스를 중심으로 하며, `operationalStatus`가 핵심입니다. 별도의 전용 "Bed Occupancy IG"가 하나로 정해져 있지는 않지만, HL7 공식 스펙(Patient Administration 모듈)과 실제 구현 패턴이 명확합니다.
### 1. 핵심 리소스: Location
병상은 **Location** 리소스로 표현합니다.
| 요소 | 설명 | 권장값 / 사용법 |
|------|------|-----------------|
| **mode** | 인스턴스 vs 종류 | `instance` (특정 병상) |
| **physicalType** (R4) / **form** (R5+) | 물리적 형태 | `bd` (Bed) — `http://terminology.hl7.org/CodeSystem/location-physical-type` |
| **partOf** | 상위 위치 계층 | Room → Ward → Building → Hospital |
| **status** | Location 리소스 자체의 가용성 | `active` / `suspended` / `inactive` |
| **operationalStatus** | **병상 점유 상태** (가장 중요) | v2 Table 0116 (아래 참조) |
| **identifier** | 병상 고유 번호 (예: "ICU-301-01") | 필수 권장 |
| **managingOrganization** | 관리 주체 (과/병동) | Organization 참조 |
#### operationalStatus (병상 상태 코드)
`Location.operationalStatus`는 **Preferred** 바인딩으로 `http://terminology.hl7.org/ValueSet/v2-0116` (HL7 v2 Table 0116 - Bed Status)를 사용합니다.
**주요 코드**:
| Code | Display | 의미 | 비고 |
|------|------------------|--------------------------|------|
| **O** | Occupied | 환자 점유 중 | 가장 중요 |
| **U** | Unoccupied | 비어 있음 (사용 가능) | - |
| **C** | Closed | 사용 불가 (폐쇄) | - |
| **H** | Housekeeping | 청소/하우스키핑 중 | - |
| **K** | Contaminated | 오염/소독 필요 | - |
| **I** | Isolated | 격리 병상 | - |
### 2. 표준 구현 패턴
#### 패턴 A: Location만으로 관리 (가장 일반적)
- ADT 시스템이나 Bed Management 시스템에서 `Location.operationalStatus`를 직접 업데이트
- 실시간 대시보드에서 `GET /Location?operationalStatus=O&physicalType=bd`로 조회
#### 패턴 B: Encounter와 연계 (더 정확하고 권장)
환자가 실제로 배정된 시점을 명확히 기록하려면 **Encounter**를 함께 사용합니다.
```json
// Encounter 예시 (간략)
{
"resourceType": "Encounter",
"status": "in-progress",
"class": { "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode", "code": "IMP" },
"subject": { "reference": "Patient/123" },
"location": [{
"location": { "reference": "Location/bed-icu-301-01" },
"status": "active",
"period": { "start": "2026-06-29T14:30:00Z" }
}]
}
```
이 패턴을 사용하면:
- `operationalStatus = O` + 활성 Encounter가 있으면 → 진짜 점유
- Encounter 종료 시 자동으로 `U`로 변경하는 로직 구현 가능
### 3. 위치 계층 구조 예시
```json
// Hospital
{
"resourceType": "Location",
"id": "hospital-main",
"name": "서울대병원 본관",
"mode": "instance"
}
// Ward
{
"resourceType": "Location",
"id": "ward-icu",
"name": "중환자실",
"partOf": { "reference": "Location/hospital-main" },
"mode": "instance"
}
// Room
{
"resourceType": "Location",
"id": "room-icu-301",
"name": "301호",
"partOf": { "reference": "Location/ward-icu" },
"mode": "instance"
}
// Bed (실제 점유 관리 대상)
{
"resourceType": "Location",
"id": "bed-icu-301-01",
"identifier": [{ "system": "http://hospital.example.com/bed", "value": "ICU-301-01" }],
"name": "Bed 01",
"mode": "instance",
"physicalType": {
"coding": [{ "system": "http://terminology.hl7.org/CodeSystem/location-physical-type", "code": "bd", "display": "Bed" }]
},
"partOf": { "reference": "Location/room-icu-301" },
"status": "active",
"operationalStatus": {
"system": "http://terminology.hl7.org/CodeSystem/v2-0116",
"code": "O",
"display": "Occupied"
}
}
```
### 4. 한국(KR Core)에서의 적용
- **KR Core** (HL7 Korea)에서는 별도의 Bed Occupancy 전용 프로파일은 아직 정의되어 있지 않습니다.
- `KR Core Encounter Profile`에서 `Encounter.location`을 지원하므로, 위 패턴 B를 그대로 따르는 것이 가장 안전합니다.
- 국내 병원 시스템(특히 대형병원)에서는 **Location + Encounter** 조합 + `operationalStatus` 업데이트가 가장 많이 사용되는 패턴입니다.
### 5. 고급 / 보고용 구현 (참고)
- **실시간 용량 보고** (공공/재난 대응):
- **HL7 FHIR UV SANER** IG (Situational Awareness for Novel Epidemic Response)
- **US SAFR** IG (최근 미국에서 활발히 개발 중)
- 이 IG들은 `Measure` + `MeasureReport` + CQL을 사용해 집계 보고를 표준화합니다.
- **예약 관리**: `Appointment` 리소스에 Location을 연결하거나 Extension으로 확장.
### 6. 구현 시 권장 사항
1. **실시간 업데이트**는 FHIR REST (`PUT` / `PATCH`) 또는 Subscription으로 처리
2. `operationalStatus` 변경 시 **AuditEvent**나 내부 로그를 남겨 이력 관리
3. 대시보드/검색 성능을 위해 `Location.physicalType=bd` + `operationalStatus` 인덱싱 권장
4. 가능하면 **Encounter와 연계**하는 패턴 B를 우선 검토 (데이터 정확도 ↑)
5. 확장이 필요하면 `Location`에 Extension을 최소한으로 사용 (core를 최대한 따르기)
### 참고 문서
- 공식 스펙: [Location - FHIR R5](https://hl7.org/fhir/location.html) (R4도 거의 동일)
- operationalStatus 바인딩: `http://terminology.hl7.org/ValueSet/v2-0116`
- KR Core: [hl7korea/krcore](https://build.fhir.org/ig/hl7korea/krcore/)
- SANER IG: 공공 보건 보고용으로 유용