Random ADT data generator
Contents
Need an incoming stream of sample message data? Try this random ADT message generator! This code is straightforward and easy to implement, but you can elaborate on it as needed.
How It Works
To generate random ADT messages:
- Create a new channel with the following components:
- From Translator (source)
- To LLP Client (destination)
Note: Feel free to use whatever destination component best suits your needs. For the purposes of this procedure, we are using an LLP client.
- Import the following project file into the From Translator component: Random_ADT_Generator_From_Translator.zipAlternatively, you can simply cut and paste the code below:
require 'node' require 'ran' -- This is a very rough example showing how we can generate random HL7 -- data using the translator. function main() -- Push the ADT message through to destination queue.push{data=ran.RandomMessage()} end
Warning! This code relies on the ran.lua
module, which you can find in your initial repository. If you don’t have it, use this source code to create it:
ran = {} function ran.scrubMSH(MSH) MSH[3][1] = ran.choose(ran.Application) MSH[4][1] = ran.choose(ran.Facility) MSH[5][1] = 'Main HIS' MSH[6][1] = 'St. Micheals' MSH[7][1] = ran.TimeStamp() MSH[9][1] = 'ADT' MSH[9][2] = ran.choose(ran.Event) MSH[10] = util.guid(256) MSH[11][1] = 'P' MSH[12][1] = '2.6' MSH:S() end function ran.scrubEVN(EVN) EVN[2][1] = ran.TimeStamp() EVN[6][1] = ran.TimeStamp() end function ran.scrubPID(PID) PID[3][1][1] = math.random(9999999) ran.NameAndSex(PID) PID[5][1][1][1] = ran.lastName() PID[7][1] = ran.Date() PID[10][1][1] = ran.choose(ran.Race) PID[18][1] = ran.AcctNo() PID[11][1][3], PID[11][1][4] = ran.location() PID[11][1][5] = math.random(99999) PID[11][1][1][1] = math.random(999).. ' '..ran.choose(ran.Street) PID[19] = ran.SSN() PID:S() end function ran.PV1(PV1) PV1[8][1][2][1] = ran.lastName() PV1[8][1][3] = ran.firstName() PV1[8][1][4] = 'F' PV1[19][1] = math.random(9999999) PV1[44][1] = ran.TimeStamp() PV1:S() end function ran.NK1(NK1) for i = 1, math.random(6) do NK1[i][1] = i ran.Kin(NK1[i]) end end function ran.Kin(NK1) NK1[2][1][1][1] = ran.lastName() NK1[2][1][2] = ran.firstName() NK1[3][1] = ran.choose(ran.Relation) end ran.Sex = {'M', 'F'} ran.LastNames = {'Muir','Smith','Adams','Garland', 'Meade', 'Fitzgerald', 'WHITE'} ran.MaleNames = {'Fred','Jim','Gary','John'} ran.FemaleNames = {'Mary','Sabrina','Tracy'} ran.Race = {'AI', 'EU', 'Mixed', 'Martian', 'Unknown'} ran.Street = {'Delphi Cres.', 'Miller Lane', 'Yonge St.', 'Main Rd.'} ran.Relation = {'Grandchild', 'Second Cousin', 'Sibling', 'Parent'} ran.Event = {'A01', 'A03', 'A04', 'A05', 'A06', 'A07', 'A08'} ran.Facility = {'Lab', 'E&R'} ran.Application = { 'AcmeMed', 'MedPoke', 'CowZing' } function ran.lastName() return ran.choose(ran.LastNames) end function ran.choose(T) return T[math.random(#T)] end function ran.NameAndSex(PID) if math.random(2) == 1 then PID[8] = 'M' PID[5][1][2] = ran.choose(ran.MaleNames) else PID[8] = 'F' PID[5][1][2] = ran.choose(ran.FemaleNames) end end function ran.firstName() if math.random(2) == 1 then return ran.choose(ran.MaleNames) else return ran.choose(ran.FemaleNames) end end function ran.Date() local T = os.date('*t') local newDate = '19'..rand(T.year,99,2).. rand(T.month,12,2).. rand(T.day,29,2) return newDate end function ran.TimeStamp() local T = os.date('*t') local newDate = '20'..rand(T.year,tostring(T.year):sub(-2),2).. rand(T.month,12,2).. rand(T.day,29,2).. rand(T.hour,12,2).. rand(T.min,60,2).. rand(T.sec,60,2) return newDate end function ran.AcctNo() return math.random(99)..'-'..math.random(999)..'-'..math.random(999) end ran.Locations = { {'Chicago', 'IL'}, {'Toronto', 'ON'}, {'ST. LOUIS', 'MO'}, {'LA', 'CA'} } function ran.location() local R = ran.choose(ran.Locations) return R[1], R[2] end function ran.SSN() return math.random(999)..'-' ..math.random(999)..'-' ..math.random(999) end function ran.addWeight(Out) local OBX = Out.OBX[#Out.OBX+1] OBX[3][1] = 'WT' OBX[3][2] = 'WEIGHT' OBX[5][1][1] = math.random(100) + 30 OBX[6][1] = 'pounds' return OBX end function ran.addHeight(Out) local OBX = Out.OBX[#Out.OBX+1] OBX[3][1] = 'HT' OBX[3][2] = 'HEIGHT' OBX[5][1][1] = math.random(100) + 20 OBX[6][1] = 'cm' return OBX end function ran.RandomMessage() local Out = hl7.message{vmd='example/demo.vmd', name='ADT'} ran.scrubMSH(Out.MSH) ran.scrubEVN(Out.EVN) ran.scrubPID(Out.PID) ran.PV1(Out.PV1) ran.NK1(Out.NK1) ran.addWeight(Out) ran.addHeight(Out) return Out:S() end function rand(In, Max, Size) local Result = tostring((In + math.random(Max)) % Max) if '0' == Result then Result = '1' end while Size > Result:len() do Result = '0'..Result end return Result end
Continue: Some sample messages