String munching galore...
Contents
For this we’ll need to include two more modules
require 'stringutil' require 'clean_phone'
The stringutil module we provide has a number of helpful string extension functions. One handy one is called capitalize
.
We can use that on the first name and last name of the patient like so:
For fun do have a look at how the capitalize
function is implemented; it’s very transparent how the function works:
Now let’s clean up the phone number format: (anyone remember the Hitchhiker’s Guide to the Galaxy?)
You can have fun tweaking the implementation of CleanPhone to get slightly different formats of the phone number:
Try tweaking the code to use square brackets and different spacing. You can see the ease of the Translator environment for this type of data manipulation.
require 'split' require 'zsegment' require 'diff' require 'hl7util' require 'dateparse' require('stringutil') require('clean_phone') local function trace(a,b,c,d) return end function main(Data) local Orig = hl7.parse {vmd = 'transform.vmd', data = Data} if Orig:nodeName() == 'Catchall' then iguana.logInfo('Filtered '..Orig.MSH[9][1]..'^'..Orig.MSH[9][2]) return end local Out = hl7.message{vmd = 'transform.vmd', name = Orig:nodeName()} Out:mapTree(Orig) local Copy = zsegment.copyZSegments(Data, Out:S()) CheckTransform(Data:StripLastReturns(), Copy:StripLastReturns()) AlterMSH(Out.MSH) local PID = hl7util.findSegment(Out, FindPID) if PID then AlterPID(PID) end trace(Out) local Diff = diff.Compare(Orig:S(), Out:S(), 'transform.vmd') local DataOut = Out:S() DataOut = zsegment.copyZSegments(Data, DataOut) DataOut = DataOut:StripLastReturns() trace(DataOut) queue.push{data = DataOut} end function FindPID(Segment) if Segment:nodeName() == 'PID' then return true end end function AlterPID(PID) local Date = dateparse.parse(PID[7]:nodeValue()) PID[7] = os.date("%Y%m%d", Date) PID[5][1][1][1] = PID[5][1][1][1]:nodeValue():capitalize() PID[5][1][2] = PID[5][1][2]:nodeValue():capitalize() PID[13][1][1] = PID[13][1][1]:CleanPhone() return PID end function AlterMSH(MSH) MSH[3][1] = 'Acme' MSH[4][1] = 'Lab' return MSH end function CheckTransform(Orig, Copy) if Orig ~= Copy then trace(Orig) trace(Copy) error('Copy of HL7 message does not match the original') end end function string.StripLastReturns(S) -- strip return(s) "\r" & "\n" from the end of a string local i = #S while S:byte(i) == 10 or S:byte(i) == 13 do i = i - 1 end return S:sub(1,i) end
Continue: Shared Modules