com.dominion.salud.nomenclator.negocio.service.impl.aemps.v6.MedicamentosV6ServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.dominion.salud.nomenclator.negocio.service.impl.aemps.v6.MedicamentosV6ServiceImpl.java

Source

/*
 * Copyright (C) 2015 Dominion Global
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.dominion.salud.nomenclator.negocio.service.impl.aemps.v6;

import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosViasAdminType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosExcipientesType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosPrincipiosActivosType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.AempsMedicamentos;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.AtcDesaconsejadosType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.AtcDuplicidadesType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.AtcInteraccionesType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosAtcType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosFormafarmaceuticaType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosNotasType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v6.MedicamentosType;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Atc;
import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcDesacon;
import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcDuplicidades;
import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcInteracciones;
import com.dominion.salud.nomenclator.negocio.entities.aemps.AtcTeratogenias;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Dcp;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Dcpf;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Dcsa;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Envases;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Excipientes;
import com.dominion.salud.nomenclator.negocio.entities.aemps.FormasFar;
import com.dominion.salud.nomenclator.negocio.entities.aemps.FormasFarSimp;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Laboratorios;
import com.dominion.salud.nomenclator.negocio.entities.aemps.MedAtc;
import com.dominion.salud.nomenclator.negocio.entities.aemps.MedExcipientes;
import com.dominion.salud.nomenclator.negocio.entities.aemps.MedNotas;
import com.dominion.salud.nomenclator.negocio.entities.aemps.MedPrincipios;
import com.dominion.salud.nomenclator.negocio.entities.aemps.MedVias;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Medicamentos;
import com.dominion.salud.nomenclator.negocio.entities.aemps.Notas;
import com.dominion.salud.nomenclator.negocio.entities.aemps.PrincipiosActivos;
import com.dominion.salud.nomenclator.negocio.entities.aemps.SituacionRegistro;
import com.dominion.salud.nomenclator.negocio.entities.aemps.UnidadesContenido;
import com.dominion.salud.nomenclator.negocio.entities.aemps.UnidadesDosis;
import com.dominion.salud.nomenclator.negocio.entities.aemps.ViasAdmin;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.AtcDesaconRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.AtcRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.AtcTeratogeniasRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.DcpRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.DcpfRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.DcsaRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.EnvasesRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.ExcipientesRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.FormasFarRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.FormasFarSimpRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.LaboratoriosRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.MedicamentosRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.NotasRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.PrincipiosActivosRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.SituacionRegistroRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.UnidadesContenidoRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.UnidadesDosisRepository;
import com.dominion.salud.nomenclator.negocio.repositories.aemps.ViasAdminRepository;
import com.dominion.salud.nomenclator.negocio.service.aemps.AtcDuplicidadesService;
import com.dominion.salud.nomenclator.negocio.service.aemps.AtcInteraccionesService;
import com.dominion.salud.nomenclator.negocio.service.aemps.MedAtcService;
import com.dominion.salud.nomenclator.negocio.service.aemps.MedExcipientesService;
import com.dominion.salud.nomenclator.negocio.service.aemps.MedNotasService;
import com.dominion.salud.nomenclator.negocio.service.aemps.MedPrincipiosService;
import com.dominion.salud.nomenclator.negocio.service.aemps.MedViasService;
import java.io.File;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.persistence.NoResultException;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author jcgonzalez
 */
@Service("medicamentosV6ServiceImpl")
public class MedicamentosV6ServiceImpl {

    private static final Logger logger = LoggerFactory.getLogger(MedicamentosV6ServiceImpl.class);

    @Autowired
    private MedicamentosRepository medicamentosRepository;

    @Autowired
    private SituacionRegistroRepository situacionRegistroRepository;
    @Autowired
    private DcpRepository dcpRepository;
    @Autowired
    private DcpfRepository dcpfRepository;
    @Autowired
    private DcsaRepository dcsaRepository;
    @Autowired
    private EnvasesRepository envasesRepository;
    @Autowired
    private FormasFarRepository formasFarRepository;
    @Autowired
    private FormasFarSimpRepository formasFarSimpRepository;
    @Autowired
    private LaboratoriosRepository laboratoriosRepository;
    @Autowired
    private UnidadesContenidoRepository unidadesContenidoRepository;

    @Autowired
    private MedExcipientesService medExcipientesService;
    @Autowired
    private ExcipientesRepository excipientesRepository;

    @Autowired
    private MedPrincipiosService medPrincipiosService;
    @Autowired
    private PrincipiosActivosRepository principiosActivosRepository;
    @Autowired
    private UnidadesDosisRepository unidadesDosisRepository;

    @Autowired
    private MedViasService medViasAdminService;
    @Autowired
    private ViasAdminRepository viasAdminRepository;

    @Autowired
    private MedNotasService medNotasService;
    @Autowired
    private NotasRepository notasRepository;

    @Autowired
    private MedAtcService medAtcService;
    @Autowired
    private AtcRepository atcRepository;
    @Autowired
    private AtcInteraccionesService atcInteraccionesService;
    @Autowired
    private AtcDuplicidadesService atcDuplicidadesService;
    @Autowired
    private AtcTeratogeniasRepository atcTeratogeniasRepository;
    @Autowired
    private AtcDesaconRepository atcDesaconRepository;

    public void load(File xml) throws JAXBException {
        JAXBContext jaxbContext = JAXBContext.newInstance(AempsMedicamentos.class);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

        AempsMedicamentos aempsMedicamentos = (AempsMedicamentos) jaxbUnmarshaller.unmarshal(xml);
        if (aempsMedicamentos != null && aempsMedicamentos.getPrescription() != null
                && !aempsMedicamentos.getPrescription().isEmpty()) {
            Set<String> mensajes = new HashSet<>();
            int contador = 1;

            logger.info("     Se han encontrado " + aempsMedicamentos.getPrescription().size() + " registros.");
            Iterator<MedicamentosType> iterador = aempsMedicamentos.getPrescription().iterator();
            while (iterador.hasNext()) {
                MedicamentosType medicamentosType = iterador.next();
                try {
                    logger.debug("     Procesando el registro " + contador + " de "
                            + aempsMedicamentos.getPrescription().size());
                    loadMedicamento(medicamentosType);
                } catch (Exception e) {
                    logger.error("     No se ha podido cargar el registro con COD_NAC: "
                            + medicamentosType.getCodNacion() + ": " + e.toString());
                    mensajes.add("No se ha podido cargar el registro con COD_NAC: "
                            + medicamentosType.getCodNacion() + ": " + e.toString());
                }
                contador++;
            }

            if (!mensajes.isEmpty()) {
                logger.warn("     Se han producido los siguientes errores en la carga de registros: ");
                Iterator<String> iteradorMensajes = mensajes.iterator();
                while (iteradorMensajes.hasNext()) {
                    logger.warn("          - " + iteradorMensajes.next());
                }
            }
        }
    }

    @Transactional
    private void loadMedicamento(MedicamentosType medicamentosType) throws Exception {
        Medicamentos medicamentos = new Medicamentos();
        medicamentos.setCodNacional(medicamentosType.getCodNacion());

        try {
            logger.debug("     Cargando MEDICAMENTOS para el COD_NAC: " + medicamentos.getCodNacional());
            medicamentos = medicamentosRepository.findByCodNac(medicamentos);
            logger.debug("     Se ha encontrado MEDICAMENTOS con COD_NAC: " + medicamentos.getCodNacional()
                    + ". Actualizando registro: " + medicamentos.toString());
        } catch (NoResultException nre) {
            logger.debug("     No se ha encontrado MEDICAMENTOS con COD_NAC: " + medicamentos.getCodNacional()
                    + ". Insertando nuevo registro: " + medicamentos.toString());
        } finally {
            medicamentos.setNroPactiv(0);
            medicamentos.setFecSitReg(medicamentosType.getFechaSituacionRegistro() != null
                    ? medicamentosType.getFechaSituacionRegistro().toGregorianCalendar().getTime()
                    : null);
            medicamentos.setFecSitRegPresen(medicamentosType.getFecSitregPresen() != null
                    ? medicamentosType.getFecSitregPresen().toGregorianCalendar().getTime()
                    : null);
            medicamentos.setTxtDesComercial(medicamentosType.getDesNomco());
            medicamentos.setTxtDesDosific(medicamentosType.getDesDosific());
            medicamentos.setTxtDesPresen(medicamentosType.getDesPrese());
            medicamentos.setFecAutorizacion(medicamentosType.getFechaAutorizacion() != null
                    ? medicamentosType.getFechaAutorizacion().toGregorianCalendar().getTime()
                    : null);
            medicamentos.setFecComer(medicamentosType.getFecComer() != null
                    ? medicamentosType.getFecComer().toGregorianCalendar().getTime()
                    : null);
            medicamentos.setAfectaConduccion(medicamentosType.isSwAfectaConduccion() ? "S" : "N");
            medicamentos.setBaseAPlantas(medicamentosType.isSwBaseAPlantas() ? "S" : "N");
            medicamentos.setBiosimilar(medicamentosType.isBiosimilar() ? "S" : "N");
            medicamentos.setComercializado(medicamentosType.isSwComercializado() ? "S" : "N");
            medicamentos.setContenido(medicamentosType.getContenido());
            medicamentos.setDiagHospitalario(medicamentosType.isSwDiagnosticoHospitalario() ? "S" : "N");
            medicamentos.setEnvaseClinico(medicamentosType.isSwEnvaseClinico() ? "S" : "N");
            medicamentos.setEspecialCtrlMed(medicamentosType.isSwEspecialControlMedico() ? "S" : "N");
            medicamentos.setEstupefaciente(medicamentosType.isSwEstupefaciente() ? "S" : "N");
            medicamentos.setExcipDeclOblig(medicamentosType.isSwTieneExcipientesDeclObligatoria() ? "S" : "N");
            medicamentos.setGenerico(medicamentosType.isSwGenerico() ? "S" : "N");
            medicamentos.setHuerfano(medicamentosType.isSwHuerfano() ? "S" : "N");
            medicamentos.setListaEstupe(medicamentosType.getListaEstupefaciente());
            medicamentos.setListaPsicotropo(medicamentosType.getListaPsicotropo());
            medicamentos.setNroConte(medicamentosType.getNroConte());
            medicamentos.setNroRegistro(medicamentosType.getNroDefinitivo());
            medicamentos.setPsicotropo(medicamentosType.isSwPsicotropo() ? "S" : "N");
            medicamentos.setSustituible(medicamentosType.isSwSustituible() ? "S" : "N");
            medicamentos.setTld(medicamentosType.isSwTld() ? "S" : "N");
            medicamentos.setTrianguloNegro(medicamentosType.isSwTrianguloNegro() ? "S" : "N");
            medicamentos.setUsoHospitalario(medicamentosType.isSwUsoHospitalario() ? "S" : "N");
            medicamentos.setUrlFictec(medicamentosType.getUrlFictec());
            medicamentos.setUrlProsp(medicamentosType.getUrlProsp());

            //SIT_REG
            try {
                logger.debug("          Cargando SIT_REG para el COD_SIT_REG: " + medicamentosType.getCodSitreg());
                SituacionRegistro situacionRegistro = new SituacionRegistro();
                situacionRegistro.setCodSitReg(Integer.toString(medicamentosType.getCodSitreg()));

                medicamentos.setSitReg(situacionRegistroRepository.findByCodSituacionRegistro(situacionRegistro));
                logger.debug("          SIT_REG para el COD_SIT_REG: " + situacionRegistro.getCodSitReg()
                        + " cargado correctamente");
            } catch (NoResultException nre) {
                logger.warn("          No se ha encontrado SIT_REG con COD_SIT_REG: "
                        + medicamentosType.getCodSitreg());
            }

            //SIT_REG_DOS_PRESEN
            try {
                logger.debug("          Cargando SIT_REG_DOS_PRESEN para el COD_SIT_REG_DOS_PRESEN: "
                        + medicamentosType.getCodSitregPresen());
                SituacionRegistro situacionRegistroDosPresen = new SituacionRegistro();
                situacionRegistroDosPresen.setCodSitReg(Integer.toString(medicamentosType.getCodSitregPresen()));

                medicamentos.setSitRegPresen(
                        situacionRegistroRepository.findByCodSituacionRegistro(situacionRegistroDosPresen));
                logger.debug("          SIT_REG_DOS_PRESEN para el COD_SIT_REG_DOS_PRESEN: "
                        + situacionRegistroDosPresen.getCodSitReg() + " cargado correctamente");
            } catch (NoResultException nre) {
                logger.warn("          No se ha encontrado SIT_REG_DOS_PRESEN con COD_SIT_REG_DOS_PRESEN: "
                        + medicamentosType.getCodSitregPresen());
            }

            //DCP
            if (medicamentosType.getCodDcp() != null) {
                try {
                    logger.debug("          Cargando DCP para el COD_DCP: " + medicamentosType.getCodDcp());
                    Dcp dcp = new Dcp();
                    dcp.setCodDcp(new DecimalFormat("#.#").format(medicamentosType.getCodDcp()));

                    medicamentos.setDcp(dcpRepository.findByCodDcp(dcp));
                    logger.debug("          DCP para el COD_DCP: " + dcp.getCodDcp() + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn("          No se ha encontrado DCP con COD_DCP: " + medicamentosType.getCodDcp());
                }
            }

            //DCPF
            if (medicamentosType.getCodDcpf() != null) {
                try {
                    logger.debug("          Cargando DCPF para el COD_DCPF: " + medicamentosType.getCodDcpf());
                    Dcpf dcpf = new Dcpf();
                    dcpf.setCodDcpf(new DecimalFormat("#.#").format(medicamentosType.getCodDcpf()));

                    medicamentos.setDcpf(dcpfRepository.findByCodDcpf(dcpf));
                    logger.debug(
                            "          DCPF para el COD_DCPF: " + dcpf.getCodDcpf() + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn(
                            "          No se ha encontrado DCPF con COD_DCPF: " + medicamentosType.getCodDcpf());
                }
            }

            //DCSA
            if (medicamentosType.getCodDcsa() != null) {
                try {
                    logger.debug("          Cargando DCSA para el COD_DCSA: " + medicamentosType.getCodDcsa());
                    Dcsa dcsa = new Dcsa();
                    dcsa.setCodDcsa(new DecimalFormat("#.#").format(medicamentosType.getCodDcsa()));

                    medicamentos.setDcsa(dcsaRepository.findByCodDcsa(dcsa));
                    logger.debug(
                            "          DCSA para el COD_DCSA: " + dcsa.getCodDcsa() + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn(
                            "          No se ha encontrado DCSA con COD_DCSA: " + medicamentosType.getCodDcsa());
                }
            }

            //ENVASES
            if (medicamentosType.getCodEnvase() != null) {
                try {
                    Envases envases = new Envases();
                    envases.setCodEnvase(Integer.toString(medicamentosType.getCodEnvase()));

                    logger.debug(
                            "          Cargando ENVASES para el COD_ENVASE: " + medicamentosType.getCodEnvase());
                    medicamentos.setEnvases(envasesRepository.findByCodEnvase(envases));
                    logger.debug("          ENVASE para el COD_ENVASE: " + envases.getCodEnvase()
                            + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn("          No se ha encontrado ENVASES con COD_ENVASE: "
                            + medicamentosType.getCodEnvase());
                }
            }

            //LAB_COMER
            if (medicamentosType.getLaboratorioComercializador() != null) {
                try {
                    Laboratorios labComer = new Laboratorios();
                    labComer.setCodLaboratorio(Integer.toString(medicamentosType.getLaboratorioComercializador()));

                    logger.debug("          Cargando LAB_COMER para el COD_LABORATORIO: "
                            + medicamentosType.getLaboratorioComercializador());
                    medicamentos.setLaboratoriosComer(laboratoriosRepository.findByCodLaboratorio(labComer));
                    logger.debug("          LAB_COMER para el COD_LABORATORIO: " + labComer.getCodLaboratorio()
                            + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn("          No se ha encontrado LAB_COMER con COD_LABORATORIO: "
                            + medicamentosType.getLaboratorioComercializador());
                }
            }

            //LAB_TITULAR
            if (medicamentosType.getLaboratorioTitular() != null) {
                try {
                    Laboratorios labTit = new Laboratorios();
                    labTit.setCodLaboratorio(Integer.toString(medicamentosType.getLaboratorioTitular()));

                    logger.debug("          Cargando LAB_TITULAR para el COD_LABORATORIO: "
                            + medicamentosType.getLaboratorioTitular());
                    medicamentos.setLaboratoriosTit(laboratoriosRepository.findByCodLaboratorio(labTit));
                    logger.debug("          LAB_TITULAR para el COD_LABORATORIO: "
                            + Integer.toString(medicamentosType.getLaboratorioTitular())
                            + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn("          No se ha encontrado LAB_TITULAR con COD_LABORATORIO: "
                            + medicamentosType.getLaboratorioTitular());
                }
            }

            //UNIDAD_CONTENIDO
            if (medicamentosType.getUnidContenido() != null) {
                try {
                    UnidadesContenido unidadesContenido = new UnidadesContenido();
                    unidadesContenido.setCodUnidContenido(Integer.toString(medicamentosType.getUnidContenido()));

                    logger.debug("          Cargando UNIDAD_CONTENIDO para el COD_UNID_CONTENIDO: "
                            + medicamentosType.getUnidContenido());
                    medicamentos.setUnidadesContenido(
                            unidadesContenidoRepository.findByCodUnidContenido(unidadesContenido));
                    logger.debug("          UNIDAD_CONTENIDO para el COD_UNID_CONTENIDO: "
                            + unidadesContenido.getCodUnidContenido() + " cargado correctamente");
                } catch (NoResultException nre) {
                    logger.warn("          No se ha encontrado UNIDAD_CONTENIDO con COD_UNID_CONTENIDO: "
                            + medicamentosType.getUnidContenido());
                }
            }
            medicamentosRepository.save(medicamentos);

            //FORMAS_FARMACEUTICAS
            if (medicamentosType.getFormasfarmaceuticas() != null
                    && !medicamentosType.getFormasfarmaceuticas().isEmpty()) {
                Iterator<MedicamentosFormafarmaceuticaType> iteradorMedicamentosFormafarmaceuticaType = medicamentosType
                        .getFormasfarmaceuticas().iterator();
                while (iteradorMedicamentosFormafarmaceuticaType.hasNext()) {
                    MedicamentosFormafarmaceuticaType medicamentosFormafarmaceuticaType = iteradorMedicamentosFormafarmaceuticaType
                            .next();

                    //NRO_PACTIV
                    medicamentos.setNroPactiv(medicamentosFormafarmaceuticaType.getNroPactiv());
                    medicamentosRepository.save(medicamentos);

                    //FORMAS_FAR
                    if (medicamentosFormafarmaceuticaType.getCodForfar() != null) {
                        try {
                            FormasFar formasFar = new FormasFar();
                            formasFar.setCodFormaFar(
                                    Integer.toString(medicamentosFormafarmaceuticaType.getCodForfar()));

                            logger.debug("          Cargando FORMAS_FAR para el COD_FORMA_FAR: "
                                    + medicamentosFormafarmaceuticaType.getCodForfar());
                            medicamentos.setFormasFar(formasFarRepository.findByCodFormaFar(formasFar));
                            logger.debug("          FORMAS_FAR para el COD_FORMA_FAR: " + formasFar.getCodFormaFar()
                                    + " cargado correctamente");
                        } catch (NoResultException nre) {
                            logger.warn("          No se ha encontrado FORMAS_FAR con COD_FORMA_FAR: "
                                    + medicamentosFormafarmaceuticaType.getCodForfar());
                        }
                    }

                    //FORMAS_FAR_SIMP
                    if (medicamentosFormafarmaceuticaType.getCodForfarSimplificada() != null) {
                        try {
                            FormasFarSimp formasFarSimp = new FormasFarSimp();
                            formasFarSimp.setCodFormaFarSimp(
                                    Integer.toString(medicamentosFormafarmaceuticaType.getCodForfarSimplificada()));

                            logger.debug("          Cargando FORMAS_FAR_SIMP para el COD_FORMA_FAR_SIMP: "
                                    + medicamentosFormafarmaceuticaType.getCodForfarSimplificada());
                            medicamentos
                                    .setFormasfarSimp(formasFarSimpRepository.findByCodFormaFarSimp(formasFarSimp));
                            logger.debug("          FORMAS_FAR_SIMP para el COD_FORMA_FAR_SIMP: "
                                    + formasFarSimp.getCodFormaFarSimp() + " cargado correctamente");
                        } catch (NoResultException nre) {
                            logger.warn("          No se ha encontrado FORMAS_FAR_SIMP con COD_FORMA_FAR_SIMP: "
                                    + medicamentosFormafarmaceuticaType.getCodForfarSimplificada());
                        }
                    }

                    //MED_PRINCIPIOS
                    if (medicamentosFormafarmaceuticaType.getComposicionPa() != null
                            && !medicamentosFormafarmaceuticaType.getComposicionPa().isEmpty()) {
                        logger.debug("          Cargando MED_PRINCIPIOS");
                        List<MedPrincipios> listaMedPrincipios = new ArrayList<>();

                        Iterator<MedicamentosPrincipiosActivosType> iteradorMedicamentosPrincipiosActivos = medicamentosFormafarmaceuticaType
                                .getComposicionPa().iterator();
                        while (iteradorMedicamentosPrincipiosActivos.hasNext()) {
                            MedicamentosPrincipiosActivosType medicamentosPrincipiosActivosType = iteradorMedicamentosPrincipiosActivos
                                    .next();

                            try {

                                PrincipiosActivos principiosActivos = new PrincipiosActivos();
                                principiosActivos.setNroPrActivo(Integer
                                        .toString(medicamentosPrincipiosActivosType.getCodPrincipioActivo()));
                                logger.debug(
                                        "               Cargando PRINCIPIOS_ACTIVOS para el NRO_PRINCIPIO_ACTIVO: "
                                                + medicamentosPrincipiosActivosType.getCodPrincipioActivo());
                                MedPrincipios medPrincipios = new MedPrincipios();
                                medPrincipios.setPrincipiosActivos(
                                        principiosActivosRepository.findByNroPrActivo(principiosActivos));
                                medPrincipios.setMedicamentos(medicamentos);

                                //UNID_CONT_ADM (U_C)
                                if (medicamentosPrincipiosActivosType.getUnidadAdministracion() != null) {
                                    try {
                                        UnidadesContenido uniContAdm = new UnidadesContenido();
                                        uniContAdm.setTxtUnidContenido(
                                                medicamentosPrincipiosActivosType.getUnidadAdministracion());

                                        logger.debug(
                                                "                    Cargando UNID_CONT_ADM para el TXT_UNID_CONT: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadAdministracion());
                                        medPrincipios.setUniContAdm(
                                                unidadesContenidoRepository.findByTxtUnidContenido(uniContAdm));
                                        logger.debug("                    UNID_CONT_ADM para el TXT_UNID_CONT: "
                                                + uniContAdm.getTxtUnidContenido() + " cargado correctamente");
                                    } catch (NoResultException nre) {
                                        logger.warn(
                                                "                    No se ha encontrado UNID_CONT_ADM con TXT_UNID_CONT: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadAdministracion());
                                    }
                                }

                                //UNI_CONT_COMP (U_C)
                                if (medicamentosPrincipiosActivosType.getUnidadComposicion() != null) {
                                    try {
                                        UnidadesContenido uniContComp = new UnidadesContenido();
                                        uniContComp.setTxtUnidContenido(
                                                medicamentosPrincipiosActivosType.getUnidadComposicion());

                                        logger.debug(
                                                "                    Cargando UNI_CONT_COMP para el TXT_UNID_CONT: "
                                                        + medicamentosPrincipiosActivosType.getUnidadComposicion());
                                        medPrincipios.setUniContComp(
                                                unidadesContenidoRepository.findByTxtUnidContenido(uniContComp));
                                        logger.debug("                    UNI_CONT_COMP para el TXT_UNID_CONT: "
                                                + uniContComp.getTxtUnidContenido() + " cargado correctamente");
                                    } catch (NoResultException nre) {
                                        logger.warn(
                                                "                    No se ha encontrado UNI_CONT_COMP con TXT_UNID_CONT: "
                                                        + medicamentosPrincipiosActivosType.getUnidadComposicion());
                                    }
                                }

                                //UNI_DOSIS_PA (U_D)
                                if (medicamentosPrincipiosActivosType.getUnidadDosisPa() != null) {
                                    try {
                                        UnidadesDosis uniDosisPa = new UnidadesDosis();
                                        uniDosisPa.setTxtUnidadDosis(
                                                medicamentosPrincipiosActivosType.getUnidadDosisPa());

                                        logger.debug(
                                                "                    Cargando UNI_DOSIS_PA para el TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType.getUnidadDosisPa());
                                        medPrincipios.setUniDosisPa(
                                                unidadesDosisRepository.findByTxtUnidadDosis(uniDosisPa));
                                        logger.debug("                    UNI_DOSIS_PA para el TXT_UNID_DOSIS: "
                                                + uniDosisPa.getTxtUnidadDosis() + " cargado correctamente");
                                    } catch (NoResultException nre) {
                                        logger.warn(
                                                "                    No se ha encontrado UNI_DOSIS_PA con TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType.getUnidadDosisPa());
                                    }
                                }

                                //UNI_DOSIS_PRES (U_D)
                                if (medicamentosPrincipiosActivosType.getUnidadPrescripcion() != null) {
                                    try {
                                        UnidadesDosis uniDosisPre = new UnidadesDosis();
                                        uniDosisPre.setTxtUnidadDosis(
                                                medicamentosPrincipiosActivosType.getUnidadPrescripcion());

                                        logger.debug(
                                                "                    Cargando UNI_DOSIS_PRES para el TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadPrescripcion());
                                        medPrincipios.setUniDosisPres(
                                                unidadesDosisRepository.findByTxtUnidadDosis(uniDosisPre));
                                        logger.debug("                    UNI_DOSIS_PRES para el TXT_UNID_DOSIS: "
                                                + uniDosisPre.getTxtUnidadDosis() + " cargado correctamente");
                                    } catch (NoResultException nre) {
                                        logger.warn(
                                                "                    No se ha encontrado UNI_DOSIS_PRES con TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadPrescripcion());
                                    }
                                }

                                //UNI_DOSIS_V_ADM (U_D)
                                if (medicamentosPrincipiosActivosType
                                        .getUnidadVolumenUnidadAdministracion() != null) {
                                    try {
                                        UnidadesDosis uniDosisVAdm = new UnidadesDosis();
                                        uniDosisVAdm.setTxtUnidadDosis(medicamentosPrincipiosActivosType
                                                .getUnidadVolumenUnidadAdministracion());

                                        logger.debug(
                                                "                    Cargando UNI_DOSIS_V_ADM para el TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadVolumenUnidadAdministracion());
                                        medPrincipios.setUniDosisVAdm(
                                                unidadesDosisRepository.findByTxtUnidadDosis(uniDosisVAdm));
                                        logger.debug("                    UNI_DOSIS_V_ADM para el TXT_UNID_DOSIS: "
                                                + uniDosisVAdm.getTxtUnidadDosis() + " cargado correctamente");
                                    } catch (NoResultException nre) {
                                        logger.warn(
                                                "                    No se ha encontrado UNI_DOSIS_V_ADM con TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadVolumenUnidadAdministracion());
                                    }
                                }

                                //UNI_DOSIS_V_COMP (U_D)
                                if (medicamentosPrincipiosActivosType.getUnidadVolumenUnidadComposicion() != null) {
                                    try {
                                        UnidadesDosis uniDosisVComp = new UnidadesDosis();
                                        uniDosisVComp.setTxtUnidadDosis(medicamentosPrincipiosActivosType
                                                .getUnidadVolumenUnidadComposicion());

                                        logger.debug(
                                                "                    Cargando UNI_DOSIS_V_COMP para el TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadVolumenUnidadComposicion());
                                        medPrincipios.setUniDosisVCom(
                                                unidadesDosisRepository.findByTxtUnidadDosis(uniDosisVComp));
                                        logger.debug("                    UNI_DOSIS_V_COMP para el TXT_UNID_DOSIS: "
                                                + uniDosisVComp.getTxtUnidadDosis() + " cargado correctamente");
                                    } catch (NoResultException nre) {
                                        logger.warn(
                                                "                    No se ha encontrado UNI_DOSIS_V_COMP con TXT_UNID_DOSIS: "
                                                        + medicamentosPrincipiosActivosType
                                                                .getUnidadVolumenUnidadComposicion());
                                    }
                                }

                                //DosisAdministracion
                                if (NumberUtils.isNumber(StringUtils.replace(
                                        medicamentosPrincipiosActivosType.getDosisAdministracion(), ",", "."))) {
                                    medPrincipios.setDosisAdm(NumberUtils.createDouble(StringUtils.replace(
                                            medicamentosPrincipiosActivosType.getDosisAdministracion(), ",", ".")));
                                }

                                //DosisComposicion
                                if (NumberUtils.isNumber(StringUtils.replace(
                                        medicamentosPrincipiosActivosType.getDosisComposicion(), ",", "."))) {
                                    medPrincipios.setDosisComp(NumberUtils.createDouble(StringUtils.replace(
                                            medicamentosPrincipiosActivosType.getDosisComposicion(), ",", ".")));
                                }

                                //DosisPa
                                if (NumberUtils.isNumber(StringUtils
                                        .replace(medicamentosPrincipiosActivosType.getDosisPa(), ",", "."))) {
                                    medPrincipios.setDosisPa(NumberUtils.createDouble(StringUtils
                                            .replace(medicamentosPrincipiosActivosType.getDosisPa(), ",", ".")));
                                }

                                //CantidadVolumenUnidadAdministracion
                                if (NumberUtils.isNumber(StringUtils.replace(
                                        medicamentosPrincipiosActivosType.getCantidadVolumenUnidadAdministracion(),
                                        ",", "."))) {
                                    medPrincipios
                                            .setDosisVAdm(
                                                    NumberUtils.createDouble(StringUtils.replace(
                                                            medicamentosPrincipiosActivosType
                                                                    .getCantidadVolumenUnidadAdministracion(),
                                                            ",", ".")));
                                }

                                //CantidadVolumenUnidadComposicion
                                if (NumberUtils.isNumber(StringUtils.replace(
                                        medicamentosPrincipiosActivosType.getCantidadVolumenUnidadComposicion(),
                                        ",", "."))) {
                                    medPrincipios.setDosisVCom(NumberUtils.createDouble(StringUtils.replace(
                                            medicamentosPrincipiosActivosType.getCantidadVolumenUnidadComposicion(),
                                            ",", ".")));
                                }

                                medPrincipios
                                        .setDosisPres(medicamentosPrincipiosActivosType.getDosisPrescripcion());
                                medPrincipios
                                        .setOrdenColacion(medicamentosPrincipiosActivosType.getOrdenColacion());

                                listaMedPrincipios.add(medPrincipios);
                                logger.debug("               PRINCIPIOS_ACTIVOS para el NRO_PRINCIPIO_ACTIVO: "
                                        + principiosActivos.getNroPrActivo() + " cargado correctamente");
                            } catch (NoResultException nre) {
                                logger.warn(
                                        "               No se ha encontrado PRINCIPIOS_ACTIVOS con NRO_PRINCIPIO_ACTIVO: "
                                                + medicamentosPrincipiosActivosType.getCodPrincipioActivo());
                            }
                        }
                        medPrincipiosService.save(medicamentos, listaMedPrincipios);
                        logger.debug("          MED_PRINCIPIOS cargados correctamente");
                    }

                    //MED_EXCIPIENTES
                    if (medicamentosFormafarmaceuticaType.getExcipientes() != null
                            && !medicamentosFormafarmaceuticaType.getExcipientes().isEmpty()) {
                        logger.debug("          Cargando MED_EXCIPIENTES");
                        List<MedExcipientes> listaMedExcipientes = new ArrayList<>();

                        Iterator<MedicamentosExcipientesType> iteradorMedicamentosExcipientes = medicamentosFormafarmaceuticaType
                                .getExcipientes().iterator();
                        while (iteradorMedicamentosExcipientes.hasNext()) {
                            MedicamentosExcipientesType medicamentosExcipientesType = iteradorMedicamentosExcipientes
                                    .next();

                            try {
                                Excipientes excipientes = new Excipientes();
                                excipientes.setCodExcipiente(
                                        Integer.toString(medicamentosExcipientesType.getCodExcipiente()));

                                logger.debug("               Cargando EXCIPIENTES para el COD_EXCIPIENTE: "
                                        + medicamentosExcipientesType.getCodExcipiente());
                                MedExcipientes medExcipientes = new MedExcipientes();
                                medExcipientes
                                        .setExcipientes(excipientesRepository.findByCodExcipiente(excipientes));
                                medExcipientes.setMedicamentos(medicamentos);
                                listaMedExcipientes.add(medExcipientes);
                                logger.debug("               EXCIPIENTES para el COD_EXCIPIENTE: "
                                        + excipientes.getCodExcipiente() + " cargado correctamente");
                            } catch (NoResultException nre) {
                                logger.warn("               No se ha encontrado EXCIPIENTES con COD_EXCIPIENTE: "
                                        + medicamentosExcipientesType.getCodExcipiente());
                            }
                        }
                        medExcipientesService.save(medicamentos, listaMedExcipientes);
                        logger.debug("          MED_EXCIPIENTES cargados correctamente");
                    }

                    //MED_VIAS
                    if (medicamentosFormafarmaceuticaType.getViasadministracion() != null
                            && !medicamentosFormafarmaceuticaType.getViasadministracion().isEmpty()) {
                        logger.debug("          Cargando MED_VIAS");
                        List<MedVias> listaMedVias = new ArrayList<>();

                        Iterator<MedicamentosViasAdminType> iteradorMedicamentosViasAdmin = medicamentosFormafarmaceuticaType
                                .getViasadministracion().iterator();
                        while (iteradorMedicamentosViasAdmin.hasNext()) {
                            MedicamentosViasAdminType medicamentosViasAdminType = iteradorMedicamentosViasAdmin
                                    .next();

                            try {
                                ViasAdmin viasAdmin = new ViasAdmin();
                                viasAdmin.setCodViaAdmin(
                                        Integer.toString(medicamentosViasAdminType.getCodViaAdmin()));

                                logger.debug("               Cargando VIAS_ADMIN para el COD_VIA_ADMIN: "
                                        + medicamentosViasAdminType.getCodViaAdmin());
                                MedVias medVias = new MedVias();
                                medVias.setViasAdmin(viasAdminRepository.findByCodViasAdmin(viasAdmin));
                                medVias.setMedicamentos(medicamentos);
                                listaMedVias.add(medVias);
                                logger.debug("               VIAS_ADMIN para el COD_VIA_ADMIN: "
                                        + viasAdmin.getCodViaAdmin() + " cargado correctamente");
                            } catch (NoResultException nre) {
                                logger.warn("               No se ha encontrado VIAS_ADMIN con COD_VIA_ADMIN: "
                                        + medicamentosViasAdminType.getCodViaAdmin());
                            }
                        }
                        medViasAdminService.save(medicamentos, listaMedVias);
                        logger.debug("          MED_VIAS cargados correctamente");
                    }
                }
            }

            //MED_NOTAS
            if (medicamentosType.getNotaseguridad() != null && !medicamentosType.getNotaseguridad().isEmpty()) {
                logger.debug("          Cargando MED_NOTAS");
                List<MedNotas> listaMedNotas = new ArrayList<>();

                Iterator<MedicamentosNotasType> iteradorMedicamentosNotas = medicamentosType.getNotaseguridad()
                        .iterator();
                while (iteradorMedicamentosNotas.hasNext()) {
                    MedicamentosNotasType medicamentosNotasType = iteradorMedicamentosNotas.next();

                    MedNotas medNotas = new MedNotas();
                    medNotas.setMedicamentos(medicamentos);

                    Notas notas = new Notas();
                    try {
                        notas.setReferencia(medicamentosNotasType.getReferenciaNotaSeguridad());
                        notas.setAsunto(medicamentosNotasType.getAsuntoNotaSeguridad());
                        notas.setNumero(medicamentosNotasType.getNumeroNotaSeguridad());
                        notas.setUrl(medicamentosNotasType.getUrlNotaSeguridad());
                        try {
                            notas.setFecha(DateUtils.parseDate(medicamentosNotasType.getFechaNotaSeguridad(),
                                    "dd/MM/YYYY"));
                        } catch (ParseException pe) {
                            logger.warn("               La fecha: " + medicamentosNotasType.getFechaNotaSeguridad()
                                    + " no ha podido ser parseada con el pattern dd/MM/YYYY");
                        }

                        logger.debug("               Cargando NOTAS para el REFERENCIA: "
                                + medicamentosNotasType.getReferenciaNotaSeguridad());
                        notas = notasRepository.findByReferencia(notas);
                        logger.debug("               NOTAS para el REFERENCIA: " + notas.getReferencia()
                                + " cargado correctamente");
                    } catch (NoResultException nre) {
                        logger.warn("               No se ha encontrado NOTAS con REFERENCIA: "
                                + medicamentosNotasType.getReferenciaNotaSeguridad() + ". Insertando registro");
                        notasRepository.save(notas);
                    } finally {
                        medNotas.setNotas(notas);
                        listaMedNotas.add(medNotas);
                    }
                }
                medNotasService.save(medicamentos, listaMedNotas);
                logger.debug("          MED_NOTAS cargados correctamente");
            }

            //MED_ATC
            if (medicamentosType.getAtc() != null && !medicamentosType.getAtc().isEmpty()) {
                logger.debug("          Cargando MED_ATC");

                Iterator<MedicamentosAtcType> iteradorMedicamentosAtc = medicamentosType.getAtc().iterator();
                while (iteradorMedicamentosAtc.hasNext()) {
                    MedicamentosAtcType medicamentosAtcType = iteradorMedicamentosAtc.next();
                    List<MedAtc> listaMedAtc = new ArrayList<>();

                    MedAtc medAtc = new MedAtc();
                    medAtc.setMedicamentos(medicamentos);

                    try {
                        Atc atc = new Atc();
                        atc.setCodAtc(medicamentosAtcType.getCodAtc());

                        logger.debug(
                                "               Cargando ATC para el COD_ATC: " + medicamentosAtcType.getCodAtc());
                        medAtc.setAtc(atcRepository.findByCodAtc(atc));
                        logger.debug("               ATC para el COD_ATC: " + atc.getCodAtc()
                                + " cargado correctamente");

                        listaMedAtc.add(medAtc);
                        medAtcService.save(medicamentos, listaMedAtc);

                        //ATC_INTERACCIONES
                        if (medicamentosAtcType.getInteraccionesAtc() != null
                                && !medicamentosAtcType.getInteraccionesAtc().isEmpty()) {
                            logger.debug("                    Cargando ATC_INTERACCIONES");
                            List<AtcInteracciones> listaAtcInteracciones = new ArrayList<>();
                            Iterator<AtcInteraccionesType> iteradorAtcInteracciones = medicamentosAtcType
                                    .getInteraccionesAtc().iterator();
                            while (iteradorAtcInteracciones.hasNext()) {
                                AtcInteraccionesType atcInteraccionesType = iteradorAtcInteracciones.next();

                                AtcInteracciones atcInteracciones = new AtcInteracciones();
                                atcInteracciones
                                        .setDescripcion(atcInteraccionesType.getDescripcionAtcInteraccion());
                                atcInteracciones.setEfecto(atcInteraccionesType.getEfectoInteraccion());
                                atcInteracciones.setOrientacion(atcInteraccionesType.getRecomendacionInteraccion());
                                atcInteracciones.setAtc(medAtc.getAtc());

                                try {
                                    Atc atcInteraccion = new Atc();
                                    atcInteraccion.setCodAtc(atcInteraccionesType.getAtcInteraccion());

                                    logger.debug(
                                            "                         Cargando ATC_INTERACCION para el COD_ATC: "
                                                    + atcInteraccionesType.getAtcInteraccion());
                                    atcInteracciones.setInteraccion(atcRepository.findByCodAtc(atcInteraccion));
                                    listaAtcInteracciones.add(atcInteracciones);
                                    logger.debug("                         ATC_INTERACCION para el COD_ATC: "
                                            + atcInteraccion.getCodAtc() + " cargado correctamente");
                                } catch (NoResultException nre) {
                                    logger.warn(
                                            "                         No se ha encontrado ATC_INTERACCION con COD_ATC: "
                                                    + atcInteraccionesType.getAtcInteraccion()
                                                    + ". Insertando registro");
                                }
                            }
                            atcInteraccionesService.save(medAtc.getAtc(), listaAtcInteracciones);
                            logger.debug("                    ATC_INTERACCIONES cargados correctamente");
                        }

                        //ATC_DUPLICIDADES
                        if (medicamentosAtcType.getDuplicidades() != null
                                && !medicamentosAtcType.getDuplicidades().isEmpty()) {
                            logger.debug("                    Cargando ATC_DUPLICIDADES");
                            List<AtcDuplicidades> listaAtcDuplicidades = new ArrayList<>();
                            Iterator<AtcDuplicidadesType> iteradorAtcDuplicidades = medicamentosAtcType
                                    .getDuplicidades().iterator();
                            while (iteradorAtcDuplicidades.hasNext()) {
                                AtcDuplicidadesType atcDuplicidadesType = iteradorAtcDuplicidades.next();

                                AtcDuplicidades atcDuplicidades = new AtcDuplicidades();
                                atcDuplicidades
                                        .setDescripcionAtc(atcDuplicidadesType.getDescripcionAtcDuplicidad());
                                atcDuplicidades.setEfecto(atcDuplicidadesType.getEfectoDuplicidad());
                                atcDuplicidades.setOrientacion(atcDuplicidadesType.getRecomendacionDuplicidad());
                                atcDuplicidades.setAtc(medAtc.getAtc());

                                try {
                                    Atc atcDuplicidad = new Atc();
                                    atcDuplicidad.setCodAtc(atcDuplicidadesType.getAtcDuplicidad());

                                    logger.debug(
                                            "                         Cargando ATC_DUPLICIDAD para el COD_ATC: "
                                                    + atcDuplicidadesType.getAtcDuplicidad());
                                    atcDuplicidades.setDuplicidad(atcRepository.findByCodAtc(atcDuplicidad));
                                    listaAtcDuplicidades.add(atcDuplicidades);
                                    logger.debug("                         ATC_DUPLICIDAD para el COD_ATC: "
                                            + atcDuplicidad.getCodAtc() + " cargado correctamente");
                                } catch (NoResultException nre) {
                                    logger.warn(
                                            "                         No se ha encontrado ATC_DUPLICIDAD con COD_ATC: "
                                                    + atcDuplicidadesType.getAtcDuplicidad()
                                                    + ". Insertando registro");
                                }
                            }
                            atcDuplicidadesService.save(medAtc.getAtc(), listaAtcDuplicidades);
                            logger.debug("                    ATC_DUPLICIDADES cargados correctamente");
                        }

                        //ATC_TERATOGENIAS
                        if (StringUtils.isNotBlank(medicamentosAtcType.getTeratogenia())) {
                            logger.debug("                    Cargando ATC_TERATOGENIAS");
                            AtcTeratogenias atcTeratogenias = new AtcTeratogenias();
                            atcTeratogenias.setAtc(medAtc.getAtc());

                            try {
                                logger.debug("                         Cargando ATC_TERATOGENIA para el COD_ATC: "
                                        + medAtc.getAtc().getCodAtc());
                                atcTeratogenias = atcTeratogeniasRepository.findByCodAtc(atcTeratogenias);
                                logger.debug("                         ATC_TERATOGENIA para el COD_ATC: "
                                        + atcTeratogenias.getAtc().getCodAtc() + " cargado correctamente");
                            } catch (NoResultException nre) {
                                logger.warn(
                                        "                         No se ha encontrado ATC_TERATOGENIA con COD_ATC: "
                                                + medAtc.getAtc().getCodAtc() + ". Insertando registro");
                            } finally {
                                atcTeratogenias.setTxtTeratogenia(medicamentosAtcType.getTeratogenia());
                                atcTeratogeniasRepository.save(atcTeratogenias);
                            }
                            logger.debug("                    ATC_TERATOGENIAS cargados correctamente");

                        }

                        //ATC_DESACON
                        if (medicamentosAtcType.getDesaconsejadosGeriatria() != null
                                && !medicamentosAtcType.getDesaconsejadosGeriatria().isEmpty()) {
                            logger.debug("                    Cargando ATC_DESACON");
                            List<AtcDesacon> listaAtcDesacon = new ArrayList<>();
                            Iterator<AtcDesaconsejadosType> iteradorAtcDesaconsejados = medicamentosAtcType
                                    .getDesaconsejadosGeriatria().iterator();
                            while (iteradorAtcDesaconsejados.hasNext()) {
                                AtcDesaconsejadosType atcDesaconsejadosType = iteradorAtcDesaconsejados.next();

                                AtcDesacon atcDesacon = new AtcDesacon();
                                atcDesacon.setAtc(medAtc.getAtc());

                                try {
                                    logger.debug("                         Cargando ATC_DESACON para el COD_ATC: "
                                            + medAtc.getAtc().getCodAtc());
                                    atcDesacon = atcDesaconRepository.findByCodAtc(atcDesacon);
                                    logger.debug("                         ATC_DESACON para el COD_ATC: "
                                            + atcDesacon.getAtc().getCodAtc() + " cargado correctamente");
                                } catch (NoResultException nre) {
                                    logger.warn(
                                            "                         No se ha encontrado ATC_DESACON con COD_ATC: "
                                                    + medAtc.getAtc().getCodAtc() + ". Insertando registro");
                                } finally {
                                    atcDesacon
                                            .setOrientacionTerap(atcDesaconsejadosType.getRecomendacionGeriatria());
                                    atcDesacon
                                            .setRiesgoPaciente(atcDesaconsejadosType.getRiesgoPacienceGeriatria());
                                    atcDesacon.setSituacionAlerta(atcDesaconsejadosType.getAlertaGeriatria());
                                    atcDesaconRepository.save(atcDesacon);
                                }
                            }
                            logger.debug("                    ATC_DESACON cargados correctamente");
                        }

                    } catch (NoResultException nre) {
                        logger.warn("               No se ha encontrado ATC con COD_ATC: "
                                + medicamentosAtcType.getCodAtc());
                    }
                }
                logger.debug("          MED_ATC cargados correctamente");
            }
        }
    }
}