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

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

import com.ejie.ad74a.model.Concepto;
import com.ejie.ad74a.model.ConfigSipca;
import com.ejie.ad74a.model.Liquidacion;

/**
 * Interfaz de la capa de persistencia para liquidaciones en AE01B
 * 
 * @author BICUGUAL
 *
 */
public interface LiquidacionDao {

	/**
	 * Obtiene los parametros de configuracion de SIPCA de la tabla AE01B07T00
	 * 
	 * @return
	 */
	ConfigSipca getConfigSipca();

	/**
	 * Obtiene el numero de dias para calcular la fecha de limite de pago
	 * 
	 * @return
	 */
	Integer getDiasLimPag();

	/**
	 * Borra registros en la tabla espejo de liquidaciones, de una ejecución.
	 * 
	 * @param idEjecucion
	 * @return
	 */
	int deleteLiquidacionesEspejoEjecucion(String idEjecucion);

	/**
	 * Crea liquidaciones en batch en la tabla AE01B00T00
	 * 
	 * @param lstLiquidaciones
	 * @param idEjecucion
	 * @param batchSize
	 * @param modoPrueba
	 * @return
	 */
	int createLiquidacionesEspejoBatch(List<Liquidacion> lstLiquidaciones, String idEjecucion, int batchSize,
			boolean modoPrueba);

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

	/**
	 * Crea los conceptos en la tabla AE01B01T00 mediante una sentencia de insert
	 * select
	 * 
	 * @param idEjecucion
	 * @return
	 */
	int createConceptosLiquidacion(String idEjecucion);

	/**
	 * Crea liquidacion en la tabla AE01B00T00 para el copago de un ayto
	 * 
	 * @param liquidacion
	 * @return
	 */
	Long createLiquidacionAyto(Liquidacion liquidacion);

	/**
	 * Crea concepto en la en la tabla AE01B01T00 para el copago de un ayto
	 * 
	 * @param concepto
	 */
	void createConceptoAyto(Concepto concepto);

	/**
	 * Realiza las comprobaciones de que las liquidaciones generadas (en la
	 * tablaespejo) en esta ejecución, no tienen fallos (registros duplicados,
	 * null,...).
	 * 
	 * @param idEjecucion
	 * @return
	 */
	Collection<String> comprobarLiquidacionesGeneradas(String idEjecucion);
	
	/**
	 * Obtiene las liquidaciones generadas en las tablas espejo para un idEjecucion
	 * @param idEjecucion
	 * @return
	 */
	List<Liquidacion> obtenerLiquidacionesGeneradasEspejo(String idEjecucion);

}
