When processing HL7 (or other) messages, we often need to be retrieve data from several message segments. For example, to obtain patient information, you may need to access both the PID segment and one or more OBX segments.
This is the type of problem where the power of the Iguana Translator really comes into its own. The Translator allows you to search through all the segments and fields in a message. This makes it easy to obtain the data that you need.
MapWeight() is an example of a function that searches through the fields of an incoming message.
It looks like this:
In this tutorial the incoming ADT messages may contain any number of OBX segments, any one of which could contain patient weight information. To determine if weight information is included in a segment,
MapWeight calls the function
The second parameter passed to
ObxWeightFilter, is itself a function that checks whether a segment is an OBX segment that contains a WEIGHT field.
Note: In Lua, functions are values and they behave like any other value. Because of this they can be passed as parameters to other functions, or assigned to variables.
Using the search function as a parameter allowed us to write a flexible, generic search function. To implement a new search, all you need to do is create a new search function with the appropriate criteria and pass it to
hl7util.findSegment() iterates through the Msg it receives and uses the
ObxWeightFilter() function to check whether each segment matches the search criteria. The first segment that matches those criteria is returned; if no matching segment is found nothing is returned.
In this case a matching OBX segment is found:
As you can see, this segment contains the weight information that the script is looking for. The Iguana Translator was able to locate this information even though multiple OBX segments were defined in the incoming message.
The next section is optional reading. It explains how the
hl7util.findSegment() function actually works, so feel free to skip to the end of the page, unless you are interested.
The first part of this function examines all the elements in the HL7 node tree (generated from the incoming message by
hl7.parse()). If an element is a segment, the
Filter function (
ObxWeightFilter()) is called. If an OBX segment that contains weight information is found, then it is returned to
MapWeight() then maps the patient’s weight from the returned OBX segment into the
The second part of
hl7util.findSegment() handles incoming messages that contain segment groups or repeated segments. If either of these exist,
hl7util.findSegment() is called once for each of the segments in the group.
Note: The recursive calls to
hl7util.findSegment() are used to iterate through the levels of the table node tree.
In this example, the OBX segments are repeated segments. Eventually,
hl7util.findSegment() is called for the OBX segment that contains the weight information.
Now you understand how how
MapWeight() is used to map the weight information. Next we will look at how
ProcessLab() is used to process Lab messages.