validate.lua
Verified
Added by iNTERFACEWARE
A template module for testing HL7 message conformance, you will need to extend it to match your requirements
Source Code
local codemap = require 'codemap' local validate={} local function Add(List, Msg) List[#List+1] = Msg end local function EmptyList() local List = {} List.add = Add return List end local function RequiredField(Errs, F, Message) if F:nodeValue() == '' then Errs:add(Message..' not present.') return Errs[#Errs] end end local function PrintSet(Set) local R ='' for K in pairs(Set) do R = R..",'"..K.."'" end R = '['..R:sub(2, #R)..']' return R end local function FieldMatchCode(Errs, Set, F, Description) if not Set[F] then Errs:add(Description.." had value '"..F:nodeValue().. "' instead of acceptable values "..PrintSet(Set)) return Errs[#Errs] end end local SexSet = codemap.set{'Female', 'Male'} local function CheckPID(PID, Errs) RequiredField(Errs, PID[17][1], 'PID 17.1 religion code') RequiredField(Errs, PID[3][1][1], 'PID 3.1.1 patient ID') FieldMatchCode(Errs, SexSet, PID[8], 'PID.8, patient sex') end function validate.CheckAdt(Msg) local ErrList = EmptyList() CheckPID(Msg.PID, ErrList) ErrList.add = nil return ErrList end return validate
Description
A template module for testing HL7 message conformance, you will need to extend it to match your requirements
Usage Details
The conformance module is designed to help with HL7 conformance processing. It contains the function validate.CheckAdt()
that checks the PID segment for required fields, and checks that correct codes are used. This is a template module with sample checks, you will need to extend it to match your requirements.
It is intended for use when creating an ACK in the script of a From LLP component.
How to use conformance.lua:
- Add the module to a From LLP component script
- Write code to generate a Custom ACK
- Use
validate.
CheckAdt()
to check the message structure - Write any errors returned to NTE segments in the ACK
- Send the ACK using
ack.send()
See HL7 Conformance for more information, here is the sample code for main:
local validate = require 'validate' -- this module follows the best practice of using local functions -- this requires main() function to be placed at the end after those functions local function GenerateNACK(Msg, Errs) local N = hl7.message{vmd='conformance_ack.vmd', name='Acknowledgement'} N.MSH[7] = os.date('%Y%m%d%H%M%S') N.MSH[3][1] = Msg.MSH[5][1] N.MSH[4][1] = Msg.MSH[6][1] N.MSH[5][1] = Msg.MSH[3][1] N.MSH[6][1] = Msg.MSH[4][1] N.MSH[11][1] = 'P' N.MSH[9][1] = 'ACK' N.MSA[2] = Msg.MSH[10] trace(N) for i = 1, #Errs do N.NTE[i][3][1] = Errs[i] end return N:S() end local function ProcessADT(Msg) local Errs = validate.CheckAdt(Msg) if (#Errs > 0) then return GenerateNACK(Msg, Errs) end end function main(Data) local Msg = hl7.parse{vmd='example/demo.vmd', data=Data} local R = ProcessADT(Msg) ack.send(R) end
More Information