Source Code
local batch ={} function batch.splitBatch(Data) -- strip batch info off Data local a = Data:split('\r') Data=a[3] trace(Data) for i=4,#a-2 do Data=Data..'\r'..a[i] end trace(Data) -- split Data into messages local delimiter='MSH|^~\\&|' local b=Data:split(delimiter) -- add MSH segment info trace(b) for i=2,#b do b[i-1]=delimiter..b[i] end b[#b]=nil -- delete dup msg trace(b) -- SOME IDEAS THAT COULD BE USEFUL -- global variable to count messages MsgCnt = #b trace('Messages Count '..MsgCnt) -- globals for batch segment info FHS=a[1]:split('|') BHS=a[2]:split('|') FTS=a[#a]:split('|') BTS=a[#a-1]:split('|') return b end function batch.convertTerminators(Data) Data = Data:gsub('\r\n','\r') return Data:gsub('\n','\r') end return batch
Description
A module to help processing batched HL7 messages
Usage Details
This module uses the splitBatch()
function to convert a batch of HL7 messages into an array of HL7 messages. It does this by removing the batch header and splitting the batch separate messages. It also contains convertTerminators()
which can be used to clean up line terminators by converting them all to “\r” (solves the problem of different terminators from Linux/Unix VS Widows systems).
How to use batch.lua:
- Use a Filter or To Translator script
Note: You could place the code From LLP script, but it is not recommended - Read batched messages from the queue
- Split batches into an array of HL7 messages using the
batch.splitBatch()
function - Optionally you can use
batch.convertTerminators()
to clean up line terminators
Note: This function just changes all terminators to “\r”
Here is some sample code for main()
:
-- this code follows best practice by using local -- functions first followed by main() at the end require 'stringutil' local batch = require 'batch' local function MapData(Msg) local msg, name = hl7.parse{vmd='example/demo.vmd', data= Msg} local out = db.tables{vmd='example/demo.vmd', name=name} --[[ Do some mapping and 'return' result to calling function]] return out end local function processMsg(Msg) local Tables = MapData(Msg) --[[ Some data can be written to database conn.merge{data=Tables,live=true}]] return end conn = db.connect{ api=db.MY_SQL, name='test', user='', password='', live=true} function main(Data) -- convert non-conformant terminators to "\r" Data = batch.convertTerminators(Data) -- split batch into array of messages local Msgs = batch.splitBatch(Data) -- process messages for i=1,#Msgs do processMsg(Msgs[i]) end end
More Information