CREATE OR REPLACE PROCEDURE FCT_COPIA_VERSIONA_PROPOSTA (  
    P_NRSEQORCAMENTO        IN INTEGER,  
    P_TIPO                  IN VARCHAR2, -- V = Versionar, C = Copiar  
    P_CDOPERADOR            IN VARCHAR2,  
    P_NRORG                 IN INTEGER,  
    P_NRSEQORCAMENTO_GERADO OUT INTEGER  
)  
AS  
    --DADOS DA PROPOSTA  
    V_ORCAMENTO_ORIGEM       FCT_ORCAMENTO%ROWTYPE;  
    V_NRSEQORCAMENTOPAI      FCT_ORCAMENTO.NRSEQORCAMENTOPAI%TYPE;  
    V_NRORCAMENTO            FCT_ORCAMENTO.NRORCAMENTO%TYPE;  
    V_VERSAO                 FCT_ORCAMENTO.NRVERSAOORCAMENTO%TYPE;  
    --NOVO CODIGO  
    V_NRSEQORCAMENTO         FCT_ORCAMENTO.NRSEQORCAMENTO%TYPE;  
    V_NRITEMORCAMENTO        FCT_ITEMORCAMENTO.NRITEMORCAMENTO%TYPE;  
    V_NRITEMORCAMENTO_AD     FCT_ITEMORCAMENTO.NRITEMORCAMENTO%TYPE;  
    V_NRITEMORCAMENTO_FILHO  FCT_ITEMORCAMENTO.NRITEMORCAMENTO%TYPE;  
    V_NRVENDEDORORCA         FCT_VENDEDORORCA.NRVENDEDORORCA%TYPE;  
    V_NRENDERECOORCA         FCT_ENDERECOORCA.NRENDERECOORCA%TYPE;  
    V_NRSEQORCADOC           FCT_ORCAMENTODOC.NRSEQORCADOC%TYPE;  
    V_NRRELACESCOPOPROPOSTA  FCT_RELACESCOPOPROPOSTA.NRRELACESCOPOPROPOSTA%TYPE;  
    V_NRTRABSERVORCA         FCT_TRABSERVORCAMENTO.NRTRABSERVORCA%TYPE;  
    V_NRCOMPSERVORCAMENTO    FCT_COMPSERVORCAMENTO.NRCOMPSERVORCAMENTO%TYPE;  
    V_NRRELACMEDIDAPROPOSTA  FCT_RELACMEDIDAPROPOSTA.NRRELACMEDIDAPROPOSTA%TYPE;  
    V_NRRELACFORMACAOPROP    FCT_RELACFORMACAOPROP.NRRELACFORMACAOPROP%TYPE;  
    V_NEW_NRRELACESTRUTPROP  NUMBER;  
    V_NRPARAMFATITPROP       FCT_PARAMFATITPROP.NRPARAMFATITPROP%TYPE;  
    V_NRNEGOCIACAOPROPOSTA   FCT_NEGOCIACAOPROPOSTA.NRNEGOCIACAOPROPOSTA%TYPE;  
    V_NRITNEGOCIACAOPROPOSTA FCT_ITNEGOCIACAOPROPOSTA.NRITNEGOCIACAOPROPOSTA%TYPE; 
    V_NRPARCELANEGOPROP      FCT_PARCELANEGOPROP.NRPARCELANEGOPROP%TYPE;  
    V_NRDESCPERIODONEGOPROP  FCT_DESCPERIODONEGOPROP.NRDESCPERIODONEGOPROP%TYPE;  
    V_NRCOMPETENCIANEGOPROP  FCT_COMPETENCIANEGOPROP.NRCOMPETENCIANEGOPROP%TYPE;  
    V_COUNTDOCRENEGOCIACAO   NUMBER;
    V_IDTPCOPIA              VARCHAR2(15);

    V_NRASSDIGITALORCA FCT_ASSINATDIGITALPROP.NRASSDIGITALORCA%TYPE;
    V_NRORCAMENTOMODELO FCT_ORCAMENTO.NRORCAMENTOMODELO%TYPE;
    V_NRINSCRICAOPARC PARCNEGOCIO.NRINSCRICAOPARC%TYPE;

    V_NRRELOPERNOTIFASSELE FCT_RELACOPERNOTIFASSELE.NRRELOPERNOTIFASSELE%TYPE;
    
BEGIN  
    SELECT *  
      INTO V_ORCAMENTO_ORIGEM  
      FROM FCT_ORCAMENTO  
     WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
       AND NRORG          = P_NRORG;  
    
    NOVO_CODIGO_NT('NRSEQORCAMENTO', V_NRSEQORCAMENTO, 1, P_NRORG);  
    P_NRSEQORCAMENTO_GERADO := V_NRSEQORCAMENTO;  
    
    IF (P_TIPO = 'V') THEN  
        V_NRSEQORCAMENTOPAI := V_ORCAMENTO_ORIGEM.NRSEQORCAMENTOPAI;  
        
        IF (V_NRSEQORCAMENTOPAI IS NULL) THEN  
            V_NRSEQORCAMENTOPAI := V_ORCAMENTO_ORIGEM.NRSEQORCAMENTO;  
        END IF;  
        
        SELECT NVL(MAX(NRVERSAOORCAMENTO) + 1, 2)  
          INTO V_VERSAO  
          FROM FCT_ORCAMENTO  
         WHERE NRSEQORCAMENTOPAI = V_NRSEQORCAMENTOPAI  
           AND NRORG             = P_NRORG;  
        
        -- Atualiza no PM o cdigo da proposta ligada na issue  
        BEGIN  
          UPDATE BUDGET  
          SET EXTERNAL_ID = V_NRSEQORCAMENTO  
          WHERE EXTERNAL_ID = P_NRSEQORCAMENTO;  
        EXCEPTION WHEN OTHERS THEN  
          V_VERSAO := V_VERSAO;  
        END;  
        
        V_IDTPCOPIA := 'VERSIONAPROP';
    ELSE 
        V_NRSEQORCAMENTOPAI := NULL; 
        V_VERSAO            := 1;  
        V_IDTPCOPIA         := 'COPIAPROP';
    END IF;  
    
    INSERT INTO FCT_ORCAMENTO (
        NRSEQORCAMENTO,         NRPARCNEGOCIO,        CDFILIAL,                 NRORCAMENTO,  
        NRVERSAOORCAMENTO,      CDFILICONTATO,        NRCONTATO,                NRTIPOORCAMENTO,  
        NRPARCTRANSPORTADORA,   DTREFORCAMENTO,       CDPRECBASESERV,           CDREDUCONT,  
        IDFATURAORCA,           CDMODPGTO,            NRPARCINTERLOCUTOR,       NRGRUPOFATURA,  
        DSREFERENCIAORCA,       IDTRANSPORTADORA,     QTDIASVALIDADE,           DTVALIDADE,  
        QTDIASCONTRATO,         DTINICIOCONTRATO,     DTFIMCONTRATO,            NMPRINCIPALPARC,  
        DSEMAIL,                NMPARCINTERLOCUTOR,   NRTELEFONE,               DSOBSERVACAOORCA,  
        IDGERACONTRATO,         IDSITUACAOORCAMENTO,  VRORCAMENTO,              NRSEQORCAMENTOPAI,  
        CDSEQORCAMENTO,         NRORG,                IDATIVO,                  DTINCLUSAO,  
        DTULTATU,               NRORGINCLUSAO,        CDOPERINCLUSAO,           NRORGULTATU,  
        CDOPERULTATU,           DSINTERORCA,          NRORCAMENTOMODELO,        DTACEITEORCA,  
        NRSEQCONTATO,           NRSEQOPORT,           IDORCAFILHO,              NRORCAMENTORELAC,  
        NRDIASCARENCIA,         QTPARCELASFATU,       NRDIAVENCPARCELASFATU,    CDOPERRESPONSAVEL,
        IDASSELETRDIGITAL,      DSALTERACONTRATUAIS,  IDENVIADOCOPERRESPCONCASS
    )  
    VALUES (  
        V_NRSEQORCAMENTO,  
        V_ORCAMENTO_ORIGEM.NRPARCNEGOCIO,  
        V_ORCAMENTO_ORIGEM.CDFILIAL,  
        V_NRSEQORCAMENTO,  
        V_VERSAO,  
        V_ORCAMENTO_ORIGEM.CDFILICONTATO,  
        V_ORCAMENTO_ORIGEM.NRCONTATO,  
        V_ORCAMENTO_ORIGEM.NRTIPOORCAMENTO,  
        V_ORCAMENTO_ORIGEM.NRPARCTRANSPORTADORA,  
        SYSDATE,  
        V_ORCAMENTO_ORIGEM.CDPRECBASESERV, 
        V_ORCAMENTO_ORIGEM.CDREDUCONT,  
        V_ORCAMENTO_ORIGEM.IDFATURAORCA,  
        V_ORCAMENTO_ORIGEM.CDMODPGTO,  
        V_ORCAMENTO_ORIGEM.NRPARCINTERLOCUTOR,  
        V_ORCAMENTO_ORIGEM.NRGRUPOFATURA,  
        V_ORCAMENTO_ORIGEM.DSREFERENCIAORCA,  
        V_ORCAMENTO_ORIGEM.IDTRANSPORTADORA,  
        V_ORCAMENTO_ORIGEM.QTDIASVALIDADE,  
        V_ORCAMENTO_ORIGEM.DTVALIDADE,  
        V_ORCAMENTO_ORIGEM.QTDIASCONTRATO,  
        V_ORCAMENTO_ORIGEM.DTINICIOCONTRATO,  
        V_ORCAMENTO_ORIGEM.DTFIMCONTRATO,  
        V_ORCAMENTO_ORIGEM.NMPRINCIPALPARC,  
        V_ORCAMENTO_ORIGEM.DSEMAIL,  
        V_ORCAMENTO_ORIGEM.NMPARCINTERLOCUTOR,  
        V_ORCAMENTO_ORIGEM.NRTELEFONE,  
        V_ORCAMENTO_ORIGEM.DSOBSERVACAOORCA,  
        V_ORCAMENTO_ORIGEM.IDGERACONTRATO,  
        'ELABORACAO',  
        ROUND(V_ORCAMENTO_ORIGEM.VRORCAMENTO, 2),  
        V_NRSEQORCAMENTOPAI,  
        V_ORCAMENTO_ORIGEM.CDSEQORCAMENTO,  
        P_NRORG,  
        V_ORCAMENTO_ORIGEM.IDATIVO,  
        SYSDATE,  
        NULL,  
        P_NRORG,  
        P_CDOPERADOR,  
        NULL,  
        NULL, 
        V_ORCAMENTO_ORIGEM.DSINTERORCA,  
        V_ORCAMENTO_ORIGEM.NRORCAMENTOMODELO,  
        NULL,  
        V_ORCAMENTO_ORIGEM.NRSEQCONTATO,  
        V_ORCAMENTO_ORIGEM.NRSEQOPORT,  
        V_ORCAMENTO_ORIGEM.IDORCAFILHO,  
        V_ORCAMENTO_ORIGEM.NRORCAMENTORELAC,  
        V_ORCAMENTO_ORIGEM.NRDIASCARENCIA,  
        V_ORCAMENTO_ORIGEM.QTPARCELASFATU,  
        V_ORCAMENTO_ORIGEM.NRDIAVENCPARCELASFATU,  
        V_ORCAMENTO_ORIGEM.CDOPERRESPONSAVEL,
        V_ORCAMENTO_ORIGEM.IDASSELETRDIGITAL,
        NULL,
        V_ORCAMENTO_ORIGEM.IDENVIADOCOPERRESPCONCASS
    );
    
    CRIA_MNEMONICO(P_NRORG, 'O', V_NRSEQORCAMENTO, V_NRORCAMENTO);  
    
    IF P_TIPO = 'V' THEN

        /* Quando e versionamento, copia o valor das alteracoes contratuais. */
        UPDATE FCT_ORCAMENTO
           SET DSALTERACONTRATUAIS = V_ORCAMENTO_ORIGEM.DSALTERACONTRATUAIS
         WHERE NRSEQORCAMENTO = V_NRSEQORCAMENTO
           AND NRORG = P_NRORG; 

    END IF;

    FOR C_ESTRUT IN (SELECT NRRELACESTRUTPROP, NRESTRUTURAM, NRSEQORCAMENTO, NRITEMORCAMENTO, VRITEMRATEIO,  
                             NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, VRPERCRATEIO,  
                             IDRELACESTRUTURA  
                        FROM FCT_RELACESTRUTURAPROP  
                       WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
                         AND NRITEMORCAMENTO IS NULL  
                         AND NRORG = P_NRORG) LOOP  
        /* Gera novo cdigo de Parmetro de itens de Contrato */  
        NOVO_CODIGO_NT('FCT_RELACESTRUTURAPROP', V_NEW_NRRELACESTRUTPROP, 1, P_NRORG);  
        INSERT INTO FCT_RELACESTRUTURAPROP (NRRELACESTRUTPROP, NRESTRUTURAM, NRSEQORCAMENTO, NRITEMORCAMENTO, VRITEMRATEIO,  
                                            NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, VRPERCRATEIO,  
                                            IDRELACESTRUTURA)  
             VALUES (V_NEW_NRRELACESTRUTPROP, C_ESTRUT.NRESTRUTURAM, V_NRSEQORCAMENTO, C_ESTRUT.NRITEMORCAMENTO, ROUND(C_ESTRUT.VRITEMRATEIO, 2),  
                     P_NRORG, 'S', SYSDATE, P_NRORG, P_CDOPERADOR, ROUND(C_ESTRUT.VRPERCRATEIO, 2), C_ESTRUT.IDRELACESTRUTURA);  
    END LOOP;  
    
    FOR C_ITENS IN (  
        SELECT NRITEMORCAMENTO,       NRSEQORCAMENTO,       CDSERVORCA,             CDPRODUTO, 
               CDEMPRESA,             CDBEMATIVO,           SGUNIDADE,              SGUNIDADEADICIONAL,  
               CDPRECBASESERV,        NRITEMORCAMENTOPAI,   NRPARCTRANSPORTADORA,   NRPARCFORNECEDOR,  
               NRGRUPOFATURA,         NMITEMORCAMENTO,      NMREDUITEMORCA,         NMMNEMOITEMORCA,  
               DSQTITEMORCA,          QTITEMORCAMENTO,      DSQTITEMORCAADIC,       QTITEMORCAADIC,  
               CDTPMEDIDASERV,        QTMEDIDAORCA,         IDFATURAORCA,           CDMODPGTO,  
               VRUNITITEMORCA,        VRTOTALITEMORCA,      TXFORMULAITORCA,  
               IDTRANSPORTADORA,      QTDIASCONTRATO,       IDITEMOBRIGORCA,        IDSOMASUBITENS,  
               IDSOMANOITEMPAI,       IDSOMANOTOTALORCA,    DSAGRUPAITEMORCA,       IDIMPRESSAOORCA,  
               IDUNIDTEMPOLOCACAO,    IDPRECOLOCACAO,       QTTEMPOLOCACAO,         NRORG,  
               IDATIVO,               DTINICFATORC,         IDMULTMEDVRTOT,         IDBLOQALTORC,  
               IDADICITEMORC,         IDADICCOBRITEMORC,    VRITEMSEMDESC,          VRPERCDESCORCA,  
               IDTPDESCORCA,          NRTIPOHIERARQSERV,    NRTIPOORCAMENTO,        QTPARCELASFATU,  
               NRDIAVENCPARCELASFATU, IDELEMENTO,           CDTPMEDIDAVARIAVEL,     VRUNITITEMORCATBLPRECO,  
               VRDESCORCA,            IDMEDIDAFIXA,         QTMEDIDACALCULADA,      NMCONTRATUALITEMORCA
          FROM FCT_ITEMORCAMENTO  
         WHERE NRSEQORCAMENTO     = P_NRSEQORCAMENTO  
           AND NRORG              = P_NRORG  
           AND IDADICITEMORC      = 'N'  
           AND IDELEMENTO         IS NULL  
    ) LOOP  
        NOVO_CODIGO_NT('NRITEMORCAMENTO', V_NRITEMORCAMENTO, 1, P_NRORG);  
        INSERT INTO FCT_ITEMORCAMENTO (  
            NRITEMORCAMENTO,            NRSEQORCAMENTO,         CDSERVORCA,               CDPRODUTO,  
            CDEMPRESA,                  CDBEMATIVO,             SGUNIDADE,                SGUNIDADEADICIONAL,  
            CDPRECBASESERV,             NRITEMORCAMENTOPAI,     NRPARCTRANSPORTADORA,     NRPARCFORNECEDOR,  
            NRGRUPOFATURA,              NMITEMORCAMENTO,        NMREDUITEMORCA,           NMMNEMOITEMORCA,  
            DSQTITEMORCA,               QTITEMORCAMENTO,        DSQTITEMORCAADIC,         QTITEMORCAADIC,  
            CDTPMEDIDASERV,             QTMEDIDAORCA,           IDFATURAORCA,             CDMODPGTO,  
            VRUNITITEMORCA,             VRTOTALITEMORCA,        TXFORMULAITORCA,  
            IDTRANSPORTADORA,           QTDIASCONTRATO,         IDITEMOBRIGORCA,          IDSOMASUBITENS, 
            IDSOMANOITEMPAI,            IDSOMANOTOTALORCA,      DSAGRUPAITEMORCA,         IDIMPRESSAOORCA,  
            IDUNIDTEMPOLOCACAO,         IDPRECOLOCACAO,         QTTEMPOLOCACAO,           NRORG,  
            IDATIVO,                    DTINCLUSAO,             DTULTATU,                 NRORGINCLUSAO,  
            CDOPERINCLUSAO,             NRORGULTATU,            CDOPERULTATU,             DTINICFATORC,  
            IDMULTMEDVRTOT,             IDBLOQALTORC,           IDADICITEMORC,            IDADICCOBRITEMORC,  
            VRITEMSEMDESC,              VRPERCDESCORCA,         IDTPDESCORCA,             NRTIPOHIERARQSERV,  
            NRTIPOORCAMENTO,            QTPARCELASFATU,         NRDIAVENCPARCELASFATU,    IDELEMENTO,  
            CDTPMEDIDAVARIAVEL,         VRUNITITEMORCATBLPRECO, VRDESCORCA,               IDMEDIDAFIXA,
            QTMEDIDACALCULADA,          NMCONTRATUALITEMORCA
        )  
        VALUES (  
            V_NRITEMORCAMENTO,  
            V_NRSEQORCAMENTO,  
            C_ITENS.CDSERVORCA,  
            C_ITENS.CDPRODUTO,  
            C_ITENS.CDEMPRESA,  
            C_ITENS.CDBEMATIVO,  
            C_ITENS.SGUNIDADE,  
            C_ITENS.SGUNIDADEADICIONAL,  
            C_ITENS.CDPRECBASESERV,  
            C_ITENS.NRITEMORCAMENTOPAI,--NULL  
            C_ITENS.NRPARCTRANSPORTADORA,  
            C_ITENS.NRPARCFORNECEDOR,  
            C_ITENS.NRGRUPOFATURA,  
            C_ITENS.NMITEMORCAMENTO,  
            C_ITENS.NMREDUITEMORCA,  
            C_ITENS.NRITEMORCAMENTO,  
            C_ITENS.DSQTITEMORCA,  
            ROUND(C_ITENS.QTITEMORCAMENTO, 2),  
            C_ITENS.DSQTITEMORCAADIC,  
            C_ITENS.QTITEMORCAADIC, 
            C_ITENS.CDTPMEDIDASERV,  
            ROUND(C_ITENS.QTMEDIDAORCA, 2),  
            C_ITENS.IDFATURAORCA,  
            C_ITENS.CDMODPGTO,  
            ROUND(C_ITENS.VRUNITITEMORCA, 2),  
            ROUND(C_ITENS.VRTOTALITEMORCA, 2),  
            C_ITENS.TXFORMULAITORCA,  
            C_ITENS.IDTRANSPORTADORA,  
            C_ITENS.QTDIASCONTRATO,  
            C_ITENS.IDITEMOBRIGORCA,  
            C_ITENS.IDSOMASUBITENS,  
            C_ITENS.IDSOMANOITEMPAI,  
            C_ITENS.IDSOMANOTOTALORCA,  
            C_ITENS.DSAGRUPAITEMORCA,  
            C_ITENS.IDIMPRESSAOORCA,  
            C_ITENS.IDUNIDTEMPOLOCACAO,  
            C_ITENS.IDPRECOLOCACAO,  
            C_ITENS.QTTEMPOLOCACAO,  
            C_ITENS.NRORG,  
            C_ITENS.IDATIVO,  
            SYSDATE,  
            NULL,  
            P_NRORG,  
            P_CDOPERADOR,  
            NULL,  
            NULL,  
            C_ITENS.DTINICFATORC,  
            C_ITENS.IDMULTMEDVRTOT,  
            C_ITENS.IDBLOQALTORC,  
            C_ITENS.IDADICITEMORC, 
            C_ITENS.IDADICCOBRITEMORC,  
            ROUND(C_ITENS.VRITEMSEMDESC, 2),  
            ROUND(C_ITENS.VRPERCDESCORCA, 2),  
            C_ITENS.IDTPDESCORCA,  
            C_ITENS.NRTIPOHIERARQSERV,  
            C_ITENS.NRTIPOORCAMENTO,  
            C_ITENS.QTPARCELASFATU,  
            C_ITENS.NRDIAVENCPARCELASFATU,  
            C_ITENS.IDELEMENTO,  
            C_ITENS.CDTPMEDIDAVARIAVEL,  
            ROUND(C_ITENS.VRUNITITEMORCATBLPRECO, 2),  
            ROUND(C_ITENS.VRDESCORCA, 2),  
            C_ITENS.IDMEDIDAFIXA,
            ROUND(C_ITENS.QTMEDIDACALCULADA, 2),
            C_ITENS.NMCONTRATUALITEMORCA
        );  
        
        FOR C_ESTRUTITEM IN (SELECT NRRELACESTRUTPROP, NRESTRUTURAM, NRSEQORCAMENTO, NRITEMORCAMENTO, VRITEMRATEIO,  
                                NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, VRPERCRATEIO,  
                                IDRELACESTRUTURA  
                            FROM FCT_RELACESTRUTURAPROP  
                        WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
                            AND NRITEMORCAMENTO = C_ITENS.NRITEMORCAMENTO  
                            AND NRORG = P_NRORG) LOOP  
            /* Gera novo cdigo de Parmetro de itens de Contrato */  
            NOVO_CODIGO_NT('FCT_RELACESTRUTURAPROP', V_NEW_NRRELACESTRUTPROP, 1, P_NRORG);  
            INSERT INTO FCT_RELACESTRUTURAPROP (NRRELACESTRUTPROP, NRESTRUTURAM, NRSEQORCAMENTO, NRITEMORCAMENTO, VRITEMRATEIO,  
                                                NRORG, IDATIVO, DTINCLUSAO, NRORGINCLUSAO, CDOPERINCLUSAO, VRPERCRATEIO,  
                                                IDRELACESTRUTURA)  
                VALUES (V_NEW_NRRELACESTRUTPROP, C_ESTRUTITEM.NRESTRUTURAM, V_NRSEQORCAMENTO, V_NRITEMORCAMENTO, ROUND(C_ESTRUTITEM.VRITEMRATEIO, 2),  
                        P_NRORG, 'S', SYSDATE, P_NRORG, P_CDOPERADOR, ROUND(C_ESTRUTITEM.VRPERCRATEIO, 2), C_ESTRUTITEM.IDRELACESTRUTURA);  
        END LOOP; --C_ESTRUTITEM  
        
        FOR C_ITENS_FILHOS IN ( 
            SELECT NRITEMORCAMENTO,     NRSEQORCAMENTO,        CDSERVORCA,              CDPRODUTO,  
                   CDEMPRESA,           CDBEMATIVO,            SGUNIDADE,               SGUNIDADEADICIONAL,  
                   CDPRECBASESERV,      NRPARCTRANSPORTADORA,  NRPARCFORNECEDOR,        NRGRUPOFATURA,  
                   NMITEMORCAMENTO,     NMREDUITEMORCA,        NMMNEMOITEMORCA,         DSQTITEMORCA,  
                   QTITEMORCAMENTO,     DSQTITEMORCAADIC,      QTITEMORCAADIC,          CDTPMEDIDASERV,  
                   QTMEDIDAORCA,        IDFATURAORCA,          CDMODPGTO,               VRUNITITEMORCA,  
                   VRTOTALITEMORCA,     TXFORMULAITORCA,       IDTRANSPORTADORA,  
                   QTDIASCONTRATO,      IDITEMOBRIGORCA,       IDSOMASUBITENS,          IDSOMANOITEMPAI,  
                   IDSOMANOTOTALORCA,   DSAGRUPAITEMORCA,      IDIMPRESSAOORCA,         IDUNIDTEMPOLOCACAO,  
                   IDPRECOLOCACAO,      QTTEMPOLOCACAO,        NRORG,                   IDATIVO,  
                   DTINICFATORC,        IDMULTMEDVRTOT,        IDBLOQALTORC,            IDADICITEMORC,  
                   IDADICCOBRITEMORC,   VRITEMSEMDESC,         VRPERCDESCORCA,          IDTPDESCORCA,  
                   NRTIPOHIERARQSERV,   NRTIPOORCAMENTO,       QTPARCELASFATU,          NRDIAVENCPARCELASFATU,  
                   IDELEMENTO,          CDTPMEDIDAVARIAVEL,    VRUNITITEMORCATBLPRECO,  VRDESCORCA,  
                   IDMEDIDAFIXA,        QTMEDIDACALCULADA,     NMCONTRATUALITEMORCA,    IDAPARECEPROPOSTA
              FROM FCT_ITEMORCAMENTO  
             WHERE NRSEQORCAMENTO     = P_NRSEQORCAMENTO  
               AND NRORG              = P_NRORG  
               AND IDADICITEMORC      = 'N'  
               AND NRITEMORCAMENTOPAI = C_ITENS.NRITEMORCAMENTO  
        ) LOOP  
            NOVO_CODIGO_NT('NRITEMORCAMENTO', V_NRITEMORCAMENTO_FILHO, 1, P_NRORG);  
            INSERT INTO FCT_ITEMORCAMENTO (
                NRITEMORCAMENTO,       NRSEQORCAMENTO,         CDSERVORCA,             CDPRODUTO,  
                CDEMPRESA,             CDBEMATIVO,             SGUNIDADE,              SGUNIDADEADICIONAL,  
                CDPRECBASESERV,        NRITEMORCAMENTOPAI,     NRPARCTRANSPORTADORA,   NRPARCFORNECEDOR,  
                NRGRUPOFATURA,         NMITEMORCAMENTO,        NMREDUITEMORCA,         NMMNEMOITEMORCA,  
                DSQTITEMORCA,          QTITEMORCAMENTO,        DSQTITEMORCAADIC,       QTITEMORCAADIC,  
                CDTPMEDIDASERV,        QTMEDIDAORCA,           IDFATURAORCA,           CDMODPGTO,  
                VRUNITITEMORCA,        VRTOTALITEMORCA,        TXFORMULAITORCA, 
                IDTRANSPORTADORA,      QTDIASCONTRATO,         IDITEMOBRIGORCA,        IDSOMASUBITENS,  
                IDSOMANOITEMPAI,       IDSOMANOTOTALORCA,      DSAGRUPAITEMORCA,       IDIMPRESSAOORCA,  
                IDUNIDTEMPOLOCACAO,    IDPRECOLOCACAO,         QTTEMPOLOCACAO,         NRORG,  
                IDATIVO,               DTINCLUSAO,             DTULTATU,               NRORGINCLUSAO,  
                CDOPERINCLUSAO,        NRORGULTATU,            CDOPERULTATU,           DTINICFATORC,  
                IDMULTMEDVRTOT,        IDBLOQALTORC,           IDADICITEMORC,          IDADICCOBRITEMORC,  
                VRITEMSEMDESC,         VRPERCDESCORCA,         IDTPDESCORCA,           NRTIPOHIERARQSERV,  
                NRTIPOORCAMENTO,       QTPARCELASFATU,         NRDIAVENCPARCELASFATU,  IDELEMENTO,  
                CDTPMEDIDAVARIAVEL,    VRUNITITEMORCATBLPRECO, VRDESCORCA,             IDMEDIDAFIXA,
                QTMEDIDACALCULADA,     NMCONTRATUALITEMORCA,   IDAPARECEPROPOSTA
            )  
            VALUES (  
                V_NRITEMORCAMENTO_FILHO,  
                V_NRSEQORCAMENTO,  
                C_ITENS_FILHOS.CDSERVORCA,  
                C_ITENS_FILHOS.CDPRODUTO,  
                C_ITENS_FILHOS.CDEMPRESA,  
                C_ITENS_FILHOS.CDBEMATIVO,  
                C_ITENS_FILHOS.SGUNIDADE,  
                C_ITENS_FILHOS.SGUNIDADEADICIONAL,  
                C_ITENS_FILHOS.CDPRECBASESERV,  
                V_NRITEMORCAMENTO,  
                C_ITENS_FILHOS.NRPARCTRANSPORTADORA,  
                C_ITENS_FILHOS.NRPARCFORNECEDOR,  
                C_ITENS_FILHOS.NRGRUPOFATURA,  
                C_ITENS_FILHOS.NMITEMORCAMENTO,  
                C_ITENS_FILHOS.NMREDUITEMORCA,  
                C_ITENS_FILHOS.NRITEMORCAMENTO,  
                C_ITENS_FILHOS.DSQTITEMORCA,  
                ROUND(C_ITENS_FILHOS.QTITEMORCAMENTO, 2),  
                C_ITENS_FILHOS.DSQTITEMORCAADIC, 
                C_ITENS_FILHOS.QTITEMORCAADIC,  
                C_ITENS_FILHOS.CDTPMEDIDASERV,  
                ROUND(C_ITENS_FILHOS.QTMEDIDAORCA, 2),  
                C_ITENS_FILHOS.IDFATURAORCA,  
                C_ITENS_FILHOS.CDMODPGTO,  
                ROUND(C_ITENS_FILHOS.VRUNITITEMORCA, 2),  
                ROUND(C_ITENS_FILHOS.VRTOTALITEMORCA, 2),  
                C_ITENS_FILHOS.TXFORMULAITORCA,  
                C_ITENS_FILHOS.IDTRANSPORTADORA,  
                C_ITENS_FILHOS.QTDIASCONTRATO,  
                C_ITENS_FILHOS.IDITEMOBRIGORCA,  
                C_ITENS_FILHOS.IDSOMASUBITENS,  
                C_ITENS_FILHOS.IDSOMANOITEMPAI,  
                C_ITENS_FILHOS.IDSOMANOTOTALORCA,  
                C_ITENS_FILHOS.DSAGRUPAITEMORCA,  
                C_ITENS_FILHOS.IDIMPRESSAOORCA,  
                C_ITENS_FILHOS.IDUNIDTEMPOLOCACAO,  
                C_ITENS_FILHOS.IDPRECOLOCACAO,  
                C_ITENS_FILHOS.QTTEMPOLOCACAO,  
                C_ITENS_FILHOS.NRORG,  
                C_ITENS_FILHOS.IDATIVO,  
                SYSDATE,  
                NULL,  
                P_NRORG,  
                P_CDOPERADOR,  
                NULL,  
                NULL,  
                C_ITENS_FILHOS.DTINICFATORC,  
                C_ITENS_FILHOS.IDMULTMEDVRTOT,  
                C_ITENS_FILHOS.IDBLOQALTORC, 
                C_ITENS_FILHOS.IDADICITEMORC,  
                C_ITENS_FILHOS.IDADICCOBRITEMORC,  
                ROUND(C_ITENS_FILHOS.VRITEMSEMDESC, 2),  
                ROUND(C_ITENS_FILHOS.VRPERCDESCORCA, 2),  
                C_ITENS_FILHOS.IDTPDESCORCA,  
                C_ITENS_FILHOS.NRTIPOHIERARQSERV,  
                C_ITENS_FILHOS.NRTIPOORCAMENTO,  
                C_ITENS_FILHOS.QTPARCELASFATU,  
                C_ITENS_FILHOS.NRDIAVENCPARCELASFATU,  
                C_ITENS_FILHOS.IDELEMENTO,  
                C_ITENS_FILHOS.CDTPMEDIDAVARIAVEL,  
                ROUND(C_ITENS_FILHOS.VRUNITITEMORCATBLPRECO, 2),  
                ROUND(C_ITENS_FILHOS.VRDESCORCA, 2),  
                C_ITENS_FILHOS.IDMEDIDAFIXA ,
                ROUND(C_ITENS_FILHOS.QTMEDIDACALCULADA, 2),
                C_ITENS_FILHOS.NMCONTRATUALITEMORCA,
                C_ITENS_FILHOS.IDAPARECEPROPOSTA
            );  
        END LOOP; --C_ITENS_FILHOS  
      
        FOR C_ADICIONAIS IN (  
            SELECT NRITEMORCAMENTO,     NRSEQORCAMENTO,        CDSERVORCA,        CDPRODUTO,  
                   CDEMPRESA,           CDBEMATIVO,            SGUNIDADE,         SGUNIDADEADICIONAL,  
                   CDPRECBASESERV,      NRPARCTRANSPORTADORA,  NRPARCFORNECEDOR,  NRGRUPOFATURA,  
                   NMITEMORCAMENTO,     NMREDUITEMORCA,        NMMNEMOITEMORCA,   DSQTITEMORCA,  
                   QTITEMORCAMENTO,     DSQTITEMORCAADIC,      QTITEMORCAADIC,    CDTPMEDIDASERV,  
                   QTMEDIDAORCA,        IDFATURAORCA,          CDMODPGTO,         VRUNITITEMORCA,  
                   VRTOTALITEMORCA,     TXFORMULAITORCA,       IDTRANSPORTADORA,  
                   QTDIASCONTRATO,      IDITEMOBRIGORCA,       IDSOMASUBITENS,    IDSOMANOITEMPAI,  
                   IDSOMANOTOTALORCA,   DSAGRUPAITEMORCA,      IDIMPRESSAOORCA,   IDUNIDTEMPOLOCACAO,  
                   IDPRECOLOCACAO,      QTTEMPOLOCACAO,        NRORG,             IDATIVO,  
                   DTINICFATORC,        IDMULTMEDVRTOT,        IDBLOQALTORC,      IDADICITEMORC,  
                   IDADICCOBRITEMORC,   VRITEMSEMDESC,         VRPERCDESCORCA,    IDTPDESCORCA,  
                   NRTIPOHIERARQSERV,   NRTIPOORCAMENTO,       QTPARCELASFATU,    NRDIAVENCPARCELASFATU, 
                   IDELEMENTO,          CDTPMEDIDAVARIAVEL,    VRUNITITEMORCATBLPRECO, VRDESCORCA,  
                   IDMEDIDAFIXA,        QTMEDIDACALCULADA,     NMCONTRATUALITEMORCA
              FROM FCT_ITEMORCAMENTO  
             WHERE NRSEQORCAMENTO     = P_NRSEQORCAMENTO  
               AND NRORG              = P_NRORG  
               AND IDADICITEMORC      = 'S'  
               AND NRITEMORCAMENTOPAI = C_ITENS.NRITEMORCAMENTO  
        ) LOOP  
            NOVO_CODIGO_NT('NRITEMORCAMENTO', V_NRITEMORCAMENTO_AD, 1, P_NRORG);  
            INSERT INTO FCT_ITEMORCAMENTO (  
                NRITEMORCAMENTO,       NRSEQORCAMENTO,         CDSERVORCA,             CDPRODUTO,  
                CDEMPRESA,             CDBEMATIVO,             SGUNIDADE,              SGUNIDADEADICIONAL,  
                CDPRECBASESERV,        NRITEMORCAMENTOPAI,     NRPARCTRANSPORTADORA,   NRPARCFORNECEDOR,  
                NRGRUPOFATURA,         NMITEMORCAMENTO,        NMREDUITEMORCA,         NMMNEMOITEMORCA,  
                DSQTITEMORCA,          QTITEMORCAMENTO,        DSQTITEMORCAADIC,       QTITEMORCAADIC,  
                CDTPMEDIDASERV,        QTMEDIDAORCA,           IDFATURAORCA,           CDMODPGTO,  
                VRUNITITEMORCA,        VRTOTALITEMORCA,        TXFORMULAITORCA,  
                IDTRANSPORTADORA,      QTDIASCONTRATO,         IDITEMOBRIGORCA,        IDSOMASUBITENS,  
                IDSOMANOITEMPAI,       IDSOMANOTOTALORCA,      DSAGRUPAITEMORCA,       IDIMPRESSAOORCA,  
                IDUNIDTEMPOLOCACAO,    IDPRECOLOCACAO,         QTTEMPOLOCACAO,         NRORG,  
                IDATIVO,               DTINCLUSAO,             DTULTATU,               NRORGINCLUSAO,  
                CDOPERINCLUSAO,        NRORGULTATU,            CDOPERULTATU,           DTINICFATORC,  
                IDMULTMEDVRTOT,        IDBLOQALTORC,           IDADICITEMORC,          IDADICCOBRITEMORC,  
                VRITEMSEMDESC,         VRPERCDESCORCA,         IDTPDESCORCA,           NRTIPOHIERARQSERV,  
                NRTIPOORCAMENTO,       QTPARCELASFATU,         NRDIAVENCPARCELASFATU,  IDELEMENTO,  
                CDTPMEDIDAVARIAVEL,    VRUNITITEMORCATBLPRECO, VRDESCORCA,             IDMEDIDAFIXA,
                QTMEDIDACALCULADA,     NMCONTRATUALITEMORCA
            )  
            VALUES (  
                V_NRITEMORCAMENTO_AD,  
                V_NRSEQORCAMENTO, 
                C_ADICIONAIS.CDSERVORCA,  
                C_ADICIONAIS.CDPRODUTO,  
                C_ADICIONAIS.CDEMPRESA,  
                C_ADICIONAIS.CDBEMATIVO,  
                C_ADICIONAIS.SGUNIDADE,  
                C_ADICIONAIS.SGUNIDADEADICIONAL,  
                C_ADICIONAIS.CDPRECBASESERV,  
                V_NRITEMORCAMENTO,  
                C_ADICIONAIS.NRPARCTRANSPORTADORA,  
                C_ADICIONAIS.NRPARCFORNECEDOR,  
                C_ADICIONAIS.NRGRUPOFATURA,  
                C_ADICIONAIS.NMITEMORCAMENTO,  
                C_ADICIONAIS.NMREDUITEMORCA,  
                C_ADICIONAIS.NRITEMORCAMENTO,  
                C_ADICIONAIS.DSQTITEMORCA,  
                ROUND(C_ADICIONAIS.QTITEMORCAMENTO, 2),  
                C_ADICIONAIS.DSQTITEMORCAADIC,  
                C_ADICIONAIS.QTITEMORCAADIC,  
                C_ADICIONAIS.CDTPMEDIDASERV,  
                ROUND(C_ADICIONAIS.QTMEDIDAORCA, 2),  
                C_ADICIONAIS.IDFATURAORCA,  
                C_ADICIONAIS.CDMODPGTO,  
                ROUND(C_ADICIONAIS.VRUNITITEMORCA, 2),  
                ROUND(C_ADICIONAIS.VRTOTALITEMORCA, 2),  
                C_ADICIONAIS.TXFORMULAITORCA,  
                C_ADICIONAIS.IDTRANSPORTADORA,  
                C_ADICIONAIS.QTDIASCONTRATO,  
                C_ADICIONAIS.IDITEMOBRIGORCA,  
                C_ADICIONAIS.IDSOMASUBITENS,  
                C_ADICIONAIS.IDSOMANOITEMPAI, 
                C_ADICIONAIS.IDSOMANOTOTALORCA,  
                C_ADICIONAIS.DSAGRUPAITEMORCA,  
                C_ADICIONAIS.IDIMPRESSAOORCA,  
                C_ADICIONAIS.IDUNIDTEMPOLOCACAO,  
                C_ADICIONAIS.IDPRECOLOCACAO,  
                C_ADICIONAIS.QTTEMPOLOCACAO,  
                C_ADICIONAIS.NRORG,  
                C_ADICIONAIS.IDATIVO,  
                SYSDATE,  
                NULL,  
                P_NRORG,  
                P_CDOPERADOR,  
                NULL,  
                NULL,  
                C_ADICIONAIS.DTINICFATORC,  
                C_ADICIONAIS.IDMULTMEDVRTOT,  
                C_ADICIONAIS.IDBLOQALTORC,  
                C_ADICIONAIS.IDADICITEMORC,  
                C_ADICIONAIS.IDADICCOBRITEMORC,  
                ROUND(C_ADICIONAIS.VRITEMSEMDESC, 2),  
                ROUND(C_ADICIONAIS.VRPERCDESCORCA, 2),  
                C_ADICIONAIS.IDTPDESCORCA,  
                C_ADICIONAIS.NRTIPOHIERARQSERV,  
                C_ADICIONAIS.NRTIPOORCAMENTO,  
                C_ADICIONAIS.QTPARCELASFATU,  
                C_ADICIONAIS.NRDIAVENCPARCELASFATU,  
                C_ADICIONAIS.IDELEMENTO,  
                C_ADICIONAIS.CDTPMEDIDAVARIAVEL,  
                ROUND(C_ADICIONAIS.VRUNITITEMORCATBLPRECO, 2),  
                ROUND(C_ADICIONAIS.VRDESCORCA, 2), 
                C_ADICIONAIS.IDMEDIDAFIXA,
                ROUND(C_ADICIONAIS.QTMEDIDACALCULADA, 2),
                C_ADICIONAIS.NMCONTRATUALITEMORCA
            );  
        END LOOP; --ADICIONAIS  
        
        FOR C_FORMACOES IN (  
            SELECT NRRELACFORMACAOPROP,  
                   NRFORMPRECOSERVICO,  
                   NRITEMORCAMENTO,  
                   IDATIVO  
              FROM FCT_RELACFORMACAOPROP  
             WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO  
               AND NRITEMORCAMENTO = C_ITENS.NRITEMORCAMENTO  
               AND NRORG           = P_NRORG  
        ) LOOP  
            
            NOVO_CODIGO_NT('FCT_RELACFORMACAOPROP', V_NRRELACFORMACAOPROP, 1, P_NRORG);  
            INSERT INTO FCT_RELACFORMACAOPROP (  
                NRRELACFORMACAOPROP,    NRFORMPRECOSERVICO,     NRSEQORCAMENTO,  
                NRITEMORCAMENTO,        NRORG,                  IDATIVO,  
                DTINCLUSAO,             NRORGINCLUSAO,          CDOPERINCLUSAO  
            )  
            VALUES (  
                V_NRRELACFORMACAOPROP,    C_FORMACOES.NRFORMPRECOSERVICO,     V_NRSEQORCAMENTO,  
                V_NRITEMORCAMENTO,        P_NRORG,                            C_FORMACOES.IDATIVO,  
                SYSDATE,                  P_NRORG,                            P_CDOPERADOR  
            );  
            
            FOR C_FORMAUX IN(
                SELECT NRCALCFORMPRECSERV, NRRELACFORMACAOPROP
                FROM FCT_CALCFORMPRECSERV_ITPRO
                WHERE NRSEQORCAMENTO       = P_NRSEQORCAMENTO
                    AND NRITEMORCAMENTO    = C_ITENS.NRITEMORCAMENTO
                    AND NRFORMPRECOSERVICO = C_FORMACOES.NRFORMPRECOSERVICO
                    AND NRORG              = P_NRORG
                    AND NRCALCFORMPRECSERVPAI IS NULL
            ) LOOP
                FCT_COPIA_FORM_PRECO_ITPROP(C_FORMACOES.NRFORMPRECOSERVICO, P_NRORG, P_CDOPERADOR, V_NRSEQORCAMENTO, V_NRITEMORCAMENTO, C_FORMAUX.NRCALCFORMPRECSERV, C_FORMAUX.NRRELACFORMACAOPROP, V_IDTPCOPIA, C_ITENS.NRITEMORCAMENTO);
            END LOOP;
        END LOOP; --FORMACOES  
        
        /*FOR C_PARAM_FAT IN (  
            SELECT NRPARAMFATITPROP,  
                   NRGRUPOFATURA,  
                   CDPRODFATURA,  
                   CDFILIALFATURA, 
                   NRPARCFATURA,  
                   IDTPFATURA,  
                   QTPARCELASFATU,  
                   IDATIVO,  
                   NRORG  
              FROM FCT_PARAMFATITPROP  
             WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO  
               AND NRITEMORCAMENTO = C_ITENS.NRITEMORCAMENTO  
               AND NRORG           = P_NRORG  
        ) LOOP  
            NOVO_CODIGO_NT(FCT_PARAMFATITPROP, V_NRPARAMFATITPROP, 1, P_NRORG);  
            INSERT INTO FCT_PARAMFATITPROP (  
                    NRPARAMFATITPROP,    NRITEMORCAMENTO,    NRSEQORCAMENTO,  
                    NRGRUPOFATURA,       CDPRODFATURA,       CDFILIALFATURA,  
                    NRPARCFATURA,        IDTPFATURA,         QTPARCELASFATU,  
                    IDATIVO,             NRORG,              NRORGINCLUSAO,  
                    CDOPERINCLUSAO  
                )  
                VALUES (  
                    V_NRPARAMFATITPROP,         V_NRITEMORCAMENTO,         V_NRSEQORCAMENTO,  
                    C_PARAM_FAT.NRGRUPOFATURA,  C_PARAM_FAT.CDPRODFATURA,  C_PARAM_FAT.CDFILIALFATURA,  
                    C_PARAM_FAT.NRPARCFATURA,   C_PARAM_FAT.IDTPFATURA,    C_PARAM_FAT.QTPARCELASFATU,  
                    C_PARAM_FAT.IDATIVO,        P_NRORG,                   P_NRORG,  
                    P_CDOPERADOR  
                );  
        END LOOP; --C_PARAM_FAT*/  
    END LOOP; --ITENS  
    
    FOR C_VENDEDOR IN (  
        SELECT NRPARCVENDEDOR,  NRPARCGERENTE,  VRPEPARTICIPAVENDA,  
               IDVENPRIORCA,    NRORG,          IDATIVO 
          FROM FCT_VENDEDORORCA  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
           AND NRORG          = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_NT('NRVENDEDORORCA', V_NRVENDEDORORCA, 1, P_NRORG);  
        INSERT INTO FCT_VENDEDORORCA (  
            NRVENDEDORORCA,        NRSEQORCAMENTO,   NRPARCVENDEDOR,     NRPARCGERENTE,  
            VRPEPARTICIPAVENDA,    IDVENPRIORCA,     NRORG,              IDATIVO,  
            DTINCLUSAO,            DTULTATU,         NRORGINCLUSAO,      CDOPERINCLUSAO,  
            NRORGULTATU,           CDOPERULTATU  
        )  
        VALUES (  
            V_NRVENDEDORORCA,                        V_NRSEQORCAMENTO,         C_VENDEDOR.NRPARCVENDEDOR,  C_VENDEDOR.NRPARCGERENTE,  
            ROUND(C_VENDEDOR.VRPEPARTICIPAVENDA, 2), C_VENDEDOR.IDVENPRIORCA,  C_VENDEDOR.NRORG,           C_VENDEDOR.IDATIVO,  
            SYSDATE,                                 NULL,                     P_NRORG,                    P_CDOPERADOR,  
            NULL,                                    NULL  
        );  
    END LOOP; --VENDEDOR  
    FOR C_ENDERECO IN (  
        SELECT NRENDERECOORCA,  NRSEQORCAMENTO,    CDTIPOENDERECO,    CDPAIS,  
               SGESTADO,        CDMUNICIPIO,       CDBAIRRO,          CDLOGRADOURO,  
               DSENDERECO,      NRIMOVELENDERECO,  NMBAIRROENDERECO,  DSCOMPLEENDERECO,  
               NRCEPENDERECO,   DSREFERENCIAENDE,  NRORG,             IDATIVO  
          FROM FCT_ENDERECOORCA  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
           AND NRORG          = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_NT('NRENDERECOORCA', V_NRENDERECOORCA, 1, P_NRORG);  
        INSERT INTO FCT_ENDERECOORCA (  
            NRENDERECOORCA,    NRSEQORCAMENTO,       CDTIPOENDERECO,       CDPAIS, 
            SGESTADO,          CDMUNICIPIO,          CDBAIRRO,             CDLOGRADOURO,  
            DSENDERECO,        NRIMOVELENDERECO,     NMBAIRROENDERECO,     DSCOMPLEENDERECO,  
            NRCEPENDERECO,     DSREFERENCIAENDE,     NRORG,                IDATIVO,  
            DTINCLUSAO,        DTULTATU,             NRORGINCLUSAO,        CDOPERINCLUSAO,  
            NRORGULTATU,       CDOPERULTATU  
        )  
        VALUES (  
            V_NRENDERECOORCA,         V_NRSEQORCAMENTO,            C_ENDERECO.CDTIPOENDERECO,   C_ENDERECO.CDPAIS,  
            C_ENDERECO.SGESTADO,      C_ENDERECO.CDMUNICIPIO,      C_ENDERECO.CDBAIRRO,         C_ENDERECO.CDLOGRADOURO,  
            C_ENDERECO.DSENDERECO,    C_ENDERECO.NRIMOVELENDERECO, C_ENDERECO.NMBAIRROENDERECO, C_ENDERECO.DSCOMPLEENDERECO,  
            C_ENDERECO.NRCEPENDERECO, C_ENDERECO.DSREFERENCIAENDE, C_ENDERECO.NRORG,            C_ENDERECO.IDATIVO,  
            SYSDATE,                  NULL,                        P_NRORG,                     P_CDOPERADOR,  
            NULL,                     NULL  
        );  
    END LOOP; --ENDERECO  

    FOR C_ESCOPOORC IN(
        SELECT ESCMODDOC.NRRELACESCOPOMODELO,
          ESCOPO.NRTIPOORCAMENTO,
          ESCOPO.NRORG
        FROM FCT_RELACESCOPOMODELO ESCMODDOC
        JOIN FCT_RELACESCOPOPROPOSTA ESCOPO
          ON ESCMODDOC.NRTIPOORCAMENTO = ESCOPO.NRTIPOORCAMENTO
          AND ESCMODDOC.NRORG          = ESCOPO.NRORG
        WHERE ESCMODDOC.NRORCAMENTOMODELO = V_ORCAMENTO_ORIGEM.NRORCAMENTOMODELO
          AND ESCMODDOC.NRORG             = V_ORCAMENTO_ORIGEM.NRORG
          AND ESCOPO.NRSEQORCAMENTO       = V_ORCAMENTO_ORIGEM.NRSEQORCAMENTO
    ) LOOP
    
        SELECT COUNT(ORCDOC.NRSEQMODDOCFCT)
        INTO V_COUNTDOCRENEGOCIACAO
        FROM FCT_ORCAESCOPODOC ORCDOC
        JOIN FCT_MODELODOC DOC
          ON ORCDOC.NRSEQMODDOCFCT = DOC.NRSEQMODDOCFCT
          AND ORCDOC.NRORG         = DOC.NRORG
        WHERE ORCDOC.NRORG               = C_ESCOPOORC.NRORG
          AND ORCDOC.NRRELACESCOPOMODELO = C_ESCOPOORC.NRRELACESCOPOMODELO
          AND DOC.IDDOCRENEGOCIACAO = 'S';
    
        IF P_TIPO = 'C' OR V_COUNTDOCRENEGOCIACAO = 0 THEN
            FOR C_DOCUMENTO IN (  
                SELECT NRSEQORCADOC,     NRSEQORCAMENTO,   NRSEQMODDOCFCT,  IDIDIOMA,  
                       TXMODELOORCADOC,  IDPADRAOORCADOC,  NRORG,           IDATIVO,  
                       NMARQUIVO,        DSCAMINHOARQ,     DSTIPO,          VRTAMANHO,  
                       NRTIPOORCAMENTO,  IDSITUACAOORCAMENTO, IDDOCALTERADO  
                  FROM FCT_ORCAMENTODOC  
                 WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO  
                   AND NRORG           = P_NRORG  
                   AND NRTIPOORCAMENTO = C_ESCOPOORC.NRTIPOORCAMENTO
            ) LOOP  
            
                NOVO_CODIGO_NT('NRSEQORCADOC', V_NRSEQORCADOC, 1, P_NRORG);  
                INSERT INTO FCT_ORCAMENTODOC (  
                    NRSEQORCADOC,     NRSEQORCAMENTO,   NRSEQMODDOCFCT,  IDIDIOMA,  
                    TXMODELOORCADOC,  IDPADRAOORCADOC,  NRORG,           IDATIVO,  
                    DTINCLUSAO,       DTULTATU,         NRORGINCLUSAO,   CDOPERINCLUSAO,  
                    NRORGULTATU,      CDOPERULTATU,     NMARQUIVO,       DSCAMINHOARQ, 
                    DSTIPO,           VRTAMANHO,        NRTIPOORCAMENTO, IDSITUACAOORCAMENTO,  
                    IDDOCALTERADO  
                )   VALUES (  
                    V_NRSEQORCADOC,              V_NRSEQORCAMENTO,            C_DOCUMENTO.NRSEQMODDOCFCT,  C_DOCUMENTO.IDIDIOMA,  
                    C_DOCUMENTO.TXMODELOORCADOC, C_DOCUMENTO.IDPADRAOORCADOC, C_DOCUMENTO.NRORG,           C_DOCUMENTO.IDATIVO,  
                    SYSDATE,                     NULL,                        P_NRORG,                     P_CDOPERADOR,  
                    NULL,                        NULL,                        C_DOCUMENTO.NMARQUIVO,       C_DOCUMENTO.DSCAMINHOARQ,  
                    C_DOCUMENTO.DSTIPO,          C_DOCUMENTO.VRTAMANHO,       C_DOCUMENTO.NRTIPOORCAMENTO, C_DOCUMENTO.IDSITUACAOORCAMENTO,  
                    C_DOCUMENTO.IDDOCALTERADO  
                );  
            END LOOP; --DOCUMENTO  
        ELSE
            FOR C_DOCUMENTO IN (  
                SELECT ESCOPODOC.NRSEQMODDOCFCT,
                    DOC.IDIDIOMA,
                    DOC.NMARQUIVO,
                    DOC.DSCAMINHOARQ,
                    DOC.DSTIPO,
                    DOC.VRTAMANHO,
                    REL.NRTIPOORCAMENTO,
                    ESCOPODOC.IDSITUACAOORCAMENTO,
                    NULL AS TXMODELOORCADOC,  
                    NULL AS IDPADRAOORCADOC,  
                    'N' AS IDDOCALTERADO
                FROM FCT_ORCAESCOPODOC ESCOPODOC
                INNER JOIN FCT_MODELODOC DOC
                    ON ESCOPODOC.NRSEQMODDOCFCT = DOC.NRSEQMODDOCFCT
                    AND ESCOPODOC.NRORG         = DOC.NRORG
                INNER JOIN FCT_RELACESCOPOMODELO REL
                    ON REL.NRRELACESCOPOMODELO = ESCOPODOC.NRRELACESCOPOMODELO
                    AND REL.NRORG              = ESCOPODOC.NRORG
               WHERE REL.NRORCAMENTOMODELO            = V_ORCAMENTO_ORIGEM.NRORCAMENTOMODELO
                    AND REL.NRORG                     = V_ORCAMENTO_ORIGEM.NRORG
                    AND REL.NRRELACESCOPOMODELO = C_ESCOPOORC.NRRELACESCOPOMODELO
                    AND DOC.IDDOCRENEGOCIACAO = 'S' 
            ) LOOP  
            
                NOVO_CODIGO_NT('NRSEQORCADOC', V_NRSEQORCADOC, 1, P_NRORG);  
                INSERT INTO FCT_ORCAMENTODOC (  
                    NRSEQORCADOC,     NRSEQORCAMENTO,   NRSEQMODDOCFCT,  IDIDIOMA,  
                    TXMODELOORCADOC,  IDPADRAOORCADOC,  NRORG,           IDATIVO,  
                    DTINCLUSAO,       DTULTATU,         NRORGINCLUSAO,   CDOPERINCLUSAO,  
                    NRORGULTATU,      CDOPERULTATU,     NMARQUIVO,       DSCAMINHOARQ, 
                    DSTIPO,           VRTAMANHO,        NRTIPOORCAMENTO, IDSITUACAOORCAMENTO,  
                    IDDOCALTERADO  
                )  
                VALUES (  
                    V_NRSEQORCADOC,              V_NRSEQORCAMENTO,      C_DOCUMENTO.NRSEQMODDOCFCT,  C_DOCUMENTO.IDIDIOMA,  
                    C_DOCUMENTO.TXMODELOORCADOC, 'N',                   P_NRORG,                     'S',  
                    SYSDATE,                     NULL,                  P_NRORG,                     P_CDOPERADOR,  
                    NULL,                        NULL,                  C_DOCUMENTO.NMARQUIVO,       C_DOCUMENTO.DSCAMINHOARQ,  
                    C_DOCUMENTO.DSTIPO,          C_DOCUMENTO.VRTAMANHO, C_DOCUMENTO.NRTIPOORCAMENTO, C_DOCUMENTO.IDSITUACAOORCAMENTO,  
                    C_DOCUMENTO.IDDOCALTERADO  
                );
            END LOOP;
        END IF;
    END LOOP; -- C_ESCOPODOC
    
    FOR C_ESCOPO IN (
        SELECT NRRELACESCOPOPROPOSTA,  
               NRSEQORCAMENTO,  
               NRTIPOORCAMENTO,  
               NRORG,  
               IDATIVO,  
               NRSEQMODDOCFCT,  
               CDFILIAL,
               DSALTERACONTRATUAIS
          FROM FCT_RELACESCOPOPROPOSTA  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
           AND NRORG          = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_NT('FCT_RELACESCOPOPROPOSTA', V_NRRELACESCOPOPROPOSTA, 1, P_NRORG);  
        INSERT INTO FCT_RELACESCOPOPROPOSTA (  
                NRRELACESCOPOPROPOSTA,  NRSEQORCAMENTO,      NRTIPOORCAMENTO,    NRORG,
                DTINCLUSAO,             DTULTATU,            NRORGINCLUSAO,      CDOPERINCLUSAO,
                NRORGULTATU,            CDOPERULTATU,        IDATIVO,            NRSEQMODDOCFCT,
                CDFILIAL,               DSALTERACONTRATUAIS
        )   
        VALUES (  
            V_NRRELACESCOPOPROPOSTA, V_NRSEQORCAMENTO,             C_ESCOPO.NRTIPOORCAMENTO,  C_ESCOPO.NRORG,
            SYSDATE,                 NULL,                         P_NRORG,                   P_CDOPERADOR,
            NULL,                    NULL,                         C_ESCOPO.IDATIVO,          C_ESCOPO.NRSEQMODDOCFCT,
            C_ESCOPO.CDFILIAL,       C_ESCOPO.DSALTERACONTRATUAIS
        );  
    END LOOP; --ESCOPO  
    FOR C_COMP IN (  
        SELECT NRCOMPSERVICO, NMCOMPSERVICO, NRCOMPSERVICOPAI, IDCOMPOBRIGATORIA,  
               IDESCOLHIDO,   NRORG,         IDATIVO,           CDCENTCUST 
          FROM FCT_COMPSERVORCAMENTO  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
           AND NRORG          = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_NT('FCT_COMPSERVORCAMENTO', V_NRCOMPSERVORCAMENTO, 1, P_NRORG);  
        INSERT INTO FCT_COMPSERVORCAMENTO (  
            NRCOMPSERVORCAMENTO,    NRSEQORCAMENTO,     NRCOMPSERVICO,  NMCOMPSERVICO,  
            NRCOMPSERVICOPAI,       IDCOMPOBRIGATORIA,  IDESCOLHIDO,    NRORG,  
            IDATIVO,                DTINCLUSAO,         NRORGINCLUSAO,  CDOPERINCLUSAO,
            CDCENTCUST
        )  
        VALUES (  
            V_NRCOMPSERVORCAMENTO,      V_NRSEQORCAMENTO,          C_COMP.NRCOMPSERVICO,  C_COMP.NMCOMPSERVICO,  
            C_COMP.NRCOMPSERVICOPAI,    C_COMP.IDCOMPOBRIGATORIA,  C_COMP.IDESCOLHIDO,    P_NRORG,  
            C_COMP.IDATIVO,             SYSDATE,                   P_NRORG,               P_CDOPERADOR,
            C_COMP.CDCENTCUST
        );  
    END LOOP; --C_COMP  
    FOR C_TRABSERV IN (  
        SELECT NRTRABSERVORCA,   NRSEQORCAMENTO,  NRTIPOORCAMENTO,  NRCOMPSERVICO,  
               NRITCOMPSERVICO,  IDELEMENTO,      IDELEMENTOPAI,    IDTIPOELEMENTO, 
               IDESCOLHIDO,      CDSERVORCA,      QTSERVORCA,       CDTPMEDIDASERV,  
               QTMEDSERVORCA,    VRUNITSERVORCA,  VRTOTSERVORCA,    NRORG,  
               IDATIVO,          IDSERVOBRIGCOMP, QTMEDIDAVARIAVEL, IDAPARECEPROPOSTA,
               CDCENTCUST
          FROM FCT_TRABSERVORCAMENTO  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
           AND NRORG          = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_NT('FCT_TRABSERVORCAMENTO', V_NRTRABSERVORCA, 1, P_NRORG);  
        INSERT INTO FCT_TRABSERVORCAMENTO (  
            NRTRABSERVORCA,   NRSEQORCAMENTO,    NRTIPOORCAMENTO,  NRCOMPSERVICO,  
            NRITCOMPSERVICO,  IDELEMENTO,        IDELEMENTOPAI,    IDTIPOELEMENTO,  
            IDESCOLHIDO,      CDSERVORCA,        QTSERVORCA,       CDTPMEDIDASERV,  
            QTMEDSERVORCA,    VRUNITSERVORCA,    VRTOTSERVORCA,    NRORG,  
            DTINCLUSAO,       DTULTATU,          NRORGINCLUSAO,    CDOPERINCLUSAO,  
            NRORGULTATU,      CDOPERULTATU,      IDATIVO,          IDSERVOBRIGCOMP,  
            QTMEDIDAVARIAVEL, IDAPARECEPROPOSTA, CDCENTCUST
        )  
        VALUES (  
            V_NRTRABSERVORCA,            V_NRSEQORCAMENTO,                    C_TRABSERV.NRTIPOORCAMENTO,         C_TRABSERV.NRCOMPSERVICO,  
            C_TRABSERV.NRITCOMPSERVICO,  C_TRABSERV.IDELEMENTO,               C_TRABSERV.IDELEMENTOPAI,           C_TRABSERV.IDTIPOELEMENTO,  
            C_TRABSERV.IDESCOLHIDO,      C_TRABSERV.CDSERVORCA,               C_TRABSERV.QTSERVORCA,              C_TRABSERV.CDTPMEDIDASERV,  
            C_TRABSERV.QTMEDSERVORCA,    ROUND(C_TRABSERV.VRUNITSERVORCA, 2), ROUND(C_TRABSERV.VRTOTSERVORCA, 2), C_TRABSERV.NRORG,  
            SYSDATE,                     NULL,                                P_NRORG,                            P_CDOPERADOR,  
            NULL,                        NULL,                                C_TRABSERV.IDATIVO,                 C_TRABSERV.IDSERVOBRIGCOMP,  
            C_TRABSERV.QTMEDIDAVARIAVEL, C_TRABSERV.IDAPARECEPROPOSTA,        C_TRABSERV.CDCENTCUST
        );  
    END LOOP; --C_TRABSERV  
    FOR C_MEDIDAVAR IN (  
        SELECT CDTPMEDIDAVARIAVEL,  
               QTMEDIDAVARIAVEL, 
               NRORG,  
               IDATIVO,  
               IDELEMENTORAIZ,
               NRTIPOORCAMENTO,
               CDSERVORCA,
               IDAPARECEPROPOSTA,
               QTFRANQUIA
          FROM FCT_RELACMEDIDAPROPOSTA  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
           AND NRORG          = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_NT('FCT_RELACMEDIDAPROPOSTA', V_NRRELACMEDIDAPROPOSTA, 1, P_NRORG);  
        INSERT INTO FCT_RELACMEDIDAPROPOSTA (  
            NRRELACMEDIDAPROPOSTA, NRSEQORCAMENTO,  CDTPMEDIDAVARIAVEL, QTMEDIDAVARIAVEL,  
            NRORG,                 DTINCLUSAO,      NRORGINCLUSAO,      CDOPERINCLUSAO,  
            IDATIVO,               IDELEMENTORAIZ,  NRTIPOORCAMENTO,    CDSERVORCA,
            IDAPARECEPROPOSTA,     QTFRANQUIA
        )  
        VALUES (  
            V_NRRELACMEDIDAPROPOSTA,        V_NRSEQORCAMENTO,           C_MEDIDAVAR.CDTPMEDIDAVARIAVEL, ROUND(C_MEDIDAVAR.QTMEDIDAVARIAVEL, 2),  
            P_NRORG,                        SYSDATE,                    P_NRORG,                        P_CDOPERADOR,  
            C_MEDIDAVAR.IDATIVO,            C_MEDIDAVAR.IDELEMENTORAIZ, C_MEDIDAVAR.NRTIPOORCAMENTO,    C_MEDIDAVAR.CDSERVORCA,
            C_MEDIDAVAR.IDAPARECEPROPOSTA,  C_MEDIDAVAR.QTFRANQUIA
        );  
    END LOOP; --C_MEDIDAVAR  
    FOR C_NEGOCIACAO IN (  
        SELECT NRTIPOORCAMENTO, IDTPFATURA,           VRTOTITEMCOMDESC, VRDESCITEM,  
               CDFILIALFATURA,  NRPARCFATURA,         CDTIPOOPERFATURA, CDSERIENF,  
               CDEMPRESA,       CDINSCESTA,           CDINSCMUNI,       VRTOTITEM,  
               VRPERCDESCITEM,  NRNEGOCIACAOPROPOSTA, IDTPDESCONTO,     IDPREVCOBRFUT,
               CDTRIBPRODPADR
        FROM FCT_NEGOCIACAOPROPOSTA  
        WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO  
            AND NRORG        = P_NRORG  
    ) LOOP  
        NOVO_CODIGO_SC('FCT_NEGOCIACAOPROPOSTA', V_NRNEGOCIACAOPROPOSTA, 1, P_NRORG);  
        INSERT INTO FCT_NEGOCIACAOPROPOSTA ( 
            NRNEGOCIACAOPROPOSTA, NRSEQORCAMENTO, NRTIPOORCAMENTO,  IDTPFATURA,  
            CDFILIALFATURA,       NRPARCFATURA,   CDTIPOOPERFATURA, CDSERIENF,  
            CDEMPRESA,            CDINSCESTA,     CDINSCMUNI,       VRTOTITEM,  
            VRPERCDESCITEM,       VRDESCITEM,     VRTOTITEMCOMDESC, IDATIVO,  
            NRORG,                DTINCLUSAO,     NRORGINCLUSAO,    CDOPERINCLUSAO,  
            DTULTATU,             NRORGULTATU,    CDOPERULTATU,     IDTPDESCONTO,
            IDPREVCOBRFUT,        CDTRIBPRODPADR
        ) VALUES (  
            V_NRNEGOCIACAOPROPOSTA,                P_NRSEQORCAMENTO_GERADO,             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), 'S',  
            P_NRORG,                               SYSDATE,                             P_NRORG,                                 P_CDOPERADOR,  
            NULL,                                  NULL,                                NULL,                                    C_NEGOCIACAO.IDTPDESCONTO,
            C_NEGOCIACAO.IDPREVCOBRFUT,            C_NEGOCIACAO.CDTRIBPRODPADR
        );  
        
        FOR C_ITNEGOCIACAO IN (  
            SELECT ITEM.NRITEMORCAMENTO, ITNEGO.VRPERCDESCITEM, ITNEGO.NRPARCFATURA, ITNEGO.CDPRODFATURA,  
                ITEM.NRITEMORCAMENTOPAI, ITNEGO.VRTOTITEM,      ITNEGO.CDSERVORCA,   ITNEGO.VRDESCITEM,  
                ITNEGO.VRTOTITEMCOMDESC, ITNEGO.IDTPDESCONTO
            FROM FCT_ITNEGOCIACAOPROPOSTA ITNEGO  
            JOIN FCT_ITEMORCAMENTO ITEM  
                ON ITNEGO.NRITEMORCAMENTO = TO_NUMBER(ITEM.NMMNEMOITEMORCA)  
                AND ITNEGO.NRORG          = ITEM.NRORG  
            WHERE ITNEGO.NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA  
                AND ITNEGO.NRORG              = P_NRORG  
        ) LOOP  
        
            NOVO_CODIGO_SC('FCT_ITNEGOCIACAOPROPOSTA', V_NRITNEGOCIACAOPROPOSTA, 1, P_NRORG);  
            INSERT INTO FCT_ITNEGOCIACAOPROPOSTA(  
                NRITNEGOCIACAOPROPOSTA, NRNEGOCIACAOPROPOSTA, NRITEMORCAMENTO, VRPERCDESCITEM,  
                NRITEMORCAMENTOPAI,     VRTOTITEM,            CDSERVORCA,      VRDESCITEM,  
                VRTOTITEMCOMDESC,       IDATIVO,              CDPRODFATURA,    NRPARCFATURA, 
                NRORGINCLUSAO,          DTULTATU,             NRORGULTATU,     CDOPERINCLUSAO,  
                NRORG,                  DTINCLUSAO,           IDTPDESCONTO
            ) VALUES (  
                V_NRITNEGOCIACAOPROPOSTA,                  V_NRNEGOCIACAOPROPOSTA,             C_ITNEGOCIACAO.NRITEMORCAMENTO, ROUND(C_ITNEGOCIACAO.VRPERCDESCITEM, 2),  
                C_ITNEGOCIACAO.NRITEMORCAMENTOPAI,         ROUND(C_ITNEGOCIACAO.VRTOTITEM, 2), C_ITNEGOCIACAO.CDSERVORCA,      ROUND(C_ITNEGOCIACAO.VRDESCITEM, 2),  
                ROUND(C_ITNEGOCIACAO.VRTOTITEMCOMDESC, 2), 'S',                                C_ITNEGOCIACAO.CDPRODFATURA,    C_ITNEGOCIACAO.NRPARCFATURA,  
                P_NRORG,                                   NULL,                               NULL,                           P_CDOPERADOR,  
                P_NRORG,                                   SYSDATE,                            C_ITNEGOCIACAO.IDTPDESCONTO  
            );  
            
        END LOOP; -- C_ITNEGOCIACAO  
        
        FOR C_PARCENEGO IN (  
            SELECT NRNEGOCIACAOPROPOSTA, QTDIASFATURAMENTO,  
                   NRDIAVENCIMENTO,      VRPARCELA  
            FROM FCT_PARCELANEGOPROP  
            WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA  
                AND NRORG              = P_NRORG  
        ) LOOP  
        
            NOVO_CODIGO_SC('FCT_PARCELANEGOPROP', V_NRPARCELANEGOPROP, 1, P_NRORG);  
            INSERT INTO FCT_PARCELANEGOPROP (  
                NRPARCELANEGOPROP, NRNEGOCIACAOPROPOSTA, QTDIASFATURAMENTO, NRDIAVENCIMENTO,  
                VRPARCELA,         IDATIVO,              NRORG,             DTINCLUSAO,  
                NRORGINCLUSAO,     CDOPERINCLUSAO,       DTULTATU,          NRORGULTATU,  
                CDOPERULTATU  
            ) VALUES (  
                V_NRPARCELANEGOPROP,         V_NRNEGOCIACAOPROPOSTA,          C_PARCENEGO.QTDIASFATURAMENTO,  
                C_PARCENEGO.NRDIAVENCIMENTO, ROUND(C_PARCENEGO.VRPARCELA, 2), 'S',  
                P_NRORG,                     SYSDATE,                         P_NRORG,  
                P_CDOPERADOR,                NULL,                            NULL,  
                NULL  
            ); 
            
        END LOOP; -- C_PARCENEGO
        
        FOR C_COMPETENCIA IN (  
            SELECT NRDIACOMPETINI, QTDIASFATUVENC, IDMESCALCVENC,  
                   NRDIACOMPETFIN, IDMESCOMPETINI, IDMESCOMPETFIN,  
                   QTDIASAPURACAO, IDTPCALCVENC,   NRDIACALCVENC  
            FROM FCT_COMPETENCIANEGOPROP  
            WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA  
                AND NRORG              = P_NRORG  
        ) LOOP  
        
            NOVO_CODIGO_SC('FCT_COMPETENCIANEGOPROP', V_NRCOMPETENCIANEGOPROP, 1, P_NRORG);  
            INSERT INTO FCT_COMPETENCIANEGOPROP (  
                NRCOMPETENCIANEGOPROP, NRNEGOCIACAOPROPOSTA, NRDIACOMPETINI,  
                NRDIACOMPETFIN,        IDMESCOMPETINI,       IDMESCOMPETFIN,  
                QTDIASAPURACAO,        IDTPCALCVENC,         NRDIACALCVENC,  
                IDMESCALCVENC,         QTDIASFATUVENC,       IDATIVO,  
                NRORG,                 DTINCLUSAO,           NRORGINCLUSAO,  
                CDOPERINCLUSAO,        DTULTATU,             NRORGULTATU,  
                CDOPERULTATU  
            ) VALUES (  
                V_NRCOMPETENCIANEGOPROP,      V_NRNEGOCIACAOPROPOSTA,       C_COMPETENCIA.NRDIACOMPETINI,  
                C_COMPETENCIA.NRDIACOMPETFIN, C_COMPETENCIA.IDMESCOMPETINI, C_COMPETENCIA.IDMESCOMPETFIN,  
                C_COMPETENCIA.QTDIASAPURACAO, C_COMPETENCIA.IDTPCALCVENC,   C_COMPETENCIA.NRDIACALCVENC,  
                C_COMPETENCIA.IDMESCALCVENC,  C_COMPETENCIA.QTDIASFATUVENC, 'S',  
                P_NRORG,                      SYSDATE,                      P_NRORG,  
                P_CDOPERADOR,                 NULL,                         NULL,  
                NULL  
            );
            
        END LOOP; -- C_COMPETENCIA  
        
        FOR C_DESCPERIODO IN (  
            SELECT NRNEGOCIACAOPROPOSTA, VRPERCDESCITEM, VRDESCITEM, 
                   VRTOTITEMCOMDESC,     QTMESESDESC,    DTFINALVALIDADEDESC,  
                   NRORDEMAPLICADESC,    IDTPDESCONTO
            FROM FCT_DESCPERIODONEGOPROP  
            WHERE NRNEGOCIACAOPROPOSTA = C_NEGOCIACAO.NRNEGOCIACAOPROPOSTA  
                AND NRORG              = P_NRORG  
        ) LOOP  
        
            NOVO_CODIGO_SC('FCT_DESCPERIODONEGOPROP', V_NRDESCPERIODONEGOPROP, 1, P_NRORG);  
            INSERT INTO FCT_DESCPERIODONEGOPROP (  
                NRDESCPERIODONEGOPROP, NRNEGOCIACAOPROPOSTA, VRPERCDESCITEM,  
                VRDESCITEM,            VRTOTITEMCOMDESC,     QTMESESDESC,  
                NRORDEMAPLICADESC,     IDATIVO,              NRORG,  
                DTINCLUSAO,            NRORGINCLUSAO,        CDOPERINCLUSAO,  
                DTULTATU,              NRORGULTATU,          CDOPERULTATU,
                IDTPDESCONTO
            ) VALUES (  
                V_NRDESCPERIODONEGOPROP,            V_NRNEGOCIACAOPROPOSTA,                   ROUND(C_DESCPERIODO.VRPERCDESCITEM, 2),  
                ROUND(C_DESCPERIODO.VRDESCITEM, 2), ROUND(C_DESCPERIODO.VRTOTITEMCOMDESC, 2), C_DESCPERIODO.QTMESESDESC,  
                C_DESCPERIODO.NRORDEMAPLICADESC,    'S',                                      P_NRORG,  
                SYSDATE,                            P_NRORG,                                  P_CDOPERADOR,  
                NULL,                               NULL,                                     NULL,
                C_DESCPERIODO.IDTPDESCONTO
            );  
            
        END LOOP; -- C_DESCPERIODO  
    END LOOP; -- C_NEGOCIACAO  

    /* Se for um versionamento, copia do contrato, se nao, copia do modelo*/
    IF P_TIPO = 'V' THEN

        FOR C_ASSINATURAS IN (SELECT NRASSDIGITALORCA, NRSEQORCAMENTO, NRPARCNEGOCIO, NRSEQINTERLOCUTOR, NRCPFSIGNATARIO,
                                     IDTIPOASSINATURA, IDTESTEMUNHA, NRORDENACAO, IDSITUACAO, DSEMAILNOTSIGNENV, DSEMAILNOTIFOUTROS, NRORG
                                FROM FCT_ASSINATDIGITALPROP
                               WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                                 AND NRORG = P_NRORG) LOOP

            NOVO_CODIGO_SC('FCT_ASSINATDIGITALPROP', V_NRASSDIGITALORCA, 1, P_NRORG);

            INSERT INTO FCT_ASSINATDIGITALPROP (
                NRASSDIGITALORCA, NRSEQORCAMENTO, NRPARCNEGOCIO, NRSEQINTERLOCUTOR, NRCPFSIGNATARIO, 
                IDTIPOASSINATURA, IDTESTEMUNHA, NRORDENACAO, IDSITUACAO, DSEMAILNOTSIGNENV, DSEMAILNOTIFOUTROS, NRORG, IDATIVO, 
                DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO
            )
            VALUES (
                V_NRASSDIGITALORCA, V_NRSEQORCAMENTO, C_ASSINATURAS.NRPARCNEGOCIO, C_ASSINATURAS.NRSEQINTERLOCUTOR, C_ASSINATURAS.NRCPFSIGNATARIO, 
                C_ASSINATURAS.IDTIPOASSINATURA, C_ASSINATURAS.IDTESTEMUNHA, C_ASSINATURAS.NRORDENACAO, 'P', C_ASSINATURAS.DSEMAILNOTSIGNENV, C_ASSINATURAS.DSEMAILNOTIFOUTROS, P_NRORG, 'S', 
                SYSDATE, P_CDOPERADOR, P_NRORG
            );

            /* Copia operadores */
            
            FOR C_OPERADORES IN (SELECT CDOPERADOR
                                   FROM FCT_RELACOPERNOTIFASSELE 
                                  WHERE NRASSDIGITALORCA = C_ASSINATURAS.NRASSDIGITALORCA
              ) LOOP

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

                INSERT INTO FCT_RELACOPERNOTIFASSELE (
                  NRRELOPERNOTIFASSELE, NRASSDIGITALORCA, CDOPERADOR, NRORG, IDATIVO, 
                  DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO
                )
                VALUES (
                    V_NRRELOPERNOTIFASSELE, V_NRASSDIGITALORCA, C_OPERADORES.CDOPERADOR, P_NRORG, 'S', 
                    SYSDATE, P_CDOPERADOR, P_NRORG
                );

            END LOOP;

        END LOOP;
    
    ELSE

        BEGIN
            SELECT NRORCAMENTOMODELO
              INTO V_NRORCAMENTOMODELO
              FROM FCT_ORCAMENTO
             WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
               AND NRORG = P_NRORG;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
                V_NRORCAMENTOMODELO := NULL;
        END;

        FOR C_ASSINATURAS IN (SELECT NRSIGNATPADRORCA, NRORCAMENTOMODELO, NRPARCNEGOCIO, IDTIPOASSINATURA, IDTESTEMUNHA, 
                                     DSEMAILNOTSIGNENV, DSEMAILNOTIFOUTROS, NRORDENACAO, NRORG
                                FROM FCT_SIGNATPADRMODORCA
                               WHERE NRORCAMENTOMODELO = V_NRORCAMENTOMODELO
                                 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_SC('FCT_ASSINATDIGITALPROP', V_NRASSDIGITALORCA, 1, P_NRORG);

            INSERT INTO FCT_ASSINATDIGITALPROP (
                NRASSDIGITALORCA, NRSEQORCAMENTO, NRPARCNEGOCIO, NRSEQINTERLOCUTOR, NRCPFSIGNATARIO, 
                IDTIPOASSINATURA, IDTESTEMUNHA, NRORDENACAO, IDSITUACAO, NRORG, IDATIVO, 
                DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO, DSEMAILNOTSIGNENV, DSEMAILNOTIFOUTROS
            )
            VALUES (
                V_NRASSDIGITALORCA, V_NRSEQORCAMENTO, C_ASSINATURAS.NRPARCNEGOCIO, NULL, V_NRINSCRICAOPARC, 
                C_ASSINATURAS.IDTIPOASSINATURA, C_ASSINATURAS.IDTESTEMUNHA, C_ASSINATURAS.NRORDENACAO, 'P', P_NRORG, 'S', 
                SYSDATE, P_CDOPERADOR, P_NRORG, C_ASSINATURAS.DSEMAILNOTSIGNENV, C_ASSINATURAS.DSEMAILNOTIFOUTROS
            );

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

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

                INSERT INTO FCT_RELACOPERNOTIFASSELE (
                  NRRELOPERNOTIFASSELE, NRASSDIGITALORCA, CDOPERADOR, NRORG, IDATIVO, 
                  DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO
                )
                VALUES (
                    V_NRRELOPERNOTIFASSELE, V_NRASSDIGITALORCA, C_OPERADORES.CDOPERADOR, P_NRORG, 'S', 
                    SYSDATE, P_CDOPERADOR, P_NRORG
                );

            END LOOP;

        END LOOP; --C_ASSINATURAS

        /*INTERLOCUTOR DA PROPOSTA*/ 

        FOR C_ASSINTERLOC IN (SELECT CRM_INTERLOCUTOR.NRSEQINTERLOCUTOR, CRM_INTERLOCUTOR.NRCPFINTERLOC
                                FROM FCT_ORCAMENTO
                                JOIN CRM_INTERLOCUTOR
                                  ON CRM_INTERLOCUTOR.NRSEQINTERLOCUTOR = FCT_ORCAMENTO.NRSEQINTERLOCUTOR
                                 AND CRM_INTERLOCUTOR.NRORG = FCT_ORCAMENTO.NRORG
                               WHERE FCT_ORCAMENTO.NRSEQORCAMENTO = P_NRSEQORCAMENTO
                                 AND CRM_INTERLOCUTOR.NRCPFINTERLOC IS NOT NULL) LOOP

            NOVO_CODIGO_SC('FCT_ASSINATDIGITALPROP', V_NRASSDIGITALORCA, 1, P_NRORG);

            INSERT INTO FCT_ASSINATDIGITALPROP (
                NRASSDIGITALORCA, NRSEQORCAMENTO, NRPARCNEGOCIO, NRSEQINTERLOCUTOR, NRCPFSIGNATARIO, 
                IDTIPOASSINATURA, IDTESTEMUNHA, NRORDENACAO, IDSITUACAO, NRORG, IDATIVO, 
                DTINCLUSAO, CDOPERINCLUSAO, NRORGINCLUSAO
            )
            VALUES (
                V_NRASSDIGITALORCA, V_NRSEQORCAMENTO, NULL, C_ASSINTERLOC.NRSEQINTERLOCUTOR, C_ASSINTERLOC.NRCPFINTERLOC, 
                'E', 'N', '1', 'P', P_NRORG, 'S', 
                SYSDATE, P_CDOPERADOR, P_NRORG
            );

        END LOOP;

    END IF;
    
    UPDATE FCT_ITEMORCAMENTO  
    SET NMMNEMOITEMORCA = NULL  
    WHERE NRSEQORCAMENTO = V_NRSEQORCAMENTO  
        AND NRORG        = P_NRORG;  
    IF (P_TIPO = 'V') THEN  
        UPDATE FCT_ORCAMENTO  
           SET IDSITUACAOORCAMENTO = 'CANCELADO'  
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO 
           AND NRORG          = P_NRORG;  
    END IF;  
    COMMIT;  
END;
/