簡體   English   中英

用於 TCP 源的 Mirth 3.3 自定義 ACK/NAK

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM