com.dominion.salud.nomenclator.negocio.service.impl.aemps.v5.MedicamentosV5ServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.dominion.salud.nomenclator.negocio.service.impl.aemps.v5.MedicamentosV5ServiceImpl.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.v5;

import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AempsMedicamentos;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AtcDesaconsejadosType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AtcDuplicidadesType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.AtcInteraccionesType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosAtcType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosExcipientesType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosNotasType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosPrincipiosActivosType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosType;
import com.dominion.farmacia.nomenclator.jaxb.aemps.medicamentos.v5.MedicamentosViasAdminType;
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.entities.tools.BuzonSucesos;
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 com.dominion.salud.nomenclator.negocio.service.tools.BuzonSucesosService;
import java.io.File;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
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("medicamentosV5ServiceImpl")
public class MedicamentosV5ServiceImpl {

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

    @Autowired
    private MedicamentosRepository medicamentosRepository;

    @Autowired
    private BuzonSucesosService buzonSucesosService;

    @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<>();
            BuzonSucesos buzonSucesos = new BuzonSucesos();
            buzonSucesos.setCodProceso(BuzonSucesos.DICCIONARIO_MEDICAMENTOS);
            buzonSucesos.setFecIni(new Date());
            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++;
            }

            //BUZON_SUCESOS
            buzonSucesos.setFecFin(new Date());
            if (!mensajes.isEmpty()) {
                String mensaje = "El proceso se ha finalizado, pero se ha producido errores:<br>";

                logger.warn("     Se han producido los siguientes errores en la carga de registros: ");
                Iterator<String> iteradorMensajes = mensajes.iterator();
                while (iteradorMensajes.hasNext()) {
                    String linea = iteradorMensajes.next();
                    logger.warn("          - " + linea);
                    mensaje += "- " + linea + "<br>";
                }
                buzonSucesos.setMensaje(mensaje);
            } else {
                buzonSucesos.setMensaje("El proceso se ha finalizado correctamente");
            }
            buzonSucesosService.save(buzonSucesos);
        }
    }

    @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(medicamentosType.getNroPactiv());
            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());
                }
            }

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

                    logger.debug("          Cargando FORMAS_FAR para el COD_FORMA_FAR: "
                            + medicamentosType.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: "
                            + medicamentosType.getCodForfar());
                }
            }

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

                    logger.debug("          Cargando FORMAS_FAR_SIMP para el COD_FORMA_FAR_SIMP: "
                            + medicamentosType.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: "
                            + medicamentosType.getCodForfarSimplificada());
                }
            }

            //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);

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

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

                    try {

                        PrincipiosActivos principiosActivos = new PrincipiosActivos();
                        if (medicamentosPrincipiosActivosType.getCodPrincipioActivo() != null) {
                            principiosActivos.setNroPrActivo(
                                    Integer.toString(medicamentosPrincipiosActivosType.getCodPrincipioActivo()));
                        } else {
                            principiosActivos.setNroPrActivo(Integer.toString(medicamentosType.getNroPactiv()));
                        }

                        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 (medicamentosType.getExcipientes() != null && !medicamentosType.getExcipientes().isEmpty()) {
                logger.debug("          Cargando MED_EXCIPIENTES");
                List<MedExcipientes> listaMedExcipientes = new ArrayList<>();

                Iterator<MedicamentosExcipientesType> iteradorMedicamentosExcipientes = medicamentosType
                        .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 (medicamentosType.getViasadministracion() != null
                    && !medicamentosType.getViasadministracion().isEmpty()) {
                logger.debug("          Cargando MED_VIAS");
                List<MedVias> listaMedVias = new ArrayList<>();

                Iterator<MedicamentosViasAdminType> iteradorMedicamentosViasAdmin = medicamentosType
                        .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.getReferencia());
                        notas.setAsunto(medicamentosNotasType.getAsunto());
                        notas.setNumero(medicamentosNotasType.getNumero());
                        notas.setUrl(medicamentosNotasType.getUrl());
                        try {
                            notas.setFecha(DateUtils.parseDate(medicamentosNotasType.getFecha(), "dd/MM/YYYY"));
                        } catch (ParseException pe) {
                            logger.warn("               La fecha: " + medicamentosNotasType.getFecha()
                                    + " no ha podido ser parseada con el pattern dd/MM/YYYY");
                        }

                        logger.debug("               Cargando NOTAS para el REFERENCIA: "
                                + medicamentosNotasType.getReferencia());
                        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.getReferencia() + ". 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.getDescripcionAtc());
                                atcInteracciones.setEfecto(atcInteraccionesType.getEfecto());
                                atcInteracciones.setOrientacion(atcInteraccionesType.getOrientacion());
                                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.getDescripcionAtc());
                                atcDuplicidades.setEfecto(atcDuplicidadesType.getEfecto());
                                atcDuplicidades.setOrientacion(atcDuplicidadesType.getOrientacion());
                                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");
                            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.setBibliografia(atcDesaconsejadosType.getBibliografia());
                                    atcDesacon.setDescripcion(atcDesaconsejadosType.getDescripcion());
                                    atcDesacon
                                            .setOrientacionTerap(atcDesaconsejadosType.getOrientacionTerapeutica());
                                    atcDesacon.setRiesgoPaciente(atcDesaconsejadosType.getRiesgoPacience());
                                    atcDesacon.setSituacionAlerta(atcDesaconsejadosType.getSituacionAlerta());
                                    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");
            }
        }
    }
}