There are two different ways to do this. In this answer I will give an example of creating each segment individually in the script. For this example, we will use the following JSON message:
{
"person": {
"id": "1234",
"mrn": "125-54664",
"name": {
"first": "Mickey",
"middle": "",
"last": "Mouse"
},
"dob": "1965-07-04",
"ssn": "111-22-3333",
"address": {
"type": "home",
"street1": "128 Viewcrest Ln",
"street2": "suite 200",
"city": "Bondville",
"state": "CA",
"zip": "94033"
}
}
}
Now in our first mapping function we will execute the following script:
// create blank HL7 Message
message = qie.createHL7Message('UTF-8');
// Create MSH Segment
message.setNode("MSH-3", 'xyzEMR');
message.setNode("MSH-4", 'xyzEMR');
message.setNode("MSH-5", 'abcEMR');
message.setNode("MSH-6", 'abcEMR');
var dateTime = qie.formatDate("yyyyMMddHHmmss");
message.setNode("MSH-7", dateTime);
message.setNode("MSH-10", dateTime);
message.setNode("EVN-2", dateTime);
message.setNode("MSH-9", 'ADT^A08');
message.setNode("MSH-11", 'P');
message.setNode("MSH-12", '2.3');
message.setNode("MSH-15", 'NE');
message.setNode("MSH-16", 'NE');
// Create EVN Segment
message.setNode("EVN-1", 'A08');
message.createAndSetNode('EVN-6', '');
// Create PID Segment
message.setNode("PID-1", '1');
message.setNode("PID-2", source.getNode("/person/id"));
message.setNode("PID-3", source.getNode("/person/mrn"));
message.setNode("PID-5.1", source.getNode("/person/name/first"));
message.setNode("PID-5.2", source.getNode("/person/name/last"));
var dob = source.getNode("/person/dob");
dob = qie.formatDate("yyyyMMdd", dob);
message.setNode("PID-7", dob);
message.setNode("PID-19", source.getNode("/person/ssn"));
message.createAndSetNode('PID-30', '');
This creates a basic HL7 message. Now we can add logic to loop data and add additional segments as needed, such as OBX segments.
An example mapping to add multiple OBX segments would be:
for (var i = 0; i < 2; i++) {
// create a new segment
var obxSegment = qie.parseHL7String('OBX');
// set the segment sequence
obxSegment.setNode('OBX-1', i+1);
// set other nodes as needed
obxSegment.setNode('OBX-3', 'MyCode');
// add obxSegment to message
message.addChild('/', 'OBX', obxSegment);
}
The output HL7 for this code is:
MSH|^~\&|xyzEMR|xyzEMR|abcEMR|abcEMR|20170814221628||ADT^A08|20170814221628|P|2.3|||NE|NE
EVN|A08|20170814221628||||
PID|1|1234|125-54664||Mickey^Mouse||19650704||||||||||||111-22-3333|||||||||||
OBX|1||MyCode
OBX|2||MyCode