create or replace procedure sp_fco_inscab_pens(pch_compania in char,
                                               psi_anio     in number,
                                               pti_mes      in number,
                                               pch_sucursal in char) is

  v_tipo_id               fco_pi_pens_rt1.tipo_documento%TYPE;
  v_descripcion           fco_sucursales.descripcion%TYPE;
  v_sec                   fco_pi_pens_rt1.secuencia%TYPE := 1;
  v_nombre_cia            companias.nombre_cia%type;
  v_registro_fiscal       companias.registro_fiscal%type;
  v_fco_integrada_cab_reg fco_pi_pens_rt1%rowtype;
  v_year char(4);
  v_month char(2);

begin

  begin
    SELECT nvl(MAX(secuencia), 1)
      into v_sec
      FROM fco_pi_pens_rt1 x
     WHERE x.compania = pch_compania
       AND x.anio = psi_anio
       AND x.mes = pti_mes;
  exception
    when NO_DATA_FOUND then
      v_sec := 1;
  end;

  begin
    select nvl(substr(cda.tipo_id, 1, 2), ' ')
      into v_tipo_id
      from fco_cias_datos_adi cda
     where cda.compania = pch_compania;
  exception
    when NO_DATA_FOUND then
      Raise_application_error(-20001,
                              'No se encontraron datos adicionales de la compania');
      return;
  end;

  begin
    select nvl(suc.descripcion, ' ')
      into v_descripcion
      from fco_sucursales suc
     where suc.compania = pch_compania
       and suc.sucursal = pch_sucursal;
  exception
    when NO_DATA_FOUND then
      v_descripcion := ' ';
  end;

  begin

    select cias.nombre_cia, cias.registro_fiscal
      into v_nombre_cia, v_registro_fiscal
      from companias cias
     where cias.compania = pch_compania;

    v_fco_integrada_cab_reg.compania       := pch_compania;
    v_fco_integrada_cab_reg.anio           := psi_anio;
    v_fco_integrada_cab_reg.mes            := pti_mes;
    v_fco_integrada_cab_reg.sucursal       := pch_sucursal;
    v_fco_integrada_cab_reg.secuencia      := v_sec;
    v_fco_integrada_cab_reg.razon_social   := v_nombre_cia;
    v_fco_integrada_cab_reg.tipo_documento := v_tipo_id;
    if LENGTH(fn_solonum(v_registro_fiscal)) = 0 then
      v_fco_integrada_cab_reg.nro_id := ' ';
    else
      v_fco_integrada_cab_reg.nro_id := substr(substr(fn_solonum(v_registro_fiscal),
                                                      1,
                                                      LENGTH(fn_solonum(v_registro_fiscal)) - 1),
                                               1,
                                               16);
    end if;
    v_fco_integrada_cab_reg.dv := NVL(substr(fn_solonum(v_registro_fiscal),
                                             -1),
                                      ' ');
    if pch_sucursal is null or pch_sucursal = ' ' then
      v_fco_integrada_cab_reg.forma_presentacion := 'C';
    else
      v_fco_integrada_cab_reg.forma_presentacion := 'S';
    end if;
    
    v_fco_integrada_cab_reg.nombre_sucursal := v_descripcion;
    
    v_fco_integrada_cab_reg.periodo := substr(RTRIM(to_char(psi_anio)) || ltrim(to_char(pti_mes, '00')), 1, 6);
    if pti_mes = 12 then
      v_fco_integrada_cab_reg.periodo_salud := RTRIM(to_char(psi_anio + 1)) || '01';
    else
      v_year := RTRIM(to_char(psi_anio));
      v_month := ltrim(rtrim(to_char(pti_mes + 1, '00')));
      v_fco_integrada_cab_reg.periodo_salud := v_year || v_month;
    end if;
    
    v_fco_integrada_cab_reg.nro_radicacion := ' ';
    v_fco_integrada_cab_reg.fecha_pago     := sysdate;
    v_fco_integrada_cab_reg.nro_pensionados  := 0;
    v_fco_integrada_cab_reg.valor_nomina   := 0;
    v_fco_integrada_cab_reg.tipo_pagador       := 1;
    v_fco_integrada_cab_reg.operador       := '00';
    v_fco_integrada_cab_reg.sit_periodo    := 1;

    insert into fco_pi_pens_rt1 values v_fco_integrada_cab_reg;
/*  exception
    when others then
      Raise_application_error(-20001, 'No fue posible insertar encabezado');
*/  end;

end sp_fco_inscab_pens;
/
