Необходимо проанализировать HL7-сообщение с использованием HAPI в JAVA - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь проанализировать HL7 Message версии 2.8, используя HAPI.До этого я могу получить значение от каждого сегмента, как MSH, EVN, PID, PV1.Но сейчас я получаю значение только из сегмента MSH, другие сегменты (EVN, PId, PV1) приходят в NULL.Пожалуйста, посмотрите мой код и дайте мне решения для этого.

public class ADTService {

    AWSCredentials awsCredentials = null;
    AmazonDynamoDBClient amazonDynamoDBClient = null; 

    public Reply sendADTMessage() throws HL7Exception {

        Reply reply = new Reply();
        PatientInfo patientInfo = new PatientInfo();

        byte[] valueDecoded= Base64.decode("TVNIfF5+XFwmfFNtYXJ0fDgwMDB8fEZ8MjAxMzA3MzExMzIyNTl8fEFEVF5BMDF8NDM0MzQzfFB8Mi44fHx8QUx8TkUKRVZOfFAwM3wyMDEzMDczMTEzMjI1OXx8T3x8MjAxMzA3MzExMzIyNTkKUElEfDF8UjQzNTQzNXxSNDM1NDM1fHxCQVRJU1RFXkFOVE9JTkVefHwxOTI1MDIyODAwMDAwMHxNfHx8fHx8fHx8fHw0MzgyNjEzMDcKUFYxfDF8SXxVLTAxXjQwN15BfHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHwyMDEwMTAwNTAwMDAwMA==");

        String decodedADT = new String(valueDecoded);
        System.out.println("Decoded value is " + decodedADT);

        HapiContext context = new DefaultHapiContext();
        context.setValidationContext(new NoValidation());

        try {
            Parser p = context.getGenericParser();

            Message hapiMsg = p.parse(decodedADT);
            System.out.println("Decoded value 1 is " + hapiMsg);

            ADT_A01 adtMsg = (ADT_A01)hapiMsg;

            MSH msh = adtMsg.getMSH();
            PID pid = adtMsg.getPID();
            EVN event = adtMsg.getEVN();
            PV1 pv1 = adtMsg.getPV1();      

            System.out.println("MSH sending application "+msh.getSendingApplication().getNamespaceID().getValue());
            System.out.println("MSH sending facility "+msh.getSendingFacility().getNamespaceID().getValue());
            System.out.println("MSH receiving application "+msh.getReceivingApplication().getNamespaceID().getValue());
            System.out.println("MSH receiving facility "+msh.getReceivingFacility().getNamespaceID().getValue());
            System.out.println("MSH datetime of message "+msh.getDateTimeOfMessage().getValue());
            System.out.println("MSH message control id "+msh.getMessageControlID().getValue());
            System.out.println("MSH ADT Event "+msh.getMessageType().getMessageCode().getValue()+"-"+msh.getMessageType().getTriggerEvent().getValue());
            System.out.println();
            System.out.println("EVN recorded datetime "+event.getRecordedDateTime().getValue());
            System.out.println();
            System.out.println("PID patient id "+pid.getPatientIdentifierList(0).getIDNumber().getValue());
            System.out.println("PID patient id "+pid.getPatientID().getValue());
            System.out.println("PID last name "+pid.getPatientName(0).getFamilyName().getFn1_Surname().getValue());
            System.out.println("PID first name "+pid.getPatientName(0).getGivenName().getValue());
            System.out.println("PID dob "+pid.getDateTimeOfBirth().getValue());
            System.out.println("PID gender "+pid.getAdministrativeSex().getIdentifier().getValue());
            System.out.println();
            System.out.println("PV1 admit datetime "+pv1.getAdmitDateTime().getValue());
            System.out.println("PV1 bed status "+pv1.getBedStatus().getValueSetOID());
            System.out.println("PV1 assigned patient location bed "+pv1.getAssignedPatientLocation().getBed().getNamespaceID().getValue());
            System.out.println("PV1 assigned patient location room "+pv1.getAssignedPatientLocation().getRoom().getNamespaceID().getValue());
            System.out.println("PV1 assigned patient location floor "+pv1.getAssignedPatientLocation().getFloor().getNamespaceID().getValue());
            System.out.println("PV1 assigned patient location building "+pv1.getAssignedPatientLocation().getBuilding().getNamespaceID().getValue());
            System.out.println("PV1 prior patient location bed "+pv1.getPriorPatientLocation().getBed().getNamespaceID().getValue());
            System.out.println("PV1 prior patient location room "+pv1.getPriorPatientLocation().getRoom().getNamespaceID().getValue());
            System.out.println("PV1 prior patient location fllor "+pv1.getPriorPatientLocation().getFloor().getNamespaceID().getValue());
            System.out.println("PV1 prior patient location building "+pv1.getPriorPatientLocation().getBuilding().getNamespaceID().getValue());
            System.out.println("PV1 discharge datetime "+pv1.getDischargeDateTime().getValue());

            patientInfo.setSendingApplication(msh.getSendingApplication().getNamespaceID().getValue());
            patientInfo.setSendingFacility(msh.getSendingFacility().getNamespaceID().getValue());
            patientInfo.setPatientId(pid.getPatientIdentifierList(0).getIDNumber().getValue());
            patientInfo.setGivenName(pid.getPatientName(0).getGivenName().getValue());
            patientInfo.setAdministrativeSex(pid.getAdministrativeSex().getIdentifier().getValue());
        } catch (Exception e) {
            e.getStackTrace();
        } finally{
            try {
                context.close();
            } catch (IOException e) {
                context = null;
                e.printStackTrace();
            }
        }

        patientInfo.setPatientDetails(decodedADT);
        ADTService adtService = new ADTService();
        adtService.savePatientDetails(patientInfo);
        //System.out.println(ADTMessage.Contents);
        reply = SubProcess();
        return reply;               

    }

1 Ответ

0 голосов
/ 17 ноября 2018

Триггер в событии в MSH / 9/2 ( A01 ) не соответствует коду типа события в EVN / 1 ( P03 ). Структура сообщения в MSH / 9/3 отсутствует.

...