CREATE OR REPLACE PROCEDURE sp_fco_crea_salud
(
    pch_compania    char,
    psm_anio        smallint,
    psm_mes         smallint,
    pch_sucursal    char,
    pch_EPS         char,
    pbl_generar_mm  boolean,
    pbl_regenerar   boolean
)
/**********************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3                             ***/
/*** Descripcion: Crea tabla base para autoliquidacion de aportes a Salud.      ***/
/*** Tablas:      Parametros_MF, Trabajadores, Acumulados_Mensuales, MF_EPS,    ***/
/***              Traslados_EPS                                                 ***/
/*** Vistas:      vw_trabajadores_cia, vw_EPS_trabajador, vw_div_trabajador,    ***/
/***              vw_sueldos, vw_hist_traslados_EPS                             ***/
/*** Autor:       Juan Carlos Leguizamon                                        ***/
/*** Fecha:       Junio 29 de 2001                                              ***/
/*** Revision:    Febrero 24 de 2002                                            ***/
/*** Motor:       Oracle 8i                Version interna: 1.00                ***/
/**********************************************************************************/
AS
    vch_acum_imp    char(15);
    vch_acum_tie    char(15);
    vvc_tabla       varchar2(30);
    vbl_existe	    boolean;
    vnm_existe      number(1); -- cosas de oracle
    vvc_sql         varchar2(3000);
    vch_agr_05      char(5);
    vch_agr_08      char(5);
    vch_agr_10      char(5);
    vch_agr_11      char(5);
    vch_agr_15      char(5);
    vch_agr_16      char(5);
    vch_agr_18      char(5);
    vch_agr_20      char(5);
    vch_periodo     char(8);
    cch_EPS         char(10);
    cch_sucursal    char(10);
    cvc_num_aut     varchar2(10);
    cnm_vlr_aut     number(9,0);
    vvc_condicion0  varchar2(255); --WHERE
    vvc_condicion1  varchar2(255); --AND
    vvc_condicion2  varchar2(255); --AND
    vvc_condicion3  varchar2(255); --AND
    vin_id_cursor integer;
    vin_rows	  integer;

  -- variables del borrado para MEALS.
  sentenciac         varchar2(500);
  var_cursor        integer;
  var_filas         integer;

    CURSOR cr_autorizaciones_eg IS
    SELECT
        cod_entidad, sucursal, Max(numero) NRO, Sum(valor_total) VLR
    FROM
        fco_autorizaciones
    WHERE
        compania = pch_compania And
        periodo = Substr(vch_periodo,2,6) And -- JCL Dic.19/04
	--	periodo = vch_periodo And  --DCR Jun2/2004
        tipo_incapacidad = 0
    GROUP BY
        cod_entidad, sucursal
    HAVING Sum(valor_total) > 0;
    CURSOR cr_autorizaciones_lm IS
    SELECT
        cod_entidad, sucursal, Max(numero) NRO, Sum(valor_total) VLR
    FROM
        fco_autorizaciones
    WHERE
        compania = pch_compania And
        periodo = Substr(vch_periodo,2,6) And -- JCL Dic.19/04
	--	periodo = vch_periodo And  --DCR Jun2/2004
        tipo_incapacidad = 1
    GROUP BY
        cod_entidad, sucursal
    HAVING Sum(valor_total) > 0;
BEGIN
    /* Campos que interesan de la tabla Acumulados Mensuales (importe y tiempo) */
    SELECT fn_fco_imp_mes(psm_mes), fn_fco_tie_mes(psm_mes)
    INTO vch_acum_imp, vch_acum_tie FROM dual;
    /* Periodo de acumulados (anterior al de cotizacion) */
    vch_periodo := '''' || LTrim(RTrim(psm_anio)) || Substr(vch_acum_imp,14,2) || '''';
    /*** Recuperar Agrupaciones de Conceptos ***/
    /* Cotización Obligatoria de Salud */
    SELECT '''' || Nvl(dato, 'S05') || '''' INTO vch_agr_05 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 5;
    /* Vacaciones */
    SELECT '''' || Nvl(dato, 'S08') || '''' INTO vch_agr_08 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 8;
    /* Licencia de Maternidad */
    SELECT '''' || Nvl(dato, 'S10') || ''''  INTO vch_agr_10 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 10;
    /* Incapacidad Enfermedad General */
    SELECT '''' || Nvl(dato, 'S11') || ''''  INTO vch_agr_11 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 11;
    /* UPC Adicional (Aporte Unidad de Capitacion) */
    SELECT '''' || Nvl(dato, 'S15') || ''''  INTO vch_agr_15 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 15;
    /* IBC Salud */
    SELECT '''' || Nvl(dato, 'S16') || ''''  INTO vch_agr_16 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 16;
    /* Licencia No Remunerada y Sanciones (Suspension temporal del contrato) */
    SELECT '''' || Nvl(dato, 'S18') || ''''  INTO vch_agr_18 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 18;
    /* Ingresos o Aporte Sin Sueldo Basico (Variacion Temporal del Salario) */
    SELECT '''' || Nvl(dato, 'S20') || ''''  INTO vch_agr_20 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 20;
    /*** Fin de Recuperar Agrupaciones de Conceptos ***/
    /*** Establecer el Nombre de la Tabla ***/
     vvc_tabla := 'FCO_EPS_' || RTrim(pch_compania) || '_' || LTrim(psm_anio) || '_' || LTrim(psm_mes);
    /*** Verificar Existencia de la Tabla ***/
    vnm_existe := 0;
    vbl_existe := False;
    BEGIN
        SELECT 1 INTO vnm_existe
        FROM all_objects
        WHERE
            object_name = UPPER(vvc_tabla) And
            object_type = 'TABLE';
    EXCEPTION
        WHEN OTHERS THEN vnm_existe := 0;
    END;
    IF vnm_existe = 1 THEN
        vbl_existe := True;
    END IF;
   /*** Borrar datos de la tabla modelo ***/
   DELETE FCO_EPS;
   COMMIT;
    /*** Crear y dar permisos a la tabla***/
--DBMS_OUTPUT.PUT_LINE('tabla: '||vvc_tabla);

    IF NOT(vbl_existe) THEN
        sp_fco_crea_tablas (vvc_tabla);
    END IF;

  	IF Nvl(Length(pch_sucursal),0) = 0 THEN
        vvc_condicion0 := ' WHERE RTrim(COD_EPS) =''' || RTrim(pch_EPS) || ''''; -- DELETE e INSERT en depurada
        vvc_condicion1 := ' AND RTrim(EPS.dato) =''' || RTrim(pch_EPS) || ''''; -- Insert General
        vvc_condicion2 := ' AND RTrim(COD_EPS) =''' || RTrim(pch_EPS) || ''''; -- Novedades
        vvc_condicion3 := ' AND RTrim(EPS) = ''' || RTrim(pch_EPS) || '''';     -- Fantasmas
  	ELSE
        vvc_condicion0 := ' WHERE RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(COD_EPS) =''' || RTrim(pch_EPS) || ''''; -- DELETE e INSERT en depurada
        vvc_condicion1 := ' AND RTrim(SUC.dato) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(EPS.dato) =''' || RTrim(pch_EPS) || ''''; -- Insert General
        vvc_condicion2 := ' AND RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(COD_EPS) =''' || RTrim(pch_EPS) || ''''; -- Novedades
        vvc_condicion3 := ' AND RTrim(SUC) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(EPS) = ''' || RTrim(pch_EPS) || '''';     -- Fantasmas
  	END IF;

    IF pbl_regenerar THEN
        vvc_sql := 'DELETE FROM ' || vvc_tabla || vvc_condicion0;
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
            vin_rows := dbms_sql.execute(vin_id_cursor);
            dbms_sql.close_cursor(vin_id_cursor);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, '20001-Error al eliminar la informacion existente');
        END ;
    ELSE
        vvc_condicion0 := ' ';
        vvc_condicion1 := ' ';
        vvc_condicion2 := ' ';
        vvc_condicion3 := ' ';        
    END IF;
    
    IF NOT(vbl_existe) OR pbl_regenerar THEN
        /* Insertar los valores No Depurados a la tabla modelo (MF_EPS) */
        vvc_sql :=
            ' INSERT INTO FCO_EPS' ||
            ' SELECT AM.compania As CIA,  TG.trabajador As COD_TRAB,' ||
            ' EPS.dato As COD_EPS, SUC.dato As COD_SUC,' ||
            ' ''C'' As C11A, To_Number(LTrim(T.clave_unica)) As C11B, SUBSTR(T.nombre,1,60) As C12ABC,' ||
            ' '' '' As C13A, '' '' As C13B, '' '' As C13C, '' '' As C13D, '' '' As C13E,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_20 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13F,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_18 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13G,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_11 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13H,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_10 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13I,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_08 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13J,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_16 || ',' || vch_acum_tie || ',0) As C14A,' ||
            ' Round((SU.salario),0) As C15A, 0 As C16A,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_16 || ',Round((' || vch_acum_imp || '),0), 0) As C17A,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_05 || ',Round((' || vch_acum_imp || '-1)/100,0)*100, 0) As C24A,' ||
            ' '' '' As C25A, 0 As C25B, '' '' As C26A, 0 As C26B,' ||
            ' Decode(AM.agr_conceptos,' || vch_agr_15 || ',' || vch_acum_imp || ', 0) As C27A' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,' ||
            ' vw_fco_eps_trabajador EPS, vw_fco_div_trabajador SUC,' ||
            ' acumulados_mensuales AM, vw_fco_sueldos SU'||
            ' WHERE  T.trabajador = TG.trabajador AND' ||
            ' EPS.compania = TG.compania AND EPS.trabajador = TG.trabajador AND' ||
            ' SUC.compania = TG.compania AND SUC.trabajador = TG.trabajador AND' ||
            ' SU.compania  = TG.compania AND SU.trabajador  = TG.trabajador AND' ||
            ' AM.compania  = TG.compania AND AM.trabajador  = TG.trabajador AND' ||
            ' AM.compania = ''' || pch_compania || ''' AND' ||
            ' AM.anio =' || To_Char(psm_anio)|| ' AND' ||
            ' AM.agr_conceptos IN (' || vch_agr_05 || ',' || vch_agr_08 || ',' ||
            vch_agr_10 || ',' || vch_agr_11 || ',' ||    vch_agr_15 || ',' || vch_agr_16 || ',' ||
            vch_agr_18 || ',' ||    vch_agr_20 || ')' 
            || ' AND instr(T.clave_unica, ''S'') = 0' --solo para porvenir, al parecer en la clave unica a algunos les agregaron un S
            || vvc_condicion1;

DBMS_OUTPUT.PUT_LINE('vvc_condicion1 '|| vvc_condicion1);            
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
            vin_rows := dbms_sql.execute(vin_id_cursor);
            dbms_sql.close_cursor(vin_id_cursor);
--            EXECUTE IMMEDIATE (vvc_sql);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, 'Error al llenar la tabla temporal.');
        END;
        COMMIT;
        /* inserta los valores (Depurados) a la tabla */
        vvc_sql :=
            'INSERT INTO ' || vvc_tabla ||
            ' SELECT CIA, COD_TRAB, COD_EPS, COD_SUC, C11A, C11B, C12ABC,' ||
            ' '' '' C13A, '' '' C13B, '' '' C13C, '' '' C13D, '' '' C13E, Max(C13F), Max(C13G),' ||
            ' Max(C13H), Max(C13I), Max(C13J), Max(C14A), Max(C15A), 0 C16A, Max(C17A),' ||
            ' Max(C24A), '' '' C25A, 0 C25B, '' '' C26A, 0 C26B, Max(C27A)' ||
            ' FROM FCO_EPS' || vvc_condicion0 ||
            ' GROUP BY CIA, C12ABC, C11B, COD_TRAB, COD_EPS, COD_SUC, C11A' ||
            ' ORDER BY CIA, C12ABC';
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
            vin_rows := dbms_sql.execute(vin_id_cursor);
            dbms_sql.close_cursor(vin_id_cursor);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, 'Error al llenar la tabla depurada.');
        END;
        COMMIT;
		/***Actualizacion del tipo de documento. DCRP-Mayo5/2004 ***/
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C11A = ''T''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM rel_trab_agr' ||
                       ' WHERE compania = cia AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' agrupacion = ''NIT'' AND' ||
                       ' dato = ''TI'''||')';
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al actualizar Tipo de documento [TI]');
            END;
            COMMIT;
        END;
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C11A = ''E''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM rel_trab_agr' ||
                       ' WHERE compania = cia AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' agrupacion = ''NIT'' AND' ||
                       ' dato = ''CE'''||')';
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al actualizar Tipo de documento [CE]');
            END;
            COMMIT;
        END;
        /*** NOVEDADES ***/
        BEGIN
            /* ING: INGRESO A LA COMPANIA */
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13A = ''X''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM vw_fco_trabajadores_cia' ||
                       ' WHERE compania = cia AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' Substr(To_Char(fecha_ingreso,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al insertar Novedad ING');
            END;
            COMMIT;
        END;
        BEGIN
            /* RET: RETIRO DE LA COMPANIA */
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13B = ''X''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM vw_fco_trabajadores_cia' ||
                       ' WHERE compania = cia AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' Substr(To_Char(fecha_baja,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al insertar Novedad RET');
            END;
            COMMIT;
        END;
        /* TDA: INGRESO A ESTA EPS */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13C = ''X''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' C13A <> ''X'' AND ' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM vw_fco_hist_traslados_eps' ||
                       ' WHERE compania = cia AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' Substr(To_Char(fecha_alta,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al insertar Novedad TDA');
            END;
            COMMIT;
        END;
        /* TAA: RETIRO DE ESTA EPS */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13D = ''X''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM fco_traslados_EPS' ||
                       ' WHERE RTrim(compania) = RTrim(cia) AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' Substr(To_Char(fecha_cambio,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al insertar Novedad TAA');
            END;
            COMMIT;
        END;
        /* VSP: CAMBIO PERMANENTE DE SUELDO */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13E = ''X''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' C13A <> ''X'' AND ' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM sueldos' ||
                       ' WHERE compania = cia AND ' ||
                       ' trabajador = cod_trab AND' ||
                       ' Substr(To_Char(fecha,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al insertar Novedad VSP');
            END;
            COMMIT;
        END;
        /* AUTORIZACIONES ENFERMEDAD GENERAL (NUMERO Y VALOR POR TRABAJADOR) */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C25A = (SELECT MAX(numero) ' ||
                                   ' FROM fco_autorizaciones C, fco_autorizaciones_det D' ||
                                   ' WHERE C.compania = D.compania And C.autorizacion = D.autorizacion' ||
                                   ' AND cia = C.compania AND cod_trab = D.trabajador' ||
                                   ' AND tipo_incapacidad = 0' ||
                                   ' AND periodo='||vch_periodo || '),' ||
                       ' C25B = (SELECT SUM(valor) ' ||
                               ' FROM fco_autorizaciones C, fco_autorizaciones_det D' ||
                               ' WHERE C.compania = D.compania And C.autorizacion = D.autorizacion' ||
                               ' AND cia = C.compania AND cod_trab = D.trabajador' ||
                               ' AND tipo_incapacidad = 0' ||
                               ' AND periodo='||vch_periodo || ')' ||
                       ' WHERE CIA = '''||pch_compania||''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                                ' FROM fco_autorizaciones C, fco_autorizaciones_det D' ||
                                ' WHERE C.compania = D.compania And C.autorizacion = D.autorizacion' ||
                                ' AND cia = C.compania AND cod_trab = D.trabajador' ||
                                ' AND tipo_incapacidad = 0' ||
                                ' AND periodo='||vch_periodo || ')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
/*            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al llenar las autorizaciones de Incapacidades por EG');
*/
            END;
            COMMIT;
        END;
        /* INSERCION DE LAS AUTORIZACIONES POR EG EN LA TABLA DEL PIE DE REPORTE */
        OPEN cr_autorizaciones_eg;
        LOOP
            FETCH cr_autorizaciones_eg INTO cch_EPS, cch_sucursal, cvc_num_aut, cnm_vlr_aut;
            EXIT WHEN cr_autorizaciones_eg%NOTFOUND;
            IF NOT(vbl_existe) OR (pbl_regenerar AND Nvl(Rtrim(cch_sucursal)||'0','0') = Nvl(RTrim(pch_sucursal)||'0','0')) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 3, cch_EPS, cch_sucursal, 0, cvc_num_aut, cnm_vlr_aut, null, null);
            END IF;
        END LOOP;
        CLOSE cr_autorizaciones_eg;
        /* AUTORIZACIONES LICENCIAS DE MATERNIDAD (NUMERO Y VALOR POR TRABAJADOR) */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C26A = (SELECT MAX(numero) ' ||
                                   ' FROM fco_autorizaciones C, fco_autorizaciones_det D' ||
                                   ' WHERE C.compania = D.compania And C.autorizacion = D.autorizacion' ||
                                   ' AND cia = C.compania AND cod_trab = D.trabajador' ||
                                   ' AND tipo_incapacidad = 1' ||
                                   ' AND periodo='||vch_periodo || '),' ||
                       ' C26B = (SELECT SUM(valor) ' ||
                               ' FROM fco_autorizaciones C, fco_autorizaciones_det D' ||
                               ' WHERE C.compania = D.compania And C.autorizacion = D.autorizacion' ||
                               ' AND cia = C.compania AND cod_trab = D.trabajador' ||
                               ' AND tipo_incapacidad = 1' ||
                               ' AND periodo='||vch_periodo || ')' ||
                       ' WHERE CIA = '''||pch_compania||''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                                ' FROM fco_autorizaciones C, fco_autorizaciones_det D' ||
                                ' WHERE C.compania = D.compania And C.autorizacion = D.autorizacion' ||
                                ' AND cia = C.compania AND cod_trab = D.trabajador' ||
                                ' AND tipo_incapacidad = 1' ||
                                ' AND periodo='||vch_periodo || ')' ||
                       vvc_condicion2;
            BEGIN
                vin_id_cursor := dbms_sql.open_cursor;
                dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.v7);
                vin_rows := dbms_sql.execute(vin_id_cursor);
                dbms_sql.close_cursor(vin_id_cursor);
            EXCEPTION
                WHEN OTHERS THEN
                    raise_application_error (-20001, 'Error al llenar las autorizaciones de Licencias de Maternidad');
            END;
            COMMIT;
        END;
        /* INSERCION DE LAS AUTORIZACIONES POR LM EN LA TABLA DEL PIE DE REPORTE */
        OPEN cr_autorizaciones_lm;
        LOOP
            FETCH cr_autorizaciones_lm INTO cch_EPS, cch_sucursal, cvc_num_aut, cnm_vlr_aut;
            EXIT WHEN cr_autorizaciones_lm%NOTFOUND;
            IF NOT(vbl_existe) OR (pbl_regenerar AND Nvl(Rtrim(cch_sucursal)||'0','0') = Nvl(RTrim(pch_sucursal)||'0','0')) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 3, cch_EPS, cch_sucursal, 1, cvc_num_aut, cnm_vlr_aut, null, null);
            END IF;
        END LOOP;
        CLOSE cr_autorizaciones_lm;
        COMMIT WORK;
    END IF;
    BEGIN
        IF pbl_generar_mm THEN
            sp_fco_crea_salud_mm (pch_compania, psm_anio,psm_mes,pch_sucursal,pch_EPS);
        END IF;
    END;

   /*******************************************************/
   /* Elimina los registros en donde el descuento es 0    */
   /* Modificacion hecha en MEALS.   5 de Agosto de 2004. */
   /*******************************************************/

   sentenciac := 'delete '||vvc_tabla||' where c24a = 0';

       BEGIN
        var_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(var_cursor, sentenciac, dbms_sql.v7);
        var_filas := dbms_sql.execute(var_cursor);
        dbms_sql.close_cursor(var_cursor);
       EXCEPTION
         WHEN OTHERS THEN
         raise_application_error (-20001, '20001-Error al borrado de registros');
       END;
      
   /*** Borrar datos de la tabla modelo ***/
   DELETE FCO_EPS;
   COMMIT;
       
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_salud FOR ADAM.sp_fco_crea_salud;
GRANT EXECUTE ON sp_fco_crea_salud TO adama;
