CREATE TABLE fco_ala_datos_adi
( 
  tabla varchar2(30) NOT NULL,
  sgss smallint NOT NULL,
  cod_adm char(10) NOT NULL,
  cod_suc char(10) NULL,
  item smallint NOT NULL,
  referencia varchar2(20) NULL,
  valor_1 number(12,2) NULL,
  valor_2 number(12,2) NULL,
  valor_3 number(12,2) NULL
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_ala_datos_adi FOR ADAM.fco_ala_datos_adi;
GRANT ALL ON fco_ala_datos_adi TO ADAMA;

CREATE TABLE fco_arp (
	CIA char (4) NOT NULL ,
	COD_TRAB char (10) NOT NULL ,
	COD_SUC char (10) NULL ,
	C11A char (1) NULL ,
	C11B number(12, 0) NULL ,
	C12ABC varchar2 (60) NULL ,
	C13A char (1) NULL ,
	C13B char (1) NULL ,
	C13C char (1) NULL ,
	C13D char (1) NULL ,
	C13E char (1) NULL ,
	C13F char (1) NULL ,
	C13G char (1) NULL ,
	C13H char (1) NULL ,
	C13I char (1) NULL ,
	C13J char (1) NULL ,
	C13K number(2, 0) NULL ,
	C14A number(2, 0) NULL ,
	C15A number(9, 0) NULL ,
	C17A number(9, 0) NULL ,
	C28A number(9, 5) NULL ,
	C28B number(9, 0) NULL ,
	C29A number(9, 0) NULL ,
	C30A varchar2 (5) NULL ,
	C30B varchar2 (5) NULL ,
	C32B number(9, 0) NULL
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_arp FOR ADAM.fco_arp;
GRANT ALL ON fco_arp TO ADAMA;
CREATE TABLE fco_arp_mm
(
	Secuencia Number(6,0), 
	Registros VarChar2(500)
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_arp_mm FOR ADAM.fco_arp_mm;
GRANT ALL ON fco_arp_mm TO ADAMA;

CREATE TABLE fco_eps
(
    CIA            char(4) NOT NULL,
    COD_TRAB       char(10) NOT NULL,
    COD_EPS        char(10) NOT NULL,
    COD_SUC        char(10),
    C11A           char(1),
    C11B           number(12,0),
    C12ABC         varchar2(60),
    C13A           char(1),
    C13B           char(1),
    C13C           char(1),
    C13D           char(1),
    C13E           char(1),
    C13F           char(1),
    C13G           char(1),
    C13H           char(1),
    C13I           char(1),
    C13J           char(1),
    C14A           number(2,0),
    C15A           number(9,0),
    C16A           number(9,0),
    C17A           number(9,0),
    C24A           number(9,0),
    C25A           varchar2(10),
    C25B           number(9,0),
    C26A           varchar2(10),
    C26B           number(9,0),
    C27A           number(9,0)
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_eps FOR ADAM.fco_eps;
GRANT ALL ON fco_eps TO ADAMA;
CREATE TABLE fco_eps_mm (
	Secuencia number(6, 0) NULL ,
	Registros varchar2 (500) NULL 
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_eps_mm FOR ADAM.fco_eps_mm;
GRANT ALL ON fco_eps_mm TO ADAMA;
CREATE TABLE fco_fpo 
(
	CIA char (4) NOT NULL ,
	COD_TRAB char (10) NOT NULL ,
	COD_FPO char (10) NOT NULL ,
	COD_SUC char (10) NULL ,
	C11A char (1) NULL ,
	C11B number(12, 0) NULL ,
	C12ABC varchar2 (60) NULL ,
	C13A char (1) NULL ,
	C13B char (1) NULL ,
	C13C char (1) NULL ,
	C13D char (1) NULL ,
	C13E char (1) NULL ,
	C13F char (1) NULL ,
	C13G char (1) NULL ,
	C13H char (1) NULL ,
	C13I char (1) NULL ,
	C13J char (1) NULL ,
	C13K char (1) NULL ,
	C13L char (1) NULL ,
	C14A number(2, 0) NULL ,
	C15A number(9, 0) NULL ,
	C17A number(9, 0) NULL ,
	C18A number(9, 4) NULL ,
	C19A number(9, 0) NULL ,
	C20A number(9, 0) NULL ,
	C20B number(9, 0) NULL ,
	C22A number(9, 0) NULL ,
	C23A number(9, 0) NULL 
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_fpo FOR ADAM.fco_fpo;
GRANT ALL ON fco_fpo TO ADAMA;
CREATE TABLE fco_fpo_mm 
(
 Secuencia number(6, 0) NULL ,
 Registros varchar2 (500) NULL 
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_fpo_mm FOR ADAM.fco_fpo_mm;
GRANT ALL ON fco_fpo_mm TO ADAMA;

CREATE TABLE fco_iss (
	CIA char (4) NULL ,
	COD_TRAB char (10) NULL ,
	COD_EPS char (10) NULL ,
	COD_FPO char (10) NULL ,
	COD_SUC char (10) NULL ,
	C03 char (1) NULL ,
	C04 number(12, 0) NULL ,
	C05 char (60) NULL ,
	C09 char (1) NULL ,
	C10 char (1) NULL ,
	C11 char (1) NULL ,
	C12 char (1) NULL ,
	C13 char (1) NULL ,
	C14 char (1) NULL ,
	C15 char (1) NULL ,
	C16 char (1) NULL ,
	C17 char (1) NULL ,
	C18 char (1) NULL ,
	C19 char (1) NULL ,
	C20 char (1) NULL ,
	C21 char (1) NULL ,
	C22 number(2, 0) NULL ,
	C23 number(2, 0) NULL ,
	C24 number(2, 0) NULL ,
	C25 number(2, 0) NULL ,
	C26 number(9, 0) NULL ,
	C27 number(9, 0) NULL ,
	C28 number(9, 0) NULL ,
	C29 number(9, 0) NULL ,
	C30 number(9, 0) NULL ,
	C31 number(6, 4) NULL ,
	C32 number(9, 0) NULL ,
	C33 number(9, 0) NULL ,
	C34 number(9, 0) NULL ,
	C35 number(9, 0) NULL ,
	C36 number(9, 0) NULL ,
	C37 number(9, 0) NULL ,
	C38 number(9, 0) NULL ,
	C39 char (10) NULL ,
	C40 number(9, 0) NULL ,
	C41 char (10) NULL ,
	C42 number(9, 0) NULL ,
	C43 number(9, 0) NULL ,
	C44 number(9, 0) NULL ,
	C45 number(9, 0) NULL ,
	C46 number(9, 0) NULL ,
	C47 char (5) NULL ,
	C48 char (5) NULL 
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_iss FOR ADAM.fco_iss;
GRANT ALL ON fco_iss TO ADAMA;
CREATE TABLE fco_iss_mm
(
	Secuencia Number(6,0), 
 	Registros Varchar2(500)
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_iss_mm FOR ADAM.fco_iss_mm;
GRANT ALL ON fco_iss_mm TO ADAMA;
CREATE TABLE fco_rel_sgss_da
(
   sgss	smallint NOT NULL,
   ala_datos_adi  varchar2(20) NULL,
   secuencia  smallint NOT NULL,
   CONSTRAINT PK_fco_rel_sgss_da PRIMARY KEY (sgss, secuencia) 
   USING INDEX TABLESPACE TS_ADAMINDICES
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_rel_sgss_da FOR ADAM.fco_rel_sgss_da;
GRANT ALL ON fco_rel_sgss_da TO ADAMA;

CREATE TABLE fco_vw_iss
(
  CIA char (4) NOT NULL,
  COD_TRAB char (10) NOT NULL,
  COD_EPS char (10) NOT NULL,
  COD_FPO char (10) NOT NULL,
  COD_SUC char (10) NOT NULL,
  C10A char (1) NULL,
  C10B char (12) NULL,
  C10C varchar2 (60) NULL,
  C11A char (1) NULL,
  C11B char (1) NULL,
  C11C char (1) NULL,
  C11D number(2,0) NULL,
  C11E number(2,0) NULL,
  C12A number(2,0) NULL,
  C13A number(12,0) NULL,
  C14A number(10,0) NULL,
  C14B number(10,0) NULL,
  C14C number(10,0) NULL,
  C25N char (10) NULL,
  C25C number(10,0) NULL,
  C26N char (10) NULL,
  C26C number(10,0) NULL
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_vw_iss FOR ADAM.fco_vw_iss;
GRANT ALL ON fco_vw_iss TO ADAMA;

CREATE TABLE fco_vw_iss_arp
(
    clave    smallint,
    sucursal char(10),
    valor    number(9,0)
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_vw_iss_arp FOR ADAM.fco_vw_iss_arp;
GRANT ALL ON fco_vw_iss_arp TO ADAMA;

CREATE OR REPLACE VIEW vw_fco_ala_datos_adi
(sgss, tabla, cod_adm, cod_suc, item, signo, causa, referencia, valor_1, valor_2, valor_3, secuencia)
As
SELECT C.sgss, '0', '0', '0', B.item, A.descripcion, B.descripcion, '', 0, 0, 0, C.secuencia
FROM criterios_valores_col A, criterios_valores_col B, fco_rel_sgss_da C
WHERE A.campo = B.campo_rel And A.item = B.valor And 
A.campo='ala_signo' And B.campo='ala_datos_adi' And 
C.ala_datos_adi = B.item
UNION
SELECT C.sgss, C.tabla, C.cod_adm, C.cod_suc, C.item, A.descripcion, B.descripcion, Nvl(C.referencia, ''), Nvl(C.valor_1,0), Nvl(C.valor_2,0), Nvl(C.valor_3,0), 0
FROM criterios_valores_col A, criterios_valores_col B, fco_ala_datos_adi C
WHERE A.campo = B.campo_rel And A.item = B.valor And 
A.campo='ala_signo' And B.campo='ala_datos_adi' And 
C.item = B.item;

CREATE PUBLIC SYNONYM vw_fco_ala_datos_adi FOR ADAM.vw_fco_ala_datos_adi;
GRANT ALL ON vw_fco_ala_datos_adi TO ADAMA;
Create or Replace View vw_fco_hist_traslados_eps
As
select compania,
       trabajador,
       dato,
       fecha_alta
from hist_agrupaciones h
where agrupacion = 
    nvl((SELECT dato FROM vw_fdt_parametros x
     WHERE pais = 'COL' AND x.compania = h.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 21), 'EPS');


CREATE PUBLIC SYNONYM vw_fco_hist_traslados_eps FOR ADAM.vw_fco_hist_traslados_eps;
GRANT ALL ON vw_fco_hist_traslados_eps TO ADAMA;                  

Create or Replace View vw_fco_hist_traslados_fpo
As
select compania,
       trabajador,
       dato,
       fecha_alta
from hist_agrupaciones h
where agrupacion = 
    nvl((SELECT dato FROM vw_fdt_parametros x
     WHERE pais = 'COL' AND x.compania = h.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 22), 'FPO');

CREATE PUBLIC SYNONYM vw_fco_hist_traslados_fpo FOR ADAM.vw_fco_hist_traslados_fpo;
GRANT ALL ON vw_fco_hist_traslados_fpo TO ADAMA;                  


CREATE OR REPLACE VIEW vw_fco_proc_reportes_ala
AS
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,
       p.EPS_FPO, p.sucursal, p.secuencia, 
       v.descripcion
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_administradoras v
WHERE p.codigo = r.codigo and p.compania = v.compania and p.EPS_FPO = v.codigo And r.maneja_EPS = '1' And v.tipo='EPS'
UNION
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,
       p.EPS_FPO, p.sucursal, p.secuencia, 
       v.descripcion
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_administradoras v
WHERE p.codigo = r.codigo and p.compania = v.compania and p.EPS_FPO = v.codigo And r.maneja_FPO = '1' And v.tipo='AFP'
UNION
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,
       p.EPS_FPO, p.sucursal, p.secuencia, 
       v.descripcion
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_administradoras v
WHERE p.codigo = r.codigo and p.compania = v.compania and p.EPS_FPO = v.codigo And r.maneja_ISS = '1' And v.tipo='EPS'
UNION
SELECT p.compania, p.procesar, p.codigo, r.nombre, p.anio, p.mes,
       p.EPS_FPO, p.sucursal, p.secuencia, 
       v.nombre_ARP
FROM  fco_proc_reportes_ala p, fco_reportes_ala r, vw_fco_companias v
WHERE p.codigo = r.codigo and 
      p.compania = v.compania And r.maneja_ARP = '1';

CREATE PUBLIC SYNONYM vw_fco_proc_reportes_ala FOR ADAM.vw_fco_proc_reportes_ala;
GRANT ALL ON vw_fco_proc_reportes_ala TO ADAMA;                  

CREATE OR REPLACE VIEW vw_fco_sueldos
AS
SELECT 
	compania, trabajador, fecha, salario
FROM sueldos;

CREATE PUBLIC SYNONYM vw_fco_sueldos FOR ADAM.vw_fco_sueldos;
GRANT ALL ON vw_fco_sueldos TO ADAMA;                  

create or replace view vw_fco_trabajadores_cia
as
Select 
	compania, trabajador, 
	fecha_ingreso, fecha_baja, sit_trabajador
From
	trabajadores_grales;

CREATE PUBLIC SYNONYM vw_fco_trabajadores_cia FOR ADAM.vw_fco_trabajadores_cia;
GRANT ALL ON vw_fco_trabajadores_cia TO ADAMA;                  

CREATE OR REPLACE FUNCTION fn_fco_imp_mes
(
    pnm_mes IN number
)
RETURN char
IS
    vch_acum_imp char(15);
BEGIN
    IF pnm_mes > 9 THEN
        vch_acum_imp := 'acum_imp_mes_' || LTrim(RTrim(pnm_mes));
    ELSE
        vch_acum_imp := 'acum_imp_mes_0' || LTrim(RTrim(pnm_mes));
    END IF;
    RETURN (vch_acum_imp);
END;
/
CREATE PUBLIC SYNONYM fn_fco_imp_mes FOR ADAM.fn_fco_imp_mes;
GRANT ALL ON fn_fco_imp_mes TO ADAMA;
CREATE OR REPLACE FUNCTION fn_fco_ult_dia_mes
(psi_anio number, pti_mes number)
RETURN number
AS
  vti_dias number(2);
  vdt_fecha date;
  vbl_ok boolean;
BEGIN

    vti_dias := 1;
    BEGIN
      SELECT DECODE(pti_mes, 1, 31, 2, 28, 3, 31, 4, 30, 5, 31, 6, 30, 7, 31, 8, 31, 9, 30, 10, 31, 11, 30, 12, 31)
/*
            CASE pti_mes
            WHEN  1 THEN 31 WHEN  2 THEN 28 WHEN  3 THEN 31
            WHEN  4 THEN 30 WHEN  5 THEN 31 WHEN  6 THEN 30
            WHEN  7 THEN 31 WHEN  8 THEN 31 WHEN  9 THEN 30
            WHEN 10 THEN 31 WHEN 11 THEN 30 WHEN 12 THEN 31
          END
 */
      INTO vti_dias
      FROM dual;
    EXCEPTION
        WHEN OTHERS THEN vti_dias := 1;
    END;

    IF pti_mes = 2 THEN
       vbl_ok := true;
       BEGIN
            vdt_fecha := TO_DATE((RTRIM(psi_anio) || '0229'),'YYYYMMDD');
       EXCEPTION
          WHEN OTHERS THEN vbl_ok := false;
       END;

        IF vbl_ok THEN
            vti_dias := 29;
        END IF;
    END IF;

    RETURN vti_dias;
END;
/
CREATE PUBLIC SYNONYM fn_fco_ult_dia_mes FOR ADAM.fn_fco_ult_dia_mes;
GRANT ALL ON fn_fco_ult_dia_mes TO ADAMA;
CREATE OR REPLACE FUNCTION fn_fco_nro_trab_arp  
(  
    pch_compania char,
    psi_anio number,
    pti_mes number,
    pch_sucursal char
)  
RETURN number
AS
    vdc_total number(5,0);
    vdt_fec_ini date;
    vdt_fec_fin date;
    vti_por_suc number(1);
    vnu_dia number(2);
    vch_mes char(2);

BEGIN  

    vnu_dia := 1;
    BEGIN
         SELECT fn_fco_ult_dia_mes (psi_anio, pti_mes)
         INTO vnu_dia
         FROM dual;
    EXCEPTION
         WHEN OTHERS THEN vnu_dia := 1;         
    END;

    vch_mes := pti_mes;
    IF LENGTH(pti_mes) = 1 THEN
       vch_mes := '0' || pti_mes;
    END IF;
    
    vdt_fec_ini := TO_DATE((RTRIM(psi_anio) || RTRIM(vch_mes) || '01'), 'YYYYMMDD');
    vdt_fec_fin := TO_DATE((RTRIM(psi_anio) || RTRIM(vch_mes) || RTRIM(vnu_dia)), 'YYYYMMDD');
  
    vdc_total := 0; 
    BEGIN
    SELECT
        count(*) 
    INTO vdc_total    
    FROM  
        trabajadores_grales   
    WHERE  
        compania = pch_compania And  
        clase_nomina <> 'NP' And  
        relacion_laboral <> 'A' And  
        fecha_ingreso <= vdt_fec_fin And  
        (fecha_baja is null or fecha_baja >= vdt_fec_ini);
    EXCEPTION
       WHEN OTHERS THEN vdc_total := 0;    
    END;
  
    RETURN vdc_total;
END;
/
CREATE PUBLIC SYNONYM fn_fco_nro_trab_arp FOR ADAM.fn_fco_nro_trab_arp;
GRANT ALL ON fn_fco_nro_trab_arp TO ADAMA;

  
CREATE OR REPLACE FUNCTION fn_fco_nro_trab_eps
(
    pch_compania char,
    psi_anio number,
    pti_mes number,
    pch_sucursal char
)
RETURN number
AS
    vdc_total number(5,0);
    vdt_fec_ini date;
    vdt_fec_fin date;
    vti_por_suc number(1);
    vnu_dia number(2);
    vch_mes char(2);

BEGIN
    
    IF NVL(TRIM(pch_sucursal), '') = '' THEN 
        vti_por_suc := 0;
    ELSE
        vti_por_suc := 1;
    END IF;
    
    vnu_dia := 1;
    BEGIN
         SELECT fn_fco_ult_dia_mes (psi_anio, pti_mes)
         INTO vnu_dia
         FROM dual;
    EXCEPTION
         WHEN OTHERS THEN vnu_dia := 1;         
    END;

    vch_mes := pti_mes;
    IF LENGTH(pti_mes) = 1 THEN
       vch_mes := '0' || pti_mes;
    END IF;
    
    vdt_fec_ini := TO_DATE((RTRIM(psi_anio) || RTRIM(vch_mes) || '01'), 'YYYYMMDD');
    vdt_fec_fin := TO_DATE((RTRIM(psi_anio) || RTRIM(vch_mes) || RTRIM(vnu_dia)), 'YYYYMMDD');
    
--    DBMS_OUTPUT.PUT_LINE('vch_mes: '||vch_mes);
    vdc_total := 0;
    BEGIN
      SELECT
          count(*)
      INTO vdc_total  
      FROM
          trabajadores_grales 
      WHERE
          compania = pch_compania And
          clase_nomina <> 'NP' And
          fecha_ingreso <= vdt_fec_fin And
          (fecha_baja is null or fecha_baja >= vdt_fec_ini);
    EXCEPTION
       WHEN OTHERS THEN vdc_total := 0;    
    END;
    
    RETURN vdc_total;
END;
/
CREATE PUBLIC SYNONYM fn_fco_nro_trab_eps FOR ADAM.fn_fco_nro_trab_eps;
GRANT ALL ON fn_fco_nro_trab_eps TO ADAMA;
CREATE OR REPLACE FUNCTION fn_fco_nro_trab_fpo
(
    pch_compania char,
    psi_anio number,
    pti_mes number,
    pch_sucursal char
)
RETURN number
AS
    vdc_total number(5,0);
    vdt_fec_ini date;
    vdt_fec_fin date;
    vti_por_suc number(1);
    vnu_dia number(2);
    vch_mes char(2);
BEGIN

    vnu_dia := 1;
    BEGIN
         SELECT fn_fco_ult_dia_mes (psi_anio, pti_mes)
         INTO vnu_dia
         FROM dual;
    EXCEPTION
         WHEN OTHERS THEN vnu_dia := 1;         
    END;

    vch_mes := pti_mes;
    IF LENGTH(pti_mes) = 1 THEN
       vch_mes := '0' || pti_mes;
    END IF;
    
    vdt_fec_ini := TO_DATE((RTRIM(psi_anio) || RTRIM(vch_mes) || '01'), 'YYYYMMDD');
    vdt_fec_fin := TO_DATE((RTRIM(psi_anio) || RTRIM(vch_mes) || RTRIM(vnu_dia)), 'YYYYMMDD');

    vdc_total := 0; 
    BEGIN
    SELECT
        count(*) 
    INTO vdc_total    
    FROM
        trabajadores_grales 
    WHERE
        compania = pch_compania And
        clase_nomina <> 'NP' And
        fecha_ingreso <= vdt_fec_fin And
        (fecha_baja is null or fecha_baja >= vdt_fec_ini);
    EXCEPTION
       WHEN OTHERS THEN vdc_total := 0;    
    END;
                        
    RETURN vdc_total;
END;
/
CREATE PUBLIC SYNONYM fn_fco_nro_trab_fpo FOR ADAM.fn_fco_nro_trab_fpo;
GRANT ALL ON fn_fco_nro_trab_fpo TO ADAMA;
CREATE OR REPLACE FUNCTION fn_fco_Random
(
    pch_clave IN char
)
RETURN number
IS
    vnm_seed number;
    i number;
begin
    vnm_Seed := TO_NUMBER(TO_cHAR(SYSDATE, 'SSSSS'));
    
    i := 1;
    WHILE i <= Length(pch_clave)
    LOOP
        vnm_Seed := vnm_Seed + Ascii(Substr(pch_clave, i, 1));
        i := i + 1;
    END LOOP;

    vnm_Seed := MOD(vnm_Seed * 22695477,  (2 ** 32));
/*   dbms_output.put_line(MOD(BITAND(vnm_Seed/(2 ** 16), 32767), 10000));*/
    RETURN MOD(BITAND(vnm_Seed/(2 ** 16), 32767), 10000);
end;
/
CREATE PUBLIC SYNONYM fn_fco_Random FOR ADAM.fn_fco_Random;
GRANT ALL ON fn_fco_Random TO ADAMA;
CREATE OR REPLACE FUNCTION fn_fco_tie_mes
(
    pnm_mes IN number
)
RETURN char
IS
    vch_acum_tie char(15);
BEGIN
    IF pnm_mes > 9 THEN
        vch_acum_tie := 'acum_tie_mes_' || LTrim(RTrim(pnm_mes));
    ELSE
        vch_acum_tie := 'acum_tie_mes_0' || LTrim(RTrim(pnm_mes));
    END IF;
    RETURN (vch_acum_tie);
END;
/
CREATE PUBLIC SYNONYM fn_fco_tie_mes FOR ADAM.fn_fco_tie_mes;
GRANT ALL ON fn_fco_tie_mes TO ADAMA;
CREATE OR REPLACE FUNCTION fn_fco_tratar_NIT (i_cia IN CHAR)
RETURN CHAR
IS
   w_nit char(30);
BEGIN
   SELECT registro_fiscal 
   INTO w_nit
   FROM COMPANIAS
   WHERE compania=i_cia;

   IF InStr(w_nit, '.') > 0 THEN
      SELECT SubStr(registro_fiscal,1,3) || SubStr(registro_fiscal,5,3) || SubStr(registro_fiscal,9,3)
      INTO w_nit
      FROM COMPANIAS WHERE compania=i_cia;
   ELSE
      SELECT SubStr(registro_fiscal,1,9) 
      INTO w_nit
      FROM COMPANIAS WHERE compania=i_cia;
   END IF;
RETURN(w_nit);
END;
/
CREATE PUBLIC SYNONYM fn_fco_tratar_NIT FOR ADAM.fn_fco_tratar_NIT;
GRANT ALL ON fn_fco_tratar_NIT TO ADAMA;
CREATE OR REPLACE FUNCTION fn_Nombre_ISS
(
   i_Nombre IN Char
)
RETURN CHAR
IS
   w_Pos1    Integer;
   w_Pos2    Integer;
   w_Pos3    Integer;
   w_Pri_Ape VarChar2(20);
   w_Pri_Nom VarChar2(20);
   w_Seg_Nom VarChar2(20);
BEGIN
   w_Pos1 := InStr(i_Nombre, '/');
   w_Pos2 := InStr(SubStr(i_Nombre,w_Pos1+1,Length(i_Nombre)-w_Pos1), '/') + w_Pos1;
   w_Pos3 := InStr(SubStr(i_Nombre,w_Pos2+1,Length(i_Nombre)-w_Pos2), ' ') + w_Pos2;
   If w_Pos3 = w_Pos2 Then
      w_Pos3 := Length(i_Nombre);
   End If;
   SELECT Decode(w_Pos1, 1, ' ', RTrim(SubStr(i_Nombre,1,w_Pos1-1)))
   INTO w_Pri_Ape
   FROM DUAL;
   SELECT Decode(w_Pos3, w_Pos2+1, ' ', RTrim(SubStr(i_Nombre,w_Pos2+1,w_Pos3-w_Pos2-1)))
   INTO w_Pri_Nom
   FROM DUAL;
   w_Seg_Nom := RTrim(SubStr(i_Nombre,w_Pos3 + 1,Length(i_Nombre)-w_Pos3));
   RETURN(w_Pri_Ape || ' ' || w_Pri_Nom || ' ' || w_Seg_Nom);
END;
/
CREATE PUBLIC SYNONYM fn_Nombre_ISS FOR ADAM.fn_Nombre_ISS;
GRANT ALL ON fn_Nombre_ISS TO ADAMA;
CREATE OR REPLACE FUNCTION fn_Separar_Nombre
(
   i_Nombre IN Char,
   i_LonPA  IN Number,
   i_LonSA  IN Number,
   i_LonPN  IN Number,
   i_LonSN  IN Number
)
RETURN CHAR
IS
   w_Pos1    Integer;
   w_Pos2    Integer;
   w_Pos3    Integer;
   w_Pri_Ape VarChar(20);
   w_Seg_Ape VarChar(20);
   w_Pri_Nom VarChar(20);
   w_Seg_Nom VarChar(20);
BEGIN
   w_Pos1 := InStr(i_Nombre, '/');
   w_Pos2 := InStr(SubStr(i_Nombre,w_Pos1+1,Length(i_Nombre)-w_Pos1), '/') + w_Pos1;
   w_Pos3 := InStr(SubStr(i_Nombre,w_Pos2+1,Length(i_Nombre)-w_Pos2), ' ') + w_Pos2;
   If w_Pos3 = w_Pos2 Then
      w_Pos3 := Length(i_Nombre);
   End If;
   SELECT Decode(w_Pos1, 1, RPad(' ',i_LonPA,' '), RPad(RTrim(SubStr(i_Nombre,1,w_Pos1-1)), i_LonPA, ' '))
   INTO w_Pri_Ape
   FROM DUAL;
   SELECT Decode(w_Pos2, w_Pos1+1, RPad(' ',i_LonSA,' '), RPad(RTrim(SubStr(i_Nombre,w_Pos1+1,w_Pos2-w_Pos1-1)), i_LonSA, ' '))
   INTO w_Seg_Ape
   FROM DUAL;
   SELECT Decode(w_Pos3, w_Pos2+1, RPad(' ',i_LonPN,' '), RPad(RTrim(SubStr(i_Nombre,w_Pos2+1,w_Pos3-w_Pos2)), i_LonPN, ' '))
   INTO w_Pri_Nom
   FROM DUAL;
   w_Seg_Nom := RPad(RTrim(SubStr(i_Nombre,w_Pos3 + 1,Length(i_Nombre)-w_Pos3)) || ' ', i_LonSN, ' ');
   RETURN(w_Pri_Ape || w_Seg_Ape || w_Pri_Nom || w_Seg_Nom);
END;
/
CREATE PUBLIC SYNONYM fn_Separar_Nombre FOR ADAM.fn_Separar_Nombre;
GRANT ALL ON fn_Separar_Nombre TO ADAMA;
delete fco_rel_sgss_da;
insert into fco_rel_sgss_da values (0, 3, 1);
insert into fco_rel_sgss_da values (0, 4, 2);
insert into fco_rel_sgss_da values (0, 5, 3);
insert into fco_rel_sgss_da values (0, 0, 4);
insert into fco_rel_sgss_da values (0, 1, 5);
insert into fco_rel_sgss_da values (0, 6, 6);
INSERT INTO fco_rel_sgss_da VALUES (0, 8, 0);
insert into fco_rel_sgss_da values (1, 3, 1);
insert into fco_rel_sgss_da values (2, 2, 1);
insert into fco_rel_sgss_da values (2, 7, 2);
insert into fco_rel_sgss_da values (2, 3, 3);
insert into fco_rel_sgss_da values (2, 6, 4);
insert into fco_rel_sgss_da values (3, 0, 1);
insert into fco_rel_sgss_da values (3, 1, 2);
insert into fco_rel_sgss_da values (3, 3, 3);
insert into fco_rel_sgss_da values (3, 6, 4);
insert into fco_rel_sgss_da values (4, 0, 1);
insert into fco_rel_sgss_da values (4, 1, 2);
insert into fco_rel_sgss_da values (4, 2, 3);
insert into fco_rel_sgss_da values (4, 3, 4);
insert into fco_rel_sgss_da values (4, 6, 5);
insert into fco_rel_sgss_da values (4, 7, 6);

commit;

CREATE OR REPLACE PROCEDURE sp_fco_cambio_ala_datos_adi
(
	i_tabla 	varchar2,
	i_sgss	 	number,
	i_cod_adm	char,
	i_cod_suc	char,
	i_item		smallint,
	i_referencia	varchar2,
	i_valor_1	number,
	i_valor_2 	number,
	i_valor_3	number
)
AS
	w_item 		smallint;
	vnm_existe	number(1);
BEGIN
	w_item := i_item;
	vnm_existe := 0;
   	IF i_item IS Null THEN 
		w_item := 0;
	END IF;

	BEGIN
		SELECT 1 INTO vnm_existe 
		FROM DUAL
		WHERE EXISTS (SELECT 1 FROM fco_ala_datos_adi
			WHERE 	RTrim(tabla) = RTrim(i_tabla) AND
			sgss = i_sgss AND
			RTrim(cod_adm) = RTrim(i_cod_adm) AND
			Nvl(RTrim(cod_suc)||'0','0') = Nvl(RTrim(i_cod_suc)||'0','0') AND
			item = w_item);
	EXCEPTION
		WHEN OTHERS THEN vnm_existe := 0;	
	END;

	IF vnm_existe = 1 THEN	
		UPDATE fco_ala_datos_adi
		SET referencia=i_referencia, valor_1 = i_valor_1, 
	    	valor_2 = i_valor_2, valor_3=i_valor_3
		WHERE 	RTrim(tabla) = RTrim(i_tabla) AND
		sgss = i_sgss AND
		RTrim(cod_adm) = RTrim(i_cod_adm) AND
		Nvl(RTrim(cod_suc)||'0','0') = Nvl(RTrim(i_cod_suc)||'0','0') AND
		item = w_item;

		commit;
   	ELSE
		INSERT INTO fco_ala_datos_adi VALUES (
			i_tabla,
			i_sgss,
			i_cod_adm,
			i_cod_suc,
			w_item,
			i_referencia,
			i_valor_1, 
			i_valor_2,
			i_valor_3);
	END IF;
	COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_cambio_ala_datos_adi FOR ADAM.sp_fco_cambio_ala_datos_adi;
GRANT EXECUTE ON sp_fco_cambio_ala_datos_adi TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_cambio_entidad_conc
  (pch_compania             CHAR,
  pnu_concepto             NUMBER,
  pch_cond_agr_01          CHAR DEFAULT NULL,
  pch_cond_dato_01_01      CHAR DEFAULT NULL)
AS 
BEGIN

     UPDATE conceptos_ns
     SET cond_agr_01 = pch_cond_agr_01,
            cond_dato_01_01 = pch_cond_dato_01_01
     WHERE compania = pch_compania AND
           concepto = pnu_concepto;
            
      COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_cambio_entidad_conc FOR ADAM.sp_fco_cambio_entidad_conc;
GRANT EXECUTE ON sp_fco_cambio_entidad_conc TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_crea_autolx_mm
(
    pch_compania    char,
    pch_anio        char,
    pch_mes         char,
    pch_sucursal    char
)
/**********************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3				***/
/*** Descripcion: Genera el Medio Magnetico de acuerdo con las especificaciones ***/
/***		  GALA - Consolidado - Autol					***/
/*** Tablas:	  Administradoras, VW_ISS_CIA_año_mes				***/
/*** Vistas:	  vw_companias                                                  ***/ 
/*** Autor:	  Juan Carlos Leguizamon					***/
/*** Fecha:	  Julio 10 de 2001 						***/
/*** Revision: 	  Febrero 25 de 2002						***/
/*** Motor:	  Oracle 8i                Version interna: 1.00		***/
/**********************************************************************************/

AS
    vch_T3C1_34    char(226);
    vch_T3C35	   char(6);
    vch_T3C36	   char(6);
    vch_T3C37	   char(6);
    vnm_T35C18     number(14,0);
    vnm_T35C19     number(14,0);
    vnm_T35C20     number(14,0);
    vnm_T35C21     number(14,0);

    vvc_sql        varchar2(3000);
    vvc_sql2	   varchar2(3000);
    vin_id_cursor  integer;
    vin_rows	   integer;
                    
    vch_nit	   char(12);
    vch_periodo    char(6);
    vch_forma_pres char(1);
    vch_cod_ISS    char(3);
    vch_sucursal   char(3);
    vch_suc_001    char(3);
    vch_nds        char(15);
    vvc_tabla      varchar2(30);
    vnm_total      number(5,0);
BEGIN

    /*** Establecer el Nombre de la Tabla ***/
    vvc_tabla := 'FCO_VW_ISS_' || RTrim(pch_compania) || '_' || LTrim(pch_anio) || '_' || LTrim(pch_mes);

    /* Codigo del ISS en la compania -Cambiar si es necesario - */
    vch_cod_ISS := 'ISS';

    DELETE FCO_ISS_MM;
    COMMIT;

    /* Control del codigo de la sucursal */
    IF Nvl(RTrim(pch_sucursal)||' ', ' ') = ' ' THEN
      vch_sucursal := 'NA';
    ELSE
      vch_sucursal := SubStr(LTrim(RTrim(pch_sucursal)),1,3);
    END IF;

    /* Nit y Digito de Verificacion */
    SELECT
        LPad(LTrim(RTrim(fn_fco_tratar_NIT(pch_compania))), 11, '0') ||
        SubStr(registro_fiscal, Length(RTrim(registro_fiscal)),1)
    INTO vch_nit
    FROM vw_fco_companias
    WHERE compania = pch_compania;
   
    /* Periodo de Cotizacion (Ciclo de Liquidacion) */
    vch_periodo := RTrim(pch_anio) || LPad(Rtrim(pch_mes), 2, '0');

    /* Forma de Presentación de la Autoliquidación de Aportes */
    vch_forma_pres := 'C'; -- Forma por defecto
    IF RTrim(vch_sucursal) <> 'NA' THEN
        vch_forma_pres := 'S';

        SELECT 
            SubStr(C.nombre_cia,1,35) || 
            vch_periodo || '01' ||
            RPad(SubStr(SUC.direccion,1,45), 45, ' ') || 
    	    LPad(RTrim(SubStr(SUC.cod_ciudad,1,3)),3,'0') || 
	    LPad(RTrim(SubStr(SUC.cod_dpto,1,2)),2,'0') || 
	    LPad(RTrim(SubStr(SUC.telefono,1,7)),7,'0') || 
            LPad('0',14,'0') || '0' || '1' || 
	    LPad('0',11,'0') || '000000', LPad(RTrim(SUC.codigo_iss), 3, '0')
        INTO
            vch_T3C1_34, vch_suc_001
        FROM
            vw_fco_companias C,
            fco_sucursales SUC
        WHERE  	
            SUC.compania = C.compania And
            C.compania = pch_compania And
            RTrim(SUC.sucursal) = RTrim(pch_sucursal);

    ELSE
	SELECT Nvl(forma_presentacion, 'U')
        INTO vch_forma_pres
	FROM  vw_fco_companias
	WHERE compania = pch_compania;

        SELECT 
            RPad(SubStr(nombre_cia,1,35), 35, ' ') || 
            vch_periodo || '01' ||
            RPad(SubStr(domicilio,1,45), 45, ' ') || 
    	    LPad(RTrim(SubStr(cod_ciudad,1,3)),3,'0') || 
	    LPad(RTrim(SubStr(cod_dpto,1,2)),2,'0') || 
	    LPad(RTrim(SubStr(telefono,1,7)),7,'0') || 
            LPad('0',14,'0') || '0' || '1' || 
	    LPad('0',11,'0') || '000000'
        INTO
            vch_T3C1_34
        FROM vw_fco_companias
        WHERE compania = pch_compania;

        vch_suc_001 := '001';
    END IF;

    vch_nds := vch_nit || vch_suc_001;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO 1                   *****/
    /***********************************************************************/

    INSERT INTO FCO_ISS_MM VALUES (16, '0005000' ||
	'1' || LPad('0',16,'0') || vch_nds ||
	LPad('0',15,'0') || LPad('0',173,'0') || RPad(' ',99,' '));
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO 2                   *****/
    /***********************************************************************/

    INSERT INTO FCO_ISS_MM VALUES (17, '0005000' ||
	'2' || '0000' || '000001' || '000' || '000' || 
	vch_nds || LPad('0',15,'0') || LPad('0',36,'0') || 
        '001' || '001' || LPad('0',14,'0') ||
	'N' || LPad('0',150,'0') || RPad(' ',65,' '));
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO 3.0                 *****/
    /***********************************************************************/

    vch_T3C1_34 := '0005000' || '3' || '0000' || '000001' || '000' || '001' ||
            vch_nds || vch_periodo || '01' || '0' || '000000' || 
            LPad('0', 23,'0') || 'N' || vch_nds || RTrim(vch_T3C1_34);

    /* Numero de Afiliados al ISS en Pensiones */
    vnm_total := 0;
    SELECT   
        ' SELECT count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE COD_FPO = ''' || vch_cod_ISS || '''' ||
        Decode(RTrim(vch_sucursal),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''') ||
        ' AND C14A > 0'
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados en pensiones');
    END;

    vch_T3C35 := LPad(RTrim(To_Char(vnm_total)), 6, '0');

    /* Numero de Afiliados al ISS en Salud */
    vnm_total := 0;
    SELECT   
        ' SELECT count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE COD_EPS = ''' || vch_cod_ISS || '''' ||
        Decode(RTrim(vch_sucursal),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''') ||
        ' AND C14C > 0'
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados en pensiones');
    END;

    vch_T3C36 := LPad(RTrim(To_Char(vnm_total)), 6, '0');


   /* Numero de Renglones diligenciados */
    vnm_total := 0;
    SELECT   
        ' SELECT count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE (C14A + C14C) > 0' ||
        Decode(RTrim(vch_sucursal),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados en pensiones');
    END;

    vch_T3C37 := LPad(RTrim(To_Char(vnm_total)), 6, '0');


    INSERT INTO FCO_ISS_MM VALUES (18, vch_T3C1_34 || vch_T3C35 || vch_T3C36 || vch_T3C37 || 
	'22N' || RPad(' ',40,' ') || RPad(' ',38,' ') || ' ');
    COMMIT;

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO 3.3                 *****/
   /***********************************************************************/

    SELECT
    ' INSERT INTO FCO_ISS_MM' ||
    ' SELECT 19 + RowNum,' ||
	'''000500030000000001000001'' || ''' || 
	vch_nds || vch_periodo || '013'' ||' ||
	'LPad(RowNum, 6, ''0'') ||' ||
	'LPad(''0'', 15, ''0'') ||' ||
	'RPad(RTrim(SubStr(C10A,1,1)) || '' '',1,'' '') ||' ||
   	'LPad(RTrim(SubStr(C10B,1,11)), 11, ''0'') ||' ||
   	'''0'' ||' ||
	'RPad(fn_Nombre_ISS(C10C), 25, '' '') ||' ||
   	'Nvl(Decode(Length(RTrim(C11A)),0,'' '',C11A),'' '') ||' ||
   	'Nvl(Decode(Length(RTrim(C11B)),0,'' '',C11B),'' '') ||' ||
   	'Nvl(Decode(Length(RTrim(C11C)),0,'' '',C11C),'' '') ||' ||
   	'LPad(To_Char(Floor(Nvl(C11D,0))), 2, ''0'') ||' ||
	'LPad(To_Char(Floor(Nvl(C11E,0))), 2, ''0'') ||' ||
	'LPad(To_Char(Floor(Nvl(C12A,0))), 2, ''0'') ||' ||
	'LPad(To_Char(Floor(Nvl(C13A,0))), 12, ''0'') ||' ||
	'LPad(To_Char(Floor(Nvl(C14A,0))), 10, ''0'') ||' ||
	'LPad(To_Char(Floor(Nvl(C14B,0))), 10, ''0'') ||' ||
	'LPad(To_Char(Floor(Nvl(C14C,0))), 10, ''0'') ||' ||
	'RPad('' '',168,'' '') ' ||
    ' FROM ' || vvc_tabla ||
    ' WHERE CIA=' || '''' || pch_compania || '''' ||
    Decode(RTrim(vch_sucursal),'NA','',' AND RTrim(COD_SUC)='''||RTrim(pch_sucursal)||'''') ||
    ' AND (C14A + C14C) > 0'
    INTO vvc_sql
    FROM DUAL; 

    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        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 registros 3.3');
    END;
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO 3.5                 *****/
    /***********************************************************************/
    /* Totales para los campos 18,19,20 y 21 */
    SELECT
	' SELECT  Nvl(Floor(Sum(C13A)),0), Nvl(Floor(Sum(C14A)),0),' ||
		' Nvl(Floor(Sum(C14B)),0), Nvl(Floor(Sum(C14C)),0) ' ||
	' FROM ' || vvc_tabla ||
	' WHERE CIA='||''''||pch_compania||'''' ||
        Decode(RTrim(vch_sucursal),'NA','',' AND RTrim(COD_SUC)='''||RTrim(pch_sucursal)||'''')
    INTO vvc_sql
    FROM DUAL;

    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_T35C18);
        dbms_sql.define_column(vin_id_cursor, 2, vnm_T35C19);
        dbms_sql.define_column(vin_id_cursor, 3, vnm_T35C20);
        dbms_sql.define_column(vin_id_cursor, 4, vnm_T35C21);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
	    dbms_sql.column_value(vin_id_cursor, 1, vnm_T35C18);
	    dbms_sql.column_value(vin_id_cursor, 2, vnm_T35C19);
	    dbms_sql.column_value(vin_id_cursor, 3, vnm_T35C20);
            dbms_sql.column_value(vin_id_cursor, 4, vnm_T35C21);
        END IF;
        dbms_sql.close_cursor(vin_id_cursor);
        EXCEPTION
            WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al calcular los totales para los campos 18, 19, 20 y 21');
    END ;
    COMMIT;

    vnm_T35C18 := Nvl(vnm_T35C18,0);
    vnm_T35C19 := Nvl(vnm_T35C19,0);
    vnm_T35C20 := Nvl(vnm_T35C20,0);
    vnm_T35C21 := Nvl(vnm_T35C21,0);
     
    INSERT INTO FCO_ISS_MM VALUES (999920, 
	'0005000' || '3' || '0000' || '000001' || '000' || '001' ||
	vch_nds || vch_periodo || '01' || '5' || '000000' || 
        LPad('0',14,'0') || '0' ||
	LPad(To_Char(vnm_T35C18),12,'0') || 
	LPad(To_Char(vnm_T35C19),10,'0') || 
	LPad(To_Char(vnm_T35C20),10,'0') || 
	LPad(To_Char(vnm_T35C21),10,'0') || 
	RPad(' ',21,' ') || RPad(' ',21,' ') ||
	LPad('0',12,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	RPad(' ',131,' '));
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO 7                   *****/
    /***********************************************************************/

    INSERT INTO FCO_ISS_MM VALUES (999921, 
	'0005000' || '7' || '0000' || '000001' || '000' || '000' ||
	vch_nds || LPad('0',15,'0') || 
	'000001' || vch_T3C37 ||
	LPad(To_Char(vnm_T35C18),14,'0') || 
	LPad(To_Char(vnm_T35C19),14,'0') || 
	LPad(To_Char(vnm_T35C20),14,'0') || 
	LPad(To_Char(vnm_T35C21),14,'0') || 
	LPad('0',98,'0') || LPad('0',14,'0') ||
	LPad(To_Char(Floor(vnm_T35C21/12)),14,0) || 
	RPad(' ',78,' '));
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO 8                   *****/
    /***********************************************************************/


    INSERT INTO FCO_ISS_MM VALUES (999922, 
	'0005000' || '8' || '0000' || '000000' || '000' || '000' ||
	vch_nds || LPad('0',15,'0') || 
	'000001' || vch_T3C37 ||
	LPad(To_Char(vnm_T35C18),14,'0') || 
	LPad(To_Char(vnm_T35C19),14,'0') || 
	LPad(To_Char(vnm_T35C20),14,'0') || 
	LPad(To_Char(vnm_T35C21),14,'0') || 
	LPad('0',98,'0') || LPad('0',14,'0') ||
	LPad(To_Char(Floor(vnm_T35C21/12)),14,0) || 
	RPad(' ',78,' '));

    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_autolx_mm FOR ADAM.sp_fco_crea_autolx_mm;
GRANT EXECUTE ON sp_fco_crea_autolx_mm TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_crea_ISS_mm
(
   i_cia	IN CHAR,
   i_anio	IN CHAR,
   i_mes	IN CHAR,
   i_cod_SUC	IN CHAR
)
/**********************************************************************************/
/*** Nombre:      sp_crea_mm_ISS.sql     	                                ***/
/*** Modulo:      ADAM V3. (Fiscal Colombiano)                                  ***/
/*** Descripcion: Genera el Medio Magnetico de acuerdo con las especificaciones ***/
/***		  SIGA - Formato Integrado (04)					***/
/*** Autor:	  Juan Carlos Leguizamon					***/
/*** Fecha:	  Junio 26 de 2001 						***/
/*** Version para ORACLE 8							***/
/**********************************************************************************/
AS
  /* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
   CI01_06	Char(58);
   CI07_18 	Char(148);
   CI19_30 	Char(113);
   CI31	 	Char(5);
   CI32	 	Char(5);
   REN_31  	Char(116);
   REN_32  	Char(116);
   REN_33  	Char(116);
   REN_34  	Char(116);
   REN_35  	Char(116);
   REN_36  	Char(116);
   REN_37  	Char(116);
   REN_38  	Char(116);
   REN_39  	Char(116);
   R31C4   	Number(10,0);
   R31C8   	Number(10,0);
   R31C9   	Number(10,0);
   R31C13  	Number(10,0);
   R35C4   	Number(10,0);
   R35C8   	Number(10,0);
   R35C9   	Number(10,0);
   R31C10  	Number(10,0);
   R31C11  	Number(10,0);
   R31C12  	Number(10,0);
   R35C13  	Number(10,0);
   R36C4   	Number(10,0);
   R36C8   	Number(10,0);
   R36C9   	Number(10,0);
   R36C13  	Number(10,0);
   R37C4   	Number(10,0);
   R37C8   	Number(10,0);
   R37C9   	Number(10,0);
   R37C13  	Number(10,0);
   R38C4   	Number(10,0);
   R38C8   	Number(10,0);
   R38C9   	Number(10,0);
   R38C13  	Number(10,0);
   R39C4   	Number(10,0);
   R39C8   	Number(10,0);
   R39C9   	Number(10,0);
   R39C13  	Number(10,0);
   /* VARIABLES AUXILIARES (o de trabajo W) */
   /* Para armar sentencias dinamicamente */
   w_sql_1 	VarChar2(2000);
   w_sql_2 	VarChar2(2000);
   w_sql_3	VarChar2(2000);
   iRows	Integer;
   nombre_cursor Integer;
   /* Para hallar el periodo cotizado a salud (ste) */
   w_per_ste 	Char(6);
   w_mes_ste 	Number(2,0);
   /* Para hallar la forma de presentación y la sucursal */
   w_forma_pres	Char(1);
   w_cod_SUC	Char(10);
   w_suc_iss    Char(10);
   /* Para recuperar datos del ISS */
   w_cod_ISS 	Char(5);
   /* Para recuperar el total de afiliados a pensiones y salud */
   w_total 	Number(5,0);
BEGIN
   /* Codigo del ISS -Cambiar si es necesario - */
   w_cod_ISS := '''ISS''';
   /* Control del codigo de la sucursal */
   w_cod_SUC := Nvl(i_cod_SUC,' ');
   DELETE FCO_ISS_MM;
   COMMIT;
   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
   /***********************************************************************/
   CI01_06 := '00000104INSTITUTO DE SEGUROS SOCIALES           8600138161';
   SELECT RPad(LTrim(RTrim(SubStr(C.nombre_cia,1,40))), 40, ' ') ||
	  RPad(SubStr(A.tipo_id,1,1), 1, ' ') ||
	  LPad(LTrim(RTrim(fn_fco_tratar_NIT(i_cia))), 9, '0') ||
	  SubStr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
	  RPad(SubStr(A.clase_aportante,1,1), 1, ' ') ||
	  RPad(LTrim(RTrim(SubStr(C.domicilio,1,40))), 40, ' ') ||
	  RPad(LTrim(RTrim(SubStr(M.nombre,1,15))), 15, ' ') ||
	  LPad(LTrim(RTrim(SubStr(LTrim(M.codigo),1,4))), 4, '0') ||
	  RPad(LTrim(RTrim(SubStr(D.nombre,1,15))), 15, ' ') ||
	  LPad(LTrim(RTrim(SubStr(LTrim(D.codigo),1,2))), 2, '0') ||
	  RPad(LTrim(RTrim(SubStr(C.telefono,1,10))), 10, ' ') ||
	  RPad(LTrim(RTrim(SubStr(A.fax,1,10))), 10, ' ')
   INTO CI07_18
   FROM	COMPANIAS C,
	FCO_CIAS_DATOS_ADI A,
	FCO_CIUDADES M,
	FCO_DEPARTAMENTOS D
   WHERE C.compania = A.compania   And
	 M.codigo   = A.cod_ciudad And
	 D.codigo   = A.cod_dpto   And
	 M.cod_dpto = D.codigo 	   And
	 C.compania = i_cia;
   /* Calculo del periodo cotizado a Salud */
   w_mes_ste := To_Number(i_mes) + 1;
   w_per_ste := i_anio || LPad(Rtrim(LTrim(To_Char(w_mes_ste))), 2, '0');
   IF w_mes_ste = 13 THEN
      w_per_ste := RTrim(LTrim(To_Char(To_Number(i_anio) + 1))) || '01';
   END IF;
   /* Forma de Presentación de la Autoliquidación de Aportes */
   w_forma_pres := 'C';
   IF Nvl(Length(LTrim(RTrim(w_cod_SUC))),0) > 0 THEN
	w_forma_pres:='S';
	w_cod_SUC := RPad(w_cod_SUC,10,' ');
	w_suc_iss := RPad(w_cod_SUC,10,' ');
   ELSE
	SELECT forma_presentacion
	INTO   w_forma_pres
	FROM   fco_administradoras
	WHERE  codigo='ISS' AND tipo='EPS';
	w_cod_SUC := RPad(' ',10,' ');
        w_suc_iss := RPad(' ',9,' ')||'1';
   END IF;

   w_total:=0;
   SELECT
      ' SELECT Count(*) AS Total' ||
      ' FROM ' ||
      ' (SELECT Distinct COD_TRAB' ||
      ' FROM FCO_ISS_'||RTrim(i_cia)||'_'||i_anio||'_'||i_mes ||
      Decode(Nvl(Length(LTrim(RTrim(w_cod_SUC))),0),0,'',' WHERE COD_SUC=' ||''''||LTrim(RTrim(w_cod_SUC))||'''') ||
      ' GROUP BY COD_TRAB' ||
      ' HAVING SUM(C23)>0)'
   INTO w_sql_1
   FROM DUAL;
   BEGIN
      nombre_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(nombre_cursor, w_sql_1, dbms_sql.native);
      dbms_sql.define_column(nombre_cursor, 1, w_total);
      iRows := dbms_sql.execute(nombre_cursor);
      IF dbms_sql.fetch_rows(nombre_cursor) > 0 THEN
	 dbms_sql.column_value(nombre_cursor, 1, w_total);
      END IF;
      commit;
      dbms_sql.close_cursor(nombre_cursor);
   EXCEPTION
      WHEN OTHERS THEN
	 Rollback;
	 Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados en pensiones');
   END ;

   CI19_30 := LTrim(RTrim(i_anio)) || LPad(LTrim(RTrim(i_mes)), 2, '0') ||
	  w_per_ste || Rpad(' ',40,' ') || Rpad(' ',5,' ') ||
	  Rpad(' ',1,' ') || Rpad(' ',6,' ') || RPad(' ',8,' ') ||
	  Rpad(' ',10,' ') || Rpad(' ',15,' ') || w_forma_pres || w_suc_iss ||
	  LPad(LTrim(RTrim(To_Char(w_total))), 5, '0');

   w_cod_SUC := LTrim(RTrim(w_cod_SUC));
   /* Numero de Afiliados al ISS en Pensiones */
   w_total:=0;
   SELECT
      ' SELECT Count(*) AS Total' ||
      ' FROM ' ||
      ' (SELECT Distinct COD_TRAB' ||
      ' FROM FCO_ISS_'||RTrim(i_cia)||'_'||i_anio||'_'||i_mes ||
      ' WHERE COD_FPO='||w_cod_ISS ||
      Decode(Nvl(Length(LTrim(RTrim(w_cod_SUC))),0),0,'',' AND COD_SUC=' ||''''||LTrim(RTrim(w_cod_SUC))||'''') ||
      ' GROUP BY COD_TRAB' ||
      ' HAVING SUM(C23)>0)'
   INTO w_sql_1
   FROM DUAL;
   BEGIN
      nombre_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(nombre_cursor, w_sql_1, dbms_sql.native);
      dbms_sql.define_column(nombre_cursor, 1, w_total);
      iRows := dbms_sql.execute(nombre_cursor);
      IF dbms_sql.fetch_rows(nombre_cursor) > 0 THEN
	 dbms_sql.column_value(nombre_cursor, 1, w_total);
      END IF;
      commit;
      dbms_sql.close_cursor(nombre_cursor);
   EXCEPTION
      WHEN OTHERS THEN
	 Rollback;
	 Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados en pensiones');
   END ;
   CI31 := LPad(RTrim(LTrim(To_Char(w_total))), 5, '0');
   /* Numero de Afiliados al ISS en Salud */
   w_total:=0;
   SELECT
      ' SELECT Count(*) AS Total' ||
      ' FROM ' ||
      ' (SELECT Distinct COD_TRAB' ||
      ' FROM FCO_ISS_'||RTrim(i_cia)||'_'||i_anio||'_'||i_mes ||
      ' WHERE COD_EPS='||w_cod_ISS ||
      Decode(Nvl(Length(LTrim(RTrim(w_cod_SUC))),0),0,'',' AND COD_SUC=' ||''''||LTrim(RTrim(w_cod_SUC))||'''') ||
      ' GROUP BY COD_TRAB' ||
      ' HAVING SUM(C24)>0)'
   INTO w_sql_1
   FROM DUAL;
   BEGIN
      nombre_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(nombre_cursor, w_sql_1, dbms_sql.native);
      dbms_sql.define_column(nombre_cursor, 1, w_total);
      iRows := dbms_sql.execute(nombre_cursor);
      IF dbms_sql.fetch_rows(nombre_cursor) > 0 THEN
	 dbms_sql.column_value(nombre_cursor, 1, w_total);
      END IF;
      commit;
      dbms_sql.close_cursor(nombre_cursor);
   EXCEPTION
      WHEN OTHERS THEN
	 Rollback;
	 Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados en salud');
   END ;
   CI32 := LPad(RTrim(LTrim(To_Char(w_total))), 5, '0');
   INSERT INTO FCO_ISS_MM VALUES (0, CI01_06 || CI07_18 || CI19_30 || CI31 || CI32);
   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
   /***********************************************************************/
   w_sql_1 :=
   ' INSERT INTO FCO_ISS_MM' ||
   ' SELECT RowNum,' ||
	' LPad(RowNum, 5, ''0'') ||' ||
	' ''2''||RPad(LTrim(RTrim(SubStr(C03,1,1))),1,'' '') ||' ||
   	' LPad(LTrim(RTrim(SubStr(C04,1,12))), 12, ''0'') ||' ||
   	' fn_Separar_Nombre(C05,15,15,15,15) ||' ||
   	' Decode(Length(RTrim(LTrim(C09))),0,'' '',C09) ||' ||
   	' Decode(Length(RTrim(LTrim(C10))),0,'' '',C10) ||' ||
   	' Decode(Length(RTrim(LTrim(C11))),0,'' '',C11) ||' ||
   	' Decode(Length(RTrim(LTrim(C12))),0,'' '',C12) ||' ||
   	' Decode(Length(RTrim(LTrim(C13))),0,'' '',C13) ||' ||
   	' Decode(Length(RTrim(LTrim(C14))),0,'' '',C14) ||' ||
   	' Decode(Length(RTrim(LTrim(C15))),0,'' '',C15) ||' ||
   	' Decode(Length(RTrim(LTrim(C16))),0,'' '',C16) ||' ||
   	' Decode(Length(RTrim(LTrim(C17))),0,'' '',C17) ||' ||
   	' Decode(Length(RTrim(LTrim(C18))),0,'' '',C18) ||' ||
   	' Decode(Length(RTrim(LTrim(C19))),0,'' '',C19) ||' ||
   	' Decode(Length(RTrim(LTrim(C20))),0,'' '',C20) ||' ||
   	' Decode(Length(RTrim(LTrim(C21))),0,'' '',C21) ||';
   w_sql_2 :=
   	' LPad(LTrim(RTrim(To_Char(Floor(C22)))), 2, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C23)))), 2, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C24)))), 2, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(0)))), 2, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C26)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C27)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C28)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C29)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(0)))), 9, ''0'') ||' ||
	' ''0'' || RPad(LTrim(RTrim(To_Char(C31))), 5, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C32)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C33)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C34)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C35)))), 9, ''0'') ||';
   SELECT
	' LPad(LTrim(RTrim(To_Char(Floor(C36)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C37)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C38)))), 9, ''0'') ||' ||
   	' RPad(LTrim(RTrim(SubStr(C39,1,10)))||'' '', 10, '' '') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C40)))), 9, ''0'') ||' ||
   	' RPad(LTrim(RTrim(SubStr(C41,1,10)))||'' '', 10, '' '') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C42)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C43)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C44)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(C45)))), 9, ''0'') ||' ||
	' LPad(LTrim(RTrim(To_Char(Floor(0)))), 9, ''0'') ||' ||
   	' RPad(LTrim(RTrim(SubStr(C47,1,5)))||'' '', 5, '' '') ||' ||
   	' RPad(LTrim(RTrim(SubStr(C48,1,5)))||'' '', 5, '' '')' ||
   ' FROM FCO_ISS_' || LTrim(RTrim(i_cia)) || '_' || LTrim(RTrim(i_anio)) || '_' || LTrim(RTrim(i_mes)) ||
   ' WHERE CIA=' || '''' || i_cia || '''' ||
   Decode(Nvl(Length(LTrim(RTrim(w_cod_SUC))),0),0,'',' AND COD_SUC=' ||''''||LTrim(RTrim(w_cod_SUC))||'''') ||
   ' AND (C23 + C24 + C25) >0'
   INTO w_sql_3
   FROM DUAL;
commit;
   BEGIN
      nombre_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(nombre_cursor, w_sql_1||w_sql_2||w_sql_3, dbms_sql.native);
      iRows := dbms_sql.execute(nombre_cursor);
      dbms_sql.close_cursor(nombre_cursor);
   EXCEPTION
      WHEN OTHERS THEN
	 Rollback;
	 Raise_Application_Error (-20001, 'Error al llenar la tabla FCO_ISS_MM con los registros Tipo 2');
   END ;
   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
   /***********************************************************************/
   /* Totales para los campos 4, 8, 9, 10, 11, 12 y 13 del medio magnetico (Renglon 31) */
   SELECT
	' SELECT  Nvl(Floor(Sum(C32)),0), Nvl(Floor(Sum(C36)),0),' ||
		' Nvl(Floor(Sum(C38)),0), Nvl(Floor(Sum(C40)),0),' ||
		' Nvl(Floor(Sum(C42)),0), Nvl(Floor(Sum(C43)),0),' ||
		' Nvl(Floor(Sum(C46)),0)' ||
	' FROM FCO_ISS_'||LTrim(RTrim(i_cia))||'_'||LTrim(RTrim(i_anio))||'_'||LTrim(RTrim(i_mes)) ||
	' WHERE cia='||''''||i_cia||'''' ||
        Decode(Nvl(Length(LTrim(RTrim(w_cod_SUC))),0),0,'',' AND COD_SUC=' ||''''||LTrim(RTrim(w_cod_SUC))||'''')
   INTO w_sql_1
   FROM DUAL;
   BEGIN
      nombre_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(nombre_cursor, w_sql_1, dbms_sql.native);
      dbms_sql.define_column(nombre_cursor, 1, R31C4);
      dbms_sql.define_column(nombre_cursor, 2, R31C8);
      dbms_sql.define_column(nombre_cursor, 3, R31C9);
      dbms_sql.define_column(nombre_cursor, 4, R31C10);
      dbms_sql.define_column(nombre_cursor, 5, R31C11);
      dbms_sql.define_column(nombre_cursor, 6, R31C12);
      dbms_sql.define_column(nombre_cursor, 7, R31C13);
      iRows := dbms_sql.execute(nombre_cursor);
      IF dbms_sql.fetch_rows(nombre_cursor) > 0 THEN
	 dbms_sql.column_value(nombre_cursor, 1, R31C4);
	 dbms_sql.column_value(nombre_cursor, 2, R31C8);
	 dbms_sql.column_value(nombre_cursor, 3, R31C9);
	 dbms_sql.column_value(nombre_cursor, 4, R31C10);
	 dbms_sql.column_value(nombre_cursor, 5, R31C11);
	 dbms_sql.column_value(nombre_cursor, 6, R31C12);
	 dbms_sql.column_value(nombre_cursor, 7, R31C13);
      END IF;
      commit;
      dbms_sql.close_cursor(nombre_cursor);
   EXCEPTION
      WHEN OTHERS THEN
	 Rollback;
	 Raise_Application_Error (-20001, 'Error al calcular los totales del renglon 31');
   END ;
   /*******	RENGLON 31	******/
   REN_31 := '000313' || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R31C4))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R31C8))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R31C9))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R31C10))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R31C11))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R31C12))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R31C13))), 10, '0');
   INSERT INTO FCO_ISS_MM VALUES (999931, REN_31);
   /*******	RENGLON 32	******/
   REN_32 := '000323' || RPad(' ',10,' ') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0');
   INSERT INTO FCO_ISS_MM VALUES (999932, REN_32);
   /*******	RENGLON 33	******/
   REN_33 := '000333' || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0');
   INSERT INTO FCO_ISS_MM VALUES (999933, REN_33);
   /*******	RENGLON 34	******/
   REN_34 := '000343' || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0');
   INSERT INTO FCO_ISS_MM VALUES (999934, REN_34);
   /*******	RENGLON 35	******/
   R35C4 := R31C4;
   R35C8 := R31C8;
   R35C9 := R31C9;
   R35C13 := R31C13;
   REN_35 := '000353' || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R35C4))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R35C8))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R35C9))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R35C13))), 10, '0');
   INSERT INTO FCO_ISS_MM VALUES (999935, REN_35);
   /*******	RENGLON 36	******/
   R36C4 := 0;
   R36C8 := 0;
   R36C9 := 0;
   R36C13 := 0;
   REN_36 := '000363' || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R36C4))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R36C8))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R36C9))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R36C13))), 10, '0');
   INSERT INTO FCO_ISS_MM VALUES (999936, REN_36);
   /*******	RENGLON 37	******/
   R37C4 := R35C4 + R36C4;
   R37C8 := R35C8 + R36C8;
   R37C9 := R35C9 + R36C9;
   R37C13 := R35C13 + R36C13;
   REN_37 := '000373' || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R37C4))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R37C8))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R37C9))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R37C13))), 10, '0');
   INSERT INTO FCO_ISS_MM VALUES (999937, REN_37);
   /*******	RENGLON 38	******/
   R38C4 := 0;
   R38C8 := 0;
   R38C9 := 0;
   R38C13 := 0;
   REN_38 := '000383' || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0');
   INSERT INTO FCO_ISS_MM VALUES (999938, REN_38);
   /*******	RENGLON 39	******/
   R39C4 := R37C4 - R38C4;
   R39C8 := R37C8 - R38C8;
   R39C9 := R37C9 - R38C9;
   R39C13 := R37C13 - R38C13;
   REN_39 := '000393' || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R39C4))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R39C8))), 10, '0') ||
	LPad(LTrim(RTrim(To_Char(R39C9))), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
	LPad(LTrim(RTrim(To_Char(R39C13))), 10, '0');
   INSERT INTO FCO_ISS_MM VALUES (999939, REN_39);
   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO IV                  *****/
   /***********************************************************************/
   INSERT INTO FCO_ISS_MM VALUES (999940, '999994');
   COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_ISS_mm FOR ADAM.sp_fco_crea_ISS_mm;
GRANT EXECUTE ON sp_fco_crea_ISS_mm TO adama;

CREATE OR REPLACE PROCEDURE sp_fco_crea_pension_mm
(
    pch_compania    char,
    pch_anio        char,
    pch_mes         char,
    pch_sucursal    char,
    pch_FPO         char
)
/**************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3			***/
/*** Descripcion: Genera el Medio Magnetico de acuerdo con las 		***/
/***		  especificaciones SIGA - Formato 01			***/
/*** Tablas:	  Administradoras, MF_FPO_CIA_año_mes, trabajadores_gra ***/
/*** Vistas:	  vw_fco_administradoras, vw_companias                      ***/ 
/*** Autor:	  Juan Carlos Leguizamon				***/
/*** Fecha:	  Junio de 2001 					***/
/*** Revision: 	  Febrero 28 de 2002					***/
/*** Motor:	  SQL Server 7.0	Version interna: 1.00		***/
/**************************************************************************/

AS
   /* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
    vch_CI01_06    char(58);
    vch_CI07_18    char(148);
    vch_CI19_27    char(57);
    vch_CI28       char(5);

    vnm_R31C4	   number(10,0);
    vnm_R31C5	   number(10,0);
    vnm_R31C6	   number(10,0);
    vnm_R31C7	   number(10,0);
    vnm_R31C8	   number(10,0);

    vnm_R36C3	   number(10,0);
    vnm_R36C7	   number(10,0);
    vnm_R36C8	   number(10,0);

    vch_Ren31	   char(66);
    vch_Ren36	   char(66);
    vch_Ren39	   char(66);

   /* VARIABLES AUXILIARES (o de trabajo W) */

   /* Para armar sentencias dinamicamente */
    vvc_sql      varchar2(3000);

   /* Para hallar la forma de presentación y la sucursal */
    vch_forma_pres    char(1);
    vch_sucursal      char(10);
    vvc_control_suc   varchar2(10);

   /* Tabla donde estan los datos */
    vvc_tabla    varchar2(30);

   /* Para controlar puntos y rayas en el registro_fiscal */
    vch_nit	 char(9);

    vin_id_cursor  integer;
    vin_rows	   integer;

    vnm_total      number(5,0);

BEGIN

    /*** Establecer el Nombre de la Tabla ***/
    vvc_tabla := 'FCO_FPO_' || RTrim(pch_compania) || '_' || LTrim(pch_anio) || '_' || LTrim(pch_mes);

    DELETE FCO_FPO_MM;
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
    /***********************************************************************/

    SELECT '00000101' || 
	RPad(Substr(descripcion,1,40),40,' ') ||
        LPad(Substr(registro_fiscal,1,9),9,'0') ||
        RPad(Substr(digito_verificacion,1,1)||' ',1,' ')
    INTO vch_CI01_06
    FROM vw_fco_administradoras
    WHERE compania = pch_compania AND tipo='AFP' AND RTRIM(codigo)=pch_FPO;

    SELECT LPad(RTrim(fn_fco_tratar_NIT(pch_compania)), 9, '0')
    INTO vch_nit
    FROM vw_fco_companias
    WHERE compania = pch_compania;

    /* Control del codigo de la sucursal */
    vvc_control_suc := Nvl(RTrim(pch_sucursal),'NA');
    IF Nvl(Length(RTrim(pch_sucursal)),0) = 0 THEN
        vvc_control_suc := 'NA';
    END IF;

    IF vvc_control_suc = 'NA' THEN
        SELECT
            RPad(Substr(C.nombre_cia,1,40),40,' ') || 
            'N' || vch_nit ||
            Substr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
            RPad(Substr(C.clase_aportante,1,1),1,' ') || 
            RPad(Substr(C.domicilio,1,40),40,' ') ||
            RPad(Substr(M.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(M.codigo),1,4),4,'0') || 
            RPad(Substr(D.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(D.codigo),1,2),2,'0') ||
            RPad(Substr(C.telefono,1,10),10,' ') || 
            RPad(Substr(C.fax,1,10),10,' ')
        INTO
            vch_CI07_18
        FROM
            vw_fco_companias C,
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            M.codigo  = C.cod_ciudad And
            D.codigo  = C.cod_dpto  And
            M.cod_dpto = D.codigo  And
            C.compania = pch_compania;
    ELSE
        SELECT
	    RPad(Substr(C.nombre_cia,1,40),40,' ') || 
            'N' || vch_nit ||
            Substr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
            RPad(Substr(C.clase_aportante,1,1),1,' ') || 
            RPad(Substr(SUC.direccion,1,40),40,' ') ||
            RPad(Substr(M.nombre,1,15),15,' ') ||
            LPad(Substr(LTrim(M.codigo),1,4),4,'0') ||
            RPad(Substr(D.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(D.codigo),1,2),2,'0') ||
            RPad(Substr(SUC.telefono,1,10),10,' ') || 
            RPad(Substr(SUC.fax,1,10),10,' ')
        INTO
            vch_CI07_18
        FROM
            vw_fco_companias C,
            fco_sucursales SUC, 
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            SUC.compania = C.compania And
            M.codigo   = SUC.cod_ciudad And
            D.codigo   = SUC.cod_dpto And
            M.cod_dpto = D.codigo And
            C.compania = pch_compania And
            RTrim(SUC.sucursal) = RTrim(pch_sucursal);
    END IF;

    /* Forma de Presentación de la Autoliquidación de Aportes */
    IF vvc_control_suc = 'NA' THEN
        SELECT Nvl(forma_presentacion,'U')
        INTO vch_forma_pres
	FROM vw_fco_companias
	WHERE compania = pch_compania;
        vch_sucursal := ' ';
    ELSE
	vch_forma_pres := 'S';
	vch_sucursal := vvc_control_suc;
    END IF;

    /* Numero de trabajadores */
    vnm_total := 0;
    SELECT   
        ' SELECT Count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE COD_TRAB IN (SELECT trabajador FROM trabajadores_grales ' ||
                            'WHERE compania = ''' || pch_compania || ''' And ' ||
                                  'sit_trabajador = 1)' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de trabajadores');
    END;

    vch_CI19_27 :=
	pch_anio || LPad(RTRim(pch_mes),2,'0') || RPad(' ',35,' ') || vch_forma_pres || vch_sucursal ||
	LPad(RTrim(To_Char(vnm_total)), 5, '0');
    
    /* Numero de Afiliados a esta FPO */
    vnm_total := 0;
    SELECT   
        ' SELECT Count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE RTrim(COD_FPO) = ''' || pch_FPO || '''' || 
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''') ||
	' AND (C19A > 0 OR C13H = ''X'')'
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados');
    END;

    vch_CI28 := LPad(RTrim(To_Char(vnm_total)), 5, '0');

    INSERT INTO FCO_FPO_MM VALUES (0, vch_CI01_06 || vch_CI07_18 || vch_CI19_27 || vch_CI28);
    COMMIT;

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
   /***********************************************************************/

   SELECT 
   ' INSERT INTO FCO_FPO_MM' ||
   ' SELECT RowNum,' ||
	' LPad(RowNum, 5, ''0'') ||' ||
	' ''2''||RPad(SubStr(C11A,1,1),1,'' '') ||' ||
   	' LPad(RTrim(SubStr(C11B,1,12)), 12, ''0'') ||' ||
   	' fn_Separar_Nombre(C12ABC,15,15,15,15) ||' ||
   	' Decode(Nvl(Length(RTrim(C13A)),0),0,'' '',C13A) ||' ||
   	' Decode(Nvl(Length(RTrim(C13B)),0),0,'' '',C13B) ||' ||
   	' Decode(Nvl(Length(RTrim(C13C)),0),0,'' '',C13C) ||' ||
   	' Decode(Nvl(Length(RTrim(C13D)),0),0,'' '',C13D) ||' ||
   	' Decode(Nvl(Length(RTrim(C13E)),0),0,'' '',C13E) ||' ||
   	' Decode(Nvl(Length(RTrim(C13F)),0),0,'' '',C13F) ||' ||
   	' Decode(Nvl(Length(RTrim(C13G)),0),0,'' '',C13G) ||' ||
   	' Decode(Nvl(Length(RTrim(C13H)),0),0,'' '',C13H) ||' ||
   	' Decode(Nvl(Length(RTrim(C13I)),0),0,'' '',C13I) ||' ||
   	' Decode(Nvl(Length(RTrim(C13J)),0),0,'' '',C13J) ||' ||
   	' Decode(Nvl(Length(RTrim(C13K)),0),0,'' '',C13K) ||' ||
   	' Decode(Nvl(Length(RTrim(C13L)),0),0,'' '',C13L) ||' ||
	' LPad(To_Char(Floor(Nvl(C14A,0))),2,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C15A,0))),9,''0'') ||' ||
	' LPad(''0'', 9, ''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C17A,0))),9,''0'') ||' ||
	' ''0'' ||  RPad(To_Char(Nvl(C18A,0)),5,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C19A,0))),9,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C20A,0))),9,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C20B,0))),9,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C19A+C20A+C20B,0))),9,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C22A,0))),9,''0'') ||' ||
	' LPad(To_Char(Floor(Nvl(C23A,0))),9,''0'')' ||
        ' FROM '||vvc_tabla||
        ' WHERE CIA=' || '''' || pch_compania || '''' ||
        ' AND RTrim(COD_FPO)=' ||''''||RTrim(pch_FPO)||'''' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || ''')') ||
        ' AND (C19A >0 OR C13H = ''X'')'
    INTO vvc_sql
    FROM DUAL; 

    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        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 FCO_FPO_MM con los registros Tipo 2');
    END;

    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
    /***********************************************************************/

    /* Totales para los campos del Renglon 31 */
   SELECT
	' SELECT  Nvl(Floor(Sum(C19A)),0), Nvl(Floor(Sum(C20A)),0),' ||
		' Nvl(Floor(Sum(C20B)),0), Nvl(Floor(Sum(C19A+C20A+C20B)),0),' ||
		' Nvl(Floor(Sum(C22A)),0)' ||
	' FROM '||vvc_tabla||
        ' WHERE CIA = '''|| pch_compania || '''' ||
        '   AND RTRIM(COD_FPO)='''|| pch_FPO || '''' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM dual;
   BEGIN
      vin_id_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
      dbms_sql.define_column(vin_id_cursor, 1, vnm_R31C4);
      dbms_sql.define_column(vin_id_cursor, 2, vnm_R31C5);
      dbms_sql.define_column(vin_id_cursor, 3, vnm_R31C6);
      dbms_sql.define_column(vin_id_cursor, 4, vnm_R31C7);
      dbms_sql.define_column(vin_id_cursor, 5, vnm_R31C8);
      vin_rows := dbms_sql.execute(vin_id_cursor);
      IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
	 dbms_sql.column_value(vin_id_cursor, 1, vnm_R31C4);
	 dbms_sql.column_value(vin_id_cursor, 2, vnm_R31C5);
	 dbms_sql.column_value(vin_id_cursor, 3, vnm_R31C6);
	 dbms_sql.column_value(vin_id_cursor, 4, vnm_R31C7);
	 dbms_sql.column_value(vin_id_cursor, 5, vnm_R31C8);
      END IF;
      commit;
      dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al calcular los totales del renglon 31');
    END;

    /*******	RENGLON 31	******/
    vch_Ren31 := '000313' || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R31C4), 10, '0') ||
        LPad(To_Char(vnm_R31C5), 10, '0') ||
        LPad(To_Char(vnm_R31C6), 10, '0') ||
        LPad(To_Char(vnm_R31C7), 10, '0') ||
        LPad(To_Char(vnm_R31C8), 10, '0');

    INSERT INTO FCO_FPO_MM VALUES (999931, vch_Ren31);
    COMMIT;

   /*******	RENGLON 36	******/
    vnm_R36C3 := 0;
    vnm_R36C7 := 0;
    vnm_R36C8 := 0;
    vch_Ren36 := '000363' || 
        LPad(To_Char(vnm_R36C3), 10, '0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R36C7), 10, '0') ||
        LPad(To_Char(vnm_R36C8), 10, '0');

    INSERT INTO FCO_FPO_MM VALUES (999936, vch_Ren36);
    COMMIT;

    /*******	RENGLON 39	******/
    vch_Ren39 := '000393' || LPad('0',10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R31C7 + vnm_R36C7), 10, '0') ||
        LPad(To_Char(vnm_R31C8 + vnm_R36C8), 10, '0');

    INSERT INTO FCO_FPO_MM VALUES (999939, vch_Ren39);
    COMMIT;

   /***********************************************************************/
   /*****          CONSTRUCCION DEL REGISTRO TIPO IV                  *****/
   /***********************************************************************/
   INSERT INTO FCO_FPO_MM VALUES (999940, '999994');
   COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_pension_mm FOR ADAM.sp_fco_crea_pension_mm;
GRANT EXECUTE ON sp_fco_crea_pension_mm TO adama;


CREATE OR REPLACE PROCEDURE sp_fco_crea_riesgos_mm
(
    pch_compania    char,
    pch_anio        char,
    pch_mes         char,
    pch_sucursal    char
)
/**************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3			***/
/*** Descripcion: Genera el Medio Magnetico de acuerdo con las 		***/
/***		  especificaciones SIGA - Formato 02			***/
/*** Tablas:	  Administradoras, MF_ARP_CIA_año_mes, trabajadores_gra	***/
/*** Vistas:	  vw_entidades_admin, vw_companias                      ***/ 
/*** Autor:	  Juan Carlos Leguizamon				***/
/*** Fecha:	  Julio 10 de 2001 					***/
/*** Revision: 	  Marzo 5 de 2002					***/
/*** Motor:	  Oracle 8i        	Version interna: 1.00		***/
/**************************************************************************/

AS
   /* VARIABLES ESTRUCTURA MEDIO MAGNETICO */
    vch_CI01_06    char(58);
    vch_CI07_18    char(148);
    vch_CI19_27    char(57);

    vch_Ren_31     char(26);
    vch_Ren_32     char(26);
    vch_Ren_34     char(26);
    vch_Ren_35     char(26);
    vch_Ren_36     char(26);
    vch_Ren_37     char(26);
    vch_Ren_38     char(26);
    vch_Ren_39     char(26);

    vnm_C4R31      number(10,0);
    vnm_C4R32      number(10,0);
    vnm_C4R35      number(10,0);
    vnm_C4R37      number(10,0);
    vnm_C4R39      number(10,0);

    /* VARIABLES AUXILIARES */
    vvc_sql        varchar2(3000);

    /* Para controlar puntos y rayas en el registro_fiscal */
    vch_nit        char(9);
    /* Forma de Presentacion de la Autoliquidacion para ARP */
    vch_forma_pres char(1);
    /* Sucursal */
    vch_sucursal   char(10);
    vvc_control_suc varchar(10);

    /* Tabla donde estan los datos */
    vvc_tabla      varchar(30);

    /* Variables para descontar incapacidades, saldos a favor y pagar intereses por mora */
    vch_nro_aut_in  char(10);
    vnm_vlr_aut_in  number(10,0);
    vnm_vlr_otr_rp  number(10,0);
    vch_nro_meses   char(10);
    vnm_vlr_mor_rp  number(10,0);
    vch_nro_rad_saf char(10);
    vnm_vlr_saf_rp  number(10,0);

    vin_id_cursor  integer;
    vin_rows	   integer;

    vnm_total      number(5,0);

BEGIN

    /*** Establecer el Nombre de la Tabla ***/
    vvc_tabla := 'FCO_ARP_' || RTrim(pch_compania) || '_' || LTrim(pch_anio) || '_' || LTrim(pch_mes);

    DELETE FCO_ARP_MM;
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
    /***********************************************************************/

    SELECT '00000102' || 
        RPad(Substr(nombre_ARP,1,40),40,' ') || 
        LPad(RTrim(Substr(nit_ARP,1,9)),9,'0') ||
        Substr(nit_ARP,11,1)
    INTO vch_CI01_06
    FROM vw_fco_companias
    WHERE compania = pch_compania;

    SELECT LPad(RTrim(fn_fco_tratar_NIT(pch_compania)), 9, '0')
    INTO vch_nit
    FROM vw_fco_companias
    WHERE compania = pch_compania;

    /* Control del codigo de la sucursal */
    vvc_control_suc := Nvl(RTrim(pch_sucursal),'NA');
    IF Nvl(Length(RTrim(pch_sucursal)),0) = 0 THEN
        vvc_control_suc := 'NA';
    END IF;

    IF vvc_control_suc = 'NA' THEN
        SELECT
            RPad(Substr(C.nombre_cia,1,40),40,' ') || 
            'N' || vch_nit ||
            Substr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
            RPad(Substr(C.clase_aportante,1,1),1,' ') || 
            RPad(Substr(C.domicilio,1,40),40,' ') ||
            RPad(Substr(M.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(M.codigo),1,4),4,'0') || 
            RPad(Substr(D.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(D.codigo),1,2),2,'0') ||
            RPad(Substr(C.telefono,1,10),10,' ') || 
            RPad(Substr(C.fax,1,10),10,' ')
        INTO
            vch_CI07_18
        FROM
            vw_fco_companias C,
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            M.codigo  = C.cod_ciudad And
            D.codigo  = C.cod_dpto  And
            M.cod_dpto = D.codigo  And
            C.compania = pch_compania;
    ELSE
        SELECT
	    RPad(Substr(C.nombre_cia,1,40),40,' ') || 
            'N' || vch_nit ||
            Substr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
            RPad(Substr(C.clase_aportante,1,1),1,' ') || 
            RPad(Substr(SUC.direccion,1,40),40,' ') ||
            RPad(Substr(M.nombre,1,15),15,' ') ||
            LPad(Substr(LTrim(M.codigo),1,4),4,'0') ||
            RPad(Substr(D.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(D.codigo),1,2),2,'0') ||
            RPad(Substr(SUC.telefono,1,10),10,' ') || 
            RPad(Substr(SUC.fax,1,10),10,' ')
        INTO
            vch_CI07_18
        FROM
            vw_fco_companias C,
            fco_sucursales SUC, 
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            SUC.compania = C.compania And
            M.codigo   = SUC.cod_ciudad And
            D.codigo   = SUC.cod_dpto And
            M.cod_dpto = D.codigo And
            C.compania = pch_compania And
            RTrim(SUC.sucursal) = RTrim(pch_sucursal);
    END IF;


    /* Forma de Presentación de la Autoliquidación de Aportes */
    IF vvc_control_suc = 'NA' THEN
        SELECT Nvl(forma_presentacion,'U')
        INTO vch_forma_pres
	FROM vw_fco_companias
	WHERE compania = pch_compania;
        vch_sucursal := ' ';
    ELSE
	vch_forma_pres := 'S';
	vch_sucursal := vvc_control_suc;
    END IF;

    /* Numero de trabajadores */
    vnm_total := 0;
    SELECT   
        ' SELECT Count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE COD_TRAB IN (SELECT trabajador FROM trabajadores_grales ' ||
                            'WHERE compania = ''' || pch_compania || ''' And ' ||
                                  'sit_trabajador = 1)' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de trabajadores');
    END;

    vch_CI19_27 := 
	pch_anio || LPad(RTRim(pch_mes),2,'0') || RPad(' ',35,' ') || vch_forma_pres || vch_sucursal ||
	LPad(RTrim(To_Char(vnm_total)), 5, '0');

    INSERT INTO FCO_ARP_MM VALUES (0, vch_CI01_06 || vch_CI07_18 || vch_CI19_27);
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
    /***********************************************************************/

    SELECT
    ' INSERT INTO FCO_ARP_MM' ||
    ' SELECT RowNum,' ||
        ' LPad(RowNum, 5, ''0'') ||' ||
        ' ''2''||RPad(SubStr(C11A,1,1), 1,'' '') ||' ||
        ' LPad(RTrim(SubStr(C11B,1,12)), 12, ''0'') ||' ||
        ' fn_Separar_Nombre(C12ABC,15,15,15,15) ||' ||
        ' Decode(Nvl(Length(RTrim(C13A)),0),0,'' '',C13A) ||' ||
        ' Decode(Nvl(Length(RTrim(C13B)),0),0,'' '',C13B) ||' ||
        ' Decode(Nvl(Length(RTrim(C13C)),0),0,'' '',C13C) ||' ||
        ' Decode(Nvl(Length(RTrim(C13D)),0),0,'' '',C13D) ||' ||
        ' Decode(Nvl(Length(RTrim(C13E)),0),0,'' '',C13E) ||' ||
        ' Decode(Nvl(Length(RTrim(C13F)),0),0,'' '',C13F) ||' ||
        ' Decode(Nvl(Length(RTrim(C13G)),0),0,'' '',C13G) ||' ||
        ' Decode(Nvl(Length(RTrim(C13H)),0),0,'' '',C13H) ||' ||
        ' Decode(Nvl(Length(RTrim(C13I)),0),0,'' '',C13I) ||' ||
        ' Decode(Nvl(Length(RTrim(C13J)),0),0,'' '',C13J) ||' ||
        ' LPad(To_Char(Floor(Nvl(C13K,0))),2,''0'') ||' ||
        ' LPad(To_Char(Floor(Nvl(C14A,0))),2,''0'') ||' ||
        ' LPad(To_Char(Floor(Nvl(C15A,0))),9,''0'') ||' ||
        ' ''000000000'' ||' ||
        ' LPad(To_Char(Floor(Nvl(C17A,0))),9,''0'') ||' ||
        ' ''0'' || RPAD(REPLACE(LTRIM(TO_CHAR(C28A/1000,''99.999'')),''.'',''''),8,''0'') ||' ||
        ' LPad(RTrim(SubStr(C28B,1,9)),9,''0'') ||' ||
        ' LPad(To_Char(Floor(Nvl(C29A,0))),9,''0'') ||' ||
        ' RPad(SubStr(C30A,1,5),5,'' '') ||' ||
        ' RPad(SubStr(C30B,1,5),5,'' '')' ||
    ' FROM '||vvc_tabla||
    ' WHERE CIA=' || '''' || pch_compania || '''' ||
    Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || ''')') ||
    ' AND (C29A >0 OR C13F = ''X'')'
    INTO vvc_sql
    FROM DUAL; 
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        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 FCO_ARP_MM con los registros Tipo 2');
    END;

    COMMIT;


    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
    /***********************************************************************/

    /* Totales para los campos 4 de los renglones 31 y 32*/
    SELECT
        ' SELECT Nvl(Floor(Sum(C29A)),0), Nvl(Floor(Sum(C32B)),0)' ||
        ' FROM '||vvc_tabla||
        ' WHERE CIA=''' || pch_compania || '''' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM DUAL;

    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_C4R31);
        dbms_sql.define_column(vin_id_cursor, 2, vnm_C4R32);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_C4R31);
            dbms_sql.column_value(vin_id_cursor, 2, vnm_C4R32);
        END IF;
        dbms_sql.close_cursor(vin_id_cursor);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, '20001-Error al calcular los totales para el renglon 31 y 32');
    END;

    /*******	RENGLON 31	******/
    vch_Ren_31 := '000313' || LPad('0',10,'0') || LPad(To_Char(vnm_C4R31),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999931, vch_Ren_31);
    COMMIT;

    /*******	RENGLON 32	******/
    vch_nro_aut_in := ' ';
    vnm_vlr_aut_in := 0;

    IF vnm_C4R32 <= 0 THEN
        IF vvc_control_suc = 'NA' THEN
            BEGIN
                SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
                INTO vch_nro_aut_in, vnm_vlr_aut_in
                FROM fco_ala_datos_adi A, fco_rel_sgss_da B
                WHERE A.sgss = B.sgss
                  AND A.item = B.ala_datos_adi
                  AND RTrim(A.tabla) = RTrim(vvc_tabla)
                  AND RTrim(A.cod_adm) = 'ARP'
                  AND b.secuencia = 1;
            EXCEPTION
                WHEN OTHERS THEN vnm_vlr_aut_in := 0;
            END;
        ELSE
            BEGIN
                SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
                INTO vch_nro_aut_in, vnm_vlr_aut_in
                FROM fco_ala_datos_adi A, fco_rel_sgss_da B
                WHERE A.sgss = B.sgss 
                  AND A.item = B.ala_datos_adi
                  AND RTrim(A.tabla) = RTrim(vvc_tabla)
                  AND RTrim(A.cod_adm) = 'ARP'
                  AND b.secuencia = 1
                  AND RTrim(cod_suc) = RTrim(pch_sucursal);
            EXCEPTION
                WHEN OTHERS THEN vnm_vlr_aut_in := 0;
            END;
        END IF;

        vnm_C4R32 := vnm_vlr_aut_in;
    END IF;

    vch_Ren_32 := '000323' || vch_nro_aut_in || LPad(To_Char(vnm_C4R32),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999932,vch_Ren_32);
    COMMIT;

    /*******	RENGLON 34	******/
    vnm_vlr_otr_rp := 0;

    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.valor_1,0)
            INTO vnm_vlr_otr_rp
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = 'ARP'
              AND b.secuencia = 2;
        EXCEPTION
            WHEN OTHERS THEN vnm_vlr_otr_rp := 0;
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.valor_1,0)
            INTO vnm_vlr_otr_rp
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = 'ARP'
              AND b.secuencia = 2
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vnm_vlr_otr_rp := 0;
        END;
    END IF;

    vch_Ren_34 := '000343' || LPad('0',10,'0') || LPad(To_Char(vnm_vlr_otr_rp),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999934,vch_Ren_34);
    COMMIT;

    /*******	RENGLON 35	******/
    vnm_C4R35 := vnm_C4R31 - vnm_C4R32 - vnm_vlr_otr_rp;

    vch_Ren_35 := '000353' || LPad('0',10,'0') || LPad(To_Char(vnm_C4R35),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999935,vch_Ren_35);
    COMMIT;
 
    /*******	RENGLON 36	******/
    vch_nro_meses := ' ';
    vnm_vlr_mor_rp := 0;

    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_nro_meses, vnm_vlr_mor_rp
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = 'ARP'
              AND b.secuencia = 3;
        EXCEPTION
            WHEN OTHERS THEN vnm_vlr_aut_in := 0;
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_nro_meses, vnm_vlr_mor_rp
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = 'ARP'
              AND b.secuencia = 3
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vnm_vlr_mor_rp := 0;
        END;
    END IF;
    vch_Ren_36 := '000363' || LPad('0',10,'0') || LPad(To_Char(vnm_vlr_mor_rp),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999936,vch_Ren_36);
    COMMIT;

    /*******	RENGLON 37	******/
    vnm_C4R37 := vnm_C4R35 + vnm_vlr_mor_rp;

    vch_Ren_37 := '000373' || LPad('0'||RTrim(vch_nro_meses),10,'0') || LPad(To_Char(vnm_C4R37),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999937,vch_Ren_37);
    COMMIT;

    /*******	RENGLON 38	******/
    vch_nro_rad_saf := ' ';
    vnm_vlr_saf_rp := 0;

    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_nro_rad_saf, vnm_vlr_saf_rp
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = 'ARP'
              AND b.secuencia = 4;
        EXCEPTION
            WHEN OTHERS THEN vnm_vlr_aut_in := 0;
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_nro_rad_saf, vnm_vlr_saf_rp
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = 'ARP'
              AND b.secuencia = 4
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vnm_vlr_saf_rp := 0;
        END;
    END IF;

    vch_Ren_38 := '000383' || vch_nro_rad_saf || LPad(To_Char(vnm_vlr_saf_rp),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999938,vch_Ren_38);
    COMMIT;

    /*******	RENGLON 39	******/
    vnm_C4R39 := vnm_C4R37 - vnm_vlr_saf_rp;
    vch_Ren_39 := '000393' || LPad('0',10,'0') || LPad(To_Char(vnm_C4R39),10,'0');
    INSERT INTO FCO_ARP_MM VALUES (999939,vch_Ren_39);
    COMMIT;

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

CREATE OR REPLACE PROCEDURE sp_fco_crea_salud_mm
(
   pch_compania    char,
   pch_anio	   char,
   pch_mes         char,
   pch_sucursal    char,
   pch_EPS         char
)
/**************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3			***/
/*** Descripcion: Genera el Medio Magnetico de acuerdo con las 		***/
/***		  especificaciones SIGA - Formato 03			***/
/*** Tablas:	  Administradoras, MF_EPS_CIA_año_mes, trabajadores_gra ***/
/*** Vistas:	  vw_FCO_ADMINISTRADORAS, vw_companias                	***/ 
/*** Autor:	  Juan Carlos Leguizamon				***/
/*** Fecha:	  Julio 3 de 2001 					***/
/*** Revision: 	  Junio 11 de 2002					***/
/*** Motor:	  Oracle 8i        	Version interna: 1.6		***/
/**************************************************************************/

AS
    vch_CI01_06    char(58);
    vch_CI07_18    char(148);
    vch_CI19_29    char(102);
    vch_CI30       char(5);
    vnm_R31C3      number(10,0);
    vnm_R31C4      number(10,0);
    vnm_R31C5      number(10,0);
    vnm_R31C6      number(10,0);
    vnm_R31C7      number(10,0);
    vnm_R32C4      number(10,0);
    vnm_R33C4      number(10,0);
    vnm_R35C4      number(10,0);
    vnm_R35C7      number(10,0);
    vnm_R36C4      number(10,0);
    vnm_R36C7      number(10,0);
    vnm_R37C4      number(10,0);
    vnm_R37C7      number(10,0);
    vnm_R38C4      number(10,0);
    vnm_R38C7      number(10,0);
    vch_Ren31      char(56);   
    vch_Ren32      char(56);  
    vch_Ren33      char(56);  
    vch_Ren35      char(56);  
    vch_Ren36      char(56);  
    vch_Ren37      char(56);  
    vch_Ren38      char(56);  
    vch_Ren39      char(56);
                    
    vvc_sql        varchar2(3000);

    vin_id_cursor  integer;
    vin_rows	   integer;

    vnm_total      number(5,0);
                    
    /* Para hallar el periodo cotizado a salud (ste) */
    vch_per_ste    char(6);
    vnm_mes_ste    number(2,0);
                    
    /* Para hallar la forma de presentación y la sucursal */
    vch_forma_pres char(1);
    vch_sucursal   char(10);
    vvc_control_suc varchar2(10);
                    
    /* Tabla donde estan los datos */
    vvc_tabla      varchar2(30);
                    
    /* Para controlar puntos y rayas en el registro_fiscal */
    vch_nit        char(9);

    /* Variables para descontar incapacidades, saldos a favor y pagar intereses por mora */
    vch_num_aut_eg    char(10);
    vnm_val_aut_eg    number(10,0);
    vch_num_aut_lm    char(10);
    vnm_val_aut_lm    number(10,0);
    vch_num_meses     char(10);
    vnm_mor_sa        number(10,0);
    vch_num_rad_saf   char(10);
    vnm_val_saf_sa    number(10,0);

BEGIN

    /*** Establecer el Nombre de la Tabla ***/
     vvc_tabla := 'FCO_EPS_' || RTrim(pch_compania) || '_' || LTrim(pch_anio) || '_' || LTrim(pch_mes);

    DELETE FCO_EPS_MM;
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO I                   *****/
    /***********************************************************************/

    SELECT '00000103' || 
	RPad(Substr(descripcion,1,40),40,' ') ||
        LPad(Substr(registro_fiscal,1,9),9,'0') ||
        RPad(Substr(digito_verificacion,1,1)||' ',1,' ')
    INTO vch_CI01_06
    FROM vw_fco_administradoras
    WHERE compania = pch_compania AND tipo='EPS' AND RTRIM(codigo)=pch_EPS;

    SELECT LPad(RTrim(fn_fco_tratar_NIT(pch_compania)), 9, '0')
    INTO vch_nit
    FROM vw_fco_companias
    WHERE compania = pch_compania;

    /* Control del codigo de la sucursal */
    vvc_control_suc := Nvl(RTrim(pch_sucursal),'NA');
    IF Length(RTrim(pch_sucursal)) = 0 THEN
        vvc_control_suc := 'NA';
    END IF;

    IF vvc_control_suc = 'NA' THEN
        SELECT
            RPad(Substr(C.nombre_cia,1,40),40,' ') || 
            'N' || vch_nit ||
            Substr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
            RPad(Substr(C.clase_aportante,1,1),1,' ') || 
            RPad(Substr(C.domicilio,1,40),40,' ') ||
            RPad(Substr(M.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(M.codigo),1,4),4,'0') || 
            RPad(Substr(D.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(D.codigo),1,2),2,'0') ||
            RPad(Substr(C.telefono,1,10),10,' ') || 
            RPad(Substr(C.fax,1,10),10,' ')
        INTO
            vch_CI07_18
        FROM
            vw_fco_companias C,
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            M.codigo  = C.cod_ciudad And
            D.codigo  = C.cod_dpto  And
            M.cod_dpto = D.codigo  And
            C.compania = pch_compania;
    ELSE
        SELECT
	    RPad(Substr(C.nombre_cia,1,40),40,' ') || 
            'N' || vch_nit ||
            Substr(C.registro_fiscal, Length(RTrim(C.registro_fiscal)),1) ||
            RPad(Substr(C.clase_aportante,1,1),1,' ') || 
            RPad(Substr(SUC.direccion,1,40),40,' ') ||
            RPad(Substr(M.nombre,1,15),15,' ') ||
            LPad(Substr(LTrim(M.codigo),1,4),4,'0') ||
            RPad(Substr(D.nombre,1,15),15,' ') || 
            LPad(Substr(LTrim(D.codigo),1,2),2,'0') ||
            RPad(Substr(SUC.telefono,1,10),10,' ') || 
            RPad(Substr(SUC.fax,1,10),10,' ')
        INTO
            vch_CI07_18
        FROM
            vw_fco_companias C,
            fco_sucursales SUC, 
            fco_ciudades M,
            fco_departamentos D
        WHERE  	
            SUC.compania = C.compania And
            M.codigo   = SUC.cod_ciudad And
            D.codigo   = SUC.cod_dpto And
            M.cod_dpto = D.codigo And
            C.compania = pch_compania And
            RTrim(SUC.sucursal) = RTrim(pch_sucursal);
    END IF;

    /* Calculo del periodo cotizado a Salud */
    vnm_mes_ste := To_Number(pch_mes) + 1;
    IF vnm_mes_ste = 13 THEN
        vch_per_ste := RTrim(LTrim(To_Number(pch_anio) + 1)) || '01';
    ELSE
        vch_per_ste := pch_anio || LPad(To_Char(vnm_mes_ste),2,'0');
    END IF;

    /* Forma de Presentación de la Autoliquidación de Aportes */
    IF vvc_control_suc = 'NA' THEN
        SELECT Nvl(forma_presentacion,'U')
        INTO vch_forma_pres
      	FROM vw_fco_companias
      	WHERE compania = pch_compania;
        vch_sucursal := ' ';
    ELSE
	vch_forma_pres := 'S';
	vch_sucursal := vvc_control_suc;
    END IF;

    /* Numero de trabajadores */
    vnm_total := 0;
    SELECT   
        ' SELECT Count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE COD_TRAB IN (SELECT trabajador FROM trabajadores_grales ' ||
                            'WHERE compania = ''' || pch_compania || ''' And ' ||
                                  'sit_trabajador = 1)' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de trabajadores');
    END;

    vch_CI19_29 :=
	vch_per_ste || RPad(' ',80,' ') || vch_forma_pres || vch_sucursal ||
	LPad(RTrim(To_Char(vnm_total)), 5, '0');

   /* Numero de Afiliados a esta EPS */
    vnm_total := 0;
    SELECT   
        ' SELECT Count(*)' ||
        ' FROM ' || vvc_tabla ||
        ' WHERE RTrim(COD_EPS) = ''' || pch_EPS || '''' || 
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''') ||
	' AND C24A > 0'
    INTO vvc_sql
    FROM DUAL;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_total);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_total);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al recuperar el nro de afiliados');
    END;

    vch_CI30 := LPad(RTrim(To_Char(vnm_total)), 5, '0');

    INSERT INTO FCO_EPS_MM VALUES (0, vch_CI01_06 || vch_CI07_18 || vch_CI19_29 || vch_CI30);
    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO II                  *****/
    /***********************************************************************/

    SELECT 
        ' INSERT INTO FCO_EPS_MM' ||
            ' SELECT RowNum,' ||
            ' LPad(RowNum, 5, ''0'') ||' ||
            ' ''2''||RPad(SubStr(C11A,1,1),1,'' '') ||' ||
            ' LPad(RTrim(SubStr(C11B,1,12)), 12, ''0'') ||' ||
            ' fn_Separar_Nombre(C12ABC,15,15,15,15) ||' ||
            ' Decode(Nvl(Length(RTrim(C13A)),0),0,'' '',C13A) ||' ||
            ' Decode(Nvl(Length(RTrim(C13B)),0),0,'' '',C13B) ||' ||
            ' Decode(Nvl(Length(RTrim(C13C)),0),0,'' '',C13C) ||' ||
            ' Decode(Nvl(Length(RTrim(C13D)),0),0,'' '',C13D) ||' ||
            ' Decode(Nvl(Length(RTrim(C13E)),0),0,'' '',C13E) ||' ||
            ' Decode(Nvl(Length(RTrim(C13F)),0),0,'' '',C13F) ||' ||
            ' Decode(Nvl(Length(RTrim(C13G)),0),0,'' '',C13G) ||' ||
            ' Decode(Nvl(Length(RTrim(C13H)),0),0,'' '',C13H) ||' ||
            ' Decode(Nvl(Length(RTrim(C13I)),0),0,'' '',C13I) ||' ||
            ' Decode(Nvl(Length(RTrim(C13J)),0),0,'' '',C13J) ||' ||
            ' LPad(To_Char(Floor(Nvl(C14A,0))), 2, ''0'') ||' ||
            ' LPad(To_Char(Floor(Nvl(C15A,0))), 9, ''0'') ||' ||
            ' LPad(To_Char(Floor(Nvl(C16A,0))), 9, ''0'') ||' ||
            ' LPad(To_Char(Floor(Nvl(C17A,0))), 9, ''0'') ||' ||
            ' LPad(To_Char(Floor(Nvl(C24A,0))), 9, ''0'') ||' ||
            ' RPad(SubStr(C25A,1,9)||'' '', 9, '' '') ||' ||
            ' LPad(To_Char(Floor(Nvl(C25B,0))), 9, ''0'') ||' ||
            ' RPad(SubStr(C26A,1,9)||'' '', 9, '' '') ||' ||
            ' LPad(To_Char(Floor(Nvl(C26B,0))), 9, ''0'') ||' ||
            ' LPad(To_Char(Floor(Nvl(C27A,0))), 9, ''0'')' ||
        ' FROM '||vvc_tabla||
        ' WHERE CIA=' || '''' || pch_compania || '''' ||
        ' AND RTrim(COD_EPS)=' ||''''||RTrim(pch_EPS)||'''' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || ''')') ||
        ' AND C24A >0'
    INTO vvc_sql
    FROM DUAL; 

    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        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 FCO_EPS_MM con los registros Tipo 2');
    END;

    COMMIT;

    /***********************************************************************/
    /*****          CONSTRUCCION DEL REGISTRO TIPO III                 *****/
    /***********************************************************************/

    /* Totales para los campos del Renglon 31 */
    SELECT
        ' SELECT  Nvl(Floor(Sum(C17A)),0), Nvl(Floor(Sum(C24A)),0),' ||
                ' Nvl(Floor(Sum(C27A)),0)' ||
        ' FROM '||vvc_tabla||
        ' WHERE CIA = '''|| pch_compania || '''' ||
        '   AND RTRIM(COD_EPS)='''|| pch_EPS || '''' ||
        Decode(RTrim(vvc_control_suc),'NA','',' AND RTrim(COD_SUC)=''' || RTrim(pch_sucursal) || '''')
    INTO vvc_sql
    FROM dual;
    BEGIN
        vin_id_cursor := dbms_sql.open_cursor;
        dbms_sql.parse(vin_id_cursor, vvc_sql, dbms_sql.native);
        dbms_sql.define_column(vin_id_cursor, 1, vnm_R31C3);
        dbms_sql.define_column(vin_id_cursor, 2, vnm_R31C4);
        dbms_sql.define_column(vin_id_cursor, 3, vnm_R31C7);
        vin_rows := dbms_sql.execute(vin_id_cursor);
        IF dbms_sql.fetch_rows(vin_id_cursor) > 0 THEN
            dbms_sql.column_value(vin_id_cursor, 1, vnm_R31C3);
            dbms_sql.column_value(vin_id_cursor, 2, vnm_R31C4);
            dbms_sql.column_value(vin_id_cursor, 3, vnm_R31C7);
        END IF;
        commit;
        dbms_sql.close_cursor(vin_id_cursor);
    EXCEPTION
        WHEN OTHERS THEN
            Raise_Application_Error (-20001, 'Error al calcular los totales del renglon 31');
    END;

    /*******	RENGLON 32	******/
    vch_num_aut_eg := ' ';
    vnm_val_aut_eg := 0;

    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_num_aut_eg, vnm_val_aut_eg
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 1;
        EXCEPTION
            WHEN OTHERS THEN vnm_val_aut_eg := 0;
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_num_aut_eg, vnm_val_aut_eg
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 1
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vnm_val_aut_eg := 0;
        END;
    END IF;

    vnm_R31C5 := vnm_val_aut_eg;
    vnm_R32C4 := vnm_R31C5;

    vch_Ren32 := '000323' || vch_num_aut_eg || LPad(To_Char(vnm_R32C4),10,'0') ||
        LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999932, vch_Ren32);
    COMMIT;

    /*******	RENGLON 33	******/
    vch_num_aut_lm := ' ';
    vnm_val_aut_lm := 0;

    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_num_aut_lm, vnm_val_aut_lm
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 2;
        EXCEPTION
            WHEN OTHERS THEN vnm_val_aut_lm := 0;
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_num_aut_lm, vnm_val_aut_lm
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 2
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vnm_val_aut_lm := 0;
        END;
    END IF;

    vnm_R31C6 := vnm_val_aut_lm;
    vnm_R33C4 := vnm_R31C6;

    vch_Ren33 := '000333' || vch_num_aut_lm || LPad(To_Char(vnm_R33C4),10,'0') ||
        LPad('0',10,'0') || LPad('0',10,'0') || LPad('0',10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999933, vch_Ren33);
    COMMIT;


   /*******	RENGLON 31	******/
    vch_Ren31 := '000313' || 
        LPad(To_Char(vnm_R31C3), 10, '0') ||
        LPad(To_Char(vnm_R31C4), 10, '0') ||
        LPad(To_Char(vnm_R31C5), 10, '0') ||
        LPad(To_Char(vnm_R31C6), 10, '0') ||
        LPad(To_Char(vnm_R31C7), 10, '0');

    INSERT INTO FCO_EPS_MM VALUES (999931, vch_Ren31);
    COMMIT;


    /*******	RENGLON 35	******/
    vnm_R35C4 := vnm_R31C4 - vnm_R32C4 - vnm_R33C4;
    vnm_R35C7 := vnm_R31C7;
    vch_Ren35 := '000353' || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R35C4),10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R35C7),10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999935, vch_Ren35);
    COMMIT;

    /*******	RENGLON 36	******/
    vch_num_meses := LPad('0',10,'0');
    vnm_mor_sa := 0;
 
    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1, 0)
            INTO vch_num_meses, vnm_mor_sa
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 3;
        EXCEPTION
            WHEN OTHERS THEN vch_num_meses := LPad('0',10,'0');
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1, 0)
            INTO vch_num_meses, vnm_mor_sa
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 3
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vch_num_meses := LPad('0',10,'0');
        END;
    END IF;

    vnm_R36C4 := vnm_mor_sa;
    vnm_R36C7 := 0;
    vch_Ren36 := '000363' || vch_num_meses ||
        LPad(To_Char(vnm_R36C4),10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R36C7),10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999936, vch_Ren36);
    COMMIT;

    /*******	RENGLON 37	******/
    vnm_R37C4 := vnm_R35C4 + vnm_R36C4;
    vnm_R37C7 := vnm_R35C7 + vnm_R36C7;

    vch_Ren37 := '000373' || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R37C4),10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R37C7),10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999937, vch_Ren37);
    COMMIT;

    /*******	RENGLON 38	******/
    vch_num_rad_saf := ' ';
    vnm_val_saf_sa := 0;

    IF vvc_control_suc = 'NA' THEN
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_num_rad_saf, vnm_val_saf_sa
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 4;
        EXCEPTION
            WHEN OTHERS THEN vnm_val_saf_sa := 0;
        END;
    ELSE
        BEGIN
            SELECT Nvl(A.referencia, ' '), Nvl(A.valor_1,0)
            INTO vch_num_rad_saf, vnm_val_saf_sa
            FROM fco_ala_datos_adi A, fco_rel_sgss_da B
            WHERE A.sgss = B.sgss 
              AND A.item = B.ala_datos_adi
              AND RTrim(A.tabla) = RTrim(vvc_tabla)
              AND RTrim(A.cod_adm) = RTrim(pch_EPS)
              AND b.secuencia = 4
              AND RTrim(cod_suc) = RTrim(pch_sucursal);
        EXCEPTION
            WHEN OTHERS THEN vnm_val_saf_sa := 0;
        END;
    END IF;

    vnm_R38C4 := vnm_val_saf_sa;
    vnm_R38C7 := 0;

    vch_Ren38 := '000383' || vch_num_rad_saf ||
        LPad(To_Char(vnm_R38C4),10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R38C7),10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999938, vch_Ren38);
    COMMIT;

    /*******	RENGLON 39	******/
    vch_Ren39 := '000393' || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R37C4-vnm_R38C4),10,'0') ||
	LPad('0',10,'0') || LPad('0',10,'0') ||
        LPad(To_Char(vnm_R37C7-vnm_R38C7),10,'0');

    INSERT INTO FCO_EPS_MM VALUES (999939, vch_Ren39);
    COMMIT WORK;

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

CREATE OR REPLACE PROCEDURE sp_fco_crea_ISS
(
    pch_compania     char,
    psm_anio         smallint,
    psm_mes          smallint,
    pch_sucursal     char,
    pbl_generar_mm   boolean,
    pbl_regenerar    boolean
)
/**********************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3                             ***/
/*** Descripcion: Crea tabla base para autoliquidacion de aportes al ISS.       ***/
/***              Formato Integrado. Considera que el ISS NO ES LA ARP.         ***/
/*** Tablas:      Parametros_MF, Trabajadores, Acumulados_Mensuales, MF_ISS,    ***/
/***              Traslados_EPS, Traslados_FPO                                  ***/
/*** Vistas:      vw_trabajadores_cia, vw_EPS_trabajador, vw_FPO_trabajador,    ***/ 
/***              vw_div_trabajador, vw_sueldos, vw_hist_traslados_FPO,         ***/
/***              vw_hist_traslados_EPS                                         ***/
/*** Autor:       Juan Carlos Leguizamon                                        ***/
/*** Fecha:       Junio 19 de 2001                                              ***/
/*** Revision:    Febrero 23 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);
    vvc_sql_1        varchar2(2000);
    vvc_sql_2        varchar2(2000);
    vvc_sql_3        varchar2(2000);
    vch_agr_02       char(3);
    vch_agr_03       char(3);
    vch_agr_04       char(3);
    vch_agr_05       char(3);
    vch_agr_08       char(3);
    vch_agr_10       char(3);
    vch_agr_11       char(3);
    vch_agr_15       char(3);
    vch_agr_16       char(3);
    vch_agr_18       char(3);
    vch_agr_20       char(3);
    vch_cod_ISS      char(5);
    vch_periodo      char(6);
    vvc_num_aut      varchar2(10);
    vnm_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;
    cch_sucursal    char(10);
    CURSOR cr_autorizaciones_eg IS
    SELECT 
        sucursal, Max(numero) NRO, Sum(valor_total) VLR
    FROM 
        fco_autorizaciones
    WHERE 
        compania = pch_compania And
        periodo = vch_periodo And 
        RTrim(cod_entidad) = 'ISS' And
        tipo_incapacidad = 0
    GROUP BY 
        sucursal
    HAVING Sum(valor_total) > 0;
    CURSOR cr_autorizaciones_lm IS
    SELECT 
        sucursal, Max(numero) NRO, Sum(valor_total) VLR
    FROM 
        fco_autorizaciones
    WHERE 
        compania = pch_compania And
        periodo = vch_periodo And 
        RTrim(cod_entidad) = 'ISS' And
        tipo_incapacidad = 1
    GROUP BY
        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 Cotizacion */
    vch_periodo := LTrim(RTrim(psm_anio)) || Substr(vch_acum_imp,14,2);
    /* Codigo del ISS en la compania -Cambiar si es necesario - */
    vch_cod_ISS := '''ISS''';
    /*** Recuperar Agrupaciones de Conceptos ***/
    /* IBC de Pension */
    SELECT Nvl(dato, 'S02') INTO vch_agr_02 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 2;
    /* Cotización Obligatoria Pensión */
    SELECT Nvl(dato, 'S03') INTO vch_agr_03 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 3;
    /* Fondo de Solidaridad Pensional */
    SELECT Nvl(dato, 'S04') INTO vch_agr_04 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 4;
    /* 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 por 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 (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 */
    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 */
    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_ISS_' || 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_ISS;
    COMMIT;
    /*** Crear y dar permisos a la tabla***/    
    IF NOT(vbl_existe) THEN
        sp_fco_crea_tablas (vvc_tabla);
    END IF;

    --Para porvenir, DCRP, Jun9/2005
    IF Nvl(Length(pch_sucursal),0) = 0 THEN
        vvc_condicion0 := ' '; -- DELETE e INSERT en depurada
        vvc_condicion1 := ' '; -- Insert General
        vvc_condicion2 := ' '; -- Novedades
        vvc_condicion3 := ' '; -- Fantasmas
    ELSE
        vvc_condicion0 := ' WHERE RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''''; -- DELETE e INSERT en depurada
        vvc_condicion1 := ' AND RTrim(SUC.dato) = ''' || RTrim(pch_sucursal) || ''''; -- Insert General
        vvc_condicion2 := ' AND RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''''; -- Novedades
        vvc_condicion3 := ' AND RTrim(SUC) = ''' || RTrim(pch_sucursal) || '''';    -- Fantasmas
    END IF;
        
    IF pbl_regenerar THEN
        vvc_sql_1 := 'DELETE FROM ' || vvc_tabla || vvc_condicion0;
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql_1, 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 FCO_ISS ***/
       /*** En el caso del ISS se llena la tabla en 3 procesos:  ***/
        /* Para quienes estan afiliados TANTO en Pensiones COMO en Salud al ISS: */
        vvc_sql_1 :=
            ' INSERT INTO FCO_ISS' ||
            ' SELECT AM.compania CIA, TG.trabajador COD_TRAB, ' || 
            ' EPS.dato COD_EPS, FPO.dato COD_FPO, SUC.dato COD_SUC,' ||
            ' ''C'' C03, T.clave_unica C04, T.nombre C05,' ||
            ' '' '' C09, '' '' C10, '' '' C11, '' '' C12, '' '' C13, '' '' C14,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_20 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_18 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_11 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_10 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_08 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' '' '' C20, '' '' C21, 0 C22,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_02 || ''',' || vch_acum_tie || ',0),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_16 || ''',' || vch_acum_tie || ',0),' ||
            ' 0 C25, Round((SU.salario),0) C26, 0 C27,';
        vvc_sql_2 :=
            ' Decode(AM.agr_conceptos,''' || vch_agr_02 || ''', Round((' || vch_acum_imp || '),0), 0),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_16 || ''', Round((' || vch_acum_imp || '),0), 0),' ||
            ' 0 C30, 0.1450 C31,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_03 || ''', Round((' || vch_acum_imp || '-1)/100, 0)*100,  0),' ||
            ' 0 C33, 0 C34, 0 C35,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_04 || ''', Round((' || vch_acum_imp || '-1)/100, 0)*100,  0),' ||
            ' 0 C37,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_05 || ''', Round((' || vch_acum_imp || '-1)/100, 0)*100,  0),' ||
            ' '' '' C39, 0 C40, '' '' C41, 0 C42,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_15 || ''', ' || vch_acum_imp || ', 0),' ||
            ' 0 C44, 0 C45, 0 C46, '' '' C47, '' '' C48' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,' ||
            ' vw_fco_EPS_trabajador EPS, vw_fco_FPO_trabajador FPO,' || 
            ' vw_fco_div_trabajador SUC, vw_fco_sueldos SU, acumulados_mensuales AM';
        vvc_sql_3 :=
            ' WHERE T.trabajador = TG.trabajador AND' ||
            ' EPS.compania = TG.compania AND EPS.trabajador = TG.trabajador AND ' ||
            ' FPO.compania = TG.compania AND FPO.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 ' ||
            ' RTrim(FPO.dato) =' || vch_cod_ISS || ' AND RTrim(EPS.dato) =' || vch_cod_ISS || ' AND' ||
            ' AM.compania =''' || pch_compania || ''' AND ' ||
            ' AM.anio = ' || To_Char(psm_anio) || ' AND ' ||
            ' AM.agr_conceptos IN (''' ||vch_agr_02 || ''',' ||
            '''' || vch_agr_03 || ''',''' || vch_agr_04 || ''',''' || 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;
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql_1 || vvc_sql_2 || vvc_sql_3, 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 temporal. (EPS y FPO)');
        END ;
        COMMIT;
        /* Para quienes estan afiliados UNICAMENTE en Salud al ISS: */
        vvc_sql_1 :=
            ' INSERT INTO FCO_ISS' ||
            ' SELECT AM.compania CIA, TG.trabajador COD_TRAB, ' || 
            ' EPS.dato COD_EPS, FPO.dato COD_FPO, SUC.dato COD_SUC,' ||
            ' ''C'' C03, T.clave_unica C04, T.nombre C05,' ||
            ' '' '' C09, '' '' C10, '' '' C11, '' '' C12, '' '' C13, '' '' C14,'||
            ' Decode(AM.agr_conceptos,''' || vch_agr_20 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_18 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_11 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_10 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_08 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' '' '' C20, '' '' C21, 0 C22, 0 C23,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_16 || ''',' || vch_acum_tie || ',0),' ||
            ' 0, Round((SU.salario),0) C26, 0 C27, 0 C28,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_16 || ''', Round((' || vch_acum_imp || '),0), 0),' ||
            ' 0 C30, 0 C31, 0 C32, 0 C33, 0 C34, 0 C35, 0 C36, 0 C37,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_05 || ''', Round((' || vch_acum_imp || '-1)/100, 0)*100,  0),';
        vvc_sql_2 :=
            ' '' '' C39, 0 C40, '' '' C41, 0 C42,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_15 || ''', ' || vch_acum_imp || ', 0),' ||
            ' 0 C44, 0 C45, 0 C46, '' '' C47, '' '' C48' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,' ||
            ' vw_fco_EPS_trabajador EPS, vw_fco_FPO_trabajador FPO,' || 
            ' vw_fco_div_trabajador SUC, vw_fco_sueldos SU, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND' ||
            ' EPS.compania = TG.compania AND EPS.trabajador = TG.trabajador AND ' ||
            ' FPO.compania(+) = TG.compania AND FPO.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 ' ||
            ' RTrim(EPS.dato) =' || vch_cod_ISS || ' AND' ||
            ' decode(RTrim(FPO.DATO),'||''||vch_cod_ISS||''||',1,2) <> 1 '||
--            ' RTrim(FPO.dato(+)) <>' || vch_cod_ISS ||
            ' AND RTrim(EPS.dato) =' || vch_cod_ISS || ' 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 || ''')' || vvc_condicion1;
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql_1 || vvc_sql_2, 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 temporal. (EPS)');
        END ;
        COMMIT;
        /* Para quienes estan afiliados UNICAMENTE en Pensiones al ISS: */
        vvc_sql_1 :=
            ' INSERT INTO FCO_ISS' ||
            ' SELECT AM.compania CIA, TG.trabajador COD_TRAB, ' || 
            ' EPS.dato COD_EPS, FPO.dato COD_FPO, SUC.dato COD_SUC,' ||
            ' ''C'' C03, T.clave_unica C04, T.nombre C05,' ||
            ' '' '' C09, '' '' C10, '' '' C11, '' '' C12, '' '' C13, '' '' C14,'||
            ' Decode(AM.agr_conceptos,''' || vch_agr_20 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_18 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' '' '' C17, '' '' C18,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_08 || ''', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' ''),' ||
            ' '' '' C20, '' '' C21, 0 C22,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_02 || ''',' || vch_acum_tie || ',0),' ||
            ' 0 C24, 0 C25, Round((SU.salario),0) C26, 0 C27,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_02 || ''', Round((' || vch_acum_imp || '),0), 0),' ||
            ' 0 C29, 0 C30, 0.1450 C31,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_03 || ''', Round((' || vch_acum_imp || '-1)/100, 0)*100,  0),' ||
            ' 0 C33, 0 C34, 0 C35,' ||
            ' Decode(AM.agr_conceptos,''' || vch_agr_04 || ''', Round((' || vch_acum_imp || '-1)/100, 0)*100,  0),' ||
            ' 0 C37, 0 C38,';
        vvc_sql_2 :=
            ' '' '' C39, 0 C40, '' '' C41, 0 C42, 0 C43, 0 C44, 0 C45, 0 C46, '' '' C47, '' '' C48' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,' ||
            ' vw_fco_EPS_trabajador EPS, vw_fco_FPO_trabajador FPO,' || 
            ' vw_fco_div_trabajador SUC, vw_fco_sueldos SU, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND' ||
            ' EPS.compania(+) = TG.compania AND EPS.trabajador(+) = TG.trabajador AND ' ||
            ' FPO.compania = TG.compania AND FPO.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 ' ||
            ' RTrim(FPO.dato) =' || vch_cod_ISS || 
            ' AND decode(RTrim(EPS.DATO),'||''||vch_cod_ISS||''||',1,2) <> 1 '||' AND' ||
--          ' AND RTrim(EPS.dato) <> ' || vch_cod_ISS || ' AND' ||
            ' AM.compania =''' || pch_compania || ''' AND'||
            ' AM.anio = ' || To_Char(psm_anio) || ' AND ' ||
            ' AM.agr_conceptos IN (''' ||vch_agr_02 || ''',' ||
            '''' || vch_agr_03 || ''',''' || vch_agr_04 || ''',''' || vch_agr_08 || ''',' ||
            '''' || vch_agr_18 || ''',''' || vch_agr_20 || ''')' || vvc_condicion1;
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql_1 || vvc_sql_2, 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 temporal. (FPO)');
        END;
        COMMIT;
        /* inserta los valores (Depurados) a la tabla */
        vvc_sql_1 :=
            ' INSERT INTO ' || vvc_tabla ||
            ' SELECT CIA, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C03, C04, C05,' ||
              ' '' '' C09, '' '' C10, '' '' C11, '' '' C12, '' '' C13, '' '' C14, Max(C15),' ||
              ' Max(C16), Max(C17), Max(C18), Max(C19), '' '' C20, '' '' C21, 0 C22,' ||
              ' Max(C23), Max(C24), 0 C25, Max(C26), 0 C27, Max(C28), Max(C29),' ||
              ' 0 C30, Max(C31), Max(C32), 0 C33, 0 C34, 0 C35, Max(C36),' ||
              ' 0 C37, Max(C38), '' '' C39, 0 C40, '' '' C41, 0 C42, Max(C43),' ||
              ' 0 C44, 0 C45, 0 C46, '' '' C47, '' '' C48' ||
            ' FROM FCO_ISS' || vvc_condicion0 ||
            ' GROUP BY CIA, C05, C04, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C03' ||
            ' ORDER BY CIA, C05';
        BEGIN
            vin_id_cursor := dbms_sql.open_cursor;
            dbms_sql.parse(vin_id_cursor, vvc_sql_1, 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_1 := ' UPDATE ' || vvc_tabla ||
                       ' SET C03 = ''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_1, 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_1 := ' UPDATE ' || vvc_tabla ||
                       ' SET C03 = ''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_1, 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 ***/
        /* ING: INGRESO A LA COMPANIA */
        BEGIN
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C09 = ''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_1, 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;
        /* RET: RETIRO DE LA COMPANIA */
        BEGIN
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C10 = ''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_1, 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 AL ISS EN PENSIONES */
        BEGIN
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C11 = ''X''' ||
                         ' WHERE CIA =''' || pch_compania || ''' AND' ||
			 ' C09 <> ''X'' AND' ||
                         ' RTrim(COD_FPO) = ' || vch_cod_ISS || ' AND ' ||
                         ' EXISTS (SELECT 1 ' ||
                         ' FROM vw_fco_hist_traslados_FPO' ||
                         ' 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_1, 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 (FPO)');
            END;
            COMMIT;
        END;
        /* TDA: INGRESO AL ISS EN SALUD */
        BEGIN
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C11 = ''X''' ||
                         ' WHERE CIA =''' || pch_compania || ''' AND' ||
			 ' C09 <> ''X'' AND' ||
                         ' RTrim(COD_EPS) = ' || vch_cod_ISS || ' 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_1, 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 (EPS)');
            END;
            COMMIT;
        END;
        /* TAA: RETIRO DEL ISS EN PENSIONES */
        BEGIN
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C12 = ''X''' ||
                         ' WHERE CIA =''' || pch_compania || ''' AND' ||
                         ' RTrim(COD_FPO) = ' || vch_cod_ISS || ' AND ' ||
                         ' EXISTS (SELECT 1 ' ||
                         ' FROM fco_traslados_FPO' ||
                         ' WHERE compania = 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_1, 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 (FPO)');
            END;
            COMMIT;
        END;
        /* TAA: RETIRO DEL ISS EN SALUD */
        BEGIN
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C12 = ''X''' ||
                         ' WHERE CIA =''' || pch_compania || ''' AND' ||
                         ' RTrim(COD_EPS) = ' || vch_cod_ISS || ' AND ' ||
                         ' EXISTS (SELECT 1 ' ||
                         ' FROM fco_traslados_EPS' ||
                         ' WHERE compania = 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_1, 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 (EPS)');
            END;
            COMMIT;
        END;
        /* VSP: CAMBIO PERMANENTE DE SUELDO */
        BEGIN    
            vvc_sql_1 := ' UPDATE ' || vvc_tabla ||
                         ' SET C13 = ''X''' ||
                         ' WHERE CIA =''' || pch_compania || ''' AND' ||
                         ' C09 <> ''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_1, 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;
        /* CODIGO NUEVA ADMINISTRADORA */
        /* EPS */
        BEGIN    
            vvc_sql_1 :=' UPDATE ' || vvc_tabla || 
                        ' SET C47 = (SELECT A.cod_super ' ||
                                  ' FROM fco_administradoras A, fco_traslados_eps T' ||
                                  ' WHERE A.codigo = T.EPS_nueva AND' ||
                                  ' A.tipo = ''EPS'' AND' ||
                                  ' RTrim(T.EPS_actual) = ' || vch_cod_ISS || ' AND' ||
                                  ' CIA = T.compania AND' ||
                                  ' COD_TRAB = T.trabajador AND' ||
                                  ' Substr(To_Char(fecha_cambio,''yyyymmdd''),1,6)='''||vch_periodo||''')' ||
                        ' WHERE CIA =''' || pch_compania || ''' AND' ||
                        ' EXISTS (SELECT 1 ' ||
                                ' FROM fco_administradoras A, fco_traslados_eps T' ||
                                ' WHERE A.codigo = T.EPS_nueva AND' ||
                                ' A.tipo = ''EPS'' AND' ||
                                ' RTrim(T.EPS_actual) = ' || vch_cod_ISS || ' AND' ||
                                ' CIA = T.compania AND' ||
                                ' COD_TRAB = T.trabajador 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_1, 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 Codigo Nueva EPS');
            END;
            COMMIT;
        END;
        /* AFP */
        BEGIN
            vvc_sql_1 :=' UPDATE ' || vvc_tabla || 
                        ' SET C48 = (SELECT A.cod_super ' ||
                                  ' FROM fco_administradoras A, fco_traslados_fpo T' ||
                                  ' WHERE A.codigo = T.FPO_nueva AND' ||
                                  ' A.tipo = ''AFP'' AND' ||
                                  ' RTrim(T.FPO_actual) = ' || vch_cod_ISS || ' AND' ||
                                  ' CIA = T.compania AND' ||
                                  ' COD_TRAB = T.trabajador AND' ||
                                  ' Substr(To_Char(fecha_cambio,''yyyymmdd''),1,6)='''||vch_periodo||''')' ||
                        ' WHERE CIA =''' || pch_compania || ''' AND' ||
                        ' EXISTS (SELECT 1 ' ||
                                ' FROM fco_administradoras A, fco_traslados_fpo T' ||
                                ' WHERE A.codigo = T.FPO_nueva AND' ||
                                ' A.tipo = ''AFP'' AND' ||
                                ' RTrim(T.FPO_actual) = ' || vch_cod_ISS || ' AND' ||
                                ' CIA = T.compania AND' ||
                                ' COD_TRAB = T.trabajador 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_1, 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 Codigo Nueva FPO');
            END;
            COMMIT;
        END;
        /* AUTORIZACIONES ENFERMEDAD GENERAL (NUMERO Y VALOR POR TRABAJADOR) */
        BEGIN
            vvc_sql_1 :=' UPDATE ' || vvc_tabla ||
                        ' SET C39 = (SELECT 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 cod_entidad = ' || vch_cod_ISS || 
                                   ' AND periodo='''||vch_periodo || '''),' ||
                        ' C40 = (SELECT valor_total ' ||
                                   ' 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 cod_entidad = ' || vch_cod_ISS || 
                                   ' 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_1, 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_sucursal, vvc_num_aut, vnm_vlr_aut;
            EXIT WHEN cr_autorizaciones_eg%NOTFOUND;
            IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 4, 'ISS', cch_sucursal, 0, vvc_num_aut, vnm_vlr_aut, null, null);
            END IF;
        END LOOP;
        CLOSE cr_autorizaciones_eg;
        /* AUTORIZACIONES LICENCIAS DE MATERNIDAD (NUMERO Y VALOR POR TRABAJADOR) */
        BEGIN
            vvc_sql_1 :=' UPDATE ' || vvc_tabla ||
                        ' SET C41 = (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 cod_entidad = ' || vch_cod_ISS || 
                                   ' AND periodo='''||vch_periodo || '''),' ||
                        ' C42 = (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 cod_entidad = ' || vch_cod_ISS || 
                                   ' 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_1, 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_sucursal, vvc_num_aut, vnm_vlr_aut;
            EXIT WHEN cr_autorizaciones_lm%NOTFOUND;
            IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 4, 'ISS', cch_sucursal, 1, vvc_num_aut, vnm_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_ISS_mm (pch_compania, psm_anio, psm_mes, pch_sucursal);
        END IF;
    END;
    
    /*** Borrar datos de la tabla modelo ***/
    DELETE FCO_ISS;
    COMMIT;
    
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_ISS FOR ADAM.sp_fco_crea_ISS;
GRANT EXECUTE ON sp_fco_crea_ISS TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_crea_pension
(
    pch_compania    char,
    psm_anio	    smallint,
    psm_mes  	    smallint,
    pch_sucursal    char,
    pch_FPO         char,
    pbl_generar_mm  boolean,
    pbl_regenerar   boolean
)

/**********************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3				***/
/*** Descripcion: Crea tabla base para autoliquidacion de aportes a Pension.	***/
/*** Tablas:	  Parametros_MF, Trabajadores, Acumulados_Mensuales, MF_FPO,	***/
/***		  Traslados_FPO							***/
/*** Vistas:	  vw_trabajadores_cia, vw_FPO_trabajador, vw_div_trabajador, 	***/ 
/*** 		  vw_sueldos, vw_hist_traslados_FPO				***/
/*** Autor:	  Juan Carlos Leguizamon					***/
/*** Fecha:	  Julio 5 de 2001						***/
/*** Revision: 	  Abril 1 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_02		char(5);
    vch_agr_03		char(5);
    vch_agr_04		char(5);
    vch_agr_08		char(5);
    vch_agr_10		char(5);
    vch_agr_11		char(5);
    vch_agr_13		char(5);
    vch_agr_14		char(5);
    vch_agr_18		char(5);
    vch_agr_19		char(5);
    vch_agr_20		char(5);

    vch_periodo 	char(8);

    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;
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 Cotizacion */
    vch_periodo := '''' || LTrim(RTrim(psm_anio)) || Substr(vch_acum_imp,14,2) || '''';

    /*** Recuperar Agrupaciones de Conceptos ***/

    /* IBC de Pension */
    SELECT '''' || Nvl(dato, 'S02') || '''' INTO vch_agr_02 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 2;

    /* Cotizacion Obligatoria de Pension */
    SELECT '''' || Nvl(dato, 'S03') || '''' INTO vch_agr_03 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 3;

    /* Fondo de Solidaridad Pensional */
    SELECT '''' || Nvl(dato, 'S04') || '''' INTO vch_agr_04 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 4;

    /* 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;

    /* Cotizacion Voluntaria al FPO por parte del Empleado */
    SELECT '''' || Nvl(dato, 'S13') || ''''  INTO vch_agr_13 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 13;

    /* Cotizacion Voluntaria al FPO por parte del Patrono */
    SELECT '''' || Nvl(dato, 'S14') || ''''  INTO vch_agr_14 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 14;

    /* 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;

    /* Valor No Retenido por Aportes Voluntarios al FPO */
    SELECT '''' || Nvl(dato, 'S19') || ''''  INTO vch_agr_19 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 19;

    /* 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_FPO_' || 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_FPO;
   COMMIT;

    /*** Crear y dar permisos a la 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_FPO) =''' || RTrim(pch_FPO) || ''''; -- DELETE e INSERT en depurada
        vvc_condicion1 := ' AND RTrim(FPO.dato) =''' || RTrim(pch_FPO) || ''''; -- Insert General
        vvc_condicion2 := ' AND RTrim(COD_FPO) =''' || RTrim(pch_FPO) || ''''; -- Novedades
        vvc_condicion3 := ' AND RTrim(FPO) = ''' || RTrim(pch_FPO) || '''';     -- Fantasmas
  	ELSE
        vvc_condicion0 := ' WHERE RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(COD_FPO) =''' || RTrim(pch_FPO) || ''''; -- DELETE e INSERT en depurada
        vvc_condicion1 := ' AND RTrim(SUC.dato) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(FPO.dato) =''' || RTrim(pch_FPO) || ''''; -- Insert General
        vvc_condicion2 := ' AND RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(COD_FPO) =''' || RTrim(pch_FPO) || ''''; -- Novedades
        vvc_condicion3 := ' AND RTrim(SUC) = ''' || RTrim(pch_sucursal) || ''' AND RTrim(FPO) = ''' || RTrim(pch_FPO) || '''';     -- 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 (FCO_FPO) */
        vvc_sql :=
        ' INSERT INTO FCO_FPO' ||
        ' SELECT AM.compania As CIA,  TG.trabajador As COD_TRAB, ' ||
        ' FPO.dato As COD_FPO, SUC.dato As COD_SUC,' ||
        '''C'' As C11A, T.clave_unica As C11B, SUBSTR(T.nombre,1,60) As C12ABC,' ||
        ''' '' As C13A, '' '' As C13B, '' '' As C13C, '' '' As C13D, '' '' As C13E, '' '' As C13F,'||
        ' Decode(AM.agr_conceptos,' || vch_agr_20 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13G,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_18 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13H,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_11 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13I,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_10 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13J,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_08 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''), '' '') As C13K,' ||
        ' '' '' C13L,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_02 || ', ' || vch_acum_tie || ',0) As C14A,' ||
        ' Round((SU.salario),0) C15A,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_02 || ', Round((' || vch_acum_imp || '),0),0) As C17A,' ||
        ' 0.1450 As C18A,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_03 || ', Round((' || vch_acum_imp || '-1)/100,0)*100,0) As C19A,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_13 || ', ' || vch_acum_imp || ',0) As C20A,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_14 || ', ' || vch_acum_imp || ',0) As C20B,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_04 || ', Round((' || vch_acum_imp || '-1)/100,0)*100,0) As C22A,' ||
        ' Decode(AM.agr_conceptos,' || vch_agr_19 || ', ' || vch_acum_imp || ',0) As C23A' ||
        ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
        ' vw_fco_fpo_trabajador FPO, vw_fco_div_trabajador SUC,' ||
        ' acumulados_mensuales AM, vw_fco_sueldos SU '||
        ' WHERE  T.trabajador = TG.trabajador AND' ||
        ' FPO.compania = TG.compania AND FPO.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_02 || ',' || vch_agr_03 || ',' || 
        vch_agr_04 || ',' || vch_agr_08 || ',' || vch_agr_10 || ',' || vch_agr_11 || ',' || 
        vch_agr_13 || ',' || vch_agr_14 || ',' || vch_agr_18 || ',' || vch_agr_19 || ',' ||
        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;
        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 temporal.');
        END;
        COMMIT;

        /* inserta los valores (Depurados) a la tabla */
        vvc_sql :=  
      ' INSERT INTO ' || vvc_tabla ||
      ' SELECT CIA, COD_TRAB, COD_FPO, COD_SUC, C11A, C11B, C12ABC,' ||
      ' '' '' C13A, '' '' C13B, '' '' C13C, '' '' C13D, '' '' C13E, '' '' C13F, MAX(C13G),' ||
      ' MAX(C13H), MAX(C13I), MAX(C13J), MAX(C13K), '' '' C13L, MAX(C14A), MAX(C15A),' ||
      ' MAX(C17A), MAX(C18A), MAX(C19A), MAX(C20A), MAX(C20B), MAX(C22A), MAX(C23A)' ||
      ' FROM FCO_FPO' || vvc_condicion0 ||
      ' GROUP BY CIA, C11B, C12ABC, COD_TRAB, COD_FPO, COD_SUC, C11A';
        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;


        /*** 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 ESTE FONDO DE PENSIONES */
        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_FPO' ||
                       ' 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 ESTE FONDO DE PENSIONES */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13D = ''X''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM fco_traslados_FPO' ||
                       ' 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;

        /* VST: VARIACION TRANSITORIA DEL SALARIO */
        BEGIN    
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13G = '' ''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' (C13A = ''X'' OR C15A=C17A) ' || 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 actualizar Novedad VST');
            END;
            COMMIT;
        END;

    END IF;

    IF pbl_generar_mm THEN
        sp_fco_crea_pension_mm (pch_compania, psm_anio,psm_mes,pch_sucursal,pch_FPO);
    END IF;

   /*** Borrar datos de la tabla modelo ***/
   DELETE FCO_FPO;
   COMMIT;
    
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_pension FOR ADAM.sp_fco_crea_pension;
GRANT EXECUTE ON sp_fco_crea_pension TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_crea_riesgos
(
    pch_compania    char,
    psm_anio        smallint,
    psm_mes         smallint,
    pch_sucursal    char,
    pbl_generar_mm  boolean,
    pbl_regenerar   boolean
)
/**********************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3                             ***/
/*** Descripcion: Crea tabla base para autoliquidacion de aportes a Riesgos     ***/
/*** Tablas:      Parametros_MF, Trabajadores, Acumulados_Mensuales, MF_ARP,    ***/
/*** Vistas:      vw_trabajadores_cia, vw_div_trabajador,                       ***/
/***              vw_sueldos, vw_hist_traslados_EPS, vw_hist_traslados_FPO      ***/
/*** Autor:       Juan Carlos Leguizamon                                        ***/
/*** Fecha:       Julio 10 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);
    vch_periodo     char(8);
    vch_agr_08      char(5);
    vch_agr_09      char(5);
    vch_agr_10      char(5);
    vch_agr_11      char(5);
    vch_agr_12      char(5);
    vch_agr_17      char(5);
    vch_agr_18      char(5);
    vch_agr_20      char(5);
    vvc_tabla       varchar2(30);
    vbl_existe      boolean;
    vnm_existe      number(1); -- cosas de oracle
    vvc_sql         varchar2(3000);
    cvc_num_aut     varchar2(10);
    cnm_vlr_aut     number(9,0);
    cch_sucursal    char(10);
    vvc_condicion0  varchar(255); --WHERE
    vvc_condicion1  varchar(255); --AND
    vvc_condicion2  varchar(255); --AND
    vvc_condicion3  varchar(255); --AND
    vin_id_cursor   integer;
    vin_rows        integer;
    
    --DCRP, Jul18/2005.
    vnu_porc_arp number(16,6);
    
    CURSOR cr_autorizaciones IS
    SELECT
        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_entidad = 1
    GROUP BY
        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 (y de cotizacion) */
    vch_periodo := '''' || LTrim(RTrim(psm_anio)) || SubStr(vch_acum_imp,14,2) || '''';
    /*** Recuperar Agrupaciones de Conceptos ***/
    /* Vacaciones */
    SELECT '''' || Nvl(dato, 'S08') || '''' INTO vch_agr_08 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 8;
    /* Cotizacion Obligatoria Riesgos Profesionales */
    SELECT '''' || Nvl(dato, 'S09') || '''' INTO vch_agr_09 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 9;
    /* 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;
    /* Incapacidad por Accidente de Trabajo */
    SELECT '''' || Nvl(dato, 'S12') || ''''  INTO vch_agr_12 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 12;
    /* IBC Riesgos Profesionales */
    SELECT '''' || Nvl(dato, 'S17') || ''''  INTO vch_agr_17 FROM vw_fdt_parametros
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 17;
    /* 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_ARP_' || 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_ARP;
   COMMIT;
    /*** Crear y dar permisos a la tabla***/
    IF NOT(vbl_existe) THEN
        sp_fco_crea_tablas (vvc_tabla);
    END IF;

    IF Nvl(Length(pch_sucursal),0) = 0 THEN
       vvc_condicion0 := ' '; -- DELETE e INSERT en depurada
              vvc_condicion1 := ' '; -- Insert General
              vvc_condicion2 := ' '; -- Novedades
              vvc_condicion3 := ' '; -- Fantasmas
    ELSE
       vvc_condicion0 := ' WHERE RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''''; -- DELETE e INSERT en depurada
              vvc_condicion1 := ' AND RTrim(SUC.dato) = ''' || RTrim(pch_sucursal) || ''''; -- Insert General
              vvc_condicion2 := ' AND RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''''; -- Novedades
              vvc_condicion3 := ' AND RTrim(SUC) = ''' || RTrim(pch_sucursal) || '''';  -- 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_FPO) */
        vvc_sql :=
            ' INSERT INTO FCO_ARP' ||
            ' SELECT AM.compania As CIA, TG.trabajador As COD_TRAB,' ||
                ' SUC.dato As COD_SUC, ''C'' As C11A,' ||
                ' T.clave_unica As C11B, SUBSTR(T.nombre,1,60) As C12ABC,' ||
                ' '' '' As C13A, '' '' As C13B, '' '' As C13C, '' '' As C13D,'||
                ' Decode(AM.agr_conceptos,' || vch_agr_20 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''),'' '') As C13E,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_18 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''),'' '') As C13F,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_11 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''),'' '') As C13G,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_10 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''),'' '') As C13H,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_08 || ', Decode(' || vch_acum_imp || ',0,'' '',''X''),'' '') As C13I,' ||
                ' '' '' As C13J,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_12 || ', ' || vch_acum_tie || ',0) As C13K,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_17 || ', ' || vch_acum_tie || ',0) As C14A,' ||
                ' Round((SU.salario),0) As C15A,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_17 || ', Round((' || vch_acum_imp || '),0),0) As C17A,' ||
                ' 0 As C28A, 0 As C28B,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_09 || ', Round((' || vch_acum_imp || '-1)/100,0)*100,0) As C29A,' ||
                ' '' '' C30A, '' '' C30B,' ||
                ' Decode(AM.agr_conceptos,' || vch_agr_12 || ', ' || vch_acum_imp || ',0) As C32B' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
                ' vw_fco_div_trabajador SUC, acumulados_mensuales AM, vw_fco_sueldos SU'||
            ' WHERE  T.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_08||',' ||
                vch_agr_09||','||vch_agr_10||','||vch_agr_11||','||vch_agr_12||',' ||
                vch_agr_17||','||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;
        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 temporal.');
        END;
        COMMIT;
        /* inserta los valores (Depurados) a la tabla */
        vvc_sql :=
            ' INSERT INTO ' || vvc_tabla ||
            ' SELECT CIA, COD_TRAB, COD_SUC, C11A, C11B, C12ABC,' ||
                ' '' '' C13A, '' '' C13B, '' '' C13C, '' '' C13D, Max(C13E), Max(C13F), Max(C13G),' ||
                ' Max(C13H), Max(C13I), '' '' C13J, Max(C13K), Max(C14A), Max(C15A), Max(C17A),' ||
                ' 0 C28A, 0 C28B, Max(C29A), '' '' C30A, '' '' C30B, Max(C32B)' ||
            ' FROM FCO_ARP' || vvc_condicion0 ||
            ' GROUP BY CIA, C12ABC, C11B, COD_TRAB, 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;
        /* VSP: CAMBIO PERMANENTE DE SUELDO */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C13C = ''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;
        /* CODIGO NUEVA ADMINISTRADORA */
        /* EPS */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C30A = (SELECT A.cod_super ' ||
                                   ' FROM fco_administradoras A, fco_traslados_eps T' ||
                                   ' WHERE A.codigo = T.EPS_nueva AND' ||
                                   ' A.tipo = ''EPS'' AND' ||
                                   ' RTrim(CIA) = RTrim(T.compania) AND' ||
                                   ' COD_TRAB = T.trabajador AND' ||
                                   ' Substr(To_Char(fecha_cambio,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                               ' FROM fco_administradoras A, fco_traslados_eps T' ||
                               ' WHERE A.codigo = T.EPS_nueva AND' ||
                               ' A.tipo = ''EPS'' AND' ||
                               ' RTrim(CIA) = RTrim(T.compania) AND' ||
                               ' COD_TRAB = T.trabajador 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 Codigo Nueva EPS');
            END;
            COMMIT;
        END;
        /* AFP */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C30B = (SELECT A.cod_super ' ||
                                   ' FROM fco_administradoras A, fco_traslados_fpo T' ||
                                   ' WHERE A.codigo = T.FPO_nueva AND' ||
                                   ' A.tipo = ''AFP'' AND' ||
                                   ' RTrim(CIA) = RTrim(T.compania) AND' ||
                                   ' COD_TRAB = T.trabajador AND' ||
                                   ' Substr(To_Char(fecha_cambio,''yyyymmdd''),1,6)='||vch_periodo||')' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' EXISTS (SELECT 1 ' ||
                               ' FROM fco_administradoras A, fco_traslados_fpo T' ||
                               ' WHERE A.codigo = T.FPO_nueva AND' ||
                               ' A.tipo = ''AFP'' AND' ||
                               ' RTrim(CIA) = RTrim(T.compania) AND' ||
                               ' COD_TRAB = T.trabajador 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 Codigo Nueva FPO');
            END;
            COMMIT;
        END;
        /* INSERCION DE LAS AUTORIZACIONES POR EP y AT EN LA TABLA DEL PIE DE REPORTE */
        OPEN cr_autorizaciones;
        LOOP
            FETCH cr_autorizaciones INTO cch_sucursal, cvc_num_aut, cnm_vlr_aut;
            EXIT WHEN cr_autorizaciones%NOTFOUND;
            IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 2, 'ARP', cch_sucursal, 2, cvc_num_aut, cnm_vlr_aut, null, null);
            END IF;
        END LOOP;
        CLOSE cr_autorizaciones;
        COMMIT WORK;
    END IF;
    
    --insercion del % de riesgos, C28A
    vnu_porc_arp := 0;
    BEGIN
         SELECT real
         INTO vnu_porc_arp
         FROM parametros_rh
         WHERE compania = pch_compania
         AND parametro_rh = 'var_nom_38';
    EXCEPTION
         WHEN OTHERS THEN vnu_porc_arp := 0;
    END;
    
    vnu_porc_arp := vnu_porc_arp * 1000;
    BEGIN
        vvc_sql := ' UPDATE ' || vvc_tabla ||
                   ' SET C28A = ' || vnu_porc_arp ||
                   ' WHERE CIA =''' || pch_compania || '''';
        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 Codigo Nueva FPO');
        END;
        COMMIT;
    END;
    --fin insercion % riesgo
        
    BEGIN
        IF pbl_generar_mm THEN
            sp_fco_crea_riesgos_mm (pch_compania, psm_anio, psm_mes, pch_sucursal);
        END IF;
    END;
    
   /*** Borrar datos de la tabla modelo ***/
   DELETE FCO_ARP;
   COMMIT;
    
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_riesgos FOR ADAM.sp_fco_crea_riesgos;
GRANT EXECUTE ON sp_fco_crea_riesgos TO adama;

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;
CREATE OR REPLACE PROCEDURE sp_fco_crea_tablas
(
    pvc_tabla varchar2
)
AS
    vvc_sql       varchar2(255);
    vin_id_cursor integer;
    vin_rows	  integer;
    vvc_tabla   varchar2(10);

BEGIN
     IF Substr(pvc_tabla,5,2) = 'VW' THEN
        vvc_tabla := Substr(pvc_tabla,1,10);
     ELSE
        vvc_tabla := Substr(pvc_tabla,1,7);
     END IF;

    /* Crear la tabla */
    vvc_sql := 'CREATE TABLE adam.' || pvc_tabla || ' AS SELECT * FROM ' || vvc_tabla;
    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 crear la tabla');
    END ;

    /* Crear el sinonimo */
    vvc_sql := 'CREATE PUBLIC SYNONYM ' || pvc_tabla || ' FOR adam.' || pvc_tabla;
    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 crear sinonimo publico para la tabla');
    END ;

    /* Asignar permisos */
    vvc_sql := 'GRANT SELECT, UPDATE, DELETE, INSERT ON '||pvc_tabla||' TO PUBLIC';
    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 otorgar permisos a tabla');
    END;

    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_tablas FOR ADAM.sp_fco_crea_tablas;
GRANT EXECUTE ON sp_fco_crea_tablas TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_crea_vw_iss
(
    pch_compania    char,
    psm_anio        smallint,
    psm_mes         smallint,
    pch_sucursal    char,
    pbl_generar_mm  boolean,
    pbl_regenerar   boolean
)
/**********************************************************************************/
/*** Modulo:      Modulo Fiscal Colombiano ADAM V.3                             ***/
/*** Descripcion: Crea tabla base para autoliquidacion de aportes al ISS.       ***/
/***              Formato Consolidado. Considera que el ISS NO ES LA ARP.       ***/
/*** Tablas:      Parametros_MF, Trabajadores, Acumulados_Mensuales, VW_ISS,    ***/
/***              Traslados_EPS, Traslados_FPO                                  ***/
/*** Vistas:      vw_trabajadores_cia, vw_EPS_trabajador, vw_FPO_trabajador,    ***/ 
/***              vw_div_trabajador, vw_sueldos, vw_hist_traslados_FPO,         ***/
/***              vw_hist_traslados_EPS                                         ***/
/*** Autor:       Juan Carlos Leguizamon                                        ***/
/*** Fecha:       Julio 10 de 2001                                              ***/
/*** Revision:    Septiembre 19 de 2002                                         ***/
/*** Motor:       Oracle 8i                 Version interna: 1.00               ***/
/**********************************************************************************/
AS
    vch_acum_imp    char(15);
    vch_acum_tie    char(15);

    vch_agr_02      char(5);
    vch_agr_03      char(5);
    vch_agr_04      char(5);
    vch_agr_05      char(5);
    vch_agr_08      char(5);
    vch_agr_09      char(5);
    vch_agr_10      char(5);
    vch_agr_11      char(5);
    vch_agr_12      char(5);
    vch_agr_16      char(5);
    vch_agr_18      char(5);

    vvc_tabla       varchar2(30);
    vbl_existe	    boolean;
    vnm_existe      number(1); -- cosas de oracle
    vvc_sql         varchar2(3000);
    vch_cod_ISS     char(5);

    vch_periodo     char(8);

    cvc_num_aut     varchar2(10);
    cnm_vlr_aut     number(9,0);

    vin_id_cursor   integer;
    vin_rows	    integer;

    vvc_condicion0  varchar2(255); --WHERE
    vvc_condicion1  varchar2(255); --AND
    vvc_condicion2  varchar2(255); --AND
    vvc_condicion3  varchar2(255); --AND

    cch_sucursal    char(10);

    vnm_arp_iss     number(1);
    vvc_control_suc varchar2(10);
    vnm_random      number(5);

    cdc_ap_riesgos  number(9,0);

    CURSOR cr_autorizaciones_eg IS
    SELECT 
        sucursal, Max(numero) NRO, Sum(valor_total) VLR
    FROM 
        fco_autorizaciones
    WHERE 
        compania = pch_compania And
        periodo = Substr(vch_periodo,2,6) And 
        RTrim(cod_entidad) = 'ISS' And
        tipo_incapacidad = 0
    GROUP BY 
        sucursal
    HAVING Sum(valor_total) > 0;

    CURSOR cr_autorizaciones_lm IS
    SELECT 
        sucursal, Max(numero) NRO, Sum(valor_total) VLR
    FROM 
        fco_autorizaciones
    WHERE 
        compania = pch_compania And
        periodo = Substr(vch_periodo,2,6) And 
        RTrim(cod_entidad) = 'ISS' And
        tipo_incapacidad = 1
    GROUP BY
        sucursal
    HAVING Sum(valor_total) > 0;

    CURSOR cr_aportes_riesgos IS
    SELECT sucursal, valor
    FROM fco_vw_iss_arp
    WHERE clave = vnm_random;
   
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;

    /* Codigo del ISS en la compania -Cambiar si es necesario - */
    vch_cod_ISS := '''ISS''';

    /* Periodo de Cotizacion */
    vch_periodo := '''' || LTrim(RTrim(psm_anio)) || Substr(vch_acum_imp,14,2) || '''';

    /* Control del codigo de la sucursal */
    vvc_control_suc := Nvl(RTrim(pch_sucursal),'NA');
    IF Nvl(Length(RTrim(pch_sucursal)),0) = 0 THEN
        vvc_control_suc := 'NA';
    END IF;

    /*** Recuperar Agrupaciones de Conceptos ***/

    /* IBC de Pension */
    SELECT '''' || Nvl(dato, 'S02') || '''' INTO vch_agr_02 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 2;

    /* Cotizacion Obligatoria de Pension */
    SELECT '''' || Nvl(dato, 'S03') || '''' INTO vch_agr_03 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 3;

    /* Fondo de Solidaridad Pensional */
    SELECT '''' || Nvl(dato, 'S04') || '''' INTO vch_agr_04 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 4;

    /* Cotizacion 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;

    /* Cotizacion Obligatoria Riesgos Profesionales */
    SELECT '''' || Nvl(dato, 'S09') || '''' INTO vch_agr_09 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 9;

    /* 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 por Enfermedad General */
    SELECT '''' || Nvl(dato, 'S11') || '''' INTO vch_agr_11 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 11;

    /* Incapacidad por Accidente de Trabajo */
    SELECT '''' || Nvl(dato, 'S12') || ''''  INTO vch_agr_12 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 12;

    /* IBC de 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 */
    SELECT '''' || Nvl(dato, 'S18') || '''' INTO vch_agr_18 FROM vw_fdt_parametros 
    WHERE compania = pch_compania AND parametro = 'autoliq' AND secuencia = 18;

    /*** Fin de Recuperar Agrupaciones de Conceptos ***/


    /*** Saber si el ISS es la ARP de la compañia ***/
    BEGIN
        SELECT Nvl(arp_iss, 0)
        INTO vnm_arp_iss
        FROM fco_cias_datos_adi
        WHERE compania = pch_compania;
    EXCEPTION 
        WHEN OTHERS THEN vnm_arp_iss := 0;
    END;

    /*** Establecer el Nombre de la Tabla ***/
     vvc_tabla := 'FCO_VW_ISS_' || 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_VW_ISS;
    COMMIT;

    /*** Crear y dar permisos a la tabla***/    
    IF NOT(vbl_existe) THEN
        sp_fco_crea_tablas (vvc_tabla);
    END IF;

  	IF vvc_control_suc = 'NA' THEN
  	    vvc_condicion0 := ' '; -- DELETE e INSERT en depurada
              vvc_condicion1 := ' '; -- Insert General
              vvc_condicion2 := ' '; -- Novedades
              vvc_condicion3 := ' '; -- Fantasmas
  	ELSE
              vvc_condicion0 := ' WHERE RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''''; -- DELETE e INSERT en depurada
              vvc_condicion1 := ' AND RTrim(SUC.dato) = ''' || RTrim(pch_sucursal) || ''''; -- Insert General
              vvc_condicion2 := ' AND RTrim(COD_SUC) = ''' || RTrim(pch_sucursal) || ''''; -- Novedades
              vvc_condicion3 := ' AND RTrim(SUC) = ''' || RTrim(pch_sucursal) || '''';    -- 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 (FCO_VW_ISS) */
        /*** En el caso del ISS se llena la tabla en 3 procesos  ***/

        /* Para quienes estan afiliados TANTO en Pensiones COMO en Salud al ISS: */
        vvc_sql :=
            ' INSERT INTO FCO_VW_ISS' ||
            ' SELECT AM.compania CIA, TG.trabajador COD_TRAB, ' || 
                ' EPS.dato COD_EPS, FPO.dato COD_FPO, SUC.dato COD_SUC,' ||
                ' ''C'' C10A, T.clave_unica C10B, SUBSTR(T.nombre,1,60) C10C,' ||
                ' '' '' C11A, '' '' C11B, '' '' C11C, 0 C11D, 0 C11E,'||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_16 || ',' || vch_acum_tie || ',0),0) C12A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_16 || ',Round((' || vch_acum_imp || '),0),0),0) C13A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_03 || ',Round((' || vch_acum_imp || '-1)/100,0)*100,0),0) C14A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_04 || ',Round((' || vch_acum_imp || '-1)/100,0)*100,0),0) C14B,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_05 || ',Round((' || vch_acum_imp || '-1)/100,0)*100,0),0) C14C,' ||
                ' '' '' C25N, 0 C25C, '' '' C26N, 0 C26C' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
                ' vw_fco_eps_trabajador EPS, vw_fco_fpo_trabajador FPO,' ||
                ' vw_fco_div_trabajador SUC, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND '  ||
                ' FPO.compania = TG.compania AND FPO.trabajador = TG.trabajador AND ' ||
                ' EPS.compania = TG.compania AND EPS.trabajador = TG.trabajador AND ' ||
                ' SUC.compania = TG.compania AND SUC.trabajador = TG.trabajador AND '||
                ' AM.compania = TG.compania AND AM.trabajador = TG.trabajador    AND ' ||
                ' RTrim(FPO.dato) = ' || vch_cod_ISS || ' AND RTrim(EPS.dato) = ' || vch_cod_ISS || ' AND' ||
                ' AM.compania =''' || pch_compania || ''' AND '||
                ' AM.anio = '|| To_Char(psm_anio) || ' AND ' ||
                ' AM.agr_conceptos IN (' || vch_agr_02 || ',' ||
                vch_agr_03 || ',' || vch_agr_04 || ',' ||
                vch_agr_05 || ',' || vch_agr_16 || ')' 
                || ' AND instr(T.clave_unica, ''S'') = 0' --solo para porvenir, al parecer en la clave unica a algunos les agregaron un S                
                || 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);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, 'Error al llenar la tabla temporal. (EPS y FPO)');
        END;
        COMMIT;

        /* Para quienes estan afiliados UNICAMENTE en Salud al ISS: */
        vvc_sql :=
            ' INSERT INTO FCO_VW_ISS' ||
            ' SELECT AM.compania CIA, TG.trabajador COD_TRAB, ' || 
                ' EPS.dato COD_EPS, FPO.dato COD_FPO, SUC.dato COD_SUC,' ||
                ' ''C'' C10A, T.clave_unica C10B, SUBSTR(T.nombre,1,60) C10C,' ||
                ' '' '' C11A, '' '' C11B, '' '' C11C, 0 C11D, 0 C11E,'||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_16 || ',' || vch_acum_tie || ',0),0) C12A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_16 || ',Round((' || vch_acum_imp || '),0),0),0) C13A,' ||
                ' 0 C14A, 0 C14B,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_05 || ',Round((' || vch_acum_imp || '-1)/100,0)*100,0),0) C14C, ' ||
                ' '' '' C25N, 0 C25C, '' '' C26N, 0 C26C' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
                ' vw_fco_eps_trabajador EPS, vw_fco_fpo_trabajador FPO,' ||
                ' vw_fco_div_trabajador SUC, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND '  ||
                ' FPO.compania = TG.compania AND FPO.trabajador = TG.trabajador AND ' ||
                ' EPS.compania = TG.compania AND EPS.trabajador = TG.trabajador AND ' ||
                ' SUC.compania = TG.compania AND SUC.trabajador = TG.trabajador AND '||
                ' AM.compania = TG.compania AND AM.trabajador = TG.trabajador    AND ' ||
                ' RTrim(FPO.dato) <> ' || vch_cod_ISS || ' AND RTrim(EPS.dato) = ' || vch_cod_ISS || ' AND' ||
                ' AM.compania =''' || pch_compania || ''' AND '||
                ' AM.anio = '|| To_Char(psm_anio) || ' AND ' ||
                ' AM.agr_conceptos IN (' || vch_agr_05 || ',' || vch_agr_16 || ')' ||
                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);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, 'Error al llenar la tabla temporal. (EPS)');
        END;
        COMMIT;

        /* Para quienes estan afiliados UNICAMENTE en Pensiones al ISS: */
        vvc_sql :=
            ' INSERT INTO FCO_VW_ISS' ||
            ' SELECT AM.compania CIA, TG.trabajador COD_TRAB, ' || 
                ' EPS.dato COD_EPS, FPO.dato COD_FPO, SUC.dato COD_SUC,' ||
                ' ''C'' C10A, T.clave_unica C10B, SUBSTR(T.nombre,1,60) C10C,' ||
                ' '' '' C11A, '' '' C11B, '' '' C11C, 0 C11D, 0 C11E,'||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_02 || ',' || vch_acum_tie || ',0),0) C12A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_02 || ',Round((' || vch_acum_imp || '),0),0),0) C13A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_03 || ',Round((' || vch_acum_imp || '-1)/100,0)*100,0),0) C14A,' ||
                ' Nvl(Decode(am.agr_conceptos,' || vch_agr_04 || ',Round((' || vch_acum_imp || '-1)/100,0)*100,0),0) C14B,' ||
                ' 0 C14C, '' '' C25N, 0 C25C, '' '' C26N, 0 C26C' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
                ' vw_fco_eps_trabajador EPS, vw_fco_fpo_trabajador FPO,' ||
                ' vw_fco_div_trabajador SUC, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND '  ||
                ' FPO.compania = TG.compania AND FPO.trabajador = TG.trabajador AND ' ||
                ' EPS.compania = TG.compania AND EPS.trabajador = TG.trabajador AND ' ||
                ' SUC.compania = TG.compania AND SUC.trabajador = TG.trabajador AND '||
                ' AM.compania = TG.compania AND AM.trabajador = TG.trabajador    AND ' ||
                ' RTrim(FPO.dato) = ' || vch_cod_ISS || ' AND RTrim(EPS.dato) <> ' || vch_cod_ISS || ' AND' ||
                ' AM.compania =''' || pch_compania || ''' AND '||
                ' AM.anio = '|| To_Char(psm_anio) || ' AND ' ||
                ' AM.agr_conceptos IN (' || vch_agr_02 || ',' ||
                vch_agr_03 || ',' || vch_agr_04 || ')' || 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);
        EXCEPTION
            WHEN OTHERS THEN
                raise_application_error (-20001, 'Error al llenar la tabla temporal. (FPO)');
        END;
        COMMIT;

        /* inserta los valores (Depurados) a la tabla */
        vvc_sql :=  
            ' INSERT INTO ' || vvc_tabla ||
            ' SELECT CIA,COD_TRAB,COD_EPS,COD_FPO,COD_SUC,C10A,C10B,C10C,MAX(C11A),MAX(C11B),MAX(C11C),MAX(C11D),MAX(C11E),' ||
            ' MAX(C12A),MAX(C13A),MAX(C14A),MAX(C14B),MAX(C14C),MAX(C25N),MAX(C25C),MAX(C26N),MAX(C26C)' ||
            ' FROM FCO_VW_ISS' || vvc_condicion0 ||
            ' GROUP BY CIA, C10B, C10C, COD_TRAB, COD_EPS, COD_FPO, COD_SUC, C10A';
        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;


        /******* N O V E D A D E S *******/

        /* INCAPACIDADES POR LICENCIA DE MATERNIDAD */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11B = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''I'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_10 ||
                            ')' ||
                ' WHERE RTrim(COD_EPS) = ' || vch_cod_ISS || ' And' ||
                      ' CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_10 ||
                            ')' ||
                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 C11B Incapacidad Salud - E.G.');
            END;
            COMMIT;

        END;

         /* INCAPACIDADES POR ENFERMEDAD GENERAL */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11B = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''I'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_11 ||
                            ')' ||
                ' WHERE RTrim(COD_EPS) = ' || vch_cod_ISS || ' And' ||
                      ' CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_11 ||
                            ')' ||
                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 C11B Incapacidad Salud - L.M.');
            END;
            COMMIT;
        END;

        /* INCAPACIDADES POR ACCIDENTES DE TRABAJO */
	IF vnm_arp_iss = 1 THEN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11C = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''I'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_12 ||
                            ')' ||
                ' WHERE CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_12 ||
                            ')' ||
                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 C11C Incapacidad Riesgos Profesionales');
            END;
            COMMIT;
	END IF;


        /* LICENCIA NO REMUNERADA Y SANCIONES  COLUMNA A: PENSION */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11A = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''L'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_18 || 
                            ')' ||
                ' WHERE RTrim(COD_FPO) = ' || vch_cod_ISS || ' And' ||
                      ' CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_18 || 
                            ')' ||
                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 C11A Sanciones');
            END;
            COMMIT;

        END;


         /* LICENCIA NO REMUNERADA Y SANCIONES  COLUMNA B: SALUD */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11B = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''L'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_18 || 
                            ')' ||
                ' WHERE RTrim(COD_EPS) = ' || vch_cod_ISS || ' And' ||
                      ' CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_18 || 
                            ')' ||
                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 C11B Sanciones');
            END;
            COMMIT;

        END;

        /* LICENCIA NO REMUNERADA Y SANCIONES  COLUMNA C: RIESGOS */
	IF vnm_arp_iss = 1 THEN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11B = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''L'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_18 || 
                            ')' ||
                ' WHERE CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos = ' || vch_agr_18 || 
                            ')' ||
                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 C11B Sanciones');
            END;
            COMMIT;

        END IF;

        /* NOVEDAD V: VACACIONES */
	IF vnm_arp_iss = 1 THEN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11C = (SELECT Decode(' || vch_acum_imp || ',0,'' '',''V'')' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_08 ||
                            '),' ||
                    ' C11E = (SELECT ' || vch_acum_tie ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_08 ||
                            ')' ||
                ' WHERE CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM acumulados_mensuales' ||
                            ' WHERE CIA = compania And COD_TRAB = trabajador And' ||
                                  ' anio = ' || To_Char(psm_anio) || ' And' ||
                                  ' agr_conceptos =' || vch_agr_08 ||
                            ')' ||
                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 C11C Vacaciones');
            END;
            COMMIT;
	END IF;


	/* TRASLADO DEL ISS A OTRO FONDO DE PENSIONES */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C11A = ''T''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' RTrim(COD_FPO) = ' || vch_cod_ISS || ' AND ' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM fco_traslados_FPO' ||
                       ' WHERE compania = 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 C11A Traslado FPO');
            END;
            COMMIT;
        END;


        /* TRASLADO DEL ISS A OTRA EPS */
        BEGIN
            vvc_sql := ' UPDATE ' || vvc_tabla ||
                       ' SET C11B = ''T''' ||
                       ' WHERE CIA =''' || pch_compania || ''' AND' ||
                       ' RTrim(COD_EPS) = ' || vch_cod_ISS || ' AND ' ||
                       ' EXISTS (SELECT 1 ' ||
                       ' FROM fco_traslados_EPS' ||
                       ' WHERE compania = 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 C11B Traslado EPS');
            END;
            COMMIT;
        END;


        /* RETIRO DE LA COMPAÑIA - COLUMNA A: PENSION */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11A = ''R'',' ||
                    ' C11D = (SELECT To_Number(To_Char(fecha_baja, ''dd''))' ||
                            ' FROM vw_fco_trabajadores_cia' ||
                            ' WHERE CIA = compania And' ||
                            ' COD_TRAB = trabajador And' ||
                            ' Substr(To_Char(fecha_baja,''yyyymmdd''),1,6) = ' || vch_periodo || 
                            ')' ||
                ' WHERE RTrim(COD_FPO) = ' || vch_cod_ISS || ' And' ||
                      ' CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM vw_fco_trabajadores_cia' ||
                            ' WHERE CIA = compania And' ||
                            ' COD_TRAB = trabajador 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 C11A Retiro Cia');
            END;
            COMMIT;

        END;


        /* RETIRO DE LA COMPAÑIA - COLUMNA B: SALUD */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11B = ''R'',' ||
                    ' C11D = (SELECT To_Number(To_Char(fecha_baja, ''dd''))' ||
                            ' FROM vw_fco_trabajadores_cia' ||
                            ' WHERE CIA = compania And' ||
                            ' COD_TRAB = trabajador And' ||
                            ' Substr(To_Char(fecha_baja,''yyyymmdd''),1,6) = ' || vch_periodo || 
                            ')' ||
                ' WHERE RTrim(COD_EPS) = ' || vch_cod_ISS || ' And' ||
                      ' CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM vw_fco_trabajadores_cia' ||
                            ' WHERE CIA = compania And' ||
                            ' COD_TRAB = trabajador 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 C11B Retiro Cia');
            END;
            COMMIT;

        END;

        /* RETIRO DE LA COMPAÑIA - COLUMNA C: RIESGOS */
        BEGIN
            vvc_sql := 
                ' UPDATE ' || vvc_tabla ||
                ' SET C11C = ''R'',' ||
                    ' C11D = (SELECT To_Number(To_Char(fecha_baja, ''dd''))' ||
                            ' FROM vw_fco_trabajadores_cia' ||
                            ' WHERE CIA = compania And' ||
                            ' COD_TRAB = trabajador And' ||
                            ' Substr(To_Char(fecha_baja,''yyyymmdd''),1,6) = ' || vch_periodo || 
                            ')' ||
                ' WHERE CIA =''' || pch_compania || ''' And ' ||
                      ' C13A <> 0 And' ||
                      ' EXISTS (SELECT 1' ||
                            ' FROM vw_fco_trabajadores_cia' ||
                            ' WHERE CIA = compania And' ||
                            ' COD_TRAB = trabajador 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 C11C Retiro Cia');
            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_sucursal, cvc_num_aut, cnm_vlr_aut;
            EXIT WHEN cr_autorizaciones_eg%NOTFOUND;
          
            IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 0, 'ISS', cch_sucursal, 0, cvc_num_aut, cnm_vlr_aut, null, null);
            END IF;
        END LOOP;
        CLOSE cr_autorizaciones_eg;


        /* INSERCION DE LAS AUTORIZACIONES POR LM EN LA TABLA DEL PIE DE REPORTE */
        OPEN cr_autorizaciones_lm;
        LOOP
            FETCH cr_autorizaciones_lm INTO cch_sucursal, cvc_num_aut, cnm_vlr_aut;
            EXIT WHEN cr_autorizaciones_lm%NOTFOUND;
          
            IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                sp_fco_cambio_ala_datos_adi (vvc_tabla, 0, 'ISS', cch_sucursal, 1, cvc_num_aut, cnm_vlr_aut, null, null);
            END IF;
        END LOOP;
        CLOSE cr_autorizaciones_lm;

	COMMIT;

        /* INSERCION DE LOS APORTES A LA ARP EN LA TABLA DEL PIE DE REPORTE */
	IF vnm_arp_iss = 1 THEN
            SELECT fn_fco_random(vvc_control_suc) INTO vnm_random FROM dual;

            vvc_sql :=
	    ' INSERT INTO fco_vw_iss_arp' ||
            ' SELECT ' ||
		To_Char(vnm_random) || ', SUC.dato, Sum(' || vch_acum_imp || ')' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
                ' vw_fco_div_trabajador SUC, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND '  ||
                ' SUC.compania = TG.compania AND SUC.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 =' || vch_agr_09 || vvc_condicion1 ||
	    ' GROUP BY SUC.dato';
            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 los aportes a Riesgos Profesionales');
            END;
	    
            OPEN cr_aportes_riesgos;
            LOOP
                FETCH cr_aportes_riesgos INTO cch_sucursal, cdc_ap_riesgos;
                EXIT WHEN cr_aportes_riesgos%NOTFOUND;
          
                IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                    sp_fco_cambio_ala_datos_adi (vvc_tabla, 0, 'ISS', cch_sucursal, 8, '', null, null, cdc_ap_riesgos);
                END IF;
            END LOOP;
            CLOSE cr_aportes_riesgos;

            DELETE fco_vw_iss_arp WHERE clave = vnm_random;

	    COMMIT;


        END IF;
	
        /* INSERCION DEL VALOR POR INCAPACIDADES DE ARP EN LA TABLA DEL PIE DE REPORTE */
	IF vnm_arp_iss = 1 THEN
            vvc_sql :=
	    ' INSERT INTO fco_vw_iss_arp' ||
            ' SELECT ' ||
		To_Char(vnm_random) || ', SUC.dato, Sum(' || vch_acum_imp || ')' ||
            ' FROM trabajadores T, vw_fco_trabajadores_cia TG,'||
                ' vw_fco_div_trabajador SUC, acumulados_mensuales AM'||
            ' WHERE T.trabajador = TG.trabajador AND '  ||
                ' SUC.compania = TG.compania AND SUC.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 =' || vch_agr_12 || vvc_condicion1 ||
	    ' GROUP BY SUC.dato';
            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 los aportes a Riesgos Profesionales');
            END;
	    
            OPEN cr_aportes_riesgos;
            LOOP
                FETCH cr_aportes_riesgos INTO cch_sucursal, cdc_ap_riesgos;
                EXIT WHEN cr_aportes_riesgos%NOTFOUND;
          
                IF NOT(vbl_existe) OR (pbl_regenerar AND Rtrim(cch_sucursal) = RTrim(pch_sucursal)) Then
                    sp_fco_cambio_ala_datos_adi (vvc_tabla, 0, 'ISS', cch_sucursal, 0, '', null, null, cdc_ap_riesgos);
                END IF;
            END LOOP;
            CLOSE cr_aportes_riesgos;

            DELETE fco_vw_iss_arp WHERE clave = vnm_random;

	    COMMIT;


        END IF;

	
	COMMIT WORK;

    END IF;

    BEGIN
        IF pbl_generar_mm THEN
            sp_fco_crea_autolx_mm (pch_compania, psm_anio, psm_mes, pch_sucursal);
        END IF;
    END;

    /*** Borrar datos de la tabla modelo ***/
    DELETE FCO_VW_ISS;
    COMMIT;
    
END;
/
CREATE PUBLIC SYNONYM sp_fco_crea_vw_iss FOR ADAM.sp_fco_crea_vw_iss;
GRANT EXECUTE ON sp_fco_crea_vw_iss TO adama;
CREATE OR REPLACE PROCEDURE sp_fco_upd_proc_reportes_ala
(
    i_procesar    char,
    i_compania    varchar2,
    i_codigo      varchar2,
    i_anio        number,
    i_mes         number,
    i_EPS_FPO     varchar2,
    i_sucursal    varchar2
)
AS
BEGIN
    UPDATE 
        fco_proc_reportes_ala
    SET 
        procesar = i_procesar
    WHERE
        compania = i_compania And
        codigo = i_codigo And
        anio = i_anio And
        mes = i_mes And
        EPS_FPO = i_EPS_FPO And
        sucursal = i_sucursal;
	COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fco_upd_proc_reportes_ala FOR ADAM.sp_fco_upd_proc_reportes_ala;
GRANT EXECUTE ON sp_fco_upd_proc_reportes_ala TO adama;

create or replace view adam.vw_fco_hist_traslados_ctr as
select compania,
       trabajador,
       dato,
       fecha_alta
from hist_agrupaciones h
where agrupacion = 
    nvl((SELECT dato FROM vw_fdt_parametros x
     WHERE pais = 'COL' AND x.compania = h.compania
       AND x.parametro = 'autoliq' AND x.secuencia = 24), 'CTR');


CREATE PUBLIC SYNONYM vw_fco_hist_traslados_ctr FOR ADAM.vw_fco_hist_traslados_ctr;
GRANT ALL ON vw_fco_hist_traslados_ctr TO ADAMA;
