Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions sql/create_IMMUNIZATION_table.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
CREATE TABLE `HealthPort`.`IMMUNIZATION` (
`ID` VARCHAR(45) NOT NULL,
`NAMEURI` TEXT NULL DEFAULT NULL,
`NAMECODING` TEXT NULL DEFAULT NULL,
`NAMEDISPLAY` TEXT NULL DEFAULT NULL,
`SUBJECT` TEXT NULL DEFAULT NULL,
`VACCINATION_DATE` DATETIME NULL DEFAULT NULL,
`SERIES` TEXT NULL DEFAULT NULL,
`MANUFACTURER` TEXT NULL DEFAULT NULL,
`LOT_NUMBER` TEXT NULL DEFAULT NULL,
`DOSE_QUANTITY` TEXT NULL DEFAULT NULL,
`DOSE_UNITS` TEXT NULL DEFAULT NULL,
`SITE` TEXT NULL DEFAULT NULL,
`ROUTE` TEXT NULL DEFAULT NULL,
`PERFORMER_ID` TEXT NULL DEFAULT NULL,
`PERFORMER_NAME` TEXT NULL DEFAULT NULL,
`ENCOUNTER_ID` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`ID`));
142 changes: 142 additions & 0 deletions src/edu/gatech/i3l/HealthPort/HealthPortInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@
import ca.uhn.fhir.model.dstu.composite.QuantityDt;
import ca.uhn.fhir.model.dstu.composite.ResourceReferenceDt;
import ca.uhn.fhir.model.dstu.resource.Condition;
import ca.uhn.fhir.model.dstu.resource.Immunization;
import ca.uhn.fhir.model.dstu.resource.Immunization.VaccinationProtocol;
import ca.uhn.fhir.model.dstu.resource.Medication;
import ca.uhn.fhir.model.dstu.resource.MedicationPrescription;
import ca.uhn.fhir.model.dstu.resource.Observation;
import ca.uhn.fhir.model.dstu.resource.MedicationPrescription.Dispense;
import ca.uhn.fhir.model.dstu.resource.MedicationPrescription.DosageInstruction;
import ca.uhn.fhir.model.dstu.valueset.ConditionStatusEnum;
import ca.uhn.fhir.model.dstu.valueset.ImmunizationRouteCodesEnum;
import ca.uhn.fhir.model.dstu.valueset.MedicationPrescriptionStatusEnum;
import ca.uhn.fhir.model.dstu.valueset.NarrativeStatusEnum;
import ca.uhn.fhir.model.dstu.valueset.ObservationReliabilityEnum;
Expand Down Expand Up @@ -64,6 +67,7 @@ public class HealthPortInfo {
public static String OBSERVATION = "OBSERVATION";
public static String CONDITION = "CONDITIONS";
public static String MEDICATIONPRESCRIPTION = "MEDICATIONPRESCRIPTION";
public static String IMMUNIZATION = "IMMUNIZATION";

private DataSource dataSource;

Expand Down Expand Up @@ -350,6 +354,40 @@ public static void storeResource(String tableName, Object obj0)
pstmt.clearParameters();
pstmt.close();

} else if (tableName.equals(IMMUNIZATION)) {
ImmunizationSerializable obj = (ImmunizationSerializable) obj0;
SQL_STATEMENT = "REPLACE INTO "
+ tableName
+ " (ID, NAMEURI, NAMECODING, NAMEDISPLAY, SUBJECT, VACCINATION_DATE, SERIES, MANUFACTURER, LOT_NUMBER, DOSE_QUANTITY, DOSE_UNITS, SITE, ROUTE, PERFORMER_ID, PERFORMER_NAME, ENCOUNTER_ID) VALUES "
+ " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement pstmt = connection.prepareStatement(SQL_STATEMENT);

// set input parameters
pstmt.setString(1, obj.ID);
pstmt.setString(2, obj.NAMEURI);
pstmt.setString(3, obj.NAMECODING);
pstmt.setString(4, obj.NAMEDISPLAY);
pstmt.setString(5, obj.SUBJECT);
if (obj.VACCINATION_DATE != null) {
Timestamp ts = new Timestamp(obj.VACCINATION_DATE.getTime());
pstmt.setTimestamp(6, ts);
} else {
pstmt.setTimestamp(6, null);
}
pstmt.setString(7, obj.SERIES);
pstmt.setString(8, obj.MANUFACTURER);
pstmt.setString(9, obj.LOT_NUMBER);
pstmt.setString(10, obj.DOSE_QUANTITY);
pstmt.setString(11, obj.DOSE_UNITS);
pstmt.setString(12, obj.SITE);
pstmt.setString(13, obj.ROUTE);
pstmt.setString(14, obj.PERFORMER_ID);
pstmt.setString(15, obj.PERFORMER_NAME);
pstmt.setString(16, obj.ENCOUNTER_ID);

pstmt.executeUpdate();
pstmt.clearParameters();
pstmt.close();
}
} catch (NamingException | SQLException e) {
e.printStackTrace();
Expand Down Expand Up @@ -703,6 +741,110 @@ else if (textStatus.equalsIgnoreCase("EXTENSIONS"))
NarrativeStatusEnum.EXTENSIONS);
}
retVal.add(medicationPrescript);
} else if (tableName.equals(IMMUNIZATION)) {
String theId = rs.getString("ID");
String nameUri = rs.getString("NAMEURI");
String nameCode = rs.getString("NAMECODING");
String nameDisp = rs.getString("NAMEDISPLAY");
String subject = rs.getString("SUBJECT");
Timestamp vdateTS = rs.getTimestamp("VACCINATION_DATE");
String series = rs.getString("SERIES");
String manu = rs.getString("MANUFACTURER");
String lot = rs.getString("LOT_NUMBER");
String doseQty = rs.getString("DOSE_QUANTITY");
String doseUnits = rs.getString("DOSE_UNITS");
String site = rs.getString("SITE");
String route = rs.getString("ROUTE");
String provId = rs.getString("PERFORMER_ID");
String provName = rs.getString("PERFORMER_NAME");

Immunization immu = new Immunization();

// set ID
immu.setId(theId);

// set VaccineType
nameDisp = StringEscapeUtils.escapeHtml4(nameDisp);
CodingDt nameCoding = new CodingDt();
nameCoding.setValueSet(new ResourceReferenceDt("http://hl7.org/fhir/vs/vaccinetype"));
nameCoding.setSystem(nameUri); // typically "http://www2a.cdc.gov/vaccines/iis/iisstandards/vaccines.asp?rpt=cvx"
nameCoding.setCode(nameCode);
nameCoding.setDisplay(nameDisp);
ArrayList<CodingDt> codingList = new ArrayList<CodingDt>();
codingList.add(nameCoding);
CodeableConceptDt codeDt = new CodeableConceptDt();
codeDt.setCoding(codingList);
immu.setVaccineType(codeDt);

// set Subject as reference to Patient
ResourceReferenceDt subj = new ResourceReferenceDt(subject);
immu.setSubject(subj);

// set Date
java.util.Date vDate = null;
if (vdateTS != null)
vDate = new Date(vdateTS.getTime());
if (vDate != null)
immu.setDate(new DateTimeDt(vDate));

// set VaccinationProtocol.series
Immunization.VaccinationProtocol ivp = new Immunization.VaccinationProtocol();
ivp.setSeries(series);
ArrayList<Immunization.VaccinationProtocol> ivpList = new ArrayList<Immunization.VaccinationProtocol>();
ivpList.add(ivp);
immu.setVaccinationProtocol(ivpList);

// set manufacturer = resource reference
if (!manu.equalsIgnoreCase("other"))
immu.setManufacturer(new ResourceReferenceDt(manu));

// set lot number
immu.setLotNumber(lot);

// set DoseQuantity, value and units
if (!doseQty.isEmpty()) {
QuantityDt qty = new QuantityDt(new Double(doseQty));
qty.setUnits(doseUnits);
immu.setDoseQuantity(qty);
}

// set site - setSite(CodeableConceptDt theValue)
CodingDt siteCode = new CodingDt();
siteCode.setValueSet(new ResourceReferenceDt("http://hl7.org/fhir/vs/immunization-site"));
siteCode.setSystem("http://hl7.org/fhir/v3/ActSite");
siteCode.setDisplay(site);
ArrayList<CodingDt> siteCodeList = new ArrayList<CodingDt>();
siteCodeList.add(siteCode);
CodeableConceptDt siteConcept = new CodeableConceptDt();
siteConcept.setCoding(siteCodeList);

// set route - setRoute(ImmunizationRouteCodesEnum theValue)
if (route.matches("(?i:im|intramuscular)"))
immu.setRoute(ImmunizationRouteCodesEnum.IM);
else if (route.matches("(?i:nasinhl|nasal|inhalation)"))
immu.setRoute(ImmunizationRouteCodesEnum.NASINHL);
else if (route.matches("(?i:po|oral|by mouth)"))
immu.setRoute(ImmunizationRouteCodesEnum.PO);

// set provider, id and display name = resource reference
ResourceReferenceDt performer = new ResourceReferenceDt(provId);
performer.setDisplay(provName);
immu.setPerformer(performer);

/*
* DSTU1 has no option to set encounter_id (resource reference) on the Immunization resource.
*
* However, it is likely to be implemented in DSTU2:
* @see http://hl7.org/fhir/2015May/immunization.html
*
* ...and is alreaday in HAPI-FHIR's DSTU-2:
* @see https://jamesagnew.github.io/hapi-fhir/apidocs-dstu2/ca/uhn/fhir/model/dstu2/resource/Immunization.html
*
* DSTU2 example:
* immu.setEncounter(new ResourceReferenceDt(rs.getString("ENCOUNTER_ID")));
*/

retVal.add(immu);
}
}
}
Expand Down
28 changes: 28 additions & 0 deletions src/edu/gatech/i3l/HealthPort/ImmunizationSerializable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package edu.gatech.i3l.HealthPort;

import java.io.Serializable;

/**
* Bean for Immunization data.
* @author ewall
*/
public class ImmunizationSerializable implements Serializable {
private static final long serialVersionUID = 1L;

public String ID;
public String NAMEURI;
public String NAMECODING;
public String NAMEDISPLAY;
public String SUBJECT;
public java.util.Date VACCINATION_DATE;
public String SERIES;
public String MANUFACTURER;
public String LOT_NUMBER;
public String DOSE_QUANTITY;
public String DOSE_UNITS;
public String SITE;
public String ROUTE;
public String PERFORMER_ID;
public String PERFORMER_NAME;
public String ENCOUNTER_ID;
}
2 changes: 2 additions & 0 deletions src/edu/gatech/i3l/HealthPort/RestfulServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import ca.uhn.fhir.rest.server.IResourceProvider;
import ca.uhn.fhir.rest.server.RestfulServer;
import edu.gatech.i3l.HealthPort.providers.ConditionResourceProvider;
import edu.gatech.i3l.HealthPort.providers.ImmunizationResourceProvider;
import edu.gatech.i3l.HealthPort.providers.MedicationPrescrResource;
import edu.gatech.i3l.HealthPort.providers.ObservationResourceProvider;
import edu.gatech.i3l.HealthPort.providers.PatientResourceProvider;
Expand Down Expand Up @@ -63,6 +64,7 @@ protected void initialize() throws ServletException {
resourceProviders.add(new ObservationResourceProvider());
resourceProviders.add(new ConditionResourceProvider());
resourceProviders.add(new MedicationPrescrResource());
resourceProviders.add(new ImmunizationResourceProvider());
setResourceProviders(resourceProviders);

// /*
Expand Down
6 changes: 5 additions & 1 deletion src/edu/gatech/i3l/HealthPort/UpdateFHIRdB.java
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ protected void doGet(HttpServletRequest request,

syntheticEHRPort.getMedicationPrescriptions();
syntheticCancerPort.getMedicationPrescriptions();

} catch (Exception e) {
e.printStackTrace();
} finally {
Expand All @@ -167,6 +167,10 @@ protected void doGet(HttpServletRequest request,
e.printStackTrace();
}
}
} else if (res.equalsIgnoreCase(HealthPortInfo.IMMUNIZATION)) {
// only ExactDataPort implemented at this time
syntheticEHRPort.getImmunizations();
syntheticCancerPort.getImmunizations();
}
}

Expand Down
Loading