Example usage for org.apache.commons.lang3.math NumberUtils createDouble

List of usage examples for org.apache.commons.lang3.math NumberUtils createDouble

Introduction

In this page you can find the example usage for org.apache.commons.lang3.math NumberUtils createDouble.

Prototype

public static Double createDouble(final String str) 

Source Link

Document

Convert a String to a Double.

Returns null if the string is null.

Usage

From source file:com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.JsonRenderedValueConverter.java

@Override
public Object convertRenderedValue(String rendered) {
    if (NumberUtils.isNumber(rendered)) {
        if (rendered.contains(".")) {
            return NumberUtils.createDouble(rendered);
        }//from w ww.jav a 2s.co m
        try {
            return NumberUtils.createInteger(rendered);
        } catch (NumberFormatException ignored) {
            return NumberUtils.createLong(rendered);
        }
    } else if (rendered.equals("true") || rendered.equals("false")) {
        return Boolean.parseBoolean(rendered);
    } else if (rendered.startsWith("{{") || (!rendered.startsWith("{") && !rendered.startsWith("["))) {
        return rendered;
    }

    JsonNode node;
    try {
        node = pipelineTemplateObjectMapper.readTree(rendered);
    } catch (IOException e) {
        throw new TemplateRenderException("template produced invalid json", e);
    }

    try {
        if (node.isArray()) {
            return pipelineTemplateObjectMapper.readValue(rendered, Collection.class);
        }
        if (node.isObject()) {
            return pipelineTemplateObjectMapper.readValue(rendered, HashMap.class);
        }
        if (node.isBoolean()) {
            return Boolean.parseBoolean(node.asText());
        }
        if (node.isDouble()) {
            return node.doubleValue();
        }
        if (node.canConvertToInt()) {
            return node.intValue();
        }
        if (node.canConvertToLong()) {
            return node.longValue();
        }
        if (node.isTextual()) {
            return node.textValue();
        }
        if (node.isNull()) {
            return null;
        }
    } catch (IOException e) {
        throw new TemplateRenderException("template produced invalid json", e);
    }

    throw new TemplateRenderException("unknown rendered object type");
}

From source file:com.glluch.profilesparser.ICTProfile.java

/**
 * Transform the counts of the terms as in integers in a counts as doubles. 
 * @param pterms The map of terms to counts.
 *///from w w  w  .  j  a v  a  2s . c o  m
public void setPtermsI2D(HashMap<String, Integer> pterms) {
    Set keys = pterms.keySet();
    for (Object key0 : keys) {
        String key = (String) key0;
        this.pterms.put(key, NumberUtils.createDouble(pterms.get(key).toString()));

    }

}

From source file:com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.HandlebarsRenderer.java

@Override
public Object renderGraph(String template, RenderContext context) {
    String rendered = render(template, context);

    // Short-circuit primitive values.
    // TODO rz - having trouble getting jackson to parse primitive values outside of unit tests
    if (NumberUtils.isNumber(rendered)) {
        if (rendered.contains(".")) {
            return NumberUtils.createDouble(rendered);
        }//  w ww  .j  av  a2s.  c o m
        try {
            return NumberUtils.createInteger(rendered);
        } catch (NumberFormatException ignored) {
            return NumberUtils.createLong(rendered);
        }
    } else if (rendered.equals("true") || rendered.equals("false")) {
        return Boolean.parseBoolean(rendered);
    } else if (!rendered.startsWith("{") && !rendered.startsWith("[")) {
        return rendered;
    }

    JsonNode node;
    try {
        node = pipelineTemplateObjectMapper.readTree(rendered);
    } catch (IOException e) {
        throw new TemplateRenderException("template produced invalid json", e);
    }

    try {
        if (node.isArray()) {
            return pipelineTemplateObjectMapper.readValue(rendered, Collection.class);
        }
        if (node.isObject()) {
            return pipelineTemplateObjectMapper.readValue(rendered, HashMap.class);
        }
        if (node.isBoolean()) {
            return Boolean.parseBoolean(node.asText());
        }
        if (node.isDouble()) {
            return node.doubleValue();
        }
        if (node.canConvertToInt()) {
            return node.intValue();
        }
        if (node.canConvertToLong()) {
            return node.longValue();
        }
        if (node.isTextual()) {
            return node.textValue();
        }
        if (node.isNull()) {
            return null;
        }
    } catch (IOException e) {
        throw new TemplateRenderException("template produced invalid json", e);
    }

    throw new TemplateRenderException("unknown rendered object type");
}

From source file:com.esri.geoportal.harvester.agp.AgpOutputBroker.java

private Double[] extractEnvelope(String sBbox) {
    Double[] envelope = null;//from   w w w  .  j  a v a2  s.  c  o m
    if (sBbox != null) {
        String[] corners = sBbox.split(",");
        if (corners != null && corners.length == 2) {
            String[] minXminY = corners[0].split(" ");
            String[] maxXmaxY = corners[1].split(" ");
            if (minXminY != null && minXminY.length == 2 && maxXmaxY != null && maxXmaxY.length == 2) {
                minXminY[0] = StringUtils.trimToEmpty(minXminY[0]);
                minXminY[1] = StringUtils.trimToEmpty(minXminY[1]);
                maxXmaxY[0] = StringUtils.trimToEmpty(maxXmaxY[0]);
                maxXmaxY[1] = StringUtils.trimToEmpty(maxXmaxY[1]);

                Double minX = NumberUtils.isNumber(minXminY[0]) ? NumberUtils.createDouble(minXminY[0]) : null;
                Double minY = NumberUtils.isNumber(minXminY[1]) ? NumberUtils.createDouble(minXminY[1]) : null;
                Double maxX = NumberUtils.isNumber(maxXmaxY[0]) ? NumberUtils.createDouble(maxXmaxY[0]) : null;
                Double maxY = NumberUtils.isNumber(maxXmaxY[1]) ? NumberUtils.createDouble(maxXmaxY[1]) : null;

                if (minX != null && minY != null && maxX != null && maxY != null) {
                    envelope = new Double[] { minX, minY, maxX, maxY };
                }
            }
        }
    }
    return envelope;
}

From source file:io.cloudslang.content.utils.NumberUtilities.java

/**
 * Given an double string, it checks if it's a valid double (based on apaches NumberUtils.createDouble)
 *
 * @param doubleStr the double string to check
 * @return true if it's valid, otherwise false
 *///  w  w w.ja v  a2s  .  co  m
public static boolean isValidDouble(@Nullable final String doubleStr) {
    if (StringUtils.isBlank(doubleStr)) {
        return false;
    }
    final String stripedDouble = StringUtils.strip(doubleStr);
    try {
        NumberUtils.createDouble(stripedDouble);
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

From source file:io.cloudslang.content.utils.NumberUtilities.java

/**
 * Given an double string if it's a valid double (see isValidDouble) it converts it into an double otherwise it throws an exception
 *
 * @param doubleStr the double to convert
 * @return the double value of the doubleStr
 * @throws IllegalArgumentException if the passed double string is not a valid double
 *///  w  w  w .j  a v a  2  s  .c om
public static double toDouble(@Nullable final String doubleStr) {
    if (!isValidDouble(doubleStr)) {
        throw new IllegalArgumentException(
                doubleStr + ExceptionValues.EXCEPTION_DELIMITER + ExceptionValues.INVALID_DOUBLE_VALUE);
    }
    final String stripedDouble = StringUtils.strip(doubleStr);
    return NumberUtils.createDouble(stripedDouble);
}

From source file:com.dominion.salud.mpr.ws.rest.MPRMessagesRESTHandlerService.java

@ResponseBody
@RequestMapping(value = "/receiveMessages", method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<String> receiveMessages(@RequestBody(required = true) String message) {
    logger.info("RECIBIENDO MENSAJE ENTRANTE");
    logger.info(message);//from ww w.j a  va 2 s .co m

    ACK ack = null;
    AbstractParser parser = null;
    Message hl7message = null;
    String cod_centro = "";

    try {
        message = StringUtils.replace(message, "\n", "\r");
        if (StringUtils.isBlank(message)) { //Validaciones previas
            throw new HL7Exception("No se ha indicado un mensaje entrante: [" + message + "]");
        }

        //Deternima el formato del mensaje
        logger.debug("     Determinando el formato del mensaje y el parseador a emplear");
        if (EncodingDetector.isEr7Encoded(message)) {
            parser = new ER7Parser();
            logger.debug("          Formato del mensaje ER7 y parseador [" + parser.getClass() + "] aceptados");
        } else {
            throw new HL7Exception("Formato de mensaje no reconocido. El formato soportado es ER7");
        }
        logger.debug("     Formato del mensaje y parseador determinados correctamente");

        //Parseado del mensaje
        logger.debug("     Parseando mensaje [" + parser.getClass() + "]");
        hl7message = parser.parse(message);
        logger.debug("     Mensaje parseado correctamente [" + hl7message.getClass() + "]");

        //Validaciones del MPR
        logger.debug("     Validando el mensaje");
        MSH msh = (MSH) hl7message.get("MSH");
        if (StringUtils.isBlank(msh.getMessageControlID().getValue())) { //MSH.10
            throw new HL7Exception(
                    "No se ha indicado el identificador de mensaje (MSH-10: Message Control ID)");
        }

        if (hl7message.getClass() == ZDS_O13.class) { //DISPENSACIONES
            ZDS_O13 zds_o13 = (ZDS_O13) hl7message;

            PID pid = zds_o13.getPATIENT().getPID();
            PV1 pv1 = zds_o13.getPATIENT().getPATIENT_VISIT().getPV1();

            Integer nhc = null;
            String cipa = null;
            for (int i = 0; i < pid.getPatientIdentifierList().length; i++) { // PID.3 - PatientIdentifierList
                if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "PI")) {
                    if (StringUtils.isNotBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        try {
                            nhc = NumberUtils
                                    .createInteger(pid.getPatientIdentifierList(i).getIDNumber().getValue());
                        } catch (Exception e) {
                            logger.warn("El NHC no es correcto (PID-3.1: Patient Identifier List [PI])");
                        }
                    }
                } else if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "CIPA")) {
                    if (StringUtils.isNotBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        cipa = pid.getPatientIdentifierList(i).getIDNumber().getValue();
                    } else {
                        logger.warn("El CIPA no es correcto (PID-3.1: Patient Identifier List [CIPA])");
                    }
                }
            }

            if (nhc == null && StringUtils.isBlank(cipa)) {
                throw new HL7Exception(
                        "No se ha indicado el NHC (PID-3.1: Patient Identifier List [PI]) ni el CIPA (PID-3.1: Patient Identifier List [CIPA])");
            }

            //PV1.2 - Clase de Paciente
            if (StringUtils.isNotBlank(pv1.getPatientClass().getValue())) { //PV1.2 - Clase de Paciente
                if (StringUtils.equals(pv1.getPatientClass().getValue(), "O")) { //Outpatient
                    if (StringUtils.isBlank(pv1.getPatientType().getValue())) { //PV1.18 - Tipo de Paciente
                        throw new HL7Exception("No se ha indicado el tipo de paciente (PV1-18: Patient Type)");
                    }
                }
            } else {
                throw new HL7Exception("No se ha indicado la clase de paciente (PV1-2: Patient Class)");
            }

            //PV1.19.1 - Codigo de Episodio
            if (StringUtils.isBlank(pv1.getVisitNumber().getIDNumber().getValue())) {
                throw new HL7Exception("No se ha indicado el episodio del paciente (PV1.19: Visit Number)");
            }

            List<ZDS_O13_ORDER> zds_o13_orders = zds_o13.getORDERAll();
            for (ZDS_O13_ORDER zds_o13_order : zds_o13_orders) {
                ORC orc = zds_o13_order.getORC();
                TQ1 tq1 = zds_o13_order.getTIMING().getTQ1();
                RXD rxd = zds_o13_order.getRXD();
                Z01 z01 = zds_o13_order.getZ01();

                //ORC.21.10 - OrganizationIdentifier
                if (StringUtils
                        .isBlank(orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue())) { //ORC.21.10
                    throw new HL7Exception(
                            "No se ha indicado el centro de origen (ORC-21.10: OrganizationIdentifier)");
                } else {
                    cod_centro = orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue();
                }

                //ORC.2.1 - Codigo de Prescripcion
                if (StringUtils.isBlank(orc.getPlacerOrderNumber().getEntityIdentifier().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado el identificador de la prescripcion (ORC-2.1: Placer Order Number)");
                }

                //ORC.3.1 - Codigo de Dispensacion
                if (StringUtils.isBlank(orc.getFillerOrderNumber().getEntityIdentifier().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado el identificador de la dispensacion (ORC-3.1: Filler Order Number)");
                }

                //ORC.10 - Medico Prescriptor
                if (StringUtils.isBlank(orc.getEnteredBy(0).getIDNumber().getValue())) { //ORC.10.1
                    throw new HL7Exception(
                            "No se ha indicado el codigo del medico prescriptor (ORC-10.1: Entered By)");
                }
                if (StringUtils.isBlank(orc.getEnteredBy(0).getGivenName().getValue())) { //ORC.10.3
                    throw new HL7Exception(
                            "No se ha indicado el nombre del medico prescriptor (ORC-10.3: Entered By)");
                }
                if (StringUtils.isBlank(orc.getEnteredBy(0).getFamilyName().getSurname().getValue())) { //ORC.10.2.1
                    throw new HL7Exception(
                            "No se ha indicado el apellido del medico prescriptor (ORC-10.2.1: Entered By)");
                }

                //RXD.2.1 - DispenseGiveCode (Codigo Nacional de la Marca)
                if (StringUtils.isBlank(rxd.getDispenseGiveCode().getIdentifier().getValue())) { //RXD.2.1
                    throw new HL7Exception(
                            "No se ha indicado el codigo nacional de la marca (RXD-2.1: DispenseGiveCode)");
                }
                //RXD.2.2 - DispenseGiveCode (Descripcion de la Marca)
                if (StringUtils.isBlank(rxd.getDispenseGiveCode().getText().getValue())) { //RXD.2.2
                    throw new HL7Exception(
                            "No se ha indicado la descripcion de la marca (RXD-2.2: DispenseGiveCode)");
                }

                //RXD.3 - Fecha de la Dispensacion
                if (StringUtils.isBlank(rxd.getDateTimeDispensed().getTime().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado la fecha de la dispensacion (RXD-3: Date/Time Dispensed)");
                }

                //RXD.4 - ActualDispenseAmount (Unidades Dispensadas en Forma Farmaceutica)
                if (StringUtils.isNotBlank(rxd.getActualDispenseAmount().getValue())) { //RXD.4
                    try {
                        NumberUtils.createDouble(rxd.getActualDispenseAmount().getValue());
                    } catch (Exception e) {
                        throw new HL7Exception("Las unidades dispensadas no son correctas ["
                                + rxd.getActualDispenseAmount().getValue() + "] (RXD-4: ActualDispenseAmount)");
                    }
                } else {
                    throw new HL7Exception(
                            "No se han indicado las unidades dispensadas (RXD-4: ActualDispenseAmount)");
                }

                //TQ1.7 - Fecha de Inicio de la Prescripcion
                if (StringUtils.isBlank(tq1.getStartDateTime().getTime().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado la fecha de inicio de la prescripcion (TQ1-7: Start Date/Time)");
                }

                //Z01.9 - Dosis Prescrita en Unidad de Medida
                if (StringUtils.isNotBlank(z01.getDosisPrescrita().getValue())) { //Z01.9
                    try {
                        NumberUtils.createDouble(z01.getDosisPrescrita().getValue());
                    } catch (Exception e) {
                        throw new HL7Exception(
                                "La dosis prescrita no es correcta [" + z01.getDosisPrescrita().getValue()
                                        + "] (Z01-9: Dosis Prescrita en Unidad de Medida)");
                    }
                } else {
                    throw new HL7Exception(
                            "No se ha indicado dosis prescrita (Z01-9: Dosis Prescrita en Unidad de Medida)");
                }
            }
        } else if (hl7message.getClass() == ZMP_O09.class) { //PRESCRIPCIONES (razon fin)
            ZMP_O09 zmp_o09 = (ZMP_O09) hl7message;

            PID pid = zmp_o09.getPATIENT().getPID();
            PV1 pv1 = zmp_o09.getPATIENT().getPATIENT_VISIT().getPV1();

            //PID.3 - Identificadores del paciente (NHC) y (CIPA)
            Integer nhc = null;
            String cipa = null;
            for (int i = 0; i < pid.getPatientIdentifierList().length; i++) { // PID.3 - PatientIdentifierList
                if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "PI")) {
                    if (StringUtils.isNotBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        try {
                            nhc = NumberUtils
                                    .createInteger(pid.getPatientIdentifierList(i).getIDNumber().getValue());
                        } catch (Exception e) {
                            throw new HL7Exception("El NHC no es correcto (PID-3.1: Patient Identifier List)");
                        }
                    } else {
                        throw new HL7Exception("No se ha indicado el NHC (PID-3.1: Patient Identifier List)");
                    }
                } else if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "CIPA")) {
                    if (StringUtils.isBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        throw new HL7Exception("El CIPA no es correcto (PID-3.1: Patient Identifier List)");
                    } else {
                        cipa = pid.getPatientIdentifierList(i).getIDNumber().getValue();
                    }
                }
            }
            if (nhc == null) {
                throw new HL7Exception("No se ha indicado el NHC (PID-3.1: Patient Identifier List)");
            }
            if (StringUtils.isBlank(cipa)) {
                throw new HL7Exception("No se ha indicado el CIPA (PID-3.1: Patient Identifier List)");
            }

            //PV1.2 - Clase de Paciente
            if (StringUtils.isNotBlank(pv1.getPatientClass().getValue())) { //PV1.2 - Clase de Paciente
                if (StringUtils.equals(pv1.getPatientClass().getValue(), "O")) { //Outpatient
                    if (StringUtils.isBlank(pv1.getPatientType().getValue())) { //PV1.18 - Tipo de Paciente
                        throw new HL7Exception("No se ha indicado el tipo de paciente (PV1-18: Patient Type)");
                    }
                }
            } else {
                throw new HL7Exception("No se ha indicado la clase de paciente (PV1-2: Patient Class)");
            }

            //PV1.19.1 - Codigo de Episodio
            if (StringUtils.isBlank(pv1.getVisitNumber().getIDNumber().getValue())) {
                throw new HL7Exception("No se ha indicado el episodio del paciente (PV1.19: Visit Number)");
            }

            List<ZMP_O09_ORDER> zmp_o09_orders = zmp_o09.getORDERAll();
            for (ZMP_O09_ORDER zmp_o09_order : zmp_o09_orders) {
                ORC orc = zmp_o09_order.getORC();
                Z01 z01 = zmp_o09_order.getZ01();
                TQ1 tq1 = zmp_o09_order.getTIMING().getTQ1();
                RXC rxc = zmp_o09_order.getCOMPONENT().getRXC();

                //ORC.21.10 - OrganizationIdentifier
                if (StringUtils
                        .isBlank(orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue())) { //ORC.21.10
                    throw new HL7Exception(
                            "No se ha indicado el centro de origen (ORC-21.10: OrganizationIdentifier)");
                } else {
                    cod_centro = orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue();
                }

                //ORC.2.1 - Codigo de Prescripcion
                if (StringUtils.isBlank(orc.getPlacerOrderNumber().getEntityIdentifier().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado el identificador de la prescripcion (ORC-2.1: Placer Order Number)");
                }

                //ORC.10 - Medico Prescriptor
                if (StringUtils.isBlank(orc.getEnteredBy(0).getIDNumber().getValue())) { //ORC.10.1
                    throw new HL7Exception(
                            "No se ha indicado el codigo del medico prescriptor (ORC-10.1: Entered By)");
                }
                if (StringUtils.isBlank(orc.getEnteredBy(0).getGivenName().getValue())) { //ORC.10.3
                    throw new HL7Exception(
                            "No se ha indicado el nombre del medico prescriptor (ORC-10.3: Entered By)");
                }
                if (StringUtils.isBlank(orc.getEnteredBy(0).getFamilyName().getSurname().getValue())) { //ORC.10.2.1
                    throw new HL7Exception(
                            "No se ha indicado el apellido del medico prescriptor (ORC-10.2.1: Entered By)");
                }

                //RXC.2.1 - DispenseGiveCode (Codigo Nacional de la Marca)
                if (StringUtils.isBlank(rxc.getComponentCode().getIdentifier().getValue())) { //RXC.2.1
                    throw new HL7Exception(
                            "No se ha indicado el codigo nacional de la marca (RXC-2.1: ComponentCode)");
                }
                //RXC.2.2 - DispenseGiveCode (Descripcion de la Marca)
                if (StringUtils.isBlank(rxc.getComponentCode().getText().getValue())) { //RXC.2.2
                    throw new HL7Exception("No se ha indicado la descripcion de la marca (RXC-2.2: Text)");
                }

                //TQ1.7 - Fecha de Inicio de la Prescripcion
                if (StringUtils.isBlank(tq1.getStartDateTime().getTime().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado la fecha de inicio de la prescripcion (TQ1-7: Start date/time)");
                }
                //TQ1.8 - Fecha de Fin de la Prescripcion
                if (StringUtils.isBlank(tq1.getEndDateTime().getTime().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado la fecha de fin de la prescripcion (TQ1-8: End date/time)");
                }

                //Z01.9 - Dosis Prescrita en Unidad de Medida
                if (StringUtils.isNotBlank(z01.getDosisPrescrita().getValue())) { //Z01.9
                    try {
                        NumberUtils.createDouble(z01.getDosisPrescrita().getValue());
                    } catch (Exception e) {
                        throw new HL7Exception(
                                "La dosis prescrita no es correcta [" + z01.getDosisPrescrita().getValue()
                                        + "] (Z01-9: Dosis Prescrita en Unidad de Medida)");
                    }
                } else {
                    throw new HL7Exception(
                            "No se ha indicado dosis prescrita (Z01-9: Dosis Prescrita en Unidad de Medida)");
                }
            }
        } else if (hl7message.getClass() == ZFN_M13.class) { //RESPUESTAS DE EVALUACIONES
            ZFN_M13 zfn_m13 = (ZFN_M13) hl7message;

            ZFA zfa = zfn_m13.getACUERDO().getZFA();

            //ZFA.1.1 - MasterIdentifier
            if (StringUtils.isBlank(zfa.getMasterIdentifier().getAlternateIdentifier().getValue())) { //ZFA.1.1
                throw new HL7Exception("No se ha indicado el codigo de acuerdo (ZFA.1.1: AlternateIdentifier)");
            }

            //ZFA.2.1 - Master file application identifier
            if (StringUtils.isBlank(zfa.getMasterFileApplicationIdentifier().getNamespaceID().getValue())) { //ZFA.2.1
                throw new HL7Exception("No se ha indicado el centro de origen (ZFA.2.1: NamespaceID)");
            } else {
                cod_centro = zfa.getMasterFileApplicationIdentifier().getNamespaceID().getValue();
            }
        } else if (hl7message.getClass() == RAS_O17.class) { //RESPUESTAS DE EVALUACIONES
            RAS_O17 ras_o17 = (RAS_O17) hl7message;

            PID pid = ras_o17.getPATIENT().getPID();
            PV1 pv1 = ras_o17.getPATIENT().getPATIENT_VISIT().getPV1();

            //PID.3 - Identificadores del paciente (NHC) y (CIPA)
            Integer nhc = null;
            String cipa = null;
            for (int i = 0; i < pid.getPatientIdentifierList().length; i++) { // PID.3 - PatientIdentifierList
                if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "PI")) {
                    if (StringUtils.isNotBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        try {
                            nhc = NumberUtils
                                    .createInteger(pid.getPatientIdentifierList(i).getIDNumber().getValue());
                        } catch (Exception e) {
                            throw new HL7Exception("El NHC no es correcto (PID-3.1: Patient Identifier List)");
                        }
                    } else {
                        throw new HL7Exception("No se ha indicado el NHC (PID-3.1: Patient Identifier List)");
                    }
                } else if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "CIPA")) {
                    if (StringUtils.isBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        throw new HL7Exception("El CIPA no es correcto (PID-3.1: Patient Identifier List)");
                    } else {
                        cipa = pid.getPatientIdentifierList(i).getIDNumber().getValue();
                    }
                }
            }
            if (nhc == null) {
                throw new HL7Exception("No se ha indicado el NHC (PID-3.1: Patient Identifier List)");
            }
            if (StringUtils.isBlank(cipa)) {
                throw new HL7Exception("No se ha indicado el CIPA (PID-3.1: Patient Identifier List)");
            }

            //PV1.2 - Clase de Paciente
            if (StringUtils.isNotBlank(pv1.getPatientClass().getValue())) { //PV1.2 - Clase de Paciente
                if (StringUtils.equals(pv1.getPatientClass().getValue(), "O")) { //Outpatient
                    if (StringUtils.isBlank(pv1.getPatientType().getValue())) { //PV1.18 - Tipo de Paciente
                        throw new HL7Exception("No se ha indicado el tipo de paciente (PV1-18: Patient Type)");
                    }
                }
            } else {
                throw new HL7Exception("No se ha indicado la clase de paciente (PV1-2: Patient Class)");
            }

            //PV1.19.1 - Codigo de Episodio
            if (StringUtils.isBlank(pv1.getVisitNumber().getIDNumber().getValue())) {
                throw new HL7Exception("No se ha indicado el episodio del paciente (PV1.19: Visit Number)");
            }

            List<RAS_O17_ORDER> ras_o17_orders = ras_o17.getORDERAll();
            for (RAS_O17_ORDER ras_o17_order : ras_o17_orders) {
                ORC orc = ras_o17_order.getORC();
                TQ1 tq1 = ras_o17_order.getTIMING().getTQ1();
                RXO rxo = ras_o17_order.getORDER_DETAIL().getRXO();
                RXA rxa = ras_o17_order.getADMINISTRATION().getRXA();

                //ORC.21.10 - OrganizationIdentifier
                if (StringUtils
                        .isBlank(orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue())) { //ORC.21.10
                    throw new HL7Exception(
                            "No se ha indicado el centro de origen (ORC-21.10: OrganizationIdentifier)");
                } else {
                    cod_centro = orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue();
                }

                //ORC.2.1 - Codigo de Prescripcion
                if (StringUtils.isBlank(orc.getPlacerOrderNumber().getEntityIdentifier().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado el identificador de la prescripcion (ORC-2.1: Placer Order Number)");
                }

                //ORC.3.1 - Codigo de Administracion
                if (StringUtils.isBlank(orc.getFillerOrderNumber().getEntityIdentifier().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado el identificador de la administracion (ORC-3.1: Filler Order Number)");
                }

                //ORC.10 - Medico Prescriptor
                if (StringUtils.isBlank(orc.getEnteredBy(0).getIDNumber().getValue())) { //ORC.10.1
                    throw new HL7Exception(
                            "No se ha indicado el codigo del medico prescriptor (ORC-10.1: Entered By)");
                }
                if (StringUtils.isBlank(orc.getEnteredBy(0).getGivenName().getValue())) { //ORC.10.3
                    throw new HL7Exception(
                            "No se ha indicado el nombre del medico prescriptor (ORC-10.3: Entered By)");
                }
                if (StringUtils.isBlank(orc.getEnteredBy(0).getFamilyName().getSurname().getValue())) { //ORC.10.2.1
                    throw new HL7Exception(
                            "No se ha indicado el apellido del medico prescriptor (ORC-10.2.1: Entered By)");
                }

                //TQ1.7 - Fecha de Inicio de la Prescripcion
                if (StringUtils.isBlank(tq1.getStartDateTime().getTime().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado la fecha de inicio de la prescripcion (TQ1-7: Start date/time)");
                }

                //RXA.3 - Fecha de la Administracion
                if (StringUtils.isBlank(rxa.getDateTimeStartOfAdministration().getTime().getValue())) {
                    throw new HL7Exception(
                            "No se ha indicado la fecha de la adminsitracion (RXA-3: Start date/time)");
                }

                //RXA.5 - Marca
                if (StringUtils.isBlank(rxa.getAdministeredCode().getIdentifier().getValue())) { //RXA.5.1
                    throw new HL7Exception(
                            "No se ha indicado el codigo nacional de la marca (RXA-5.1: AdministeredCode)");
                }

                //RXA.6 - Dosis Administrada en Forma Farmaceutica
                if (StringUtils.isNotBlank(rxa.getAdministeredAmount().getValue())) { //RXA.6
                    try {
                        NumberUtils.createDouble(rxa.getAdministeredAmount().getValue());
                    } catch (Exception e) {
                        throw new HL7Exception("La dosis administrada no es correcta ["
                                + rxa.getAdministeredAmount().getValue()
                                + "] (ZRA-6: Dosis Administrada en Forma Farmaceutica)");
                    }
                } else {
                    throw new HL7Exception(
                            "No se ha indicado dosis administrada (RXA-6: Dosis Administrada en Forma Farmaceutica)");
                }

                //RXO.2 - Dosis Prescrita en Unidad de Medida
                if (StringUtils.isNotBlank(rxo.getRequestedGiveAmountMinimum().getValue())) { //RXO.2
                    try {
                        NumberUtils.createDouble(rxo.getRequestedGiveAmountMinimum().getValue());
                    } catch (Exception e) {
                        throw new HL7Exception("La dosis prescrita no es correcta ["
                                + rxo.getRequestedGiveAmountMinimum().getValue()
                                + "] (RXO-2: Dosis Prescrita en Unidad de Medida)");
                    }
                } else {
                    throw new HL7Exception(
                            "No se ha indicado dosis prescrita (RXO-2: Dosis Prescrita en Unidad de Medida)");
                }
            }
        } else {
            throw new HL7Exception("No se reconoce el tipo de mensaje (MSH.9 - Message Type)");
        }

        // Validacion del codigo de centro
        Centros centros = new Centros();
        centros.setCodCentro(cod_centro);
        try {
            centros = centrosService.findByCodCentro(centros);
        } catch (Exception e) {
            throw new HL7Exception(
                    "No se reconoce el codigo de centro " + cod_centro + " (" + e.getMessage() + ")");
        }

        logger.debug("     Almacenando el mensaje en BUZON_IN");
        BuzonIn buzonIn = new BuzonIn();
        buzonIn.setCentros(centros);
        buzonIn.setIdMensaje(msh.getMessageControlID().getValue()); //MSH.10
        buzonIn.setMensaje(message);
        buzonIn.setFechaIn(new Date());
        buzonIn.setEstado(AbstractIntegracionEntity.MENSAJE_NO_PROCESADO);
        buzonIn.setTipo(hl7message.getName());
        buzonInService.save(buzonIn);
        logger.debug("     Mensaje almacenado en BUZON_IN correctamente");

        ack = parser.generateACK(hl7message);
    } catch (Exception e) {
        try {
            logger.error("SE HAN PRODUCIDO ERRORES: " + e.toString());
            if (e.getCause() != null && e.getCause().getClass() == ConstraintViolationException.class) {
                ack = parser.generateNACK(hl7message,
                        "El mensaje con MSH.10: "
                                + ((MSH) hl7message.get("MSH")).getMessageControlID().getValue()
                                + " ya se encuentra en el sistema");
            } else {
                ack = parser.generateNACK(hl7message, e.getMessage());
            }
        } catch (Exception ex) {
            logger.error("SE HAN PRODUCIDO ERRORES: " + ex.toString());
            ack = parser.generateNACK(hl7message, ex.getMessage() != null ? ex.getMessage() : ex.toString());
        }
    }

    //Generar la respuesta
    String response;
    try {
        response = ack.encode();
    } catch (Exception e) {

        logger.error("No se ha podido generar la respuesta: " + e.toString() + "\rGenerando respuesta tipo");
        response = "MSH|^~\\&|MPR|mpr-ws|||"
                + DateFormatUtils.formatUTC(System.currentTimeMillis(), "yyyyMMddHHmmss") + "||ACK|"
                + System.currentTimeMillis() + "|P|2.5\r" + "MSA|AE\r"
                + "ERR||||E|||NO SE HA PODIDO GENERAR UNA RESPUESTA: " + e.getMessage() != null ? e.getMessage()
                        : e.toString() + "\r";
    }

    logger.debug("     Respuesta a generar: ");
    logger.debug(response);
    logger.info("RECEPCION DEL MENSAJE FINALIZADA");

    return new ResponseEntity(response, HttpStatus.OK);
}

From source file:cn.sinobest.jzpt.framework.utils.string.StringUtils.java

/**
 * double/*w w  w  . j  ava 2  s  .co m*/
 *
 * @param o
 * @param defaultValue
 * @return
 */
public static double toDouble(String o, Double defaultValue) {
    if (isBlank(o))
        return defaultValue;
    try {
        return NumberUtils.createDouble(o);
    } catch (NumberFormatException e) {
        if (defaultValue == null)// null
            throw e;
        return defaultValue;
    }
}

From source file:com.dominion.salud.mpr.negocio.service.tratamientos.impl.PrescripcionesServiceImpl.java

/**
 *
 * @param message// w ww  . jav  a 2s . c  o  m
 * @throws Exception
 */
@Override
@Transactional(noRollbackFor = { NoResultException.class })
public void processMessage(String message) throws Exception {
    logger.info("INICIANDO EL PROCESADO DEL MOVIMIENTO ENTRANTE");
    logger.info(message);

    //Resultado final del proceso
    List<String> resultado = new ArrayList<>();

    try {
        ZMP_O09 hl7message = (ZMP_O09) new ER7Parser().parse(message);
        PID pid = hl7message.getPATIENT().getPID();
        PV1 pv1 = hl7message.getPATIENT().getPATIENT_VISIT().getPV1();

        List<ZMP_O09_ORDER> zmp_o09_orders = hl7message.getORDERAll();
        for (ZMP_O09_ORDER zmp_o09_order : zmp_o09_orders) {
            ORC orc = zmp_o09_order.getORC();
            Z01 z01 = zmp_o09_order.getZ01();
            TQ1 tq1 = zmp_o09_order.getTIMING().getTQ1();
            RXC rxc = zmp_o09_order.getCOMPONENT().getRXC();

            //ORC.21.10 - Centro
            logger.debug("     Procesando datos del CENTRO ("
                    + orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue() + ") "
                    + orc.getOrderingFacilityName(0).getOrganizationName().getValue());
            Centros centros = new Centros();
            centros.setCodCentro(orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue()); //ORC.21.10
            try {
                centros = centrosService.findByCodCentro(centros);
                logger.debug("          ORC.21.10 - Centro: " + centros.toString());
            } catch (NoResultException nre) {
                logger.error(
                        "          No se puede procesar el movimiento sin EQUIVALENCIA para el campo ORC.21.10 - CENTRO ("
                                + orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue() + ")");
                resultado.add("No se puede procesar el movimiento sin EQUIVALENCIA para el CAMPO: CENTRO ("
                        + orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue() + ")");
            }

            //PID.3 - Identificadores del paciente (NHC) y (CIPA)
            Integer nhc = null;
            String cipa = null;
            logger.debug("     Procesando el campo PID.3 - Identificadores del Paciente");
            for (int i = 0; i < pid.getPatientIdentifierList().length; i++) { // PID.3 - PatientIdentifierList
                if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "PI")) {
                    try {
                        nhc = NumberUtils
                                .createInteger(pid.getPatientIdentifierList(i).getIDNumber().getValue());
                        logger.debug("               PID.3(PI): " + nhc);
                    } catch (Exception e) {
                        logger.warn("El campo PID.3(PI) - NHC ("
                                + pid.getPatientIdentifierList(i).getIDNumber().getValue()
                                + ") no es correcto");
                    }
                } else if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "CIPA")) {
                    if (StringUtils.isNotBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        cipa = pid.getPatientIdentifierList(i).getIDNumber().getValue();
                        logger.debug("               PID.3(CIPA): " + cipa);
                    }
                }
            }

            //PID.5 - Paciente
            logger.debug("     Procesando datos del PACIENTE ("
                    + pid.getPatientName(0).getFamilyName().getSurname().getValue() + " "
                    + pid.getMotherSMaidenName(0).getFamilyName().getSurname().getValue() + ", "
                    + pid.getPatientName(0).getGivenName().getValue() + ")");
            Pacientes pacientes = new Pacientes();
            pacientes.setCipa(cipa);
            pacientes.setTxtNombre(pid.getPatientName(0).getGivenName().getValue()); //PID.5.2
            pacientes.setTxtApellido1(pid.getPatientName(0).getFamilyName().getSurname().getValue()); //PID.5.1.1
            pacientes.setTxtApellido2(pid.getMotherSMaidenName(0).getFamilyName().getSurname().getValue()); //PID.6.1.1
            pacientes.setFechaNac(pid.getDateTimeOfBirth().getTime().getValueAsDate()); //PID.7.1
            logger.debug("          PID.5 - Paciente: " + pacientes.toString());

            //PID.8 - Sexo
            logger.debug("     Procesando datos del SEXO (" + pid.getAdministrativeSex().getValue() + ")");
            SexosExt sexosExt = new SexosExt();
            try {
                sexosExt.setCentros(centros);
                sexosExt.setCodSexoExt(pid.getAdministrativeSex().getValue()); //PID.8
                sexosExt.setTxtSexoExt(pid.getAdministrativeSex().getValue()); //PID.8
                sexosExt = sexosExtService.traducirEquivalencia(sexosExt);
                logger.debug("          PID.8 - Sexo: " + sexosExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(pid.getAdministrativeSex().getValue())) {
                    logger.warn("          No se ha encontrado EQUIVALENCIA para el CAMPO PID.8 - SEXO ("
                            + pid.getAdministrativeSex().getValue() + ")");
                } else {
                    logger.warn("          No se ha indicado INFORMACION para el CAMPO PID.8 - SEXO ("
                            + pid.getAdministrativeSex().getValue() + ")");
                }
            }

            //Datos del Episodio
            Episodios episodios = new Episodios();
            //PV1.2 - Clase de Paciente
            logger.debug(
                    "     Procesando datos de la CLASE DE PACIENTE (" + pv1.getPatientClass().getValue() + ")"); //PV1.2
            if (StringUtils.isNotBlank(pv1.getPatientClass().getValue())) {
                if (StringUtils.equals(pv1.getPatientClass().getValue(), "O")) { //Outpatient
                    //PV1.18 - Tipo de Paciente
                    logger.debug("          Procesando datos del TIPO DE PACIENTE ("
                            + pv1.getPatientType().getValue() + ")"); //PV1.18
                    if (StringUtils.isNotBlank(pv1.getPatientType().getValue())) {
                        episodios.setAmbito(pv1.getPatientType().getValue());
                    } else {
                        logger.error(
                                "          No se puede procesar el movimiento sin INFORMACION en el CAMPO PV1.18 - TIPO DE PACIENTE ("
                                        + pv1.getPatientType().getValue() + ")");
                        resultado.add(
                                "No se puede procesar el movimiento sin INFORMACION en el CAMPO: TIPO DE PACIENTE");
                    }
                } else {
                    episodios.setAmbito("H");
                }
                logger.debug("          PV1.2 - Clase de Paciente y PV1.18 - Tipo de Paciente: "
                        + episodios.getAmbito());
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO PV1.2 - CLASE DE PACIENTE ("
                                + pv1.getPatientClass().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CLASE DE PACIENTE");
            }

            //PV1.19.1 - Codigo de Episodio
            logger.debug("     Procesando datos del CODIGO DE EPISODIO ("
                    + pv1.getVisitNumber().getIDNumber().getValue() + ")"); //PV1.19.1
            if (StringUtils.isNotBlank(pv1.getVisitNumber().getIDNumber().getValue())) {
                episodios.setCodEpisodio(pv1.getVisitNumber().getIDNumber().getValue());
                logger.debug("          PV1.19.1 - Codigo de Episodio: " + episodios.getCodEpisodio());
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO PV1.19.1 - CODIGO DE EPISODIO ("
                                + pv1.getVisitNumber().getIDNumber().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CODIGO DE EPISODIO");
            }

            //ORC.2.1 - Codigo de Prescripcion
            String cod_prescripcion = null;
            logger.debug("     Procesando CODIGO DE PRESCRIPCION ("
                    + orc.getPlacerOrderNumber().getEntityIdentifier().getValue() + ")"); //ORC.2.1
            if (StringUtils.isNotBlank(orc.getPlacerOrderNumber().getEntityIdentifier().getValue())) {
                cod_prescripcion = orc.getPlacerOrderNumber().getEntityIdentifier().getValue();
                logger.debug("          ORC.2.1 - Codigo de Prescripcion: " + cod_prescripcion);
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO ORC.2.1 - CODIGO DE PRESCRIPCION ("
                                + orc.getPlacerOrderNumber().getEntityIdentifier().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CODIGO DE PRESCRIPCION");
            }

            //ORC.10 - Medico Prescriptor
            logger.debug("     Procesando datos del MEDICO PRESCRIPTOR ("
                    + orc.getEnteredBy(0).getIDNumber().getValue() + ") "
                    + orc.getOrderingProvider(0).getGivenName().getValue() + " "
                    + orc.getOrderingProvider(0).getFamilyName().getSurname().getValue() + " "
                    + orc.getOrderingProvider(0).getSecondAndFurtherGivenNamesOrInitialsThereof().getValue());
            Medicos medicos = new Medicos();
            medicos.setCodMedico(orc.getEnteredBy(0).getIDNumber().getValue()); //ORC.10.1
            medicos.setTxtNombre(orc.getEnteredBy(0).getGivenName().getValue()); //ORC.10.3
            medicos.setTxtApellido1(orc.getEnteredBy(0).getFamilyName().getSurname().getValue()); //ORC.10.2.1
            medicos.setTxtApellido2(
                    orc.getEnteredBy(0).getSecondAndFurtherGivenNamesOrInitialsThereof().getValue()); //ORC.10.4
            medicos = medicosService.findByCodMedicoAndInsert(medicos);
            if (medicos != null) {
                logger.debug("          ORC.10 - Medico Prescriptor: " + medicos.toString());
            } else {
                logger.error(
                        "               No se puede procesar el movimiento sin INFORMACION en el CAMPO: ORC.10 - MEDICO PRESCRIPTOR ("
                                + orc.getEnteredBy(0).getIDNumber().getValue() + ") "
                                + orc.getOrderingProvider(0).getGivenName().getValue() + " "
                                + orc.getOrderingProvider(0).getFamilyName().getSurname().getValue() + " "
                                + orc.getOrderingProvider(0).getSecondAndFurtherGivenNamesOrInitialsThereof()
                                        .getValue());
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: MEDICO PRESCRIPTOR ("
                                + orc.getEnteredBy(0).getIDNumber().getValue() + ") "
                                + orc.getOrderingProvider(0).getGivenName().getValue() + " "
                                + orc.getOrderingProvider(0).getFamilyName().getSurname().getValue() + " "
                                + orc.getOrderingProvider(0).getSecondAndFurtherGivenNamesOrInitialsThereof()
                                        .getValue());
            }

            //TQ1.7 - Fecha de Inicio de la Prescripcion
            Date fecha_ini_prescripcion = null;
            logger.debug("     Procesando FECHA DE INICIO DE LA PRESCRIPCION ("
                    + tq1.getStartDateTime().getTime().getValue() + ")"); //TQ1.7
            if (StringUtils.isNotBlank(tq1.getStartDateTime().getTime().getValue())
                    && tq1.getStartDateTime().getTime().getValueAsDate() != null) {
                fecha_ini_prescripcion = tq1.getStartDateTime().getTime().getValueAsDate();
                logger.debug("          TQ1.7 - Fecha de Inicio de la Prescripcion: " + fecha_ini_prescripcion);
            } else {
                logger.error(
                        "               No se puede procesar el movimiento sin INFORMACION en el CAMPO: TQ1.7 - FECHA DE INICIO DE LA PRESCRIPCION ("
                                + tq1.getStartDateTime().getTime().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: FECHA DE INICIO DE LA PRESCRIPCION ("
                                + tq1.getStartDateTime().getTime().getValue() + ")");
            }

            //TQ1.8 - Fecha Fin de la Prescripcion
            Date fecha_fin_prescripcion = null;
            logger.debug("     Procesando FECHA DE FIN DE LA PRESCRIPCION ("
                    + tq1.getEndDateTime().getTime().getValue() + ")"); //TQ1.8
            if (StringUtils.isNotBlank(tq1.getEndDateTime().getTime().getValue())
                    && tq1.getEndDateTime().getTime().getValueAsDate() != null) {
                fecha_fin_prescripcion = tq1.getEndDateTime().getTime().getValueAsDate();
                logger.debug("          TQ1.8 - Fecha de Fin de la Prescripcion: " + fecha_fin_prescripcion);
            } else {
                logger.error(
                        "               No se puede procesar el movimiento sin INFORMACION en el CAMPO: TQ1.8 - FECHA FIN DE LA PRESCRIPCION ("
                                + tq1.getEndDateTime().getTime().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: FECHA FIN DE LA PRESCRIPCION ("
                                + tq1.getEndDateTime().getTime().getValue() + ")");
            }

            //RXC.2 - Marca
            logger.debug("     Procesando de la MARCA (" + rxc.getComponentCode().getIdentifier().getValue()
                    + ") " + rxc.getComponentCode().getText().getValue());
            Marcas marcas = new Marcas();
            marcas.setCodNac(rxc.getComponentCode().getIdentifier().getValue()); //RXC.2.1
            marcas.setTxtMarca(rxc.getComponentCode().getText().getValue()); //RXC.2.2
            marcas = marcasService.findByCodNacAndInsert(marcas);
            if (marcas != null) {
                logger.debug("          RXC.2 - Marca: " + marcas.toString());
            } else {
                logger.error(
                        "               No se puede procesar el movimiento sin INFORMACION en el campo RXC.2 - MARCA ("
                                + rxc.getComponentCode().getIdentifier().getValue() + ") "
                                + rxc.getComponentCode().getText().getValue());
                resultado.add("No se puede procesar el movimiento sin INFORMACION en el CAMPO: MARCA ("
                        + rxc.getComponentCode().getIdentifier().getValue() + ") "
                        + rxc.getComponentCode().getText().getValue());
            }

            //Z01.9 - Dosis Prescrita en Unidad de Medida
            Double dosis_prescrita = null;
            logger.debug(
                    "     Procesando datos de la DOSIS PRESCRITA (" + z01.getDosisPrescrita().getValue() + ")"); //Z01.9
            if (StringUtils.isNotBlank(z01.getDosisPrescrita().getValue())
                    && NumberUtils.isNumber(z01.getDosisPrescrita().getValue())) {
                try {
                    dosis_prescrita = NumberUtils.createDouble(z01.getDosisPrescrita().getValue());
                    logger.debug("          Z01.9 - Dosis Prescrita: " + dosis_prescrita);
                } catch (Exception e) {
                    logger.error(
                            "          No se puede procesar el movimiento porque la INFORMACION en el campo Z01.9 - DOSIS PRESCRITA ("
                                    + z01.getDosisPrescrita().getValue() + ") NO es correcta");
                    resultado.add(
                            "No se puede procesar el movimiento porque la INFORMACION en el CAMPO: DOSIS PRESCRITA ("
                                    + z01.getDosisPrescrita().getValue() + ") NO es correcta");
                }
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin datos en el campo Z01.9 - Dosis Prescrita ("
                                + z01.getDosisPrescrita().getValue() + ")");
                resultado
                        .add("No se puede procesar el movimiento sin INFORMACION en el CAMPO: Dosis Prescrita ("
                                + z01.getDosisPrescrita().getValue() + ")");
            }

            //Z01.10 - Unidad de Medida de la Dosis Prescrita
            logger.debug("     Procesando datos de la UNIDAD DE MEDIDA DE LA DOSIS PRESCRITA ("
                    + z01.getUnidMedDosisPrescrita().getIdentifier().getValue() + ") "
                    + z01.getUnidMedDosisPrescrita().getText().getValue());
            UnidMedExt unidMedExt = new UnidMedExt();
            try {
                unidMedExt.setCentros(centros);
                unidMedExt.setCodUnidMedExt(z01.getUnidMedDosisPrescrita().getIdentifier().getValue()); //Z01.10.1
                unidMedExt.setTxtUnidMedExt(z01.getUnidMedDosisPrescrita().getText().getValue()); //Z01.10.2
                unidMedExt = unidMedExtService.traducirEquivalenciaAndInsert(unidMedExt);
                logger.debug(
                        "          Z01.10 - Unidad de Medida de la Dosis Prescrita: " + unidMedExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(z01.getUnidMedDosisPrescrita().getIdentifier().getValue())) {
                    logger.warn(
                            "               No se ha indicado INFORMACION para el CAMPO Z01.10 - UNIDAD DE MEDIDA DE LA DOSIS PRESCRITA ("
                                    + z01.getUnidMedDosisPrescrita().getIdentifier().getValue() + ") "
                                    + z01.getUnidMedDosisPrescrita().getText().getValue());
                } else {
                    logger.warn(
                            "               No se ha encontrado EQUIVALENCIA para el CAMPO Z01.10 - UNIDAD DE MEDIDA DE LA DOSIS PRESCRITA ("
                                    + z01.getUnidMedDosisPrescrita().getIdentifier().getValue() + ") "
                                    + z01.getUnidMedDosisPrescrita().getText().getValue());
                }
            }

            //Z01.13 - Secuencias
            logger.debug("     Procesando de la SECUENCIA (" + z01.getSecuencia().getIdentifier().getValue()
                    + ") " + z01.getSecuencia().getText().getValue());
            SecuenciasExt secuenciasExt = new SecuenciasExt();
            try {
                secuenciasExt.setCentros(centros);
                secuenciasExt.setCodSecuenciaExt(z01.getSecuencia().getIdentifier().getValue()); //Z01.13.1
                secuenciasExt.setTxtSecuenciaExt(z01.getSecuencia().getText().getValue()); //Z01.13.2
                secuenciasExt = secuenciasExtService.traducirEquivalenciaAndInsert(secuenciasExt);
                logger.debug("          Z01.13 - Secuencia: " + secuenciasExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(z01.getSecuencia().getIdentifier().getValue())) {
                    logger.warn(
                            "               No se ha indicado INFORMACION para el CAMPO Z01.13 - SECUENCIA ("
                                    + z01.getSecuencia().getIdentifier().getValue() + ") "
                                    + z01.getSecuencia().getText().getValue());
                } else {
                    logger.warn(
                            "               No se ha encontrado EQUIVALENCIA para el CAMPO Z01.13 - SECUENCIA ("
                                    + z01.getSecuencia().getIdentifier().getValue() + ") "
                                    + z01.getSecuencia().getText().getValue());
                }
            }

            //Z01.14 - Pautas
            logger.debug("     Procesando de la PAUTA (" + z01.getPauta().getIdentifier().getValue() + ") "
                    + z01.getPauta().getText().getValue());
            PautasExt pautasExt = new PautasExt();
            try {
                pautasExt.setCentros(centros);
                pautasExt.setCodPautaExt(z01.getPauta().getIdentifier().getValue()); //Z01.14.1
                pautasExt.setTxtPautaExt(z01.getPauta().getText().getValue()); //Z01.14.2
                pautasExt = pautasExtService.traducirEquivalenciaAndInsert(pautasExt);
                logger.debug("          Z01.14 - Pauta: " + pautasExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(z01.getPauta().getIdentifier().getValue())) {
                    logger.warn("               No se ha indicado INFORMACION para el CAMPO Z01.14 - PAUTA ("
                            + z01.getPauta().getIdentifier().getValue() + ") "
                            + z01.getPauta().getText().getValue());
                } else {
                    logger.warn("               No se ha encontrado EQUIVALENCIA para el CAMPO Z01.14 - PAUTA ("
                            + z01.getPauta().getIdentifier().getValue() + ") "
                            + z01.getPauta().getText().getValue());
                }
            }

            //Z01.16 - Razon Fin
            logger.debug("     Procesando la RAZON DE FIN DE TRATAMIENTO ("
                    + z01.getRazonFin().getIdentifier().getValue() + ") "
                    + z01.getRazonFin().getText().getValue());
            RazonFinExt razonFinExt = new RazonFinExt();
            try {
                razonFinExt.setCentros(centros);
                razonFinExt.setCodRazonFinExt(z01.getRazonFin().getIdentifier().getValue()); //Z01.16.1
                razonFinExt.setTxtRazonFinExt(z01.getRazonFin().getText().getValue()); //Z01.16.2
                razonFinExt = razonFinExtService.traducirEquivalenciaAndInsert(razonFinExt);
                logger.debug("          Z01.16 - Razon de Fin: " + razonFinExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(z01.getRazonFin().getIdentifier().getValue())) {
                    logger.warn(
                            "               No se ha indicado INFORMACION para el CAMPO Z01.16 - RAZON DE FIN DE TRATAMIENTO ("
                                    + z01.getRazonFin().getIdentifier().getValue() + ") "
                                    + z01.getRazonFin().getText().getValue());
                } else {
                    logger.warn(
                            "               No se ha encontrado EQUIVALENCIA para el CAMPO Z01.16 - RAZON DE FIN DE TRATAMIENTO ("
                                    + z01.getRazonFin().getIdentifier().getValue() + ") "
                                    + z01.getRazonFin().getText().getValue());
                }
            }

            //RESULTADO GENERAL DEL PROCESADO DEL MOVIMIENTO
            String mensaje = "";
            if (!resultado.isEmpty()) {
                logger.error("RESULTADO GENERAL DEL PROCESADO: ");
                for (String linea : resultado) {
                    mensaje += "     - " + linea + "\n";
                }
                logger.error("     " + mensaje);
            }

            if (StringUtils.isNotBlank(mensaje)) {
                throw new Exception(mensaje);
            }
            logger.info("FINALIZANDO EL PROCESADO DEL MOVIMIENTO ENTRANTE ENTRANTE");

            //ALMACENAMIENTO DEL MOVIMIENTO
            logger.info("INICIANDO EL ALMACENAMIENTO DEL MOVIMIENTO ENTRANTE");

            //PACIENTE
            try {
                logger.debug("     Buscando PACIENTE por CIPA (" + pacientes.getCipa() + ")");
                pacientes = pacientesService.findByCIPA(pacientes);
            } catch (NoResultException nre) {
                logger.debug("          Almacenando datos del PACIENTE");
                pacientes.setSexos(sexosExt.getSexos());
                pacientes = pacientesService.save(pacientes);
            } finally {
                logger.debug("          Paciente: " + pacientes.toString());
            }

            //EPISODIO
            try {
                episodios.setNhc(nhc);
                episodios.setCentros(centros);
                episodios.setPacientes(pacientes);

                logger.debug("     Buscando EPISODIO por COD_EPISODIO (" + episodios.getCodEpisodio()
                        + "), NHC (" + episodios.getNhc() + "), PROGRAMA (" + episodios.getProgramas()
                        + "), CENTRO (" + episodios.getCentros() + ")");
                episodios = episodiosService.findByCodEpisodioNHCIdProgramaIdCentro(episodios);
            } catch (NoResultException nre) {
                logger.debug("          Almacenando datos del EPISODIO");
                episodios = episodiosService.save(episodios);
            } finally {
                logger.debug("          Episodio: " + episodios.toString());
            }

            //PRESCRIPCIONES
            logger.debug("     Almacenando datos de la PRESCRIPCION: (" + cod_prescripcion + ")");
            Prescripciones prescripciones = new Prescripciones();
            try {
                prescripciones.setCodPrescripcion(cod_prescripcion);
                logger.debug("          Buscando PRESCRIPCION por COD_PRESCRIPCION ("
                        + prescripciones.getCodPrescripcion() + ")");
                prescripciones = findByCodPrescripcion(prescripciones);

                logger.debug("          Actualizando PRESCRIPCION por COD_PRESCRIPCION ("
                        + prescripciones.getCodPrescripcion() + ")");
                prescripciones.setFechaFin(fecha_fin_prescripcion);
                prescripciones.setRazonFin(razonFinExt.getRazonFin());
                prescripciones = save(prescripciones);
            } catch (NoResultException nre) {
                Prescripciones prescripcionesOld = new Prescripciones();
                prescripcionesOld
                        .setCodPrescripcion(StringUtils.split(prescripciones.getCodPrescripcion(), "-")[0] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[1] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[2] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[3] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[4]);
                List<Prescripciones> prescripcioneses = findLikeCodPrescripcion(prescripcionesOld);
                for (Prescripciones prescripcionesUpd : prescripcioneses) {
                    if (StringUtils.equals(StringUtils.split(prescripcionesUpd.getCodPrescripcion(), "-")[7],
                            StringUtils.split(prescripciones.getCodPrescripcion(), "-")[7])) {
                        logger.debug("               Estableciendo fecha de fin en la prescripcion: "
                                + prescripcionesUpd.toString());
                        prescripcionesUpd.setFechaFin(new Date());
                        save(prescripcionesUpd);
                    }
                }

                prescripciones.setEpisodios(episodios);
                prescripciones.setMarcas(marcas);
                prescripciones.setMedicos(medicos);
                prescripciones.setDosis(dosis_prescrita);
                prescripciones.setFechaIni(fecha_ini_prescripcion);
                prescripciones.setFechaFin(fecha_fin_prescripcion);
                prescripciones.setRazonFin(razonFinExt.getRazonFin());
                prescripciones.setCodPrescripcion(cod_prescripcion);
                prescripciones.setPautas(pautasExt.getPautas());
                prescripciones.setRazonFin(razonFinExt.getRazonFin());
                prescripciones.setSecuencias(secuenciasExt.getSecuencias());
                prescripciones.setUnidMed(unidMedExt.getUnidMed());
                prescripciones = save(prescripciones);
            } finally {
                logger.debug("          Prescripcion: " + prescripciones.toString());
            }
            logger.info("FINALIZANDO EL ALMACENAMIENTO DEL MOVIMIENTO ENTRANTE");
        }
    } catch (Exception e) {
        throw new Exception("SE HAN PRODUCIDO ERRORES AL PROCESAR EL MOVIMIENTO: \n" + e.getMessage() != null
                ? e.getMessage()
                : e.toString());
    }
}

From source file:com.dominion.salud.mpr.negocio.service.tratamientos.impl.AdministracionesServiceImpl.java

@Override
@Transactional(noRollbackFor = { NoResultException.class })
public void processMessage(String message) throws Exception {
    logger.info("INICIANDO EL PROCESADO DEL MOVIMIENTO ENTRANTE");
    logger.info(message);//from w  w  w . j  a va2  s . c  om

    //Resultado final del proceso
    List<String> resultado = new ArrayList<>();

    try {
        RAS_O17 hl7message = (RAS_O17) new ER7Parser().parse(message);

        PID pid = hl7message.getPATIENT().getPID();
        PV1 pv1 = hl7message.getPATIENT().getPATIENT_VISIT().getPV1();

        List<RAS_O17_ORDER> ras_o17_orders = hl7message.getORDERAll();
        for (RAS_O17_ORDER ras_o17_order : ras_o17_orders) {
            ORC orc = ras_o17_order.getORC();
            TQ1 tq1 = ras_o17_order.getTIMING().getTQ1();
            RXA rxa = ras_o17_order.getADMINISTRATION().getRXA();
            RXO rxo = ras_o17_order.getORDER_DETAIL().getRXO();

            //ORC.21.10 - Centro
            logger.debug("     Procesando datos del CENTRO ("
                    + orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue() + ") "
                    + orc.getOrderingFacilityName(0).getOrganizationName().getValue());
            Centros centros = new Centros();
            centros.setCodCentro(orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue()); //ORC.21.10
            try {
                centros = centrosService.findByCodCentro(centros);
                logger.debug("          ORC.21.10 - Centro: " + centros.toString());
            } catch (NoResultException nre) {
                logger.error(
                        "          No se puede procesar el movimiento sin EQUIVALENCIA para el campo ORC.21.10 - CENTRO ("
                                + orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue() + ")");
                resultado.add("No se puede procesar el movimiento sin EQUIVALENCIA para el CAMPO: CENTRO ("
                        + orc.getOrderingFacilityName(0).getOrganizationIdentifier().getValue() + ")");
            }

            //PID.3 - Identificadores del paciente (NHC) y (CIPA)
            Integer nhc = null;
            String cipa = null;
            logger.debug("     Procesando el campo PID.3 - Identificadores del Paciente");
            for (int i = 0; i < pid.getPatientIdentifierList().length; i++) { // PID.3 - PatientIdentifierList
                if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "PI")) {
                    try {
                        nhc = NumberUtils
                                .createInteger(pid.getPatientIdentifierList(i).getIDNumber().getValue());
                        logger.debug("               PID.3(PI): " + nhc);
                    } catch (Exception e) {
                        logger.warn("El campo PID.3(PI) - NHC ("
                                + pid.getPatientIdentifierList(i).getIDNumber().getValue()
                                + ") no es correcto");
                    }
                } else if (StringUtils.equalsIgnoreCase(
                        pid.getPatientIdentifierList(i).getIdentifierTypeCode().getValue(), "CIPA")) {
                    if (StringUtils.isNotBlank(pid.getPatientIdentifierList(i).getIDNumber().getValue())) {
                        cipa = pid.getPatientIdentifierList(i).getIDNumber().getValue();
                        logger.debug("               PID.3(CIPA): " + cipa);
                    }
                }
            }

            //PID.5 - Paciente
            logger.debug("     Procesando datos del PACIENTE ("
                    + pid.getPatientName(0).getFamilyName().getSurname().getValue() + " "
                    + pid.getMotherSMaidenName(0).getFamilyName().getSurname().getValue() + ", "
                    + pid.getPatientName(0).getGivenName().getValue() + ")");
            Pacientes pacientes = new Pacientes();
            pacientes.setCipa(cipa);
            pacientes.setTxtNombre(pid.getPatientName(0).getGivenName().getValue()); //PID.5.2
            pacientes.setTxtApellido1(pid.getPatientName(0).getFamilyName().getSurname().getValue()); //PID.5.1.1
            pacientes.setTxtApellido2(pid.getMotherSMaidenName(0).getFamilyName().getSurname().getValue()); //PID.6.1.1
            pacientes.setFechaNac(pid.getDateTimeOfBirth().getTime().getValueAsDate()); //PID.7.1
            logger.debug("          PID.5 - Paciente: " + pacientes.toString());

            //PID.8 - Sexo
            logger.debug("     Procesando datos del SEXO (" + pid.getAdministrativeSex().getValue() + ")");
            SexosExt sexosExt = new SexosExt();
            try {
                sexosExt.setCentros(centros);
                sexosExt.setCodSexoExt(pid.getAdministrativeSex().getValue()); //PID.8
                sexosExt.setTxtSexoExt(pid.getAdministrativeSex().getValue()); //PID.8
                sexosExt = sexosExtService.traducirEquivalencia(sexosExt);
                logger.debug("          PID.8 - Sexo: " + sexosExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(pid.getAdministrativeSex().getValue())) {
                    logger.warn("          No se ha encontrado EQUIVALENCIA para el CAMPO PID.8 - SEXO ("
                            + pid.getAdministrativeSex().getValue() + ")");
                } else {
                    logger.warn("          No se ha indicado INFORMACION para el CAMPO PID.8 - SEXO ("
                            + pid.getAdministrativeSex().getValue() + ")");
                }
            }

            //Datos del Episodio
            Episodios episodios = new Episodios();
            //PV1.2 - Clase de Paciente
            logger.debug(
                    "     Procesando datos de la CLASE DE PACIENTE (" + pv1.getPatientClass().getValue() + ")"); //PV1.2
            if (StringUtils.isNotBlank(pv1.getPatientClass().getValue())) {
                if (StringUtils.equals(pv1.getPatientClass().getValue(), "O")) { //Outpatient
                    //PV1.18 - Tipo de Paciente
                    logger.debug("          Procesando datos del TIPO DE PACIENTE ("
                            + pv1.getPatientType().getValue() + ")"); //PV1.18
                    if (StringUtils.isNotBlank(pv1.getPatientType().getValue())) {
                        episodios.setAmbito(pv1.getPatientType().getValue());
                    } else {
                        logger.error(
                                "          No se puede procesar el movimiento sin INFORMACION en el CAMPO PV1.18 - TIPO DE PACIENTE ("
                                        + pv1.getPatientType().getValue() + ")");
                        resultado.add(
                                "No se puede procesar el movimiento sin INFORMACION en el CAMPO: TIPO DE PACIENTE");
                    }
                } else {
                    episodios.setAmbito("H");
                }
                logger.debug("          PV1.2 - Clase de Paciente y PV1.18 - Tipo de Paciente: "
                        + episodios.getAmbito());
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO PV1.2 - CLASE DE PACIENTE ("
                                + pv1.getPatientClass().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CLASE DE PACIENTE");
            }

            //PV1.19.1 - Codigo de Episodio
            logger.debug("     Procesando datos del CODIGO DE EPISODIO ("
                    + pv1.getVisitNumber().getIDNumber().getValue() + ")"); //PV1.19.1
            if (StringUtils.isNotBlank(pv1.getVisitNumber().getIDNumber().getValue())) {
                episodios.setCodEpisodio(pv1.getVisitNumber().getIDNumber().getValue());
                logger.debug("          PV1.19.1 - Codigo de Episodio: " + episodios.getCodEpisodio());
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO PV1.19.1 - CODIGO DE EPISODIO ("
                                + pv1.getVisitNumber().getIDNumber().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CODIGO DE EPISODIO");
            }

            //ORC.2.1 - Codigo de Prescripcion
            String cod_prescripcion = null;
            logger.debug("     Procesando CODIGO DE PRESCRIPCION ("
                    + orc.getPlacerOrderNumber().getEntityIdentifier().getValue() + ")"); //ORC.2.1
            if (StringUtils.isNotBlank(orc.getPlacerOrderNumber().getEntityIdentifier().getValue())) {
                cod_prescripcion = orc.getPlacerOrderNumber().getEntityIdentifier().getValue();
                logger.debug("          ORC.2.1 - Codigo de Prescripcion: " + cod_prescripcion);
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO ORC.2.1 - CODIGO DE PRESCRIPCION ("
                                + orc.getPlacerOrderNumber().getEntityIdentifier().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CODIGO DE PRESCRIPCION");
            }

            //ORC.3.1 - Codigo de Administracion
            String cod_administracion = null;
            logger.debug("     Procesando CODIGO DE ADMINSTRACION ("
                    + orc.getFillerOrderNumber().getEntityIdentifier().getValue() + ")"); //ORC.2.1
            if (StringUtils.isNotBlank(orc.getFillerOrderNumber().getEntityIdentifier().getValue())) {
                cod_administracion = orc.getFillerOrderNumber().getEntityIdentifier().getValue();
                logger.debug("          ORC.3.1 - Codigo de Administracion: " + cod_administracion);
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el campo ORC.3.1 - CODIGO DE ADMINSTRACION ("
                                + orc.getFillerOrderNumber().getEntityIdentifier().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: CODIGO DE ADMINSTRACION ("
                                + orc.getFillerOrderNumber().getEntityIdentifier().getValue() + ")");
            }

            //ORC.10 - Medico Prescriptor
            logger.debug("     Procesando datos del MEDICO PRESCRIPTOR ("
                    + orc.getEnteredBy(0).getIDNumber().getValue() + ") "
                    + orc.getOrderingProvider(0).getGivenName().getValue() + " "
                    + orc.getOrderingProvider(0).getFamilyName().getSurname().getValue() + " "
                    + orc.getOrderingProvider(0).getSecondAndFurtherGivenNamesOrInitialsThereof().getValue());
            Medicos medicos = new Medicos();
            medicos.setCodMedico(orc.getEnteredBy(0).getIDNumber().getValue()); //ORC.10.1
            medicos.setTxtNombre(orc.getEnteredBy(0).getGivenName().getValue()); //ORC.10.3
            medicos.setTxtApellido1(orc.getEnteredBy(0).getFamilyName().getSurname().getValue()); //ORC.10.2.1
            medicos.setTxtApellido2(
                    orc.getEnteredBy(0).getSecondAndFurtherGivenNamesOrInitialsThereof().getValue()); //ORC.10.4
            medicos = medicosService.findByCodMedicoAndInsert(medicos);
            if (medicos != null) {
                logger.debug("          ORC.10 - Medico Prescriptor: " + medicos.toString());
            } else {
                logger.error(
                        "               No se puede procesar el movimiento sin INFORMACION en el CAMPO: ORC.10 - MEDICO PRESCRIPTOR ("
                                + orc.getEnteredBy(0).getIDNumber().getValue() + ") "
                                + orc.getOrderingProvider(0).getGivenName().getValue() + " "
                                + orc.getOrderingProvider(0).getFamilyName().getSurname().getValue() + " "
                                + orc.getOrderingProvider(0).getSecondAndFurtherGivenNamesOrInitialsThereof()
                                        .getValue());
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: MEDICO PRESCRIPTOR ("
                                + orc.getEnteredBy(0).getIDNumber().getValue() + ") "
                                + orc.getOrderingProvider(0).getGivenName().getValue() + " "
                                + orc.getOrderingProvider(0).getFamilyName().getSurname().getValue() + " "
                                + orc.getOrderingProvider(0).getSecondAndFurtherGivenNamesOrInitialsThereof()
                                        .getValue());
            }

            //TQ1.7 - Fecha de Inicio de la Prescripcion
            Date fecha_ini_prescripcion = null;
            logger.debug("     Procesando FECHA DE INICIO DE LA PRESCRIPCION ("
                    + tq1.getStartDateTime().getTime().getValue() + ")"); //TQ1.7
            if (StringUtils.isNotBlank(tq1.getStartDateTime().getTime().getValue())
                    && tq1.getStartDateTime().getTime().getValueAsDate() != null) {
                fecha_ini_prescripcion = tq1.getStartDateTime().getTime().getValueAsDate();
                logger.debug("          TQ1.7 - Fecha de Inicio de la Prescripcion: " + fecha_ini_prescripcion);
            } else {
                logger.error(
                        "               No se puede procesar el movimiento sin INFORMACION en el CAMPO: TQ1.7 - FECHA DE INICIO DE LA PRESCRIPCION ("
                                + tq1.getStartDateTime().getTime().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: FECHA DE INICIO DE LA PRESCRIPCION ("
                                + tq1.getStartDateTime().getTime().getValue() + ")");
            }

            //RXA.3 - Fecha de la Administracion
            Date fecha_administracion = null;
            logger.debug("     Procesando FECHA DE LA ADMINISTRACION ("
                    + rxa.getDateTimeStartOfAdministration().getTime().getValue() + ")"); //RXA.3
            if (StringUtils.isNotBlank(rxa.getDateTimeStartOfAdministration().getTime().getValue())
                    && rxa.getDateTimeStartOfAdministration().getTime().getValueAsDate() != null) {
                fecha_administracion = rxa.getDateTimeStartOfAdministration().getTime().getValueAsDate();
                logger.debug("          RXA.3 - Fecha de la Administracion: " + fecha_administracion);
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO RXD.3 - FECHA DE LA ADMINISTRACION ("
                                + rxa.getDateTimeStartOfAdministration().getTime().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: FECHA DE LA ADMINISTRACION ("
                                + rxa.getDateTimeStartOfAdministration().getTime().getValue() + ")");
            }

            //RXA.5 - Marca
            logger.debug("     Procesando de la MARCA (" + rxa.getAdministeredCode().getIdentifier().getValue()
                    + ") " + rxa.getAdministeredCode().getText().getValue());
            Marcas marcas = new Marcas();
            marcas.setCodNac(rxa.getAdministeredCode().getIdentifier().getValue()); //RXA.5.1
            marcas.setTxtMarca(rxa.getAdministeredCode().getText().getValue()); //RXA.5.2
            marcas = marcasService.findByCodNacAndInsert(marcas);
            if (marcas != null) {
                logger.debug("          RXA.5 - Marca: " + marcas.toString());
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO RXA.5 - MARCA ("
                                + rxa.getAdministeredCode().getIdentifier().getValue() + ") "
                                + rxa.getAdministeredCode().getText().getValue());
                resultado.add("No se puede procesar el movimiento sin INFORMACION en el CAMPO: MARCA ("
                        + rxa.getAdministeredCode().getIdentifier().getValue() + ") "
                        + rxa.getAdministeredCode().getText().getValue());
            }

            //RXA.6 - Dosis Administrada en Forma Farmaceutica
            Double dosis_administrada = null;
            logger.debug("     Procesando datos de la DOSIS ADMINISTRADA ("
                    + rxa.getAdministeredAmount().getValue() + ")"); //RXA.6
            if (StringUtils.isNotBlank(rxa.getAdministeredAmount().getValue())
                    && NumberUtils.isNumber(rxa.getAdministeredAmount().getValue())) {
                try {
                    dosis_administrada = NumberUtils.createDouble(rxa.getAdministeredAmount().getValue());
                    logger.debug("          RXA.6 - Dosis Administrada: " + dosis_administrada);
                } catch (Exception e) {
                    logger.error(
                            "          No se puede procesar el movimiento porque la INFORMACION en el CAMPO RXA.6 - DOSIS ADMINISTRADA ("
                                    + rxa.getAdministeredAmount().getValue() + ") NO es correcta");
                    resultado.add(
                            "No se puede procesar el movimiento porque la INFORMACION en el CAMPO: DOSIS ADMINISTRADA ("
                                    + rxa.getAdministeredAmount().getValue() + ") NO es correcta");
                }
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin INFORMACION en el CAMPO RXA.6 - Dosis Administrada ("
                                + rxa.getAdministeredAmount().getValue() + ")");
                resultado.add(
                        "No se puede procesar el movimiento sin INFORMACION en el CAMPO: Dosis Administrada ("
                                + rxa.getAdministeredAmount().getValue() + ")");
            }

            //RXA.7 - Forma Farmaceutica de la Dosis Administrada
            logger.debug("     Procesando la FORMA FARMACEUTICA DE LA DOSIS ADMINISTRADA ("
                    + rxa.getAdministeredUnits().getIdentifier().getValue() + ") "
                    + rxa.getAdministeredUnits().getText().getValue());
            FormasFarExt formasFarExt = new FormasFarExt();
            try {
                formasFarExt.setCentros(centros);
                formasFarExt.setCodFormaFarExt(rxa.getAdministeredUnits().getIdentifier().getValue()); //RXA.7.1
                formasFarExt.setTxtFormaFarExt(rxa.getAdministeredUnits().getText().getValue()); //RXA.7.2
                formasFarExt = formasFarExtService.traducirEquivalenciaAndInsert(formasFarExt);
                logger.debug("          RXA.7 - Forma Farmaceutica de la Dosis Administrada: "
                        + formasFarExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(rxa.getAdministeredUnits().getIdentifier().getValue())) {
                    logger.warn(
                            "               No se ha indicado INFORMACION para el CAMPO RXA.7 - FORMA FARMACEUTICA DE LA DOSIS ADMINISTRADA ("
                                    + rxa.getAdministeredUnits().getIdentifier().getValue() + ") "
                                    + rxa.getAdministeredUnits().getText().getValue());
                } else {
                    logger.warn(
                            "               No se ha encontrado EQUIVALENCIA para el CAMPO RXA.7 - FORMA FARMACEUTICA DE LA DOSIS ADMINISTRADA ("
                                    + rxa.getAdministeredUnits().getIdentifier().getValue() + ") "
                                    + rxa.getAdministeredUnits().getText().getValue());
                }
            }

            //RXA.9 - Pautas
            logger.debug(
                    "     Procesando de la PAUTA (" + rxa.getAdministrationNotes(0).getIdentifier().getValue()
                            + ") " + rxa.getAdministrationNotes(0).getText().getValue());
            PautasExt pautasExt = new PautasExt();
            try {
                pautasExt.setCentros(centros);
                pautasExt.setCodPautaExt(rxa.getAdministrationNotes(0).getIdentifier().getValue()); //RXA.9.1
                pautasExt.setTxtPautaExt(rxa.getAdministrationNotes(0).getText().getValue()); //RXA.9.2
                pautasExt = pautasExtService.traducirEquivalenciaAndInsert(pautasExt);
                logger.debug("          RXA.9 - Pauta: " + pautasExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(rxa.getAdministrationNotes(0).getIdentifier().getValue())) {
                    logger.warn("               No se ha indicado INFORMACION para el CAMPO RXA.9 - PAUTA ("
                            + rxa.getAdministrationNotes(0).getIdentifier().getValue() + ") "
                            + rxa.getAdministrationNotes(0).getText().getValue());
                } else {
                    logger.warn("               No se ha encontrado EQUIVALENCIA para el CAMPO RXA.9 - PAUTA ("
                            + rxa.getAdministrationNotes(0).getIdentifier().getValue() + ") "
                            + rxa.getAdministrationNotes(0).getText().getValue());
                }
            }

            //RXA.19 - Secuencias
            logger.debug("     Procesando de la SECUENCIA (" + rxa.getIndication(0).getIdentifier().getValue()
                    + ") " + rxa.getIndication(0).getText().getValue());
            SecuenciasExt secuenciasExt = new SecuenciasExt();
            try {
                secuenciasExt.setCentros(centros);
                secuenciasExt.setCodSecuenciaExt(rxa.getIndication(0).getIdentifier().getValue()); //RXA.19.1
                secuenciasExt.setTxtSecuenciaExt(rxa.getIndication(0).getText().getValue()); //RXA.19.2
                secuenciasExt = secuenciasExtService.traducirEquivalenciaAndInsert(secuenciasExt);
                logger.debug("          RXA.19 - Secuencia: " + secuenciasExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(rxa.getIndication(0).getIdentifier().getValue())) {
                    logger.warn(
                            "               No se ha indicado INFORMACION para el CAMPO RXA.19 - SECUENCIA ("
                                    + rxa.getIndication(0).getIdentifier().getValue() + ") "
                                    + rxa.getIndication(0).getText().getValue());
                } else {
                    logger.warn(
                            "               No se ha encontrado EQUIVALENCIA para el CAMPO RXA.19 - SECUENCIA ("
                                    + rxa.getIndication(0).getIdentifier().getValue() + ") "
                                    + rxa.getIndication(0).getText().getValue());
                }
            }

            //RXO.2 - Dosis Prescrita en Unidad de Medida
            Double dosis_prescrita = null;
            logger.debug("     Procesando datos de la DOSIS PRESCRITA ("
                    + rxo.getRequestedGiveAmountMinimum().getValue() + ")"); //RXO.2
            if (StringUtils.isNotBlank(rxo.getRequestedGiveAmountMinimum().getValue())
                    && NumberUtils.isNumber(rxo.getRequestedGiveAmountMinimum().getValue())) {
                try {
                    dosis_prescrita = NumberUtils.createDouble(rxo.getRequestedGiveAmountMinimum().getValue());
                    logger.debug("          RXO.2 - Dosis Prescrita: " + dosis_prescrita);
                } catch (Exception e) {
                    logger.error(
                            "          No se puede procesar el movimiento porque la INFORMACION en el campo RXO.2 - DOSIS PRESCRITA ("
                                    + rxo.getRequestedGiveAmountMinimum().getValue() + ") NO es correcta");
                    resultado.add(
                            "No se puede procesar el movimiento porque la INFORMACION en el CAMPO: DOSIS PRESCRITA ("
                                    + rxo.getRequestedGiveAmountMinimum().getValue() + ") NO es correcta");
                }
            } else {
                logger.error(
                        "          No se puede procesar el movimiento sin datos en el campo RXO.2 - DOSIS PRESCRITA ("
                                + rxo.getRequestedGiveAmountMinimum().getValue() + ")");
                resultado
                        .add("No se puede procesar el movimiento sin INFORMACION en el CAMPO: DOSIS PRESCRITA ("
                                + rxo.getRequestedGiveAmountMinimum().getValue() + ")");
            }

            //RXO.4 - Unidad de Medida de la Dosis Prescrita
            logger.debug("     Procesando datos de la UNIDAD DE MEDIDA DE LA DOSIS PRESCRITA ("
                    + rxo.getRequestedGiveUnits().getIdentifier().getValue() + ") "
                    + rxo.getRequestedGiveUnits().getText().getValue());
            UnidMedExt unidMedExt = new UnidMedExt();
            try {
                unidMedExt.setCentros(centros);
                unidMedExt.setCodUnidMedExt(rxo.getRequestedGiveUnits().getIdentifier().getValue()); //Z01.10.1
                unidMedExt.setTxtUnidMedExt(rxo.getRequestedGiveUnits().getText().getValue()); //Z01.10.2
                unidMedExt = unidMedExtService.traducirEquivalenciaAndInsert(unidMedExt);
                logger.debug(
                        "          RXO.4 - Unidad de Medida de la Dosis Prescrita: " + unidMedExt.toString());
            } catch (NoExisteEquivalenciaException neee) {
                if (StringUtils.isNotBlank(rxo.getRequestedGiveUnits().getIdentifier().getValue())) {
                    logger.warn(
                            "               No se ha indicado INFORMACION para el CAMPO RXO.4 - UNIDAD DE MEDIDA DE LA DOSIS PRESCRITA ("
                                    + rxo.getRequestedGiveUnits().getIdentifier().getValue() + ") "
                                    + rxo.getRequestedGiveUnits().getText().getValue());
                } else {
                    logger.warn(
                            "               No se ha encontrado EQUIVALENCIA para el CAMPO RXO.4 - UNIDAD DE MEDIDA DE LA DOSIS PRESCRITA ("
                                    + rxo.getRequestedGiveUnits().getIdentifier().getValue() + ") "
                                    + rxo.getRequestedGiveUnits().getText().getValue());
                }
            }

            //RESULTADO GENERAL DEL PROCESADO DEL MOVIMIENTO
            String mensaje = "";
            if (!resultado.isEmpty()) {
                logger.error("RESULTADO GENERAL DEL PROCESADO: ");
                for (String linea : resultado) {
                    mensaje += "     - " + linea + "\n";
                }
                logger.error("     " + mensaje);
            }

            if (StringUtils.isNotBlank(mensaje)) {
                throw new Exception(mensaje);
            }
            logger.info("FINALIZANDO EL PROCESADO DEL MOVIMIENTO ENTRANTE ENTRANTE");

            //ALMACENAMIENTO DEL MOVIMIENTO
            logger.info("INICIANDO EL ALMACENAMIENTO DEL MOVIMIENTO ENTRANTE");

            //PACIENTE
            try {
                logger.debug("     Buscando PACIENTE por CIPA (" + pacientes.getCipa() + ")");
                pacientes = pacientesService.findByCIPA(pacientes);
            } catch (NoResultException nre) {
                logger.debug("          Almacenando datos del PACIENTE");
                pacientes.setSexos(sexosExt.getSexos());
                pacientes = pacientesService.save(pacientes);
            } finally {
                logger.debug("          Paciente: " + pacientes.toString());
            }

            //EPISODIO
            try {
                episodios.setNhc(nhc);
                episodios.setCentros(centros);
                episodios.setPacientes(pacientes);

                logger.debug("     Buscando EPISODIO por COD_EPISODIO (" + episodios.getCodEpisodio()
                        + "), NHC (" + episodios.getNhc() + "), PROGRAMA (" + episodios.getProgramas()
                        + "), CENTRO (" + episodios.getCentros() + ")");
                episodios = episodiosService.findByCodEpisodioNHCIdProgramaIdCentro(episodios);
            } catch (NoResultException nre) {
                logger.debug("          Almacenando datos del EPISODIO");
                episodios = episodiosService.save(episodios);
            } finally {
                logger.debug("          Episodio: " + episodios.toString());
            }

            //PRESCRIPCIONES
            Prescripciones prescripciones = new Prescripciones();
            try {
                prescripciones.setCodPrescripcion(cod_prescripcion);
                logger.debug("     Buscando PRESCRIPCION por COD_PRESCRIPCION ("
                        + prescripciones.getCodPrescripcion() + ")");
                prescripciones = prescripcionesService.findByCodPrescripcion(prescripciones);
            } catch (NoResultException nre) {
                logger.debug("          Almacenando datos de la PRESCRIPCION: (" + cod_prescripcion + ")");
                Prescripciones prescripcionesOld = new Prescripciones();
                prescripcionesOld
                        .setCodPrescripcion(StringUtils.split(prescripciones.getCodPrescripcion(), "-")[0] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[1] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[2] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[3] + "-"
                                + StringUtils.split(prescripciones.getCodPrescripcion(), "-")[4]);
                List<Prescripciones> prescripcioneses = prescripcionesService
                        .findLikeCodPrescripcion(prescripcionesOld);
                for (Prescripciones prescripcionesUpd : prescripcioneses) {
                    if (StringUtils.equals(StringUtils.split(prescripcionesUpd.getCodPrescripcion(), "-")[7],
                            StringUtils.split(prescripciones.getCodPrescripcion(), "-")[7])) {
                        logger.debug("               Estableciendo fecha de fin en la prescripcion: "
                                + prescripcionesUpd.toString());
                        prescripcionesUpd.setFechaFin(new Date());
                        prescripcionesService.save(prescripcionesUpd);
                    }
                }

                prescripciones.setEpisodios(episodios);
                prescripciones.setMarcas(marcas);
                prescripciones.setMedicos(medicos);
                prescripciones.setDosis(dosis_prescrita);
                prescripciones.setFechaIni(fecha_ini_prescripcion);
                prescripciones.setPautas(pautasExt.getPautas());
                prescripciones.setSecuencias(secuenciasExt.getSecuencias());
                prescripciones.setCodPrescripcion(cod_prescripcion);
                prescripciones.setUnidMed(unidMedExt.getUnidMed());
                prescripciones = prescripcionesService.save(prescripciones);
            } finally {
                logger.debug("          Prescripcion: " + prescripciones.toString());
            }

            //ADMINISTRACIONES
            Administraciones administraciones = new Administraciones();
            try {
                administraciones.setCodAdministracion(cod_administracion);
                logger.debug("     Buscando ADMINISTRACIONES por COD_ADMINISTRACION ("
                        + administraciones.getCodAdministracion() + ")");
                administraciones = findByCodAdministracion(administraciones);
            } catch (NoResultException nre) {
                administraciones.setPrescripciones(prescripciones);
                administraciones.setFormasFar(formasFarExt.getFormasFar());
                administraciones.setCantidad(dosis_administrada);
                administraciones.setFechaAdm(fecha_administracion);
                save(administraciones);
            } finally {
                logger.debug("          Administraciones: " + administraciones.toString());
            }
            logger.info("FINALIZANDO EL ALMACENAMIENTO DEL MOVIMIENTO ENTRANTE");
        }
    } catch (Exception e) {
        throw new Exception("SE HAN PRODUCIDO ERRORES AL PROCESAR EL MOVIMIENTO: \n" + e.getMessage() != null
                ? e.getMessage()
                : e.toString());
    }
}