NextGen Mirth:循环遍历所有 OBR/OBX 段以输出到文档编写器

如何解决NextGen Mirth:循环遍历所有 OBR/OBX 段以输出到文档编写器

大约 10 年前,我使用 Mirth 并意识到我几乎忘记了所有内容,而且我的许多资源不再可用。我希望遍历 OBR 和 OBX 段以提取 OBR 4.2、7.1、16.2 以用作节标题和 OBX 3.2、5.1、7.1 字段以显示在报告下方。

基本上就是这样:

MSH|^~\&|LAB|LIS||EMR|202107201651||ORU^R01|082017045701|P|2.3|| |NE|NE
PID|1||M1302^^^MR||TEST^PATIENT^T^^||19670101|M||| 123 8th street^apt.22b^long beach^CA^90802^||(714)555-1212|(714)222-5555||||873lfif|4441113||||||||||
PV1|1|O|RGH^^^RGH^^^^||||999999^TEST^TEST^^^^^L||||||||||288^ALBRIGHT^MD^^^^^L ||V4735|||||||||||||||||||||||||201008201648|
ORC|RE||15175|||||||||288^ALBRIGHT^MD^^^^^L|
OBR|1||15175|CBC^COMPLETE BLOOD COUNT^L|R|202107200800|202107200800|||BB^RGH^^^^^^ ^^^^^^RGH||||201008201648|B|288^ALBRIGHT^MD^^^^^L| |||||20100820170246|||F|^|||||100.0||||||||||||||G A
OBX|1|NM|WBC^WBC^L||4.0|10\S\3/MM\S\3|3.6-11.1||||F|||202107200759|RGH|ADM
OBX|2|NM|RBC^RBC^L||5.0|10\S\6/MM\S\3|4.50-5.90||||F|||202107200758|RGH|ADM
OBX|3|NM|HGB^HGB^L||12.5|g/dL|12.0-18.0||||F|||202107200757|RGH|ADM
ORC|RE||15175|||||||||288^ALBRIGHT^MD^^^^^L|
OBR|2||15175|ALC^ALCOHOL,ETHYL^L|R|202107201650|20 1008201648|||BB^RGH^^^^^^^^^^^^RGH||||201008201648 |B|288^ALBRIGHT^MD^^^^^L||||||20100820170246|||F|^ |||||||||||||||||||GA
OBX|1|NM|ALC^ALCOHOL (ETHANOL)^L||36|mg/dL|0-32|H|||F|||201008201650|RGH|ADM

并制作:

CBC 202107260800 ALBRIGHT
白细胞 4.0 3.6-11.1
红细胞 5.0 4.50-5.90
HGB 12.5 12.0-18.0
酒精、乙醚 202107201650 ALBRIGHT
酒精(乙醇) 36 0-32

非常感谢任何帮助。

解决方法

Mirth User Guide 提供了一些关于您要实现的目标的有趣文档。有一个名为 Iterating Over Message Segments 的部分对其进行了解释并提供了一些示例。

但是下面的想法很相似

//To iterate over all segments,follow this example:
for each (segment in msg.children()) {
  if (segment.name().toString() == "ORC") {
    // Do something...
  }
} 

//To iterate through specifically named segments,use this formula:

for each (segment in msg..OBX) {
  // Do something...
}

复杂的部分将是如何将每个 OBX 与其对应的 OBROCR 相关联。我没有找到一种干净的方法来实现这一目标。我使用了 ListsMaps 并按顺序处理所有段,将相关字段添加到一些数据结构中,这有助于我获得最终结果。你的情况下的那个表。

,

这是我所做的,它非常丑陋,还不太符合我的期望(还),所以请随时帮助我改进。我似乎无法在报告作者的 html 中获得嵌套的 foreach 以通过第二个 OBR 进行处理,所以希望我在弄清楚之前不会得到一个。

Source Transformer:我使用 Mapper 映射了患者信息

目标转换器:

var _OBR45PanelName = Lists.list();
var _OBR71DateTime = Lists.list();
var _OBR163ProviderFirstName = Lists.list();
var _OBR162ProviderLastName = Lists.list();
var _OBX32TestName = Lists.list();
var _OBX51Result = Lists.list();
var _OBX61UnitofMeasure = Lists.list();
var _OBX71ReferenceRange = Lists.list();
var _OBX81AbnormalFlag = Lists.list();
for (var i = 0; i < getArrayOrXmlLength(msg['OBR']); i++) {
    var mapping;
    try {
        mapping = msg['OBR'][i]['OBR.4']['OBR.4.5'].toString().trim();
    } catch (e) {
        mapping = '';
    }
    _OBR45PanelName.add(validate(mapping,'',new Array()));
    var mapping;
    try {
        mapping = msg['OBR'][i]['OBR.7']['OBR.7.1'].toString().trim();
    } catch (e) {
        mapping = '';
    }
    _OBR71DateTime.add(validate(mapping,new Array()));
    var mapping;
    try {
        mapping = msg['OBR'][i]['OBR.16']['OBR.16.3'].toString().trim();
    } catch (e) {
        mapping = '';
    }
    _OBR163ProviderFirstName.add(validate(mapping,new Array()));
    var mapping;
    try {
        mapping = msg['OBR'][i]['OBR.16']['OBR.16.2'].toString().trim();
    } catch (e) {
        mapping = '';
    }
    _OBR162ProviderLastName.add(validate(mapping,new Array()));
    for (var J = 0; J < getArrayOrXmlLength(msg['OBX']); J++) {
        var mapping;
        try {
            mapping = msg['OBX'][J]['OBX.3']['OBX.3.2'].toString().trim();
        } catch (e) {
            mapping = '';
        }
        _OBX32TestName.add(validate(mapping,new Array()));
        var mapping;
        try {
            mapping = msg['OBX'][J]['OBX.5']['OBX.5.1'].toString().trim();
        } catch (e) {
            mapping = '';
        }
        _OBX51Result.add(validate(mapping,new Array()));
        var mapping;
        try {
            mapping = msg['OBX'][J]['OBX.6']['OBX.6.1'].toString().trim();
        } catch (e) {
            mapping = '';
        }
        _OBX61UnitofMeasure.add(validate(mapping,new Array()));
        var mapping;
        try {
            mapping = msg['OBX'][J]['OBX.7']['OBX.7.1'].toString().trim();
        } catch (e) {
            mapping = '';
        }
        _OBX71ReferenceRange.add(validate(mapping,new Array()));
        var mapping;
        try {
            mapping = msg['OBX'][J]['OBX.8']['OBX.8.1'].toString().trim();
        } catch (e) {
            mapping = '';
        }
        _OBX81AbnormalFlag.add(validate(mapping,new Array()));
    }
}
channelMap.put('OBR4.5 Panel Name',_OBR45PanelName.toArray());
channelMap.put('OBR7.1 DateTime',_OBR71DateTime.toArray());
channelMap.put('OBR16.3 Provider FirstName',_OBR163ProviderFirstName.toArray());
channelMap.put('OBR16.2 Provider LastName',_OBR162ProviderLastName.toArray());
channelMap.put('OBX3.2 Test Name',_OBX32TestName.toArray());
channelMap.put('OBX5.1 Result',_OBX51Result.toArray());
channelMap.put('OBX6.1 Unit of Measure',_OBX61UnitofMeasure.toArray());
channelMap.put('OBX7.1 Reference Range',_OBX71ReferenceRange.toArray());
channelMap.put('OBX8.1 Abnormal Flag',_OBX81AbnormalFlag.toArray());

对于报告作者,我有:

<html>
<head>
<style type="text/css">
div table {
    float: left;
}
div table th,td {
    word-wrap: break-word;
    border: 1px solid lightgrey;
    padding-right: 5px;
    height: 25px;
    text-align: left;
}
</style>
</head>
<body>
<h1>Laboratory Results</h1>
<table>
<tr><th>Name:</th><th>DOB:</th></tr>
<tr><td>${maps.get('PID5.2 Patient FirstName')} ${maps.get('PID5.3 Patient MiddleName')} ${maps.get('PID5.1 Patient LastName')}</td><td>${maps.get('PID7.1 Patient DoB')}</td></tr>
<tr><th>Ordering Provider:</th><td>${maps.get('OBR16.3 Provider FirstName')} ${maps.get('OBR16.2 Provider LastName')}</td></tr>
</table>

<table>
#foreach ($item in ${maps.get('OBR4.5 Panel Name')})
<tr><th>${maps.get('OBR4.5 Panel Name')}</th></tr>
<div>
<table>
<tr><th>Test</th></tr>
#foreach ($item in ${maps.get('OBX3.2 Test Name')})
<tr><td>$item</td></tr>
#end
</table>
<table>
<tr><th>Result</th></tr>
#foreach ($item in ${maps.get('OBX5.1 Result')})
<tr><td>$item</td></tr>
#end
</table>
<table>
<tr><th>Unit of Measure</th></tr>
#foreach ($item in ${maps.get('OBX6.1 Unit of Measure')})
<tr><td>$item</td></tr>
#end
</table>
<table>
<tr><th>Range</th></tr>
#foreach ($item in ${maps.get('OBX7.1 Reference Range')})
<tr><td>$item</td></tr>
#end
</table>
<table>
<tr><th>Flag</th></tr>
#foreach ($item in ${maps.get('OBX8.1 Abnormal Flag')})
<tr><td>$item</td></tr>
#end
</table>
</div>
#end
</table>
</body>
</html>

结果(又丑了)like this

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?