/**
 * 
 */
package com.ejie.ad74a.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.ejie.ad74a.model.Ayuntamiento;
import com.ejie.ad74a.model.ConfigSipca;
import com.ejie.ad74a.model.FacturacionAyuntamiento;
import com.ejie.ad74a.model.Solicitante;
import com.ejie.ad74a.util.constantes.ConstantesBatch.LiqValMapKey;
import com.ejie.ad74a.ws.client.televida.model.RespuestaType;

/**
 * Interfaz de servicio para realizar liquidaciones en AE01B
 * 
 * @author BICUGUAL
 *
 */
public interface LiquidacionService {

	/**
	 * Devuelve configuracion SIPCA
	 * 
	 * @return
	 */
	ConfigSipca getConfSipca();

	/**
	 * Devuelve el numero de dias para el calculo de la fecha limite de pago
	 * 
	 * @return
	 */
	int getDiasLimitePago();

	/**
	 * Procesamiento de solicitantes y sus respectivas mensualidades en batch para
	 * la generacion de liquidaciones
	 * 
	 * @param lstSolicitantesConMensualidad
	 * @param relanzamiento.                Indica si se trata de relanzamiento para
	 *                                      liquidaciones existentes pendientes de
	 *                                      pago
	 * @param idEjecucion
	 * @param modoPrueba
	 */
	void generateLiquidacionesEspejo(List<Solicitante> lstSolicitantesConMensualidad, boolean relanzamiento,
			String idEjecucion, boolean modoPrueba);

	/**
	 * Vuelca los registros de liquidacion de una ejecucion, de la tabla espejo a la
	 * tabla final.
	 * 
	 * @param idEjecucion
	 */
	void volcarLiquidacionesEspejoAFinales(String idEjecucion);

	/**
	 * Generacion de liquidacion y su concepto para un ayuntamiento en base a la
	 * facturacion de un perido
	 * 
	 * @param factura
	 * @param ayto
	 * @param relanzamiento
	 * @return
	 * @throws Exception
	 */
	RespuestaType generateLiquidacionAyto(FacturacionAyuntamiento factura, Ayuntamiento ayto, boolean relanzamiento)
			throws Exception;

	/**
	 * Realiza las comprobaciones de que las liquidaciones generadas (en la tabla
	 * espejo) en esta ejecución, no tienen fallos (registros duplicados, null,
	 * ...).
	 * 
	 * @param idEjecucion
	 * @return Lista de errores y avisos que puede devolver la comprobacion
	 */
	Map<LiqValMapKey, Collection<String>> comprobarLiquidacionesGeneradas(String idEjecucion);

}
