Query Response ACK
Verified
Added by iNTERFACEWARE
Query a database to identify patient in incoming HL7 messages. If a patient is not found return an ACK with a "Patient does not exist" message.
Source Code
local function MakeMSH(MSH, Q)
MSH[3][1] = Q.MSH[5][1]
MSH[4][1] = Q.MSH[6][1]
MSH[5][1] = Q.MSH[3][1]
MSH[6][1] = Q.MSH[4][1]
MSH[10] = Q.MSH[10]
MSH[9][1] = 'ADR'
MSH[9][2] = 'A19'
MSH[11][1] = 'P'
MSH[12][1] = '2.6.1'
MSH[7] = os.date('%Y%m%d%h%M%S')
return MSH
end
local function AddPatient(PID, R)
PID[5][1] = R.LastName
PID[5][2] = R.GivenName
PID[2][1] = R.Id
PID[8] = R.Sex
return PID
end
-- you will need a MySQL database with a Patient table
-- change name, user and password to match your DB
local function FindPatient(R, Id)
local Q = db.query{api=db.MY_SQL, name='test',
user='root', password='EU5992eu', live=true,
sql = 'SELECT * FROM Patient WHERE Id ="'..Id..'"'}
for i=1,#Q do
AddPatient(R.Group1[i].PID, Q[i])
end
end
-- main() is given the original HL7 message.
function main(Data)
local Msg = hl7.parse{vmd='query.vmd', data=Data}
local R = hl7.message{vmd='query.vmd', name='Response'}
if Msg:nodeName() == 'Unrecognized' then
ack.send('Unrecognized message')
return
end
MakeMSH(R.MSH, Msg)
FindPatient(R, Msg.QRD[8][1][1])
ack.send(R:S())
end
Description
Query a database to identify patient in incoming HL7 messages. If a patient is not found return an ACK with a "Patient does not exist" message.
Usage Details
This code reads the Patient Id incoming HL7 messages, then queries a database to see the patient exists. If the patient does not exist it returns an ACK with with a “Patient does not exist” message.
How to use the code:
- Create a channel with an LLP Listener component
- Either load the query_response_ACK_LLP_Listener.zip project file or paste in the code
- Download the query.vmd file and add it to the project
- Load the sample message from attached SampleData.txt
- Examine the code and annotations to see how it works
More Information