create or replace PROCEDURE FCT_COPIA_VERS_PROPALIMENTICIA(
    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
  V_ORCAMENTO_ORIGEM       FCT_ORCAMENTO%ROWTYPE;
  V_NRSEQORCAMENTOPAI      FCT_ORCAMENTO.NRSEQORCAMENTOPAI%TYPE;
  V_NRORCAMENTO            FCT_ORCAMENTO.NRORCAMENTO%TYPE;
  V_VERSAO                 FCT_ORCAMENTO.NRVERSAOORCAMENTO%TYPE;
  
  V_NRSEQORCAMENTO         FCT_ORCAMENTO.NRSEQORCAMENTO%TYPE;
  V_NRIMPOSTOORCA          FCT_RELACIMPOSTOORCA.NRIMPOSTOORCA%TYPE;
  V_NRRELACSERVORCA        FCT_RELACSERVORCAMENTO.NRRELACSERVORCA%TYPE;
  V_NRTAXAPROP             FCT_RELACTAXAPROPOSTA.NRTAXAPROP%TYPE;
  V_NRINVESTPROP           FCT_RELACINVESTPROPOSTA.NRINVESTPROP%TYPE;
  V_NRDESPPROP             FCT_RELACDESPPROPOSTA.NRDESPPROP%TYPE;
  V_NRRESULTORCA           FCT_RESULTORCALIMENT.NRRESULTORCA%TYPE;
  V_NRITEMORCAMENTO        FCT_ITEMORCAMENTO.NRITEMORCAMENTO%TYPE;
  V_NRITEMORCAMENTO_AD     FCT_ITEMORCAMENTO.NRITEMORCAMENTO%TYPE;
  V_NRSEQORCADOC           FCT_ORCAMENTODOC.NRSEQORCADOC%TYPE;
  V_NRRELACESCOPOPROPOSTA  FCT_RELACESCOPOPROPOSTA.NRRELACESCOPOPROPOSTA%TYPE;
  V_NRRELACFORMACAOPROP    FCT_RELACFORMACAOPROP.NRRELACFORMACAOPROP%TYPE;
  V_NRCALCFORMPRECSERV     FCT_CALCFORMPRECSERV_ITPRO.NRCALCFORMPRECSERV%TYPE;
  V_NRFORMPRECOSERVICO     FCT_RELACFORMACAOPROP.NRFORMPRECOSERVICO%TYPE;
  V_REFERENCIA             FCT_CALCFORMPRECSERV_ITPRO.DSREFECALCULO%TYPE;
  V_IDITEMCALCULOPAI       FCT_CALCFORMPRECSERV_ITPRO.IDITEMCALCULO%TYPE;
  V_PAI                    FCT_CALCFORMPRECSERV_ITPRO.NRCALCFORMPRECSERV%TYPE;
  V_DSJUSTIFCANCRENEG      FCT_ORCAMENTO.DSJUSTIFCANCRENEG%TYPE;
  V_NEW_NRRELACESTRUTPROP  FCT_RELACESTRUTURAPROP.NRRELACESTRUTPROP%TYPE;
  V_NRENDERECOORCA         FCT_ENDERECOORCA.NRENDERECOORCA%TYPE;
  V_NRRELACMEDIDAPROPOSTA  FCT_RELACMEDIDAPROPOSTA.NRRELACMEDIDAPROPOSTA%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_DSJUSTIFCANCRENEG := V_ORCAMENTO_ORIGEM.DSJUSTIFCANCRENEG;
      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;
    ELSE
      V_NRSEQORCAMENTOPAI := NULL; --V_ORCAMENTO_ORIGEM.NRSEQORCAMENTOPAI;
      V_VERSAO := 1; --V_ORCAMENTO_ORIGEM.NRVERSAOORCAMENTO;
    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,
      DSJUSTIFCANCRENEG,      IDPROPALIMENTICIA
    ) 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', V_ORCAMENTO_ORIGEM.VRORCAMENTO, 
      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_DSJUSTIFCANCRENEG, 'S');
    
    CRIA_MNEMONICO(P_NRORG, 'O', V_NRSEQORCAMENTO, V_NRORCAMENTO);
    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 cÿ³digo de Parÿ¢metro 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, C_ESTRUT.VRITEMRATEIO,
                P_NRORG, 'S', SYSDATE, P_NRORG, P_CDOPERADOR, C_ESTRUT.VRPERCRATEIO, 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
                    FROM FCT_ITEMORCAMENTO
                    WHERE NRSEQORCAMENTO     = P_NRSEQORCAMENTO
                       AND NRORG              = P_NRORG
                       AND IDADICITEMORC      = 'N'
                       AND NRITEMORCAMENTOPAI 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
        ) 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, C_ITENS.NRPARCTRANSPORTADORA, C_ITENS.NRPARCFORNECEDOR,   C_ITENS.NRGRUPOFATURA, 
            C_ITENS.NMITEMORCAMENTO,    C_ITENS.NMREDUITEMORCA,       C_ITENS.NMMNEMOITEMORCA,    C_ITENS.DSQTITEMORCA, C_ITENS.QTITEMORCAMENTO,
            C_ITENS.DSQTITEMORCAADIC,   C_ITENS.QTITEMORCAADIC,       C_ITENS.CDTPMEDIDASERV,     C_ITENS.QTMEDIDAORCA,
            C_ITENS.IDFATURAORCA,       C_ITENS.CDMODPGTO,            C_ITENS.VRUNITITEMORCA,     C_ITENS.VRTOTALITEMORCA,
            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,    C_ITENS.VRITEMSEMDESC,      C_ITENS.VRPERCDESCORCA,
            C_ITENS.IDTPDESCORCA,       C_ITENS.NRTIPOHIERARQSERV,    C_ITENS.NRTIPOORCAMENTO,    C_ITENS.QTPARCELASFATU,
            C_ITENS.NRDIAVENCPARCELASFATU );

        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 cÿ³digo de Parÿ¢metro 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, C_ESTRUTITEM.VRITEMRATEIO,
                        P_NRORG, 'S', SYSDATE, P_NRORG, P_CDOPERADOR, C_ESTRUTITEM.VRPERCRATEIO, C_ESTRUTITEM.IDRELACESTRUTURA);
        END LOOP; -- ESTRUTURA

        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
              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
            ) 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.NMMNEMOITEMORCA,
                C_ADICIONAIS.DSQTITEMORCA, C_ADICIONAIS.QTITEMORCAMENTO, C_ADICIONAIS.DSQTITEMORCAADIC, C_ADICIONAIS.QTITEMORCAADIC,
                C_ADICIONAIS.CDTPMEDIDASERV, C_ADICIONAIS.QTMEDIDAORCA, C_ADICIONAIS.IDFATURAORCA, C_ADICIONAIS.CDMODPGTO,
                C_ADICIONAIS.VRUNITITEMORCA, C_ADICIONAIS.VRTOTALITEMORCA, 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, C_ADICIONAIS.VRITEMSEMDESC,
                C_ADICIONAIS.VRPERCDESCORCA, C_ADICIONAIS.IDTPDESCORCA, C_ADICIONAIS.NRTIPOHIERARQSERV, C_ADICIONAIS.NRTIPOORCAMENTO,
                C_ADICIONAIS.QTPARCELASFATU, C_ADICIONAIS.NRDIAVENCPARCELASFATU);
      END LOOP; --ADICIONAIS
    END LOOP; --ITENS
        
    FOR C_FORMACOES IN (SELECT NRRELACFORMACAOPROP,
               NRFORMPRECOSERVICO,
               NRITEMORCAMENTO,
               IDATIVO,
               QTFORMACAOPROP
          FROM FCT_RELACFORMACAOPROP
         WHERE NRSEQORCAMENTO  = P_NRSEQORCAMENTO
           AND NRORG           = P_NRORG) LOOP
               
      V_NRFORMPRECOSERVICO := C_FORMACOES.NRFORMPRECOSERVICO;
      NOVO_CODIGO_NT('FCT_RELACFORMACAOPROP', V_NRRELACFORMACAOPROP, 1, P_NRORG);
      INSERT INTO FCT_RELACFORMACAOPROP (
          NRRELACFORMACAOPROP,    NRFORMPRECOSERVICO,     NRSEQORCAMENTO,
          NRITEMORCAMENTO,        NRORG,                  IDATIVO,
          DTINCLUSAO,             NRORGINCLUSAO,          CDOPERINCLUSAO,
          QTFORMACAOPROP)
      VALUES (
          V_NRRELACFORMACAOPROP,     C_FORMACOES.NRFORMPRECOSERVICO,     V_NRSEQORCAMENTO,
          V_NRITEMORCAMENTO,         P_NRORG,                            C_FORMACOES.IDATIVO,
          SYSDATE,                   P_NRORG,                            P_CDOPERADOR,
          C_FORMACOES.QTFORMACAOPROP);
        
      FOR C_FORMACOESAUX IN(SELECT NRFORMPRECOSERVICO, IDORDENACAO, IDITEMCALCULO, 
            IDELEMENTO, NRCALCFORMPRECSERVPAI, DSREFECALCULO, CDHABILITSERV, IDTIPOCALCULO,
            DSEXPRESSAOCALC, VRUNITARIO, QTCALCULO, VRTOTAL, IDUSAMEDIDA, CDTPMEDIDASERV,
            QTMEDIDACALC, VRPERCCALCULO 
        FROM FCT_CALCFORMPRECSERV_ITPRO 
        WHERE NRSEQORCAMENTO      = P_NRSEQORCAMENTO
           AND NRITEMORCAMENTO    = 0
           AND NRORG              = P_NRORG
           AND NRFORMPRECOSERVICO = C_FORMACOES.NRFORMPRECOSERVICO) LOOP
               
          BEGIN
            SELECT IDITEMCALCULO
              INTO V_IDITEMCALCULOPAI
            FROM FCT_CALCFORMPRECSERV_ITPRO
            WHERE NRCALCFORMPRECSERV  = C_FORMACOESAUX.NRCALCFORMPRECSERVPAI
               AND NRFORMPRECOSERVICO = C_FORMACOESAUX.NRFORMPRECOSERVICO
               AND NRORG = P_NRORG;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              V_IDITEMCALCULOPAI := NULL;
          END;
    
          IF V_IDITEMCALCULOPAI IS NOT NULL THEN
              V_REFERENCIA := C_FORMACOESAUX.DSREFECALCULO||'_PAI_'||V_IDITEMCALCULOPAI;
          ELSE
              V_REFERENCIA := C_FORMACOESAUX.DSREFECALCULO;
          END IF;

          NOVO_CODIGO_NT('FCT_CALCFORMPRECSERV_ITPRO', V_NRCALCFORMPRECSERV, 1, P_NRORG);
          INSERT INTO FCT_CALCFORMPRECSERV_ITPRO(NRCALCFORMPRECSERV, NRITEMORCAMENTO, NRSEQORCAMENTO, NRFORMPRECOSERVICO, 
               IDORDENACAO, IDITEMCALCULO, IDELEMENTO, NRCALCFORMPRECSERVPAI, DSREFECALCULO, CDHABILITSERV, IDTIPOCALCULO,
               DSEXPRESSAOCALC, VRUNITARIO, QTCALCULO, VRTOTAL, IDUSAMEDIDA, CDTPMEDIDASERV, QTMEDIDACALC, VRPERCCALCULO,
               DTINCLUSAO, DTULTATU, NRORG, NRORGINCLUSAO, CDOPERINCLUSAO, NRORGULTATU, CDOPERULTATU, IDATIVO, NRRELACFORMACAOPROP) 
               
          VALUES (V_NRCALCFORMPRECSERV, 0, V_NRSEQORCAMENTO,  C_FORMACOESAUX.NRFORMPRECOSERVICO, C_FORMACOESAUX.IDORDENACAO, C_FORMACOESAUX.IDITEMCALCULO, 
               C_FORMACOESAUX.IDELEMENTO, C_FORMACOESAUX.NRCALCFORMPRECSERVPAI, V_REFERENCIA, C_FORMACOESAUX.CDHABILITSERV, C_FORMACOESAUX.IDTIPOCALCULO,
               C_FORMACOESAUX.DSEXPRESSAOCALC, C_FORMACOESAUX.VRUNITARIO, C_FORMACOESAUX.QTCALCULO, C_FORMACOESAUX.VRTOTAL, C_FORMACOESAUX.IDUSAMEDIDA, C_FORMACOESAUX.CDTPMEDIDASERV,
               C_FORMACOESAUX.QTMEDIDACALC, C_FORMACOESAUX.VRPERCCALCULO, SYSDATE,  NULL, P_NRORG, P_NRORG, P_CDOPERADOR,
               NULL, NULL, 'S', V_NRRELACFORMACAOPROP);
        END LOOP;
        FOR C_FORMACOESAUXPAI IN (SELECT NRCALCFORMPRECSERV, NRFORMPRECOSERVICO,
                               SUBSTR(DSREFECALCULO, INSTR(DSREFECALCULO, '_PAI_')+5) AS IDPAI,
                               SUBSTR(DSREFECALCULO, 0, INSTR(DSREFECALCULO, '_PAI_')-1) AS REFERENCIA
                           FROM FCT_CALCFORMPRECSERV_ITPRO
                           WHERE NRFORMPRECOSERVICO = V_NRFORMPRECOSERVICO
                             AND NRORG           = P_NRORG
                             AND NRSEQORCAMENTO  = V_NRSEQORCAMENTO
                             AND NRITEMORCAMENTO = 0
                             AND NRCALCFORMPRECSERVPAI IS NOT NULL
                             ORDER BY IDORDENACAO) LOOP

          SELECT NRCALCFORMPRECSERV
            INTO V_PAI
          FROM FCT_CALCFORMPRECSERV_ITPRO
          WHERE IDITEMCALCULO      = C_FORMACOESAUXPAI.IDPAI
            AND NRSEQORCAMENTO     = V_NRSEQORCAMENTO
            AND NRITEMORCAMENTO    = 0
            AND NRFORMPRECOSERVICO = V_NRFORMPRECOSERVICO
            AND NRORG = P_NRORG;

          UPDATE FCT_CALCFORMPRECSERV_ITPRO
              SET NRCALCFORMPRECSERVPAI =  V_PAI,
                 DSREFECALCULO          = C_FORMACOESAUXPAI.REFERENCIA
           WHERE NRCALCFORMPRECSERV = C_FORMACOESAUXPAI.NRCALCFORMPRECSERV
              AND NRFORMPRECOSERVICO = V_NRFORMPRECOSERVICO
              AND NRSEQORCAMENTO     = V_NRSEQORCAMENTO
              AND NRITEMORCAMENTO    = 0
              AND NRORG = P_NRORG;
        END LOOP;
    END LOOP; --FORMACOES
      
    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_DOCUMENTO IN (
        SELECT NRSEQORCADOC,     NRSEQORCAMENTO,   NRSEQMODDOCFCT,  IDIDIOMA,
               TXMODELOORCADOC,  IDPADRAOORCADOC,  NRORG,           IDATIVO,
               NMARQUIVO,        DSCAMINHOARQ,     DSTIPO,          VRTAMANHO,
               NRTIPOORCAMENTO,  IDSITUACAOORCAMENTO
          FROM FCT_ORCAMENTODOC
         WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
           AND NRORG          = P_NRORG
    ) 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
        ) 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
        );
    END LOOP; --DOCUMENTO

    FOR C_ESCOPO IN (
        SELECT NRRELACESCOPOPROPOSTA,
               NRSEQORCAMENTO,
               NRTIPOORCAMENTO,
               NRORG,
               IDATIVO,
               NRSEQMODDOCFCT,
               CDFILIAL
          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
    ) 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
    );
    END LOOP; --ESCOPO
    
    FOR C_ELEMENTOS IN(SELECT  NRRELACSERVORCA, IDESCOLHIDO,   IDTIPOELEMENTO,  CDSERVORCA,      NRSEQORCAMENTO, 
                         NRCOMPSERVICO,   VRCUSTOSERV,   VRTOTMENSALSERV, QTSEGUNDA,       QTTERCA, 
                         QTQUARTA,        QTQUINTA,      QTSEXTA,         QTSABADO,        QTDOMINGO, 
                         CDTPMEDIDASERV,  QTMEDSERVORCA, IDSERVOBRIGCOMP, IDTPDESCORCA,    VRPERCDESCORCA, 
                         VRTOTMSLSAJUSTE, IDELEMENTO,    IDELEMENTOPAI,   NRTIPOORCAMENTO, NRORG,         
                         QTMENSAL,        HRENTRADA,     HRSAIDA
                      FROM FCT_RELACSERVORCAMENTO
                      WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                      AND NRORG = P_NRORG) LOOP

        NOVO_CODIGO_NT('FCT_RELACSERVORCAMENTO', V_NRRELACSERVORCA, 1, P_NRORG);
        INSERT INTO FCT_RELACSERVORCAMENTO(NRRELACSERVORCA, IDESCOLHIDO,   IDTIPOELEMENTO,  CDSERVORCA,      NRSEQORCAMENTO, 
                                           NRCOMPSERVICO,   VRCUSTOSERV,   VRTOTMENSALSERV, QTSEGUNDA,       QTTERCA, 
                                           QTQUARTA,        QTQUINTA,      QTSEXTA,         QTSABADO,        QTDOMINGO, 
                                           CDTPMEDIDASERV,  QTMEDSERVORCA, IDSERVOBRIGCOMP, IDTPDESCORCA,    VRPERCDESCORCA, 
                                           VRTOTMSLSAJUSTE, IDELEMENTO,    IDELEMENTOPAI,   NRTIPOORCAMENTO, NRORG,  
                                           DTINCLUSAO,      DTULTATU,      NRORGINCLUSAO,   CDOPERINCLUSAO,  CDOPERULTATU,
                                           NRORGULTATU,     IDATIVO,       QTMENSAL,        HRENTRADA,       HRSAIDA)
        VALUES(V_NRRELACSERVORCA,       'S',                         C_ELEMENTOS.IDTIPOELEMENTO,  C_ELEMENTOS.CDSERVORCA, 
                V_NRSEQORCAMENTO,       C_ELEMENTOS.NRCOMPSERVICO,   C_ELEMENTOS.VRCUSTOSERV,     C_ELEMENTOS.VRTOTMENSALSERV, 
                C_ELEMENTOS.QTSEGUNDA,  C_ELEMENTOS.QTTERCA,         C_ELEMENTOS.QTQUARTA,        C_ELEMENTOS.QTQUINTA,
                C_ELEMENTOS.QTSEXTA,    C_ELEMENTOS.QTSABADO,        C_ELEMENTOS.QTDOMINGO,       C_ELEMENTOS.CDTPMEDIDASERV,  
                C_ELEMENTOS.QTMEDSERVORCA,   C_ELEMENTOS.IDSERVOBRIGCOMP, C_ELEMENTOS.IDTPDESCORCA, C_ELEMENTOS.VRPERCDESCORCA,  
                C_ELEMENTOS.VRTOTMSLSAJUSTE, C_ELEMENTOS.IDELEMENTO,    C_ELEMENTOS.IDELEMENTOPAI,  C_ELEMENTOS.NRTIPOORCAMENTO, 
                P_NRORG,  SYSDATE,   NULL,  P_NRORG,   P_CDOPERADOR,  NULL,  NULL,    'S',         C_ELEMENTOS.QTMENSAL,        
                C_ELEMENTOS.HRENTRADA,       C_ELEMENTOS.HRSAIDA);
    END LOOP; -- ELEMENTOS
    
    FOR C_DESPESAS IN(SELECT NRDESPPROP,
                        NRSEQORCAMENTO,
                        CDDESPESA,
                        CDPERIODODESPPROP,
                        VRDESPESAORCA,
                        VRUNITDESPESA
                      FROM FCT_RELACDESPPROPOSTA
                      WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                        AND NRORG          = P_NRORG) LOOP

      NOVO_CODIGO_NT('FCT_RELACDESPPROPOSTA', V_NRDESPPROP, 1, P_NRORG);
      INSERT INTO FCT_RELACDESPPROPOSTA(NRDESPPROP,        NRSEQORCAMENTO, CDDESPESA, CDOPERINCLUSAO,
                                        NRORG,             DTINCLUSAO,     DTULTATU,  NRORGINCLUSAO,  
                                        NRORGULTATU,       CDOPERULTATU,   IDATIVO,   VRDESPESAORCA, 
                                        CDPERIODODESPPROP, VRUNITDESPESA)
      VALUES(V_NRDESPPROP, V_NRSEQORCAMENTO,  C_DESPESAS.CDDESPESA, P_CDOPERADOR,
              P_NRORG,     SYSDATE,           NULL,                 P_NRORG, 
              NULL,        NULL,              'S',                  C_DESPESAS.VRDESPESAORCA, 
              C_DESPESAS.CDPERIODODESPPROP, C_DESPESAS.VRUNITDESPESA);
    END LOOP; --DESPESAS

    FOR C_INVEST IN(SELECT NRSEQORCAMENTO, NRINVESTIMENTO,
                      VRUNITINVESTORCA, VRTOTINVETORCA,
                      QTINVESTORCA, QTMESARMOTIZACAO,
                      VRPARCELA
                    FROM FCT_RELACINVESTPROPOSTA
                    WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                      AND NRORG = P_NRORG) LOOP
                      
        NOVO_CODIGO_NT('FCT_RELACINVESTPROPOSTA', V_NRINVESTPROP, 1, P_NRORG);    
        INSERT INTO FCT_RELACINVESTPROPOSTA(NRINVESTPROP,       NRSEQORCAMENTO, NRINVESTIMENTO, 
                                            VRUNITINVESTORCA,   VRTOTINVETORCA, QTINVESTORCA, 
                                            QTMESARMOTIZACAO,   VRPARCELA,      NRORG, 
                                            DTINCLUSAO,         DTULTATU,       NRORGINCLUSAO,
                                            CDOPERINCLUSAO,     NRORGULTATU,    CDOPERULTATU, 
                                            IDATIVO)
        VALUES(V_NRINVESTPROP,              V_NRSEQORCAMENTO,        C_INVEST.NRINVESTIMENTO, 
                C_INVEST.VRUNITINVESTORCA,  C_INVEST.VRTOTINVETORCA, C_INVEST.QTINVESTORCA, 
                C_INVEST.QTMESARMOTIZACAO,  C_INVEST.VRPARCELA,      P_NRORG, 
                SYSDATE,                    NULL,                    P_NRORG,
                P_CDOPERADOR,               NULL,                    NULL, 
                'S');
    END LOOP; -- INVESTIMENTOS
    
    FOR C_TAXAS IN(SELECT NRSEQORCAMENTO,
                    VRPERCTAXAORC,
                    CDTAXA
                  FROM FCT_RELACTAXAPROPOSTA
                  WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                      AND NRORG = P_NRORG) LOOP

      NOVO_CODIGO_NT('FCT_RELACTAXAPROPOSTA', V_NRTAXAPROP, 1, P_NRORG);  
      INSERT INTO FCT_RELACTAXAPROPOSTA(NRTAXAPROP,     NRSEQORCAMENTO, VRPERCTAXAORC, CDTAXA, 
                                        NRORG,          DTINCLUSAO,     DTULTATU,      NRORGINCLUSAO, 
                                        CDOPERINCLUSAO, NRORGULTATU,    CDOPERULTATU,  IDATIVO)
      VALUES(V_NRTAXAPROP,  V_NRSEQORCAMENTO, C_TAXAS.VRPERCTAXAORC, C_TAXAS.CDTAXA, 
              P_NRORG,      SYSDATE,          NULL,                  P_NRORG, 
              P_CDOPERADOR, NULL,             NULL,                  'S');
    END LOOP; -- TAXAS
    
    FOR C_IMPOSTO IN (SELECT NRSEQORCAMENTO,
                        CDIMPOSTO,
                        VRPERCIMPOSTO
                      FROM FCT_RELACIMPOSTOORCA
                      WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                        AND NRORG = P_NRORG) LOOP
                        
      NOVO_CODIGO_NT('FCT_RELACIMPOSTOORCA', V_NRIMPOSTOORCA, 1, P_NRORG);  
      INSERT INTO FCT_RELACIMPOSTOORCA(NRIMPOSTOORCA,  NRSEQORCAMENTO, CDIMPOSTO,     VRPERCIMPOSTO, 
                                        NRORG,        DTINCLUSAO,   DTULTATU,     NRORGINCLUSAO, 
                                        CDOPERINCLUSAO, NRORGULTATU,  CDOPERULTATU, IDATIVO)
      VALUES(V_NRIMPOSTOORCA,  V_NRSEQORCAMENTO, C_IMPOSTO.CDIMPOSTO, C_IMPOSTO.VRPERCIMPOSTO, 
              P_NRORG,         SYSDATE,          NULL,                P_NRORG, 
              P_CDOPERADOR,    NULL,             NULL,                'S');
   END LOOP; -- IMPOSTOS
   
   FOR C_RESULTADO IN(SELECT NRSEQORCAMENTO,
                        VRCUSTOINFORMADO,
                        VRCUSTOIDEAL,
                        IDELEMENTORAIZ,
                        NRCOMPSERVICORAIZ,
                        QTTOTALSERV,
                        VRTOTSERV,
                        VRPERCSERVICO
                      FROM FCT_RESULTORCALIMENT
                      WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
                        AND NRORG = P_NRORG) LOOP

      NOVO_CODIGO_NT('FCT_RESULTORCALIMENT', V_NRRESULTORCA, 1, P_NRORG);
      INSERT INTO FCT_RESULTORCALIMENT(NRRESULTORCA,       NRSEQORCAMENTO,    VRCUSTOINFORMADO, VRCUSTOIDEAL,  
                                        IDELEMENTORAIZ,    NRCOMPSERVICORAIZ, QTTOTALSERV,      VRTOTSERV,     
                                        NRORG,             DTINCLUSAO,        DTULTATU,         NRORGINCLUSAO, 
                                        CDOPERINCLUSAO,    NRORGULTATU,       CDOPERULTATU,     IDATIVO, VRPERCSERVICO)
      VALUES(V_NRRESULTORCA,             V_NRSEQORCAMENTO,              C_RESULTADO.VRCUSTOINFORMADO, C_RESULTADO.VRCUSTOIDEAL,  
            C_RESULTADO.IDELEMENTORAIZ,  C_RESULTADO.NRCOMPSERVICORAIZ, C_RESULTADO.QTTOTALSERV,      C_RESULTADO.VRTOTSERV,     
            P_NRORG,                     SYSDATE,                       NULL,                         NULL, 
            P_CDOPERADOR,                NULL,                          NULL,                         'S', C_RESULTADO.VRPERCSERVICO);
   END LOOP; -- RESULTADOS

    FOR C_MEDIDAVAR IN (SELECT CDTPMEDIDAVARIAVEL,
                         QTMEDIDAVARIAVEL,
                         NRORG,
                         IDATIVO,
                         IDELEMENTORAIZ
                      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
        ) VALUES (
            V_NRRELACMEDIDAPROPOSTA, V_NRSEQORCAMENTO,          C_MEDIDAVAR.CDTPMEDIDAVARIAVEL, C_MEDIDAVAR.QTMEDIDAVARIAVEL,
            P_NRORG,                 SYSDATE,                   P_NRORG,                        P_CDOPERADOR,
            C_MEDIDAVAR.IDATIVO,     C_MEDIDAVAR.IDELEMENTORAIZ
        );
    END LOOP; --C_MEDIDAVAR
      
    IF (P_TIPO = 'V') THEN
      UPDATE FCT_ORCAMENTO
         SET IDSITUACAOORCAMENTO = 'CANCELADO'
       WHERE NRSEQORCAMENTO = P_NRSEQORCAMENTO
         AND NRORG          = P_NRORG;
    END IF;
  COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('FCT_COPIA_VERS_PROPALIMENTICIA','0.00.000'); END;
/
