package uk.nhs.kch.rassyeyanie.rules.common.core.filters;
import org.apache.camel.Body;
import org.apache.commons.lang.StringUtils;
import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.v24.message.ORU_R01;
import ca.uhn.hl7v2.model.v24.segment.OBR;
public class MicroResultsFilter
{
private boolean verify = true;
public boolean shouldProcessMessage(@Body ORU_R01 r01)
throws HL7Exception
{
boolean conformsFiller = true;
boolean conformsService = true;
int resultCount = r01.getPATIENT_RESULT().getORDER_OBSERVATIONReps();
for (int i = 0; i < resultCount && conformsFiller && conformsService; i++)
{
OBR obr = r01.getPATIENT_RESULT().getORDER_OBSERVATION(i).getOBR();
conformsFiller =
this.checkFillerOrderNumberConforms(obr
.getObr3_FillerOrderNumber()
.getEi1_EntityIdentifier()
.getValue());
conformsService =
this.checkDiagnosticServiceConforms(obr
.getObr24_DiagnosticServSectID()
.getValue());
}
if (this.verify)
{
return (conformsFiller && conformsService);
}
else
{
return !(conformsFiller && conformsService);
}
}
private boolean checkFillerOrderNumberConforms(String fillerOrderNumber)
{
return (StringUtils.isNumeric(StringUtils.left(fillerOrderNumber, 2)) &&
(StringUtils.mid(fillerOrderNumber, 2, 1).equals("M")||
StringUtils.mid(fillerOrderNumber, 2, 1).equals("U"))
&& StringUtils.isNumeric(StringUtils.mid(fillerOrderNumber, 3, 7)));
}
private boolean checkDiagnosticServiceConforms(String diagnosticService)
{
return (diagnosticService.equals("MB"));
}
public boolean getVerify()
{
return this.verify;
}
public void setVerify(boolean verify)
{
this.verify = verify;
}
}