package com.ejie.ad74a.service.interoperabilidad;

import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang.exception.ExceptionUtils;
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.DatosInteropDao;
import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.model.DatosInterop;
import com.ejie.ad74a.model.Discapacidad;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.service.DatosInteropService;
import com.ejie.ad74a.service.DiscapacidadService;
import com.ejie.ad74a.util.comun.UtilSeguridad;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.util.constantes.ResultadosIOPEnum;
import com.ejie.ad74a.util.interoperabilidad.InteroperabilidadUtils;
import com.ejie.ad74a.ws.client.intermediacion.IntermediacionPortType;

import es.redsara.intermediacion.scsp.esquemas.datosespecificos.CertificadoDatosDiscapacidad;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.Retorno;
import es.redsara.intermediacion.scsp.esquemas.v3.peticion.Peticion;
import es.redsara.intermediacion.scsp.esquemas.v3.respuesta.Respuesta;

@Service(value = "Nisae")
public class NisaeServiceImpl implements NisaeService {

	/**
	 * Final static logger.
	 */
	private static final Logger logger = LoggerFactory.getLogger(NisaeServiceImpl.class);

	@Autowired
	private IntermediacionPortType intermediacion;

	@Autowired
	private DatosInteropService datosInteropService;

	@Autowired
	private DatosInteropDao datosInteropDao;

	@Autowired
	private DiscapacidadService discapacidadService;

	/**
	 * Clase que adaptara los servicios de Dokusi a nuestro sistema
	 */
	private NisaeServiceImpl() {
		super();
	}

	/**
	 * Consulta de datos de identificación (DGP).
	 * 
	 * @param expediente: expediente
	 * @return Retorno
	 */
	public Retorno getDatosDGPInterop(Expedientes expediente) {
		Peticion peticion = InteroperabilidadUtils.getDatosDGP(expediente, "AUDIT_USER");
		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - DGP getDatosDGPInterop: " + ExceptionUtils.getStackTrace(e));
		}
		return respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno();
	}

	/**
	 * Consulta de datos de irpf
	 * 
	 * @param expediente: expediente
	 * @return Retorno
	 */
	public Retorno getDatosIrpfInterop(Expedientes expediente) {
		Peticion peticion = InteroperabilidadUtils.getDatosIrpf(expediente, "AUDIT_USER");

		// como la consulta es del conyuge y no del titular, se modifican los datos a
		// buscar
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setNombre(expediente.getSolicitantes().getNombre01());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido1(expediente.getSolicitantes().getApellido101());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido2(expediente.getSolicitantes().getApellido201());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setDocumentacion(expediente.getSolicitantes().getIdentificador01());

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - getDatosIrpfInterop: " + ExceptionUtils.getStackTrace(e));
		}

		return respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno();
	}

	/**
	 * Consulta la interoperabilidad de IRPF del conyuge del titular del expediente
	 * 
	 * @param expediente: expediente
	 * @return Retorno
	 */
	public Retorno getDatosConyugeIrpf(Expedientes expediente) {
		NisaeServiceImpl.logger
				.info("NisaeServiceImpl consultaConyugeIrpf INICIO expediente: " + expediente.getIdExpediente00());
		Peticion peticion = InteroperabilidadUtils.getDatosIrpf(expediente, "AUDIT_USER");

		// como la consulta es del conyuge y no del titular, se modifican los datos a
		// buscar
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setNombre(expediente.getNombreCon00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido1(expediente.getApellido1Con00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido2(expediente.getApellido2Con00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setDocumentacion(expediente.getIdentificadorCon00());

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - consultaConyugeIrpf: " + ExceptionUtils.getStackTrace(e));
		}

		return respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno();

	}

	/**
	 * Consulta de datos de discapacidad
	 * 
	 * @param expediente: expediente
	 * @return Retorno
	 */
	public Retorno getDatosDiscapacidadInterop(Expedientes expediente) {

		Peticion peticion = InteroperabilidadUtils.getDatosDiscapacidad(expediente, "AUDIT_USER");

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - getDatosDiscapacidadInterop: " + ExceptionUtils.getStackTrace(e));
		}

		return respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno();
	}

	/**
	 * Consulta de datos de Padron
	 * 
	 * @param expediente: expediente
	 * @return Retorno
	 */
	public Retorno getDatosPadronInterop(Expedientes expediente) {

		Peticion peticion = InteroperabilidadUtils.getDatosPadron(expediente, "AUDIT_USER");

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - getDatosDiscapacidadInterop: " + ExceptionUtils.getStackTrace(e));
		}

		return respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno();
	}

	/**
	 * Consulta de datos de dependencia
	 * 
	 * @param expediente: expediente
	 * @return Retorno
	 */
	public Retorno getDatosDependenciaInterop(Expedientes expediente) {
		// quitamos los datos de nombre y ape para que no los valide
		/*
		 * expediente.getSolicitantes().setNombre01("");
		 * expediente.getSolicitantes().setApellido101("");
		 * expediente.getSolicitantes().setApellido201("");
		 */
		Peticion peticion = InteroperabilidadUtils.getDatosDependencia(expediente, "AUDIT_USER");
		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - DGP getDatosDependenciaInterop: " + ExceptionUtils.getStackTrace(e));
		}
		return respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno();
	}

	/**
	 * Consulta la interoperabilidad de IRPF del conyuge del titular del expediente
	 * 
	 * @param expediente: expediente
	 * @return String codigo del estado de la respuesta
	 * @throws ParseException
	 */
	public void consultaConyugeIrpf(Expedientes expediente) throws ParseException {
		NisaeServiceImpl.logger
				.info("NisaeServiceImpl consultaConyugeIrpf INICIO expediente: " + expediente.getIdExpediente00());
		Peticion peticion = InteroperabilidadUtils.getDatosIrpf(expediente, "AUDIT_USER");

		// como la consulta es del conyuge y no del titular, se modifican los datos a
		// buscar
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setNombre(expediente.getNombreCon00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido1(expediente.getApellido1Con00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido2(expediente.getApellido2Con00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setDocumentacion(expediente.getIdentificadorCon00());

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - consultaConyugeIrpf: " + ExceptionUtils.getStackTrace(e));
		}
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		String iopTraza = "";
		if (ResultadosIOPEnum.TER.getCod().equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
		} else if (ResultadosIOPEnum.TRAMITADA.getCod()
				.equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			try {
				codResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getResultado();
				descResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getDescripcion();
			} catch (Exception e) {
				codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
				descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			}

		} else {
			codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();

		}

		if (null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getDatosTraza()) {
			iopTraza = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getDatosTraza().getIdTraza();
			if (null != respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta()) {
				Calendar ahora = Calendar.getInstance();
				ahora.add(Calendar.HOUR, respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta());
				fechaInvocacionTer = ahora.getTime();
			}
		}

		DatosInterop datosInterop = new DatosInterop();
		datosInterop.setIdExpediente19(expediente.getIdExpediente00());
		datosInterop = this.datosInteropDao.findIdExpediente(datosInterop);
		datosInterop.setFolderId(expediente.getFolderId00());

		datosInterop.setIdtraConConyuIrpf19(iopTraza);
		datosInterop.setfConConyuIrpf19(UtilidadesFecha
				.formatearStringToDateFormato(respuesta.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulConConyuIrpf19(codResultado);
		datosInterop.setResulConConyuIrpf19(descResultado);
		datosInterop.setfinvokeConConyuIrpf19(fechaInvocacionTer);

		datosInteropService.saveDatosInterop(datosInterop, Constantes.Nisae.ES_CONSULTA_DE_CONYUGE);

		NisaeServiceImpl.logger.info("NisaeServiceImpl consultaConyugeIrpf FIN expediente: ");
	}

	public void consultaIrpfInterop(Expedientes expediente) throws ParseException {
		NisaeServiceImpl.logger
				.info("NisaeServiceImpl consultaConyugeIrpf INICIO expediente: " + expediente.getIdExpediente00());
		Peticion peticion = InteroperabilidadUtils.getDatosIrpf(expediente, "AUDIT_USER");

		// como la consulta es del conyuge y no del titular, se modifican los datos a
		// buscar
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setNombre(expediente.getNombreCon00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido1(expediente.getApellido1Con00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setApellido2(expediente.getApellido2Con00());
		peticion.getSolicitudes().getSolicitudTransmision().getDatosGenericos().getTitular()
				.setDocumentacion(expediente.getIdentificadorCon00());

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - consultaConyugeIrpf: " + ExceptionUtils.getStackTrace(e));
		}
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		String iopTraza = "";
		if (ResultadosIOPEnum.TER.getCod().equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
		} else if (ResultadosIOPEnum.TRAMITADA.getCod()
				.equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			try {
				codResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getResultado();
				descResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getDescripcion();
			} catch (Exception e) {
				codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
				descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			}

		} else {
			codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();

		}

		if (null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getDatosTraza()) {
			iopTraza = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getDatosTraza().getIdTraza();
			if (null != respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta()) {
				Calendar ahora = Calendar.getInstance();
				ahora.add(Calendar.HOUR, respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta());
				fechaInvocacionTer = ahora.getTime();
			}
		}

		DatosInterop datosInterop = new DatosInterop();
		datosInterop.setIdExpediente19(expediente.getIdExpediente00());
		datosInterop = this.datosInteropDao.findIdExpediente(datosInterop);
		datosInterop.setFolderId(expediente.getFolderId00());

		datosInterop.setIdtraConConyuIrpf19(iopTraza);
		datosInterop.setfConConyuIrpf19(UtilidadesFecha
				.formatearStringToDateFormato(respuesta.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulConConyuIrpf19(codResultado);
		datosInterop.setResulConConyuIrpf19(descResultado);
		datosInterop.setfinvokeConIrpf19(fechaInvocacionTer);

		datosInteropService.saveDatosInterop(datosInterop, Constantes.Nisae.COD_CERTIFICADO_CONSULTA_IRPF);

		NisaeServiceImpl.logger.info("NisaeServiceImpl consultaConyugeIrpf FIN expediente: ");
	}

	/**
	 * Constulta padron
	 * 
	 * 
	 */
	public void consultaPadron(Expedientes expediente) throws ParseException {
		NisaeServiceImpl.logger
				.info("NisaeServiceImpl consultaPadron INICIO expediente: " + expediente.getIdExpediente00());
		Peticion peticion = InteroperabilidadUtils.getDatosPadron(expediente, "AUDIT_USER");
		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - consultaDiscapacidad: " + ExceptionUtils.getStackTrace(e));
		}
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		String iopTraza = "";

		if (ResultadosIOPEnum.NO_AUTO.getCod().equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.NO_AUTO.getCod();

		} else if (ResultadosIOPEnum.TRAMITADA.getCod()
				.equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			try {
				codResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getResultado();
				descResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getDescripcion();
			} catch (Exception e) {
				codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
				descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			}

		} else {
			codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();

		}

		if (null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getDatosTraza()) {
			iopTraza = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getDatosTraza().getIdTraza();
			if (null != respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta()) {
				Calendar ahora = Calendar.getInstance();
				ahora.add(Calendar.HOUR, respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta());
				fechaInvocacionTer = ahora.getTime();
			}
		}
		DatosInterop datosInterop = new DatosInterop();
		datosInterop.setIdExpediente19(expediente.getIdExpediente00());
		datosInterop = this.datosInteropDao.findIdExpediente(datosInterop);
		datosInterop.setFolderId(expediente.getFolderId00());

		datosInterop.setIdtraDiscapa19(iopTraza);
		datosInterop.setfConDiscapa19(UtilidadesFecha
				.formatearStringToDateFormato(respuesta.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulDiscapa19(codResultado);
		datosInterop.setResulDiscapa19(descResultado);
		datosInterop.setFinvokeDiscapa19(fechaInvocacionTer);

		datosInteropService.saveDatosInterop(datosInterop, Constantes.Nisae.COD_CERTIFICADO_CONSULTA_PADRON);

		if (null != respuesta.getTransmisiones() && null != respuesta.getTransmisiones().getTransmisionDatos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getCertificadoDatosDiscapacidad()) {
			this.saveDiscapacidad(respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getCertificadoDatosDiscapacidad(), expediente);
		}

		NisaeServiceImpl.logger.info("NisaeServiceImpl consultaDiscapacidad expediente: Fin");

	}

	/**
	 * Consulta la interoperabilidad de discapacidad
	 * 
	 * @param expediente: expediente
	 * @return String codigo del estado de la respuesta
	 * @throws ParseException
	 */
	public void consultaDiscapacidad(Expedientes expediente) throws ParseException {
		NisaeServiceImpl.logger
				.info("NisaeServiceImpl consultaDiscapacidad INICIO expediente: " + expediente.getIdExpediente00());
		Peticion peticion = InteroperabilidadUtils.getDatosDiscapacidad(expediente, "AUDIT_USER");

		Respuesta respuesta = null;
		try {
			respuesta = intermediacion.peticionSincrona(peticion);
		} catch (Exception e) {
			ManagerErrors.manageException(e,
					"Error al invocar a NISAE - consultaDiscapacidad: " + ExceptionUtils.getStackTrace(e));
		}
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		String iopTraza = "";
		if (ResultadosIOPEnum.TER.getCod().equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();

		} else if (ResultadosIOPEnum.TRAMITADA.getCod()
				.equals(respuesta.getAtributos().getEstado().getCodigoEstado())) {
			try {
				codResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getResultado();
				descResultado = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getDescripcion();
			} catch (Exception e) {
				codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
				descResultado = respuesta.getAtributos().getEstado().getLiteralError();
			}

		} else {
			codResultado = respuesta.getAtributos().getEstado().getCodigoEstado();
			descResultado = respuesta.getAtributos().getEstado().getLiteralError();

		}

		if (null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getDatosTraza()) {
			iopTraza = respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getDatosTraza().getIdTraza();
			if (null != respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta()) {
				Calendar ahora = Calendar.getInstance();
				ahora.add(Calendar.HOUR, respuesta.getAtributos().getEstado().getTiempoEstimadoRespuesta());
				fechaInvocacionTer = ahora.getTime();
			}
		}

		DatosInterop datosInterop = new DatosInterop();
		datosInterop.setIdExpediente19(expediente.getIdExpediente00());
		datosInterop = this.datosInteropDao.findIdExpediente(datosInterop);
		datosInterop.setFolderId(expediente.getFolderId00());

		datosInterop.setIdtraDiscapa19(iopTraza);
		datosInterop.setfConDiscapa19(UtilidadesFecha
				.formatearStringToDateFormato(respuesta.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulDiscapa19(codResultado);
		datosInterop.setResulDiscapa19(descResultado);
		datosInterop.setFinvokeDiscapa19(fechaInvocacionTer);

		datosInteropService.saveDatosInterop(datosInterop, Constantes.Nisae.COD_CERTIFICADO_CONSULTA_DISCAPACIDAD);

		if (null != respuesta.getTransmisiones() && null != respuesta.getTransmisiones().getTransmisionDatos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getCertificadoDatosDiscapacidad()) {
			this.saveDiscapacidad(respuesta.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getCertificadoDatosDiscapacidad(), expediente);
		}

		NisaeServiceImpl.logger.info("NisaeServiceImpl consultaDiscapacidad expediente: Fin");

	}

	private void saveDiscapacidad(CertificadoDatosDiscapacidad datosDiscapacidad, Expedientes expediente) {
		Discapacidad discapacidad = new Discapacidad();
		discapacidad.setIdExpediente71(expediente.getIdExpediente00());
		discapacidad.setIdSolicitante71(expediente.getSolicitantes().getIdSolicitante01());
		discapacidad.setDiscapacidadFisica71(Constantes.VAL_NUM_NO);
		discapacidad.setDiscapacidadIntelecto71(Constantes.VAL_NUM_NO);
		discapacidad.setDiscapacidadSensorial71(Constantes.VAL_NUM_NO);
		discapacidad.setUsuAlta71(UtilSeguridad.getNameUsuarioConectado());
		if (!Utilidades.esBlancoNulo(datosDiscapacidad.getFechaEfectos())) {
			try {
				discapacidad.setfResolucion71(UtilidadesFecha.formatearStringToDateFormat(
						datosDiscapacidad.getFechaEfectos(), Constantes.DATE_FORMAT_TIMESTAMP_NOTIME));
			} catch (ParseException e) {
				NisaeServiceImpl.logger.error("NisaeServiceImpl saveDiscapacidad Formatea fecha error");
			}
		}

		// discapacidad.setDescDiscapacidad71("DESCRIPCION PENDIENTE");
		if (null != datosDiscapacidad.getTiposDiscapacidad()
				&& null != datosDiscapacidad.getTiposDiscapacidad().getTipoDiscapacidad()
				&& datosDiscapacidad.getTiposDiscapacidad().getTipoDiscapacidad().size() > 0) {
			for (String tipoDisc : datosDiscapacidad.getTiposDiscapacidad().getTipoDiscapacidad()) {
				if (tipoDisc.equalsIgnoreCase(Constantes.NisaeDiscapacidad.FISICA)) {
					discapacidad.setDiscapacidadFisica71(Constantes.VAL_NUM_SI);
				} else if (tipoDisc.equalsIgnoreCase(Constantes.NisaeDiscapacidad.INTELECTUAL)) {
					discapacidad.setDiscapacidadIntelecto71(Constantes.VAL_NUM_SI);
				} else if (tipoDisc.equalsIgnoreCase(Constantes.NisaeDiscapacidad.SENSORIAL)) {
					discapacidad.setDiscapacidadSensorial71(Constantes.VAL_NUM_SI);
				}
			}
		}

		this.discapacidadService.saveDatosDiscapacidad(discapacidad);
	}
}