1.2k questions

1.4k answers

361 comments

339 users

Categories

Sidebar
+2 votes
3.9K views
by (170 points)
We're exporting a letter from Centricity EMR via LinkLogic to Qvera in HL7 MDM format. When Centricity exports the message, it exports one OBX segment with the data separted by tildas. A downstream system requested that we send the data in multiple OBX segments. Can this be accomplished?

Current OBX example:

OBX|1|ST||| data line 1 ~ data line 2 ~ data line 3 ~~~ data line x ...

 

Desired OBX example:

OBX|1|ST||| data line 1 ...

OBX|2|ST||| data line 2 ...

OBX|3|ST||| data line 3 ...

OBX|4|ST||| ...

OBX|5|ST||| ...

OBX|6|ST||| data line x...

2 Answers

+2 votes
 
Best answer

This can be done with a String.split('~') and then cycling the result.  Here is an example of an HL7 message with one OBX segment being replaced by multiple OBX segments (one for each value in the original OBX).

 

// get OBX data
var value = message.getNode('OBX-5');
qie.debug('OBX-5 Value:' + value);
 
// save original OBX segment
var obxSegment = qie.parseHL7String(message.getNode('OBX[1]'));
 
// remove original OBX segment
message.removeFirstNode('OBX');
 
// split the data on the tilda
var individualSegments = value.split('~');
qie.debug('Segments Found:' + individualSegments.length);
 
// cycle individual segments and create new OBX segment
var segments = '';
for (var i = 0; i < individualSegments.length; i++) {
   qie.debug('Segment ' + i + ':' + individualSegments[i]);
   
   // set OBX sequence
   obxSegment.setNode('OBX-1', i+1);
   
   // set OBX value
   obxSegment.setNode('OBX-5', individualSegments[i]);
   
   qie.debug('OBX Segment ' + i + ':' + obxSegment.toString());
   segments += obxSegment.toString() + '\n';
}
 
// place new segments after the PID segment of the original message
message.addChildAfter('PID', 'OBX', segments);
 
by ben-s-7515 (13.0k points)
selected by brandon-w-8204
by (170 points)
Worked like a charm and it's simple.
+1 vote
//Get the observation values from OBX-5 and split them on the tilde character
var obsValues = StringUtils.splitByWholeSeparator(source.getNode('OBX-5'), '~');
 
//Get the current OBX segment to use as a template for all OBX fields except OBX-1 & OBX-5
var obxSeg = qie.parseHL7String(source.getNode('OBX'));
 
//Remove current OBX segment
message.removeAllNodes('OBX');
 
//Create a New OBX segment for each value and add to message.
for (var i=0 ; i < obsValues.length ; i++) {
   var obsValue = obsValues[i];
   //Reset OBX fields
   obxSeg.setNode('OBX-1', i+1);
   obxSeg.setNode('OBX-5', obsValue);
   //Add new OBX segment to message
   message.addChild('/', 'OBX', obxSeg.toString());
}
 
by gary-t-8719 (15.1k points)
...