【问题标题】:How can I use a Mirth-Javascript to remove line breaks in HL7 messages?如何使用 Mirth-Javascript 删除 HL7 消息中的换行符?
【发布时间】:2019-03-27 17:48:03
【问题描述】:

一条 HL7 消息进入 Mirth 并引发“处理”错误。在原始格式的消息的最底部是部分行,已与其上方的行分开。我每次都必须手动更正。我希望使用 Mirth-Javascript 作为消息过滤器来解决这个问题,这样一切都可以在没有人为干预的情况下进行。

下面的消息 sn-p 触发错误。在本例中,它是 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|||

【问题讨论】:

  • 如果在入站数据类型属性中关闭“转换换行符”会怎样?如果额外的换行符是 \n 字符而不是 \r 它可能会让它们通过。
  • 我关闭了转换换行符,它只是处理没有错误的消息,但没有解决问题......它只是忽略它。我确实看到您可以右键单击消息并“显示行尾”,并且所有段都以 \r 结尾,并且似乎“不知何故” OBX.5 a \n 的最后一行以某种方式插入了该段.. . 一位同事在想,也许发件人有一个旧的接口(就像一个旧的模态,如一台旧的 X 射线机),它的输出中有它......
  • 如果它正在处理消息,有什么问题?下游的东西也有问题吗?如果需要,可以使用 mirth 删除或替换 OBX-5 中的任何 \n 字符。
  • 它没有按原样处理消息。如上面的原始帖子所示,它会引发错误。我正在尝试找到一种方法来消除错误,因此不需要手动干预。当你说删除 \n 你是说我可以添加一个 javascript 过滤器,将所有 \n 替换为 \r's ... javascript 会看到,因为 \n's 和 \r's 是隐藏的吗?

标签: javascript regex string replace


【解决方案1】:

这行得通。将以下内容放入预处理器中。

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

return message;

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我是 Mirth 的新手,所以我还不确定如何去做。我可以在测试频道上轻松地对其进行测试,但是您提供的步骤可以详细说明一下吗?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      将此代码 sn-p 放入您的预处理器脚本中。它对我有用

      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】:

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

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

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

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

        【讨论】:

          【解决方案6】:

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

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

          段分隔符is not negotiable。它总是一个回车。我已经在this 回答中详细解释了这一点。

          理想情况下,在构建 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\ 中替换相应的 HEX。我的链接答案中提到了详细信息;此处不再赘述。

          【讨论】:

            【解决方案7】:

            我遇到了在段之间有空行的类似问题,我喜欢这样解决它:

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

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

            您可以尝试使用正则表达式来消除所有 '\n' 后面没有任何段。

            【讨论】:

              猜你喜欢
              • 2013-07-18
              • 2011-07-15
              • 2018-12-23
              • 1970-01-01
              • 2015-04-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多