Map the Message
Contents
Now we are ready to start adding code that will fulfill the remaining interface requirements! In this step, we will fulfill the second requirement:
2. We only need to deliver the PID segment information for each patient.
To achieve this, we need to create an outgoing version of each message, then copy (or “map”) whatever incoming data we want to it. Because we only need to pass personal information to meet this requirement, we will only map the MSH and PID segments of each message (and discard the rest).
Why must we create a copy of our parsed messages? Although the hl7.parse{}
function as a great way to organize incoming data, it only produces read-only results. In order to manipulate this information, we must create a blank, writable copy and map the parsed message’s data to it.
Let’s get started!
Step 1: Build the new, outgoing message
Add the following line of code to your script:
What is happening here? The hl7.message{}
function is a nifty little tool that builds blank, writable HL7 node trees using the following parameters:
- vmd = the VMD file to reference for the correct structure
- name = the message type (to help choose the right structure noted in the VMD file)
Step 2: Map the MSH segment data to the new message
Add the following lines to your script:
Note: As you type, notice that Iguana’s handy auto-completion tool attempts to guess what you are trying to enter. To learn more about this powerful feature, check out this wiki section: Understanding Auto-Completion.
What is happening here? The mapTree()
function copies information from one node tree to another. In this case, we only want to map MSH information. As such, we’ve used Lua syntax to indicate that we want to copy the incoming message’s MSH node (Msg.MSH) to our new message’s MSH node (Out.MSH).
Tip: Wondering about the trace()
function? It is just a convenient way to inspect the value of a Lua variable. Curious about how it works? You can check out this link: Using trace()
to view data for debugging.
Let’s examine the results! In accompanying annotation window, click on ADT in the trace()
section:
As you can see, the MSH segment has now been copied into the new message:
Step 3: Map the PID segment data to the new message
Mapping the PID segment is very similar! Add the following line to your script:
Examine the results following the same steps mentioned above. As you can see, the PID segment has also been copied:
Sample Code
Here is a copy-and-paste version of the code so far:
function main(Data) -- (1) Parse the HL7 message local Msg, Name = hl7.parse{vmd = 'demo.vmd', data = Data} local Out = hl7.message{vmd = 'demo.vmd', name = Name} -- (2) Map the incoming message to the outgoing message Out.MSH:mapTree(Msg.MSH) Out.PID:mapTree(Msg.PID) trace(Out) -- (3) Alter the MSH segment data -- (4) Modify the PID data -- (5) Push the outgoing message into the Iguana queue end
Now that we have mapped the data, let’s tackle the next two interface requirements by modifying the MSH segment data.