package com.ejie.ad74a.service.impl;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ejie.ad74a.dao.DependenciaDao;
import com.ejie.ad74a.dao.DiscapacidadDao;
import com.ejie.ad74a.dao.InteropsNisaeDao;
import com.ejie.ad74a.dao.SolicitantesDao;
import com.ejie.ad74a.exception.Ad74aException;
import com.ejie.ad74a.model.DatosInterop;
import com.ejie.ad74a.model.Dependencia;
import com.ejie.ad74a.model.Discapacidad;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.service.DepDisMasivaService;
import com.ejie.ad74a.util.Ad74aGestionArchivo;
import com.ejie.ad74a.util.Ad74aUtilPif;
import com.ejie.ad74a.util.AttachmentBeanPIF;
import com.ejie.ad74a.util.ParseUtils;
import com.ejie.ad74a.util.UtilDates;
import com.ejie.ad74a.util.UtilProperties;
import com.ejie.ad74a.util.Utilidades;
import com.ejie.ad74a.util.constantes.ColumnasFicheroEnum;
import com.ejie.ad74a.util.constantes.ConstantesBatch;
import com.ejie.ad74a.util.constantes.GradoDependenciaEnum;
import com.ejie.ad74a.util.constantes.TipoDocumentoEnum;
import com.ejie.ad74a.util.constantes.TipoInteroperabilidadadEnum;
import com.ejie.ad74a.util.csv.CsvReader;
import com.ejie.ad74a.util.csv.CsvWriter;

/**
 * ProcesosServiceImpl generated by UDA, 07-oct-2024 11:55:26.
 * 
 * @author UDA
 */

@Service(value = "depDisMasivaService")
public class DepDisMasivaServiceImpl implements DepDisMasivaService {
	
	@Autowired
	private SolicitantesDao solicitantesDao;
	
	@Autowired
	private DependenciaDao dependenciaDao;
	
	@Autowired
	private DiscapacidadDao discapacidadDao;
	
	@Autowired
	private InteropsNisaeDao interopsNisaeDao;
	
	private static final Logger logger = LoggerFactory.getLogger(DepDisMasivaServiceImpl.class);
	
	private StringBuilder loggerAcumulativo = new StringBuilder();

	public void lanzarInterNISSAE(String tipoInterop, String provincia, String idProceso, Boolean modoPrueba) throws Exception {
	
		List<Solicitantes> listaSolicitantes = this.solicitantesDao.findDepDisMasiva(provincia);		
		DepDisMasivaServiceImpl.logger.info("lanzarInterNISSAE listaSolicitantes size:"+listaSolicitantes.size());
		int lote = 1;		
		try {
			//crear ficheros de 4000
			if (listaSolicitantes.size()<ConstantesBatch.INTER_LIMITE_FICHERO) {
				crearFichero(listaSolicitantes, tipoInterop, lote);
			}else {
				List<Solicitantes> listaAux= new ArrayList<>();
				int contador=0;
				for (int i = 0; i < listaSolicitantes.size(); i++) {
					contador++;
					listaAux.add(listaSolicitantes.get(i));
					if (contador==ConstantesBatch.INTER_LIMITE_FICHERO) {
						crearFichero(listaAux,tipoInterop, lote);
						contador=0;
						listaAux= new ArrayList<>();
						lote++;
					}				
				}
				if (!listaAux.isEmpty()) {
					crearFichero(listaAux,tipoInterop, lote);
				}
			}
		} catch ( Exception e){
			throw new Ad74aException("Error al lanzarInterNISSAE",e); 
		}
	}
	
	private int crearFichero(List<Solicitantes> lista,String tipoInterop,int lote) throws Exception {	
			
			int resultado = 0;
			try	{
				String rutaDestino = UtilProperties.Props.RUTA_NISAE_FILE.val();
				String rutaDestinoCreados = UtilProperties.Props.RUTA_TEMP.val();
				Ad74aGestionArchivo directorio = new Ad74aGestionArchivo();
				directorio.crearDirectorio(rutaDestino);
				directorio.crearDirectorio(rutaDestinoCreados);							

				String nomFichero =TipoInteroperabilidadadEnum.DEPENDENCIA.getIdNisae()+"_00"+lote+"_ad74a.csv";
				String nombreProcedimiento=ConstantesBatch.INTER_DEPEND_NOMBRE_PROCEDIMIENTO;
				String finalidad=ConstantesBatch.INTER_DEPEND_FINALIDAD;
				if (tipoInterop.equals(TipoInteroperabilidadadEnum.DISCAPACIDAD.getId())) {
					nombreProcedimiento=ConstantesBatch.INTER_DISCAP_NOMBRE_PROCEDIMIENTO;
				    finalidad=ConstantesBatch.INTER_DISCAP_FINALIDAD;				    
				    nomFichero =TipoInteroperabilidadadEnum.DISCAPACIDAD.getIdNisae()+"_00"+lote+"_ad74a.csv";
				}
				
				String archCSV = rutaDestinoCreados.concat("/").concat(nomFichero);
				CsvWriter csvOutput = new CsvWriter(new FileWriter(archCSV, false), ';');
				csvOutput.write("IdentificadorSolicitante");
				csvOutput.write("NombreSolicitante");
				csvOutput.write("UnidadTramitadora");
				csvOutput.write("CodigoProcedimiento");
				csvOutput.write("NombreProcedimiento");
				csvOutput.write("Finalidad");
				csvOutput.write("NifFuncionario");
				csvOutput.write("NombreCompletoFuncionario");
				csvOutput.write("IdExpediente");
				csvOutput.write("Consentimiento");
				csvOutput.write("TipoDocumentacion");
				csvOutput.write("Documentacion");
				csvOutput.write("Nombre");
				csvOutput.write("Apellido1");
				csvOutput.write("Apellido2");
				csvOutput.write("NombreCompleto");				
				if (tipoInterop.equals(TipoInteroperabilidadadEnum.DISCAPACIDAD.getId())) {
				 csvOutput.write("CodigoComunidadAutonoma");
				 csvOutput.write("CodigoProvincia");
				 csvOutput.write("Expediente");
				 csvOutput.write("FechaConsulta");
				 csvOutput.write("FechaNacimiento");
				 csvOutput.write("ConsentimientoTiposDiscapacidad");
				}       
				csvOutput.endRecord();
				
			 for(int i=0;i<lista.size();i++){
	        	Solicitantes fichero = lista.get(i);
	        	csvOutput.write(ConstantesBatch.INTER_IDSOLICITANTE);
	        	csvOutput.write(ConstantesBatch.INTER_NOMBRE_SOLICITANTE);
	        	csvOutput.write(ConstantesBatch.INTER_UNIDAD_TRAMITADORA);
	        	csvOutput.write(ConstantesBatch.INTER_CODIGO_PROCEDIMIENTO);
	        	csvOutput.write(nombreProcedimiento);
	        	csvOutput.write(finalidad);
	        	csvOutput.write(ConstantesBatch.INTER_NIF_FUNCIONARIO);
	        	csvOutput.write(ConstantesBatch.INTER_NOMBRE_FUNCIONARIO);	        	
	        	csvOutput.write(String.valueOf(fichero.getIdExpediente00()));
	        	csvOutput.write(ConstantesBatch.INTER_CONSENTIMIENTO);
	        	TipoDocumentoEnum tipo =ParseUtils.parseTipoDocumentoEnum(fichero.getTipoIdentificador01());
	        	String tipoDoc="";
	        	if (tipo!=null) {
	        		tipoDoc = tipo.getId();
	        	}
	        	csvOutput.write(tipoDoc);
	        	csvOutput.write(fichero.getIdentificador01());

	            if (tipoInterop.equals(TipoInteroperabilidadadEnum.DEPENDENCIA.getId())) {
		        	csvOutput.write(fichero.getNombre01());
		            csvOutput.write(fichero.getApellido101());
		            csvOutput.write(fichero.getApellido201());
		            csvOutput.write(fichero.getNombreCompleto());	            
	            }else if (tipoInterop.equals(TipoInteroperabilidadadEnum.DISCAPACIDAD.getId())) {
	            	//En la discapacidad la validación de nombres y apellidos estaba dando problemas.
	            	csvOutput.write("");
	            	csvOutput.write("");
	            	csvOutput.write("");
	            	csvOutput.write("");
					csvOutput.write(ConstantesBatch.INTER_DISCAP_COD_COM_AUTONOMA);//CodigoComunidadAutonoma
					String provincia ="";
					if (fichero.getDirecciones()!=null && fichero.getDirecciones().getProvincia06()!=null) {
						 provincia=fichero.getDirecciones().getProvincia06();
					}
					csvOutput.write(provincia);//CodigoProvincia
					csvOutput.write("");//Expediente
					csvOutput.write("");//FechaConsulta
//					if (fichero.getfNacimiento01()!=null && !"".equals(fichero.getfNacimiento01())) {
//						 csvOutput.write(UtilDates.formatDateToString(fichero.getfNacimiento01(),UtilDates.DATEPATTERN));//FechaNacimiento
//					} Comentamos este bloque porque sino se valida y con el DNI es suficiente.
					csvOutput.write("");//FechaNacimiento
					csvOutput.write(ConstantesBatch.INTER_DISCAP_CONSETIMIENTO_TIPO_DISCAPACIDAD);
	            }
	            csvOutput.endRecord();                   
	         }
	         csvOutput.close();
	         resultado = 1;	   
	         
	         // Subir a pif
	 		//Primero se inicia
	        String rutaPif =UtilProperties.Props.RUTA_NISAE_ENVIO.val();
	        String rutaEnviados =rutaDestino+UtilProperties.Props.RUTA_NISAE_FILE_ENVIADOS.val();
	 		Ad74aUtilPif.init(UtilProperties.Props.PIF_API_COMMAND.val());
	 		
	 		//Se sube el fichero al PIF
	 		Ad74aUtilPif.put(UtilProperties.Props.LOGIN_PIF_AD74A.val(), archCSV, rutaPif+nomFichero);	 
	 		
	 		//Se copia el fichero a directorio de Histórico de ficheros enviados
	 		Ad74aGestionArchivo fic = new Ad74aGestionArchivo();
	 		File dir = new File(archCSV);
	 		fic.setFichero(dir);
			fic.crearDirectorio(rutaDestino);
			fic.crearDirectorio(rutaEnviados);
			fic.copiarFichero(rutaEnviados + nomFichero);
			fic.borrarFichero();
			
			} catch ( Exception e){
				throw new Ad74aException ("Error al crearFichero",e); 
			}
			return resultado;		
	}
	
	/**
	 * Metodo que lee los ficheros de la carpeta /ad74a/lotesSWIOP/
	 * @throws Exception
	 */
	public void leerRespuestaInterNISSAE(Boolean modoPrueba) throws Exception {
		
		String rutaPifRespuesta =UtilProperties.Props.RUTA_NISAE_RESPUESTA.val();		
		Ad74aUtilPif.init(UtilProperties.Props.PIF_API_COMMAND.val());
		List<AttachmentBeanPIF> resultadoLista = Ad74aUtilPif.list(UtilProperties.Props.LOGIN_PIF_AD74A.val(), rutaPifRespuesta);
		String rutaDestinoNissae = UtilProperties.Props.RUTA_NISAE_FILE.val();
		String rutaDestinoRecibidos = rutaDestinoNissae+UtilProperties.Props.RUTA_NISAE_FILE_RECIBIDOS.val();
		String rutaDestinoProcesados = rutaDestinoNissae+UtilProperties.Props.RUTA_NISAE_FILE_PROCESADOS.val();
		DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Se encuentran {} ficheros", resultadoLista.size());
		
		Long nRegDatosInteropAdd = 0l;
		Long nRegDatosInteropUpdate = 0l;

		HashMap<String,Long> nRegDependencias = new HashMap<String, Long>();
		nRegDependencias.put("nRegDependenciaHistorico", 0l);
		nRegDependencias.put("nRegDependenciaAdd", 0l);
		
		HashMap<String,Long> nRegDiscapacidad = new HashMap<String, Long>();
		nRegDiscapacidad.put("nRegDiscapacidadHistorico", 0l);
		nRegDiscapacidad.put("nRegDiscapacidadAdd", 0l);
		
		for (int i = 0; i < resultadoLista.size(); i++) {
			AttachmentBeanPIF fichero = resultadoLista.get(i);
			if (fichero.getName().startsWith("RESP_") 
					&& (fichero.getName().contains(TipoInteroperabilidadadEnum.DEPENDENCIA.getIdNisae()) || fichero.getName().contains(TipoInteroperabilidadadEnum.DISCAPACIDAD.getIdNisae()))) {
				DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Se comienza a procesar el fichero[{}] con nombre  {}", i,fichero.getName());
				String nomFichero =fichero.getName();
				boolean hayError=false;
				try {									
					String tipoInterop = null; //1-SWIOPCDEPIMSE; 2-SWIOPDISCAPRD
					if (nomFichero.contains(TipoInteroperabilidadadEnum.DEPENDENCIA.getIdNisae())) {
						DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - El fichero es de DEPENDENCIA");
						tipoInterop=TipoInteroperabilidadadEnum.DEPENDENCIA.getId();
					}else  if (nomFichero.contains(TipoInteroperabilidadadEnum.DISCAPACIDAD.getIdNisae())) {
						logger.info("leerRespuestaInterNISSAE -  El fichero es de DISCAPACIDAD");
						tipoInterop=TipoInteroperabilidadadEnum.DISCAPACIDAD.getId();
					}
					if(tipoInterop == null) {
						hayError=true;
						logger.info("leerRespuestaInterNISSAE - El fichero no es de las interoperabilidades definidas. No se trata el fichero");
					}else {
						String archCSV = rutaDestinoRecibidos.concat(nomFichero);
				 		Ad74aGestionArchivo fic = new Ad74aGestionArchivo();
				 		File dir = new File(archCSV);
				 		fic.setFichero(dir);
						fic.crearDirectorio(rutaDestinoNissae);					
						fic.crearDirectorio(rutaDestinoRecibidos); 		
				 		
						//descargamos a recibidos	
						//logger.info("leerRespuestaInterNISSAE - se descarga el fichero {} a la ruta {}", rutaPifRespuesta+nomFichero, rutaDestinoRecibidos+nomFichero);
				 		Ad74aUtilPif.get(UtilProperties.Props.LOGIN_PIF_AD74A.val(), rutaPifRespuesta+nomFichero, rutaDestinoRecibidos+nomFichero);
				 		CsvReader respuesta = new CsvReader(new FileReader(rutaDestinoRecibidos+nomFichero),';');
				 		respuesta.readHeaders();
				 		//logger.info("leerRespuestaInterNISSAE - El fichero {} a la ruta {} se ha descargado correctamente", rutaPifRespuesta+nomFichero, rutaDestinoRecibidos+nomFichero);
				 		int linea=0;
				 		String identificador="";
				        while(respuesta.readRecord()){
				        	linea++;
				        	try {
				        		DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Se lee la linea {} : {}", linea,respuesta.getRawRecord());
				        		identificador = respuesta.get("Documentacion");
				        		DatosInterop respuestaDepDis = obtenerRespuesta(respuesta,tipoInterop);        		
				        		//se obtiene el idexpediente00
				                Solicitantes solicitante = new Solicitantes();
				                solicitante.setIdentificador01(identificador);
				                DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Procesamos la interoperabilidad del solicitante con el identificador {}", solicitante.getIdentificador01());
				                Solicitantes solicitanteAux = this.solicitantesDao.findBeneficiarioByDni(solicitante);
				                solicitante.setIdExpediente00(solicitanteAux.getIdExpediente00());
				                solicitante.setIdSolicitante01( solicitanteAux.getIdSolicitante01());
				                
				                if (solicitante!=null && solicitante.getIdSolicitante01() != null ) {
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Solicitante con el identificador {} encontrado en BBDD que no est\u00E0 dado de baja", solicitante.getIdentificador01());
				                	respuestaDepDis.setIdExpediente19(solicitante.getIdExpediente00());
					                respuestaDepDis.setIdSolicitante(solicitanteAux.getIdSolicitante01());
				                }else {				                	
				                	DepDisMasivaServiceImpl.logger.error("leerRespuestaInterNISSAE - Solicitante con el identificador {} NO encontrado en BBDD o que est\u00E0 dado de baja", solicitante.getIdentificador01());
				                	throw new Ad74aException("Error al recupera el solicitante");
				                }
				                

				                
				                DatosInterop datosInteropBBDD = interopsNisaeDao.findIdExpediente(respuestaDepDis);
				                if(datosInteropBBDD != null && datosInteropBBDD.getIdInterop19() != null) {
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Se ha encontrado un registro en la tabla de datos interoperabilidad asociada al idExpediente {} ", solicitante.getIdExpediente00());
				                	respuestaDepDis.setIdInterop19(datosInteropBBDD.getIdInterop19() );
				                	nRegDatosInteropUpdate++;
				                	//Solo se mira si el resultado es 0000 y 0233 (Se han encontrado datos y no se han encontrado datos, respectivamente). En caso de error o en tramitación no se procesa.
				                	if (TipoInteroperabilidadadEnum.DEPENDENCIA.getId().equalsIgnoreCase(tipoInterop) && respuestaDepDis.getCodresulConImserso19() !=null && (ConstantesBatch.RESULTADO_DEPENDENCIA_NO_ENCONTRADO.equals(respuestaDepDis.getCodresulConImserso19()) || ConstantesBatch.RESULTADO_DEPENDENCIA_ENCONTRADO.equals(respuestaDepDis.getCodresulConImserso19()))){
						            	interopsNisaeDao.updateDatosDependencia(respuestaDepDis,modoPrueba);
				                	}else if (TipoInteroperabilidadadEnum.DISCAPACIDAD.getId().equalsIgnoreCase(tipoInterop) && respuestaDepDis.getCodresulDiscapa19() !=null && (ConstantesBatch.RESULTADO_DISCAPACIDAD_NO_ENCONTRADO.equals(respuestaDepDis.getCodresulDiscapa19()) || ConstantesBatch.RESULTADO_DISCAPACIDAD_ENCONTRADO.equals(respuestaDepDis.getCodresulDiscapa19()))){
				                		interopsNisaeDao.updateDatosDiscapacidad( respuestaDepDis,modoPrueba);					
				                	}else {
				                		DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - No se actualiza la tabla de datos interoperabilidad porque el resultado de la interoperabilidad de {} , porque es erronea -CodresulConImserso19: {} -CodresulDiscapa19: {}",TipoInteroperabilidadadEnum.DEPENDENCIA.getId().equalsIgnoreCase(tipoInterop) ? "Dependencia" : "Discapacidad" , respuestaDepDis.getCodresulConImserso19(), respuestaDepDis.getCodresulDiscapa19() );  	
				                	}
				                		
				                	
				                }else {
				                	nRegDatosInteropAdd++;
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - NO se ha encontrado registro en la tabla de datos interoperabilidad asociada al idExpediente {}, se crea un nuevo registro", solicitante.getIdExpediente00());
				                	interopsNisaeDao.add(respuestaDepDis,modoPrueba);	
				                }
				                
				                
				                //Solo se mira si el resultado es 0000 y 0233 (Se han encontrado datos y no se han encontrado datos, respectivamente). En caso de error o en tramitación no se procesa.
				                if (respuestaDepDis.getCodresulConImserso19() !=null && (ConstantesBatch.RESULTADO_DEPENDENCIA_NO_ENCONTRADO.equals(respuestaDepDis.getCodresulConImserso19()) || ConstantesBatch.RESULTADO_DEPENDENCIA_ENCONTRADO.equals(respuestaDepDis.getCodresulConImserso19()))){
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Se procede a revisar la tabla de dependencias ya que el resultado es {}, {} " ,respuestaDepDis.getCodresulConImserso19(),respuestaDepDis.getResulConImserso19() );    
				                	gestionarDependencia(respuestaDepDis,modoPrueba,nRegDependencias);
				                }else {
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - NO se actualiza la tabla de dependencias ya que el resultado es {}, {} " ,respuestaDepDis.getCodresulConImserso19(),respuestaDepDis.getResulConImserso19() );
				                }
				                
				                
				                
				                //Solo se mira si el resultado es 0 y 2 (Existe el certificado de discapacidad y No existe el certificado de discapacidad, respectivamente). En caso de error o en tramitación no se procesa.
				                if (respuestaDepDis.getCodresulDiscapa19() !=null && (ConstantesBatch.RESULTADO_DISCAPACIDAD_NO_ENCONTRADO.equals(respuestaDepDis.getCodresulDiscapa19()) || ConstantesBatch.RESULTADO_DISCAPACIDAD_ENCONTRADO.equals(respuestaDepDis.getCodresulDiscapa19()))){
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - Se revisa la tabla de discapacidad porque el resultado es {}, {} " ,respuestaDepDis.getCodresulDiscapa19() ,respuestaDepDis.getResulDiscapa19());    
				                	gestionarDiscapacidad(respuestaDepDis,modoPrueba,nRegDiscapacidad);
				                }else {
				                	DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - NO se actualiza la tabla de discapacidad ya que el resultado es {}, {} " ,respuestaDepDis.getCodresulDiscapa19() ,respuestaDepDis.getResulDiscapa19() );
				                }
				                
				               
				        	}catch(Exception e) {
				        		DepDisMasivaServiceImpl.logger.error(DepDisMasivaServiceImpl.class+" Error " + e.getMessage() + "\n");
				        		try {
				        			//Recuperamos la fecha de baja para mostrar si es la razon del error. 
				        			Solicitantes solFilter = new Solicitantes();
				        			solFilter.setIdentificador01(identificador);
				        			Solicitantes sol = this.solicitantesDao.findSolicitanteByDni(solFilter);
				        			loggerAcumulativo = loggerAcumulativo.append("Error linea:").append(linea).append(" identificador:").append(identificador).append(" error: "+e.getMessage()).append(" fBaja: "+sol.getfBaja01()).append("\n");
				        		}finally {
				        			loggerAcumulativo = loggerAcumulativo.append("Error linea:").append(linea).append(" identificador:").append(identificador).append(" error: "+e.getMessage()).append("\n");
								}
				        		
				        		
				        	}        	
				        }
				        if (loggerAcumulativo.length()>0) {
				        	DepDisMasivaServiceImpl.logger.error(DepDisMasivaServiceImpl.class+" Errores al procesar el fichero: " + nomFichero+ "\n"+ loggerAcumulativo);
				        }

						//mover la respuesta de /nisae/recibidos a la carpeta nisae/procesados
//				        fic.crearDirectorio(rutaDestinoProcesados);
//				        String archivoCopiar = rutaDestinoProcesados.concat(nomFichero);
//				        fic.copiarFichero(archivoCopiar);
//				        //Ad74aGestionArchivo ficBorrar = new Ad74aGestionArchivo(archCSV);
//				        //File dir2 = new File(archCSV);
//				        //ficBorrar.setFichero(dir2);
//						//fic.borrarFichero();
//				        fic.borrarFichero(); //NO BORRA DE LA CARPETA DE RECIBIDOS
			

				 		Ad74aGestionArchivo fic2 = new Ad74aGestionArchivo();
				        File dir2 = new File(archCSV);
				        fic2.setFichero(dir2);
				 		String rutaDestino = UtilProperties.Props.RUTA_NISAE_FILE.val();
				 		fic.crearDirectorio(rutaDestino);
				 		fic2.crearDirectorio(rutaDestinoProcesados);
						//fic.crearDirectorio(rutaEnviados);
				 		//fic2.copiarFichero(archivoCopiar);
				 		fic2.copiarFichero(rutaDestinoProcesados+nomFichero);
				 		fic2.borrarFichero();		
					}
					
								
			        
				}catch (Exception e){
					DepDisMasivaServiceImpl.logger.error(DepDisMasivaServiceImpl.class+" Error " + e.getMessage() + "\n");
					DepDisMasivaServiceImpl.logger.error(DepDisMasivaServiceImpl.class+" Error al leer el fichero: " + nomFichero+ "\n");
					hayError=true;
				}
				//si no hay error al leer el fichero se borrar de la carpeta de respuesta
				if (!hayError && Boolean.FALSE.equals(modoPrueba)) {
					//borrar fichero pif
					//TODO: borrar esto al pasar a prod
//					if (!nomFichero.equals("RESP_SWIOPCDEPIMSE_001_ad74a.csv") && !nomFichero.equals("RESP_SWIOPDISCAPRD_001_ad74a.csv")) {
//						Ad74aUtilPif.delete(UtilProperties.Props.LOGIN_PIF_AD74A.val(), rutaPifRespuesta+nomFichero);
//					}
					Ad74aUtilPif.delete(UtilProperties.Props.LOGIN_PIF_AD74A.val(), rutaPifRespuesta+nomFichero);										
				}
				hayError=false;
			}			
		}

		Long nRegDependenciaHistorico = nRegDependencias.get("nRegDependenciaHistorico");
		Long nRegDependenciaAdd = nRegDependencias.get("nRegDependenciaAdd");		
		DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - se han a\u00F1adido {} datosInterop, se han actualizado {} datosInterop. Se han a\u00F1adido {} Dependencia, se han pasado {} dependencias a historico.",nRegDatosInteropAdd,nRegDatosInteropUpdate,nRegDependenciaAdd ,nRegDependenciaHistorico);		
	
		Long nRegDiscapacidadHistorico = nRegDiscapacidad.get("nRegDiscapacidadHistorico");
		Long nRegDiscapacidadAdd = nRegDiscapacidad.get("nRegDiscapacidadAdd");		
		DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - se han a\u00F1adido {} datosInterop, se han actualizado {} datosInterop. Se han a\u00F1adido {} Discapacidad, se han pasado {} dependencias a historico.",nRegDatosInteropAdd,nRegDatosInteropUpdate,nRegDiscapacidadAdd ,nRegDiscapacidadHistorico);		
		
	}
	
	/**
	 * Metodo que obtiene un bean de cada fila del fichero
	 * @param respuesta CsvReader los datos de una fila del fichero
	 * @return InteropsNisae bean con los datos de la fila
	 * @throws Exception excepcion por si hay un error
	 */
	private DatosInterop obtenerRespuesta(CsvReader respuesta, String tipoInterop) throws Exception {
    	String idTraza = respuesta.get(ColumnasFicheroEnum.IDTRAZA_DATOSTRAZA_RETORNO_DATOSESPECIFICOS.getId());
    	//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta idTraza {}", idTraza);
       // String idSolicitud = respuesta.get("IdSolicitud.DatosTraza.Retorno.DatosEspecificos"); No se guarda
        String fechaCertificado = respuesta.get(ColumnasFicheroEnum.FECHACERTIFICADO_DATOSTRAZA_RETORNO_DATOSESPECIFICOS.getId());
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechaCertificado {}", fechaCertificado);
        //2024-12-10T08:28:16.068+01:00;0000;
        if (!Utilidades.isEmpty(fechaCertificado)) {
        	fechaCertificado = fechaCertificado.replace("T", " ");
        	//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechaCertificado {}", fechaCertificado);
        }
        String resultado = respuesta.get(ColumnasFicheroEnum.RESULTADO_ESTADORESULTADO_RETORNO_DATOSESPECIFICOS.getId());
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta resultado {}", resultado);
        String descResultado = respuesta.get(ColumnasFicheroEnum.DESCRIPCION_ESTADORESULTADO_RETORNO_DATOSESPECIFICOS.getId());
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta descResultado {}", descResultado);
        String motivoError = respuesta.get(ColumnasFicheroEnum.MOTIVOSERROR_ESTADORESULTADO_RETORNO_DATOSESPECIFICOS.getId()); // Grabarlo en el resultado si viene informado y el resultado no? 
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta motivoError {}", motivoError);
        String numExpediente = respuesta.get(ColumnasFicheroEnum.NUMEROEXPEDIENTE_RESOLUCION_RETORNO_DATOSESPECIFICOS.getId()); //Ej. SISAAD12-15/003777/2014-91 ??
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta numExpediente {}", numExpediente);
        String gradoNivel = respuesta.get(ColumnasFicheroEnum.GRADOYNIVEL_RESOLUCION_RETORNO_DATOSESPECIFICOS.getId());
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta gradoNivel {}", gradoNivel);
        String tipoResol = respuesta.get(ColumnasFicheroEnum.TIPO_RESOLUCION_RETORNO_DATOSESPECIFICOS.getId()); // NO está en el fichero de dependencia, en el de discapacidad si?
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta tipoResol {}", tipoResol);
        String fechaResol = respuesta.get(ColumnasFicheroEnum.FECHARESOLUCION_RESOLUCION_RETORNO_DATOSESPECIFICOS.getId());      
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechaResol {}", fechaResol);  
        String estadoResol = respuesta.get(ColumnasFicheroEnum.ESTADORESOLUCION_RESOLUCION_RETORNO_DATOSESPECIFICOS.getId()); //Ej. Firmada, No se guarda en BBDD
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta estadoResol {}", estadoResol);
        
        
        
        String realdecreto = respuesta.get(ColumnasFicheroEnum.REALDECRETO_RETORNO_DATOSESPECIFICOS.getId());
        //DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta realdecreto {}", realdecreto);
		String fechanacimiento = respuesta.get(ColumnasFicheroEnum.FECHANACIMIENTO_DATOSADICIONALESTITULARRESPUESTA_RETORNO_DATOSESPECIFICOS.getId());
		////DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechanacimiento {}", fechanacimiento);
		String codigocomunidadautonoma = respuesta.get(ColumnasFicheroEnum.CODIGOCOMUNIDADAUTONOMA_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta codigocomunidadautonoma {}", codigocomunidadautonoma);
		
		String codigoprovincia = respuesta.get(ColumnasFicheroEnum.CODIGOPROVINCIA_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta codigoprovincia {}", codigoprovincia);
		String expediente = respuesta.get(ColumnasFicheroEnum.EXPEDIENTE_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta expediente {}", expediente);
		String gradodiscapacidad = respuesta.get(ColumnasFicheroEnum.GRADODISCAPACIDAD_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta gradodiscapacidad {}", gradodiscapacidad);
		String tipodiscapacidad = respuesta.get(ColumnasFicheroEnum.TIPODISCAPACIDAD_TIPOSDISCAPACIDAD_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta tipodiscapacidad {}", tipodiscapacidad);
		String checkDiscapacidadFisica = respuesta.get(ColumnasFicheroEnum.MOVILIDADREDUCIDA_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta checkDiscapacidadFisica {}", checkDiscapacidadFisica);
		String fechaefectosmovilidadreducida = respuesta.get(ColumnasFicheroEnum.FECHAEFECTOSMOVILIDADREDUCIDA_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechaefectosmovilidadreducida {}", fechaefectosmovilidadreducida);
		String checkDiscapacidadIntelectual = respuesta.get(ColumnasFicheroEnum.TERCERAPERSONA_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta checkDiscapacidadIntelectual {}", checkDiscapacidadIntelectual);
		String fechaefectostercerapersona = respuesta.get(ColumnasFicheroEnum.FECHAEFECTOSTERCERAPERSONA_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechaefectostercerapersona {}", fechaefectostercerapersona);
		String fechaefectos = respuesta.get(ColumnasFicheroEnum.FECHAEFECTOS_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fechaefectos {}", fechaefectos);
		String fecharevision = respuesta.get(ColumnasFicheroEnum.FECHAREVISION_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta fecharevision {}", fecharevision);
		String checkDiscapacidadSensorial = respuesta.get(ColumnasFicheroEnum.VALIDEZPERMANENTE_CERTIFICADODATOSDISCAPACIDAD_RETORNO_DATOSESPECIFICOS.getId());
		//DepDisMasivaServiceImpl.logger.info("leerRespuestaInterNISSAE - obtenerRespuesta checkDiscapacidadSensorial {}", checkDiscapacidadSensorial);

        //gestionar dependencia
        DatosInterop respuestaIteropsNisae = new DatosInterop();
		if (TipoInteroperabilidadadEnum.DEPENDENCIA.getId().equalsIgnoreCase(tipoInterop)) {
			//SWIOPCDEPIMSE
				logger.info("leerRespuestaInterNISSAE - obtenerRespuesta DEPENDENCIA");
		        respuestaIteropsNisae.setIdtraConImserso19( idTraza);
		        
		        if (Boolean.FALSE.equals(Utilidades.isEmpty(fechaCertificado))) {
					logger.info("leerRespuestaInterNISSAE - fechaCertificado " + fechaCertificado + " UtilDates.DATEPATTERN2 " + UtilDates.DATEPATTERN2);
		        	respuestaIteropsNisae.setfConImserso19( UtilDates.formatearStringToDateFormat(fechaCertificado,
							UtilDates.DATEPATTERN2));
				}        
		        respuestaIteropsNisae.setCodresulConImserso19(resultado);
		        respuestaIteropsNisae.setResulConImserso19(descResultado);
		        //respuestaIteropsNisae.setMotivosError19(motivoError);
		        //respuestaIteropsNisae.setNumExpediente19(numExpediente); 
		        Dependencia dep = new Dependencia();
		        logger.info("leerRespuestaInterNISSAE - obtenerRespuesta GradoDependenciaEnum.getByIdInterop(gradoNivel) {}", GradoDependenciaEnum.getByIdInterop(gradoNivel));
		        
		        dep.setIdGradoDependencia04(  GradoDependenciaEnum.getByIdInterop(gradoNivel).getIdBBDD());
		        
		        if (Boolean.FALSE.equals(Utilidades.isEmpty(fechaResol)) && Boolean.FALSE.equals(fechaResol.equals("N/A"))) {
		        	dep.setfResolucion04( UtilDates.formatearStringToDateFormat(fechaResol,
							UtilDates.DATEPATTERN));
				}  
		        
		        
		        respuestaIteropsNisae.setDependencia(dep);
			
		}else if (TipoInteroperabilidadadEnum.DISCAPACIDAD.getId().equalsIgnoreCase(tipoInterop)) {
				//	SWIOPDISCAGEN
			logger.info("leerRespuestaInterNISSAE - obtenerRespuesta DISCAPACIDAD");
		        respuestaIteropsNisae.setIdtraDiscapa19( idTraza);
		        
		        if (Boolean.FALSE.equals(Utilidades.isEmpty(fechaCertificado)) ){
		        	respuestaIteropsNisae.setfConDiscapa19(UtilDates.formatearStringToDateFormat(fechaCertificado,
							UtilDates.DATEPATTERN4));
				}        
		        respuestaIteropsNisae.setCodresulDiscapa19(resultado);
		        respuestaIteropsNisae.setResulDiscapa19( descResultado);
		        Discapacidad disc = new Discapacidad();		 
		        
		        if (Boolean.FALSE.equals(Utilidades.isEmpty(fecharevision)) && Boolean.FALSE.equals(fecharevision.equals("N/A"))) {
		        	disc.setfResolucion71( UtilDates.formatearStringToDateFormat(fecharevision,
							UtilDates.DATEPATTERN));
				}      
		        if(ConstantesBatch.FLAG_SI.contentEquals(checkDiscapacidadFisica)) {
	        		disc.setDiscapacidadFisica71(ConstantesBatch.UNO);
	        	}
				if(ConstantesBatch.FLAG_SI.contentEquals(checkDiscapacidadIntelectual)) {
		        	disc.setDiscapacidadIntelecto71(ConstantesBatch.UNO);
					        		
				}
				if(ConstantesBatch.FLAG_SI.contentEquals(checkDiscapacidadSensorial)) {
		        	disc.setDiscapacidadSensorial71(ConstantesBatch.UNO);
					
				}
		        respuestaIteropsNisae.setDiscapacidad(disc);
		}
             
        return respuestaIteropsNisae;
	}
	
	/**
	 * Metodo donde se comprueba si tiene dependencia, si no tiene se inserta
	 * Tambien se comprueba si el grado de dependencia es el mismo sino se pasa a historico el que tiene y se inserta el nuevo 
	 * @param respuesta
	 * @param nRegDependencias 
	 * @throws ParseException
	 */
	private void gestionarDependencia(DatosInterop respuesta,Boolean modoPrueba, HashMap<String,Long> nRegDependencias) throws ParseException { //TO DO TRATAR ERRORES
				
		Dependencia dependencia = new Dependencia();
		dependencia.setIdSolicitante04(respuesta.getIdSolicitante());
		dependencia.setIdExpediente04(respuesta.getIdExpediente19());
		logger.info("gestionarDependencia - se comprueba el registro de la dependencia del solicitante en BBDD con idsolicitante: {} ",respuesta.getIdSolicitante() );
		Dependencia dependenciaBBDD = dependenciaDao.findByIdSol(dependencia);
		if (dependenciaBBDD==null && null != respuesta.getDependencia().getIdGradoDependencia04() ) {			
			logger.info("gestionarDependencia No se encuentran registros anteriores. Se inserta el nuevo registro de dependencia para el idsolicitante:{} ya que el grado de dependencia recuperado de NISAE {} no es null.",respuesta.getIdSolicitante(),respuesta.getDependencia().getIdGradoDependencia04() );
			Long nRegDependenciaAdd = nRegDependencias.get("nRegDependenciaAdd");
			nRegDependenciaAdd++;
			nRegDependencias.put("nRegDependenciaAdd", nRegDependenciaAdd);
			dependenciaDao.add(obtenerDependenciaAdd(respuesta),modoPrueba);
		
		}else if(dependenciaBBDD!=null){			
				logger.info("gestionarDependencia Se encuentra un registro activo en BBDD para el idsolicitante: {}", respuesta.getIdSolicitante() );
			Long idGradoDepBBDD = dependenciaBBDD.getIdGradoDependencia04();
			Long idGradoDepNISAE = respuesta.getDependencia().getIdGradoDependencia04();
			
			if ( !(idGradoDepBBDD == null && idGradoDepNISAE == null ) &&  (idGradoDepBBDD == null  ||  !idGradoDepBBDD.equals(idGradoDepNISAE))) {
				logger.info("gestionarDependencia Grado de dependencia recuperado de la interoperabilidad {} DISTINTO al que existe en BBDD {}  para el idsolicitante: {} . Se pasa a historico el registro anterior y se inserta un nuevo registro.",idGradoDepNISAE ,idGradoDepBBDD,respuesta.getIdSolicitante());
				Long nRegDependenciaHistorico =  nRegDependencias.get("nRegDependenciaHistorico");
				nRegDependenciaHistorico++;
				nRegDependencias.put("nRegDependenciaHistorico", nRegDependenciaHistorico);
				dependenciaDao.pasarHistorico(dependenciaBBDD,ConstantesBatch.USER_INTEROP,modoPrueba);
			
				Long nRegDependenciaAdd = nRegDependencias.get("nRegDependenciaAdd");
				nRegDependenciaAdd++;
				nRegDependencias.put("nRegDependenciaAdd", nRegDependenciaAdd);
				dependenciaDao.add(obtenerDependenciaAdd(respuesta),modoPrueba );
			}else if (respuesta.getDependencia().getIdGradoDependencia04().equals(idGradoDepBBDD)) {
				logger.info("gestionarDependencia Grado de dependencia recuperado de la interoperabilidad {} IGUAL al que existe en BBDD {} para el idsolicitante: {} . No se modifican registros.",idGradoDepNISAE ,idGradoDepBBDD,respuesta.getIdSolicitante());
				
			}	else {
				logger.info("gestionarDependencia idsolicitante: {} se ha recuperado el mismo grado y nivel de la dependencia. No se actualizan los datos. respuesta.getDependencia().getIdGradoDependencia04(): {} ", respuesta.getIdSolicitante() ,respuesta.getDependencia().getIdGradoDependencia04()  );
			}
		}else {
			logger.info("gestionarDependencia idsolicitante: {}  no se inserta la dependencia ya que no se ha recuperado el gradoDependencia en la interoperabilidad ni existe registro en BBDD",respuesta.getIdSolicitante());
		}
		
	}
	/**
	 * Se crea un objeto dependencia para insertar con los datos de la respuesta 
	 * @param respuesta DatosInterop datos de la respuesta del servicio de interoperabilidad
	 * @return Dependencia objeto de dependencia a insertar
	 * @throws ParseException Excepcion
	 */
	private Dependencia obtenerDependenciaAdd(DatosInterop respuesta) throws ParseException {
		Dependencia dependencia = respuesta.getDependencia();
		dependencia.setIdSolicitante04(respuesta.getIdSolicitante());	
		dependencia.setIdExpediente04(respuesta.getIdExpediente19());	
		dependencia.setUsuAlta04(ConstantesBatch.USER_INTEROP);
		return dependencia;
	}
	
	
	/**
	 * Metodo donde se mira si tiene discapacidad, si no tiene se inserta
	 * si tiene se mira si el nivel de discapacidad es el mismo sino se pasa a historico el que tiene y se inserta el nuevo 
	 * @param respuesta
	 * @param nRegDependencias 
	 * @throws ParseException
	 **/
	private void gestionarDiscapacidad(DatosInterop respuesta,Boolean modoPrueba, HashMap<String,Long> nRegDiscapacidad) throws ParseException { 	
		
		Discapacidad discapacidad = new Discapacidad();
		discapacidad.setIdSolicitante71(respuesta.getIdSolicitante());
		discapacidad.setIdExpediente71(respuesta.getIdExpediente19());
		logger.info("gestionarDiscapacidad - se procesa la discapacidad del solicitante con idsolicitante:  "+respuesta.getIdSolicitante() );
		Discapacidad discapacidadBBDD = discapacidadDao.findByIdSol(discapacidad);
		
		if (discapacidadBBDD == null && ((null != respuesta.getDiscapacidad().getDiscapacidadFisica71() && !respuesta.getDiscapacidad().getDiscapacidadFisica71().equals(discapacidadBBDD.getDiscapacidadFisica71()))
				|| (null != respuesta.getDiscapacidad().getDiscapacidadIntelecto71() && !respuesta.getDiscapacidad().getDiscapacidadIntelecto71().equals(discapacidadBBDD.getDiscapacidadIntelecto71()))
				|| (null != respuesta.getDiscapacidad().getDiscapacidadSensorial71() && !respuesta.getDiscapacidad().getDiscapacidadSensorial71().equals(discapacidadBBDD.getDiscapacidadSensorial71())))) {			
			logger.info("gestionarDiscapacidad idsolicitante:"+respuesta.getIdSolicitante() +" se inserta el nuevo registro ya que tiene alguna discapacidad ");
			
			Long nRegDiscapacidadAdd = nRegDiscapacidad.get("nRegDiscapacidadAdd");
			
			nRegDiscapacidadAdd++;
			nRegDiscapacidad.put("nRegDiscapacidadAdd", nRegDiscapacidadAdd);
			
			discapacidadDao.add(obtenerDiscapacidadAdd(respuesta),modoPrueba);
			logger.info("gestionarDiscapacidad idsolicitante:"+respuesta.getIdSolicitante() +"se inserta");
		}else if(discapacidadBBDD != null){			
				logger.info("gestionarDiscapacidad idsolicitante:" + respuesta.getIdSolicitante() + "se pasa a historico");
				Long nRegDiscapacidadHistorico =  nRegDiscapacidad.get("nRegDiscapacidadHistorico");
				nRegDiscapacidadHistorico++;
				nRegDiscapacidad.put("nRegDiscapacidadHistorico", nRegDiscapacidadHistorico);
				discapacidadDao.pasarHistorico(discapacidadBBDD,ConstantesBatch.USER_INTEROP,modoPrueba);
			if ((null != respuesta.getDiscapacidad().getDiscapacidadFisica71() && !respuesta.getDiscapacidad().getDiscapacidadFisica71().equals(discapacidadBBDD.getDiscapacidadFisica71()))
			|| (null != respuesta.getDiscapacidad().getDiscapacidadIntelecto71() && !respuesta.getDiscapacidad().getDiscapacidadIntelecto71().equals(discapacidadBBDD.getDiscapacidadIntelecto71()))
			|| (null != respuesta.getDiscapacidad().getDiscapacidadSensorial71() && !respuesta.getDiscapacidad().getDiscapacidadSensorial71().equals(discapacidadBBDD.getDiscapacidadSensorial71()))){	
				Long nRegDiscapacidadAdd = nRegDiscapacidad.get("nRegDiscapacidadAdd");
				nRegDiscapacidadAdd++;
				nRegDiscapacidad.put("nRegDiscapacidadAdd", nRegDiscapacidadAdd);
				discapacidadDao.add(obtenerDiscapacidadAdd(respuesta),modoPrueba );
				logger.info("gestionarDiscapacidad idsolicitante:"+respuesta.getIdSolicitante() +" se inserta el nuevo registro  ya que tiene gradoDiscapacidad");
			}else {
				logger.info("gestionarDiscapacidad idsolicitante:"+respuesta.getIdSolicitante() +"se ha recuperado el mismo grado y nivel de la discapacidad. No se actualizan los datos.");
			}
		}else {
			logger.info("gestionarDiscapacidad idsolicitante:"+respuesta.getIdSolicitante() +" no se inserta la discapacidad ya que no tiene ninguna discapacidad");
		}
		
	}
	
	/**
	 * Se crea un objeto discapacidad para insertar con los datos de la respuesta 
	 * @param respuesta DatosInterop datos de la respuesta del servicio de interoperabilidad
	 * @return discapacidad objeto de discapacidad a insertar
	 * @throws ParseException Excepcion
	 */

	private Discapacidad obtenerDiscapacidadAdd(DatosInterop respuesta) {
		
		Discapacidad discapacidad = new Discapacidad();
		discapacidad.setIdExpediente71(respuesta.getIdExpediente19() );
		discapacidad.setIdSolicitante71(respuesta.getIdSolicitante());
		discapacidad.setDiscapacidadFisica71(ConstantesBatch.VAL_NUM_NO);
		discapacidad.setDiscapacidadIntelecto71(ConstantesBatch.VAL_NUM_NO);
		discapacidad.setDiscapacidadSensorial71(ConstantesBatch.VAL_NUM_NO);
		discapacidad.setUsuAlta71(ConstantesBatch.USER_INTEROP);
		discapacidad.setfResolucion71(respuesta.getfConDiscapa19());

		
		discapacidad.setDiscapacidadFisica71(respuesta.getDiscapacidad().getDiscapacidadFisica71());
		discapacidad.setDiscapacidadIntelecto71( respuesta.getDiscapacidad().getDiscapacidadIntelecto71());
		discapacidad.setDiscapacidadSensorial71( respuesta.getDiscapacidad().getDiscapacidadSensorial71());
		
		return discapacidad;
	}

}