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

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

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

  CREATE OR REPLACE PACKAGE BODY "CNRCTB680" AS

 function getDescCori(aCori stipendi_cofi_cori%rowtype) return varchar2 is
 begin
  return ' mese:'||aCori.mese||' es:'||aCori.esercizio||' CORI:'||aCori.cd_contributo_ritenuta;
 end;

 function getInizioCompetenza(aStip stipendi_cofi%rowtype) return varchar2 is
 begin
  If aStip.mese = 13 Then
    return to_date(aStip.esercizio||'1201','YYYYMMDD');
  Elsif aStip.mese = 15 Then
    return Sysdate;
  Else
    return to_date(aStip.esercizio||lpad(aStip.mese,2,'0')||'01','YYYYMMDD');
  End If;
 end;

 function getFineCompetenza(aStip stipendi_cofi%rowtype) return varchar2 is
 begin
  If aStip.mese in (12,13) then
    return to_date(aStip.esercizio||'1231','YYYYMMDD');
  Elsif aStip.mese in (15) then
    return Sysdate;
  Else
    Return to_date(aStip.esercizio||lpad(aStip.mese+1,2,'0')||'01','YYYYMMDD')-1;
  End If;
 end;

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

 function gestioneCori(
  aStip stipendi_cofi%rowtype,
  aComp compenso%rowtype,
  aCori stipendi_cofi_cori%rowtype,
  aUOPersonale unita_organizzativa%rowtype,
  aTerzoVersamento terzo%rowtype,
  aManP in mandato%rowtype,
  aRev in out reversale%rowtype,
  aUser varchar2,
  aTSNow date
 ) return contributo_ritenuta%rowtype is
  aGen documento_generico%rowtype;
  aGenRiga documento_generico_riga%rowtype;
  aRevRighe CNRCTB038.righeReversaleList;
  aMan mandato%rowtype;
  aManRighe CNRCTB038.righeMandatoList;
  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;
  aContoColl ass_partita_giro%rowtype;
  aCdTerzoUO number(8);
  aCdModPagUO varchar2(10);
  aPgBancaUO number(10);
  aCdModPagL varchar2(10);
  aPgBancaL number(10);
  isCoriSpeciale boolean;
  aClassCoriSpec CLASSIFICAZIONE_CORI.cd_classificazione_cori%type;
  aClassCori CLASSIFICAZIONE_CORI.cd_classificazione_cori%type;
  aCoriComp contributo_ritenuta%rowtype;
  aTipoCoriLoc tipo_contributo_ritenuta%rowtype;
  isCoriEntrata boolean;
  aDateCont date;
  parametriCnr parametri_cnr%rowtype;
  existRev boolean := false;
 begin
  aDateCont:=CNRCTB008.getTimestampContabile(aStip.esercizio,aTSNow);

  begin
   select * into aTipoCoriLoc from tipo_contributo_ritenuta where
       cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
   and dt_ini_validita <= trunc(aDateCont)
   and dt_fin_validita >= trunc(aDateCont);
  exception
    when NO_DATA_FOUND then
     IBMERR001.RAISE_ERR_GENERICO('Cori specificato in interfaccia stipendi non trovato o attualmente non valido:'||aCori.cd_contributo_ritenuta);
    when TOO_MANY_ROWS then
     IBMERR001.RAISE_ERR_GENERICO('Configurazione CORI non consistente per tipo contributo ritenuta:'||aCori.cd_contributo_ritenuta);
  end;

  aClassCoriSpec:=CNRCTB015.GETVAL01PERCHIAVE(aStip.esercizio, CORI_SPECIALE, CORI_STIPENDI_EXTRA);

   -- Estrae la prima occorrenza di TIPO CORI presente in TIPO_CONTRIBUTO RITENUTA e registra la classificazione CORI di tale occorrenza
  begin
    select distinct cd_classificazione_cori into aClassCori from tipo_contributo_ritenuta where
             cd_contributo_ritenuta=aCori.cd_contributo_ritenuta
     and rownum=1;
  exception
    when NO_DATA_FOUND then
     IBMERR001.RAISE_ERR_GENERICO('Contributo ritenuta non trovato in tabella CORI:'||aCori.cd_contributo_ritenuta);
  end;

  isCoriSpeciale:=false;
  if aClassCori = aClassCoriSpec then
    isCoriSpeciale:=true;
  end if;

  -- Estrae il terzo associato all'UO di stipendi_cofi e le sue modalità di pagamento di tipo bancario più recenti
  CNRCTB080.getTerzoPerUO(aUOPersonale.cd_unita_organizzativa, aCdTerzoUO, aCdModPagUO, aPgBancaUO,aCori.esercizio);
  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 = aCori.esercizio
    and ti_gestione = CNRCTB001.GESTIONE_ENTRATE
 and ti_appartenenza = CNRCTB001.APPARTENENZA_CDS
 and ti_ente_percepiente = aCori.ti_ente_percipiente; -- I CORI degli stipendi sono sempre di tipo ente
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Conto finanziario associato al contributo '||getDescCori(aCori)||' non trovato');
  end;
else
begin
   select * into aAssCoriFin from ass_tipo_cori_ev where
        cd_contributo_ritenuta = aCori.cd_contributo_ritenuta
   and esercizio = aCori.esercizio
    and ti_gestione = CNRCTB001.GESTIONE_ENTRATE
 and ti_appartenenza = CNRCTB001.APPARTENENZA_CNR
 and ti_ente_percepiente = aCori.ti_ente_percipiente; -- I CORI degli stipendi sono sempre di tipo ente
  exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Conto finanziario associato al contributo '||getDescCori(aCori)||' non trovato');
  end;
end if;
  if aCori.ammontare = 0 then
   IBMERR001.RAISE_ERR_GENERICO('Cori specificato in interfaccia stipendi con importo nullo non supportati in liquidazione mensile stipendi');
  end if;
 if(parametriCnr.fl_nuovo_pdg ='N') then
  begin
   select * into aVoceF from voce_f where
         esercizio = aStip.esercizio
     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 '||getDescCori(aCori)||' 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:=aUOPersonale.cd_unita_padre;
   aAcc.ESERCIZIO:=aStip.esercizio;
   aAcc.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_ACC_PGIRO;
   aAcc.CD_UNITA_ORGANIZZATIVA:=aUOPersonale.cd_unita_organizzativa;
   aAcc.CD_CDS_ORIGINE:=aUOPersonale.cd_unita_padre;
   aAcc.CD_UO_ORIGINE:=aUOPersonale.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 '||getDescCori(aCori);
   aAcc.NOTE_ACCERTAMENTO:='';
   aAcc.CD_TERZO:=aTerzoVersamento.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:=aStip.esercizio;

   if isCoriSpeciale then
    CNRCTB040.CREAACCERTAMENTOPGIROTRONC(false,aAcc,aAccScad,aObb,aObbScad,trunc(aTSNow));
   else
    CNRCTB040.CREAACCERTAMENTOPGIRO(false,aAcc,aAccScad,aObb,aObbScad,trunc(aTSNow));
   end if;
  else
    isCoriEntrata:=false;
   begin
   select * into aContoColl from ass_partita_giro where
            esercizio = aStip.esercizio
        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:=aUOPersonale.cd_unita_padre;
   aObb.ESERCIZIO:=aStip.esercizio;
   aObb.CD_TIPO_DOCUMENTO_CONT:=CNRCTB018.TI_DOC_OBB_PGIRO;
   aObb.CD_UNITA_ORGANIZZATIVA:=aUOPersonale.cd_unita_organizzativa;
   aObb.CD_CDS_ORIGINE:=aUOPersonale.cd_unita_padre;
   aObb.CD_UO_ORIGINE:=aUOPersonale.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-D '||getDescCori(aCori);
   aObb.NOTE_OBBLIGAZIONE:='';
   aObb.CD_TERZO:=aTerzoVersamento.cd_terzo;
   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:=aStip.esercizio;
   if isCoriSpeciale then
    CNRCTB030.CREAOBBLIGAZIONEPGIROTRONC(false,aObb,aObbScad,aAcc,aAccScad,trunc(aTSNow));
   else
    CNRCTB030.CREAOBBLIGAZIONEPGIRO(false,aObb,aObbScad,aAcc,aAccScad,trunc(aTSNow));
   end if;
  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:=getInizioCompetenza(aStip);
  aGen.DT_A_COMPETENZA_COGE:=getFineCompetenza(aStip);
  aGen.DS_DOCUMENTO_GENERICO:='CORI - '||getDescCori(aCori);
  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.CD_TERZO_UO_CDS:=aCdTerzoUO;
  aGenRiga.CD_TERZO:=aAcc.CD_TERZO;
  aGenRiga.RAGIONE_SOCIALE:=null;
  aGenRiga.NOME:=null;
  aGenRiga.COGNOME:=null;
  aGenRiga.CODICE_FISCALE:=null;
  aGenRiga.PARTITA_IVA:=null;
--   aGenRiga.CD_TERMINI_PAG:=aStip.CD_TERMINI_PAG;
--   aGenRiga.CD_TERMINI_PAG_UO_CDS:=aStip.CD_TERMINI_PAG_UO_CDS;
--   aGenRiga.NOTE:=aGen.NOTE;
  aGenRiga.DT_DA_COMPETENZA_COGE:=getInizioCompetenza(aStip);
  aGenRiga.DT_A_COMPETENZA_COGE:=getFineCompetenza(aStip);
  aGenRiga.STATO_COFI:=aGen.STATO_COFI;

  if isCoriEntrata then
   aGenRiga.CD_TERZO:=aTerzoVersamento.cd_terzo;
   aGenRiga.CD_TERZO_UO_CDS:=aCdTerzoUO;
   aGenRiga.PG_BANCA_UO_CDS:=aPgBancaUO;
   aGenRiga.CD_MODALITA_PAG_UO_CDS:=aCdModPagUO;

   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;
  else
   aGenRiga.CD_TERZO:=aTerzoVersamento.cd_terzo;

   CNRCTB080.GETMODPAGULTIME(aTerzoVersamento.cd_terzo,aCdModPagL,aPgBancaL);

   aGenRiga.CD_MODALITA_PAG:=aCdModPagL;
   aGenRiga.PG_BANCA:=aPgBancaL;

   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.DT_CANCELLAZIONE:=aGen.DT_CANCELLAZIONE;
  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.CREAGENERICOAGGOBBACC(aGen,aListGenRighe);

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

  if isCoriEntrata then
   If aRev.pg_reversale is not null Then
     existRev := true;
     aRev.IM_REVERSALE:=aRev.IM_REVERSALE+aAcc.im_accertamento;
     aRev.DS_REVERSALE:=substr(aRev.DS_REVERSALE||','||aCori.cd_contributo_ritenuta,1,300);
   Else
     existRev := false;
     aRev:=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 stipendi '||getDescCori(aCori);
     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;
   End If;
   
   aRevRiga:=null;
   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:=aAcc.im_accertamento;
   aRevRiga.FL_PGIRO:='Y';
   aRevRiga.UTCR:=aUser;
   aRevRiga.DACR:=aTSNow;
   aRevRiga.UTUV:=aUser;
   aRevRiga.DUVA:=aTSNow;
   aRevRiga.PG_VER_REC:=1;
   aRevRighe(1):=aRevRiga;
   -- Generazione reversale e collegamento a mandato principale
   CNRCTB037.GENERAECOLLEGADOC(
    aManP,
    aRev,
    aRevRighe,
    true
   );
   if not existRev Then
     -- Aggiorno la tabella ASS_COMP_DOC_CONT_NMP visto che il compenso non ha mandato principale
     CNRCTB560.addAssCompDocNMP(aComp,aRev,aRevRighe);
   end if;
  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-D stipendi '||getDescCori(aCori);
   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;
   -- Generazione mandato e collegamento a mandato principale
   CNRCTB037.GENERAECOLLEGADOC(
    aManP,
    aMan,
    aManRighe
   );
   -- Aggiorno la tabella ASS_COMP_DOC_CONT_NMP visto che il compenso non ha mandato principale
   CNRCTB560.addAssCompDocNMP(aComp,aMan,aManRighe);
  end if;

  aCoriComp.CD_CDS:=aUOPersonale.cd_unita_padre;
  aCoriComp.CD_UNITA_ORGANIZZATIVA:=aUOPersonale.cd_unita_organizzativa;
  aCoriComp.ESERCIZIO:=aCori.ESERCIZIO;
  aCoriComp.PG_COMPENSO:=aComp.pg_compenso;
  aCoriComp.CD_CONTRIBUTO_RITENUTA:=aTipoCoriLoc.CD_CONTRIBUTO_RITENUTA;
  aCoriComp.TI_ENTE_PERCIPIENTE:=aCori.TI_ENTE_PERCIPIENTE;
  aCoriComp.DT_INI_VALIDITA:=aTipoCoriLoc.DT_INI_VALIDITA;
  aCoriComp.MONTANTE:=0;
  aCoriComp.IMPONIBILE:=0;
  aCoriComp.ALIQUOTA:=0;
  aCoriComp.BASE_CALCOLO:=0;
  aCoriComp.AMMONTARE:=aCori.AMMONTARE;
  aCoriComp.STATO_COFI_CR:=CNRCTB100.STATO_COM_COFI_TOT_MR;
  if isCoriEntrata then
   aCoriComp.CD_CDS_ACCERTAMENTO:=aAccScad.cd_cds;
   aCoriComp.ESERCIZIO_ACCERTAMENTO:=aAccScad.esercizio;
   aCoriComp.ESERCIZIO_ORI_ACCERTAMENTO:=aAccScad.esercizio_originale;
   aCoriComp.PG_ACCERTAMENTO:=aAccScad.pg_accertamento;
   aCoriComp.PG_ACCERTAMENTO_SCADENZARIO:=aAccScad.pg_accertamento_scadenzario;
  else
   aCoriComp.CD_CDS_OBBLIGAZIONE:=aObbScad.cd_cds;
   aCoriComp.ESERCIZIO_OBBLIGAZIONE:=aObbScad.esercizio;
   aCoriComp.ESERCIZIO_ORI_OBBLIGAZIONE:=aObbScad.esercizio_originale;
   aCoriComp.PG_OBBLIGAZIONE:=aObbScad.pg_obbligazione;
   aCoriComp.PG_OBBLIGAZIONE_SCADENZARIO:=aObbScad.pg_obbligazione_scadenzario;
  end if;
  aCoriComp.DACR := aTSNow;
  aCoriComp.UTCR := aUser;
  aCoriComp.DUVA := aTSNow;
  aCoriComp.UTUV := aUser;
  aCoriComp.PG_VER_REC:=1;
  aCoriComp.AMMONTARE_LORDO:=aCori.AMMONTARE;
  aCoriComp.IMPONIBILE_LORDO:=0;
  aCoriComp.IM_DEDUZIONE_IRPEF:=0;
  aCoriComp.IM_DEDUZIONE_FAMILY:=0;
  return aCoriComp;
 end;

 procedure creaCompensoStip(
  aStip stipendi_cofi%rowtype,
  aTerzoVersamento terzo%rowtype,
  aManP mandato%rowtype,
  aUser varchar2,
  aTSNow date
 ) is
  aTotCoriEnte number(15,2);
  aTotCoriPercipiente number(15,2);
  aCori contributo_ritenuta%rowtype;
  aUOPersonale unita_organizzativa%rowtype;
  aComp compenso%rowtype;
  aTipoTrattamento tipo_trattamento%rowtype;
  aCdTipoTrattamento varchar2(10);
  isFoundTT boolean;
  aTerzoDivComp terzo%rowtype;
  aAnagTerzoDivComp anagrafico%rowtype;
  aCdModPagDivC varchar2(10);
  aPgBancaDivC number(10);
  isFoundRapp boolean;
  aRapporto rapporto%rowtype;
  aDateCont date;
 begin

  aDateCont:=CNRCTB008.getTimestampContabile(aStip.esercizio,aTSNow);

  aUOPersonale:=CNRCTB020.GETUOPERSONALE(aStip.esercizio);
  aUOPersonale:=CNRCTB020.GETUOVALIDA(aStip.esercizio,aUOPersonale.cd_unita_organizzativa);

  aTerzoDivComp:=CNRCTB080.getTerzo(CNRCTB015.GETIM01PERCHIAVE(TERZO_SPECIALE,DIVERSI_STIPENDI));
  aAnagTerzoDivComp:=CNRCTB080.getAnag(aTerzoDivComp.cd_terzo);

  CNRCTB080.GETMODPAGULTIME(aTerzoDivComp.cd_terzo,aCdModPagDivC,aPgBancaDivC);

  isFoundRapp:=false;
  for aTmpRapporto in (select * from rapporto where
          cd_anag = aAnagTerzoDivComp.cd_anag
    and cd_tipo_rapporto = TIPO_RAPPORTO_STIPENDI
  ) loop
   isFoundRapp:=true;
   aRapporto:=aTmpRapporto;
   exit;
  end loop;
  if not isFoundRapp then
   IBMERR001.RAISE_ERR_GENERICO('Rapporto non trovato per anagrafica diversi stipendi');
  end if;

  -- Cerca il tipo trattamento speciale per compenso stipendi che deve essere associato al tipo di rapporto STI

  isFoundTT:=false;
  aCdTipoTrattamento:=CNRCTB015.GETVAL01PERCHIAVE(TRATTAMENTO_SPECIALE,TRATTAMENTO_STIPENDI);
  for aTmpTipoTrattamento in (select * from tipo_trattamento a where
          cd_trattamento = aCdTipoTrattamento
    and exists (select 1 from ass_ti_rapp_ti_tratt where
                                                  cd_tipo_rapporto = TIPO_RAPPORTO_STIPENDI
                        and cd_trattamento = a.cd_trattamento
               )
  ) loop
   isFoundTT:=true;
   aTipoTrattamento:=aTmpTipoTrattamento;
   exit;
  end loop;
  if not isFoundTT then
   IBMERR001.RAISE_ERR_GENERICO('Tipo trattamento speciale per stipendi non trovato');
  end if;
  aComp.CD_CDS:=aStip.cd_cds_doc_gen;
  aComp.CD_UNITA_ORGANIZZATIVA:=aStip.cd_uo_doc_gen;
  aComp.ESERCIZIO:=aStip.esercizio;
  aComp.PG_COMPENSO:= CNRCTB100.getNextNum(aComp.CD_CDS,aComp.esercizio,aComp.CD_UNITA_ORGANIZZATIVA, CNRCTB100.TI_COMPENSO,aUser,aTSNow);
  aComp.CD_CDS_ORIGINE:=aComp.CD_CDS;
  aComp.CD_UO_ORIGINE:=aComp.CD_UNITA_ORGANIZZATIVA;
  aComp.DT_REGISTRAZIONE:=trunc(aDateCont);
  aComp.DS_COMPENSO:='Liquidazione stipendi mese n.'||aStip.mese||' es.:'||aStip.esercizio;
  aComp.TI_ANAGRAFICO:='D';
  aComp.CD_TERZO:=aTerzoDivComp.cd_terzo;
  aComp.CD_TERZO_UO_CDS:=null;
  aComp.RAGIONE_SOCIALE:=aAnagTerzoDivComp.ragione_sociale;
  aComp.NOME:=aAnagTerzoDivComp.nome;
  aComp.COGNOME:=aAnagTerzoDivComp.cognome;
  aComp.CODICE_FISCALE:=aAnagTerzoDivComp.codice_fiscale;
  aComp.PARTITA_IVA:=aAnagTerzoDivComp.partita_iva;
  aComp.CD_TERMINI_PAG:=null;
  aComp.CD_TERMINI_PAG_UO_CDS:=null;
  aComp.CD_MODALITA_PAG:=aCdModPagDivC;
  aComp.CD_MODALITA_PAG_UO_CDS:=null;
  aComp.PG_BANCA:=aPgBancaDivC;
  aComp.PG_BANCA_UO_CDS:=null;
  aComp.CD_TIPO_RAPPORTO:=TIPO_RAPPORTO_STIPENDI;
  aComp.CD_TRATTAMENTO:=aCdTipoTrattamento;
  aComp.FL_SENZA_CALCOLI:='Y';
  aComp.FL_DIARIA:='N';
  aComp.DT_CANCELLAZIONE:=null;
  aComp.STATO_COFI:=CNRCTB100.STATO_COM_COFI_TOT_MR;
  aComp.STATO_COGE:=CNRCTB100.STATO_COEP_EXC;
  aComp.STATO_COAN:=CNRCTB100.STATO_COEP_EXC;
  aComp.TI_ASSOCIATO_MANREV:=CNRCTB100.TI_ASSOC_TOT_MAN_REV;
  aComp.DT_EMISSIONE_MANDATO:=trunc(aDateCont);
  aComp.DT_TRASMISSIONE_MANDATO:=null;
  aComp.DT_PAGAMENTO_MANDATO:=null;
  aComp.DT_DA_COMPETENZA_COGE:=getInizioCompetenza(aStip);
  aComp.DT_A_COMPETENZA_COGE:=getFineCompetenza(aStip);
  aComp.STATO_PAGAMENTO_FONDO_ECO:='N';
  aComp.DT_PAGAMENTO_FONDO_ECO:=null;
  aComp.IM_TOTALE_COMPENSO:=0;
  aComp.IM_LORDO_PERCIPIENTE:=0;
  aComp.IM_NETTO_PERCIPIENTE:=0;
  aComp.IM_CR_PERCIPIENTE:=0;
  aComp.IM_CR_ENTE:=0;
  aComp.QUOTA_ESENTE:=0;
  aComp.QUOTA_ESENTE_NO_IVA:=0;
  aComp.IM_NO_FISCALE:=0;
  aComp.IMPONIBILE_FISCALE:=0;
  aComp.CD_VOCE_IVA:=null;
  aComp.IMPONIBILE_IVA:=0;
  aComp.PG_COMUNE_ADD:=0;
  aComp.CD_PROVINCIA_ADD:=null;
  aComp.CD_REGIONE_ADD:=null;
  aComp.CD_REGIONE_IRAP:=null;
  aComp.CD_CDS_MISSIONE:=null;
  aComp.ESERCIZIO_MISSIONE:=null;
  aComp.PG_MISSIONE:=null;
  aComp.CD_UO_MISSIONE:=null;
  aComp.CD_CDS_OBBLIGAZIONE:=null;
  aComp.ESERCIZIO_ORI_OBBLIGAZIONE:=Null;
  aComp.PG_OBBLIGAZIONE:=null;
  aComp.PG_OBBLIGAZIONE_SCADENZARIO:=null;
  aComp.CD_CDS_ACCERTAMENTO:=null;
  aComp.ESERCIZIO_ACCERTAMENTO:=null;
  aComp.ESERCIZIO_ORI_ACCERTAMENTO:=Null;
  aComp.PG_ACCERTAMENTO:=null;
  aComp.PG_ACCERTAMENTO_SCADENZARIO:=null;
  aComp.DACR:=aTSNow;
  aComp.UTCR:=aUser;
  aComp.DUVA:=aTSNow;
  aComp.UTUV:=aUser;
  aComp.PG_VER_REC:=1;
  aComp.CD_TIPOLOGIA_RISCHIO:=null;
  aComp.DETRAZIONI_PERSONALI:=0;
  aComp.DETRAZIONI_LA:=0;
  aComp.DETRAZIONE_CONIUGE:=0;
  aComp.DETRAZIONE_FIGLI:=0;
  aComp.DETRAZIONE_ALTRI:=0;
  aComp.DETRAZIONE_RIDUZIONE_CUNEO:=0;
  aComp.DETRAZIONI_PERSONALI_NETTO:=0;
  aComp.DETRAZIONI_LA_NETTO:=0;
  aComp.DETRAZIONE_CONIUGE_NETTO:=0;
  aComp.DETRAZIONE_FIGLI_NETTO:=0;
  aComp.DETRAZIONE_ALTRI_NETTO:=0;
  aComp.DETRAZIONE_RID_CUNEO_NETTO:=0;
  aComp.CD_CDS_DOC_GENRC:=null;
  aComp.CD_UO_DOC_GENRC:=null;
  aComp.ESERCIZIO_DOC_GENRC:=null;
  aComp.CD_TIPO_DOC_GENRC:=null;
  aComp.PG_DOC_GENRC:=null;
  aComp.CD_CDR_GENRC:=null;
  aComp.CD_LINEA_ATTIVITA_GENRC:=null;
  aComp.TI_ISTITUZ_COMMERC:=TI_ISTITUZIONALE;
  aComp.IMPONIBILE_INAIL:=0;
  aComp.ESERCIZIO_FATTURA_FORNITORE:=null;
  aComp.DT_FATTURA_FORNITORE:=null;
  aComp.NR_FATTURA_FORNITORE:=null;
  aComp.FL_GENERATA_FATTURA:='N';
  aComp.FL_COMPENSO_STIPENDI:='Y';
  aComp.FL_COMPENSO_CONGUAGLIO:='N';
  aComp.FL_COMPENSO_MINICARRIERA:='N';
  aComp.ALIQUOTA_IRPEF_DA_MISSIONE:=0;
  aComp.FL_COMPENSO_MCARRIERA_TASSEP:='N';
  aComp.ALIQUOTA_IRPEF_TASSEP:=0;
  aComp.IM_DEDUZIONE_IRPEF:=0;
  aComp.IMPONIBILE_FISCALE_NETTO:=0;
  aComp.NUMERO_GIORNI:=0;
  aComp.FL_ESCLUDI_QVARIA_DEDUZIONE:='N';
  aComp.FL_INTERA_QFISSA_DEDUZIONE:='N';
  aComp.IM_DETRAZIONE_PERSONALE_ANAG:=0;
  aComp.FL_RECUPERO_RATE:='N';
  aComp.FL_ACCANTONA_ADD_TERR:='N';

  CNRCTB545.INSCOMPENSO(aComp);

  aTotCoriEnte:=0;
  aTotCoriPercipiente:=0;

  Declare
    aRevI reversale%rowtype;
  Begin
    For aCoriStip In (Select *
                      From  stipendi_cofi_cori
                      Where esercizio = aStip.esercizio And
                            mese = aStip.mese) Loop
      aCori := gestioneCori(aStip,aComp,aCoriStip,aUOPersonale,aTerzoVersamento,aManP,aRevI,aUser,aTSNow);

      if aCori.esercizio is not null then
        if aCori.ti_ente_percipiente = 'E' then
          aTotCoriEnte:=aTotCoriEnte + aCori.ammontare;
        else
          aTotCoriPercipiente:=aTotCoriPercipiente + aCori.ammontare;
        end if;

        CNRCTB545.insCONTRIBUTORITENUTA(aCori);
      end if;
    End loop;

    -- Aggiorno l'importo e la descrzione della reversale
    update REVERSALE
    Set IM_REVERSALE = aRevI.IM_REVERSALE,
        DS_REVERSALE = substr(aRevI.DS_REVERSALE,1,300)
    Where esercizio = aRevI.esercizio And
          cd_cds = aRevI.cd_cds And
          pg_reversale = aRevI.pg_reversale;

    CNRCTB037.updScadAccertamento(aRevI);
    CNRCTB037.updSaldoCapitoliR(aRevI,'I','A');

    CNRCTB300.leggiMandatoReversale(aRevI.CD_CDS, aRevI.ESERCIZIO, aRevI.PG_REVERSALE, 'REV', 'I', aRevI.utuv);

    -- Aggiorno l'importo ritenute del mandato principale
    update mandato
    Set im_ritenute = im_ritenute + aRevI.IM_REVERSALE
    Where esercizio = aManP.esercizio And
          cd_cds = aManP.cd_cds And
          pg_mandato = aManp.pg_mandato;
  End;

  Update compenso
  Set IM_CR_PERCIPIENTE    = aTotCoriPercipiente,
      IM_CR_ENTE           = aTotCoriEnte,
      IM_NETTO_PERCIPIENTE = aManP.im_mandato - aTotCoriEnte - aTotCoriPercipiente, -- Calcolo il netto percipiente come differenza tra importo del mandato e quello dei cori
      IM_TOTALE_COMPENSO   = aManP.im_mandato,
      IM_LORDO_PERCIPIENTE = aManP.im_mandato - aTotCoriEnte
  Where esercizio=aComp.esercizio And
        cd_cds=aComp.cd_cds And
        cd_unita_organizzativa=aComp.cd_unita_organizzativa And
        pg_compenso=aComp.pg_compenso;

  Update stipendi_cofi
  Set    pg_comp = aComp.pg_compenso,
         cd_cds_comp = aComp.cd_cds,
         cd_uo_comp = aComp.cd_unita_organizzativa,
         esercizio_comp = aComp.esercizio
  Where  mese = aStip.mese And
         esercizio = aStip.esercizio;

 End;

 PROCEDURE contabilFlussoStipCOFI
      (aEs number,
       aMese number,
       aUser varchar2) Is

  aStip stipendi_cofi%rowtype;
  aAcc accertamento%rowtype;
  aAccScad accertamento_scadenzario%rowtype;
  aDettScadList CNRCTB035.scadVoceListE;
  aAccScadVoce accertamento_Scad_voce%rowtype;
  aEvEntrata elemento_voce%rowtype;
  aTSNow date;
  aObb obbligazione%rowtype;
  aObbScad obbligazione_scadenzario%rowtype;
  aManP mandato%rowtype;
  aManPRiga mandato_riga%rowtype;
  aListRigheManP CNRCTB038.righeMandatoList;
  aGen documento_generico%rowtype;
  aGenRiga documento_generico_riga%rowtype;
  aListGenRighe CNRCTB100.docGenRigaList;
  aRev reversale%rowtype;
  aRevRighe CNRCTB038.righeReversaleList;
  aCdModPag VARCHAR2(10);
  aPgBanca NUMBER(10);
  aIndex number(10);
  aUOPersonale unita_organizzativa%rowtype;
  aTerzoVersamento terzo%rowtype;
  aTotRigheMandato number(15,2);
  aComp compenso%rowtype;
  aDateCont date;
 BEGIN
  aTSNow:=sysdate;
  --Il flusso per il mese 15 può essere contabilizzato in qualunque momento
  If aMese != 15 Then
        if aMese < 1 or aMese > 13 then
         IBMERR001.RAISE_ERR_GENERICO('Il mese deve essere compreso tra 1 (Gennaio) e 13 (Mese Tredicesima)');
        end if;

        -- se il mese è > 1 verifico che la liquidazione del mese precedente sia stata fatta
        if aMese > 1 then
           Begin
               Select * into aStip
               From   stipendi_cofi
               Where  mese = aMese-1
                 And  esercizio = aEs
           And stato = CNRCTB100.STATO_COM_COFI_TOT_MR
               For update nowait;
           Exception when NO_DATA_FOUND then
            IBMERR001.RAISE_ERR_GENERICO('Dati stipendiali non trovati o contabilizzazione non ancora effettuata per mese precedente al corrente');
           End;
        End if;
  End If;    -- fine If aMese != 15
  Begin
      Select *
      Into   aStip
      From   stipendi_cofi
      Where  mese = aMese And
      esercizio = aEs And
      stato = CNRCTB100.STATO_COM_COFI_INI
      For Update nowait;
  Exception when NO_DATA_FOUND then
   IBMERR001.RAISE_ERR_GENERICO('Dati stipendiali non trovati o contabilizzazione già effettuata per mese n.'||aMese||' es:'||aEs);
  End;


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

  aUOPersonale:=CNRCTB020.GETUOPERSONALE(aStip.esercizio);
  aUOPersonale:=CNRCTB020.GETUOVALIDA(aStip.esercizio,aUOPersonale.cd_unita_organizzativa);

  aGen:=null;
  aGen.CD_TIPO_DOCUMENTO_AMM:=CNRCTB100.TI_GEN_VER_STIPENDI;
  aGen.CD_CDS:=aUOPersonale.cd_unita_padre;
  aGen.CD_UNITA_ORGANIZZATIVA:=aUOPersonale.cd_unita_organizzativa;
  aGen.ESERCIZIO:=aStip.esercizio;
  aGen.CD_CDS_ORIGINE:=aUOPersonale.cd_unita_padre;
  aGen.CD_UO_ORIGINE:=aUOPersonale.cd_unita_organizzativa;
  aGen.DATA_REGISTRAZIONE:=TRUNC(aDateCont);
  aGen.DT_DA_COMPETENZA_COGE:=getInizioCompetenza(aStip);
  aGen.DT_A_COMPETENZA_COGE:=getFineCompetenza(aStip);
  aGen.DS_DOCUMENTO_GENERICO:='Generico di versamento stipendi mese:'||aStip.mese;
  aGen.TI_ISTITUZ_COMMERC:=CNRCTB100.TI_ISTITUZIONALE;
  aGen.IM_TOTALE:=0;
  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 ;

  aTotRigheMandato:=0;
  aIndex:=0;

  for aStipObb in (Select * from stipendi_cofi_obb_scad
                   Where esercizio = aEs And
                         mese = aMese
                   For update nowait) Loop
   aIndex:=aIndex+1;
   aGenRiga:=null;

   Begin
       select * into aObb from obbligazione where
             cd_cds = aStipObb.cd_cds_obbligazione
      and esercizio = aStipObb.esercizio
      and esercizio_originale = aStipObb.esercizio_ori_obbligazione
    and pg_obbligazione = aStipObb.pg_obbligazione
       for update nowait;
   Exception
      When No_Data_Found Then
      If cnrutil.isLabelObbligazione() Then
        IBMERR001.RAISE_ERR_GENERICO('Obbligazione n. '||aStipObb.pg_obbligazione||' associata a liquidazione stipendi mese n.'||aStip.mese||' es. '||aStip.esercizio);
      Else
        IBMERR001.RAISE_ERR_GENERICO('Impegno n. '||aStipObb.pg_obbligazione||' associato a liquidazione stipendi mese n.'||aStip.mese||' es. '||aStip.esercizio);
      End If;
   End;

   If aIndex=1 then
    Select * into aTerzoVersamento
    From  terzo
    Where cd_terzo = aObb.cd_terzo;
   End If;

   --CERCO LA SCADENZA CON PROGRESSIVO MAGGIORE E, SE NON UGUALE AL MESE PREVISTO, LA SPOSTO FINO
   --AD ARRIVARE A QUELLO CHE MI ASPETTO
   Declare
       maxPgObbScad obbligazione_scadenzario.pg_obbligazione_scadenzario%type;
   Begin
       Select max(pg_obbligazione_scadenzario) into maxPgObbScad
       From  obbligazione_scadenzario
       Where cd_cds = aStipObb.cd_cds_obbligazione And
             esercizio = aStipObb.esercizio And
             esercizio_originale = aStipObb.esercizio_ori_obbligazione And
             pg_obbligazione = aStipObb.pg_obbligazione  and
             im_scadenza!=0 and im_associato_doc_amm =0;

       If (maxPgObbScad > aMese) Then
          IBMERR001.RAISE_ERR_GENERICO('Esiste un progressivo scadenza ('||maxPgObbScad||') di obbligazione n. '||aStipObb.pg_obbligazione||' superiore rispetto al mese del pagamento ('||aMese||')');
       Elsif (maxPgObbScad < aMese) Then
          For currMese in maxPgObbScad..aMese-1 Loop
            Declare
              currObbScad obbligazione_scadenzario%rowtype;
            Begin
              Select * into currObbScad
              From  obbligazione_scadenzario
              Where cd_cds = aStipObb.cd_cds_obbligazione And
                     esercizio = aStipObb.esercizio And
                     esercizio_originale = aStipObb.esercizio_ori_obbligazione And
                     pg_obbligazione = aStipObb.pg_obbligazione And
                     pg_obbligazione_scadenzario = currMese;

              If (aMese=15) Then
                If (currObbScad.im_scadenza 0 or aObbScad.im_associato_doc_contabile <> 0 then
      If cnrutil.isLabelObbligazione() Then
        IBMERR001.RAISE_ERR_GENERICO('Scadenza di obbligazione n. '||aStipObb.pg_obbligazione||' associata a liquidazione stipendi mese n. '||aMese||' es. '||aEs||' già associata a documenti contabili o amministrativi');
      Else
        IBMERR001.RAISE_ERR_GENERICO('Scadenza di impegno n. '||aStipObb.pg_obbligazione||' associato a liquidazione stipendi mese n. '||aMese||' es. '||aEs||' già associata a documenti contabili o amministrativi');
      End If;
   End If;
   If aMese = 14 or aMese > 15 Then
        IBMERR001.RAISE_ERR_GENERICO('Mese '||aMese||' indicato per il pagamento non valido');
   End If;
   If aMese != 15 Then
       -- Anche per il mese di dicembre deve essere aggiornata la scadenza successiva
       --if aMese = 13 then
       -- CNRCTB030.adeguaObbSV(aObbScad,aStipObb.im_totale,aGen.UTCR);
       --else
        CNRCTB030.adeguaObbScadSuccSV(aObbScad,aObbScad.pg_obbligazione_scadenzario+1,aStipObb.im_totale,aGen.UTCR);
       --end if;
   End If;
   If aMese = 15 And aObbScad.im_scadenza != aStipObb.im_totale Then
        IBMERR001.RAISE_ERR_GENERICO('L''importo della scadenza di obbligazione n. '||aStipObb.pg_obbligazione||' associata a liquidazione stipendi mese n. '||aMese||' es. '||aEs||' ('||To_Char(aObbScad.im_scadenza)||') e'' diverso dall''importo '||
' presente sul flusso di spesa ('||To_Char(aStipObb.im_totale, '999G999G999G999G990D00')||')');
   End If;

   CNRCTB080.GETMODPAGULTIME(aObb.cd_terzo,aCdModPag,aPgBanca);

   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:=aStipObb.im_totale;
   aGenRiga.IM_RIGA:=aStipObb.im_totale;
--   aGenRiga.CD_TERZO_CESSIONARIO:=aGen.CD_TERZO_CESSIONARIO;
--   aGenRiga.CD_TERZO_UO_CDS:=null;
   aGenRiga.CD_TERZO:=aObb.CD_TERZO;
   aGenRiga.RAGIONE_SOCIALE:=null;
   aGenRiga.NOME:=null;
   aGenRiga.COGNOME:=null;
   aGenRiga.CODICE_FISCALE:=null;
   aGenRiga.PARTITA_IVA:=null;
--   aGenRiga.CD_TERMINI_PAG:=aStip.CD_TERMINI_PAG;
--   aGenRiga.CD_TERMINI_PAG_UO_CDS:=aStip.CD_TERMINI_PAG_UO_CDS;
--   aGenRiga.NOTE:=aGen.NOTE;
   aGenRiga.DT_DA_COMPETENZA_COGE:=getInizioCompetenza(aStip);
   aGenRiga.DT_A_COMPETENZA_COGE:=getFineCompetenza(aStip);
   aGenRiga.STATO_COFI:=aGen.STATO_COFI;
--   aGenRiga.DT_CANCELLAZIONE:=aGen.DT_CANCELLAZIONE;
   aGenRiga.CD_CDS_OBBLIGAZIONE:=aObbScad.CD_CDS;
   aGenRiga.ESERCIZIO_OBBLIGAZIONE:=aObbScad.ESERCIZIO;
   aGenRiga.ESERCIZIO_ORI_OBBLIGAZIONE:=aObbScad.ESERCIZIO_ORIGINALE;
   aGenRiga.PG_OBBLIGAZIONE:=aObbScad.PG_OBBLIGAZIONE;
   aGenRiga.PG_OBBLIGAZIONE_SCADENZARIO:=aObbScad.PG_OBBLIGAZIONE_SCADENZARIO;
   aGenRiga.PG_BANCA:=aPgBanca;
   aGenRiga.CD_MODALITA_PAG:=aCdModPag;
   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(aIndex):=aGenRiga;

   aManPRiga.CD_CDS:=aGenRiga.cd_cds;
   aManPRiga.ESERCIZIO:=aGenRiga.esercizio;
   aManPRiga.ESERCIZIO_OBBLIGAZIONE:=aGenRiga.esercizio;
   aManPRiga.ESERCIZIO_ORI_OBBLIGAZIONE:=aGenRiga.esercizio_ori_obbligazione;
   aManPRiga.PG_OBBLIGAZIONE:=aGenRiga.pg_obbligazione;
   aManPRiga.PG_OBBLIGAZIONE_SCADENZARIO:=aGenRiga.pg_obbligazione_scadenzario;
   aManPRiga.CD_CDS_DOC_AMM:=aGenRiga.cd_cds;
   aManPRiga.CD_UO_DOC_AMM:=aGenRiga.cd_unita_organizzativa;
   aManPRiga.ESERCIZIO_DOC_AMM:=aGenRiga.esercizio;
   aManPRiga.CD_TIPO_DOCUMENTO_AMM:=aGenRiga.cd_tipo_documento_amm;
   aManPRiga.PG_DOC_AMM:=aGenRiga.pg_documento_generico;
   aManPRiga.DS_MANDATO_RIGA:='Riga liquidazione stipendi voce del piano:'||aObb.cd_elemento_voce;
   aManPRiga.STATO:=CNRCTB038.STATO_MAN_EME;
   aManPRiga.CD_TERZO:=aGenRiga.cd_terzo;
   aManPRiga.PG_BANCA:=aGenRiga.pg_banca;
   aManPRiga.CD_MODALITA_PAG:=aGenRiga.cd_modalita_pag;
   aManPRiga.IM_MANDATO_RIGA:=aGenRiga.im_riga;
   aManPRiga.FL_PGIRO:='N';
   aManPRiga.im_ritenute_riga:=0;
   aManPRiga.UTCR:=aUser;
   aManPRiga.DACR:=aTSNow;
   aManPRiga.UTUV:=aUser;
   aManPRiga.DUVA:=aTSNow;
   aManPRiga.PG_VER_REC:=1;
   aTotRigheMandato := aTotRigheMandato + aManPRiga.IM_MANDATO_RIGA;
   aListRigheManP(aIndex) := aManPRiga;
  end loop;

  If aIndex = 0 then
   If cnrutil.isLabelObbligazione() Then
        IBMERR001.RAISE_ERR_GENERICO('Nessuna obbligazione trovata per liquidazione stipendi mese: '||aStip.mese||' es: '||aStip.esercizio);
   Else
        IBMERR001.RAISE_ERR_GENERICO('Nessun impegno trovato per liquidazione stipendi mese: '||aStip.mese||' es: '||aStip.esercizio);
   End If;
  End If;

  CNRCTB110.CREAGENERICOAGGOBBACC(aGen,aListGenRighe);

  for aRI in 1..aListRigheManP.count loop
   aListRigheManP(aRI).pg_doc_amm:=aGen.pg_documento_generico;
  end loop;

  aManP.CD_CDS:=aManPRiga.cd_cds;
  aManP.ESERCIZIO:=aManPRiga.esercizio;
  aManP.CD_UNITA_ORGANIZZATIVA:=aUOPersonale.cd_unita_organizzativa;
  aManP.CD_CDS_ORIGINE:=aManPRiga.cd_cds;
  aManP.CD_UO_ORIGINE:=aUOPersonale.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 stipendi_cofi mese:'||aStip.mese;
  aManP.STATO:=CNRCTB038.STATO_MAN_EME;
  aManP.DT_EMISSIONE:=TRUNC(aDateCont);
--  aManP.DT_TRASMISSIONE:=;
--  aManP.DT_PAGAMENTO:=;
--  aManP.DT_ANNULLAMENTO:=;
  aManP.IM_MANDATO:=aTotRigheMandato;
  aManP.IM_RITENUTE:=0;
  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;

  -- Aggiorno lo stato di liquidazione stipendi

  CNRCTB037.GENERADOCUMENTO(aManP, aListRigheManP);

  aStip.cd_cds_doc_gen:=aGen.cd_cds;
  aStip.cd_uo_doc_gen:=aGen.cd_unita_organizzativa;
  aStip.esercizio_doc_gen:=aGen.esercizio;
  aStip.cd_tipo_doc_gen:=aGen.cd_tipo_documento_amm;
  aStip.pg_doc_gen:=aGen.pg_documento_generico;

-- crea il compenso fittizio degli stipendi, crea CONTRIBUTO_RITENUTA e mette il compenso su STIPENDI_COFI

  creaCompensoStip(aStip, aTerzoVersamento, aManP, aUser, aTSnow);

  Update stipendi_cofi
  Set    stato             = CNRCTB100.STATO_COM_COFI_TOT_MR,
   cd_cds_mandato    = aManP.cd_cds,
   esercizio_mandato = aManP.esercizio,
   pg_mandato        = aManP.pg_mandato,
   cd_cds_doc_gen    = aGen.cd_cds,
   cd_uo_doc_gen     = aGen.cd_unita_organizzativa,
   esercizio_doc_gen = aGen.esercizio,
   cd_tipo_doc_gen   = aGen.cd_tipo_documento_amm,
   pg_doc_gen        = aGen.pg_documento_generico,
         duva              = aTSNow,
   utuv              = aUser,
   pg_ver_rec        = pg_ver_rec+1
  Where  mese = aStip.mese And
         esercizio = aStip.esercizio;

   -- 20.07.2007 PER IL MOMENTO PEZZA
   -- POICHE' LA PROCEDURA STANDARD EMETTE PRIMA MANDATI E REVERSALI E POI GENERA CONTRIBUTO_RITENUTA
   -- LA PROCEDURA INS_SIOPE_AUTOMATICO NON TROVA L'ACCERTAMENTO SU CONTRIBUTO_RIITENUTA
   -- MI DEVO FARE UN NUOVO LOOP DOPO

   For RIGHE_REV In (Select RR.*
                     From   STIPENDI_COFI SC, REVERSALE_RIGA RR, ASS_MANDATO_REVERSALE AMR
                     Where  SC.ESERCIZIO            = aStip.ESERCIZIO And
                            SC.MESE                 = aStip.MESE And
                            SC.CD_CDS_MANDATO       = amr.CD_CDS_MANDATO And
                            SC.ESERCIZIO_MANDATO    = amr.ESERCIZIO_MANDATO And
                            SC.PG_MANDATO           = amr.PG_MANDATO And
                            amr.CD_CDS_REVERSALE    = rr.CD_CDS And
                            amr.ESERCIZIO_REVERSALE = rr.ESERCIZIO And
                            amr.PG_REVERSALE        = rr.pg_REVERSALE) Loop

        --ELIMINO EVENTUALI PRECEDENTI CARICAMENTI DELLA TABELLA REVERSALE_SIOPE
        --PER RICARICARLA IN MANIERA PULITA
        DELETE REVERSALE_SIOPE
        WHERE CD_CDS = RIGHE_REV.CD_CDS
        AND   ESERCIZIO = RIGHE_REV.ESERCIZIO
        AND   PG_REVERSALE = RIGHE_REV.PG_REVERSALE
        AND   ESERCIZIO_ACCERTAMENTO = RIGHE_REV.ESERCIZIO_ACCERTAMENTO
        AND   ESERCIZIO_ORI_ACCERTAMENTO = RIGHE_REV.ESERCIZIO_ORI_ACCERTAMENTO
        AND   PG_ACCERTAMENTO = RIGHE_REV.PG_ACCERTAMENTO
        AND   PG_ACCERTAMENTO_SCADENZARIO = RIGHE_REV.PG_ACCERTAMENTO_SCADENZARIO
        AND   CD_CDS_DOC_AMM = RIGHE_REV.CD_CDS_DOC_AMM
        AND   CD_UO_DOC_AMM = RIGHE_REV.CD_UO_DOC_AMM
        AND   ESERCIZIO_DOC_AMM = RIGHE_REV.ESERCIZIO_DOC_AMM
        AND   CD_TIPO_DOCUMENTO_AMM = RIGHE_REV.CD_TIPO_DOCUMENTO_AMM
        AND   PG_DOC_AMM = RIGHE_REV.PG_DOC_AMM;

        Begin
          cnrctb037.inserisci_siope_automatico (RIGHE_REV);
        Exception
          When Others Then Null;
        End;

   End Loop;

  -- CNRCTB207.regStipendiCOGE(aEs, aMese, aUser);
 end;

 Procedure elaboraStipDett (aEs number,
                aMese number,
                aUser varchar2) Is

    aStipObb  STIPENDI_COFI_OBB_SCAD%Rowtype;
    aStipCori STIPENDI_COFI_CORI%Rowtype;

    aStipObbDett  STIPENDI_COFI_OBB_SCAD_DETT%Rowtype;
    aStipCoriDett STIPENDI_COFI_CORI_DETT%Rowtype;

    aLog STIPENDI_COFI_LOGS%Rowtype;

    totaleIrap    Number:=0;
    annulliIrap   Number:=0;
    sommaDettIrap   Number:=0;
    sommaDetAddCom  Number:=0;
    sommaSaldiNegAddCom NUMBER:=0;
    sommaSaldiPosAddCom NUMBER:=0;
    totaleSpesa   NUMBER:=0;
    totaleEntrata NUMBER:=0;
    differenza    NUMBER:=0;
    contaAddCom   Number:=0;
    ritAddCom   TIPO_CONTRIBUTO_RITENUTA.CD_CONTRIBUTO_RITENUTA%Type;
    esistonoDati  varchar2(1):='N';
    errore    varchar2(1):='N';
    meseCompetenza  number(2);
    totaleNegativi  NUMBER:=0;
    totSpesaContribFig NUMBER:=0;
    totEntrataContribFig NUMBER:=0;

    Cursor cObb (tipo VARCHAR2) Is
        Select *
        From STIPENDI_COFI_OBB_SCAD_DETT
        Where ESERCIZIO=aEs
          And MESE=aMese
          And TIPO_FLUSSO = tipo;
    Cursor cCori (tipo VARCHAR2) Is
        Select *
        From STIPENDI_COFI_CORI_DETT
        Where ESERCIZIO=aEs
          And MESE=aMese
          And TIPO_FLUSSO = tipo;
    Cursor cCoriElaborati Is
        Select *
        From STIPENDI_COFI_CORI
        Where ESERCIZIO=aEs
          And MESE=aMese;
  Begin
    gPgLog := ibmutl200.LOGSTART(tipoLog,'Elaborazione archivi stipendi', null, aUser, null, null);

    aLog.ESERCIZIO:=aEs;
    aLog.MESE:=aMese;
    aLog.PG_ESECUZIONE:=gPgLog;
    aLog.DACR:=Sysdate;
    aLog.UTCR:=aUser;
    aLog.DUVA:=Sysdate;
    aLog.UTUV:=aUser;
    aLog.PG_VER_REC:=1;
    ins_STIPENDI_COFI_LOGS(aLog);

    --Flusso Stipendi 'Principale'
    For aStipObbDett In cObb(FLUSSO_PRINCIPALE) Loop
        esistonoDati := 'Y';
          aStipObb.esercizio      := aStipObbDett.esercizio;
          aStipObb.mese       := aStipObbDett.mese;
          aStipObb.cd_cds_obbligazione    := aStipObbDett.cd_cds_obbligazione;
          aStipObb.esercizio_obbligazione   := aStipObbDett.esercizio_obbligazione;
          aStipObb.pg_obbligazione    := aStipObbDett.pg_obbligazione;
          aStipObb.im_totale      := aStipObbDett.im_totale;
          aStipObb.dacr       := Sysdate;
          aStipObb.utcr       := aUser;
          aStipObb.duva       := Sysdate;
          aStipObb.utuv       := aUser;
          aStipObb.pg_ver_rec       := 1;
          aStipObb.esercizio_ori_obbligazione   := aStipObbDett.esercizio_ori_obbligazione;
          ins_STIPENDI_COFI_OBB_SCAD(aStipObb);
    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '1', 'Flusso Stipendi Principale (parte spesa) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '1', 'Non esistono dati da elaborare per il Flusso Stipendi Principale (parte spesa)', '');
    End If;
    esistonoDati := 'N';
    For aStipCoriDett In cCori(FLUSSO_PRINCIPALE) Loop
        esistonoDati := 'Y';
          aStipCori.esercizio       := aStipCoriDett.esercizio;
          aStipCori.mese      := aStipCoriDett.mese;
          aStipCori.cd_contributo_ritenuta  := aStipCoriDett.cd_contributo_ritenuta;
          aStipCori.ti_ente_percipiente   := aStipCoriDett.ti_ente_percipiente;
          aStipCori.ammontare       := aStipCoriDett.ammontare;
          aStipCori.dt_da_competenza_coge   := aStipCoriDett.dt_da_competenza_coge;
          aStipCori.dt_a_competenza_coge  := aStipCoriDett.dt_a_competenza_coge;
          aStipCori.dacr      := Sysdate;
          aStipCori.utcr      := aUser;
          aStipCori.duva      := Sysdate;
          aStipCori.utuv      := aUser;
          aStipCori.pg_ver_rec      := 1;
          ins_STIPENDI_COFI_CORI(aStipCori);
    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '2', 'Flusso Stipendi Principale (parte entrata) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '2', 'Non esistono dati da elaborare per il Flusso Stipendi Principale (parte entrata)', '');
    End If;

    --Flusso Stipendi 'Annulli Stipendiali'
    --Va' elaborato prima della regionalizzazione irap
    esistonoDati := 'N';
    For aStipObbDett In cObb(FLUSSO_ANNULLI) Loop
        esistonoDati := 'Y';
          Update STIPENDI_COFI_OBB_SCAD
          Set im_totale = Nvl(im_totale,0) - Nvl(aStipObbDett.im_totale,0)
          Where esercizio       = aStipObbDett.esercizio
            And mese        = aStipObbDett.mese
            And cd_cds_obbligazione     = aStipObbDett.cd_cds_obbligazione
            And esercizio_obbligazione    = aStipObbDett.esercizio_obbligazione
            And pg_obbligazione     = aStipObbDett.pg_obbligazione
            And esercizio_ori_obbligazione  = aStipObbDett.esercizio_ori_obbligazione;
          If sql%Rowcount = 0 Then
            errore := 'Y';
            ibmutl200.logErr(gPgLog, '6', 'Nel Flusso Annulli Stipendiali è presente l''obbligazione '
            ||To_Char(aStipObbDett.esercizio_obbligazione)||'/'||To_Char(aStipObbDett.esercizio_ori_obbligazione)||'/'||aStipObbDett.cd_cds_obbligazione||'/'||To_Char(aStipObbDett.pg_obbligazione)
            ||' che non esiste nel flusso degli Stipendi Principale', '');
            -- inserisco la riga
            aStipObb.esercizio      := aStipObbDett.esercizio;
            aStipObb.mese         := aStipObbDett.mese;
            aStipObb.cd_cds_obbligazione    := aStipObbDett.cd_cds_obbligazione;
            aStipObb.esercizio_obbligazione   := aStipObbDett.esercizio_obbligazione;
            aStipObb.pg_obbligazione    := aStipObbDett.pg_obbligazione;
            aStipObb.im_totale      := - aStipObbDett.im_totale;
            aStipObb.dacr         := Sysdate;
            aStipObb.utcr         := aUser;
            aStipObb.duva         := Sysdate;
            aStipObb.utuv         := aUser;
            aStipObb.pg_ver_rec       := 1;
            aStipObb.esercizio_ori_obbligazione   := aStipObbDett.esercizio_ori_obbligazione;
            ins_STIPENDI_COFI_OBB_SCAD(aStipObb);
          End If;
    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '6', 'Flusso Annulli Stipendiali (parte spesa) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '6', 'Non esistono dati da elaborare per il Flusso Annulli Stipendiali (parte spesa)', '');
    End If;
    esistonoDati := 'N';
    For aStipCoriDett In cCori(FLUSSO_ANNULLI) Loop
        esistonoDati := 'Y';
          Update STIPENDI_COFI_CORI
          Set ammontare = Nvl(ammontare,0) - Nvl(aStipCoriDett.ammontare,0)
          Where esercizio       = aStipCoriDett.esercizio
            And mese          = aStipCoriDett.mese
            And cd_contributo_ritenuta    = aStipCoriDett.cd_contributo_ritenuta
            And ti_ente_percipiente   = aStipCoriDett.ti_ente_percipiente;

          If sql%Rowcount = 0 Then
            errore := 'Y';
            ibmutl200.logErr(gPgLog, '6', 'Nel Flusso Annulli Stipendiali è presente la ritenuta '
            ||aStipCoriDett.cd_contributo_ritenuta||' che non esiste nel flusso degli Stipendi Principale', '');
            -- inserisco la riga
            aStipCori.esercizio     := aStipCoriDett.esercizio;
            aStipCori.mese      := aStipCoriDett.mese;
            aStipCori.cd_contributo_ritenuta:= aStipCoriDett.cd_contributo_ritenuta;
            aStipCori.ti_ente_percipiente   := aStipCoriDett.ti_ente_percipiente;
            aStipCori.ammontare     := - aStipCoriDett.ammontare;
            aStipCori.dt_da_competenza_coge := aStipCoriDett.dt_da_competenza_coge;
            aStipCori.dt_a_competenza_coge  := aStipCoriDett.dt_a_competenza_coge;
            aStipCori.dacr      := Sysdate;
            aStipCori.utcr      := aUser;
            aStipCori.duva      := Sysdate;
            aStipCori.utuv      := aUser;
            aStipCori.pg_ver_rec    := 1;
            ins_STIPENDI_COFI_CORI(aStipCori);
          End If;

          Declare
             importo NUMBER;
          Begin
             Select ammontare
             Into importo
             From STIPENDI_COFI_CORI
             Where esercizio      = aStipCoriDett.esercizio
               And mese       = aStipCoriDett.mese
               And cd_contributo_ritenuta = aStipCoriDett.cd_contributo_ritenuta
               And ti_ente_percipiente    = aStipCoriDett.ti_ente_percipiente;
             If importo < 0 Then
                ibmutl200.logInf(gPgLog, '7', 'Dopo l''elaborazione del Flusso degli Annulli, la ritenuta '
                ||aStipCoriDett.cd_contributo_ritenuta||' risulta negativa ('||To_Char(importo, '999G999G999G999G990D00')||')', '');
             End If;
          End;
    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '7', 'Flusso Annulli Stipendiali (parte entrata) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '7', 'Non esistono dati da elaborare per il Flusso Annulli Stipendiali (parte entrata)', '');
    End If;

    --Flusso Rimborsi (solo parte entrata)
    esistonoDati := 'N';
    For aStipCoriDett In cCori(FLUSSO_RIMBORSI) Loop
        esistonoDati := 'Y';
          Update STIPENDI_COFI_CORI
          Set ammontare = Nvl(ammontare,0) - Nvl(aStipCoriDett.ammontare,0)
          Where esercizio       = aStipCoriDett.esercizio
            And mese          = aStipCoriDett.mese
            And cd_contributo_ritenuta    = aStipCoriDett.cd_contributo_ritenuta
            And ti_ente_percipiente   = aStipCoriDett.ti_ente_percipiente;

          If sql%Rowcount = 0 Then
            errore := 'Y';
            ibmutl200.logErr(gPgLog, '6', 'Nel Flusso Rimborsi è presente la ritenuta '
            ||aStipCoriDett.cd_contributo_ritenuta||' che non esiste nel flusso degli Stipendi Principale', '');
            -- inserisco la riga
            aStipCori.esercizio     := aStipCoriDett.esercizio;
            aStipCori.mese      := aStipCoriDett.mese;
            aStipCori.cd_contributo_ritenuta:= aStipCoriDett.cd_contributo_ritenuta;
            aStipCori.ti_ente_percipiente   := aStipCoriDett.ti_ente_percipiente;
            aStipCori.ammontare     := - aStipCoriDett.ammontare;
            aStipCori.dt_da_competenza_coge := aStipCoriDett.dt_da_competenza_coge;
            aStipCori.dt_a_competenza_coge  := aStipCoriDett.dt_a_competenza_coge;
            aStipCori.dacr      := Sysdate;
            aStipCori.utcr      := aUser;
            aStipCori.duva      := Sysdate;
            aStipCori.utuv      := aUser;
            aStipCori.pg_ver_rec    := 1;
            ins_STIPENDI_COFI_CORI(aStipCori);
          End If;

          Declare
             importo NUMBER;
          Begin
             Select ammontare
             Into importo
             From STIPENDI_COFI_CORI
             Where esercizio      = aStipCoriDett.esercizio
               And mese       = aStipCoriDett.mese
               And cd_contributo_ritenuta = aStipCoriDett.cd_contributo_ritenuta
               And ti_ente_percipiente    = aStipCoriDett.ti_ente_percipiente;
             If importo < 0 Then
                ibmutl200.logInf(gPgLog, '7', 'Dopo l''elaborazione del Flusso dei Rimborsi, la ritenuta '
                ||aStipCoriDett.cd_contributo_ritenuta||' risulta negativa ('||To_Char(importo, '999G999G999G999G990D00')||')', '');
             End If;
          End;

    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '7', 'Flusso Rimborsi (parte entrata) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '7', 'Non esistono dati da elaborare per il Flusso Rimborsi (parte entrata)', '');
    End If;

    --Flusso Stipendi 'Regionalizzazione IRAP'

    --controllo se l'importo presente in STIPENDI_COFI_CORI per la riga dell'IRAP
    --è uguale alla somma in STIPENDI_COFI_CORI_DETT dei dettagli per singola regione
    Select Nvl(Sum(ammontare),0)
    Into totaleIrap
    From STIPENDI_COFI_CORI_DETT
    Where esercizio = aEs
      And mese = aMese
      And tipo_flusso = FLUSSO_PRINCIPALE
      And cd_contributo_ritenuta In (Select cd_contributo_ritenuta
               From tipo_contributo_ritenuta
               Where cd_classificazione_cori = cnrctb545.isCoriIrap);

    Select Nvl(Sum(ammontare),0)
    Into annulliIrap
    From STIPENDI_COFI_CORI_DETT
    Where esercizio = aEs
      And mese = aMese
      And tipo_flusso = FLUSSO_ANNULLI
      And cd_contributo_ritenuta In (Select cd_contributo_ritenuta
               From tipo_contributo_ritenuta
               Where cd_classificazione_cori = cnrctb545.isCoriIrap);

    Select Nvl(Sum(ammontare),0)
    Into sommaDettIrap
    From STIPENDI_COFI_CORI_DETT
    Where esercizio = aEs
      And mese = aMese
      And tipo_flusso = FLUSSO_IRAP
      And cd_contributo_ritenuta In (Select cd_contributo_ritenuta
               From tipo_contributo_ritenuta
               Where cd_classificazione_cori = cnrctb545.isCoriIrap);
    If (totaleIrap - annulliIrap) != sommaDettIrap Then
       errore := 'Y';
       ibmutl200.logErr(gPgLog, '3', 'Errore di squadratura in Flusso Regionalizzazione IRAP. Nel Flusso principale '||
       'l''importo e'' '||To_Char(totaleIrap, '999G999G999G999G990D00')||' e nel flusso degli annulli l''importo e'' '||To_Char(annulliIrap, '999G999G999G999G990D00')||', mentre la somma dei dettagli e'' '||To_Char(sommaDettIrap, '999G999G999G999G990D00'), '');
    Else
      Delete STIPENDI_COFI_CORI
      Where esercizio = aEs
        And mese = aMese
        And cd_contributo_ritenuta In (Select cd_contributo_ritenuta
                               From tipo_contributo_ritenuta
                     Where cd_classificazione_cori = cnrctb545.isCoriIrap);
      esistonoDati := 'N';
      For aStipCoriDett In cCori(FLUSSO_IRAP) Loop
          esistonoDati := 'Y';
          aStipCori.esercizio       := aStipCoriDett.esercizio;
          aStipCori.mese      := aStipCoriDett.mese;
          aStipCori.cd_contributo_ritenuta  := aStipCoriDett.cd_contributo_ritenuta;
          aStipCori.ti_ente_percipiente   := aStipCoriDett.ti_ente_percipiente;
          aStipCori.ammontare       := aStipCoriDett.ammontare;
          aStipCori.dt_da_competenza_coge   := aStipCoriDett.dt_da_competenza_coge;
          aStipCori.dt_a_competenza_coge  := aStipCoriDett.dt_a_competenza_coge;
          aStipCori.dacr      := Sysdate;
          aStipCori.utcr      := aUser;
          aStipCori.duva      := Sysdate;
          aStipCori.utuv      := aUser;
          aStipCori.pg_ver_rec      := 1;
          ins_STIPENDI_COFI_CORI(aStipCori);
      End Loop;
      If esistonoDati = 'Y' Then
         ibmutl200.logInf(gPgLog, '3', 'Flusso Regionalizzazione IRAP elaborato', '');
      Else
       ibmutl200.logInf(gPgLog, '3', 'Non esistono dati da elaborare per il Flusso Regionalizzazione IRAP', '');
      End If;
    End If;
    --Flusso Stipendi 'Contributi Figurativi'
    -- Controllo di quadratura: il totale delle righe nel flusso di spesa deve essere uguale
    -- a quello nel flusso di entrata
    Select Nvl(Sum(im_totale),0)
    Into totSpesaContribFig
    From STIPENDI_COFI_OBB_SCAD_DETT
    Where esercizio = aEs
      And mese = aMese
      And tipo_flusso = FLUSSO_CONTR_FIGURATIVI;

    Select Nvl(Sum(ammontare),0)
    Into totEntrataContribFig
    From STIPENDI_COFI_CORI_DETT
    Where esercizio = aEs
      And mese = aMese
      And tipo_flusso = FLUSSO_CONTR_FIGURATIVI;

    If totSpesaContribFig != totEntrataContribFig Then
       errore := 'Y';
       ibmutl200.logErr(gPgLog, '3', 'Errore di squadratura nel Flusso dei Contributi Figurativi: Per la parte spesa '||
       'l''importo e'' '||To_Char(totSpesaContribFig, '999G999G999G999G990D00')||' mentre per la parte entrata l''importo e'' '||To_Char(totEntrataContribFig, '999G999G999G999G990D00'), '');
    End if;

    esistonoDati := 'N';
    For aStipObbDett In cObb(FLUSSO_CONTR_FIGURATIVI) Loop
        esistonoDati := 'Y';
          Update STIPENDI_COFI_OBB_SCAD
          Set im_totale = Nvl(im_totale,0) + Nvl(aStipObbDett.im_totale,0)
          Where esercizio       = aStipObbDett.esercizio
            And mese        = aStipObbDett.mese
            And cd_cds_obbligazione     = aStipObbDett.cd_cds_obbligazione
            And esercizio_obbligazione    = aStipObbDett.esercizio_obbligazione
            And pg_obbligazione     = aStipObbDett.pg_obbligazione
            And esercizio_ori_obbligazione  = aStipObbDett.esercizio_ori_obbligazione;
          If sql%Rowcount = 0 Then
            errore := 'Y';
            ibmutl200.logErr(gPgLog, '6', 'Nel Flusso Contributi Figurativi è presente l''obbligazione '
            ||To_Char(aStipObbDett.esercizio_obbligazione)||'/'||To_Char(aStipObbDett.esercizio_ori_obbligazione)||'/'||aStipObbDett.cd_cds_obbligazione||'/'||To_Char(aStipObbDett.pg_obbligazione)
            ||' che non esiste nel flusso degli Stipendi Principale', '');
          End If;
    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '4', 'Flusso Contributi Figurativi (parte spesa) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '4', 'Non esistono dati da elaborare per il Flusso Contributi Figurativi (parte spesa)', '');
    End If;
    esistonoDati := 'N';
    For aStipCoriDett In cCori(FLUSSO_CONTR_FIGURATIVI) Loop
        esistonoDati := 'Y';
          Update STIPENDI_COFI_CORI
          Set ammontare = Nvl(ammontare,0) + Nvl(aStipCoriDett.ammontare,0)
          Where esercizio       = aStipCoriDett.esercizio
            And mese          = aStipCoriDett.mese
            And cd_contributo_ritenuta    = aStipCoriDett.cd_contributo_ritenuta
            And ti_ente_percipiente   = aStipCoriDett.ti_ente_percipiente;
          If sql%Rowcount = 0 Then
            errore := 'Y';
            ibmutl200.logErr(gPgLog, '6', 'Nel Flusso Contributi Figurativi è presente la ritenuta '
            ||aStipCoriDett.cd_contributo_ritenuta||' che non esiste nel flusso degli Stipendi Principale', '');
          End If;
    End Loop;
    If esistonoDati = 'Y' Then
       ibmutl200.logInf(gPgLog, '5', 'Flusso Contributi Figurativi (parte entrata) elaborato', '');
    Else
       ibmutl200.logInf(gPgLog, '5', 'Non esistono dati da elaborare per il Flusso Contributi Figurativi (parte entrata)', '');
    End If;

    --Solo per il Flusso 15 deve essere: importo dell'unica riga del flusso S di spesa = alla somma di tutte le righe del flusso S di entrata.
    If aMese = 15 Then
        Begin
          Select Nvl(Sum(im_totale),0)
          Into totaleSpesa
          From STIPENDI_COFI_OBB_SCAD
          Where esercizio = aEs
            And mese = aMese;

          Select Nvl(Sum(ammontare),0)
          Into totaleEntrata
          From STIPENDI_COFI_CORI
          Where esercizio = aEs
            And mese = aMese;

          If totaleSpesa != totaleEntrata Then
             errore := 'Y';
             ibmutl200.logErr(gPgLog, '15', 'Errore di Squadratura per il mese '||To_Char(aMese)||'. Nel Flusso di spesa '||
           'il totale e'' '||To_Char(totaleSpesa)||' mentre nel flusso di entrata il totale e'' '||To_Char(totaleEntrata), '');
          End If;
        End;
    End If;

    --Flusso Stipendi 'Addizionali Comunali'
    -- A differenza degli altri flussi, quello delle addizionali comunali non viene scaricato su STIPENDI_COFI_CORI
    Begin

      esistonoDati := 'N';

      Select Count(1)
       Into contaAddCom
       From STIPENDI_COFI_CORI_DETT
       Where esercizio = aEs
         And mese = aMese
         And tipo_flusso = FLUSSO_ADDIZIONALE_COMUNALE;

      If contaAddCom > 0 Then
          esistonoDati := 'Y';
      End If;

      Select Count(1)
      Into contaAddCom
      From STIPENDI_COFI_CORI_DETT
      Where esercizio = aEs
        And mese = aMese
        And tipo_flusso = FLUSSO_ADDIZIONALE_COMUNALE
        And cd_catastale Is Null;

      If contaAddCom >0 Then
           errore := 'Y';
         ibmutl200.logErr(gPgLog, '9', 'Errore nel Flusso delle Addizionali Comunali. Alcuni Codici Catastali non sono valorizzati', '');
      Else
           Select Count(1)
           Into contaAddCom
           From STIPENDI_COFI_CORI_DETT
           Where esercizio = aEs
             And mese = aMese
             And tipo_flusso = FLUSSO_ADDIZIONALE_COMUNALE
             And cd_catastale Not In (Select cd_catastale From comune Where ti_italiano_estero = 'I');

           If contaAddCom >0 Then
                errore := 'Y';
                Begin
                   for rec in (select cd_catastale
                              From STIPENDI_COFI_CORI_DETT
                              Where esercizio = aEs
                                And mese = aMese
                                And tipo_flusso = FLUSSO_ADDIZIONALE_COMUNALE
                                And cd_catastale Not In (Select cd_catastale From comune Where ti_italiano_estero = 'I'))
                   loop
                         ibmutl200.logErr(gPgLog, '9', 'Errore nel Flusso delle Addizionali Comunali. Il Codice Catastale '||rec.cd_catastale||' non è corretto', '');
                   end loop;
                End;
              --ibmutl200.logErr(gPgLog, '9', 'Errore nel Flusso delle Addizionali Comunali. Alcuni Codici Catastali non sono corretti', '');
           Else
             If esistonoDati = 'Y' Then
                --per tutti i cori presenti in STIPENDI_COFI_CORI det tipo Addizionale, controllo la quadratura in STIPENDI_COFI_CORI_DETT
                For aStipCori In (Select *
                       From STIPENDI_COFI_CORI
                     Where esercizio = aEs
                        And mese = aMese
                      And cd_contributo_ritenuta In (Select cd_contributo_ritenuta
                                             From tipo_contributo_ritenuta
                                   Where cnrctb545.getIsAddComunale(cd_classificazione_cori) = 'Y')) Loop

            -- Controllo la quadratura con il flusso dei dettagli
          Select Nvl(Sum(ammontare),0)
              Into sommaDetAddCom
              From STIPENDI_COFI_CORI_DETT
              Where esercizio = aEs
                      And mese = aMese
                      And tipo_flusso = FLUSSO_ADDIZIONALE_COMUNALE
                      And cd_contributo_ritenuta = aStipCori.cd_contributo_ritenuta
                      And ti_ente_percipiente = aStipCori.ti_ente_percipiente;

                      If aStipCori.ammontare != sommaDetAddCom Then
               errore := 'Y';
               ibmutl200.logErr(gPgLog, '3', 'Errore di squadratura nel Flusso delle Addizionali Comunali per il cori '||To_Char(aStipCori.cd_contributo_ritenuta)||
               '. Nel Flusso (Principale - Annulli - Rimborsi) l''importo e'' '||To_Char(aStipCori.ammontare, '999G999G999G999G990D00')||' mentre la somma dei dettagli e'' '||To_Char(sommaDetAddCom, '999G999G999G999G990D00'), '');
                End If;

          -- Aggiorno l'importo del gruppo su STIPENDI_COFI_CORI con la somma dei positivi della colonna saldo
          -- cioè con quello che realmente verso con F24
          Select Nvl(Sum(saldo),0)
              Into sommaSaldiPosAddCom
              From STIPENDI_COFI_CORI_DETT
              Where esercizio = aEs
                      And mese = aMese
                      And tipo_flusso = FLUSSO_ADDIZIONALE_COMUNALE
                      And cd_contributo_ritenuta = aStipCori.cd_contributo_ritenuta
                      And ti_ente_percipiente = aStipCori.ti_ente_percipiente
                      And saldo > 0;

                    -- Calcolo la differenza tra quello che mi risulta da versare su STIPENDI_COFI_CORI e quello
                    -- che realmente verserò con F24 (cioè la somma dei positivi della colonna saldo in STIPENDI_COFI_CORI_DETT
                    differenza := sommaSaldiPosAddCom - Nvl(aStipCori.ammontare,0);
                    -- se la differenza è positiva vuol dire che in F24 ho di più di quello che mi risulta da versare
                    -- e quindi aumento l'importo da versare esattamente della differenza
                    -- se la differenza è negativa vuol dire che in F24 ho di meno di quello che mi risulta da versare
                    -- e quindi diminuisco l'importo da versare esattamente della differenza
                    If differenza != 0 Then
                        --devo aggiungere in STIPENDI_COFI_CORI la ritenuta per la differenza delle addizionali comunali
                        ritAddCom := CNRCTB015.getVal01PerChiave(aEs, 'DIFFERENZA_ADD_COM_STIPENDI','CONTRIBUTO_RITENUTA');

                        Update STIPENDI_COFI_CORI
                           Set ammontare = Nvl(ammontare,0) + differenza
                         Where esercizio = aEs
                     And mese = aMese
                     And cd_contributo_ritenuta = aStipCori.cd_contributo_ritenuta
                     And ti_ente_percipiente = aStipCori.ti_ente_percipiente;

                  If differenza > 0 Then
                     ibmutl200.logInf(gPgLog, '5', 'Per il cori '||To_Char(aStipCori.cd_contributo_ritenuta)||' è stato aggiunto all''importo '||
                 To_Char(aStipCori.ammontare, '999G999G999G999G990D00')||', l''importo '||To_Char(Abs(differenza), '999G999G999G999G990D00'), '');
              Else
                 ibmutl200.logInf(gPgLog, '5', 'Per il cori '||To_Char(aStipCori.cd_contributo_ritenuta)||' è stato diminuito l''importo '||
                 To_Char(aStipCori.ammontare, '999G999G999G999G990D00')||', dell''importo '||To_Char(Abs(differenza), '999G999G999G999G990D00'), '');
              End If;

                        --l'importo eventualmente aumentato o diminuito viene inserito con una ritenuta particolare per la quadratura degli stipendi
                    Begin
                       If aMese = 15 Then
                          meseCompetenza := 11;
                       Elsif aMese = 13 Then
                          meseCompetenza := 12;
                       Else
                          meseCompetenza := aMese;
                       End If;

                           aStipCori.esercizio      := aEs;
                 aStipCori.mese       := aMese;
                 aStipCori.cd_contributo_ritenuta   := ritAddCom;
                 aStipCori.ti_ente_percipiente  := 'P';
                 aStipCori.ammontare      := -differenza;
                 aStipCori.dt_da_competenza_coge  := IBMUTL001.getFirstDayOfMonth(TO_DATE('01'|| To_Char(Lpad(meseCompetenza,2,0)) || To_Char(aEs), 'DDMMYYYY'));
                 aStipCori.dt_a_competenza_coge   := IBMUTL001.getLastDayOfMonth(TO_DATE('01'|| To_Char(Lpad(meseCompetenza,2,0)) || To_Char(aEs), 'DDMMYYYY'));
                 aStipCori.dacr       := Sysdate;
                 aStipCori.utcr       := aUser;
                 aStipCori.duva       := Sysdate;
                 aStipCori.utuv       := aUser;
                 aStipCori.pg_ver_rec     := 1;
                 ins_STIPENDI_COFI_CORI(aStipCori);
                    Exception
               When Dup_Val_On_Index Then
                  Update STIPENDI_COFI_CORI
                  Set ammontare = Nvl(ammontare,0) - Nvl(differenza,0)
                  Where esercizio = aEs
                      And mese  = aMese
                      And cd_contributo_ritenuta = ritAddCom
                      And ti_ente_percipiente = 'P';
                      End;

      ibmutl200.logInf(gPgLog, '5', 'Verra'' aggiunta alla ritenuta '||ritAddCom||' l''importo '
                ||To_Char(- differenza, '999G999G999G999G990D00'), '');
              End If;
        End Loop;
         End If;
       End If;
      End If;

      If esistonoDati = 'Y' Then
         ibmutl200.logInf(gPgLog, '3', 'Flusso Addizionali comunali elaborato', '');
      Else
       ibmutl200.logInf(gPgLog, '3', 'Non esistono dati da elaborare per il Flusso Addizionali comunali', '');
      End If;

    End;

    -- Solo per il flusso 15 devo eliminare tutte le ritenute negative ed incrementare l'unica riga di spesa
    If aMese = 15 Then
    Begin
       For aStipCori In cCoriElaborati Loop
          If aStipCori.ammontare < 0 Then
             totaleNegativi := totaleNegativi + aStipCori.ammontare;

             ibmutl200.logInf(gPgLog, '2', 'Eliminata la ritenuta '||To_Char(aStipCori.cd_contributo_ritenuta)||' perche'' negativa. ('||To_Char(aStipCori.ammontare)||')', '');

             Delete STIPENDI_COFI_CORI
             Where esercizio = aStipCori.esercizio
               And mese = aStipCori.mese
               And cd_contributo_ritenuta = aStipCori.cd_contributo_ritenuta
               And ti_ente_percipiente = aStipCori.ti_ente_percipiente;
          End If;
       End Loop;
       If totaleNegativi != 0 Then
         Update stipendi_cofi_obb_scad
         Set im_totale = im_totale + (-totaleNegativi)
         Where esercizio = aEs
           And mese = aMese
           And Rownum < 2;
       End If;
       ibmutl200.logInf(gPgLog, '2', 'Incrementata la riga di spesa dell''importo '||To_Char(-totaleNegativi, '999G999G999G999G990D00')||'.', '');
    End;
    End If; --If aMese = 15 Then

    If errore = 'N' Then
       ibmutl200.logInf(gPgLog, '8', 'Elaborazione terminata con successo', '');
    Else
       ibmutl200.logInf(gPgLog, '8', 'Elaborazione terminata. Si sono verificati degli errori. Controllare il risultato dell''elaborazione', '');
    End If;
  End;

 Procedure ins_STIPENDI_COFI_OBB_SCAD (aDest STIPENDI_COFI_OBB_SCAD%rowtype) is
  begin
   insert into STIPENDI_COFI_OBB_SCAD (
     ESERCIZIO,
     MESE,
     CD_CDS_OBBLIGAZIONE,
     ESERCIZIO_OBBLIGAZIONE,
     PG_OBBLIGAZIONE,
     IM_TOTALE,
     DACR,
     UTCR,
     DUVA,
     UTUV,
     PG_VER_REC,
     ESERCIZIO_ORI_OBBLIGAZIONE
   ) values (
     aDest.ESERCIZIO,
     aDest.MESE,
     aDest.CD_CDS_OBBLIGAZIONE,
     aDest.ESERCIZIO_OBBLIGAZIONE,
     aDest.PG_OBBLIGAZIONE,
     aDest.IM_TOTALE,
     aDest.DACR,
     aDest.UTCR,
     aDest.DUVA,
     aDest.UTUV,
     aDest.PG_VER_REC,
     aDest.ESERCIZIO_ORI_OBBLIGAZIONE
    );
 end;
 Procedure ins_STIPENDI_COFI_CORI (aDest STIPENDI_COFI_CORI%rowtype) is
  begin
   insert into STIPENDI_COFI_CORI (
     ESERCIZIO,
     MESE,
     CD_CONTRIBUTO_RITENUTA,
     TI_ENTE_PERCIPIENTE,
     AMMONTARE,
     DT_DA_COMPETENZA_COGE,
     DT_A_COMPETENZA_COGE,
     DACR,
     UTCR,
     DUVA,
     UTUV,
     PG_VER_REC
   ) values (
     aDest.ESERCIZIO,
     aDest.MESE,
     aDest.CD_CONTRIBUTO_RITENUTA,
     aDest.TI_ENTE_PERCIPIENTE,
     aDest.AMMONTARE,
     aDest.DT_DA_COMPETENZA_COGE,
     aDest.DT_A_COMPETENZA_COGE,
     aDest.DACR,
     aDest.UTCR,
     aDest.DUVA,
     aDest.UTUV,
     aDest.PG_VER_REC
    );
 end;
 Procedure ins_STIPENDI_COFI_LOGS (aLog STIPENDI_COFI_LOGS%rowtype) is
  begin
   insert into STIPENDI_COFI_LOGS (
     ESERCIZIO,
     MESE,
     PG_ESECUZIONE,
     DACR,
     UTCR,
     DUVA,
     UTUV,
     PG_VER_REC
   ) values (
     aLog.ESERCIZIO,
     aLog.MESE,
     aLog.PG_ESECUZIONE,
     aLog.DACR,
     aLog.UTCR,
     aLog.DUVA,
     aLog.UTUV,
     aLog.PG_VER_REC
    );
 end;
 Procedure annullaElabStipDett (aEs number,
                aMese number,
                aUser varchar2) Is
  stato_liquidazione  VARCHAR2(1);
 Begin
    --controllo che per il mese scelto non sia stata già effettuata la liquidazione
    Select stato
    Into stato_liquidazione
    From STIPENDI_COFI
    Where esercizio = aEs
      And mese = aMese;

    If stato_liquidazione = 'P' Then
         IBMERR001.RAISE_ERR_GENERICO('Non è possibile procedere all''annullamento dell''elaborazione poichè è stata già effettuata la liquidazione del mese selezionato');
    Else
         Delete STIPENDI_COFI_OBB_SCAD
       Where esercizio = aEs
           And mese = aMese;

       Delete STIPENDI_COFI_CORI
       Where esercizio = aEs
           And mese = aMese;

       Delete STIPENDI_COFI_LOGS
       Where esercizio = aEs
           And mese = aMese;
    End If;
  End;

END;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy