Sidebar

How can I split the OBX segment in an MDM message in to multiple OBX segments?

+2 votes
3.5K views
asked Oct 28, 2014 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);
 
answered Oct 28, 2014 by ben-s-7515 (12,640 points)
selected Oct 29, 2014 by brandon-w-8204
commented Oct 28, 2014 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());
}
 
answered Oct 29, 2014 by gary-t-8719 (14,860 points)
...