au.org.alfred.icu.pdf.services.factories.DischargeSummaryDataBuilder.java Source code

Java tutorial

Introduction

Here is the source code for au.org.alfred.icu.pdf.services.factories.DischargeSummaryDataBuilder.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package au.org.alfred.icu.pdf.services.factories;

import au.org.alfred.icu.pdf.persistence.QryHospAdm;
import au.org.alfred.icu.pdf.persistence.VwSiss;
import au.org.alfred.icu.pdf.persistence.TblAdmAccountClassTfer;
import au.org.alfred.icu.pdf.persistence.TblAdmICUTransfer;
import au.org.alfred.icu.pdf.persistence.TblAdmission;
import au.org.alfred.icu.pdf.persistence.TblAdmissionICU;
import au.org.alfred.icu.pdf.persistence.TblAntibiotic;
import au.org.alfred.icu.pdf.persistence.TblCarePlan;
import au.org.alfred.icu.pdf.persistence.TblMicroResults;
import au.org.alfred.icu.pdf.persistence.TblNeurology;
import au.org.alfred.icu.pdf.persistence.TblNicotine;
import au.org.alfred.icu.pdf.persistence.TblOtherResults;
import au.org.alfred.icu.pdf.persistence.TblPMI;
import au.org.alfred.icu.pdf.persistence.TblPayClass;
import au.org.alfred.icu.pdf.persistence.TblProvider;
import au.org.alfred.icu.pdf.persistence.TblRefCarePlan;
import au.org.alfred.icu.pdf.persistence.TblResusPlan;
import au.org.alfred.icu.pdf.persistence.TblSex;
import au.org.alfred.icu.pdf.persistence.TblUnit;
import au.org.alfred.icu.pdf.persistence.TblWard;
import au.org.alfred.icu.pdf.persistence.VwDiagnosis;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.exp.ExpressionFactory;
import org.joda.time.DateTime;

/**
 *
 * @author mektronix
 */
public abstract class DischargeSummaryDataBuilder {

    public static String buildData(String icuVisitNumber, String visitNumber, String patientId, String userName,
            String userId, DischargeSummaryData data) {
        TblAdmission admHosp = new TblAdmission();
        TblAdmissionICU admICU = new TblAdmissionICU();
        TblAdmICUTransfer txICU = new TblAdmICUTransfer();
        TblAdmAccountClassTfer accntTx = new TblAdmAccountClassTfer();
        TblPMI demo = new TblPMI();
        TblSex sex = new TblSex();
        TblProvider doc = new TblProvider();
        TblPayClass pc = new TblPayClass();
        TblUnit unit = new TblUnit();
        TblWard ward = new TblWard();
        VwDiagnosis apache3 = new VwDiagnosis();
        List<TblMicroResults> micro = null;
        List<TblOtherResults> other = null;
        List<TblAntibiotic> antibiotics = null;
        List<TblNeurology> neuro = null;
        List<TblResusPlan> resus = null;
        List<TblNicotine> nic = null;
        List<VwSiss> procs = null;
        List<TblCarePlan> nursing = null;
        List<TblRefCarePlan> nursingRef = null;
        QryHospAdm destination = null;
        Map nursingPlans = new HashMap();
        int age = 0;
        int los = 0;
        StringBuilder fileName = new StringBuilder();
        List res;

        //fileName.append("\\\\alfapps01\\apps\\ICUApps\\CernerDischarge");

        res = ModelFactory.getModelObject(TblAdmission.class, TblAdmission.ADMID_PROPERTY, visitNumber);

        if (res.size() == 1) {
            admHosp = (TblAdmission) res.get(0);
        }

        res = ModelFactory.getModelObject(TblAdmissionICU.class, TblAdmissionICU.I_CUADM_ID_PROPERTY,
                icuVisitNumber);
        //System.out.println("Size "+res.size()+ " ICUID "+icuVisitNumber);
        if (res.size() == 1) {
            admICU = (TblAdmissionICU) res.get(0);
        }

        res = ModelFactory.getModelObject(TblPMI.class, TblPMI.P_MIID_PROPERTY, patientId);

        if (res.size() == 1) {
            demo = (TblPMI) res.get(0);
            org.joda.time.DateTime dob = new DateTime(demo.getBirthDate());
            org.joda.time.DateTime now = new DateTime();
            age = org.joda.time.Years.yearsBetween(dob, now).getYears();
        }

        res = ModelFactory.getModelWithExpression(TblAdmICUTransfer.class,
                ExpressionFactory.matchExp(TblAdmICUTransfer.ADM_ID_PROPERTY, admICU.getAdmID())
                        .andExp(ExpressionFactory.matchExp(TblAdmICUTransfer.WARD_TFER_DATE_PROPERTY,
                                admICU.getWardTferDate())));

        if (res.size() > 0) {
            txICU = (TblAdmICUTransfer) res.get(0);
        }

        res = ModelFactory.getModelObject(TblSex.class, TblSex.SEX_ID_PROPERTY,
                demo.getSexId() == null ? 1 : demo.getSexId());

        if (res.size() == 1) {
            sex = (TblSex) res.get(0);
        }

        res = ModelFactory.getModelObject(TblProvider.class, TblProvider.PROVIDER_CODE_PROPERTY,
                admHosp.getAttendingDrCode());

        if (res.size() == 1) {
            doc = (TblProvider) res.get(0);
        }

        res = ModelFactory.getModelObject(TblUnit.class, TblUnit.UNIT_ID_PROPERTY, admHosp.getUnitId());

        if (res.size() == 1) {
            unit = (TblUnit) res.get(0);
        }

        res = ModelFactory.getModelObject(TblPayClass.class, TblPayClass.PAY_CLASS_ID_PROPERTY,
                admHosp.getPayClassId());

        if (res.size() == 1) {
            pc = (TblPayClass) res.get(0);
        }

        try {
            res = ModelFactory.getModelObject(VwDiagnosis.class, VwDiagnosis.I_CUADM_ID_PROPERTY,
                    admICU.getICUAdmID());
            if (res.size() > 0) {
                //System.out.println("APACHEIII " + res.size());
                apache3 = (VwDiagnosis) res.get(0);
                //System.out.println("APACHEIII " + apache3.getA3DiagDesc());
            }
        } catch (CayenneRuntimeException ex) {
            //apache3 = null;
        }

        res = ModelFactory.getModelObject(TblMicroResults.class, TblMicroResults.ICU_ADM_ID_PROPERTY,
                admICU.getICUAdmID());
        if (res.size() > 0) {
            data.setMicro(res);
        }

        res = ModelFactory.getModelObject(TblOtherResults.class, TblOtherResults.ICU_ADM_ID_PROPERTY,
                admICU.getICUAdmID());
        if (res.size() > 0) {
            data.setOther(res);
        }

        res = ModelFactory.getModelObject(TblAntibiotic.class, TblAntibiotic.ICU_ADM_ID_PROPERTY,
                admICU.getICUAdmID());
        if (res.size() > 0) {
            data.setAntibiotics(res);
        }

        res = ModelFactory.getModelObject(TblNeurology.class, TblNeurology.ICU_ADM_ID_PROPERTY,
                admICU.getICUAdmID());
        if (res.size() > 0) {
            data.setNeuro(res.subList(0, 1));
        }

        res = ModelFactory.getModelObject(TblResusPlan.class, TblResusPlan.ICU_ADM_ID_PROPERTY,
                admICU.getICUAdmID());
        if (res.size() > 0) {
            data.setResus(res.subList(0, 1));
        }

        res = ModelFactory.getModelObject(TblNicotine.class, TblNicotine.ICU_ADM_ID_PROPERTY, admICU.getICUAdmID());
        if (res.size() > 0) {

            data.setNic(res.subList(res.size() - 1, res.size()));
        }

        res = ModelFactory.getModelObject(QryHospAdm.class, QryHospAdm.I_CUADM_ID_PROPERTY, admICU.getICUAdmID());
        if (res.size() > 0) {

            data.setDestination((QryHospAdm) res.get(0));
        }

        res = ModelFactory.getModelObject(TblRefCarePlan.class, TblRefCarePlan.END_DATE_PROPERTY, null);
        if (res.size() > 0) {
            data.setNursingPlanRef(res);
        }

        for (TblRefCarePlan plan : data.getNursingPlanRef()) {
            res = ModelFactory.getModelWithExpression(TblCarePlan.class, ExpressionFactory
                    .matchExp(TblCarePlan.I_CUADM_ID_PROPERTY, admICU.getICUAdmID())
                    .andExp(ExpressionFactory.matchExp(TblCarePlan.ARCHIVE_PROPERTY, 0))
                    .andExp(ExpressionFactory.matchExp(TblCarePlan.CARE_PLAN_ID_PROPERTY, plan.getCarePlanId())));
            if (res.size() > 0) {
                nursingPlans.put(plan.getCarePlanDesc(), res);
            }
        }

        data.setNursingPlans((HashMap) nursingPlans);

        try {

            res = ModelFactory.getModelWithExpression(VwSiss.class,
                    ExpressionFactory.matchExp(VwSiss.I_CUADM_ID_PROPERTY, admICU.getICUAdmID())
                            .andExp(ExpressionFactory.matchExp(VwSiss.SISS_END_DATE_PROPERTY, null)));
            //System.out.println("Siss "+res.size());
            if (res.size() > 0) {
                data.setProcs(res);
            }
        } catch (CayenneRuntimeException ex) {
            //ex.printStackTrace(System.out);
            data.setProcs(new ArrayList<VwSiss>());
        }

        StringBuilder diag = new StringBuilder();
        if (null != apache3.getAdmID()) {
            if (apache3.getA3SubCodeDesc() != null) {
                diag.append(apache3.getA3SubCodeDesc());
            } else if (apache3.getA3DiagDesc() != null) {
                diag.append(apache3.getA3DiagDesc());
            } else {
                diag.append("No APACHE III");
            }
        } else {
            diag.append("No APACHE Diag Found");
        }
        //diag.append("1902: PostOperative - Musculoskeletal/Skin - Orthopedic surgery - Orthopedic surgery, other");

        String delayed = "Unknown";
        if (txICU.getWardExitDate() != null && admICU.getExpectDischarge() != null) {
            delayed = "No";
            if (org.joda.time.Hours.hoursBetween(new org.joda.time.DateTime(admICU.getExpectDischarge()),
                    new org.joda.time.DateTime(txICU.getWardExitDate())).getHours() > 6) {
                delayed = "Yes";
            }
        }
        String early = "unknown";
        if (admICU.getEarlyDischarge() != null) {
            if (admICU.getEarlyDischarge().intValue() == 1) {
                early = "Yes";
            } else if (admICU.getEarlyDischarge().intValue() == 2) {
                early = "No";
            }
        }
        if (txICU.getWardExitDate() != null) {
            los = org.joda.time.Hours.hoursBetween(new org.joda.time.DateTime(txICU.getWardAdmDate()),
                    new org.joda.time.DateTime(txICU.getWardExitDate())).getHours();
        } else {
            los = org.joda.time.Hours.hoursBetween(new org.joda.time.DateTime(txICU.getWardAdmDate()),
                    new org.joda.time.DateTime(Calendar.getInstance().getTime())).getHours();
        }

        fileName.append(demo.getPatientId()).append("_").append(admHosp.getVisitNumber()).append("_")
                .append(new SimpleDateFormat("yyyyMMddHHmm")
                        .format(txICU.getWardExitDate() == null ? Calendar.getInstance().getTime()
                                : txICU.getWardExitDate()))
                .append("_ICU DISCHARGE SUMMARY.pdf");

        if (data.getDestination() != null) {
            if (data.getDestination().getDispositionDesc() == null
                    || data.getDestination().getDispositionDesc().equals((""))) {
                res = ModelFactory.getModelObject(TblWard.class, TblWard.WARD_ID_PROPERTY, admHosp.getWardId());
                if (res.size() > 0) {
                    ward = (TblWard) res.get(0);
                    data.setCurrentLocation(data.getDestination().getAPDOutcomeDesc() + " " + ward.getWardCode());
                } else {
                    data.setCurrentLocation(data.getDestination().getAPDOutcomeDesc());
                }
            } else {
                data.setCurrentLocation(data.getDestination().getAPDOutcomeDesc() + " - "
                        + (data.getDestination().getDestinationDesc() == null
                                ? data.getDestination().getDispositionDesc()
                                : data.getDestination().getDestinationDesc()));
            }
        }

        data.setActiveProblems(admICU.getActiveProblems() == null ? " - " : admICU.getActiveProblems());
        data.setFinalDiagnosis(admICU.getFinalDiagnosis() == null ? " - " : admICU.getFinalDiagnosis());
        //System.out.println("Transfer "+admICU.getPmiid());
        data.setAdmDate(txICU.getWardAdmDate() == null ? "N/A"
                : new SimpleDateFormat("dd/MM/yyyy HH:mm").format(txICU.getWardAdmDate()));
        data.setAdmID(admHosp.getAdmid() == null ? "N/A" : admHosp.getAdmid());
        data.setAdmNumber(String.valueOf(ModelFactory
                .getModelObject(TblAdmissionICU.class, TblAdmissionICU.ADM_ID_PROPERTY, admHosp.getAdmid())
                .size()));
        data.setAge(String.valueOf(age));
        data.setApacheIII(diag.toString());
        data.setBirthDate(demo.getBirthDate() == null ? "N/A"
                : new SimpleDateFormat("dd/MM/yyyy").format(demo.getBirthDate()));
        data.setConsultant(doc == null ? "" : (doc.getSurname() == null ? "" : doc.getSurname()));
        data.setDelayed(delayed);
        data.setDisSumm(admICU.getICUDisSumm() == null ? "N/A" : admICU.getICUDisSumm());
        data.setEarlyDischarge(early);
        data.setExpectDischarge(admICU.getExpectDischarge() == null ? "N/A"
                : new SimpleDateFormat("dd/MM/yyyy HH:mm").format(admICU.getExpectDischarge()));
        data.setLOSDays(String.valueOf(los / 24));
        data.setLOSHours(String.valueOf(los));
        data.setNotForCPR(
                admICU.getNotForCPR() == null ? "N/A" : admICU.getNotForCPR().intValue() == 1 ? "Yes" : "No");
        data.setNotForReadmit(admICU.getNotForReadmit() == null ? "N/A"
                : admICU.getNotForReadmit().intValue() == 1 ? "Yes" : "No");
        data.setPMIID(demo.getPMIid() == null ? "N/A" : demo.getPMIid());
        data.setPastHx(admICU.getPastHx() == null ? "N/A" : admICU.getPastHx());
        data.setPatientAddress(
                new String().concat(demo.getPatientAddress1() == null ? "" : demo.getPatientAddress1()).concat(" ")
                        .concat(demo.getPatientSuburb() == null ? "" : demo.getPatientSuburb()));
        data.setPatientFamilyName(demo.getPatientFamilyName() == null ? "N/A" : demo.getPatientFamilyName());
        data.setPatientGivenName(demo.getPatientGivenName() == null ? " N/A" : demo.getPatientGivenName());
        data.setPatientId(demo.getPatientId() == null ? "N/A" : demo.getPatientId());
        data.setPatientMiddleName(demo.getPatientMiddleName() == null ? "" : demo.getPatientMiddleName());
        data.setPayClass(pc == null ? "" : (pc.getPayClassCode() == null ? "" : pc.getPayClassCode()));
        data.setPendingInvestigations(
                admICU.getPendingInvestigations() == null ? " - " : admICU.getPendingInvestigations());
        data.setPresentingHx(admICU.getPresentingHx() == null ? "N/A" : admICU.getPresentingHx());
        data.setSexDesc(sex == null ? "N/A" : sex.getSexDesc());
        data.setStrFileName(fileName.toString());
        data.setUnitCode(unit.getUnitCode() == null ? "UNK" : unit.getUnitCode());
        data.setUpdateBy(userId);
        data.setUpdateDate(new SimpleDateFormat("dd MMM yyyy HH:mm").format(Calendar.getInstance().getTime()));
        data.setVisitNumber(admHosp.getVisitNumber() == null ? "N/A" : admHosp.getVisitNumber());
        data.setWardAdmDate(txICU.getWardAdmDate() == null ? "N/A"
                : new SimpleDateFormat("dd MMM yyyy HH:mm").format(txICU.getWardAdmDate()));
        data.setWardExitDate(txICU.getWardExitDate() == null ? "N/A"
                : new SimpleDateFormat("dd MMM yyyy HH:mm").format(txICU.getWardExitDate()));
        data.setWardTferDate(txICU.getWardTferDate() == null ? "N/A"
                : new SimpleDateFormat("dd MMM yyyy HH:mm").format(txICU.getWardTferDate()));

        return fileName.toString();
    }

}