IF OBJECT_ID('dbo.sp_fco_archivos_dian') IS NOT NULL
    DROP PROCEDURE sp_fco_archivos_dian
GO
CREATE PROCEDURE sp_fco_archivos_dian
(
    @pch_compania char(4),
    @psi_anio smallint,
    @pti_recalcular_ala tinyint = 1
)
/*************************************************/
/*** FCO - Módulo Fiscal Colombiano            ***/
/*** Autor: Juan Carlos Leguizamón             ***/
/*** Fecha: 24-ABR-07                          ***/
/*** Descripcion: Genera archivos para la DIAN ***/
/*************************************************/
AS
BEGIN
    DELETE fco_dian WHERE compania = @pch_compania AND anio = @psi_anio
    
    /* PARTE 1. FORMATO 1001 - INFORMACION DE PAGOS O ABONOS EN CUENTA */
    /* Concepto 5001 - Salarios, prestaciones sociales y demás pagos laborales */
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5001, 'Salarios', trabajador, '', dbo.fn_fco_cir_salarios(@pch_compania, @psi_anio, trabajador), 0
    FROM trabajadores_grales
    WHERE compania = @pch_compania
      AND Year(fecha_ingreso) <= @psi_anio
      AND (fecha_baja is null OR Year(fecha_baja) >= @psi_anio)
    
    -- VALORES TOMADOS DE AUTOLIQUIDACIONES DE APORTES
    IF @pti_recalcular_ala = 1
        EXEC sp_fco_calcula_totales_ala @pch_compania, @psi_anio

    /* Concepto 5010 - Pagos parafiscales (SENA, Cajas de Compensación e ICBF) */
    -- Aportes al SENA
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5010, 'SENA', '', 'SENA', SUM(total_pagar), 0
    FROM fco_integrada_rt07
    WHERE compania = @pch_compania AND anio = @psi_anio

    -- Aportes a Cajas de Compensación Familiar
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5010, 'CCF', '', cod_CCF, SUM(total_pagar), 0
    FROM fco_integrada_rt06 a
    INNER JOIN fco_administradoras b ON a.cod_CCF = b.codigo AND b.tipo = 'CCF' AND IsNull(b.cod_super, '') <> ''
    WHERE compania = @pch_compania AND anio = @psi_anio
    GROUP BY cod_CCF

    -- Aportes al ICBF
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5010, 'ICBF', '', 'ICBF', SUM(total_pagar), 0
    FROM fco_integrada_rt08
    WHERE compania = @pch_compania AND anio = @psi_anio

    /* Concepto 5011 - Pagos a EPS y ARP */
    -- Aportes a la EPS
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5011, 'EPS', '', cod_EPS, SUM(total_pagar), 0
    FROM fco_integrada_rt04 a
    INNER JOIN fco_administradoras b ON a.cod_EPS = b.codigo AND b.tipo = 'EPS' AND IsNull(b.cod_super, '') <> ''
    WHERE compania = @pch_compania AND anio = @psi_anio
    GROUP BY cod_EPS

    -- Aportes a la ARP
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5011, 'ARP', '', 'ARP', SUM(total_pagar), 0
    FROM fco_integrada_rt05
    WHERE compania = @pch_compania AND anio = @psi_anio

    /* Concepto 5012 - Pagos a Pensiones */
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1001, 5012, 'AFP', '', cod_AFP, SUM(total_pagar), 0
    FROM fco_integrada_rt03 a
    INNER JOIN fco_administradoras b ON a.cod_AFP = b.codigo AND b.tipo = 'AFP' AND IsNull(b.cod_super, '') <> ''
    WHERE compania = @pch_compania AND anio = @psi_anio
    GROUP BY cod_AFP

    /* PARTE 2. FORMATO 1002 - INFORMACION DE RETENCIONES EN LA FUENTE PRACTICADAS */
    /* Concepto 2301 - Retención por salarios y demás pagos laborales */
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1002, 2301, 'Retencion', trabajador, '', 
        dbo.fn_fco_acum_ani('retencion', 7, @pch_compania, @psi_anio, trabajador), 
        dbo.fn_fco_acum_ani('otros', 101, @pch_compania, @psi_anio, trabajador)
    FROM trabajadores_grales
    WHERE compania = @pch_compania
      AND Year(fecha_ingreso) <= @psi_anio
      AND (fecha_baja is null OR Year(fecha_baja) >= @psi_anio)
      AND IsNull(dbo.fn_fco_acum_ani('retencion', 7, @pch_compania, @psi_anio, trabajador), 0) + 
          IsNull(dbo.fn_fco_acum_ani('otros', 101, @pch_compania, @psi_anio, trabajador), 0) > 0

    /* PARTE 3. FORMATO 1009 - INFORMACION DEL SALDO DE LOS PASIVOS */
    /* Concepto 2205 - Saldo de los pasivos laborales incluido en el cálculo actuarial */
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1009, 2205, 'Pasivos', trabajador, '', 
    Round(dbo.fn_fco_acum_ani('otros', 102, @pch_compania, @psi_anio, trabajador), 0), 0
    FROM trabajadores_grales
    WHERE compania = @pch_compania
      AND Year(fecha_ingreso) <= @psi_anio
      AND (fecha_baja is null OR Year(fecha_baja) >= @psi_anio)
      AND dbo.fn_fco_acum_ani('otros', 102, @pch_compania, @psi_anio, trabajador) > 0

    /* PARTE 4. FORMATO 1008 - INFORMACION DE LOS DEUDORES DE CREDITOS ACTIVOS A DICIEMBRE 31 DEL AÑO ANTERIOR */
    /* Concepto 1317 - Cuentas por cobrar a empleados */    
    INSERT INTO fco_dian (compania, anio, formato, concepto, subconcepto, trabajador, entidad, valor, base)
    SELECT @pch_compania, @psi_anio, 1008, 1317, 'Créditos', trabajador, '', dbo.fn_fco_dian_creditos(@pch_compania, @psi_anio, trabajador), 0
    FROM trabajadores_grales
    WHERE compania = @pch_compania
      AND Year(fecha_ingreso) <= @psi_anio
      AND (fecha_baja is null OR Year(fecha_baja) >= @psi_anio)    
END
GO
GRANT EXECUTE ON sp_fco_archivos_dian TO PUBLIC
GO

