create or replace PROCEDURE GERA_CONTRATO (
  P_NRORG              IN NUMBER,
  P_NRSEQORCAMENTO     IN NUMBER,
  P_NRSEQCONTRATO      OUT NUMBER)
AS
  V_NRSEQMODCONTRATO NUMBER;
  V_NRSEQCONTRATO    VARCHAR2(30);
  V_NRSEQFATUCONTR   VARCHAR2(30);
  V_NRSEQFATUITCONT  VARCHAR2(30);
  V_NRITSEQCONTRATO  VARCHAR2(30);
  V_NRCONTRATOFCT    VARCHAR2(50);
  V_DTINICIOCONT     DATE;
  V_DTFINCONT        DATE;
  V_DTPADREAJCONT    DATE;
  V_NRITEMOCONTRATO  VARCHAR2(10);
  V_NRSEQREFEORCCONT VARCHAR2(20);
  V_PRAZO            NUMBER;
  V_NRSEQREAJUSTE    NUMBER;
  V_NRSEQINDCONTR    NUMBER;
  V_NRSEQCONTDOC     NUMBER;
  V_SOMAVALOR        VARCHAR2(3);
  V_NRRELACESTRUTCONT NUMBER;

  /* = PARAMETROS DE FORMACAO DE PREO DOS ITENS = */
  V_NRRELACFORMACAOCONT FCT_RELACFORMACAOCONT.NRRELACFORMACAOCONT%TYPE;
  V_NRFORMPRECOSERVICO  FCT_RELACFORMACAOPROP.NRFORMPRECOSERVICO%TYPE;

  /* == PARAMETROS DE FATURAMENTO (ESCOPO) == */
  V_CDPRODFATURA          FCT_PARAMFATESCOPO.CDPRODFATURA%TYPE;
  V_CDFILIALFATURA        VARCHAR2(4);
  V_NRGRUPOFATURA         NUMBER;
  V_NRPARCFATURA          NUMBER;
  V_IDFATURACONTR         CHAR(1);
  V_CDMODPGTO             VARCHAR2(5);
  V_IDQTDIASCOMPCON       VARCHAR2(1);
  V_NRQTDIASCOMPCON       NUMBER;
  V_IDTPCOMPETCONT        VARCHAR2(1);
  V_NRDIACOMPETCONT       NUMBER;
  V_IDTPFATUINCOMP        VARCHAR2(1);
  V_IDTPDTEMISSNF         VARCHAR2(1);
  V_NRDIADTEMISSNF        NUMBER;
  V_IDTPDTVENC            VARCHAR2(1);
  V_NRDIATPDTVENC         NUMBER;
  V_IDSOMAFATUCONT        VARCHAR2(1);
  V_IDSOMAITGRUPFAT       VARCHAR2(1);
  V_IDGERANFPARC          VARCHAR2(1);
  V_IDBLOQVRMEDIC         VARCHAR2(1);
  V_IDGERARATEIO          VARCHAR2(1);
  V_QTPARCELASFATU        NUMBER;
  V_NRDIAVENCPARCELASFATU NUMBER;
  V_IDAPURAAPONTAMENTO    CHAR(1);

  /* == PARAMETROS DE FATURAMENTO (SERVICO ESCOPO) == */
  V_CDPRODFATURA_IT          VARCHAR2(10);
  V_CDFILIALFATURA_IT        VARCHAR2(4);
  V_NRGRUPOFATURA_IT         NUMBER;
  V_NRPARCFATURA_IT          NUMBER;
  V_IDFATURACONTR_IT         CHAR(1);
  V_CDMODPGTO_IT             VARCHAR2(5);
  V_IDBLOQVRITMEDIC_IT       VARCHAR2(1);
  V_QTPARCELASFATU_IT        NUMBER;
  V_NRDIAVENCPARCELASFATU_IT NUMBER;

  /* == PARAMETROS DE FATURAMENTO (NOVO) == */

  V_NRPARAMFATCON             VARCHAR2(30);
  V_NRCAPAPARAMFATCON         VARCHAR2(30);
  V_NRGRUPOFATURA_FNOVO       NUMBER;
  V_CDPRODFATURA_FNOVO        VARCHAR2(10);
  V_CDFILIALFATURA_FNOVO      VARCHAR2(4);
  V_NRPARCFATURA_FNOVO        NUMBER;
  V_IDTPFATURA_FNOVO          CHAR(1);
  V_QTPARCELASFATU_FNOVO      NUMBER;
  V_IDTPCALCPARCINC_FNOVO     CHAR(1);
  V_IDGERARATEIO_FNOVO        CHAR(1);
  V_IDAPURAAPONTAMENTO_FNOVO  CHAR(1);

  V_NRPARAMFATITCON          VARCHAR2(30);
  V_NRGRUPOFATURA_ITFATNOVO  NUMBER;
  V_CDPRODFATURA_ITFATNOVO   VARCHAR2(10);
  V_CDFILIALFATURA_ITFATNOVO VARCHAR2(4);
  V_NRPARCFATURA_ITFATNOVO   NUMBER;
  V_IDTPFATURA_ITFATNOVO     CHAR(1);
  V_QTPARCELASFATU_ITFATNOVO NUMBER;

  V_ITPROPOSTA  NUMBER;
  V_ITESCOPO  NUMBER;
  V_NRITESCOPOPROPOSTA_FAT NUMBER;

BEGIN
  V_NRCONTRATOFCT := 1;
  FOR C_ORCAMENTO IN (
      SELECT NVL(O.NRTIPOORCAMENTO, ESC.NRTIPOORCAMENTO) AS NRTIPOORCAMENTO,
             O.NRSEQORCAMENTO,
             NVL(O.CDFILIAL, ESC.CDFILIAL) AS CDFILIAL,
             O.NRORCAMENTO,
             O.NRVERSAOORCAMENTO,
             TP.NRSEQMODCONTRATO,
             O.NRPARCNEGOCIO,
             O.QTDIASCONTRATO,
             O.DTREFORCAMENTO,
             ORCAMOD.IDUTILIZAHIERSERV,
             O.CDOPERRESPONSAVEL
        FROM FCT_ORCAMENTO O
       INNER JOIN FCT_RELACESCOPOPROPOSTA ESC
          ON O.NRSEQORCAMENTO = ESC.NRSEQORCAMENTO
         AND O.NRORG          = ESC.NRORG
        LEFT JOIN FCT_TIPOORCAMENTO TP
          ON NVL(O.NRTIPOORCAMENTO, ESC.NRTIPOORCAMENTO) = TP.NRTIPOORCAMENTO
         AND O.NRORG                                     = TP.NRORG
        LEFT JOIN FCT_ORCAMENTOMODELO ORCAMOD
          ON O.NRORCAMENTOMODELO = ORCAMOD.NRORCAMENTOMODELO
         AND O.NRORG             = ORCAMOD.NRORG
       WHERE O.NRORG           = P_NRORG
         AND O.NRSEQORCAMENTO  = P_NRSEQORCAMENTO
         AND TP.IDGERACONTRATO = 'S') LOOP

      V_NRSEQMODCONTRATO := C_ORCAMENTO.NRSEQMODCONTRATO;

      IF V_NRSEQMODCONTRATO IS NULL THEN
          BEGIN
            SELECT NRSEQMODCONTRATO
              INTO V_NRSEQMODCONTRATO
              FROM FCT_PARAMETROGERAL;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_NRSEQMODCONTRATO := NULL;
          END;
      END IF;

        FOR C_MODELOCONTRATO IN (
          SELECT MC.NRDIAVENPARCFAT, DECODE(MC.NRDIASVIGCONT, NULL, 0, MC.NRDIASVIGCONT) AS NRDIASVIGCONT,
                 MC.DTPADREAJCONT, MC.NRDIASPRORGCONT, MC.QTPOSTOTRABCONT, MC.VRPERCMULTQBCONT,
                 MC.CDTPINDFINCON, MC.IDPERVALFINCON, MC.CDINDFINCONT, MC.IDQTDIASCOMPCON,
                 MC.IDTPCOMPETCONT, MC.IDTPFATUINCOMP,MC.IDTPDTEMISSNF,MC.IDTPDTVENC,
                 MC.NRQTDIASCOMPCON, MC.NRDIACOMPETCONT, MC.NRDIADTEMISSNF, MC.IDSOMAFATUCONT,
                 MC.IDFATURACONTR, MC.CDMODPGTO, MC.QTPARCELASFATU, MC.NRDIAVENCPARCELASFATU, MC.DTINICFATCONTR,
                 NVL(MC.IDSITUACAOCONTRATO, 'P') AS IDSITUACAOCONTRATO, PARAM.NRGRUPOFATURA,
                 PARAM.IDSOMAFATUCONT AS IDSOMAFATUCONTFATU, PARAM.IDSOMAITGRUPFAT, PARAM.IDGERANFPARC,
                 PARAM.IDBLOQVRMEDIC, PARAM.IDGERARATEIO, PARAM.IDAPURAAPONTAMENTO
            FROM FCT_MODELOCONTRATO MC
            LEFT JOIN FCT_PARAMFATMODCONT PARAM
              ON MC.NRSEQMODCONTRA = PARAM.NRSEQMODCONTRA
             AND MC.NRORG = PARAM.NRORG
           WHERE MC.NRSEQMODCONTRA = V_NRSEQMODCONTRATO
             AND MC.NRORG          = P_NRORG) LOOP

          IF C_ORCAMENTO.NRTIPOORCAMENTO IS NOT NULL THEN

            BEGIN
              SELECT CDPRODFATURA, CDFILIALFATURA, NRGRUPOFATURA, NRPARCFATURA, IDFATURACONTR, CDMODPGTO,
                     IDQTDIASCOMPCON, NRQTDIASCOMPCON, IDTPCOMPETCONT,NRDIACOMPETCONT, IDTPFATUINCOMP,
                     IDTPDTEMISSNF, NRDIADTEMISSNF, IDTPDTVENC, NRDIATPDTVENC,IDSOMAFATUCONT, IDSOMAITGRUPFAT,
                     IDGERANFPARC, IDBLOQVRMEDIC, IDGERARATEIO, QTPARCELASFATU, NRDIAVENCPARCELASFATU, IDAPURAAPONTAMENTO
                 INTO
                     V_CDPRODFATURA, V_CDFILIALFATURA, V_NRGRUPOFATURA, V_NRPARCFATURA, V_IDFATURACONTR, V_CDMODPGTO,
                     V_IDQTDIASCOMPCON, V_NRQTDIASCOMPCON, V_IDTPCOMPETCONT, V_NRDIACOMPETCONT, V_IDTPFATUINCOMP,
                     V_IDTPDTEMISSNF, V_NRDIADTEMISSNF, V_IDTPDTVENC, V_NRDIATPDTVENC, V_IDSOMAFATUCONT, V_IDSOMAITGRUPFAT,
                     V_IDGERANFPARC, V_IDBLOQVRMEDIC, V_IDGERARATEIO, V_QTPARCELASFATU, V_NRDIAVENCPARCELASFATU, V_IDAPURAAPONTAMENTO
                FROM FCT_PARAMFATESCOPO
               WHERE NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
                 AND NRORG = P_NRORG;
            EXCEPTION
              WHEN NO_DATA_FOUND THEN BEGIN
                V_CDPRODFATURA          :=  NULL;
                V_CDFILIALFATURA        :=  NULL;
                V_NRGRUPOFATURA         :=  C_MODELOCONTRATO.NRGRUPOFATURA;
                V_NRPARCFATURA          :=  NULL;
                V_IDFATURACONTR         :=  C_MODELOCONTRATO.IDFATURACONTR;
                V_CDMODPGTO             :=  C_MODELOCONTRATO.CDMODPGTO;
                V_IDQTDIASCOMPCON       :=  C_MODELOCONTRATO.IDQTDIASCOMPCON;
                V_NRQTDIASCOMPCON       :=  C_MODELOCONTRATO.NRQTDIASCOMPCON;
                V_IDTPCOMPETCONT        :=  C_MODELOCONTRATO.IDTPCOMPETCONT;
                V_NRDIACOMPETCONT       :=  C_MODELOCONTRATO.NRDIACOMPETCONT;
                V_IDTPFATUINCOMP        :=  C_MODELOCONTRATO.IDTPFATUINCOMP;
                V_IDTPDTEMISSNF         :=  C_MODELOCONTRATO.IDTPDTEMISSNF;
                V_NRDIADTEMISSNF        :=  C_MODELOCONTRATO.NRDIADTEMISSNF;
                V_IDTPDTVENC            :=  C_MODELOCONTRATO.IDTPDTVENC;
                V_NRDIATPDTVENC         :=  C_MODELOCONTRATO.NRDIAVENPARCFAT;
                V_IDSOMAFATUCONT        :=  C_MODELOCONTRATO.IDSOMAFATUCONTFATU;
                V_IDSOMAITGRUPFAT       :=  C_MODELOCONTRATO.IDSOMAITGRUPFAT;
                V_IDGERANFPARC          :=  C_MODELOCONTRATO.IDGERANFPARC;
                V_IDBLOQVRMEDIC         :=  C_MODELOCONTRATO.IDBLOQVRMEDIC;
                V_IDGERARATEIO          :=  C_MODELOCONTRATO.IDGERARATEIO;
                V_QTPARCELASFATU        :=  C_MODELOCONTRATO.QTPARCELASFATU;
                V_NRDIAVENCPARCELASFATU :=  C_MODELOCONTRATO.NRDIAVENCPARCELASFATU;
                V_IDAPURAAPONTAMENTO    :=  C_MODELOCONTRATO.IDAPURAAPONTAMENTO;
              END;
            END;
          ELSE
                V_CDPRODFATURA          :=  NULL;
                V_CDFILIALFATURA        :=  NULL;
                V_NRGRUPOFATURA         :=  C_MODELOCONTRATO.NRGRUPOFATURA;
                V_NRPARCFATURA          :=  NULL;
                V_IDFATURACONTR         :=  C_MODELOCONTRATO.IDFATURACONTR;
                V_CDMODPGTO             :=  C_MODELOCONTRATO.CDMODPGTO;
                V_IDQTDIASCOMPCON       :=  C_MODELOCONTRATO.IDQTDIASCOMPCON;
                V_NRQTDIASCOMPCON       :=  C_MODELOCONTRATO.NRQTDIASCOMPCON;
                V_IDTPCOMPETCONT        :=  C_MODELOCONTRATO.IDTPCOMPETCONT;
                V_NRDIACOMPETCONT       :=  C_MODELOCONTRATO.NRDIACOMPETCONT;
                V_IDTPFATUINCOMP        :=  C_MODELOCONTRATO.IDTPFATUINCOMP;
                V_IDTPDTEMISSNF         :=  C_MODELOCONTRATO.IDTPDTEMISSNF;
                V_NRDIADTEMISSNF        :=  C_MODELOCONTRATO.NRDIADTEMISSNF;
                V_IDTPDTVENC            :=  C_MODELOCONTRATO.IDTPDTVENC;
                V_NRDIATPDTVENC         :=  C_MODELOCONTRATO.NRDIAVENPARCFAT;
                V_IDSOMAFATUCONT        :=  C_MODELOCONTRATO.IDSOMAFATUCONTFATU;
                V_IDSOMAITGRUPFAT       :=  C_MODELOCONTRATO.IDSOMAITGRUPFAT;
                V_IDGERANFPARC          :=  C_MODELOCONTRATO.IDGERANFPARC;
                V_IDBLOQVRMEDIC         :=  C_MODELOCONTRATO.IDBLOQVRMEDIC;
                V_IDGERARATEIO          :=  C_MODELOCONTRATO.IDGERARATEIO;
                V_QTPARCELASFATU        :=  C_MODELOCONTRATO.QTPARCELASFATU;
                V_NRDIAVENCPARCELASFATU :=  C_MODELOCONTRATO.NRDIAVENCPARCELASFATU;
                V_IDAPURAAPONTAMENTO    :=  C_MODELOCONTRATO.IDAPURAAPONTAMENTO;
          END IF;

          NOVO_CODIGO_NT('FCT_CONTRATO', V_NRSEQCONTRATO,1);

          V_DTINICIOCONT := SYSDATE;

          IF C_ORCAMENTO.QTDIASCONTRATO IS NOT NULL THEN
             V_DTFINCONT    := V_DTINICIOCONT+TO_NUMBER(C_ORCAMENTO.QTDIASCONTRATO);
             V_PRAZO := C_ORCAMENTO.QTDIASCONTRATO;
          ELSE
             V_DTFINCONT    := V_DTINICIOCONT+TO_NUMBER(C_MODELOCONTRATO.NRDIASVIGCONT);
             V_PRAZO := C_MODELOCONTRATO.NRDIASVIGCONT;
          END IF;

          IF C_MODELOCONTRATO.DTPADREAJCONT IS NOT NULL THEN
             V_DTPADREAJCONT := (TO_DATE('01/'||C_MODELOCONTRATO.DTPADREAJCONT||TO_CHAR(V_DTINICIOCONT,'/YYYY')))+365;
          END IF;

          INSERT INTO FCT_CONTRATO
             (NRSEQCONTRATO,IDTPCONTRATO,CDFILIALORCA,NRVERSAOCONTRATO,NRCONTRATOFCT,NRSEQMODCONTRA,
              NRPARCNEGOCIO,DSREFERENCIACONT,DTINICIOCONTRATO,DTFIMCONTRATO,NRDIASPRAZOCONT,
              IDSITUACAOCONTRATO,NRDIAVENPARCFAT,CDTPINDFINCON,CDINDFINCONT,IDPERVALFINCON,
              DTPADREAJCONT,NRDIASPRORGCONT,QTPOSTOTRABCONT,IDORIGCONTRATO,IDQTDIASCOMPCON,
              IDTPCOMPETCONT,IDTPFATUINCOMP,IDTPDTEMISSNF,IDTPDTVENC,NRQTDIASCOMPCON,
              NRDIACOMPETCONT,NRDIADTEMISSNF, IDSOMAFATUCONT, IDFATURACONTR, CDMODPGTO, DTINICFATCONTR,
              NRORG, QTPARCELASFATU, NRDIAVENCPARCELASFATU, CDOPERRESPONSAVEL)
          VALUES
             (V_NRSEQCONTRATO, 'S', C_ORCAMENTO.CDFILIAL, 1, V_NRSEQCONTRATO, V_NRSEQMODCONTRATO,
             C_ORCAMENTO.NRPARCNEGOCIO, 'REFERENTE A ORC '||C_ORCAMENTO.NRORCAMENTO, V_DTINICIOCONT, V_DTFINCONT, V_PRAZO,
             C_MODELOCONTRATO.IDSITUACAOCONTRATO, V_NRDIATPDTVENC, C_MODELOCONTRATO.CDTPINDFINCON, C_MODELOCONTRATO.CDINDFINCONT,
             C_MODELOCONTRATO.IDPERVALFINCON, V_DTPADREAJCONT, C_MODELOCONTRATO.NRDIASPRORGCONT, C_MODELOCONTRATO.QTPOSTOTRABCONT, 'G',
             V_IDQTDIASCOMPCON, V_IDTPCOMPETCONT, V_IDTPFATUINCOMP,
             V_IDTPDTEMISSNF, V_IDTPDTVENC, V_NRQTDIASCOMPCON,
             V_NRDIACOMPETCONT, V_NRDIADTEMISSNF, V_IDSOMAFATUCONT,
             V_IDFATURACONTR, V_CDMODPGTO, C_MODELOCONTRATO.DTINICFATCONTR,
             P_NRORG, V_QTPARCELASFATU, V_NRDIAVENCPARCELASFATU, C_ORCAMENTO.CDOPERRESPONSAVEL);

          NOVO_CODIGO_NT('NRSEQFATUCONTR', V_NRSEQFATUCONTR,1);

          INSERT INTO FCT_PARAMFATCONT (NRSEQFATUCONTR, NRSEQCONTRATO, CDPRODFATURA, CDFILIALFATURA,
                                        NRPARCFATURA, NRGRUPOFATURA, IDSOMAITGRUPFAT, IDSOMAFATUCONT,
                                        IDGERANFPARC, IDBLOQVRMEDIC, IDGERARATEIO, IDAPURAAPONTAMENTO, NRORG)
                           VALUES(V_NRSEQFATUCONTR, V_NRSEQCONTRATO, V_CDPRODFATURA, V_CDFILIALFATURA,
                                  V_NRPARCFATURA, V_NRGRUPOFATURA, V_IDSOMAITGRUPFAT, V_IDSOMAFATUCONT,
                                  V_IDGERANFPARC, V_IDBLOQVRMEDIC, V_IDGERARATEIO, V_IDAPURAAPONTAMENTO, P_NRORG);

          CRIA_MNEMONICO(P_NRORG,'C',V_NRSEQCONTRATO,V_NRCONTRATOFCT);

          UPDATE FCT_CONTRATO
             SET NRCONTRATOFCT = V_NRCONTRATOFCT
           WHERE NRORG         = P_NRORG
             AND NRSEQCONTRATO = V_NRSEQCONTRATO;


         /* Parãmetros de Faturamento novo */

          FOR C_PARAMFATNOVO IN (SELECT NRCAPAPARAMFATMODCON, NRSEQMODCONTRA, NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA, NRPARCFATURA,
                                     IDTPFATURA, QTPARCELASFATU, IDTPCALCPARCINC, IDGERARATEIO, IDAPURAAPONTAMENTO, IDATIVO, NRORG
                                FROM FCT_CAPAPARAMFATMODCON
                               WHERE NRSEQMODCONTRA = V_NRSEQMODCONTRATO
                                 AND NRORG = P_NRORG) LOOP

            IF C_ORCAMENTO.NRTIPOORCAMENTO IS NOT NULL THEN

                BEGIN
                    SELECT NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA, NRPARCFATURA, IDTPFATURA,
                           QTPARCELASFATU, IDTPCALCPARCINC, IDGERARATEIO, IDAPURAAPONTAMENTO
                      INTO V_NRGRUPOFATURA_FNOVO, V_CDPRODFATURA_FNOVO, V_CDFILIALFATURA_FNOVO, V_NRPARCFATURA_FNOVO, V_IDTPFATURA_FNOVO,
                           V_QTPARCELASFATU_FNOVO, V_IDTPCALCPARCINC_FNOVO, V_IDGERARATEIO_FNOVO, V_IDAPURAAPONTAMENTO_FNOVO
                      FROM FCT_CAPAPARAMFATESC
                     WHERE NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
                       AND NRORG = P_NRORG;
                 EXCEPTION
                    WHEN NO_DATA_FOUND THEN BEGIN
                        V_NRGRUPOFATURA_FNOVO      :=  C_PARAMFATNOVO.NRGRUPOFATURA;
                        V_CDPRODFATURA_FNOVO       :=  C_PARAMFATNOVO.CDPRODFATURA;
                        V_CDFILIALFATURA_FNOVO     :=  C_PARAMFATNOVO.CDFILIALFATURA;
                        V_NRPARCFATURA_FNOVO       :=  C_PARAMFATNOVO.NRPARCFATURA;
                        V_IDTPFATURA_FNOVO         :=  C_PARAMFATNOVO.IDTPFATURA;
                        V_QTPARCELASFATU_FNOVO     :=  C_PARAMFATNOVO.QTPARCELASFATU;
                        V_IDTPCALCPARCINC_FNOVO    :=  C_PARAMFATNOVO.IDTPCALCPARCINC;
                        V_IDGERARATEIO_FNOVO       :=  C_PARAMFATNOVO.IDGERARATEIO;
                        V_IDAPURAAPONTAMENTO_FNOVO :=  C_PARAMFATNOVO.IDAPURAAPONTAMENTO;
                    END;
                END;

                FOR C_PARC_ESC IN (SELECT NRPARAMFATESC, NRTIPOORCAMENTO, NRDIACOMPETINI, NRDIACOMPETFIN, IDMESCOMPETINI, IDMESCOMPETFIN,
                                          QTDIASAPURACAO, IDTPCALCVENC, NRDIACALCVENC, IDMESCALCVENC, QTDIASFATUVENC, IDATIVO, NRORG
                                     FROM FCT_PARAMFATESC
                                    WHERE NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
                                      AND NRORG = P_NRORG) LOOP

                    NOVO_CODIGO_NT('FCT_PARAMFATCON', V_NRPARAMFATCON,1);

                    INSERT INTO FCT_PARAMFATCON (NRPARAMFATCON, NRSEQCONTRATO, NRDIACOMPETINI, NRDIACOMPETFIN, IDMESCOMPETINI, IDMESCOMPETFIN,
                                                 QTDIASAPURACAO, IDTPCALCVENC, NRDIACALCVENC, IDMESCALCVENC, QTDIASFATUVENC, IDATIVO,
                                                 NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                           VALUES (V_NRPARAMFATCON, V_NRSEQCONTRATO, C_PARC_ESC.NRDIACOMPETINI, C_PARC_ESC.NRDIACOMPETFIN, C_PARC_ESC.IDMESCOMPETINI, C_PARC_ESC.IDMESCOMPETFIN,
                                   C_PARC_ESC.QTDIASAPURACAO, C_PARC_ESC.IDTPCALCVENC, C_PARC_ESC.NRDIACALCVENC, C_PARC_ESC.IDMESCALCVENC, C_PARC_ESC.QTDIASFATUVENC, 'S',
                                   P_NRORG, SYSDATE, P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

                END LOOP;
            ELSE
                V_NRGRUPOFATURA_FNOVO      :=  C_PARAMFATNOVO.NRGRUPOFATURA;
                V_CDPRODFATURA_FNOVO       :=  C_PARAMFATNOVO.CDPRODFATURA;
                V_CDFILIALFATURA_FNOVO     :=  C_PARAMFATNOVO.CDFILIALFATURA;
                V_NRPARCFATURA_FNOVO       :=  C_PARAMFATNOVO.NRPARCFATURA;
                V_IDTPFATURA_FNOVO         :=  C_PARAMFATNOVO.IDTPFATURA;
                V_QTPARCELASFATU_FNOVO     :=  C_PARAMFATNOVO.QTPARCELASFATU;
                V_IDTPCALCPARCINC_FNOVO    :=  C_PARAMFATNOVO.IDTPCALCPARCINC;
                V_IDGERARATEIO_FNOVO       :=  C_PARAMFATNOVO.IDGERARATEIO;
                V_IDAPURAAPONTAMENTO_FNOVO :=  C_PARAMFATNOVO.IDAPURAAPONTAMENTO;

                FOR C_PARC_MODC IN (SELECT NRPARAMFATMODCON, NRSEQMODCONTRA, NRDIACOMPETINI, NRDIACOMPETFIN, IDMESCOMPETINI, IDMESCOMPETFIN,
                                           QTDIASAPURACAO, IDTPCALCVENC, NRDIACALCVENC, IDMESCALCVENC, QTDIASFATUVENC, IDATIVO, NRORG
                                      FROM FCT_PARAMFATMODCON
                                     WHERE NRSEQMODCONTRA = C_PARAMFATNOVO.NRSEQMODCONTRA
                                       AND NRORG = P_NRORG) LOOP

                        NOVO_CODIGO_NT('FCT_PARAMFATCON', V_NRPARAMFATCON,1);

                        INSERT INTO FCT_PARAMFATCON (NRPARAMFATCON, NRSEQCONTRATO, NRDIACOMPETINI, NRDIACOMPETFIN, IDMESCOMPETINI, IDMESCOMPETFIN,
                                                     QTDIASAPURACAO, IDTPCALCVENC, NRDIACALCVENC, IDMESCALCVENC, QTDIASFATUVENC, IDATIVO,
                                                     NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                               VALUES (V_NRPARAMFATCON, V_NRSEQCONTRATO, C_PARC_MODC.NRDIACOMPETINI, C_PARC_MODC.NRDIACOMPETFIN, C_PARC_MODC.IDMESCOMPETINI, C_PARC_MODC.IDMESCOMPETFIN,
                                       C_PARC_MODC.QTDIASAPURACAO, C_PARC_MODC.IDTPCALCVENC, C_PARC_MODC.NRDIACALCVENC, C_PARC_MODC.IDMESCALCVENC, C_PARC_MODC.QTDIASFATUVENC, 'S',
                                       P_NRORG, SYSDATE, P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

                END LOOP;
            END IF;
            NOVO_CODIGO_NT('FCT_CAPAPARAMFATCON', V_NRCAPAPARAMFATCON,1);

            INSERT INTO FCT_CAPAPARAMFATCON(NRCAPAPARAMFATCON, NRSEQCONTRATO, NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA, NRPARCFATURA, IDTPFATURA,
                                QTPARCELASFATU, IDTPCALCPARCINC, IDGERARATEIO, IDAPURAAPONTAMENTO, IDATIVO, NRORG, DTINCLUSAO,
                                NRORGINCLUSAO, CDOPERINCLUSAO)
                   VALUES(V_NRCAPAPARAMFATCON, V_NRSEQCONTRATO, V_NRGRUPOFATURA_FNOVO, V_CDPRODFATURA_FNOVO, V_CDFILIALFATURA_FNOVO, V_NRPARCFATURA_FNOVO, V_IDTPFATURA_FNOVO,
                          V_QTPARCELASFATU_FNOVO, V_IDTPCALCPARCINC_FNOVO, V_IDGERARATEIO_FNOVO, V_IDAPURAAPONTAMENTO_FNOVO, 'S', P_NRORG, SYSDATE,
                          P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

          END LOOP;

          FOR C_LOCAL IN (SELECT NRESTRUTURAM
                            FROM FCT_RELACESTRUTURAPROP
                           WHERE NRSEQORCAMENTO   = P_NRSEQORCAMENTO
                             AND NRORG            = P_NRORG
                             AND IDRELACESTRUTURA = 'PROPOSTA')
        LOOP

            NOVO_CODIGO_NT('NRRELACESTRUTCONT', V_NRRELACESTRUTCONT, 1);

            INSERT INTO FCT_RELACESTRUTURACONT (
                NRRELACESTRUTCONT,  NRESTRUTURAM,      NRSEQCONTRATO,
                NRITEMOCONTRATO,    IDRELACESTRUTURA,  VRITEMRATEIO,
                NRORG,              VRPERCRATEIO,      DTINCLUSAO
            )
            VALUES (
                V_NRRELACESTRUTCONT,  C_LOCAL.NRESTRUTURAM,  V_NRSEQCONTRATO,
                NULL,                 'CONTRATO',            NULL,
                P_NRORG,              NULL,                  SYSDATE
            );

        END LOOP;

          FOR C_ITEM IN (
              SELECT IT.CDPRECBASESERV, IT.CDSERVORCA, IT.CDPRODUTO, IT.SGUNIDADE,
                     IT.CDTPMEDIDASERV, IT.QTMEDIDAORCA, IT.IDFATURAORCA, IT.CDMODPGTO,
                     IT.NRGRUPOFATURA, IT.IDUNIDTEMPOLOCACAO, IT.QTITEMORCAMENTO,
                     IT.QTTEMPOLOCACAO,IT.NMITEMORCAMENTO, VRUNITITEMORCA, VRTOTALITEMORCA,
                     IT.DTINICFATORC, IT.IDMULTMEDVRTOT, IT.IDADICITEMORC, IT.IDADICCOBRITEMORC, IT.NRITEMORCAMENTO,
                     IT.QTPARCELASFATU, IT.NRDIAVENCPARCELASFATU, IT.NRTIPOORCAMENTO,
                     IT.VRPERCDESCORCA, IT.IDTPDESCORCA
                FROM FCT_ITEMORCAMENTO IT
               WHERE IT.NRORG          = P_NRORG
                 AND IT.NRSEQORCAMENTO = P_NRSEQORCAMENTO
                 and IT.IDELEMENTO IS NULL
                 AND (IT.NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO OR IT.NRTIPOORCAMENTO IS NULL)) LOOP

              IF C_ITEM.NRTIPOORCAMENTO IS NOT NULL THEN
                BEGIN
                  SELECT FCT_PARAMFATSRVESCO.CDPRODFATURA, FCT_PARAMFATSRVESCO.CDFILIALFATURA,  FCT_PARAMFATSRVESCO.NRGRUPOFATURA,
                         FCT_PARAMFATSRVESCO.NRPARCFATURA, FCT_PARAMFATSRVESCO.IDFATURACONTR, FCT_PARAMFATSRVESCO.CDMODPGTO,
                         FCT_PARAMFATSRVESCO.IDBLOQVRITMEDIC, FCT_PARAMFATSRVESCO.QTPARCELASFATU, FCT_PARAMFATSRVESCO.NRDIAVENCPARCELASFATU
                    INTO V_CDPRODFATURA_IT, V_CDFILIALFATURA_IT, V_NRGRUPOFATURA_IT,
                         V_NRPARCFATURA_IT, V_IDFATURACONTR_IT, V_CDMODPGTO_IT,
                         V_IDBLOQVRITMEDIC_IT, V_QTPARCELASFATU_IT, V_NRDIAVENCPARCELASFATU_IT
                    FROM FCT_PARAMFATSRVESCO
                   LEFT JOIN FCT_ITESCOPOPROPOSTA
                     ON FCT_PARAMFATSRVESCO.NRITESCOPOPROPOSTA = FCT_ITESCOPOPROPOSTA.NRITESCOPOPROPOSTA
                    AND FCT_PARAMFATSRVESCO.NRTIPOORCAMENTO = FCT_ITESCOPOPROPOSTA.NRTIPOORCAMENTO
                    AND FCT_PARAMFATSRVESCO.NRORG = FCT_ITESCOPOPROPOSTA.NRORG
                  WHERE FCT_PARAMFATSRVESCO.NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
                    AND FCT_ITESCOPOPROPOSTA.CDSERVORCA = C_ITEM.CDSERVORCA
                    AND FCT_PARAMFATSRVESCO.NRORG = P_NRORG;
                EXCEPTION
                  WHEN NO_DATA_FOUND THEN BEGIN
                      V_CDPRODFATURA_IT :=  NULL;
                      V_CDFILIALFATURA_IT := NULL;
                      V_NRGRUPOFATURA_IT :=  C_ITEM.NRGRUPOFATURA;
                      V_NRPARCFATURA_IT :=  NULL;
                      V_IDFATURACONTR_IT := C_ITEM.IDFATURAORCA;
                      V_CDMODPGTO_IT := C_ITEM.CDMODPGTO;
                      V_IDBLOQVRITMEDIC_IT := 'N';
                      V_QTPARCELASFATU_IT := C_ITEM.CDMODPGTO;
                      V_NRDIAVENCPARCELASFATU_IT :=  C_ITEM.CDMODPGTO;
                  END;
                END;
              ELSE
                V_CDPRODFATURA_IT := NULL;
                V_CDFILIALFATURA_IT := NULL;
                V_NRGRUPOFATURA_IT := C_ITEM.NRGRUPOFATURA;
                V_NRPARCFATURA_IT := NULL;
                V_IDFATURACONTR_IT := C_ITEM.IDFATURAORCA;
                V_CDMODPGTO_IT := C_ITEM.CDMODPGTO;
                V_IDBLOQVRITMEDIC_IT := 'N';
                V_QTPARCELASFATU_IT := C_ITEM.CDMODPGTO;
                V_NRDIAVENCPARCELASFATU_IT :=  C_ITEM.CDMODPGTO;
              END IF;

             IF V_IDFATURACONTR_IT = 'O' THEN
                 V_QTPARCELASFATU_IT := NULL;
                 V_NRDIAVENCPARCELASFATU_IT := NULL;

              END IF;

              IF V_IDFATURACONTR_IT = 'P' THEN
                 V_CDMODPGTO_IT := NULL;
              END IF;

               IF ((V_IDFATURACONTR_IT = 'A') OR (V_IDFATURACONTR_IT = 'X')) THEN
                 V_QTPARCELASFATU_IT := NULL;
                 V_NRDIAVENCPARCELASFATU_IT := NULL;
                 V_CDMODPGTO_IT := NULL;
              END IF;

              NOVO_CODIGO_NT('FCT_ITEMCONTRATO', V_NRITSEQCONTRATO, 1);

              INSERT INTO FCT_ITEMCONTRATO
                  (NRORG,NRITEMOCONTRATO, NRSEQCONTRATO,
                   CDPRODUTO,CDSERVORCA,SGUNIDADE,NMITEMCONTRATO,
                   QTITEMCONTRATO,CDTPMEDIDASERV,QTMEDIDACONTR, IDFATURACONTR,
                   CDMODPGTO,NRGRUPOFATURA,IDUNIDTEMPOSERV,QTTEMPOSERV,IDITEMATIVO,
                   VRUNITITEMCONT,VRTOTITEMCONT, DTINICFATCONTR, IDMULTMEDVRTOT,
                   IDADICITEMCONT, IDADICCOBRCONT,IDFATURAITEM,
                   QTPARCELASFATU, NRDIAVENCPARCELASFATU,
                   VRDESCONTO, IDTPDESCONTO)
              VALUES
                (P_NRORG, V_NRITSEQCONTRATO, V_NRSEQCONTRATO,
                 C_ITEM.CDPRODUTO, C_ITEM.CDSERVORCA, C_ITEM.SGUNIDADE, C_ITEM.NMITEMORCAMENTO,
                 C_ITEM.QTITEMORCAMENTO, C_ITEM.CDTPMEDIDASERV, C_ITEM.QTMEDIDAORCA, V_IDFATURACONTR_IT,
                 V_CDMODPGTO_IT, V_NRGRUPOFATURA_IT, C_ITEM.IDUNIDTEMPOLOCACAO, C_ITEM.QTTEMPOLOCACAO, 'S',
                 C_ITEM.VRUNITITEMORCA, C_ITEM.VRTOTALITEMORCA, C_ITEM.DTINICFATORC, C_ITEM.IDMULTMEDVRTOT,
                 C_ITEM.IDADICITEMORC, C_ITEM.IDADICCOBRITEMORC, NVL(V_SOMAVALOR,'SIM'),
                 C_ITEM.QTPARCELASFATU, C_ITEM.NRDIAVENCPARCELASFATU,
                 C_ITEM.VRPERCDESCORCA, DECODE(C_ITEM.IDTPDESCORCA, 'N', 'S', C_ITEM.IDTPDESCORCA));

                BEGIN
                    SELECT NRFORMPRECOSERVICO
                    INTO V_NRFORMPRECOSERVICO
                    FROM FCT_RELACFORMACAOPROP FORMPROP
                    WHERE FORMPROP.NRORG          = P_NRORG
                     AND FORMPROP.NRSEQORCAMENTO  = P_NRSEQORCAMENTO
                     AND FORMPROP.NRITEMORCAMENTO = C_ITEM.NRITEMORCAMENTO;
               EXCEPTION
                    WHEN NO_DATA_FOUND THEN
                        BEGIN
                            V_NRFORMPRECOSERVICO := NULL;
                        END;
               END;

                IF V_NRFORMPRECOSERVICO IS NOT NULL THEN
                    NOVO_CODIGO_NT('FCT_RELACFORMACAOCONT', V_NRRELACFORMACAOCONT, 1, P_NRORG);

                    INSERT INTO FCT_RELACFORMACAOCONT
                        (NRRELACFORMACAOCONT, NRFORMPRECOSERVICO, NRSEQCONTRATO,
                            NRITEMOCONTRATO, NRORG, IDATIVO, DTINCLUSAO, DTULTATU,
                            NRORGINCLUSAO, NRORGULTATU, CDOPERULTATU,
                            NRREAJUSCONTFORMPREC)
                    VALUES (V_NRRELACFORMACAOCONT, V_NRFORMPRECOSERVICO, V_NRSEQCONTRATO,
                            V_NRITSEQCONTRATO, P_NRORG, 'S', SYSDATE, NULL,
                            P_NRORG, NULL, NULL, NULL);
                END IF;

                FOR C_RATEIO IN (SELECT NRESTRUTURAM, VRITEMRATEIO, VRPERCRATEIO
                                   FROM FCT_RELACESTRUTURAPROP
                                  WHERE NRSEQORCAMENTO   = P_NRSEQORCAMENTO
                                    AND NRORG            = P_NRORG
                                    AND NRITEMORCAMENTO  = C_ITEM.NRITEMORCAMENTO
                                    AND IDRELACESTRUTURA = 'RATEIO')
                LOOP

                    NOVO_CODIGO_NT('NRRELACESTRUTCONT', V_NRRELACESTRUTCONT,1);

                    INSERT INTO FCT_RELACESTRUTURACONT (
                        NRRELACESTRUTCONT,  NRESTRUTURAM,      NRSEQCONTRATO,
                        NRITEMOCONTRATO,    IDRELACESTRUTURA,  VRITEMRATEIO,
                        NRORG,              VRPERCRATEIO,      DTINCLUSAO
                    )
                    VALUES (
                        V_NRRELACESTRUTCONT,  C_RATEIO.NRESTRUTURAM,  V_NRSEQCONTRATO,
                        V_NRITSEQCONTRATO,    'RATEIO',               C_RATEIO.VRITEMRATEIO,
                        P_NRORG,              C_RATEIO.VRPERCRATEIO,  SYSDATE
                    );

                END LOOP;

                 NOVO_CODIGO_NT('NRSEQFATUITCONT', V_NRSEQFATUITCONT,1);

                 INSERT INTO FCT_PARAMFATITCONT (NRSEQFATUITCONT, NRITEMOCONTRATO, NRSEQCONTRATO, CDPRODFATURA,
                              CDFILIALFATURA, NRGRUPOFATURA, NRPARCFATURA, IDBLOQVRITMEDIC,
                              NRORG, IDATIVO, DTINCLUSAO)
                           VALUES(V_NRSEQFATUITCONT, V_NRITSEQCONTRATO, V_NRSEQCONTRATO, V_CDPRODFATURA_IT,
                                  V_CDFILIALFATURA_IT, V_NRGRUPOFATURA_IT, V_NRPARCFATURA_IT, V_IDBLOQVRITMEDIC_IT,
                                  P_NRORG, 'S', SYSDATE);

                 /* Faturamento Novo */

                   SELECT COUNT (*) ITPROPOSTA
                     INTO V_ITPROPOSTA
                     FROM FCT_PARAMFATITPROP
                    WHERE NRITEMORCAMENTO = C_ITEM.NRITEMORCAMENTO
                      AND NRSEQORCAMENTO = P_NRSEQORCAMENTO
                      AND NRORG = P_NRORG;

                   IF (V_ITPROPOSTA > 0) THEN

                      SELECT NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA,
                             NRPARCFATURA, IDTPFATURA, QTPARCELASFATU
                        INTO V_NRGRUPOFATURA_ITFATNOVO, V_CDPRODFATURA_ITFATNOVO, V_CDFILIALFATURA_ITFATNOVO,
                             V_NRPARCFATURA_ITFATNOVO, V_IDTPFATURA_ITFATNOVO, V_QTPARCELASFATU_ITFATNOVO
                        FROM FCT_PARAMFATITPROP
                       WHERE NRITEMORCAMENTO = C_ITEM.NRITEMORCAMENTO
                         AND NRSEQORCAMENTO = P_NRSEQORCAMENTO
                         AND NRORG = P_NRORG;

                        NOVO_CODIGO_NT('FCT_PARAMFATITCON', V_NRPARAMFATITCON,1);

                        INSERT INTO FCT_PARAMFATITCON (NRPARAMFATITCON, NRITEMOCONTRATO, NRSEQCONTRATO, NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA, NRPARCFATURA,
                                                       IDTPFATURA, QTPARCELASFATU, IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                               VALUES (V_NRPARAMFATITCON, V_NRITSEQCONTRATO, V_NRSEQCONTRATO, V_NRGRUPOFATURA_ITFATNOVO, V_CDPRODFATURA_ITFATNOVO, V_CDFILIALFATURA_ITFATNOVO, V_NRPARCFATURA_ITFATNOVO,
                                       V_IDTPFATURA_ITFATNOVO, V_QTPARCELASFATU_ITFATNOVO, 'S', P_NRORG, SYSDATE, P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

                   ELSE

                       BEGIN
                           SELECT FCT_ITESCOPOPROPOSTA.NRITESCOPOPROPOSTA
                            INTO  V_NRITESCOPOPROPOSTA_FAT
                            FROM FCT_PARAMFATITESC
                            JOIN FCT_ITESCOPOPROPOSTA
                              ON FCT_ITESCOPOPROPOSTA.NRITESCOPOPROPOSTA = FCT_PARAMFATITESC.NRITESCOPOPROPOSTA
                             AND FCT_ITESCOPOPROPOSTA.NRORG = FCT_PARAMFATITESC.NRORG
                           WHERE FCT_ITESCOPOPROPOSTA.NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
                             AND FCT_ITESCOPOPROPOSTA.CDSERVORCA = C_ITEM.CDSERVORCA
                             AND FCT_ITESCOPOPROPOSTA.NRORG = P_NRORG;
                        EXCEPTION
                            WHEN NO_DATA_FOUND THEN BEGIN
                                V_NRITESCOPOPROPOSTA_FAT := NULL;
                            END;
                       END;

                       IF (V_NRITESCOPOPROPOSTA_FAT IS NOT NULL) THEN

                           SELECT NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA,
                                  NRPARCFATURA, IDTPFATURA, QTPARCELASFATU
                             INTO V_NRGRUPOFATURA_ITFATNOVO, V_CDPRODFATURA_ITFATNOVO, V_CDFILIALFATURA_ITFATNOVO,
                                  V_NRPARCFATURA_ITFATNOVO, V_IDTPFATURA_ITFATNOVO, V_QTPARCELASFATU_ITFATNOVO
                             FROM FCT_PARAMFATITESC
                            WHERE NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
                              AND NRITESCOPOPROPOSTA = V_NRITESCOPOPROPOSTA_FAT
                              AND NRORG = P_NRORG;

                              NOVO_CODIGO_NT('FCT_PARAMFATITCON', V_NRPARAMFATITCON,1);

                              INSERT INTO FCT_PARAMFATITCON (NRPARAMFATITCON, NRITEMOCONTRATO, NRSEQCONTRATO, NRGRUPOFATURA, CDPRODFATURA, CDFILIALFATURA, NRPARCFATURA,
                                                             IDTPFATURA, QTPARCELASFATU, IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                                     VALUES (V_NRPARAMFATITCON, V_NRITSEQCONTRATO, V_NRSEQCONTRATO, V_NRGRUPOFATURA_ITFATNOVO, V_CDPRODFATURA_ITFATNOVO, V_CDFILIALFATURA_ITFATNOVO, V_NRPARCFATURA_ITFATNOVO,
                                               V_IDTPFATURA_ITFATNOVO, V_QTPARCELASFATU_ITFATNOVO, 'S', P_NRORG, SYSDATE, P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

                       END IF;
                   END IF;
          END LOOP;

          FOR C_REAJUSTE IN (SELECT NRSEQMODREAJUS, NMMODREAJUSCONTR, IDTPREAJUSTE,
                                   IDTPMESREAJUSTE, NRQTDREAJUSTE, NRORG, IDATIVO
                              FROM FCT_MODREAJUSTCONTR
                             WHERE NRSEQMODCONTRA = V_NRSEQMODCONTRATO) LOOP
               NOVO_CODIGO_NT('NRSEQREAJUS', V_NRSEQREAJUSTE,1);

                INSERT INTO FCT_REAJUSTCONTR
                      (NRSEQCONTRATO,NRSEQREAJUS, NMREAJUSCONTR,
                       IDTPREAJUSTE, IDTPMESREAJUSTE,NRQTDREAJUSTE,
                       IDATIVO, DTINCLUSAO)
                    VALUES
                      (V_NRSEQCONTRATO,V_NRSEQREAJUSTE, C_REAJUSTE.NMMODREAJUSCONTR,
                       C_REAJUSTE.IDTPREAJUSTE, C_REAJUSTE.IDTPMESREAJUSTE, C_REAJUSTE.NRQTDREAJUSTE,
                       'S',SYSDATE);


             FOR C_INDICE IN(SELECT CDTPINDICE, IDPERVALOR, CDINDICE, VRPERCINDCONTR, NRORG
                           FROM FCT_MODINDCONTR
                          WHERE NRSEQMODREAJUS = C_REAJUSTE.NRSEQMODREAJUS )LOOP
                NOVO_CODIGO_NT('NRSEQINDCONTR', V_NRSEQINDCONTR,1);

                INSERT INTO FCT_INDICECONTR
                      (NRSEQINDCONTR,NRSEQREAJUS, NRSEQCONTRATO,
                       CDTPINDICE, IDPERVALOR, CDINDICE, VRPERCINDCONTR,
                       IDATIVO, DTINCLUSAO)
                    VALUES
                      (V_NRSEQINDCONTR,V_NRSEQREAJUSTE, V_NRSEQCONTRATO,
                       C_INDICE.CDTPINDICE, C_INDICE.IDPERVALOR, C_INDICE.CDINDICE,
                       C_INDICE.VRPERCINDCONTR, 'S',SYSDATE);

             END LOOP;
          END LOOP;

         FOR C_CONTRATODOC IN (
            SELECT FCT_MODELODOC.NRSEQMODDOCFCT,
                   FCT_MODELODOC.NRMODELODOCFCT,
                   FCT_MODELODOC.IDIDIOMA,
                   FCT_MODELODOC.TXMODELODOCORCA,
                   FCT_MODELODOC.NRORG,
                   FCT_MODELODOC.NMARQUIVO,
                   FCT_MODELODOC.DSCAMINHOARQ,
                   FCT_MODELODOC.DSTIPO,
                   FCT_MODELODOC.VRTAMANHO,
                   MODCONT.IDSITUACAOCONTRATO
               FROM FCT_MODELODOC
               INNER JOIN (SELECT DISTINCT NRSEQMODDOCFCT, IDSITUACAOCONTRATO, NRORG
                             FROM FCT_MODELODOCCONTR
                            WHERE NRORG = P_NRORG
                              AND NRSEQMODCONTRA IN (SELECT TP.NRSEQMODCONTRATO
                                                       FROM FCT_TIPOORCAMENTO TP
                                                       INNER JOIN FCT_RELACESCOPOPROPOSTA REL
                                                       ON TP.NRTIPOORCAMENTO = REL.NRTIPOORCAMENTO
                                                       AND TP.NRORG           = REL.NRORG
                                                     WHERE REL.NRSEQORCAMENTO = C_ORCAMENTO.NRSEQORCAMENTO
                                                       AND REL.NRORG          = P_NRORG)
                              AND (IDSITUACAOCONTRATO = 'P'
                                    OR (IDSITUACAOCONTRATO IS NULL AND (SELECT COUNT(DOC.NRSEQMODDOCFCT)
                                        FROM FCT_MODELODOCCONTR DOC
                                        WHERE DOC.IDSITUACAOCONTRATO = 'P'
                                          AND DOC.NRSEQMODDOCFCT = FCT_MODELODOCCONTR.NRSEQMODDOCFCT) = 0))) MODCONT
             ON FCT_MODELODOC.NRORG = MODCONT.NRORG
             AND FCT_MODELODOC.NRSEQMODDOCFCT = MODCONT.NRSEQMODDOCFCT
             WHERE FCT_MODELODOC.NRORG = P_NRORG
         ) LOOP

             NOVO_CODIGO_NT('NRSEQCONTDOC', V_NRSEQCONTDOC,1);

             INSERT INTO FCT_CONTRATODOC (
                NRSEQCONTDOC,   NRSEQCONTRATO,    NRSEQMODDOCFCT,
                IDIDIOMA,       TXMODELODOCORCA,  NRORG,
                IDATIVO,        DTINCLUSAO,       NMARQUIVO,
                DSCAMINHOARQ,   DSTIPO,           VRTAMANHO,
                IDSITUACAOCONTRATO
             )
             VALUES (
                V_NRSEQCONTDOC,             V_NRSEQCONTRATO,                C_CONTRATODOC.NRSEQMODDOCFCT,
                C_CONTRATODOC.IDIDIOMA,     C_CONTRATODOC.TXMODELODOCORCA,  P_NRORG,
                'S',                        SYSDATE,                        C_CONTRATODOC.NMARQUIVO,
                C_CONTRATODOC.DSCAMINHOARQ, C_CONTRATODOC.DSTIPO,           C_CONTRATODOC.VRTAMANHO,
                C_CONTRATODOC.IDSITUACAOCONTRATO
             );

         END LOOP;
      END LOOP;

      IF V_NRSEQMODCONTRATO IS NOT NULL THEN
          NOVO_CODIGO_NT('FCT_REFEORCACONT', V_NRSEQREFEORCCONT,1);

          INSERT INTO FCT_REFEORCACONT
            (NRSEQREFEORCCONT, NRSEQORCAMENTO, NRSEQCONTRATO, IDCONTRATIVO, NRORG, DTINCLUSAO, NRTIPOORCAMENTO)
          VALUES
            (V_NRSEQREFEORCCONT, P_NRSEQORCAMENTO, V_NRSEQCONTRATO,'A', P_NRORG, SYSDATE, C_ORCAMENTO.NRTIPOORCAMENTO);
      END IF;
  END LOOP;

  P_NRSEQCONTRATO := V_NRSEQCONTRATO;
END;