        SELECT habilitaFrete
        INTO v_contrEntr_habilitaFrete
        FROM PACONTROLESENTREGA
        WHERE controleEntrega = p_item_controleEntrega;
      END IF;
      IF
        CASE
          WHEN v_ini_controleEntrega = 0
            OR v_ini_contrEntr_habilitaFrete = 0
          THEN 0
          ELSE v_ini_valorProdutoServicoBruto - v_ini_valorDescontoItem + v_ini_valorAcrescimoItem
        END <>
        CASE
          WHEN p_item_controleEntrega = 0
            OR v_contrEntr_habilitaFrete = 0
          THEN 0
          ELSE v_item_valorProdutoServicoBrut - p_item_valorDescontoItem + p_item_valorAcrescimoItem
        END
      THEN
        ADD_ORCAMENTO_CAB_BUSCA_FRETE (
          p_person_190_modeloFrete,
          0, -- p_buscarESalvarInternamente
          r_calcularImpostos,
          p_item_orcamento,
          v_cab_estabelecimento,
          v_cab_pessoa,
          v_cab_enderecoEntregaPessoa,
          v_cab_modalidadeFrete,
          v_cab_transportadora,
          v_cab_enderecoTransportadora,
          v_ini_cab_valorFreteItem,
          v_cab_valorFreteItem,
          v_ini_cab_valorFreteGeral,
          v_ini_cab_valorFreteGeral,
          v_modDoc_somaFreteSeguroPrUnit,
          r_item_idItemOrcamento,
          p_item_pesoLiquido,
          p_item_pesoBruto,
          v_item_valorProdutoServicoBrut,
          p_item_valorDescontoItem,
          p_item_valorAcrescimoItem,
          p_item_controleEntrega,
          v_item_valorFreteGeral,
          v_contrEntr_habilitaFrete,
          /* Retornos */
          r_mensagemAviso,
          r_calcularImpostos,
          v_cab_modalidadeFrete,
          v_cab_transportadora,
          v_cab_enderecoTransportadora,
          v_valorFreteRegra,
          v_auxNumber);
        IF v_valorFreteRegra <> v_ini_cab_valorFreteGeral THEN
          v_item_valorFreteGeral := v_valorFreteRegra - v_cab_valorFreteGeral;
        END IF;
      ELSIF NOT (p_person_190_modeloFrete IS NULL)
        AND p_person_190_modeloFrete <> ' '
        AND v_modDoc_somaFreteSeguroPrUnit = 0
      THEN
        v_cab_modalidadeFrete := FUNC_ADD_BUSCA_MODALIDADE_FRET (
          p_person_190_modeloFrete,
          v_cab_modalidadeFrete,
          v_ini_cab_valorFreteItem,
          v_cab_valorFreteItem,
          v_ini_cab_valorFreteGeral,
          v_cab_valorFreteGeral,
          v_modDoc_somaFreteSeguroPrUnit);
      END IF;
      ADD_CALCULA_TOTAIS_ITEM (
        v_cab_tipoPagamentoFrete,
        p_item_quantidade,
        p_item_quantidadeConvertida,
        p_item_precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos,
        v_item_precoUnitario,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        p_item_valorFreteItem,
        p_item_valorSeguroItem,
        p_item_valorAdicFreteMarItem,
        p_item_valorDespesasAduanItem,
        v_item_valorFreteGeral,
        p_item_valorSeguroGeral,
        v_item_valorDescontoGeral,
        p_item_valorOutrasDespesasGer,
        p_item_valorAdicFreteMarGeral,
        p_item_valorDespesasAduanGeral,
        v_item_valorDescontoPagamento,
        v_item_valorOutrasDespPagament,
        v_item_valorJurosPagamento,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        v_modDoc_somaFreteSeguroPrUnit,
        v_prod_composicaoPreco,
        v_item_precoUnitario,
        v_item_precoUnitarioConvertido,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal);
    END IF;
    IF p_buscarAliquotas_CalcularImp = 'S'
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal)
    THEN
      ADD_ITEM_OPERACAO_FISCAL_BUSCA (
        p_buscarGeraFinanceiroEstoque,
        v_cab_origemDocumento,
        v_cab_tipoDocumento,
        v_cab_entradaSaida,
        0, -- p_cab_devolucaoAnulacaoRetorno
        v_cab_finalidadeNota,
        v_cab_estabelecimento,
        0, -- p_cab_nfFornecedor
        SYSDATE, -- p_cab_dataEmissao
        v_cab_pessoa,
        0, -- p_cab_vendaConsumidor
        v_cab_enderecoEntregaPessoa,
        v_cab_municipioFatoGerador,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_modDoc_movimentaEstoque,
        v_modDoc_geraFinanceiro,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_endPess_enderecoPessoa,
        v_munEndPess_uf,
        v_munEndEntr_uf,
        p_item_operacaoFiscal,
        v_gradProd_produto,
        v_prod_tipoProduto,
        v_prod_origemMercadoria,
        v_prod_idNcm,
        v_prod_listaServicos,
        p_item_movimentaEstoque,
        0, -- p_movimentaEstoqueFiscal
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        1, -- p_atualizarISSQN
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        1, -- p_atualizarRetIRRF
        0, -- p_item_retencaoIRRF
        1, -- p_atualizarRetINSS
        0, -- p_item_retencaoINSS
        1, -- p_atualizarRetencaoPIS
        0, -- p_item_retencaoPIS
        1, -- p_atualizarRetencaoCOFINS
        0, -- p_item_retencaoCOFINS
        1, -- p_atualizarRetencaoCSLL
        0, -- p_item_retencaoCSLL
        1, -- p_atualizarRetencaoOutros
        0, -- p_item_retencaoOutros
        1, -- p_atualizarII
        0, -- p_item_aliquotaII
        1, -- p_atualizarIOF
        0, -- p_item_aliquotaIOF
        1, -- p_atualizarIPI
        0, -- p_item_codigoEnquadramentoIPI
        '  ', -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        1, -- p_atualizarPIS
        '  ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        1, -- p_atualizarPISST
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        1, -- p_atualizarCOFINS
        '  ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        1, -- p_atualizarCOFINSST
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        1, -- p_atualizarSimplesNacional
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        1, -- p_atualizarICMS
        '  ', -- p_item_stICMS
        ' ', -- p_item_modalidadeBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        '  ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        1, -- p_atualizarICMSST
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        1, -- p_atualizarICMSSTAnteriorEfet
        0, -- p_item_aliquotaSTSuportConsF
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        0, -- p_atualizarICMSEscrituracao
        '  ', -- p_item_stICMSEscrit
        0, -- p_item_reducaoBaseICMSEscrit
        0, -- p_item_aliquotaICMSEscrit
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_atualizarICMSSTEscrituracao
        0, -- p_item_margemValorAdicSTEscrit
        0, -- p_item_reducaoBaseSTEscrit
        0, -- p_item_aliquotaICMSSTEscrit
        0, -- p_item_somarICMSST
        1, -- p_atualizarDIFAL
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        1, -- p_atualizarFCP
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        1, -- p_atualizarImpostosEstimados
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        v_auxNumber, -- r_encontrouRegistro
        v_item_movimentaEstoque,
        v_auxNumber, -- r_movimentaEstoqueFiscal
        v_item_geraFinanceiro,
        v_item_cfop,
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        v_item_retidoISSQN,
        v_item_tributadoForaMunicipio,
        v_item_incentivoFiscal,
        v_item_listaServicos,
        v_item_cnae,
        v_item_idServicoMunicipio,
        v_item_numeroProcessoAdministr,
        v_item_retencaoIRRF,
        v_item_retencaoINSS,
        v_item_retencaoPIS,
        v_item_retencaoCOFINS,
        v_item_retencaoCSLL,
        v_item_retencaoOutros,
        v_item_aliquotaII,
        v_item_aliquotaIOF,
        v_item_codigoEnquadramentoIPI,
        v_item_stIPI,
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        v_item_stPIS,
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        v_item_stCOFINS,
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        v_item_motivoDesoneracaoICMS,
        v_item_idBeneficio,
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin,
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        v_auxVarchar, -- r_item_stICMSEscrit
        v_auxNumber, -- r_item_reducaoBaseICMSEscrit
        v_auxNumber, -- r_item_aliquotaICMSEscrit
        v_auxNumber, -- r_item_diferimentoICMSEscritur
        v_auxNumber, -- r_item_margemValorAdicSTEscrit
        v_auxNumber, -- r_item_reducaoBaseSTEscrit
        v_auxNumber, -- r_item_aliquotaICMSSTEscrit
        v_auxNumber, -- r_item_somarICMSST
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        v_item_aliquotaFCP,
        v_item_aliquotaFCPST,
        v_item_aliquotaFCPSTAnteriorm,
        v_item_aliquotaFCPUFDestinat,
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai);      
    END IF;
    IF p_buscarAliquotas_CalcularImp IN ('I','S')
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_personalizacao <> p_item_personalizacao
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_quantidade <> p_item_quantidade
        OR v_ini_valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
        OR v_ini_valorProdutoServico <> v_item_valorProdutoServico
        OR v_ini_valorDescontoItem <> p_item_valorDescontoItem
        OR v_ini_valorAcrescimoItem <> p_item_valorAcrescimoItem
        OR v_cab_tipoPagamentoFrete <> 'V'
        AND (v_ini_valorFreteTotal <> v_item_valorFreteTotal
          OR v_ini_valorSeguroTotal <> v_item_valorSeguroTotal)
        OR v_ini_valorDescontoTotal <> v_item_valorDescontoTotal
        OR v_ini_valorOutrasDespesasTotal <> v_item_valorOutrasDespesasTot
        OR v_ini_valorAdicFreteMarTotal <> v_item_valorAdicFreteMarTotal
        OR v_ini_valorDespesasAduanTotal <> v_item_valorDespesasAduanTotal)
    THEN
      ADD_CALCULA_IMPOSTOS_ITEM (
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        v_cab_entradaSaida,
        0, -- p_cab_devolucaoAnulacaoRetorno
        v_cab_estabelecimento,
        0, -- p_cab_nfFornecedor
        v_cab_dataEmissao, -- p_cab_dataEntradaSaida
        v_cab_pessoa,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_cab_tipoPagamentoFrete,
        v_pess_indicadorInscricaoEstad,
        p_item_personalizacao,
        p_item_quantidade,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal,
        v_item_cfop,
        1, -- p_calcularISSQN
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        0, -- p_baseISSQN
        0, -- p_valorISSQN
        1, -- p_calcularIRRF
        v_item_retencaoIRRF,
        0, -- p_baseRetIRRF
        0, -- p_valorRetIRRF
        1, -- p_calcularINSS
        v_item_retencaoINSS,
        0, -- p_baseRetINSS
        0, -- p_valorRetINSS
        1, -- p_calcularRetencaoPIS
        v_item_retencaoPIS,
        0, -- p_baseRetPIS
        0, -- p_valorRetPIS
        1, -- p_calcularRetencaoCOFINS
        v_item_retencaoCOFINS,
        0, -- p_baseRetCOFINS
        0, -- p_valorRetCOFINS
        1, -- p_calcularRetencaoCSLL
        v_item_retencaoCSLL,
        0, -- p_baseRetCSLL
        0, -- p_valorRetCSLL
        1, -- p_calcularRetencaoOutros
        v_item_retencaoOutros,
        0, -- p_baseRetOutros
        0, -- p_valorRetOutros
        1, -- p_calcularII
        v_item_aliquotaII,
        0, -- p_baseII
        0, -- p_valorII
        1, -- p_calcularIOF
        v_item_aliquotaIOF,
        0, -- p_baseIOF
        0, -- p_valorIOF
        1, -- p_calcularIPI
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        0, -- p_baseIPI
        0, -- p_valorIPI
        0, -- p_valorIPIDevolucao
        1, -- p_calcularPIS
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        0, -- p_basePIS
        0, -- p_valorPIS
        1, -- p_calcularPISST
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        0, -- p_basePISST
        0, -- p_valorPISST
        1, -- p_calcularCOFINS
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        0, -- p_valorAliquotaCOFINS
        0, -- p_baseCOFINS
        1, -- p_valorCOFINS
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        0, -- p_baseCOFINSST
        0, -- p_valorCOFINSST
        1, -- p_calcularSimplesNacional
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        0, -- p_baseCreditoSimplesNacional
        0, -- p_valorCreditoSimplesNacional
        1, -- p_calcularICMS
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        0, -- p_baseICMS
        0, -- p_valorICMSOperacao
        0, -- p_valorICMSDiferido
        0, -- p_valorICMS
        0, -- p_valorICMSDesoneracao
        1, -- p_calcularICMSST
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        0, -- p_baseICMSST
        0, -- p_valorICMSST
        1, -- p_calcularICMSSTAnterEfetivo
        0, -- p_baseICMSSTAnteriormente
        0, -- p_valorICMSSTAnteriormente
        0, -- p_valorICMSProprioSubstituto
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        0, -- p_baseICMSEfetivo
        0, -- p_valorICMSEfetivo
        0, -- p_calcularICMSEscrituracao
        '  ', -- p_stICMSEscrituracao
        0, -- p_reducaoBaseICMSEscrituracao
        0, -- p_aliquotaICMSEscrituracao
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_baseICMSEscrituracao
        0, -- p_valorICMSEscrituracao
        0, -- p_valorICMSDesonEscrituracao
        0, -- p_calcularICMSSTEscrituracao
        0, -- p_margemValorAdicSTEscriturac
        0, -- p_reducaoBaseSTEscrituracao
        0, -- p_aliquotaICMSSTEscrituracao
        0, -- p_baseICMSSTEscrituracao
        0, -- p_valorICMSSTEscrituracao
        1, -- p_calcularDIFAL
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        0, -- p_baseICMSUFDestinatario
        0, -- p_valorICMSUFDestinatario
        0, -- p_baseICMSUFRemetente
        0, -- p_valorICMSUFRemetente
        1, -- p_calcularFCP
        v_item_aliquotaFCP,
        0, -- p_baseFCP
        0, -- p_valorFCP
        v_item_aliquotaFCPST,
        0, -- p_baseFCPST
        0, -- p_valorFCPST
        v_item_aliquotaFCPSTAnteriorm,
        0, -- p_baseFCPSTAnteriormente
        0, -- p_valorFCPSTAnteriormente
        v_item_aliquotaFCPUFDestinat,
        0, -- p_baseFCPUFDestinatario
        0, -- p_valorFCPUFDestinatario
        1, -- p_calcularImpostosEstimados
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai,
        0, -- p_baseEstimadaImpostos
        0, -- p_valorEstimadoImpFederais
        0, -- p_valorEstimadoImpEstaduais
        0, -- p_valorEstimadoImpMunicipais
        v_gradProd_produto,
        v_gradProd_cor,
        v_gradProd_tamanho,
        v_prod_controleEstoque,
        v_prod_tipoProduto,
        v_prod_precoPautaTabelado,
        v_item_baseISSQN,
        v_item_valorISSQN,
        v_item_baseRetIRRF,
        v_item_valorRetIRRF,
        v_item_baseRetINSS,
        v_item_valorRetINSS,
        v_item_baseRetPIS,
        v_item_valorRetPIS,
        v_item_baseRetCOFINS,
        v_item_valorRetCOFINS,
        v_item_baseRetCSLL,
        v_item_valorRetCSLL,
        v_item_baseRetOutros,
        v_item_valorRetOutros,
        v_item_baseII,
        v_item_valorII,
        v_item_baseIOF,
        v_item_valorIOF,
        v_item_baseIPI,
        v_item_valorIPI,
        v_item_basePIS,
        v_item_valorPIS,
        v_item_basePISST,
        v_item_valorPISST,
        v_item_baseCOFINS,
        v_item_valorCOFINS,
        v_item_baseCOFINSST,
        v_item_valorCOFINSST,
        v_item_baseCreditoSimplesNac,
        v_item_valorCreditoSimplesNac,
        v_item_baseICMS,
        v_item_valorICMSOperacao,
        v_item_valorICMSDiferido,
        v_item_valorICMS,
        v_item_valorICMSDesoneracao,
        v_item_baseICMSST,
        v_item_valorICMSST,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSProprioSubstit,
        v_item_baseICMSEfetivo,
        v_item_valorICMSEfetivo,
        v_auxNumber, -- r_baseICMSEscrituracao
        v_auxNumber, -- r_valorICMSEscrituracao
        v_auxNumber, -- r_valorICMSDesonEscrituracao
        v_auxNumber, -- r_baseICMSSTEscrituracao
        v_auxNumber, -- r_valorICMSSTEscrituracao
        v_item_baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente,
        v_item_valorICMSUFRemetente,
        v_item_baseFCP,
        v_item_valorFCP,
        v_item_baseFCPST,
        v_item_valorFCPST,
        v_item_baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente,
        v_item_baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario,
        v_item_baseEstimadaImpostos,
        v_item_valorEstImpFederais,
        v_item_valorEstImpEstaduais,
        v_item_valorEstImpMunicipais);
    END IF;
    v_item_valorBasePagamento := FUNC_ADD_CALC_BASE_PAGAMENTO (
      v_cab_origemDocumento,
      0, -- p_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_geraFinanceiro,
      v_item_valorProdutoServico,
      v_item_valorDescontoPagamento,
      v_item_valorOutrasDespPagament,
      v_item_valorJurosPagamento,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      0, -- p_item_valorIPIDevolucao
      v_item_retidoISSQN,
      v_item_valorISSQN,
      v_item_valorRetIRRF,
      v_item_valorRetINSS,
      v_item_valorRetPIS,
      v_item_valorRetCOFINS,
      v_item_valorRetCSLL,
      v_item_valorRetOutros,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      0, -- p_item_valorICMSSTEscrit
      0, -- p_item_somarICMSST
      0, -- p_item_valorAcrescExtempTotal
      v_modDoc_geraFinanceiro);
    v_item_valorLiquidoItem := FUNC_ADD_CALC_VALOR_LIQUIDO (
      0, -- p_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_valorProdutoServico,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      0, -- p_item_valorIPIDevolucao
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      0, -- p_item_valorICMSSTEscrit
      0 -- p_item_somarICMSST
      );
    IF v_inserindoItem = 1 THEN
      SELECT COALESCE (MAX (sequencia),0) + 1
      INTO v_item_sequencia
      FROM MOORCAMENTOXITENS
      WHERE orcamento = p_item_orcamento;
      v_cab_ultimoVendedorItem := p_item_vendedor;
    END IF;
    IF v_item_cancelado = 0 THEN
      IF p_manterFinanceiro_Retotalizar <> 2 THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume + TRUNC(CASE WHEN p_item_controleQuantidade = 1 AND p_item_loteMultiplo <> 0 THEN p_item_quantidade / p_item_loteMultiplo ELSE p_item_quantidadeConvertida END,0);
        END IF;
        v_cab_pesoLiquido := v_cab_pesoLiquido + p_item_pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto + p_item_pesoBruto;
      END IF;
      v_cab_quantidade := v_cab_quantidade + p_item_quantidadeConvertida;
      IF v_prod_tipoProduto = '09' THEN
        v_cab_valorServicosBruto := v_cab_valorServicosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorServicos := v_cab_valorServicos + v_item_valorProdutoServico;
        v_cab_valorDescontoServicos := v_cab_valorDescontoServicos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos + p_item_valorAcrescimoItem;
      ELSE 
        v_cab_valorProdutosBruto := v_cab_valorProdutosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorProdutos := v_cab_valorProdutos + v_item_valorProdutoServico;
        v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos + p_item_valorAcrescimoItem;
      END IF;
      v_cab_valorFreteItem := v_cab_valorFreteItem + p_item_valorFreteItem;
      v_cab_valorSeguroItem := v_cab_valorSeguroItem + p_item_valorSeguroItem;
      v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem + p_item_valorAdicFreteMarItem;
      v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem + p_item_valorDespesasAduanItem;
      v_cab_valorFreteGeral := v_cab_valorFreteGeral + v_item_valorFreteGeral;
      v_cab_valorSeguroGeral := v_cab_valorSeguroGeral + p_item_valorSeguroGeral;
      v_cab_valorDescontoGeral := v_cab_valorDescontoGeral + v_item_valorDescontoGeral;
      v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral + p_item_valorOutrasDespesasGer;
      v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral + p_item_valorAdicFreteMarGeral;
      v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral + p_item_valorDespesasAduanGeral;
      v_cab_valorBasePagamento := v_cab_valorBasePagamento + v_item_valorBasePagamento;
      IF p_item_usarPrecoAVista = 1
        AND v_item_geraFinanceiro = 1
      THEN
        v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo + v_item_valorProdutoServico - v_item_valorDescontoTotal + v_item_valorOutrasDespesasTot;
      END IF;
      v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento + v_item_valorDescontoPagamento;
      v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento + v_item_valorOutrasDespPagament;
      v_cab_valorJurosPagamento := v_cab_valorJurosPagamento + v_item_valorJurosPagamento;
      v_cab_valorFreteTotal := v_cab_valorFreteTotal + v_item_valorFreteTotal;
      v_cab_valorSeguroTotal := v_cab_valorSeguroTotal + v_item_valorSeguroTotal;
      v_cab_valorDescontoTotal := v_cab_valorDescontoTotal + v_item_valorDescontoTotal;
      v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal + v_item_valorOutrasDespesasTot;
      v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal + v_item_valorAdicFreteMarTotal;
      v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal + v_item_valorDespesasAduanTotal;
      v_cab_valorLiquidoItem := v_cab_valorLiquidoItem + v_item_valorLiquidoItem;
    ELSE
      v_item_quantidadeSaldo := 0;
    END IF;
    UPDATE MOORCAMENTOS SET
      modalidadeFrete               = v_cab_modalidadeFrete,
      transportadora                = v_cab_transportadora,
      enderecoTransportadora        = v_cab_enderecoTransportadora,
      ultimoVendedorItem            = v_cab_ultimoVendedorItem,
      quantidadeVolume              = v_cab_quantidadeVolume,
      quantidade                    = v_cab_quantidade,
      pesoLiquido                   = v_cab_pesoLiquido,
      pesoBruto                     = v_cab_pesoBruto,
      valorProdutosBruto            = v_cab_valorProdutosBruto,
      valorProdutos                 = v_cab_valorProdutos,
      valorDescontoProdutos         = v_cab_valorDescontoProdutos,
      valorAcrescimoProdutos        = v_cab_valorAcrescimoProdutos,
      valorServicosBruto            = v_cab_valorServicosBruto,
      valorServicos                 = v_cab_valorServicos,
      valorDescontoServicos         = v_cab_valorDescontoServicos,
      valorAcrescimoServicos        = v_cab_valorAcrescimoServicos,
      valorFreteItem                = v_cab_valorFreteItem,
      valorSeguroItem               = v_cab_valorSeguroItem,
      valorAdicFreteMarinhaMerItem  = v_cab_valorAdicFreteMarItem,
      valorDespesasAduaneirasItem   = v_cab_valorDespesasAduanItem,
      valorFreteGeral               = v_cab_valorFreteGeral,
      valorSeguroGeral              = v_cab_valorSeguroGeral,
      valorDescontoGeral            = v_cab_valorDescontoGeral,
      valorOutrasDespesasGeral      = v_cab_valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral = v_cab_valorAdicFreteMarGeral,
      valorDespesasAduaneirasGeral  = v_cab_valorDespesasAduanGeral,
      condicaoPagamento             = v_cab_condicaoPagamento,
      numeroParcelas                = v_cab_numeroParcelas,
      somaPrazoParcelas             = v_cab_somaPrazoParcelas,
      valorXPrazoParcelas           = v_cab_valorXPrazoParcelas,
      prazoMedio                    = v_cab_prazoMedio,
      prazoMedioPonderado           = v_cab_prazoMedioPonderado,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorEntradaMinima            = v_cab_valorEntradaMinima,
      valorAVistaEntrada            = v_cab_valorAVistaEntrada,
      valorPagamentoBruto           = v_cab_valorPagamentoBruto,
      valorDescontoPagamento        = v_cab_valorDescontoPagamento,
      valorOutrasDespesasPagamento  = v_cab_valorOutrasDespPagamento,
      valorJurosPagamento           = v_cab_valorJurosPagamento,
      valorPagamentoLiquido         = v_cab_valorPagamentoLiquido,
      valorTroco                    = v_cab_valorTroco,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorLiquidoItem              = v_cab_valorLiquidoItem
    WHERE orcamento = p_item_orcamento;
    IF p_item_idItemOrcamento > 0 THEN
      DELETE MOORCAMENTOXCOMPOSICOESPR compDoc
      WHERE compDoc.idItemOrcamento = p_item_idItemOrcamento
      AND EXISTS(
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.produto = comp.produto
        WHERE comp.composicaoPreco = compDoc.composicaoPreco
        AND gradProd.gradeProduto <> p_item_gradeProduto);
    END IF;
    v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
      p_sessaoClient,
      p_config_198_obs_add_referenc,
      p_config_199_obs_add_caractA,
      p_config_200_obs_add_caractB,
      p_config_201_obs_add_caractC,
      p_config_202_obs_add_caractD,
      p_config_203_obs_add_caractE,
      p_config_413_obs_add_marca,
      p_config_418_obs_efetarEnter,
      ' ',
      0,
      'O',
      p_item_idItemOrcamento,
      p_item_gradeProduto,
      p_item_idFormulaTinta,
      p_item_personalizacao,
      p_item_idLoteEstoque,
      p_item_controleQuantidade,
      p_item_loteMultiplo,
      p_item_altura,
      p_item_largura,
      p_item_comprimento,
      p_item_quantidade,
      p_item_observacoesDigitadas);
    MERGE INTO MOORCAMENTOXITENS a USING (
      SELECT
        r_item_idItemOrcamento         idItemOrcamento,
        p_item_orcamento               orcamento,
        v_item_sequencia               sequencia,
        v_item_cancelado               cancelado,
        p_item_pedidoCompraFornecedor  pedidoCompraFornecedor,
        p_item_sequenciaPedidoCompraFo sequenciaPedidoCompraFornec,
        p_item_ambiente                ambiente,
        p_item_ambienteObservacoes     ambienteObservacoes,
        p_item_modeloDocumento         modeloDocumento,
        p_item_estabelecimentoOriginal estabelecimentoOriginal,
        p_item_vendedor                vendedor,
        p_item_gradeProduto            gradeProduto,
        p_item_atividadeServico        atividadeServico,
        p_item_statusAtividadeServico  statusAtividadeServico,
        p_item_idFormulaTinta          idFormulaTinta,
        p_item_personalizacao          personalizacao,
        p_item_idLoteEstoque           idLoteEstoque,
        p_item_vinculoItemDocumento    vinculoItemDocumento,
        p_item_operacaoFiscal          operacaoFiscal,
        v_item_movimentaEstoque        movimentaEstoque,
        v_item_geraFinanceiro          geraFinanceiro,
        p_item_localEstoque            localEstoque,
        p_item_pessoaParticipante      pessoaParticipante,
        p_item_dataEntrega             dataEntrega,
        p_item_controleQuantidade      controleQuantidade,
        p_item_unidadeMedidaConversao  unidadeMedidaConversao,
        p_item_conversorQuantidade     conversorQuantidade,
        p_item_loteMinimo              loteMinimo,
        p_item_loteMultiplo            loteMultiplo,
        p_item_altura                  altura,
        p_item_largura                 largura,
        p_item_comprimento             comprimento,
        p_item_pecas                   pecas,
        p_item_quantidade              quantidade,
        p_item_quantidadeConvertida    quantidadeConvertida,
        v_item_quantidadeSaldo         quantidadeSaldo,
        p_item_controleEntrega         controleEntrega,
        p_item_pesoLiquido             pesoLiquido,
        p_item_pesoBruto               pesoBruto,
        p_item_tipoPreco               tipoPreco,
        p_item_tabelaPreco             tabelaPreco,
        p_item_precoSugestaoAPrazo     precoSugestaoAPrazo,
        p_item_precoSugestaoAVista     precoSugestaoAVista,
        p_item_precoDesconto           precoDesconto,
        p_item_precoMinimo             precoMinimo,
        p_item_usarPrecoAVista         usarPrecoAVista,
        p_item_precoUnitarioBruto      precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos acrescimoUnitarioComposicao,
        v_item_precoUnitario           precoUnitario,
        v_item_precoUnitarioConvertido precoUnitarioConvertido,
        v_item_valorProdutoServicoBrut valorProdutoServicoBruto,
        v_item_valorProdutoServico     valorProdutoServico,
        p_item_percDescontoItem        percDescontoItem,
        p_item_valorDescontoItem       valorDescontoItem,
        p_item_percAcrescimoItem       percAcrescimoItem,
        p_item_valorAcrescimoItem      valorAcrescimoItem,
        p_item_valorFreteItem          valorFreteItem,
        p_item_valorSeguroItem         valorSeguroItem,
        p_item_valorAdicFreteMarItem   valorAdicFreteMarinhaMerItem,
        p_item_valorDespesasAduanItem  valorDespesasAduaneirasItem,
        v_item_valorFreteGeral         valorFreteGeral,
        p_item_valorSeguroGeral        valorSeguroGeral,
        v_item_valorDescontoGeral      valorDescontoGeral,
        p_item_valorOutrasDespesasGer  valorOutrasDespesasGeral,
        p_item_valorAdicFreteMarGeral  valorAdicFreteMarinhaMerGeral,
        p_item_valorDespesasAduanGeral valorDespesasAduaneirasGeral,
        v_item_valorBasePagamento      valorBasePagamento,
        v_item_valorDescontoPagamento  valorDescontoPagamento,
        v_item_valorOutrasDespPagament valorOutrasDespesasPagamento,
        v_item_valorJurosPagamento     valorJurosPagamento,
        v_item_valorFreteTotal         valorFreteTotal,
        v_item_valorSeguroTotal        valorSeguroTotal,
        v_item_valorDescontoTotal      valorDescontoTotal,
        v_item_valorOutrasDespesasTot  valorOutrasDespesasTotal,
        v_item_valorAdicFreteMarTotal  valorAdicFreteMarinhaMerTotal,
        v_item_valorDespesasAduanTotal valorDespesasAduaneirasTotal,
        v_item_cfop                    cfop,
        v_item_indicadorISSQN          indicadorISSQN,
        v_item_aliquotaISSQN           aliquotaISSQN,
        v_item_retidoISSQN             retidoISSQN,
        v_item_tributadoForaMunicipio  tributadoForaMunicipio,
        v_item_incentivoFiscal         incentivoFiscal,
        v_item_listaServicos           listaServicos,
        v_item_cnae                    cnae,
        v_item_idServicoMunicipio      idServicoMunicipio,
        v_item_numeroProcessoAdministr numeroProcessoAdministrativo,
        v_item_baseISSQN               baseISSQN,
        v_item_valorISSQN              valorISSQN,
        v_item_retencaoIRRF            retencaoIRRF,
        v_item_baseRetIRRF             baseRetIRRF,
        v_item_valorRetIRRF            valorRetIRRF,
        v_item_retencaoINSS            retencaoINSS,
        v_item_baseRetINSS             baseRetINSS,
        v_item_valorRetINSS            valorRetINSS,
        v_item_retencaoPIS             retencaoPIS,
        v_item_baseRetPIS              baseRetPIS,
        v_item_valorRetPIS             valorRetPIS,
        v_item_retencaoCOFINS          retencaoCOFINS,
        v_item_baseRetCOFINS           baseRetCOFINS,
        v_item_valorRetCOFINS          valorRetCOFINS,
        v_item_retencaoCSLL            retencaoCSLL,
        v_item_baseRetCSLL             baseRetCSLL,
        v_item_valorRetCSLL            valorRetCSLL,
        v_item_retencaoOutros          retencaoOutros,
        v_item_baseRetOutros           baseRetOutros,
        v_item_valorRetOutros          valorRetOutros,
        v_item_aliquotaII              aliquotaII,
        v_item_baseII                  baseII,
        v_item_valorII                 valorII,
        v_item_aliquotaIOF             aliquotaIOF,
        v_item_baseIOF                 baseIOF,
        v_item_valorIOF                valorIOF,
        v_item_codigoEnquadramentoIPI  codigoEnquadramentoIPI,
        v_item_stIPI                   stIPI,
        v_item_aliquotaIPI             aliquotaIPI,
        v_item_valorAliquotaIPI        valorAliquotaIPI,
        v_item_baseIPI                 baseIPI,
        v_item_valorIPI                valorIPI,
        v_item_stPIS                   stPIS,
        v_item_aliquotaPIS             aliquotaPIS,
        v_item_valorAliquotaPIS        valorAliquotaPIS,
        v_item_basePIS                 basePIS,
        v_item_valorPIS                valorPIS,
        v_item_aliquotaPISST           aliquotaPISST,
        v_item_valorAliquotaPISST      valorAliquotaPISST,
        v_item_basePISST               basePISST,
        v_item_valorPISST              valorPISST,
        v_item_stCOFINS                stCOFINS,
        v_item_aliquotaCOFINS          aliquotaCOFINS,
        v_item_valorAliquotaCOFINS     valorAliquotaCOFINS,
        v_item_baseCOFINS              baseCOFINS,
        v_item_valorCOFINS             valorCOFINS,
        v_item_aliquotaCOFINSST        aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST   valorAliquotaCOFINSST,
        v_item_baseCOFINSST            baseCOFINSST,
        v_item_valorCOFINSST           valorCOFINSST,
        v_item_stSimplesNacional       stSimplesNacional,
        v_item_creditoSimplesNacional  creditoSimplesNacional,
        v_item_baseCreditoSimplesNac   baseCreditoSimplesNacional,
        v_item_valorCreditoSimplesNac  valorCreditoSimplesNacional,
        v_item_stICMS                  stICMS,
        v_item_modalBaseCalcICMS       modalidadeBaseCalcICMS,
        v_item_reducaoBaseICMS         reducaoBaseICMS,
        v_item_aliquotaICMS            aliquotaICMS,
        v_item_diferimentoICMS         diferimentoICMS,
        v_item_motivoDesoneracaoICMS   motivoDesoneracaoICMS,
        v_item_idBeneficio             idBeneficio,
        v_item_baseICMS                baseICMS,
        v_item_valorICMSOperacao       valorICMSOperacao,
        v_item_valorICMSDiferido       valorICMSDiferido,
        v_item_valorICMS               valorICMS,
        v_item_valorICMSDesoneracao    valorICMSDesoneracao,
        v_item_modalBaseCalcICMSST     modalidadeBaseCalcICMSST,
        v_item_margemValorAdicionadoST margemValorAdicionadoST,
        v_item_reducaoBaseST           reducaoBaseST,
        v_item_aliquotaICMSST          aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin aliquotaSTSuportConsFinal,
        v_item_baseICMSST              baseICMSST,
        v_item_valorICMSST             valorICMSST,
        v_item_baseICMSSTAnteriormente baseICMSSTAnteriormente,
        v_item_valorICMSSTAnteriorment valorICMSSTAnteriormente,
        v_item_valorICMSProprioSubstit valorICMSProprioSubstituto,
        v_item_reducaoBaseICMSEfetivo  reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo     aliquotaICMSEfetivo,
        v_item_baseICMSEfetivo         baseICMSEfetivo,
        v_item_valorICMSEfetivo        valorICMSEfetivo,
        v_item_aliquotaICMSUFDestinat  aliquotaICMSUFDestinatario,
        v_item_aliquotaICMSInterestad  aliquotaICMSInterestadual,
        v_item_partilhaICMSInterestad  partilhaICMSInterestadual,
        v_item_baseICMSUFDestinatario  baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente     baseICMSUFRemetente,
        v_item_valorICMSUFRemetente    valorICMSUFRemetente,
        v_item_aliquotaFCP             aliquotaFCP,
        v_item_baseFCP                 baseFCP,
        v_item_valorFCP                valorFCP,
        v_item_aliquotaFCPST           aliquotaFCPST,
        v_item_baseFCPST               baseFCPST,
        v_item_valorFCPST              valorFCPST,
        v_item_aliquotaFCPSTAnteriorm  aliquotaFCPSTAnteriormente,
        v_item_baseFCPSTAnteriormente  baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente valorFCPSTAnteriormente,
        v_item_aliquotaFCPUFDestinat   aliquotaFCPUFDestinatario,
        v_item_baseFCPUFDestinatario   baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario  valorFCPUFDestinatario,
        v_item_aliquotaEstImpFederais  aliquotaEstimadaImpFederais,
        v_item_aliquotaEstImpEstaduais aliquotaEstimadaImpEstaduais,
        v_item_aliquotaEstImpMunicipai aliquotaEstimadaImpMunicipais,
        v_item_baseEstimadaImpostos    baseEstimadaImpostos,
        v_item_valorEstImpFederais     valorEstimadoImpFederais,
        v_item_valorEstImpEstaduais    valorEstimadoImpEstaduais,
        v_item_valorEstImpMunicipais   valorEstimadoImpMunicipais,
        v_item_valorLiquidoItem        valorLiquidoItem,
        p_item_observacoesDigitadas    observacoesDigitadas,
        v_observacoes                  observacoes
      FROM DUAL) b
    ON (a.idItemOrcamento = b.idItemOrcamento)
    WHEN MATCHED THEN UPDATE SET
      a.orcamento                     = b.orcamento,
      a.sequencia                     = b.sequencia,
      a.cancelado                     = b.cancelado,
      a.pedidoCompraFornecedor        = b.pedidoCompraFornecedor,
      a.sequenciaPedidoCompraFornec   = b.sequenciaPedidoCompraFornec,
      a.ambiente                      = b.ambiente,
      a.ambienteObservacoes           = b.ambienteObservacoes,
      a.vendedor                      = b.vendedor,
      a.modeloDocumento               = b.modeloDocumento,
      a.estabelecimentoOriginal       = b.estabelecimentoOriginal,
      a.gradeProduto                  = b.gradeProduto,
      a.atividadeServico              = b.atividadeServico,
      a.statusAtividadeServico        = b.statusAtividadeServico,
      a.idFormulaTinta                = b.idFormulaTinta,
      a.personalizacao                = b.personalizacao,
      a.idLoteEstoque                 = b.idLoteEstoque,
      a.vinculoItemDocumento          = b.vinculoItemDocumento,
      a.operacaoFiscal                = b.operacaoFiscal,
      a.movimentaEstoque              = b.movimentaEstoque,
      a.geraFinanceiro                = b.geraFinanceiro,
      a.localEstoque                  = b.localEstoque,
      a.pessoaParticipante            = b.pessoaParticipante,
      a.dataEntrega                   = b.dataEntrega,
      a.controleQuantidade            = b.controleQuantidade,
      a.unidadeMedidaConversao        = b.unidadeMedidaConversao,
      a.conversorQuantidade           = b.conversorQuantidade,
      a.loteMinimo                    = b.loteMinimo,
      a.loteMultiplo                  = b.loteMultiplo,
      a.altura                        = b.altura,
      a.largura                       = b.largura,
      a.comprimento                   = b.comprimento,
      a.pecas                         = b.pecas,
      a.quantidade                    = b.quantidade,
      a.quantidadeConvertida          = b.quantidadeConvertida,
      a.quantidadeSaldo               = b.quantidadeSaldo,
      a.controleEntrega               = b.controleEntrega,
      a.pesoLiquido                   = b.pesoLiquido,
      a.pesoBruto                     = b.pesoBruto,
      a.tipoPreco                     = b.tipoPreco,
      a.tabelaPreco                   = b.tabelaPreco,
      a.precoSugestaoAPrazo           = b.precoSugestaoAPrazo,
      a.precoSugestaoAVista           = b.precoSugestaoAVista,
      a.precoDesconto                 = b.precoDesconto,
      a.precoMinimo                   = b.precoMinimo,
      a.usarPrecoAVista               = b.usarPrecoAVista,
      a.precoUnitarioBruto            = b.precoUnitarioBruto,
      a.acrescimoUnitarioComposicao   = b.acrescimoUnitarioComposicao,
      a.precoUnitario                 = b.precoUnitario,
      a.precoUnitarioConvertido       = b.precounitarioConvertido,
      a.valorProdutoServicoBruto      = b.valorProdutoServicoBruto,
      a.valorProdutoServico           = b.valorProdutoServico,
      a.percDescontoItem              = b.percDescontoItem,
      a.valorDescontoItem             = b.valorDescontoItem,
      a.percAcrescimoItem             = b.percAcrescimoItem,
      a.valorAcrescimoItem            = b.valorAcrescimoItem,
      a.valorFreteItem                = b.valorFreteItem,
      a.valorSeguroItem               = b.valorSeguroItem,
      a.valorAdicFreteMarinhaMerItem  = b.valorAdicFreteMarinhaMerItem,
      a.valorDespesasAduaneirasItem   = b.valorDespesasAduaneirasItem,
      a.valorFreteGeral               = b.valorFreteGeral,
      a.valorSeguroGeral              = b.valorSeguroGeral,
      a.valorDescontoGeral            = b.valorDescontoGeral,
      a.valorOutrasDespesasGeral      = b.valorOutrasDespesasGeral,
      a.valorAdicFreteMarinhaMerGeral = b.valorAdicFreteMarinhaMerGeral,
      a.valorDespesasAduaneirasGeral  = b.valorDespesasAduaneirasGeral,
      a.valorBasePagamento            = b.valorBasePagamento,
      a.valorDescontoPagamento        = b.valorDescontoPagamento,
      a.valorOutrasDespesasPagamento  = b.valorOutrasDespesasPagamento,
      a.valorJurosPagamento           = b.valorJurosPagamento,
      a.valorFreteTotal               = b.valorFreteTotal,
      a.valorSeguroTotal              = b.valorSeguroTotal,
      a.valorDescontoTotal            = b.valorDescontoTotal,
      a.valorOutrasDespesasTotal      = b.valorOutrasDespesasTotal,
      a.valorAdicFreteMarinhaMerTotal = b.valorAdicFreteMarinhaMerTotal,
      a.valorDespesasAduaneirasTotal  = b.valorDespesasAduaneirasTotal,
      a.cfop                          = b.cfop,
      a.indicadorISSQN                = b.indicadorISSQN,
      a.aliquotaISSQN                 = b.aliquotaISSQN,
      a.baseISSQN                     = b.baseISSQN,
      a.valorISSQN                    = b.valorISSQN,
      a.retidoISSQN                   = b.retidoISSQN,
      a.tributadoForaMunicipio        = b.tributadoForaMunicipio,
      a.incentivoFiscal               = b.incentivoFiscal,
      a.listaServicos                 = b.listaServicos,
      a.cnae                          = b.cnae,
      a.idServicoMunicipio            = b.idServicoMunicipio,
      a.numeroProcessoAdministrativo  = b.numeroProcessoAdministrativo,
      a.retencaoIRRF                  = b.retencaoIRRF,
      a.baseRetIRRF                   = b.baseRetIRRF,
      a.valorRetIRRF                  = b.valorRetIRRF,
      a.retencaoINSS                  = b.retencaoINSS,
      a.baseRetINSS                   = b.baseRetINSS,
      a.valorRetINSS                  = b.valorRetINSS,
      a.retencaoPIS                   = b.retencaoPIS,
      a.baseRetPIS                    = b.baseRetPIS,
      a.valorRetPIS                   = b.valorRetPIS,
      a.retencaoCOFINS                = b.retencaoCOFINS,
      a.baseRetCOFINS                 = b.baseRetCOFINS,
      a.valorRetCOFINS                = b.valorRetCOFINS,
      a.retencaoCSLL                  = b.retencaoCSLL,
      a.baseRetCSLL                   = b.baseRetCSLL,
      a.valorRetCSLL                  = b.valorRetCSLL,
      a.retencaoOutros                = b.retencaoOutros,
      a.baseRetOutros                 = b.baseRetOutros,
      a.valorRetOutros                = b.valorRetOutros,
      a.aliquotaII                    = b.aliquotaII,
      a.baseII                        = b.baseII,
      a.valorII                       = b.valorII,
      a.aliquotaIOF                   = b.aliquotaIOF,
      a.baseIOF                       = b.baseIOF,
      a.valorIOF                      = b.valorIOF,
      a.codigoEnquadramentoIPI        = b.codigoEnquadramentoIPI,
      a.stIPI                         = b.stIPI,
      a.aliquotaIPI                   = b.aliquotaIPI,
      a.valorAliquotaIPI              = b.valorAliquotaIPI,
      a.baseIPI                       = b.baseIPI,
      a.valorIPI                      = b.valorIPI,
      a.stPIS                         = b.stPIS,
      a.aliquotaPIS                   = b.aliquotaPIS,
      a.valorAliquotaPIS              = b.valorAliquotaPIS,
      a.basePIS                       = b.basePIS,
      a.valorPIS                      = b.valorPIS,
      a.aliquotaPISST                 = b.aliquotaPISST,
      a.valorAliquotaPISST            = b.valorAliquotaPISST,
      a.basePISST                     = b.basePISST,
      a.valorPISST                    = b.valorPISST,
      a.stCOFINS                      = b.stCOFINS,
      a.aliquotaCOFINS                = b.aliquotaCOFINS,
      a.valorAliquotaCOFINS           = b.valorAliquotaCOFINS,
      a.baseCOFINS                    = b.baseCOFINS,
      a.valorCOFINS                   = b.valorCOFINS,
      a.aliquotaCOFINSST              = b.aliquotaCOFINSST,
      a.valorAliquotaCOFINSST         = b.valorAliquotaCOFINSST,
      a.baseCOFINSST                  = b.baseCOFINSST,
      a.valorCOFINSST                 = b.valorCOFINSST,
      a.stSimplesNacional             = b.stSimplesNacional,
      a.creditoSimplesNacional        = b.creditoSimplesNacional,
      a.baseCreditoSimplesNacional    = b.baseCreditoSimplesNacional,
      a.valorCreditoSimplesNacional   = b.valorCreditoSimplesNacional,
      a.stICMS                        = b.stICMS,
      a.modalidadeBaseCalcICMS        = b.modalidadeBaseCalcICMS,
      a.reducaoBaseICMS               = b.reducaoBaseICMS,
      a.aliquotaICMS                  = b.aliquotaICMS,
      a.diferimentoICMS               = b.diferimentoICMS,
      a.motivoDesoneracaoICMS         = b.motivoDesoneracaoICMS,
      a.idBeneficio                   = b.idBeneficio,
      a.baseICMS                      = b.baseICMS,
      a.valorICMSoperacao             = b.valorICMSoperacao,
      a.valorICMSdiferido             = b.valorICMSdiferido,
      a.valorICMS                     = b.valorICMS,
      a.valorICMSdesoneracao          = b.valorICMSdesoneracao,
      a.modalidadeBaseCalcICMSST      = b.modalidadeBaseCalcICMSST,
      a.margemValorAdicionadoST       = b.margemValorAdicionadoST,
      a.reducaoBaseST                 = b.reducaoBaseST,
      a.aliquotaICMSST                = b.aliquotaICMSST,
      a.aliquotaSTSuportConsFinal     = b.aliquotaSTSuportConsFinal,
      a.baseICMSST                    = b.baseICMSST,
      a.valorICMSST                   = b.valorICMSST,
      a.baseICMSSTAnteriormente       = b.baseICMSSTAnteriormente,
      a.valorICMSSTAnteriormente      = b.valorICMSSTAnteriormente,
      a.valorICMSProprioSubstituto    = b.valorICMSProprioSubstituto,
      a.reducaoBaseICMSEfetivo        = b.reducaoBaseICMSEfetivo,
      a.aliquotaICMSEfetivo           = b.aliquotaICMSEfetivo,
      a.baseICMSEfetivo               = b.baseICMSEfetivo,
      a.valorICMSEfetivo              = b.valorICMSEfetivo,
      a.aliquotaICMSUFDestinatario    = b.aliquotaICMSUFDestinatario,
      a.aliquotaICMSInterestadual     = b.aliquotaICMSInterestadual,
      a.partilhaICMSInterestadual     = b.partilhaICMSInterestadual,
      a.baseICMSUFDestinatario        = b.baseICMSUFDestinatario,
      a.valorICMSUFDestinatario       = b.valorICMSUFDestinatario,
      a.baseICMSUFRemetente           = b.baseICMSUFRemetente,
      a.valorICMSUFRemetente          = b.valorICMSUFRemetente,
      a.aliquotaFCP                   = b.aliquotaFCP,
      a.baseFCP                       = b.baseFCP,
      a.valorFCP                      = b.valorFCP,
      a.aliquotaFCPST                 = b.aliquotaFCPST,
      a.baseFCPST                     = b.baseFCPST,
      a.valorFCPST                    = b.valorFCPST,
      a.aliquotaFCPSTAnteriormente    = b.aliquotaFCPSTAnteriormente,
      a.baseFCPSTAnteriormente        = b.baseFCPSTAnteriormente,
      a.valorFCPSTAnteriormente       = b.valorFCPSTAnteriormente,
      a.aliquotaFCPUFDestinatario     = b.aliquotaFCPUFDestinatario,
      a.baseFCPUFDestinatario         = b.baseFCPUFDestinatario,
      a.valorFCPUFDestinatario        = b.valorFCPUFDestinatario,
      a.aliquotaestimadaimpfederais   = b.aliquotaestimadaimpfederais,
      a.aliquotaestimadaimpestaduais  = b.aliquotaestimadaimpestaduais,
      a.aliquotaestimadaimpmunicipais = b.aliquotaestimadaimpmunicipais,
      a.baseestimadaimpostos          = b.baseestimadaimpostos,
      a.valorestimadoimpfederais      = b.valorestimadoimpfederais,
      a.valorEstimadoImpEstaduais     = b.valorEstimadoImpEstaduais,
      a.valorEstimadoImpMunicipais    = b.valorEstimadoImpMunicipais,
      a.valorLiquidoItem              = b.valorLiquidoItem,
      a.observacoesDigitadas          = b.observacoesDigitadas,
      a.observacoes                   = b.observacoes
    WHEN NOT MATCHED THEN INSERT (
      idItemOrcamento,
      orcamento,
      sequencia,
      cancelado,
      pedidoCompraFornecedor,
      sequenciaPedidoCompraFornec,
      ambiente,
      ambienteObservacoes,
      modeloDocumento,
      estabelecimentoOriginal,
      vendedor,
      gradeProduto,
      atividadeServico,
      statusAtividadeServico,
      idFormulaTinta,
      personalizacao,
      idLoteEstoque,
      vinculoItemDocumento,
      operacaoFiscal,
      movimentaEstoque,
      geraFinanceiro,
      localEstoque,
      pessoaParticipante,
      dataEntrega,
      controleQuantidade,
      unidadeMedidaConversao,
      conversorQuantidade,
      loteMinimo,
      loteMultiplo,
      altura,
      largura,
      comprimento,
      pecas,
      quantidade,
      quantidadeConvertida,
      quantidadeSaldo,
      controleEntrega,
      pesoLiquido,
      pesoBruto,
      tipoPreco,
      tabelaPreco,
      precoSugestaoAPrazo,
      precoSugestaoAVista,
      precoDesconto,
      precoMinimo,
      usarPrecoAVista,
      precoUnitarioBruto,
      acrescimoUnitarioComposicao,
      precoUnitario,
      precoUnitarioConvertido,
      valorProdutoServicoBruto,
      valorProdutoServico,
      percDescontoItem,
      valorDescontoItem,
      percAcrescimoItem,
      valorAcrescimoItem,
      valorFreteItem,
      valorSeguroItem,
      valorAdicFreteMarinhaMerItem,
      valorDespesasAduaneirasItem,
      valorFreteGeral,
      valorSeguroGeral,
      valorDescontoGeral,
      valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral,
      valorDespesasAduaneirasGeral,
      valorBasePagamento,
      valorDescontoPagamento,
      valorOutrasDespesasPagamento,
      valorJurosPagamento,
      valorFreteTotal,
      valorSeguroTotal,
      valorDescontoTotal,
      valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal,
      valorDespesasAduaneirasTotal,
      cfop,
      indicadorISSQN,
      aliquotaISSQN,
      retidoISSQN,
      tributadoForaMunicipio,
      incentivoFiscal,
      listaServicos,
      cnae,
      idServicoMunicipio,
      numeroProcessoAdministrativo,
      baseISSQN,
      valorISSQN,
      retencaoIRRF,
      baseRetIRRF,
      valorRetIRRF,
      retencaoINSS,
      baseRetINSS,
      valorRetINSS,
      retencaoPIS,
      baseRetPIS,
      valorRetPIS,
      retencaoCOFINS,
      baseRetCOFINS,
      valorRetCOFINS,
      retencaoCSLL,
      baseRetCSLL,
      valorRetCSLL,
      retencaoOutros,
      baseRetOutros,
      valorRetOutros,
      aliquotaII,
      baseII,
      valorII,
      aliquotaIOF,
      baseIOF,
      valorIOF,
      codigoEnquadramentoIPI,
      stIPI,
      aliquotaIPI,
      valorAliquotaIPI,
      baseIPI,
      valorIPI,
      stPIS,
      aliquotaPIS,
      valorAliquotaPIS,
      basePIS,
      valorPIS,
      aliquotaPISST,
      valorAliquotaPISST,
      basePISST,
      valorPISST,
      stCOFINS,
      aliquotaCOFINS,
      valorAliquotaCOFINS,
      baseCOFINS,
      valorCOFINS,
      aliquotaCOFINSST,
      valorAliquotaCOFINSST,
      baseCOFINSST,
      valorCOFINSST,
      stSimplesNacional,
      creditoSimplesNacional,
      baseCreditoSimplesNacional,
      valorCreditoSimplesNacional,
      stICMS,
      modalidadeBaseCalcICMS,
      reducaoBaseICMS,
      aliquotaICMS,
      diferimentoICMS,
      motivoDesoneracaoICMS,
      idBeneficio,
      baseICMS,
      valorICMSOperacao,
      valorICMSDiferido,
      valorICMS,
      valorICMSDesoneracao,
      modalidadeBaseCalcICMSST,
      margemValorAdicionadoST,
      reducaoBaseST,
      aliquotaICMSST,
      aliquotaSTSuportConsFinal,
      baseICMSST,
      valorICMSST,
      baseICMSSTAnteriormente,
      valorICMSSTAnteriormente,
      valorICMSProprioSubstituto,
      reducaoBaseICMSEfetivo,
      aliquotaICMSEfetivo,
      baseICMSEfetivo,
      valorICMSEfetivo,
      aliquotaICMSUFDestinatario,
      aliquotaICMSInterestadual,
      partilhaICMSInterestadual,
      baseICMSUFDestinatario,
      valorICMSUFDestinatario,
      baseICMSUFRemetente,
      valorICMSUFRemetente,
      aliquotaFCP,
      baseFCP,
      valorFCP,
      aliquotaFCPST,
      baseFCPST,
      valorFCPST,
      aliquotaFCPSTAnteriormente,
      baseFCPSTAnteriormente,
      valorFCPSTAnteriormente,
      aliquotaFCPUFDestinatario,
      baseFCPUFDestinatario,
      valorFCPUFDestinatario,
      aliquotaEstimadaImpFederais,
      aliquotaEstimadaImpEstaduais,
      aliquotaEstimadaImpMunicipais,
      baseEstimadaImpostos,
      valorEstimadoImpFederais,
      valorEstimadoImpEstaduais,
      valorEstimadoImpMunicipais,
      valorLiquidoItem,
      observacoesDigitadas,
      observacoes)
    VALUES (
      b.idItemOrcamento,
      b.orcamento,
      b.sequencia,
      b.cancelado,
      b.pedidoCompraFornecedor,
      b.sequenciaPedidoCompraFornec,
      b.ambiente,
      b.ambienteObservacoes,
      b.modeloDocumento,
      b.estabelecimentoOriginal,
      b.vendedor,
      b.gradeProduto,
      b.atividadeServico,
      b.statusAtividadeServico,
      b.idFormulaTinta,
      b.personalizacao,
      b.idLoteEstoque,
      b.vinculoItemDocumento,
      b.operacaoFiscal,
      b.movimentaEstoque,
      b.geraFinanceiro,
      b.localEstoque,
      b.pessoaParticipante,
      b.dataEntrega,
      b.controleQuantidade,
      b.unidadeMedidaConversao,
      b.conversorQuantidade,
      b.loteMinimo,
      b.loteMultiplo,
      b.altura,
      b.largura,
      b.comprimento,
      b.pecas,
      b.quantidade,
      b.quantidadeConvertida,
      b.quantidadeSaldo,
      b.controleEntrega,
      b.pesoLiquido,
      b.pesoBruto,
      b.tipoPreco,
      b.tabelaPreco,
      b.precoSugestaoAPrazo,
      b.precoSugestaoAVista,
      b.precoDesconto,
      b.precoMinimo,
      b.usarPrecoAVista,
      b.precoUnitarioBruto,
      b.acrescimoUnitarioComposicao,
      b.precoUnitario,
      b.precoUnitarioConvertido,
      b.valorProdutoServicoBruto,
      b.valorProdutoServico,
      b.percDescontoItem,
      b.valorDescontoItem,
      b.percAcrescimoItem,
      b.valorAcrescimoItem,
      b.valorFreteItem,
      b.valorSeguroItem,
      b.valorAdicFreteMarinhaMerItem,
      b.valorDespesasAduaneirasItem,
      b.valorFreteGeral,
      b.valorSeguroGeral,
      b.valorDescontoGeral,
      b.valorOutrasDespesasGeral,
      b.valorAdicFreteMarinhaMerGeral,
      b.valorDespesasAduaneirasGeral,
      b.valorBasePagamento,
      b.valorDescontoPagamento,
      b.valorOutrasDespesasPagamento,
      b.valorJurosPagamento,
      b.valorFreteTotal,
      b.valorSeguroTotal,
      b.valorDescontoTotal,
      b.valorOutrasDespesasTotal,
      b.valorAdicFreteMarinhaMerTotal,
      b.valorDespesasAduaneirasTotal,
      b.cfop,
      b.indicadorISSQN,
      b.aliquotaISSQN,
      b.retidoISSQN,
      b.tributadoForaMunicipio,
      b.incentivoFiscal,
      b.listaServicos,
      b.cnae,
      b.idServicoMunicipio,
      b.numeroProcessoAdministrativo,
      b.baseISSQN,
      b.valorISSQN,
      b.retencaoIRRF,
      b.baseRetIRRF,
      b.valorRetIRRF,
      b.retencaoINSS,
      b.baseRetINSS,
      b.valorRetINSS,
      b.retencaoPIS,
      b.baseRetPIS,
      b.valorRetPIS,
      b.retencaoCOFINS,
      b.baseRetCOFINS,
      b.valorRetCOFINS,
      b.retencaoCSLL,
      b.baseRetCSLL,
      b.valorRetCSLL,
      b.retencaoOutros,
      b.baseRetOutros,
      b.valorRetOutros,
      b.aliquotaII,
      b.baseII,
      b.valorII,
      b.aliquotaIOF,
      b.baseIOF,
      b.valorIOF,
      b.codigoEnquadramentoIPI,
      b.stIPI,
      b.aliquotaIPI,
      b.valorAliquotaIPI,
      b.baseIPI,
      b.valorIPI,
      b.stPIS,
      b.aliquotaPIS,
      b.valorAliquotaPIS,
      b.basePIS,
      b.valorPIS,
      b.aliquotaPISST,
      b.valorAliquotaPISST,
      b.basePISST,
      b.valorPISST,
      b.stCOFINS,
      b.aliquotaCOFINS,
      b.valorAliquotaCOFINS,
      b.baseCOFINS,
      b.valorCOFINS,
      b.aliquotaCOFINSST,
      b.valorAliquotaCOFINSST,
      b.baseCOFINSST,
      b.valorCOFINSST,
      b.stSimplesNacional,
      b.creditoSimplesNacional,
      b.baseCreditoSimplesNacional,
      b.valorCreditoSimplesNacional,
      b.stICMS,
      b.modalidadeBaseCalcICMS,
      b.reducaoBaseICMS,
      b.aliquotaICMS,
      b.diferimentoICMS,
      b.motivoDesoneracaoICMS,
      b.idBeneficio,
      b.baseICMS,
      b.valorICMSOperacao,
      b.valorICMSDiferido,
      b.valorICMS,
      b.valorICMSDesoneracao,
      b.modalidadeBaseCalcICMSST,
      b.margemValorAdicionadoST,
      b.reducaoBaseST,
      b.aliquotaICMSST,
      b.aliquotaSTSuportConsFinal,
      b.baseICMSST,
      b.valorICMSST,
      b.baseICMSSTAnteriormente,
      b.valorICMSSTAnteriormente,
      b.valorICMSProprioSubstituto,
      b.reducaoBaseICMSEfetivo,
      b.aliquotaICMSEfetivo,
      b.baseICMSEfetivo,
      b.valorICMSEfetivo,
      b.aliquotaICMSUFDestinatario,
      b.aliquotaICMSInterestadual,
      b.partilhaICMSInterestadual,
      b.baseICMSUFDestinatario,
      b.valorICMSUFDestinatario,
      b.baseICMSUFRemetente,
      b.valorICMSUFRemetente,
      b.aliquotaFCP,
      b.baseFCP,
      b.valorFCP,
      b.aliquotaFCPST,
      b.baseFCPST,
      b.valorFCPST,
      b.aliquotaFCPSTAnteriormente,
      b.baseFCPSTAnteriormente,
      b.valorFCPSTAnteriormente,
      b.aliquotaFCPUFDestinatario,
      b.baseFCPUFDestinatario,
      b.valorFCPUFDestinatario,
      b.aliquotaEstimadaImpFederais,
      b.aliquotaEstimadaImpEstaduais,
      b.aliquotaEstimadaImpMunicipais,
      b.baseEstimadaImpostos,
      b.valorEstimadoImpFederais,
      b.valorEstimadoImpEstaduais,
      b.valorEstimadoImpMunicipais,
      b.valorLiquidoItem,
      b.observacoesDigitadas,
      b.observacoes);
    IF p_idItemReferenciado > 0 THEN
      IF p_tipoDocumentoReferenciado = 'C' THEN
        UPDATE MOPAINELCOMPRAXGRADE
        SET idItemOrcamento = r_item_idItemOrcamento
        WHERE idGradePainelCompra = p_idItemReferenciado;
      ELSIF p_tipoDocumentoReferenciado = 'F' THEN
        ADD_ORCAMENTO_ITEM_REF_CONTR (
          p_estabelecimentoAtivo,
          p_idItemReferenciado,
          r_item_idItemOrcamento,
          p_quantidadeReferenciada);
      ELSIF p_tipoDocumentoReferenciado = 'L' THEN
        ADD_ORCAMENTO_ITEM_LISTA_GRAVA (
          p_estabelecimentoAtivo,
          p_idItemReferenciado,
          r_item_idItemOrcamento,
          p_quantidadeReferenciada);
      ELSIF p_tipoDocumentoReferenciado = 'O' THEN
        ADD_ORCAMENTO_ITEM_REF_ORCAMEN (
          p_estabelecimentoAtivo,
          v_cab_tipoDocumento,
          r_item_idItemOrcamento,
          p_item_quantidade,
          p_idItemReferenciado,
          p_quantidadeReferenciada,
          0,
          v_auxNumber);
      ELSIF p_tipoDocumentoReferenciado = 'T' THEN
        ADD_ORCAMENTO_ITEM_TRANS_GRAVA (
          p_estabelecimentoAtivo,
          v_cab_entradaSaida,
          p_idItemReferenciado,
          r_item_idItemOrcamento,
          p_quantidadeReferenciada);
      END IF;
    END IF;
    IF p_tempComp_nomeTempComposicao <> ' '
      AND (p_tipoDocumentoReferenciado <> 'O'
        OR p_idItemReferenciado <= 0)
    THEN
      ADD_ORCAMENTO_ITEM_COMP_TEMP (
        p_sessaoClient,
        p_estabelecimentoAtivo,
        p_tempComp_nomeTempComposicao,
        p_tempComp_sequencia,
        r_item_idItemOrcamento,
        0,
        v_auxNumber);
    END IF;
    v_idEnderecoEstoque := 0;
    IF p_item_idEnderecoEstoque > 0 THEN
      ADD_ORCAMENTO_ITEM_ENDER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemOrcamento,
        p_item_idEnderecoEstoque,
        p_item_quantidade,
        p_item_quantidade,
        ' ',
        v_idEnderecoEstoque);
    END IF;
    IF p_item_idNumeroSerie > 0 THEN
      ADD_ORCAMENTO_ITEM_N_SER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemOrcamento,
        v_idEnderecoEstoque,
        p_item_gradeProduto,
        p_item_idNumeroSerie,
        0,
        v_auxNumber);
    END IF;
    IF p_item_atividadeProjeto > 0 THEN
      ADD_ORCAMENTO_ITEM_PROJ_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemOrcamento,
        p_item_atividadeProjeto,
        v_auxNumber);
    END IF;
    v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
      p_sessaoClient,
      p_config_198_obs_add_referenc,
      p_config_199_obs_add_caractA,
      p_config_200_obs_add_caractB,
      p_config_201_obs_add_caractC,
      p_config_202_obs_add_caractD,
      p_config_203_obs_add_caractE,
      p_config_413_obs_add_marca,
      p_config_418_obs_efetarEnter,
      p_tempComp_nomeTempComposicao,
      p_tempComp_sequencia,
      'O',
      r_item_idItemOrcamento,
      p_item_gradeProduto,
      p_item_idFormulaTinta,
      p_item_personalizacao,
      p_item_idLoteEstoque,
      p_item_controleQuantidade,
      p_item_loteMultiplo,
      p_item_altura,
      p_item_largura,
      p_item_comprimento,
      p_item_quantidade,
      p_item_observacoesDigitadas);
    UPDATE MOORCAMENTOXITENS
    SET observacoes = v_observacoes
    WHERE idItemOrcamento = r_item_idItemOrcamento;
    IF v_etOrc_situacaoOrcamento > 40 THEN
      ADD_ORCAMENTO_ITEM_RES_ITEM (
        r_item_idItemOrcamento,
        p_estabelecimentoAtivo,
        ' ',
        v_auxVarchar);
    END IF;
    r_buffer_item_idItemOrcamento := CASE WHEN (r_buffer_item_idItemOrcamento IS NULL OR r_buffer_item_idItemOrcamento = '' OR r_buffer_item_idItemOrcamento = ' ') THEN '' ELSE RTRIM (r_buffer_item_idItemOrcamento) || ';' END || TO_CHAR (LPAD(r_item_idItemOrcamento,14,'0'));
    r_valorInserido := v_item_valorProdutoServico
      - CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN p_item_valorDescontoItem
          ELSE 0
        END
      + CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN p_item_valorAcrescimoItem
          ELSE 0
        END;
    IF p_item_idItemOrcamento <= 0
      AND v_item_cancelado = 0
      AND p_item_atividadeServico > 0
    THEN
      SELECT
        habilitaAtividadePrevista,
        selecionaAtividadePrevista
      INTO
        v_auxNumber,
        v_ativ_selecionaAtividadePrev
      FROM PAATIVIDADESSERVICO
      WHERE atividadeServico = p_item_atividadeServico;
      IF v_auxNumber = 1 THEN
        ADD_ORCAMENTO_ITEM_PREV_INSERE (
          p_config_64_casasDecSaidas,
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          p_estabelecimentoAtivo,
          v_cab_estabelecimento,
          v_cab_pessoa,
          v_munEndEst_uf,
          v_munEndPess_uf,
          r_item_idItemOrcamento,
          p_item_atividadeServico,
          p_item_vendedor,
          p_item_gradeProduto,
          p_item_tipoPreco,
          p_item_tabelaPreco,
          v_item_precoUnitario,
          v_ativ_selecionaAtividadePrev,
          p_idAtividadesPrevistasSelec,
          v_auxNumber);
        IF v_auxNumber = 1 THEN
          SELECT
            COUNT (1) numeroAtividades,
            SUM (
              CASE
                WHEN prev.faturarAtividade = 'P'
                THEN prev.quantidade
                ELSE COALESCE ((
                  SELECT realiz.quantidade
                  FROM MOORCAMENTOXATIVIDADEREAL realiz
                  WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                  AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
              END) quantidade,
            MIN (prev.precoUnitario) precoUnitarioMenor,
            MAX (prev.precoUnitario) precoUnitarioMaior,
            SUM (ROUND (
              CASE
                WHEN prev.faturarAtividade = 'P'
                THEN prev.quantidade
                ELSE COALESCE ((
                  SELECT realiz.quantidade
                  FROM MOORCAMENTOXATIVIDADEREAL realiz
                  WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                  AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
              END * prev.precoUnitario, 2)) valorTotalItem
          INTO
            v_ativ_numero,
            v_ativ_quantidade,
            v_ativ_precoUnitarioMenor,
            v_ativ_precoUnitario,
            v_ativ_valorTotalItem
          FROM MOORCAMENTOXATIVIDADEPREV prev
          WHERE prev.idItemOrcamento = r_item_idItemOrcamento
          AND prev.statusAtividadeServico <> 'C'
          AND prev.faturarAtividade IN ('P','R');
          IF v_ativ_numero > 0 THEN
            v_ativ_geraFinanceiro := 1;
            IF v_ativ_numero > 1
              AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
              AND v_ativ_quantidade <> 0
            THEN
              v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
            END IF;
          ELSE
            SELECT
              COUNT (1) numeroAtividades,
              SUM (COALESCE ((
                SELECT realiz.quantidade
                FROM MOORCAMENTOXATIVIDADEREAL realiz
                WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)) quantidade,
              MIN (prev.precoUnitario) precoUnitarioMenor,
              MAX (prev.precoUnitario) precoUnitarioMaior,
              SUM (ROUND (COALESCE ((
                SELECT realiz.quantidade
                FROM MOORCAMENTOXATIVIDADEREAL realiz
                WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                AND realiz.statusAtividadeServico <> 'C'), prev.quantidade) * prev.precoUnitario, 2)) valorTotalItem
            INTO
              v_ativ_numero,
              v_ativ_quantidade,
              v_ativ_precoUnitarioMenor,
              v_ativ_precoUnitario,
              v_ativ_valorTotalItem
            FROM MOORCAMENTOXATIVIDADEPREV prev
            JOIN PAATIVIDADESSERVICO ativ
            ON ativ.atividadeServico = prev.atividadeServico
            JOIN CAGRADESPRODUTO gradProd
            ON gradProd.gradeProduto = ativ.gradeProduto
            JOIN CAPRODUTOS prod
            ON prod.produto = gradProd.produto
            WHERE prev.idItemOrcamento = r_item_idItemOrcamento
            AND prev.statusAtividadeServico <> 'C'
            AND ativ.gradeProduto > 0
            AND prod.unidadeMedida = v_prod_unidadeMedida;
            IF v_ativ_numero > 0 THEN
              v_ativ_geraFinanceiro := 0;
              IF v_ativ_numero > 1
                AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
                AND v_ativ_quantidade <> 0
              THEN
                v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
              END IF;
            END IF;
          END IF;
          IF v_ativ_numero > 0
            AND (v_ativ_quantidade <> p_item_quantidade
              OR v_ativ_precoUnitario <> v_item_precoUnitario
              OR v_ativ_geraFinanceiro <> v_item_geraFinanceiro)
          THEN
            ADD_ORCAMENTO_ITEM_GRAVA (
              ' ', -- p_sessaoClient
              p_usuarioLogado,
              p_perfilUsuarioLogado,
              p_estabelecimentoAtivo,
              p_person_190_modeloFrete,
              p_config_64_casasDecSaidas,
              p_config_65_casasDecEntrada,
              p_config_198_obs_add_referenc,
              p_config_199_obs_add_caractA,
              p_config_200_obs_add_caractB,
              p_config_201_obs_add_caractC,
              p_config_202_obs_add_caractD,
              p_config_203_obs_add_caractE,
              p_config_209_filtrarGrupoEcon,
              p_config_362_calcCustoPorGrade,
              p_config_378_calcularVolumes,
              p_config_413_obs_add_marca,
              p_config_418_obs_efetarEnter,
              0, -- p_manterFinanceiro_Retotalizar,
              'T', -- p_buscarAliquotas_CalcularImp  IN CHAR, -- N = Não, S = Sim, T = Troca Produto / Operação Fiscal, I = Calcular Impostos
              0, -- p_buscarGeraFinanceiroEstoque,
              ' ', -- p_tipoDocumentoReferenciado, 
              0, -- p_idItemReferenciado,
              0, -- p_quantidadeReferenciada
              ' ', -- p_tempComp_nomeTempComposicao,
              0, -- p_tempComp_sequencia
              ' ', -- p_mensagemAviso,
              r_calcularImpostos,
              r_item_idItemOrcamento,
              p_item_orcamento,
              p_item_pedidoCompraFornecedor,
              p_item_sequenciaPedidoCompraFo,
              p_item_ambiente,
              p_item_ambienteObservacoes,
              p_item_vinculoItemDocumento,
              p_item_atividadeServico,
              p_item_statusAtividadeServico,
              p_item_controleEntrega,
              p_item_dataEntrega,
              p_item_modeloDocumento,
              p_item_estabelecimentoOriginal,
              p_item_vendedor,
              p_item_gradeProduto,
              p_item_idFormulaTinta,
              p_item_personalizacao,
              p_item_idLoteEstoque,
              0, -- p_item_idEnderecoEstoque
              0, -- p_item_idNumeroSerie
              0, -- p_item_atividadeProjeto,
              p_item_localEstoque,
              p_item_pessoaParticipante,
              p_item_controleQuantidade,
              p_item_unidadeMedidaConversao,
              p_item_conversorQuantidade,
              p_item_loteMinimo,
              p_item_loteMultiplo,
              p_item_altura,
              p_item_largura,
              p_item_comprimento,
              ROUND (CASE p_item_controleQuantidade
                WHEN 2
                THEN CASE WHEN p_item_altura = 0 OR p_item_largura = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100)) END
                WHEN 3
                THEN CASE WHEN p_item_altura = 0 OR p_item_comprimento = 0 OR p_item_comprimento = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100) * p_item_comprimento) END
                WHEN 4
                THEN CASE WHEN p_item_conversorQuantidade = 0 THEN 0 ELSE v_ativ_quantidade / p_item_conversorQuantidade END
                ELSE 0
              END, 3), -- p_item_pecas
              v_ativ_quantidade,
              ROUND (CASE p_item_controleQuantidade
                WHEN 2
                THEN CASE WHEN p_item_altura = 0 OR p_item_largura = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100)) END
                WHEN 3
                THEN CASE WHEN p_item_altura = 0 OR p_item_comprimento = 0 OR p_item_comprimento = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100) * p_item_comprimento) END
                WHEN 4
                THEN CASE WHEN p_item_conversorQuantidade = 0 THEN v_ativ_quantidade ELSE v_ativ_quantidade / p_item_conversorQuantidade END
                WHEN 5
                THEN CASE WHEN p_item_conversorQuantidade = 0 THEN v_ativ_quantidade ELSE v_ativ_quantidade * p_item_conversorQuantidade END
                ELSE v_ativ_quantidade
              END, 6), -- p_item_quantidadeConvertida
              ROUND ((v_ativ_quantidade * v_prod_pesoLiquido), 3), -- p_item_pesoLiquido
              ROUND ((v_ativ_quantidade * v_prod_pesoBruto), 3), -- p_item_pesoBruto
              p_item_tipoPreco,
              p_item_tabelaPreco,
              p_item_precoSugestaoAPrazo,
              p_item_precoSugestaoAVista,
              p_item_precoDesconto,
              p_item_precoMinimo,
              p_item_usarPrecoAVista,
              v_ativ_precoUnitario, -- p_item_precoUnitarioBruto
              p_item_acrescimoUnitarioCompos,
              v_ativ_precoUnitario, -- p_item_precoUnitario
              p_item_percDescontoItem,
              p_item_valorDescontoItem,
              p_item_percAcrescimoItem,
              p_item_valorAcrescimoItem,
              p_item_valorFreteItem,
              p_item_valorSeguroItem,
              p_item_valorAdicFreteMarItem,
              p_item_valorDespesasAduanItem,
              p_item_observacoesDigitadas,
              v_item_valorFreteGeral,
              p_item_valorSeguroGeral,
              v_item_valorDescontoGeral,
              p_item_valorOutrasDespesasGer,
              p_item_valorAdicFreteMarGeral,
              p_item_valorDespesasAduanGeral,
              v_item_valorDescontoPagamento,
              v_item_valorOutrasDespPagament,
              v_item_valorJurosPagamento,
              p_item_operacaoFiscal,
              v_item_movimentaEstoque,
              v_ativ_geraFinanceiro,
              0, -- p_item_cfop
              ' ', -- p_item_indicadorISSQN
              0, -- p_item_aliquotaISSQN
              0, -- p_item_retidoISSQN
              0, -- p_item_tributadoForaMunicipio
              0, -- p_item_incentivoFiscal
              0, -- p_item_listaServicos
              0, -- p_item_cnae
              0, -- p_item_idServicoMunicipio
              ' ', -- p_item_numeroProcessoAdministr
              0, -- p_item_retencaoIRRF
              0, -- p_item_retencaoINSS
              0, -- p_item_retencaoPIS
              0, -- p_item_retencaoCOFINS
              0, -- p_item_retencaoCSLL
              0, -- p_item_retencaoOutros
              0, -- p_item_aliquotaII
              0, -- p_item_aliquotaIOF
              0, -- p_item_codigoEnquadramentoIPI
              0, -- p_item_stIPI
              0, -- p_item_aliquotaIPI
              0, -- p_item_valorAliquotaIPI
              ' ', -- p_item_stPIS
              0, -- p_item_aliquotaPIS
              0, -- p_item_valorAliquotaPIS
              0, -- p_item_aliquotaPISST
              0, -- p_item_valorAliquotaPISST
              ' ', -- p_item_stCOFINS
              0, -- p_item_aliquotaCOFINS
              0, -- p_item_valorAliquotaCOFINS
              0, -- p_item_aliquotaCOFINSST
              0, -- p_item_valorAliquotaCOFINSST
              '   ', -- p_item_stSimplesNacional
              0, -- p_item_creditoSimplesNacional
              '  ', -- p_item_stICMS
              0, -- p_item_modalBaseCalcICMS
              0, -- p_item_reducaoBaseICMS
              0, -- p_item_aliquotaICMS
              0, -- p_item_diferimentoICMS
              ' ', -- p_item_motivoDesoneracaoICMS
              0, -- p_item_idBeneficio
              ' ', -- p_item_modalBaseCalcICMSST
              0, -- p_item_margemValorAdicionadoST
              0, -- p_item_reducaoBaseST
              0, -- p_item_aliquotaICMSST
              0, -- p_item_aliquotaSTSuportConsFin
              0, -- p_item_reducaoBaseICMSEfetivo
              0, -- p_item_aliquotaICMSEfetivo
              0, -- p_item_aliquotaICMSUFDestinat
              0, -- p_item_aliquotaICMSInterestad
              0, -- p_item_partilhaICMSInterestad
              0, -- p_item_aliquotaFCP
              0, -- p_item_aliquotaFCPST
              0, -- p_item_aliquotaFCPSTAnteriorm
              0, -- p_item_aliquotaFCPUFDestinat
              0, -- p_item_aliquotaEstImpFederais
              0, -- p_item_aliquotaEstImpEstaduais
              0, -- p_item_aliquotaEstImpMunicipai
              0, -- p_item_baseISSQN
              0, -- p_item_valorISSQN
              0, -- p_item_baseRetIRRF
              0, -- p_item_valorRetIRRF
              0, -- p_item_baseRetINSS
              0, -- p_item_valorRetINSS
              0, -- p_item_baseRetPIS
              0, -- p_item_valorRetPIS
              0, -- p_item_baseRetCOFINS
              0, -- p_item_valorRetCOFINS
              0, -- p_item_baseRetCSLL
              0, -- p_item_valorRetCSLL
              0, -- p_item_baseRetOutros
              0, -- p_item_valorRetOutros
              0, -- p_item_baseII
              0, -- p_item_valorII
              0, -- p_item_baseIOF
              0, -- p_item_valorIOF
              0, -- p_item_baseIPI
              0, -- p_item_valorIPI
              0, -- p_item_basePIS
              0, -- p_item_valorPIS
              0, -- p_item_basePISST
              0, -- p_item_valorPISST
              0, -- p_item_baseCOFINS
              0, -- p_item_valorCOFINS
              0, -- p_item_baseCOFINSST
              0, -- p_item_valorCOFINSST
              0, -- p_item_baseCreditoSimplesNac
              0, -- p_item_valorCreditoSimplesNac
              0, -- p_item_baseICMS
              0, -- p_item_valorICMSOperacao
              0, -- p_item_valorICMSDiferido
              0, -- p_item_valorICMS
              0, -- p_item_valorICMSDesoneracao
              0, -- p_item_baseICMSST
              0, -- p_item_valorICMSST
              0, -- p_item_baseICMSSTAnteriormente
              0, -- p_item_valorICMSSTAnteriorment
              0, -- p_item_valorICMSProprioSubstit
              0, -- p_item_baseICMSEfetivo
              0, -- p_item_valorICMSEfetivo
              0, -- p_item_baseICMSUFDestinatario
              0, -- p_item_valorICMSUFDestinatario
              0, -- p_item_baseICMSUFRemetente
              0, -- p_item_valorICMSUFRemetente
              0, -- p_item_baseFCP
              0, -- p_item_valorFCP
              0, -- p_item_baseFCPST
              0, -- p_item_valorFCPST
              0, -- p_item_baseFCPSTAnteriormente
              0, -- p_item_valorFCPSTAnteriormente
              0, -- p_item_baseFCPUFDestinatario
              0, -- p_item_valorFCPUFDestinatario
              0, -- p_item_baseEstimadaImpostos
              0, -- p_item_valorEstImpFederais
              0, -- p_item_valorEstImpEstaduais
              0, -- p_item_valorEstImpMunicipais
              ' ', -- p_idAtividadesPrevistasSelec
              0, -- p_nivel,
              ' ',
              v_auxVarchar, -- r_mensagemAviso
              r_calcularImpostos,
              v_auxNumber, -- idItemOrcamento
              v_auxVarchar, -- r_buffer_item_idItemOrcamento
              v_auxNumber); -- r_valorInserido
          END IF;
        END IF;
      END IF;
    END IF;
  END IF;
END ADD_ORCAMENTO_ITEM_GRAVA;

/

CREATE TABLE PACATEGORIASPRODUTO_2401 AS SELECT * FROM PACATEGORIASPRODUTO;

ALTER TABLE PASUBCATEGORIASPRODUTO DROP CONSTRAINT PASUBCATEGORIASPRODUTO_FK1;
ALTER TABLE PAEXCLUSIVOSPRODUTOSPERM DROP CONSTRAINT PAEXCLUSIVOSPRODUTOSPERM_FK2;
ALTER TABLE PAFILTROPRODUTOXCATEGPROD DROP CONSTRAINT PAFILTROPRODUTOXCATEGPROD_FK2;
ALTER TABLE PAREGRASDISTRIBUICOES DROP CONSTRAINT PAREGRASDISTRIBUICOES_FK1;
ALTER TABLE PAABERTURASCOMPRA DROP CONSTRAINT PAABERTURASCOMPRA_FK1;

DROP TABLE PACATEGORIASPRODUTO;

-- PACATEGORIASPRODUTO
CREATE TABLE PACATEGORIASPRODUTO
  (
    categoriaProduto  NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descricao         VARCHAR (120) DEFAULT ' ' NOT NULL,
    ativo             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    ordenacao         NUMERIC (11,0) DEFAULT 0 NOT NULL,
    formacaoDescricao VARCHAR (120) DEFAULT ' ' NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACATEGORIASPRODUTO ADD CONSTRAINT PACATEGORIASPRODUTO_PK1 PRIMARY KEY (categoriaProduto);
CREATE INDEX PACATEGORIASPRODUTO_K2 ON PACATEGORIASPRODUTO (descricao);
CREATE INDEX PACATEGORIASPRODUTO_K3 ON PACATEGORIASPRODUTO (ordenacao, categoriaProduto);

INSERT INTO PACATEGORIASPRODUTO (categoriaProduto, descricao, ativo, ordenacao, formacaoDescricao, observacoes) VALUES (0, 'SELECIONE', 1, 0, ' ', ' ');
INSERT INTO PACATEGORIASPRODUTO (categoriaProduto, descricao, ativo, ordenacao, formacaoDescricao, observacoes) SELECT categoriaProduto, descricao, ativo, ROW_NUMBER() OVER (ORDER BY descricao), formacaoDescricao, observacoes FROM PACATEGORIASPRODUTO_2401 WHERE categoriaProduto > 0;

COMMIT;

ALTER TABLE PASUBCATEGORIASPRODUTO ADD CONSTRAINT PASUBCATEGORIASPRODUTO_FK1 FOREIGN KEY (categoriaProduto) REFERENCES PACATEGORIASPRODUTO (categoriaProduto);
ALTER TABLE PAEXCLUSIVOSPRODUTOSPERM ADD CONSTRAINT PAEXCLUSIVOSPRODUTOSPERM_FK2 FOREIGN KEY (categoriaProduto) REFERENCES PACATEGORIASPRODUTO (categoriaProduto);
ALTER TABLE PAFILTROPRODUTOXCATEGPROD ADD CONSTRAINT PAFILTROPRODUTOXCATEGPROD_FK2 FOREIGN KEY (categoriaProduto) REFERENCES PACATEGORIASPRODUTO (categoriaProduto);
ALTER TABLE PAREGRASDISTRIBUICOES ADD CONSTRAINT PAREGRASDISTRIBUICOES_FK1 FOREIGN KEY (categoriaProduto) REFERENCES PACATEGORIASPRODUTO (categoriaProduto);
ALTER TABLE PAABERTURASCOMPRA ADD CONSTRAINT PAABERTURASCOMPRA_FK1 FOREIGN KEY (categoriaProduto) REFERENCES PACATEGORIASPRODUTO (categoriaProduto);

ALTER TABLE MOORCAMENTOXTAREFAS MODIFY conteudo VARCHAR (4000);

DROP TABLE TEMPTAREFAS;

-- TEMPTAREFAS
CREATE GLOBAL TEMPORARY TABLE TEMPTAREFAS
  (
    sessaoClient        VARCHAR (30) DEFAULT ' ' NOT NULL,
    contadorSessao      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    contadorTemp        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    excluido            NUMERIC (1,0) DEFAULT 0 NOT NULL,
    idTarefaOrcamento   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idCheckListXTarefas NUMERIC (14,0) DEFAULT 0 NOT NULL,
    conteudo            VARCHAR (4000) DEFAULT ' ' NOT NULL,
    observacoes         VARCHAR (4000) DEFAULT ' ' NOT NULL
  ) ON COMMIT PRESERVE ROWS;
CREATE UNIQUE INDEX TEMPTAREFAS_PK1 ON TEMPTAREFAS (sessaoClient, contadorSessao, contadorTemp);
CREATE INDEX TEMPTAREFAS_K2 ON TEMPTAREFAS (sessaoClient, contadorSessao, idCheckListXTarefas);

INSERT INTO SIPERSONALIZACOESCAMPOS (personalizacaoCampo, ordenacao, descricao, ativo, subcategoriaPersonalCampo, tipoCampo, mascara, exibirCampo, tipoArquivo, alteraTipoCampo, alteraExibirCampo, visivelSugestao, modificavelSugestao, obrigatorioSugestao, nomeCampoSugestao, conteudoSugestao, tabelaSistema, observacoes) VALUES (246, 30004004, 'Etapas Ordem Serviço Atividade Prevista', 1, 30004, 'A', '256', 'E', 0, 0, 0, 1, 1, 1, 'Etapas Ordem Serviço', ' ', ' ', 'Separe os códigos por virgula.');

COMMIT;

UPDATE PAETAPASORCAMENTO SET
  validoOrcamento = 1,
  validoPedidoCompra = 1,
  validoOrdemServico = 1,
  validoContrato = 1
WHERE etapaOrcamento = 0;

COMMIT;

create or replace FUNCTION FUNC_ADD_BUSCA_OPERACAO_FISCAL (
  p_cab_modeloDocumento          IN NUMBER,
  p_cab_entradaSaida             IN CHAR,
  p_cab_pessoa                   IN NUMBER,
  p_cab_vendaConsumidor          IN NUMBER,
  p_cab_indicadorConsumidorFinal IN CHAR,
  p_est_grupoFiscal              IN NUMBER,
  p_pessEst_regimeTributario     IN CHAR,
  p_endPessEstMun_uf             IN CHAR,
  p_pess_indicadorInscricaoEstad IN CHAR,
  p_endPessMun_uf                IN CHAR,
  p_produto                      IN NUMBER)
  RETURN NUMBER
IS
  v_operacaoFiscal NUMBER;
BEGIN
  SELECT COALESCE ((
    SELECT a.operacaoFiscal
    FROM (
      SELECT a.operacaoFiscal,
        ROW_NUMBER() OVER (
          ORDER BY
            a.filtrarPessoas DESC,
            CASE
              WHEN a.agrupadorFiscal = 0
              THEN 0
              WHEN EXISTS (
                SELECT 1
                FROM PAAGRUPFISCXPRODUTOS opX
                WHERE opX.agrupadorFiscal = a.agrupadorFiscal
                AND opX.produto = p_produto
                AND opX.ativo = 1)
              THEN 2
              ELSE 1
            END DESC,
            CASE
              WHEN filtrProd.filtroProduto = 0
              THEN 0
              WHEN filtrProd.filtrarProdutos = 1
              AND EXISTS (
                SELECT 1
                FROM PAFILTROPRODUTOXPRODUTOS filtrProdX
                WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
                AND filtrProdX.produto = p_produto
                AND filtrProdX.ativo = 1)
              THEN 2
              ELSE 1
            END DESC,
            a.ufDestino DESC,
            a.ufOrigem DESC,
            a.regimeTributario DESC,
            a.indicadorInscricaoEstadual DESC,
            a.indicadorConsumidorFinal DESC,
            a.grupoFiscal DESC,
            a.origemMercadoria DESC,
            a.tipoProduto DESC,
            a.operacaoFiscal DESC) ordenacao
      FROM PAOPERACOESFISCAIS a
      JOIN CAPRODUTOS prod
      ON prod.produto = p_produto
      JOIN PASUBCATEGORIASPRODUTO subCat
      ON subCat.subcategoriaProduto = prod.subcategoriaProduto
      JOIN SICFOPS cfop
      ON cfop.cfop = a.cfop
      JOIN SINATUREZASOPERACAO natOp
      ON natOp.naturezaOperacao = cfop.naturezaOperacao
      JOIN SICAPITULOSNATUREZAOPERAC capNatFisc
      ON capNatFisc.capituloNaturezaOperacao = natOp.capituloNaturezaOperacao
      JOIN PAFILTROSPRODUTO filtrProd
      ON filtrProd.filtroProduto = a.filtroProduto
      WHERE a.operacaoFiscal > 0
      AND a.ativo = 1
      AND a.cfop BETWEEN
        CASE
          WHEN p_endPessMun_uf = 'EX'
            AND p_cab_vendaConsumidor = 0
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 3000 ELSE 7000 END
          WHEN p_endPessMun_uf = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_endPessEstMun_uf = p_endPessMun_uf
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 1000 ELSE 5000 END
          ELSE CASE WHEN p_cab_entradaSaida = 'E' THEN 2000 ELSE 6000 END
        END
        AND
        CASE
          WHEN p_endPessMun_uf = 'EX'
            AND p_cab_vendaConsumidor = 0
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 3999 ELSE 7999 END
          WHEN p_endPessMun_uf = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_endPessEstMun_uf = p_endPessMun_uf
          THEN CASE WHEN p_cab_entradaSaida = 'E' THEN 1999 ELSE 5999 END
          ELSE CASE WHEN p_cab_entradaSaida = 'E' THEN 2999 ELSE 6999 END
        END
      AND TRUNC(a.dataValidadeInicial) <= TRUNC(SYSDATE)
      AND TRUNC(a.dataValidadeFinal)   >= TRUNC(SYSDATE)
      AND capNatFisc.entradaSaida = p_cab_entradaSaida
      AND (a.regimeTributario = ' '
        OR a.regimeTributario = p_pessEst_regimeTributario)
      AND (a.tipoProduto = '  '
        OR a.tipoProduto = prod.tipoProduto)
      AND (a.origemMercadoria = ' '
        OR a.origemMercadoria = prod.origemMercadoria)
      AND (a.grupoFiscal = 0
        OR a.grupoFiscal = p_est_grupoFiscal)
      AND (a.ufOrigem = '  '
        OR a.ufOrigem =
          CASE
            WHEN p_cab_entradaSaida = 'S'
            OR p_endPessMun_uf = '  '
            OR p_cab_vendaConsumidor = 1
            THEN p_endPessEstMun_uf
            ELSE p_endPessMun_uf
          END)
      AND (a.ufDestino = '  '
        OR a.ufDestino =
          CASE
            WHEN p_cab_entradaSaida = 'E'
            OR p_endPessMun_uf = '  '
            OR p_cab_vendaConsumidor = 1
            THEN p_endPessEstMun_uf
            ELSE p_endPessMun_uf
          END)
      AND (a.indicadorConsumidorFinal = ' '
        OR p_cab_indicadorConsumidorFinal = ' '
        OR a.indicadorConsumidorFinal = p_cab_indicadorConsumidorFinal)
      AND (a.indicadorInscricaoEstadual = ' '
        OR p_pess_indicadorInscricaoEstad = ' '
        OR a.indicadorInscricaoEstadual = p_pess_indicadorInscricaoEstad)
      AND (p_cab_modeloDocumento = 0
        OR EXISTS (
          SELECT 1
          FROM PAOPERFISCALXMODELOSDOCUM opX
          WHERE opX.operacaoFiscal = a.operacaoFiscal
          AND opX.modeloDocumento = p_cab_modeloDocumento
          AND opX.ativo = 1))
      AND (a.filtrarPessoas = 0
        OR p_cab_vendaConsumidor = 0 
        AND EXISTS (
          SELECT 1
          FROM PAOPERFISCALXPESSOAS opX
          WHERE opX.operacaoFiscal = a.operacaoFiscal
          AND opX.pessoa = p_cab_pessoa
          AND opX.ativo = 1))
      AND (a.agrupadorFiscal = 0
        OR EXISTS (
          SELECT 1
          FROM PAAGRUPFISCXPRODUTOS opX
          WHERE opX.agrupadorFiscal = a.agrupadorFiscal
          AND opX.produto = p_produto
          AND opX.ativo = 1)
        OR EXISTS (
          SELECT 1
          FROM PAAGRUPFISCXNCMS opX
          WHERE opX.agrupadorFiscal = a.agrupadorFiscal
          AND opX.idNcm = prod.idNcm
          AND opX.ativo = 1))
      AND (a.filtroProduto = 0
        OR filtrProd.filtrarProdutos = 0
        AND filtrProd.filtrarCategoriasProdutos = 0
        AND filtrProd.filtrarSubcategoriasProdutos = 0
        AND filtrProd.filtrarMarcas = 0
        AND filtrProd.filtrarCaracteristicasA = 0
        AND filtrProd.filtrarCaracteristicasB = 0
        AND filtrProd.filtrarCaracteristicasC = 0
        AND filtrProd.filtrarCaracteristicasD = 0
        AND filtrProd.filtrarCaracteristicasE = 0
        AND filtrProd.filtrarCores = 0
        AND filtrProd.filtrarTamanhos = 0
        AND filtrProd.filtrarNCMs = 0
        AND filtrProd.filtrarListasServicos = 0
        OR filtrProd.filtrarProdutos = 1
        AND EXISTS (
          SELECT 1
          FROM PAFILTROPRODUTOXPRODUTOS filtrProdX
          WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
          AND filtrProdX.produto = p_produto
          AND filtrProdX.ativo = 1)
        OR (filtrProd.filtrarCategoriasProdutos = 1
          OR filtrProd.filtrarSubcategoriasProdutos = 1
          OR filtrProd.filtrarMarcas = 1
          OR filtrProd.filtrarCaracteristicasA = 1
          OR filtrProd.filtrarCaracteristicasB = 1
          OR filtrProd.filtrarCaracteristicasC = 1
          OR filtrProd.filtrarCaracteristicasD = 1
          OR filtrProd.filtrarCaracteristicasE = 1
          OR filtrProd.filtrarCores = 1
          OR filtrProd.filtrarTamanhos = 1
          OR filtrProd.filtrarNCMs = 1
          OR filtrProd.filtrarListasServicos = 1)
        AND (filtrProd.filtrarCategoriasProdutos = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCATEGPROD filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.categoriaProduto = subCat.categoriaProduto
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarSubcategoriasProdutos = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXSUBCAPROD filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.subcategoriaProduto = prod.subcategoriaProduto
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarMarcas = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXMARCAS filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.marca = prod.marca
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarCaracteristicasA = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERA filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaA = prod.caracteristicaA
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarCaracteristicasB = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERB filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaB = prod.caracteristicaB
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarCaracteristicasC = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERC filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaC = prod.caracteristicaC
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarCaracteristicasD = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERD filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaD = prod.caracteristicaD
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarCaracteristicasE = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXCARACTERE filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.caracteristicaE = prod.caracteristicaE
            AND filtrProdX.ativo = 1))
        AND filtrProd.filtrarCores = 0
        AND filtrProd.filtrarTamanhos = 0
        AND (filtrProd.filtrarNCMs = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXNCMS filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.idNcm = prod.idNcm
            AND filtrProdX.ativo = 1))
        AND (filtrProd.filtrarListasServicos = 0
          OR EXISTS (
            SELECT 1
            FROM PAFILTROPRODUTOXLISTASSE filtrProdX
            WHERE filtrProdX.filtroProduto = filtrProd.filtroProduto
            AND filtrProdX.listaServicos = prod.listaServicos
            AND filtrProdX.ativo = 1)))) a
    WHERE a.ordenacao = 1), 0)
  INTO v_operacaoFiscal
  FROM DUAL;
  RETURN v_operacaoFiscal;
END;

/

UPDATE PAFILTROSPRODUTO SET
  descricao = 'SELECIONE',
  ativo = 1,
  filtrarVendedores = 0,
  filtrarProdutos = 0,
  filtrarCategoriasProdutos = 0,
  filtrarSubcategoriasProdutos = 0,
  filtrarMarcas = 0,
  filtrarCaracteristicasA = 0,
  filtrarCaracteristicasB = 0,
  filtrarCaracteristicasC = 0,
  filtrarCaracteristicasD = 0,
  filtrarCaracteristicasE = 0,
  filtrarCores = 0,
  filtrarTamanhos = 0,
  filtrarPersonalizacoes = 0,
  filtrarNCMs = 0,
  filtrarListasServicos = 0
WHERE filtroProduto = 0;

COMMIT;

UPDATE PAFILTROSPAGAMENTO SET
  descricao = 'SELECIONE',
  ativo = 1,
  filtrarMeiosPagamento = 0,
  filtrarCondicoesPagamento = 0
WHERE filtroPagamento = 0;

COMMIT;

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_TAREF_GRAVA (
  p_estabelecimentoAtivo     IN NUMBER,
  p_idTarefaOrcamento        IN NUMBER,
  p_idAtividadePrevOrcamento IN NUMBER,
  p_idCheckListXTarefas      IN NUMBER,
  p_ordenacao                IN NUMBER,
  p_conteudo                 IN VARCHAR2,
  p_observacoes              IN VARCHAR2,
  /* Retornos */
  r_idTarefaOrcamento        OUT NUMBER)
IS
BEGIN
  r_idTarefaOrcamento := p_idTarefaOrcamento;
  IF r_idTarefaOrcamento = 0 THEN
    r_idTarefaOrcamento := FUNC_ADD_BUSCA_PROXIMO_ID ('MOORCAMENTOXTAREFAS', 'idTarefaOrcamento', 14, p_estabelecimentoAtivo, NULL);
  END IF;
  MERGE INTO MOORCAMENTOXTAREFAS a 
  USING (
    SELECT
      r_idTarefaOrcamento        idTarefaOrcamento,
      p_idAtividadePrevOrcamento idAtividadePrevOrcamento,
      p_idCheckListXTarefas      idCheckListXTarefas,
      p_ordenacao                ordenacao,
      p_conteudo                 conteudo,
      p_observacoes              observacoes
    FROM DUAL) b
  ON (a.idTarefaOrcamento = b.idTarefaOrcamento)
  WHEN MATCHED THEN UPDATE SET
    a.idAtividadePrevOrcamento = b.idAtividadePrevOrcamento,
    a.idCheckListXTarefas      = b.idCheckListXTarefas,
    a.ordenacao                = b.ordenacao,
    a.conteudo                 = b.conteudo,
    a.observacoes              = b.observacoes
  WHEN NOT MATCHED THEN INSERT (
    idTarefaOrcamento,
    idAtividadePrevOrcamento,
    idCheckListXTarefas,
    ordenacao,
    conteudo,
    observacoes)
  VALUES (
    b.idTarefaOrcamento,
    b.idAtividadePrevOrcamento,
    b.idCheckListXTarefas,
    b.ordenacao,
    b.conteudo,
    b.observacoes);
END ADD_ORCAMENTO_ITEM_TAREF_GRAVA;

/

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_TAREF_INSER (
  p_estabelecimentoAtivo     IN NUMBER,
  p_idAtividadePrevOrcamento IN NUMBER,
  p_checklist                IN NUMBER)
IS
  v_ordenacao NUMBER;  
  v_auxNumber NUMBER;  
BEGIN
  v_ordenacao := 0;
  DELETE MOORCAMENTOXTAREFAS
  WHERE idAtividadePrevOrcamento = p_idAtividadePrevOrcamento;
  IF p_checklist <> 0 THEN
    FOR a IN (
      SELECT
        idCheckListXTarefas,
        conteudoSugestao
      FROM PACHECKLISTXTAREFAS
      WHERE checklist = p_checklist
      AND ativo = 1
      ORDER BY
        sequencia,
        idCheckListXTarefas)
    LOOP
      v_ordenacao := v_ordenacao + 1;
      ADD_ORCAMENTO_ITEM_TAREF_GRAVA (
        p_estabelecimentoAtivo,
        0,
        p_idAtividadePrevOrcamento,
        a.idCheckListXTarefas,
        v_ordenacao,
        a.conteudoSugestao,
        ' ',
        /* Retornos */
        v_auxNumber);
    END LOOP;
  END IF;
END ADD_ORCAMENTO_ITEM_TAREF_INSER;

/

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_PREV_GRAVA (
  p_estabelecimentoAtivo     IN NUMBER,
  p_idAtividadePrevOrcamento IN NUMBER,
  p_idItemOrcamento          IN NUMBER,
  p_sequencia                IN NUMBER,
  p_atividadeServico         IN NUMBER,
  p_descricao                IN VARCHAR2,
  p_tecnico                  IN NUMBER,
  p_faturarAtividade         IN CHAR,
  p_checklist                IN NUMBER,
  p_etapaAtividade           IN NUMBER,
  p_statusAtividadeServico   IN CHAR,
  p_dataInicio               IN DATE,
  p_dataTermino              IN DATE,
  p_quantidade               IN NUMBER,
  p_precoUnitario            IN NUMBER,
  p_observacoes              IN VARCHAR2,
  p_gravarTarefas            IN NUMBER,
  p_gravarAtividadeRealizada IN NUMBER,
  p_idAtividadeRealOrcamento IN NUMBER,
  p_atReal_dataInicio        IN DATE,
  p_atReal_dataTermino       IN DATE,
  p_atReal_quantidade        IN NUMBER,
  /* Retornos */
  r_idAtividadePrevOrcamento OUT NUMBER,
  r_idAtividadeRealOrcamento OUT NUMBER)
IS
BEGIN
  r_idAtividadePrevOrcamento := p_idAtividadePrevOrcamento;
  IF r_idAtividadePrevOrcamento = 0 THEN
    r_idAtividadePrevOrcamento := FUNC_ADD_BUSCA_PROXIMO_ID ('MOORCAMENTOXATIVIDADEPREV', 'idAtividadePrevOrcamento', 14, p_estabelecimentoAtivo, NULL);
  END IF;
  r_idAtividadeRealOrcamento := p_idAtividadeRealOrcamento;
  MERGE INTO MOORCAMENTOXATIVIDADEPREV a USING (
    SELECT
      r_idAtividadePrevOrcamento idAtividadePrevOrcamento,
      p_idItemOrcamento          idItemOrcamento,
      p_sequencia                sequencia,
      p_atividadeServico         atividadeServico,
      p_descricao                descricao,
      p_tecnico                  tecnico,
      p_faturarAtividade         faturarAtividade,
      p_checklist                checklist,
      p_etapaAtividade           etapaAtividade,
      p_statusAtividadeServico   statusAtividadeServico,
      p_dataInicio               dataInicio,
      p_dataTermino              dataTermino,
      p_quantidade               quantidade,
      p_precoUnitario            precoUnitario,
      p_observacoes              observacoes
    FROM DUAL) b
  ON (a.idAtividadePrevOrcamento = b.idAtividadePrevOrcamento)
  WHEN MATCHED THEN UPDATE SET
    a.idItemOrcamento        = b.idItemOrcamento,
    a.sequencia              = b.sequencia,
    a.atividadeServico       = b.atividadeServico,
    a.descricao              = b.descricao,
    a.tecnico                = b.tecnico,
    a.faturarAtividade       = b.faturarAtividade,
    a.checklist              = b.checklist,
    a.etapaAtividade         = b.etapaAtividade,
    a.statusAtividadeServico = b.statusAtividadeServico,
    a.dataInicio             = b.dataInicio,
    a.dataTermino            = b.dataTermino,
    a.quantidade             = b.quantidade,
    a.precoUnitario          = b.precoUnitario,
    a.observacoes            = b.observacoes
  WHEN NOT MATCHED THEN INSERT (
    idAtividadePrevOrcamento,
    idItemOrcamento,
    sequencia,
    atividadeServico,
    descricao,
    tecnico,
    faturarAtividade,
    checklist,
    etapaAtividade,
    statusAtividadeServico,
    dataInicio,
    dataTermino,
    quantidade,
    precoUnitario,
    observacoes)
  VALUES (
    b.idAtividadePrevOrcamento,
    b.idItemOrcamento,
    b.sequencia,
    b.atividadeServico,
    b.descricao,
    b.tecnico,
    b.faturarAtividade,
    b.checklist,
    b.etapaAtividade,
    b.statusAtividadeServico,
    b.dataInicio,
    b.dataTermino,
    b.quantidade,
    b.precoUnitario,
    b.observacoes);
  IF p_gravarTarefas = 1 THEN
    ADD_ORCAMENTO_ITEM_TAREF_INSER (
      p_estabelecimentoAtivo,
      r_idAtividadePrevOrcamento,
      p_checklist);
  END IF;
  IF p_gravarAtividadeRealizada = 1 THEN
    ADD_ORCAMENTO_ITEM_REAL_GRAVA (
      p_estabelecimentoAtivo,
      p_idAtividadeRealOrcamento,
      r_idAtividadePrevOrcamento,
      1,
      p_atividadeServico,
      p_descricao,
      p_tecnico,
      p_statusAtividadeServico,
      p_atReal_dataInicio,
      p_atReal_dataTermino,
      p_atReal_quantidade,
      p_observacoes,
      /* Retornos */
      r_idAtividadeRealOrcamento);
  END IF;
  IF NOT (p_statusAtividadeServico IN ('A','I','P')) THEN
    UPDATE MOORCAMENTOXATIVIDADEPREV prev
    SET prev.tecnico = CASE WHEN prev.tecnico = 0 THEN p_tecnico ELSE prev.tecnico END,
      prev.statusAtividadeServico = 'P',
      prev.dataInicio = CASE WHEN prev.dataInicio IS NULL THEN SYSDATE ELSE prev.dataInicio END,
      prev.dataTermino = CASE WHEN prev.dataTermino IS NULL THEN SYSDATE ELSE prev.dataTermino END
    WHERE prev.idItemOrcamento = p_idItemOrcamento
    AND prev.statusAtividadeServico = 'A'
    AND prev.sequencia =
      ( SELECT MIN (prev2.sequencia)
        FROM MOORCAMENTOXATIVIDADEPREV prev2
        WHERE prev2.idItemOrcamento = prev.idItemOrcamento
        AND prev2.statusAtividadeServico IN ('A','I','P'));
  END IF;
  UPDATE MOORCAMENTOXITENS a
  SET a.statusAtividadeServico =
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'I')
      THEN 'I'
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'P')
      THEN
        CASE
          WHEN
            EXISTS (
              SELECT 1
              FROM MOORCAMENTOXATIVIDADEPREV prev
              WHERE prev.idItemOrcamento = a.idItemOrcamento
              AND prev.statusAtividadeServico = 'E')
          THEN 'I'
          ELSE 'P'
        END
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'A')
      THEN 'A'
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'C')
      THEN 'C'
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'E')
      THEN 'E'
      ELSE 'A'
    END
  WHERE a.idItemOrcamento = p_idItemOrcamento
  AND a.statusAtividadeServico <>
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'I')
      THEN 'I'
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'P')
      THEN
        CASE
          WHEN
            EXISTS (
              SELECT 1
              FROM MOORCAMENTOXATIVIDADEPREV prev
              WHERE prev.idItemOrcamento = a.idItemOrcamento
              AND prev.statusAtividadeServico = 'E')
          THEN 'I'
          ELSE 'P'
        END
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'A')
      THEN 'A'
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'C')
      THEN 'C'
      WHEN EXISTS (
        SELECT 1
        FROM MOORCAMENTOXATIVIDADEPREV prev
        WHERE prev.idItemOrcamento = a.idItemOrcamento
        AND prev.statusAtividadeServico = 'E')
      THEN 'E'
      ELSE 'A'
    END;
END ADD_ORCAMENTO_ITEM_PREV_GRAVA;

/

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_PREV_INSERE (
  p_config_64_casasDecSaidas     IN CHAR,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_perfilUsuarioLogado          IN NUMBER,
  p_usuarioLogado                IN NUMBER,
  p_estabelecimentoAtivo         IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_munEndEst_uf                 IN CHAR,
  p_munEndPess_uf                 IN CHAR,
  p_item_idItemOrcamento         IN NUMBER,
  p_item_atividadeServico        IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_tipoPreco               IN CHAR,
  p_item_tabelaPreco             IN VARCHAR,
  p_item_precoUnitario           IN NUMBER,
  p_ativ_selecionaAtividadePrev  IN NUMBER,
  p_idAtividadesPrevistasSelec   IN VARCHAR2,
  /* Retornos */
  r_inseriuAtividadePrevista     OUT NUMBER)
IS
  v_sequenciaAtividade      NUMBER;
  v_tecnico                 NUMBER;
  v_checklist               NUMBER;
  v_auxNumber               NUMBER;
BEGIN
  r_inseriuAtividadePrevista := 0;
  v_sequenciaAtividade := 0;
  SELECT COALESCE (MAX (tecnico), 0)
  INTO v_tecnico
  FROM CATECNICOS
  WHERE tecnico = p_usuarioLogado
  AND ativo = 1;
  FOR a IN (
    SELECT
      a.atividadeServicoPrevista,
      a.tecnico,
      a.faturarAtividade,
      a.etapaAtividade,
      a.observacoes,
      COALESCE ((
        SELECT MAX (b.checklist)
        FROM (
          SELECT
            b.atividadeServico,
            b.checklist,
            ROW_NUMBER() OVER (
              PARTITION BY b.atividadeServico
              ORDER BY
                b.atividadeServico,
                b.ordenacao,
                b.id) ordenacao
          FROM PAATIVIDADESERVXCHECKLIST b
          WHERE b.ativo = 1) b
        WHERE b.atividadeServico = a.atividadeServicoPrevista
        AND b.ordenacao = 1), 0) checklist,
      CASE ativ.gradeProduto
        WHEN 0
        THEN 0
        WHEN p_item_gradeProduto
        THEN p_item_precoUnitario
        ELSE FUNC_ADD_BUSCA_PRECO (
          p_config_64_casasDecSaidas,
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          p_cab_estabelecimento,
          SYSDATE, -- p_cab_dataPrecoFinal
          p_cab_pessoa,
          p_munEndEst_uf,
          p_munEndPess_uf,
          p_item_vendedor,
          0, -- p_item_idFormulaTinta
          0, -- p_item_personalizacao
          gradProd.produto,
          gradProd.cor,
          gradProd.tamanho,
          prod.controleEstoque,
          p_item_tipoPreco,
          p_item_tabelaPreco)
      END precoUnitario
    FROM PAATIVIDADEOSXPREVISTA a
    JOIN PAATIVIDADESSERVICO ativ
    ON ativ.atividadeServico = a.atividadeServicoPrevista
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = ativ.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    WHERE a.id > 0
    AND (p_ativ_selecionaAtividadePrev = 0
      AND a.atividadeServicoOs = p_item_atividadeServico
      AND a.ativo = 1
      AND a.sugestao = 1
      OR p_ativ_selecionaAtividadePrev = 1
      AND INSTR (',' || TRIM (p_idAtividadesPrevistasSelec) || ',', ',' || TO_CHAR (a.id) || ',') > 0)
    ORDER BY
      a.atividadeServicoOs,
      a.ordenacao,
      a.id)
  LOOP
    r_inseriuAtividadePrevista := 1;
    v_sequenciaAtividade := v_sequenciaAtividade + 1;  
    ADD_ORCAMENTO_ITEM_PREV_GRAVA (
      p_estabelecimentoAtivo,
      0,
      p_item_idItemOrcamento,
      v_sequenciaAtividade,
      a.atividadeServicoPrevista,
      ' ',
      CASE WHEN v_sequenciaAtividade = 1 AND a.tecnico = 0 THEN v_tecnico ELSE a.tecnico END,
      a.faturarAtividade,
      a.checklist,
      a.etapaAtividade,
      CASE WHEN v_sequenciaAtividade = 1 THEN CASE WHEN CASE WHEN a.tecnico = 0 THEN v_tecnico ELSE a.tecnico END = p_usuarioLogado THEN 'I' ELSE 'P' END ELSE 'A' END,
      CASE WHEN v_sequenciaAtividade = 1 THEN SYSDATE ELSE NULL END,
      CASE WHEN v_sequenciaAtividade = 1 THEN SYSDATE ELSE NULL END,
      0,
      a.precoUnitario,
      a.observacoes,
      1,
      CASE WHEN v_sequenciaAtividade = 1 AND CASE WHEN a.tecnico = 0 THEN v_tecnico ELSE a.tecnico END = p_usuarioLogado THEN 1 ELSE 0 END,
      0,
      CASE WHEN v_sequenciaAtividade = 1 AND CASE WHEN a.tecnico = 0 THEN v_tecnico ELSE a.tecnico END = p_usuarioLogado THEN SYSDATE ELSE NULL END,
      NULL,
      0,
      /* Retornos */
      v_auxNumber,
      v_auxNumber);
  END LOOP;
  IF r_inseriuAtividadePrevista = 0
    AND p_ativ_selecionaAtividadePrev = 0
  THEN
    SELECT COALESCE (MAX (validoPrevisto), 0)
    INTO v_auxNumber
    FROM PAATIVIDADESSERVICO
    WHERE atividadeServico = p_item_atividadeServico;
    IF v_auxNumber = 1 THEN
      SELECT COALESCE (MAX (c.checklist),0)
      INTO v_checklist
      FROM (
        SELECT
          b.checklist,
          ROW_NUMBER() OVER (
            ORDER BY
              b.ordenacao,
              b.id) ordenacao
        FROM PAATIVIDADESERVXCHECKLIST b
        WHERE b.atividadeServico = p_item_atividadeServico
        AND b.ativo = 1) c
      WHERE c.ordenacao = 1;
      r_inseriuAtividadePrevista := 1;
      ADD_ORCAMENTO_ITEM_PREV_GRAVA (
        p_estabelecimentoAtivo,
        0,
        p_item_idItemOrcamento,
        1,
        p_item_atividadeServico,
        ' ',
        v_tecnico,
        'N',
        v_checklist,
        0,
        'P',
        SYSDATE,
        SYSDATE,
        0,
        p_item_precoUnitario,
        ' ',
        1,
        0,
        0,
        NULL,
        NULL,
        0,
        /* Retornos */
        v_auxNumber,
        v_auxNumber);
    END IF;
  END IF;
END ADD_ORCAMENTO_ITEM_PREV_INSERE;

/

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_GRAVA (
  p_sessaoClient                 IN VARCHAR2,
  p_usuarioLogado                IN NUMBER,
  p_perfilUsuarioLogado          IN NUMBER,
  p_estabelecimentoAtivo         IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_64_casasDecSaidas     IN CHAR,
  p_config_65_casasDecEntrada    IN CHAR,
  p_config_198_obs_add_referenc  IN NUMBER,
  p_config_199_obs_add_caractA   IN NUMBER,
  p_config_200_obs_add_caractB   IN NUMBER,
  p_config_201_obs_add_caractC   IN NUMBER,
  p_config_202_obs_add_caractD   IN NUMBER,
  p_config_203_obs_add_caractE   IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_config_413_obs_add_marca     IN NUMBER,
  p_config_418_obs_efetarEnter   IN NUMBER,
  p_manterFinanceiro_Retotalizar IN NUMBER,
  p_buscarAliquotas_CalcularImp  IN CHAR, -- N = Não, S = Sim, T = Troca Produto / Operação Fiscal, I = Calcular Impostos
  p_buscarGeraFinanceiroEstoque  IN NUMBER,
  p_tipoDocumentoReferenciado    IN CHAR, -- C = Painel de Compras, 'F' Fatura Contrato, L = Lista Evento, O = Orçamento, T = Transferência
  p_idItemReferenciado           IN NUMBER,
  p_quantidadeReferenciada       IN NUMBER,
  p_tempComp_nomeTempComposicao  IN VARCHAR2,
  p_tempComp_sequencia           IN NUMBER,
  p_mensagemAviso                IN VARCHAR,
  p_calcularImpostos             IN NUMBER,
  p_item_idItemOrcamento         IN NUMBER,
  p_item_orcamento               IN NUMBER,
  p_item_pedidoCompraFornecedor  IN VARCHAR2,
  p_item_sequenciaPedidoCompraFo IN NUMBER,
  p_item_ambiente                IN NUMBER,
  p_item_ambienteObservacoes     IN VARCHAR2,
  p_item_vinculoItemDocumento    IN NUMBER,
  p_item_atividadeServico        IN NUMBER,
  p_item_statusAtividadeServico  IN CHAR,
  p_item_controleEntrega         IN NUMBER,
  p_item_dataEntrega             IN DATE,
  p_item_modeloDocumento         IN NUMBER,
  p_item_estabelecimentoOriginal IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_idFormulaTinta          IN NUMBER,
  p_item_personalizacao          IN NUMBER,
  p_item_idLoteEstoque           IN NUMBER,
  p_item_idEnderecoEstoque       IN NUMBER,
  p_item_idNumeroSerie           IN NUMBER,
  p_item_atividadeProjeto        IN NUMBER,
  p_item_localEstoque            IN NUMBER,
  p_item_pessoaParticipante      IN NUMBER,
  p_item_controleQuantidade      IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR2,
  p_item_conversorQuantidade     IN NUMBER,
  p_item_loteMinimo              IN NUMBER,
  p_item_loteMultiplo            IN NUMBER,
  p_item_altura                  IN NUMBER,
  p_item_largura                 IN NUMBER,
  p_item_comprimento             IN NUMBER,
  p_item_pecas                   IN NUMBER,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_pesoLiquido             IN NUMBER,
  p_item_pesoBruto               IN NUMBER,
  p_item_tipoPreco               IN CHAR,
  p_item_tabelaPreco             IN VARCHAR2,
  p_item_precoSugestaoAPrazo     IN NUMBER,
  p_item_precoSugestaoAVista     IN NUMBER,
  p_item_precoDesconto           IN NUMBER,
  p_item_precoMinimo             IN NUMBER,
  p_item_usarPrecoAVista         IN NUMBER,
  p_item_precoUnitarioBruto      IN NUMBER,
  p_item_acrescimoUnitarioCompos IN NUMBER,
  p_item_precoUnitario           IN NUMBER,
  p_item_percDescontoItem        IN NUMBER,
  p_item_valorDescontoItem       IN NUMBER,
  p_item_percAcrescimoItem       IN NUMBER,
  p_item_valorAcrescimoItem      IN NUMBER,
  p_item_valorFreteItem          IN NUMBER,
  p_item_valorSeguroItem         IN NUMBER,
  p_item_valorAdicFreteMarItem   IN NUMBER,
  p_item_valorDespesasAduanItem  IN NUMBER,
  p_item_observacoesDigitadas    IN VARCHAR2,
  p_item_valorFreteGeral         IN NUMBER,
  p_item_valorSeguroGeral        IN NUMBER,
  p_item_valorDescontoGeral      IN NUMBER,
  p_item_valorOutrasDespesasGer  IN NUMBER,
  p_item_valorAdicFreteMarGeral  IN NUMBER,
  p_item_valorDespesasAduanGeral IN NUMBER,
  p_item_valorDescontoPagamento  IN NUMBER,
  p_item_valorOutrasDespPagament IN NUMBER,
  p_item_valorJurosPagamento     IN NUMBER,
  p_item_operacaoFiscal          IN NUMBER,
  p_item_movimentaEstoque        IN NUMBER,
  p_item_geraFinanceiro          IN NUMBER,
  p_item_cfop                    IN NUMBER,
  p_item_indicadorISSQN          IN CHAR,
  p_item_aliquotaISSQN           IN NUMBER,
  p_item_retidoISSQN             IN NUMBER,
  p_item_tributadoForaMunicipio  IN NUMBER,
  p_item_incentivoFiscal         IN NUMBER,
  p_item_listaServicos           IN NUMBER,
  p_item_cnae                    IN NUMBER,
  p_item_idServicoMunicipio      IN NUMBER,
  p_item_numeroProcessoAdministr IN VARCHAR2,
  p_item_retencaoIRRF            IN NUMBER,
  p_item_retencaoINSS            IN NUMBER,
  p_item_retencaoPIS             IN NUMBER,
  p_item_retencaoCOFINS          IN NUMBER,
  p_item_retencaoCSLL            IN NUMBER,
  p_item_retencaoOutros          IN NUMBER,
  p_item_aliquotaII              IN NUMBER,
  p_item_aliquotaIOF             IN NUMBER,
  p_item_codigoEnquadramentoIPI  IN NUMBER,
  p_item_stIPI                   IN CHAR,
  p_item_aliquotaIPI             IN NUMBER,
  p_item_valorAliquotaIPI        IN NUMBER,
  p_item_stPIS                   IN CHAR,
  p_item_aliquotaPIS             IN NUMBER,
  p_item_valorAliquotaPIS        IN NUMBER,
  p_item_aliquotaPISST           IN NUMBER,
  p_item_valorAliquotaPISST      IN NUMBER,
  p_item_stCOFINS                IN CHAR,
  p_item_aliquotaCOFINS          IN NUMBER,
  p_item_valorAliquotaCOFINS     IN NUMBER,
  p_item_aliquotaCOFINSST        IN NUMBER,
  p_item_valorAliquotaCOFINSST   IN NUMBER,
  p_item_stSimplesNacional       IN CHAR,
  p_item_creditoSimplesNacional  IN NUMBER,
  p_item_stICMS                  IN CHAR,
  p_item_modalBaseCalcICMS       IN CHAR,
  p_item_reducaoBaseICMS         IN NUMBER,
  p_item_aliquotaICMS            IN NUMBER,
  p_item_diferimentoICMS         IN NUMBER,
  p_item_motivoDesoneracaoICMS   IN CHAR,
  p_item_idBeneficio             IN NUMBER,
  p_item_modalBaseCalcICMSST     IN CHAR,
  p_item_margemValorAdicionadoST IN NUMBER,
  p_item_reducaoBaseST           IN NUMBER,
  p_item_aliquotaICMSST          IN NUMBER,
  p_item_aliquotaSTSuportConsFin IN NUMBER,
  p_item_reducaoBaseICMSEfetivo  IN NUMBER,
  p_item_aliquotaICMSEfetivo     IN NUMBER,
  p_item_aliquotaICMSUFDestinat  IN NUMBER,
  p_item_aliquotaICMSInterestad  IN NUMBER,
  p_item_partilhaICMSInterestad  IN NUMBER,
  p_item_aliquotaFCP             IN NUMBER,
  p_item_aliquotaFCPST           IN NUMBER,
  p_item_aliquotaFCPSTAnteriorm  IN NUMBER,
  p_item_aliquotaFCPUFDestinat   IN NUMBER,
  p_item_aliquotaEstImpFederais  IN NUMBER,
  p_item_aliquotaEstImpEstaduais IN NUMBER,
  p_item_aliquotaEstImpMunicipai IN NUMBER,
  p_item_baseISSQN               IN NUMBER,
  p_item_valorISSQN              IN NUMBER,
  p_item_baseRetIRRF             IN NUMBER,
  p_item_valorRetIRRF            IN NUMBER,
  p_item_baseRetINSS             IN NUMBER,
  p_item_valorRetINSS            IN NUMBER,
  p_item_baseRetPIS              IN NUMBER,
  p_item_valorRetPIS             IN NUMBER,
  p_item_baseRetCOFINS           IN NUMBER,
  p_item_valorRetCOFINS          IN NUMBER,
  p_item_baseRetCSLL             IN NUMBER,
  p_item_valorRetCSLL            IN NUMBER,
  p_item_baseRetOutros           IN NUMBER,
  p_item_valorRetOutros          IN NUMBER,
  p_item_baseII                  IN NUMBER,
  p_item_valorII                 IN NUMBER,
  p_item_baseIOF                 IN NUMBER,
  p_item_valorIOF                IN NUMBER,
  p_item_baseIPI                 IN NUMBER,
  p_item_valorIPI                IN NUMBER,
  p_item_basePIS                 IN NUMBER,
  p_item_valorPIS                IN NUMBER,
  p_item_basePISST               IN NUMBER,
  p_item_valorPISST              IN NUMBER,
  p_item_baseCOFINS              IN NUMBER,
  p_item_valorCOFINS             IN NUMBER,
  p_item_baseCOFINSST            IN NUMBER,
  p_item_valorCOFINSST           IN NUMBER,
  p_item_baseCreditoSimplesNac   IN NUMBER,
  p_item_valorCreditoSimplesNac  IN NUMBER,
  p_item_baseICMS                IN NUMBER,
  p_item_valorICMSOperacao       IN NUMBER,
  p_item_valorICMSDiferido       IN NUMBER,
  p_item_valorICMS               IN NUMBER,
  p_item_valorICMSDesoneracao    IN NUMBER,
  p_item_baseICMSST              IN NUMBER,
  p_item_valorICMSST             IN NUMBER,
  p_item_baseICMSSTAnteriormente IN NUMBER,
  p_item_valorICMSSTAnteriorment IN NUMBER,
  p_item_valorICMSProprioSubstit IN NUMBER,
  p_item_baseICMSEfetivo         IN NUMBER,
  p_item_valorICMSEfetivo        IN NUMBER,
  p_item_baseICMSUFDestinatario  IN NUMBER,
  p_item_valorICMSUFDestinatario IN NUMBER,
  p_item_baseICMSUFRemetente     IN NUMBER,
  p_item_valorICMSUFRemetente    IN NUMBER,
  p_item_baseFCP                 IN NUMBER,
  p_item_valorFCP                IN NUMBER,
  p_item_baseFCPST               IN NUMBER,
  p_item_valorFCPST              IN NUMBER,
  p_item_baseFCPSTAnteriormente  IN NUMBER,
  p_item_valorFCPSTAnteriormente IN NUMBER,
  p_item_baseFCPUFDestinatario   IN NUMBER,
  p_item_valorFCPUFDestinatario  IN NUMBER,
  p_item_baseEstimadaImpostos    IN NUMBER,
  p_item_valorEstImpFederais     IN NUMBER,
  p_item_valorEstImpEstaduais    IN NUMBER,
  p_item_valorEstImpMunicipais   IN NUMBER,
  p_idAtividadesPrevistasSelec   IN VARCHAR2,
  p_nivel                        IN NUMBER,
  p_buffer_item_idItemOrcamento  IN VARCHAR2,
  /* Retornos */
  r_mensagemAviso                OUT VARCHAR,
  r_calcularImpostos             OUT NUMBER,
  r_item_idItemOrcamento         OUT NUMBER,
  r_buffer_item_idItemOrcamento  OUT VARCHAR2,
  r_valorInserido                OUT NUMBER)
IS
  v_cab_origemDocumento          NUMBER;
  v_cab_tipoDocumento            NUMBER;
  v_cab_entradaSaida             CHAR (1);
  v_cab_finalidadeNota           CHAR (1);
  v_cab_estabelecimento          NUMBER;
  v_cab_dataEmissao              DATE;
  v_cab_pessoa                   NUMBER;
  v_cab_enderecoEntregaPessoa    NUMBER;
  v_cab_municipioFatoGerador     NUMBER;
  v_cab_localDestinoOperacao     CHAR (1);
  v_cab_indicadorConsumidorFinal CHAR (1);
  v_cab_projeto                  VARCHAR2 (60);
  v_cab_modalidadeFrete          CHAR (1);
  v_cab_tipoPagamentoFrete       CHAR (1);
  v_cab_transportadora           NUMBER;
  v_cab_enderecoTransportadora   NUMBER;
  v_cab_ultimoVendedorItem       NUMBER;
  v_cab_quantidadeVolume         NUMBER;
  v_cab_quantidade               NUMBER;
  v_cab_pesoLiquido              NUMBER;
  v_cab_pesoBruto                NUMBER;
  v_cab_valorProdutosBruto       NUMBER;
  v_cab_valorProdutos            NUMBER;
  v_cab_valorDescontoProdutos    NUMBER;
  v_cab_valorAcrescimoProdutos   NUMBER;
  v_cab_valorServicosBruto       NUMBER;
  v_cab_valorServicos            NUMBER;
  v_cab_valorDescontoServicos    NUMBER;
  v_cab_valorAcrescimoServicos   NUMBER;
  v_cab_valorFreteItem           NUMBER;
  v_cab_valorSeguroItem          NUMBER;
  v_cab_valorAdicFreteMarItem    NUMBER;
  v_cab_valorDespesasAduanItem   NUMBER;
  v_cab_valorFreteGeral          NUMBER;
  v_cab_valorSeguroGeral         NUMBER;
  v_cab_valorDescontoGeral       NUMBER;
  v_cab_valorOutrasDespesasGeral NUMBER;
  v_cab_valorAdicFreteMarGeral   NUMBER;
  v_cab_valorDespesasAduanGeral  NUMBER;
  v_cab_condicaoPagamento        NUMBER;
  v_cab_numeroParcelas           NUMBER;
  v_cab_somaPrazoParcelas        NUMBER;
  v_cab_valorXPrazoParcelas      NUMBER;
  v_cab_prazoMedio               NUMBER;
  v_cab_prazoMedioPonderado      NUMBER;
  v_cab_valorBasePagamento       NUMBER;
  v_cab_valorAVistaMinimo        NUMBER;
  v_cab_valorEntradaMinima       NUMBER;
  v_cab_valorAVistaEntrada       NUMBER;
  v_cab_valorPagamentoBruto      NUMBER;
  v_cab_valorDescontoPagamento   NUMBER;
  v_cab_valorOutrasDespPagamento NUMBER;
  v_cab_valorJurosPagamento      NUMBER;
  v_cab_valorPagamentoLiquido    NUMBER;
  v_cab_valorTroco               NUMBER;
  v_cab_valorFreteTotal          NUMBER;
  v_cab_valorSeguroTotal         NUMBER;
  v_cab_valorDescontoTotal       NUMBER;
  v_cab_valorOutrasDespesasTotal NUMBER;
  v_cab_valorAdicFreteMarTotal   NUMBER;
  v_cab_valorDespesasAduanTotal  NUMBER;
  v_cab_valorLiquidoItem         NUMBER;
  v_est_grupoFiscal              NUMBER;
  v_pessEst_regimeTributario     CHAR (1);
  v_munEndEst_uf                 CHAR (2);
  v_pess_indicadorInscricaoEstad CHAR (1);
  v_endPess_enderecoPessoa       NUMBER;
  v_munEndPess_uf                CHAR (2);
  v_munEndEntr_uf                CHAR (2);
  v_etOrc_situacaoOrcamento      NUMBER;
  v_inserindoItem                NUMBER;
  v_cab_promocaoExiste           NUMBER;
  v_ini_cab_valorFreteItem       NUMBER;
  v_ini_cab_valorFreteGeral      NUMBER;
  v_ini_gradeProduto             NUMBER;
  v_ini_personalizacao           NUMBER;
  v_ini_operacaoFiscal           NUMBER;
  v_ini_quantidade               NUMBER;
  v_ini_controleEntrega          NUMBER;
  v_ini_valorProdutoServicoBruto NUMBER;
  v_ini_valorProdutoServico      NUMBER;
  v_ini_valorDescontoItem        NUMBER;
  v_ini_valorAcrescimoItem       NUMBER;
  v_ini_valorBasePagamento       NUMBER;
  v_ini_valorFreteTotal          NUMBER;
  v_ini_valorSeguroTotal         NUMBER;
  v_ini_valorDescontoTotal       NUMBER;
  v_ini_valorOutrasDespesasTotal NUMBER;
  v_ini_valorAdicFreteMarTotal   NUMBER;
  v_ini_valorDespesasAduanTotal  NUMBER;
  v_ini_contrEntr_habilitaFrete  NUMBER;
  v_item_sequencia               NUMBER;
  v_item_cancelado               NUMBER;
  v_item_quantidadeSaldo         NUMBER;
  v_item_precoUnitario           NUMBER;
  v_item_precoUnitarioConvertido NUMBER;
  v_item_valorProdutoServicoBrut NUMBER;
  v_item_valorProdutoServico     NUMBER;
  v_item_valorFreteGeral         NUMBER;
  v_item_valorDescontoGeral      NUMBER;
  v_item_valorBasePagamento      NUMBER;
  v_item_valorDescontoPagamento  NUMBER;
  v_item_valorOutrasDespPagament NUMBER;
  v_item_valorJurosPagamento     NUMBER;
  v_item_valorFreteTotal         NUMBER;
  v_item_valorSeguroTotal        NUMBER;
  v_item_valorDescontoTotal      NUMBER;
  v_item_valorOutrasDespesasTot  NUMBER;
  v_item_valorAdicFreteMarTotal  NUMBER;
  v_item_valorDespesasAduanTotal NUMBER;
  v_item_movimentaEstoque        NUMBER;
  v_item_geraFinanceiro          NUMBER;
  v_item_cfop                    NUMBER;
  v_item_indicadorISSQN          CHAR (1);
  v_item_aliquotaISSQN           NUMBER;
  v_item_retidoISSQN             NUMBER;
  v_item_tributadoForaMunicipio  NUMBER;
  v_item_incentivoFiscal         NUMBER;
  v_item_listaServicos           NUMBER;
  v_item_cnae                    NUMBER;
  v_item_idServicoMunicipio      NUMBER;
  v_item_numeroProcessoAdministr VARCHAR2 (30);
  v_item_retencaoIRRF            NUMBER;
  v_item_retencaoINSS            NUMBER;
  v_item_retencaoPIS             NUMBER;
  v_item_retencaoCOFINS          NUMBER;
  v_item_retencaoCSLL            NUMBER;
  v_item_retencaoOutros          NUMBER;
  v_item_aliquotaII              NUMBER;
  v_item_aliquotaIOF             NUMBER;
  v_item_codigoEnquadramentoIPI  NUMBER;
  v_item_stIPI                   CHAR (2);
  v_item_aliquotaIPI             NUMBER;
  v_item_valorAliquotaIPI        NUMBER;
  v_item_stPIS                   CHAR (2);
  v_item_aliquotaPIS             NUMBER;
  v_item_valorAliquotaPIS        NUMBER;
  v_item_aliquotaPISST           NUMBER;
  v_item_valorAliquotaPISST      NUMBER;
  v_item_stCOFINS                CHAR (2);
  v_item_aliquotaCOFINS          NUMBER;
  v_item_valorAliquotaCOFINS     NUMBER;
  v_item_aliquotaCOFINSST        NUMBER;
  v_item_valorAliquotaCOFINSST   NUMBER;
  v_item_stSimplesNacional       CHAR (3);
  v_item_creditoSimplesNacional  NUMBER;
  v_item_stICMS                  CHAR (2);
  v_item_modalBaseCalcICMS       CHAR (1);
  v_item_reducaoBaseICMS         NUMBER;
  v_item_aliquotaICMS            NUMBER;
  v_item_diferimentoICMS         NUMBER;
  v_item_motivoDesoneracaoICMS   CHAR (2);
  v_item_idBeneficio             NUMBER;
  v_item_modalBaseCalcICMSST     CHAR (1);
  v_item_margemValorAdicionadoST NUMBER;
  v_item_reducaoBaseST           NUMBER;
  v_item_aliquotaICMSST          NUMBER;
  v_item_aliquotaSTSuportConsFin NUMBER;
  v_item_reducaoBaseICMSEfetivo  NUMBER;
  v_item_aliquotaICMSEfetivo     NUMBER;
  v_item_aliquotaICMSUFDestinat  NUMBER;
  v_item_aliquotaICMSInterestad  NUMBER;
  v_item_partilhaICMSInterestad  NUMBER;
  v_item_aliquotaFCP             NUMBER;
  v_item_aliquotaFCPST           NUMBER;
  v_item_aliquotaFCPSTAnteriorm  NUMBER;
  v_item_aliquotaFCPUFDestinat   NUMBER;
  v_item_aliquotaEstImpFederais  NUMBER;
  v_item_aliquotaEstImpEstaduais NUMBER;
  v_item_aliquotaEstImpMunicipai NUMBER;
  v_item_baseISSQN               NUMBER;
  v_item_valorISSQN              NUMBER;
  v_item_baseRetIRRF             NUMBER;
  v_item_valorRetIRRF            NUMBER;
  v_item_baseRetINSS             NUMBER;
  v_item_valorRetINSS            NUMBER;
  v_item_baseRetPIS              NUMBER;
  v_item_valorRetPIS             NUMBER;
  v_item_baseRetCOFINS           NUMBER;
  v_item_valorRetCOFINS          NUMBER;
  v_item_baseRetCSLL             NUMBER;
  v_item_valorRetCSLL            NUMBER;
  v_item_baseRetOutros           NUMBER;
  v_item_valorRetOutros          NUMBER;
  v_item_baseII                  NUMBER;
  v_item_valorII                 NUMBER;
  v_item_baseIOF                 NUMBER;
  v_item_valorIOF                NUMBER;
  v_item_baseIPI                 NUMBER;
  v_item_valorIPI                NUMBER;
  v_item_basePIS                 NUMBER;
  v_item_valorPIS                NUMBER;
  v_item_basePISST               NUMBER;
  v_item_valorPISST              NUMBER;
  v_item_baseCOFINS              NUMBER;
  v_item_valorCOFINS             NUMBER;
  v_item_baseCOFINSST            NUMBER;
  v_item_valorCOFINSST           NUMBER;
  v_item_baseCreditoSimplesNac   NUMBER;
  v_item_valorCreditoSimplesNac  NUMBER;
  v_item_baseICMS                NUMBER;
  v_item_valorICMSOperacao       NUMBER;
  v_item_valorICMSDiferido       NUMBER;
  v_item_valorICMS               NUMBER;
  v_item_valorICMSDesoneracao    NUMBER;
  v_item_baseICMSST              NUMBER;
  v_item_valorICMSST             NUMBER;
  v_item_baseICMSSTAnteriormente NUMBER;
  v_item_valorICMSSTAnteriorment NUMBER;
  v_item_valorICMSProprioSubstit NUMBER;
  v_item_baseICMSEfetivo         NUMBER;
  v_item_valorICMSEfetivo        NUMBER;
  v_item_baseICMSUFDestinatario  NUMBER;
  v_item_valorICMSUFDestinatario NUMBER;
  v_item_baseICMSUFRemetente     NUMBER;
  v_item_valorICMSUFRemetente    NUMBER;
  v_item_baseFCP                 NUMBER;
  v_item_valorFCP                NUMBER;
  v_item_baseFCPST               NUMBER;
  v_item_valorFCPST              NUMBER;
  v_item_baseFCPSTAnteriormente  NUMBER;
  v_item_valorFCPSTAnteriormente NUMBER;
  v_item_baseFCPUFDestinatario   NUMBER;
  v_item_valorFCPUFDestinatario  NUMBER;
  v_item_baseEstimadaImpostos    NUMBER;
  v_item_valorEstImpFederais     NUMBER;
  v_item_valorEstImpEstaduais    NUMBER;
  v_item_valorEstImpMunicipais   NUMBER;
  v_item_valorLiquidoItem        NUMBER;
  v_modDoc_capituloNatFiscal     NUMBER;
  v_modDoc_movimentaEstoque      NUMBER;
  v_modDoc_geraFinanceiro        NUMBER;
  v_modDoc_tipoPreco             CHAR (1);
  v_modDoc_tabelaPreco           VARCHAR (10);
  v_modDoc_fatorMultipPreco      NUMBER;
  v_modDoc_tipoPrecoB            CHAR (1);
  v_modDoc_tabelaPrecoB          VARCHAR (10);
  v_modDoc_fatorMultipPrecoB     NUMBER;
  v_modDoc_diminuiDescontoPrUnit NUMBER;
  v_modDoc_somaAcrescimosPrUnit  NUMBER;
  v_modDoc_somaFreteSeguroPrUnit NUMBER;
  v_gradProd_produto             NUMBER;
  v_gradProd_cor                 NUMBER;
  v_gradProd_tamanho             CHAR(10);
  v_prod_unidadeMedida           VARCHAR2(6);
  v_prod_controleEstoque         NUMBER;
  v_prod_pesoLiquido             NUMBER;
  v_prod_pesoBruto               NUMBER;
  v_prod_tipoProduto             CHAR(2);
  v_prod_origemMercadoria        CHAR(1);
  v_prod_idNcm                   NUMBER;
  v_prod_listaServicos           NUMBER;
  v_prod_precoPautaTabelado      NUMBER;
  v_prod_composicaoPreco         NUMBER;
  v_contrEntr_habilitaFrete      NUMBER;
  v_observacoes                  VARCHAR2 (4000);
  v_idEnderecoEstoque            NUMBER;
  v_combo_operacaoFiscal         NUMBER;
  v_combo_controleQuantidade     NUMBER;
  v_combo_unidadeMedidaConversao VARCHAR2(6);
  v_combo_conversorQuantidade    NUMBER;
  v_combo_loteMinimo             NUMBER;
  v_combo_loteMultiplo           NUMBER;
  v_combo_altura                 NUMBER;
  v_combo_largura                NUMBER;
  v_combo_comprimento            NUMBER;
  v_combo_pecas                  NUMBER;
  v_combo_quantidadeConvertida   NUMBER;
  v_combo_pesoLiquido            NUMBER;
  v_combo_pesoBruto              NUMBER;
  v_combo_tipoPreco              CHAR(1);
  v_combo_tabelaPreco            VARCHAR2(10);
  v_combo_precoSugestaoAPrazo    NUMBER;
  v_combo_precoSugestaoAVista    NUMBER;
  v_combo_precoDesconto          NUMBER;
  v_combo_precoMinimo            NUMBER;
  v_combo_precoUnitario          NUMBER;
  v_combo_valorTotal             NUMBER;
  v_ativ_selecionaAtividadePrev  NUMBER;
  v_ativ_numero                  NUMBER;
  v_ativ_quantidade              NUMBER;
  v_ativ_precoUnitarioMenor      NUMBER;
  v_ativ_precoUnitario           NUMBER;
  v_ativ_valorTotalItem          NUMBER;
  v_ativ_geraFinanceiro          NUMBER;
  v_valorFreteRegra              NUMBER;
  v_auxNumber                    NUMBER;
  v_auxVarchar                   VARCHAR2 (32000);
BEGIN
  r_mensagemAviso := p_mensagemAviso;
  r_calcularImpostos := p_calcularImpostos;
  r_item_idItemOrcamento := p_item_idItemOrcamento;
  r_buffer_item_idItemOrcamento := p_buffer_item_idItemOrcamento;
  r_valorInserido := 0;
  SELECT
    capituloNaturezaFiscal,
    movimentaEstoque,
    geraFinanceiro,
    tipoPreco,
    tabelaPreco,
    fatorMultiplicadorPreco,
    tipoPrecoB,
    tabelaPrecoB,
    fatorMultiplicadorPrecoB,
    diminuiDescontoPrUnit,
    somaAcrescimosPrUnit,
    somaFreteSeguroPrUnit
  INTO
    v_modDoc_capituloNatFiscal,
    v_modDoc_movimentaEstoque,
    v_modDoc_geraFinanceiro,
    v_modDoc_tipoPreco,
    v_modDoc_tabelaPreco,
    v_modDoc_fatorMultipPreco,
    v_modDoc_tipoPrecoB,
    v_modDoc_tabelaPrecoB,
    v_modDoc_fatorMultipPrecoB,
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit
  FROM PAMODELOSDOCUMENTO
  WHERE modeloDocumento = p_item_modeloDocumento;
  SELECT
    cab.origemDocumento,
    cab.tipoDocumento,
    cab.entradaSaida,
    cab.finalidadeNota,
    cab.estabelecimento,
    cab.dataEmissao,
    cab.pessoa,
    cab.enderecoEntregaPessoa,
    cab.municipioFatoGerador,
    cab.localDestinoOperacao,
    cab.indicadorConsumidorFinal,
    cab.projeto,
    cab.modalidadeFrete,
    cab.tipoPagamentoFrete,
    cab.transportadora,
    cab.enderecoTransportadora,
    cab.ultimoVendedorItem,
    cab.quantidadeVolume,
    cab.quantidade,
    cab.pesoLiquido,
    cab.pesoBruto,
    cab.valorProdutosBruto,
    cab.valorProdutos,
    cab.valorDescontoProdutos,
    cab.valorAcrescimoProdutos,
    cab.valorServicosBruto,
    cab.valorServicos,
    cab.valorDescontoServicos,
    cab.valorAcrescimoServicos,
    cab.valorFreteItem,
    cab.valorSeguroItem,
    cab.valorAdicFreteMarinhaMerItem,
    cab.valorDespesasAduaneirasItem,
    cab.valorFreteGeral,
    cab.valorSeguroGeral,
    cab.valorDescontoGeral,
    cab.valorOutrasDespesasGeral,
    cab.valorAdicFreteMarinhaMerGeral,
    cab.valorDespesasAduaneirasGeral,
    cab.condicaoPagamento,
    cab.numeroParcelas,
    cab.somaPrazoParcelas,
    cab.valorXPrazoParcelas,
    cab.prazoMedio,
    cab.prazoMedioPonderado,
    cab.valorBasePagamento,
    cab.valorAVistaMinimo,
    cab.valorEntradaMinima,
    cab.valorAVistaEntrada,
    cab.valorPagamentoBruto,
    cab.valorDescontoPagamento,
    cab.valorOutrasDespesasPagamento,
    cab.valorJurosPagamento,
    cab.valorPagamentoLiquido,
    cab.valorTroco,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorDescontoTotal,
    cab.valorOutrasDespesasTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    est.grupoFiscal,
    COALESCE (pessEst.regimeTributario, ' '),
    COALESCE ((
      SELECT MIN(munEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEst
      ON munEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1), '  '),
    pess.indicadorInscricaoEstadual,
    COALESCE ((
      SELECT MIN(enderecoPessoa)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), 0),
    COALESCE ((
      SELECT MIN(munPess.uf)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), '  '),
    munEndEntr.uf,
    etOrc.situacaoOrcamento
  INTO
    v_cab_origemDocumento,
    v_cab_tipoDocumento,
    v_cab_entradaSaida,
    v_cab_finalidadeNota,
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_pessoa,
    v_cab_enderecoEntregaPessoa,
    v_cab_municipioFatoGerador,
    v_cab_localDestinoOperacao,
    v_cab_indicadorConsumidorFinal,
    v_cab_projeto,
    v_cab_modalidadeFrete,
    v_cab_tipoPagamentoFrete,
    v_cab_transportadora,
    v_cab_enderecoTransportadora,
    v_cab_ultimoVendedorItem,
    v_cab_quantidadeVolume,
    v_cab_quantidade,
    v_cab_pesoLiquido,
    v_cab_pesoBruto,
    v_cab_valorProdutosBruto,
    v_cab_valorProdutos,
    v_cab_valorDescontoProdutos,
    v_cab_valorAcrescimoProdutos,
    v_cab_valorServicosBruto,
    v_cab_valorServicos,
    v_cab_valorDescontoServicos,
    v_cab_valorAcrescimoServicos,
    v_cab_valorFreteItem,
    v_cab_valorSeguroItem,
    v_cab_valorAdicFreteMarItem,
    v_cab_valorDespesasAduanItem,
    v_cab_valorFreteGeral,
    v_cab_valorSeguroGeral,
    v_cab_valorDescontoGeral,
    v_cab_valorOutrasDespesasGeral,
    v_cab_valorAdicFreteMarGeral,
    v_cab_valorDespesasAduanGeral,
    v_cab_condicaoPagamento,
    v_cab_numeroParcelas,
    v_cab_somaPrazoParcelas,
    v_cab_valorXPrazoParcelas,
    v_cab_prazoMedio,
    v_cab_prazoMedioPonderado,
    v_cab_valorBasePagamento,
    v_cab_valorAVistaMinimo,
    v_cab_valorEntradaMinima,
    v_cab_valorAVistaEntrada,
    v_cab_valorPagamentoBruto,
    v_cab_valorDescontoPagamento,
    v_cab_valorOutrasDespPagamento,
    v_cab_valorJurosPagamento,
    v_cab_valorPagamentoLiquido,
    v_cab_valorTroco,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorDescontoTotal,
    v_cab_valorOutrasDespesasTotal,
    v_cab_valorAdicFreteMarTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_est_grupoFiscal,
    v_pessEst_regimeTributario,
    v_munEndEst_uf,
    v_pess_indicadorInscricaoEstad,
    v_endPess_enderecoPessoa,
    v_munEndPess_uf,
    v_munEndEntr_uf,
    v_etOrc_situacaoOrcamento
  FROM MOORCAMENTOS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAPESSOAS pess
  ON pess.pessoa = cab.pessoa
  JOIN CAENDERECOSPESSOA endEntr
  ON endEntr.enderecoPessoa = cab.enderecoEntregaPessoa
  JOIN SIMUNICIPIOS munEndEntr
  ON munEndEntr.municipio = endEntr.municipio
  JOIN PAETAPASORCAMENTO etOrc
  ON etOrc.etapaOrcamento = cab.etapaOrcamento
  WHERE cab.orcamento = p_item_orcamento;
  v_ini_cab_valorFreteItem := v_cab_valorFreteItem;
  v_ini_cab_valorFreteGeral := v_cab_valorFreteGeral;
  SELECT
    gradProd.produto,
    gradProd.cor,
    gradProd.tamanho,
    prod.unidadeMedida,
    prod.controleEstoque,
    prod.pesoLiquido,
    prod.pesoBruto,
    prod.tipoProduto,
    prod.origemMercadoria,
    prod.idNcm,
    prod.listaServicos,
    prod.precoPautaTabelado,
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        WHERE comp.produto = gradProd.produto
        AND comp.ativo = 1)
      THEN 1
      ELSE 0
    END
  INTO
    v_gradProd_produto,
    v_gradProd_cor,
    v_gradProd_tamanho,
    v_prod_unidadeMedida,
    v_prod_controleEstoque,
    v_prod_pesoLiquido,
    v_prod_pesoBruto,
    v_prod_tipoProduto,
    v_prod_origemMercadoria,
    v_prod_idNcm,
    v_prod_listaServicos,
    v_prod_precoPautaTabelado,
    v_prod_composicaoPreco
  FROM CAGRADESPRODUTO gradProd
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  WHERE gradProd.gradeProduto = p_item_gradeProduto;
  v_inserindoItem                := 1;
  v_cab_promocaoExiste           := 0;
  v_item_cancelado               := 0;
  v_ini_gradeProduto             := 0;
  v_ini_personalizacao           := 0;
  v_ini_operacaoFiscal           := 0;
  v_ini_quantidade               := 0;
  v_ini_controleEntrega          := 0;
  v_ini_valorProdutoServicoBruto := 0;
  v_ini_valorProdutoServico      := 0;
  v_ini_valorDescontoItem        := 0;
  v_ini_valorAcrescimoItem       := 0;
  v_ini_valorBasePagamento       := 0;
  v_ini_valorFreteTotal          := 0;
  v_ini_valorSeguroTotal         := 0;
  v_ini_valorDescontoTotal       := 0;
  v_ini_valorOutrasDespesasTotal := 0;
  v_ini_valorAdicFreteMarTotal   := 0;
  v_ini_valorDespesasAduanTotal  := 0;
  v_ini_contrEntr_habilitaFrete  := 0;
  v_item_quantidadeSaldo         := p_item_quantidade;
  v_item_precoUnitario           := p_item_precoUnitario;
  v_item_valorProdutoServicoBrut := ROUND (p_item_Quantidade * CASE WHEN v_modDoc_diminuiDescontoPrUnit = 1 OR v_modDoc_somaAcrescimosPrUnit = 1 OR v_modDoc_somaFreteSeguroPrUnit = 1 OR v_prod_composicaoPreco = 1 THEN p_item_precoUnitarioBruto ELSE p_item_precoUnitario END, 2);
  v_item_valorProdutoServico     := ROUND (p_item_Quantidade * p_item_precoUnitario, 2);
  v_item_valorFreteGeral         := p_item_valorFreteGeral;
  v_item_valorDescontoGeral      := p_item_valorDescontoGeral;
  v_item_valorDescontoPagamento  := p_item_valorDescontoPagamento;
  v_item_valorOutrasDespPagament := p_item_valorOutrasDespPagament;
  v_item_valorJurosPagamento     := p_item_valorJurosPagamento;
  v_item_movimentaEstoque        := p_item_movimentaEstoque;
  v_item_geraFinanceiro          := p_item_geraFinanceiro;
  v_item_cfop                    := p_item_cfop;
  v_item_indicadorISSQN          := p_item_indicadorISSQN;
  v_item_aliquotaISSQN           := p_item_aliquotaISSQN;
  v_item_retidoISSQN             := p_item_retidoISSQN;
  v_item_tributadoForaMunicipio  := p_item_tributadoForaMunicipio;
  v_item_incentivoFiscal         := p_item_incentivoFiscal;
  v_item_listaServicos           := p_item_listaServicos;
  v_item_cnae                    := p_item_cnae;
  v_item_idServicoMunicipio      := p_item_idServicoMunicipio;
  v_item_numeroProcessoAdministr := p_item_numeroProcessoAdministr;
  v_item_retencaoIRRF            := p_item_retencaoIRRF;
  v_item_retencaoINSS            := p_item_retencaoINSS;
  v_item_retencaoPIS             := p_item_retencaoPIS;
  v_item_retencaoCOFINS          := p_item_retencaoCOFINS;
  v_item_retencaoCSLL            := p_item_retencaoCSLL;
  v_item_retencaoOutros          := p_item_retencaoOutros;
  v_item_aliquotaII              := p_item_aliquotaII;
  v_item_aliquotaIOF             := p_item_aliquotaIOF;
  v_item_codigoEnquadramentoIPI  := p_item_codigoEnquadramentoIPI;
  v_item_stIPI                   := p_item_stIPI;
  v_item_aliquotaIPI             := p_item_aliquotaIPI;
  v_item_valorAliquotaIPI        := p_item_valorAliquotaIPI;
  v_item_stPIS                   := p_item_stPIS;
  v_item_aliquotaPIS             := p_item_aliquotaPIS;
  v_item_valorAliquotaPIS        := p_item_valorAliquotaPIS;
  v_item_aliquotaPISST           := p_item_aliquotaPISST;
  v_item_valorAliquotaPISST      := p_item_valorAliquotaPISST;
  v_item_stCOFINS                := p_item_stCOFINS;
  v_item_aliquotaCOFINS          := p_item_aliquotaCOFINS;
  v_item_valorAliquotaCOFINS     := p_item_valorAliquotaCOFINS;
  v_item_aliquotaCOFINSST        := p_item_aliquotaCOFINSST;
  v_item_valorAliquotaCOFINSST   := p_item_valorAliquotaCOFINSST;
  v_item_stSimplesNacional       := p_item_stSimplesNacional;
  v_item_creditoSimplesNacional  := p_item_creditoSimplesNacional;
  v_item_stICMS                  := p_item_stICMS;
  v_item_modalBaseCalcICMS       := p_item_modalBaseCalcICMS;
  v_item_reducaoBaseICMS         := p_item_reducaoBaseICMS;
  v_item_aliquotaICMS            := p_item_aliquotaICMS;
  v_item_diferimentoICMS         := p_item_diferimentoICMS;
  v_item_motivoDesoneracaoICMS   := p_item_motivoDesoneracaoICMS;
  v_item_idBeneficio             := p_item_idBeneficio;
  v_item_modalBaseCalcICMSST     := p_item_modalBaseCalcICMSST;
  v_item_margemValorAdicionadoST := p_item_margemValorAdicionadoST;
  v_item_reducaoBaseST           := p_item_reducaoBaseST;
  v_item_aliquotaICMSST          := p_item_aliquotaICMSST;
  v_item_aliquotaSTSuportConsFin := p_item_aliquotaSTSuportConsFin;
  v_item_reducaoBaseICMSEfetivo  := p_item_reducaoBaseICMSEfetivo;
  v_item_aliquotaICMSEfetivo     := p_item_aliquotaICMSEfetivo;
  v_item_aliquotaICMSUFDestinat  := p_item_aliquotaICMSUFDestinat;
  v_item_aliquotaICMSInterestad  := p_item_aliquotaICMSInterestad;
  v_item_partilhaICMSInterestad  := p_item_partilhaICMSInterestad;
  v_item_aliquotaFCP             := p_item_aliquotaFCP;
  v_item_aliquotaFCPST           := p_item_aliquotaFCPST;
  v_item_aliquotaFCPSTAnteriorm  := p_item_aliquotaFCPSTAnteriorm;
  v_item_aliquotaFCPUFDestinat   := p_item_aliquotaFCPUFDestinat;
  v_item_aliquotaEstImpFederais  := p_item_aliquotaEstImpFederais;
  v_item_aliquotaEstImpEstaduais := p_item_aliquotaEstImpEstaduais;
  v_item_aliquotaEstImpMunicipai := p_item_aliquotaEstImpMunicipai;
  v_item_baseISSQN               := p_item_baseISSQN;
  v_item_valorISSQN              := p_item_valorISSQN;
  v_item_baseRetIRRF             := p_item_baseRetIRRF;
  v_item_valorRetIRRF            := p_item_valorRetIRRF;
  v_item_baseRetINSS             := p_item_baseRetINSS;
  v_item_valorRetINSS            := p_item_valorRetINSS;
  v_item_baseRetPIS              := p_item_baseRetPIS;
  v_item_valorRetPIS             := p_item_valorRetPIS;
  v_item_baseRetCOFINS           := p_item_baseRetCOFINS;
  v_item_valorRetCOFINS          := p_item_valorRetCOFINS;
  v_item_baseRetCSLL             := p_item_baseRetCSLL;
  v_item_valorRetCSLL            := p_item_valorRetCSLL;
  v_item_baseRetOutros           := p_item_baseRetOutros;
  v_item_valorRetOutros          := p_item_valorRetOutros;
  v_item_baseII                  := p_item_baseII;
  v_item_valorII                 := p_item_valorII;
  v_item_baseIOF                 := p_item_baseIOF;
  v_item_valorIOF                := p_item_valorIOF;
  v_item_baseIPI                 := p_item_baseIPI;
  v_item_valorIPI                := p_item_valorIPI;
  v_item_basePIS                 := p_item_basePIS;
  v_item_valorPIS                := p_item_valorPIS;
  v_item_basePISST               := p_item_basePISST;
  v_item_valorPISST              := p_item_valorPISST;
  v_item_baseCOFINS              := p_item_baseCOFINS;
  v_item_valorCOFINS             := p_item_valorCOFINS;
  v_item_baseCOFINSST            := p_item_baseCOFINSST;
  v_item_valorCOFINSST           := p_item_valorCOFINSST;
  v_item_baseCreditoSimplesNac   := p_item_baseCreditoSimplesNac;
  v_item_valorCreditoSimplesNac  := p_item_valorCreditoSimplesNac;
  v_item_baseICMS                := p_item_baseICMS;
  v_item_valorICMSOperacao       := p_item_valorICMSOperacao;
  v_item_valorICMSDiferido       := p_item_valorICMSDiferido;
  v_item_valorICMS               := p_item_valorICMS;
  v_item_valorICMSDesoneracao    := p_item_valorICMSDesoneracao;
  v_item_baseICMSST              := p_item_baseICMSST;
  v_item_valorICMSST             := p_item_valorICMSST;
  v_item_baseICMSSTAnteriormente := p_item_baseICMSSTAnteriormente;
  v_item_valorICMSSTAnteriorment := p_item_valorICMSSTAnteriorment;
  v_item_valorICMSProprioSubstit := p_item_valorICMSProprioSubstit;
  v_item_baseICMSEfetivo         := p_item_baseICMSEfetivo;
  v_item_valorICMSEfetivo        := p_item_valorICMSEfetivo;
  v_item_baseICMSUFDestinatario  := p_item_baseICMSUFDestinatario;
  v_item_valorICMSUFDestinatario := p_item_valorICMSUFDestinatario;
  v_item_baseICMSUFRemetente     := p_item_baseICMSUFRemetente;
  v_item_valorICMSUFRemetente    := p_item_valorICMSUFRemetente;
  v_item_baseFCP                 := p_item_baseFCP;
  v_item_valorFCP                := p_item_valorFCP;
  v_item_baseFCPST               := p_item_baseFCPST;
  v_item_valorFCPST              := p_item_valorFCPST;
  v_item_baseFCPSTAnteriormente  := p_item_baseFCPSTAnteriormente;
  v_item_valorFCPSTAnteriormente := p_item_valorFCPSTAnteriormente;
  v_item_baseFCPUFDestinatario   := p_item_baseFCPUFDestinatario;
  v_item_valorFCPUFDestinatario  := p_item_valorFCPUFDestinatario;
  v_item_baseEstimadaImpostos    := p_item_baseEstimadaImpostos;
  v_item_valorEstImpFederais     := p_item_valorEstImpFederais;
  v_item_valorEstImpEstaduais    := p_item_valorEstImpEstaduais;
  v_item_valorEstImpMunicipais   := p_item_valorEstImpMunicipais;
  v_contrEntr_habilitaFrete      := 0;
  IF p_manterFinanceiro_Retotalizar = 0 THEN
    SELECT COALESCE (MAX(1), 0)
    INTO v_cab_promocaoExiste
    FROM MOORCAMENTOXPROMOCOES
    WHERE orcamento = p_item_orcamento;
  END IF;
  IF p_item_idItemOrcamento > 0 THEN
    FOR a IN (
      SELECT
        a.sequencia,
        a.cancelado,
        a.gradeProduto,
        a.personalizacao,
        a.usarPrecoAVista,
        a.controleQuantidade,
        a.loteMultiplo,
        a.quantidade,
        a.quantidadeConvertida,
        a.quantidadeSaldo,
        a.controleEntrega,
        a.pesoLiquido,
        a.pesoBruto,
        a.valorProdutoServicoBruto,
        a.valorProdutoServico,
        a.valorDescontoItem,
        a.valorAcrescimoItem,
        a.valorFreteItem,
        a.valorSeguroItem,
        a.valorAdicFreteMarinhaMerItem,
        a.valorDespesasAduaneirasItem,
        a.valorFreteGeral,
        a.valorSeguroGeral,
        a.valorDescontoGeral,
        a.valorOutrasDespesasGeral,
        a.valorAdicFreteMarinhaMerGeral,
        a.valorDespesasAduaneirasGeral,
        a.valorDescontoPagamento,
        a.valorOutrasDespesasPagamento,
        a.valorJurosPagamento,
        a.valorFreteTotal,
        a.valorSeguroTotal,
        a.valorDescontoTotal,
        a.valorOutrasDespesasTotal,
        a.valorAdicFreteMarinhaMerTotal,
        a.valorDespesasAduaneirasTotal,
        a.operacaoFiscal,
        a.movimentaEstoque,
        a.geraFinanceiro,
        a.cfop,
        a.indicadorISSQN,
        a.aliquotaISSQN,
        a.retidoISSQN,
        a.tributadoForaMunicipio,
        a.incentivoFiscal,
        a.listaServicos,
        a.cnae,
        a.idServicoMunicipio,
        a.numeroProcessoAdministrativo,
        a.retencaoIRRF,
        a.retencaoINSS,
        a.retencaoPIS,
        a.retencaoCOFINS,
        a.retencaoCSLL,
        a.retencaoOutros,
        a.aliquotaII,
        a.aliquotaIOF,
        a.codigoEnquadramentoIPI,
        a.stIPI,
        a.aliquotaIPI,
        a.valorAliquotaIPI,
        a.stPIS,
        a.aliquotaPIS,
        a.valorAliquotaPIS,
        a.aliquotaPISST,
        a.valorAliquotaPISST,
        a.stCOFINS,
        a.aliquotaCOFINS,
        a.valorAliquotaCOFINS,
        a.aliquotaCOFINSST,
        a.valorAliquotaCOFINSST,
        a.stSimplesNacional,
        a.creditoSimplesNacional,
        a.stICMS,
        a.modalidadeBaseCalcICMS,
        a.reducaoBaseICMS,
        a.aliquotaICMS,
        a.diferimentoICMS,
        a.motivoDesoneracaoICMS,
        a.idBeneficio,
        a.modalidadeBaseCalcICMSST,
        a.margemValorAdicionadoST,
        a.reducaoBaseST,
        a.aliquotaICMSST,
        a.aliquotaSTSuportConsFinal,
        a.reducaoBaseICMSEfetivo,
        a.aliquotaICMSEfetivo,
        a.aliquotaICMSUFDestinatario,
        a.aliquotaICMSInterestadual,
        a.partilhaICMSInterestadual,
        a.aliquotaFCP,
        a.aliquotaFCPST,
        a.aliquotaFCPSTAnteriormente,
        a.aliquotaFCPUFDestinatario,
        a.aliquotaEstimadaImpFederais,
        a.aliquotaEstimadaImpEstaduais,
        a.aliquotaEstimadaImpMunicipais,
        a.baseISSQN,
        a.valorISSQN,
        a.baseRetIRRF,
        a.valorRetIRRF,
        a.baseRetINSS,
        a.valorRetINSS,
        a.baseRetPIS,
        a.valorRetPIS,
        a.baseRetCOFINS,
        a.valorRetCOFINS,
        a.baseRetCSLL,
        a.valorRetCSLL,
        a.baseRetOutros,
        a.valorRetOutros,
        a.baseII,
        a.valorII,
        a.baseIOF,
        a.valorIOF,
        a.baseIPI,
        a.valorIPI,
        a.basePIS,
        a.valorPIS,
        a.basePISST,
        a.valorPISST,
        a.baseCOFINS,
        a.valorCOFINS,
        a.baseCOFINSST,
        a.valorCOFINSST,
        a.baseCreditoSimplesNacional,
        a.valorCreditoSimplesNacional,
        a.baseICMS,
        a.valorICMSOperacao,
        a.valorICMSDiferido,
        a.valorICMS,
        a.valorICMSDesoneracao,
        a.baseICMSST,
        a.valorICMSST,
        a.baseICMSSTAnteriormente,
        a.valorICMSSTAnteriormente,
        a.valorICMSProprioSubstituto,
        a.baseICMSEfetivo,
        a.valorICMSEfetivo,
        a.baseICMSUFDestinatario,
        a.valorICMSUFDestinatario,
        a.baseICMSUFRemetente,
        a.valorICMSUFRemetente,
        a.baseFCP,
        a.valorFCP,
        a.baseFCPST,
        a.valorFCPST,
        a.baseFCPSTAnteriormente,
        a.valorFCPSTAnteriormente,
        a.baseFCPUFDestinatario,
        a.valorFCPUFDestinatario,
        a.baseEstimadaImpostos,
        a.valorEstimadoImpFederais,
        a.valorEstimadoImpEstaduais,
        a.valorEstimadoImpMunicipais,
        a.valorBasePagamento,
        a.valorLiquidoItem,
        prod.tipoProduto,
        b.habilitaFrete
      FROM MOORCAMENTOXITENS a
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      JOIN PACONTROLESENTREGA b
      ON b.controleEntrega = a.controleEntrega
      WHERE a.idItemOrcamento = p_item_idItemOrcamento)
    LOOP
      v_inserindoItem := 0;
      v_item_sequencia := a.sequencia;
      v_item_cancelado := a.cancelado;
      v_ini_gradeProduto := a.gradeProduto;
      v_ini_personalizacao := a.personalizacao;
      v_ini_operacaoFiscal := a.operacaoFiscal;
      v_ini_quantidade := a.quantidade;
      v_ini_controleEntrega := a.controleEntrega;
      v_ini_valorProdutoServicoBruto := a.valorProdutoServicoBruto;
      v_ini_valorProdutoServico := a.valorProdutoServico;
      v_ini_valorDescontoItem := a.valorDescontoItem;
      v_ini_valorAcrescimoItem := a.valorAcrescimoItem;
      v_ini_valorBasePagamento := a.valorBasePagamento;
      v_ini_valorFreteTotal := a.valorFreteTotal;
      v_ini_valorSeguroTotal := a.valorSeguroTotal;
      v_ini_valorDescontoTotal := a.valorDescontoTotal;
      v_ini_valorOutrasDespesasTotal := a.valorOutrasDespesasTotal;
      v_ini_valorAdicFreteMarTotal := a.valorAdicFreteMarinhaMerTotal;
      v_ini_valorDespesasAduanTotal := a.valorDespesasAduaneirasTotal;
      v_ini_contrEntr_habilitaFrete := 0;
      v_ini_valorBasePagamento := a.valorBasePagamento;
      v_ini_contrEntr_habilitaFrete := a.habilitaFrete;
      IF p_buscarAliquotas_CalcularImp = 'T' THEN
        IF p_buscarGeraFinanceiroEstoque = 1 THEN
          v_item_movimentaEstoque        := a.movimentaEstoque;
          v_item_geraFinanceiro          := a.geraFinanceiro;
        END IF;
        v_item_cfop                    := a.cfop;
        v_item_indicadorISSQN          := a.indicadorISSQN;
        v_item_aliquotaISSQN           := a.aliquotaISSQN;
        v_item_retidoISSQN             := a.retidoISSQN;
        v_item_tributadoForaMunicipio  := a.tributadoForaMunicipio;
        v_item_incentivoFiscal         := a.incentivoFiscal;
        v_item_listaServicos           := a.listaServicos;
        v_item_cnae                    := a.cnae;
        v_item_idServicoMunicipio      := a.idServicoMunicipio;
        v_item_numeroProcessoAdministr := a.numeroProcessoAdministrativo;
        v_item_retencaoIRRF            := a.retencaoIRRF;
        v_item_retencaoINSS            := a.retencaoINSS;
        v_item_retencaoPIS             := a.retencaoPIS;
        v_item_retencaoCOFINS          := a.retencaoCOFINS;
        v_item_retencaoCSLL            := a.retencaoCSLL;
        v_item_retencaoOutros          := a.retencaoOutros;
        v_item_aliquotaII              := a.aliquotaII;
        v_item_aliquotaIOF             := a.aliquotaIOF;
        v_item_codigoEnquadramentoIPI  := a.codigoEnquadramentoIPI;
        v_item_stIPI                   := a.stIPI;
        v_item_aliquotaIPI             := a.aliquotaIPI;
        v_item_valorAliquotaIPI        := a.valorAliquotaIPI;
        v_item_stPIS                   := a.stPIS;
        v_item_aliquotaPIS             := a.aliquotaPIS;
        v_item_valorAliquotaPIS        := a.valorAliquotaPIS;
        v_item_aliquotaPISST           := a.aliquotaPISST;
        v_item_valorAliquotaPISST      := a.valorAliquotaPISST;
        v_item_stCOFINS                := a.stCOFINS;
        v_item_aliquotaCOFINS          := a.aliquotaCOFINS;
        v_item_valorAliquotaCOFINS     := a.valorAliquotaCOFINS;
        v_item_aliquotaCOFINSST        := a.aliquotaCOFINSST;
        v_item_valorAliquotaCOFINSST   := a.valorAliquotaCOFINSST;
        v_item_stSimplesNacional       := a.stSimplesNacional;
        v_item_creditoSimplesNacional  := a.creditoSimplesNacional;
        v_item_stICMS                  := a.stICMS;
        v_item_modalBaseCalcICMS       := a.modalidadeBaseCalcICMS;
        v_item_reducaoBaseICMS         := a.reducaoBaseICMS;
        v_item_aliquotaICMS            := a.aliquotaICMS;
        v_item_diferimentoICMS         := a.diferimentoICMS;
        v_item_motivoDesoneracaoICMS   := a.motivoDesoneracaoICMS;
        v_item_idBeneficio             := a.idBeneficio;
        v_item_modalBaseCalcICMSST     := a.modalidadeBaseCalcICMSST;
        v_item_margemValorAdicionadoST := a.margemValorAdicionadoST;
        v_item_reducaoBaseST           := a.reducaoBaseST;
        v_item_aliquotaICMSST          := a.aliquotaICMSST;
        v_item_aliquotaSTSuportConsFin := a.aliquotaSTSuportConsFinal;
        v_item_reducaoBaseICMSEfetivo  := a.reducaoBaseICMSEfetivo;
        v_item_aliquotaICMSEfetivo     := a.aliquotaICMSEfetivo;
        v_item_aliquotaICMSUFDestinat  := a.aliquotaICMSUFDestinatario;
        v_item_aliquotaICMSInterestad  := a.aliquotaICMSInterestadual;
        v_item_partilhaICMSInterestad  := a.partilhaICMSInterestadual;
        v_item_aliquotaFCP             := a.aliquotaFCP;
        v_item_aliquotaFCPST           := a.aliquotaFCPST;
        v_item_aliquotaFCPSTAnteriorm  := a.aliquotaFCPSTAnteriormente;
        v_item_aliquotaFCPUFDestinat   := a.aliquotaFCPUFDestinatario;
        v_item_aliquotaEstImpFederais  := a.aliquotaEstimadaImpFederais;
        v_item_aliquotaEstImpEstaduais := a.aliquotaEstimadaImpEstaduais;
        v_item_aliquotaEstImpMunicipai := a.aliquotaEstimadaImpMunicipais;
        v_item_baseISSQN               := a.baseISSQN;
        v_item_valorISSQN              := a.valorISSQN;
        v_item_baseRetIRRF             := a.baseRetIRRF;
        v_item_valorRetIRRF            := a.valorRetIRRF;
        v_item_baseRetINSS             := a.baseRetINSS;
        v_item_valorRetINSS            := a.valorRetINSS;
        v_item_baseRetPIS              := a.baseRetPIS;
        v_item_valorRetPIS             := a.valorRetPIS;
        v_item_baseRetCOFINS           := a.baseRetCOFINS;
        v_item_valorRetCOFINS          := a.valorRetCOFINS;
        v_item_baseRetCSLL             := a.baseRetCSLL;
        v_item_valorRetCSLL            := a.valorRetCSLL;
        v_item_baseRetOutros           := a.baseRetOutros;
        v_item_valorRetOutros          := a.valorRetOutros;
        v_item_baseII                  := a.baseII;
        v_item_valorII                 := a.valorII;
        v_item_baseIOF                 := a.baseIOF;
        v_item_valorIOF                := a.valorIOF;
        v_item_baseIPI                 := a.baseIPI;
        v_item_valorIPI                := a.valorIPI;
        v_item_basePIS                 := a.basePIS;
        v_item_valorPIS                := a.valorPIS;
        v_item_basePISST               := a.basePISST;
        v_item_valorPISST              := a.valorPISST;
        v_item_baseCOFINS              := a.baseCOFINS;
        v_item_valorCOFINS             := a.valorCOFINS;
        v_item_baseCOFINSST            := a.baseCOFINSST;
        v_item_valorCOFINSST           := a.valorCOFINSST;
        v_item_baseCreditoSimplesNac   := a.baseCreditoSimplesNacional;
        v_item_valorCreditoSimplesNac  := a.valorCreditoSimplesNacional;
        v_item_baseICMS                := a.baseICMS;
        v_item_valorICMSOperacao       := a.valorICMSOperacao;
        v_item_valorICMSDiferido       := a.valorICMSDiferido;
        v_item_valorICMS               := a.valorICMS;
        v_item_valorICMSDesoneracao    := a.valorICMSDesoneracao;
        v_item_baseICMSST              := a.baseICMSST;
        v_item_valorICMSST             := a.valorICMSST;
        v_item_baseICMSSTAnteriormente := a.baseICMSSTAnteriormente;
        v_item_valorICMSSTAnteriorment := a.valorICMSSTAnteriormente;
        v_item_valorICMSProprioSubstit := a.valorICMSProprioSubstituto;
        v_item_baseICMSEfetivo         := a.baseICMSEfetivo;
        v_item_valorICMSEfetivo        := a.valorICMSEfetivo;
        v_item_baseICMSUFDestinatario  := a.baseICMSUFDestinatario;
        v_item_valorICMSUFDestinatario := a.valorICMSUFDestinatario;
        v_item_baseICMSUFRemetente     := a.baseICMSUFRemetente;
        v_item_valorICMSUFRemetente    := a.valorICMSUFRemetente;
        v_item_baseFCP                 := a.baseFCP;
        v_item_valorFCP                := a.valorFCP;
        v_item_baseFCPST               := a.baseFCPST;
        v_item_valorFCPST              := a.valorFCPST;
        v_item_baseFCPSTAnteriormente  := a.baseFCPSTAnteriormente;
        v_item_valorFCPSTAnteriormente := a.valorFCPSTAnteriormente;
        v_item_baseFCPUFDestinatario   := a.baseFCPUFDestinatario;
        v_item_valorFCPUFDestinatario  := a.valorFCPUFDestinatario;
        v_item_baseEstimadaImpostos    := a.baseEstimadaImpostos;
        v_item_valorEstImpFederais     := a.valorEstimadoImpFederais;
        v_item_valorEstImpEstaduais    := a.valorEstimadoImpEstaduais;
        v_item_valorEstImpMunicipais   := a.valorEstimadoImpMunicipais;
      END IF;
      IF a.cancelado = 0 THEN
        v_item_quantidadeSaldo := v_item_quantidadeSaldo + a.quantidadeSaldo - a.quantidade;
      END IF;
      IF p_manterFinanceiro_Retotalizar = 0
        AND (v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0)
        AND (a.valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
          OR a.valorProdutoServico <> v_item_valorProdutoServico
          OR a.valorDescontoItem <> p_item_valorDescontoItem
          OR a.valorAcrescimoItem <> p_item_valorAcrescimoItem)
        OR a.valorFreteGeral <> v_item_valorFreteGeral
        OR a.valorSeguroGeral <> p_item_valorSeguroGeral
        OR a.valorDescontoGeral <> v_item_valorDescontoGeral
        OR a.valorOutrasDespesasGeral <> p_item_valorOutrasDespesasGer
        OR a.valorAdicFreteMarinhaMerGeral <> p_item_valorAdicFreteMarGeral
        OR a.valorDespesasAduaneirasGeral <> p_item_valorDespesasAduanGeral
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF p_manterFinanceiro_Retotalizar < 2
      AND a.cancelado = 0
      THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume - TRUNC(CASE WHEN a.controleQuantidade = 1 AND a.loteMultiplo <> 0 THEN a.quantidade / a.loteMultiplo ELSE a.quantidadeConvertida END,0);
        END IF;
        v_cab_quantidade := v_cab_quantidade - a.quantidadeConvertida;
        v_cab_pesoLiquido := v_cab_pesoLiquido - a.pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto - a.pesoBruto;
        IF a.tipoProduto = '09' THEN
          v_cab_valorServicosBruto := v_cab_valorServicosBruto - a.valorProdutoServicoBruto;
          v_cab_valorServicos := v_cab_valorServicos - a.valorProdutoServico;
          v_cab_valorDescontoServicos := v_cab_valorDescontoServicos - a.valorDescontoItem;
          v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos - a.valorAcrescimoItem;
        ELSE 
          v_cab_valorProdutosBruto := v_cab_valorProdutosBruto - a.valorProdutoServicoBruto;
          v_cab_valorProdutos := v_cab_valorProdutos - a.valorProdutoServico;
          v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos - a.valorDescontoItem;
          v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos - a.valorAcrescimoItem;
        END IF;
        v_cab_valorFreteItem := v_cab_valorFreteItem - a.valorFreteItem;
        v_cab_valorSeguroItem := v_cab_valorSeguroItem - a.valorSeguroItem;
        v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem - a.valorAdicFreteMarinhaMerItem;
        v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem - a.valorDespesasAduaneirasItem;
        v_cab_valorFreteGeral := v_cab_valorFreteGeral - a.valorFreteGeral;
        v_cab_valorSeguroGeral := v_cab_valorSeguroGeral - a.valorSeguroGeral;
        v_cab_valorDescontoGeral := v_cab_valorDescontoGeral - a.valorDescontoGeral;
        v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral - a.valorOutrasDespesasGeral;
        v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral - a.valorAdicFreteMarinhaMerGeral;
        v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral - a.valorDespesasAduaneirasGeral;
        v_cab_valorBasePagamento := v_cab_valorBasePagamento - a.valorBasePagamento;
        IF a.usarPrecoAVista = 1
          AND a.geraFinanceiro = 1
        THEN
          v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo - a.valorProdutoServico + a.valorDescontoTotal - a.valorOutrasDespesasTotal;
        END IF;
        v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento - a.valorDescontoPagamento;
        v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento - a.valorOutrasDespesasPagamento;
        v_cab_valorJurosPagamento := v_cab_valorJurosPagamento - a.valorJurosPagamento;
        v_cab_valorFreteTotal := v_cab_valorFreteTotal - a.valorFreteTotal;
        v_cab_valorSeguroTotal := v_cab_valorSeguroTotal - a.valorSeguroTotal;
        v_cab_valorDescontoTotal := v_cab_valorDescontoTotal - a.valorDescontoTotal;
        v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal - a.valorOutrasDespesasTotal;
        v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal - a.valorAdicFreteMarinhaMerTotal;
        v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal - a.valorDespesasAduaneirasTotal;
        v_cab_valorLiquidoItem := v_cab_valorLiquidoItem - a.valorLiquidoItem;
      END IF;
    END LOOP;
  END IF;
  ADD_CALCULA_TOTAIS_ITEM (
    v_cab_tipoPagamentoFrete,
    p_item_quantidade,
    p_item_quantidadeConvertida,
    p_item_precoUnitarioBruto,
    p_item_acrescimoUnitarioCompos,
    v_item_precoUnitario,
    p_item_valorDescontoItem,
    p_item_valorAcrescimoItem,
    p_item_valorFreteItem,
    p_item_valorSeguroItem,
    p_item_valorAdicFreteMarItem,
    p_item_valorDespesasAduanItem,
    v_item_valorFreteGeral,
    p_item_valorSeguroGeral,
    v_item_valorDescontoGeral,
    p_item_valorOutrasDespesasGer,
    p_item_valorAdicFreteMarGeral,
    p_item_valorDespesasAduanGeral,
    v_item_valorDescontoPagamento,
    v_item_valorOutrasDespPagament,
    v_item_valorJurosPagamento,
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit,
    v_prod_composicaoPreco,
    v_item_precoUnitario,
    v_item_precoUnitarioConvertido,
    v_item_valorProdutoServico,
    v_item_valorFreteTotal,
    v_item_valorSeguroTotal,
    v_item_valorDescontoTotal,
    v_item_valorOutrasDespesasTot,
    v_item_valorAdicFreteMarTotal,
    v_item_valorDespesasAduanTotal);
  IF v_inserindoItem = 1
    AND v_prod_controleEstoque = 3
  THEN
    FOR a IN (
      SELECT
        kit.gradeProdutoFilho,
        ROUND (p_item_quantidade * kit.quantidade, unMed.casasDecimaisUnidadeMedida) quantidade,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        prod.unidadeMedida,
        prod.controleQuantidadeVenda,
        prod.unidadeMedidaVenda,
        prod.conversorQuantidadeVenda,
        prod.loteMinimoVenda,
        prod.loteMultiploVenda,
        prod.pesoLiquido,
        prod.pesoBruto,
        prod.altura,
        prod.largura,
        prod.comprimento,
        prod.tipoProduto,
        prod.origemMercadoria,
        prod.idNcm,
        prod.listaServicos,
        unMed.casasDecimaisUnidadeMedida,
        locEst.indicadorPropriedadePosseItem
      FROM CAGRADEPRODUTOXKITSCOMBOS kit
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = kit.gradeProdutoFilho
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      JOIN SIUNIDADESMEDIDA unMed
      ON unMed.unidadeMedida = prod.unidadeMedida
      JOIN PALOCAISESTOQUE locEst
      ON locEst.localEstoque = p_item_localEstoque
      WHERE kit.gradeProduto = p_item_gradeProduto
      AND kit.ativo = 1
      AND kit.gradeProduto <> kit.gradeProdutoFilho
      AND kit.quantidade > 0
      AND ROUND (p_item_quantidade * kit.quantidade, unMed.casasDecimaisUnidadeMedida) > 0)
    LOOP
      v_combo_operacaoFiscal := FUNC_ADD_BUSCA_OPERACAO_FISCAL (
        p_item_modeloDocumento,
        v_cab_entradaSaida,
        v_cab_pessoa,
        0, -- v_cab_vendaConsumidor,
        v_cab_indicadorConsumidorFinal,
        v_est_grupoFiscal,
        v_pessEst_regimeTributario,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_munEndPess_uf,
        a.produto);
      IF v_cab_entradaSaida = 'E'
      THEN
        ADD_ITEM_PROD_REGRA_FORN_BUSCA (
          v_cab_pessoa,
          a.produto,
          a.unidadeMedida,
          a.casasDecimaisUnidadeMedida,
          /* Retornos */
          v_auxNumber,
          v_combo_controleQuantidade,
          v_combo_unidadeMedidaConversao,
          v_combo_conversorQuantidade,
          v_combo_loteMinimo,
          v_combo_loteMultiplo);
        IF v_auxNumber = 0
          AND v_cab_pessoa <> 0
        THEN
          ADD_ITEM_PROD_REGRA_FORN_BUSCA (
            0,
            a.produto,
            a.unidadeMedida,
            a.casasDecimaisUnidadeMedida,
            /* Retornos */
            v_auxNumber,
            v_combo_controleQuantidade,
            v_combo_unidadeMedidaConversao,
            v_combo_conversorQuantidade,
            v_combo_loteMinimo,
            v_combo_loteMultiplo);
        END IF;
        IF v_auxNumber = 0 THEN
          v_combo_controleQuantidade      := 1;
          v_combo_unidadeMedidaConversao  := a.unidadeMedida;
          v_combo_conversorQuantidade     := 1;
          v_combo_loteMinimo              := 0;
          v_combo_loteMultiplo            := 0;
        END IF;
      ELSE
        v_combo_controleQuantidade      := CASE WHEN a.controleQuantidadeVenda < 1 THEN 1 ELSE a.controleQuantidadeVenda END;
        v_combo_unidadeMedidaConversao  :=
          CASE
            WHEN a.controleQuantidadeVenda IN (2,3) 
            THEN 'PC'
            WHEN a.controleQuantidadeVenda IN (4,5) AND a.unidadeMedidaVenda <> ' '
            THEN a.unidadeMedidaVenda
            ELSE a.unidadeMedida
          END;
        v_combo_conversorQuantidade := CASE WHEN a.controleQuantidadeVenda IN (4,5) AND a.conversorQuantidadeVenda <> 0 THEN a.conversorQuantidadeVenda ELSE 0 END;
        v_combo_loteMinimo          := ROUND (a.loteMinimoVenda, a.casasDecimaisUnidadeMedida);
        v_combo_loteMultiplo        := ROUND (a.loteMultiploVenda, a.casasDecimaisUnidadeMedida);
      END IF;
      IF v_combo_controleQuantidade = 2 THEN
        v_combo_altura               := a.altura;
        v_combo_largura              := a.largura;
        v_combo_comprimento          := 0;
        v_combo_pecas                := CASE WHEN v_combo_altura = 0 OR v_combo_largura = 0 THEN 0 ELSE ROUND ((a.quantidade / ((v_combo_altura / 100) * (v_combo_largura / 100))), 6) END;
        v_combo_quantidadeConvertida := v_combo_pecas;
        v_combo_conversorQuantidade  := CASE WHEN v_combo_quantidadeConvertida = 0 THEN 0 ELSE ROUND (a.quantidade / v_combo_quantidadeConvertida, 6) END;
      ELSIF v_combo_controleQuantidade = 3 THEN
        v_combo_altura               := a.altura;
        v_combo_largura              := a.largura;
        v_combo_comprimento          := a.comprimento;
        v_combo_pecas                := CASE WHEN v_combo_altura = 0 OR v_combo_comprimento = 0 OR v_combo_comprimento = 0 THEN 0 ELSE ROUND (a.quantidade / ((v_combo_altura / 100) * (v_combo_largura / 100) * v_combo_comprimento), 6) END;
        v_combo_quantidadeConvertida := v_combo_pecas;
        v_combo_conversorQuantidade  := CASE WHEN v_combo_quantidadeConvertida = 0 THEN 0 ELSE ROUND (a.quantidade / v_combo_quantidadeConvertida, 6) END;
      ELSIF v_combo_controleQuantidade = 4 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := CASE WHEN v_combo_conversorQuantidade = 0 THEN 0 ELSE ROUND (a.quantidade / v_combo_conversorQuantidade, 6) END;
        v_combo_quantidadeConvertida := v_combo_pecas;
      ELSIF v_combo_controleQuantidade = 5 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := ROUND (a.quantidade * v_combo_conversorQuantidade, 6);
        v_combo_quantidadeConvertida := v_combo_pecas;
      ELSE
        v_combo_conversorQuantidade  := 1;
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := 0;
        v_combo_quantidadeConvertida := a.quantidade;
      END IF;
      v_combo_pesoLiquido := ROUND ((a.quantidade * a.pesoLiquido), 3);
      v_combo_pesoBruto   := ROUND ((a.quantidade * a.pesoBruto), 3);
      ADD_BUSCA_PRECO (
        p_config_64_casasDecSaidas,
        p_config_65_casasDecEntrada,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        v_cab_entradaSaida,
        0, -- v_cab_devolucaoAnulacaoRetorno
        v_cab_estabelecimento,
        NULL, -- p_cab_dataPrecoInicial
        TRUNC(SYSDATE), -- p_cab_dataPrecoFinal
        v_cab_pessoa,
        v_cab_projeto,
        v_modDoc_capituloNatFiscal,
        v_modDoc_tipoPreco,
        v_modDoc_tabelaPreco,
        v_modDoc_fatorMultipPreco,
        v_modDoc_tipoPrecoB,
        v_modDoc_tabelaPrecoB,
        v_modDoc_fatorMultipPrecoB,
        v_munEndEst_uf,
        v_munEndPess_uf,
        p_item_vendedor,
        0, -- p_item_idFormulaTinta
        0, -- p_item_personalizacao
        p_item_localEstoque,
        p_item_pessoaParticipante,
        a.quantidade,
        a.produto,
        a.cor,
        a.tamanho,
        a.controleEstoque,
        a.indicadorPropriedadePosseItem,
        0, -- p_manterPreco
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_precoDesconto,
        v_combo_precoMinimo,
        v_auxNumber, -- r_informarPrecoManualmente
        v_auxNumber, -- r_precoAPrazo
        v_auxNumber, -- r_precoAVista
        v_auxNumber, -- r_promocao
        v_auxNumber, -- r_precoPromocaoAPrazo
        v_auxNumber, -- r_precoPromocaoAVista
        v_auxNumber, -- r_precoIndexadoAPrazo
        v_auxNumber); -- r_precoIndexadoAVista
      v_combo_precoUnitario := CASE WHEN p_item_usarPrecoAVista = 1 THEN v_combo_precoSugestaoAVista ELSE v_combo_precoSugestaoAPrazo END;
      ADD_ORCAMENTO_ITEM_GRAVA (
        ' ', -- p_sessaoClient
        p_usuarioLogado,
        p_perfilUsuarioLogado,
        p_estabelecimentoAtivo,
        p_person_190_modeloFrete,
        p_config_64_casasDecSaidas,
        p_config_65_casasDecEntrada,
        p_config_198_obs_add_referenc,
        p_config_199_obs_add_caractA,
        p_config_200_obs_add_caractB,
        p_config_201_obs_add_caractC,
        p_config_202_obs_add_caractD,
        p_config_203_obs_add_caractE,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_config_378_calcularVolumes,
        p_config_413_obs_add_marca,
        p_config_418_obs_efetarEnter,
        p_manterFinanceiro_Retotalizar,
        'S', -- p_buscarAliquotas_CalcularImp  IN CHAR, -- N = Não, S = Sim, T = Troca Produto / Operação Fiscal, I = Calcular Impostos
        p_buscarGeraFinanceiroEstoque,
        p_tipoDocumentoReferenciado, 
        p_idItemReferenciado,
        CASE
          WHEN p_quantidadeReferenciada = 0
          OR p_item_quantidade = 0
          THEN 0
          ELSE ROUND (a.quantidade * p_quantidadeReferenciada / p_item_quantidade, 7)
        END, -- p_quantidadeReferenciada
        ' ', -- p_tempComp_nomeTempComposicao,
        0, -- p_tempComp_sequencia
        r_mensagemAviso,
        r_calcularImpostos,
        0, -- p_item_idItemOrcamento
        p_item_orcamento,
        p_item_pedidoCompraFornecedor,
        p_item_sequenciaPedidoCompraFo,
        p_item_ambiente,
        p_item_ambienteObservacoes,
        999, -- p_item_vinculoItemDocumento
        0, -- p_item_atividadeServico
        'A', -- p_item_statusAtividadeServico
        p_item_controleEntrega,
        p_item_dataEntrega,
        p_item_modeloDocumento,
        p_item_estabelecimentoOriginal,
        p_item_vendedor,
        a.gradeProdutoFilho,
        0, -- p_item_idFormulaTinta
        0, -- p_item_personalizacao
        0, -- p_item_idLoteEstoque
        0, -- p_item_idEnderecoEstoque
        0, -- p_item_idNumeroSerie
        p_item_atividadeProjeto,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        v_combo_controleQuantidade,
        v_combo_unidadeMedidaConversao,
        v_combo_conversorQuantidade,
        v_combo_loteMinimo,
        v_combo_loteMultiplo,
        v_combo_altura,
        v_combo_largura,
        v_combo_comprimento,
        v_combo_pecas,
        a.quantidade,
        v_combo_quantidadeConvertida,
        v_combo_pesoLiquido,
        v_combo_pesoBruto,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_precoDesconto,
        v_combo_precoMinimo,
        p_item_usarPrecoAVista,
        v_combo_precoUnitario, -- p_item_precoUnitarioBruto
        0, -- p_item_acrescimoUnitarioCompos
        v_combo_precoUnitario,
        p_item_percDescontoItem,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoItem
        p_item_percAcrescimoItem,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorFreteItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorFreteItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorSeguroItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorSeguroItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAdicFreteMarItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAdicFreteMarItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDespesasAduanItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDespesasAduanItem
        p_item_observacoesDigitadas,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(v_item_valorFreteGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- v_item_valorFreteGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorSeguroGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorSeguroGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorOutrasDespesasGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorOutrasDespesasGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAdicFreteMarGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAdicFreteMarGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDespesasAduanGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDespesasAduanGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoPagamento
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoPagamento
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorOutrasDespPagament
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorOutrasDespPagament
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorJurosPagamento
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorJurosPagamento
        v_combo_operacaoFiscal,
        p_item_movimentaEstoque,
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        0, -- p_item_retencaoIRRF
        0, -- p_item_retencaoINSS
        0, -- p_item_retencaoPIS
        0, -- p_item_retencaoCOFINS
        0, -- p_item_retencaoCSLL
        0, -- p_item_retencaoOutros
        0, -- p_item_aliquotaII
        0, -- p_item_aliquotaIOF
        0, -- p_item_codigoEnquadramentoIPI
        0, -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        ' ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        ' ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        '  ', -- p_item_stICMS
        0, -- p_item_modalBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        ' ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicionadoST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        0, -- p_item_aliquotaSTSuportConsFin
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        0, -- p_item_baseISSQN
        0, -- p_item_valorISSQN
        0, -- p_item_baseRetIRRF
        0, -- p_item_valorRetIRRF
        0, -- p_item_baseRetINSS
        0, -- p_item_valorRetINSS
        0, -- p_item_baseRetPIS
        0, -- p_item_valorRetPIS
        0, -- p_item_baseRetCOFINS
        0, -- p_item_valorRetCOFINS
        0, -- p_item_baseRetCSLL
        0, -- p_item_valorRetCSLL
        0, -- p_item_baseRetOutros
        0, -- p_item_valorRetOutros
        0, -- p_item_baseII
        0, -- p_item_valorII
        0, -- p_item_baseIOF
        0, -- p_item_valorIOF
        0, -- p_item_baseIPI
        0, -- p_item_valorIPI
        0, -- p_item_basePIS
        0, -- p_item_valorPIS
        0, -- p_item_basePISST
        0, -- p_item_valorPISST
        0, -- p_item_baseCOFINS
        0, -- p_item_valorCOFINS
        0, -- p_item_baseCOFINSST
        0, -- p_item_valorCOFINSST
        0, -- p_item_baseCreditoSimplesNac
        0, -- p_item_valorCreditoSimplesNac
        0, -- p_item_baseICMS
        0, -- p_item_valorICMSOperacao
        0, -- p_item_valorICMSDiferido
        0, -- p_item_valorICMS
        0, -- p_item_valorICMSDesoneracao
        0, -- p_item_baseICMSST
        0, -- p_item_valorICMSST
        0, -- p_item_baseICMSSTAnteriormente
        0, -- p_item_valorICMSSTAnteriorment
        0, -- p_item_valorICMSProprioSubstit
        0, -- p_item_baseICMSEfetivo
        0, -- p_item_valorICMSEfetivo
        0, -- p_item_baseICMSUFDestinatario
        0, -- p_item_valorICMSUFDestinatario
        0, -- p_item_baseICMSUFRemetente
        0, -- p_item_valorICMSUFRemetente
        0, -- p_item_baseFCP
        0, -- p_item_valorFCP
        0, -- p_item_baseFCPST
        0, -- p_item_valorFCPST
        0, -- p_item_baseFCPSTAnteriormente
        0, -- p_item_valorFCPSTAnteriormente
        0, -- p_item_baseFCPUFDestinatario
        0, -- p_item_valorFCPUFDestinatario
        0, -- p_item_baseEstimadaImpostos
        0, -- p_item_valorEstImpFederais
        0, -- p_item_valorEstImpEstaduais
        0, -- p_item_valorEstImpMunicipais
        ' ', -- p_idAtividadesPrevistasSelec
        p_nivel + 1, -- p_nivel,
        r_buffer_item_idItemOrcamento,
        r_mensagemAviso,
        r_calcularImpostos,
        v_auxNumber, -- idItemOrcamento
        r_buffer_item_idItemOrcamento,
        v_combo_valorTotal);
      r_valorInserido := r_valorInserido + v_combo_valorTotal;
    END LOOP;
    IF p_nivel = 0
    AND r_valorInserido > 0
    AND r_valorInserido <> v_item_valorProdutoServico
      - CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN p_item_valorDescontoItem
          ELSE 0
        END
      + CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN p_item_valorAcrescimoItem
          ELSE 0
        END
    THEN
      ADD_ORCAMENTO_ITEM_COMBO_RESID (
        p_item_orcamento,
        v_item_valorProdutoServico,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        r_buffer_item_idItemOrcamento,
        r_valorInserido);
      r_calcularImpostos := 1;
    END IF;
  ELSE
    IF r_item_idItemOrcamento <= 0 THEN
      r_item_idItemOrcamento := FUNC_ADD_BUSCA_PROXIMO_ID ('MOORCAMENTOXITENS', 'idItemOrcamento', 14, p_estabelecimentoAtivo, NULL);
    END IF;
    IF p_manterFinanceiro_Retotalizar = 0
      AND v_item_cancelado = 0
    THEN
      IF v_inserindoItem = 1
        AND (v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0)
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF (v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorPagamentoBruto <> 0
          OR v_cab_promocaoExiste = 1)
        AND (v_inserindoItem = 1
          OR p_item_gradeProduto <> v_ini_gradeProduto
          OR p_item_quantidade <> v_ini_quantidade
          OR v_item_valorBasePagamento <> v_ini_valorBasePagamento)
      THEN
        ADD_ORCAMENTO_PAG_EXCLUI_TROCA (
          r_calcularImpostos,
          p_item_orcamento,
          v_cab_valorDescontoGeral,
          v_cab_valorOutrasDespesasGeral,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_promocaoExiste,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento,
          r_calcularImpostos,
          v_cab_valorDescontoGeral,
          v_cab_condicaoPagamento,
          v_cab_numeroParcelas,
          v_cab_somaPrazoParcelas,
          v_cab_valorXPrazoParcelas,
          v_cab_prazoMedio,
          v_cab_prazoMedioPonderado,
          v_cab_valorEntradaMinima,
          v_cab_valorAVistaEntrada,
          v_cab_valorPagamentoBruto,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_valorPagamentoLiquido,
          v_cab_valorTroco,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento);
      END IF;
      IF p_item_controleEntrega > 0 THEN
        SELECT habilitaFrete
        INTO v_contrEntr_habilitaFrete
        FROM PACONTROLESENTREGA
        WHERE controleEntrega = p_item_controleEntrega;
      END IF;
      IF
        CASE
          WHEN v_ini_controleEntrega = 0
            OR v_ini_contrEntr_habilitaFrete = 0
          THEN 0
          ELSE v_ini_valorProdutoServicoBruto - v_ini_valorDescontoItem + v_ini_valorAcrescimoItem
        END <>
        CASE
          WHEN p_item_controleEntrega = 0
            OR v_contrEntr_habilitaFrete = 0
          THEN 0
          ELSE v_item_valorProdutoServicoBrut - p_item_valorDescontoItem + p_item_valorAcrescimoItem
        END
      THEN
        ADD_ORCAMENTO_CAB_BUSCA_FRETE (
          p_person_190_modeloFrete,
          0, -- p_buscarESalvarInternamente
          r_calcularImpostos,
          p_item_orcamento,
          v_cab_estabelecimento,
          v_cab_pessoa,
          v_cab_enderecoEntregaPessoa,
          v_cab_modalidadeFrete,
          v_cab_transportadora,
          v_cab_enderecoTransportadora,
          v_ini_cab_valorFreteItem,
          v_cab_valorFreteItem,
          v_ini_cab_valorFreteGeral,
          v_ini_cab_valorFreteGeral,
          v_modDoc_somaFreteSeguroPrUnit,
          r_item_idItemOrcamento,
          p_item_pesoLiquido,
          p_item_pesoBruto,
          v_item_valorProdutoServicoBrut,
          p_item_valorDescontoItem,
          p_item_valorAcrescimoItem,
          p_item_controleEntrega,
          v_item_valorFreteGeral,
          v_contrEntr_habilitaFrete,
          /* Retornos */
          r_mensagemAviso,
          r_calcularImpostos,
          v_cab_modalidadeFrete,
          v_cab_transportadora,
          v_cab_enderecoTransportadora,
          v_valorFreteRegra,
          v_auxNumber);
        IF v_valorFreteRegra <> v_ini_cab_valorFreteGeral THEN
          v_item_valorFreteGeral := v_valorFreteRegra - v_cab_valorFreteGeral;
        END IF;
      ELSIF NOT (p_person_190_modeloFrete IS NULL)
        AND p_person_190_modeloFrete <> ' '
        AND v_modDoc_somaFreteSeguroPrUnit = 0
      THEN
        v_cab_modalidadeFrete := FUNC_ADD_BUSCA_MODALIDADE_FRET (
          p_person_190_modeloFrete,
          v_cab_modalidadeFrete,
          v_ini_cab_valorFreteItem,
          v_cab_valorFreteItem,
          v_ini_cab_valorFreteGeral,
          v_cab_valorFreteGeral,
          v_modDoc_somaFreteSeguroPrUnit);
      END IF;
      ADD_CALCULA_TOTAIS_ITEM (
        v_cab_tipoPagamentoFrete,
        p_item_quantidade,
        p_item_quantidadeConvertida,
        p_item_precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos,
        v_item_precoUnitario,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        p_item_valorFreteItem,
        p_item_valorSeguroItem,
        p_item_valorAdicFreteMarItem,
        p_item_valorDespesasAduanItem,
        v_item_valorFreteGeral,
        p_item_valorSeguroGeral,
        v_item_valorDescontoGeral,
        p_item_valorOutrasDespesasGer,
        p_item_valorAdicFreteMarGeral,
        p_item_valorDespesasAduanGeral,
        v_item_valorDescontoPagamento,
        v_item_valorOutrasDespPagament,
        v_item_valorJurosPagamento,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        v_modDoc_somaFreteSeguroPrUnit,
        v_prod_composicaoPreco,
        v_item_precoUnitario,
        v_item_precoUnitarioConvertido,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal);
    END IF;
    IF p_buscarAliquotas_CalcularImp = 'S'
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal)
    THEN
      ADD_ITEM_OPERACAO_FISCAL_BUSCA (
        p_buscarGeraFinanceiroEstoque,
        v_cab_origemDocumento,
        v_cab_tipoDocumento,
        v_cab_entradaSaida,
        0, -- p_cab_devolucaoAnulacaoRetorno
        v_cab_finalidadeNota,
        v_cab_estabelecimento,
        0, -- p_cab_nfFornecedor
        SYSDATE, -- p_cab_dataEmissao
        v_cab_pessoa,
        0, -- p_cab_vendaConsumidor
        v_cab_enderecoEntregaPessoa,
        v_cab_municipioFatoGerador,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_modDoc_movimentaEstoque,
        v_modDoc_geraFinanceiro,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_endPess_enderecoPessoa,
        v_munEndPess_uf,
        v_munEndEntr_uf,
        p_item_operacaoFiscal,
        v_gradProd_produto,
        v_prod_tipoProduto,
        v_prod_origemMercadoria,
        v_prod_idNcm,
        v_prod_listaServicos,
        p_item_movimentaEstoque,
        0, -- p_movimentaEstoqueFiscal
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        1, -- p_atualizarISSQN
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        1, -- p_atualizarRetIRRF
        0, -- p_item_retencaoIRRF
        1, -- p_atualizarRetINSS
        0, -- p_item_retencaoINSS
        1, -- p_atualizarRetencaoPIS
        0, -- p_item_retencaoPIS
        1, -- p_atualizarRetencaoCOFINS
        0, -- p_item_retencaoCOFINS
        1, -- p_atualizarRetencaoCSLL
        0, -- p_item_retencaoCSLL
        1, -- p_atualizarRetencaoOutros
        0, -- p_item_retencaoOutros
        1, -- p_atualizarII
        0, -- p_item_aliquotaII
        1, -- p_atualizarIOF
        0, -- p_item_aliquotaIOF
        1, -- p_atualizarIPI
        0, -- p_item_codigoEnquadramentoIPI
        '  ', -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        1, -- p_atualizarPIS
        '  ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        1, -- p_atualizarPISST
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        1, -- p_atualizarCOFINS
        '  ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        1, -- p_atualizarCOFINSST
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        1, -- p_atualizarSimplesNacional
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        1, -- p_atualizarICMS
        '  ', -- p_item_stICMS
        ' ', -- p_item_modalidadeBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        '  ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        1, -- p_atualizarICMSST
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        1, -- p_atualizarICMSSTAnteriorEfet
        0, -- p_item_aliquotaSTSuportConsF
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        0, -- p_atualizarICMSEscrituracao
        '  ', -- p_item_stICMSEscrit
        0, -- p_item_reducaoBaseICMSEscrit
        0, -- p_item_aliquotaICMSEscrit
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_atualizarICMSSTEscrituracao
        0, -- p_item_margemValorAdicSTEscrit
        0, -- p_item_reducaoBaseSTEscrit
        0, -- p_item_aliquotaICMSSTEscrit
        0, -- p_item_somarICMSST
        1, -- p_atualizarDIFAL
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        1, -- p_atualizarFCP
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        1, -- p_atualizarImpostosEstimados
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        v_auxNumber, -- r_encontrouRegistro
        v_item_movimentaEstoque,
        v_auxNumber, -- r_movimentaEstoqueFiscal
        v_item_geraFinanceiro,
        v_item_cfop,
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        v_item_retidoISSQN,
        v_item_tributadoForaMunicipio,
        v_item_incentivoFiscal,
        v_item_listaServicos,
        v_item_cnae,
        v_item_idServicoMunicipio,
        v_item_numeroProcessoAdministr,
        v_item_retencaoIRRF,
        v_item_retencaoINSS,
        v_item_retencaoPIS,
        v_item_retencaoCOFINS,
        v_item_retencaoCSLL,
        v_item_retencaoOutros,
        v_item_aliquotaII,
        v_item_aliquotaIOF,
        v_item_codigoEnquadramentoIPI,
        v_item_stIPI,
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        v_item_stPIS,
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        v_item_stCOFINS,
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        v_item_motivoDesoneracaoICMS,
        v_item_idBeneficio,
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin,
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        v_auxVarchar, -- r_item_stICMSEscrit
        v_auxNumber, -- r_item_reducaoBaseICMSEscrit
        v_auxNumber, -- r_item_aliquotaICMSEscrit
        v_auxNumber, -- r_item_diferimentoICMSEscritur
        v_auxNumber, -- r_item_margemValorAdicSTEscrit
        v_auxNumber, -- r_item_reducaoBaseSTEscrit
        v_auxNumber, -- r_item_aliquotaICMSSTEscrit
        v_auxNumber, -- r_item_somarICMSST
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        v_item_aliquotaFCP,
        v_item_aliquotaFCPST,
        v_item_aliquotaFCPSTAnteriorm,
        v_item_aliquotaFCPUFDestinat,
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai);      
    END IF;
    IF p_buscarAliquotas_CalcularImp IN ('I','S')
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_personalizacao <> p_item_personalizacao
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_quantidade <> p_item_quantidade
        OR v_ini_valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
        OR v_ini_valorProdutoServico <> v_item_valorProdutoServico
        OR v_ini_valorDescontoItem <> p_item_valorDescontoItem
        OR v_ini_valorAcrescimoItem <> p_item_valorAcrescimoItem
        OR v_cab_tipoPagamentoFrete <> 'V'
        AND (v_ini_valorFreteTotal <> v_item_valorFreteTotal
          OR v_ini_valorSeguroTotal <> v_item_valorSeguroTotal)
        OR v_ini_valorDescontoTotal <> v_item_valorDescontoTotal
        OR v_ini_valorOutrasDespesasTotal <> v_item_valorOutrasDespesasTot
        OR v_ini_valorAdicFreteMarTotal <> v_item_valorAdicFreteMarTotal
        OR v_ini_valorDespesasAduanTotal <> v_item_valorDespesasAduanTotal)
    THEN
      ADD_CALCULA_IMPOSTOS_ITEM (
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        v_cab_entradaSaida,
        0, -- p_cab_devolucaoAnulacaoRetorno
        v_cab_estabelecimento,
        0, -- p_cab_nfFornecedor
        v_cab_dataEmissao, -- p_cab_dataEntradaSaida
        v_cab_pessoa,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_cab_tipoPagamentoFrete,
        v_pess_indicadorInscricaoEstad,
        p_item_personalizacao,
        p_item_quantidade,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal,
        v_item_cfop,
        1, -- p_calcularISSQN
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        0, -- p_baseISSQN
        0, -- p_valorISSQN
        1, -- p_calcularIRRF
        v_item_retencaoIRRF,
        0, -- p_baseRetIRRF
        0, -- p_valorRetIRRF
        1, -- p_calcularINSS
        v_item_retencaoINSS,
        0, -- p_baseRetINSS
        0, -- p_valorRetINSS
        1, -- p_calcularRetencaoPIS
        v_item_retencaoPIS,
        0, -- p_baseRetPIS
        0, -- p_valorRetPIS
        1, -- p_calcularRetencaoCOFINS
        v_item_retencaoCOFINS,
        0, -- p_baseRetCOFINS
        0, -- p_valorRetCOFINS
        1, -- p_calcularRetencaoCSLL
        v_item_retencaoCSLL,
        0, -- p_baseRetCSLL
        0, -- p_valorRetCSLL
        1, -- p_calcularRetencaoOutros
        v_item_retencaoOutros,
        0, -- p_baseRetOutros
        0, -- p_valorRetOutros
        1, -- p_calcularII
        v_item_aliquotaII,
        0, -- p_baseII
        0, -- p_valorII
        1, -- p_calcularIOF
        v_item_aliquotaIOF,
        0, -- p_baseIOF
        0, -- p_valorIOF
        1, -- p_calcularIPI
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        0, -- p_baseIPI
        0, -- p_valorIPI
        0, -- p_valorIPIDevolucao
        1, -- p_calcularPIS
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        0, -- p_basePIS
        0, -- p_valorPIS
        1, -- p_calcularPISST
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        0, -- p_basePISST
        0, -- p_valorPISST
        1, -- p_calcularCOFINS
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        0, -- p_valorAliquotaCOFINS
        0, -- p_baseCOFINS
        1, -- p_valorCOFINS
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        0, -- p_baseCOFINSST
        0, -- p_valorCOFINSST
        1, -- p_calcularSimplesNacional
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        0, -- p_baseCreditoSimplesNacional
        0, -- p_valorCreditoSimplesNacional
        1, -- p_calcularICMS
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        0, -- p_baseICMS
        0, -- p_valorICMSOperacao
        0, -- p_valorICMSDiferido
        0, -- p_valorICMS
        0, -- p_valorICMSDesoneracao
        1, -- p_calcularICMSST
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        0, -- p_baseICMSST
        0, -- p_valorICMSST
        1, -- p_calcularICMSSTAnterEfetivo
        0, -- p_baseICMSSTAnteriormente
        0, -- p_valorICMSSTAnteriormente
        0, -- p_valorICMSProprioSubstituto
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        0, -- p_baseICMSEfetivo
        0, -- p_valorICMSEfetivo
        0, -- p_calcularICMSEscrituracao
        '  ', -- p_stICMSEscrituracao
        0, -- p_reducaoBaseICMSEscrituracao
        0, -- p_aliquotaICMSEscrituracao
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_baseICMSEscrituracao
        0, -- p_valorICMSEscrituracao
        0, -- p_valorICMSDesonEscrituracao
        0, -- p_calcularICMSSTEscrituracao
        0, -- p_margemValorAdicSTEscriturac
        0, -- p_reducaoBaseSTEscrituracao
        0, -- p_aliquotaICMSSTEscrituracao
        0, -- p_baseICMSSTEscrituracao
        0, -- p_valorICMSSTEscrituracao
        1, -- p_calcularDIFAL
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        0, -- p_baseICMSUFDestinatario
        0, -- p_valorICMSUFDestinatario
        0, -- p_baseICMSUFRemetente
        0, -- p_valorICMSUFRemetente
        1, -- p_calcularFCP
        v_item_aliquotaFCP,
        0, -- p_baseFCP
        0, -- p_valorFCP
        v_item_aliquotaFCPST,
        0, -- p_baseFCPST
        0, -- p_valorFCPST
        v_item_aliquotaFCPSTAnteriorm,
        0, -- p_baseFCPSTAnteriormente
        0, -- p_valorFCPSTAnteriormente
        v_item_aliquotaFCPUFDestinat,
        0, -- p_baseFCPUFDestinatario
        0, -- p_valorFCPUFDestinatario
        1, -- p_calcularImpostosEstimados
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai,
        0, -- p_baseEstimadaImpostos
        0, -- p_valorEstimadoImpFederais
        0, -- p_valorEstimadoImpEstaduais
        0, -- p_valorEstimadoImpMunicipais
        v_gradProd_produto,
        v_gradProd_cor,
        v_gradProd_tamanho,
        v_prod_controleEstoque,
        v_prod_tipoProduto,
        v_prod_precoPautaTabelado,
        v_item_baseISSQN,
        v_item_valorISSQN,
        v_item_baseRetIRRF,
        v_item_valorRetIRRF,
        v_item_baseRetINSS,
        v_item_valorRetINSS,
        v_item_baseRetPIS,
        v_item_valorRetPIS,
        v_item_baseRetCOFINS,
        v_item_valorRetCOFINS,
        v_item_baseRetCSLL,
        v_item_valorRetCSLL,
        v_item_baseRetOutros,
        v_item_valorRetOutros,
        v_item_baseII,
        v_item_valorII,
        v_item_baseIOF,
        v_item_valorIOF,
        v_item_baseIPI,
        v_item_valorIPI,
        v_item_basePIS,
        v_item_valorPIS,
        v_item_basePISST,
        v_item_valorPISST,
        v_item_baseCOFINS,
        v_item_valorCOFINS,
        v_item_baseCOFINSST,
        v_item_valorCOFINSST,
        v_item_baseCreditoSimplesNac,
        v_item_valorCreditoSimplesNac,
        v_item_baseICMS,
        v_item_valorICMSOperacao,
        v_item_valorICMSDiferido,
        v_item_valorICMS,
        v_item_valorICMSDesoneracao,
        v_item_baseICMSST,
        v_item_valorICMSST,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSProprioSubstit,
        v_item_baseICMSEfetivo,
        v_item_valorICMSEfetivo,
        v_auxNumber, -- r_baseICMSEscrituracao
        v_auxNumber, -- r_valorICMSEscrituracao
        v_auxNumber, -- r_valorICMSDesonEscrituracao
        v_auxNumber, -- r_baseICMSSTEscrituracao
        v_auxNumber, -- r_valorICMSSTEscrituracao
        v_item_baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente,
        v_item_valorICMSUFRemetente,
        v_item_baseFCP,
        v_item_valorFCP,
        v_item_baseFCPST,
        v_item_valorFCPST,
        v_item_baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente,
        v_item_baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario,
        v_item_baseEstimadaImpostos,
        v_item_valorEstImpFederais,
        v_item_valorEstImpEstaduais,
        v_item_valorEstImpMunicipais);
    END IF;
    v_item_valorBasePagamento := FUNC_ADD_CALC_BASE_PAGAMENTO (
      v_cab_origemDocumento,
      0, -- p_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_geraFinanceiro,
      v_item_valorProdutoServico,
      v_item_valorDescontoPagamento,
      v_item_valorOutrasDespPagament,
      v_item_valorJurosPagamento,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      0, -- p_item_valorIPIDevolucao
      v_item_retidoISSQN,
      v_item_valorISSQN,
      v_item_valorRetIRRF,
      v_item_valorRetINSS,
      v_item_valorRetPIS,
      v_item_valorRetCOFINS,
      v_item_valorRetCSLL,
      v_item_valorRetOutros,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      0, -- p_item_valorICMSSTEscrit
      0, -- p_item_somarICMSST
      0, -- p_item_valorAcrescExtempTotal
      v_modDoc_geraFinanceiro);
    v_item_valorLiquidoItem := FUNC_ADD_CALC_VALOR_LIQUIDO (
      0, -- p_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_valorProdutoServico,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      0, -- p_item_valorIPIDevolucao
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      0, -- p_item_valorICMSSTEscrit
      0 -- p_item_somarICMSST
      );
    IF v_inserindoItem = 1 THEN
      SELECT COALESCE (MAX (sequencia),0) + 1
      INTO v_item_sequencia
      FROM MOORCAMENTOXITENS
      WHERE orcamento = p_item_orcamento;
      v_cab_ultimoVendedorItem := p_item_vendedor;
    END IF;
    IF v_item_cancelado = 0 THEN
      IF p_manterFinanceiro_Retotalizar <> 2 THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume + TRUNC(CASE WHEN p_item_controleQuantidade = 1 AND p_item_loteMultiplo <> 0 THEN p_item_quantidade / p_item_loteMultiplo ELSE p_item_quantidadeConvertida END,0);
        END IF;
        v_cab_pesoLiquido := v_cab_pesoLiquido + p_item_pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto + p_item_pesoBruto;
      END IF;
      v_cab_quantidade := v_cab_quantidade + p_item_quantidadeConvertida;
      IF v_prod_tipoProduto = '09' THEN
        v_cab_valorServicosBruto := v_cab_valorServicosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorServicos := v_cab_valorServicos + v_item_valorProdutoServico;
        v_cab_valorDescontoServicos := v_cab_valorDescontoServicos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos + p_item_valorAcrescimoItem;
      ELSE 
        v_cab_valorProdutosBruto := v_cab_valorProdutosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorProdutos := v_cab_valorProdutos + v_item_valorProdutoServico;
        v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos + p_item_valorAcrescimoItem;
      END IF;
      v_cab_valorFreteItem := v_cab_valorFreteItem + p_item_valorFreteItem;
      v_cab_valorSeguroItem := v_cab_valorSeguroItem + p_item_valorSeguroItem;
      v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem + p_item_valorAdicFreteMarItem;
      v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem + p_item_valorDespesasAduanItem;
      v_cab_valorFreteGeral := v_cab_valorFreteGeral + v_item_valorFreteGeral;
      v_cab_valorSeguroGeral := v_cab_valorSeguroGeral + p_item_valorSeguroGeral;
      v_cab_valorDescontoGeral := v_cab_valorDescontoGeral + v_item_valorDescontoGeral;
      v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral + p_item_valorOutrasDespesasGer;
      v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral + p_item_valorAdicFreteMarGeral;
      v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral + p_item_valorDespesasAduanGeral;
      v_cab_valorBasePagamento := v_cab_valorBasePagamento + v_item_valorBasePagamento;
      IF p_item_usarPrecoAVista = 1
        AND v_item_geraFinanceiro = 1
      THEN
        v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo + v_item_valorProdutoServico - v_item_valorDescontoTotal + v_item_valorOutrasDespesasTot;
      END IF;
      v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento + v_item_valorDescontoPagamento;
      v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento + v_item_valorOutrasDespPagament;
      v_cab_valorJurosPagamento := v_cab_valorJurosPagamento + v_item_valorJurosPagamento;
      v_cab_valorFreteTotal := v_cab_valorFreteTotal + v_item_valorFreteTotal;
      v_cab_valorSeguroTotal := v_cab_valorSeguroTotal + v_item_valorSeguroTotal;
      v_cab_valorDescontoTotal := v_cab_valorDescontoTotal + v_item_valorDescontoTotal;
      v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal + v_item_valorOutrasDespesasTot;
      v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal + v_item_valorAdicFreteMarTotal;
      v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal + v_item_valorDespesasAduanTotal;
      v_cab_valorLiquidoItem := v_cab_valorLiquidoItem + v_item_valorLiquidoItem;
    ELSE
      v_item_quantidadeSaldo := 0;
    END IF;
    UPDATE MOORCAMENTOS SET
      modalidadeFrete               = v_cab_modalidadeFrete,
      transportadora                = v_cab_transportadora,
      enderecoTransportadora        = v_cab_enderecoTransportadora,
      ultimoVendedorItem            = v_cab_ultimoVendedorItem,
      quantidadeVolume              = v_cab_quantidadeVolume,
      quantidade                    = v_cab_quantidade,
      pesoLiquido                   = v_cab_pesoLiquido,
      pesoBruto                     = v_cab_pesoBruto,
      valorProdutosBruto            = v_cab_valorProdutosBruto,
      valorProdutos                 = v_cab_valorProdutos,
      valorDescontoProdutos         = v_cab_valorDescontoProdutos,
      valorAcrescimoProdutos        = v_cab_valorAcrescimoProdutos,
      valorServicosBruto            = v_cab_valorServicosBruto,
      valorServicos                 = v_cab_valorServicos,
      valorDescontoServicos         = v_cab_valorDescontoServicos,
      valorAcrescimoServicos        = v_cab_valorAcrescimoServicos,
      valorFreteItem                = v_cab_valorFreteItem,
      valorSeguroItem               = v_cab_valorSeguroItem,
      valorAdicFreteMarinhaMerItem  = v_cab_valorAdicFreteMarItem,
      valorDespesasAduaneirasItem   = v_cab_valorDespesasAduanItem,
      valorFreteGeral               = v_cab_valorFreteGeral,
      valorSeguroGeral              = v_cab_valorSeguroGeral,
      valorDescontoGeral            = v_cab_valorDescontoGeral,
      valorOutrasDespesasGeral      = v_cab_valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral = v_cab_valorAdicFreteMarGeral,
      valorDespesasAduaneirasGeral  = v_cab_valorDespesasAduanGeral,
      condicaoPagamento             = v_cab_condicaoPagamento,
      numeroParcelas                = v_cab_numeroParcelas,
      somaPrazoParcelas             = v_cab_somaPrazoParcelas,
      valorXPrazoParcelas           = v_cab_valorXPrazoParcelas,
      prazoMedio                    = v_cab_prazoMedio,
      prazoMedioPonderado           = v_cab_prazoMedioPonderado,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorEntradaMinima            = v_cab_valorEntradaMinima,
      valorAVistaEntrada            = v_cab_valorAVistaEntrada,
      valorPagamentoBruto           = v_cab_valorPagamentoBruto,
      valorDescontoPagamento        = v_cab_valorDescontoPagamento,
      valorOutrasDespesasPagamento  = v_cab_valorOutrasDespPagamento,
      valorJurosPagamento           = v_cab_valorJurosPagamento,
      valorPagamentoLiquido         = v_cab_valorPagamentoLiquido,
      valorTroco                    = v_cab_valorTroco,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorLiquidoItem              = v_cab_valorLiquidoItem
    WHERE orcamento = p_item_orcamento;
    IF p_item_idItemOrcamento > 0 THEN
      DELETE MOORCAMENTOXCOMPOSICOESPR compDoc
      WHERE compDoc.idItemOrcamento = p_item_idItemOrcamento
      AND EXISTS(
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.produto = comp.produto
        WHERE comp.composicaoPreco = compDoc.composicaoPreco
        AND gradProd.gradeProduto <> p_item_gradeProduto);
    END IF;
    v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
      p_sessaoClient,
      p_config_198_obs_add_referenc,
      p_config_199_obs_add_caractA,
      p_config_200_obs_add_caractB,
      p_config_201_obs_add_caractC,
      p_config_202_obs_add_caractD,
      p_config_203_obs_add_caractE,
      p_config_413_obs_add_marca,
      p_config_418_obs_efetarEnter,
      ' ',
      0,
      'O',
      p_item_idItemOrcamento,
      p_item_gradeProduto,
      p_item_idFormulaTinta,
      p_item_personalizacao,
      p_item_idLoteEstoque,
      p_item_controleQuantidade,
      p_item_loteMultiplo,
      p_item_altura,
      p_item_largura,
      p_item_comprimento,
      p_item_quantidade,
      p_item_observacoesDigitadas);
    MERGE INTO MOORCAMENTOXITENS a USING (
      SELECT
        r_item_idItemOrcamento         idItemOrcamento,
        p_item_orcamento               orcamento,
        v_item_sequencia               sequencia,
        v_item_cancelado               cancelado,
        p_item_pedidoCompraFornecedor  pedidoCompraFornecedor,
        p_item_sequenciaPedidoCompraFo sequenciaPedidoCompraFornec,
        p_item_ambiente                ambiente,
        p_item_ambienteObservacoes     ambienteObservacoes,
        p_item_modeloDocumento         modeloDocumento,
        p_item_estabelecimentoOriginal estabelecimentoOriginal,
        p_item_vendedor                vendedor,
        p_item_gradeProduto            gradeProduto,
        p_item_atividadeServico        atividadeServico,
        p_item_statusAtividadeServico  statusAtividadeServico,
        p_item_idFormulaTinta          idFormulaTinta,
        p_item_personalizacao          personalizacao,
        p_item_idLoteEstoque           idLoteEstoque,
        p_item_vinculoItemDocumento    vinculoItemDocumento,
        p_item_operacaoFiscal          operacaoFiscal,
        v_item_movimentaEstoque        movimentaEstoque,
        v_item_geraFinanceiro          geraFinanceiro,
        p_item_localEstoque            localEstoque,
        p_item_pessoaParticipante      pessoaParticipante,
        p_item_dataEntrega             dataEntrega,
        p_item_controleQuantidade      controleQuantidade,
        p_item_unidadeMedidaConversao  unidadeMedidaConversao,
        p_item_conversorQuantidade     conversorQuantidade,
        p_item_loteMinimo              loteMinimo,
        p_item_loteMultiplo            loteMultiplo,
        p_item_altura                  altura,
        p_item_largura                 largura,
        p_item_comprimento             comprimento,
        p_item_pecas                   pecas,
        p_item_quantidade              quantidade,
        p_item_quantidadeConvertida    quantidadeConvertida,
        v_item_quantidadeSaldo         quantidadeSaldo,
        p_item_controleEntrega         controleEntrega,
        p_item_pesoLiquido             pesoLiquido,
        p_item_pesoBruto               pesoBruto,
        p_item_tipoPreco               tipoPreco,
        p_item_tabelaPreco             tabelaPreco,
        p_item_precoSugestaoAPrazo     precoSugestaoAPrazo,
        p_item_precoSugestaoAVista     precoSugestaoAVista,
        p_item_precoDesconto           precoDesconto,
        p_item_precoMinimo             precoMinimo,
        p_item_usarPrecoAVista         usarPrecoAVista,
        p_item_precoUnitarioBruto      precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos acrescimoUnitarioComposicao,
        v_item_precoUnitario           precoUnitario,
        v_item_precoUnitarioConvertido precoUnitarioConvertido,
        v_item_valorProdutoServicoBrut valorProdutoServicoBruto,
        v_item_valorProdutoServico     valorProdutoServico,
        p_item_percDescontoItem        percDescontoItem,
        p_item_valorDescontoItem       valorDescontoItem,
        p_item_percAcrescimoItem       percAcrescimoItem,
        p_item_valorAcrescimoItem      valorAcrescimoItem,
        p_item_valorFreteItem          valorFreteItem,
        p_item_valorSeguroItem         valorSeguroItem,
        p_item_valorAdicFreteMarItem   valorAdicFreteMarinhaMerItem,
        p_item_valorDespesasAduanItem  valorDespesasAduaneirasItem,
        v_item_valorFreteGeral         valorFreteGeral,
        p_item_valorSeguroGeral        valorSeguroGeral,
        v_item_valorDescontoGeral      valorDescontoGeral,
        p_item_valorOutrasDespesasGer  valorOutrasDespesasGeral,
        p_item_valorAdicFreteMarGeral  valorAdicFreteMarinhaMerGeral,
        p_item_valorDespesasAduanGeral valorDespesasAduaneirasGeral,
        v_item_valorBasePagamento      valorBasePagamento,
        v_item_valorDescontoPagamento  valorDescontoPagamento,
        v_item_valorOutrasDespPagament valorOutrasDespesasPagamento,
        v_item_valorJurosPagamento     valorJurosPagamento,
        v_item_valorFreteTotal         valorFreteTotal,
        v_item_valorSeguroTotal        valorSeguroTotal,
        v_item_valorDescontoTotal      valorDescontoTotal,
        v_item_valorOutrasDespesasTot  valorOutrasDespesasTotal,
        v_item_valorAdicFreteMarTotal  valorAdicFreteMarinhaMerTotal,
        v_item_valorDespesasAduanTotal valorDespesasAduaneirasTotal,
        v_item_cfop                    cfop,
        v_item_indicadorISSQN          indicadorISSQN,
        v_item_aliquotaISSQN           aliquotaISSQN,
        v_item_retidoISSQN             retidoISSQN,
        v_item_tributadoForaMunicipio  tributadoForaMunicipio,
        v_item_incentivoFiscal         incentivoFiscal,
        v_item_listaServicos           listaServicos,
        v_item_cnae                    cnae,
        v_item_idServicoMunicipio      idServicoMunicipio,
        v_item_numeroProcessoAdministr numeroProcessoAdministrativo,
        v_item_baseISSQN               baseISSQN,
        v_item_valorISSQN              valorISSQN,
        v_item_retencaoIRRF            retencaoIRRF,
        v_item_baseRetIRRF             baseRetIRRF,
        v_item_valorRetIRRF            valorRetIRRF,
        v_item_retencaoINSS            retencaoINSS,
        v_item_baseRetINSS             baseRetINSS,
        v_item_valorRetINSS            valorRetINSS,
        v_item_retencaoPIS             retencaoPIS,
        v_item_baseRetPIS              baseRetPIS,
        v_item_valorRetPIS             valorRetPIS,
        v_item_retencaoCOFINS          retencaoCOFINS,
        v_item_baseRetCOFINS           baseRetCOFINS,
        v_item_valorRetCOFINS          valorRetCOFINS,
        v_item_retencaoCSLL            retencaoCSLL,
        v_item_baseRetCSLL             baseRetCSLL,
        v_item_valorRetCSLL            valorRetCSLL,
        v_item_retencaoOutros          retencaoOutros,
        v_item_baseRetOutros           baseRetOutros,
        v_item_valorRetOutros          valorRetOutros,
        v_item_aliquotaII              aliquotaII,
        v_item_baseII                  baseII,
        v_item_valorII                 valorII,
        v_item_aliquotaIOF             aliquotaIOF,
        v_item_baseIOF                 baseIOF,
        v_item_valorIOF                valorIOF,
        v_item_codigoEnquadramentoIPI  codigoEnquadramentoIPI,
        v_item_stIPI                   stIPI,
        v_item_aliquotaIPI             aliquotaIPI,
        v_item_valorAliquotaIPI        valorAliquotaIPI,
        v_item_baseIPI                 baseIPI,
        v_item_valorIPI                valorIPI,
        v_item_stPIS                   stPIS,
        v_item_aliquotaPIS             aliquotaPIS,
        v_item_valorAliquotaPIS        valorAliquotaPIS,
        v_item_basePIS                 basePIS,
        v_item_valorPIS                valorPIS,
        v_item_aliquotaPISST           aliquotaPISST,
        v_item_valorAliquotaPISST      valorAliquotaPISST,
        v_item_basePISST               basePISST,
        v_item_valorPISST              valorPISST,
        v_item_stCOFINS                stCOFINS,
        v_item_aliquotaCOFINS          aliquotaCOFINS,
        v_item_valorAliquotaCOFINS     valorAliquotaCOFINS,
        v_item_baseCOFINS              baseCOFINS,
        v_item_valorCOFINS             valorCOFINS,
        v_item_aliquotaCOFINSST        aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST   valorAliquotaCOFINSST,
        v_item_baseCOFINSST            baseCOFINSST,
        v_item_valorCOFINSST           valorCOFINSST,
        v_item_stSimplesNacional       stSimplesNacional,
        v_item_creditoSimplesNacional  creditoSimplesNacional,
        v_item_baseCreditoSimplesNac   baseCreditoSimplesNacional,
        v_item_valorCreditoSimplesNac  valorCreditoSimplesNacional,
        v_item_stICMS                  stICMS,
        v_item_modalBaseCalcICMS       modalidadeBaseCalcICMS,
        v_item_reducaoBaseICMS         reducaoBaseICMS,
        v_item_aliquotaICMS            aliquotaICMS,
        v_item_diferimentoICMS         diferimentoICMS,
        v_item_motivoDesoneracaoICMS   motivoDesoneracaoICMS,
        v_item_idBeneficio             idBeneficio,
        v_item_baseICMS                baseICMS,
        v_item_valorICMSOperacao       valorICMSOperacao,
        v_item_valorICMSDiferido       valorICMSDiferido,
        v_item_valorICMS               valorICMS,
        v_item_valorICMSDesoneracao    valorICMSDesoneracao,
        v_item_modalBaseCalcICMSST     modalidadeBaseCalcICMSST,
        v_item_margemValorAdicionadoST margemValorAdicionadoST,
        v_item_reducaoBaseST           reducaoBaseST,
        v_item_aliquotaICMSST          aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin aliquotaSTSuportConsFinal,
        v_item_baseICMSST              baseICMSST,
        v_item_valorICMSST             valorICMSST,
        v_item_baseICMSSTAnteriormente baseICMSSTAnteriormente,
        v_item_valorICMSSTAnteriorment valorICMSSTAnteriormente,
        v_item_valorICMSProprioSubstit valorICMSProprioSubstituto,
        v_item_reducaoBaseICMSEfetivo  reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo     aliquotaICMSEfetivo,
        v_item_baseICMSEfetivo         baseICMSEfetivo,
        v_item_valorICMSEfetivo        valorICMSEfetivo,
        v_item_aliquotaICMSUFDestinat  aliquotaICMSUFDestinatario,
        v_item_aliquotaICMSInterestad  aliquotaICMSInterestadual,
        v_item_partilhaICMSInterestad  partilhaICMSInterestadual,
        v_item_baseICMSUFDestinatario  baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente     baseICMSUFRemetente,
        v_item_valorICMSUFRemetente    valorICMSUFRemetente,
        v_item_aliquotaFCP             aliquotaFCP,
        v_item_baseFCP                 baseFCP,
        v_item_valorFCP                valorFCP,
        v_item_aliquotaFCPST           aliquotaFCPST,
        v_item_baseFCPST               baseFCPST,
        v_item_valorFCPST              valorFCPST,
        v_item_aliquotaFCPSTAnteriorm  aliquotaFCPSTAnteriormente,
        v_item_baseFCPSTAnteriormente  baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente valorFCPSTAnteriormente,
        v_item_aliquotaFCPUFDestinat   aliquotaFCPUFDestinatario,
        v_item_baseFCPUFDestinatario   baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario  valorFCPUFDestinatario,
        v_item_aliquotaEstImpFederais  aliquotaEstimadaImpFederais,
        v_item_aliquotaEstImpEstaduais aliquotaEstimadaImpEstaduais,
        v_item_aliquotaEstImpMunicipai aliquotaEstimadaImpMunicipais,
        v_item_baseEstimadaImpostos    baseEstimadaImpostos,
        v_item_valorEstImpFederais     valorEstimadoImpFederais,
        v_item_valorEstImpEstaduais    valorEstimadoImpEstaduais,
        v_item_valorEstImpMunicipais   valorEstimadoImpMunicipais,
        v_item_valorLiquidoItem        valorLiquidoItem,
        p_item_observacoesDigitadas    observacoesDigitadas,
        v_observacoes                  observacoes
      FROM DUAL) b
    ON (a.idItemOrcamento = b.idItemOrcamento)
    WHEN MATCHED THEN UPDATE SET
      a.orcamento                     = b.orcamento,
      a.sequencia                     = b.sequencia,
      a.cancelado                     = b.cancelado,
      a.pedidoCompraFornecedor        = b.pedidoCompraFornecedor,
      a.sequenciaPedidoCompraFornec   = b.sequenciaPedidoCompraFornec,
      a.ambiente                      = b.ambiente,
      a.ambienteObservacoes           = b.ambienteObservacoes,
      a.vendedor                      = b.vendedor,
      a.modeloDocumento               = b.modeloDocumento,
      a.estabelecimentoOriginal       = b.estabelecimentoOriginal,
      a.gradeProduto                  = b.gradeProduto,
      a.atividadeServico              = b.atividadeServico,
      a.statusAtividadeServico        = b.statusAtividadeServico,
      a.idFormulaTinta                = b.idFormulaTinta,
      a.personalizacao                = b.personalizacao,
      a.idLoteEstoque                 = b.idLoteEstoque,
      a.vinculoItemDocumento          = b.vinculoItemDocumento,
      a.operacaoFiscal                = b.operacaoFiscal,
      a.movimentaEstoque              = b.movimentaEstoque,
      a.geraFinanceiro                = b.geraFinanceiro,
      a.localEstoque                  = b.localEstoque,
      a.pessoaParticipante            = b.pessoaParticipante,
      a.dataEntrega                   = b.dataEntrega,
      a.controleQuantidade            = b.controleQuantidade,
      a.unidadeMedidaConversao        = b.unidadeMedidaConversao,
      a.conversorQuantidade           = b.conversorQuantidade,
      a.loteMinimo                    = b.loteMinimo,
      a.loteMultiplo                  = b.loteMultiplo,
      a.altura                        = b.altura,
      a.largura                       = b.largura,
      a.comprimento                   = b.comprimento,
      a.pecas                         = b.pecas,
      a.quantidade                    = b.quantidade,
      a.quantidadeConvertida          = b.quantidadeConvertida,
      a.quantidadeSaldo               = b.quantidadeSaldo,
      a.controleEntrega               = b.controleEntrega,
      a.pesoLiquido                   = b.pesoLiquido,
      a.pesoBruto                     = b.pesoBruto,
      a.tipoPreco                     = b.tipoPreco,
      a.tabelaPreco                   = b.tabelaPreco,
      a.precoSugestaoAPrazo           = b.precoSugestaoAPrazo,
      a.precoSugestaoAVista           = b.precoSugestaoAVista,
      a.precoDesconto                 = b.precoDesconto,
      a.precoMinimo                   = b.precoMinimo,
      a.usarPrecoAVista               = b.usarPrecoAVista,
      a.precoUnitarioBruto            = b.precoUnitarioBruto,
      a.acrescimoUnitarioComposicao   = b.acrescimoUnitarioComposicao,
      a.precoUnitario                 = b.precoUnitario,
      a.precoUnitarioConvertido       = b.precounitarioConvertido,
      a.valorProdutoServicoBruto      = b.valorProdutoServicoBruto,
      a.valorProdutoServico           = b.valorProdutoServico,
      a.percDescontoItem              = b.percDescontoItem,
      a.valorDescontoItem             = b.valorDescontoItem,
      a.percAcrescimoItem             = b.percAcrescimoItem,
      a.valorAcrescimoItem            = b.valorAcrescimoItem,
      a.valorFreteItem                = b.valorFreteItem,
      a.valorSeguroItem               = b.valorSeguroItem,
      a.valorAdicFreteMarinhaMerItem  = b.valorAdicFreteMarinhaMerItem,
      a.valorDespesasAduaneirasItem   = b.valorDespesasAduaneirasItem,
      a.valorFreteGeral               = b.valorFreteGeral,
      a.valorSeguroGeral              = b.valorSeguroGeral,
      a.valorDescontoGeral            = b.valorDescontoGeral,
      a.valorOutrasDespesasGeral      = b.valorOutrasDespesasGeral,
      a.valorAdicFreteMarinhaMerGeral = b.valorAdicFreteMarinhaMerGeral,
      a.valorDespesasAduaneirasGeral  = b.valorDespesasAduaneirasGeral,
      a.valorBasePagamento            = b.valorBasePagamento,
      a.valorDescontoPagamento        = b.valorDescontoPagamento,
      a.valorOutrasDespesasPagamento  = b.valorOutrasDespesasPagamento,
      a.valorJurosPagamento           = b.valorJurosPagamento,
      a.valorFreteTotal               = b.valorFreteTotal,
      a.valorSeguroTotal              = b.valorSeguroTotal,
      a.valorDescontoTotal            = b.valorDescontoTotal,
      a.valorOutrasDespesasTotal      = b.valorOutrasDespesasTotal,
      a.valorAdicFreteMarinhaMerTotal = b.valorAdicFreteMarinhaMerTotal,
      a.valorDespesasAduaneirasTotal  = b.valorDespesasAduaneirasTotal,
      a.cfop                          = b.cfop,
      a.indicadorISSQN                = b.indicadorISSQN,
      a.aliquotaISSQN                 = b.aliquotaISSQN,
      a.baseISSQN                     = b.baseISSQN,
      a.valorISSQN                    = b.valorISSQN,
      a.retidoISSQN                   = b.retidoISSQN,
      a.tributadoForaMunicipio        = b.tributadoForaMunicipio,
      a.incentivoFiscal               = b.incentivoFiscal,
      a.listaServicos                 = b.listaServicos,
      a.cnae                          = b.cnae,
      a.idServicoMunicipio            = b.idServicoMunicipio,
      a.numeroProcessoAdministrativo  = b.numeroProcessoAdministrativo,
      a.retencaoIRRF                  = b.retencaoIRRF,
      a.baseRetIRRF                   = b.baseRetIRRF,
      a.valorRetIRRF                  = b.valorRetIRRF,
      a.retencaoINSS                  = b.retencaoINSS,
      a.baseRetINSS                   = b.baseRetINSS,
      a.valorRetINSS                  = b.valorRetINSS,
      a.retencaoPIS                   = b.retencaoPIS,
      a.baseRetPIS                    = b.baseRetPIS,
      a.valorRetPIS                   = b.valorRetPIS,
      a.retencaoCOFINS                = b.retencaoCOFINS,
      a.baseRetCOFINS                 = b.baseRetCOFINS,
      a.valorRetCOFINS                = b.valorRetCOFINS,
      a.retencaoCSLL                  = b.retencaoCSLL,
      a.baseRetCSLL                   = b.baseRetCSLL,
      a.valorRetCSLL                  = b.valorRetCSLL,
      a.retencaoOutros                = b.retencaoOutros,
      a.baseRetOutros                 = b.baseRetOutros,
      a.valorRetOutros                = b.valorRetOutros,
      a.aliquotaII                    = b.aliquotaII,
      a.baseII                        = b.baseII,
      a.valorII                       = b.valorII,
      a.aliquotaIOF                   = b.aliquotaIOF,
      a.baseIOF                       = b.baseIOF,
      a.valorIOF                      = b.valorIOF,
      a.codigoEnquadramentoIPI        = b.codigoEnquadramentoIPI,
      a.stIPI                         = b.stIPI,
      a.aliquotaIPI                   = b.aliquotaIPI,
      a.valorAliquotaIPI              = b.valorAliquotaIPI,
      a.baseIPI                       = b.baseIPI,
      a.valorIPI                      = b.valorIPI,
      a.stPIS                         = b.stPIS,
      a.aliquotaPIS                   = b.aliquotaPIS,
      a.valorAliquotaPIS              = b.valorAliquotaPIS,
      a.basePIS                       = b.basePIS,
      a.valorPIS                      = b.valorPIS,
      a.aliquotaPISST                 = b.aliquotaPISST,
      a.valorAliquotaPISST            = b.valorAliquotaPISST,
      a.basePISST                     = b.basePISST,
      a.valorPISST                    = b.valorPISST,
      a.stCOFINS                      = b.stCOFINS,
      a.aliquotaCOFINS                = b.aliquotaCOFINS,
      a.valorAliquotaCOFINS           = b.valorAliquotaCOFINS,
      a.baseCOFINS                    = b.baseCOFINS,
      a.valorCOFINS                   = b.valorCOFINS,
      a.aliquotaCOFINSST              = b.aliquotaCOFINSST,
      a.valorAliquotaCOFINSST         = b.valorAliquotaCOFINSST,
      a.baseCOFINSST                  = b.baseCOFINSST,
      a.valorCOFINSST                 = b.valorCOFINSST,
      a.stSimplesNacional             = b.stSimplesNacional,
      a.creditoSimplesNacional        = b.creditoSimplesNacional,
      a.baseCreditoSimplesNacional    = b.baseCreditoSimplesNacional,
      a.valorCreditoSimplesNacional   = b.valorCreditoSimplesNacional,
      a.stICMS                        = b.stICMS,
      a.modalidadeBaseCalcICMS        = b.modalidadeBaseCalcICMS,
      a.reducaoBaseICMS               = b.reducaoBaseICMS,
      a.aliquotaICMS                  = b.aliquotaICMS,
      a.diferimentoICMS               = b.diferimentoICMS,
      a.motivoDesoneracaoICMS         = b.motivoDesoneracaoICMS,
      a.idBeneficio                   = b.idBeneficio,
      a.baseICMS                      = b.baseICMS,
      a.valorICMSoperacao             = b.valorICMSoperacao,
      a.valorICMSdiferido             = b.valorICMSdiferido,
      a.valorICMS                     = b.valorICMS,
      a.valorICMSdesoneracao          = b.valorICMSdesoneracao,
      a.modalidadeBaseCalcICMSST      = b.modalidadeBaseCalcICMSST,
      a.margemValorAdicionadoST       = b.margemValorAdicionadoST,
      a.reducaoBaseST                 = b.reducaoBaseST,
      a.aliquotaICMSST                = b.aliquotaICMSST,
      a.aliquotaSTSuportConsFinal     = b.aliquotaSTSuportConsFinal,
      a.baseICMSST                    = b.baseICMSST,
      a.valorICMSST                   = b.valorICMSST,
      a.baseICMSSTAnteriormente       = b.baseICMSSTAnteriormente,
      a.valorICMSSTAnteriormente      = b.valorICMSSTAnteriormente,
      a.valorICMSProprioSubstituto    = b.valorICMSProprioSubstituto,
      a.reducaoBaseICMSEfetivo        = b.reducaoBaseICMSEfetivo,
      a.aliquotaICMSEfetivo           = b.aliquotaICMSEfetivo,
      a.baseICMSEfetivo               = b.baseICMSEfetivo,
      a.valorICMSEfetivo              = b.valorICMSEfetivo,
      a.aliquotaICMSUFDestinatario    = b.aliquotaICMSUFDestinatario,
      a.aliquotaICMSInterestadual     = b.aliquotaICMSInterestadual,
      a.partilhaICMSInterestadual     = b.partilhaICMSInterestadual,
      a.baseICMSUFDestinatario        = b.baseICMSUFDestinatario,
      a.valorICMSUFDestinatario       = b.valorICMSUFDestinatario,
      a.baseICMSUFRemetente           = b.baseICMSUFRemetente,
      a.valorICMSUFRemetente          = b.valorICMSUFRemetente,
      a.aliquotaFCP                   = b.aliquotaFCP,
      a.baseFCP                       = b.baseFCP,
      a.valorFCP                      = b.valorFCP,
      a.aliquotaFCPST                 = b.aliquotaFCPST,
      a.baseFCPST                     = b.baseFCPST,
      a.valorFCPST                    = b.valorFCPST,
      a.aliquotaFCPSTAnteriormente    = b.aliquotaFCPSTAnteriormente,
      a.baseFCPSTAnteriormente        = b.baseFCPSTAnteriormente,
      a.valorFCPSTAnteriormente       = b.valorFCPSTAnteriormente,
      a.aliquotaFCPUFDestinatario     = b.aliquotaFCPUFDestinatario,
      a.baseFCPUFDestinatario         = b.baseFCPUFDestinatario,
      a.valorFCPUFDestinatario        = b.valorFCPUFDestinatario,
      a.aliquotaestimadaimpfederais   = b.aliquotaestimadaimpfederais,
      a.aliquotaestimadaimpestaduais  = b.aliquotaestimadaimpestaduais,
      a.aliquotaestimadaimpmunicipais = b.aliquotaestimadaimpmunicipais,
      a.baseestimadaimpostos          = b.baseestimadaimpostos,
      a.valorestimadoimpfederais      = b.valorestimadoimpfederais,
      a.valorEstimadoImpEstaduais     = b.valorEstimadoImpEstaduais,
      a.valorEstimadoImpMunicipais    = b.valorEstimadoImpMunicipais,
      a.valorLiquidoItem              = b.valorLiquidoItem,
      a.observacoesDigitadas          = b.observacoesDigitadas,
      a.observacoes                   = b.observacoes
    WHEN NOT MATCHED THEN INSERT (
      idItemOrcamento,
      orcamento,
      sequencia,
      cancelado,
      pedidoCompraFornecedor,
      sequenciaPedidoCompraFornec,
      ambiente,
      ambienteObservacoes,
      modeloDocumento,
      estabelecimentoOriginal,
      vendedor,
      gradeProduto,
      atividadeServico,
      statusAtividadeServico,
      idFormulaTinta,
      personalizacao,
      idLoteEstoque,
      vinculoItemDocumento,
      operacaoFiscal,
      movimentaEstoque,
      geraFinanceiro,
      localEstoque,
      pessoaParticipante,
      dataEntrega,
      controleQuantidade,
      unidadeMedidaConversao,
      conversorQuantidade,
      loteMinimo,
      loteMultiplo,
      altura,
      largura,
      comprimento,
      pecas,
      quantidade,
      quantidadeConvertida,
      quantidadeSaldo,
      controleEntrega,
      pesoLiquido,
      pesoBruto,
      tipoPreco,
      tabelaPreco,
      precoSugestaoAPrazo,
      precoSugestaoAVista,
      precoDesconto,
      precoMinimo,
      usarPrecoAVista,
      precoUnitarioBruto,
      acrescimoUnitarioComposicao,
      precoUnitario,
      precoUnitarioConvertido,
      valorProdutoServicoBruto,
      valorProdutoServico,
      percDescontoItem,
      valorDescontoItem,
      percAcrescimoItem,
      valorAcrescimoItem,
      valorFreteItem,
      valorSeguroItem,
      valorAdicFreteMarinhaMerItem,
      valorDespesasAduaneirasItem,
      valorFreteGeral,
      valorSeguroGeral,
      valorDescontoGeral,
      valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral,
      valorDespesasAduaneirasGeral,
      valorBasePagamento,
      valorDescontoPagamento,
      valorOutrasDespesasPagamento,
      valorJurosPagamento,
      valorFreteTotal,
      valorSeguroTotal,
      valorDescontoTotal,
      valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal,
      valorDespesasAduaneirasTotal,
      cfop,
      indicadorISSQN,
      aliquotaISSQN,
      retidoISSQN,
      tributadoForaMunicipio,
      incentivoFiscal,
      listaServicos,
      cnae,
      idServicoMunicipio,
      numeroProcessoAdministrativo,
      baseISSQN,
      valorISSQN,
      retencaoIRRF,
      baseRetIRRF,
      valorRetIRRF,
      retencaoINSS,
      baseRetINSS,
      valorRetINSS,
      retencaoPIS,
      baseRetPIS,
      valorRetPIS,
      retencaoCOFINS,
      baseRetCOFINS,
      valorRetCOFINS,
      retencaoCSLL,
      baseRetCSLL,
      valorRetCSLL,
      retencaoOutros,
      baseRetOutros,
      valorRetOutros,
      aliquotaII,
      baseII,
      valorII,
      aliquotaIOF,
      baseIOF,
      valorIOF,
      codigoEnquadramentoIPI,
      stIPI,
      aliquotaIPI,
      valorAliquotaIPI,
      baseIPI,
      valorIPI,
      stPIS,
      aliquotaPIS,
      valorAliquotaPIS,
      basePIS,
      valorPIS,
      aliquotaPISST,
      valorAliquotaPISST,
      basePISST,
      valorPISST,
      stCOFINS,
      aliquotaCOFINS,
      valorAliquotaCOFINS,
      baseCOFINS,
      valorCOFINS,
      aliquotaCOFINSST,
      valorAliquotaCOFINSST,
      baseCOFINSST,
      valorCOFINSST,
      stSimplesNacional,
      creditoSimplesNacional,
      baseCreditoSimplesNacional,
      valorCreditoSimplesNacional,
      stICMS,
      modalidadeBaseCalcICMS,
      reducaoBaseICMS,
      aliquotaICMS,
      diferimentoICMS,
      motivoDesoneracaoICMS,
      idBeneficio,
      baseICMS,
      valorICMSOperacao,
      valorICMSDiferido,
      valorICMS,
      valorICMSDesoneracao,
      modalidadeBaseCalcICMSST,
      margemValorAdicionadoST,
      reducaoBaseST,
      aliquotaICMSST,
      aliquotaSTSuportConsFinal,
      baseICMSST,
      valorICMSST,
      baseICMSSTAnteriormente,
      valorICMSSTAnteriormente,
      valorICMSProprioSubstituto,
      reducaoBaseICMSEfetivo,
      aliquotaICMSEfetivo,
      baseICMSEfetivo,
      valorICMSEfetivo,
      aliquotaICMSUFDestinatario,
      aliquotaICMSInterestadual,
      partilhaICMSInterestadual,
      baseICMSUFDestinatario,
      valorICMSUFDestinatario,
      baseICMSUFRemetente,
      valorICMSUFRemetente,
      aliquotaFCP,
      baseFCP,
      valorFCP,
      aliquotaFCPST,
      baseFCPST,
      valorFCPST,
      aliquotaFCPSTAnteriormente,
      baseFCPSTAnteriormente,
      valorFCPSTAnteriormente,
      aliquotaFCPUFDestinatario,
      baseFCPUFDestinatario,
      valorFCPUFDestinatario,
      aliquotaEstimadaImpFederais,
      aliquotaEstimadaImpEstaduais,
      aliquotaEstimadaImpMunicipais,
      baseEstimadaImpostos,
      valorEstimadoImpFederais,
      valorEstimadoImpEstaduais,
      valorEstimadoImpMunicipais,
      valorLiquidoItem,
      observacoesDigitadas,
      observacoes)
    VALUES (
      b.idItemOrcamento,
      b.orcamento,
      b.sequencia,
      b.cancelado,
      b.pedidoCompraFornecedor,
      b.sequenciaPedidoCompraFornec,
      b.ambiente,
      b.ambienteObservacoes,
      b.modeloDocumento,
      b.estabelecimentoOriginal,
      b.vendedor,
      b.gradeProduto,
      b.atividadeServico,
      b.statusAtividadeServico,
      b.idFormulaTinta,
      b.personalizacao,
      b.idLoteEstoque,
      b.vinculoItemDocumento,
      b.operacaoFiscal,
      b.movimentaEstoque,
      b.geraFinanceiro,
      b.localEstoque,
      b.pessoaParticipante,
      b.dataEntrega,
      b.controleQuantidade,
      b.unidadeMedidaConversao,
      b.conversorQuantidade,
      b.loteMinimo,
      b.loteMultiplo,
      b.altura,
      b.largura,
      b.comprimento,
      b.pecas,
      b.quantidade,
      b.quantidadeConvertida,
      b.quantidadeSaldo,
      b.controleEntrega,
      b.pesoLiquido,
      b.pesoBruto,
      b.tipoPreco,
      b.tabelaPreco,
      b.precoSugestaoAPrazo,
      b.precoSugestaoAVista,
      b.precoDesconto,
      b.precoMinimo,
      b.usarPrecoAVista,
      b.precoUnitarioBruto,
      b.acrescimoUnitarioComposicao,
      b.precoUnitario,
      b.precoUnitarioConvertido,
      b.valorProdutoServicoBruto,
      b.valorProdutoServico,
      b.percDescontoItem,
      b.valorDescontoItem,
      b.percAcrescimoItem,
      b.valorAcrescimoItem,
      b.valorFreteItem,
      b.valorSeguroItem,
      b.valorAdicFreteMarinhaMerItem,
      b.valorDespesasAduaneirasItem,
      b.valorFreteGeral,
      b.valorSeguroGeral,
      b.valorDescontoGeral,
      b.valorOutrasDespesasGeral,
      b.valorAdicFreteMarinhaMerGeral,
      b.valorDespesasAduaneirasGeral,
      b.valorBasePagamento,
      b.valorDescontoPagamento,
      b.valorOutrasDespesasPagamento,
      b.valorJurosPagamento,
      b.valorFreteTotal,
      b.valorSeguroTotal,
      b.valorDescontoTotal,
      b.valorOutrasDespesasTotal,
      b.valorAdicFreteMarinhaMerTotal,
      b.valorDespesasAduaneirasTotal,
      b.cfop,
      b.indicadorISSQN,
      b.aliquotaISSQN,
      b.retidoISSQN,
      b.tributadoForaMunicipio,
      b.incentivoFiscal,
      b.listaServicos,
      b.cnae,
      b.idServicoMunicipio,
      b.numeroProcessoAdministrativo,
      b.baseISSQN,
      b.valorISSQN,
      b.retencaoIRRF,
      b.baseRetIRRF,
      b.valorRetIRRF,
      b.retencaoINSS,
      b.baseRetINSS,
      b.valorRetINSS,
      b.retencaoPIS,
      b.baseRetPIS,
      b.valorRetPIS,
      b.retencaoCOFINS,
      b.baseRetCOFINS,
      b.valorRetCOFINS,
      b.retencaoCSLL,
      b.baseRetCSLL,
      b.valorRetCSLL,
      b.retencaoOutros,
      b.baseRetOutros,
      b.valorRetOutros,
      b.aliquotaII,
      b.baseII,
      b.valorII,
      b.aliquotaIOF,
      b.baseIOF,
      b.valorIOF,
      b.codigoEnquadramentoIPI,
      b.stIPI,
      b.aliquotaIPI,
      b.valorAliquotaIPI,
      b.baseIPI,
      b.valorIPI,
      b.stPIS,
      b.aliquotaPIS,
      b.valorAliquotaPIS,
      b.basePIS,
      b.valorPIS,
      b.aliquotaPISST,
      b.valorAliquotaPISST,
      b.basePISST,
      b.valorPISST,
      b.stCOFINS,
      b.aliquotaCOFINS,
      b.valorAliquotaCOFINS,
      b.baseCOFINS,
      b.valorCOFINS,
      b.aliquotaCOFINSST,
      b.valorAliquotaCOFINSST,
      b.baseCOFINSST,
      b.valorCOFINSST,
      b.stSimplesNacional,
      b.creditoSimplesNacional,
      b.baseCreditoSimplesNacional,
      b.valorCreditoSimplesNacional,
      b.stICMS,
      b.modalidadeBaseCalcICMS,
      b.reducaoBaseICMS,
      b.aliquotaICMS,
      b.diferimentoICMS,
      b.motivoDesoneracaoICMS,
      b.idBeneficio,
      b.baseICMS,
      b.valorICMSOperacao,
      b.valorICMSDiferido,
      b.valorICMS,
      b.valorICMSDesoneracao,
      b.modalidadeBaseCalcICMSST,
      b.margemValorAdicionadoST,
      b.reducaoBaseST,
      b.aliquotaICMSST,
      b.aliquotaSTSuportConsFinal,
      b.baseICMSST,
      b.valorICMSST,
      b.baseICMSSTAnteriormente,
      b.valorICMSSTAnteriormente,
      b.valorICMSProprioSubstituto,
      b.reducaoBaseICMSEfetivo,
      b.aliquotaICMSEfetivo,
      b.baseICMSEfetivo,
      b.valorICMSEfetivo,
      b.aliquotaICMSUFDestinatario,
      b.aliquotaICMSInterestadual,
      b.partilhaICMSInterestadual,
      b.baseICMSUFDestinatario,
      b.valorICMSUFDestinatario,
      b.baseICMSUFRemetente,
      b.valorICMSUFRemetente,
      b.aliquotaFCP,
      b.baseFCP,
      b.valorFCP,
      b.aliquotaFCPST,
      b.baseFCPST,
      b.valorFCPST,
      b.aliquotaFCPSTAnteriormente,
      b.baseFCPSTAnteriormente,
      b.valorFCPSTAnteriormente,
      b.aliquotaFCPUFDestinatario,
      b.baseFCPUFDestinatario,
      b.valorFCPUFDestinatario,
      b.aliquotaEstimadaImpFederais,
      b.aliquotaEstimadaImpEstaduais,
      b.aliquotaEstimadaImpMunicipais,
      b.baseEstimadaImpostos,
      b.valorEstimadoImpFederais,
      b.valorEstimadoImpEstaduais,
      b.valorEstimadoImpMunicipais,
      b.valorLiquidoItem,
      b.observacoesDigitadas,
      b.observacoes);
    IF p_idItemReferenciado > 0 THEN
      IF p_tipoDocumentoReferenciado = 'C' THEN
        UPDATE MOPAINELCOMPRAXGRADE
        SET idItemOrcamento = r_item_idItemOrcamento
        WHERE idGradePainelCompra = p_idItemReferenciado;
      ELSIF p_tipoDocumentoReferenciado = 'F' THEN
        ADD_ORCAMENTO_ITEM_REF_CONTR (
          p_estabelecimentoAtivo,
          p_idItemReferenciado,
          r_item_idItemOrcamento,
          p_quantidadeReferenciada);
      ELSIF p_tipoDocumentoReferenciado = 'L' THEN
        ADD_ORCAMENTO_ITEM_LISTA_GRAVA (
          p_estabelecimentoAtivo,
          p_idItemReferenciado,
          r_item_idItemOrcamento,
          p_quantidadeReferenciada);
      ELSIF p_tipoDocumentoReferenciado = 'O' THEN
        ADD_ORCAMENTO_ITEM_REF_ORCAMEN (
          p_estabelecimentoAtivo,
          v_cab_tipoDocumento,
          r_item_idItemOrcamento,
          p_item_quantidade,
          p_idItemReferenciado,
          p_quantidadeReferenciada,
          0,
          v_auxNumber);
      ELSIF p_tipoDocumentoReferenciado = 'T' THEN
        ADD_ORCAMENTO_ITEM_TRANS_GRAVA (
          p_estabelecimentoAtivo,
          v_cab_entradaSaida,
          p_idItemReferenciado,
          r_item_idItemOrcamento,
          p_quantidadeReferenciada);
      END IF;
    END IF;
    IF p_tempComp_nomeTempComposicao <> ' '
      AND (p_tipoDocumentoReferenciado <> 'O'
        OR p_idItemReferenciado <= 0)
    THEN
      ADD_ORCAMENTO_ITEM_COMP_TEMP (
        p_sessaoClient,
        p_estabelecimentoAtivo,
        p_tempComp_nomeTempComposicao,
        p_tempComp_sequencia,
        r_item_idItemOrcamento,
        0,
        v_auxNumber);
    END IF;
    v_idEnderecoEstoque := 0;
    IF p_item_idEnderecoEstoque > 0 THEN
      ADD_ORCAMENTO_ITEM_ENDER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemOrcamento,
        p_item_idEnderecoEstoque,
        p_item_quantidade,
        p_item_quantidade,
        ' ',
        v_idEnderecoEstoque);
    END IF;
    IF p_item_idNumeroSerie > 0 THEN
      ADD_ORCAMENTO_ITEM_N_SER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemOrcamento,
        v_idEnderecoEstoque,
        p_item_gradeProduto,
        p_item_idNumeroSerie,
        0,
        v_auxNumber);
    END IF;
    IF p_item_atividadeProjeto > 0 THEN
      ADD_ORCAMENTO_ITEM_PROJ_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_item_idItemOrcamento,
        p_item_atividadeProjeto,
        v_auxNumber);
    END IF;
    v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
      p_sessaoClient,
      p_config_198_obs_add_referenc,
      p_config_199_obs_add_caractA,
      p_config_200_obs_add_caractB,
      p_config_201_obs_add_caractC,
      p_config_202_obs_add_caractD,
      p_config_203_obs_add_caractE,
      p_config_413_obs_add_marca,
      p_config_418_obs_efetarEnter,
      p_tempComp_nomeTempComposicao,
      p_tempComp_sequencia,
      'O',
      r_item_idItemOrcamento,
      p_item_gradeProduto,
      p_item_idFormulaTinta,
      p_item_personalizacao,
      p_item_idLoteEstoque,
      p_item_controleQuantidade,
      p_item_loteMultiplo,
      p_item_altura,
      p_item_largura,
      p_item_comprimento,
      p_item_quantidade,
      p_item_observacoesDigitadas);
    UPDATE MOORCAMENTOXITENS
    SET observacoes = v_observacoes
    WHERE idItemOrcamento = r_item_idItemOrcamento;
    IF v_etOrc_situacaoOrcamento > 40 THEN
      ADD_ORCAMENTO_ITEM_RES_ITEM (
        r_item_idItemOrcamento,
        p_estabelecimentoAtivo,
        ' ',
        v_auxVarchar);
    END IF;
    r_buffer_item_idItemOrcamento := CASE WHEN (r_buffer_item_idItemOrcamento IS NULL OR r_buffer_item_idItemOrcamento = '' OR r_buffer_item_idItemOrcamento = ' ') THEN '' ELSE RTRIM (r_buffer_item_idItemOrcamento) || ';' END || TO_CHAR (LPAD(r_item_idItemOrcamento,14,'0'));
    r_valorInserido := v_item_valorProdutoServico
      - CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN p_item_valorDescontoItem
          ELSE 0
        END
      + CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN p_item_valorAcrescimoItem
          ELSE 0
        END;
    IF p_item_idItemOrcamento <= 0
      AND v_item_cancelado = 0
      AND p_item_atividadeServico > 0
    THEN
      SELECT
        habilitaAtividadePrevista,
        selecionaAtividadePrevista
      INTO
        v_auxNumber,
        v_ativ_selecionaAtividadePrev
      FROM PAATIVIDADESSERVICO
      WHERE atividadeServico = p_item_atividadeServico;
      IF v_auxNumber = 1 THEN
        ADD_ORCAMENTO_ITEM_PREV_INSERE (
          p_config_64_casasDecSaidas,
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          p_estabelecimentoAtivo,
          v_cab_estabelecimento,
          v_cab_pessoa,
          v_munEndEst_uf,
          v_munEndPess_uf,
          r_item_idItemOrcamento,
          p_item_atividadeServico,
          p_item_vendedor,
          p_item_gradeProduto,
          p_item_tipoPreco,
          p_item_tabelaPreco,
          v_item_precoUnitario,
          v_ativ_selecionaAtividadePrev,
          p_idAtividadesPrevistasSelec,
          v_auxNumber);
        IF v_auxNumber = 1 THEN
          SELECT
            COUNT (1) numeroAtividades,
            SUM (
              CASE
                WHEN prev.faturarAtividade = 'P'
                THEN prev.quantidade
                ELSE COALESCE ((
                  SELECT realiz.quantidade
                  FROM MOORCAMENTOXATIVIDADEREAL realiz
                  WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                  AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
              END) quantidade,
            MIN (prev.precoUnitario) precoUnitarioMenor,
            MAX (prev.precoUnitario) precoUnitarioMaior,
            SUM (ROUND (
              CASE
                WHEN prev.faturarAtividade = 'P'
                THEN prev.quantidade
                ELSE COALESCE ((
                  SELECT realiz.quantidade
                  FROM MOORCAMENTOXATIVIDADEREAL realiz
                  WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                  AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
              END * prev.precoUnitario, 2)) valorTotalItem
          INTO
            v_ativ_numero,
            v_ativ_quantidade,
            v_ativ_precoUnitarioMenor,
            v_ativ_precoUnitario,
            v_ativ_valorTotalItem
          FROM MOORCAMENTOXATIVIDADEPREV prev
          WHERE prev.idItemOrcamento = r_item_idItemOrcamento
          AND prev.statusAtividadeServico <> 'C'
          AND prev.faturarAtividade IN ('P','R');
          IF v_ativ_numero > 0 THEN
            v_ativ_geraFinanceiro := 1;
            IF v_ativ_numero > 1
              AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
              AND v_ativ_quantidade <> 0
            THEN
              v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
            END IF;
          ELSE
            SELECT
              COUNT (1) numeroAtividades,
              SUM (COALESCE ((
                SELECT realiz.quantidade
                FROM MOORCAMENTOXATIVIDADEREAL realiz
                WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)) quantidade,
              MIN (prev.precoUnitario) precoUnitarioMenor,
              MAX (prev.precoUnitario) precoUnitarioMaior,
              SUM (ROUND (COALESCE ((
                SELECT realiz.quantidade
                FROM MOORCAMENTOXATIVIDADEREAL realiz
                WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
                AND realiz.statusAtividadeServico <> 'C'), prev.quantidade) * prev.precoUnitario, 2)) valorTotalItem
            INTO
              v_ativ_numero,
              v_ativ_quantidade,
              v_ativ_precoUnitarioMenor,
              v_ativ_precoUnitario,
              v_ativ_valorTotalItem
            FROM MOORCAMENTOXATIVIDADEPREV prev
            JOIN PAATIVIDADESSERVICO ativ
            ON ativ.atividadeServico = prev.atividadeServico
            JOIN CAGRADESPRODUTO gradProd
            ON gradProd.gradeProduto = ativ.gradeProduto
            JOIN CAPRODUTOS prod
            ON prod.produto = gradProd.produto
            WHERE prev.idItemOrcamento = r_item_idItemOrcamento
            AND prev.statusAtividadeServico <> 'C'
            AND ativ.gradeProduto > 0
            AND prod.unidadeMedida = v_prod_unidadeMedida;
            IF v_ativ_numero > 0 THEN
              v_ativ_geraFinanceiro := 0;
              IF v_ativ_numero > 1
                AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
                AND v_ativ_quantidade <> 0
              THEN
                v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
              END IF;
            END IF;
          END IF;
          IF v_ativ_numero > 0
            AND (v_ativ_quantidade <> p_item_quantidade
              OR v_ativ_precoUnitario <> v_item_precoUnitario
              OR v_ativ_geraFinanceiro <> v_item_geraFinanceiro)
          THEN
            ADD_ORCAMENTO_ITEM_GRAVA (
              ' ', -- p_sessaoClient
              p_usuarioLogado,
              p_perfilUsuarioLogado,
              p_estabelecimentoAtivo,
              p_person_190_modeloFrete,
              p_config_64_casasDecSaidas,
              p_config_65_casasDecEntrada,
              p_config_198_obs_add_referenc,
              p_config_199_obs_add_caractA,
              p_config_200_obs_add_caractB,
              p_config_201_obs_add_caractC,
              p_config_202_obs_add_caractD,
              p_config_203_obs_add_caractE,
              p_config_209_filtrarGrupoEcon,
              p_config_362_calcCustoPorGrade,
              p_config_378_calcularVolumes,
              p_config_413_obs_add_marca,
              p_config_418_obs_efetarEnter,
              0, -- p_manterFinanceiro_Retotalizar,
              'T', -- p_buscarAliquotas_CalcularImp  IN CHAR, -- N = Não, S = Sim, T = Troca Produto / Operação Fiscal, I = Calcular Impostos
              0, -- p_buscarGeraFinanceiroEstoque,
              ' ', -- p_tipoDocumentoReferenciado, 
              0, -- p_idItemReferenciado,
              0, -- p_quantidadeReferenciada
              ' ', -- p_tempComp_nomeTempComposicao,
              0, -- p_tempComp_sequencia
              ' ', -- p_mensagemAviso,
              r_calcularImpostos,
              r_item_idItemOrcamento,
              p_item_orcamento,
              p_item_pedidoCompraFornecedor,
              p_item_sequenciaPedidoCompraFo,
              p_item_ambiente,
              p_item_ambienteObservacoes,
              p_item_vinculoItemDocumento,
              p_item_atividadeServico,
              p_item_statusAtividadeServico,
              p_item_controleEntrega,
              p_item_dataEntrega,
              p_item_modeloDocumento,
              p_item_estabelecimentoOriginal,
              p_item_vendedor,
              p_item_gradeProduto,
              p_item_idFormulaTinta,
              p_item_personalizacao,
              p_item_idLoteEstoque,
              0, -- p_item_idEnderecoEstoque
              0, -- p_item_idNumeroSerie
              0, -- p_item_atividadeProjeto,
              p_item_localEstoque,
              p_item_pessoaParticipante,
              p_item_controleQuantidade,
              p_item_unidadeMedidaConversao,
              p_item_conversorQuantidade,
              p_item_loteMinimo,
              p_item_loteMultiplo,
              p_item_altura,
              p_item_largura,
              p_item_comprimento,
              ROUND (CASE p_item_controleQuantidade
                WHEN 2
                THEN CASE WHEN p_item_altura = 0 OR p_item_largura = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100)) END
                WHEN 3
                THEN CASE WHEN p_item_altura = 0 OR p_item_comprimento = 0 OR p_item_comprimento = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100) * p_item_comprimento) END
                WHEN 4
                THEN CASE WHEN p_item_conversorQuantidade = 0 THEN 0 ELSE v_ativ_quantidade / p_item_conversorQuantidade END
                ELSE 0
              END, 3), -- p_item_pecas
              v_ativ_quantidade,
              ROUND (CASE p_item_controleQuantidade
                WHEN 2
                THEN CASE WHEN p_item_altura = 0 OR p_item_largura = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100)) END
                WHEN 3
                THEN CASE WHEN p_item_altura = 0 OR p_item_comprimento = 0 OR p_item_comprimento = 0 THEN 0 ELSE v_ativ_quantidade / ((p_item_altura / 100) * (p_item_largura / 100) * p_item_comprimento) END
                WHEN 4
                THEN CASE WHEN p_item_conversorQuantidade = 0 THEN v_ativ_quantidade ELSE v_ativ_quantidade / p_item_conversorQuantidade END
                WHEN 5
                THEN CASE WHEN p_item_conversorQuantidade = 0 THEN v_ativ_quantidade ELSE v_ativ_quantidade * p_item_conversorQuantidade END
                ELSE v_ativ_quantidade
              END, 6), -- p_item_quantidadeConvertida
              ROUND ((v_ativ_quantidade * v_prod_pesoLiquido), 3), -- p_item_pesoLiquido
              ROUND ((v_ativ_quantidade * v_prod_pesoBruto), 3), -- p_item_pesoBruto
              p_item_tipoPreco,
              p_item_tabelaPreco,
              p_item_precoSugestaoAPrazo,
              p_item_precoSugestaoAVista,
              p_item_precoDesconto,
              p_item_precoMinimo,
              p_item_usarPrecoAVista,
              v_ativ_precoUnitario, -- p_item_precoUnitarioBruto
              p_item_acrescimoUnitarioCompos,
              v_ativ_precoUnitario, -- p_item_precoUnitario
              p_item_percDescontoItem,
              p_item_valorDescontoItem,
              p_item_percAcrescimoItem,
              p_item_valorAcrescimoItem,
              p_item_valorFreteItem,
              p_item_valorSeguroItem,
              p_item_valorAdicFreteMarItem,
              p_item_valorDespesasAduanItem,
              p_item_observacoesDigitadas,
              v_item_valorFreteGeral,
              p_item_valorSeguroGeral,
              v_item_valorDescontoGeral,
              p_item_valorOutrasDespesasGer,
              p_item_valorAdicFreteMarGeral,
              p_item_valorDespesasAduanGeral,
              v_item_valorDescontoPagamento,
              v_item_valorOutrasDespPagament,
              v_item_valorJurosPagamento,
              p_item_operacaoFiscal,
              v_item_movimentaEstoque,
              v_ativ_geraFinanceiro,
              0, -- p_item_cfop
              ' ', -- p_item_indicadorISSQN
              0, -- p_item_aliquotaISSQN
              0, -- p_item_retidoISSQN
              0, -- p_item_tributadoForaMunicipio
              0, -- p_item_incentivoFiscal
              0, -- p_item_listaServicos
              0, -- p_item_cnae
              0, -- p_item_idServicoMunicipio
              ' ', -- p_item_numeroProcessoAdministr
              0, -- p_item_retencaoIRRF
              0, -- p_item_retencaoINSS
              0, -- p_item_retencaoPIS
              0, -- p_item_retencaoCOFINS
              0, -- p_item_retencaoCSLL
              0, -- p_item_retencaoOutros
              0, -- p_item_aliquotaII
              0, -- p_item_aliquotaIOF
              0, -- p_item_codigoEnquadramentoIPI
              0, -- p_item_stIPI
              0, -- p_item_aliquotaIPI
              0, -- p_item_valorAliquotaIPI
              ' ', -- p_item_stPIS
              0, -- p_item_aliquotaPIS
              0, -- p_item_valorAliquotaPIS
              0, -- p_item_aliquotaPISST
              0, -- p_item_valorAliquotaPISST
              ' ', -- p_item_stCOFINS
              0, -- p_item_aliquotaCOFINS
              0, -- p_item_valorAliquotaCOFINS
              0, -- p_item_aliquotaCOFINSST
              0, -- p_item_valorAliquotaCOFINSST
              '   ', -- p_item_stSimplesNacional
              0, -- p_item_creditoSimplesNacional
              '  ', -- p_item_stICMS
              0, -- p_item_modalBaseCalcICMS
              0, -- p_item_reducaoBaseICMS
              0, -- p_item_aliquotaICMS
              0, -- p_item_diferimentoICMS
              ' ', -- p_item_motivoDesoneracaoICMS
              0, -- p_item_idBeneficio
              ' ', -- p_item_modalBaseCalcICMSST
              0, -- p_item_margemValorAdicionadoST
              0, -- p_item_reducaoBaseST
              0, -- p_item_aliquotaICMSST
              0, -- p_item_aliquotaSTSuportConsFin
              0, -- p_item_reducaoBaseICMSEfetivo
              0, -- p_item_aliquotaICMSEfetivo
              0, -- p_item_aliquotaICMSUFDestinat
              0, -- p_item_aliquotaICMSInterestad
              0, -- p_item_partilhaICMSInterestad
              0, -- p_item_aliquotaFCP
              0, -- p_item_aliquotaFCPST
              0, -- p_item_aliquotaFCPSTAnteriorm
              0, -- p_item_aliquotaFCPUFDestinat
              0, -- p_item_aliquotaEstImpFederais
              0, -- p_item_aliquotaEstImpEstaduais
              0, -- p_item_aliquotaEstImpMunicipai
              0, -- p_item_baseISSQN
              0, -- p_item_valorISSQN
              0, -- p_item_baseRetIRRF
              0, -- p_item_valorRetIRRF
              0, -- p_item_baseRetINSS
              0, -- p_item_valorRetINSS
              0, -- p_item_baseRetPIS
              0, -- p_item_valorRetPIS
              0, -- p_item_baseRetCOFINS
              0, -- p_item_valorRetCOFINS
              0, -- p_item_baseRetCSLL
              0, -- p_item_valorRetCSLL
              0, -- p_item_baseRetOutros
              0, -- p_item_valorRetOutros
              0, -- p_item_baseII
              0, -- p_item_valorII
              0, -- p_item_baseIOF
              0, -- p_item_valorIOF
              0, -- p_item_baseIPI
              0, -- p_item_valorIPI
              0, -- p_item_basePIS
              0, -- p_item_valorPIS
              0, -- p_item_basePISST
              0, -- p_item_valorPISST
              0, -- p_item_baseCOFINS
              0, -- p_item_valorCOFINS
              0, -- p_item_baseCOFINSST
              0, -- p_item_valorCOFINSST
              0, -- p_item_baseCreditoSimplesNac
              0, -- p_item_valorCreditoSimplesNac
              0, -- p_item_baseICMS
              0, -- p_item_valorICMSOperacao
              0, -- p_item_valorICMSDiferido
              0, -- p_item_valorICMS
              0, -- p_item_valorICMSDesoneracao
              0, -- p_item_baseICMSST
              0, -- p_item_valorICMSST
              0, -- p_item_baseICMSSTAnteriormente
              0, -- p_item_valorICMSSTAnteriorment
              0, -- p_item_valorICMSProprioSubstit
              0, -- p_item_baseICMSEfetivo
              0, -- p_item_valorICMSEfetivo
              0, -- p_item_baseICMSUFDestinatario
              0, -- p_item_valorICMSUFDestinatario
              0, -- p_item_baseICMSUFRemetente
              0, -- p_item_valorICMSUFRemetente
              0, -- p_item_baseFCP
              0, -- p_item_valorFCP
              0, -- p_item_baseFCPST
              0, -- p_item_valorFCPST
              0, -- p_item_baseFCPSTAnteriormente
              0, -- p_item_valorFCPSTAnteriormente
              0, -- p_item_baseFCPUFDestinatario
              0, -- p_item_valorFCPUFDestinatario
              0, -- p_item_baseEstimadaImpostos
              0, -- p_item_valorEstImpFederais
              0, -- p_item_valorEstImpEstaduais
              0, -- p_item_valorEstImpMunicipais
              ' ', -- p_idAtividadesPrevistasSelec
              0, -- p_nivel,
              ' ',
              v_auxVarchar, -- r_mensagemAviso
              r_calcularImpostos,
              v_auxNumber, -- idItemOrcamento
              v_auxVarchar, -- r_buffer_item_idItemOrcamento
              v_auxNumber); -- r_valorInserido
          END IF;
        END IF;
      END IF;
    END IF;
  END IF;
END ADD_ORCAMENTO_ITEM_GRAVA;

/

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_PREV_RECALC (
  p_usuarioLogado                IN NUMBER,
  p_perfilUsuarioLogado          IN NUMBER,
  p_estabelecimentoAtivo         IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_64_casasDecSaidas     IN CHAR,
  p_config_65_casasDecEntrada    IN CHAR,
  p_config_198_obs_add_referenc  IN NUMBER,
  p_config_199_obs_add_caractA   IN NUMBER,
  p_config_200_obs_add_caractB   IN NUMBER,
  p_config_201_obs_add_caractC   IN NUMBER,
  p_config_202_obs_add_caractD   IN NUMBER,
  p_config_203_obs_add_caractE   IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_config_413_obs_add_marca     IN NUMBER,
  p_config_418_obs_efetarEnter   IN NUMBER,
  p_idItemOrcamento              IN NUMBER)
IS
  v_calcularImpostos        NUMBER;
  v_ativ_numero             NUMBER;
  v_ativ_quantidade         NUMBER;
  v_ativ_precoUnitarioMenor NUMBER;
  v_ativ_precoUnitario      NUMBER;
  v_ativ_valorTotalItem     NUMBER;
  v_ativ_geraFinanceiro     NUMBER;
  v_auxNumber               NUMBER;
  v_auxVarchar              VARCHAR2 (32000);
BEGIN
  v_calcularImpostos := 0;
  SELECT
    COUNT (1) numeroAtividades,
    SUM (
      CASE
        WHEN prev.faturarAtividade = 'P'
        THEN prev.quantidade
        ELSE COALESCE ((
          SELECT realiz.quantidade
          FROM MOORCAMENTOXATIVIDADEREAL realiz
          WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
          AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
      END) quantidade,
    MIN (prev.precoUnitario) precoUnitarioMenor,
    MAX (prev.precoUnitario) precoUnitarioMaior,
    SUM (ROUND (
      CASE
        WHEN prev.faturarAtividade = 'P'
        THEN prev.quantidade
        ELSE COALESCE ((
          SELECT realiz.quantidade
          FROM MOORCAMENTOXATIVIDADEREAL realiz
          WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
          AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
      END * prev.precoUnitario, 2)) valorTotalItem
  INTO
    v_ativ_numero,
    v_ativ_quantidade,
    v_ativ_precoUnitarioMenor,
    v_ativ_precoUnitario,
    v_ativ_valorTotalItem
  FROM MOORCAMENTOXATIVIDADEPREV prev
  WHERE prev.idItemOrcamento = p_idItemOrcamento
  AND prev.statusAtividadeServico <> 'C'
  AND prev.faturarAtividade IN ('P','R');
  IF v_ativ_numero > 0 THEN
    v_ativ_geraFinanceiro := 1;
    IF v_ativ_numero > 1
      AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
      AND v_ativ_quantidade <> 0
    THEN
      v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
    END IF;
  ELSE
    SELECT
      COUNT (1) numeroAtividades,
      SUM (COALESCE ((
        SELECT realiz.quantidade
        FROM MOORCAMENTOXATIVIDADEREAL realiz
        WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
        AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)) quantidade,
        MIN (prev.precoUnitario) precoUnitarioMenor,
        MAX (prev.precoUnitario) precoUnitarioMaior,
        SUM (ROUND (COALESCE ((
          SELECT realiz.quantidade
          FROM MOORCAMENTOXATIVIDADEREAL realiz
          WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
          AND realiz.statusAtividadeServico <> 'C'), prev.quantidade) * prev.precoUnitario, 2)) valorTotalItem
    INTO
      v_ativ_numero,
      v_ativ_quantidade,
      v_ativ_precoUnitarioMenor,
      v_ativ_precoUnitario,
      v_ativ_valorTotalItem
    FROM MOORCAMENTOXATIVIDADEPREV prev
    JOIN MOORCAMENTOXITENS item
    ON item.idItemOrcamento = p_idItemOrcamento
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = item.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    JOIN PAATIVIDADESSERVICO ativ
    ON ativ.atividadeServico = prev.atividadeServico
    JOIN CAGRADESPRODUTO gradProdAtiv
    ON gradProdAtiv.gradeProduto = ativ.gradeProduto
    JOIN CAPRODUTOS prodAtiv
    ON prodAtiv.produto = gradProdAtiv.produto
    WHERE prev.idItemOrcamento = p_idItemOrcamento
    AND prev.statusAtividadeServico <> 'C'
    AND ativ.gradeProduto > 0
    AND prodAtiv.unidadeMedida = prod.unidadeMedida;
    IF v_ativ_numero > 0 THEN
      v_ativ_geraFinanceiro := 0;
      IF v_ativ_numero > 1
        AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
        AND v_ativ_quantidade <> 0
      THEN
        v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
      END IF;
    END IF;
  END IF;
  IF v_ativ_numero > 0 THEN
    FOR a IN (
      SELECT
        a.orcamento,
        a.pedidoCompraFornecedor,
        a.sequenciaPedidoCompraFornec,
        a.ambiente,
        a.ambienteObservacoes,
        a.vinculoItemDocumento,
        a.atividadeServico,
        a.statusAtividadeServico,
        a.controleEntrega,
        a.dataEntrega,
        a.modeloDocumento,
        a.estabelecimentoOriginal,
        a.vendedor,
        a.gradeProduto,
        a.idFormulaTinta,
        a.personalizacao,
        a.idLoteEstoque,
        a.localEstoque,
        a.pessoaParticipante,
        a.controleQuantidade,
        a.unidadeMedidaConversao,
        a.conversorQuantidade,
        a.loteMinimo,
        a.loteMultiplo,
        a.altura,
        a.largura,
        a.comprimento,
        a.quantidade,
        a.precoUnitario,
        a.tipoPreco,
        a.tabelaPreco,
        a.precoSugestaoAPrazo,
        a.precoSugestaoAVista,
        a.precoDesconto,
        a.precoMinimo,
        a.usarPrecoAVista,
        a.acrescimoUnitarioComposicao,
        a.percDescontoItem,
        a.valorDescontoItem,
        a.percAcrescimoItem,
        a.valorAcrescimoItem,
        a.valorFreteItem,
        a.valorSeguroItem,
        a.valorAdicFreteMarinhaMerItem,
        a.valorDespesasAduaneirasItem,
        a.observacoesDigitadas,
        a.valorFreteGeral,
        a.valorSeguroGeral,
        a.valorDescontoGeral,
        a.valorOutrasDespesasGeral,
        a.valorAdicFreteMarinhaMerGeral,
        a.valorDespesasAduaneirasGeral,
        a.valorDescontoPagamento,
        a.valorOutrasDespesasPagamento,
        a.valorJurosPagamento,
        a.operacaoFiscal,
        a.movimentaEstoque,
        a.geraFinanceiro,
        prod.pesoLiquido prod_pesoLiquido,
        prod.pesoBruto prod_pesoBruto,
        unMedConv.casasDecimaisUnidadeMedida unMedConv_casasDecimais
      FROM MOORCAMENTOXITENS a
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      JOIN SIUNIDADESMEDIDA unMedConv
      ON unMedConv.unidadeMedida = a.unidadeMedidaConversao
      WHERE a.idItemOrcamento = p_idItemOrcamento)
    LOOP   
      IF v_ativ_quantidade <> a.quantidade
        OR v_ativ_precoUnitario <> a.precoUnitario
        OR v_ativ_geraFinanceiro <> a.geraFinanceiro
      THEN
        ADD_ORCAMENTO_ITEM_GRAVA (
          ' ', -- p_sessaoClient
          p_usuarioLogado,
          p_perfilUsuarioLogado,
          p_estabelecimentoAtivo,
          p_person_190_modeloFrete,
          p_config_64_casasDecSaidas,
          p_config_65_casasDecEntrada,
          p_config_198_obs_add_referenc,
          p_config_199_obs_add_caractA,
          p_config_200_obs_add_caractB,
          p_config_201_obs_add_caractC,
          p_config_202_obs_add_caractD,
          p_config_203_obs_add_caractE,
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_config_378_calcularVolumes,
          p_config_413_obs_add_marca,
          p_config_418_obs_efetarEnter,
          0, -- p_manterFinanceiro_Retotalizar,
          'T', -- p_buscarAliquotas_CalcularImp  IN CHAR, -- N = Não, S = Sim, T = Troca Produto / Operação Fiscal, I = Calcular Impostos
          0, -- p_buscarGeraFinanceiroEstoque,
          ' ', -- p_tipoDocumentoReferenciado, 
          0, -- p_idItemReferenciado,
          0, -- p_quantidadeReferenciada
          ' ', -- p_tempComp_nomeTempComposicao,
          0, -- p_tempComp_sequencia
          ' ', -- p_mensagemAviso,
          0, -- p_calcularImpostos
          p_idItemOrcamento,
          a.orcamento,
          a.pedidoCompraFornecedor,
          a.sequenciaPedidoCompraFornec,
          a.ambiente,
          a.ambienteObservacoes,
          a.vinculoItemDocumento,
          a.atividadeServico,
          a.statusAtividadeServico,
          a.controleEntrega,
          a.dataEntrega,
          a.modeloDocumento,
          a.estabelecimentoOriginal,
          a.vendedor,
          a.gradeProduto,
          a.idFormulaTinta,
          a.personalizacao,
          a.idLoteEstoque,
          0, -- p_item_idEnderecoEstoque
          0, -- p_item_idNumeroSerie
          0, -- p_item_atividadeProjeto,
          a.localEstoque,
          a.pessoaParticipante,
          a.controleQuantidade,
          a.unidadeMedidaConversao,
          a.conversorQuantidade,
          a.loteMinimo,
          a.loteMultiplo,
          a.altura,
          a.largura,
          a.comprimento,
          CASE a.controleQuantidade
            WHEN 2
            THEN ROUND (CASE WHEN a.altura = 0 OR a.largura = 0 THEN 0 ELSE ROUND ((v_ativ_quantidade / ((a.altura / 100) * (a.largura / 100))), 3) END, 6)
            WHEN 3
            THEN ROUND (CASE WHEN a.altura = 0 OR a.comprimento = 0 OR a.comprimento = 0 THEN 0 ELSE ROUND (v_ativ_quantidade / ((a.altura / 100) * (a.largura / 100) * a.comprimento), 3) END, 6)
            WHEN 4
            THEN ROUND (CASE WHEN a.conversorQuantidade = 0 THEN 0 ELSE ROUND ((v_ativ_quantidade / a.conversorQuantidade), 3) END, 6)
            ELSE 0
          END, -- p_item_pecas
          v_ativ_quantidade,
          CASE a.controleQuantidade
            WHEN 2
            THEN ROUND (CASE WHEN a.altura = 0 OR a.largura = 0 THEN 0 ELSE ROUND ((v_ativ_quantidade / ((a.altura / 100) * (a.largura / 100))), 3) END, a.unMedConv_casasDecimais)
            WHEN 3
            THEN ROUND (CASE WHEN a.altura = 0 OR a.comprimento = 0 OR a.comprimento = 0 THEN 0 ELSE ROUND (v_ativ_quantidade / ((a.altura / 100) * (a.largura / 100) * a.comprimento), 3) END, a.unMedConv_casasDecimais)
            WHEN 4
            THEN ROUND (CASE WHEN a.conversorQuantidade = 0 THEN 0 ELSE ROUND ((v_ativ_quantidade / a.conversorQuantidade), 3) END, a.unMedConv_casasDecimais)
            ELSE v_ativ_quantidade
          END, -- p_item_quantidadeConvertida
          ROUND ((v_ativ_quantidade * a.prod_pesoLiquido), 3), -- p_item_pesoLiquido
          ROUND ((v_ativ_quantidade * a.prod_pesoBruto), 3), -- p_item_pesoBruto
          a.tipoPreco,
          a.tabelaPreco,
          a.precoSugestaoAPrazo,
          a.precoSugestaoAVista,
          a.precoDesconto,
          a.precoMinimo,
          a.usarPrecoAVista,
          v_ativ_precoUnitario, -- p_item_precoUnitarioBruto
          a.acrescimoUnitarioComposicao,
          v_ativ_precoUnitario, -- p_item_precoUnitario
          a.percDescontoItem,
          a.valorDescontoItem,
          a.percAcrescimoItem,
          a.valorAcrescimoItem,
          a.valorFreteItem,
          a.valorSeguroItem,
          a.valorAdicFreteMarinhaMerItem,
          a.valorDespesasAduaneirasItem,
          a.observacoesDigitadas,
          a.valorFreteGeral,
          a.valorSeguroGeral,
          a.valorDescontoGeral,
          a.valorOutrasDespesasGeral,
          a.valorAdicFreteMarinhaMerGeral,
          a.valorDespesasAduaneirasGeral,
          a.valorDescontoPagamento,
          a.valorOutrasDespesasPagamento,
          a.valorJurosPagamento,
          a.operacaoFiscal,
          a.movimentaEstoque,
          v_ativ_geraFinanceiro,
          0, -- p_item_cfop
          ' ', -- p_item_indicadorISSQN
          0, -- p_item_aliquotaISSQN
          0, -- p_item_retidoISSQN
          0, -- p_item_tributadoForaMunicipio
          0, -- p_item_incentivoFiscal
          0, -- p_item_listaServicos
          0, -- p_item_cnae
          0, -- p_item_idServicoMunicipio
          ' ', -- p_item_numeroProcessoAdministr
          0, -- p_item_retencaoIRRF
          0, -- p_item_retencaoINSS
          0, -- p_item_retencaoPIS
          0, -- p_item_retencaoCOFINS
          0, -- p_item_retencaoCSLL
          0, -- p_item_retencaoOutros
          0, -- p_item_aliquotaII
          0, -- p_item_aliquotaIOF
          0, -- p_item_codigoEnquadramentoIPI
          0, -- p_item_stIPI
          0, -- p_item_aliquotaIPI
          0, -- p_item_valorAliquotaIPI
          ' ', -- p_item_stPIS
          0, -- p_item_aliquotaPIS
          0, -- p_item_valorAliquotaPIS
          0, -- p_item_aliquotaPISST
          0, -- p_item_valorAliquotaPISST
          ' ', -- p_item_stCOFINS
          0, -- p_item_aliquotaCOFINS
          0, -- p_item_valorAliquotaCOFINS
          0, -- p_item_aliquotaCOFINSST
          0, -- p_item_valorAliquotaCOFINSST
          '   ', -- p_item_stSimplesNacional
          0, -- p_item_creditoSimplesNacional
          '  ', -- p_item_stICMS
          0, -- p_item_modalBaseCalcICMS
          0, -- p_item_reducaoBaseICMS
          0, -- p_item_aliquotaICMS
          0, -- p_item_diferimentoICMS
          ' ', -- p_item_motivoDesoneracaoICMS
          0, -- p_item_idBeneficio
          ' ', -- p_item_modalBaseCalcICMSST
          0, -- p_item_margemValorAdicionadoST
          0, -- p_item_reducaoBaseST
          0, -- p_item_aliquotaICMSST
          0, -- p_item_aliquotaSTSuportConsFin
          0, -- p_item_reducaoBaseICMSEfetivo
          0, -- p_item_aliquotaICMSEfetivo
          0, -- p_item_aliquotaICMSUFDestinat
          0, -- p_item_aliquotaICMSInterestad
          0, -- p_item_partilhaICMSInterestad
          0, -- p_item_aliquotaFCP
          0, -- p_item_aliquotaFCPST
          0, -- p_item_aliquotaFCPSTAnteriorm
          0, -- p_item_aliquotaFCPUFDestinat
          0, -- p_item_aliquotaEstImpFederais
          0, -- p_item_aliquotaEstImpEstaduais
          0, -- p_item_aliquotaEstImpMunicipai
          0, -- p_item_baseISSQN
          0, -- p_item_valorISSQN
          0, -- p_item_baseRetIRRF
          0, -- p_item_valorRetIRRF
          0, -- p_item_baseRetINSS
          0, -- p_item_valorRetINSS
          0, -- p_item_baseRetPIS
          0, -- p_item_valorRetPIS
          0, -- p_item_baseRetCOFINS
          0, -- p_item_valorRetCOFINS
          0, -- p_item_baseRetCSLL
          0, -- p_item_valorRetCSLL
          0, -- p_item_baseRetOutros
          0, -- p_item_valorRetOutros
          0, -- p_item_baseII
          0, -- p_item_valorII
          0, -- p_item_baseIOF
          0, -- p_item_valorIOF
          0, -- p_item_baseIPI
          0, -- p_item_valorIPI
          0, -- p_item_basePIS
          0, -- p_item_valorPIS
          0, -- p_item_basePISST
          0, -- p_item_valorPISST
          0, -- p_item_baseCOFINS
          0, -- p_item_valorCOFINS
          0, -- p_item_baseCOFINSST
          0, -- p_item_valorCOFINSST
          0, -- p_item_baseCreditoSimplesNac
          0, -- p_item_valorCreditoSimplesNac
          0, -- p_item_baseICMS
          0, -- p_item_valorICMSOperacao
          0, -- p_item_valorICMSDiferido
          0, -- p_item_valorICMS
          0, -- p_item_valorICMSDesoneracao
          0, -- p_item_baseICMSST
          0, -- p_item_valorICMSST
          0, -- p_item_baseICMSSTAnteriormente
          0, -- p_item_valorICMSSTAnteriorment
          0, -- p_item_valorICMSProprioSubstit
          0, -- p_item_baseICMSEfetivo
          0, -- p_item_valorICMSEfetivo
          0, -- p_item_baseICMSUFDestinatario
          0, -- p_item_valorICMSUFDestinatario
          0, -- p_item_baseICMSUFRemetente
          0, -- p_item_valorICMSUFRemetente
          0, -- p_item_baseFCP
          0, -- p_item_valorFCP
          0, -- p_item_baseFCPST
          0, -- p_item_valorFCPST
          0, -- p_item_baseFCPSTAnteriormente
          0, -- p_item_valorFCPSTAnteriormente
          0, -- p_item_baseFCPUFDestinatario
          0, -- p_item_valorFCPUFDestinatario
          0, -- p_item_baseEstimadaImpostos
          0, -- p_item_valorEstImpFederais
          0, -- p_item_valorEstImpEstaduais
          0, -- p_item_valorEstImpMunicipais
          ' ', -- p_idAtividadesPrevistasSelec
          0, -- p_nivel,
          ' ',
          v_auxVarchar, -- r_mensagemAviso
          v_calcularImpostos,
          v_auxNumber, -- idItemOrcamento
          v_auxVarchar, -- r_buffer_idItemOrcamento
          v_auxNumber); -- r_valorInserido
        IF v_calcularImpostos = 1 THEN
          ADD_ORCAMENTO_CALC_IMP_CAB (
            p_config_64_casasDecSaidas,
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            a.orcamento,
            ' ', -- p_troca_tipoPagamentoFrete,
            ' '); --p_a_cab_tipoPagamentoFrete
        END IF;
      END IF;
    END LOOP;
  END IF;
END ADD_ORCAMENTO_ITEM_PREV_RECALC;

/

UPDATE SIVERSOESSISTEMA SET dataLiberacaoVersao = TO_DATE ('21/10/2024', 'DD/MM/YYYY'), dataAtualizacaoVersao =  SYSDATE, observacoes = 'BETA 10' WHERE idVersaoSistema = 2024001004;

COMMIT;

-- FIM BETA 10 - 21/10/2024

INSERT INTO SIVERSOESSISTEMA (idVersaoSistema, versaoAplicativo, dataLiberacaoVersao, possuiConversaoTabelas, atualizada, dataAtualizacaoVersao, observacoes) VALUES (2024001004, '2024.1.4', TO_DATE ('21/10/2024', 'DD/MM/YYYY'), 1, 1, sysdate, 'BETA 10');

COMMIT;
