Mirth 3.3 TCP源自定义ACK/NAK:缺失PID时返回AR消息
嘿,我明白你现在的需求啦——给那些因为缺PID被过滤的ADT消息发送一条带“Missing Patient ID”的AR响应,对吧?作为Mirth和JS新手,咱们一步步来,保证你能搞定:
实操步骤详解
1. 把源过滤器换成JavaScript类型
原来的规则构建器只能做“要不要过滤”的判断,没法在过滤的时候触发发送AR消息的动作,所以第一步先切换过滤器类型:
- 打开你的Mirth通道,进入「Source」标签页
- 在「Filter」区域,把下拉框从「Rule Builder」改成JavaScript
2. 编写过滤器逻辑(自带AR消息发送)
在JavaScript过滤器的编辑框里,写入以下代码,我给你逐行标了注释,方便理解:
// 1. 把收到的原始HL7消息转换成XML格式,方便解析 var msg = new XML(connectorMessage.getRawData()); var hasPatientID = false; // 2. 检查PID段的第3个字段的第1个组件(也就是PID3.1)是否存在且不为空 if (msg['PID']['PID.3'] && msg['PID']['PID.3']['PID.3.1'].toString().trim() !== '') { hasPatientID = true; } // 3. 如果没找到有效Patient ID,就构建并发送AR消息 if (!hasPatientID) { // 先获取原消息的控制ID(MSH10),用来填到AR消息的MSA段里 var originalControlId = msg['MSH']['MSH.10'].toString() || 'UNKNOWN'; // 组装HL7格式的AR消息(注意用HL7标准的换行符\r,日期和UUID用Mirth自带工具生成) var arMessage = "MSH|^~\&|MIRTH|YOUR_FACILITY|SENDER_FACILITY|RECEIVER_FACILITY|" + DateUtil.getCurrentDate("yyyyMMddHHmmss") + "||ACK^A01|"+ DateUtil.generateUUID() +"|P|2.3\r"; arMessage += "MSA|AE|" + originalControlId + "|Missing Patient ID\r"; // 发送AR消息:如果是要回复给原TCP发送方,用下面这句 connectorMessage.getResponseSender().send(arMessage); // 如果是要发送到另一个指定的TCP目标通道,就换成 channel.sendMessage('目标通道的ID', arMessage); // 返回false,告诉Mirth这条消息要被过滤,不进入后续处理流程 return false; } // 如果有有效Patient ID,返回true,让消息正常走后续流程 return true;
3. 调整TCP监听器的响应设置(避免重复回复)
如果你的TCP监听器之前设的是「Respond with ACK」,记得改成Do Not Respond,不然Mirth会自动发默认ACK,和我们手动发的AR消息重复:
- 在Source的「TCP Listener」设置里,找到「Response」选项,选择「Do Not Respond」
4. 测试验证
- 模拟发送一条缺PID3.1的ADT消息到你的TCP端口
- 检查发送方是否收到带“Missing Patient ID”的AR消息
- 确认这条消息不会进入通道的后续处理(比如目的地)
新手小贴士
- 写代码的时候可以用Mirth的「Test Filter」功能,输入一条测试消息,实时看逻辑是否生效
- HL7段的字段索引在Mirth的XML解析里是用
.分隔的,比如PID.3.1就对应PID段第3个字段的第1个组件 - 如果你的全局脚本里已经写了构建HL7消息的工具函数,直接复用就行,不用重复写AR消息的组装代码
内容的提问来源于stack exchange,提问作者mitesh patel
相关产品推荐
相关产品推荐

