Arden Syntax簡單的說就是把醫師的臨床決策思維,用結構化、電子化方式表達出來。既然可行,此決策所需的臨床資料當然是數位化。
若是直接從資料庫的話,那也就沒什麼好討論的。此篇是想用一個MLM來看看,要怎麼從FHIR或CDA R2中取得資料。或許我想表達的是臨床資料是時間性的。
===== MLM =====
title: "Heart Rate Rhythm Monitoring"mlmname: "HeartRateRhythmMonitoring"
version: "1.0"
institution: "Example Hospital"
author: "Dr. Jane Smith"
specialist: "Cardiology"
date: "2024-12-10"
validation: testing
purpose: "To monitor the heart rate rhythm of a patient and provide recommendations"
explanation: "This MLM checks the patient's heart rate and rhythm, and provides recommendations based on the results."
knowledge:
type: data-driven
data:
heart_rate: numeric
heart_rhythm: text
recommendation: text
logic:
evoke:
if exists(heart_rate) and exists(heart_rhythm)
data:
heart_rate := getField("heart_rate")
heart_rhythm := getField("heart_rhythm")
action:
if heart_rate < 60 then
recommendation := "Bradycardia detected. Consider further evaluation and possible intervention."
else if heart_rate >= 60 and heart_rate <= 100 then
recommendation := "Heart rate is within the normal range. Continue regular monitoring."
else if heart_rate > 100 then
recommendation := "Tachycardia detected. Consider further evaluation and possible intervention."
if heart_rhythm == "irregular" then
recommendation := recommendation + " Irregular heart rhythm detected. Consider further evaluation and possible intervention."
message:
"The patient's heart rate is {heart_rate} and the rhythm is {heart_rhythm}. Recommendation: {recommendation}."
===========
這個MLM是用來監控心跳,然後給出建議或警告。所需要的資料為heart rate與heart rhythm。
接著來看看FHIR有沒有Profile來規範。
===== FHIR =====
所幸,US Core IG有Heart Rate Profile。
可惜,找不到heart_rhythm的規範。從MLM中只知道他是一段文字。
==========
接著來看若資料從CDA R2來取得時。
從C-CDA Online (https://www.hl7.org/ccdasearch/) 查詢可得,有Vital Signs Section,其中有包含Heart Rate Rhythm 子區段。
===== CDA R2 =====
<section><templateId root="2.16.840.1.113883.10.20.22.2.4.1"/>
<templateId root="2.16.840.1.113883.10.20.22.2.4.1" extension="2015-08-01"/>
<code code="8716-3" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"
displayName="Vital signs"/>
<title>Vital Signs (Last Filed)</title>
<text>
<table>
<thead>
<tr>
<th>Date</th>
<th>Pulse</th>
<th>Heart Rhythm</th>
<!-- other vitals signs could exist here-->
</tr>
</thead>
<tbody>
<tr>
<td>05/20/2014 7:36pm</td>
<td ID="Pulse_1">80 /min</td>
<td ID="Pulsequalifier_1">Heart irregularly irregular</td>
<!-- other vitals sign values could exist here-->
</tr>
</tbody>
</table>
</text>
<entry typeCode="DRIV">
<!-- When a set of vital signs are recorded together, include them in single clustered organizer-->
<organizer classCode="CLUSTER" moodCode="EVN">
<templateId root="2.16.840.1.113883.10.20.22.4.26"/>
<templateId root="2.16.840.1.113883.10.20.22.4.26" extension="2015-08-01"/>
<id extension="21688133041015158234"
root="2.16.840.1.113883.3.42.126.100001.19"/>
<code code="46680005" displayName="Vital Signs" codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT">
<translation code="74728-7"
displayName="Vital signs, weight, height, head circumference, oximetry, BMI, and BSA panel "
codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"/>
</code>
<statusCode code="completed"/>
<effectiveTime value="20140520193605-0600"/>
<!-- Each vital sign should be its own component. -->
<component>
<observation classCode="OBS" moodCode="EVN">
<templateId root="2.16.840.1.113883.10.20.22.4.27"/>
<templateId root="2.16.840.1.113883.10.20.22.4.27" extension="2014-06-09"/>
<id extension="216881330410151584"
root="2.16.840.1.113883.3.42.126.100001.19"/>
<code code="8867-4" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"
displayName="Heart rate"/>
<text>
<reference value="#Pulse_1"/>
</text>
<statusCode code="completed"/>
<effectiveTime value="20140520193605-0600"/>
<value xsi:type="PQ" value="80" unit="/min"/>
</observation>
</component>
<component>
<observation classCode="OBS" moodCode="EVN">
<templateId root="2.16.840.1.113883.10.20.22.4.2"/>
<templateId root="2.16.840.1.113883.10.20.22.4.2" extension="2015-08-01"/>
<id extension="216881330410151"
root="2.16.840.1.113883.3.42.126.100001.19"/>
<code xsi:type="CE" codeSystem="2.16.840.1.113883.6.1"
codeSystemName="LOINC"
code="8884-9" displayName="Heart rate rhythm"/>
<text>
<reference value="#Pulsequalifier_1"/>
</text>
<statusCode code="completed" />
<effectiveTime value="20140520193605-0600" />
<value xsi:type="CE" codeSystem="2.16.840.1.113883.6.96"
codeSystemName="SNOMED CT" code="248651005"
displayName="Heart irregularly irregular (finding)"/>
</observation>
</component>
</organizer>
</entry>
</section>
這是一個Vital Sign的Template,他可以包含兩個Component,分別是Heart rate (LOINC: 8867-4)與Heart rate rhythm (LOINC: 8884-9)。然後再分別從value中取出內容值。其中Heart rate rhythm比較麻煩,他是一個編碼文字採用SNOMED CT。
==========
===== 結語 =====
先捨棄Heart rate rhythm這個要求。畢竟MLM中也是獨立判斷項目。
從使用者應用的角度來說,CDS HOOKS的應用情境應該是醫師先定位好病患,然後,看這個醫師「註冊」了什麼樣的CDS HOOKS來協助。
這時候情境就要確認:
(1)醫師當時是要處理什麼事情。
這時候情境就要確認:
(1)醫師當時是要處理什麼事情。
(2)臨床資料是否已經取得。
(2)CDS是自動啟動還是要醫師點選。
(3)需要參考CDS建議後,才寫入病歷資料。
畢竟我不是臨床人員,所以我也不知道答案。但就我淺薄的概念來看,CDA R2更適合這個情境。
我的感覺,這時候醫師不會無聊的去亂按鈕,嚐鮮式的去按按鈕,看看有什麼東西。
有可能就是正要寫Progress Note。然後有收集了一些Vital Signs (也許是從FHIR來),然後一股腦地都丟給MLM(當然不是本篇所示,可以更複雜),然後得回一堆的建議,之後複製到病歷中,產生一份Progress Note。從Progress Note的建議內容來說,是可以有Vital Signs區段。這時候,所有的建議是匯集在同一份臨床文件上。
有可能就是正要寫Progress Note。然後有收集了一些Vital Signs (也許是從FHIR來),然後一股腦地都丟給MLM(當然不是本篇所示,可以更複雜),然後得回一堆的建議,之後複製到病歷中,產生一份Progress Note。從Progress Note的建議內容來說,是可以有Vital Signs區段。這時候,所有的建議是匯集在同一份臨床文件上。
=============
不管用誰,都得搞定實做。CDS HOOK要怎麼基於MLM來實做呢?這是接著要克服的東西。
不管用誰,都得搞定實做。CDS HOOK要怎麼基於MLM來實做呢?這是接著要克服的東西。
沒有留言:
張貼留言