package uk.nhs.kch.rassyeyanie.rules.pims.symphony.translations.a03;
import org.apache.camel.Body;
import org.apache.commons.lang.StringUtils;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.AbstractGroup;
import ca.uhn.hl7v2.model.AbstractSegment;
import ca.uhn.hl7v2.model.DataTypeException;
import ca.uhn.hl7v2.model.Segment;
import ca.uhn.hl7v2.model.Structure;
import ca.uhn.hl7v2.model.Varies;
import ca.uhn.hl7v2.model.v24.datatype.CE;
import ca.uhn.hl7v2.model.v24.datatype.TS;
import ca.uhn.hl7v2.model.v24.datatype.XCN;
import ca.uhn.hl7v2.model.v24.group.ADT_A03_PROCEDURE;
import ca.uhn.hl7v2.model.v24.message.ADT_A03;
import ca.uhn.hl7v2.model.v24.segment.AL1;
import ca.uhn.hl7v2.model.v24.segment.EVN;
import ca.uhn.hl7v2.model.v24.segment.NTE;
import ca.uhn.hl7v2.model.v24.segment.PID;
import ca.uhn.hl7v2.model.v24.segment.PV1;
public class SymA03PimsA03
{
public void processMessage(@Body ADT_A03 to)
throws HL7Exception
{
this.transform(to.getPID());
AbstractGroup zrefParent = getZrefParent(to);
AbstractSegment zref = (AbstractSegment) zrefParent.get("ZRF");
this.transform(to.getPV1(), zref, to.getEVN());
for (int i = 0; i < to.getDG1Reps(); i++)
{
to.getDG1(i).clear();
}
for (Structure al1 : zrefParent.getAll("AL1"))
{
((AL1) al1).clear();
}
for (Structure nte : zrefParent.getAll("NTE"))
{
((NTE) nte).clear();
}
this.transformZref(zref, to.getPV1());
if (zrefParent instanceof ADT_A03_PROCEDURE)
{
zrefParent.clear();
}
}
private static AbstractGroup getZrefParent(ADT_A03 to)
throws HL7Exception
{
int procedorReps = to.getPROCEDUREReps();
if (procedorReps > 0)
{
ADT_A03_PROCEDURE procedure = to.getPROCEDURE(procedorReps - 1);
return procedure;
}
else
{
return to;
}
}
private void transformZref(Segment zref, PV1 pv1)
throws DataTypeException, HL7Exception
{
CE referralType = new CE(pv1.getMessage());
((Varies) zref.getField(1, 0)).setData(referralType);
referralType.getCe1_Identifier().setValue("EMERG");
referralType.getCe3_NameOfCodingSystem().setValue("DGATE");
TS dateReceived = new TS(pv1.getMessage());
((Varies) zref.getField(2, 0)).setData(dateReceived);
dateReceived.getTs1_TimeOfAnEvent().setValue(
pv1.getPv144_AdmitDateTime().getTs1_TimeOfAnEvent().getValue());
for (int i = 3; i <= 4; i++)
{
zref.getField(i, 0).clear();
}
CE referralSource = new CE(pv1.getMessage());
((Varies) zref.getField(5, 0)).setData(referralSource);
referralSource.getCe1_Identifier().clear();
referralSource.getCe3_NameOfCodingSystem().setValue("DGATE");
XCN referredBy = new XCN(pv1.getMessage());
((Varies) zref.getField(6, 0)).setData(referredBy);
referredBy.getXcn1_IDNumber().setValue("EDCDU");
referredBy.getXcn3_GivenName().setValue("DGATE");
XCN referredTo = new XCN(pv1.getMessage());
((Varies) zref.getField(7, 0)).setData(referredTo);
referredTo.getXcn3_GivenName().setValue("DGATE");
CE referralBySpecialty = new CE(pv1.getMessage());
((Varies) zref.getField(9, 0)).setData(referralBySpecialty);
referralBySpecialty.getCe3_NameOfCodingSystem().setValue("DGATE");
CE referralByOrg = new CE(pv1.getMessage());
((Varies) zref.getField(8, 0)).setData(referralByOrg);
referralByOrg.getCe1_Identifier().setValue(
referralBySpecialty.getCe1_Identifier().getValue());
referralByOrg.getCe3_NameOfCodingSystem().setValue("DGATE");
CE priority = new CE(pv1.getMessage());
((Varies) zref.getField(11, 0)).setData(priority);
priority.getCe1_Identifier().setValue("R");
zref.getField(12, 0).clear();
}
private void transform(PV1 pv1, Segment zref, EVN evn)
throws HL7Exception
{
pv1.getPv12_PatientClass().setValue("I");
pv1
.getPv13_AssignedPatientLocation()
.getPl4_Facility()
.getHd1_NamespaceID()
.setValue("KCH");
for (int i = 6; i < 9; i++)
pv1.getField(i, 0).clear();
CE hospitalService = new CE(pv1.getMessage());
((Varies) zref.getField(9, 0)).setData(hospitalService);
pv1.getPv110_HospitalService().setValue(
hospitalService.getCe1_Identifier().getValue());
CE careProvider = new CE(pv1.getMessage());
((Varies) zref.getField(7, 0)).setData(careProvider);
pv1
.getPv117_AdmittingDoctor(0)
.getXcn1_IDNumber()
.setValue(careProvider.getCe1_Identifier().getValue());
CE admitCategory = new CE(pv1.getMessage());
((Varies) zref.getField(12, 0)).setData(admitCategory);
pv1.getPv118_PatientType().setValue(
admitCategory.getCe1_Identifier().getValue());
for (int i = 20; i <= 40; i++)
{
pv1.getField(i, 0).clear();
}
pv1.getPv122_CourtesyCode().setValue("NSP");
pv1.getPv128_InterestCode().setValue("1");
pv1.getPv136_DischargeDisposition().setValue("CL");
pv1
.getPv137_DischargedToLocation()
.getDld1_DischargeLocation()
.setValue("U");
pv1.getPv138_DietType().getCe1_Identifier().setValue("EMERG");
pv1.getPv140_BedStatus().setValue("NSP");
}
private void transform(PID pid)
throws HL7Exception
{
pid.getPid4_AlternatePatientIDPID(0).clear();
pid.getPid6_MotherSMaidenName(0).clear();
pid.getPid10_Race(0).clear();
pid
.getPatientName(0)
.getPrefixEgDR()
.setValue(
StringUtils.upperCase(pid
.getPatientName(0)
.getPrefixEgDR()
.getValue()));
for (int i = 12; i <= 15; i++)
{
pid.getField(i, 0).clear();
}
for (int i = 18; i <= 21; i++)
{
pid.getField(i, 0).clear();
}
for (int i = 25; i <= 38; i++)
{
pid.getField(i, 0).clear();
}
}
}