Search in sources :

Example 1 with COCTMT030007UVPerson

use of net.ihe.gazelle.hl7v3.coctmt030007UV.COCTMT030007UVPerson in project MobileAccessGateway by i4mi.

the class Iti78ResponseConverter method translateToFhir.

public List<Patient> translateToFhir(byte[] input, Map<String, Object> parameters) {
    try {
        // FIX for xmlns:xmlns
        String content = new String(input);
        content = content.replace("xmlns:xmlns", "xmlns:xxxxx");
        List<Patient> response = new ArrayList<Patient>();
        PRPAIN201306UV02Type msg = HL7V3Transformer.unmarshallMessage(PRPAIN201306UV02Type.class, new ByteArrayInputStream(content.getBytes()));
        PRPAIN201306UV02MFMIMT700711UV01ControlActProcess controlAct = msg.getControlActProcess();
        List<MCCIMT000300UV01Acknowledgement> acks = msg.getAcknowledgement();
        String errtext = "";
        for (MCCIMT000300UV01Acknowledgement ack : acks) {
            for (MCCIMT000300UV01AcknowledgementDetail ackDetail : ack.getAcknowledgementDetail()) {
                if (ackDetail.getText() != null)
                    errtext += toText(ackDetail.getText());
            }
        }
        // OK NF AE
        String queryResponseCode = controlAct.getQueryAck().getQueryResponseCode().getCode();
        if ("NF".equals(queryResponseCode)) {
            throw new ResourceNotFoundException("sourceIdentifier Patient Identifier not found", error(IssueType.NOTFOUND, errtext.length() > 0 ? errtext : "sourceIdentifier Patient Identifier not found"));
        }
        if ("AE".equals(queryResponseCode)) {
            throw new InvalidRequestException("sourceIdentifier Assigning Authority not found", error(IssueType.INVALID, errtext.length() > 0 ? errtext : "sourceIdentifier Assigning Authority not found"));
        }
        List<PRPAIN201306UV02MFMIMT700711UV01Subject1> subjects = controlAct.getSubject();
        for (PRPAIN201306UV02MFMIMT700711UV01Subject1 subject : subjects) {
            PRPAIN201306UV02MFMIMT700711UV01RegistrationEvent registrationEvent = subject.getRegistrationEvent();
            PRPAIN201306UV02MFMIMT700711UV01Subject2 subject1 = registrationEvent.getSubject1();
            PRPAMT201310UV02Patient patient = subject1.getPatient();
            PRPAMT201310UV02Person patientPerson = patient.getPatientPerson();
            if (patient.getId().isEmpty())
                continue;
            Patient result = new Patient();
            boolean idadded = false;
            for (II patientId : patient.getId()) {
                result.addIdentifier().setSystem(getSystem(patientId.getRoot())).setValue(patientId.getExtension());
                if (!idadded) {
                    result.setId(patientRefCreator.createPatientId(patientId.getRoot(), patientId.getExtension()));
                    idadded = true;
                }
            }
            for (PRPAMT201310UV02OtherIDs otherIds : patient.getPatientPerson().getAsOtherIDs()) {
                for (II patientId : otherIds.getId()) {
                    result.addIdentifier().setSystem(getSystem(patientId.getRoot())).setValue(patientId.getExtension());
                }
            }
            CS statusCode = patient.getStatusCode();
            if (statusCode != null && "active".equals(statusCode.getCode()))
                result.setActive(true);
            for (PN name : patientPerson.getName()) {
                HumanName humanName = new HumanName();
                for (EnFamily family : name.getFamily()) {
                    if ("BR".equals(family.getQualifier())) {
                        humanName.setUse(NameUse.MAIDEN);
                    }
                    humanName.setFamily(val(family));
                }
                for (EnGiven given : name.getGiven()) {
                    withQualifier(given, humanName.addGivenElement());
                }
                for (EnPrefix prefix : name.getPrefix()) {
                    withQualifier(prefix, humanName.addPrefixElement());
                }
                for (EnSuffix suffix : name.getSuffix()) {
                    withQualifier(suffix, humanName.addSuffixElement());
                }
                if (name.getValidTime() != null)
                    humanName.setPeriod(transform(name.getValidTime()));
                result.addName(humanName);
            }
            CE gender = patientPerson.getAdministrativeGenderCode();
            if (gender != null) {
                switch(gender.getCode()) {
                    case "M":
                        result.setGender(AdministrativeGender.MALE);
                        break;
                    case "F":
                        result.setGender(AdministrativeGender.FEMALE);
                        break;
                    case "A":
                        result.setGender(AdministrativeGender.OTHER);
                        break;
                    case "U":
                        result.setGender(AdministrativeGender.UNKNOWN);
                        break;
                }
            }
            TS birthTime = patientPerson.getBirthTime();
            if (birthTime != null) {
                result.setBirthDateElement(transform(birthTime));
            }
            for (AD ad : patientPerson.getAddr()) {
                result.addAddress(transform(ad));
            }
            for (TEL tel : patientPerson.getTelecom()) {
                result.addTelecom(transform(tel));
            }
            for (PRPAMT201310UV02LanguageCommunication lang : patientPerson.getLanguageCommunication()) {
                CE langCode = lang.getLanguageCode();
                PatientCommunicationComponent pcc = new PatientCommunicationComponent();
                pcc.setLanguage(transform(langCode));
                BL preferred = lang.getPreferenceInd();
                if (preferred != null && preferred.getValue().booleanValue())
                    pcc.setPreferred(true);
                result.addCommunication(pcc);
            }
            TS deceasedTime = patientPerson.getDeceasedTime();
            if (deceasedTime != null)
                result.setDeceased(transform(deceasedTime));
            else {
                BL deceased = patientPerson.getDeceasedInd();
                if (deceased != null)
                    result.setDeceased(new BooleanType(deceased.getValue().booleanValue()));
            }
            INT multiBirthOrder = patientPerson.getMultipleBirthOrderNumber();
            if (multiBirthOrder != null) {
                result.setMultipleBirth(new IntegerType(multiBirthOrder.getValue()));
            } else {
                BL multipleBirth = patientPerson.getMultipleBirthInd();
                if (multipleBirth != null)
                    result.setMultipleBirth(new BooleanType(multipleBirth.getValue().booleanValue()));
            }
            CE maritalStatus = patientPerson.getMaritalStatusCode();
            result.setMaritalStatus(transform(maritalStatus));
            for (PRPAMT201310UV02PersonalRelationship relationShip : patientPerson.getPersonalRelationship()) {
                CE code = relationShip.getCode();
                if (code != null && "MTH".equals(code.getCode()) && "2.16.840.1.113883.12.63".equals(code.getCodeSystem())) {
                    COCTMT030007UVPerson holder = relationShip.getRelationshipHolder1();
                    if (holder != null && !holder.getName().isEmpty()) {
                        EN name = holder.getName().get(0);
                        if (!name.getFamily().isEmpty()) {
                            String familyName = val(name.getFamily());
                            result.addExtension("http://hl7.org/fhir/StructureDefinition/patient-mothersMaidenName", new StringType(familyName));
                        }
                    }
                }
            }
            response.add(result);
        }
        return response;
    } catch (JAXBException e) {
        e.printStackTrace();
        throw new InvalidRequestException("failed parsing response");
    }
}
Also used : StringType(org.hl7.fhir.r4.model.StringType) ArrayList(java.util.ArrayList) PRPAIN201306UV02MFMIMT700711UV01Subject2(net.ihe.gazelle.hl7v3.prpain201306UV02.PRPAIN201306UV02MFMIMT700711UV01Subject2) PRPAIN201306UV02MFMIMT700711UV01Subject1(net.ihe.gazelle.hl7v3.prpain201306UV02.PRPAIN201306UV02MFMIMT700711UV01Subject1) BL(net.ihe.gazelle.hl7v3.datatypes.BL) MCCIMT000300UV01Acknowledgement(net.ihe.gazelle.hl7v3.mccimt000300UV01.MCCIMT000300UV01Acknowledgement) PRPAMT201310UV02Patient(net.ihe.gazelle.hl7v3.prpamt201310UV02.PRPAMT201310UV02Patient) INT(net.ihe.gazelle.hl7v3.datatypes.INT) HumanName(org.hl7.fhir.r4.model.HumanName) COCTMT030007UVPerson(net.ihe.gazelle.hl7v3.coctmt030007UV.COCTMT030007UVPerson) PatientCommunicationComponent(org.hl7.fhir.r4.model.Patient.PatientCommunicationComponent) PRPAMT201310UV02OtherIDs(net.ihe.gazelle.hl7v3.prpamt201310UV02.PRPAMT201310UV02OtherIDs) EnFamily(net.ihe.gazelle.hl7v3.datatypes.EnFamily) PRPAMT201310UV02Person(net.ihe.gazelle.hl7v3.prpamt201310UV02.PRPAMT201310UV02Person) InvalidRequestException(ca.uhn.fhir.rest.server.exceptions.InvalidRequestException) EnSuffix(net.ihe.gazelle.hl7v3.datatypes.EnSuffix) ResourceNotFoundException(ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException) PRPAIN201306UV02MFMIMT700711UV01RegistrationEvent(net.ihe.gazelle.hl7v3.prpain201306UV02.PRPAIN201306UV02MFMIMT700711UV01RegistrationEvent) PRPAIN201306UV02Type(net.ihe.gazelle.hl7v3.prpain201306UV02.PRPAIN201306UV02Type) II(net.ihe.gazelle.hl7v3.datatypes.II) PRPAIN201306UV02MFMIMT700711UV01ControlActProcess(net.ihe.gazelle.hl7v3.prpain201306UV02.PRPAIN201306UV02MFMIMT700711UV01ControlActProcess) CE(net.ihe.gazelle.hl7v3.datatypes.CE) EnPrefix(net.ihe.gazelle.hl7v3.datatypes.EnPrefix) AD(net.ihe.gazelle.hl7v3.datatypes.AD) JAXBException(javax.xml.bind.JAXBException) BooleanType(org.hl7.fhir.r4.model.BooleanType) Patient(org.hl7.fhir.r4.model.Patient) PRPAMT201310UV02Patient(net.ihe.gazelle.hl7v3.prpamt201310UV02.PRPAMT201310UV02Patient) EnGiven(net.ihe.gazelle.hl7v3.datatypes.EnGiven) EN(net.ihe.gazelle.hl7v3.datatypes.EN) CS(net.ihe.gazelle.hl7v3.datatypes.CS) IntegerType(org.hl7.fhir.r4.model.IntegerType) PRPAMT201310UV02PersonalRelationship(net.ihe.gazelle.hl7v3.prpamt201310UV02.PRPAMT201310UV02PersonalRelationship) ByteArrayInputStream(java.io.ByteArrayInputStream) TEL(net.ihe.gazelle.hl7v3.datatypes.TEL) MCCIMT000300UV01AcknowledgementDetail(net.ihe.gazelle.hl7v3.mccimt000300UV01.MCCIMT000300UV01AcknowledgementDetail) PRPAMT201310UV02LanguageCommunication(net.ihe.gazelle.hl7v3.prpamt201310UV02.PRPAMT201310UV02LanguageCommunication) PN(net.ihe.gazelle.hl7v3.datatypes.PN) IVXBTS(net.ihe.gazelle.hl7v3.datatypes.IVXBTS) IVLTS(net.ihe.gazelle.hl7v3.datatypes.IVLTS) TS(net.ihe.gazelle.hl7v3.datatypes.TS)

Aggregations

InvalidRequestException (ca.uhn.fhir.rest.server.exceptions.InvalidRequestException)1 ResourceNotFoundException (ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 ArrayList (java.util.ArrayList)1 JAXBException (javax.xml.bind.JAXBException)1 COCTMT030007UVPerson (net.ihe.gazelle.hl7v3.coctmt030007UV.COCTMT030007UVPerson)1 AD (net.ihe.gazelle.hl7v3.datatypes.AD)1 BL (net.ihe.gazelle.hl7v3.datatypes.BL)1 CE (net.ihe.gazelle.hl7v3.datatypes.CE)1 CS (net.ihe.gazelle.hl7v3.datatypes.CS)1 EN (net.ihe.gazelle.hl7v3.datatypes.EN)1 EnFamily (net.ihe.gazelle.hl7v3.datatypes.EnFamily)1 EnGiven (net.ihe.gazelle.hl7v3.datatypes.EnGiven)1 EnPrefix (net.ihe.gazelle.hl7v3.datatypes.EnPrefix)1 EnSuffix (net.ihe.gazelle.hl7v3.datatypes.EnSuffix)1 II (net.ihe.gazelle.hl7v3.datatypes.II)1 INT (net.ihe.gazelle.hl7v3.datatypes.INT)1 IVLTS (net.ihe.gazelle.hl7v3.datatypes.IVLTS)1 IVXBTS (net.ihe.gazelle.hl7v3.datatypes.IVXBTS)1 PN (net.ihe.gazelle.hl7v3.datatypes.PN)1