CREATE OR REPLACE PROCEDURE sp_fco_calcula_aportes
(
    psi_random number,
    pch_compania char,
    pdc_AFP_IBC decimal,
    pti_AFP_dias number,
    pdc_EPS_IBC decimal,
    pti_EPS_dias number,
    pdc_ARP_IBC decimal,
    pti_ARP_dias number,
    pdc_ARP_tarifa number,
    pdc_Par_IBC number,
    pti_CCF_dias number
)
/*************************************************************************/
-- Modulo Fiscal Colombiano 2.0 ADAM V3
-- Descripcion: Calcula los aportes en la sesión Aportantes por Fuera de Nómina
--              (fantasmas) según los parámetros indicados por el usuario
--              y teniendo en cuenta los porcentajes definidos en ADAM
-- Autor: Juan Carlos Leguizamon
-- Fecha: Junio 2005
-- Revisiones:
/*************************************************************************/
--OCT-01-05: DCR, Pasada a Oracle de SQL
AS
  vch_var_SaT char(2);      -- Variable Salud Trabajador
  vch_var_SaE char(2);      -- Variable Salud Empleador
  vch_var_PeT char(2);      -- Variable Pensión Trabajador
  vch_var_PeE char(2);      -- Variable Pensión Empleador
  vch_var_FSP char(2);      -- Variable Aporte FSP
  vch_var_FSP_Tope char(2); -- Variable Aporte FSP
  vch_var_CCF char(2);      -- Variable Aporte CCF
  vch_var_SENA char(2);     -- Variable Aporte SENA
  vch_var_ICBF char(2);     -- Variable Aporte ICBF
  vdc_tar_EPS number(6,5); -- Tarifa Salud
  vdc_tar_AFP number(6,5); -- Tarifa Pensión
  vdc_tar_FSP number(6,5); -- Tarifa Fondo de Solidaridad Pensional
  vdc_tar_FSP_Tope number(6,5); -- Tope Salarios para FSP
  vdc_tar_CCF number(6,5); -- Tarifa Cajas de Compensación
  vdc_tar_SENA number(6,5);-- Tarifa SENA
  vdc_tar_ICBF number(6,5);-- Tarifa ICBF
  vdc_sal_min number(19,6); -- Salario Mínimo
  vnu_FSP_Aporte number(19,6);
BEGIN
    SELECT dato INTO vch_var_SaT FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'autoliq' AND secuencia = 25;
    SELECT dato INTO vch_var_SaE FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'autoliq' AND secuencia = 26;
    SELECT dato INTO vch_var_PeT FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'autoliq' AND secuencia = 27;
    SELECT dato INTO vch_var_PeE FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'autoliq' AND secuencia = 28;
    SELECT dato INTO vch_var_FSP FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'autoliq' AND secuencia = 39;
    SELECT dato INTO vch_var_FSP_Tope FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'autoliq' AND secuencia = 38;
    SELECT dato INTO vch_var_CCF FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'parafiscal' AND secuencia = 9;
    SELECT dato INTO vch_var_SENA FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'parafiscal' AND secuencia = 10;
    SELECT dato INTO vch_var_ICBF FROM vw_fdt_parametros WHERE pais = 'COL' AND compania = pch_compania AND parametro = 'parafiscal' AND secuencia = 11;
    SELECT real INTO vdc_sal_min FROM parametros_rh WHERE compania = pch_compania AND parametro_rh = 'Sal_Minimo' AND secuencia_parametro = 1;

    vdc_tar_EPS := NVL(fn_fco_var_nom(pch_compania, vch_var_SaT, 0) + fn_fco_var_nom(pch_compania, vch_var_SaE, 0), 0.12);
    vdc_tar_AFP := NVL(fn_fco_var_nom(pch_compania, vch_var_PeT, 0) + fn_fco_var_nom(pch_compania, vch_var_PeE, 0), 0.15);
    vdc_tar_FSP := NVL(fn_fco_var_nom(pch_compania, vch_var_FSP, 0), 0.01);

    vdc_tar_FSP_Tope := 4;
    vdc_tar_CCF := NVL(fn_fco_var_nom(pch_compania, vch_var_CCF, 0), 0.04);
    vdc_tar_SENA := NVL(fn_fco_var_nom(pch_compania, vch_var_SENA, 0), 0.02);
    vdc_tar_ICBF := NVL(fn_fco_var_nom(pch_compania, vch_var_ICBF, 0), 0.03);

    DELETE fco_fantasmas_aux WHERE random = psi_random;

    vnu_FSP_Aporte := 0;
    IF pdc_AFP_IBC >= (vdc_sal_min * vdc_tar_FSP_Tope) THEN
       vnu_FSP_Aporte := (Round((pdc_AFP_IBC * vdc_tar_FSP * 0.5 * (pti_AFP_dias/30.00000) - 1)/100,0) * 100);
    END IF;

    INSERT INTO fco_fantasmas_aux
    (random, AFP_Aporte, FSP_Aporte_sol, FSP_Aporte_sub, EPS_Aporte, ARP_Aporte, CCF_Aporte, SENA_Aporte, ICBF_Aporte)
    SELECT
    psi_random,
    Round((pdc_AFP_IBC * vdc_tar_AFP * (pti_AFP_dias/30.00000) - 1)/100,0) * 100,
    vnu_FSP_Aporte, vnu_FSP_Aporte,
    Round((pdc_EPS_IBC * vdc_tar_EPS * (pti_EPS_dias/30.00000) - 1)/100,0) * 100,
    Round((pdc_ARP_IBC * pdc_ARP_tarifa * (pti_ARP_dias/30.00000) - 1)/100,0) * 100,
    Round((pdc_Par_IBC * vdc_tar_CCF * (pti_CCF_dias/30.00000) - 1)/100,0) * 100,
    Round((pdc_Par_IBC * vdc_tar_SENA * (pti_CCF_dias/30.00000) - 1)/100,0) * 100,
    Round((pdc_Par_IBC * vdc_tar_ICBF * (pti_CCF_dias/30.00000) - 1)/100,0) * 100
    FROM DUAL;

    COMMIT WORK;

END;
/
CREATE PUBLIC SYNONYM sp_fco_calcula_aportes FOR ADAM.sp_fco_calcula_aportes;
GRANT EXECUTE ON sp_fco_calcula_aportes TO adama;
