package com.ejie.ad74a.jms.util;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ejie.ad74a.model.Contactos;
import com.ejie.ad74a.model.Cuentas;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.model.ErrorJms;
import com.ejie.ad74a.model.Estados;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Perfiles;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.util.comun.UtilParseToolkit;
import com.ejie.ad74a.util.comun.UtilTokenXlnets;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.util.comun.UtilidadesXML;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.util.constantes.EstadosExpedienteEnum;
import com.ejie.ad74a.util.constantes.ProcedimientosEnum;
import com.ejie.ad74a.util.constantes.TipoAportacionEnum;
import com.ejie.ad74a.util.constantes.TipoIdentificadorEnum;
import com.ejie.ad74a.util.constantes.modelos.TipoExpedientes;
import com.ejie.ad74a.ws.client.platea.model.context.ContextSubmissionEvent;
import com.ejie.ad74a.ws.client.platea.model.context.DocumentEvent;
import com.ejie.ad74a.ws.client.platea.model.context.DocumentsEvent;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aContact;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aDatosDireccionPostal;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aEjgvDocument;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aElementoGR;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aPersonaContacto;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aPostalAddress;
import com.ejie.ad74a.ws.client.platea.model.ejgvDocument.Ad74aProvincia;
import com.ejie.ad74a.ws.client.platea.model.task.Task;

public final class ModelApplicationParser {

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

	private ModelApplicationParser() {
	}

	/**
	 * Carga los datos del expedientes que vienen en el EJGV
	 * 
	 * @param ejgvDocument           Ad74aEjgvDocument
	 * @param contextSubmissionEvent ContextSubmissionEvent
	 * @return Expedientes
	 * @throws Exception
	 */
	public static Expedientes getProceedingFromEjgv(Ad74aEjgvDocument ejgvDocument,
			ContextSubmissionEvent contextSubmissionEvent) throws Exception {

		Expedientes expediente = new Expedientes();

		expediente.setFolderId00(contextSubmissionEvent.getFolderID());
		expediente.setNumRegistro00(contextSubmissionEvent.getRegistryNumber());
		String regDate = contextSubmissionEvent.getRegistryTimestamp();

		try {
			if (null != regDate && regDate.contains("-")) {
				expediente.setfRegistro00(
						UtilidadesFecha.formatearStringToDateFormat(regDate, Constantes.DATE_FORMAT_PLATEA_XML_EVENTS));
			} else if (null != regDate && regDate.contains("/")) {
				expediente.setfRegistro00(UtilidadesFecha.formatearStringToDateFormat(regDate,
						Constantes.DATE_FORMAT_TIMESTAMP_MASK_DEFAULT));
			}

		} catch (ParseException e) {
			logger.error("Error al parsear la fecha de registro");
		}
		expediente.setfAlta00(expediente.getfRegistro00());

		expediente.setfRecepcion00(UtilidadesFecha.getFechaSistema());

		// ID_TIPO_ENTRADA_00
		String subType = contextSubmissionEvent.getSubmissionType();
		/**
		 * public static final String TEL_ACTION_ID_SOLICITUD_PAPEL_0 =
		 * "r02d1869618978B004C6E5823C4C682F2C2B681A2E3F"; public static final String
		 * TEL_ACTION_ID_APORTE_PAPEL_0 =
		 * "r02dFE0673A510281D750C9F9758A73EE2A8DD217E5C"; public static final String
		 * TEL_ACTION_ID_SOLICITUD = "1"; public static final String
		 * TEL_ACTION_ID_APORTACION = "2";
		 * 
		 * &lt;submissionType&gt;1&lt;/submissionType&gt;
		 * &lt;submissionTypeNameEs&gt;Solicitud&lt;/submissionTypeNameEs&gt;
		 * &lt;submissionTypeNameEu&gt;Eskaera&lt;/submissionTypeNameEu&gt;
		 * 
		 * &lt;submissionType&gt;r02d1869618978B004C6E5823C4C682F2C2B681A2E3F&lt;/submissionType&gt;
		 * &lt;submissionTypeNameEs&gt;Solicitud presencial&lt;/submissionTypeNameEs&gt;
		 * &lt;submissionTypeNameEu&gt;Eskaera presentziala&lt;/submissionTypeNameEu&gt;
		 * 
		 */
		if (subType.equalsIgnoreCase(TipoAportacionEnum.SOLICITUD.getTipo())
				|| subType.equalsIgnoreCase(TipoAportacionEnum.APORTACION_DOCUMENTOS.getTipo())) {
			expediente.setIdTipoEntrada00(TipoExpedientes.idTipoEntrada00.TELEMATICA.getIdStr());
		} else {
			expediente.setIdTipoEntrada00(TipoExpedientes.idTipoEntrada00.PRESENCIAL.getIdStr());
		}

		// NUM_EXPEDIENTE_00 -> en la tarea de apertura

		// TODO ID_TIPO_NOT_00
		// expediente.setIdTipoNot00("0");
		// TODO CANAL_NOT_00
		// expediente.setCanalNot00("1");

		getNotifContact(ejgvDocument, expediente);

		expediente.setIdProcedimiento00(ejgvDocument.getBody().getBasicInfo().getProcedureID());

		if (expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.BAJA.getId())) {
			expediente.setfBaja00(expediente.getfRegistro00());
		}

		expediente.setDeOficio00(Constantes.TipoSolicitud.SOLICITUD_NO_OFICIO);
		// URGENCIA_00 Por defecto no es urgente, salvo que tenga documento de urgencia
		expediente.setUrgencia00(TipoExpedientes.urgencia00.NO.getId());
		expediente.setEstados(new Estados(EstadosExpedienteEnum.PEND_APERTURA.getId()));

		// TODO ID_DIRECCION_00

		// SE_OPONE_00 Este campos hace referencia a un texto en la solicitud:
		// ¿AUTORIZA a la Dirección de Servicios Sociales para realizar consultas, así
		// como para solicitar datos e informes, al Servicio Vasco de Salud, o a otras
		// entidades sanitarias y administraciones con competencia en materia de
		// servicios sociales, que fueran necesarios con relación a su situación
		// sanitaria y social, con garantía de confidencialidad y a los exclusivos fines
		// de acceso al servicio público de teleasistencia solicitado y de mantenimiento
		// de dicho servicio?.
		// viene cargado en: declaracion5
		if (null != ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion()) {
			expediente.setSeOpone00(UtilParseToolkit.getDataSeOpone(ejgvDocument.getBody().getDetailInfo()
					.getObligacionComunicacion().getDeclaraciones().getDeclaracionesResponsables().getDeclaracion5()));

			if (null != ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion().getDeclaraciones()
					&& null != ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion().getDeclaraciones()
							.getDeclaracionesResponsables()) {

				if (null != ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion().getDeclaraciones()
						.getDeclaracionesResponsables().getDeclaracion5()) {
					expediente.setAutorizaConsulta00(
							Integer.valueOf(ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion()
									.getDeclaraciones().getDeclaracionesResponsables().getDeclaracion5()));
				}
				if (null != ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion().getDeclaraciones()
						.getDeclaracionesResponsables().getDeclaracion6()) {
					expediente.setAutorizaDarInfo00(
							Integer.valueOf(ejgvDocument.getBody().getDetailInfo().getObligacionComunicacion()
									.getDeclaraciones().getDeclaracionesResponsables().getDeclaracion6()));
				}
			}

		}

		expediente = getDataSpouse(ejgvDocument, expediente);

		if (null != ejgvDocument.getBody().getDetailInfo().getExisteInstalacion()
				&& null != ejgvDocument.getBody().getDetailInfo().getExisteInstalacion().getInstalacion()
				&& null != ejgvDocument.getBody().getDetailInfo().getExisteInstalacion().getInstalacion()
						.getInstalado()) {
			expediente.setExisteInstalacion00(Integer.valueOf(
					ejgvDocument.getBody().getDetailInfo().getExisteInstalacion().getInstalacion().getInstalado()));

		} else {
			expediente.setExisteInstalacion00(0);
		}

		expediente.setUsuAlta00(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);

		// Para el procedimiento de baja
		if (null != ejgvDocument.getBody().getDetailInfo().getDatosBaja()
				&& null != ejgvDocument.getBody().getDetailInfo().getDatosBaja().getOtrosDatosSolicitante()) {
			expediente.setIdMotivoBaja00(Utilidades.getLongToString(ejgvDocument.getBody().getDetailInfo()
					.getDatosBaja().getOtrosDatosSolicitante().getSolicitanteMotivoBaja()));
			expediente.setObservaciones00(ejgvDocument.getBody().getDetailInfo().getDatosBaja()
					.getOtrosDatosSolicitante().getObservaciones());
			// expediente.setfBaja00(UtilParseToolkit.codeDate(ejgvDocument.getBody().getDetailInfo().getDatosBaja()
			// .getOtrosDatosSolicitante().getSolicitanteFechaBaja()));
		}

		// Para el procedimiento de informe de intervencion
		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaMotivoSolInforme() && null != ejgvDocument
				.getBody().getDetailInfo().getPestanaMotivoSolInforme().getGrupoMotivoSolInforme()) {
			expediente.setMotivoInforme00(ejgvDocument.getBody().getDetailInfo().getPestanaMotivoSolInforme()
					.getGrupoMotivoSolInforme().getMotivoSolInforme());
		}

		// Obtenemos un técnico del grupo de usuarios técnicos.
		Collection<String> listaTecnicos = UtilTokenXlnets.getListTecnicos().keySet();
		if (!listaTecnicos.isEmpty()) {
			expediente.setTecnicoExpediente00(listaTecnicos.iterator().next());
		}

		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio().getGrupoServicio()) {
			if (null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio().getGrupoServicio()
					.getSolicitanteIdiomaServicioRadio()) {
				expediente.setIdiomaServicio00(Integer.valueOf(ejgvDocument.getBody().getDetailInfo()
						.getPestanaDatosServicio().getGrupoServicio().getSolicitanteIdiomaServicioRadio()));
			}
		}

		// Si tiene representante
		if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI()) {
			expediente.setTipoIdentificadorRep00(
					ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getPersonType());
			expediente
					.setIdentificadorRep00(ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getID());
			expediente.setContactoInstRep00(0);

			// si es una persona fisica
			if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getPersonType()
					&& ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getPersonType()
							.equalsIgnoreCase(TipoIdentificadorEnum.DNI.getId())) {
				expediente
						.setNombreRep00(ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getName());
				expediente.setApellido1Rep00(
						ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getApe1());
				expediente.setApellido2Rep00(
						ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getApe2());
				expediente.setSexoRep00(UtilParseToolkit
						.codeSex(ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getSexo()));
				expediente.setTipoRep00(Constantes.TIPO_PERSONA_FISICA_BBDD);
			} else {
				// es una persona juridica
				expediente.setRazonSocialRep00(
						ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getName());
				expediente.setTipoRep00(Constantes.TIPO_PERSONA_JURIDICA_BBDD);
			}

			// si tiene representante, hay que mirar si es contacto
			if (esRepresentanteContacto(ejgvDocument)) {
				expediente.setContactoInstRep00(Constantes.PresentaSolicitud.REPRESENTANTE);
			}
		}

		String idioma = null;
		// Si tiene representante
		if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI()) {
			idioma = ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getLanguage();
		} else if (null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI()
				&& !ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().isEmpty() && ejgvDocument
						.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI() != null) {
			idioma = ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
					.getLanguage();
		}
		expediente.setIdiomaNot00(idioma);

		return expediente;
	}

	private static boolean esRepresentanteContacto(Ad74aEjgvDocument ejgvDocument) {
		boolean esRepresentante = false;
		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getEsRepPersonaContGrupo()
				&& ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getEsRepPersonaContGrupo()
						.getEsRepPersonaCont().equalsIgnoreCase("1")) {
			esRepresentante = true;
		}
		return esRepresentante;

	}

	/**
	 * Carga los datos del solicitante del EJGV
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @return Solicitantes
	 * @throws Exception
	 */
	public static Solicitantes getApplicantFromEjgv(Ad74aEjgvDocument ejgvDocument) throws Exception {

		Solicitantes solicitante = new Solicitantes();
		String indentificador = ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
				.getInterestedRRI().getID();
		solicitante.setIdentificador01(indentificador);

		String nameSolicitante = ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
				.getInterestedRRI().getName();
		solicitante.setNombre01(nameSolicitante);

		String ape1Solicitante = ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
				.getInterestedRRI().getApe1();
		solicitante.setApellido101(ape1Solicitante);

		String ape2Solicitante = ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
				.getInterestedRRI().getApe2();
		solicitante.setApellido201(ape2Solicitante);

		solicitante.setTipoIdentificador01(ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
				.getInterestedRRI().getPersonType());

		solicitante.setSexo01(UtilParseToolkit.codeSex(ejgvDocument.getBody().getApplicantInfoRRI()
				.getInterestedListRRI().get(0).getInterestedRRI().getSexo()));

		if (null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
				&& null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
						.getGrupoSalud()) {
			solicitante.setfNacimiento01(UtilParseToolkit.codeDate(ejgvDocument.getBody().getDetailInfo()
					.getSolicitante().getgDatosSolicitante().getSolicitanteFechaNacimiento()));
			solicitante.setNumtis01(ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
					.getGrupoSalud().getSolicitanteNumeroTIS());
			String numeroSS = ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
					.getGrupoSalud().getSolicitanteNumeroSS();
			if (numeroSS != null) {
				numeroSS = String.join("", numeroSS.split("\\W+"));
			}
			solicitante.setNumss01(numeroSS);
		}

		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio().getGrupoServicio()) {
			if (null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio().getGrupoServicio()
					.getSolicitanteIdiomaServicioRadio()) {
				solicitante.setIdiomaServicio01(Integer.valueOf(ejgvDocument.getBody().getDetailInfo()
						.getPestanaDatosServicio().getGrupoServicio().getSolicitanteIdiomaServicioRadio()));
			}
			if (null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio().getGrupoServicio()
					.getOtroSolicitanteIdiomaServicio()) {
				solicitante.setOtroIdioma01(ejgvDocument.getBody().getDetailInfo().getPestanaDatosServicio()
						.getGrupoServicio().getOtroSolicitanteIdiomaServicio());
			}
		}

		solicitante.setBeneficiario01(Constantes.TipoSolicitante.ES_SOLICITANTE);

		if (null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
				&& null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
						.getGrupoDireccion()) {
			solicitante.setTlfnoServicio01(ejgvDocument.getBody().getDetailInfo().getSolicitante()
					.getgDatosSolicitante().getGrupoDireccion().getSolicitanteTelefonoServicio());
			solicitante.setTlfnoMovil01(ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
					.getGrupoDireccion().getSolicitanteTelefonoMovil());
			solicitante.setEmail01(ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
					.getGrupoDireccion().getSolicitanteEmail());
		}

		// TODO FK ID_INF_SOCIAL_01
		// TODO FK ID_DIRECCION_01

		solicitante.setUsuAlta01(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);

		return solicitante;
	}

	/**
	 * Carga los datos de contacto del EJGV
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @return List<Contactos>
	 * @throws Exception
	 */
	public static List<Contactos> getContactsFromEjgv(Ad74aEjgvDocument ejgvDocument) throws Exception {

		List<Contactos> listacontactos = new ArrayList<Contactos>();
		Contactos contacto = null;
		Integer orden = 1;
		// si el representantes es persona de contacto
		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getEsRepPersonaContGrupo()
				&& ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getEsRepPersonaContGrupo()
						.getEsRepPersonaCont().equalsIgnoreCase("1")
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0()) {
			contacto = new Contactos();
			contacto.setNombre03(ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0()
					.getNombreContacto0());
			contacto.setApellido103(ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0()
					.getApellido1Contacto0());
			contacto.setApellido203(ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0()
					.getApellido2Contacto0());
			contacto.setIdentificador03(ejgvDocument.getBody().getDetailInfo().getPestanaContactos()
					.getPersonaContacto0().getDniContacto0());
			contacto.setSexo03(UtilParseToolkit.codeSex(ejgvDocument.getBody().getDetailInfo().getPestanaContactos()
					.getPersonaContacto0().getSexoContacto0()));
			contacto.setTipoContacto03(UtilParseToolkit.codePersonType(ejgvDocument.getBody().getDetailInfo()
					.getPestanaContactos().getPersonaContacto0().getTipoContacto0()));
			contacto.setContactoInst03(Utilidades.getIntegerToString(ejgvDocument.getBody().getDetailInfo()
					.getPestanaContactos().getPersonaContacto0().getInstalacionContacto0()));
			contacto.setPoseeLlaves03(Utilidades.getIntegerToString(ejgvDocument.getBody().getDetailInfo()
					.getPestanaContactos().getPersonaContacto0().getLlavesContacto0()));
			contacto.setTlfno03(
					ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0().getTlf10());
			contacto.setTlfno203(
					ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0().getTlf20());
			contacto.setTlfno303(
					ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0().getTlf30());
			contacto.setParentesco03(ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonaContacto0()
					.getParentescoContacto0());
			contacto.setTipoIdentificador03(TipoIdentificadorEnum.DNI.getId());
			contacto.setOrden03(orden++);
			listacontactos.add(contacto);
		}

		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonasContacto()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaContactos().getPersonasContacto()
						.getElementoGR()) {
			Ad74aPersonaContacto personaContacto = null;
			contacto = new Contactos();
			StringBuilder personaStr = null;

			for (Ad74aElementoGR elemento : ejgvDocument.getBody().getDetailInfo().getPestanaContactos()
					.getPersonasContacto().getElementoGR()) {
				personaStr = new StringBuilder();
				contacto = new Contactos();
				personaStr.append(Constantes.TAG_PERSONA_CONTACTO_INI).append(elemento.getPersonaContacto())
						.append(Constantes.TAG_PERSONA_CONTACTO_FIN);
				personaContacto = (Ad74aPersonaContacto) UtilidadesXML
						.unmarshallerObject(cleanPersonaContacto(personaStr), Ad74aPersonaContacto.class);
				contacto.setNombre03(personaContacto.getNombreContacto());
				contacto.setApellido103(personaContacto.getApellido1Contacto());
				contacto.setApellido203(personaContacto.getApellido2Contacto());
				contacto.setIdentificador03(personaContacto.getDniContacto());
				contacto.setSexo03(UtilParseToolkit.codeSex(personaContacto.getSexoContacto()));
				contacto.setTipoContacto03(UtilParseToolkit.codePersonType(personaContacto.getTipoContacto()));
				contacto.setContactoInst03(Utilidades.getIntegerToString(personaContacto.getInstalacionContacto()));
				contacto.setPoseeLlaves03(Utilidades.getIntegerToString(personaContacto.getLlavesContacto()));
				contacto.setTlfno03(personaContacto.getTlf1());
				contacto.setTlfno203(personaContacto.getTlf2());
				contacto.setTlfno303(personaContacto.getTlf3());
				contacto.setParentesco03(personaContacto.getParentescoContacto());
				contacto.setTipoIdentificador03(TipoIdentificadorEnum.DNI.getId());
				contacto.setOrden03(orden++);
				listacontactos.add(contacto);
			}
		}

		return listacontactos;
	}

	private static String cleanPersonaContacto(StringBuilder personaContacto) {
		// El toolkit me envio el sexo asi: <sexoContacto>MUJER/</sexoContacto> -> Hay
		// que quitarl el /pegado a mujer
		String personaContactoStr = personaContacto.toString();
		personaContactoStr = personaContactoStr.replaceAll("<MUJER/>", "MUJER");
		personaContactoStr = personaContactoStr.replaceAll("<HOMBRE/>", "HOMBRE");

		return personaContactoStr;
	}

	/**
	 * Carga los datos de notificacion y si la solicitud tiene representante
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @param expediente   Expedientes
	 * @return Expedientes
	 */
	private static Expedientes getNotifContact(Ad74aEjgvDocument ejgvDocument, Expedientes expediente) {

		// expediente.setPresentaSol00(Constantes.PresentaSolicitud.INTERESADO);
		boolean tieneMail = false;
		boolean tieneSms = false;
		// Si tiene representante, se cogen los datos de notificacion del representante
		if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI()) {

			for (Ad74aContact contact : ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
					.getContactList().getContact()) {
				if (contact.getType().equalsIgnoreCase(Constantes.TipoContactoComunicacion.CONTACT_TYPE_EMAIL)) {
					expediente.setEmailNot00(contact.getValue().getEmailAddress());
					tieneMail = true;
				}
				if (contact.getType().equalsIgnoreCase(Constantes.TipoContactoComunicacion.CONTACT_TYPE_SMS)) {
					expediente.setTfnoNot00(contact.getValue().getSmsNumber());
					tieneSms = true;
				}
			}

			// expediente.setPresentaSol00(Constantes.PresentaSolicitud.REPRESENTANTE);

			if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount().getChannel()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
							.getChannel().getChannelType()) {
				expediente.setIdTipoNot00(ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI()
						.getAccount().getChannel().getChannelType());
			}

		} else if (null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
				.getAccount()) {

			if (null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
					.getAccount().getChannel()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
							.getInterestedRRI().getAccount().getChannel().getChannelType()) {
				expediente.setIdTipoNot00(ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
						.getInterestedRRI().getAccount().getChannel().getChannelType());
			}

			if (null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
					.getAccount().getContactList()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
							.getInterestedRRI().getAccount().getContactList().getContact()
					&& ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
							.getAccount().getContactList().getContact().size() > 0) {

				for (Ad74aContact contact : ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
						.getInterestedRRI().getAccount().getContactList().getContact()) {
					if (contact.getType().equalsIgnoreCase(Constantes.TipoContactoComunicacion.CONTACT_TYPE_EMAIL)) {
						expediente.setEmailNot00(contact.getValue().getEmailAddress());
						tieneMail = true;
					}
					if (contact.getType().equalsIgnoreCase(Constantes.TipoContactoComunicacion.CONTACT_TYPE_SMS)) {
						expediente.setTfnoNot00(contact.getValue().getSmsNumber());
						tieneSms = true;
					}
				}

			}
		}

		if (tieneMail && tieneSms) {
			expediente.setCanalNot00(Constantes.CanalNotificacion.CANAL_NOTIF_ALL);
		} else if (tieneMail) {
			expediente.setCanalNot00(Constantes.CanalNotificacion.CANAL_NOTIF_MAIL);
		} else if (tieneSms) {
			expediente.setCanalNot00(Constantes.CanalNotificacion.CANAL_NOTIF_SMS);
		}
		return expediente;
	}

	/**
	 * Carga los datos del conyuge
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @param expediente   Expedientes
	 * @return Expedientes
	 */
	private static Expedientes getDataSpouse(Ad74aEjgvDocument ejgvDocument, Expedientes expediente) {
		expediente.setExencionSol00(Constantes.exencionPago.EXENCION_PAGO_NO);
		if (null != ejgvDocument.getBody().getDetailInfo().getExencionPago()
				&& null != ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
				&& null != ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion().getGrupoConyuge()) {

			expediente.setApellido1Con00(ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
					.getGrupoConyuge().getApe1Conyuge());
			expediente.setApellido2Con00(ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
					.getGrupoConyuge().getApe2Conyuge());
			expediente.setNombreCon00(ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
					.getGrupoConyuge().getNombreConyuge());
			expediente.setIdentificadorCon00(ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
					.getGrupoConyuge().getDniConyuge());
			expediente.setTipoIdenCon00(ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
					.getGrupoConyuge().getTIPODNIConyuge());
			expediente.setAutorizacionCon00(
					Utilidades.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion()
							.getGrupoConyuge().getAutorizacionConyuge().getElementoautorizacionConyuge()));
		}

		if (ejgvDocument.getBody().getBasicInfo().getProcedureID().equalsIgnoreCase(Constantes.Procedimientos.ALTA)) {
			if (null != ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion().getExencionPago1()) {
				expediente.setExencionSol00(Integer.valueOf(
						ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion().getExencionPago1()));
			}
		} else if (ejgvDocument.getBody().getBasicInfo().getProcedureID()
				.equalsIgnoreCase(Constantes.Procedimientos.REVISION_PRECIO)) {
//			if (null != ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencionRevision1()
//					&& null != ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencionRevision1()
//							.getExencionRevision()) {
//				// TODO que hacer con este campo
//				// Si Revisión = 0
//				// Si excención = 1
//				String esRevisionoExencion = ejgvDocument.getBody().getDetailInfo().getExencionPago()
//						.getExencionRevision1().getExencionRevision();
//				if (esRevisionoExencion
//						.equalsIgnoreCase(String.valueOf(Constantes.exencionPago.EXENCION_PAGO_SI.toString()))) {
//					expediente.setExencionSol00(Constantes.exencionPago.EXENCION_PAGO_SI);
//				} else {
//					expediente.setExencionSol00(Constantes.exencionPago.REVISION_PAGO);
//				}
//			}
			expediente.setExencionSol00(Constantes.exencionPago.REVISION_PAGO);
		}

//		if (null != ejgvDocument.getBody().getDetailInfo().getExencionPago()
//				&& null != ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencionRevision1()) {
//			expediente.setExencionSol00(Integer.valueOf(
//					ejgvDocument.getBody().getDetailInfo().getExencionPago().getExencion().getExencionPago1()));
//		}

		return expediente;
	}

	/**
	 * Carga los datos de la cuenta bancaria
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @return Cuentas
	 */
	public static Cuentas getBankAccount(Ad74aEjgvDocument ejgvDocument) {
		Cuentas cuenta = null;
		if (null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios()
				&& null != ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios().getGrupoBancario()) {
			cuenta = new Cuentas();
			cuenta.setNumCuenta05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios().getGrupoBancario()
					.getDbCuenta().replaceAll("\\s+", ""));

//			cuenta.setTitularCuenta05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios()
//					.getGrupoBancario().getDbTitular());

			cuenta.setNombreTitCuenta05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios()
					.getGrupoBancario().getDbTitularNombre());
			cuenta.setApellido1TitCuenta05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios()
					.getGrupoBancario().getDbTitularApe1());
			cuenta.setApellido2TitCuenta05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios()
					.getGrupoBancario().getDbTitularApe2());

			cuenta.setIdenTitular05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios().getGrupoBancario()
					.getDocTitularNCuenta());
			cuenta.setCodTipoIdenTitular05(ejgvDocument.getBody().getDetailInfo().getPestanaDatosBancarios()
					.getGrupoBancario().getTipoDocTitularNCuenta());
			cuenta.setUsuAlta05(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);
		}

		return cuenta;
	}

	/**
	 * Carga los datos del perfil
	 * 
	 * - Persona mayor de 75 años que vive sola: PerfilSolicitante0
	 * 
	 * - Persona mayor de 65 años en situación de dependencia reconocida (grado I,
	 * II, III).: PerfilSolicitante1
	 * 
	 * - Persona mayor de 65 años en situación de riesgo de dependencia (al menos 23
	 * puntos en la aplicación del Baremo de valoración). Nota: deberá adjuntarse
	 * documentación acreditativa: PerfilSolicitante2
	 * 
	 * - Persona con discapacidad intelectual en situación de dependencia
	 * reconocida: PerfilSolicitante3
	 * 
	 * - Persona con discapacidad física en situación de dependencia reconocida:
	 * PerfilSolicitante4
	 * 
	 * - Persona con discapacidad sensorial en situación de dependencia reconocida:
	 * PerfilSolicitante5
	 * 
	 * - Personas que padezcan una enfermedad mental diagnosticada en situación de
	 * dependencia reconocida: PerfilSolicitante6
	 * 
	 * - Personas que estando en situación de riesgo de aislamiento social, se les
	 * detecte, por el servicio social de base, necesidades que pueden ser atendidas
	 * por el servicio de teleasistencia. (Nota: deberá adjuntarse informe del
	 * servicio social de base): PerfilSolicitante6
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @return Perfiles
	 */
	public static Perfiles getProfile(Ad74aEjgvDocument ejgvDocument) {

		Perfiles perfil = new Perfiles();
		perfil.setMayor75Sola07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante0().getElementoPerfilSolicitante0()));
		perfil.setMayor65Dep07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante1().getElementoPerfilSolicitante1()));
		perfil.setMayor65RiesgoDep07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante2().getElementoPerfilSolicitante2()));
		perfil.setDisIntelectual07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante3().getElementoPerfilSolicitante3()));
		perfil.setDisFisica07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante4().getElementoPerfilSolicitante4()));
		perfil.setDisSensorial07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante5().getElementoPerfilSolicitante5()));
		perfil.setEnfMental07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante6().getElementoPerfilSolicitante6()));
		perfil.setRiesgoAislamiento07(Utilidades
				.getIntegerToString(ejgvDocument.getBody().getDetailInfo().getSolicitante().getGrupoPerfilSolicitante()
						.getPerfilSolicitante().getPerfilSolicitante7().getElementoPerfilSolicitante7()));
		// TODO piso tutelados??????
		perfil.setPisoTutelado07(Constantes.PisoTutelado.NO_ESTA);

		perfil.setUsuAlta07(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);
		return perfil;
	}

	/**
	 * Carga los datos de la direccion, tanto para el procedimiento de alta como el
	 * de modificacion
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @return Direcciones
	 */
	public static Direcciones getAddress(Ad74aEjgvDocument ejgvDocument) {

		Direcciones direccion = new Direcciones();

		Ad74aDatosDireccionPostal datosDireccion = null;

		if (ejgvDocument.getBody().getBasicInfo().getProcedureID().equalsIgnoreCase(Constantes.Procedimientos.ALTA)
				&& null != ejgvDocument.getBody().getDetailInfo().getSolicitante()
				&& null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
				&& null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
						.getGrupoDireccion()
				&& null != ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
						.getGrupoDireccion().getDatosDireccionPostal()) {
			datosDireccion = ejgvDocument.getBody().getDetailInfo().getSolicitante().getgDatosSolicitante()
					.getGrupoDireccion().getDatosDireccionPostal();
		} else if (ejgvDocument.getBody().getBasicInfo().getProcedureID()
				.equalsIgnoreCase(Constantes.Procedimientos.MODIFICACION)
				&& null != ejgvDocument.getBody().getDetailInfo().getDatosModificacion()
				&& null != ejgvDocument.getBody().getDetailInfo().getDatosModificacion().getOtrosDatosSolicitante()
				&& null != ejgvDocument.getBody().getDetailInfo().getDatosModificacion().getOtrosDatosSolicitante()
						.getDatosDireccionPostal()) {
			datosDireccion = ejgvDocument.getBody().getDetailInfo().getDatosModificacion().getOtrosDatosSolicitante()
					.getDatosDireccionPostal();
		}

		if (null != datosDireccion) {
			direccion.setCp06(datosDireccion.getCp());
			direccion.setIdProvincia06(datosDireccion.getProvincia());
			direccion.setIdMunicipio06(datosDireccion.getMunicipio());
			direccion.setIdLocalidad06(Utilidades.getLongToString(datosDireccion.getLocalidad()));
			direccion.setCalle06(datosDireccion.getCalle());
			direccion.setIdCalle06(Utilidades.getLongToString(datosDireccion.getCalleCod()));
			direccion.setPortal06(datosDireccion.getPortal());
			direccion.setIdPortal06(Utilidades.getLongToString(datosDireccion.getPortalCod()));
			direccion.setPiso06(datosDireccion.getPiso());
			direccion.setEscalera06(datosDireccion.getEscalera());
			direccion.setLetra06(datosDireccion.getLetra());

			direccion.setUsuAlta06(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);
		}

		return direccion;
	}

	/**
	 * Carga los datos de la direccion de notificacion
	 * 
	 * @param ejgvDocument Ad74aEjgvDocument
	 * @return Direcciones
	 */
	public static Direcciones getAddressNotification(Ad74aEjgvDocument ejgvDocument) {

		Direcciones direccion = null;

		Ad74aPostalAddress direccionPostal = null;

		// Si tiene representante
		if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI()) {

			if (null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
							.getChannel()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
							.getChannel().getChannelType()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
							.getChannel().getChannelInfo()
					&& ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount().getChannel()
							.getChannelType().equalsIgnoreCase(Constantes.TipoNotificacion.POSTAL)) {
				direccionPostal = ejgvDocument.getBody().getApplicantInfoRRI().getRepresentativeRRI().getAccount()
						.getChannel().getChannelInfo().getPostalAddress();

			}
		} else {
			// Si NO tiene representante
			if (null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
					.getAccount()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
							.getInterestedRRI().getAccount().getChannel()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
							.getInterestedRRI().getAccount().getChannel().getChannelType()
					&& null != ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
							.getInterestedRRI().getAccount().getChannel().getChannelInfo()
					&& ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0).getInterestedRRI()
							.getAccount().getChannel().getChannelType()
							.equalsIgnoreCase(Constantes.TipoNotificacion.POSTAL)) {
				direccionPostal = ejgvDocument.getBody().getApplicantInfoRRI().getInterestedListRRI().get(0)
						.getInterestedRRI().getAccount().getChannel().getChannelInfo().getPostalAddress();
			}

		}

		if (null != direccionPostal) {
			direccion = new Direcciones();
			direccion.setCp06(direccionPostal.getCp());
			direccion.setPais06(direccionPostal.getPais());
			if (!Utilidades.esBlancoNulo(direccionPostal.getCodDireccion())) {
				direccion.setIdCalle06(Long.valueOf(direccionPostal.getCodDireccion()));
			}
			direccion.setCalle06(direccionPostal.getDireccion());
			String localidad = direccionPostal.getLocalidad();
			if (!Utilidades.esBlancoNulo(localidad)) {
				direccion.setIdLocalidad06(Long.valueOf(getidDireccionNotificacion(localidad)));
				direccion.setLocalidad06(getDescDireccionNotificacion(localidad));
			}
			String municipio = direccionPostal.getMunicipio();
			if (!Utilidades.esBlancoNulo(municipio)) {
				direccion.setIdMunicipio06(getidDireccionNotificacion(municipio));
				direccion.setMunicipio06(getDescDireccionNotificacion(municipio));
			}

			if (null != direccionPostal.getProvincia()) {
				Ad74aProvincia provincia = direccionPostal.getProvincia();
				if (null != provincia.getLanguage() && provincia.getLanguage().size() > 0) {
					String prov = provincia.getLanguage().get(0);
					prov = prov.replaceAll("<!\\[CDATA\\[", "");
					prov = prov.replaceAll("]]>", "");
					if (!Utilidades.esBlancoNulo(prov)) {
						direccion.setIdProvincia06(getidDireccionNotificacion(prov));
						direccion.setProvincia06(getDescDireccionNotificacion(prov));
					}
				}
			}

			if (!Utilidades.esBlancoNulo(direccionPostal.getCodPortal())) {
				direccion.setIdPortal06(Long.valueOf(direccionPostal.getCodPortal()));
			}
			direccion.setPortal06(direccionPostal.getPortal());
			direccion.setPiso06(direccionPostal.getPiso());
			direccion.setLetra06(direccionPostal.getLetra());
			direccion.setEscalera06(direccionPostal.getEscalera());

			direccion.setUsuAlta06(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);
		}

		return direccion;
	}

	/**
	 * Recoge formatos (10105300000158)Bikuña y devuelve el codigo entre los
	 * parentesis
	 * 
	 * @param texto
	 * @return
	 */
	private static String getidDireccionNotificacion(String texto) {
		int pos = texto.indexOf(")");
		return texto.substring(1, pos);
	}

	private static String getDescDireccionNotificacion(String texto) {
		int pos = texto.indexOf(")");
		return texto.substring(pos + 1, texto.length());
	}

	/**
	 * Genera el error a guardar a partir del mensaje
	 * 
	 * @param mapaMensaje
	 * @return
	 * @throws IOException
	 * @throws SQLException
	 */
	public static ErrorJms getMensajeJmsToError(Map mapaMensaje) {
		ErrorJms mensajeErrorJms = new ErrorJms();
		// mensajeErrorJms.setMensaje00((String) mapaMensaje.get("mensajeTexto"));
		mensajeErrorJms.setTipomensaje50((String) mapaMensaje.get("EventWhat"));
		mensajeErrorJms.setIdjms50((String) mapaMensaje.get("jmsid"));
		mensajeErrorJms.setProcedure50((String) mapaMensaje.get("ProcedureID"));
		mensajeErrorJms.setFecrecep50(new Date());
		mensajeErrorJms.setEstado50(Constantes.EstadoErrores.ESTADO_ERRONEO);
		return mensajeErrorJms;
	}

	public static String getNumRegistryFromTask(Task task) {
		String numRegistro = "";
		if (null != task.getTaskInfo() && null != task.getTaskInfo().getOpenTaskData()
				&& null != task.getTaskInfo().getOpenTaskData().getFolderDocuments()
				&& null != task.getTaskInfo().getOpenTaskData().getFolderDocuments().getDocumentsTelematicsActionsList()
				&& null != task.getTaskInfo().getOpenTaskData().getFolderDocuments().getDocumentsTelematicsActionsList()
						.getDocumentsTelematicAction()
				&& null != task.getTaskInfo().getOpenTaskData().getFolderDocuments().getDocumentsTelematicsActionsList()
						.getDocumentsTelematicAction().get(0)
				&& null != task.getTaskInfo().getOpenTaskData().getFolderDocuments().getDocumentsTelematicsActionsList()
						.getDocumentsTelematicAction().get(0).getRegistryNumber()) {
			numRegistro = task.getTaskInfo().getOpenTaskData().getFolderDocuments().getDocumentsTelematicsActionsList()
					.getDocumentsTelematicAction().get(0).getRegistryNumber();
		}

		return numRegistro;
	}

	public static List<DocumentosTarea> parseDocumentEventToDocTarea(DocumentsEvent listaDocumentos,
			Long idTareaTramite) {
		DocumentosTarea docTarea = null;
		List<DocumentosTarea> listaDocTarea = new ArrayList<DocumentosTarea>();
		for (DocumentEvent docEvent : listaDocumentos.getDocumentEvent()) {
			docTarea = new DocumentosTarea();

			docTarea.setIdTareaTram18(idTareaTramite);
			docTarea.setNombreDoc18(docEvent.getSourceName());
			docTarea.setOiddokusi18(docEvent.getOid());
			docTarea.setTipoAdjunto18(docEvent.getDocumentType());

			if (!Utilidades.esBlancoNulo(docEvent.getFechaEntregado())) {
				docTarea.setfEntrega18(UtilidadesFecha.parsearFechaPlatea(docEvent.getFechaEntregado()));
				docTarea.setDepEntrega18(docEvent.getOrganoEntregado());
				if (!Utilidades.esBlancoNulo(docEvent.getDocumentoEntregado())) {
					docTarea.setNombreDoc18(docEvent.getDocumentoEntregado());
				}
			}
			listaDocTarea.add(docTarea);
		}
		return listaDocTarea;
	}

}
