[英]Mirth 3.3 Custom ACK/NAK for TCP Source
我真的是新人,對 Java 腳本也不太熟悉,但我的 Mirth 3.3 源設置為 TCP 偵聽器,我收到一條 HL7 ADT 消息。 僅當 PID3.1 可用時,我一直在使用類型為規則生成器的源過濾器來處理消息。 我想要實現的是,如果消息由於缺少 PID 而被過濾,我想發送帶有詳細信息“缺少患者 ID”的 AR 消息。 我的最終目的地也是 TCP 監聽器(不確定這是否重要)
我在全局腳本(后處理)中有以下代碼
function setACK(sourceMsg,responseCode,responseMsg,responseStatus) {
importPackage(com.mirth.connect.model);
// responseStatus is an optional parameter
if (!responseStatus)
responseStatus = {'AA':Response.Status.SUCCESS,'AR':Response.Status.FILTERED,'AE':Response.Status.FAILURE}[responseCode] || Response.Status.UNKNOWN;
var ack = <HL7Message/>;
ack.MSH['MSH.1'] = sourceMsg.MSH['MSH.1'].toString();
ack.MSH['MSH.2'] = sourceMsg.MSH['MSH.2'].toString();
ack.MSH['MSH.3'] = sourceMsg.MSH['MSH.5'].copy();
ack.MSH['MSH.4'] = sourceMsg.MSH['MSH.6'].copy();
ack.MSH['MSH.5'] = sourceMsg.MSH['MSH.3'].copy();
ack.MSH['MSH.6'] = sourceMsg.MSH['MSH.4'].copy();
ack.MSH['MSH.7']['MSH.7.1'] = DateUtil.getCurrentDate('yyyyMMddHHmmss');
ack.MSH['MSH.9']['MSH.9.1'] = sourceMsg.MSH['MSH.9']['MSH.9.1'].toString();
ack.MSH['MSH.9']['MSH.9.2'] = sourceMsg.MSH['MSH.9']['MSH.9.2'].toString();
ack.MSH['MSH.9']['MSH.9.3'] = 'ACK';
ack.MSH['MSH.10'] = sourceMsg.MSH['MSH.10'].copy();
ack.MSH['MSH.11'] = sourceMsg.MSH['MSH.11'].copy();
ack.MSH['MSH.12'] = sourceMsg.MSH['MSH.12'].copy();
ack.MSA['MSA.1']['MSA.1.1'] = responseCode;
ack.MSA['MSA.2']['MSA.2.1'] = sourceMsg.MSH['MSH.10']['MSH.10.1'].toString();
ack.MSA['MSA.3']['MSA.3.1'] = responseMsg;
responseMap.put('ACK',new Response(responseStatus,SerializerFactory.getHL7Serializer().fromXML(ack)));
在源過濾器下,我有 Javascript 規則,代碼如下
if(msg['PID']['PID.3']['PID.3.1'].toString().length > 0) {
return true;
}
setACK(msg,'AR',"MIssing Patient ID.");
return false;
這仍然不起作用我仍然收到一條錯誤消息進行處理。
在接收器通道的Source Transformer中,您可以添加以下內容作為第一步:
var verified = false;
for each (var pid in msg['PID']['PID.3']) {
if (pid['PID.3.1'].toString()) {
verified = true;
break;
}
}
var ack;
if (verified) {
ack = ACKGenerator.generateAckResponse(connectorMessage.getRawData(), "AA", "Accepted");
} else {
ack = ACKGenerator.generateAckResponse(connectorMessage.getRawData(), "AE", "PID.3.1-Patient Identifier is missed");
destinationSet.removeAll();
}
responseMap.put("ACK", ack);
消息中可能發送了多個 PID。 此外,響應可能是AE代碼,除非您的個人資料中另有說明。 AR保留用於其他類型的驗證。 此代碼段不檢查傳入消息是否使用增強確認模式。 顯然,您需要將通道的 Source connector Response 設置為 ACK。
我正在部署相同類型的通道,但在過濾器中收到錯誤:
詳細信息:ReferenceError:未定義“setACK”。 在 1fe5079d-9186-428b-b2a1-a06342dbba7e:58 (filterRule 在 1fe5079d-9186-428b-b2a1-a06342dbba7e:61 (doFilter) 在 1fe5079d-9186-428b-b2a1-a06342dbba7e:104 (doScript)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.