/*
* Copyright 2021 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANT�?AS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.ad74a.service.documentos;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringReader;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.Month;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

import javax.annotation.Resource;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.commons.io.IOUtils;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.xmlgraphics.util.MimeConstants;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParser.Feature;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import com.ejie.ad74a.dao.DatosEconomicosDao;
import com.ejie.ad74a.dao.DependenciaDao;
import com.ejie.ad74a.dao.DocTemporalesDao;
import com.ejie.ad74a.dao.ExpedientesDao;
import com.ejie.ad74a.dao.InformesDao;
import com.ejie.ad74a.dao.MaestroMotDenegacionDao;
import com.ejie.ad74a.dao.MaestroTiposDocDao;
import com.ejie.ad74a.dao.TareasTramiteDao;
import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.model.DatosEconomicos;
import com.ejie.ad74a.model.DatosInterop;
import com.ejie.ad74a.model.DatosTareaEstudioAlta;
import com.ejie.ad74a.model.DatosTareaEstudioModDireccion;
import com.ejie.ad74a.model.DatosTareaEstudioRevision;
import com.ejie.ad74a.model.Dependencia;
import com.ejie.ad74a.model.DocTemporales;
import com.ejie.ad74a.model.Documento;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Informes;
import com.ejie.ad74a.model.Iprem;
import com.ejie.ad74a.model.MaestroMotDenegacion;
import com.ejie.ad74a.model.MaestroRequerimientos;
import com.ejie.ad74a.model.MaestroTiposDoc;
import com.ejie.ad74a.model.MotivosBaja;
import com.ejie.ad74a.model.TareasTramite;
import com.ejie.ad74a.model.ae01b.Liquidaciones;
import com.ejie.ad74a.rtf.RTFTemplateUtils;
import com.ejie.ad74a.service.DatosInteropService;
import com.ejie.ad74a.service.ExpedientesService;
import com.ejie.ad74a.service.IpremService;
import com.ejie.ad74a.service.MaestroRequerimientosService;
import com.ejie.ad74a.service.MotivosBajaService;
import com.ejie.ad74a.service.ae01b.LiquidacionesService;
import com.ejie.ad74a.service.interoperabilidad.InteroperabilidadService;
import com.ejie.ad74a.tareas.service.TareasUtils;
import com.ejie.ad74a.util.comun.UtilLiterales;
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.comun.UtilidadesXML;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.util.constantes.FinalizacionEstudioEnum;
import com.ejie.ad74a.util.constantes.GradoDependenciaEnum;
import com.ejie.ad74a.util.constantes.MesesEnum;
import com.ejie.ad74a.util.constantes.ProcedimientosEnum;
import com.ejie.ad74a.util.constantes.RequerimientosEnum;
import com.ejie.ad74a.util.constantes.ResultadosIOPEnum;
import com.ejie.ad74a.util.constantes.TareasEnum;
import com.ejie.ad74a.util.constantes.TipoAportacionEnum;
import com.ejie.ad74a.util.constantes.TipoDatoEco85Enum;
import com.ejie.ad74a.util.constantes.TiposDocumentoRoleEnum;
import com.ejie.ad74a.util.constantes.TramitesEnum;
import com.ejie.ad74a.util.documentos.DocumentosPlateaUtils;
import com.ejie.ad74a.util.pif.Ad74aPIFws;
import com.ejie.ad74a.ws.client.documentosWeb.DocumentoWebServiceImpl;
import com.ejie.ad74a.ws.client.dokusi.service.DokusiService;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TAuthorizationTraceType;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TDocAuthStatus;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TDocument;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TGetTelActionDocumentList;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TPersonIDName;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TProcedingDocument;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TTelActionDocument;
import com.ejie.ad74a.ws.client.platea.expedienteElectronico.TTelActionProceding;
import com.ejie.ad74a.ws.client.platea.procedimientos.TDocumentRole;
import com.ejie.ad74a.ws.client.platea.procedimientos.TDocumentRoleList;
import com.ejie.ad74a.ws.client.platea.procedimientos.TLanguage;
import com.ejie.ad74a.ws.client.platea.procedimientos.TStringI18N;
import com.ejie.ad74a.ws.client.platea.service.Papel0Utils;
import com.ejie.ad74a.ws.client.platea.service.PlateaService;
import com.ejie.ad74a.ws.client.platea.service.PlateaUtils;
import com.ejie.ad74a.ws.client.platea.tareasTramitacion.TStringList;
import com.ejie.t65.jaxb.beans.fsd.T65DocumentListType;
import com.ejie.t65.jaxb.beans.fsd.T65DocumentType;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableResponseDto;
import com.ejie.x38.dto.TableRowDto;
import com.ejie.x38.security.UserCredentials;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import es.redsara.intermediacion.scsp.esquemas.datosespecificos.DatosIRPFN;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.DatosIRPFS;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.IRPF;
import es.redsara.intermediacion.scsp.esquemas.datosespecificos.Resolucion;
import es.redsara.intermediacion.scsp.esquemas.v3.respuesta.Respuesta;

/**
 * DocumentosServiceImpl generated by UDA, 12-nov-2021 13:10:00.
 * 
 * @author UDA
 */

@Service(value = "documentosService")
public class DocumentosServiceImpl implements DocumentosService {

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

	@Autowired
	private InteroperabilidadService interoperabilidadService;

	@Autowired
	private ExpedientesService expedientesService;

	@Autowired
	private PlateaService plateaService;

	@Autowired
	private DokusiService dokusiService;

	@Autowired
	private ExpedientesDao expedientesDao;

	@Autowired
	private DocTemporalesDao docTemporalesDao;

	@Autowired
	private DatosInteropService datosInteropService;

	@Autowired
	private DocumentoWebServiceImpl documentoWebService;

	@Autowired
	private DependenciaDao dependenciaDao;

	@Autowired
	private DatosEconomicosDao datosEconomicosDao;

	@Autowired
	private InformesDao informesDao;

	@Autowired
	private Properties appConfiguration;

	@Autowired
	private MotivosBajaService motivosBajaService;

	@Autowired
	private LiquidacionesService liquidacionesService;

	@Autowired
	private IpremService ipremService;

	@Autowired
	private TareasTramiteDao tareasTramiteDao;

	@Autowired
	private MaestroMotDenegacionDao maestroMotDenegacionDao;

	@Autowired
	private MaestroRequerimientosService maestroRequerimientosService;

	@Resource
	private ReloadableResourceBundleMessageSource appMessageSource;

	@Resource
	private MaestroTiposDocDao maestroTiposDocDao;

	public void authorizationCall(String authorizationID, String proceedingID, Long idExpediente, String roleID)
			throws Exception {

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationCall - Inicio authorizationID: "
				+ authorizationID + " - proceedingID: " + proceedingID + " - idExpediente: " + idExpediente);
		// se recupera del expediente el Idtraza del nuevo docu IOP para obtener su
		// estado
		Expedientes expediente = new Expedientes();
		String procedureID = "";
		String iopTraceID = "";
		boolean encontrado = false;
		expediente.setIdExpediente00(idExpediente);
		expediente = this.expedientesDao.find(expediente);

		MaestroTiposDoc maestroTiposDocFilter = new MaestroTiposDoc();
		maestroTiposDocFilter.setRoleid36(roleID);
		List<MaestroTiposDoc> maestroTiposDocResultadoList = maestroTiposDocDao.findAll(maestroTiposDocFilter, null);
		if (!roleID.equals(TiposDocumentoRoleEnum.DISCAPACIDAD.getRoleID())) {
			// reinvocamos los documentos de interoperabilidad
			com.ejie.ad74a.ws.client.platea.solAportacion.TDocumentList listDocumentsInterop = Papel0Utils
					.setServiciosInterop(expediente, maestroTiposDocResultadoList,
							interoperabilidadService.getIRPFYear());

			plateaService.authorizationCall(authorizationID, proceedingID,
					PlateaUtils.castTAuthSvtsolToExpE(listDocumentsInterop.getDocument().get(0).getSvt()), null);
		} else {
			plateaService.authorizationCall(authorizationID, proceedingID, null, null);
		}

		if (null != expediente) {
			// documentos aportados por la entidad
			procedureID = expediente.getIdProcedimiento00();
			TGetTelActionDocumentList folderDocuList = plateaService.getDocumentsTelAction(expediente.getFolderId00(),
					procedureID);
			// documentos con consentimiento
			if (null != folderDocuList && null != folderDocuList.getTelActionList()
					&& null != folderDocuList.getTelActionList().getTelAction()) {
				for (TTelActionDocument folderAutho : folderDocuList.getTelActionList().getTelAction()) {
					if (encontrado)
						break;
					if (null != folderAutho.getAuthorizationList()
							&& null != folderAutho.getAuthorizationList().getDocument()) {

						for (TDocument document : folderAutho.getAuthorizationList().getDocument()) {
							if (TDocAuthStatus.PENDING == document.getAuthorization().getStatus()) {
								ManagerErrors.manageError("Interoperabilidad no dispinible. Estado PENDING");
							} else if (document.getAuthorization().getAuthorizationID()
									.equalsIgnoreCase(authorizationID)) {
								iopTraceID = document.getAuthorization().getIopTraceID();
								encontrado = true;
								break;
							}
						}
					}
				}
			}
		}

		// se recupera el resultado de la invocación a IOP con el nuevo iopTraceID
		TPersonIDName person = new TPersonIDName();

		if (SecurityContextHolder.getContext().getAuthentication() != null) {
			person.setID(((UserCredentials) SecurityContextHolder.getContext().getAuthentication().getCredentials())
					.getNif());
		} else {
			// Tecnico del expediente
			person.setAccountID(expediente.getTecnicoExpediente00());
		}

		String pifPath = interoperabilidadService.getAuthorizationTrace("", iopTraceID,
				Ad74aPIFws.getInstance().buildPath("/", "ad74a", "/", iopTraceID + ".html"),
				TAuthorizationTraceType.NISAE, person);

		// InputStream is =
		// UtilesPIF.get(UtilTokenXlnets.getTokenDocumentXLNets(Constantes.COD_APLICACION),
		// pifPath);
		DocumentosServiceImpl.logger.info(
				"DocumentosServiceImpl.authorizationCall - Ad74aPIFws.getInstance().downloadDocument path = {}",
				pifPath);
		InputStream is = Ad74aPIFws.getInstance().downloadDocument(pifPath);

//		String resultadoNisae = IOUtils.toString(is, "UTF-8");
		String resultadoNisae = IOUtils.toString(is, "Windows-1252");
		Respuesta resultado = (Respuesta) UtilidadesXML.unmarshallerObject(resultadoNisae, Respuesta.class);

		DatosInterop datosInterop = new DatosInterop();
		datosInterop.setIdExpediente19(expediente.getIdExpediente00());

		if (com.ejie.ad74a.util.constantes.Constantes.Nisae.COD_CERTIFICADO_CONSULTA_DGP
				.equalsIgnoreCase(resultado.getAtributos().getCodigoCertificado())) {
			datosInterop = resultNISAEtoDatosInterop(datosInterop, resultado, null, null, null, null, iopTraceID);
			datosInteropService.saveDatosInterop(datosInterop, resultado.getAtributos().getCodigoCertificado());

		} else if (com.ejie.ad74a.util.constantes.Constantes.Nisae.COD_CERTIFICADO_CONSULTA_PADRON
				.equalsIgnoreCase(resultado.getAtributos().getCodigoCertificado())) {
			datosInterop = resultNISAEtoDatosInterop(datosInterop, null, resultado, null, null, null, iopTraceID);
			datosInteropService.saveDatosInterop(datosInterop, resultado.getAtributos().getCodigoCertificado());

		} else if (com.ejie.ad74a.util.constantes.Constantes.Nisae.COD_CERTIFICADO_CONSULTA_IRPF
				.equalsIgnoreCase(resultado.getAtributos().getCodigoCertificado())) {
			datosInterop = resultNISAEtoDatosInterop(datosInterop, null, null, resultado, null, null, iopTraceID);
			datosInteropService.saveDatosInterop(datosInterop, resultado.getAtributos().getCodigoCertificado());

		} else if (com.ejie.ad74a.util.constantes.Constantes.Nisae.COD_CERTIFICADO_CONSULTA_DEPENDENCIA
				.equalsIgnoreCase(resultado.getAtributos().getCodigoCertificado())) {
			datosInterop = resultNISAEtoDatosInterop(datosInterop, null, null, null, resultado, null, iopTraceID);
			datosInteropService.saveDatosInterop(datosInterop, resultado.getAtributos().getCodigoCertificado());

		} else if (com.ejie.ad74a.util.constantes.Constantes.Nisae.COD_CERTIFICADO_CONSULTA_DISCAPACIDAD
				.equalsIgnoreCase(resultado.getAtributos().getCodigoCertificado())) {
			datosInterop = resultNISAEtoDatosInterop(datosInterop, null, null, null, null, resultado, iopTraceID);
			datosInteropService.saveDatosInterop(datosInterop, resultado.getAtributos().getCodigoCertificado());

		}
		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationCall - Fin");

	}

//	@Override
//	public void authorizationCallAll(long idExpediente) throws Exception {
//
//		// se recupera del expediente el Idtraza del nuevo docu IOP para obtener su
//		// estado
//		Expedientes expediente = new Expedientes();
//		expediente.setIdExpediente00(idExpediente);
//		expediente = this.expedientesDao.find(expediente);
//
//		// Preparar los documentos
//		List<DocumentosTarea> listaDocumentosTarea = new ArrayList<DocumentosTarea>();
//		DocumentoPapel0 filterDocumentoPapel0 = new DocumentoPapel0();
//		filterDocumentoPapel0.setIdExpediente13(expediente.getIdExpediente00());
//		List<DocumentoPapel0> listaDocumentoPapel0 = this.documentoPapel0Service.findAllLike(filterDocumentoPapel0,
//				null, false);
//		for (DocumentoPapel0 documento : listaDocumentoPapel0) {
//			DocumentosTarea documentoTarea = new DocumentosTarea();
//
//			documentoTarea.setMaestroTiposDoc(documento.getTipoDocumento());
//			documentoTarea.setOiddokusi18(documento.getOidDocumento13());
//
//			// TODO: Mirar en PH a ver que nombre les dan
//			// if (!Utilidades.esBlancoNulo(docTarea.getNombreDoc18())) {
//			// String[] datos = docTarea.getNombreDoc18().split("\\.");
//			// doc.setExtension(datos[1]);
//			// doc.setSourceName(docTarea.getNombreDoc18());
//			// }
//
//			listaDocumentosTarea.add(documentoTarea);
//		}
//
//		String folderID = this.plateaService.aperturaSolicitud(expediente, listaDocumentosTarea);
//		expediente.setFolderId00(folderID);
//		/*
//		 * Actualizamos la carpeta del expediente para que tome como referencia la nueva
//		 */
//		this.expedientesService.updateFolderID(expediente);
//
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationCallAll - Fin");
//
	// }

	public void authorizationResultConsolidation(Expedientes expediente, String procedureID, String nif)
			throws Exception {
		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationResultConsolidation - Inicio folderID: "
				+ expediente.getFolderId00() + " - procedureID: " + procedureID + " - nif: " + nif);
		String iopTraceIDDGP = "";
		String authorizationIDDGP = "";
		boolean encontradoDGP = false;

		String iopTraceIDPadron = "";
		String authorizationIDPadron = "";
		boolean encontradoPadron = false;

		String iopTraceIDIrpf = "";
		String authorizationIDIrpf = "";
		boolean encontradoIrpf = false;

		String iopTraceIDImserso = "";
		String authorizationIDImserso = "";
		boolean encontradoImserso = false;

		String iopTraceIDDiscapacidad = "";
		String authorizationIDDiscapacidad = "";
		boolean encontradoDiscapacidad = false;

		TGetTelActionDocumentList folderDocuList = plateaService.getDocumentsTelAction(expediente.getFolderId00(),
				procedureID);
		// documentos con consentimiento
		if (null != folderDocuList && null != folderDocuList.getTelActionList()
				&& null != folderDocuList.getTelActionList().getTelAction()) {
			for (TTelActionDocument folderAutho : folderDocuList.getTelActionList().getTelAction()) {
				if (null != folderAutho.getAuthorizationList()
						&& null != folderAutho.getAuthorizationList().getDocument()) {
					for (TDocument document : folderAutho.getAuthorizationList().getDocument()) {
						if (document.getDocumentRoleID()
								.equalsIgnoreCase(TiposDocumentoRoleEnum.CONSULTA_DGP.getRoleID())) {
							encontradoDGP = true;
							iopTraceIDDGP = document.getAuthorization().getIopTraceID();
							authorizationIDDGP = document.getAuthorization().getAuthorizationID();
						} else if (document.getDocumentRoleID()
								.equalsIgnoreCase(TiposDocumentoRoleEnum.PADRON_GENERICO.getRoleID())) {
							encontradoPadron = true;
							iopTraceIDPadron = document.getAuthorization().getIopTraceID();
							authorizationIDPadron = document.getAuthorization().getAuthorizationID();
						} else if (document.getDocumentRoleID()
								.equalsIgnoreCase(TiposDocumentoRoleEnum.CERT_IRPF_RENTA.getRoleID())) {
							encontradoIrpf = true;
							iopTraceIDIrpf = document.getAuthorization().getIopTraceID();
							authorizationIDIrpf = document.getAuthorization().getAuthorizationID();
						} else if (document.getDocumentRoleID()
								.equalsIgnoreCase(TiposDocumentoRoleEnum.IMSERSO_GRADO_DEPEN.getRoleID())) {
							encontradoImserso = true;
							iopTraceIDImserso = document.getAuthorization().getIopTraceID();
							authorizationIDImserso = document.getAuthorization().getAuthorizationID();
						} else if (document.getDocumentRoleID()
								.equalsIgnoreCase(TiposDocumentoRoleEnum.DISCAPACIDAD.getRoleID())) {
							encontradoDiscapacidad = true;
							iopTraceIDDiscapacidad = document.getAuthorization().getIopTraceID();
							authorizationIDDiscapacidad = document.getAuthorization().getAuthorizationID();
						}
						if (encontradoDGP && encontradoPadron && encontradoIrpf && encontradoImserso
								&& encontradoDiscapacidad) {
							break;
						}
					}
				}
			}
		}

		// se recupera el resultado de la invocación a IOP con el nuevo iopTraceID
		TPersonIDName person = new TPersonIDName();
		person.setID(nif);
		Respuesta resultadoDGP = null;
		Respuesta resultadoPadron = null;
		Respuesta resultadoIrpf = null;
		Respuesta resultadoImserso = null;
		Respuesta resultadoDiscapacidad = null;
		if (encontradoDGP && !Utilidades.esBlancoNulo(iopTraceIDDGP)) {
			DocumentosServiceImpl.logger
					.info("DocumentosServiceImpl.authorizationResultConsolidation - encontradoDGP: " + encontradoDGP);
			resultadoDGP = getResultNISAE(authorizationIDDGP, iopTraceIDDGP, person);
		}

		if (encontradoPadron && !Utilidades.esBlancoNulo(iopTraceIDPadron)) {
			DocumentosServiceImpl.logger.info(
					"DocumentosServiceImpl.authorizationResultConsolidation - encontradoPadron: " + encontradoPadron);
			resultadoPadron = getResultNISAE(authorizationIDPadron, iopTraceIDPadron, person);
		}

		if (encontradoIrpf && !Utilidades.esBlancoNulo(iopTraceIDIrpf)) {
			DocumentosServiceImpl.logger
					.info("DocumentosServiceImpl.authorizationResultConsolidation - encontradoIrpf: " + encontradoIrpf);
			resultadoIrpf = getResultNISAE(authorizationIDIrpf, iopTraceIDIrpf, person);
		}

		if (encontradoImserso && !Utilidades.esBlancoNulo(iopTraceIDImserso)) {
			DocumentosServiceImpl.logger.info(
					"DocumentosServiceImpl.authorizationResultConsolidation - encontradoImserso: " + encontradoImserso);
			resultadoImserso = getResultNISAE(authorizationIDImserso, iopTraceIDImserso, person);
		}

		if (encontradoDiscapacidad && !Utilidades.esBlancoNulo(iopTraceIDDiscapacidad)) {
			DocumentosServiceImpl.logger
					.info("DocumentosServiceImpl.authorizationResultConsolidation - encontradoDiscapacidad: "
							+ encontradoDiscapacidad);
			resultadoDiscapacidad = getResultNISAE(authorizationIDDiscapacidad, iopTraceIDDiscapacidad, person);
		}

		DatosInterop datosInterop = new DatosInterop();
		datosInterop.setIdExpediente19(expediente.getIdExpediente00());

		datosInterop = resultNISAEtoDatosInterop(datosInterop, resultadoDGP, resultadoPadron, resultadoIrpf,
				resultadoImserso, resultadoDiscapacidad, iopTraceIDDGP, iopTraceIDPadron, iopTraceIDIrpf,
				iopTraceIDImserso, iopTraceIDDiscapacidad);
		datosInteropService.saveDatosInterop(datosInterop, Constantes.Nisae.LANZAR_TODAS_MENOS_CONYUGE);

		// grabamos los datos del imserso (dependencia)
		try {
			this.saveImsersoData(resultadoImserso, expediente);
		} catch (Exception e) {
			DocumentosServiceImpl.logger
					.error("DocumentosServiceImpl.authorizationResultConsolidation -> saveImsersoData ");
		}

		// grabamos los datos del irpf
		try {
			this.saveIrpfData(resultadoIrpf, expediente);
		} catch (Exception e) {
			DocumentosServiceImpl.logger
					.error("DocumentosServiceImpl.authorizationResultConsolidation -> saveIrpfData ");
		}

		// grabamos los datos de discapacidad
		try {
			// this.saveDiscapacidadData(resultadoDiscapacidad, expediente);
		} catch (Exception e) {
			DocumentosServiceImpl.logger
					.error("DocumentosServiceImpl.authorizationResultConsolidation -> saveIrpfData ");
		}

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationResultConsolidation - Fin");
	}

	private void saveDiscapacidadData(Respuesta resultadoDiscapacidad, Expedientes expediente) {

		if (null != resultadoDiscapacidad.getTransmisiones()
				&& null != resultadoDiscapacidad.getTransmisiones().getTransmisionDatos()
				&& null != resultadoDiscapacidad.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != resultadoDiscapacidad.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
						.getRetorno()
				&& null != resultadoDiscapacidad.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
						.getRetorno().getiRPF()
				&& null != resultadoDiscapacidad.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
						.getRetorno().getiRPF().getDatosIRPFS()) {
			IRPF datosIrpf = resultadoDiscapacidad.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
					.getRetorno().getiRPF();

			String presentaIRPF = datosIrpf.getPresentaIRPF();
			if (presentaIRPF != null) {

				if (presentaIRPF.equals("S")) {
					DatosIRPFS irpfS = datosIrpf.getDatosIRPFS();

					String rendimientoTrabajo = irpfS.getRendimientosRT();
					DatosEconomicos datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoTrabajo));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiMob = irpfS.getRendimientosRCM();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiMob));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiInm = irpfS.getRendimientosRCI();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiInm));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoActEcon = irpfS.getRendimientosRAE();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_ACTIVIDADES_EMPRESARIALES.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_ACTIVIDADES_EMPRESARIALES.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoActEcon));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

//					irpfS.setBaseImponibleGeneral(formatearNumerosIrpf(irpfS.getBaseImponibleGeneral()));
//					irpfS.setBaseImponibleAhorro(X87bUtils.formatearNumerosIrpf(irpfS.getBaseImponibleAhorro()));
//
//					irpfS.setRendimientosRT(X87bUtils.formatearNumerosIrpf(irpfS.getRendimientosRT()));
//					irpfS.setRetencionesRT(X87bUtils.formatearNumerosIrpf(irpfS.getRetencionesRT()));
//					irpfS.setRendimientosRCM(X87bUtils.formatearNumerosIrpf(irpfS.getRendimientosRCM()));
//					irpfS.setRetencionesRCM(X87bUtils.formatearNumerosIrpf(irpfS.getRetencionesRCM()));
//					irpfS.setRendimientosRCI(X87bUtils.formatearNumerosIrpf(irpfS.getRendimientosRCI()));
//					irpfS.setRetencionesRCI(X87bUtils.formatearNumerosIrpf(irpfS.getRetencionesRCI()));
//					irpfS.setGananciasPatrimoniales(X87bUtils.formatearNumerosIrpf(irpfS.getGananciasPatrimoniales()));
//
//					irpf.setDatosIRPFS(irpfS);

				} else {
					// no hacen la declaracion
					DatosIRPFN irpfN = datosIrpf.getDatosIRPFN();

					String rendimientoTrabajo = irpfN.getRendimientosRT();
					DatosEconomicos datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoTrabajo));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiMob = irpfN.getRendimientosRCM();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiMob));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiInm = irpfN.getRendimientosRCI();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiInm));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

//					irpfN.setRendimientosRT(X87bUtils.formatearNumerosIrpf(irpfN.getRendimientosRT()));
//					irpfN.setRetencionesRT(X87bUtils.formatearNumerosIrpf(irpfN.getRetencionesRT()));
//					irpfN.setRendimientosRCM(X87bUtils.formatearNumerosIrpf(irpfN.getRendimientosRCM()));
//					irpfN.setRetencionesRCM(X87bUtils.formatearNumerosIrpf(irpfN.getRetencionesRCM()));
//					irpfN.setRendimientosRCI(X87bUtils.formatearNumerosIrpf(irpfN.getRendimientosRCI()));
//					irpfN.setRetencionesRCI(X87bUtils.formatearNumerosIrpf(irpfN.getRetencionesRCI()));
//					irpfN.setGananciasPatrimoniales(X87bUtils.formatearNumerosIrpf(irpfN.getGananciasPatrimoniales()));
//
//					irpf.setDatosIRPFN(irpfN);
				}
			}

		}
	}

	private void saveIrpfData(Respuesta respuestaIrpf, Expedientes expediente) {

		if (null != respuestaIrpf.getTransmisiones() && null != respuestaIrpf.getTransmisiones().getTransmisionDatos()
				&& null != respuestaIrpf.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != respuestaIrpf.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != respuestaIrpf.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getiRPF()
				&& null != respuestaIrpf.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getiRPF().getDatosIRPFS()) {
			IRPF datosIrpf = respuestaIrpf.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
					.getiRPF();

			String presentaIRPF = datosIrpf.getPresentaIRPF();
			if (presentaIRPF != null) {

				if (presentaIRPF.equals("S")) {
					DatosIRPFS irpfS = datosIrpf.getDatosIRPFS();

					String rendimientoTrabajo = irpfS.getRendimientosRT();
					DatosEconomicos datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoTrabajo));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiMob = irpfS.getRendimientosRCM();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiMob));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiInm = irpfS.getRendimientosRCI();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiInm));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoActEcon = irpfS.getRendimientosRAE();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_ACTIVIDADES_EMPRESARIALES.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_ACTIVIDADES_EMPRESARIALES.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoActEcon));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

//					irpfS.setBaseImponibleGeneral(formatearNumerosIrpf(irpfS.getBaseImponibleGeneral()));
//					irpfS.setBaseImponibleAhorro(X87bUtils.formatearNumerosIrpf(irpfS.getBaseImponibleAhorro()));
//
//					irpfS.setRendimientosRT(X87bUtils.formatearNumerosIrpf(irpfS.getRendimientosRT()));
//					irpfS.setRetencionesRT(X87bUtils.formatearNumerosIrpf(irpfS.getRetencionesRT()));
//					irpfS.setRendimientosRCM(X87bUtils.formatearNumerosIrpf(irpfS.getRendimientosRCM()));
//					irpfS.setRetencionesRCM(X87bUtils.formatearNumerosIrpf(irpfS.getRetencionesRCM()));
//					irpfS.setRendimientosRCI(X87bUtils.formatearNumerosIrpf(irpfS.getRendimientosRCI()));
//					irpfS.setRetencionesRCI(X87bUtils.formatearNumerosIrpf(irpfS.getRetencionesRCI()));
//					irpfS.setGananciasPatrimoniales(X87bUtils.formatearNumerosIrpf(irpfS.getGananciasPatrimoniales()));
//
//					irpf.setDatosIRPFS(irpfS);

				} else {
					// no hacen la declaracion
					DatosIRPFN irpfN = datosIrpf.getDatosIRPFN();

					String rendimientoTrabajo = irpfN.getRendimientosRT();
					DatosEconomicos datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_TRABAJOS.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoTrabajo));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiMob = irpfN.getRendimientosRCM();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_MOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiMob));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

					String rendimientoCapiInm = irpfN.getRendimientosRCI();

					datosEcon = new DatosEconomicos();

					datosEcon.setIdTipoDatoEco85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getId());
					datosEcon.setDescripcion85(TipoDatoEco85Enum.RENDIMIENTO_CAPITAL_INMOBILIARIO.getLabelDesc());
					datosEcon.setIdExpediente85(expediente.getIdExpediente00());
					datosEcon.setIdSolicitante85(expediente.getIdSolicitante00());
					datosEcon.setImporteAnual85(formatearNumerosIrpf(rendimientoCapiInm));
					datosEcon.setEjercicioDesde85(datosIrpf.getEjercicio());
					datosEcon.setEjercicioHasta85(datosIrpf.getEjercicio());
					this.datosEconomicosDao.add(datosEcon);

//					irpfN.setRendimientosRT(X87bUtils.formatearNumerosIrpf(irpfN.getRendimientosRT()));
//					irpfN.setRetencionesRT(X87bUtils.formatearNumerosIrpf(irpfN.getRetencionesRT()));
//					irpfN.setRendimientosRCM(X87bUtils.formatearNumerosIrpf(irpfN.getRendimientosRCM()));
//					irpfN.setRetencionesRCM(X87bUtils.formatearNumerosIrpf(irpfN.getRetencionesRCM()));
//					irpfN.setRendimientosRCI(X87bUtils.formatearNumerosIrpf(irpfN.getRendimientosRCI()));
//					irpfN.setRetencionesRCI(X87bUtils.formatearNumerosIrpf(irpfN.getRetencionesRCI()));
//					irpfN.setGananciasPatrimoniales(X87bUtils.formatearNumerosIrpf(irpfN.getGananciasPatrimoniales()));
//
//					irpf.setDatosIRPFN(irpfN);
				}
			}

		}
	}

	private void saveImsersoData(Respuesta resultadoImserso, Expedientes expediente) throws ParseException {
		DocumentosServiceImpl.logger
				.info("DocumentosServiceImpl.saveImsersoData - Inicio idExpediente:" + expediente.getIdExpediente00());
		if (null != resultadoImserso && null != resultadoImserso.getTransmisiones()
				&& null != resultadoImserso.getTransmisiones().getTransmisionDatos()
				&& null != resultadoImserso.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
				&& null != resultadoImserso.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
				&& null != resultadoImserso.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getResolucion()) {
			Resolucion datosresolucion = resultadoImserso.getTransmisiones().getTransmisionDatos().getDatosEspecificos()
					.getRetorno().getResolucion();
			String gradoLast = datosresolucion.getGradoyNivel();
			String fechaResolLast = datosresolucion.getFechaResolucion();

			// Si existe se actualiza y si no se crea una nueva
			Dependencia dependencia = new Dependencia();
			dependencia.setIdExpediente04(expediente.getIdExpediente00());
			dependencia.setIsHistorico(Boolean.FALSE);
			List<Dependencia> dependenciaList = this.dependenciaDao.findAll(dependencia, null);
			if (dependenciaList.isEmpty()) {
				// No existe dependdencia. Crear una nueva
				DocumentosServiceImpl.logger
						.debug("DocumentosServiceImpl.saveImsersoData - Damos de alta la nueva dependencia");
				Dependencia newDFepencia = new Dependencia();
				GradoDependenciaEnum depEnum = GradoDependenciaEnum.getByIdInterop(gradoLast);
				if (null == depEnum) {
					ManagerErrors.manageError("El grado de dependencia - " + gradoLast + " - No esta codificado");
				}
				newDFepencia.setIdGradoDependencia04(depEnum.getIdBBDD());
				newDFepencia.setfResolucion04(UtilidadesFecha.formatearStringToDateFormat(fechaResolLast,
						Constantes.DATE_FORMAT_TIMESTAMP_NOTIME));
				newDFepencia.setIdExpediente04(expediente.getIdExpediente00());
				newDFepencia.setIdSolicitante04(expediente.getIdSolicitante00());
				newDFepencia.setUsuAlta04(Constantes.DatosConsultaInterop.USER_INTEROP);
				this.dependenciaDao.add(newDFepencia);
			} else {
				// Existe dependencia. Actualizarla
				dependencia = dependenciaList.get(0);
				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.saveImsersoData - Hay dependencia previa");
				GradoDependenciaEnum depEnum = GradoDependenciaEnum.getByIdInterop(gradoLast);
				if (null == depEnum) {
					ManagerErrors.manageError("El grado de dependencia - " + gradoLast + " - No esta codificado");
				}
				dependencia.setIdGradoDependencia04(depEnum.getIdBBDD());
				dependencia.setfResolucion04(UtilidadesFecha.formatearStringToDateFormat(fechaResolLast,
						Constantes.DATE_FORMAT_TIMESTAMP_NOTIME));
				this.dependenciaDao.updateOnApertura(dependencia);
			}

//			Dependencia dependecia = new Dependencia();
//			dependecia.setIdExpediente04(expediente.getIdExpediente00());
//			List<Dependencia> listaDepe = this.dependenciaDao.findAll(dependecia, null);
//			boolean esNuevaDependencia = true;
//			if (null != listaDepe && listaDepe.size() > 1) {
//				ManagerErrors.manageError("Hay más de una dependecia grabada");
//			} else if (null != listaDepe && listaDepe.size() > 0) {
//				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.saveImsersoData - Hay dependencia previa");
//				Dependencia curseDepen = listaDepe.get(0);
//				// pasar a historico si es necesario
//				String fechaResol = "";
//				try {
//					fechaResol = UtilidadesFecha.formatearDateToStringMasc(curseDepen.getfResolucion04(),
//							Constantes.DATE_FORMAT_TIMESTAMP_NOTIME);
//				} catch (Exception e) {
//					DocumentosServiceImpl.logger
//							.error("DocumentosServiceImpl.saveImsersoData Error al transformar la fecha de resolucion");
//				}
//				if (!fechaResolLast.equalsIgnoreCase(fechaResol)) {
//					DocumentosServiceImpl.logger.debug(
//							"DocumentosServiceImpl.saveImsersoData - Pasamos a historico la dependencia anterior");
//					String usuario = null;
//					try {
//						usuario = UtilSeguridad.getUsuarioConectado().getUserName();
//					} catch (Exception e) {
//						usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
//					}
//					this.dependenciaDao.pasarHistorico(listaDepe.get(0), usuario);
//				} else {
//					DocumentosServiceImpl.logger.debug(
//							"DocumentosServiceImpl.saveImsersoData - La dependencia anterior es igual a la actual");
//					esNuevaDependencia = false;
//				}
//			}
//			if (esNuevaDependencia) {
//				DocumentosServiceImpl.logger
//						.debug("DocumentosServiceImpl.saveImsersoData - Damos de alta la nueva dependencia");
//				Dependencia newDFepencia = new Dependencia();
//				GradoDependenciaEnum depEnum = GradoDependenciaEnum.getByIdInterop(gradoLast);
//				if (null == depEnum) {
//					ManagerErrors.manageError("El gadro de dependencia - " + gradoLast + " - No esta codificado");
//				}
//				newDFepencia.setIdGradoDependencia04(depEnum.getIdBBDD());
//				newDFepencia.setfResolucion04(UtilidadesFecha.formatearStringToDateFormat(fechaResolLast,
//						Constantes.DATE_FORMAT_TIMESTAMP_NOTIME));
//				newDFepencia.setIdExpediente04(expediente.getIdExpediente00());
//				newDFepencia.setIdSolicitante04(expediente.getIdSolicitante00());
//				newDFepencia.setUsuAlta04(Constantes.DatosConsultaInterop.USER_INTEROP);
//				this.dependenciaDao.add(newDFepencia);
//			}

		}
		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.saveImsersoData - Fin");

	}

	public void authorizationResultJob(List<Expedientes> expedientesList) throws Exception {
		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationResultJob - Inicio expedientesList: ");
		String iopTraceID = "";

		for (Expedientes exp : expedientesList) {
			DatosInterop datosInterop = exp.getDatosInterop();
			Respuesta resultadoDGP = null;
			Respuesta resultadoPadron = null;
			Respuesta resultadoIrpf = null;
			Respuesta resultadoImserso = null;
			Respuesta resultadoDiscapacidad = null;
			TGetTelActionDocumentList folderDocuList = plateaService.getDocumentsTelAction(exp.getFolderId00(),
					exp.getIdProcedimiento00());

			if (null != folderDocuList && null != folderDocuList.getTelActionList()
					&& null != folderDocuList.getTelActionList().getTelAction()) {
				for (TTelActionDocument folderAutho : folderDocuList.getTelActionList().getTelAction()) {

					if (null != folderAutho.getAuthorizationList()
							&& null != folderAutho.getAuthorizationList().getDocument()) {
						for (TDocument document : folderAutho.getAuthorizationList().getDocument()) {
							if (ResultadosIOPEnum.TER.getCod().equals(datosInterop.getCodresulConDgp19())
									&& datosInterop.getfinvokeConDgp19() != null) {

								if (TiposDocumentoRoleEnum.CONSULTA_DGP.getRoleID().equals(document.getDocumentRoleID())
										&& document.getAuthorization() != null) {
									iopTraceID = document.getAuthorization().getIopTraceID();
									DocumentosServiceImpl.logger.info("AuthorizationResultJob DGP - Expte "
											+ exp.getFolderId00() + " reinvocación " + iopTraceID + "...");
									TPersonIDName person = new TPersonIDName();
									person.setID(exp.getTecnicoExpediente00());

									resultadoDGP = getResultNISAE(null, iopTraceID, person);
								}
							} else if (ResultadosIOPEnum.TER.getCod().equals(datosInterop.getCodresulConPadron19())
									&& datosInterop.getfinvokeConPadron19() != null) {

								if (TiposDocumentoRoleEnum.PADRON_GENERICO.getRoleID()
										.equals(document.getDocumentRoleID()) && document.getAuthorization() != null) {
									iopTraceID = document.getAuthorization().getIopTraceID();
									DocumentosServiceImpl.logger.info("AuthorizationResultJob PADRON - Expte "
											+ exp.getFolderId00() + " reinvocación " + iopTraceID + "...");
									TPersonIDName person = new TPersonIDName();
									person.setID(exp.getTecnicoExpediente00());

									resultadoPadron = getResultNISAE(null, iopTraceID, person);

								}
							} else if (ResultadosIOPEnum.TER.getCod().equals(datosInterop.getCodresulConIrpf19())
									&& datosInterop.getfinvokeConIrpf19() != null) {

								if (TiposDocumentoRoleEnum.CERT_IRPF_RENTA.getRoleID()
										.equals(document.getDocumentRoleID()) && document.getAuthorization() != null) {
									iopTraceID = document.getAuthorization().getIopTraceID();
									DocumentosServiceImpl.logger.info("AuthorizationResultJob IRPF - Expte "
											+ exp.getFolderId00() + " reinvocación " + iopTraceID + "...");
									TPersonIDName person = new TPersonIDName();
									person.setID(exp.getTecnicoExpediente00());

									resultadoIrpf = getResultNISAE(null, iopTraceID, person);

								}
							} else if (ResultadosIOPEnum.TER.getCod().equals(datosInterop.getCodresulConImserso19())
									&& datosInterop.getfinvokeConImserso19() != null) {

								if (TiposDocumentoRoleEnum.IMSERSO_GRADO_DEPEN.getRoleID()
										.equals(document.getDocumentRoleID()) && document.getAuthorization() != null) {
									iopTraceID = document.getAuthorization().getIopTraceID();
									DocumentosServiceImpl.logger.info("AuthorizationResultJob IMSERSO - Expte "
											+ exp.getFolderId00() + " reinvocación " + iopTraceID + "...");
									TPersonIDName person = new TPersonIDName();
									person.setID(exp.getTecnicoExpediente00());

									resultadoImserso = getResultNISAE(null, iopTraceID, person);

								}
							} else if (ResultadosIOPEnum.TER.getCod().equals(datosInterop.getCodresulDiscapa19())
									&& datosInterop.getFinvokeDiscapa19() != null) {

								if (TiposDocumentoRoleEnum.DISCAPACIDAD.getRoleID().equals(document.getDocumentRoleID())
										&& document.getAuthorization() != null) {
									iopTraceID = document.getAuthorization().getIopTraceID();
									DocumentosServiceImpl.logger.info("AuthorizationResultJob DISCAPACIDAD - Expte "
											+ exp.getFolderId00() + " reinvocación " + iopTraceID + "...");
									TPersonIDName person = new TPersonIDName();
									person.setID(exp.getTecnicoExpediente00());

									resultadoDiscapacidad = getResultNISAE(null, iopTraceID, person);

								}
							}
						}
					}
				}
			}

			datosInterop = resultNISAEtoDatosInterop(datosInterop, resultadoDGP, resultadoPadron, resultadoIrpf,
					resultadoImserso, resultadoDiscapacidad, iopTraceID);
			datosInteropService.saveDatosInterop(datosInterop, Constantes.Nisae.LANZAR_TODAS_MENOS_CONYUGE);
		}

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.authorizationResultJob - Fin");
	}

	private Respuesta getResultNISAE(String authorizationID, String iopTraceID, TPersonIDName person)
			throws IOException {
		String pifPath = interoperabilidadService.getAuthorizationTrace(authorizationID, iopTraceID,
				Ad74aPIFws.getInstance().buildPath("/", "ad74a", "/", iopTraceID + ".html"),
				TAuthorizationTraceType.NISAE, person);

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.getResultNISAE - pifPath: " + pifPath);

		InputStream is = null;
		try {
			DocumentosServiceImpl.logger.info(
					"DocumentosServiceImpl.getResultNISAE - Ad74aPIFws.getInstance().downloadDocument path = {}",
					pifPath);
			is = Ad74aPIFws.getInstance().downloadDocument(pifPath);
			String resultadoNisae = IOUtils.toString(is, "Windows-1252");
			DocumentosServiceImpl.logger
					.debug("DocumentosServiceImpl.getResultNISAE - resultadoNisae: " + resultadoNisae);
			Respuesta resultado = (Respuesta) UtilidadesXML.unmarshallerObject(resultadoNisae, Respuesta.class);
			DocumentosServiceImpl.logger.info("DocumentosServiceImpl.getResultNISAE - resultado: " + resultado);
			return resultado;
		} catch (Exception e) {
			ManagerErrors.manageException(e, "Error al descargar un documento de Pif");
		}

		return new Respuesta();

	}

	public DatosInterop resultNISAEtoDatosInterop(DatosInterop datosInterop, Respuesta resultadoDGP,
			Respuesta resultadoPadron, Respuesta resultadoIrpf, Respuesta resultadoImserso,
			Respuesta resultadoDiscapacidad, String iopTraceIDDGP, String iopTraceIDPadron, String iopTraceIDIrpf,
			String iopTraceIDImserso, String iopTraceIDDiscapacidad) throws Exception {
		if (resultadoDGP != null) {
			datosInterop = this.resultNISAEtoDatosInteropDGP(datosInterop, resultadoDGP, iopTraceIDDGP);
		}
		if (resultadoPadron != null) {
			datosInterop = this.resultNISAEtoDatosInteropPadron(datosInterop, resultadoPadron, iopTraceIDPadron);
		}
		if (resultadoIrpf != null) {
			datosInterop = this.resultNISAEtoDatosInteropIrpf(datosInterop, resultadoIrpf, iopTraceIDIrpf);
		}
		if (resultadoImserso != null) {
			datosInterop = this.resultNISAEtoDatosInteropImserso(datosInterop, resultadoImserso, iopTraceIDImserso);
		}
		if (resultadoDiscapacidad != null) {
			datosInterop = this.resultNISAEtoDatosInteropDiscapacidad(datosInterop, resultadoDiscapacidad,
					iopTraceIDDiscapacidad);
		}

		return datosInterop;
	}

	public DatosInterop resultNISAEtoDatosInterop(DatosInterop datosInterop, Respuesta resultadoDGP,
			Respuesta resultadoPadron, Respuesta resultadoIrpf, Respuesta resultadoImserso,
			Respuesta resultadoDiscapacidad, String iopTraceID) throws Exception {
		if (resultadoDGP != null) {
			return this.resultNISAEtoDatosInteropDGP(datosInterop, resultadoDGP, iopTraceID);
		}
		if (resultadoPadron != null) {
			return this.resultNISAEtoDatosInteropPadron(datosInterop, resultadoPadron, iopTraceID);
		}
		if (resultadoIrpf != null) {
			return this.resultNISAEtoDatosInteropIrpf(datosInterop, resultadoIrpf, iopTraceID);
		}
		if (resultadoImserso != null) {
			return this.resultNISAEtoDatosInteropImserso(datosInterop, resultadoImserso, iopTraceID);
		}
		if (resultadoDiscapacidad != null) {
			return this.resultNISAEtoDatosInteropDiscapacidad(datosInterop, resultadoDiscapacidad, iopTraceID);
		}
		return datosInterop;
	}

	private DatosInterop resultNISAEtoDatosInteropDGP(DatosInterop datosInterop, Respuesta resultadoDGP,
			String iopTraceID) throws Exception {
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		// es un ter en proceso
		if (ResultadosIOPEnum.TER.getCod().equals(resultadoDGP.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = resultadoDGP.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
			Calendar ahora = Calendar.getInstance();
			ahora.add(Calendar.HOUR, resultadoDGP.getAtributos().getEstado().getTiempoEstimadoRespuesta());
			fechaInvocacionTer = ahora.getTime();

		} else if (ResultadosIOPEnum.TRAMITADA.getCod()
				.equals(resultadoDGP.getAtributos().getEstado().getCodigoEstado())) {
			try {
				codResultado = resultadoDGP.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getResultado();
				descResultado = resultadoDGP.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno()
						.getEstadoResultado().getDescripcion();
				// [jbhg]se guarda los datos de retorno de la traza de DGP en bbdd
				datosInterop.setDatosRetornoDGP19(
						resultadoDGP.getTransmisiones().getTransmisionDatos().getDatosEspecificos().getRetorno());
			} catch (Exception e) {
				codResultado = resultadoDGP.getAtributos().getEstado().getCodigoEstado();
				descResultado = resultadoDGP.getAtributos().getEstado().getLiteralError();
			}

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

		datosInterop.setIdtraConDgp19(iopTraceID);
		datosInterop.setfConDgp19(UtilidadesFecha
				.formatearStringToDateFormato(resultadoDGP.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulConDgp19(codResultado);
		datosInterop.setResulConDgp19(descResultado);
		datosInterop.setfinvokeConDgp19(fechaInvocacionTer);

		return datosInterop;
	}

	private DatosInterop resultNISAEtoDatosInteropPadron(DatosInterop datosInterop, Respuesta resultadoPadron,
			String iopTraceID) throws Exception {
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		// es un ter en proceso
		if (ResultadosIOPEnum.TER.getCod().equals(resultadoPadron.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = resultadoPadron.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
			Calendar ahora = Calendar.getInstance();
			ahora.add(Calendar.HOUR, resultadoPadron.getAtributos().getEstado().getTiempoEstimadoRespuesta());
			fechaInvocacionTer = ahora.getTime();

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

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

		datosInterop.setIdtraConPadron19(iopTraceID);
		datosInterop.setfConPadron19(UtilidadesFecha.formatearStringToDateFormato(
				resultadoPadron.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulConPadron19(codResultado);
		datosInterop.setResulConPadron19(descResultado);
		datosInterop.setfinvokeConPadron19(fechaInvocacionTer);

		return datosInterop;
	}

	private DatosInterop resultNISAEtoDatosInteropIrpf(DatosInterop datosInterop, Respuesta resultadoIrpf,
			String iopTraceID) throws Exception {
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		// es un ter en proceso
		if (ResultadosIOPEnum.TER.getCod().equals(resultadoIrpf.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = resultadoIrpf.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
			Calendar ahora = Calendar.getInstance();
			ahora.add(Calendar.HOUR, resultadoIrpf.getAtributos().getEstado().getTiempoEstimadoRespuesta());
			fechaInvocacionTer = ahora.getTime();

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

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

		datosInterop.setIdtraConIrpf19(iopTraceID);
		datosInterop.setfConIrpf19(UtilidadesFecha.formatearStringToDateFormato(
				resultadoIrpf.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulConIrpf19(codResultado);

		datosInterop.setResulConIrpf19(descResultado);
		datosInterop.setfinvokeConIrpf19(fechaInvocacionTer);

		return datosInterop;
	}

	private DatosInterop resultNISAEtoDatosInteropImserso(DatosInterop datosInterop, Respuesta resultadoImserso,
			String iopTraceID) throws Exception {
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		// es un ter en proceso
		if (ResultadosIOPEnum.TER.getCod().equals(resultadoImserso.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = resultadoImserso.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
			Calendar ahora = Calendar.getInstance();
			ahora.add(Calendar.HOUR, resultadoImserso.getAtributos().getEstado().getTiempoEstimadoRespuesta());
			fechaInvocacionTer = ahora.getTime();

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

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

		datosInterop.setIdtraConImserso19(iopTraceID);
		datosInterop.setfConImserso19(UtilidadesFecha.formatearStringToDateFormato(
				resultadoImserso.getAtributos().getTimeStamp(), "yyyy-MM-dd'T'HH:mm:ss.SSS"));
		datosInterop.setCodresulConImserso19(codResultado);
		datosInterop.setResulConImserso19(descResultado);
		datosInterop.setfinvokeConImserso19(fechaInvocacionTer);

		return datosInterop;
	}

	private DatosInterop resultNISAEtoDatosInteropDiscapacidad(DatosInterop datosInterop,
			Respuesta resultadoDiscapacidad, String iopTraceID) throws Exception {
		String descResultado = "";
		String codResultado = "";
		Date fechaInvocacionTer = null;
		// es un ter en proceso
		if (ResultadosIOPEnum.TER.getCod().equals(resultadoDiscapacidad.getAtributos().getEstado().getCodigoEstado())) {
			descResultado = resultadoDiscapacidad.getAtributos().getEstado().getLiteralError();
			codResultado = ResultadosIOPEnum.TER.getCod();
			Calendar ahora = Calendar.getInstance();
			ahora.add(Calendar.HOUR, resultadoDiscapacidad.getAtributos().getEstado().getTiempoEstimadoRespuesta());
			fechaInvocacionTer = ahora.getTime();

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

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

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

		return datosInterop;
	}

	public void downloadDocument(String oidDocument) throws Exception {
	}

	/**
	 * Se recuperan los documentos del expediente facilitado y se añaden a las
	 * listas que encontramos en el result. APOR, CONS, GEN
	 */
	public void recuperarDocExpedientes(Long idExpediente00, HashMap<String, List<DocumentosTarea>> result)
			throws ParseException {
		List<DocumentosTarea> listaDocumentosAport = new ArrayList<DocumentosTarea>();
		List<DocumentosTarea> listaDocumentosConsent = new ArrayList<DocumentosTarea>();
		List<DocumentosTarea> listaDocumentosGen = new ArrayList<DocumentosTarea>();
		List<DocumentosTarea> listaDocumentosNoApor = new ArrayList<DocumentosTarea>();

		List<String> dokusiID = new ArrayList<String>();

		Expedientes expedientes = new Expedientes();

		String procedureID = "";

		expedientes.setIdExpediente00(idExpediente00);
		Expedientes exp = this.expedientesService.find(expedientes);

		if (null != exp) {
			procedureID = exp.getIdProcedimiento00();
			TGetTelActionDocumentList folderDocuList = plateaService.getDocumentsTelAction(exp.getFolderId00(),
					procedureID);

			if (null != folderDocuList && null != folderDocuList.getTelActionList()
					&& null != folderDocuList.getTelActionList().getTelAction()) {
				addTelActionDocu(listaDocumentosAport, listaDocumentosConsent, exp, folderDocuList);
			}

			if (null != folderDocuList && null != folderDocuList.getGeneratedList()
					&& null != folderDocuList.getGeneratedList().getProceding()) {
				addTelActionGenDocu(listaDocumentosGen, dokusiID, exp.getNumExpediente00(),
						folderDocuList.getGeneratedList().getProceding());
			}

			TDocumentRoleList documentRoleList = this.plateaService.getDocumentalRoles(procedureID,
					TipoAportacionEnum.SOLICITUD.getTipo());

			for (TDocumentRole tipoDocuProcedimiento : documentRoleList.getDocumentRole()) {
				Boolean encontrado = false;
				for (DocumentosTarea docTareAportado : listaDocumentosAport) {
					String roleIDAportado = docTareAportado.getRoleID();
					if (null != documentRoleList && documentRoleList.getDocumentRole() != null && roleIDAportado != null
							&& roleIDAportado.equalsIgnoreCase(tipoDocuProcedimiento.getDocumentRoleID())) {
						encontrado = true;
					}
				}
				if (!encontrado.booleanValue()) {
					List<TStringI18N> roleNameI18nList = tipoDocuProcedimiento.getDocumentRoleName().getText();
					DocumentosTarea documento = new DocumentosTarea();
					for (TStringI18N roleNameI18n : roleNameI18nList) {
						MaestroTiposDoc maestro = new MaestroTiposDoc();

						if (TLanguage.ES.equals(roleNameI18n.getLocale())) {
							maestro.setDescEs36(roleNameI18n.getValue());
						} else if (TLanguage.EU.equals(roleNameI18n.getLocale())) {
							maestro.setDescEu36(roleNameI18n.getValue());
						}
						documento.setMaestroTiposDoc(maestro);
					}
					listaDocumentosNoApor.add(documento);
				}

			}

		}

		// Añadimos si corresponde la interoperabilidad del IRP del conyuje
		/*
		 * La interoperabilidad del conyuje se realiza a traves de NISAE por lo que
		 * PLATEA no tiene información de esto. Así que hay que comprobar si existe
		 * conyuje y si existen datos de interoperabilidad de la consulta IRPF y
		 * añadirlo como documento a los documentos de interoperabilidad
		 */
//		if (!Utilidades.esBlancoNulo(exp.getIdentificadorCon00())) {
//			DatosInterop datosInteropFilter = new DatosInterop();
//			datosInteropFilter.setIdExpediente19(exp.getIdExpediente00());
//			List<DatosInterop> datosInteropList = datosInteropService.findAll(datosInteropFilter, null);
//			if (datosInteropList != null && !datosInteropList.isEmpty()) {
//				DatosInterop datosInteropResult = datosInteropList.get(0);
//
//				DocumentosTarea docu = new DocumentosTarea();
//				docu.setTipoDocumentoDescEs(TiposDocumentoRoleEnum.CERT_DATOS_TRIBU_CONYUGE
//						.getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_ES));
//
//				docu.setTipoDocumentoDescEu(TiposDocumentoRoleEnum.CERT_DATOS_TRIBU_CONYUGE
//						.getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_EU));
//				docu.setDescripcionEs(TiposDocumentoRoleEnum.CERT_DATOS_TRIBU_CONYUGE
//						.getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_ES));
//				docu.setDescripcionEu(TiposDocumentoRoleEnum.CERT_DATOS_TRIBU_CONYUGE
//						.getLabelDesc(com.ejie.ad74a.constantes.Constantes.LOCALE_EU));
//
//				docu.setNombreDocumento("CertIRPFConyuge");
//				docu.setNumExpediente(exp.getNumExpediente00());
//				// docu.setOidDocumento(docFolderAuth.getDokusiID());
//
//				docu.setIopTraceID(datosInteropResult.getIdtraConConyuIrpf19());
//				docu.setAuthorizationID(datosInteropResult.getIdtraConConyuIrpf19());
//
//				docu.setTipoDocumento(Constantes.TIPO_DOCUMENTO_CONSENTIMIENTO);
//
//				docu.setIdExpediente(exp.getIdExpediente00());
//
//				docu.setFechaDocumento(datosInteropResult.getfConConyuIrpf19());
//				if (datosInteropResult.getfConConyuIrpf19() != null) {
//					docu.setFechaDocumentoTimestamp(UtilidadesFecha.formatearDateToStringFormatoTime(
//							datosInteropResult.getfConConyuIrpf19(), LocaleContextHolder.getLocale().getLanguage()));
//				}
//
//				docu.setTelActionID(datosInteropResult.getIdtraConConyuIrpf19());
//				docu.setTelActionName("Solicitud " + docu.getFechaDocumentoTimestamp());
//				docu.setProcedureID(exp.getIdProcedimiento00());
//				docu.setTipoSolicitudDesc(ProcedimientosEnum.getDesc(exp.getIdProcedimiento00()));
//				// docu.setEstado(tipo);
//				// docu.setSenderID(folderAutho.getSenderID().getID());
//
//				if (datosInteropResult.getfinvokeConConyuIrpf19() != null) {
//
//					docu.setInvocationTimestamp(UtilidadesFecha.formatearDateToStringFormatoTime(
//							datosInteropResult.getfinvokeConConyuIrpf19(),
//							LocaleContextHolder.getLocale().getLanguage()));
//				}
//
//				docu.setInvocationResult(datosInteropResult.getResulConConyuIrpf19());
//				listaDocumentosConsent.add(docu);
//			}
//
//		}

		// Comprobamos si existen las listas y se concatenan los documentos
		if (result.get(Constantes.DOCUMENTOS_APORTADO) != null)

		{
			result.get(Constantes.DOCUMENTOS_APORTADO).addAll(listaDocumentosAport);
		} else {
			result.put(Constantes.DOCUMENTOS_APORTADO, listaDocumentosAport);
		}
		if (result.get(Constantes.DOCUMENTOS_CONSENTIMIENTO) != null) {
			result.get(Constantes.DOCUMENTOS_CONSENTIMIENTO).addAll(listaDocumentosConsent);
		} else {
			result.put(Constantes.DOCUMENTOS_CONSENTIMIENTO, listaDocumentosConsent);
		}
		if (result.get(Constantes.DOCUMENTOS_NO_APORTADOS) != null) {
			result.get(Constantes.DOCUMENTOS_NO_APORTADOS).addAll(listaDocumentosNoApor);
		} else {
			result.put(Constantes.DOCUMENTOS_NO_APORTADOS, listaDocumentosNoApor);
		}
		String[] docuOIDArray = new String[dokusiID.size()];
		for (int i = 0; i < dokusiID.size(); i++) {
			docuOIDArray[i] = dokusiID.get(i);
		}

		// TODO: RECUPERAR LA FIRMA DE LOS DOCUMETNOS GENERADOS
		// se recuperan las firmas de los documentos generados
		// ciudado!! NO SE PUEDE llamar pasando mas
		// de 100 oids.
		if (docuOIDArray.length > 0) {
			Map<String, Integer> numFirmasOid = dokusiService.retrieveDocumentsSignaturesCount(docuOIDArray,
					procedureID, UtilSeguridad.getAuditUser());
			T65DocumentListType docuFirmantesAttrList = dokusiService.retrieveDocumentsFirmantes(docuOIDArray);

			for (Documento docu : listaDocumentosGen) {
				if (null != docu.getOidDocumento() && !"".equalsIgnoreCase(docu.getOidDocumento())) {

					for (T65DocumentType docuAttr : docuFirmantesAttrList.getDocumentArray()) {
						if (docuAttr.getDocumentID().getId().equalsIgnoreCase(docu.getOidDocumento())) {
							docu.setNumFirmas(numFirmasOid.get(docu.getOidDocumento()));
							String[] arr = docuAttr.getAttributeList().getAttributeArray(0).getValue().split("#");
							docu.setNumFirmasReq(arr.length == 1 && arr[0] == "" ? 0 : arr.length);
							break;
						}
					}

				}

			}

		}
		if (result.get(Constantes.DOCUMENTOS_GENERADO) != null) {
			result.get(Constantes.DOCUMENTOS_GENERADO).addAll(listaDocumentosGen);
		} else {
			result.put(Constantes.DOCUMENTOS_GENERADO, listaDocumentosGen);
		}

	}

	public void addTelActionDocu(List<DocumentosTarea> listaDocumentosAport,
			List<DocumentosTarea> listaDocumentosConsent, Expedientes exp, TGetTelActionDocumentList folderDocuList)
			throws ParseException {
		for (TTelActionDocument folderAutho : folderDocuList.getTelActionList().getTelAction()) {

			String telActionName = "";
			if (null != folderAutho.getTelActionName() && null != folderAutho.getTelActionName().getText()
					&& folderAutho.getTelActionName().getText().size() > 1) {
				for (com.ejie.ad74a.ws.client.platea.expedienteElectronico.TStringI18N t : folderAutho
						.getTelActionName().getText()) {
					if (t.getLocale().name().equalsIgnoreCase(LocaleContextHolder.getLocale().getLanguage())) {
						telActionName = t.getValue();
						break;
					}
				}
			}

			// documentos aportados
			if (null != folderAutho.getDocumentStorageList()
					&& null != folderAutho.getDocumentStorageList().getDocument()) {
				addDocu(folderAutho.getDocumentStorageList().getDocument(), listaDocumentosAport, exp, folderAutho,
						telActionName, com.ejie.ad74a.util.constantes.Constantes.DOCUMENTOS_APORTADO);
			}
			// documentos entregados anteriormente
			if (null != folderAutho.getDocumentCommittedAboveList()
					&& null != folderAutho.getDocumentCommittedAboveList().getDocument()) {
				addDocu(folderAutho.getDocumentCommittedAboveList().getDocument(), listaDocumentosAport, exp,
						folderAutho, telActionName, com.ejie.ad74a.util.constantes.Constantes.ENTREGADO_ANT);
			}

			if (null != folderAutho.getAuthorizationList()
					&& null != folderAutho.getAuthorizationList().getDocument()) {
				addDocu(folderAutho.getAuthorizationList().getDocument(), listaDocumentosConsent, exp, folderAutho,
						telActionName, com.ejie.ad74a.util.constantes.Constantes.DOCUMENTOS_CONSENTIMIENTO);
			}

		}
	}

	public void addTelActionGenDocu(List<DocumentosTarea> listaDocumentosGen, List<String> dokusiID, String numExp,
			List<TTelActionProceding> proceedings) throws ParseException {
		for (TTelActionProceding tTelActionProceding : proceedings) {
			if (null != listaDocumentosGen && null != tTelActionProceding
					&& null != tTelActionProceding.getDocumentList()
					&& null != tTelActionProceding.getDocumentList().getDocument()) {
				addDocuGen(listaDocumentosGen, dokusiID, numExp, tTelActionProceding);
			}
		}

	}

	public void addDocu(List<TDocument> docuList, List<DocumentosTarea> listaDocumentos, Expedientes exp,
			TTelActionDocument folderAutho, String telActionName, String tipo) throws ParseException {
		for (TDocument document : docuList) {

			DocumentosTarea docu = DocumentosPlateaUtils.getDocEntidadFromPlateaDocInteroper(document,
					exp.getNumExpediente00());

			if (document.getCommited() != null) {
				docu.setOrganoEntregado(document.getCommited().getOrganName());
				docu.setTipoEntregado(document.getCommited().getType());
				docu.setFechaEntregado(document.getCommited().getDate());
			}

			docu.setIdExpediente(exp.getIdExpediente00());

			docu.setFechaDocumento(UtilidadesFecha.parsearFechaPlatea(folderAutho.getRegistryID().getRegistryDate()));

			docu.setFechaDocumentoTimestamp(UtilidadesFecha.formatearDateToStringFormatoTime(docu.getFechaDocumento(),
					LocaleContextHolder.getLocale().getLanguage()));
			docu.setTelActionID(folderAutho.getTelActionID());
			docu.setTelActionName(telActionName + " " + docu.getFechaDocumentoTimestamp());
			docu.setProcedureID(exp.getIdProcedimiento00());
			docu.setTipoSolicitudDesc(ProcedimientosEnum.getDesc(exp.getIdProcedimiento00()));
			docu.setEstado(tipo);
			docu.setSenderID(folderAutho.getSenderID().getID());
			if (tipo.equals(Constantes.DOCUMENTOS_CONSENTIMIENTO)) {
				docu.setProceedingID(folderAutho.getApplicationID());
			}

			listaDocumentos.add(docu);
		}
	}

	public void addDocuGen(List<DocumentosTarea> listaDocumentosGen, List<String> dokusiID, String numExp,
			TTelActionProceding proceedings) throws ParseException {
		Expedientes exp = new Expedientes();
		exp.setNumExpediente00(numExp);
		exp = this.expedientesService.findAll(exp, null).get(0);

		for (TProcedingDocument document : proceedings.getDocumentList().getDocument()) {

			if (document.getAnnulment() == null) {

				DocumentosTarea docu = DocumentosPlateaUtils.getDocEntidadFromPlateaDocGenerated(document, numExp);
				docu.setFechaDocumento(
						UtilidadesFecha.parsearFechaPlatea(proceedings.getRegistryID().getRegistryDate()));

				docu.setFechaDocumentoTimestamp(UtilidadesFecha.formatearDateToStringFormatoTime(
						docu.getFechaDocumento(), LocaleContextHolder.getLocale().getLanguage()));
				docu.setProcedureID(exp.getIdProcedimiento00());
				docu.setTipoSolicitudDesc(ProcedimientosEnum.getDesc(exp.getIdProcedimiento00()));
				if (null != docu.getOidDocumento() && !"".equalsIgnoreCase(docu.getOidDocumento()))
					dokusiID.add(docu.getOidDocumento());
				listaDocumentosGen.add(docu);
			}

		}

	}

	public TableResponseDto<DocumentosTarea> filterByDocu(DocumentosTarea filterDocumentos,
			TableRequestDto tableRequestDto) throws IOException {

		List<DocumentosTarea> listaDocs = new ArrayList<DocumentosTarea>();
		List<DocumentosTarea> listaDocumentosResult = new ArrayList<DocumentosTarea>();

		JsonFactory factory = new JsonFactory();
		factory.enable(Feature.ALLOW_SINGLE_QUOTES);
		ObjectMapper mapper = new ObjectMapper(factory);
		TypeReference<List<DocumentosTarea>> typeRefDocuList = new TypeReference<List<DocumentosTarea>>() {
		};
		if (null != filterDocumentos.getDocumentListStringify()) {
			try {
				listaDocs = mapper.readValue(filterDocumentos.getDocumentListStringify(), typeRefDocuList);
			} catch (JsonMappingException e) {
				return new TableResponseDto<DocumentosTarea>(tableRequestDto, Long.valueOf(listaDocs.size()),
						listaDocumentosResult);
			}

			// Ordenamos la lista
			String columna = tableRequestDto.getSidx();
			if (columna.equalsIgnoreCase("fechaDocumentoTimestamp")) {
				Collections.sort(listaDocs, Documento.ComparadorFecha);
			} else if (columna.equalsIgnoreCase("nombreDocumento")) {
				Collections.sort(listaDocs, Documento.ComparadorNombre);
			} else if (columna.equalsIgnoreCase("descripcionEs")) {
				Collections.sort(listaDocs, Documento.ComparadorDescES);
			} else if (columna.equalsIgnoreCase("descripcionEu")) {
				Collections.sort(listaDocs, Documento.ComparadorDescEU);
			} else {
				if ("es".equalsIgnoreCase(LocaleContextHolder.getLocale().getLanguage())) {
					Collections.sort(listaDocs, Documento.ComparadorFechaDescES);
				} else {
					Collections.sort(listaDocs, Documento.ComparadorFechaDescEU);
				}
			}

			if (tableRequestDto.getSord().equalsIgnoreCase("DESC")) {
				Collections.reverse(listaDocs);
			}

			int numFilas = tableRequestDto.getRows().intValue();
			int pagina = tableRequestDto.getPage().intValue();

			int from = pagina > 1 ? ((pagina - 1) * numFilas) : 0;
			int to = (from + numFilas) > listaDocs.size() ? listaDocs.size() : (from + numFilas);
			listaDocumentosResult = listaDocs.subList(from, to);
		}

		return new TableResponseDto<DocumentosTarea>(tableRequestDto, Long.valueOf(listaDocs.size()),
				listaDocumentosResult);
	}

	@Override
	public TableResponseDto<DocumentosTarea> getDocumentsNoAportadosExp(Long idSolicitante,
			TableRequestDto tableRequestDto) throws IOException {

		List<DocumentosTarea> listaDocumentosResult = new ArrayList<DocumentosTarea>();
		DocumentosTarea doc = null;
		List<Informes> listInformes = this.informesDao.getInformesDisponiblesSinExpAsociado(idSolicitante);

		if (null != listInformes && !listInformes.isEmpty()) {
			for (Informes informe : listInformes) {
				doc = new DocumentosTarea();
				doc.setNombreDoc18(informe.getDocumentosInforme().getNombreDoc17());
				doc.setDescripcionEs(informe.getDocumentosInforme().getMaestroTiposDoc().getDescEs36());
				doc.setDescripcionEu(informe.getDocumentosInforme().getMaestroTiposDoc().getDescEu36());
				doc.setEstado(informe.getEstado16());
				doc.setOidDocumento(informe.getDocumentosInforme().getOid17());
				try {
					doc.setFechaDocumentoTimestamp(UtilidadesFecha.formatearDateToStringFormatoTime(
							informe.getfEnvioAdmon16(), LocaleContextHolder.getLocale().getLanguage()));
				} catch (ParseException e) {
					DocumentosServiceImpl.logger.error(
							"DocumentosServiceImpl.getDocumentsNoAportadosExp - Error al parsear la fecha de alta ");
				}
				listaDocumentosResult.add(doc);
			}
		}
		return new TableResponseDto<DocumentosTarea>(tableRequestDto, Long.valueOf(listaDocumentosResult.size()),
				listaDocumentosResult);
	}

	@Override
	public TableResponseDto<DocumentosTarea> filterByExpediente(DocumentosTarea filterDocumentosTarea,
			TableRequestDto tableRequestDto) {
		ObjectMapper mapper = new ObjectMapper();
		List<DocumentosTarea> listaDocs = new ArrayList<DocumentosTarea>();
		if (!Utilidades.esBlancoNulo(filterDocumentosTarea.getDocumentListStringify())
				&& !"null".equalsIgnoreCase(filterDocumentosTarea.getDocumentListStringify())) {
			try {
				listaDocs = Arrays.asList(
						mapper.readValue(filterDocumentosTarea.getDocumentListStringify(), DocumentosTarea[].class));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		// Ordenamos la lista
		String columna = tableRequestDto.getSidx();
		if (columna.equalsIgnoreCase("tiposDocumento.descripcion")) {
			// Collections.sort(listaDocs, DocumentosTarea.ComparadorTipo);
		} else if (columna.equalsIgnoreCase("nombreDoc29")) {
			Collections.sort(listaDocs, DocumentosTarea.ComparadorNombre);
		}

		if (tableRequestDto.getSord().equalsIgnoreCase("DESC")) {
			Collections.reverse(listaDocs);
		}

		List<DocumentosTarea> listaDocumentosTarea = listaDocs;
		Long recordNum = new Long(listaDocs.size());
		TableResponseDto<DocumentosTarea> tableResponseDto = new TableResponseDto<DocumentosTarea>(tableRequestDto,
				recordNum, listaDocumentosTarea);

		if (tableRequestDto.getMultiselection().getSelectedIds() != null
				&& !tableRequestDto.getMultiselection().getSelectedIds().isEmpty()) {
			List<TableRowDto<DocumentosTarea>> reorderSelection = new ArrayList<TableRowDto<DocumentosTarea>>();
			tableResponseDto.setReorderedSelection(reorderSelection);
			tableResponseDto.addAdditionalParam("reorderedSelection", reorderSelection);
			tableResponseDto.addAdditionalParam("selectedAll", tableRequestDto.getMultiselection().getSelectedAll());
		}
		return tableResponseDto;
	}

	public void aportarDocumento(DocTemporales docTemporal) {

		DocumentosServiceImpl.logger
				.info("DocumentosServiceImpl.aportarDocumento - Inicio docTemporal: " + docTemporal);

		docTemporal = this.docTemporalesDao.add(docTemporal);

		Expedientes expediente = new Expedientes();
		expediente.setFolderId00(docTemporal.getFolderId72());
		expediente = this.expedientesDao.findAll(expediente, null).get(0);

		TareasEnum tareaSugerir = TareasEnum.ADJUNTAR_DOCUMENTACION;
		// sugerimos la tarea.
		TStringList mailboxes = new TStringList();
		String mailBox = TareasUtils.getBuzonByProdedure(expediente.getIdProcedimiento00());
		mailboxes.getItem().add(mailBox);

		com.ejie.ad74a.ws.client.platea.tareasTramitacion.TPersonIDName sender = null;
		try {
			sender = UtilSeguridad.getSenderTramitador();
		} catch (Exception e) {
			sender = UtilSeguridad.getSenderTramitadorAplic();
		}

		this.plateaService.prepareNewTask(expediente.getIdProcedimiento00(), expediente.getFolderId00(),
				tareaSugerir.getProceedingId(), tareaSugerir.getTaskId(), sender, mailboxes);

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.aportarDocumento - Fin ");

	}

//	public void generarInformePdf(Informes informe) {
//
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarInformePdf - Inicio: ");
//
//		List<DefinicionCol> listaColumnas1 = new ArrayList<DefinicionCol>();
//
//		DefinicionCol defCol1 = DocumentosPdfUtils.newDefinicionCol("Koop. \nCoop.", "COOP", 1, AlineacionCol.IZQUIERDA,
//				6, 5, false, true, false);
//		listaColumnas1.add(defCol1);
//		DefinicionCol defCol2 = DocumentosPdfUtils.newDefinicionCol("Bazkide \nSocios", "SOCIOS", 1,
//				AlineacionCol.IZQUIERDA, 6, 5, false, true, false);
//		listaColumnas1.add(defCol2);
//
//		DefinicionCol defCol3 = DocumentosPdfUtils.newDefinicionCol("Ondasuna \nCapital", "CAPITAL", 1,
//				AlineacionCol.IZQUIERDA, 6, 5, false, true, false);
//		listaColumnas1.add(defCol3);
//
//		List<Grupo> listaGrupos = new ArrayList<Grupo>();
//
//		listaGrupos.add(DocumentosPdfUtils.newGrupo(listaColumnas1, "Araba \nÁlava"));
//
//		String jsonStringGr = DocumentosPdfUtils.convertirJson(listaGrupos);
//
//		DefinicionPag defPag = DocumentosPdfUtils.newDefinicionPag(7, Orientacion.HORIZONTAL, Tamano.A_4, "TITULO");
//
//		DefinicionCab defCab = null;
//		DefinicionPie defPie = null;
//
//		List<HashMap<String, String>> lista = new ArrayList<HashMap<String, String>>();
//		HashMap h = new HashMap<String, String>();
//		h.put("COOP", "aaaa");
//		lista.add(h);
//		HashMap h2 = new HashMap<String, String>();
//		h2.put("SOCIOS", "dd");
//		lista.add(h2);
//		HashMap h3 = new HashMap<String, String>();
//		h3.put("CAPITAL", "fffdfsd");
//		lista.add(h3);
//
//		String jsonStringListado = DocumentosPdfUtils.convertirJsonListado(lista);
//
//		String informeStr = "";
//		// String mime = MimeTypes.MIME_APPLICATION_PDF;
//		String rutaPif = "/ad74a/pruebaInforme.pdf";
//		try {
//			informeStr = this.documentoWebService.generarInformePif(jsonStringGr, defPag, jsonStringListado, defCab,
//					defPie, Modo.PDF, rutaPif);
//		} catch (Exception e) {
//			DocumentosServiceImpl.logger.error("Error en la generaciÃ³n del documento", e.getMessage());
//			ManagerErrors.manageException(e, "Error al generar el informe PDF");
//		}
//
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarInformePdf - Fin ");
//
//	}

	public String generarDocumentoFop(String pathXSL, String contenidoXML, String rutaPifPdf, String name) {
		String rutaTemp = "";
		try {
			File xsltFile = new File(pathXSL);
			// Archivo XML que proveerá de datos
			javax.xml.transform.stream.StreamSource xmlSource = new javax.xml.transform.stream.StreamSource(
					new StringReader(contenidoXML));
			FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
			FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
			OutputStream out;
			// Archivo PDF

			// Crear el directorio temporal si no existe
			rutaTemp = this.appConfiguration.getProperty("ruta.datos.temporal");
			File tmpDir = new File(rutaTemp);
			if (!tmpDir.exists()) {
				tmpDir.mkdirs();
			}

			rutaTemp = this.appConfiguration.getProperty("ruta.datos.temporal") + "/" + name;

			out = new FileOutputStream(rutaTemp);

			Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
			TransformerFactory factory = TransformerFactory.newInstance();

			Transformer transformer = factory.newTransformer(new StreamSource(xsltFile));

			Result res = new SAXResult(fop.getDefaultHandler());

			transformer.transform(xmlSource, res);
			out.close();

			// leermos el fichero y lo subimos a pif
//			File file = new File(rutaTemp);
//			InputStream in = new FileInputStream(file);

//			Ad74aPIFws pifService = Ad74aPIFws.getInstance();
//			pifService.uploadDocument(in, rutaPifPdf + "/" + name, true);

			// borramos el fichero de la zona temporal
//			in.close();
//			file.delete();

		} catch (Exception e) {
			ManagerErrors.manageException(e, "Error al generar el informe social");
		}
		return rutaTemp;

	}

	/**
	 * Genera el documento correspondiente a la tarea
	 */
	public HashMap<String, String> generarDocumentoResolucion(String procedureID, Expedientes expediente,
			String taskID) {
		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoResolucion - Inicio");
		HashMap<String, String> hashResultado = new HashMap<String, String>();

		// ruta plantilla rtf
		String pathRtf = "";
		// ruta plantilla
		String pathPlantilla = "";

		// ** Path resultado **//
		String pathResultado = "";

		// ** Path para el XML **//
		String pathXML = "";

		String plantilla = "";

		switch ((TareasEnum.getEnumByTaskId(taskID))) {

//		case PRUEBAS:
//			plantilla = Constantes.PlantillasDoc.TRAMITE_AUDIENCIA_EUSK;
//			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;
//
//			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
//					.concat(plantilla);
//
//			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
//					.concat("/resolucionConcesion_" + expediente.getNumExpediente00() + ".xml");
//
//			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
//					.concat("/resolucionConcesion_" + expediente.getNumExpediente00() + ".doc");
//			break;

		case RESOL_CONCESION:
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				if (procedureID.equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())) {
					// si el solicitante pidio la exención
					if (null != expediente.getExencionSol00() && expediente.getExencionSol00() == 1
							|| (null != expediente.getExencionRes00() && expediente.getExencionRes00() == 1)) {
						// si se le concedió la exención
						if (null != expediente.getExencionRes00() && expediente.getExencionRes00() == 1) {
							plantilla = Constantes.PlantillasDoc.RESOLUCION_ALTA_CON_EXENCION_EUSK;
						} else {
							plantilla = Constantes.PlantillasDoc.RESOLUCION_ALTA_SIN_EXENCION_EUSK;
						}
					} else {
						plantilla = Constantes.PlantillasDoc.RESOLUCION_CONCESION_EUSK;
					}
				} else if (procedureID.equalsIgnoreCase(ProcedimientosEnum.BAJA.getId())) {

					plantilla = Constantes.PlantillasDoc.RESOLUCION_BAJA_EUSK;
				} else if (procedureID.equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId())) {

					plantilla = Constantes.PlantillasDoc.REVISION_PRECIO_CONCESION_EUSK;
				}

				else {
					ManagerErrors.manageError(
							"No se puede generar un documento de resolucion de concesion para este procedimiento. Procedure: "
									+ procedureID);
				}
			} else {
				if (procedureID.equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())) {
					// si el solicitante pidio la exención
					if (null != expediente.getExencionSol00() && expediente.getExencionSol00() == 1
							|| (null != expediente.getExencionRes00() && expediente.getExencionRes00() == 1)) {
						// si se le concedió la exención
						if (null != expediente.getExencionRes00() && expediente.getExencionRes00() == 1) {
							plantilla = Constantes.PlantillasDoc.RESOLUCION_ALTA_CON_EXENCION_CAST;
						} else {
							plantilla = Constantes.PlantillasDoc.RESOLUCION_ALTA_SIN_EXENCION_CAST;
						}
					} else {
						plantilla = Constantes.PlantillasDoc.RESOLUCION_CONCESION_CAST;
					}
				} else if (procedureID.equalsIgnoreCase(ProcedimientosEnum.BAJA.getId())) {

					plantilla = Constantes.PlantillasDoc.RESOLUCION_BAJA_CAST;
				} else if (procedureID.equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId())) {

					plantilla = Constantes.PlantillasDoc.REVISION_PRECIO_CONCESION_CAST;
				} else {
					ManagerErrors.manageError(
							"No se puede generar un documento de resolucion de concesion para este procedimiento. Procedure: "
									+ procedureID);
				}
			}
			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/resolucionConcesion_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/resolucionConcesion_" + expediente.getNumExpediente00() + ".doc");

			break;
		case RESOL_DENEGACION:
			procedureID = "0087002";
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				if (procedureID.equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())) {
					plantilla = Constantes.PlantillasDoc.RESOLUCION_DENEGACION_ALTA_EUSK;
				} else if (procedureID.equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId())) {
					plantilla = Constantes.PlantillasDoc.REVISION_PRECIO_DENEGACION_EUSK;
				} else {
					ManagerErrors.manageError(
							"No se puede generar un documento de resolucion de denegacion para este procedimiento. Procedure: "
									+ procedureID);
				}

			} else {
				if (procedureID.equalsIgnoreCase(ProcedimientosEnum.ALTA.getId())) {
					plantilla = Constantes.PlantillasDoc.RESOLUCION_DENEGACION_ALTA_CAST;
				} else if (procedureID.equalsIgnoreCase(ProcedimientosEnum.REVISION_PRECIO.getId())) {
					plantilla = Constantes.PlantillasDoc.REVISION_PRECIO_DENEGACION_CAST;
				} else {
					ManagerErrors.manageError(
							"No se puede generar un documento de resolucion de denegacion para este procedimiento. Procedure: "
									+ procedureID);
				}

			}
			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/resolucionDenegacion_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/resolucionDenegacion_" + expediente.getNumExpediente00() + ".doc");

			break;
		case RESOL_DENEGACION_SERVICIO_AUDIENCIA:
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {

				plantilla = Constantes.PlantillasDoc.RESOLUCION_CONCESION_BAJA_OFICIO_EUSK;

			} else {

				plantilla = Constantes.PlantillasDoc.RESOLUCION_CONCESION_BAJA_OFICIO_CAST;

			}
			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/resolucionDenegacion_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/resolucionDenegacion_" + expediente.getNumExpediente00() + ".doc");

			break;
		case REQUERIMIENTO_SUBSANACION:
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				plantilla = Constantes.PlantillasDoc.REQUERIMIMENTO_REQ_SUBSANACION_EUSK;
			} else {
				plantilla = Constantes.PlantillasDoc.REQUERIMIMENTO_REQ_SUBSANACION_CAST;
			}

			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;
			// Añadir el QR a la plantilla
//			byte[] plantillaBytes = null;
//			File fileTemp = null;
//			File filePlantilla = null;
//			FileInputStream fis = null;
//			ByteArrayOutputStream bos = null;
//			OutputStream os = null;
//			OutputStreamWriter osw = null;
			// 1.Crear objeto rtftemplate
//			try {
//				RTFTemplate rtfTemplate = RTFTemplateBuilder
//						.newRTFTemplateBuilder(ApplicationContextProvider.getApplicationContext())
//						.newRTFTemplate(RTFTemplateBuilder.DEFAULT_FREEMARKER_RTFTEMPLATE);

			// 2. Set the RTF model source
//				filePlantilla = new File(pathRtf);
			// rtfTemplate.setTemplate(filePlantilla);

			// 3. Anadir la imagen del qr
			// Crear el texto del qr 00870#0X#02;TL_...
//				String texto = expediente.getIdProcedimiento00().substring(0,
//						expediente.getIdProcedimiento00().length() - 2) + "#"
//						+ expediente.getIdProcedimiento00().substring(expediente.getIdProcedimiento00().length() - 2)
//						+ "#" + TipoAportacionEnum.SUBSANACION.getTipoLeadingZero() + ";"
//						+ expediente.getNumExpediente00();

//				byte[] image = generarQR.generarQR(
//						UtilTokenXlnets.getTokenStringXLNets(com.ejie.ad74a.constantes.Constantes.COD_APLICACION),
//						UtilSeguridad.getInstance().getAuditUser(), texto,
//						com.ejie.ad74a.constantes.Constantes.PIXELES_QR);
			// byte[] image = generateQRCodeImage(texto);

			// Format imageFieldFormatter = new DefaultInputStreamFormat();
			// rtfTemplate.put("FIRMAESCANEADA", generateQRCodeImage(texto));

//				os = new FileOutputStream(fileTemp);
//				osw = new OutputStreamWriter(os);
			// rtfTemplate.merge(osw);

//			} catch (Exception e) {
//				DocumentosServiceImpl.logger.error(
//						"DocumentosServiceImpl.generarDocumentoResolucion. Error añadiendo el QR a la plantilla: "
//								+ e.getMessage(),
//						e);
//			}
//			finally {
//				try {
//					if (fis != null) {
//						fis.close();
//					}
//					if (bos != null) {
//						bos.close();
//					}
//					if (os != null) {
//						os.close();
//					}
//					if (osw != null) {
//						osw.close();
//					}
//				} catch (IOException e) {
//					DocumentosServiceImpl.logger.error(
//							"DocumentosServiceImpl.generarDocumentoResolucion. Error añadiendo el QR a la plantilla: "
//									+ e.getMessage(),
//							e);
//				}
//			}
			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/reqSubsanacion_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/reqSubsanacion_" + expediente.getNumExpediente00() + ".doc");

			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			break;

		case AUDIENCIA:
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				plantilla = Constantes.PlantillasDoc.TRAMITE_AUDIENCIA_EUSK;
			} else {
				plantilla = Constantes.PlantillasDoc.TRAMITE_AUDIENCIA_CAST;
			}
			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/audiencia_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/audiencia_" + expediente.getNumExpediente00() + ".doc");

			break;
		case RESOL_DESISTIMIENTO:
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				if (com.ejie.ad74a.util.constantes.Constantes.TiposDesistimiento.TIPO_DESISTIMIENTO_TACITO
						.equalsIgnoreCase(expediente.getTipoDesis00())) {
					plantilla = Constantes.PlantillasDoc.TRAMITE_DESISTIMIENTO_TACITO_EUSK;// SIN CONCESION
				} else {
					plantilla = Constantes.PlantillasDoc.TRAMITE_DESISTIMIENTO_EXPRESO_EUSK;// CONCESION
				}
			} else {
				if (com.ejie.ad74a.util.constantes.Constantes.TiposDesistimiento.TIPO_DESISTIMIENTO_TACITO
						.equalsIgnoreCase(expediente.getTipoDesis00())) {
					plantilla = Constantes.PlantillasDoc.TRAMITE_DESISTIMIENTO_TACITO_CAST;// SIN CONCESION
				} else {
					plantilla = Constantes.PlantillasDoc.TRAMITE_DESISTIMIENTO_EXPRESO_CAST;// CONCESION
				}
			}
			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/desistimiento_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/desistimiento_" + expediente.getNumExpediente00() + ".doc");
			break;
		case APOR_CARTA_LIQUID:
			if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
					&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				plantilla = Constantes.PlantillasDoc.CARTA_PAGO_EUSK;
			} else {
				plantilla = Constantes.PlantillasDoc.CARTA_PAGO_CAST;
			}

			pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/" + plantilla;

			pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
					.concat(plantilla);

			pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/cartaPago_" + expediente.getNumExpediente00() + ".xml");

			pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
					.concat("/cartaPago_" + expediente.getNumExpediente00() + ".doc");

			break;
		default:
			ManagerErrors.manageError("Tipo de tarea incorrecta para generar documentos");
		}

		InputStream fin = null;

		// ******** Recuperar informacion ****** //
		DocumentosServiceImpl.logger
				.info("DocumentosServiceImpl.generarDocumentoResolucion - Generando XML de datos...");
		byte[] datosXML = this.generarXLDatos(expediente, taskID);
		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoResolucion - XML de datos generado.");

		// *****Subir plantillas a PIF **** //
		DocumentosServiceImpl.logger
				.info("DocumentosServiceImpl.generarDocumentoResolucion - Subiendo plantillas a PIF...");

		try {
			fin = new FileInputStream(new File(pathRtf));
			new File(pathRtf).getAbsolutePath();
			Ad74aPIFws.getInstance().uploadDocument(fin, pathPlantilla, true);
			fin.close();
			DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoResolucion - Plantilla subida.");
		} catch (Exception e) {
			ManagerErrors.manageException(e, "ERROR subiendo plantilla de resolucion");
		}

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoResolucion - Creando archivos...");
		try {
			this.crearArchivoXML(datosXML, pathXML);
			pathResultado = this.documentoWebService.create(pathXML, pathPlantilla, pathResultado);
			hashResultado.put("pathResultado", pathResultado);
			DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoResolucion - Resolucion creado.");

		} catch (Exception e) {
			ManagerErrors.manageException(e, "ERROR creando documento Resolucion");
		} finally {
			try {
				Ad74aPIFws.getInstance().deleteDocument(pathXML);
				Ad74aPIFws.getInstance().deleteDocument(pathPlantilla);
			} catch (Exception e) {
				DocumentosServiceImpl.logger.error(
						"DocumentosServiceImpl.generarDocumentoResolucion Eliminar documentos temporales de pif");
			}

		}

		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoResolucion - Fin");
		return hashResultado;

	}

//	public HashMap<String, String> generarDocumentoReqSub(Expedientes expediente) {
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoReqSub - Inicio");
//		HashMap<String, String> hashResultado = new HashMap<String, String>();
//		// ruta plantilla rtf
//		String pathRtf = this.appConfiguration.getProperty("ruta.datos.plantillas") + "/"
//				+ Constantes.PlantillasDoc.REQUERIMIMENTO_REQ_SUBSANACION;
//
//		// path para la plantilla en pif
//		String pathPlantilla = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase()).concat("/")
//				.concat(Constantes.PlantillasDoc.REQUERIMIMENTO_REQ_SUBSANACION);
//
//		// ** Path para el XML **//
//		String pathXML = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
//				.concat("/reqSubsanacion_" + expediente.getNumExpediente00() + ".xml");
//
//		// ** Path resultado **//
//		String pathResultado = "/".concat(com.ejie.ad74a.constantes.Constantes.COD_APLICACION.toLowerCase())
//				.concat("/reqSubsanacion_" + expediente.getNumExpediente00() + ".doc");
//
//		InputStream fin = null;
//
//		// ******** Recuperar informacion ****** //
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoReqSub - Generando XML de datos...");
//		byte[] datosXML = this.generarXLDatos(expediente);
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoReqSub - XML de datos generado.");
//
//		// *****Subir plantillas a PIF **** //
//		DocumentosServiceImpl.logger
//				.info("DocumentosServiceImpl.generarDocumentoReqSub - Subiendo plantillas a PIF...");
//
//		try {
//			fin = new FileInputStream(new File(pathRtf));
//			Ad74aPIFws.getInstance().uploadDocument(fin, pathPlantilla, true);
//			fin.close();
//			DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoReqSub - Plantilla subida.");
//		} catch (Exception e) {
//			ManagerErrors.manageException(e, "ERROR subiendo plantilla de requerimiento subsanacion");
//		}
//
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoReqSub - Creando archivos...");
//		try {
//			this.crearArchivoXML(datosXML, pathXML);
//			pathResultado = this.documentoWebService.create(pathXML, pathPlantilla, pathResultado);
//			hashResultado.put("pathResultado", pathResultado);
//			DocumentosServiceImpl.logger
//					.info("DocumentosServiceImpl.generarDocumentoPublicacionBOPV - Requerimiento subsanacion creado.");
//
//		} catch (Exception e) {
//			ManagerErrors.manageException(e, "ERROR creando documento Requerimiento subsanacion");
//		}
//
//		DocumentosServiceImpl.logger.info("DocumentosServiceImpl.generarDocumentoReqSub - Fin");
//		return hashResultado;
//
//	}

	/**
	 * Genera el xml de datos
	 * 
	 * @param codConvocatoria Long
	 * 
	 * @return byte[]
	 */

	private static List<HashMap<String, String>> datosMotivos(List<MaestroMotDenegacion> listaAceptadas) {
		List<HashMap<String, String>> listaHash = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> hashDatos = new HashMap<String, String>();

		if (listaAceptadas.isEmpty()) {
			hashDatos = new HashMap<String, String>();
			hashDatos.put("descEu", "");
			hashDatos.put("descEs", "");

			listaHash.add(hashDatos);
		} else {

			for (MaestroMotDenegacion aceptada : listaAceptadas) {
				hashDatos = new HashMap<String, String>();
				hashDatos.put("descEu", aceptada.getDescEs59());
				hashDatos.put("descEs", aceptada.getDescEu59());

				listaHash.add(hashDatos);
			}
		}
		return listaHash;
	}

	private byte[] generarXLDatos(Expedientes expediente, String taskID) {

		// ** Mapas de datos ** //
		HashMap<String, List<HashMap<String, String>>> datosMap = new HashMap<String, List<HashMap<String, String>>>();

		// ** Listas de Mapas de datos ** //
		HashMap<String, List<HashMap<String, String>>> datosListaMap = new HashMap<String, List<HashMap<String, String>>>();

		// ** Datos Simples **//
		HashMap<String, String> datoSimples = new HashMap<String, String>();

		Calendar calendarFalta = Calendar.getInstance();
		calendarFalta.setTime(expediente.getfAlta00());

		int anyoF = calendarFalta.get(Calendar.YEAR);
		int mesF = calendarFalta.get(Calendar.MONTH) + 1;
		int diaF = calendarFalta.get(Calendar.DAY_OF_MONTH);

		datoSimples.put("fechaDia", String.valueOf(diaF));
		Month mesFAlta = LocalDate.of(anyoF, mesF, diaF).getMonth();
		String nombreMesFA = obtenerMesString(mesFAlta, expediente);

		datoSimples.put("fechaMes", nombreMesFA);
		datoSimples.put("fechaAnyo", String.valueOf(anyoF));

		datoSimples.put("nombrePersonaInteresada", expediente.getSolicitantes().getNombreCompleto());
		datoSimples.put("dniPersonaInteresada", expediente.getSolicitantes().getIdentificador01());
		datoSimples.put("numExpediente", expediente.getNumExpediente00());
		// datoSimples.put("prueba", this.expedientesService.obtenerDatosString());

		if (null != expediente.getIdMotivoBaja00()) {
			MotivosBaja motivosBaja = this.motivosBajaService.find(new MotivosBaja(expediente.getIdMotivoBaja00()));
			datoSimples.put("motivo",
					expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? motivosBaja.getDescEu33()
							: motivosBaja.getDescEs33());
		}

		if (null != expediente.getIdMotivoBaja00() && (expediente.getIdMotivoBaja00().toString()).equals("16")) {
			MotivosBaja motivosBaja = this.motivosBajaService.find(new MotivosBaja(expediente.getIdMotivoBaja00()));
			if (expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
				datoSimples.put("motivoOtros", motivosBaja.getDescEu33());
			} else {
				datoSimples.put("motivoOtros", motivosBaja.getDescEs33());

			}

		} else {
			datoSimples.put("motivoOtros", " ");
		}

		Calendar calendarFbaja = Calendar.getInstance();
		if (expediente.getfCierre00() != null) {
			calendarFbaja.setTime(expediente.getfCierre00());
		}

		int anyoFb = calendarFalta.get(Calendar.YEAR);
		int mesFb = calendarFalta.get(Calendar.MONTH) + 1;
		int diaFb = calendarFalta.get(Calendar.DAY_OF_MONTH);

		datoSimples.put("fechaDiaBaja", String.valueOf(diaFb));
		Month mesFBaja = LocalDate.of(anyoFb, mesFb, diaFb).getMonth();
		String nombreMesFb = obtenerMesString(mesFAlta, expediente);
		datoSimples.put("fechaMesBaja", nombreMesFb);
		datoSimples.put("fechaAnyoBaja", String.valueOf(anyoFb));

		Month mes = LocalDate.now().getMonth();
		String nombreMes = obtenerMesString(mes, expediente);
		datoSimples.put("mesActual", nombreMes);
		String dia = String.valueOf(LocalDate.now().getDayOfMonth());
		datoSimples.put("diaActual", dia);
		String anyo = String.valueOf(LocalDate.now().getYear());
		datoSimples.put("anyoActual", anyo);

		List<TareasTramite> ttr;
		DocumentosServiceImpl.logger.info(
				"¬¬¬TEST ERROR NULL POINTER¬¬¬ : pre getLastExecutedTask : this.tareasTramiteDao != null = {1} // expediente != null {2}",
				this.tareasTramiteDao != null, expediente != null);

		ttr = this.tareasTramiteDao.getLastExecutedTask(expediente.getIdExpediente00(),
				TramitesEnum.ESTUDIO_DOCUMENTACION);

		DocumentosServiceImpl.logger.info(
				"¬¬¬TEST ERROR NULL POINTER¬¬¬ : post getLastExecutedTask : this.tareasTramiteDao != null = {1} // expediente != null {2}",
				this.tareasTramiteDao != null, expediente != null);

		if (ttr != null && ttr.size() > 0 && null != ttr.get(0).getDatosTareaEstudioAlta()
				&& null != ttr.get(0).getDatosTareaEstudioAlta().getAnioIPREM()) {
			datoSimples.put("anioIprem", ttr.get(0).getDatosTareaEstudioAlta().getAnioIPREM().toString());
			datoSimples.put("valIprem", ttr.get(0).getDatosTareaEstudioAlta().getValIPREM().toString());
			Iprem ipremAnio = this.ipremService
					.getIpremAnio((ttr.get(0).getDatosTareaEstudioAlta().getAnioIPREM()).longValue());
			datoSimples.put("ipremAnio", ipremAnio.getIprem79Str());
		}
		if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
				&& ProcedimientosEnum.REVISION_PRECIO.getId()
						.equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())
				&& new Long(FinalizacionEstudioEnum.RESOLUCION_CONCESION.getId())
						.equals(ttr.get(0).getDatosTareaEstudio().getSituacioneFinalTarea())) {
			datoSimples.put("anioIprem", ttr.get(0).getDatosTareaEstudioRevision().getAnioIPREM().toString());
			datoSimples.put("valIprem", ttr.get(0).getDatosTareaEstudioRevision().getValIPREM().toString());
			Iprem ipremAnio = this.ipremService
					.getIpremAnio((ttr.get(0).getDatosTareaEstudioRevision().getAnioIPREM()).longValue());
			datoSimples.put("ipremAnio", ipremAnio.getIprem79Str());
			// String listamotivos = "";
//			for (String motivo : ttr.get(0).getDatosTareaEstudioRevision().getMotivoDenegacion()) {
//				MaestroMotDenegacion mmd = this.maestroMotDenegacionDao
//						.find(new MaestroMotDenegacion(Long.valueOf(motivo)));
//				listamotivos += mmd.getDesc();
//			}
//			 datoSimples.put("motivosDenegacion",
//			 ttr.get(0).getDatosTareaEstudioRevision().getMotivoDenegacion());
		}
		if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
				&& ProcedimientosEnum.REVISION_PRECIO.getId()
						.equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {

			List<String> descripcionMotivos = new ArrayList<String>();
			if (null != ttr.get(0).getDatosTareaEstudioRevision()
					&& null != ttr.get(0).getDatosTareaEstudioRevision().getMotivoDenegacion()) {

				for (String idMotivo : ttr.get(0).getDatosTareaEstudioRevision().getMotivoDenegacion()) {
					MaestroMotDenegacion mmd = this.maestroMotDenegacionDao
							.find(new MaestroMotDenegacion(Long.valueOf(idMotivo)));
					descripcionMotivos
							.add(expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? mmd.getDescEu59()
									: mmd.getDescEs59());
				}

			}
			datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));
		}

		Locale loc = null;
		if (!Utilidades.esBlancoNulo(expediente.getIdiomaNot00())
				&& expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA)) {
			loc = com.ejie.ad74a.constantes.Constantes.LOCALE_EU;
		} else {
			loc = com.ejie.ad74a.constantes.Constantes.LOCALE_ES;
		}
		LocaleContextHolder.setLocale(loc);

		switch ((TareasEnum.getEnumByTaskId(taskID))) {

		case RESOL_CONCESION:
			String textoExencion = "";

			if (!Utilidades.esNulo(expediente.getExencionSol00()) && expediente.getExencionSol00().compareTo(1) == 0) {
				// exencion solicitada
				if (!Utilidades.esNulo(expediente.getExencionRes00())
						&& expediente.getExencionRes00().compareTo(1) == 0) {
					// exencion dada
					textoExencion = UtilLiterales.getLiteralMessage(appMessageSource, loc,
							"resolucion.mensaje.exencion.si");
				} else {
					textoExencion = UtilLiterales.getLiteralMessage(appMessageSource, loc,
							"resolucion.mensaje.exencion.no");
				}
			} else {
				textoExencion = UtilLiterales.getLiteralMessage(appMessageSource, loc,
						"resolucion.mensaje.exencion.sin");
			}
			// texto para las diferentes plantillas, con exencion, sin o sin pedirla
			datoSimples.put("textoExencion", textoExencion);

			Iprem ipremActual = this.ipremService.getIpremActual();
			datoSimples.put("ipremActual", ipremActual.getIprem79Str());

			break;
		case AUDIENCIA:
			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio() && ProcedimientosEnum.BAJA
					.getId().equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {

				List<String> descripcionMotivos = new ArrayList<String>();

				for (String idMotivo : ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion()) {
					MaestroMotDenegacion mmd = this.maestroMotDenegacionDao
							.find(new MaestroMotDenegacion(Long.valueOf(idMotivo)));
					descripcionMotivos
							.add(expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? mmd.getDescEu59()
									: mmd.getDescEs59());
				}

				if (ttr.get(0).getDatosTareaEstudioBaja().getOtroMotivoDenegacionStr() != null) {
					descripcionMotivos.add(UtilLiterales.getLiteralMessage(appMessageSource,
							expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
									: new Locale("es"),
							"motivosDenegacion.motivosOtros") + " "
							+ ttr.get(0).getDatosTareaEstudioBaja().getOtroMotivoDenegacionStr());

				}
				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));

				int contadorTextoJuridico = 2;

				boolean texto1 = false;
				boolean texto2 = false;
				for (String Motivo : ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion()) {
					if (Motivo.equals("9") || Motivo.equals("10") || Motivo.equals("11") || Motivo.equals("12")) {
						texto1 = true;
					}
					if (Motivo.equals("8") || Motivo.equals("13") || Motivo.equals("14")) {
						texto2 = true;
					}
				}

				if (texto1) {
					String textoJuridico = " ";
					textoJuridico += contadorTextoJuridico + ".- ";
					textoJuridico += UtilLiterales.getLiteralMessage(appMessageSource, loc, "textosJuridicos.texto1");
					datoSimples.put("textoJuridico" + contadorTextoJuridico, textoJuridico);
					contadorTextoJuridico++;
				}
				if (texto2) {
					String textoJuridico = " ";
					textoJuridico += contadorTextoJuridico + ".- ";
					textoJuridico += UtilLiterales.getLiteralMessage(appMessageSource, loc, "textosJuridicos.texto2");
					datoSimples.put("textoJuridico" + contadorTextoJuridico, textoJuridico);
					contadorTextoJuridico++;
				}
				for (int w = contadorTextoJuridico; w <= 3; w++) {
					datoSimples.put("textoJuridico" + contadorTextoJuridico, " ");
					contadorTextoJuridico++;
				}

			}
			break;
		case RESOL_DENEGACION:

			// RESOLUCION DE DENEGACIÓN DE ALTA (MOTIVOS)
			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio() && ProcedimientosEnum.ALTA
					.getId().equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {
				List<String> descripcionMotivos = new ArrayList<String>();

				for (String idMotivo : ttr.get(0).getDatosTareaEstudioAlta().getMotivoDenegacion()) {
					MaestroMotDenegacion mmd = this.maestroMotDenegacionDao
							.find(new MaestroMotDenegacion(Long.valueOf(idMotivo)));
					descripcionMotivos
							.add(expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? mmd.getDescEu59()
									: mmd.getDescEs59());
				}
				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));
			}
			break;
		case RESOL_DESISTIMIENTO:
			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio() && ProcedimientosEnum.ALTA
					.getId().equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {
				datoSimples.put("textoAntecedentes",
						UtilLiterales.getLiteralMessage(appMessageSource,
								expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
										: new Locale("es"),
								"textoAntecedentes.Alta"));

				datoSimples.put("solicitudTitulo",
						UtilLiterales.getLiteralMessage(appMessageSource,
								expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
										: new Locale("es"),
								"textoTitulo.Alta"));
			} else if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
					&& ProcedimientosEnum.BAJA.getId()
							.equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {
				datoSimples.put("textoAntecedentes",
						UtilLiterales.getLiteralMessage(appMessageSource,
								expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
										: new Locale("es"),
								"textoAntecedentes.Baja"));

				datoSimples.put("solicitudTitulo",
						UtilLiterales.getLiteralMessage(appMessageSource,
								expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
										: new Locale("eu"),
								"textoTitulo.Baja"));

			} else if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
					&& ProcedimientosEnum.REVISION_PRECIO.getId()
							.equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {
				datoSimples.put("textoAntecedentes",
						UtilLiterales.getLiteralMessage(appMessageSource,
								expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
										: new Locale("eu"),
								"textoAntecedentes.Revision"));

				datoSimples.put("solicitudTitulo",
						UtilLiterales.getLiteralMessage(appMessageSource,
								expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
										: new Locale("es"),
								"textoTitulo.Revision"));
			}
			break;
		case RESOL_DENEGACION_SERVICIO_AUDIENCIA:
			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio() && ProcedimientosEnum.BAJA
					.getId().equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())) {

				List<String> descripcionMotivos = new ArrayList<String>();

				for (String idMotivo : ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion()) {
					MaestroMotDenegacion mmd = this.maestroMotDenegacionDao
							.find(new MaestroMotDenegacion(Long.valueOf(idMotivo)));
					descripcionMotivos
							.add(expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? mmd.getDescEu59()
									: mmd.getDescEs59());
				}

				if (ttr.get(0).getDatosTareaEstudioBaja().getOtroMotivoDenegacionStr() != null) {
					descripcionMotivos.add(UtilLiterales.getLiteralMessage(appMessageSource,
							expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? new Locale("eu")
									: new Locale("es"),
							"motivosDenegacion.motivosOtros") + " "
							+ ttr.get(0).getDatosTareaEstudioBaja().getOtroMotivoDenegacionStr());

				}
				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));

				int contadorTextoJuridico = 2;

				boolean texto1 = false;
				boolean texto2 = false;
				for (String Motivo : ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion()) {
					if (Motivo.equals("9") || Motivo.equals("10") || Motivo.equals("11") || Motivo.equals("12")) {
						texto1 = true;
					}
					if (Motivo.equals("8") || Motivo.equals("13") || Motivo.equals("14")) {
						texto2 = true;
					}
				}

				if (texto1) {
					String textoJuridico = " ";
					textoJuridico += contadorTextoJuridico + ".- ";
					textoJuridico += UtilLiterales.getLiteralMessage(appMessageSource, loc, "textosJuridicos.texto1");
					datoSimples.put("textoJuridico" + contadorTextoJuridico, textoJuridico);
					contadorTextoJuridico++;
				}
				if (texto2) {
					String textoJuridico = " ";
					textoJuridico += contadorTextoJuridico + ".- ";
					textoJuridico += UtilLiterales.getLiteralMessage(appMessageSource, loc, "textosJuridicos.texto2");
					datoSimples.put("textoJuridico" + contadorTextoJuridico, textoJuridico);
					contadorTextoJuridico++;
				}
				for (int w = contadorTextoJuridico; w <= 3; w++) {
					datoSimples.put("textoJuridico" + contadorTextoJuridico, " ");
					contadorTextoJuridico++;
				}

			}
			break;

//		case PRUEBAS:
//
//			StringBuilder texto = new StringBuilder();
//			texto.append("primer texto \\line\n ");
//			texto.append(" otro texto");
//			StringBuilder texto2 = new StringBuilder(texto);
//			// texto2.replace("\\", "\\\\").replace("{", "\\{").replace("}", "\\}");
//			datoSimples.put("motivosDenegacion1", texto.toString());
////			List<MaestroMotDenegacion> lista = new ArrayList<MaestroMotDenegacion>();
////			MaestroMotDenegacion m = new MaestroMotDenegacion();
////			MaestroMotDenegacion m1 = new MaestroMotDenegacion();
////			m.setDescEs59("prueba1");
////			m.setDescEu59("prueba3");
////			m1.setDescEs59("prueba2");
////			m1.setDescEu59("prueba4");
////			lista.add(m);
////			lista.add(m1);
////			datosListaMap.put("motivos", DocumentosServiceImpl.datosListasAceptadas(lista));
//
//			break;
//
//			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTarea()
//					&& ProcedimientosEnum.BAJA.getId().equals(ttr.get(0).getDatosTarea().getIdProcedimiento00())) {
//
//				if (null != ttr.get(0).getDatosTareaEstudioBaja()
//						&& null != ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion()) {
//					int contador = 1;
//
//					for (int i = 0; i < ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion().size(); i++) {
//						String motivoDesc = "";
//						MaestroMotDenegacion mmd = this.maestroMotDenegacionDao.find(new MaestroMotDenegacion(
//								Long.valueOf(ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion().get(i))));
//						motivoDesc += contador + ".- ";
//						motivoDesc += mmd.getDesc();
//						datoSimples.put("motivosDenegacion" + contador, motivoDesc);
//						contador++;
//					}
//
//					if (ttr.get(0).getDatosTareaEstudioBaja().getOtroMotivoDenegacionStr() != null) {
//						String motivoDesc = "";
//						motivoDesc += contador + ".- ";
//						datoSimples.put("motivosDenegacion" + contador,
//								motivoDesc
//										+ UtilLiterales.getLiteralMessage(appMessageSource,
//												expediente.getIdiomaNot00().equalsIgnoreCase(String.valueOf(1))
//														? new Locale("eu")
//														: new Locale("es"),
//												"motivosDenegacion.motivosOtros")
//										+ " " + ttr.get(0).getDatosTareaEstudioBaja().getOtroMotivoDenegacionStr());
//						contador++;
//					}
//
//					for (int w = contador; w <= 9; w++) {
//						datoSimples.put("motivosDenegacion" + contador, "");
//						contador++;
//					}
//					int contadorTextoJuridico = 2;
//
//					boolean texto1 = false;
//					boolean texto2 = false;
//					for (String Motivo : ttr.get(0).getDatosTareaEstudioBaja().getMotivoDenegacion()) {
//						if (Motivo.equals("9") || Motivo.equals("10") || Motivo.equals("11") || Motivo.equals("12")) {
//							texto1 = true;
//						}
//						if (Motivo.equals("8") || Motivo.equals("13") || Motivo.equals("14")) {
//							texto2 = true;
//						}
//					}
//
//					if (texto1) {
//						String textoJuridico = " ";
//						textoJuridico += contadorTextoJuridico + ".- ";
//						textoJuridico += UtilLiterales.getLiteralMessage(appMessageSource, loc,
//								"textosJuridicos.texto1");
//						datoSimples.put("textoJuridico" + contadorTextoJuridico, textoJuridico);
//						contadorTextoJuridico++;
//					}
//					if (texto2) {
//						String textoJuridico = " ";
//						textoJuridico += contadorTextoJuridico + ".- ";
//						textoJuridico += UtilLiterales.getLiteralMessage(appMessageSource, loc,
//								"textosJuridicos.texto2");
//						datoSimples.put("textoJuridico" + contadorTextoJuridico, textoJuridico);
//						contadorTextoJuridico++;
//					}
//					for (int w = contadorTextoJuridico; w <= 3; w++) {
//						datoSimples.put("textoJuridico" + contadorTextoJuridico, " ");
//						contadorTextoJuridico++;
//					}
//
//				}
//			}
//
//			break;
		case REQUERIMIENTO_SUBSANACION:
			String idioma = expediente.getIdiomaNot00().equalsIgnoreCase(Constantes.EUSKARA) ? "Eu" : "Es";
			// para los requerimientos de subsanacion, hay que pintar los motivos
			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
					&& ProcedimientosEnum.MODIFICACION.getId()
							.equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())
					&& ttr.get(0).getDatosTareaEstudio().getSituacioneFinalTarea().toString()
							.equalsIgnoreCase((FinalizacionEstudioEnum.REQUERIMIENTO_SUBSANACION.getId().toString()))) {

				DatosTareaEstudioModDireccion datosTareaEstudioModDireccion = ttr.get(0)
						.getDatosTareaEstudioModDireccion();
				List<String> descripcionMotivos = new ArrayList<String>();

				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));

				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqAutVerPadronNoSoloInfSol())
						&& datosTareaEstudioModDireccion.getReqAutVerPadronNoSoloInfSol().compareTo(1) == 0) {
					descripcionMotivos.add(obtenerRequerimiento(
							RequerimientosEnum.AUT_VER_PADRON_NO_SOLO_INF_SOL.getIdBBDD().toString())
									.getDesCorta(idioma)
							+ ". "
							+ obtenerRequerimiento(
									RequerimientosEnum.AUT_VER_PADRON_NO_SOLO_INF_SOL.getIdBBDD().toString())
											.getDescLarga(idioma));

				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqDependeciaInformeSocial())
						&& datosTareaEstudioModDireccion.getReqDependeciaInformeSocial().compareTo(1) == 0) {

					descripcionMotivos.add(
							obtenerRequerimiento(RequerimientosEnum.DEPENDECIA_INFORME_SOCIAL.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.DEPENDECIA_INFORME_SOCIAL.getIdBBDD().toString())
													.getDescLarga(idioma));

				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqNoAutVerPadron())
						&& datosTareaEstudioModDireccion.getReqNoAutVerPadron().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqNoAutVerPadronSolo())
						&& datosTareaEstudioModDireccion.getReqNoAutVerPadronSolo().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON_SOLO.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.NO_AUT_VER_PADRON_SOLO.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqRepNoAcredita())
						&& datosTareaEstudioModDireccion.getReqRepNoAcredita().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
									.getDescLarga(idioma));
					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqRepNoFirma())
						&& datosTareaEstudioModDireccion.getReqRepNoFirma().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_FIRMA.getIdBBDD().toString())
							.getDesCorta(idioma) + ". "
							+ obtenerRequerimiento(RequerimientosEnum.REP_NO_FIRMA.getIdBBDD().toString())
									.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqRiesgoAislamientoSinInfSocial())
						&& datosTareaEstudioModDireccion.getReqRiesgoAislamientoSinInfSocial().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(
							RequerimientosEnum.RIESGO_AISLAMIENTO_SIN_INF_SOCIAL.getIdBBDD().toString())
									.getDesCorta(idioma)
							+ ". "
							+ obtenerRequerimiento(
									RequerimientosEnum.RIESGO_AISLAMIENTO_SIN_INF_SOCIAL.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqSinDatosBancarios())
						&& datosTareaEstudioModDireccion.getReqSinDatosBancarios().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_DATOS_BANCARIOS.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SIN_DATOS_BANCARIOS.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqSinFichaSanitaria())
						&& datosTareaEstudioModDireccion.getReqSinFichaSanitaria().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_FICHA_SANITARIA.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SIN_FICHA_SANITARIA.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqSinTelefonoFijo())
						&& datosTareaEstudioModDireccion.getReqSinTelefonoFijo().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_TELEFONO_FIJO.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.SIN_TELEFONO_FIJO.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqSolExencionBizkaia())
						&& datosTareaEstudioModDireccion.getReqSolExencionBizkaia().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SOL_EXENCION_BIZKAIA.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SOL_EXENCION_BIZKAIA.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioModDireccion.getReqSolNoFirma())
						&& datosTareaEstudioModDireccion.getReqSolNoFirma().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(RequerimientosEnum.SOL_NO_FIRMA.getIdBBDD().toString())
							.getDesCorta(idioma) + ". "
							+ obtenerRequerimiento(RequerimientosEnum.SOL_NO_FIRMA.getIdBBDD().toString())
									.getDescLarga(idioma));
				}

				// String textoReqStr = new RTFCodeString("\n" + textoReq.toString(),
				// true).getContent();
				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));
			}

			// para los requerimientos de subsanacion, hay que pintar los motivos
			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
					&& ProcedimientosEnum.ALTA.getId().equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())
					&& ttr.get(0).getDatosTareaEstudio().getSituacioneFinalTarea().toString()
							.equalsIgnoreCase((FinalizacionEstudioEnum.REQUERIMIENTO_SUBSANACION.getId().toString()))) {

				List<String> descripcionMotivos = new ArrayList<String>();

				DatosTareaEstudioAlta datosTareaEstudioAlta = ttr.get(0).getDatosTareaEstudioAlta();
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqAutVerPadronNoSoloInfSol())
						&& datosTareaEstudioAlta.getReqAutVerPadronNoSoloInfSol().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(
							RequerimientosEnum.AUT_VER_PADRON_NO_SOLO_INF_SOL.getIdBBDD().toString())
									.getDesCorta(idioma)
							+ ". "
							+ obtenerRequerimiento(
									RequerimientosEnum.AUT_VER_PADRON_NO_SOLO_INF_SOL.getIdBBDD().toString())
											.getDescLarga(idioma));

				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqDependeciaInformeSocial())
						&& datosTareaEstudioAlta.getReqDependeciaInformeSocial().compareTo(1) == 0) {

					descripcionMotivos.add(
							obtenerRequerimiento(RequerimientosEnum.DEPENDECIA_INFORME_SOCIAL.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.DEPENDECIA_INFORME_SOCIAL.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqNoAutVerPadron())
						&& datosTareaEstudioAlta.getReqNoAutVerPadron().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqNoAutVerPadronSolo())
						&& datosTareaEstudioAlta.getReqNoAutVerPadronSolo().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON_SOLO.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.NO_AUT_VER_PADRON_SOLO.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqRepNoAcredita())
						&& datosTareaEstudioAlta.getReqRepNoAcredita().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqRepNoFirma())
						&& datosTareaEstudioAlta.getReqRepNoFirma().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_FIRMA.getIdBBDD().toString())
							.getDesCorta(idioma) + ". "
							+ obtenerRequerimiento(RequerimientosEnum.REP_NO_FIRMA.getIdBBDD().toString())
									.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqRiesgoAislamientoSinInfSocial())
						&& datosTareaEstudioAlta.getReqRiesgoAislamientoSinInfSocial().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(
							RequerimientosEnum.RIESGO_AISLAMIENTO_SIN_INF_SOCIAL.getIdBBDD().toString())
									.getDesCorta(idioma)
							+ ". "
							+ obtenerRequerimiento(
									RequerimientosEnum.RIESGO_AISLAMIENTO_SIN_INF_SOCIAL.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqSinDatosBancarios())
						&& datosTareaEstudioAlta.getReqSinDatosBancarios().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_DATOS_BANCARIOS.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SIN_DATOS_BANCARIOS.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqSinFichaSanitaria())
						&& datosTareaEstudioAlta.getReqSinFichaSanitaria().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_FICHA_SANITARIA.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SIN_FICHA_SANITARIA.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqSinTelefonoFijo())
						&& datosTareaEstudioAlta.getReqSinTelefonoFijo().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_TELEFONO_FIJO.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.SIN_TELEFONO_FIJO.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqSolExencionBizkaia())
						&& datosTareaEstudioAlta.getReqSolExencionBizkaia().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SOL_EXENCION_BIZKAIA.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SOL_EXENCION_BIZKAIA.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioAlta.getReqSolNoFirma())
						&& datosTareaEstudioAlta.getReqSolNoFirma().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(RequerimientosEnum.SOL_NO_FIRMA.getIdBBDD().toString())
							.getDesCorta(idioma) + ". "
							+ obtenerRequerimiento(RequerimientosEnum.SOL_NO_FIRMA.getIdBBDD().toString())
									.getDescLarga(idioma));
				}

				// String textoReqStr = new RTFCodeString("\n" + textoReq.toString(),
				// true).getContent();
				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));

			}

			if (null != ttr && !ttr.isEmpty() && null != ttr.get(0).getDatosTareaEstudio()
					&& ProcedimientosEnum.REVISION_PRECIO.getId()
							.equals(ttr.get(0).getDatosTareaEstudio().getIdProcedimiento00())
					&& ttr.get(0).getDatosTareaEstudio().getSituacioneFinalTarea().toString()
							.equalsIgnoreCase((FinalizacionEstudioEnum.REQUERIMIENTO_SUBSANACION.getId().toString()))) {

				List<String> descripcionMotivos = new ArrayList<String>();

				DatosTareaEstudioRevision datosTareaEstudioRevision = ttr.get(0).getDatosTareaEstudioRevision();
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqAutVerPadronNoSoloInfSol())
						&& datosTareaEstudioRevision.getReqAutVerPadronNoSoloInfSol().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(
							RequerimientosEnum.AUT_VER_PADRON_NO_SOLO_INF_SOL.getIdBBDD().toString())
									.getDesCorta(idioma)
							+ ". "
							+ obtenerRequerimiento(
									RequerimientosEnum.AUT_VER_PADRON_NO_SOLO_INF_SOL.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqDependeciaInformeSocial())
						&& datosTareaEstudioRevision.getReqDependeciaInformeSocial().compareTo(1) == 0) {

					descripcionMotivos.add(
							obtenerRequerimiento(RequerimientosEnum.DEPENDECIA_INFORME_SOCIAL.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.DEPENDECIA_INFORME_SOCIAL.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqNoAutVerPadron())
						&& datosTareaEstudioRevision.getReqNoAutVerPadron().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqNoAutVerPadronSolo())
						&& datosTareaEstudioRevision.getReqNoAutVerPadronSolo().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.NO_AUT_VER_PADRON_SOLO.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.NO_AUT_VER_PADRON_SOLO.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqRepNoAcredita())
						&& datosTareaEstudioRevision.getReqRepNoAcredita().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.REP_NO_ACREDITA.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqRepNoFirma())
						&& datosTareaEstudioRevision.getReqRepNoFirma().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(RequerimientosEnum.REP_NO_FIRMA.getIdBBDD().toString())
							.getDesCorta(idioma) + ". "
							+ obtenerRequerimiento(RequerimientosEnum.REP_NO_FIRMA.getIdBBDD().toString())
									.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqRiesgoAislamientoSinInfSocial())
						&& datosTareaEstudioRevision.getReqRiesgoAislamientoSinInfSocial().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(
							RequerimientosEnum.RIESGO_AISLAMIENTO_SIN_INF_SOCIAL.getIdBBDD().toString())
									.getDesCorta(idioma)
							+ ". "
							+ obtenerRequerimiento(
									RequerimientosEnum.RIESGO_AISLAMIENTO_SIN_INF_SOCIAL.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqSinDatosBancarios())
						&& datosTareaEstudioRevision.getReqSinDatosBancarios().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_DATOS_BANCARIOS.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SIN_DATOS_BANCARIOS.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqSinFichaSanitaria())
						&& datosTareaEstudioRevision.getReqSinFichaSanitaria().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_FICHA_SANITARIA.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SIN_FICHA_SANITARIA.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqSinTelefonoFijo())
						&& datosTareaEstudioRevision.getReqSinTelefonoFijo().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SIN_TELEFONO_FIJO.getIdBBDD().toString())
									.getDesCorta(idioma) + ". "
									+ obtenerRequerimiento(RequerimientosEnum.SIN_TELEFONO_FIJO.getIdBBDD().toString())
											.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqSolExencionBizkaia())
						&& datosTareaEstudioRevision.getReqSolExencionBizkaia().compareTo(1) == 0) {

					descripcionMotivos
							.add(obtenerRequerimiento(RequerimientosEnum.SOL_EXENCION_BIZKAIA.getIdBBDD().toString())
									.getDesCorta(idioma)
									+ ". "
									+ obtenerRequerimiento(
											RequerimientosEnum.SOL_EXENCION_BIZKAIA.getIdBBDD().toString())
													.getDescLarga(idioma));
				}
				if (!Utilidades.esNulo(datosTareaEstudioRevision.getReqSolNoFirma())
						&& datosTareaEstudioRevision.getReqSolNoFirma().compareTo(1) == 0) {

					descripcionMotivos.add(obtenerRequerimiento(RequerimientosEnum.SOL_NO_FIRMA.getIdBBDD().toString())
							.getDesCorta(idioma) + ". "
							+ obtenerRequerimiento(RequerimientosEnum.SOL_NO_FIRMA.getIdBBDD().toString())
									.getDescLarga(idioma));
				}

				// String textoReqStr = new RTFCodeString("\n" + textoReq.toString(),
				// true).getContent();
				datosListaMap.put("motivosDenegacion", DocumentosServiceImpl.datosListasMotivos(descripcionMotivos));

//				String texto = expediente.getIdProcedimiento00().substring(0,
//						expediente.getIdProcedimiento00().length() - 2) + "#"
//						+ expediente.getIdProcedimiento00().substring(expediente.getIdProcedimiento00().length() - 2)
//						+ "#" + TipoAportacionEnum.SUBSANACION.getTipoLeadingZero() + ";"
//						+ expediente.getNumExpediente00();
				// datoSimples.put("FIRMAESCANEADA", generateQRCodeImage(texto));
			}

			break;
		case APOR_CARTA_LIQUID:
			// expediente=this.expedientesService.find(expediente);
			// if(expediente.getIdLiquidacion00()!=null) {

			List<Liquidaciones> liquidaciones = new ArrayList<Liquidaciones>();
			DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.INT");
			liquidaciones = this.liquidacionesService.getDatosCartaPago(expediente.getIdExpediente00());
			List<String> descripcionMeses = new ArrayList<String>();
			for (Liquidaciones Liquid : liquidaciones) {
				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.hay datos");

				datoSimples.put("nombreUsuario", Liquid.getSolicitante().getNombreCompleto());
				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.nombreUsuario:"
						+ Liquid.getSolicitante().getNombreCompleto());

				datoSimples.put("fechaAlta", Liquid.getSolicitante().getfInicio01Formateada());
				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.fechaAlta:"
						+ Liquid.getSolicitante().getfInicio01Formateada());

				// if (expediente.getSolicitantes().getCuentas() != null)
				datoSimples.put("numeroCuenta", Liquid.getSolicitante().getCuentas().getNumCuenta05());
				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.numeroCuenta:"
						+ Liquid.getSolicitante().getCuentas().getNumCuenta05());

				descripcionMeses.add(MesesEnum.getLabelDesc(Liquid.getMensualidad().getMes89().toString()) + " "
						+ Liquid.getMensualidad().getAnyo89());
				DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.mesDeuda:"
						+ MesesEnum.getLabelDesc(Liquid.getMensualidad().getMes89().toString()) + " "
						+ Liquid.getMensualidad().getAnyo89());

			}

			datosListaMap.put("mesDebe", DocumentosServiceImpl.datosListasMotivos(descripcionMeses));

			DocumentosServiceImpl.logger.info("DocumentosServiceImpl.datosXL: APOR_CARTA_LIQUID.INT");
			break;
		// }
		default:
			ManagerErrors.manageError("Tipo de tarea incorrecta para generar documentos");
		}

		byte[] datosXML = null;
		try {
			datosXML = RTFTemplateUtils.createXML(datoSimples, null, datosMap, datosListaMap);
		} catch (Exception e) {
			ManagerErrors.manageException(e, e.getMessage());
		}
		return datosXML;
	}

	private String obtenerMesString(Month mesFAlta, Expedientes expediente) {

		Locale locale = expediente.getIdiomaNot00().equalsIgnoreCase(String.valueOf(Constantes.EUSKARA))
				? com.ejie.ad74a.constantes.Constantes.LOCALE_EU
				: com.ejie.ad74a.constantes.Constantes.LOCALE_ES;

		return MesesEnum.getLabelDesc(String.valueOf(mesFAlta.getValue()), locale);

	}

	public void crearArchivoXML(byte[] xmlDatos, String pathResultado) {
		InputStream bis = null;
		try {
			bis = new ByteArrayInputStream(xmlDatos);
			pathResultado = Ad74aPIFws.getInstance().uploadDocument(bis, pathResultado, true);
			bis.close();
		} catch (Exception e) {
			ManagerErrors.manageException(e, e.getMessage());
		}
	}

	public static BigDecimal formatearNumerosIrpf(String datoIrpf) {

		String numeroFormateado = "";
		if (datoIrpf != null) {
			if (isInteger(datoIrpf)) {
				datoIrpf = datoIrpf.replaceAll("^0+(?!$)", "");

				if (datoIrpf.length() > 2) {
					// le ponemos los decimales
					numeroFormateado = datoIrpf.substring(0, datoIrpf.length() - 2) + ","
							+ datoIrpf.substring(datoIrpf.length() - 2, datoIrpf.length());
				}
				if (numeroFormateado.length() > 6) {
					// le ponemos los millares
					numeroFormateado = numeroFormateado.substring(0, numeroFormateado.length() - 6) + "."
							+ numeroFormateado.substring(numeroFormateado.length() - 6, numeroFormateado.length());
				}

				numeroFormateado = numeroFormateado + "\u20AC";
			} else {
				numeroFormateado = datoIrpf;
			}

		}

		return new BigDecimal(numeroFormateado);

	}

	/**
	 * isInteger.
	 *
	 * @param s the s
	 * @return true, if successful
	 */
	public static boolean isInteger(String s) {
		try {
			Integer.parseInt(s);
		} catch (NumberFormatException e) {
			return false;
		} catch (NullPointerException e) {
			return false;
		}
		return true;
	}

	private static List<HashMap<String, String>> datosListasAceptadasMotivo(List<MaestroMotDenegacion> listaAceptadas) {
		List<HashMap<String, String>> listaHash = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> hashDatos = new HashMap<String, String>();

		if (listaAceptadas.isEmpty()) {
			hashDatos.put("motivosDenegacion", "");

			listaHash.add(hashDatos);
		} else {

			for (MaestroMotDenegacion aceptada : listaAceptadas) {
				hashDatos = new HashMap<String, String>();
				hashDatos.put("descEs", aceptada.getDescEs59());
				hashDatos.put("descEu", aceptada.getDescEu59());

				listaHash.add(hashDatos);
			}
		}
		return listaHash;
	}

	private static List<HashMap<String, String>> datosListasMotivos(List<String> listaAceptadas) {
		List<HashMap<String, String>> listaHash = new ArrayList<HashMap<String, String>>();
		HashMap<String, String> hashDatos = new HashMap<String, String>();

		if (listaAceptadas.isEmpty()) {
			hashDatos = new HashMap<String, String>();
			hashDatos.put("descripcion", " ");

			listaHash.add(hashDatos);
		} else {

			for (String motivo : listaAceptadas) {
				hashDatos = new HashMap<String, String>();
				hashDatos.put("descripcion", motivo);

				listaHash.add(hashDatos);
			}
		}
		return listaHash;
	}

	private MaestroRequerimientos obtenerRequerimiento(String integer) {
		return this.maestroRequerimientosService.find(new MaestroRequerimientos(Long.parseLong(integer)));
	}

	public static BufferedImage generateQRCodeImage(String barcodeText) throws Exception {
		QRCodeWriter barcodeWriter = new QRCodeWriter();
		BitMatrix bitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 200, 200);

		return MatrixToImageWriter.toBufferedImage(bitMatrix);
	}

}
