// background (this dictates the web console to execute the following lines of code in the background)
import app.*
def DIR = 'C:/work4globaldb'//'/var/tmp'
def date = Date.parse('yyyyMMdd', '20120208')
def p, o
def parseDate = {d->
try{
if(!d)return null
switch(d.size()) {
case 4:return Date.parse('yyyy', d)
case 6:return Date.parse('yyyyMM', d)
case 8:return Date.parse('yyyyMMdd', d)
}
}catch(x){return null}
}
def storeObject = {objectContainer, object->
object.id = UUID.randomUUID().toString()
object.dateCreated = date
object.createdBy = 'sam.ds.chen@gmail.com'
objectContainer.store object
}
System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: Starting..."
[//'GRS_PATIENT_DETAILS_2'// PATIENTs already imported
'GRS_PATIENT_LABTEST'
, 'GRS_PATIENT_MH'
, 'GRS_PT_CMVIEW'
, 'GRS_PT_PE'
, 'GRS_PT_VS' ].each {view->
System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: importing data from ${view}"
def metadata = []
new File("${DIR}/_final_${view}.dat").eachLine {line, n->
def sv = line.split('\\|')
def m = [:]
if(n == 1) { // get metadata
sv.each{metadata << it}
} else {
sv.eachWithIndex{v,i->
m[metadata[i]] = (v == 'null' ? null : v)
}
switch(view) {
case'GRS_PATIENT_DETAILS_2':
p = new Patient(
loc : m.COUNTRY
, patientNo : m.PT
, dob : parseDate(m.DOBDATE)
, race : m.RACE
, gender : m.GENDER
, dataSource : "Oracle Clinical: ${m.STUDY} ${m.INVSITE}"
, study : m.STUDY
, site : m.INVSITE)
storeObject(oc, p)
break
case'GRS_PATIENT_LABTEST':
p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
o = new LabTest(
patient : p
, dcmDate : parseDate(m.DCMDATE)
, cpEvent : m.CPEVENT
, visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
, labType : m.LABTYPE
, testName : m.TESTNAME
, lparm : m.LPARM
, result : m.RESULT
, unit : m.UNIT
, significant : m.SIGNIFICANT
, resultStd : m.RESULT_STD
, highRange : m.HIGH_RANGE
, lowRange : m.LOW_RANGE
)
if(p) {
p.hasLabTest = true
oc.store p
}
storeObject(oc, o)
break
case'GRS_PATIENT_MH':
p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
o = new MedicalHistory(
patient : p
, dcmDate : parseDate(m.DCMDATE)
, cpEvent : m.CPEVENT
, visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
, bodySystem : m.BODY_SYSTEM
, medTerm : m.MEDTERM
, startDate : parseDate(m.START_DATE)
, active : m.ACTIVE
)
if(p) {
p.hasMedicalHistory = true
oc.store p
}
storeObject(oc, o)
break
case'GRS_PT_CMVIEW':
p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
o = new CmView(
patient : p
, dcmDate : parseDate(m.DCMDATE)
, cpEvent : m.CPEVENT
, visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
, cmTerm : m.CMTERM
, startDate : parseDate(m.START_DATE)
, stopDate : parseDate(m.STOP_DATE)
, dose : m.DOSE
, units : m.UNITES
, frequency : m.FREQUENCY
, indication : m.INDICATION
, continuing : m.CONTINUING
)
if(p) {
p.hasCmView = true
oc.store p
}
storeObject(oc, o)
break
case'GRS_PT_PE':
p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
o = new Pe(
patient : p
, dcmDate : parseDate(m.DCMDATE)
, cpEvent : m.CPEVENT
, visitNumber : m.VISIT_NUMBER ? Integer.valueOf(m.VISIT_NUMBER) : null
, repeatSn : m.REPEATSN
, bodySystem : m.BODY_SYSTEM
, notDone : m.NOTDONE
, result : m.RESULT
, specify : m.SPECIFY
)
if(p) {
p.hasPe = true
oc.store p
}
storeObject(oc, o)
break
case'GRS_PT_VS':
p = Patient.find(patientNo:m.PT, study:m.STUDY, site:m.INVSITE)
o = new Vs(
patient : p
, cpEvent : m.CPEVENT
, timePeriod : m.TIME_PERIOD
, height : m.HEIGHT
, heightUnit : m.HEIGHT_UNIT
, weight : m.WEIGHT
, weightUnit : m.WEIGHT_UNIT
, heartRate : m.HEARTRATE
, hrUnit : m.HR_UNIT
, respiration : m.RESPIRATION
, respirationUnit : m.RESPIRATION_UNIT
, bodyTemperature : m.BODY_TEMPERATURE
, temperatureUnit : m.TEMPERATURE_UNIT
, bpSystolic : m.BP_SYSTOLIC
, bpSysUnit : m.BP_SYS_UNIT
, bpDiastolic : m.BP_DIASTOLIC
, bpDiaUnit : m.BP_DIA_UNIT
, bmi : m.BMI
)
if(p) {
p.hasVs = true
oc.store p
}
storeObject(oc, o)
break
}
}
}
}
System.out.println "${new Date().format('yyyy/MM/dd HH:mm:ss')}: Done."