package com.ejie.ad74a.ws.client.platea.service;

import java.time.LocalDate;
import java.util.List;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;

import com.ejie.ad74a.model.BandejaPapel0;
import com.ejie.ad74a.model.Contactos;
import com.ejie.ad74a.model.DocumentoPapel0;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.MaestroTiposDoc;
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.ProcedimientosEnum;
import com.ejie.ad74a.util.constantes.TipoAportacionEnum;
import com.ejie.ad74a.util.constantes.TipoIdentificadorEnum;
import com.ejie.ad74a.util.constantes.TiposDocumentoRoleEnum;
import com.ejie.ad74a.utilProperties.config.Config;
import com.ejie.ad74a.ws.client.platea.solAportacion.TAuthSvt;
import com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean;
import com.ejie.ad74a.ws.client.platea.solAportacion.TDocFormatType;
import com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList;
import com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentType;
import com.ejie.ad74a.ws.client.platea.solAportacion.TKeyValue;
import com.ejie.ad74a.ws.client.platea.solAportacion.TKeyValueList;
import com.ejie.ad74a.ws.client.platea.solAportacion.TNotificationType;
import com.ejie.ad74a.ws.client.platea.solAportacion.TSexType;

/**
 * Agrupa utilidades para ficheros
 * 
 * @author
 * 
 */
public class Papel0Utils {

	/**
	 * Constructor privado
	 */
	private Papel0Utils() {
	}

	public static com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionRequest createSolicitudPapel0(
			Expedientes expediente, List<DocumentosTarea> listaDocumentos, List<MaestroTiposDoc> listDocInterop,
			String anioIRPF) throws Exception {

		com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionRequest solicitud = new com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionRequest();
		solicitud.setTelActionID(TipoAportacionEnum.SOLICITUD_CIUDADANO_PRESENCIAL.getTipo());
		// TODO revisar esto
		solicitud.setTelActionName(
				PlateaUtils.getTelActionName(TipoAportacionEnum.SOLICITUD_CIUDADANO_PRESENCIAL.getTipo()));
		solicitud.setProcedureID(expediente.getIdProcedimiento00());
		solicitud.setProcedureName(PlateaUtils.getProcedureName(expediente.getIdProcedimiento00()));
		solicitud.setProcedureFamilyID(ProcedimientosEnum.getFamilyId(expediente.getIdProcedimiento00()));
		solicitud.setProcedureFamilyName(getProcedureFamilyName(expediente.getIdProcedimiento00()));
		solicitud.setProcedureMailboxID(Constantes.PLATEA_MAILBOX_ADMIN);
		solicitud.setProcedureMailboxName(Constantes.PLATEA_MAILBOX_ADMIN);
		solicitud.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		solicitud.setDepartmentName(PlateaUtils.getDepartmentName());
		solicitud.setEntityID(Constantes.PLATEA_ENTITY_ID);
		solicitud.setEntityName(getEntityName());
		solicitud.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		solicitud.setManagingUnitName(PlateaUtils.getUnidadName());
		solicitud.setMailboxID(UtilSeguridad.getPuestoUsuarioConectado());
		solicitud.setSenderID(PlateaUtils.getSender(expediente));
		// solicitud.setDeliveryKey(value);
		// solicitud.setProcessingRoleID(value);
		// solicitud.setProcessingRoleName(value);
		solicitud.setRegistrySender(PlateaUtils.getSender(expediente));
		Properties prop = Config.loadProperties(com.ejie.ad74a.constantes.Constantes.CONFIG_PATH);
		String serieDoc = prop.getProperty("documentum.serie.documental");
		if (!Utilidades.esBlancoNulo(serieDoc)) {
			solicitud.setDocumentalSerieID(serieDoc);
		} else {
			solicitud.setDocumentalSerieID("6423");
		}

		// if (contacto != null && contacto.getIdContacto03() != null) {
		solicitud.setApplicantRRI(getApplicantRRI(expediente));
		// }

		solicitud.setAuditUser(com.ejie.ad74a.constantes.Constantes.COD_APLICACION + "#"
				+ com.ejie.ad74a.constantes.Constantes.COD_APLICACION + "#"
				+ com.ejie.ad74a.constantes.Constantes.COD_APLICACION);

		// Ya viene registrada la solicitud de papel 0. Se añade el registro original en
		// caso de haberlo
		solicitud.setMustRegistry(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.FALSE);
		solicitud.setRegistryID(getRegistryId(expediente));
		if (null != expediente.getNumRegistroOtro00()) {
			solicitud.setRegistrySubmissionID(getRegistrySubmissionId(expediente));
		}

		solicitud.setIsProcedureTelematic(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.TRUE);
		solicitud.setIsValidationSync(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.FALSE);
		// solicitud.setFolderID
		solicitud.setFolderNumber(expediente.getNumExpediente00());
		solicitud.setYear(UtilidadesFecha.getCurrentYear());
		// solicitud.setParticipantID();
		solicitud.setManagerCalendar(com.ejie.ad74a.ws.client.platea.solAportacion.TCalendarType.CAPV);
		solicitud.setResolutionCalendar(com.ejie.ad74a.ws.client.platea.solAportacion.TCalendarType.CAPV);

		// Documentos
		if (null != listaDocumentos) {
			// TODO pasar documento de solicitud
			com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList listDocuments = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList();
			for (DocumentosTarea docTarea : listaDocumentos) {
				listDocuments.getDocument().add(getDocument(docTarea));
			}

			// configurar servicios de interoperabilidad
			if (isValidToInterop(expediente)) {
				com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList listDocumentsInterop = setServiciosInterop(
						expediente, listDocInterop, anioIRPF);

				for (com.ejie.ad74a.ws.client.platea.solAportacion.TDocument docInterop : listDocumentsInterop
						.getDocument()) {
					listDocuments.getDocument().add(docInterop);
				}
			}

			solicitud.setDocumentList(listDocuments);

		}

		return solicitud;
	}

	/**
	 * Se llama a las interoperabilidades siempre que no se haya opuesto y para el
	 * procedimiento de alta
	 * 
	 * @param expediente
	 * @return
	 */
	private static boolean isValidToInterop(Expedientes expediente) {

		boolean isValid = true;
		if (null != expediente.getSeOpone00() && expediente.getSeOpone00().compareTo(Constantes.VAL_NUM_SI) == 0) {
			isValid = false;
		} else if (!(expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())
				|| expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.MODIFICACION.getId())
				|| expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId()))) {
			isValid = false;
		}
		return isValid;
	}

	public static com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList setServiciosInterop(
			Expedientes expediente, List<MaestroTiposDoc> listDocInterop, String anioIRPF) throws Exception {

		com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList lista = new TDocumentList();

		for (MaestroTiposDoc tipoDoc : listDocInterop) {
			if ((expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())
					|| expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.MODIFICACION.getId())
					|| expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId()))
					&& tipoDoc.getRoleid36().equalsIgnoreCase(TiposDocumentoRoleEnum.PADRON_GENERICO.getRoleID())) {
				lista.getDocument().add(getDocPadronInterop(expediente, tipoDoc));
			} else if (expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())
					&& tipoDoc.getRoleid36().equalsIgnoreCase(TiposDocumentoRoleEnum.CONSULTA_DGP.getRoleID())) {
				lista.getDocument().add(getDGPInterop(expediente, tipoDoc));
			} else if (expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())
					&& tipoDoc.getRoleid36().equalsIgnoreCase(TiposDocumentoRoleEnum.IMSERSO_GRADO_DEPEN.getRoleID())) {
				lista.getDocument().add(getImsersoInterop(expediente, tipoDoc));
			} else if (expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())
					&& tipoDoc.getRoleid36().equalsIgnoreCase(TiposDocumentoRoleEnum.DISCAPACIDAD.getRoleID())) {
				lista.getDocument().add(getDiscapacidad(expediente, tipoDoc));
			} else if ((expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())
					|| expediente.getIdProcedimiento00().equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId()))
					&& tipoDoc.getRoleid36().equalsIgnoreCase(TiposDocumentoRoleEnum.CERT_IRPF_RENTA.getRoleID())) {
				if (null != expediente.getExencionSol00()
						&& expediente.getExencionSol00().compareTo(Constantes.VAL_NUM_SI) == 0) {
					lista.getDocument().add(getIrpfInterop(expediente, tipoDoc, anioIRPF));
				}
			}
		}

		return lista;

	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getDiscapacidad(Expedientes expediente,
			MaestroTiposDoc tipoDoc) {

		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(tipoDoc.getRoleid36());
		doc.setDocumentRoleName(getRoleName(tipoDoc));
		doc.setDocumentType(TDocumentType.TRA);
		doc.setFormat(TDocFormatType.ELECTRONICO);

		TAuthSvt svt = new TAuthSvt();
		svt.setOsbServiceSOAP(Constantes.DatosConsultaInterop.OBS_SERVICE_SOAP);
		svt.setOperation(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.OPERATION);
		svt.setHeaderToken("true");
		svt.setTargetNameSpaceWS(Constantes.DatosConsultaInterop.TARGET_NAMESPACE);
		svt.setIsInteroperabilidad(TBoolean.TRUE);

		TKeyValueList keyList = new TKeyValueList();
		TKeyValue keyValue = new TKeyValue();

		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_TIPO_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(TipoIdentificadorEnum.getDescEs(expediente.getSolicitantes().getTipoIdentificador01()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_DOCUMENTACION);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getIdentificador01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_NOMBRE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombre01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE1);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido101());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE2);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido201());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_CODIGOCOMUNIDADAUTONOMA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.EUSKADI);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_CODIGOPROVINCIA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getDirecciones().getProvinciaNORA().getCodProvincia());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_FECHANACIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilidadesFecha.formatearDateToString(expediente.getSolicitantes().getfNacimiento01(),
				com.ejie.ad74a.constantes.Constantes.FORMATO_FECHA_YYYYMMDD));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_CONSENTIMIENTOTIPOSDISCAPACIDAD);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue("Ley");
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_NOMBRECOMPLETO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombreCompleto());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_EXPEDIENTE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getNumExpediente00());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_FECHACONSULTA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilidadesFecha.getFechaSistema(com.ejie.ad74a.constantes.Constantes.FORMATO_FECHA_YYYYMMDD));
		keyList.getItem().add(keyValue);

		svt.setParameterList(keyList);

		svt.setProcedureID(expediente.getIdProcedimiento00());
		svt.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		svt.setManagingUnitName(PlateaUtils.getUnidadName());
		svt.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		svt.setDepartmentName(PlateaUtils.getDepartmentName());
		svt.setOrganismID(Constantes.PLATEA_ORGANISM_ID);
		svt.setOrganismName(PlateaUtils.getOrganismName());
		svt.setIsInteroperabilidad(TBoolean.TRUE);

		doc.setIsObligatoryCode(TBoolean.TRUE);

		doc.setSvt(svt);

		return doc;

	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getDocPadronInterop(Expedientes expediente,
			MaestroTiposDoc tipoDoc) {

		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(tipoDoc.getRoleid36());
		doc.setDocumentRoleName(getRoleName(tipoDoc));
		doc.setDocumentType(TDocumentType.TRA);
		doc.setFormat(TDocFormatType.ELECTRONICO);

		TAuthSvt svt = new TAuthSvt();
		svt.setOsbServiceSOAP(Constantes.DatosConsultaInterop.OBS_SERVICE_SOAP);
		svt.setOperation(Constantes.DatosConsultaInterop.DatosPadronInterop.OPERATION);
		svt.setHeaderToken("true");
		svt.setTargetNameSpaceWS(Constantes.DatosConsultaInterop.TARGET_NAMESPACE);
		svt.setIsInteroperabilidad(TBoolean.TRUE);
		TKeyValueList keyList = new TKeyValueList();
		TKeyValue keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_TERRITORIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getDirecciones().getIdProvincia06());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_MUNICIPIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getDirecciones().getIdMunicipio06());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_FECHA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilidadesFecha.getFechaSistema(com.ejie.ad74a.constantes.Constantes.FORMATO_FECHA_YYYYMMDD));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_TIPO_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(TipoIdentificadorEnum.getDescEs(expediente.getSolicitantes().getTipoIdentificador01()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_DOCUMENTACION);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getIdentificador01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_NOMBRE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombre01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE1);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido101());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE2);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido201());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_FINALIDAD);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(ProcedimientosEnum.getLabelDescEs(expediente.getIdProcedimiento00()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_CONSENTIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue("Ley");
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_PROCEDIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.DatosConsultaInterop.PROCEDIMIENTO_DOCUMENTAL);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_UNIDAD_TRAMITADORA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.PLATEA_UNIDAD_ES + " - " + Constantes.PLATEA_UNIDAD_EU);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_NOMBRE_COMPLETO_FUNCIONARIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilSeguridad.getUsuarioConectado().getFullName());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DNI_FUNCIONARIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilSeguridad.getUsuarioConectado().getNif());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DATOS_ENTRADA_TIPO_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(TipoIdentificadorEnum.getDescEs(expediente.getSolicitantes().getTipoIdentificador01()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DATOS_ENTRADA_NUM_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getIdentificador01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DATOS_ENTRADA_NOMBRE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombre01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DATOS_ENTRADA_APE1);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido101());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DATOS_ENTRADA_APE2);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido201());
		keyList.getItem().add(keyValue);

		svt.setParameterList(keyList);

		svt.setProcedureID(expediente.getIdProcedimiento00());
		svt.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		svt.setManagingUnitName(PlateaUtils.getUnidadName());
		svt.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		svt.setDepartmentName(PlateaUtils.getDepartmentName());
		svt.setOrganismID(Constantes.PLATEA_ORGANISM_ID);
		svt.setOrganismName(PlateaUtils.getOrganismName());
		svt.setIsInteroperabilidad(TBoolean.TRUE);

		doc.setIsObligatoryCode(TBoolean.TRUE);

		doc.setSvt(svt);

		return doc;

	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getDGPInterop(Expedientes expediente,
			MaestroTiposDoc tipoDoc) {

		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(tipoDoc.getRoleid36());
		doc.setDocumentRoleName(getRoleName(tipoDoc));
		doc.setDocumentType(TDocumentType.TRA);
		doc.setFormat(TDocFormatType.ELECTRONICO);

		TAuthSvt svt = new TAuthSvt();
		svt.setOsbServiceSOAP(Constantes.DatosConsultaInterop.OBS_SERVICE_SOAP);
		svt.setOperation(Constantes.DatosConsultaInterop.DatosDGPInterop.OPERATION);
		svt.setHeaderToken("true");
		svt.setTargetNameSpaceWS(Constantes.DatosConsultaInterop.TARGET_NAMESPACE);
		svt.setIsInteroperabilidad(TBoolean.TRUE);
		TKeyValueList keyList = new TKeyValueList();
		TKeyValue keyValue = new TKeyValue();

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_TIPO_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(TipoIdentificadorEnum.getDescEs(expediente.getSolicitantes().getTipoIdentificador01()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_DOCUMENTACION);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getIdentificador01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_NOMBRE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombre01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE1);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido101());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE2);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido201());
		keyList.getItem().add(keyValue);

		//
		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDGPInterop.KEY_TIPO_TRAMITE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue("CONSULTA");
		keyList.getItem().add(keyValue);

		//
		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_FINALIDAD);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(ProcedimientosEnum.getLabelDescEs(expediente.getIdProcedimiento00()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_CONSENTIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue("Ley");
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_PROCEDIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.DatosConsultaInterop.PROCEDIMIENTO_DOCUMENTAL);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_UNIDAD_TRAMITADORA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.PLATEA_UNIDAD_ES + " - " + Constantes.PLATEA_UNIDAD_EU);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosDiscapacidadInterop.KEY_EXPEDIENTE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getNumExpediente00());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_NOMBRE_COMPLETO_FUNCIONARIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilSeguridad.getUsuarioConectado().getFullName());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosPadronInterop.KEY_DNI_FUNCIONARIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(UtilSeguridad.getUsuarioConectado().getNif());
		keyList.getItem().add(keyValue);

		svt.setParameterList(keyList);

		svt.setProcedureID(expediente.getIdProcedimiento00());
		svt.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		svt.setManagingUnitName(PlateaUtils.getUnidadName());
		svt.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		svt.setDepartmentName(PlateaUtils.getDepartmentName());
		svt.setOrganismID(Constantes.PLATEA_ORGANISM_ID);
		svt.setOrganismName(PlateaUtils.getOrganismName());
		svt.setIsInteroperabilidad(TBoolean.TRUE);

		doc.setIsObligatoryCode(TBoolean.TRUE);

		doc.setSvt(svt);

		return doc;

	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getImsersoInterop(Expedientes expediente,
			MaestroTiposDoc tipoDoc) {

		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(tipoDoc.getRoleid36());
		doc.setDocumentRoleName(getRoleName(tipoDoc));
		doc.setDocumentType(TDocumentType.TRA);
		doc.setFormat(TDocFormatType.ELECTRONICO);

		TAuthSvt svt = new TAuthSvt();
		svt.setOsbServiceSOAP(Constantes.DatosConsultaInterop.OBS_SERVICE_SOAP);
		svt.setOperation(Constantes.DatosConsultaInterop.DatosImsersoInterop.OPERATION);
		svt.setHeaderToken("true");
		svt.setTargetNameSpaceWS(Constantes.DatosConsultaInterop.TARGET_NAMESPACE);
		svt.setIsInteroperabilidad(TBoolean.TRUE);
		TKeyValueList keyList = new TKeyValueList();
		TKeyValue keyValue = new TKeyValue();

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_TIPO_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(TipoIdentificadorEnum.getDescEs(expediente.getSolicitantes().getTipoIdentificador01()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_DOCUMENTACION);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getIdentificador01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_NOMBRE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombre01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE1);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido101());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE2);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido201());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_FINALIDAD);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(ProcedimientosEnum.getLabelDescEs(expediente.getIdProcedimiento00()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_CONSENTIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue("Ley");
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_PROCEDIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.DatosConsultaInterop.PROCEDIMIENTO_DOCUMENTAL);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_UNIDAD_TRAMITADORA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.PLATEA_UNIDAD_ES + " - " + Constantes.PLATEA_UNIDAD_EU);
		keyList.getItem().add(keyValue);

		svt.setParameterList(keyList);

		svt.setProcedureID(expediente.getIdProcedimiento00());
		svt.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		svt.setManagingUnitName(PlateaUtils.getUnidadName());
		svt.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		svt.setDepartmentName(PlateaUtils.getDepartmentName());
		svt.setOrganismID(Constantes.PLATEA_ORGANISM_ID);
		svt.setOrganismName(PlateaUtils.getOrganismName());
		svt.setIsInteroperabilidad(TBoolean.TRUE);

		doc.setIsObligatoryCode(TBoolean.TRUE);

		doc.setSvt(svt);

		return doc;

	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getIrpfInterop(Expedientes expediente,
			MaestroTiposDoc tipoDoc, String anioIRPF) {

		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(tipoDoc.getRoleid36());
		doc.setDocumentRoleName(getRoleName(tipoDoc));
		doc.setDocumentType(TDocumentType.TRA);
		doc.setFormat(TDocFormatType.ELECTRONICO);

		TAuthSvt svt = new TAuthSvt();
		svt.setOsbServiceSOAP(Constantes.DatosConsultaInterop.OBS_SERVICE_SOAP);
		svt.setOperation(Constantes.DatosConsultaInterop.DatosIrpfInterop.OPERATION);
		svt.setHeaderToken("true");
		svt.setTargetNameSpaceWS(Constantes.DatosConsultaInterop.TARGET_NAMESPACE);
		svt.setIsInteroperabilidad(TBoolean.TRUE);
		TKeyValueList keyList = new TKeyValueList();
		TKeyValue keyValue = new TKeyValue();

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_TIPO_DOC);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(TipoIdentificadorEnum.getDescEs(expediente.getSolicitantes().getTipoIdentificador01()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_DOCUMENTACION);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getIdentificador01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_NOMBRE);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getNombre01());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE1);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido101());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_TITULAR_APE2);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getSolicitantes().getApellido201());
		keyList.getItem().add(keyValue);

		//
		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosIrpfInterop.KEY_DATOS_ENTRADA_TERRITORIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(expediente.getDirecciones().getIdProvincia06());
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(getIRPFYear());
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		try {
			keyValue.setValue(UtilidadesFecha.getCurrentYear());
		} catch (Exception e) {

		}
		keyList.getItem().add(keyValue);
		//

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_FINALIDAD);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(ProcedimientosEnum.getLabelDescEs(expediente.getIdProcedimiento00()));
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_CONSENTIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue("Ley");
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_PROCEDIMIENTO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.DatosConsultaInterop.PROCEDIMIENTO_DOCUMENTAL);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.KEY_UNIDAD_TRAMITADORA);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(Constantes.PLATEA_UNIDAD_ES + " - " + Constantes.PLATEA_UNIDAD_EU);
		keyList.getItem().add(keyValue);

		keyValue = new TKeyValue();
		keyValue.setKey(Constantes.DatosConsultaInterop.DatosIrpfInterop.KEY_DATOS_ENTRADA_EJERCICIO);
		keyValue.setType(Constantes.SVT_TYPE_STRING);
		keyValue.setValue(anioIRPF);
		keyList.getItem().add(keyValue);

		svt.setParameterList(keyList);

		svt.setProcedureID(expediente.getIdProcedimiento00());
		svt.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		svt.setManagingUnitName(PlateaUtils.getUnidadName());
		svt.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		svt.setDepartmentName(PlateaUtils.getDepartmentName());
		svt.setOrganismID(Constantes.PLATEA_ORGANISM_ID);
		svt.setOrganismName(PlateaUtils.getOrganismName());
		svt.setIsInteroperabilidad(TBoolean.TRUE);

		doc.setIsObligatoryCode(TBoolean.TRUE);

		doc.setSvt(svt);

		return doc;

	}

	/**
	 * Calcula el anyo para consultar la interoperabilidad del IRPF
	 * 
	 * - Si el dia en curso es menor o igual al 30 de julio, el anyo es el actual
	 * menos 2
	 * 
	 * - Si el dia en curso es mayor al 30 de julio, el anyo es el actual menos 1
	 */
	public static String getIRPFYear() {
		try {
			Properties prop = Config.loadProperties(com.ejie.ad74a.constantes.Constantes.CONFIG_PATH);
			String dia = prop.getProperty("consulta.irpf.dia");
			String mes = prop.getProperty("consulta.irpf.mes");
			LocalDate dateSistema = LocalDate.now();
			int yearResult = dateSistema.getYear();

			LocalDate fechaComp = LocalDate.of(dateSistema.getYear(), Integer.parseInt(mes), Integer.parseInt(dia));
			if (dateSistema.compareTo(fechaComp) < 1) {
				yearResult = yearResult - 2;
			} else {
				yearResult = yearResult - 1;
			}

			return String.valueOf(yearResult);
		} catch (Exception e) {
			return "";
		}
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N getProcedureFamilyName(String procedureId) {
		com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N textI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N();
		com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N stringI18N;

		stringI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N();
		stringI18N.setLocale(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.ES);
		stringI18N.setValue(ProcedimientosEnum.getFamilyNameEs(procedureId));
		textI18N.getText().add(stringI18N);

		stringI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N();
		stringI18N.setLocale(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.EU);
		stringI18N.setValue(ProcedimientosEnum.getFamilyNameEu(procedureId));
		textI18N.getText().add(stringI18N);

		return textI18N;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N getEntityName() {
		com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N textI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N();
		com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N stringI18N;

		stringI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N();
		stringI18N.setLocale(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.ES);
		stringI18N.setValue(Constantes.PLATEA_ENTITY_NAME_ES);
		textI18N.getText().add(stringI18N);

		stringI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N();
		stringI18N.setLocale(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.EU);
		stringI18N.setValue(Constantes.PLATEA_ENTITY_NAME_EU);
		textI18N.getText().add(stringI18N);

		return textI18N;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N getRoleName(MaestroTiposDoc tipoDoc) {
		com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N textI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TTextI18N();
		com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N stringI18N;

		stringI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N();
		stringI18N.setLocale(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.ES);
		stringI18N.setValue(tipoDoc.getDescEs36());
		textI18N.getText().add(stringI18N);

		stringI18N = new com.ejie.ad74a.ws.client.platea.solAportacion.TStringI18N();
		stringI18N.setLocale(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.EU);
		stringI18N.setValue(tipoDoc.getDescEu36());
		textI18N.getText().add(stringI18N);

		return textI18N;
	}

	public static com.ejie.ad74a.ws.client.platea.solAportacion.TApplicantRRI getApplicantRRI(Expedientes expediente) {

		com.ejie.ad74a.ws.client.platea.solAportacion.TApplicantRRI applicantRRI = new com.ejie.ad74a.ws.client.platea.solAportacion.TApplicantRRI();

		com.ejie.ad74a.ws.client.platea.solAportacion.TInterestedList participantList = new com.ejie.ad74a.ws.client.platea.solAportacion.TInterestedList();
		participantList.getInterested().add(getInterested(expediente));
		applicantRRI.setInterestedList(participantList);

		applicantRRI.setRepresentative(getRepresentante(expediente));

		applicantRRI.setRole(com.ejie.ad74a.ws.client.platea.solAportacion.TParticipantType.SOLICITANTE);

		return applicantRRI;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TInterested getInterested(Expedientes expediente) {
		com.ejie.ad74a.ws.client.platea.solAportacion.TInterested interested = new com.ejie.ad74a.ws.client.platea.solAportacion.TInterested();
		com.ejie.ad74a.ws.client.platea.solAportacion.TPersonIDName personID = new com.ejie.ad74a.ws.client.platea.solAportacion.TPersonIDName();
		personID.setID(expediente.getSolicitantes().getIdentificador01());

		if (expediente.getSolicitantes().getTipoIdentificador01().equalsIgnoreCase(TipoIdentificadorEnum.DNI.getId())) {
			personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.NIF);
		} else if (expediente.getSolicitantes().getTipoIdentificador01()
				.equalsIgnoreCase(TipoIdentificadorEnum.CIF.getId())) {
			personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.CIF);
		} else if (expediente.getSolicitantes().getTipoIdentificador01()
				.equalsIgnoreCase(TipoIdentificadorEnum.NIE.getId())) {
			personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.NIE);
		} else if (expediente.getSolicitantes().getTipoIdentificador01()
				.equalsIgnoreCase(TipoIdentificadorEnum.OTROS.getId())) {
			personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.OTHER);
		} else if (expediente.getSolicitantes().getTipoIdentificador01()
				.equalsIgnoreCase(TipoIdentificadorEnum.PASAPORTE.getId())) {
			personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.PASSPORT);
		}

		if (StringUtils.isNotBlank(expediente.getSexoRep00())) {
			// Informa sexo si esta disponible
			personID.setSex(Constantes.SEXO_HOMBRE_BBDD.equalsIgnoreCase(expediente.getSolicitantes().getSexo01())
					? TSexType.HOMBRE
					: TSexType.MUJER);
		}

		if (null != expediente.getSolicitantes().getNombre01()) {
			personID.setName(expediente.getSolicitantes().getNombre01());
			personID.setFirstLastName(expediente.getSolicitantes().getApellido101());
			personID.setSecondLastName(expediente.getSolicitantes().getApellido201());
		}
		interested.setPersonID(personID);

		com.ejie.ad74a.ws.client.platea.solAportacion.TAccount account = new com.ejie.ad74a.ws.client.platea.solAportacion.TAccount();
		com.ejie.ad74a.ws.client.platea.solAportacion.TContactList contactList = new com.ejie.ad74a.ws.client.platea.solAportacion.TContactList();
		com.ejie.ad74a.ws.client.platea.solAportacion.TContact contact = null;
		if (expediente.getCanalNot00().equalsIgnoreCase(Constantes.CanalesNotificacion.SMS)) {
			contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
			contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.SMS);
			contact.setSms(expediente.getTfnoNot00());
			contact.setPhone(expediente.getTfnoNot00());
			contactList.getContact().add(contact);
		} else if (expediente.getCanalNot00().equalsIgnoreCase(Constantes.CanalesNotificacion.MAIL)) {
			contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
			contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.EMAIL);
			contact.setEmail(expediente.getEmailNot00());
			contactList.getContact().add(contact);
		} else if (expediente.getCanalNot00().equalsIgnoreCase(Constantes.CanalesNotificacion.SMS_Y_MAIL)) {
			contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
			contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.SMS);
			contact.setSms(expediente.getTfnoNot00());
			contact.setPhone(expediente.getTfnoNot00());
			contactList.getContact().add(contact);

			contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
			contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.EMAIL);
			contact.setEmail(expediente.getEmailNot00());
			contactList.getContact().add(contact);
		}
		account.setContactList(contactList);

		com.ejie.ad74a.ws.client.platea.solAportacion.TNotifyChannel notifyChannel = new com.ejie.ad74a.ws.client.platea.solAportacion.TNotifyChannel();
		if (expediente.getIdTipoNot00().equalsIgnoreCase(Constantes.TipoNotificacion.TELEMATICA)) {
			notifyChannel.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TNotificationType.ELECTRONICA);
		} else if (expediente.getIdTipoNot00().equalsIgnoreCase(Constantes.TipoNotificacion.POSTAL)) {
			notifyChannel.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TNotificationType.POSTAL);
			// Se coge la direccion de notificacion (que puede ser diferente a la direccion
			// de la persona)
			notifyChannel.setPostal(PlateaUtils.getPostalAddress(expediente.getDireccionNotif()));
		}
		account.setNotify(notifyChannel);
		interested.setAccount(account);

		interested.setInterestedInLaw(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.TRUE);

		if (Constantes.CASTELLANO.equals(expediente.getIdiomaNot00())) {
			interested.setLanguage(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.ES);
		} else if (Constantes.EUSKARA.equals(expediente.getIdiomaNot00())) {
			interested.setLanguage(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.EU);
		}

		// interested.setLanguage(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.fromValue(expediente.getIdiomaNot00()));
		return interested;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TRepresentative getRepresentante(
			Expedientes expediente) {
		com.ejie.ad74a.ws.client.platea.solAportacion.TRepresentative representante = null;
		// if (null != contacto) {
		if (expediente != null && expediente.getIdentificadorRep00() != null) {
			representante = new com.ejie.ad74a.ws.client.platea.solAportacion.TRepresentative();

			com.ejie.ad74a.ws.client.platea.solAportacion.TPersonIDName personID = new com.ejie.ad74a.ws.client.platea.solAportacion.TPersonIDName();
			// Informa documento de identificacion del representante
			personID.setID(expediente.getIdentificadorRep00());

			if (expediente.getTipoIdentificadorRep00().equalsIgnoreCase(TipoIdentificadorEnum.DNI.getId())) {
				personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.NIE);
			} else if (expediente.getTipoIdentificadorRep00().equalsIgnoreCase(TipoIdentificadorEnum.CIF.getId())) {
				personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.CIF);
			} else if (expediente.getTipoIdentificadorRep00().equalsIgnoreCase(TipoIdentificadorEnum.NIE.getId())) {
				personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.NIE);
			} else if (expediente.getTipoIdentificadorRep00().equalsIgnoreCase(TipoIdentificadorEnum.OTROS.getId())) {
				personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.OTHER);
			} else if (expediente.getTipoIdentificadorRep00()
					.equalsIgnoreCase(TipoIdentificadorEnum.PASAPORTE.getId())) {
				personID.setType(com.ejie.ad74a.ws.client.platea.solAportacion.TNiaType.PASSPORT);
			}

			if (null != expediente.getNombreRep00()) {
				personID.setName(expediente.getNombreRep00());
				personID.setFirstLastName(expediente.getApellido1Rep00());
				personID.setSecondLastName(expediente.getApellido2Rep00());

			} else if (null != expediente.getRazonSocialRep00()) {
				personID.setName(expediente.getRazonSocialRep00());
			}

			if (StringUtils.isNotBlank(expediente.getSexoRep00())) {
				// Informa sexo si esta disponible
				personID.setSex(
						Constantes.SEXO_HOMBRE_BBDD.equalsIgnoreCase(expediente.getSexoRep00()) ? TSexType.HOMBRE
								: TSexType.MUJER);
			}

			com.ejie.ad74a.ws.client.platea.solAportacion.TAccount account = new com.ejie.ad74a.ws.client.platea.solAportacion.TAccount();

			/* ### TNotify INICIO ### */
			com.ejie.ad74a.ws.client.platea.solAportacion.TNotify notify = new com.ejie.ad74a.ws.client.platea.solAportacion.TNotify();

			notify.setAddresseeID(expediente.getIdentificadorRep00());
			notify.setAddresseeName(expediente.getNombreCompletoRep());

			com.ejie.ad74a.ws.client.platea.solAportacion.TNotifyChannel notChanel = new com.ejie.ad74a.ws.client.platea.solAportacion.TNotifyChannel();
			if (expediente.getIdTipoNot00().equalsIgnoreCase(Constantes.TipoNotificacion.TELEMATICA)) {
				notChanel.setChannelType(TNotificationType.ELECTRONICA);
				notify.setChannel(notChanel);
			} else if (expediente.getIdTipoNot00().equalsIgnoreCase(Constantes.TipoNotificacion.POSTAL)) {
				notChanel.setChannelType(TNotificationType.POSTAL);
				notChanel.setPostal(PlateaUtils.getPostalAddress(expediente.getDireccionNotif()));
				notify.setChannel(notChanel);
			}
			/* ### TNotify FIN ### */
			account.setNotify(notChanel);

			com.ejie.ad74a.ws.client.platea.solAportacion.TContactList contactList = new com.ejie.ad74a.ws.client.platea.solAportacion.TContactList();
			com.ejie.ad74a.ws.client.platea.solAportacion.TContact contact = null;
			if (expediente.getCanalNot00().equalsIgnoreCase(Constantes.CanalesNotificacion.SMS)) {
				contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
				contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.SMS);
				contact.setSms(expediente.getTfnoNot00());
				contact.setPhone(expediente.getTfnoNot00());
				contactList.getContact().add(contact);
			} else if (expediente.getCanalNot00().equalsIgnoreCase(Constantes.CanalesNotificacion.MAIL)) {
				contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
				contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.EMAIL);
				contact.setEmail(expediente.getEmailNot00());
				contactList.getContact().add(contact);
			} else if (expediente.getCanalNot00().equalsIgnoreCase(Constantes.CanalesNotificacion.SMS_Y_MAIL)) {
				contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
				contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.EMAIL);
				contact.setEmail(expediente.getEmailNot00());
				contactList.getContact().add(contact);
				contact = new com.ejie.ad74a.ws.client.platea.solAportacion.TContact();
				contact.setChannelType(com.ejie.ad74a.ws.client.platea.solAportacion.TContactType.SMS);
				contact.setSms(expediente.getTfnoNot00());
				contact.setPhone(expediente.getTfnoNot00());
				contactList.getContact().add(contact);
			}
			account.setContactList(contactList);

			representante.setAccount(account);
			representante.setPersonID(personID);

			if (Constantes.CASTELLANO.equals(expediente.getIdiomaNot00())) {
				representante.setLanguage(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.ES);
			} else if (Constantes.EUSKARA.equals(expediente.getIdiomaNot00())) {
				representante.setLanguage(com.ejie.ad74a.ws.client.platea.solAportacion.TLanguage.EU);
			}

		}

		return representante;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID getRegistryId(Expedientes expediente)
			throws Exception {
		com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID registryId = new com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID();
		registryId.setRegistryNumber(expediente.getNumRegistro00());
		if (null != expediente.getfRegistro00()) {
			registryId.setRegistryDate(UtilidadesFecha.formatearDateToStringMasc(expediente.getfRegistro00(),
					Constantes.DATE_FORMAT_PLATEA_XML_EVENTS));
		}

		return registryId;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID getRegistrySubmissionId(
			Expedientes expediente) throws Exception {
		com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID registryId = new com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID();
		registryId.setRegistryNumber(expediente.getNumRegistroOtro00());
		if (null != expediente.getfRegistroOtro00()) {
			registryId.setRegistryDate(UtilidadesFecha.formatearDateToStringMasc(expediente.getfRegistroOtro00(),
					Constantes.DATE_FORMAT_PLATEA_XML_EVENTS));
		}

		return registryId;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID getRegistryIdApor(BandejaPapel0 papel0)
			throws Exception {
		com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID registryId = new com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID();
		registryId.setRegistryNumber(papel0.getNumRegistro12());
		if (null != papel0.getfRegistro12()) {
			registryId.setRegistryDate(UtilidadesFecha.formatearDateToStringMasc(papel0.getfRegistro12(),
					Constantes.DATE_FORMAT_PLATEA_XML_EVENTS));
		}

		return registryId;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID getRegistrySubmissionIdApor(
			BandejaPapel0 papel0) throws Exception {
		com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID registryId = new com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID();
		registryId.setRegistryNumber(papel0.getNumRegistro12());
		if (null != papel0.getfRegOriginal12()) {
			registryId.setRegistryDate(UtilidadesFecha.formatearDateToStringMasc(papel0.getfRegOriginal12(),
					Constantes.DATE_FORMAT_PLATEA_XML_EVENTS));
		}

		return registryId;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getDocument(DocumentosTarea docTarea)
			throws Exception {
		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(docTarea.getMaestroTiposDoc().getRoleid36());
		doc.setDokusiID(docTarea.getOiddokusi18());
		doc.setDocumentRoleName(getRoleName(docTarea.getMaestroTiposDoc()));
		doc.setDocumentType(TDocumentType.DAD);
		doc.setFormat(TDocFormatType.PAPEL);
		if (!Utilidades.esBlancoNulo(docTarea.getNombreDoc18())) {
			String[] datos = docTarea.getNombreDoc18().split("\\.");
			doc.setExtension(datos[1]);
			doc.setSourceName(docTarea.getNombreDoc18());
		} else if (null != docTarea.getMaestroTiposDoc()) {
			doc.setSourceName(docTarea.getMaestroTiposDoc().getDesc());
		}
		return doc;
	}

	private static com.ejie.ad74a.ws.client.platea.solAportacion.TDocument getDocumentPapel0(DocumentoPapel0 docPapel)
			throws Exception {
		com.ejie.ad74a.ws.client.platea.solAportacion.TDocument doc = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocument();

		doc.setDocumentRoleID(docPapel.getTipoDocumento().getRoleid36());
		doc.setDokusiID(docPapel.getOidDocumento13());
		doc.setDocumentRoleName(getRoleName(docPapel.getTipoDocumento()));
		doc.setDocumentType(TDocumentType.DAD);
		doc.setFormat(TDocFormatType.ELECTRONICO);

		if (!Utilidades.esBlancoNulo(docPapel.getNombreDoc13())) {
			doc.setExtension("pdf");
			doc.setSourceName(docPapel.getNombreDoc13());
		}
		if (!Utilidades.esBlancoNulo(docPapel.getExtension13())) {
			doc.setExtension(docPapel.getExtension13());
		}
		return doc;
	}

	public static com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionRequest createAportacionPapel0(
			Expedientes expediente, Contactos contacto, List<DocumentoPapel0> listDocPapel0,
			BandejaPapel0 bandejaPapel0) throws Exception {

		com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionRequest aportacion = new com.ejie.ad74a.ws.client.platea.solAportacion.TSubmissionRequest();
		aportacion.setTelActionID(TipoAportacionEnum.APORTACION_DOCUMENTOS_CIUDADANO_PRESENCIAL.getTipo());
		// TODO revisar esto
		aportacion.setTelActionName(
				PlateaUtils.getTelActionName(TipoAportacionEnum.APORTACION_DOCUMENTOS_CIUDADANO_PRESENCIAL.getTipo()));
		aportacion.setProcedureID(expediente.getIdProcedimiento00());
		aportacion.setProcedureName(PlateaUtils.getProcedureName(expediente.getIdProcedimiento00()));
		aportacion.setProcedureFamilyID(ProcedimientosEnum.getFamilyId(expediente.getIdProcedimiento00()));
		aportacion.setProcedureFamilyName(getProcedureFamilyName(expediente.getIdProcedimiento00()));
		aportacion.setProcedureMailboxID(Constantes.PLATEA_MAILBOX_ADMIN);
		aportacion.setProcedureMailboxName(Constantes.PLATEA_MAILBOX_ADMIN);
		aportacion.setDepartmentID(Constantes.PLATEA_DEPARTMENT_ID);
		aportacion.setDepartmentName(PlateaUtils.getDepartmentName());
		aportacion.setEntityID(Constantes.PLATEA_ENTITY_ID);
		aportacion.setEntityName(getEntityName());
		aportacion.setManagingUnitID(Constantes.PLATEA_MANAGIN_UNIT_ID);
		aportacion.setManagingUnitName(PlateaUtils.getUnidadName());
		aportacion.setMailboxID(UtilSeguridad.getPuestoUsuarioConectado());
		aportacion.setSenderID(PlateaUtils.getSender(expediente));
		// solicitud.setDeliveryKey(value);
		// solicitud.setProcessingRoleID(value);
		// solicitud.setProcessingRoleName(value);
		aportacion.setRegistrySender(PlateaUtils.getSender(expediente));
		aportacion.setDocumentalSerieID(Constantes.PLATEA_SERIE_DOCUMENTAL);

		aportacion.setApplicantRRI(getApplicantRRI(expediente));

		// auditUser: Auditor de accion en Dokusi. Concatenacion de los valores:
		// senderID#senderName#mailboxID. En caso de no indicarse se define por defecto
		// como 'procedureResp', en cuyo caso se conforma con la informacion del
		// responsable del procedimiento.
		// aportacion.setAuditUser(com.ejie.ad74a.constantes.Constantes.COD_APLICACION);
		aportacion.setAuditUser(com.ejie.ad74a.constantes.Constantes.COD_APLICACION + "#"
				+ com.ejie.ad74a.constantes.Constantes.COD_APLICACION + "#"
				+ com.ejie.ad74a.constantes.Constantes.COD_APLICACION);

		aportacion.setRegistryID(getRegistryIdApor(bandejaPapel0));
		aportacion.setMustRegistry(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.TRUE);
		aportacion.setIsProcedureTelematic(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.TRUE);
		aportacion.setIsValidationSync(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.FALSE);
		// solicitud.setFolderID
		// solicitud.setFolderNumber
		aportacion.setYear(UtilidadesFecha.getCurrentYear());
		// solicitud.setParticipantID();
		aportacion.setManagerCalendar(com.ejie.ad74a.ws.client.platea.solAportacion.TCalendarType.CAPV);
		aportacion.setResolutionCalendar(com.ejie.ad74a.ws.client.platea.solAportacion.TCalendarType.CAPV);

		// datos propios de la aportacion
		aportacion.setFolderID(expediente.getFolderId00());
		// aportacion.setApplicationID(value);
		aportacion.setFolderNumber(expediente.getNumExpediente00());

//		com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID registryID = new com.ejie.ad74a.ws.client.platea.solAportacion.TRegistryID();
//		aportacion.setRegistrySubmissionID(registryID);
		// Datos del registro original
		if (null != bandejaPapel0.getNumRegOriginal12()) {
			aportacion.setRegistrySubmissionID(getRegistrySubmissionIdApor(bandejaPapel0));
		}

		aportacion.setMustRegistry(com.ejie.ad74a.ws.client.platea.solAportacion.TBoolean.FALSE);
		// Documentos
		if (null != listDocPapel0) {
			com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList listDocuments = new com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList();
			for (DocumentoPapel0 docPapel : listDocPapel0) {
				listDocuments.getDocument().add(getDocumentPapel0(docPapel));
			}
			aportacion.setDocumentList(listDocuments);
		}

		return aportacion;
	}

}