package uk.nhs.kch.rassyeyanie.rules.pims.symphony.translations.a03;
import org.apache.camel.Body;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.AbstractGroup;
import ca.uhn.hl7v2.model.AbstractSegment;
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.ST;
import ca.uhn.hl7v2.model.v24.group.ADT_A03_PROCEDURE;
import ca.uhn.hl7v2.model.v24.message.ADT_A01;
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.MSH;
import ca.uhn.hl7v2.model.v24.segment.NTE;
import ca.uhn.hl7v2.model.v24.segment.PID;
import ca.uhn.hl7v2.model.v24.segment.PV1;
import ca.uhn.hl7v2.util.DeepCopy;
public class SymA03PimsA01
{
public void transform(MSH msh)
throws HL7Exception
{
msh.getMsh3_SendingApplication().getNamespaceID().setValue("SYMPHONY");
msh.getMessageType().getTriggerEvent().setValue("A01");
msh.getMsh13_SequenceNumber().clear();
msh.getMsh14_ContinuationPointer().clear();
msh.getMsh17_CountryCode().clear();
int i = 0;
while (i < msh.getMsh18_CharacterSetReps())
{
msh.getMsh18_CharacterSet(i).clear();
i++;
}
msh.getMsh19_PrincipalLanguageOfMessage().clear();
}
public void transform(EVN evn)
throws HL7Exception
{
evn.getEventTypeCode().setValue("A01");
}
public void transform(PID pid)
throws HL7Exception
{
pid.getPid2_PatientID().getCx5_IdentifierTypeCode().setValue("NHS");
pid.getPid19_SSNNumberPatient().clear();
pid.getPid20_DriverSLicenseNumberPatient().clear();
int i = 0;
while (i < pid.getPid21_MotherSIdentifierReps())
{
pid.getPid21_MotherSIdentifier(i).clear();
i++;
}
pid.getPid24_MultipleBirthIndicator().clear();
}
public void transform(PV1 pv1, Segment zref, EVN evn)
throws HL7Exception
{
ADT_A01 a01 = new ADT_A01();
MSH mshSegment = a01.getMSH();
mshSegment.getFieldSeparator().setValue("|");
mshSegment.getEncodingCharacters().setValue("^~\\&");
PV1 tempPv1 = a01.getPV1();
ca.uhn.hl7v2.util.DeepCopy.copy(pv1, tempPv1);
pv1.clear();
pv1.getPv11_SetIDPV1().setValue(tempPv1.getPv11_SetIDPV1().encode());
pv1.getPv14_AdmissionType().setValue(
tempPv1.getPv14_AdmissionType().encode());
pv1.getPv110_HospitalService().setValue(
zref.getField(9, 0).encode().toString());
pv1.getPv114_AdmitSource().setValue(
tempPv1.getPv114_AdmitSource().encode());
pv1.getPv19_ConsultingDoctor(0).parse(
zref.getField(7, 0).encode().toString().replace("^^DGATE", ""));
pv1.getPv12_PatientClass().setValue("I");
String dischargeLocation =
tempPv1.getPv137_DischargedToLocation().encode();
pv1.getPv18_ReferringDoctor(0).parse(
tempPv1.getPv19_ConsultingDoctor(0).encode());
pv1.getPv13_AssignedPatientLocation().parse(
dischargeLocation.split("\\^")[0] + "^^^KCH^^^^^" +
dischargeLocation.split("\\^")[1]);
pv1.getPv117_AdmittingDoctor(0).parse(
tempPv1.getPv117_AdmittingDoctor(0).encode());
pv1.getPv118_PatientType().parse(
tempPv1.getPv118_PatientType().encode());
pv1.getPv119_VisitNumber().parse(
tempPv1.getPv119_VisitNumber().encode());
pv1.getPv122_CourtesyCode().setValue("NSP");
pv1.getPv128_InterestCode().parse(
tempPv1.getPv128_InterestCode().encode());
pv1.getPv128_InterestCode().setValue("NSP");
pv1.getPv140_BedStatus().setValue("NSP");
pv1.getPv144_AdmitDateTime().parse(
tempPv1.getPv145_DischargeDateTime(0).encode());
CE ce = new CE(zref.getMessage());
((Varies) zref.getField(1, 0)).setData(ce);
ce.getCe1_Identifier().setValue("EMERG");
ce.getCe3_NameOfCodingSystem().setValue("DGATE");
zref.getField(2, 0).parse(
tempPv1.getPv144_AdmitDateTime().getTs1_TimeOfAnEvent().getValue());
zref.getField(5, 0).parse(zref.getField(5, 0).encode() + "^^DGATE");
zref.getField(8, 0).parse(zref.getField(9, 0).encode());
zref.getField(9, 0).parse(zref.getField(9, 0).encode() + "^^DGATE");
zref.getField(11, 0).parse("R^^DGATE");
((Varies) zref.getField(12, 0)).setData(new ST(zref.getMessage()));
zref.getField(12, 0).clear();
}
public void dispatchProcessFixture(@Body ADT_A03 to)
throws HL7Exception
{
AbstractGroup zrefParent = getZrefParent(to);
AbstractSegment zref = (AbstractSegment) zrefParent.get("ZRF");
this.transform(to.getPV1(), zref, to.getEVN());
this.transform(to.getEVN());
this.transform(to.getMSH());
this.transform(to.getPID());
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();
}
if (zrefParent instanceof ADT_A03_PROCEDURE)
{
to.addNonstandardSegment("ZRF");
Segment zrf = (Segment) to.insertRepetition("ZRF", 0);
DeepCopy.copy(zref, zrf);
to.insertRepetition("ZRF", 0);
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);
// procedure.insertRepetition("ZRF", 0);
return procedure;
}
else
{
return to;
}
}
}