All Downloads are FREE. Search and download functionalities are using the official Maven repository.

expsigladb.Package.CNRCTB577_BODY.sql Maven / Gradle / Ivy

There is a newer version: 6.6.11
Show newest version
--------------------------------------------------------
--  DDL for Package Body CNRCTB577
--------------------------------------------------------

  CREATE OR REPLACE PACKAGE BODY "CNRCTB577" AS
 -- Carica estrazione CIR
 procedure getEstrazione(aCnrEstr in out CNR_ESTRAZIONE_CORI%rowtype) is
 begin
  select * into aCnrEstr from CNR_ESTRAZIONE_CORI where
         CD_CDS=aCnrEstr.CD_CDS
     and ESERCIZIO=aCnrEstr.ESERCIZIO
     and CD_UNITA_ORGANIZZATIVA=aCnrEstr.CD_UNITA_ORGANIZZATIVA
     and PG_LIQUIDAZIONE=aCnrEstr.PG_LIQUIDAZIONE
     and MATRICOLA=aCnrEstr.MATRICOLA
     and CODICE_FISCALE=aCnrEstr.CODICE_FISCALE
     and TI_PAGAMENTO=aCnrEstr.TI_PAGAMENTO
     and ESERCIZIO_COMPENSO=aCnrEstr.ESERCIZIO_COMPENSO
     and CD_IMPONIBILE=aCnrEstr.CD_IMPONIBILE
     and TI_ENTE_PERCIPIENTE=aCnrEstr.TI_ENTE_PERCIPIENTE
     and CD_CONTRIBUTO_RITENUTA=aCnrEstr.CD_CONTRIBUTO_RITENUTA
	 for update nowait;
 end;

 -- Aggiorna l'estrazione da CIR
 procedure updateEstrazione(aCnrEstr CNR_ESTRAZIONE_CORI%rowtype, aComp compenso%rowtype, aCori contributo_ritenuta%rowtype) is
 begin
  update CNR_ESTRAZIONE_CORI set
     IM_LORDO=IM_LORDO+aComp.im_lordo_percipiente,
     IMPONIBILE=IMPONIBILE+aCori.imponibile,
     IM_RITENUTA=IM_RITENUTA+aCori.ammontare,
     DT_INIZIO_COMPENSO = aCnrEstr.DT_INIZIO_COMPENSO,
     DT_FINE_COMPENSO = aCnrEstr.DT_FINE_COMPENSO,
     IM_CORI_SOSPESO = IM_CORI_SOSPESO+aCori.im_cori_sospeso
  where
         CD_CDS=aCnrEstr.CD_CDS
     and ESERCIZIO=aCnrEstr.ESERCIZIO
     and CD_UNITA_ORGANIZZATIVA=aCnrEstr.CD_UNITA_ORGANIZZATIVA
     and PG_LIQUIDAZIONE=aCnrEstr.PG_LIQUIDAZIONE
     and MATRICOLA=aCnrEstr.MATRICOLA
     and CODICE_FISCALE=aCnrEstr.CODICE_FISCALE
     and TI_PAGAMENTO=aCnrEstr.TI_PAGAMENTO
     and ESERCIZIO_COMPENSO=aCnrEstr.ESERCIZIO_COMPENSO
     and CD_IMPONIBILE=aCnrEstr.CD_IMPONIBILE
     and TI_ENTE_PERCIPIENTE=aCnrEstr.TI_ENTE_PERCIPIENTE
     and CD_CONTRIBUTO_RITENUTA=aCnrEstr.CD_CONTRIBUTO_RITENUTA;
 end;

 -- Aggiorna l'estrazione da interfaccia PISA
 procedure updateEstrazione(aCnrEstr CNR_ESTRAZIONE_CORI%rowtype, aLiqIntDett liquid_cori_interf_dett%rowtype) is
 begin
  update CNR_ESTRAZIONE_CORI set
     IM_LORDO=IM_LORDO+aLiqIntDett.IM_LORDO,
     IMPONIBILE=IMPONIBILE+aLiqIntDett.IMPONIBILE,
     IM_RITENUTA=IM_RITENUTA+aLiqIntDett.IM_RITENUTA,
     DT_INIZIO_COMPENSO = aCnrEstr.DT_INIZIO_COMPENSO,
     DT_FINE_COMPENSO = aCnrEstr.DT_FINE_COMPENSO
  where
         CD_CDS=aCnrEstr.CD_CDS
     and ESERCIZIO=aCnrEstr.ESERCIZIO
     and CD_UNITA_ORGANIZZATIVA=aCnrEstr.CD_UNITA_ORGANIZZATIVA
     and PG_LIQUIDAZIONE=aCnrEstr.PG_LIQUIDAZIONE
     and MATRICOLA=aCnrEstr.MATRICOLA
     and CODICE_FISCALE=aCnrEstr.CODICE_FISCALE
     and TI_PAGAMENTO=aCnrEstr.TI_PAGAMENTO
     and ESERCIZIO_COMPENSO=aCnrEstr.ESERCIZIO_COMPENSO
     and CD_IMPONIBILE=aCnrEstr.CD_IMPONIBILE
     and TI_ENTE_PERCIPIENTE=aCnrEstr.TI_ENTE_PERCIPIENTE
     and CD_CONTRIBUTO_RITENUTA=aCnrEstr.CD_CONTRIBUTO_RITENUTA;
 end;

 -- Processa il CORI per l'estrazione
 procedure processaCori(aLiquid liquid_cori%rowtype, aCori contributo_ritenuta%rowtype,aTSNow date,aUser varchar2) is
  aComp compenso%rowtype;
  aIdMatr number(8);
  aTratt tipo_trattamento%rowtype;
  aCdImp varchar2(2);
  aCnrEstr CNR_ESTRAZIONE_CORI%rowtype;
  DT_IN_COMP DATE;
  DT_FI_COMP DATE;
 begin
     Begin
 	select * into aComp
 	from compenso c
 	where ESERCIZIO=aCori.esercizio
        and CD_CDS=aCori.cd_cds
        and CD_UNITA_ORGANIZZATIVA=aCori.cd_unita_organizzativa
        and pg_compenso=aCori.pg_compenso
	and fl_compenso_stipendi = 'N'
	--AND CD_TERZO Not In (91165,91376)    -- per eliminare nel 2006 due casi errati
	--AND CD_TERZO Not In (91165)    -- per eliminare nel 2007 un caso errato
	--and cd_trattamento != 'T144'  -- invece di escludere i terzi escludiamo il trattamento
	and exists (Select 1 From tipo_rapporto
	            Where cd_tipo_rapporto = c.cd_tipo_rapporto
		      And ti_dipendente_altro = 'D' -- Rapporti dipendenza
	   	   )
 	for update nowait;

  	select * into aTratt
  	from tipo_trattamento
  	where cd_trattamento=aComp.cd_trattamento
        and dt_ini_validita<=aComp.dt_registrazione
        and dt_fin_validita>=aComp.dt_registrazione
        And (fl_stralcio_dip Is Null Or fl_stralcio_dip = 'Y')
  	for update nowait;

 	for aTipoCori in (Select * From tipo_contributo_ritenuta t
 	                  Where t.cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
 		            And t.dt_ini_validita = aCori.dt_ini_validita)
 	loop
	    If aCori.cd_contributo_ritenuta in('DS','DI') Then
		 aCdImp:='A1';
	    Elsif (aCori.cd_contributo_ritenuta like '%ADD' or aCori.cd_contributo_ritenuta like '%ADM') Then
		   aCdImp:='I1';
            Elsif aTipoCori.cd_classificazione_cori = 'PR' then
 	         aCdImp:='01';
            Elsif aTipoCori.cd_classificazione_cori = 'FI' then
 	       If aTratt.fl_tassazione_separata  = 'Y' then
		  If aComp.FL_COMPENSO_MINICARRIERA='Y' and aComp.FL_COMPENSO_MCARRIERA_TASSEP = 'Y'
		  -- fix errore 715
		  --   or aComp.FL_COMPENSO_MINICARRIERA='N'
		  Then
 		     aCdImp:='0F';
 		  Else
 		     aCdImp:='MF';
		  End If;
	       Else
 		  aCdImp:='MF';
 	       End If;
 	    Elsif aTipoCori.cd_classificazione_cori = 'IP' then
 	       aCdImp:='06';
            Else
 	       aCdImp:=':1';
            End If;
 	    Exit;
 	end loop;

	begin
   	    select distinct matricola_dipendente into aIdMatr
   	    from terzo t, rapporto r
   	    Where t.cd_terzo = aComp.cd_terzo
 	      and t.cd_anag = r.cd_anag
 	      and r.matricola_dipendente is not null;
        exception
           when NO_DATA_FOUND then
        	IBMERR001.RAISE_ERR_GENERICO('Matricola non trovata per terzo:'||aComp.cd_terzo);
           When Too_Many_Rows Then
                IBMERR001.RAISE_ERR_GENERICO('Matricola doppia per terzo:'||aComp.cd_terzo);
	end;

        aCnrEstr.CD_CDS:=aLiquid.cd_cds;
        aCnrEstr.ESERCIZIO:=aLiquid.esercizio;
        aCnrEstr.CD_UNITA_ORGANIZZATIVA:=aLiquid.cd_unita_organizzativa;
        aCnrEstr.PG_LIQUIDAZIONE:=aLiquid.pg_liquidazione;
        aCnrEstr.MATRICOLA:=aIdMatr;
        aCnrEstr.CODICE_FISCALE:=aComp.codice_fiscale;

        DT_IN_COMP:=aComp.dt_da_competenza_coge;
        DT_FI_COMP:=aComp.dt_a_competenza_coge;

        If aComp.FL_COMPENSO_MINICARRIERA='Y' And aComp.FL_COMPENSO_MCARRIERA_TASSEP = 'Y' Then
           --per la tassazione separata non distinguiamo anno corrente e anno precedente (anche perchè per il momento non esistono questi casi)
           aCnrEstr.TI_PAGAMENTO:=4;
           If (To_Char(DT_FI_COMP,'YYYY') > aLiquid.esercizio) then
           			aCnrEstr.ESERCIZIO_COMPENSO:=aLiquid.esercizio;
           		else
           			aCnrEstr.ESERCIZIO_COMPENSO:=To_Char(DT_FI_COMP,'YYYY');
           	end if;		
        Else
           --se la competenza del compenso è di anni precedenti
           If To_Char(DT_IN_COMP,'YYYY') < aLiquid.esercizio /*And
              To_Char(DT_FI_COMP,'YYYY') < aLiquid.esercizio*/ Then
              aCnrEstr.TI_PAGAMENTO:=5;
              aCnrEstr.ESERCIZIO_COMPENSO:=To_Char(DT_IN_COMP,'YYYY');
           Else
              --anche se la competenza è a cavallo tra anno precedente e anno corrente, la considero Anno Corrente
	      --il ti_pagamento deve essere sempre 1
              --If aComp.pg_missione is null Then
                 --aCnrEstr.TI_PAGAMENTO:=2;
              --Else
                 aCnrEstr.TI_PAGAMENTO:=1;
              --End If;
              If (To_Char(DT_FI_COMP,'YYYY') > aLiquid.esercizio) then
           			aCnrEstr.ESERCIZIO_COMPENSO:=aLiquid.esercizio;
           		else
           			aCnrEstr.ESERCIZIO_COMPENSO:=To_Char(DT_FI_COMP,'YYYY');
           	end if;		
           End If;
  	End if;

	/*Eliminato perchè gestite le date di competenza 23/11/2006*/
	/*
	-- Modifica per richiesta 712 12/12/2003
	if aComp.cd_trattamento in ('T092', 'T093', 'T094','T095') then
  	    aCnrEstr.ESERCIZIO_COMPENSO:=aCori.esercizio-1;
        else
  	    aCnrEstr.ESERCIZIO_COMPENSO:=aCori.esercizio;
        end if;
	*/

  	aCnrEstr.CD_IMPONIBILE:=aCdImp;
        aCnrEstr.TI_ENTE_PERCIPIENTE:=aCori.ti_ente_percipiente;
        aCnrEstr.CD_CONTRIBUTO_RITENUTA:=aCori.cd_contributo_ritenuta;

  	Begin
  	    getEstrazione(aCnrEstr);
  	    --prima dell'update devo valorizzare correttamente le date
  	    If aComp.dt_da_competenza_coge < aCnrEstr.DT_INIZIO_COMPENSO Then
  	       aCnrEstr.DT_INIZIO_COMPENSO:=aComp.dt_da_competenza_coge;
  	    End If;
  	    If aComp.dt_a_competenza_coge > aCnrEstr.DT_FINE_COMPENSO Then
               aCnrEstr.DT_FINE_COMPENSO:=aComp.dt_a_competenza_coge;
            End If;
            updateEstrazione(aCnrEstr, aComp, aCori);
  	Exception when NO_DATA_FOUND then
            aCnrEstr.DT_INIZIO:=aLiquid.dt_da;
            aCnrEstr.DT_FINE:=aLiquid.dt_a;
            aCnrEstr.IM_LORDO:=aComp.im_lordo_percipiente;
            aCnrEstr.IMPONIBILE:=aCori.imponibile;
            aCnrEstr.IM_RITENUTA:=aCori.ammontare;
            aCnrEstr.DT_SCARICO_VERSO_STIPENDI:=null;
            aCnrEstr.UTCR:=aUser;
            aCnrEstr.DACR:=aTSNow;
            aCnrEstr.UTUV:=aUser;
            aCnrEstr.DUVA:=aTSNow;
            aCnrEstr.PG_VER_REC:=1;
            aCnrEstr.DT_INIZIO_COMPENSO:=aComp.dt_da_competenza_coge;
            aCnrEstr.DT_FINE_COMPENSO:=aComp.dt_a_competenza_coge;
            ins_CNR_ESTRAZIONE_CORI (aCnrEstr);
        End;
     Exception when NO_DATA_FOUND then
       null; -- COMPENSO NON DI TIPO DIP (compenso non dipendenti)
     End;
 end;

procedure processaCoriMensile(aLiquid liquid_cori%rowtype, aMese NUMBER, aCori contributo_ritenuta%rowtype,aTSNow date,aUser varchar2) is
  aComp compenso%rowtype;
  aIdMatr number(8);
  aTratt tipo_trattamento%rowtype;
  aCdImp varchar2(2);
  aCnrEstr CNR_ESTRAZIONE_CORI%rowtype;
  DT_IN_COMP DATE;
  DT_FI_COMP DATE;
 begin
     Begin
 	select * into aComp
 	from compenso c
 	where ESERCIZIO=aCori.esercizio
        and CD_CDS=aCori.cd_cds
        and CD_UNITA_ORGANIZZATIVA=aCori.cd_unita_organizzativa
        and pg_compenso=aCori.pg_compenso
	and fl_compenso_stipendi = 'N'
	--AND CD_TERZO Not In (91165,91376)    -- per eliminare nel 2006 due casi errati
	--AND CD_TERZO Not In (91165)    -- per eliminare nel 2007 un caso errato
	--and cd_trattamento != 'T144'  -- invece di escludere i terzi escludiamo il trattamento
	and exists (Select 1 From tipo_rapporto
	            Where cd_tipo_rapporto = c.cd_tipo_rapporto
		      And ti_dipendente_altro = 'D' -- Rapporti dipendenza
	   	   )
 	for update nowait;

  	select * into aTratt
  	from tipo_trattamento
  	where cd_trattamento=aComp.cd_trattamento
        and dt_ini_validita<=aComp.dt_registrazione
        and dt_fin_validita>=aComp.dt_registrazione
        And (fl_stralcio_dip Is Null Or fl_stralcio_dip = 'Y')
  	for update nowait;

 	for aTipoCori in (Select * From tipo_contributo_ritenuta t
 	                  Where t.cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
 		            And t.dt_ini_validita = aCori.dt_ini_validita)
 	loop
	    If aCori.cd_contributo_ritenuta in('DS','DI') Then
		 aCdImp:='A1';
	    Elsif aCori.cd_contributo_ritenuta like '%ADD' Then
		 aCdImp:='I1';
            Elsif aTipoCori.cd_classificazione_cori = 'PR' then
 	         aCdImp:='01';
            Elsif aTipoCori.cd_classificazione_cori = 'FI' then
 	       If aTratt.fl_tassazione_separata  = 'Y' then
		  If aComp.FL_COMPENSO_MINICARRIERA='Y' and aComp.FL_COMPENSO_MCARRIERA_TASSEP = 'Y'
		  -- fix errore 715
		  --   or aComp.FL_COMPENSO_MINICARRIERA='N'
		  Then
 		     aCdImp:='0F';
 		  Else
 		     aCdImp:='MF';
		  End If;
	       Else
 		  aCdImp:='MF';
 	       End If;
 	    Elsif aTipoCori.cd_classificazione_cori = 'IP' then
 	       aCdImp:='06';
            Else
 	       aCdImp:=':1';
            End If;
 	    Exit;
 	end loop;

	begin
   	    select distinct matricola_dipendente into aIdMatr
   	    from terzo t, rapporto r
   	    Where t.cd_terzo = aComp.cd_terzo
 	      and t.cd_anag = r.cd_anag
 	      and r.matricola_dipendente is not null;
        exception
           when NO_DATA_FOUND then
        	IBMERR001.RAISE_ERR_GENERICO('Matricola non trovata per terzo:'||aComp.cd_terzo);
           When Too_Many_Rows Then
                IBMERR001.RAISE_ERR_GENERICO('Matricola doppia per terzo:'||aComp.cd_terzo);
	end;

        aCnrEstr.CD_CDS:=aLiquid.cd_cds;
        aCnrEstr.ESERCIZIO:=aLiquid.esercizio;
        aCnrEstr.CD_UNITA_ORGANIZZATIVA:=aLiquid.cd_unita_organizzativa;
        aCnrEstr.PG_LIQUIDAZIONE:=aLiquid.pg_liquidazione;
        aCnrEstr.MATRICOLA:=aIdMatr;
        aCnrEstr.CODICE_FISCALE:=aComp.codice_fiscale;
				aCnrEstr.MESE:=aMese;

        DT_IN_COMP:=aComp.dt_da_competenza_coge;
        DT_FI_COMP:=aComp.dt_a_competenza_coge;

        If aComp.FL_COMPENSO_MINICARRIERA='Y' And aComp.FL_COMPENSO_MCARRIERA_TASSEP = 'Y' Then
           --per la tassazione separata non distinguiamo anno corrente e anno precedente (anche perchè per il momento non esistono questi casi)
           aCnrEstr.TI_PAGAMENTO:=4;
           if (To_Char(DT_FI_COMP,'YYYY')> aComp.esercizio) then			
              	aCnrEstr.ESERCIZIO_COMPENSO:=aComp.esercizio;
              else
              	aCnrEstr.ESERCIZIO_COMPENSO:=To_Char(DT_FI_COMP,'YYYY');
            end if;	
        Else
           --se la competenza del compenso è di anni precedenti
           If To_Char(DT_IN_COMP,'YYYY') < aLiquid.esercizio /*And
              To_Char(DT_FI_COMP,'YYYY') < aLiquid.esercizio*/ Then
              aCnrEstr.TI_PAGAMENTO:=5;
              aCnrEstr.ESERCIZIO_COMPENSO:=To_Char(DT_IN_COMP,'YYYY');
           Else
              --anche se la competenza è a cavallo tra anno precedente e anno corrente, la considero Anno Corrente
	      --il ti_pagamento deve essere sempre 1
              --If aComp.pg_missione is null Then
                 --aCnrEstr.TI_PAGAMENTO:=2;
              --Else
                 aCnrEstr.TI_PAGAMENTO:=1;
              --End If;
              if (To_Char(DT_FI_COMP,'YYYY')> aComp.esercizio) then			
              	aCnrEstr.ESERCIZIO_COMPENSO:=aComp.esercizio;
              else
              	aCnrEstr.ESERCIZIO_COMPENSO:=To_Char(DT_FI_COMP,'YYYY');
              end if;	
           End If;
  	End if;

	/*Eliminato perchè gestite le date di competenza 23/11/2006*/
	/*
	-- Modifica per richiesta 712 12/12/2003
	if aComp.cd_trattamento in ('T092', 'T093', 'T094','T095') then
  	    aCnrEstr.ESERCIZIO_COMPENSO:=aCori.esercizio-1;
        else
  	    aCnrEstr.ESERCIZIO_COMPENSO:=aCori.esercizio;
        end if;
	*/

  	aCnrEstr.CD_IMPONIBILE:=aCdImp;
        aCnrEstr.TI_ENTE_PERCIPIENTE:=aCori.ti_ente_percipiente;
        aCnrEstr.CD_CONTRIBUTO_RITENUTA:=aCori.cd_contributo_ritenuta;

  	Begin
  	    getEstrazione(aCnrEstr);
  	    --prima dell'update devo valorizzare correttamente le date
  	    If aComp.dt_da_competenza_coge < aCnrEstr.DT_INIZIO_COMPENSO Then
  	       aCnrEstr.DT_INIZIO_COMPENSO:=aComp.dt_da_competenza_coge;
  	    End If;
  	    If aComp.dt_a_competenza_coge > aCnrEstr.DT_FINE_COMPENSO Then
               aCnrEstr.DT_FINE_COMPENSO:=aComp.dt_a_competenza_coge;
            End If;
            updateEstrazione(aCnrEstr, aComp, aCori);
  	Exception when NO_DATA_FOUND then
            aCnrEstr.DT_INIZIO:=aLiquid.dt_da;
            aCnrEstr.DT_FINE:=aLiquid.dt_a;
            aCnrEstr.IM_LORDO:=aComp.im_lordo_percipiente;
            aCnrEstr.IMPONIBILE:=aCori.imponibile;
            aCnrEstr.IM_RITENUTA:=aCori.ammontare;
            aCnrEstr.IM_CORI_SOSPESO:=aCori.im_cori_sospeso;
            aCnrEstr.DT_SCARICO_VERSO_STIPENDI:=null;
            aCnrEstr.UTCR:=aUser;
            aCnrEstr.DACR:=aTSNow;
            aCnrEstr.UTUV:=aUser;
            aCnrEstr.DUVA:=aTSNow;
            aCnrEstr.PG_VER_REC:=1;
            aCnrEstr.DT_INIZIO_COMPENSO:=aComp.dt_da_competenza_coge;
            aCnrEstr.DT_FINE_COMPENSO:=aComp.dt_a_competenza_coge;
            ins_CNR_ESTRAZIONE_CORI (aCnrEstr);
        End;
     Exception when NO_DATA_FOUND then
       null; -- COMPENSO NON DI TIPO DIP (compenso non dipendenti) oppure trattamento non valido
     End;
 end;

 procedure aggregaDettLiquid(aEs number, aTSNow date,aUser varchar2) is
  aAgg CNR_ESTRAZIONE_CORI_AGG%rowtype;
  aPgRiga number;
  aOldAgg CNR_ESTRAZIONE_CORI%rowtype;
 begin
  lock table CNR_ESTRAZIONE_CORI in exclusive mode nowait;
  aPgRiga:=0;
  aOldAgg:=null;
  for aTAgg in (select
                ESERCIZIO,
                MATRICOLA,
                'XXX' CODICE_FISCALE,
		TI_PAGAMENTO,
                ESERCIZIO_COMPENSO,
                CD_IMPONIBILE,
                TI_ENTE_PERCIPIENTE,
                CD_CONTRIBUTO_RITENUTA,
                sum(IM_LORDO) im_lordo,
                sum(IMPONIBILE) imponibile,
                sum(IM_RITENUTA) im_ritenuta,
                Min(DT_INIZIO_COMPENSO) dt_inizio_compenso,
                Decode(ESERCIZIO_COMPENSO,ESERCIZIO,Max(DT_FINE_COMPENSO),To_Date('31/12/'||ESERCIZIO_COMPENSO,'DD/MM/YYYY')) dt_fine_compenso
                --Max(DT_FINE_COMPENSO) dt_fine_compenso
  from CNR_ESTRAZIONE_CORI
  where
        esercizio = aEs
	and DT_SCARICO_VERSO_STIPENDI is null
    group By    ESERCIZIO,
                MATRICOLA,
--              CODICE_FISCALE,
		TI_PAGAMENTO,
                ESERCIZIO_COMPENSO,
                CD_IMPONIBILE,
                TI_ENTE_PERCIPIENTE,
                CD_CONTRIBUTO_RITENUTA
    order By    ESERCIZIO,
                MATRICOLA,
--              CODICE_FISCALE,
		TI_PAGAMENTO,
                ESERCIZIO_COMPENSO,
                CD_IMPONIBILE,
                TI_ENTE_PERCIPIENTE,
                CD_CONTRIBUTO_RITENUTA
  ) loop
     if
	     aOldAgg.esercizio is null
	  or (
	        aTAgg.ESERCIZIO != aOldAgg.esercizio
          	or aTAgg.MATRICOLA != aOldAgg.matricola
          	or aTAgg.CODICE_FISCALE != aOldAgg.codice_fiscale
		or aTAgg.TI_PAGAMENTO != aOldAgg.ti_pagamento
		or aTAgg.ESERCIZIO_COMPENSO != aOldAgg.ESERCIZIO_COMPENSO
	     )
	 then
         aOldAgg.ESERCIZIO:=aTAgg.esercizio;
         aOldAgg.MATRICOLA:=aTAgg.matricola;
      	 aOldAgg.CODICE_FISCALE:=aTAgg.codice_fiscale;
      	 aOldAgg.TI_PAGAMENTO:=aTAgg.ti_pagamento;
      	 aOldAgg.ESERCIZIO_COMPENSO := aTAgg.ESERCIZIO_COMPENSO;
      	 aPgRiga:=0;
     end if;
     aPgRiga:=aPgRiga+1;
     aAgg.DT_ESTRAZIONE:=aTSNow;
     aAgg.ESERCIZIO:=aTAgg.ESERCIZIO;
     aAgg.MATRICOLA:=aTAgg.MATRICOLA;
     aAgg.CODICE_FISCALE:=aTAgg.CODICE_FISCALE;
     aAgg.TI_PAGAMENTO:=aTAgg.TI_PAGAMENTO;
     aAgg.ESERCIZIO_COMPENSO:=aTAgg.ESERCIZIO_COMPENSO;
     aAgg.CD_IMPONIBILE:=aTAgg.CD_IMPONIBILE;
     aAgg.TI_ENTE_PERCIPIENTE:=aTAgg.TI_ENTE_PERCIPIENTE;
     aAgg.CD_CONTRIBUTO_RITENUTA:=aTAgg.CD_CONTRIBUTO_RITENUTA;
     aAgg.IM_LORDO:=aTAgg.IM_LORDO;
     aAgg.IMPONIBILE:=aTAgg.IMPONIBILE;
     aAgg.IM_RITENUTA:=aTAgg.IM_RITENUTA;
     aAgg.pg_riga:=aPgRiga;
     aAgg.UTCR:=aUser;
     aAgg.DACR:=aTSNow;
     aAgg.UTUV:=aUser;
     aAgg.DUVA:=aTSNow;
     aAgg.PG_VER_REC:=1;
     aAgg.DT_INIZIO_COMPENSO:=aTAgg.DT_INIZIO_COMPENSO;
     aAgg.DT_FINE_COMPENSO:=aTAgg.DT_FINE_COMPENSO;
	 ins_CNR_ESTRAZIONE_CORI_AGG(aAgg);
  end loop;
  update CNR_ESTRAZIONE_CORI set
   DT_SCARICO_VERSO_STIPENDI=aTSNow,
   duva=aTSNow,
   utuv=aUser,
   pg_ver_rec=pg_ver_rec+1
  Where esercizio = aEs
    and DT_SCARICO_VERSO_STIPENDI is null;
 end;

procedure aggregaDettLiquidMensile(aEs number, aMese NUMBER, aTSNow date,aUser varchar2) is
  aAgg CNR_ESTRAZIONE_CORI_AGG%rowtype;
  aPgRiga number;
  aOldAgg CNR_ESTRAZIONE_CORI%rowtype;
 begin
  lock table CNR_ESTRAZIONE_CORI in exclusive mode nowait;
  aPgRiga:=0;
  aOldAgg:=null;
  for aTAgg in (select
                ESERCIZIO,
                MATRICOLA,
                'XXX' CODICE_FISCALE,
		TI_PAGAMENTO,
                ESERCIZIO_COMPENSO,
                CD_IMPONIBILE,
                TI_ENTE_PERCIPIENTE,
                CD_CONTRIBUTO_RITENUTA,
                sum(IM_LORDO) im_lordo,
                sum(IMPONIBILE) imponibile,
                sum(IM_RITENUTA) im_ritenuta,
                Sum(IM_CORI_SOSPESO) im_cori_sospeso,
                Min(DT_INIZIO_COMPENSO) dt_inizio_compenso,
                Decode(ESERCIZIO_COMPENSO,ESERCIZIO,Max(DT_FINE_COMPENSO),To_Date('31/12/'||ESERCIZIO_COMPENSO,'DD/MM/YYYY')) dt_fine_compenso
                --Max(DT_FINE_COMPENSO) dt_fine_compenso
  from CNR_ESTRAZIONE_CORI
  where
        esercizio = aEs
        And mese = aMese
	and DT_SCARICO_VERSO_STIPENDI is null
    group By    ESERCIZIO,
                MATRICOLA,
--              CODICE_FISCALE,
		TI_PAGAMENTO,
                ESERCIZIO_COMPENSO,
                CD_IMPONIBILE,
                TI_ENTE_PERCIPIENTE,
                CD_CONTRIBUTO_RITENUTA
    order By    ESERCIZIO,
                MATRICOLA,
--              CODICE_FISCALE,
		TI_PAGAMENTO,
                ESERCIZIO_COMPENSO,
                CD_IMPONIBILE,
                TI_ENTE_PERCIPIENTE,
                CD_CONTRIBUTO_RITENUTA
  ) loop
     if
	     aOldAgg.esercizio is null
	  or (
	        aTAgg.ESERCIZIO != aOldAgg.esercizio
          	or aTAgg.MATRICOLA != aOldAgg.matricola
          	or aTAgg.CODICE_FISCALE != aOldAgg.codice_fiscale
		or aTAgg.TI_PAGAMENTO != aOldAgg.ti_pagamento
		or aTAgg.ESERCIZIO_COMPENSO != aOldAgg.ESERCIZIO_COMPENSO
	     )
	 then
         aOldAgg.ESERCIZIO:=aTAgg.esercizio;
         aOldAgg.MATRICOLA:=aTAgg.matricola;
      	 aOldAgg.CODICE_FISCALE:=aTAgg.codice_fiscale;
      	 aOldAgg.TI_PAGAMENTO:=aTAgg.ti_pagamento;
      	 aOldAgg.ESERCIZIO_COMPENSO := aTAgg.ESERCIZIO_COMPENSO;
      	 aPgRiga:=0;
     end if;
     aPgRiga:=aPgRiga+1;
     aAgg.DT_ESTRAZIONE:=aTSNow;
     aAgg.ESERCIZIO:=aTAgg.ESERCIZIO;
     aAgg.MATRICOLA:=aTAgg.MATRICOLA;
     aAgg.CODICE_FISCALE:=aTAgg.CODICE_FISCALE;
     aAgg.MESE:=aMese;
     aAgg.TI_PAGAMENTO:=aTAgg.TI_PAGAMENTO;
     aAgg.ESERCIZIO_COMPENSO:=aTAgg.ESERCIZIO_COMPENSO;
     aAgg.CD_IMPONIBILE:=aTAgg.CD_IMPONIBILE;
     aAgg.TI_ENTE_PERCIPIENTE:=aTAgg.TI_ENTE_PERCIPIENTE;
     aAgg.CD_CONTRIBUTO_RITENUTA:=aTAgg.CD_CONTRIBUTO_RITENUTA;
     aAgg.IM_LORDO:=aTAgg.IM_LORDO;
     aAgg.IMPONIBILE:=aTAgg.IMPONIBILE;
     aAgg.IM_RITENUTA:=aTAgg.IM_RITENUTA;
     aAgg.IM_CORI_SOSPESO:=aTAgg.IM_CORI_SOSPESO;
     aAgg.pg_riga:=aPgRiga;
     aAgg.UTCR:=aUser;
     aAgg.DACR:=aTSNow;
     aAgg.UTUV:=aUser;
     aAgg.DUVA:=aTSNow;
     aAgg.PG_VER_REC:=1;
     aAgg.DT_INIZIO_COMPENSO:=aTAgg.DT_INIZIO_COMPENSO;
     aAgg.DT_FINE_COMPENSO:=aTAgg.DT_FINE_COMPENSO;
	 ins_CNR_ESTRAZIONE_CORI_AGG(aAgg);
  end loop;
  update CNR_ESTRAZIONE_CORI set
   DT_SCARICO_VERSO_STIPENDI=aTSNow,
   duva=aTSNow,
   utuv=aUser,
   pg_ver_rec=pg_ver_rec+1
  Where esercizio = aEs
    and DT_SCARICO_VERSO_STIPENDI is null;
 end;


 procedure scaricaDettLiquid(aLiquid liquid_cori%rowtype,aTSNow date,aUser varchar2) is
  aNum number;
  aCnrEstr CNR_ESTRAZIONE_CORI%rowtype;
  aCori contributo_ritenuta%rowtype;
  dt_in_comp   DATE;
  dt_fi_comp   DATE;
 begin
  begin
   select distinct 1 into aNum from CNR_ESTRAZIONE_CORI where
        esercizio = aLiquid.esercizio
    and cd_cds = aLiquid.cd_cds
    and cd_unita_organizzativa = aLiquid.cd_unita_organizzativa
    and pg_liquidazione = aLiquid.pg_liquidazione;
   IBMERR001.RAISE_ERR_GENERICO('Estrazione già effettuata per liquidazione n.'||aLiquid.pg_liquidazione||' es.'||aLiquid.esercizio||' cds:'||aLiquid.cd_cds||' uo:'||aLiquid.cd_unita_organizzativa);
  exception when NO_DATA_FOUND then
   null;
  end;

  for aLiqLoc in (select * from liquid_gruppo_cori where
       esercizio = aLiquid.esercizio
   and cd_cds = aLiquid.cd_cds
   and cd_unita_organizzativa = aLiquid.cd_unita_organizzativa
   and pg_liquidazione = aLiquid.pg_liquidazione
   and cd_cds = cd_cds_origine
   for update nowait
  ) Loop
   	for aLiqDett in (select * from liquid_gruppo_cori_det
   			 Where CD_CDS=aLiqLoc.cd_cds
    			   and ESERCIZIO=aLiqLoc.esercizio
    			   and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
    			   and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
                    	   and CD_CDS_ORIGINE=aLiqLoc.cd_cds_origine
    			   and CD_UO_ORIGINE=aLiqLoc.cd_uo_origine
    	   		   and PG_LIQUIDAZIONE_ORIGINE=aLiqLoc.pg_liquidazione_origine
    			   and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
    			   and CD_REGIONE=aLiqLoc.cd_regione
    			   and PG_COMUNE=aLiqLoc.pg_comune
    			   and cd_contributo_ritenuta not like 'STI%'
    			 for update nowait
   	) loop
 	  	select * into aCori from contributo_ritenuta
 	  	where CD_CDS=aLiqDett.cd_cds_origine
       	 	  and CD_UNITA_ORGANIZZATIVA=aLiqDett.cd_uo_origine
       		  and ESERCIZIO=aLiqDett.esercizio_contributo_ritenuta
       		  and PG_COMPENSO=aLiqDett.pg_compenso
       		  and CD_CONTRIBUTO_RITENUTA=aLiqDett.cd_contributo_ritenuta
       		  and TI_ENTE_PERCIPIENTE=aLiqDett.ti_ente_percipiente
 	  	for update nowait;
      		processaCori(aLiquid, aCori,aTSNow,aUser);
   	  end loop;
    End loop;

  for aGruppoCentro in (select * from liquid_gruppo_centro
  			where esercizio = aLiquid.esercizio
    			  and cd_cds_lc = aLiquid.cd_cds
    			  and cd_uo_lc = aLiquid.cd_unita_organizzativa
    			  and pg_lc = aLiquid.pg_liquidazione
    			for update nowait
  ) loop
   	for aLiqLoc in (select * from liquid_gruppo_cori
   			where esercizio=aGruppoCentro.esercizio
    			  and cd_gruppo_cr=aGruppoCentro.cd_gruppo_cr
    			  and cd_regione=aGruppoCentro.cd_regione
    			  and pg_comune=aGruppoCentro.pg_comune
    			  and pg_gruppo_centro=aGruppoCentro.pg_gruppo_centro
			for update nowait
   	) loop
   	     begin
	 	select 1 into aNum
	 	from liquid_cori_interf_cds
	 	where cd_cds=aLiqLoc.cd_cds
		  and esercizio=aLiqLoc.esercizio;

	 	for aLiqIntDett in (select * from liquid_cori_interf_dett
	 			    Where CD_CDS=aLiqLoc.cd_cds
      				      and ESERCIZIO=aLiqLoc.esercizio
      				      and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
      				      and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
      				      and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
      				      and CD_REGIONE=aLiqLoc.cd_regione
      				      and PG_COMUNE=aLiqLoc.pg_comune
	  			      and DT_SCARICO_VERSO_STIPENDI is null
      				    for update nowait
	 	) loop
      			aCnrEstr.CD_CDS:=aLiquid.CD_CDS;
      			aCnrEstr.ESERCIZIO:=aLiquid.ESERCIZIO;
      			aCnrEstr.CD_UNITA_ORGANIZZATIVA:=aLiquid.CD_UNITA_ORGANIZZATIVA;
      			aCnrEstr.PG_LIQUIDAZIONE:=aLiquid.PG_LIQUIDAZIONE;

      			aCnrEstr.MATRICOLA:=aLiqIntDett.MATRICOLA;
      			aCnrEstr.CODICE_FISCALE:=aLiqIntDett.CODICE_FISCALE;
      			If aLiqIntDett.TI_PAGAMENTO = '4' Then   --Tassazione separata
      			    aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      			else
      			    If aLiqIntDett.ESERCIZIO_COMPENSO = aLiquid.ESERCIZIO Then   --Anno corrente
      				If aLiqIntDett.TI_PAGAMENTO = '2' Then
      			   	   aCnrEstr.TI_PAGAMENTO:= '1';
      				Else
      			   	   aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      				End If;
      			    Else   --Anno precedente
      				aCnrEstr.TI_PAGAMENTO:= '5';
      			    End If;
      			end If;
      			aCnrEstr.ESERCIZIO_COMPENSO:=aLiqIntDett.ESERCIZIO_COMPENSO;
      			aCnrEstr.CD_IMPONIBILE:=aLiqIntDett.CD_IMPONIBILE;
      			aCnrEstr.TI_ENTE_PERCIPIENTE:=aLiqIntDett.TI_ENTE_PERCIPIENTE;
      			aCnrEstr.CD_CONTRIBUTO_RITENUTA:=aLiqIntDett.CD_CONTRIBUTO_RITENUTA;
      			dt_in_comp:= Nvl(aLiqIntDett.DT_INIZIO_COMPENSO,To_Date('01/01/'||To_Char(aCnrEstr.ESERCIZIO_COMPENSO),'DD/MM/YYYY'));
      			dt_fi_comp:= Nvl(aLiqIntDett.DT_FINE_COMPENSO,To_Date('31/12/'||To_Char(aCnrEstr.ESERCIZIO_COMPENSO),'DD/MM/YYYY'));

	  		begin
 	   		    getEstrazione(aCnrEstr);
 	   		    --prima dell'update devo valorizzare correttamente le date
 	   		    If dt_in_comp < aCnrEstr.DT_INIZIO_COMPENSO Then
  	       			aCnrEstr.DT_INIZIO_COMPENSO:=dt_in_comp;
  	    		    End If;
  	    		    If dt_fi_comp > aCnrEstr.DT_FINE_COMPENSO Then
               			aCnrEstr.DT_FINE_COMPENSO:=dt_fi_comp;
            		    End If;
       			    updateEstrazione(aCnrEstr, aLiqIntDett);
 	  		exception
 	  		  When NO_DATA_FOUND then
       				aCnrEstr.DT_INIZIO:=aLiquid.dt_da;
       				aCnrEstr.DT_FINE:=aLiquid.dt_a;
       				aCnrEstr.IM_LORDO:=aLiqIntDett.IM_LORDO;
       				aCnrEstr.IMPONIBILE:=aLiqIntDett.IMPONIBILE;
       				aCnrEstr.IM_RITENUTA:=aLiqIntDett.IM_RITENUTA;
       				aCnrEstr.DT_SCARICO_VERSO_STIPENDI:=null;
       				aCnrEstr.UTCR:=aUser;
       				aCnrEstr.DACR:=aTSNow;
       				aCnrEstr.UTUV:=aUser;
       				aCnrEstr.DUVA:=aTSNow;
       				aCnrEstr.PG_VER_REC:=1;
       				aCnrEstr.DT_INIZIO_COMPENSO:=dt_in_comp;
       				aCnrEstr.DT_FINE_COMPENSO:=dt_fi_comp;

       				ins_CNR_ESTRAZIONE_CORI (aCnrEstr);
      			end;
	  		update liquid_cori_interf_dett
	  		set DT_SCARICO_VERSO_STIPENDI=trunc(aTSNow)
	  		where CD_CDS=aLiqIntDett.CD_CDS
       			  and ESERCIZIO=aLiqIntDett.ESERCIZIO
       			  and CD_UNITA_ORGANIZZATIVA=aLiqIntDett.CD_UNITA_ORGANIZZATIVA
       			  and PG_LIQUIDAZIONE=aLiqIntDett.PG_LIQUIDAZIONE
       			  and MATRICOLA=aLiqIntDett.MATRICOLA
       			  and CODICE_FISCALE=aLiqIntDett.CODICE_FISCALE
       			  and TI_PAGAMENTO=aLiqIntDett.TI_PAGAMENTO
       			  and ESERCIZIO_COMPENSO=aLiqIntDett.ESERCIZIO_COMPENSO
       			  and CD_IMPONIBILE=aLiqIntDett.CD_IMPONIBILE
       			  and TI_ENTE_PERCIPIENTE=aLiqIntDett.TI_ENTE_PERCIPIENTE
       			  and CD_CONTRIBUTO_RITENUTA=aLiqIntDett.CD_CONTRIBUTO_RITENUTA;
     		end loop;
	    exception when NO_DATA_FOUND Then      --non e' un cds proveniente da interfaccia
     		for aLiqDett in (select * from liquid_gruppo_cori_det
     				 Where CD_CDS=aLiqLoc.cd_cds
      				   and ESERCIZIO=aLiqLoc.esercizio
      				   and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
      				   and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
      				   and CD_CDS_ORIGINE=aLiqLoc.cd_cds_origine
      				   and CD_UO_ORIGINE=aLiqLoc.cd_uo_origine
      				   and PG_LIQUIDAZIONE_ORIGINE=aLiqLoc.pg_liquidazione_origine
      				   and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
      				   and CD_REGIONE=aLiqLoc.cd_regione
      				   and PG_COMUNE=aLiqLoc.pg_comune
      				   and cd_contributo_ritenuta not like 'STI%'
      				 for update nowait
	 	) loop
 	  		select * into aCori from contributo_ritenuta
 	  		where CD_CDS=aLiqDett.cd_cds
       			  and CD_UNITA_ORGANIZZATIVA=aLiqDett.cd_unita_organizzativa
       			  and ESERCIZIO=aLiqDett.esercizio_contributo_ritenuta
       			  and PG_COMPENSO=aLiqDett.pg_compenso
       			  and CD_CONTRIBUTO_RITENUTA=aLiqDett.cd_contributo_ritenuta
       			  and TI_ENTE_PERCIPIENTE=aLiqDett.ti_ente_percipiente
 	  		for update nowait;
      			processaCori(aLiquid,aCori,aTSNow,aUser);
	 	end loop;
    	    end; -- Fine gestione NON da interfaccia
	end loop;
   end loop;
 end;

 procedure scaricaDettLiquidMensile(aLiquid liquid_cori%rowtype, aMese NUMBER,aTSNow date,aUser varchar2) is
  aNum number;
  aCnrEstr CNR_ESTRAZIONE_CORI%rowtype;
  aCori contributo_ritenuta%rowtype;
  dt_in_comp   DATE;
  dt_fi_comp   DATE;
 begin
  begin
   select distinct 1 into aNum from CNR_ESTRAZIONE_CORI where
        esercizio = aLiquid.esercizio
    and cd_cds = aLiquid.cd_cds
    and cd_unita_organizzativa = aLiquid.cd_unita_organizzativa
    and pg_liquidazione = aLiquid.pg_liquidazione;
   IBMERR001.RAISE_ERR_GENERICO('Estrazione già effettuata per liquidazione n.'||aLiquid.pg_liquidazione||' es.'||aLiquid.esercizio||' cds:'||aLiquid.cd_cds||' uo:'||aLiquid.cd_unita_organizzativa);
  exception when NO_DATA_FOUND then
   null;
  end;

  for aLiqLoc in (select * from liquid_gruppo_cori where
       esercizio = aLiquid.esercizio
   and cd_cds = aLiquid.cd_cds
   and cd_unita_organizzativa = aLiquid.cd_unita_organizzativa
   and pg_liquidazione = aLiquid.pg_liquidazione
   --and cd_cds = cd_cds_origine
   and (
        (cd_cds = cnrctb020.getcdCDSSACValido(aLiquid.esercizio) and cd_cds = cd_cds_origine)
        or
        (cd_cds = cnrctb020.getCDCDSENTE(aLiquid.esercizio) and cd_cds != cd_cds_origine)
        )
   for update nowait
  ) Loop
   	for aLiqDett in (select * from liquid_gruppo_cori_det
   			 Where CD_CDS=aLiqLoc.cd_cds
    			   and ESERCIZIO=aLiqLoc.esercizio
    			   and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
    			   and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
                    	   and CD_CDS_ORIGINE=aLiqLoc.cd_cds_origine
    			   and CD_UO_ORIGINE=aLiqLoc.cd_uo_origine
    	   		   and PG_LIQUIDAZIONE_ORIGINE=aLiqLoc.pg_liquidazione_origine
    			   and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
    			   and CD_REGIONE=aLiqLoc.cd_regione
    			   and PG_COMUNE=aLiqLoc.pg_comune
    			   and cd_contributo_ritenuta not like 'STI%'
    			 for update nowait
   	) loop
 	  	select * into aCori from contributo_ritenuta
 	  	where CD_CDS=aLiqDett.cd_cds_origine
       	 	  and CD_UNITA_ORGANIZZATIVA=aLiqDett.cd_uo_origine
       		  and ESERCIZIO=aLiqDett.esercizio_contributo_ritenuta
       		  and PG_COMPENSO=aLiqDett.pg_compenso
       		  and CD_CONTRIBUTO_RITENUTA=aLiqDett.cd_contributo_ritenuta
       		  and TI_ENTE_PERCIPIENTE=aLiqDett.ti_ente_percipiente
 	  	for update nowait;
      		processaCoriMensile(aLiquid, aMese, aCori,aTSNow,aUser);
   	  end loop;
    End loop;

  for aGruppoCentro in (select * from liquid_gruppo_centro
  			where esercizio = aLiquid.esercizio
    			  and cd_cds_lc = aLiquid.cd_cds
    			  and cd_uo_lc = aLiquid.cd_unita_organizzativa
    			  and pg_lc = aLiquid.pg_liquidazione
    			for update nowait
  ) loop
   	for aLiqLoc in (select * from liquid_gruppo_cori
   			where esercizio=aGruppoCentro.esercizio
    			  and cd_gruppo_cr=aGruppoCentro.cd_gruppo_cr
    			  and cd_regione=aGruppoCentro.cd_regione
    			  and pg_comune=aGruppoCentro.pg_comune
    			  and pg_gruppo_centro=aGruppoCentro.pg_gruppo_centro
			for update nowait
   	) loop
   	     begin
	 	select 1 into aNum
	 	from liquid_cori_interf_cds
	 	where cd_cds=aLiqLoc.cd_cds
		  and esercizio=aLiqLoc.esercizio;

	 	for aLiqIntDett in (select * from liquid_cori_interf_dett
	 			    Where CD_CDS=aLiqLoc.cd_cds
      				      and ESERCIZIO=aLiqLoc.esercizio
      				      and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
      				      and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
      				      and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
      				      and CD_REGIONE=aLiqLoc.cd_regione
      				      and PG_COMUNE=aLiqLoc.pg_comune
	  			      and DT_SCARICO_VERSO_STIPENDI is null
      				    for update nowait
	 	) loop
      			aCnrEstr.CD_CDS:=aLiquid.CD_CDS;
      			aCnrEstr.ESERCIZIO:=aLiquid.ESERCIZIO;
      			aCnrEstr.CD_UNITA_ORGANIZZATIVA:=aLiquid.CD_UNITA_ORGANIZZATIVA;
      			aCnrEstr.PG_LIQUIDAZIONE:=aLiquid.PG_LIQUIDAZIONE;

      			aCnrEstr.MATRICOLA:=aLiqIntDett.MATRICOLA;
      			aCnrEstr.CODICE_FISCALE:=aLiqIntDett.CODICE_FISCALE;
      			aCnrEstr.MESE:=aMese;

      			If aLiqIntDett.TI_PAGAMENTO = '4' Then   --Tassazione separata
      			    aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      			else
      			    If aLiqIntDett.ESERCIZIO_COMPENSO = aLiquid.ESERCIZIO Then   --Anno corrente
      				If aLiqIntDett.TI_PAGAMENTO = '2' Then
      			   	   aCnrEstr.TI_PAGAMENTO:= '1';
      				Else
      			   	   aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      				End If;
      			    Else   --Anno precedente
      				aCnrEstr.TI_PAGAMENTO:= '5';
      			    End If;
      			end If;
      			aCnrEstr.ESERCIZIO_COMPENSO:=aLiqIntDett.ESERCIZIO_COMPENSO;
      			aCnrEstr.CD_IMPONIBILE:=aLiqIntDett.CD_IMPONIBILE;
      			aCnrEstr.TI_ENTE_PERCIPIENTE:=aLiqIntDett.TI_ENTE_PERCIPIENTE;
      			aCnrEstr.CD_CONTRIBUTO_RITENUTA:=aLiqIntDett.CD_CONTRIBUTO_RITENUTA;
      			dt_in_comp:= Nvl(aLiqIntDett.DT_INIZIO_COMPENSO,To_Date('01/01/'||To_Char(aCnrEstr.ESERCIZIO_COMPENSO),'DD/MM/YYYY'));
      			dt_fi_comp:= Nvl(aLiqIntDett.DT_FINE_COMPENSO,To_Date('31/12/'||To_Char(aCnrEstr.ESERCIZIO_COMPENSO),'DD/MM/YYYY'));

	  		begin
 	   		    getEstrazione(aCnrEstr);
 	   		    --prima dell'update devo valorizzare correttamente le date
 	   		    If dt_in_comp < aCnrEstr.DT_INIZIO_COMPENSO Then
  	       			aCnrEstr.DT_INIZIO_COMPENSO:=dt_in_comp;
  	    		    End If;
  	    		    If dt_fi_comp > aCnrEstr.DT_FINE_COMPENSO Then
               			aCnrEstr.DT_FINE_COMPENSO:=dt_fi_comp;
            		    End If;
       			    updateEstrazione(aCnrEstr, aLiqIntDett);
 	  		exception
 	  		  When NO_DATA_FOUND then
       				aCnrEstr.DT_INIZIO:=aLiquid.dt_da;
       				aCnrEstr.DT_FINE:=aLiquid.dt_a;
       				aCnrEstr.IM_LORDO:=aLiqIntDett.IM_LORDO;
       				aCnrEstr.IMPONIBILE:=aLiqIntDett.IMPONIBILE;
       				aCnrEstr.IM_RITENUTA:=aLiqIntDett.IM_RITENUTA;
       				aCnrEstr.DT_SCARICO_VERSO_STIPENDI:=null;
       				aCnrEstr.UTCR:=aUser;
       				aCnrEstr.DACR:=aTSNow;
       				aCnrEstr.UTUV:=aUser;
       				aCnrEstr.DUVA:=aTSNow;
       				aCnrEstr.PG_VER_REC:=1;
       				aCnrEstr.DT_INIZIO_COMPENSO:=dt_in_comp;
       				aCnrEstr.DT_FINE_COMPENSO:=dt_fi_comp;

       				ins_CNR_ESTRAZIONE_CORI (aCnrEstr);
      			end;
	  		update liquid_cori_interf_dett
	  		set DT_SCARICO_VERSO_STIPENDI=trunc(aTSNow)
	  		where CD_CDS=aLiqIntDett.CD_CDS
       			  and ESERCIZIO=aLiqIntDett.ESERCIZIO
       			  and CD_UNITA_ORGANIZZATIVA=aLiqIntDett.CD_UNITA_ORGANIZZATIVA
       			  and PG_LIQUIDAZIONE=aLiqIntDett.PG_LIQUIDAZIONE
       			  and MATRICOLA=aLiqIntDett.MATRICOLA
       			  and CODICE_FISCALE=aLiqIntDett.CODICE_FISCALE
       			  and TI_PAGAMENTO=aLiqIntDett.TI_PAGAMENTO
       			  and ESERCIZIO_COMPENSO=aLiqIntDett.ESERCIZIO_COMPENSO
       			  and CD_IMPONIBILE=aLiqIntDett.CD_IMPONIBILE
       			  and TI_ENTE_PERCIPIENTE=aLiqIntDett.TI_ENTE_PERCIPIENTE
       			  and CD_CONTRIBUTO_RITENUTA=aLiqIntDett.CD_CONTRIBUTO_RITENUTA;
     		end loop;
	    exception when NO_DATA_FOUND Then      --non e' un cds proveniente da interfaccia
     		for aLiqDett in (select * from liquid_gruppo_cori_det
     				 Where CD_CDS=aLiqLoc.cd_cds
      				   and ESERCIZIO=aLiqLoc.esercizio
      				   and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
      				   and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
      				   and CD_CDS_ORIGINE=aLiqLoc.cd_cds_origine
      				   and CD_UO_ORIGINE=aLiqLoc.cd_uo_origine
      				   and PG_LIQUIDAZIONE_ORIGINE=aLiqLoc.pg_liquidazione_origine
      				   and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
      				   and CD_REGIONE=aLiqLoc.cd_regione
      				   and PG_COMUNE=aLiqLoc.pg_comune
      				   and cd_contributo_ritenuta not like 'STI%'
      				 for update nowait
	 	) loop
 	  		select * into aCori from contributo_ritenuta
 	  		where CD_CDS=aLiqDett.cd_cds
       			  and CD_UNITA_ORGANIZZATIVA=aLiqDett.cd_unita_organizzativa
       			  and ESERCIZIO=aLiqDett.esercizio_contributo_ritenuta
       			  and PG_COMPENSO=aLiqDett.pg_compenso
       			  and CD_CONTRIBUTO_RITENUTA=aLiqDett.cd_contributo_ritenuta
       			  and TI_ENTE_PERCIPIENTE=aLiqDett.ti_ente_percipiente
 	  		for update nowait;
      			processaCoriMensile(aLiquid,aMese,aCori,aTSNow,aUser);
	 	end loop;
    	    end; -- Fine gestione NON da interfaccia
	end loop;
   end loop;
 end;

-- Vengono presi tutti i compensi della SAC non versati +
-- da liquid_gruppo_centro tutti quelli degli istituti trasferiti alla SAC ma non versati
procedure scaricaDettNonLiquid(aLiquidFitt liquid_cori%rowtype,aTSNow date,aUser varchar2) is
  aNum number;
  aCnrEstr CNR_ESTRAZIONE_CORI%rowtype;
  aCori contributo_ritenuta%rowtype;
  isLiquidaSuInviato char(1);
  dt_in_comp   DATE;
  dt_fi_comp   DATE;
 Begin
   begin
      select distinct 1 into aNum
      from CNR_ESTRAZIONE_CORI
      Where esercizio = aLiquidFitt.esercizio
        and cd_cds = aLiquidFitt.cd_cds
        and cd_unita_organizzativa = aLiquidFitt.cd_unita_organizzativa
        And pg_liquidazione = aLiquidFitt.pg_liquidazione;
            IBMERR001.RAISE_ERR_GENERICO('Estrazione già effettuata per compensi non liquidati es.'||aLiquidFitt.esercizio);
   exception when NO_DATA_FOUND then
       null;
   end;

   isLiquidaSuInviato:=CNRCTB575.ISLIQUIDACORIINVIATO(aLiquidFitt.esercizio);

   For aCori In (Select b.*
   		 From compenso a, contributo_ritenuta b, tipo_contributo_ritenuta cr,
   		      tipo_cr_base c, gruppo_cr_det e, anagrafico f , terzo g,
     		      v_dt_manrev_comp dtm
		 Where g.cd_terzo = a.cd_terzo
 		   And a.stato_cofi = 'P'
 		   and f.cd_anag = g.cd_anag
 		   and b.cd_cds = a.cd_cds
 		   and b.esercizio = a.esercizio
 		   and b.cd_unita_organizzativa = a.cd_unita_organizzativa
 		   and b.pg_compenso =a.pg_compenso
 		   and cr.cd_contributo_ritenuta = b.cd_contributo_ritenuta
 		   and cr.dt_ini_validita = b.dt_ini_validita
 		   and c.cd_contributo_ritenuta = b.cd_contributo_ritenuta
 		   and c.esercizio = b.esercizio
 		   and e.esercizio = c.esercizio
 		   and e.cd_gruppo_cr =c.cd_gruppo_cr
 		   -- Estrazione del corretto indice di regione/comune con cui entrare in GRUPPO_CR_DET sull base della classificazione del CORI
 		   and e.cd_regione = getCdRegioneLiquidCori(a.fl_compenso_stipendi,b.cd_contributo_ritenuta,b.ti_ente_percipiente,cr.cd_classificazione_cori, c.esercizio, c.cd_gruppo_cr, a.cd_regione_add,a.cd_regione_irap)
 		   and e.pg_comune = getPgComuneLiquidCori(cr.cd_classificazione_cori, c.esercizio, c.cd_gruppo_cr, a.pg_comune_add)
 		   and (
 		       b.esercizio_accertamento is not null
 		    or b.esercizio_obbligazione is not null
 		   )
 		   and dtm.CD_UO_COMPENSO = a.CD_UNITA_ORGANIZZATIVA
 		   and dtm.CD_CDS_COMPENSO = a.CD_CDS
 		   and dtm.ESERCIZIO_COMPENSO = a.ESERCIZIO
 		   and dtm.PG_COMPENSO = a.PG_COMPENSO
 		   And a.esercizio = aLiquidFitt.esercizio
 		   And a.cd_cds = aLiquidFitt.cd_cds                    -- prendo solo il cds '000'
  		   and dtm.esercizio_doc_cont = a.esercizio
	           And decode(isLiquidaSuInviato,'Y',To_Char(dtm.dt_trasmissione,'yyyy'),
	                                             To_Char(a.dt_emissione_mandato,'yyyy')) = aLiquidFitt.esercizio
		   And c.cd_contributo_ritenuta not like 'STI%'
		   and not exists (Select 1 from liquid_gruppo_cori_det a1
			  	   Where a1.esercizio_contributo_ritenuta = a.esercizio
				     And a1.cd_cds_origine = a.cd_cds
				     And a1.cd_uo_origine = a.cd_unita_organizzativa
				     And a1.cd_contributo_ritenuta = b.cd_contributo_ritenuta
				     And a1.pg_compenso = a.pg_compenso
				     And a1.ti_ente_percipiente = b.ti_ente_percipiente)
  ) Loop
      		processaCori(aLiquidFitt,aCori,aTSNow,aUser);
    End loop;

    for aGruppoCentro in (select * from liquid_gruppo_centro
  			where esercizio = aLiquidFitt.esercizio
  			  And stato != 'C'      --per prendere anche quelli annullati (l'importo e' stato versato con altra riga ma devo prendere il gruppo_centro)
  			  And da_esercizio_precedente = 'N'
    			  and cd_cds_lc Is Null
    			  and cd_uo_lc Is Null
    			  and pg_lc Is Null
    			for update nowait
   ) loop
   	for aLiqLoc in (select * from liquid_gruppo_cori
   			where esercizio=aGruppoCentro.esercizio
    			  and cd_gruppo_cr=aGruppoCentro.cd_gruppo_cr
    			  and cd_regione=aGruppoCentro.cd_regione
    			  and pg_comune=aGruppoCentro.pg_comune
    			  and pg_gruppo_centro=aGruppoCentro.pg_gruppo_centro
			for update nowait
   	) loop
   	     begin
	 	select 1 into aNum
	 	from liquid_cori_interf_cds
	 	where cd_cds=aLiqLoc.cd_cds
		  and esercizio=aLiqLoc.esercizio;

	 	for aLiqIntDett in (select * from liquid_cori_interf_dett
	 			    Where CD_CDS=aLiqLoc.cd_cds
      				      and ESERCIZIO=aLiqLoc.esercizio
      				      and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
      				      and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
      				      and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
      				      and CD_REGIONE=aLiqLoc.cd_regione
      				      and PG_COMUNE=aLiqLoc.pg_comune
	  			      and DT_SCARICO_VERSO_STIPENDI is null
      				    for update nowait
	 	) loop
      			aCnrEstr.CD_CDS:=aLiquidFitt.CD_CDS;
      			aCnrEstr.ESERCIZIO:=aLiquidFitt.ESERCIZIO;
      			aCnrEstr.CD_UNITA_ORGANIZZATIVA:=aLiquidFitt.CD_UNITA_ORGANIZZATIVA;
      			aCnrEstr.PG_LIQUIDAZIONE:=aLiquidFitt.PG_LIQUIDAZIONE;

      			aCnrEstr.MATRICOLA:=aLiqIntDett.MATRICOLA;
      			aCnrEstr.CODICE_FISCALE:=aLiqIntDett.CODICE_FISCALE;
      			If aLiqIntDett.TI_PAGAMENTO = '4' Then   --Tassazione separata
      			    aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      			else
      			    If aLiqIntDett.ESERCIZIO_COMPENSO = aLiquidFitt.ESERCIZIO Then   --Anno corrente
      				If aLiqIntDett.TI_PAGAMENTO = '2' Then
      			   	   aCnrEstr.TI_PAGAMENTO:= '1';
      				Else
      			   	   aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      				End If;
      			    Else   --Anno precedente
      				aCnrEstr.TI_PAGAMENTO:= '5';
      			    End If;
      			end If;
      			--aCnrEstr.TI_PAGAMENTO:=aLiqIntDett.TI_PAGAMENTO;
      			aCnrEstr.ESERCIZIO_COMPENSO:=aLiqIntDett.ESERCIZIO_COMPENSO;
      			aCnrEstr.CD_IMPONIBILE:=aLiqIntDett.CD_IMPONIBILE;
      			aCnrEstr.TI_ENTE_PERCIPIENTE:=aLiqIntDett.TI_ENTE_PERCIPIENTE;
      			aCnrEstr.CD_CONTRIBUTO_RITENUTA:=aLiqIntDett.CD_CONTRIBUTO_RITENUTA;
      			dt_in_comp:= Nvl(aLiqIntDett.DT_INIZIO_COMPENSO,To_Date('01/01/'||To_Char(aCnrEstr.ESERCIZIO_COMPENSO),'DD/MM/YYYY'));
      			dt_fi_comp:= Nvl(aLiqIntDett.DT_FINE_COMPENSO,To_Date('31/12/'||To_Char(aCnrEstr.ESERCIZIO_COMPENSO),'DD/MM/YYYY'));

	  		begin
 	   		    getEstrazione(aCnrEstr);
 	   		    --prima dell'update devo valorizzare correttamente le date
 	   		    If dt_in_comp < aCnrEstr.DT_INIZIO_COMPENSO Then
  	       			aCnrEstr.DT_INIZIO_COMPENSO:=dt_in_comp;
  	    		    End If;
  	    		    If dt_fi_comp > aCnrEstr.DT_FINE_COMPENSO Then
               			aCnrEstr.DT_FINE_COMPENSO:=dt_fi_comp;
            		    End If;
       			    updateEstrazione(aCnrEstr, aLiqIntDett);
 	  		exception
 	  		  When NO_DATA_FOUND then
       				aCnrEstr.DT_INIZIO:=aLiquidFitt.dt_da;
       				aCnrEstr.DT_FINE:=aLiquidFitt.dt_a;
       				aCnrEstr.IM_LORDO:=aLiqIntDett.IM_LORDO;
       				aCnrEstr.IMPONIBILE:=aLiqIntDett.IMPONIBILE;
       				aCnrEstr.IM_RITENUTA:=aLiqIntDett.IM_RITENUTA;
       				aCnrEstr.DT_SCARICO_VERSO_STIPENDI:=null;
       				aCnrEstr.UTCR:=aUser;
       				aCnrEstr.DACR:=aTSNow;
       				aCnrEstr.UTUV:=aUser;
       				aCnrEstr.DUVA:=aTSNow;
       				aCnrEstr.PG_VER_REC:=1;
       				aCnrEstr.DT_INIZIO_COMPENSO:=dt_in_comp;
       				aCnrEstr.DT_FINE_COMPENSO:=dt_fi_comp;

       				ins_CNR_ESTRAZIONE_CORI (aCnrEstr);
      			end;
	  		update liquid_cori_interf_dett
	  		set DT_SCARICO_VERSO_STIPENDI=trunc(aTSNow)
	  		where CD_CDS=aLiqIntDett.CD_CDS
       			  and ESERCIZIO=aLiqIntDett.ESERCIZIO
       			  and CD_UNITA_ORGANIZZATIVA=aLiqIntDett.CD_UNITA_ORGANIZZATIVA
       			  and PG_LIQUIDAZIONE=aLiqIntDett.PG_LIQUIDAZIONE
       			  and MATRICOLA=aLiqIntDett.MATRICOLA
       			  and CODICE_FISCALE=aLiqIntDett.CODICE_FISCALE
       			  and TI_PAGAMENTO=aLiqIntDett.TI_PAGAMENTO
       			  and ESERCIZIO_COMPENSO=aLiqIntDett.ESERCIZIO_COMPENSO
       			  and CD_IMPONIBILE=aLiqIntDett.CD_IMPONIBILE
       			  and TI_ENTE_PERCIPIENTE=aLiqIntDett.TI_ENTE_PERCIPIENTE
       			  and CD_CONTRIBUTO_RITENUTA=aLiqIntDett.CD_CONTRIBUTO_RITENUTA;
     		end loop;
	    exception when NO_DATA_FOUND Then      --non e' un cds proveniente da interfaccia
     		for aLiqDett in (select * from liquid_gruppo_cori_det
     				 Where CD_CDS=aLiqLoc.cd_cds
      				   and ESERCIZIO=aLiqLoc.esercizio
      				   and CD_UNITA_ORGANIZZATIVA=aLiqLoc.cd_unita_organizzativa
      				   and PG_LIQUIDAZIONE=aLiqLoc.pg_liquidazione
      				   and CD_CDS_ORIGINE=aLiqLoc.cd_cds_origine
      				   and CD_UO_ORIGINE=aLiqLoc.cd_uo_origine
      				   and PG_LIQUIDAZIONE_ORIGINE=aLiqLoc.pg_liquidazione_origine
      				   and CD_GRUPPO_CR=aLiqLoc.cd_gruppo_cr
      				   and CD_REGIONE=aLiqLoc.cd_regione
      				   and PG_COMUNE=aLiqLoc.pg_comune
      				   and cd_contributo_ritenuta not like 'STI%'
      				 for update nowait
	 	) loop
 	  		select * into aCori from contributo_ritenuta
 	  		where CD_CDS=aLiqDett.cd_cds
       			  and CD_UNITA_ORGANIZZATIVA=aLiqDett.cd_unita_organizzativa
       			  and ESERCIZIO=aLiqDett.esercizio_contributo_ritenuta
       			  and PG_COMPENSO=aLiqDett.pg_compenso
       			  and CD_CONTRIBUTO_RITENUTA=aLiqDett.cd_contributo_ritenuta
       			  and TI_ENTE_PERCIPIENTE=aLiqDett.ti_ente_percipiente
 	  		for update nowait;
      			processaCori(aLiquidFitt,aCori,aTSNow,aUser);
	 	end loop;
    	    end; -- Fine gestione NON da interfaccia
	end loop;
    end loop;

 End;

 procedure scaricaDettNoImpostaMensile(aEs NUMBER, aMese NUMBER, aTSNow date, aUser varchar2) is

  aDataInizio   DATE;
  aDataFine   DATE;
  aLiquidFitt liquid_cori%Rowtype;
  cds unita_organizzativa.cd_unita_organizzativa%Type;
  uo unita_organizzativa.cd_unita_organizzativa%Type;
 Begin
      cds:=CNRCTB020.getcdCDSSACValido(aEs);
      uo:=CNRCTB020.getUOVersCori(aEs).cd_unita_organizzativa;
      aDataInizio:=IBMUTL001.getFirstDayOfMonth(To_Date(To_Char('01'||Lpad(aMese,2,'0')||aEs),'ddmmyyyy'));
      aDataFine:=IBMUTL001.getLastDayOfMonth(To_Date(To_Char('01'||Lpad(aMese,2,'0')||aEs),'ddmmyyyy'));

      aLiquidFitt.CD_CDS:=cds;
      aLiquidFitt.ESERCIZIO:= aEs;
      aLiquidFitt.CD_UNITA_ORGANIZZATIVA:=uo;
      aLiquidFitt.PG_LIQUIDAZIONE:=To_Number('-'||aEs||Lpad(aMese,2,0));
      aLiquidFitt.DT_DA:=aDataInizio;
      aLiquidFitt.DT_A:=aDataFine;
      aLiquidFitt.STATO:='L';
      aLiquidFitt.DACR:=aTSNow;
      aLiquidFitt.UTCR:=aUser;
      aLiquidFitt.DUVA:=aTSNow;
      aLiquidFitt.UTUV:=aUser;
      aLiquidFitt.PG_VER_REC:=1;
      aLiquidFitt.DA_ESERCIZIO_PRECEDENTE:='N';

      Begin
        Insert Into LIQUID_CORI(CD_CDS,ESERCIZIO,CD_UNITA_ORGANIZZATIVA,PG_LIQUIDAZIONE,
      			      DT_DA,DT_A,STATO,DACR,UTCR,DUVA,UTUV,PG_VER_REC,DA_ESERCIZIO_PRECEDENTE)
      	  	values (aLiquidFitt.CD_CDS,
                        aLiquidFitt.ESERCIZIO,
                        aLiquidFitt.CD_UNITA_ORGANIZZATIVA,
                        aLiquidFitt.PG_LIQUIDAZIONE,
                        aLiquidFitt.DT_DA,
                        aLiquidFitt.DT_A,
                        aLiquidFitt.STATO,
                        aLiquidFitt.DACR,
                        aLiquidFitt.UTCR,
                        aLiquidFitt.DUVA,
                        aLiquidFitt.UTUV,
                        aLiquidFitt.PG_VER_REC,
                        aLiquidFitt.DA_ESERCIZIO_PRECEDENTE);
      Exception
      	when Dup_Val_On_Index Then Null;
      End;

      -- Per la SAC
      For aRecLiqCompenso In (
             Select Distinct d.cd_cds_origine, d.cd_uo_origine, d.esercizio_contributo_ritenuta, d.pg_compenso
             From cnr_estrazione_cori e, liquid_gruppo_cori g, liquid_gruppo_cori_det d
             Where e.esercizio = aEs
               And e.mese = aMese
               and g.esercizio = e.esercizio
               and g.cd_cds = e.cd_cds
               and g.cd_unita_organizzativa = e.cd_unita_organizzativa
               and g.pg_liquidazione = e.pg_liquidazione
               And g.cd_cds = g.cd_cds_origine
               and d.CD_CDS=g.cd_cds
               and d.ESERCIZIO=g.esercizio
               and d.CD_UNITA_ORGANIZZATIVA=g.cd_unita_organizzativa
               and d.PG_LIQUIDAZIONE=g.pg_liquidazione
               and d.CD_CDS_ORIGINE=g.cd_cds_origine
               and d.CD_UO_ORIGINE=g.cd_uo_origine
               and d.PG_LIQUIDAZIONE_ORIGINE=g.pg_liquidazione_origine
               and d.CD_GRUPPO_CR=g.cd_gruppo_cr
               and d.CD_REGIONE=g.cd_regione
               and d.PG_COMUNE=g.pg_comune
               and d.cd_contributo_ritenuta not like 'STI%') Loop

       	   For aCori in (
     	  	select * From contributo_ritenuta
     	  	where CD_CDS=aRecLiqCompenso.cd_cds_origine
           	 	  and CD_UNITA_ORGANIZZATIVA=aRecLiqCompenso.cd_uo_origine
           		  and ESERCIZIO=aRecLiqCompenso.esercizio_contributo_ritenuta
           		  and PG_COMPENSO=aRecLiqCompenso.pg_compenso
           		  And cd_contributo_ritenuta not like 'STI%'
           		  And ammontare = 0
           		  And imponibile != 0
           		  And Nvl(aliquota,0) != 0
     	  	for update nowait)  Loop

          	processaCoriMensile(aLiquidFitt, aMese, aCori,aTSNow,aUser);
       	   End Loop;
      End Loop;

      -- Per gli istituti
      For aRecLiqCompenso In (
             Select Distinct d.cd_cds_origine, d.cd_uo_origine, d.esercizio_contributo_ritenuta, d.pg_compenso
             From cnr_estrazione_cori e, liquid_gruppo_centro c,liquid_gruppo_cori g, liquid_gruppo_cori_det d
             Where e.esercizio = aEs
               And e.mese = aMese
               and c.esercizio = e.esercizio
               and c.cd_cds_lc = e.cd_cds
               and c.cd_uo_lc = e.cd_unita_organizzativa
               and c.pg_lc = e.pg_liquidazione
               and g.esercizio=c.esercizio
               and g.cd_gruppo_cr=c.cd_gruppo_cr
               and g.cd_regione=c.cd_regione
               and g.pg_comune=c.pg_comune
               and g.pg_gruppo_centro=c.pg_gruppo_centro
               and d.CD_CDS=g.cd_cds
               and d.ESERCIZIO=g.esercizio
               and d.CD_UNITA_ORGANIZZATIVA=g.cd_unita_organizzativa
               and d.PG_LIQUIDAZIONE=g.pg_liquidazione
               and d.CD_CDS_ORIGINE=g.cd_cds_origine
               and d.CD_UO_ORIGINE=g.cd_uo_origine
               and d.PG_LIQUIDAZIONE_ORIGINE=g.pg_liquidazione_origine
               and d.CD_GRUPPO_CR=g.cd_gruppo_cr
               and d.CD_REGIONE=g.cd_regione
               and d.PG_COMUNE=g.pg_comune
               and d.cd_contributo_ritenuta not like 'STI%') Loop
       	     For aCori in (
     	  	select * From contributo_ritenuta
     	  	where CD_CDS=aRecLiqCompenso.cd_cds_origine
           	 	  and CD_UNITA_ORGANIZZATIVA=aRecLiqCompenso.cd_uo_origine
           		  and ESERCIZIO=aRecLiqCompenso.esercizio_contributo_ritenuta
           		  and PG_COMPENSO=aRecLiqCompenso.pg_compenso
           		  And cd_contributo_ritenuta not like 'STI%'
           		  And ammontare = 0
           		  And imponibile != 0
           		  And Nvl(aliquota,0) != 0
     	  	for update nowait)  Loop

          	processaCoriMensile(aLiquidFitt, aMese, aCori,aTSNow,aUser);
       	     End Loop;
      End Loop;
 End;

 Procedure stralcioMensile(aEs number, aMese NUMBER, aUser varchar2) Is
    aLiq 		 LIQUID_CORI%ROWTYPE;
    aTSNow 		 DATE:=Sysdate;
    ultimoGiornoDelMese  DATE;
 Begin
    ultimoGiornoDelMese := ibmutl001.getLastDayOfMonth(To_Date('01'||Lpad(aMese,2,'0')||aEs||'','ddmmyyyy'));

    FOR aLiq IN (Select *
                 From LIQUID_CORI aLC
                 Where (cd_cds = cnrctb020.getcdCDSSACValido(aEs)       --'000'
                        or
                        cd_cds = cnrctb020.getCDCDSENTE(aEs))         --'999'
                   And ESERCIZIO = aEs
	                 And da_esercizio_precedente ='N'
	                 And dt_a <= ultimoGiornoDelMese
                   And Not Exists (Select 1 From CNR_ESTRAZIONE_CORI
                                   Where cd_cds = aLC.cd_cds
                                     And cd_unita_organizzativa = aLC.cd_unita_organizzativa
                                     And pg_liquidazione = aLC.pg_liquidazione
                              	     And ESERCIZIO = aLC.ESERCIZIO)
    ) LOOP
         scaricaDettLiquidMensile(aLiq,aMese,aTSNow,aUser);
    END LOOP;

    Begin
         scaricaDettNoImpostaMensile(aEs,aMese,aTSNow,aUser);
 	 aggregaDettLiquidMensile(aEs,aMese,aTSNow,aUser);
    End;
 End;

 Procedure ins_CNR_ESTRAZIONE_CORI (aDest CNR_ESTRAZIONE_CORI%rowtype) is
  begin
   insert into CNR_ESTRAZIONE_CORI (
     CD_CDS
    ,ESERCIZIO
    ,CD_UNITA_ORGANIZZATIVA
    ,PG_LIQUIDAZIONE
    ,MATRICOLA
    ,CODICE_FISCALE
    ,TI_PAGAMENTO
    ,ESERCIZIO_COMPENSO
    ,CD_IMPONIBILE
    ,TI_ENTE_PERCIPIENTE
    ,CD_CONTRIBUTO_RITENUTA
    ,DT_INIZIO
    ,DT_FINE
    ,IM_LORDO
    ,IMPONIBILE
    ,IM_RITENUTA
    ,DT_SCARICO_VERSO_STIPENDI
    ,UTCR
    ,DACR
    ,UTUV
    ,DUVA
    ,PG_VER_REC
    ,DT_INIZIO_COMPENSO
    ,DT_FINE_COMPENSO
    ,MESE
    ,IM_CORI_SOSPESO
   ) values (
     aDest.CD_CDS
    ,aDest.ESERCIZIO
    ,aDest.CD_UNITA_ORGANIZZATIVA
    ,aDest.PG_LIQUIDAZIONE
    ,aDest.MATRICOLA
    ,aDest.CODICE_FISCALE
    ,aDest.TI_PAGAMENTO
    ,aDest.ESERCIZIO_COMPENSO
    ,aDest.CD_IMPONIBILE
    ,aDest.TI_ENTE_PERCIPIENTE
    ,aDest.CD_CONTRIBUTO_RITENUTA
    ,aDest.DT_INIZIO
    ,aDest.DT_FINE
    ,aDest.IM_LORDO
    ,aDest.IMPONIBILE
    ,aDest.IM_RITENUTA
    ,aDest.DT_SCARICO_VERSO_STIPENDI
    ,aDest.UTCR
    ,aDest.DACR
    ,aDest.UTUV
    ,aDest.DUVA
    ,aDest.PG_VER_REC
    ,aDest.DT_INIZIO_COMPENSO
    ,aDest.DT_FINE_COMPENSO
    ,aDest.MESE
    ,aDest.IM_CORI_SOSPESO
    );
 end;
 procedure ins_CNR_ESTRAZIONE_CORI_AGG (aDest CNR_ESTRAZIONE_CORI_AGG%rowtype) is
  begin
   insert into CNR_ESTRAZIONE_CORI_AGG (
     DT_ESTRAZIONE
    ,ESERCIZIO
    ,MATRICOLA
    ,CODICE_FISCALE
    ,TI_PAGAMENTO
    ,ESERCIZIO_COMPENSO
    ,CD_IMPONIBILE
    ,TI_ENTE_PERCIPIENTE
    ,CD_CONTRIBUTO_RITENUTA
    ,PG_RIGA
    ,IM_LORDO
    ,IMPONIBILE
    ,IM_RITENUTA
    ,UTCR
    ,DACR
    ,UTUV
    ,DUVA
    ,PG_VER_REC
    ,DT_INIZIO_COMPENSO
    ,DT_FINE_COMPENSO
    ,MESE
    ,IM_CORI_SOSPESO
   ) values (
     aDest.DT_ESTRAZIONE
    ,aDest.ESERCIZIO
    ,aDest.MATRICOLA
    ,aDest.CODICE_FISCALE
    ,aDest.TI_PAGAMENTO
    ,aDest.ESERCIZIO_COMPENSO
    ,aDest.CD_IMPONIBILE
    ,aDest.TI_ENTE_PERCIPIENTE
    ,aDest.CD_CONTRIBUTO_RITENUTA
    ,aDest.PG_RIGA
    ,aDest.IM_LORDO
    ,aDest.IMPONIBILE
    ,aDest.IM_RITENUTA
    ,aDest.UTCR
    ,aDest.DACR
    ,aDest.UTUV
    ,aDest.DUVA
    ,aDest.PG_VER_REC
    ,aDest.DT_INIZIO_COMPENSO
    ,aDest.DT_FINE_COMPENSO
    ,aDest.MESE
    ,aDest.IM_CORI_SOSPESO
    );
 end;
END;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy