如何使用Mirth-Javascript删除HL7消息中的换行符?

时间:2019-03-27 17:48:03

标签: javascript hl7 mirth mirth-connect

HL7消息进入Mirth,并引发“处理”错误。 Raw格式的消息的最底部是部分行,该行已与其上方的行分开。我每次都必须手动更正。我希望将Mirth-Javascript用作可以解决此问题的消息过滤器,以便所有内容都可以在没有人工干预的情况下流动。

下面的消息片段触发错误。在此示例中,这是HL7消息的最后一行。

OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body||

||||||F|||202254836969552|||

目前,我唯一的解决方法是打开HL7消息,然后手动转到换行符,并将其调至该片段上方它上方的行。

HL7消息应如下所示:

OBX|68|FT|PT1103&IMP^PET/CT Imaging Whole Body||||||||F|||20190327101958|||

7 个答案:

答案 0 :(得分:1)

这有效。将以下内容放入预处理器。

message = message.replace(/[\r\n]+(?![A-Z][A-Z][A-Z0-9]\|)/g, "");

return message;

答案 1 :(得分:0)

删除通道的预处理器或附件脚本中的所有线路制动器,然后根据段名称将其重新插入。 最好的方法是停止消息生成系统,将线闸插入OBX.5字段。

答案 2 :(得分:0)

根据您的问题,包含换行符的HL7字段为OBX(5,1),其中应包含观察值。

观测值可能包含换行符作为数据的一部分。默认情况下,换行符(<CR>ASCII 13)是段分隔符。如果将其作为数据的一部分接收,则解析消息时会出现问题。这是您在问题中提到的问题的根本原因。

@AlonEitan在评论中提到:

  

The segment separator is not negotiable. It is always a carriage return

理想情况下,在生成HL7消息时,应将这些换行符替换为其转义序列。我先前的答案之一here中已经提供了有关它的更多详细信息。

所以,您的入站邮件

OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body||

||||||F|||202254836969552|||

应该实际上是

OBX|68|FT|PT6663&IMP^PET/CT Imaging Whole Body||\X0D\\X0D\||||||F|||202254836969552|||

关于您如何使用Mirth / Javascript执行此操作的实际问题,在您的特定用例中应该不需要。在将消息发送给Mirth之前,应完成此转换。因此,向您发送此消息的人应该像这样构建它。

在UI上实际显示观察值时,您再次需要执行相反的过程。

编辑:

如果换行符不同于<CR>(ASCII 13),则应在\X0D\中替换相应的十六进制。我的链接答案中提到了详细信息;我不在这里重复。

答案 3 :(得分:0)

删除所有换行符是一种方法,但是稍后可能会出现问题,您可以设置替换脚本,而不是'/ n',而是搜索'| / n |'或类似的字符串那样,它将解决该特定问题以及垂直分隔符之间的其他任何不希望出现的换行符,如果在其他任何地方断开它都无济于事,请记住这一点。

答案 4 :(得分:0)

将此代码段放入预处理器脚本中。对我有用

var newmessage = message.replace(/[\n\r]$/,"");

while (newmessage.match(/(\r\n|\r|\n)([^A-Z]|[A-Z][^A-Z]|[A-Z]{2}[^A-Z\d]|[A-Z]{2}[\d][^|]|[A-Z]{3}[^|])/i)) {
    var extrabit = newmessage.match(/(\r\n|\r|\n)([^A-Z]|[A-Z][^A-Z]|[A-Z]{2}[^A-Z\d]|[A-Z]{2}[\d][^|]|[A-Z]{3}[^|])/i)[0].substring(1);
    var newmessage = newmessage.replace(/(\r\n|\r|\n)([^A-Z]|[A-Z][^A-Z]|[A-Z]{2}[^A-Z\d]|[A-Z]{2}[\d][^|]|[A-Z]{3}[^|])/i,'\\.br\\' + extrabit);
}

return newmessage;

答案 5 :(得分:0)

Mirth处理器希望每行的前3个字符都应包含有效的HL7段,否则该错误会引发错误。

要删除HL7消息中的无效换行符,请按照以下步骤操作。

1.Channel->脚本->预处理器。

  1. 将“返回消息”的以下代码粘贴;声明 message = message.replace(/ [\ r \ n] +(?![A-Z] [A-Z] [A-Z0-9] \ |)/ g,“”); //此行用于传入消息APPEND到PREVIOUS SEGMENT中的无效换行符。
  2. 保存更改并为受影响的新更改部署渠道。

答案 6 :(得分:0)

我遇到了类似的问题,即段之间有空白行,我解决了这个问题:

content = content.replace(/^\s*\n/gm, '');

注意:这只会删除空白行。您仍然需要弄清楚如何在当前行获得下一行

您可以尝试使用正则表达式来消除所有“ \ n”,而不是任何句段。