CREATE OR REPLACE PROCEDURE FCT_GERA_CONTRATO (
  P_NRORG              IN NUMBER,
  P_NRSEQORCAMENTO     IN NUMBER,
  P_NRSEQCONTRATO      OUT NUMBER,
  P_CDOPERADOR         IN VARCHAR2 DEFAULT '1')
AS
  V_NRSEQMODCONTRATO   NUMBER;
  V_NRSEQCONTRATO      VARCHAR2(30);
  V_NRSEQFATUCONTR     VARCHAR2(30);
  V_NRSEQFATUITCONT    VARCHAR2(30);
  V_NRITSEQCONTRATO    VARCHAR2(30);
  V_NRITELESEQCONTRATO 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;
  V_INDICESPADRCONTR   NUMBER;
  V_INDPARC            VARCHAR2(1);
  V_IDGERARATEIO       VARCHAR2(1);
  V_IDAGRUPPARC        VARCHAR2(1);
  V_IDMUNIPRESTSERV    VARCHAR2(1); 
  V_IDTIPONATUOPER     VARCHAR2(1);
  V_IDNATUOPER         VARCHAR2(2);

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

  /** PARAMETROS DO RATEIO, SERVICO, MEDIDA E COMPOSICAO **/
  V_NRTRABSERVCONT    FCT_TRABSERVCONTRATO.NRTRABSERVCONT%TYPE;
  V_NRMEDIDACONTRATO  FCT_RELACMEDIDACONTRATO.NRMEDIDACONTRATO%TYPE;
  V_NRCOMPSERVCONT    FCT_COMPSERVCONTRATO.NRCOMPSERVCONT%TYPE;

  /* == PARAMETROS DE NEGOCIACAO DE VALORES == */
  V_NRNEGOCIACAOCONTRATO    VARCHAR2(20);
  V_NRITEMOCONTRATO_NEGO    NUMBER;
  V_NRITEMCONTITPAI_NEGO    NUMBER;
  V_NRITNEGOCIACAOCONTRATO  VARCHAR2(20);
  V_NRPARCELANEGOCONT       VARCHAR2(20);
  V_NRDESCPERIODONEGOCONT   VARCHAR2(20);
  V_NRCOMPETENCIANEGOCONT   VARCHAR2(20);
  V_NRVARPRECBASESERVCONT   VARCHAR2(20);
  V_CDPAISFILI              VARCHAR2(4);
  V_SGESTADOFILI            VARCHAR2(2);
  V_CDMUNICIPIOFILI         VARCHAR2(20);
  V_CDPAISFAT               VARCHAR2(4);
  V_SGESTADOFAT             VARCHAR2(2);
  V_CDMUNICIPIOFAT          VARCHAR2(20);
  V_IDNATUOPERFAT           VARCHAR2(2);

  /* == PARAMETROS DE ASSINATURAS == */ 
  V_NRASSDIGITALCONTR  NUMBER;
  V_NRINSCRICAOPARC    VARCHAR2(20);
  V_NRRELOPERNOTIFASSELE FCT_RELACOPERNOTIFASSELE.NRRELOPERNOTIFASSELE%TYPE;

BEGIN
    V_NRCONTRATOFCT := 1;
    FOR C_ORCAMENTO IN (
       SELECT NVL(O.NRTIPOORCAMENTO, ESC.NRTIPOORCAMENTO) AS NRTIPOORCAMENTO,
             O.NRSEQORCAMENTO,
             NVL(O.CDFILIAL, NVL(ESC.CDFILIAL, PARAMESC.CDFILIALFATURA)) AS CDFILIAL,
             O.NRORCAMENTO,
             O.NRVERSAOORCAMENTO,
             ORCAMOD.NRSEQMODCONTRA AS NRSEQMODCONTRATO,
             O.NRPARCNEGOCIO,
             O.QTDIASCONTRATO,
             O.DTREFORCAMENTO,
             ORCAMOD.IDUTILIZAHIERSERV,
             O.CDOPERRESPONSAVEL,
             TP.IDUTILIZAVARPRECO,
             O.DSREFERENCIAORCA,
             O.DTACEITEORCA,
             O.VRORCAMENTO,
             O.CDIDIOM,
             O.NRMOEDA
        FROM FCT_ORCAMENTO O
       INNER JOIN FCT_RELACESCOPOPROPOSTA ESC
          ON O.NRSEQORCAMENTO = ESC.NRSEQORCAMENTO
         AND O.NRORG          = ESC.NRORG
        LEFT JOIN FCT_CAPAPARAMFATESC PARAMESC
          ON ESC.NRTIPOORCAMENTO = PARAMESC.NRTIPOORCAMENTO
         AND ESC.NRORG           = PARAMESC.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)
    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;

        BEGIN
            SELECT IDGERARATEIO, IDAGRUPPARC, IDMUNIPRESTSERV, IDTIPONATUOPER, IDNATUOPER
              INTO V_IDGERARATEIO, V_IDAGRUPPARC, V_IDMUNIPRESTSERV, V_IDTIPONATUOPER, V_IDNATUOPER
              FROM FCT_CAPAPARAMFATESC
             WHERE NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
               AND NRORG           = P_NRORG;
        EXCEPTION WHEN NO_DATA_FOUND THEN
            V_IDGERARATEIO := 'N';
            V_IDAGRUPPARC := '1';
        END;

        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, MC.IDRENOVACAOAUTOMATICA,
                 MC.IDREAJUSTEAUTOMATICO, MC.IDASSELETRDIGITAL, MC.NRDIASREAJAUTOMATICO, MC.IDENVIADOCOPERRESPCONCASS, MC.CDCENTCUST,
                 MC.IDINTEGRACAOFM, MC.IDINTEGRALOCAISFM, MC.IDINTEGRAMEDICAOFM, MC.IDINTEGRACAOTECFOOD, MC.IDTIPOSERVINTTECFOOD
            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
             AND ROWNUM            = 1
             AND MC.IDATIVO        = 'S')
        LOOP
            NOVO_CODIGO_NT('FCT_CONTRATO', V_NRSEQCONTRATO,1);
            V_DTINICIOCONT := C_ORCAMENTO.DTACEITEORCA;
            IF C_ORCAMENTO.QTDIASCONTRATO IS NOT NULL THEN
                V_DTFINCONT := V_DTINICIOCONT + TO_NUMBER(C_ORCAMENTO.QTDIASCONTRATO) - 1;
                V_PRAZO     := C_ORCAMENTO.QTDIASCONTRATO;
            ELSE
                V_DTFINCONT := V_DTINICIOCONT + TO_NUMBER(C_MODELOCONTRATO.NRDIASVIGCONT) - 1;
                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;*/
            V_DTPADREAJCONT := V_DTFINCONT + 1;

            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         , NRTIPOORCAMENTO    , IDRENOVACAOAUTOMATICA , IDREAJUSTEAUTOMATICO , NRDIASPRORGCONTRENOV  ,
                IDASSELETRDIGITAL         , CDOPERINCLUSAO     , DTINIVIGENCONT        , DTFINVIGENCONT       , NRDIASREAJAUTOMATICO  ,
                IDENVIADOCOPERRESPCONCASS , IDGERARATEIO       , CDCENTCUST            , IDAGRUPPARC          , IDMUNIPRESTSERV       ,
                IDINTEGRACAOFM            , IDINTEGRALOCAISFM  , IDINTEGRAMEDICAOFM    , CDIDIOM              , NRMOEDA               ,
                IDINTEGRACAOTECFOOD       , IDTIPOSERVINTTECFOOD
            )
            VALUES (
                V_NRSEQCONTRATO                            , 'S'                                 , C_ORCAMENTO.CDFILIAL                   , 1                                     , V_NRSEQCONTRATO                       ,
                V_NRSEQMODCONTRATO                         , C_ORCAMENTO.NRPARCNEGOCIO           , C_ORCAMENTO.DSREFERENCIAORCA           , V_DTINICIOCONT                        , V_DTFINCONT                           ,
                V_PRAZO                                    , C_MODELOCONTRATO.IDSITUACAOCONTRATO , NULL                                   , C_MODELOCONTRATO.CDTPINDFINCON        , C_MODELOCONTRATO.CDINDFINCONT         ,
                C_MODELOCONTRATO.IDPERVALFINCON            , V_DTPADREAJCONT                     , V_PRAZO                                , C_MODELOCONTRATO.QTPOSTOTRABCONT      , 'G'                                   ,
                NULL                                       , NULL                                , NULL                                   , NULL                                  , NULL                                  ,
                NULL                                       , NULL                                , NULL                                   , NULL                                  , NULL                                  ,
                NULL                                       , C_MODELOCONTRATO.DTINICFATCONTR     , P_NRORG                                , NULL                                  , NULL                                  ,
                C_ORCAMENTO.CDOPERRESPONSAVEL              , C_ORCAMENTO.NRTIPOORCAMENTO         , C_MODELOCONTRATO.IDRENOVACAOAUTOMATICA , C_MODELOCONTRATO.IDREAJUSTEAUTOMATICO , C_MODELOCONTRATO.NRDIASPRORGCONT      ,
                C_MODELOCONTRATO.IDASSELETRDIGITAL         , P_CDOPERADOR                        , V_DTINICIOCONT                         , V_DTFINCONT                           , C_MODELOCONTRATO.NRDIASREAJAUTOMATICO ,
                C_MODELOCONTRATO.IDENVIADOCOPERRESPCONCASS , V_IDGERARATEIO                      , C_MODELOCONTRATO.CDCENTCUST            , V_IDAGRUPPARC                         , V_IDMUNIPRESTSERV                     ,
                C_MODELOCONTRATO.IDINTEGRACAOFM            , C_MODELOCONTRATO.IDINTEGRALOCAISFM  , C_MODELOCONTRATO.IDINTEGRAMEDICAOFM    , C_ORCAMENTO.CDIDIOM                   , C_ORCAMENTO.NRMOEDA                   ,
                C_MODELOCONTRATO.IDINTEGRACAOTECFOOD       , C_MODELOCONTRATO.IDTIPOSERVINTTECFOOD
            );

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

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

            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,
                    CDOPERINCLUSAO
                )
                VALUES (
                    V_NRRELACESTRUTCONT,  C_LOCAL.NRESTRUTURAM,  V_NRSEQCONTRATO,
                    NULL,                 'CONTRATO',            NULL,
                    P_NRORG,              NULL,                  SYSDATE,
                    P_CDOPERADOR
                );
            END LOOP;

            V_INDPARC := 'N';

            FOR C_INDPADPARC IN (SELECT NRINDICESPADRPARC, CDTPINDICE, IDPERVALOR, CDINDICE, NRPERCENTINDICE
                                   FROM FCT_INDICESPADRPARC
                                  WHERE NRPARCNEGOCIO =  C_ORCAMENTO.NRPARCNEGOCIO
                                    AND NRORG = P_NRORG) LOOP

                V_INDPARC := 'S';

                NOVO_CODIGO_NT('FCT_INDICESPADRCONTR', V_INDICESPADRCONTR, 1);

                INSERT INTO FCT_INDICESPADRCONTR (NRINDICESPADRCONTR, NRSEQCONTRATO, CDTPINDICE, IDPERVALOR, CDINDICE, NRPERCENTINDICE,
                                                  IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                        VALUES (V_INDICESPADRCONTR, V_NRSEQCONTRATO, C_INDPADPARC.CDTPINDICE, C_INDPADPARC.IDPERVALOR, C_INDPADPARC.CDINDICE, C_INDPADPARC.NRPERCENTINDICE,
                                'S', P_NRORG, SYSDATE, P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

            END LOOP;

            IF (V_INDPARC = 'N') THEN

              FOR C_INDPADESC IN (SELECT NRINDICESPADRESCOPO, CDTPINDICE, IDPERVALOR, CDINDICE, NRPERCENTINDICE
                                     FROM FCT_INDICESPADRESCOPO
                                    WHERE NRTIPOORCAMENTO =  C_ORCAMENTO.NRTIPOORCAMENTO
                                      AND NRORG = P_NRORG) LOOP

                  NOVO_CODIGO_NT('FCT_INDICESPADRCONTR', V_INDICESPADRCONTR, 1);

                  INSERT INTO FCT_INDICESPADRCONTR (NRINDICESPADRCONTR, NRSEQCONTRATO, CDTPINDICE, IDPERVALOR, CDINDICE, NRPERCENTINDICE,
                                                    IDATIVO, NRORG, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO)
                          VALUES (V_INDICESPADRCONTR, V_NRSEQCONTRATO, C_INDPADESC.CDTPINDICE, C_INDPADESC.IDPERVALOR, C_INDPADESC.CDINDICE, C_INDPADESC.NRPERCENTINDICE,
                                  'S', P_NRORG, SYSDATE, P_NRORG, C_ORCAMENTO.CDOPERRESPONSAVEL);

              END LOOP;

            END IF;

            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,   IT.VRUNITITEMORCA,        IT.VRTOTALITEMORCA,        IT.DTINICFATORC,
                       IT.IDMULTMEDVRTOT,    IT.IDADICITEMORC,         IT.IDADICCOBRITEMORC,      IT.NRITEMORCAMENTO,
                       IT.QTPARCELASFATU,    IT.NRDIAVENCPARCELASFATU, IT.NRTIPOORCAMENTO,        IT.VRPERCDESCORCA,
                       IT.IDTPDESCORCA,      IT.NMCONTRATUALITEMORCA,  IT.VRUNITITEMORCATBLPRECO, IT.QTMEDIDACALCULADA,
                       IT.CDTPMEDIDAVARIAVEL, IT.TXFORMULAITORCA,      IT.NRMOEDA
                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

                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,      NRITEMORCAMENTO,
                    NMCONTRATUALITEMCONT,  VRUNITITEMCONTTBLPRECO, QTMEDIDACALCULADA, CDTPMEDIDAVARIAVEL,
                    CDOPERINCLUSAO,        TXOBSITCONTRATO,        NRMOEDA
                )
                VALUES (
                    P_NRORG, V_NRITSEQCONTRATO, V_NRSEQCONTRATO, C_ITEM.CDPRODUTO,
                    C_ITEM.CDSERVORCA, C_ITEM.SGUNIDADE, C_ITEM.NMITEMORCAMENTO, ROUND(C_ITEM.QTITEMORCAMENTO, 2),
                    C_ITEM.CDTPMEDIDASERV, ROUND(C_ITEM.QTMEDIDAORCA, 2), NULL, NULL,
                    NULL, C_ITEM.IDUNIDTEMPOLOCACAO, C_ITEM.QTTEMPOLOCACAO, 'S',
                    ROUND(C_ITEM.VRUNITITEMORCA, 8), ROUND(C_ITEM.VRTOTALITEMORCA, 2), C_ITEM.DTINICFATORC, C_ITEM.IDMULTMEDVRTOT,
                    C_ITEM.IDADICITEMORC, C_ITEM.IDADICCOBRITEMORC, NVL(V_SOMAVALOR,'SIM'), C_ITEM.QTPARCELASFATU,
                    C_ITEM.NRDIAVENCPARCELASFATU, ROUND(C_ITEM.VRPERCDESCORCA, 2), DECODE(C_ITEM.IDTPDESCORCA, 'N', 'S', C_ITEM.IDTPDESCORCA), C_ITEM.NRITEMORCAMENTO,
                    C_ITEM.NMCONTRATUALITEMORCA, ROUND(C_ITEM.VRUNITITEMORCATBLPRECO, 2), C_ITEM.QTMEDIDACALCULADA, C_ITEM.CDTPMEDIDAVARIAVEL, 
                    P_CDOPERADOR, C_ITEM.TXFORMULAITORCA, C_ITEM.NRMOEDA
                );

                FOR C_ITELEMENTO 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, IT.NMCONTRATUALITEMORCA, IT.IDELEMENTO,
                           IT.VRUNITITEMORCATBLPRECO, IT.CDTPMEDIDAVARIAVEL, IT.QTMEDIDACALCULADA, IT.IDAPARECEPROPOSTA,
                           IT.TXFORMULAITORCA, IT.NRMOEDA
                      FROM FCT_ITEMORCAMENTO IT
                     WHERE IT.NRORG              = P_NRORG
                       AND IT.NRSEQORCAMENTO     = P_NRSEQORCAMENTO
                       AND IT.CDSERVORCA         = C_ITEM.CDSERVORCA
                       AND IT.NRITEMORCAMENTOPAI = C_ITEM.NRITEMORCAMENTO
                       AND IT.IDELEMENTO IS NOT NULL
                ) LOOP

                    NOVO_CODIGO_NT('FCT_ITEMCONTRATO', V_NRITELESEQCONTRATO, 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, NRITEMORCAMENTO, NMCONTRATUALITEMCONT, IDELEMENTO,
                        NRITEMCONTRATOPAI, VRUNITITEMCONTTBLPRECO, CDTPMEDIDAVARIAVEL, QTMEDIDACALCULADA,
                        IDAPARECEPROPOSTA,CDOPERINCLUSAO, TXOBSITCONTRATO, NRMOEDA
                    )
                    VALUES (
                        P_NRORG, V_NRITELESEQCONTRATO, V_NRSEQCONTRATO,
                        C_ITELEMENTO.CDPRODUTO, C_ITELEMENTO.CDSERVORCA, C_ITELEMENTO.SGUNIDADE, C_ITELEMENTO.NMITEMORCAMENTO,
                        ROUND(C_ITELEMENTO.QTITEMORCAMENTO, 2), C_ITELEMENTO.CDTPMEDIDASERV, ROUND(C_ITELEMENTO.QTMEDIDAORCA, 2), NULL,
                        NULL, NULL, C_ITELEMENTO.IDUNIDTEMPOLOCACAO, C_ITELEMENTO.QTTEMPOLOCACAO, 'S',
                        ROUND(C_ITELEMENTO.VRUNITITEMORCA, 8), ROUND(C_ITELEMENTO.VRTOTALITEMORCA, 2), C_ITELEMENTO.DTINICFATORC, C_ITELEMENTO.IDMULTMEDVRTOT,
                        C_ITELEMENTO.IDADICITEMORC, C_ITELEMENTO.IDADICCOBRITEMORC, NVL(V_SOMAVALOR,'SIM'),
                        C_ITELEMENTO.QTPARCELASFATU, C_ITELEMENTO.NRDIAVENCPARCELASFATU,
                        ROUND(C_ITELEMENTO.VRPERCDESCORCA, 2), DECODE(C_ITELEMENTO.IDTPDESCORCA, 'N', 'S', C_ITELEMENTO.IDTPDESCORCA), C_ITELEMENTO.NRITEMORCAMENTO,
                        C_ITELEMENTO.NMCONTRATUALITEMORCA, C_ITELEMENTO.IDELEMENTO,
                        V_NRITSEQCONTRATO, ROUND(C_ITELEMENTO.VRUNITITEMORCATBLPRECO, 2), C_ITELEMENTO.CDTPMEDIDAVARIAVEL, C_ITELEMENTO.QTMEDIDACALCULADA,
                        C_ITELEMENTO.IDAPARECEPROPOSTA, P_CDOPERADOR, C_ITELEMENTO.TXFORMULAITORCA, C_ITELEMENTO.NRMOEDA
                    );

                END LOOP; --C_ITELEMENTO

                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,
                        CDOPERINCLUSAO
                    )
                    VALUES (
                        V_NRRELACFORMACAOCONT, V_NRFORMPRECOSERVICO, V_NRSEQCONTRATO,
                        V_NRITSEQCONTRATO, P_NRORG, 'S', SYSDATE, NULL,
                        P_NRORG, NULL, NULL, NULL, P_CDOPERADOR
                    );
                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,
                        CDOPERINCLUSAO
                    )
                    VALUES (
                        V_NRRELACESTRUTCONT,  C_RATEIO.NRESTRUTURAM,            V_NRSEQCONTRATO,
                        V_NRITSEQCONTRATO,    'RATEIO',                         ROUND(C_RATEIO.VRITEMRATEIO, 2),
                        P_NRORG,              ROUND(C_RATEIO.VRPERCRATEIO, 2),  SYSDATE,
                        P_CDOPERADOR
                    );
                END LOOP;
            END LOOP; --C_ITEM

            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,CDOPERINCLUSAO)
                    VALUES
                      (V_NRSEQCONTRATO,V_NRSEQREAJUSTE, C_REAJUSTE.NMMODREAJUSCONTR,
                       C_REAJUSTE.IDTPREAJUSTE, C_REAJUSTE.IDTPMESREAJUSTE, C_REAJUSTE.NRQTDREAJUSTE,
                       'S',SYSDATE, P_CDOPERADOR);

                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,CDOPERINCLUSAO)
                    VALUES
                      (V_NRSEQINDCONTR,V_NRSEQREAJUSTE, V_NRSEQCONTRATO,
                       C_INDICE.CDTPINDICE, C_INDICE.IDPERVALOR, C_INDICE.CDINDICE,
                       C_INDICE.VRPERCINDCONTR, 'S',SYSDATE, P_CDOPERADOR);
                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 = V_NRSEQMODCONTRATO) 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, CDOPERINCLUSAO
                )
                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, P_CDOPERADOR
                );
            END LOOP;

            FOR C_NEGOCIACAO IN (
             SELECT NRNEGOCIACAOPROPOSTA,
                    NRTIPOORCAMENTO,
                    IDTPFATURA,
                    CDFILIALFATURA,
                    NRPARCFATURA,
                    CDTIPOOPERFATURA,
                    CDSERIENF,
                    CDEMPRESA,
                    CDINSCESTA,
                    CDINSCMUNI,
                    VRTOTITEM,
                    VRPERCDESCITEM,
                    VRDESCITEM,
                    VRTOTITEMCOMDESC,
                    IDATIVO,
                    IDTPDESCONTO,
                    IDPREVCOBRFUT,
                    CDTRIBPRODPADR
               FROM FCT_NEGOCIACAOPROPOSTA
              WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO
                AND NRORG           = P_NRORG
                AND NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO
            ) LOOP

                BEGIN
                    SELECT EM.CDPAIS, EM.SGESTADO, EM.CDMUNICIPIO 
                      INTO V_CDPAISFILI, V_SGESTADOFILI, V_CDMUNICIPIOFILI
                      FROM EMPRESA EM 
                      JOIN FILIAL FI 
                        ON EM.CDEMPRESA = FI.CDEMPRESA 
                     WHERE FI.CDFILIAL = C_NEGOCIACAO.CDFILIALFATURA
                       AND FI.NRORG    = P_NRORG;
                EXCEPTION WHEN NO_DATA_FOUND THEN
                    BEGIN
                        V_CDPAISFILI := NULL; 
                        V_SGESTADOFILI := NULL; 
                        V_CDMUNICIPIOFILI := NULL;
                    END;
                END;

                
                IF (V_IDMUNIPRESTSERV IS NULL) THEN

                    V_CDPAISFAT := NULL;
                    V_SGESTADOFAT := NULL;
                    V_CDMUNICIPIOFAT := NULL;

                ELSIF (V_IDMUNIPRESTSERV = 'U') THEN --municipio da unidade

                    V_CDPAISFAT := V_CDPAISFILI;
                    V_SGESTADOFAT := V_SGESTADOFILI;
                    V_CDMUNICIPIOFAT := V_CDMUNICIPIOFILI;

                    IF (V_IDTIPONATUOPER = 'V') THEN
                        V_IDNATUOPERFAT := '01';
                    END IF; 

                ELSE --V_IDMUNIPRESTSERV = 'T' => municipio do tomador

                    BEGIN
                        SELECT DISTINCT CDPAIS, SGESTADO, CDMUNICIPIO
                          INTO V_CDPAISFAT, V_SGESTADOFAT, V_CDMUNICIPIOFAT
                          FROM ENDERECOPARC
                         WHERE NRPARCNEGOCIO  = C_NEGOCIACAO.NRPARCFATURA
                           AND NRORG          = P_NRORG
                           AND CDTIPOENDERECO = 'PRINCIPAL'
                           AND IDATIVO        = 'S'
                           AND CDPAIS IS NOT NULL;
                    EXCEPTION WHEN NO_DATA_FOUND THEN
                        BEGIN
                            V_CDPAISFAT := NULL; 
                            V_SGESTADOFAT := NULL; 
                            V_CDMUNICIPIOFAT := NULL;
                        END;
                    END;

                    IF (V_IDTIPONATUOPER = 'V') THEN
                        IF (V_CDPAISFILI = V_CDPAISFAT AND V_SGESTADOFILI = V_SGESTADOFAT AND V_CDMUNICIPIOFILI = V_CDMUNICIPIOFAT) THEN
                            V_IDNATUOPERFAT := '01';
                        ELSE
                            V_IDNATUOPERFAT := '02';
                        END IF;
                    END IF;

                END IF; 

                IF (V_IDTIPONATUOPER = 'F') THEN
                    V_IDNATUOPERFAT := V_IDNATUOPER;
                END IF; 

                NOVO_CODIGO_NT('FCT_NEGOCIACAOCONTRATO', V_NRNEGOCIACAOCONTRATO, 1, P_NRORG);
                INSERT INTO FCT_NEGOCIACAOCONTRATO (
                    NRNEGOCIACAOCONTRATO,   NRSEQCONTRATO,        NRTIPOORCAMENTO,
                    IDTPFATURA,             CDFILIALFATURA,       NRPARCFATURA,
                    CDTIPOOPERFATURA,       CDSERIENF,            CDEMPRESA,
                    CDINSCESTA,             CDINSCMUNI,           VRTOTITEM,
                    VRPERCDESCITEM,         VRDESCITEM,           VRTOTITEMCOMDESC,
                    IDATIVO,                NRORG,                DTINCLUSAO,
                    NRORGINCLUSAO,          NRNEGOCIACAOPROPOSTA, IDTPDESCONTO,
                    CDOPERINCLUSAO,         IDPREVCOBRFUT,        CDTRIBPRODPADR,
                    CDPAISFAT,              SGESTADOFAT,          CDMUNICIPIOFAT,
                    IDNATUOPER
                )
                VALUES (
                    V_NRNEGOCIACAOCONTRATO,                V_NRSEQCONTRATO,                   C_NEGOCIACAO.NRTIPOORCAMENTO,
                    C_NEGOCIACAO.IDTPFATURA,               C_NEGOCIACAO.CDFILIALFATURA,       C_NEGOCIACAO.NRPARCFATURA,
                    C_NEGOCIACAO.CDTIPOOPERFATURA,         C_NEGOCIACAO.CDSERIENF,            C_NEGOCIACAO.CDEMPRESA,
                    C_NEGOCIACAO.CDINSCESTA,               C_NEGOCIACAO.CDINSCMUNI,           ROUND(C_NEGOCIACAO.VRTOTITEM, 2),
                    ROUND(C_NEGOCIACAO.VRPERCDESCITEM, 2), ROUND(C_NEGOCIACAO.VRDESCITEM, 2), ROUND(C_NEGOCIACAO.VRTOTITEMCOMDESC, 2),
                    C_NEGOCIACAO.IDATIVO,                  P_NRORG,                           SYSDATE,
                    P_NRORG,                               C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA, C_NEGOCIACAO.IDTPDESCONTO,
                    P_CDOPERADOR,                          C_NEGOCIACAO.IDPREVCOBRFUT,        C_NEGOCIACAO.CDTRIBPRODPADR,
                    V_CDPAISFAT,                           V_SGESTADOFAT,                     V_CDMUNICIPIOFAT,
                    V_IDNATUOPERFAT
                );

                FOR C_ITNEGOCIACAO IN (
                    SELECT NRITNEGOCIACAOPROPOSTA,
                            NRITEMORCAMENTO,
                            NRITEMORCAMENTOPAI,
                            VRTOTITEM,
                            VRPERCDESCITEM,
                            VRDESCITEM,
                            VRTOTITEMCOMDESC,
                            CDSERVORCA,
                            CDPRODFATURA,
                            NRPARCFATURA,
                            IDATIVO,
                            IDTPDESCONTO
                       FROM FCT_ITNEGOCIACAOPROPOSTA
                      WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA
                        AND NRORG                = P_NRORG
                ) LOOP
                    BEGIN
                        SELECT NRITEMOCONTRATO, NRITEMCONTRATOPAI
                          INTO V_NRITEMOCONTRATO_NEGO, V_NRITEMCONTITPAI_NEGO
                          FROM FCT_ITEMCONTRATO
                         WHERE NRSEQCONTRATO   = V_NRSEQCONTRATO
                           AND NRITEMORCAMENTO = C_ITNEGOCIACAO.NRITEMORCAMENTO
                           AND NRORG           = P_NRORG;
                    EXCEPTION WHEN NO_DATA_FOUND THEN
                        V_NRITEMOCONTRATO_NEGO := NULL;
                    END;
                    NOVO_CODIGO_NT('FCT_ITNEGOCIACAOCONTRATO', V_NRITNEGOCIACAOCONTRATO, 1, P_NRORG);
                    INSERT INTO FCT_ITNEGOCIACAOCONTRATO (
                         NRITNEGOCIACAOCONTRATO, NRNEGOCIACAOCONTRATO,   NRITEMOCONTRATO,
                         NRITEMORCAMENTO,        NRITEMORCAMENTOPAI,     VRTOTITEM,
                         VRPERCDESCITEM,         VRDESCITEM,             VRTOTITEMCOMDESC,
                         CDSERVORCA,             CDPRODFATURA,           NRPARCFATURA,
                         IDATIVO,                NRORG,                  DTINCLUSAO,
                         NRORGINCLUSAO,          NRITNEGOCIACAOPROPOSTA, NRITEMCONTRATOPAI,
                         IDTPDESCONTO,           CDOPERINCLUSAO
                    ) VALUES (
                         V_NRITNEGOCIACAOCONTRATO,                V_NRNEGOCIACAOCONTRATO,                V_NRITEMOCONTRATO_NEGO,
                         NULL,                                    NULL,                                  ROUND(C_ITNEGOCIACAO.VRTOTITEM, 2),
                         ROUND(C_ITNEGOCIACAO.VRPERCDESCITEM, 2), ROUND(C_ITNEGOCIACAO.VRDESCITEM, 2),   ROUND(C_ITNEGOCIACAO.VRTOTITEMCOMDESC, 2),
                         C_ITNEGOCIACAO.CDSERVORCA,               C_ITNEGOCIACAO.CDPRODFATURA,           C_ITNEGOCIACAO.NRPARCFATURA,
                         C_ITNEGOCIACAO.IDATIVO,                  P_NRORG,                               SYSDATE,
                         P_NRORG,                                 C_ITNEGOCIACAO.NRITNEGOCIACAOPROPOSTA, V_NRITEMCONTITPAI_NEGO,
                         C_ITNEGOCIACAO.IDTPDESCONTO,             P_CDOPERADOR
                    );
                END LOOP; --C_ITNEGOCIACAO

                FOR C_PARCELA_NEGO IN (
                    SELECT NRPARCELANEGOPROP,
                           QTDIASFATURAMENTO,
                           NRPARCELA,
                           NRDIAVENCIMENTO,
                           VRPARCELA,
                           IDATIVO
                      FROM FCT_PARCELANEGOPROP
                     WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA
                       AND NRORG                = P_NRORG
                ) LOOP
                     NOVO_CODIGO_NT('FCT_PARCELANEGOCONT', V_NRPARCELANEGOCONT, 1, P_NRORG);
                     INSERT INTO FCT_PARCELANEGOCONT (
                         NRPARCELANEGOCONT, NRNEGOCIACAOCONTRATO, QTDIASFATURAMENTO,
                         NRPARCELA,         NRDIAVENCIMENTO,      VRPARCELA,            
                         IDATIVO,           NRORG,                DTINCLUSAO,           
                         NRORGINCLUSAO,     NRPARCELANEGOPROP,    CDOPERINCLUSAO
                     )
                     VALUES (
                         V_NRPARCELANEGOCONT,              V_NRNEGOCIACAOCONTRATO,             C_PARCELA_NEGO.QTDIASFATURAMENTO,
                         C_PARCELA_NEGO.NRPARCELA,         C_PARCELA_NEGO.NRDIAVENCIMENTO,     ROUND(C_PARCELA_NEGO.VRPARCELA, 2), 
                         C_PARCELA_NEGO.IDATIVO,           P_NRORG,                            SYSDATE,                            
                         P_NRORG,                          C_PARCELA_NEGO.NRPARCELANEGOPROP,   P_CDOPERADOR
                     );
                END LOOP; --C_PARCELA_NEGO

                FOR C_DESCPERIODO_NEGO IN (
                     SELECT NRDESCPERIODONEGOPROP,
                            VRPERCDESCITEM,
                            VRDESCITEM,
                            VRTOTITEMCOMDESC,
                            QTMESESDESC,
                            DTFINALVALIDADEDESC,
                            IDATIVO,
                            NRORDEMAPLICADESC,
                            IDTPDESCONTO
                       FROM FCT_DESCPERIODONEGOPROP
                      WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA
                        AND NRORG                = P_NRORG
                ) LOOP
                     NOVO_CODIGO_NT('FCT_DESCPERIODONEGOCONT', V_NRDESCPERIODONEGOCONT, 1, P_NRORG);
                     INSERT INTO FCT_DESCPERIODONEGOCONT (
                         NRDESCPERIODONEGOCONT, NRNEGOCIACAOCONTRATO, VRPERCDESCITEM,
                         VRDESCITEM,            VRTOTITEMCOMDESC,     QTMESESDESC,
                         DTFINALVALIDADEDESC,   IDATIVO,              NRORG,
                         DTINCLUSAO,            NRORGINCLUSAO,        NRDESCPERIODONEGOPROP,
                         NRORDEMAPLICADESC,     IDTPDESCONTO,         CDOPERINCLUSAO
                     )
                     VALUES (
                         V_NRDESCPERIODONEGOCONT,                 V_NRNEGOCIACAOCONTRATO,                        ROUND(C_DESCPERIODO_NEGO.VRPERCDESCITEM, 2),
                         ROUND(C_DESCPERIODO_NEGO.VRDESCITEM, 2), ROUND(C_DESCPERIODO_NEGO.VRTOTITEMCOMDESC, 2), C_DESCPERIODO_NEGO.QTMESESDESC,
                         C_DESCPERIODO_NEGO.DTFINALVALIDADEDESC,  C_DESCPERIODO_NEGO.IDATIVO,                    P_NRORG,
                         SYSDATE,                                 P_NRORG,                                       C_DESCPERIODO_NEGO.NRDESCPERIODONEGOPROP,
                         C_DESCPERIODO_NEGO.NRORDEMAPLICADESC,    C_DESCPERIODO_NEGO.IDTPDESCONTO,               P_CDOPERADOR
                     );
                END LOOP; --C_DESCPERIODO_NEGO

                FOR C_COMPET IN (
                     SELECT NRDIACOMPETINI,
                            NRDIACOMPETFIN,
                            IDMESCOMPETINI,
                            IDMESCOMPETFIN,
                            QTDIASAPURACAO,
                            IDTPCALCVENC,
                            NRDIACALCVENC,
                            IDMESCALCVENC,
                            QTDIASFATUVENC,
                            IDATIVO
                       FROM FCT_COMPETENCIANEGOPROP
                      WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA
                        AND NRORG                = P_NRORG
                ) LOOP
                     NOVO_CODIGO_NT('FCT_COMPETENCIANEGOCONT', V_NRCOMPETENCIANEGOCONT, 1, P_NRORG);
                     INSERT INTO FCT_COMPETENCIANEGOCONT (
                         NRCOMPETENCIANEGOCONT, NRNEGOCIACAOCONTRATO, NRDIACOMPETINI,
                         NRDIACOMPETFIN,        IDMESCOMPETINI,       IDMESCOMPETFIN,
                         QTDIASAPURACAO,        IDTPCALCVENC,         NRDIACALCVENC,
                         IDMESCALCVENC,         QTDIASFATUVENC,       IDATIVO,
                         NRORG,                 DTINCLUSAO,           NRORGINCLUSAO,
                         CDOPERINCLUSAO
                     )
                     VALUES (
                         V_NRCOMPETENCIANEGOCONT, V_NRNEGOCIACAOCONTRATO,  C_COMPET.NRDIACOMPETINI,
                         C_COMPET.NRDIACOMPETFIN, C_COMPET.IDMESCOMPETINI, C_COMPET.IDMESCOMPETFIN,
                         C_COMPET.QTDIASAPURACAO, C_COMPET.IDTPCALCVENC,   C_COMPET.NRDIACALCVENC,
                         C_COMPET.IDMESCALCVENC,  C_COMPET.QTDIASFATUVENC, C_COMPET.IDATIVO,
                         P_NRORG,                 SYSDATE,                 P_NRORG,
                         P_CDOPERADOR
                     );
                END LOOP; --C_COMPET
            END LOOP; --C_NEGOCIACAO
        END LOOP;

        FOR C_ELEMENTOS IN (
            SELECT NRCOMPSERVICO,
              NRITCOMPSERVICO,
              IDESCOLHIDO,
              CDSERVORCA,
              QTSERVORCA,
              CDTPMEDIDASERV,
              QTMEDSERVORCA,
              VRUNITSERVORCA,
              VRTOTSERVORCA,
              IDELEMENTO,
              IDELEMENTOPAI,
              IDTIPOELEMENTO,
              IDSERVOBRIGCOMP,
              QTMEDIDAVARIAVEL,
              QTMEDIDACALC,
              IDAPARECEPROPOSTA,
              CDCENTCUST
          FROM FCT_TRABSERVORCAMENTO
          WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO
            AND NRORG           = P_NRORG
        ) LOOP
            NOVO_CODIGO_NT('FCT_TRABSERVCONTRATO', V_NRTRABSERVCONT, 1, P_NRORG);
            INSERT INTO FCT_TRABSERVCONTRATO (
                NRTRABSERVCONT,  NRSEQCONTRATO,    NRTIPOORCAMENTO,
                NRCOMPSERVICO,   NRITCOMPSERVICO,  IDESCOLHIDO,
                CDSERVORCA,      QTSERVORCA,       CDTPMEDIDASERV,
                QTMEDSERVORCA,   VRUNITSERVORCA,   VRTOTSERVORCA,
                IDELEMENTO,      IDELEMENTOPAI,    IDTIPOELEMENTO,
                IDSERVOBRIGCOMP, QTMEDIDAVARIAVEL, QTMEDIDACALC,
                NRORG,           IDATIVO,          DTINCLUSAO,
                DTULTATU,        NRORGINCLUSAO,    CDOPERINCLUSAO,
                NRORGULTATU,     CDOPERULTATU,     IDAPARECEPROPOSTA,
                CDCENTCUST
            ) VALUES (
                V_NRTRABSERVCONT,                    V_NRSEQCONTRATO,                        C_ORCAMENTO.NRTIPOORCAMENTO,
                C_ELEMENTOS.NRCOMPSERVICO,           C_ELEMENTOS.NRITCOMPSERVICO,            C_ELEMENTOS.IDESCOLHIDO,
                C_ELEMENTOS.CDSERVORCA,              ROUND(C_ELEMENTOS.QTSERVORCA, 2),       C_ELEMENTOS.CDTPMEDIDASERV,
                ROUND(C_ELEMENTOS.QTMEDSERVORCA, 2), ROUND(C_ELEMENTOS.VRUNITSERVORCA, 2),   ROUND(C_ELEMENTOS.VRTOTSERVORCA, 2),
                C_ELEMENTOS.IDELEMENTO,              C_ELEMENTOS.IDELEMENTOPAI,              C_ELEMENTOS.IDTIPOELEMENTO,
                C_ELEMENTOS.IDSERVOBRIGCOMP,         ROUND(C_ELEMENTOS.QTMEDIDAVARIAVEL, 2), ROUND(C_ELEMENTOS.QTMEDIDACALC, 2),
                P_NRORG,                             'S',                                    SYSDATE,
                NULL,                                P_NRORG,                                C_ORCAMENTO.CDOPERRESPONSAVEL,
                NULL,                                NULL,                                   C_ELEMENTOS.IDAPARECEPROPOSTA,
                C_ELEMENTOS.CDCENTCUST
            );
        END LOOP; -- C_ELEMENTOS

        IF(C_ORCAMENTO.IDUTILIZAVARPRECO = 'S') THEN
            FOR C_TPMEDIDA IN (
                SELECT NRSEQORCAMENTO,
                       CDTPMEDIDAVARIAVEL,
                       QTMEDIDAVARIAVEL,
                       IDELEMENTORAIZ,
                       QTFRANQUIA,
                       CDSERVORCA,
                       NRTIPOORCAMENTO,
                       IDAPARECEPROPOSTA
                  FROM FCT_RELACMEDIDAPROPOSTA
                 WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO
                   AND NRORG           = P_NRORG
                   AND (NRTIPOORCAMENTO = C_ORCAMENTO.NRTIPOORCAMENTO OR NRTIPOORCAMENTO IS NULL)
            ) LOOP

                NOVO_CODIGO_NT('FCT_RELACMEDIDACONTRATO', V_NRMEDIDACONTRATO, 1, P_NRORG);
                INSERT INTO FCT_RELACMEDIDACONTRATO (
                    NRMEDIDACONTRATO,
                    NRSEQCONTRATO,
                    CDTPMEDIDAVARIAVEL,
                    QTMEDIDAVARIAVEL,
                    IDELEMENTORAIZ,
                    QTFRANQUIA,
                    NRORG,
                    DTINCLUSAO,
                    DTULTATU,
                    NRORGINCLUSAO,
                    CDOPERINCLUSAO,
                    NRORGULTATU,
                    CDOPERULTATU,
                    IDATIVO,
                    CDSERVORCA,
                    NRTIPOORCAMENTO,
                    IDAPARECEPROPOSTA
                )
                VALUES (
                    V_NRMEDIDACONTRATO,
                    V_NRSEQCONTRATO,
                    C_TPMEDIDA.CDTPMEDIDAVARIAVEL,
                    ROUND(C_TPMEDIDA.QTMEDIDAVARIAVEL, 2),
                    C_TPMEDIDA.IDELEMENTORAIZ,
                    C_TPMEDIDA.QTFRANQUIA,
                    P_NRORG,
                    SYSDATE,
                    NULL,
                    P_NRORG,
                    C_ORCAMENTO.CDOPERRESPONSAVEL,
                    NULL,
                    NULL,
                    'S',
                    C_TPMEDIDA.CDSERVORCA,
                    C_TPMEDIDA.NRTIPOORCAMENTO,
                    C_TPMEDIDA.IDAPARECEPROPOSTA
                );

            END LOOP; -- C_TPMEDIDA

            FOR C_TABPRECO IN (SELECT NRVARPRECBASESERVORCA, NRSEQORCAMENTO, CDSERVORCA, CDTPMEDIDASERV, CDTPMEDIDAVARIAVEL, QTMEDIDAINIVARIACAO,
                                      QTMEDIDAFIMVARIACAO, QTFRANQUIA, VRPRECOVARIACAO, IDMULTIPVARIACAO, NRORG
                                  FROM FCT_VARPRECBASESERVORCA
                                 WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                                   AND NRORG          = P_NRORG ) LOOP

                NOVO_CODIGO_NT('FCT_VARPRECBASESERVCONT', V_NRVARPRECBASESERVCONT, 1, P_NRORG);

                INSERT INTO FCT_VARPRECBASESERVCONT (NRVARPRECBASESERVCONT,
                                                     NRSEQCONTRATO,
                                                     CDSERVORCA,
                                                     CDTPMEDIDASERV,
                                                     CDTPMEDIDAVARIAVEL,
                                                     QTMEDIDAINIVARIACAO,
                                                     QTMEDIDAFIMVARIACAO,
                                                     QTFRANQUIA,
                                                     VRPRECOVARIACAO,
                                                     IDMULTIPVARIACAO,
                                                     NRORG,
                                                     IDATIVO,
                                                     DTINCLUSAO,
                                                     NRORGINCLUSAO,
                                                     CDOPERINCLUSAO)
                             VALUES (V_NRVARPRECBASESERVCONT,
                                     V_NRSEQCONTRATO,
                                     C_TABPRECO.CDSERVORCA,
                                     C_TABPRECO.CDTPMEDIDASERV,
                                     C_TABPRECO.CDTPMEDIDAVARIAVEL,
                                     C_TABPRECO.QTMEDIDAINIVARIACAO,
                                     C_TABPRECO.QTMEDIDAFIMVARIACAO,
                                     C_TABPRECO.QTFRANQUIA,
                                     ROUND(C_TABPRECO.VRPRECOVARIACAO, 2),
                                     C_TABPRECO.IDMULTIPVARIACAO,
                                     P_NRORG,
                                     'S',
                                     SYSDATE,
                                     P_NRORG,
                                     C_ORCAMENTO.CDOPERRESPONSAVEL);

            END LOOP;

        END IF;

        FOR C_COMPSERVICO IN(
            SELECT NRCOMPSERVICO,
                NMCOMPSERVICO,
                NRCOMPSERVICOPAI,
                IDCOMPOBRIGATORIA,
                IDESCOLHIDO,
                CDCENTCUST
            FROM FCT_COMPSERVORCAMENTO
            WHERE NRSEQORCAMENTO    = P_NRSEQORCAMENTO
                AND NRORG           = P_NRORG
        ) LOOP
            NOVO_CODIGO_NT('FCT_COMPSERVCONTRATO', V_NRCOMPSERVCONT, 1, P_NRORG);
            INSERT INTO FCT_COMPSERVCONTRATO (
                NRCOMPSERVCONT,
                NRSEQCONTRATO,
                NRCOMPSERVICO,
                NMCOMPSERVICO,
                NRCOMPSERVICOPAI,
                IDCOMPOBRIGATORIA,
                IDESCOLHIDO,
                NRORG,
                IDATIVO,
                DTINCLUSAO,
                DTULTATU,
                NRORGINCLUSAO,
                CDOPERINCLUSAO,
                NRORGULTATU,
                CDOPERULTATU,
                CDCENTCUST
            ) VALUES (
                V_NRCOMPSERVCONT,
                V_NRSEQCONTRATO,
                C_COMPSERVICO.NRCOMPSERVICO,
                C_COMPSERVICO.NMCOMPSERVICO,
                C_COMPSERVICO.NRCOMPSERVICOPAI,
                C_COMPSERVICO.IDCOMPOBRIGATORIA,
                C_COMPSERVICO.IDESCOLHIDO,
                P_NRORG,
                'S',
                SYSDATE,
                NULL,
                P_NRORG,
                C_ORCAMENTO.CDOPERRESPONSAVEL,
                NULL,
                NULL,
                C_COMPSERVICO.CDCENTCUST
            );
        END LOOP; -- C_COMPSERVICO


        FOR C_ASSINATURAS IN (SELECT NRSIGNATPADRCONT, NRSEQMODCONTRA, NRPARCNEGOCIO, IDTIPOASSINATURA, IDTESTEMUNHA, 
                                     NRORDENACAO, NRORG, IDATIVO, DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO, DSEMAILNOTSIGNENV, DSEMAILNOTIFOUTROS
                                FROM FCT_SIGNATPADRMODCONT
                               WHERE NRSEQMODCONTRA = V_NRSEQMODCONTRATO
                                 AND NRORG = P_NRORG
                                 AND IDTPSIGNATARIO = 'SE') LOOP
          BEGIN 
            SELECT NRINSCRICAOPARC
              INTO V_NRINSCRICAOPARC
              FROM PARCNEGOCIO
             WHERE NRPARCNEGOCIO = C_ASSINATURAS.NRPARCNEGOCIO
               AND NRORG = P_NRORG;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_NRINSCRICAOPARC := NULL;
          END;

          NOVO_CODIGO_NT('FCT_ASSINATDIGITALCONTR', V_NRASSDIGITALCONTR, 1, P_NRORG);

          INSERT INTO FCT_ASSINATDIGITALCONTR 
                      (NRASSDIGITALCONTR, NRSEQCONTRATO, NRPARCNEGOCIO, NRCPFSIGNATARIO, IDTIPOASSINATURA, IDTESTEMUNHA, 
                       NRORDENACAO, IDSITUACAO, NRORG, IDATIVO, DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO,
                       DSEMAILNOTSIGNENV, DSEMAILNOTIFOUTROS)
               VALUES (V_NRASSDIGITALCONTR, V_NRSEQCONTRATO, C_ASSINATURAS.NRPARCNEGOCIO, V_NRINSCRICAOPARC, C_ASSINATURAS.IDTIPOASSINATURA, C_ASSINATURAS.IDTESTEMUNHA, 
                       C_ASSINATURAS.NRORDENACAO, 'P', P_NRORG, 'S', SYSDATE, C_ORCAMENTO.CDOPERRESPONSAVEL, P_NRORG,
                       C_ASSINATURAS.DSEMAILNOTSIGNENV, C_ASSINATURAS.DSEMAILNOTIFOUTROS);

          -- INSERIR OPERADORES
          FOR C_OPERADORES IN (SELECT CDOPERADOR
                                 FROM FCT_RELACOPERNOTIFASSELE 
                                WHERE NRSIGNATPADRCONT = C_ASSINATURAS.NRSIGNATPADRCONT
          ) LOOP

              NOVO_CODIGO_SC('FCT_RELACOPERNOTIFASSELE', V_NRRELOPERNOTIFASSELE, 1, P_NRORG);

              INSERT INTO FCT_RELACOPERNOTIFASSELE (
                  NRRELOPERNOTIFASSELE, NRASSDIGITALCONTR, CDOPERADOR, NRORG, IDATIVO, 
                  DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO
              )
              VALUES (
                  V_NRRELOPERNOTIFASSELE, V_NRASSDIGITALCONTR, C_OPERADORES.CDOPERADOR, P_NRORG, 'S', 
                  SYSDATE, C_ORCAMENTO.CDOPERRESPONSAVEL, P_NRORG
              );

          END LOOP;

        END LOOP; --C_ASSINATURAS


        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, IDATIVO,CDOPERINCLUSAO)
          VALUES
            (V_NRSEQREFEORCCONT, P_NRSEQORCAMENTO, V_NRSEQCONTRATO,'A',
             P_NRORG,            SYSDATE,          C_ORCAMENTO.NRTIPOORCAMENTO,
             'S',                P_CDOPERADOR);
      END IF;
    END LOOP;
    P_NRSEQCONTRATO := V_NRSEQCONTRATO;
END;
/