package uk.nhs.kch.rassyeyanie.rules.pims.symphony.translations.a08;
import org.apache.camel.Body;
import org.apache.commons.lang.StringUtils;
import ca.uhn.hl7v2.HL7Exception;
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.message.ADT_A01;
import ca.uhn.hl7v2.model.v24.segment.AL1;
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;
/**
* @author Rajeev Bera on 17-Aug-12
* @version 2.4 (the version of the package this class was first added to)
*/
// EC: this translation does not work in live --
// I have made some assumptions about how it would work if it did
// MT: Last meeting between ICT and ED ID agreed A08 to PIMS only allow to go
// through if patient is at CDU
// Updated 14.2.2013
public class SymA08PimsA08
{
public void processMessage(@Body ADT_A01 to)
throws HL7Exception
{
to.addNonstandardSegment("ZRF");
Segment zref = null;
if (to.getPROCEDUREReps() > 0)
{
zref = (Segment) to.insertRepetition("ZRF", 0);
}
else
{
AbstractSegment abstractSegment = (AbstractSegment) to.get("ZRF");
abstractSegment.clear();
zref = abstractSegment;
}
this.transform(to.getMSH());
this.transform(to.getPID());
this.transformZref(zref, to.getPV1());
ADT_A01 from = new ADT_A01();
DeepCopy.copy(to.getPV1(), from.getPV1());
this.transform(to.getPV1(), from.getPV1());
for (int i = 0; i < to.getDG1Reps(); i++)
{
to.getDG1(i).clear();
}
for (Structure al1 : to.getAll("AL1"))
{
((AL1) al1).clear();
}
to.addNonstandardSegment("NTE");
for (Structure nte : to.getAll("NTE"))
{
((NTE) nte).clear();
}
for (int i = 0; i < to.getPROCEDUREReps(); i++)
{
to.getPROCEDURE(i).clear();
}
}
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().clear();
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 <= 14; 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");
CE priority = new CE(pv1.getMessage());
((Varies) zref.getField(11, 0)).setData(priority);
priority.getCe1_Identifier().setValue("R");
CE qual = new CE(pv1.getMessage());
((Varies) zref.getField(12, 0)).setData(qual);
qual.clear();
}
/**
* This method for translating MSH segment in A08 message from SYM to PIMS.
*
*/
public void transform(MSH msh)
throws HL7Exception
{
msh
.getMsh3_SendingApplication()
.getHd1_NamespaceID()
.setValue("SYMPHONY");
}
/**
* This method for translating PID segment in A08 message from SYM to PIMS.
*/
public void transform(PID pid)
throws HL7Exception
{
pid.getPid2_PatientID().getCx5_IdentifierTypeCode().setValue("NHS");
pid
.getPid3_PatientIdentifierList(0)
.getCx5_IdentifierTypeCode()
.setValue("PAS");
pid
.getPatientName(0)
.getXpn5_PrefixEgDR()
.setValue(
StringUtils.upperCase(pid
.getPatientName(0)
.getXpn5_PrefixEgDR()
.getValue()));
pid.getPid16_MaritalStatus().getCe1_Identifier().setValue("NSP");
pid.getPid17_Religion().getCe1_Identifier().setValue("NSP");
pid.getPid22_EthnicGroup(0).getCe1_Identifier().setValue("NSP");
pid.getPid24_MultipleBirthIndicator().setValue("NSP");
}
/**
* PV1.
*/
public void transform(PV1 pv1, PV1 copyPv1)
throws HL7Exception
{
pv1.clear(); // Use this to be able to remove the non-standard recursive
// value in PV1-39
pv1.getPv11_SetIDPV1().setValue(copyPv1.getPv11_SetIDPV1().getValue());
pv1.getPv12_PatientClass().setValue("I");
pv1
.getPv13_AssignedPatientLocation()
.getPl1_PointOfCare()
.setValue(copyPv1.getPv14_AdmissionType().getValue());
pv1
.getPv13_AssignedPatientLocation()
.getPl4_Facility()
.getHd1_NamespaceID()
.setValue("KCH");
pv1
.getPv13_AssignedPatientLocation()
.getPl9_LocationDescription()
.setValue(copyPv1.getPv14_AdmissionType().getValue());
DeepCopy.copy(
copyPv1.getPv114_AdmitSource(),
pv1.getPv114_AdmitSource());
pv1.getBedStatus().setValue("NSP");
DeepCopy.copy(
copyPv1.getPv119_VisitNumber(),
pv1.getPv119_VisitNumber());
pv1.getPv131_BadDebtAgencyCode().setValue("D");
pv1
.getPv144_AdmitDateTime()
.getTs1_TimeOfAnEvent()
.setValue(
copyPv1
.getPv144_AdmitDateTime()
.getTs1_TimeOfAnEvent()
.getValue());
}
}