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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB560" AS

 procedure ins_ASS_COMP_DOC_CONT_NMP (aDest ASS_COMP_DOC_CONT_NMP%rowtype) is
  begin
   insert into ASS_COMP_DOC_CONT_NMP (
     ESERCIZIO_COMPENSO
    ,CD_UO_COMPENSO
    ,PG_COMPENSO
    ,CD_CDS_DOC
    ,ESERCIZIO_DOC
    ,PG_DOC
    ,CD_TIPO_DOC
    ,UTCR
    ,UTUV
    ,DACR
    ,DUVA
    ,PG_VER_REC
    ,CD_CDS_COMPENSO
   ) values (
     aDest.ESERCIZIO_COMPENSO
    ,aDest.CD_UO_COMPENSO
    ,aDest.PG_COMPENSO
    ,aDest.CD_CDS_DOC
    ,aDest.ESERCIZIO_DOC
    ,aDest.PG_DOC
    ,aDest.CD_TIPO_DOC
    ,aDest.UTCR
    ,aDest.UTUV
    ,aDest.DACR
    ,aDest.DUVA
    ,aDest.PG_VER_REC
    ,aDest.CD_CDS_COMPENSO
    );
 end;

-- =============================================================================
-- Main procedura
-- =============================================================================

 procedure gestioneCori(
  inEsercizio number,
  aCompenso compenso%rowtype,
  aCori contributo_ritenuta%rowtype,
  aRev in out reversale%rowtype,
  aRevRighe in out CNRCTB038.righeReversaleList,
  aMan in out mandato%rowtype,
  aManRighe in out CNRCTB038.righeMandatoList,
  aUser varchar2,
  aTSNow date
 ) is
  aGen documento_generico%rowtype;
  aGenRiga documento_generico_riga%rowtype;
  aRevRiga reversale_riga%rowtype;
  aManRiga mandato_riga%rowtype;
  aAssCoriFin ass_tipo_cori_ev%rowtype;
  aVoceF voce_f%rowtype;
  aAcc accertamento%rowtype;
  aAccScad accertamento_scadenzario%rowtype;
  aObb obbligazione%rowtype;
  aObbScad obbligazione_scadenzario%rowtype;
  aListGenRighe CNRCTB100.docGenRigaList;
  isCoriEntrata boolean;
  aContoColl ass_partita_giro%rowtype;
  aCdTerzoUO number(8);
  aCdModPagUO varchar2(10);
  aPgBancaUO number(10);
  aCdClassificazioneCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE;
  aUOENTE unita_organizzativa%rowtype;
  aCdTerzoEnte number(8);
  aCdModPagEnte varchar2(10);
  aPgBancaEnte number(10);
  isCoriEnteSuCompNeg boolean;
  aDateCont date;
  parametriCnr  parametri_cnr%rowtype;
 begin
   aDateCont:=CNRCTB008.getTimestampContabile(inEsercizio,aTSNow);

   -- Se l'importo del CORi � non esegue alcuna operazione
   if aCori.ammontare = 0 then
    return;
   end if;

   -- Se la tipologia di contributo ritenuta �VA o RIVALSA non esegue la contabilizzazione

   aCdClassificazioneCori:=CNRCTB545.getTipoCoriDaRigaCompenso(aCori);
   IF (aCdClassificazioneCori = CNRCTB545.isCoriIva and aCompenso.fl_split_payment ='Y' and aCompenso.ti_istituz_commerc ='C' ) then
     return;
   Elsif ((aCdClassificazioneCori = CNRCTB545.isCoriIva and aCompenso.fl_split_payment ='N') OR
       aCdClassificazioneCori = CNRCTB545.isCoriRivalsa) THEN
      RETURN;
    Elsif (aCdClassificazioneCori = CNRCTB545.isCoriIva and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE) THEN
      RETURN;
   END IF;

   isCoriEnteSuCompNeg:=false;
   if (aCompenso.im_totale_compenso < 0) and (aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE) then
    isCoriEnteSuCompNeg:=true;
    -- Estrae il terzo associato all'UO ENTE con le sue modalit�i pagamento di tipo bancario pi� recenti
    aUOENTE:=CNRCTB020.GETUOENTE(inEsercizio);
    CNRCTB080.getTerzoPerUO(aUOENTE.cd_unita_organizzativa, aCdTerzoEnte, aCdModPagEnte, aPgBancaEnte,aCompenso.esercizio);
   end if;

   -- Estrae il terzo associato all'UO del compenso e le sue modalit�i pagamento di tipo bancario pi� recenti
   CNRCTB080.getTerzoPerUO(aCompenso.cd_uo_origine, aCdTerzoUO, aCdModPagUO, aPgBancaUO,aCompenso.esercizio);

		select * into parametriCnr from parametri_cnr
   where esercizio = inEsercizio;
   if (parametriCnr.fl_nuovo_pdg='N') then
	   begin
	    select * into aAssCoriFin from ass_tipo_cori_ev where
	         cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
	 	 and esercizio = inEsercizio
	     and ti_gestione = CNRCTB001.GESTIONE_ENTRATE
		 and ti_appartenenza = CNRCTB001.APPARTENENZA_CDS
		 and ti_ente_percepiente = aCori.ti_ente_percipiente;
	   exception when NO_DATA_FOUND then
	    IBMERR001.RAISE_ERR_GENERICO('Conto finanziario associato al contributo '||aCori.cd_contributo_ritenuta||' non trovato');
	   end;
	  else
	   begin
	    select * into aAssCoriFin from ass_tipo_cori_ev where
	         cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
	 	 and esercizio = inEsercizio
	     and ti_gestione = CNRCTB001.GESTIONE_ENTRATE
		 and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR
		 and ti_ente_percepiente = aCori.ti_ente_percipiente;
	   exception when NO_DATA_FOUND then
	    IBMERR001.RAISE_ERR_GENERICO('Conto finanziario associato al contributo '||aCori.cd_contributo_ritenuta||' non trovato');
	   end;
	  end if;

   if (parametriCnr.fl_nuovo_pdg='N') then
		   begin
		    select * into aVoceF from voce_f where
			     esercizio = inEsercizio
		     and ti_appartenenza = CNRCTB001.APPARTENENZA_CDS
		     and ti_gestione = CNRCTB001.GESTIONE_ENTRATE
			 and cd_titolo_capitolo = aAssCoriFin.cd_elemento_voce
			 and ti_voce = CNRCTB001.CAPITOLO;
		   exception when NO_DATA_FOUND then
		    IBMERR001.RAISE_ERR_GENERICO('Conto finanziario associato al contributo '||aCori.cd_contributo_ritenuta||'non trovato');
		   end;
   end if;
   -- Per ogni CORI stabilisce l'effetto COFI e determina la partita di giro
   if aCori.ammontare > 0 then
    isCoriEntrata:=true;
    aAcc:=null;
    aAccScad:=null;
    aAcc.CD_CDS:=aCompenso.cd_cds;
    aAcc.ESERCIZIO:=inEsercizio;
    aAcc.ESERCIZIO_ORIGINALE:=inEsercizio;
    aAcc.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_ACC_PGIRO;
    aAcc.CD_UNITA_ORGANIZZATIVA:=aCompenso.cd_unita_organizzativa;
    aAcc.CD_CDS_ORIGINE:=aCompenso.cd_cds;
    aAcc.CD_UO_ORIGINE:=aCompenso.cd_unita_organizzativa;
    aAcc.TI_APPARTENENZA:=aAssCoriFin.ti_appartenenza;
    aAcc.TI_GESTIONE:=aAssCoriFin.ti_gestione;
    aAcc.CD_ELEMENTO_VOCE:=aAssCoriFin.cd_elemento_voce;
    if (parametriCnr.fl_nuovo_pdg='N') then
    	aAcc.CD_VOCE:=aVoceF.cd_voce;
    else
    	aAcc.CD_VOCE:=aAssCoriFin.cd_elemento_voce;
    end if;

    aAcc.DT_REGISTRAZIONE:=TRUNC(aDateCont);
    aAcc.DS_ACCERTAMENTO:='CORI-D cn.'||aCompenso.pg_compenso||' '||aCori.cd_contributo_ritenuta;
    aAcc.NOTE_ACCERTAMENTO:='';
		aAcc.CD_TERZO:=aCompenso.cd_terzo;
    aAcc.IM_ACCERTAMENTO:=aCori.ammontare;
    aAcc.FL_PGIRO:='Y';
    aAcc.RIPORTATO:='N';
    aAcc.DACR:=aTSNow;
    aAcc.UTCR:=aUser;
    aAcc.DUVA:=aTSNow;
    aAcc.UTUV:=aUser;
    aAcc.PG_VER_REC:=1;
    aAcc.ESERCIZIO_COMPETENZA:=inEsercizio;
    CNRCTB040.CREAACCERTAMENTOPGIRO(false,aAcc,aAccScad,aObb,aObbScad,trunc(aTSNow));
   else
    isCoriEntrata:=false;
	begin
 	 select * into aContoColl from ass_partita_giro where
	      esercizio = inEsercizio
	  and ti_appartenenza = aAssCoriFin.ti_appartenenza
	  and ti_gestione = aAssCoriFin.ti_gestione
	  and cd_voce = aAssCoriFin.cd_elemento_voce;
    exception when NO_DATA_FOUND then
	 IBMERR001.RAISE_ERR_GENERICO('Conto associato in partita di giro non trovato per voce di entrata:'||aAssCoriFin.cd_elemento_voce);
	end;
	aObb:=null;
    aObbScad:=null;
    aObb.CD_CDS:=aCompenso.cd_cds;
    aObb.ESERCIZIO:=inEsercizio;
    aObb.ESERCIZIO_ORIGINALE:=inEsercizio;
    aObb.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_OBB_PGIRO;
    aObb.CD_UNITA_ORGANIZZATIVA:=aCompenso.cd_unita_organizzativa;
    aObb.CD_CDS_ORIGINE:=aCompenso.cd_cds;
    aObb.CD_UO_ORIGINE:=aCompenso.cd_unita_organizzativa;
    aObb.TI_APPARTENENZA:=aContoColl.ti_appartenenza_clg;
    aObb.TI_GESTIONE:=aContoColl.ti_gestione_clg;
    aObb.CD_ELEMENTO_VOCE:=aContoColl.cd_voce_clg;
    aObb.DT_REGISTRAZIONE:=TRUNC(aDateCont);
    aObb.DS_OBBLIGAZIONE:='CORI-A cn.'||aCompenso.pg_compenso||' '||aCori.cd_contributo_ritenuta;
    aObb.NOTE_OBBLIGAZIONE:='';
    if isCoriEnteSuCompNeg then
     aObb.CD_TERZO:=aCdTerzoEnte;
    else
     aObb.CD_TERZO:=aCompenso.cd_terzo;
	end if;
	aObb.IM_OBBLIGAZIONE:=abs(aCori.ammontare);
    aObb.stato_obbligazione:=CNRCTB035.STATO_DEFINITIVO;
    aObb.im_costi_anticipati:=0;
    aObb.fl_calcolo_automatico:='N';
    aObb.fl_spese_costi_altrui:='N';
    aObb.FL_PGIRO:='Y';
    aObb.RIPORTATO:='N';
    aObb.DACR:=aTSNow;
    aObb.UTCR:=aUser;
    aObb.DUVA:=aTSNow;
    aObb.UTUV:=aUser;
    aObb.PG_VER_REC:=1;
    aObb.ESERCIZIO_COMPETENZA:=inEsercizio;
    CNRCTB030.CREAOBBLIGAZIONEPGIRO(false,aObb,aObbScad,aAcc,aAccScad,trunc(aTSNow));
   end if;

-- Creo il documento generico di entrata su partita di giro per il CORI specifico

   aGen:=null;
   aGenRiga:=null;

   if isCoriEntrata then
    aGen.CD_TIPO_DOCUMENTO_AMM:=CNRCTB100.TI_GEN_CORI_ACC_ENTRATA;
    aGen.CD_CDS:=aAcc.cd_cds;
    aGen.CD_UNITA_ORGANIZZATIVA:=aAcc.cd_unita_organizzativa;
    aGen.ESERCIZIO:=aAcc.esercizio;
    aGen.CD_CDS_ORIGINE:=aAcc.cd_cds;
    aGen.CD_UO_ORIGINE:=aAcc.cd_unita_organizzativa;
    aGen.IM_TOTALE:=aAcc.im_accertamento;
   else
    aGen.CD_TIPO_DOCUMENTO_AMM:=CNRCTB100.TI_GEN_CORI_ACC_SPESA;
    aGen.CD_CDS:=aObb.cd_cds;
    aGen.CD_UNITA_ORGANIZZATIVA:=aObb.cd_unita_organizzativa;
    aGen.ESERCIZIO:=aObb.esercizio;
    aGen.CD_CDS_ORIGINE:=aObb.cd_cds;
    aGen.CD_UO_ORIGINE:=aObb.cd_unita_organizzativa;
    aGen.IM_TOTALE:=aObb.im_obbligazione;
   end if;

   aGen.DATA_REGISTRAZIONE:=TRUNC(aDateCont);
   aGen.DT_DA_COMPETENZA_COGE:=aCompenso.DT_DA_COMPETENZA_COGE;
   aGen.DT_A_COMPETENZA_COGE:=aCompenso.DT_A_COMPETENZA_COGE;
   aGen.DS_DOCUMENTO_GENERICO:='CORI - cn.'||aCompenso.pg_compenso||' '||aCori.cd_contributo_ritenuta;
   aGen.TI_ISTITUZ_COMMERC:=CNRCTB100.TI_ISTITUZIONALE;
   aGen.STATO_COFI:=CNRCTB100.STATO_GEN_COFI_TOT_MR;
   aGen.STATO_COGE:=CNRCTB100.STATO_COEP_EXC;
   aGen.STATO_COAN:=CNRCTB100.STATO_COEP_EXC;
-- Massimo Iaccarino Inizio
   aGen.CD_DIVISA:='EURO';
   aGen.CAMBIO:=1;
-- Massimo Iaccarino Fine
--   aGen.ESERCIZIO_LETTERA:=0;
--   aGen.PG_LETTERA:=0;
   aGen.DACR:=aTSNow;
   aGen.UTCR:=aUser;
   aGen.DUVA:=aTSNow;
   aGen.UTUV:=aUser;
   aGen.PG_VER_REC:=1;
   aGen.DT_SCADENZA:=TRUNC(aTSNow);
   aGen.STATO_PAGAMENTO_FONDO_ECO:=CNRCTB100.STATO_NO_PFONDOECO;
   aGen.TI_ASSOCIATO_MANREV:=CNRCTB100.TI_ASSOC_TOT_MAN_REV ;

   aGenRiga.CD_CDS:=aGen.CD_CDS;
   aGenRiga.CD_UNITA_ORGANIZZATIVA:=aGen.CD_UNITA_ORGANIZZATIVA;
   aGenRiga.ESERCIZIO:=aGen.ESERCIZIO;
   aGenRiga.CD_TIPO_DOCUMENTO_AMM:=aGen.CD_TIPO_DOCUMENTO_AMM;
   aGenRiga.DS_RIGA:=aGen.DS_DOCUMENTO_GENERICO;
-- Massimo Iaccarino Inizio
   aGenRiga.IM_RIGA_DIVISA:=aGen.IM_TOTALE;
   aGenRiga.IM_RIGA:=aGen.IM_TOTALE;
--   aGenRiga.CD_TERZO_CESSIONARIO:=aGen.CD_TERZO_CESSIONARIO;
   aGenRiga.RAGIONE_SOCIALE:=aCompenso.RAGIONE_SOCIALE;
   aGenRiga.NOME:=aCompenso.NOME;
   aGenRiga.COGNOME:=aCompenso.COGNOME;
   aGenRiga.CODICE_FISCALE:=aCompenso.CODICE_FISCALE;
   aGenRiga.PARTITA_IVA:=aCompenso.PARTITA_IVA;
--   aGenRiga.CD_TERMINI_PAG:=aCompenso.CD_TERMINI_PAG;
--   aGenRiga.CD_TERMINI_PAG_UO_CDS:=aCompenso.CD_TERMINI_PAG_UO_CDS;
--   aGenRiga.NOTE:=aGen.NOTE;
   aGenRiga.DT_DA_COMPETENZA_COGE:=aCompenso.DT_DA_COMPETENZA_COGE;
   aGenRiga.DT_A_COMPETENZA_COGE:=aCompenso.DT_A_COMPETENZA_COGE;
   aGenRiga.STATO_COFI:=aGen.STATO_COFI;
--   aGenRiga.DT_CANCELLAZIONE:=aGen.DT_CANCELLAZIONE;
   if isCoriEntrata then
    aGenRiga.CD_TERZO:=aCompenso.CD_TERZO;
    aGenRiga.CD_CDS_ACCERTAMENTO:=aAcc.CD_CDS;
    aGenRiga.ESERCIZIO_ACCERTAMENTO:=aAcc.ESERCIZIO;
    aGenRiga.ESERCIZIO_ORI_ACCERTAMENTO:=aAcc.ESERCIZIO_ORIGINALE;
    aGenRiga.PG_ACCERTAMENTO:=aAcc.PG_ACCERTAMENTO;
    aGenRiga.PG_ACCERTAMENTO_SCADENZARIO:=1;
    aGenRiga.CD_TERZO_UO_CDS:=aCdTerzoUO;
    aGenRiga.PG_BANCA_UO_CDS:=aPgBancaUO;
    aGenRiga.CD_MODALITA_PAG_UO_CDS:=aCdModPagUO;
   else
    if isCoriEnteSuCompNeg then
     aGenRiga.CD_TERZO:=aCdTerzoEnte;
     aGenRiga.CD_MODALITA_PAG:=aCdModPagEnte;
     aGenRiga.PG_BANCA:=aPgBancaEnte;
    else
     aGenRiga.CD_TERZO:=aCompenso.CD_TERZO;
     aGenRiga.CD_MODALITA_PAG:=aCompenso.cd_modalita_pag;
     aGenRiga.PG_BANCA:=aCompenso.pg_banca;
	end if;
	aGenRiga.CD_CDS_OBBLIGAZIONE:=aObb.CD_CDS;
    aGenRiga.ESERCIZIO_OBBLIGAZIONE:=aObb.ESERCIZIO;
    aGenRiga.ESERCIZIO_ORI_OBBLIGAZIONE:=aObb.ESERCIZIO_ORIGINALE;
    aGenRiga.PG_OBBLIGAZIONE:=aObb.PG_OBBLIGAZIONE;
    aGenRiga.PG_OBBLIGAZIONE_SCADENZARIO:=aObbScad.PG_OBBLIGAZIONE_SCADENZARIO;
   end if;
   aGenRiga.DACR:=aGen.DACR;
   aGenRiga.UTCR:=aGen.UTCR;
   aGenRiga.UTUV:=aGen.UTUV;
   aGenRiga.DUVA:=aGen.DUVA;
   aGenRiga.PG_VER_REC:=aGen.PG_VER_REC;
   aGenRiga.TI_ASSOCIATO_MANREV:=aGen.TI_ASSOCIATO_MANREV;
   aListGenRighe(1):=aGenRiga;
   CNRCTB110.CREAGENERICO(aGen,aListGenRighe);

   -- AGGIUNGO ALLA COLLEZIONE DELLE REVERSALI LA REVERSALE CORI CON I COLLEGAMENTI AL GENERICO IMPOSTATI

   if isCoriEntrata then
    aRev:=null;
    aRevRiga:=null;
    aRev.CD_CDS:=aAcc.cd_cds;
    aRev.ESERCIZIO:=aAcc.esercizio;
    aRev.CD_UNITA_ORGANIZZATIVA:=aAcc.cd_unita_organizzativa;
    aRev.CD_CDS_ORIGINE:=aAcc.cd_cds;
    aRev.CD_UO_ORIGINE:=aAcc.cd_unita_organizzativa;
    aRev.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_REV;
    aRev.TI_REVERSALE:=CNRCTB038.TI_REV_INC;
    aRev.TI_COMPETENZA_RESIDUO:=CNRCTB038.TI_MAN_COMP;
    aRev.DS_REVERSALE:='CORI-D cn.'||aCori.pg_compenso||' '||aCori.cd_contributo_ritenuta;
    aRev.STATO:=CNRCTB038.STATO_REV_EME;
    aRev.DT_EMISSIONE:=TRUNC(aDateCont);
 --   aRev.DT_TRASMISSIONE:=;
 --   aRev.DT_INCASSO:=;
 --   aRev.DT_ANNULLAMENTO:=;
    aRev.IM_REVERSALE:=aAcc.im_accertamento;
    aRev.IM_INCASSATO:=0;
    aRev.DACR:=aTSNow;
    aRev.UTCR:=aUser;
    aRev.DUVA:=aTSNow;
    aRev.UTUV:=aUser;
    aRev.PG_VER_REC:=1;
    aRev.STATO_TRASMISSIONE:=CNRCTB038.STATO_REV_TRASCAS_NODIST;
    aRevRiga.CD_CDS:=aRev.cd_cds;
    aRevRiga.ESERCIZIO:=aRev.esercizio;
    aRevRiga.ESERCIZIO_ACCERTAMENTO:=aAcc.esercizio;
    aRevRiga.ESERCIZIO_ORI_ACCERTAMENTO:=aAcc.esercizio_originale;
    aRevRiga.PG_ACCERTAMENTO:=aAcc.pg_accertamento;
    aRevRiga.PG_ACCERTAMENTO_SCADENZARIO:=1;
    aRevRiga.CD_CDS_DOC_AMM:=aGen.cd_cds;
    aRevRiga.CD_UO_DOC_AMM:=aGen.cd_unita_organizzativa;
    aRevRiga.ESERCIZIO_DOC_AMM:=aGen.esercizio;
    aRevRiga.CD_TIPO_DOCUMENTO_AMM:=aGen.cd_tipo_documento_amm;
    aRevRiga.PG_DOC_AMM:=aGen.pg_documento_generico;
    aRevRiga.DS_REVERSALE_RIGA:=aRev.ds_reversale;
    aRevRiga.STATO:=aRev.STATO;
    aRevRiga.CD_TERZO:=aGenRiga.cd_terzo;
    aRevRiga.CD_TERZO_UO:=aGenRiga.cd_terzo_uo_cds;
    aRevRiga.PG_BANCA:=aGenRiga.pg_banca_uo_cds;
    aRevRiga.CD_MODALITA_PAG:=aGenRiga.cd_modalita_pag_uo_cds;
    aRevRiga.IM_REVERSALE_RIGA:=aRev.im_reversale;
    aRevRiga.FL_PGIRO:='Y';
    aRevRiga.UTCR:=aUser;
    aRevRiga.DACR:=aTSNow;
    aRevRiga.UTUV:=aUser;
    aRevRiga.DUVA:=aTSNow;
    aRevRiga.PG_VER_REC:=1;
    aRevRighe(1):=aRevRiga;
    -- Aggiornamento saldi scadenza accertamento
    update accertamento_scadenzario set
        im_associato_doc_amm = im_associato_doc_amm + aGen.im_totale,
        duva=aTSNow,
        utuv=aUser,
    	pg_ver_rec = pg_ver_rec+1
    where
            cd_cds = aAccScad.cd_cds
    	and esercizio = aAccScad.esercizio
    	and esercizio_originale = aAccScad.esercizio_originale
    	and pg_accertamento= aAccScad.pg_accertamento
    	and pg_accertamento_scadenzario = aAccScad.pg_accertamento_scadenzario;

    -- Aggiornamento CORI
    update contributo_ritenuta set
        stato_cofi_cr = CNRCTB100.STATO_COM_COFI_TOT_MR,
    	cd_cds_accertamento = aAcc.cd_cds,
    	esercizio_accertamento = aAcc.esercizio,
    	esercizio_ori_accertamento = aAcc.esercizio_originale,
    	pg_accertamento = aAcc.pg_accertamento,
    	pg_accertamento_scadenzario = 1, -- La scadenza �empre una
        duva=aTSNow,
        utuv=aUser,
    	pg_ver_rec = pg_ver_rec+1
    where
            cd_cds = aCompenso.cd_cds
    	and esercizio = aCompenso.esercizio
    	and cd_unita_organizzativa = aCompenso.cd_unita_organizzativa
    	and pg_compenso = aCompenso.pg_compenso
        and cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
		and ti_ente_percipiente = aCori.ti_ente_percipiente;
   else
    aMan:=null;
    aManRiga:=null;
    aMan.CD_CDS:=aObb.cd_cds;
    aMan.ESERCIZIO:=aObb.esercizio;
    aMan.CD_UNITA_ORGANIZZATIVA:=aObb.cd_unita_organizzativa;
    aMan.CD_CDS_ORIGINE:=aObb.cd_cds;
    aMan.CD_UO_ORIGINE:=aObb.cd_unita_organizzativa;
    aMan.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_MAN;
    aMan.TI_MANDATO:=CNRCTB038.TI_MAN_PAG;
    aMan.TI_COMPETENZA_RESIDUO:=CNRCTB038.TI_MAN_COMP;
    aMan.DS_MANDATO:='CORI-C cn.'||aCori.pg_compenso||' '||aCori.cd_contributo_ritenuta;
    aMan.STATO:=CNRCTB038.STATO_AUT_EME;
    aMan.DT_EMISSIONE:=TRUNC(aDateCont);
 --   aMan.DT_TRASMISSIONE:=;
 --   aMan.DT_INCASSO:=;
 --   aMan.DT_ANNULLAMENTO:=;
    aMan.IM_MANDATO:=aObb.im_obbligazione;
    aMan.IM_RITENUTE:=0;
    aMan.IM_PAGATO:=0;
 -- Massimo Iaccarino Fine
    aMan.DACR:=aTSNow;
    aMan.UTCR:=aUser;
    aMan.DUVA:=aTSNow;
    aMan.UTUV:=aUser;
    aMan.PG_VER_REC:=1;
    aMan.STATO_TRASMISSIONE:=CNRCTB038.STATO_AUT_TRASCAS_NODIST;
    aManRiga.CD_CDS:=aMan.cd_cds;
    aManRiga.ESERCIZIO:=aMan.esercizio;
    aManRiga.ESERCIZIO_OBBLIGAZIONE:=aObb.esercizio;
    aManRiga.ESERCIZIO_ORI_OBBLIGAZIONE:=aObb.esercizio_originale;
    aManRiga.PG_OBBLIGAZIONE:=aObb.pg_obbligazione;
    aManRiga.PG_OBBLIGAZIONE_SCADENZARIO:=1;
    aManRiga.CD_CDS_DOC_AMM:=aGen.cd_cds;
    aManRiga.CD_UO_DOC_AMM:=aGen.cd_unita_organizzativa;
    aManRiga.ESERCIZIO_DOC_AMM:=aGen.esercizio;
    aManRiga.CD_TIPO_DOCUMENTO_AMM:=aGen.cd_tipo_documento_amm;
    aManRiga.PG_DOC_AMM:=aGen.pg_documento_generico;
    aManRiga.DS_MANDATO_RIGA:=aMan.ds_mandato;
    aManRiga.STATO:=aMan.STATO;
    aManRiga.CD_TERZO:=aGenRiga.cd_terzo;
 --   aManRiga.CD_TERZO_UO:=0;
    aManRiga.PG_BANCA:=aGenRiga.PG_BANCA;
    aManRiga.CD_MODALITA_PAG:=aGenRiga.CD_MODALITA_PAG;
    aManRiga.IM_MANDATO_RIGA:=aMan.im_mandato;
    aManRiga.IM_RITENUTE_RIGA:=0;
    aManRiga.FL_PGIRO:='Y';
    aManRiga.UTCR:=aUser;
    aManRiga.DACR:=aTSNow;
    aManRiga.UTUV:=aUser;
    aManRiga.DUVA:=aTSNow;
    aManRiga.PG_VER_REC:=1;
    aManRighe(1):=aManRiga;
    -- Aggiornamento saldi scadenza accertamento
    update obbligazione_scadenzario set
        im_associato_doc_amm = im_associato_doc_amm + aGen.im_totale,
        duva=aTSNow,
        utuv=aUser,
    	pg_ver_rec = pg_ver_rec+1
    where
            cd_cds = aObbScad.cd_cds
    	and esercizio = aObbScad.esercizio
    	and esercizio_originale = aObbScad.esercizio_originale
    	and pg_obbligazione= aObbScad.pg_obbligazione
    	and pg_obbligazione_scadenzario = aObbScad.pg_obbligazione_scadenzario;

    -- Aggiornamento CORI
    update contributo_ritenuta set
        stato_cofi_cr = CNRCTB100.STATO_COM_COFI_TOT_MR,
    	cd_cds_obbligazione = aObb.cd_cds,
    	esercizio_obbligazione = aObb.esercizio,
    	esercizio_ori_obbligazione = aObb.esercizio_originale,
    	pg_obbligazione = aObb.pg_obbligazione,
    	pg_obbligazione_scadenzario = 1, -- La scadenza �empre una
        duva=aTSNow,
        utuv=aUser,
    	pg_ver_rec = pg_ver_rec+1
    where
            cd_cds = aCompenso.cd_cds
    	and esercizio = aCompenso.esercizio
    	and cd_unita_organizzativa = aCompenso.cd_unita_organizzativa
    	and pg_compenso = aCompenso.pg_compenso
        and cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
		and ti_ente_percipiente = aCori.ti_ente_percipiente;
   end if;
 end;

procedure gestioneNoCori(
  inEsercizio number,
  aCompenso compenso%rowtype,
  aRev in out reversale%rowtype,
  aRevRighe in out CNRCTB038.righeReversaleList,
  aUser varchar2,
  aTSNow date
 ) is
  aGen documento_generico%rowtype;
  aGenRiga documento_generico_riga%rowtype;
  aRevRiga reversale_riga%rowtype;
  aManRiga mandato_riga%rowtype;
  aElementoVoce elemento_voce.cd_elemento_voce%Type;
  aVoceF voce_f%rowtype;
  aAcc accertamento%rowtype;
  aAccScad accertamento_scadenzario%rowtype;
  aObb obbligazione%rowtype;
  aObbScad obbligazione_scadenzario%rowtype;
  aListGenRighe CNRCTB100.docGenRigaList;
  aCdTerzoUO number(8);
  aCdModPagUO varchar2(10);
  aPgBancaUO number(10);
  aDateCont date;
  denominazione VARCHAR2(102);
   parametriCnr  parametri_cnr%rowtype;
 begin
   aDateCont:=CNRCTB008.getTimestampContabile(inEsercizio,aTSNow);

   -- Estrae il terzo associato all'UO del compenso e le sue modalit�i pagamento di tipo bancario pi� recenti
   CNRCTB080.getTerzoPerUO(aCompenso.cd_uo_origine, aCdTerzoUO, aCdModPagUO, aPgBancaUO,aCompenso.esercizio);

   -- Prendo da CONFIGURAZIONE_CNR l'elemento voce
   aElementoVoce := CNRCTB015.getVal01PerChiave(inEsercizio, 'ELEMENTO_VOCE_SPECIALE','NETTO_DA_TRATTENERE');
	if (parametriCnr.fl_nuovo_pdg='N') then
	   Begin
	      Select *
	      Into aVoceF
	      From voce_f
	      Where esercizio = inEsercizio
	        And ti_appartenenza = CNRCTB001.APPARTENENZA_CDS
	        And ti_gestione = CNRCTB001.GESTIONE_ENTRATE
	        And cd_titolo_capitolo = aElementoVoce
	        And ti_voce = CNRCTB001.CAPITOLO;
	   Exception when NO_DATA_FOUND then
	      IBMERR001.RAISE_ERR_GENERICO('Voce finanziaria associato all''elemento voce '||aElementoVoce||'non trovata');
	   End;


   end if;
   If aCompenso.cognome Is Not Null Then
       denominazione := aCompenso.cognome||' '||aCompenso.nome;
   Else
       denominazione := aCompenso.ragione_sociale;
   End If;

   -- Creo la PGIRO
    aAcc:=null;
    aAccScad:=null;
    aAcc.CD_CDS:=aCompenso.cd_cds;
    aAcc.ESERCIZIO:=inEsercizio;
    aAcc.ESERCIZIO_ORIGINALE:=inEsercizio;
    aAcc.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_ACC_PGIRO;
    aAcc.CD_UNITA_ORGANIZZATIVA:=aCompenso.cd_unita_organizzativa;
    aAcc.CD_CDS_ORIGINE:=aCompenso.cd_cds;
    aAcc.CD_UO_ORIGINE:=aCompenso.cd_unita_organizzativa;
    aAcc.TI_APPARTENENZA:=aVoceF.ti_appartenenza;
    aAcc.TI_GESTIONE:=aVoceF.ti_gestione;
    aAcc.CD_ELEMENTO_VOCE:=aVoceF.cd_elemento_voce;
    if(parametriCnr.fl_nuovo_pdg='N' ) then
    	aAcc.TI_APPARTENENZA:=aVoceF.ti_appartenenza;
    	aAcc.TI_GESTIONE:=aVoceF.ti_gestione;
    	aAcc.CD_ELEMENTO_VOCE:=aVoceF.cd_elemento_voce;
    	aAcc.CD_VOCE:=aVoceF.cd_voce;
    else
    	aAcc.TI_APPARTENENZA:=CNRCTB001.APPARTENENZA_CNR;
    	aAcc.TI_GESTIONE:=CNRCTB001.GESTIONE_ENTRATE;
    	aAcc.CD_ELEMENTO_VOCE:=aElementoVoce;
    	aAcc.CD_VOCE:=aElementoVoce;
    end if;
    aAcc.DT_REGISTRAZIONE:=TRUNC(aDateCont);
    aAcc.DS_ACCERTAMENTO:='Sospensione del pagamento netto su Compenso '||aCompenso.pg_compenso||' - '||denominazione;
    aAcc.NOTE_ACCERTAMENTO:='';
    aAcc.CD_TERZO:=aCompenso.cd_terzo;
    aAcc.IM_ACCERTAMENTO:=aCompenso.im_netto_da_trattenere;
    aAcc.FL_PGIRO:='Y';
    aAcc.RIPORTATO:='N';
    aAcc.DACR:=aTSNow;
    aAcc.UTCR:=aUser;
    aAcc.DUVA:=aTSNow;
    aAcc.UTUV:=aUser;
    aAcc.PG_VER_REC:=1;
    aAcc.ESERCIZIO_COMPETENZA:=inEsercizio;
    CNRCTB040.CREAACCERTAMENTOPGIRO(false,aAcc,aAccScad,aObb,aObbScad,trunc(aTSNow));

    -- Etichetto le PGIRO create
    Update accertamento
    Set fl_netto_sospeso = 'Y'
    Where cd_cds = aAcc.cd_cds
      And esercizio = aAcc.esercizio
      And esercizio_originale = aAcc.esercizio_originale
      And pg_accertamento = aAcc.pg_accertamento;

    -- Poich�a PGIRO di spesa viene creata con terzo = creditori e debitori diversi,
    -- forzo il terzo uguale a quello della PGIRO di entrata
    Update obbligazione
    Set fl_netto_sospeso = 'Y',
        cd_terzo = aCompenso.cd_terzo
    Where cd_cds = aObb.cd_cds
      And esercizio = aObb.esercizio
      And esercizio_originale = aObb.esercizio_originale
      And pg_obbligazione = aObb.pg_obbligazione;

    -- Creo il documento generico di entrata sulla partita di giro appena creata
    aGen:=null;
    aGenRiga:=null;
    --il tipo deve essere necessariamente TI_GEN_CORI_ACC_ENTRATA perch�eve essere gestito come un cori
    --cio�nnullato quando si cancella il mandato del compenso
    aGen.CD_TIPO_DOCUMENTO_AMM:=CNRCTB100.TI_GEN_CORI_ACC_ENTRATA;
    aGen.CD_CDS:=aAcc.cd_cds;
    aGen.CD_UNITA_ORGANIZZATIVA:=aAcc.cd_unita_organizzativa;
    aGen.ESERCIZIO:=aAcc.esercizio;
    aGen.CD_CDS_ORIGINE:=aAcc.cd_cds;
    aGen.CD_UO_ORIGINE:=aAcc.cd_unita_organizzativa;
    aGen.IM_TOTALE:=aAcc.im_accertamento;
    aGen.DATA_REGISTRAZIONE:=TRUNC(aDateCont);
    aGen.DT_DA_COMPETENZA_COGE:=aCompenso.DT_DA_COMPETENZA_COGE;
    aGen.DT_A_COMPETENZA_COGE:=aCompenso.DT_A_COMPETENZA_COGE;
    aGen.DS_DOCUMENTO_GENERICO:='Sospensione del pagamento netto su Compenso '||aCompenso.pg_compenso||' - '||denominazione;
    aGen.TI_ISTITUZ_COMMERC:=CNRCTB100.TI_ISTITUZIONALE;
    aGen.STATO_COFI:=CNRCTB100.STATO_GEN_COFI_TOT_MR;
    aGen.STATO_COGE:=CNRCTB100.STATO_COEP_EXC;
    aGen.STATO_COAN:=CNRCTB100.STATO_COEP_EXC;
    aGen.CD_DIVISA:='EURO';
    aGen.CAMBIO:=1;
    aGen.DACR:=aTSNow;
    aGen.UTCR:=aUser;
    aGen.DUVA:=aTSNow;
    aGen.UTUV:=aUser;
    aGen.PG_VER_REC:=1;
    aGen.DT_SCADENZA:=TRUNC(aTSNow);
    aGen.STATO_PAGAMENTO_FONDO_ECO:=CNRCTB100.STATO_NO_PFONDOECO;
    aGen.TI_ASSOCIATO_MANREV:=CNRCTB100.TI_ASSOC_TOT_MAN_REV ;

    aGenRiga.CD_CDS:=aGen.CD_CDS;
    aGenRiga.CD_UNITA_ORGANIZZATIVA:=aGen.CD_UNITA_ORGANIZZATIVA;
    aGenRiga.ESERCIZIO:=aGen.ESERCIZIO;
    aGenRiga.CD_TIPO_DOCUMENTO_AMM:=aGen.CD_TIPO_DOCUMENTO_AMM;
    aGenRiga.DS_RIGA:=aGen.DS_DOCUMENTO_GENERICO;
    aGenRiga.IM_RIGA_DIVISA:=aGen.IM_TOTALE;
    aGenRiga.IM_RIGA:=aGen.IM_TOTALE;
    aGenRiga.RAGIONE_SOCIALE:=aCompenso.RAGIONE_SOCIALE;
    aGenRiga.NOME:=aCompenso.NOME;
    aGenRiga.COGNOME:=aCompenso.COGNOME;
    aGenRiga.CODICE_FISCALE:=aCompenso.CODICE_FISCALE;
    aGenRiga.PARTITA_IVA:=aCompenso.PARTITA_IVA;
    aGenRiga.DT_DA_COMPETENZA_COGE:=aCompenso.DT_DA_COMPETENZA_COGE;
    aGenRiga.DT_A_COMPETENZA_COGE:=aCompenso.DT_A_COMPETENZA_COGE;
    aGenRiga.STATO_COFI:=aGen.STATO_COFI;
    aGenRiga.CD_TERZO:=aCompenso.CD_TERZO;
    aGenRiga.CD_CDS_ACCERTAMENTO:=aAcc.CD_CDS;
    aGenRiga.ESERCIZIO_ACCERTAMENTO:=aAcc.ESERCIZIO;
    aGenRiga.ESERCIZIO_ORI_ACCERTAMENTO:=aAcc.ESERCIZIO_ORIGINALE;
    aGenRiga.PG_ACCERTAMENTO:=aAcc.PG_ACCERTAMENTO;
    aGenRiga.PG_ACCERTAMENTO_SCADENZARIO:=1;
    aGenRiga.CD_TERZO_UO_CDS:=aCdTerzoUO;
    aGenRiga.PG_BANCA_UO_CDS:=aPgBancaUO;
    aGenRiga.CD_MODALITA_PAG_UO_CDS:=aCdModPagUO;
    aGenRiga.DACR:=aGen.DACR;
    aGenRiga.UTCR:=aGen.UTCR;
    aGenRiga.UTUV:=aGen.UTUV;
    aGenRiga.DUVA:=aGen.DUVA;
    aGenRiga.PG_VER_REC:=aGen.PG_VER_REC;
    aGenRiga.TI_ASSOCIATO_MANREV:=aGen.TI_ASSOCIATO_MANREV;
    aListGenRighe(1):=aGenRiga;
    CNRCTB110.CREAGENERICO(aGen,aListGenRighe);

    -- AGGIUNGO ALLA COLLEZIONE DELLE REVERSALI LA REVERSALE CORI CON I COLLEGAMENTI AL GENERICO IMPOSTATI
    aRev:=null;
    aRevRiga:=null;
    aRev.CD_CDS:=aAcc.cd_cds;
    aRev.ESERCIZIO:=aAcc.esercizio;
    aRev.CD_UNITA_ORGANIZZATIVA:=aAcc.cd_unita_organizzativa;
    aRev.CD_CDS_ORIGINE:=aAcc.cd_cds;
    aRev.CD_UO_ORIGINE:=aAcc.cd_unita_organizzativa;
    aRev.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_REV;
    aRev.TI_REVERSALE:=CNRCTB038.TI_REV_INC;
    aRev.TI_COMPETENZA_RESIDUO:=CNRCTB038.TI_MAN_COMP;
    aRev.DS_REVERSALE:='Sospensione del pagamento netto su Compenso '||aCompenso.pg_compenso||' - '||denominazione;
    aRev.STATO:=CNRCTB038.STATO_REV_EME;
    aRev.DT_EMISSIONE:=TRUNC(aDateCont);
    aRev.IM_REVERSALE:=aAcc.im_accertamento;
    aRev.IM_INCASSATO:=0;
    aRev.DACR:=aTSNow;
    aRev.UTCR:=aUser;
    aRev.DUVA:=aTSNow;
    aRev.UTUV:=aUser;
    aRev.PG_VER_REC:=1;
    aRev.STATO_TRASMISSIONE:=CNRCTB038.STATO_REV_TRASCAS_NODIST;
    aRevRiga.CD_CDS:=aRev.cd_cds;
    aRevRiga.ESERCIZIO:=aRev.esercizio;
    aRevRiga.ESERCIZIO_ACCERTAMENTO:=aAcc.esercizio;
    aRevRiga.ESERCIZIO_ORI_ACCERTAMENTO:=aAcc.esercizio_originale;
    aRevRiga.PG_ACCERTAMENTO:=aAcc.pg_accertamento;
    aRevRiga.PG_ACCERTAMENTO_SCADENZARIO:=1;
    aRevRiga.CD_CDS_DOC_AMM:=aGen.cd_cds;
    aRevRiga.CD_UO_DOC_AMM:=aGen.cd_unita_organizzativa;
    aRevRiga.ESERCIZIO_DOC_AMM:=aGen.esercizio;
    aRevRiga.CD_TIPO_DOCUMENTO_AMM:=aGen.cd_tipo_documento_amm;
    aRevRiga.PG_DOC_AMM:=aGen.pg_documento_generico;
    aRevRiga.DS_REVERSALE_RIGA:=aRev.ds_reversale;
    aRevRiga.STATO:=aRev.STATO;
    aRevRiga.CD_TERZO:=aGenRiga.cd_terzo;
    aRevRiga.CD_TERZO_UO:=aGenRiga.cd_terzo_uo_cds;
    aRevRiga.PG_BANCA:=aGenRiga.pg_banca_uo_cds;
    aRevRiga.CD_MODALITA_PAG:=aGenRiga.cd_modalita_pag_uo_cds;
    aRevRiga.IM_REVERSALE_RIGA:=aRev.im_reversale;
    aRevRiga.FL_PGIRO:='Y';
    aRevRiga.UTCR:=aUser;
    aRevRiga.DACR:=aTSNow;
    aRevRiga.UTUV:=aUser;
    aRevRiga.DUVA:=aTSNow;
    aRevRiga.PG_VER_REC:=1;
    aRevRighe(1):=aRevRiga;
    -- Aggiornamento saldi scadenza accertamento
    update accertamento_scadenzario set
        im_associato_doc_amm = im_associato_doc_amm + aGen.im_totale,
        duva=aTSNow,
        utuv=aUser,
    	pg_ver_rec = pg_ver_rec+1
    where
            cd_cds = aAccScad.cd_cds
    	and esercizio = aAccScad.esercizio
    	and esercizio_originale = aAccScad.esercizio_originale
    	and pg_accertamento= aAccScad.pg_accertamento
    	and pg_accertamento_scadenzario = aAccScad.pg_accertamento_scadenzario;
/*
    -- Aggiornamento CORI
    update contributo_ritenuta set
        stato_cofi_cr = CNRCTB100.STATO_COM_COFI_TOT_MR,
    	cd_cds_accertamento = aAcc.cd_cds,
    	esercizio_accertamento = aAcc.esercizio,
    	esercizio_ori_accertamento = aAcc.esercizio_originale,
    	pg_accertamento = aAcc.pg_accertamento,
    	pg_accertamento_scadenzario = 1, -- La scadenza �empre una
        duva=aTSNow,
        utuv=aUser,
    	pg_ver_rec = pg_ver_rec+1
    where
            cd_cds = aCompenso.cd_cds
    	and esercizio = aCompenso.esercizio
    	and cd_unita_organizzativa = aCompenso.cd_unita_organizzativa
    	and pg_compenso = aCompenso.pg_compenso
        and cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
		and ti_ente_percipiente = aCori.ti_ente_percipiente;
*/
 End;


 PROCEDURE contabilizzaCompensoCOFI
      (
       inCDSCompenso VARCHAR2,
       inUOCompenso VARCHAR2,
       inEsercizio NUMBER,
       inEsercizioOrigine NUMBER,
       inPgCompenso NUMBER,
       aUser varchar2
	  ) IS
  aManP mandato%rowtype;
 begin
  contabilizzaCompensoCOFI
      (
	   'O',
       inCDSCompenso,
       inUOCompenso,
       inEsercizio,
       inEsercizioOrigine,
       inPgCompenso,
       aUser,
	   aManP
	  );
 end;

 PROCEDURE contabilizzaCompensoCOFIFondo
      (
       inCDSCompenso VARCHAR2,
       inUOCompenso VARCHAR2,
       inEsercizio NUMBER,
       inEsercizioCompenso NUMBER,
       inPgCompenso NUMBER,
       aUser varchar2,
	   aManP IN OUT mandato%rowtype
	  ) IS
 begin
  contabilizzaCompensoCOFI
      (
	   'F',
       inCDSCompenso,
       inUOCompenso,
       inEsercizio,
       inEsercizioCompenso,
       inPgCompenso,
       aUser,
	   aManP
	  );
 end;


 function getImp(aLRev IN OUT reversale%rowtype, aLRevRighe IN CNRCTB038.righeReversaleList) return number is
 begin
   if aLRevRighe.count > 0 then
    return aLRev.im_reversale;
   end if;
   return 0;
 end;

 function getImp(aLMan IN OUT mandato%rowtype, aLManRighe IN CNRCTB038.righeMandatoList) return number is
 begin
   if aLManRighe.count > 0 then
    return aLMan.im_mandato;
   end if;
   return 0;
 end;



 procedure setDaProcessareCoge(aLRev IN OUT reversale%rowtype, aLRevRighe IN CNRCTB038.righeReversaleList) is
 begin
   if aLRevRighe.count > 0 then
    aLRev.stato_coge := CNRCTB100.STATO_COEP_INI;
   end if;
 end;

 procedure setDaProcessareCoge(aLMan IN OUT mandato%rowtype, aLManRighe IN CNRCTB038.righeMandatoList) is
 begin
   if aLManRighe.count > 0 then
    aLMan.stato_coge := CNRCTB100.STATO_COEP_INI;
   end if;
 end;

 procedure addAssCompDocNMP(aCompenso compenso%rowtype,aMan mandato%rowtype, aManRighe CNRCTB038.righeMandatoList) is
  aAssCompDocNMP ASS_COMP_DOC_CONT_NMP%rowtype;
 begin
     if aManRighe.count = 0 then
      return;
	 end if;
     aAssCompDocNMP.CD_CDS_COMPENSO:=aCompenso.cd_cds;
     aAssCompDocNMP.ESERCIZIO_COMPENSO:=aCompenso.esercizio;
     aAssCompDocNMP.CD_UO_COMPENSO:=aCompenso.cd_unita_organizzativa;
     aAssCompDocNMP.PG_COMPENSO:=aCompenso.pg_compenso;
     aAssCompDocNMP.CD_CDS_DOC:=aMan.cd_cds;
     aAssCompDocNMP.ESERCIZIO_DOC:=aMan.esercizio;
     aAssCompDocNMP.PG_DOC:=aMan.pg_mandato;
     aAssCompDocNMP.CD_TIPO_DOC:=TI_MANDATO;
     aAssCompDocNMP.UTCR:=aMan.utcr;
     aAssCompDocNMP.UTUV:=aMan.utcr;
     aAssCompDocNMP.DACR:=aMan.dacr;
     aAssCompDocNMP.DUVA:=aMan.dacr;
     aAssCompDocNMP.PG_VER_REC:=1;
     ins_ASS_COMP_DOC_CONT_NMP(aAssCompDocNMP);
 end;

 procedure addAssCompDocNMP(aCompenso compenso%rowtype,aRev reversale%rowtype,aRevRighe CNRCTB038.righeReversaleList) is
  aAssCompDocNMP ASS_COMP_DOC_CONT_NMP%rowtype;
 begin
     if aRevRighe.count = 0 then
      return;
	 end if;
     aAssCompDocNMP.CD_CDS_COMPENSO:=aCompenso.cd_cds;
     aAssCompDocNMP.ESERCIZIO_COMPENSO:=aCompenso.esercizio;
     aAssCompDocNMP.CD_UO_COMPENSO:=aCompenso.cd_unita_organizzativa;
     aAssCompDocNMP.PG_COMPENSO:=aCompenso.pg_compenso;
     aAssCompDocNMP.CD_CDS_DOC:=aRev.cd_cds;
     aAssCompDocNMP.ESERCIZIO_DOC:=aRev.esercizio;
     aAssCompDocNMP.PG_DOC:=aRev.pg_reversale;
     aAssCompDocNMP.CD_TIPO_DOC:=TI_REVERSALE;
     aAssCompDocNMP.UTCR:=aRev.utcr;
     aAssCompDocNMP.UTUV:=aRev.utcr;
     aAssCompDocNMP.DACR:=aRev.dacr;
     aAssCompDocNMP.DUVA:=aRev.dacr;
     aAssCompDocNMP.PG_VER_REC:=1;
     ins_ASS_COMP_DOC_CONT_NMP(aAssCompDocNMP);
 end;

 PROCEDURE checkDisassRevCori(aComp compenso%rowtype,aCori contributo_ritenuta%rowtype,aRev in out reversale%rowtype,aRevRighe in out CNRCTB038.righeReversaleList) is
  aManTemp mandato%rowtype;
  aManTempRighe CNRCTB038.righeMandatoList;
 begin
  aManTemp:=null;
  aManTempRighe.delete;
  if
         aRevRighe.count > 0
	 and aCori.ammontare > 0
     and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_PERCEPIENTE
  then
   CNRCTB037.GENERADOCUMENTO(aManTemp,aManTempRighe,aRev,aRevRighe);
   addAssCompDocNMP(aComp, aRev, aRevRighe);
   aRev:=null;
   aRevRighe.delete;
  end if;
 end;

 PROCEDURE contabilizzaCompensoCOFI
      (
	   inOrigine char,
       inCDSCompenso VARCHAR2,
       inUOCompenso VARCHAR2,
       inEsercizio NUMBER,
       inEsercizioOrigine NUMBER,
       inPgCompenso NUMBER,
       aUser varchar2,
	   aManP IN OUT mandato%rowtype
	  ) IS
  aCompenso compenso%rowtype;
  aAcc accertamento%rowtype;
  aAccScad accertamento_scadenzario%rowtype;
  aDettScadList CNRCTB035.scadVoceListE;
  aAccScadVoce accertamento_Scad_voce%rowtype;
  aVoceF voce_f%rowtype;
  aEvEntrata elemento_voce%rowtype;
  aTSNow date;
  aObb obbligazione%rowtype;
  aObbScad obbligazione_scadenzario%rowtype;
  aManPRiga mandato_riga%rowtype;
  aListRigheManP CNRCTB038.righeMandatoList;
  aAcc1 accertamento%rowtype;
  aAcc2 accertamento%rowtype;
  aAcc3 accertamento%rowtype;
  aAcc4 accertamento%rowtype;
  aAcc5 accertamento%rowtype;
  aAcc6 accertamento%rowtype;
  aAcc7 accertamento%rowtype;
  aAcc8 accertamento%rowtype;
  aAcc9 accertamento%rowtype;
  aAcc10 accertamento%rowtype;
  aAccNoCori accertamento%rowtype;
  aGen documento_generico%rowtype;
  aGenRiga documento_generico_riga%rowtype;
  aListGenRighe CNRCTB100.docGenRigaList;
  aGen1 documento_generico%rowtype;
  aGen2 documento_generico%rowtype;
  aGen3 documento_generico%rowtype;
  aGen4 documento_generico%rowtype;
  aGen5 documento_generico%rowtype;
  aGen6 documento_generico%rowtype;
  aGen7 documento_generico%rowtype;
  aGen8 documento_generico%rowtype;
  aGen9 documento_generico%rowtype;
  aGen10 documento_generico%rowtype;
  aGenNoCori documento_generico%rowtype;
  aRev1 reversale%rowtype;
  aRevRighe1 CNRCTB038.righeReversaleList;
  aRev2 reversale%rowtype;
  aRevRighe2 CNRCTB038.righeReversaleList;
  aRev3 reversale%rowtype;
  aRevRighe3 CNRCTB038.righeReversaleList;
  aRev4 reversale%rowtype;
  aRevRighe4 CNRCTB038.righeReversaleList;
  aRev5 reversale%rowtype;
  aRevRighe5 CNRCTB038.righeReversaleList;
  aRev6 reversale%rowtype;
  aRevRighe6 CNRCTB038.righeReversaleList;
  aRev7 reversale%rowtype;
  aRevRighe7 CNRCTB038.righeReversaleList;
  aRev8 reversale%rowtype;
  aRevRighe8 CNRCTB038.righeReversaleList;
  aRev9 reversale%rowtype;
  aRevRighe9 CNRCTB038.righeReversaleList;
  aRev10 reversale%rowtype;
  aRevRighe10 CNRCTB038.righeReversaleList;
  aRevNoCori reversale%rowtype;
  aRevRigheNoCori CNRCTB038.righeReversaleList;
  aMan1 mandato%rowtype;
  aManRighe1 CNRCTB038.righeMandatoList;
  aMan2 mandato%rowtype;
  aManRighe2 CNRCTB038.righeMandatoList;
  aMan3 mandato%rowtype;
  aManRighe3 CNRCTB038.righeMandatoList;
  aMan4 mandato%rowtype;
  aManRighe4 CNRCTB038.righeMandatoList;
  aMan5 mandato%rowtype;
  aManRighe5 CNRCTB038.righeMandatoList;
  aMan6 mandato%rowtype;
  aManRighe6 CNRCTB038.righeMandatoList;
  aMan7 mandato%rowtype;
  aManRighe7 CNRCTB038.righeMandatoList;
  aMan8 mandato%rowtype;
  aManRighe8 CNRCTB038.righeMandatoList;
  aMan9 mandato%rowtype;
  aManRighe9 CNRCTB038.righeMandatoList;
  aMan10 mandato%rowtype;
  aManRighe10 CNRCTB038.righeMandatoList;
  i number;
  aNumCRNeg number;
  aTotCori number(15,2);
  aTotCoriPositivi number(15,2);
  aTotCoriEntePosLiquid number(15,2);
  aUOENTE unita_organizzativa%rowtype;
  aCdTerzoUo NUMBER(8);
  aCdModPagUo VARCHAR2(10);
  aPgBancaUo NUMBER(10);
  aMissione missione%rowtype;
  aAnticipo anticipo%rowtype;
  aImportoMandato number(15,2);
  aTotManRev number(15,2);
  aCdClassificazioneCori TIPO_CONTRIBUTO_RITENUTA.cd_classificazione_cori%TYPE;
  aAnagTerzoUo anagrafico%rowtype;
  isCompMissConAnt boolean;
  aCori1 contributo_ritenuta%rowtype;
  aCori2 contributo_ritenuta%rowtype;
  aCori3 contributo_ritenuta%rowtype;
  aCori4 contributo_ritenuta%rowtype;
  aCori5 contributo_ritenuta%rowtype;
  aCori6 contributo_ritenuta%rowtype;
  aCori7 contributo_ritenuta%rowtype;
  aCori8 contributo_ritenuta%rowtype;
  aCori9 contributo_ritenuta%rowtype;
  aCori10 contributo_ritenuta%rowtype;
  aDateCont date;
  parametriCnr  parametri_cnr%rowtype;
 BEGIN
  -- Check su esercizio
  if
   not CNRCTB008.ISESERCIZIOAPERTO(inEsercizio, inCdsCompenso)
  then
   IBMERR001.RAISE_ERR_GENERICO('L''esercizio '||inEsercizio||' non �perto per il CDS '||inCdsCompenso);
  end if;

  aTSNow:=sysdate;

  aDateCont:=CNRCTB008.getTimestampContabile(inEsercizio,aTSNow);

  if inOrigine not in ('O','F') then
   IBMERR001.RAISE_ERR_GENERICO('Origine di liquidazione non accettabile:'||inOrigine);
  end if;
  -- Fix errore 351
  if inPgCompenso < 0 then
   IBMERR001.RAISE_ERR_GENERICO('I compensi con numerazione provvisoria non sono contabilizzabili');
  end if;

  begin
      select * into aCompenso from compenso where
            cd_cds = inCDSCompenso
    	and esercizio = inEsercizioOrigine
    	and cd_unita_organizzativa = inUOCompenso
    	and pg_compenso = inPgCompenso
	--	and pg_obbligazione is not null -- PER ORA NON SONO GESTITI COMPENSI SU REVERSALE
		and stato_cofi = CNRCTB100.STATO_COM_COFI_CONT
      for update nowait;
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Compenso n.'||inPgCompenso||' cds:'||inCDSCompenso||' uo: '||inUOCompenso||' es:'||inEsercizioOrigine||'non trovato, non contabilizzato o gi�iquidato');
  end;

  -- Se il compenso passa per il fondo, non posso contabilizzarlo direttamente
  if inOrigine = 'O' and not (aCompenso.STATO_PAGAMENTO_FONDO_ECO = CNRCTB100.STATO_NO_PFONDOECO) then
   IBMERR001.RAISE_ERR_GENERICO('Il compenso risulta associato a fondo economale. Compenso n.'||inPgCompenso||' cds:'||inCDSCompenso||' uo: '||inUOCompenso||' es:'||inEsercizioOrigine);
  end if;

  if inOrigine = 'F' and (aCompenso.STATO_PAGAMENTO_FONDO_ECO = CNRCTB100.STATO_NO_PFONDOECO) then
   IBMERR001.RAISE_ERR_GENERICO('Il compenso non risulta essere associato a fondo economale. Compenso n.'||inPgCompenso||' cds:'||inCDSCompenso||' uo: '||inUOCompenso||' es:'||inEsercizioOrigine);
  end if;

  -- Se il compenso �enza obbligazione non carico le informazioni relative all'obbligazione e scadenza
  if aCompenso.pg_obbligazione is not null then
   begin
       select * into aObb from obbligazione where
             cd_cds = aCompenso.cd_cds
     	and esercizio = aCompenso.esercizio_obbligazione
     	and esercizio_originale = aCompenso.esercizio_ori_obbligazione
 		and pg_obbligazione = aCompenso.pg_obbligazione
       for update nowait;
   exception when NO_DATA_FOUND then
    IBMERR001.RAISE_ERR_GENERICO(cnrutil.getLabelObbligazione()||' n.'||aCompenso.pg_obbligazione||' associata a Compenso n.'||inCDSCompenso||' non trovata');
   end;
   begin
       select * into aObbScad from obbligazione_scadenzario where
             cd_cds = aCompenso.cd_cds
     	 and esercizio = aCompenso.esercizio_obbligazione
     	 and esercizio_originale = aCompenso.esercizio_ori_obbligazione
		 and pg_obbligazione = aCompenso.pg_obbligazione
		 and pg_obbligazione_scadenzario = aCompenso.pg_obbligazione_scadenzario
       for update nowait;
   exception when NO_DATA_FOUND then
    IBMERR001.RAISE_ERR_GENERICO('Scadenza di '||cnrutil.getLabelObbligazioneMin()||' n.'||aCompenso.pg_obbligazione||' associata a Compenso n.'||inCDSCompenso||' non trovata');
   end;
  end if;

  i:=0;
  aTotCori:=0;
  aTotCoriPositivi:=0;
  aTotCoriEntePosLiquid:=0;
  for aCori in (
   select * from contributo_ritenuta where
        cd_cds = inCDSCompenso
	and esercizio = inEsercizioOrigine
	and cd_unita_organizzativa = inUOCompenso
	and pg_compenso = inPgCompenso
	and ammontare <> 0
  ) loop
   if i>10 then
    IBMERR001.RAISE_ERR_GENERICO('Numero di contributi/ritenute con importo <> 0 superiore a 10 per il compenso '||aCompenso.pg_compenso);
   end if;
   i:=i+1;
   if i=1 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev1,aRevRighe1,aMan1,aManRighe1,aUser,aTSNow);
    if aRevRighe1.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori1:=aCori;
   end if;
   if i=2 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev2,aRevRighe2,aMan2,aManRighe2,aUser,aTSNow);
    if aRevRighe2.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori2:=aCori;
   end if;
   if i=3 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev3,aRevRighe3,aMan3,aManRighe3,aUser,aTSNow);
    if aRevRighe3.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori3:=aCori;
   end if;
   if i=4 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev4,aRevRighe4,aMan4,aManRighe4,aUser,aTSNow);
    if aRevRighe4.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori4:=aCori;
   end if;
   if i=5 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev5,aRevRighe5,aMan5,aManRighe5,aUser,aTSNow);
    if aRevRighe5.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori5:=aCori;
   end if;
   if i=6 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev6,aRevRighe6,aMan6,aManRighe6,aUser,aTSNow);
    if aRevRighe6.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori6:=aCori;
   end if;
   if i=7 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev7,aRevRighe7,aMan7,aManRighe7,aUser,aTSNow);
    if aRevRighe7.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori7:=aCori;
   end if;
   if i=8 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev8,aRevRighe8,aMan8,aManRighe8,aUser,aTSNow);
    if aRevRighe8.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori8:=aCori;
   end if;
   if i=9 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev9,aRevRighe9,aMan9,aManRighe9,aUser,aTSNow);
    if aRevRighe9.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori9:=aCori;
   end if;
   if i=10 then
    gestioneCori(inEsercizio,aCompenso,aCori,aRev10,aRevRighe10,aMan10,aManRighe10,aUser,aTSNow);
    if aRevRighe10.count > 0 and aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_ENTE then
	 aTotCoriEntePosLiquid:=aTotCoriEntePosLiquid+aCori.ammontare;
	end if;
	aCori10:=aCori;
   end if;

   aCdClassificazioneCori:=CNRCTB545.getTipoCoriDaRigaCompenso(aCori);

   IF not ((aCdClassificazioneCori = CNRCTB545.isCoriIva AND aCori.ti_ente_percipiente = CNRCTB100.TI_CARICO_PERCEPIENTE and aCompenso.fl_split_payment ='Y' and aCompenso.ti_istituz_commerc ='I') OR
       aCdClassificazioneCori = CNRCTB545.isCoriIva and (aCompenso.fl_split_payment ='N' or aCompenso.ti_istituz_commerc ='C') or
       aCdClassificazioneCori = CNRCTB545.isCoriRivalsa) THEN
    aTotCori:=aTotCori + aCori.ammontare;
	if aCori.ammontare > 0 then
 	 aTotCoriPositivi:=aTotCoriPositivi + aCori.ammontare;
    end if;
   END IF;
  end loop;

  If Nvl(aCompenso.im_netto_da_trattenere,0) > 0 And Nvl(aCompenso.im_totale_compenso,0) > 0 Then
     gestioneNoCori(inEsercizio,aCompenso,aRevNoCori,aRevRigheNoCori,aUser,aTSNow);
  End If;

  aImportoMandato:=aCompenso.im_totale_compenso;
  isCompMissConAnt:=false;
  if aCompenso.pg_missione is not null then
   begin
    select * into aMissione from missione where
	     esercizio = aCompenso.esercizio_missione
	 and cd_cds = aCompenso.cd_cds_missione
	 and cd_unita_organizzativa =aCompenso.cd_uo_missione
	 and pg_missione = aCompenso.pg_missione
	for update nowait;
   exception when NO_DATA_FOUND then
    IBMERR001.RAISE_ERR_GENERICO('Missione collegata a compenso non trovata.');
   end;
   if aMissione.pg_anticipo is not null then
    begin
     select * into aAnticipo from anticipo where
 	     esercizio = aMissione.esercizio_anticipo
 	 and cd_cds = aMissione.cd_cds_anticipo
 	 and cd_unita_organizzativa =aMissione.cd_uo_anticipo
 	 and pg_anticipo = aMissione.pg_anticipo
 	 for update nowait;
    exception when NO_DATA_FOUND then
     IBMERR001.RAISE_ERR_GENERICO('Anticipo collegato a missione collegata a compenso non trovato.');
    end;
    isCompMissConAnt:=true;
	-- Se c'�nticipo sulla missione, prepara l'importo del mandato con la differenza tra netto percipiente e anticipo se > 0 altrimenti 0
	-- A questo importo verr�ommato il totale dei CORI presenti sul compenso.
	-- In questo modo se l'anticipo < del netto percipiente il mandato verr�iquidato per la somma dei cori + la differenza netto percipiente anticipo
    -- Altrimenti il mandato verr�iquidato per il totale dei cori (netto percipiente = 0)
	if aAnticipo.im_anticipo < aCompenso.im_netto_percipiente then
     aImportoMandato:=aCompenso.im_netto_percipiente - aAnticipo.im_anticipo;
    else
     aImportoMandato:=0;
	end if;
   end if;
  end if;
  -- Se l'importo del compenso �egativo, viene generato un accertamento sull'ente per il recupero del credito da terzi
  if aCompenso.im_totale_compenso < 0 then
   begin
    select * into aEvEntrata from elemento_voce where
        esercizio = inEsercizio
    and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR
    and ti_gestione = CNRCTB001.GESTIONE_ENTRATE
    and cd_elemento_voce = CNRCTB015.GETVAL01PERCHIAVE(aCompenso.esercizio,ELEMENTO_VOCE_SPECIALE,REC_CRED_DA_TERZI);
   exception when NO_DATA_FOUND then
    IBMERR001.RAISE_ERR_GENERICO('Voce speciale di recupero crediti da terzi non trovata in configurazione cnr');
   end;
   select * into parametriCnr from parametri_cnr
   where esercizio = inEsercizio;
   if (parametriCnr.fl_nuovo_pdg='N') then
		   begin
		    select * into aVoceF from voce_f where
		        esercizio = inEsercizio
		    and ti_appartenenza = aEvEntrata.ti_appartenenza
		    and ti_gestione = aEvEntrata.ti_gestione
		    and cd_titolo_capitolo = aEvEntrata.cd_elemento_voce
		    and( cd_unita_organizzativa = aCompenso.cd_unita_organizzativa or
		      cd_unita_organizzativa is null)
		    and fl_mastrino = 'Y';
		   exception when NO_DATA_FOUND then
		    IBMERR001.RAISE_ERR_GENERICO('Articolo di entrata CNR non trovato per voce del piano:'||aEvEntrata.cd_elemento_voce||' su uo:'||aCompenso.cd_unita_organizzativa);
		   end;
		end if;
   aUOENTE:=CNRCTB020.getUOENTE(inEsercizio);

   CNRCTB080.GETTERZOPERUO(aCompenso.cd_unita_organizzativa, aCdTerzoUo, aCdModPagUo, aPgBancaUo ,aCompenso.esercizio);

   aAnagTerzoUO:=CNRCTB080.GETANAG(aCdterzoUo);

   aAcc:=null;
   aAccScad:=null;
   aAcc.CD_CDS:=aUOEnte.cd_unita_padre;
   aAcc.ESERCIZIO:=inEsercizio;
   aAcc.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_ACC;
   aAcc.CD_UNITA_ORGANIZZATIVA:=aUOEnte.cd_unita_organizzativa;
   aAcc.CD_CDS_ORIGINE:=aCompenso.cd_cds;
   aAcc.CD_UO_ORIGINE:=aCompenso.cd_unita_organizzativa;
    if (parametriCnr.fl_nuovo_pdg='N') then
   			aAcc.TI_APPARTENENZA:=aVoceF.ti_appartenenza;
   			aAcc.TI_GESTIONE:=aVoceF.ti_gestione;
   	else
   		aAcc.TI_APPARTENENZA:=CNRCTB001.APPARTENENZA_CNR;
    	aAcc.TI_GESTIONE:=CNRCTB001.GESTIONE_ENTRATE;
   	end if;
   aAcc.CD_ELEMENTO_VOCE:=aEvEntrata.cd_elemento_voce;
   if (parametriCnr.fl_nuovo_pdg='N') then
   		aAcc.CD_VOCE:=aVoceF.cd_voce;
   	else
   		aAcc.CD_VOCE:=aEvEntrata.cd_elemento_voce;
   end if;
   aAcc.DT_REGISTRAZIONE:=TRUNC(aDateCont);
   aAcc.DS_ACCERTAMENTO:='Compenso negativo n.'||aCompenso.pg_compenso||' cds:'||aCompenso.cd_cds||' uo:'||aCompenso.cd_unita_organizzativa;
   aAcc.NOTE_ACCERTAMENTO:='';
   aAcc.CD_TERZO:=aCdTerzoUo; -- Richiesta CINECA del 18/10/2002 old -> aCompenso.cd_terzo;
   aAcc.IM_ACCERTAMENTO:=abs(aCompenso.im_totale_compenso);
   aAcc.FL_PGIRO:='N';
   aAcc.RIPORTATO:='N';
   aAcc.DACR:=aTSNow;
   aAcc.UTCR:=aUser;
   aAcc.DUVA:=aTSNow;
   aAcc.UTUV:=aUser;
   aAcc.PG_VER_REC:=1;
   aAcc.ESERCIZIO_COMPETENZA:=inEsercizio;
   aAccScad.CD_CDS:=aAcc.CD_CDS;
   aAccScad.ESERCIZIO:=aAcc.ESERCIZIO;
   aAccScad.ESERCIZIO_ORIGINALE:=aAcc.ESERCIZIO_ORIGINALE;
   aAccScad.PG_ACCERTAMENTO:=aAcc.PG_ACCERTAMENTO;
   aAccScad.PG_ACCERTAMENTO_SCADENZARIO:=1;
   aAccScad.DT_SCADENZA_EMISSIONE_FATTURA:=trunc(aTSNow);
   aAccScad.DT_SCADENZA_INCASSO:=trunc(aTSNow);
   aAccScad.DS_SCADENZA:=aAcc.DS_ACCERTAMENTO;
   aAccScad.IM_SCADENZA:=aAcc.IM_ACCERTAMENTO;
   aAccScad.IM_ASSOCIATO_DOC_AMM:=aAcc.IM_ACCERTAMENTO;
   aAccScad.IM_ASSOCIATO_DOC_CONTABILE:=0;
   aAccScad.DACR:=aAcc.DACR;
   aAccScad.UTCR:=aAcc.UTCR;
   aAccScad.DUVA:=aAcc.DUVA;
   aAccScad.UTUV:=aAcc.UTUV;
   aAccScad.PG_VER_REC:=aAcc.PG_VER_REC;
   aAccScadVoce.CD_CDS:=aAccScad.CD_CDS;
   aAccScadVoce.ESERCIZIO:=aAccScad.ESERCIZIO;
   aAccScadVoce.ESERCIZIO_ORIGINALE:=aAccScad.ESERCIZIO_ORIGINALE;
   aAccScadVoce.PG_ACCERTAMENTO:=aAccScad.PG_ACCERTAMENTO;
   aAccScadVoce.PG_ACCERTAMENTO_SCADENZARIO:=aAccScad.PG_ACCERTAMENTO_SCADENZARIO;

   if aCompenso.CD_CDR_GENRC is null or aCompenso.CD_LINEA_ATTIVITA_GENRC is null then
    IBMERR001.RAISE_ERR_GENERICO('Linea di attivit�er creazione dell''accertamento di recupero crediti da terzi non specificata in compenso:'||aCompenso.pg_compenso);
   end if;
   aAccScadVoce.CD_CENTRO_RESPONSABILITA:=aCompenso.CD_CDR_GENRC;
   aAccScadVoce.CD_LINEA_ATTIVITA:=aCompenso.CD_LINEA_ATTIVITA_GENRC;

   aAccScadVoce.IM_VOCE:=aAccScad.IM_SCADENZA;
   aAccScadVoce.CD_FONDO_RICERCA:=null;
   aAccScadVoce.DACR:=aAccScad.DACR;
   aAccScadVoce.UTCR:=aAccScad.UTCR;
   aAccScadVoce.DUVA:=aAccScad.DUVA;
   aAccScadVoce.UTUV:=aAccScad.UTUV;
   aAccScadVoce.PG_VER_REC:=aAccScad.PG_VER_REC;
   aDettScadList(1):=aAccScadVoce;
   CNRCTB040.CREAACCERTAMENTO(false,aAcc,aAccScad,aDettScadList);

   aGen:=null;
   aGenRiga:=null;
   aGen.CD_TIPO_DOCUMENTO_AMM:=CNRCTB100.TI_GEN_REC_CRED_DA_TERZI;
   aGen.CD_CDS:=aAcc.cd_cds;
   aGen.CD_UNITA_ORGANIZZATIVA:=aAcc.cd_unita_organizzativa;
   aGen.ESERCIZIO:=aAcc.esercizio;
   aGen.CD_CDS_ORIGINE:=aCompenso.cd_cds;
   aGen.CD_UO_ORIGINE:=aCompenso.cd_unita_organizzativa;
   aGen.DATA_REGISTRAZIONE:=TRUNC(aDateCont);
   aGen.DT_DA_COMPETENZA_COGE:=aCompenso.DT_DA_COMPETENZA_COGE;
   aGen.DT_A_COMPETENZA_COGE:=aCompenso.DT_A_COMPETENZA_COGE;
   aGen.DS_DOCUMENTO_GENERICO:=aAcc.ds_accertamento;
   aGen.TI_ISTITUZ_COMMERC:=CNRCTB100.TI_ISTITUZIONALE;
   aGen.IM_TOTALE:=aAcc.im_accertamento;
   aGen.STATO_COFI:=CNRCTB100.STATO_GEN_COFI_CONT;
   aGen.STATO_COGE:=CNRCTB100.STATO_COEP_EXC;
   aGen.STATO_COAN:=CNRCTB100.STATO_COEP_EXC;
   aGen.CD_DIVISA:='EURO';
   aGen.CAMBIO:=1;
--   aGen.ESERCIZIO_LETTERA:=0;
--   aGen.PG_LETTERA:=0;
   aGen.DACR:=aTSNow;
   aGen.UTCR:=aUser;
   aGen.DUVA:=aTSNow;
   aGen.UTUV:=aUser;
   aGen.PG_VER_REC:=1;
   aGen.DT_SCADENZA:=TRUNC(aTSNow);
   aGen.STATO_PAGAMENTO_FONDO_ECO:=CNRCTB100.STATO_NO_PFONDOECO;
   aGen.TI_ASSOCIATO_MANREV:=CNRCTB100.TI_NON_ASSOC_MAN_REV ;
   aGenRiga.CD_CDS:=aGen.CD_CDS;
   aGenRiga.CD_UNITA_ORGANIZZATIVA:=aGen.CD_UNITA_ORGANIZZATIVA;
   aGenRiga.ESERCIZIO:=aGen.ESERCIZIO;
   aGenRiga.CD_TIPO_DOCUMENTO_AMM:=aGen.CD_TIPO_DOCUMENTO_AMM;
   aGenRiga.DS_RIGA:=aGen.DS_DOCUMENTO_GENERICO;
   aGenRiga.IM_RIGA_DIVISA:=aGen.IM_TOTALE;
   aGenRiga.IM_RIGA:=aGen.IM_TOTALE;
   aGenRiga.CD_TERZO_UO_CDS:=aCdTerzoUO;
--   aGenRiga.CD_MODALITA_PAG:=;
--   aGenRiga.PG_BANCA:=;
   aGenRiga.PG_BANCA_UO_CDS:=aPgBancaUO;
   aGenRiga.CD_MODALITA_PAG_UO_CDS:=aCdModPagUo;
   aGenRiga.CD_TERZO:=aAcc.CD_TERZO;
   aGenRiga.RAGIONE_SOCIALE:=aAnagTerzoUO.RAGIONE_SOCIALE;
   aGenRiga.NOME:=aAnagTerzoUO.NOME;
   aGenRiga.COGNOME:=aAnagTerzoUO.COGNOME;
   aGenRiga.CODICE_FISCALE:=aAnagTerzoUO.CODICE_FISCALE;
   aGenRiga.PARTITA_IVA:=aAnagTerzoUO.PARTITA_IVA;
--   aGenRiga.CD_TERMINI_PAG:=aCompenso.CD_TERMINI_PAG;
--   aGenRiga.CD_TERMINI_PAG_UO_CDS:=aCompenso.CD_TERMINI_PAG_UO_CDS;
--   aGenRiga.NOTE:=aGen.NOTE;
   aGenRiga.DT_DA_COMPETENZA_COGE:=aCompenso.DT_DA_COMPETENZA_COGE;
   aGenRiga.DT_A_COMPETENZA_COGE:=aCompenso.DT_A_COMPETENZA_COGE;
   aGenRiga.STATO_COFI:=aGen.STATO_COFI;
--   aGenRiga.DT_CANCELLAZIONE:=aGen.DT_CANCELLAZIONE;
   aGenRiga.CD_CDS_ACCERTAMENTO:=aAcc.CD_CDS;
   aGenRiga.ESERCIZIO_ACCERTAMENTO:=aAcc.ESERCIZIO;
   aGenRiga.ESERCIZIO_ORI_ACCERTAMENTO:=aAcc.ESERCIZIO_ORIGINALE;
   aGenRiga.PG_ACCERTAMENTO:=aAcc.PG_ACCERTAMENTO;
   aGenRiga.PG_ACCERTAMENTO_SCADENZARIO:=1;
   aGenRiga.DACR:=aGen.DACR;
   aGenRiga.UTCR:=aGen.UTCR;
   aGenRiga.UTUV:=aGen.UTUV;
   aGenRiga.DUVA:=aGen.DUVA;
   aGenRiga.PG_VER_REC:=aGen.PG_VER_REC;
   aGenRiga.TI_ASSOCIATO_MANREV:=aGen.TI_ASSOCIATO_MANREV;
   aListGenRighe(1):=aGenRiga;
   CNRCTB110.CREAGENERICO(aGen,aListGenRighe);

   -- Aggiornamento del compenso con informazioni relative a doc generico e accertamento generati al centro

   CNRCTB100.updateDocAmm(
    CNRCTB100.TI_COMPENSO,
    aCompenso.cd_cds,
    aCompenso.esercizio,
    aCompenso.cd_unita_organizzativa,
    aCompenso.pg_compenso,
    ' esercizio_accertamento='''||aAccScad.esercizio||''',
      cd_cds_accertamento='''||aAccScad.cd_cds||''',
      esercizio_ori_accertamento='''||aAccScad.esercizio_originale||''',
      pg_accertamento='''||aAccScad.pg_accertamento||''',
      pg_accertamento_scadenzario='''||aAccScad.pg_accertamento_scadenzario||''',
      esercizio_doc_genrc='''||aGen.esercizio||''',
      cd_cds_doc_genrc='''||aGen.cd_cds||''',
      cd_uo_doc_genrc='''||aGen.cd_unita_organizzativa||''',
      pg_doc_genrc='''||aGen.pg_documento_generico||''',
      cd_tipo_doc_genrc='''||aGen.cd_tipo_documento_amm||'''
	',
    null,
    aUser,
    aTSNow
   );

  -- Se l'importo totale del compenso � 0 non genero alcun mandato principale
  elsif  aCompenso.im_totale_compenso = 0  then
   null;
  -- Se l'importo totale del compenso �aggiore di 0, viene registrato il mandato al netto di eventuali anticipi su missione collegati al compenso in processo
  else
   -- Calcolo il totale delle reversali/mandati collegati a mandato principale
   -- Se l'importo � 0 blocco l'operazione
   aTotManRev:=0;
   aTotManRev:=aTotManRev + getImp(aRev1, aRevRighe1);
   aTotManRev:=aTotManRev + getImp(aRev2, aRevRighe2);
   aTotManRev:=aTotManRev + getImp(aRev3, aRevRighe3);
   aTotManRev:=aTotManRev + getImp(aRev4, aRevRighe4);
   aTotManRev:=aTotManRev + getImp(aRev5, aRevRighe5);
   aTotManRev:=aTotManRev + getImp(aRev6, aRevRighe6);
   aTotManRev:=aTotManRev + getImp(aRev7, aRevRighe7);
   aTotManRev:=aTotManRev + getImp(aRev8, aRevRighe8);
   aTotManRev:=aTotManRev + getImp(aRev9, aRevRighe9);
   aTotManRev:=aTotManRev + getImp(aRev10, aRevRighe10);
   aTotManRev:=aTotManRev + getImp(aRevNoCori, aRevRigheNoCori);
   aTotManRev:=aTotManRev - getImp(aMan1, aManRighe1);
   aTotManRev:=aTotManRev - getImp(aMan2, aManRighe2);
   aTotManRev:=aTotManRev - getImp(aMan3, aManRighe3);
   aTotManRev:=aTotManRev - getImp(aMan4, aManRighe4);
   aTotManRev:=aTotManRev - getImp(aMan5, aManRighe5);
   aTotManRev:=aTotManRev - getImp(aMan6, aManRighe6);
   aTotManRev:=aTotManRev - getImp(aMan7, aManRighe7);
   aTotManRev:=aTotManRev - getImp(aMan8, aManRighe8);
   aTotManRev:=aTotManRev - getImp(aMan9, aManRighe9);
   aTotManRev:=aTotManRev - getImp(aMan10, aManRighe10);
   -- Il compenso �ollegato a missione con anticipo, sommo al delta netto compenso meno anticipo il totale CORI
   if isCompMissConAnt then
    aImportoMandato:=aImportoMandato+aTotManRev;
   end if;
   if aImportoMandato > 0 then
    aManP.CD_CDS:=aCompenso.cd_cds;
    aManP.ESERCIZIO:=inEsercizio;
    aManP.CD_UNITA_ORGANIZZATIVA:=aCompenso.cd_unita_organizzativa;
    aManP.CD_CDS_ORIGINE:=aCompenso.cd_cds;
    aManP.CD_UO_ORIGINE:=aCompenso.cd_unita_organizzativa;
    aManP.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_MAN;
    aManP.TI_MANDATO:=CNRCTB038.TI_MAN_PAG;
    aManP.TI_COMPETENZA_RESIDUO:=CNRCTB038.TI_MAN_COMP;
    aManP.DS_MANDATO:='Mandato di liquidazione compenso: '||aCompenso.pg_compenso;
    aManP.STATO:=CNRCTB038.STATO_MAN_EME;
    aManP.DT_EMISSIONE:=TRUNC(aDateCont);
  --  aManP.DT_TRASMISSIONE:=;
  --  aManP.DT_PAGAMENTO:=;
  --  aManP.DT_ANNULLAMENTO:=;
    aManP.IM_MANDATO:=aImportoMandato;
    aManP.IM_PAGATO:=0;
    aManP.UTCR:=aUser;
    aManP.DACR:=aTSNow;
    aManP.UTUV:=aUser;
    aManP.DUVA:=aTSNow;
    aManP.PG_VER_REC:=1;
    aManP.STATO_TRASMISSIONE:=CNRCTB038.STATO_MAN_TRASCAS_NODIST;
    aManP.im_ritenute:=aTotCoriPositivi+Nvl(aCompenso.im_netto_da_trattenere,0);
    aManPRiga.CD_CDS:=aManP.cd_cds;
    aManPRiga.ESERCIZIO:=aManP.esercizio;
    aManPRiga.ESERCIZIO_OBBLIGAZIONE:=aCompenso.esercizio_obbligazione;
    aManPRiga.ESERCIZIO_ORI_OBBLIGAZIONE:=aCompenso.esercizio_ori_obbligazione;
    aManPRiga.PG_OBBLIGAZIONE:=aCompenso.pg_obbligazione;
    aManPRiga.PG_OBBLIGAZIONE_SCADENZARIO:=aCompenso.pg_obbligazione_scadenzario;
    aManPRiga.CD_CDS_DOC_AMM:=aCompenso.cd_cds;
    aManPRiga.CD_UO_DOC_AMM:=aCompenso.cd_unita_organizzativa;
    aManPRiga.ESERCIZIO_DOC_AMM:=aCompenso.esercizio;
    aManPRiga.CD_TIPO_DOCUMENTO_AMM:=CNRCTB100.TI_COMPENSO;
    aManPRiga.PG_DOC_AMM:=aCompenso.PG_COMPENSO;
    aManPRiga.DS_MANDATO_RIGA:=aManP.ds_mandato;
    aManPRiga.STATO:=aManP.stato;
    aManPRiga.CD_TERZO:=aCompenso.cd_terzo;
    aManPRiga.PG_BANCA:=aCompenso.pg_banca;
    aManPRiga.CD_MODALITA_PAG:=aCompenso.cd_modalita_pag;
    aManPRiga.IM_MANDATO_RIGA:=aManP.im_mandato;
    aManPRiga.FL_PGIRO:='N';
    aManPRiga.im_ritenute_riga:=aTotCoriPositivi+Nvl(aCompenso.im_netto_da_trattenere,0);
    aManPRiga.UTCR:=aUser;
    aManPRiga.DACR:=aTSNow;
    aManPRiga.UTUV:=aUser;
    aManPRiga.DUVA:=aTSNow;
    aManPRiga.PG_VER_REC:=1;
    aListRigheManP(1):=aManPRiga;
   end if;
  end if;
  -- Aggiorno lo stato del documento
  CNRCTB100.updateDocAmm(
   CNRCTB100.TI_COMPENSO,
    aCompenso.cd_cds,
    aCompenso.esercizio,
    aCompenso.cd_unita_organizzativa,
    aCompenso.pg_compenso,
    ' dt_emissione_mandato = '||IBMUTL001.ASDYNDATE(TRUNC(aDateCont))||', stato_cofi = '''||CNRCTB100.STATO_COM_COFI_TOT_MR||''', ti_associato_manrev = '''||CNRCTB100.TI_ASSOC_TOT_MAN_REV||'''',
    null,
    aUser,
    aTSNow
   );

  -- Impone il flag stato_coge a 'N' sulle reversali svincolate da mandato principale (totale compenso negativo o nullo)
  -- in modo che vengano correttamente processate in COGE
  if aCompenso.im_totale_compenso <= 0 or aImportoMandato <= 0 then
   setDaProcessareCoge(aRev1, aRevRighe1);
   setDaProcessareCoge(aRev2, aRevRighe2);
   setDaProcessareCoge(aRev3, aRevRighe3);
   setDaProcessareCoge(aRev4, aRevRighe4);
   setDaProcessareCoge(aRev5, aRevRighe5);
   setDaProcessareCoge(aRev6, aRevRighe6);
   setDaProcessareCoge(aRev7, aRevRighe7);
   setDaProcessareCoge(aRev8, aRevRighe8);
   setDaProcessareCoge(aRev9, aRevRighe9);
   setDaProcessareCoge(aRev10, aRevRighe10);
   setDaProcessareCoge(aMan1, aManRighe1);
   setDaProcessareCoge(aMan2, aManRighe2);
   setDaProcessareCoge(aMan3, aManRighe3);
   setDaProcessareCoge(aMan4, aManRighe4);
   setDaProcessareCoge(aMan5, aManRighe5);
   setDaProcessareCoge(aMan6, aManRighe6);
   setDaProcessareCoge(aMan7, aManRighe7);
   setDaProcessareCoge(aMan8, aManRighe8);
   setDaProcessareCoge(aMan9, aManRighe9);
   setDaProcessareCoge(aMan10, aManRighe10);
  end if;
  -- Se esiste mandato principale e l'importo del mandato principale
  -- �inore del totale dei CORI positivi liquidati
  if aListRighemanP.count > 0 and aManP.im_mandato < aTotCoriPositivi then
   -- Se l'importo del mandato principale �aggiore o uguale al totale
   -- dei cori ente positivi liquidati (con reversale)
   if aManP.im_mandato >= aTotCoriEntePosLiquid then
   -- Devo disaccoppiare i CORI percipiente positivi liquidati (con reversale) dal mandato principale del compenso
    checkDisassRevCori(aCompenso,aCori1,aRev1,aRevRighe1);
    checkDisassRevCori(aCompenso,aCori2,aRev2,aRevRighe2);
    checkDisassRevCori(aCompenso,aCori3,aRev3,aRevRighe3);
    checkDisassRevCori(aCompenso,aCori4,aRev4,aRevRighe4);
    checkDisassRevCori(aCompenso,aCori5,aRev5,aRevRighe5);
    checkDisassRevCori(aCompenso,aCori6,aRev6,aRevRighe6);
    checkDisassRevCori(aCompenso,aCori7,aRev7,aRevRighe7);
    checkDisassRevCori(aCompenso,aCori8,aRev8,aRevRighe8);
    checkDisassRevCori(aCompenso,aCori9,aRev9,aRevRighe9);
    checkDisassRevCori(aCompenso,aCori10,aRev10,aRevRighe10);
    -- Metto l'importo ritenute uguale al totale dei CORI ente positivi
	aManP.im_ritenute:=aTotCoriEntePosLiquid;
   -- Altrimenti sollevo un'eccezione
   else
    IBMERR001.RAISE_ERR_GENERICO('Il compenso non pu�nerare mandato principale perch� CORI ente liquidati con reversali hanno importo maggiore dell''importo del mandato principale del compenso:'||aCompenso.pg_compenso);
   end if;
  end if;
--PIPE.SEND_MESSAGE('aManP.IM_MANDATO = '||aManP.IM_MANDATO||' -  aManP.IM_RITENUTE = '|| aManP.IM_RITENUTE);
  CNRCTB037.GENERADOCUMENTI(
   aManP,
   aListRigheManP,
   aRev1, aRevRighe1,
   aRev2, aRevRighe2,
   aRev3, aRevRighe3,
   aRev4, aRevRighe4,
   aRev5, aRevRighe5,
   aRev6, aRevRighe6,
   aRev7, aRevRighe7,
   aRev8, aRevRighe8,
   aRev9, aRevRighe9,
   aRev10, aRevRighe10,
   aRevNoCori, aRevRigheNoCori,
   aMan1, aManRighe1,
   aMan2, aManRighe2,
   aMan3, aManRighe3,
   aMan4, aManRighe4,
   aMan5, aManRighe5,
   aMan6, aManRighe6,
   aMan7, aManRighe7,
   aMan8, aManRighe8,
   aMan9, aManRighe9,
   aMan10, aManRighe10
  );
  -- Se non c'�andato principale aggiorno la tabella di associazione con doc autor. CORI per compenso senza mandato
  if aListRigheManP.count = 0 then
   addAssCompDocNMP(aCompenso, aMan1, aManRighe1);
   addAssCompDocNMP(aCompenso, aMan2, aManRighe2);
   addAssCompDocNMP(aCompenso, aMan3, aManRighe3);
   addAssCompDocNMP(aCompenso, aMan4, aManRighe4);
   addAssCompDocNMP(aCompenso, aMan5, aManRighe5);
   addAssCompDocNMP(aCompenso, aMan6, aManRighe6);
   addAssCompDocNMP(aCompenso, aMan7, aManRighe7);
   addAssCompDocNMP(aCompenso, aMan8, aManRighe8);
   addAssCompDocNMP(aCompenso, aMan9, aManRighe9);
   addAssCompDocNMP(aCompenso, aMan10, aManRighe10);
   addAssCompDocNMP(aCompenso, aRev1, aRevRighe1);
   addAssCompDocNMP(aCompenso, aRev2, aRevRighe2);
   addAssCompDocNMP(aCompenso, aRev3, aRevRighe3);
   addAssCompDocNMP(aCompenso, aRev4, aRevRighe4);
   addAssCompDocNMP(aCompenso, aRev5, aRevRighe5);
   addAssCompDocNMP(aCompenso, aRev6, aRevRighe6);
   addAssCompDocNMP(aCompenso, aRev7, aRevRighe7);
   addAssCompDocNMP(aCompenso, aRev8, aRevRighe8);
   addAssCompDocNMP(aCompenso, aRev9, aRevRighe9);
   addAssCompDocNMP(aCompenso, aRev10, aRevRighe10);
  end if;
 END;
END;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy