Sidebar
0 votes
1.0K views
by brandon-w-8204 (34.9k points)
edited by brandon-w-8204
I have FT1 or OBX segements I modified or removed. Can I update the first field in the segment to put them in order.

2 Answers

0 votes
 
Best answer

To reorder segments use the following code in a custom mapping:

 

// What segment should we reorder
var segment = 'OBX'; //Set this to OBX, FT1...)
 
// Get count of segments
var segmentCount = message.getCount(segment);
 
//Update the first field for each segment
for (var i=1 ; i <= segmentCount ; i++) {
   message.setNode(segment + '-1', '' + i, i);
}
 
Before:
 
MSH|^~\&|LinkLogic-Training|TEST000^E IM|PracticeMgr|E IM|20151005094647||DFT^P03|1759657606273370|P|2.3.1|||NE|NE
EVN|P03|20151005094647
PID|1||677|MR-000-002|Bassett^Don^C.||19540711|M||2106-3|12155 SW Broadway^^Beaverton^IL^60005^USA||(503) 629-5541^^PH^dbassett@aol.com~(503) 692-8956^^FX|(503) 692-8955|English|M|||543-34-5621|||N
PV1|1|O|^^^E IM||||kstarr|^Misiriliogu^Youseff
FT1|1|||20091211|19981107005336|DP|CPT-93000|EKG w/ Interpretation||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-1|kstarr|CPT-93000
FT1|3|||20091211|19981107005336|DP|CPT-99212|Ofc Vst, Est Level II||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-2|kstarr|CPT-99212
FT1|6|||20091211|19981107005336|DP|CPT-99212|Ofc Vst, Est Level II||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-2|kstarr|CPT-99212
FT1|9|||20091211|19981107005336|DP|CPT-99212|Ofc Vst, Est Level II||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-2|kstarr|CPT-99212
 
 
After:
 
MSH|^~\&|LinkLogic-Training|TEST000^E IM|PracticeMgr|E IM|20151005094647||DFT^P03|1759657606273370|P|2.3.1|||NE|NE
EVN|P03|20151005094647
PID|1||677|MR-000-002|Bassett^Don^C.||19540711|M||2106-3|12155 SW Broadway^^Beaverton^IL^60005^USA||(503) 629-5541^^PH^dbassett@aol.com~(503) 692-8956^^FX|(503) 692-8955|English|M|||543-34-5621|||N
PV1|1|O|^^^E IM||||kstarr|^Misiriliogu^Youseff
FT1|1|||20091211|19981107005336|DP|CPT-93000|EKG w/ Interpretation||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-1|kstarr|CPT-93000
FT1|2|||20091211|19981107005336|DP|CPT-99212|Ofc Vst, Est Level II||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-2|kstarr|CPT-99212
FT1|3|||20091211|19981107005336|DP|CPT-99212|Ofc Vst, Est Level II||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-2|kstarr|CPT-99212
FT1|4|||20091211|19981107005336|DP|CPT-99212|Ofc Vst, Est Level II||1||||136^Best Health Insurance Company||^^^E IM|||428.0^^I9||kstarr||94-2|kstarr|CPT-99212
 
 
 

 

by brandon-w-8204 (34.9k points)
edited by brandon-w-8204
0 votes

Use HL7 group processing so each OBR group is handled separately. In QIE, the documented pattern is to get all OBR groups with message.getAllNodes('OBR[grp=!OBR]'), parse each group as its own HL7 message, count that group’s OBX segments, renumber OBX-1 from 1..n, and then write the updated group back into the original message. That exact OBR-group pattern is shown in the docs and the tutorial also shows renumbering OBX-1 inside a loop with message.setNode('OBX-1', ...) .

Example mapping script:

var obrGroups = message.getAllNodes('OBR[group=!OBR]');

for (var i = 0; i < obrGroups.length; i++) {
   var obrGroup = qie.parseHL7String(obrGroups[i]);
   var obxCount = obrGroup.getCount('OBX');

   for (var j = 1; j <= obxCount; j++) {
      obrGroup.setNode('OBX-1', j+'', j);
   }
   message.setNode('OBR[grp=!OBR]', obrGroup, (i + 1));
}

How it works;

  • OBR[group=!OBR] returns each OBR plus its child segments until the next OBR, so each array element is one OBR group
  • qie.parseHL7String(...) lets you treat that group as an HL7 message and access its local OBX segments
  • obrGroup.getCount('OBX') gets the number of OBX segments in that OBR group
  • obrGroup.setNode('OBX-1', j+'', j) sets OBX-1 to 1, 2, 3, etc. within that group
  • message.setNode('OBR[grp=!OBR]', obrGroup, i + 1) puts the modified group back in the correct OBR-group position
ago by gary-t-8719 (15.6k points)
...