package uk.nhs.kch.rassyeyanie.rules.common.core.filters; import org.apache.camel.Body; import org.apache.commons.lang.StringUtils; import uk.nhs.kch.rassyeyanie.framework.HapiUtil; import ca.uhn.hl7v2.HL7Exception; import ca.uhn.hl7v2.model.AbstractMessage; import ca.uhn.hl7v2.model.v24.segment.PID; /* (define WPSCM_O01 (let ((input (make-message-structure WNPTORM-delm WNPTORM-struct)) ) (lambda (message-string) (message-parse input message-string) (let ((result (and (verify ~input%WNPTORM.MSH.MSH-9-message_type.MSH-9-1_message_type "ORM") (verify ~input%WNPTORM.MSH.MSH-9-message_type.MSH-9-2_trigger_event "O01") (if (> (string-length ~input%WNPTORM.patient.PID.PID-3-patient_ID_internal[0].CX.ID_number) 7) (begin (verify ~input%WNPTORM.patient.PID.PID-3-patient_ID_internal[0].CX.ID_number "\[DH\|NS\]\{2\}\[0-9\]\{6\}") ) (begin (verify ~input%WNPTORM.patient.PID.PID-3-patient_ID_internal[0].CX.ID_number "\[0\|A-Z\]\{1\}\[0-9\]\{6\}") ) ) */ public class PidFilter { public boolean shouldProcessMessage(@Body AbstractMessage body) throws HL7Exception { PID pid = HapiUtil.getWithTerser(body, PID.class); return this.checkPtIdInternalConforms(StringUtils.defaultString(pid .getPid3_PatientIdentifierList(0).getCx1_ID().getValue())); } private boolean checkPtIdInternalConforms(String patientIdInternal) { if (StringUtils.isEmpty(patientIdInternal)) return false; if (patientIdInternal.length() > 7) { return patientIdInternal.matches("(DH|NS){1}[0-9]{6}"); } else { return patientIdInternal.matches("[0|A-Z]{1}[0-9]{6}"); } } }