WorkaHolic

DB2 pureXML을 사용하여 의료 산업 데이터 솔루션 구현하기

2010. 9. 2. 15:28
반응형

QED(Query Existing Data) 솔루션

오늘날 의료 산업 분야에서는 상호 운용성과 표준이라는 화두가 떠오르고 있습니다. 병원과 의사에게 환자 레코드를 효율적으로 공유하기 위한 상호 운용 기능을 제공하기 위해서는 표준의 사용이 핵심입니다. IBM Research에서는 IHE 및 HL7 표준을 포함한 의료 산업의 여러 표준을 조사하고 있습니다. 이 기사에서는 이러한 표준과 프로토콜을 간략히 소개한 후 IHE QED 프로토콜을 따르는 IBM DB2? pureXML? 솔루션을 활용한 시나리오를 설명합니다.

 

소개

이 기사에서 다루는 내용은 다음과 같다.

- QED 구현의 아키텍처를 소개한다.
- QED 솔루션의 구성 요소를 설명한다.
- QED 프로파일에서 요청하는 쿼리를 소개한다.
- w3c의 XQuery 언어를 사용하여 쿼리를 구현한다.

 

용어에 대한 이해

IHE

IHE(Integrating the Healthcare Enterprise)는 의료 분야 컴퓨터 시스템의 정보 공유 방법을 향상시키기 위해 의료 전문가 및 업계에서 추진하고 있는 이니셔티브이다. IHE 통합 프로파일을 지원하는 시스템은 호환성이 좋고, 구현하기 쉬우며, 의료 공급자가 정보를 더욱 효과적으로 사용할 수 있다.

IHE 이니셔티브의 목표는 최적의 간호 정보를 효율적으로 전달하는 것이다. 수백 개의 제품이 하나 이상의 IHE 프로파일을 지원한다. 일반적인 IHE 프로파일에서는 관리 및 임상 데이터를 위해 HL7과 같은 기존 표준을 사용하며, 의료 이미지 정보를 위해 DICOM을 사용한다. 프로파일은 선택된 각 메시지가 요청된 비즈니스 유스 케이스를 충족하도록 제약한다.

QED

QED(Query Existing Data)는 임상 데이터에 대한 동적 쿼리를 지원하는 통합 프로파일 중 하나이다. QED는 임상 소비 시스템에서 임상 소스 시스템에 임상 정보를 쿼리하는 유스 케이스를 정의한다. QED는 다양한 유형의 쿼리를 정의하며, 이러한 쿼리는 모두 환자 중심적이다. 임상 소비 시스템에서는 활력 징후, 알레르기, 투약, 예방접종, 진단 결과, 절차 및 방문 기록을 포함한 특정 환자의 다양한 임상 데이터를 요청한다. QED 프로파일은 HL7 도메인 표준을 컨텐츠 모델로 사용하며 쿼리 및 결과의 전달을 위해 일반적인 HL7 메시징 형식을 사용한다. 응답은 쿼리의 매개변수에 따라 임상 데이터를 설명하는 CDA 스니펫과 같은 임상 보고서로 구성되어 있다. HL7에서는 XML을 통해 표준을 표시할 수 있도록 XML Schema Generator를 개발했다.

RIM

RIM(Reference Information Model)은 HL7 V3 개발 방법론의 핵심이다. RIM은 특정 임상 또는 관리 컨텍스트에 필요한 데이터 컨텐츠를 표시한다. RIM은 HL7 메시지 필드로 전달되는 정보 간의 의미론적 및 사전적 연관성을 명시적으로 표시한다. RIM은 ANSI 승인 및 ISO 승인 표준이다. RIM 기반 애플리케이션 및 저장소는 관계형 스키마를 기반으로 개발되었다.

RIMon

2009년 2월 IBM Haifa Research 팀에서는 환자의 임상 데이터를 North American 2009 Connectathon에 조회하는 IHE QED 솔루션을 발표했다. 이 팀에서는 다양한 형식의 임상 데이터를 표준화된 프레임워크로 통합하는 데이터 웨어하우스를 사용하여 다른 업체의 시스템(예: General Electric, Corp.)에서 발행한 QED 쿼리를 IBM QED 데이터 소스에 대해 실행할 수 있다는 것으로 성공적으로 시연해 보였다. 이 기사에서는 RIMon이라는 QED 솔루션과 이 솔루션을 통해 흩어져 있는 임상 데이터를 쿼리할 경우 의료 산업에서 얻을 수 있는 장점에 대해 설명한다.

HL7 RIM 기반 웨어하우스인 RIMon은 그림 1과 같이 지속성 계층에서 XML을 사용하며 의미론적 상호 운용성을 지원한다. 이는 XML이 HL7 스펙에서 선호하는 구현 기술이기 때문이다.

그림 1. RIM(Reference Information Model)의 UML 클래스 다이어그램

(확대 이미지를 볼 수 있다.)

DB2 pureXML

DB2 pureXML은 QED 쿼리에 필요한 리턴 형식(즉, XML로 표시되는 임상 보고서)을 이미 RIMon에서 사용할 수 있기 때문에 QED 임상 데이터 소스 시스템을 구현하는 데 이상적인 도구이다. RIMon 데이터 웨어하우스를 사용하면 다양한 소스와 다양한 형식의 데이터를 HL7 XML 표시를 사용하여 최상의 상태로 관리되는 표준화된 프레임워크로 통합할 수 있다.

Connectathon

IHE North American Connectathon은 후원 조직, HIMSS(Health Information Management Systems Society) 및 RSNA(Radiological Society of North America)에서 관리하는 1주일 분량의 테스트 이벤트이다. 전세계 IHE Connectathon의 목표는 상업용 의료 IT 시스템에서 표준 기반 IHE 상호 운용성 솔루션의 사용을 증진시키는 것이다. IHE Connectathon은 참가 업체의 구현을 다른 업체의 구현과 함께 테스트할 수 있는 업계 전반의 테스트 이벤트로 활용되고 있다.

 

QED 아키텍처에 대한 이해

IBM Haifa Research 팀의 솔루션은 그림 2와 같다.

그림 2. IBM QED 프로파일 솔루션 아키텍처

주요 구성 요소

IBM Research 솔루션의 주요 구성 요소는 임상 데이터 소스, 임상 데이터 소스 인터페이스 및 임상 데이터 소비자이다. 임상 데이터 소스는 RIMon 저장소로 구성되어 있다. RIMon 저장소에는 DB2 V9의 pureXML 기능을 사용하여 CDA 문서가 XML로 삽입되는 DB2 데이터베이스가 있다. QED 표준 쿼리에 필요한 모든 결과는 CDA 문서에 있다. 삽입된 CDA 문서에 대해 작성된 정적 XQuery는 QED 표준 쿼리에 응답하는 데 필요한 데이터를 추출할 수 있다. 이러한 쿼리는 일괄처리 모드로 실행되어 다음과 같은 데이터가 포함된 테이블을 작성할 수 있다.

- QED 쿼리에 응답하는 데 필요한 데이터
- 추가 속성 데이터
- 데이터 소스에 대한 참조된 XPath

IBM Research 솔루션을 사용하는 사용자는 여러 가지 이유로 XML 문서에서 원하는 데이터를 추출할 수 있다. 사용자가 여러 다양한 스키마를 하나의 XML 열에 가지고 있거나 XML 문서가 매우 크고 복잡할 경우 특정 애플리케이션에 필요한 데이터 부분이스 또는 애플리케이션에 쉽게 적용할 수 있다. QED 쿼리 결과를 작성하려면 전체 XML 문서를 그대로 유지해야 한다.

복잡한 데이터를 사용 가능한 데이터로 만들기

CDA 구조가 매우 복잡하기 때문에 속성 맵핑, 데이터의 XPath 추가 및 구성 파일에 추가된 추가 데이터가 필요하다. CDA 구조는 의도적으로 모호하다. 왜냐하면 이 구조의 스키마가 거의 모든 유형의 의학적 관찰 또는 조치를 위해 설계된 표준이기 때문이다. CDA를 직접 읽거나 CDA 문서를 직접 쿼리하려고 하면(웨어하우스에 있는 변형 템플리트에 대한 사전 이해 없이) 진료실에서 발생하는 실제 의료 절차나 작업을 나타내는 모든 임베디드 의료 코드를 이해하기가 어려울 것이다. 예를 들어, 심장 박동에 대한 코드는 8867-4이고 알레르기에 대한 템플리트 ID는 1.3.6.1.4.1.19376.1.5.3.1.4.5.3이다. CDA의 코드는 SNOMED 및 LOINC를 포함한 표준 건강 용어에서 파생되었기 때문에 의학과 관련이 없는 사용자는 일반적으로 이 코드에 익숙하지 않다. 맵핑을 사용하면 의학과 관련이 없는 사용자가 표준 글로벌 용어의 코드가 없어도 QED 스펙에 정의된 대로 심장 박동 데이터를 요청할 수 있다. 심장 박동은 내부적으로 코드 8867-4에 맵핑되며 올바른 관찰 데이터가 리턴된다.

이 추출된 데이터가 임상 데이터 소스이다. 임상 데이터 소비자는 심장 박동, 신장 또는 알레르기를 조회하는 요청을 발행할 수 있다(그림 3 참조).

그림 3. 임상 데이터 소스

사용자는 GUI(Graphical User Interface)를 통해 QED 스펙을 기반으로 하는 모든 QED 표준 쿼리에 대한 요청을 발행할 수 있다(참고자료 참조). 임상 데이터 소스 소비자는 QED 요구사항에 따라 요청을 XML 형식의 PCC-1 QED 응답으로 랩핑한다. 그런 다음 임상 데이터 소스 소비자는 응답을 임상 데이터 소스 인터페이스에게 보낸다(Listing 1 참조).

Listing 1. PCC-1 QED 응답

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:q0="urn:hl7-org:v3"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
<soapenv:Body>
<QUPC_IN043100UV01 ITSVersion="XML_1.0" xmlns="urn:hl7-
org:v3"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- A unique identifier for this transmission (mandatory). -->
<id extension="123" root="2.16.840.1.113883.19.4"/>
<!-- The time that the transmission was created. -->
<creationTime value="20100222185444"/>
<interactionId extension="QUQI_IN000003UV01" root="2.16.840.1.113883.5"/>
<!-- debugging, production or training -->
<processingCode code="T"/>
<!--
Archive, Current Processing, Initial Load or Restore from Archive
-->
<processingModeCode code="T"/>
<!-- Always, Errors only or Never -->
<acceptAckCode code="AL"/>
<receiver typeCode="RCV">
<device classCode="DEV" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.3.18.12.7.30.20"/>
</device>
</receiver>
<sender typeCode="SND">
<device classCode="DEV" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.3.18.12.7.30.20.77"/>
<name>IBM QED clinical Consumer testing utility</name>
<telecom value="http://ibm2:8080/qedConsumer/QedConsumer.html"/>
<manufacturerModelName>QED clinical consumer module</manufacturerModelName>
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
<softwareName>QED clinical consumer device softwareName</softwareName>
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
</device>
</sender>
<controlActProcess classCode="CACT" moodCode="RQO">
<id extension="111" root="2.16.840.1.113883.19.4"/>
<!-- the identifier of the query -->
<code code="QUPC_TE043100UV"/>
<!-- The trigger event code -->
<effectiveTime value="20100222185444"/>

QED 임상 데이터 소스 인터페이스는 API를 사용하여 정적 XQueries에서 작성된 관계형 데이터베이스와 같은 임상 데이터 소스에 대해 XML 요청을 실행하는 간단한 SQL 문을 작성한다. 임상 데이터 소스 인터페이스는 이 쿼리에 일치하는 CDA에서 얻은 결과를 PCC-1 QED 응답으로 랩핑하고 임상 데이터 소비자는 이 응답을 일반 사용자에게 표시한다(그림 4 참조).

그림 4. PCC-1 QED 결과

예제 솔루션에서는 QED 메시지의 의료 코드를 임상 데이터 소스 내의 속성에 맵핑한다. 임상 데이터 소스에서 추출된 데이터의 XPATH도 정의되었다.

 

쿼리 처리하기

정적 쿼리는 CDA 문서에 대해 실행되어 QED 표준 쿼리에 대한 데이터를 추출한다. 쿼리 결과가 임상 데이터 소스 데이터베이스에 추가될 뿐만 아니라 쿼리를 통해 QED 스펙을 충족하는 데 필요한 데이터를 찾을 수 있도록 추가 필드도 추가되고 맵핑되었다. 데이터에 대한 XPath도 열에 포함되었다. Connectathon 위원회에서는 IBM Research 팀의 데모가 수용해야 하는 쿼리를 기술했다. Listing 2에서는 심장 박동 관찰을 추출한 쿼리를 보여 준다.

Listing 2. 심장 박동 관찰

xquery
declare default element namespace "urn:hl7-org:v3";
for $obs in db2-fn:xmlcolumn('RIM.INSTANCE')
//section[@classCode='DOCSECT']
[code/@code='8716-3']/entry/observation[@classCode='OBS']
[code/@code='8867-4']
let $y := fn:root($obs)
let $entity_ext:=$y/*/id/@extension
let $entity_root:=$y/*/id/@root
let $effectiveTime:=$obs/effectiveTime[1]
let $statusCode:=$obs/statusCode
return <ibm:res xmlns:ibm="http://www.ibm.com/hrl" xmlns:v3="urn:hl7-org:v3"
entity_ext="{string($entity_ext)}" entity_root="{string($entity_root)}"
attr="HEART_BEAT" value="{string($obs/value/@value)}"
nullFlavor="{string($obs/value/@value/../@nullFlavor)}"
bakRef_root="{string($obs/id/@root)}" bakRef_ext="{string($obs/id/@extension)}">
<ibm:props>{$effectiveTime}{$statusCode}</ibm:props></ibm:res>

심장 박동 쿼리에서는 XML 데이터 쿼리를 위한 표준 언어인 w3c XQuery 언어를 사용한다. 네임스페이스가 선언된다. 왜냐하면 모든 CDA에 이 네임스페이스가 포함되어 있기 때문이다. db2-fn:xmlcolumn 함수는 XML 열을 쿼리하기 위한 DB2 관련 함수이다. Listing 2는 RIM 테이블의 INSTANCE 열을 쿼리한다. //section[@classCode='DOCSECT'] 행은 심장 박동이 있는 해당 관찰로 이동하기 위한 XPath이다. 8716-3 및 8867-4 코드는 심장 박동에 대한 올바른 관찰 세그먼트임을 나타낸다.

CDA 문서에는 여러 관찰 세그먼트가 있을 수 있다. 유효 시간, 상태 코드와 같은 Listing 2의 다른 요소는 QED 응답에 필요한 CDA 문서의 다른 요소이다. 이러한 요소는 추출되어 임상 데이터 소스로 리턴된다.

추가 속성인 Heart_Beat는 심장 박동 코드인 8867-4로 맵핑되도록 코딩되었다. 또한 원본 문서의 XPath는 이러한 값을 찾기 위해 유지된다.

pureXML 저장소를 직접 사용하기

임상 데이터 소스 인터페이스에서는 DB2 pureXML 저장소에 직접 액세스할 수도 있다. 그런 다음에는 pureXML 저장소가 임상 데이터 소스가 된다. 현재 간단한 SQL 문을 생성하는 API를 변경하여 CDA 문서에 직접 액세스할 수 있는 XQuery 또는 XML/SQL 쿼리를 생성할 수 있다. 그렇게 되면 데이터를 관계형 데이터베이스로 추출하는 일괄처리 작업을 더 이상 실행하지 않아도 된다. 이 쿼리는 QED 응답에 필요한 것과 동일한 데이터를 리턴할 수 있으며, 인터페이스에서는 이 데이터를 사용하여 임상 데이터 소비자를 채울 수 있다. Listing 3에서는 심장 박동 활력 징후를 가져오는 XML/SQL 쿼리 예제를 보여 준다.

심장 박동을 직접 가져오는 XML/SQL 쿼리

SELECT XMLQUERY ('$d//*:section/*:entry/*:observation[@classCode="OBS"
and *:code/@code="8867-4"]' passing DOCUMENT as "d")
FROM CDA WHERE ID=?

ID 값은 GUI에 입력한 환자 ID이다. code/@code="8867-4"] 코드는 심장 박동 선택 항목에서 온 것이다. 이 쿼리에서 *:는 실제 네임스페이스와 바꿀 수 있는 네임스페이스에 대한 와일드카드를 나타낸다. 이 쿼리는 데이터베이스 테이블(CDA)에 대해 실행되도록 작성되었으며 환자 ID를 CDA에서 관계형 열로 추출한다. DOCUMENT 열은 XML 기반 CDA가 삽입된 위치를 나타낸다

 

데모 사용하기

QED 요청을 RIMon QED Data Source에 보내서 QED Consumer 웹 인터페이스(참고자료 참조)를 사용해 볼 수 있다. 이 웹 인터페이스에서는 QED 요청을 작성하고, QED 응답을 변환하고, 전송되는 정보를 볼 수 있다. 유효한 환자 ID는 120과 130이다. 기본 환자 ID는 root로 그대로 둔다.

 

결론

IBM Research 팀의 데모는 QED 임상 데이터 소스 시스템을 DB2 pureXML에 성공적이면서도 편리하게 구현할 수 있음을 보여 주었다. 많은 요인이 관계형 데이터베이스의 데이터를 추출할지 여부에 영향을 준다. 하지만 pureXML을 사용하여 얻을 수 있는 장점 중 하나는 소스 XML 문서를 그대로 유지할 수 있다는 것이다. 이 소스를 저장해 두면 CDA, CCD, EMR 및 기타 의료 XML 기반 문서를 포함한 데이터가 필요한 여러 다양한 애플리케이션에서 이 저장소를 활용할 수 있다.

 

 

필자소개

Vikram Vaswani는 오픈 소스 도구와 기술을 전문으로 다루는 컨설팅 서비스 회사인 Melonfire의 창립자이자 CEO이며 PHP Programming Solutions 및 PHP: A Beginners Guide의 저자이기도 하다.

 

출처 : 한국 IBM


반응형