        SELECT
          r_idItemOrcamento      idItemOrcamento,
          p_item_ambiente        ambiente,
          p_item_amb_observacoes observacoes
        FROM DUAL
      ) b ON (a.idItemOrcamento = b.idItemOrcamento)
      WHEN MATCHED THEN
        UPDATE SET
          a.ambiente    = b.ambiente,
          a.observacoes = b.observacoes
      WHEN NOT MATCHED THEN
        INSERT (
          idItemOrcamento,
          ambiente,
          observacoes)
        VALUES (
          b.idItemOrcamento,
          b.ambiente,
          b.observacoes);
    END IF;
    IF p_idItemOrcamentoReferenciado > 0 THEN
      ADD_ORCAMENTO_ITEM_ORC_GRAVA (
        p_estabelecimentoAtivo,
        r_idItemOrcamento,
        p_idItemOrcamentoReferenciado,
        p_item_quantidade);
    ELSE
      IF p_tempComp_nomeTempComposicao <> ' ' THEN
        ADD_ORCAMENTO_ITEM_COMP_TEMP (
          p_uniqueMachineID,
          p_estabelecimentoAtivo,
          p_tempComp_nomeTempComposicao,
          p_tempComp_sequencia,
          r_idItemOrcamento);
      END IF;
    END IF;
    IF p_idItemDocTransferencia > 0 THEN
      ADD_ORCAMENTO_ITEM_TRANS_GRAVA (
        p_estabelecimentoAtivo,
        v_cab_entradaSaida,
        p_idItemDocTransferencia,
        r_idItemOrcamento,
        p_item_quantidade);
    END IF;
    v_idEnderecoEstoqueOrcamento := 0;
    IF p_idEnderecoEstoque > 0 THEN
      ADD_ORCAMENTO_ITEM_ENDER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_idItemOrcamento,
        p_idEnderecoEstoque,
        p_item_quantidade,
        p_item_quantidade,
        ' ',
        /* Retornos */
        v_idEnderecoEstoqueOrcamento);
    END IF;
    IF p_idNumeroSerie > 0 THEN
      ADD_ORCAMENTO_ITEM_N_SER_GRAVA (
        p_estabelecimentoAtivo,
        0,
        r_idItemOrcamento,
        v_idEnderecoEstoqueOrcamento,
        p_item_gradeProduto,
        p_idNumeroSerie,
        0,
        /* Retornos */
        v_auxNumber);
    END IF;
    IF p_item_atividadeServico > 0 AND v_ativServ_habilitaAtivPrev = 1 THEN
      ADD_ORCAMENTO_ITEM_PREV_INSERE (
        p_usuarioLogado,
        p_estabelecimentoAtivo,
        r_idItemOrcamento,
        p_item_atividadeServico,
        v_ativServ_validoPrevisto);
    END IF;
  END IF;
  IF p_manterFinanceiro = 0
    AND (v_cab_valorFreteGeral <> 0
      OR v_cab_valorSeguroGeral <> 0
      OR v_cab_valorDescontoGeral <> 0
      OR v_cab_valorOutrasDespGeral <> 0
      OR v_cab_valorAdicFreteMarGeral <> 0
      OR v_cab_valorDespesasAduanGeral <> 0) THEN
    r_calcularImpostos := 1;
  END IF;
  UPDATE MOORCAMENTOS SET
    modalidadeFrete               = v_cab_modalidadeFrete,
    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_valorOutrasDespGeral,
    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_valorOutrasDespPag,
    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_valorOutrasDespTotal,
    valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
    valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
    valorImpostosSomaPagamento    = v_cab_valorImpostosSomaPag,
    valorImpostosDiminuiPagamento = v_cab_valorImpostosDiminuiPag,
    valorLiquidoItem              = v_cab_valorLiquidoItem
  WHERE orcamento = p_cab_orcamento;
END ADD_ORCAMENTO_ITEM_INSERE;

/

create or replace PROCEDURE ADD_ORCAMENTO_GERA_TEMP_MARGEM (
    p_uniqueMachineID              IN VARCHAR2,
    p_config_65_casasDecEntrada    IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_regMarg_tipoPreco            IN CHAR,
    p_regMarg_tabelaPreco          IN VARCHAR2,
    p_regMarg_fatorMultiplicador   IN NUMBER,
    p_regMarg_tipoPrecoB           IN CHAR,
    p_regMarg_tabelaPrecoB         IN VARCHAR2,
    p_regMarg_fatorMultiplicadorB  IN NUMBER,
    p_regMarg_reduzirImpostos      IN NUMBER,
    p_regMarg_reduzirTarifaCartao  IN NUMBER,
    p_regMarg_taxaCapitacaoCustoFi IN NUMBER,
    p_regMarg_exibImagemMargemCab  IN NUMBER,
    p_regMarg_regraImagemCab       IN NUMBER,
    p_regMarg_exibImagemMargemItem IN NUMBER,
    p_regMarg_regraImagemItem      IN NUMBER,
    p_cab_orcamento                IN NUMBER,
    /* Retornos */
    r_cab_valorTarifaCartao        OUT NUMBER,
    r_cab_valorMargem              OUT NUMBER,
    r_cab_percentualMargem         OUT NUMBER,
    r_cab_imagemMargem             OUT VARCHAR2)
IS
    v_cab_estabelecimento          NUMBER;
    v_cab_dataEmissao              DATE;
    v_cab_prazoMedioPonderado      NUMBER;
    v_cab_valorFreteTotal          NUMBER;
    v_cab_valorSeguroTotal         NUMBER;
    v_cab_valorAdicFreteMarinTotal NUMBER;
    v_cab_valorDespesasAduanTotal  NUMBER;
    v_cab_valorLiquidoItem         NUMBER;
    v_munEndEst_uf                 CHAR(2);
    v_item_valorLiquidoSemFreteSeg NUMBER;
    v_item_valorCaptacao           NUMBER;
    v_item_valorTarifaCartao       NUMBER;
    v_item_valorImpostos           NUMBER;
    v_item_precoCusto              NUMBER;
    v_item_valorCusto              NUMBER;
    v_item_valorMargem             NUMBER;
    v_item_percentualMargem        NUMBER;
    v_item_imagemMargem            VARCHAR2(256);
    CURSOR c_item IS
      SELECT
        a.sequencia,
        a.cancelado,
        a.idFormulaTinta,
        a.personalizacao,
        a.localEstoque,
        a.pessoaParticipante,
        a.quantidade,
        a.valorFreteTotal,
        a.valorSeguroTotal,
        a.valorAdicFreteMarinhaMerTotal,
        a.valorDespesasAduaneirasTotal,
        a.valorII,
        a.valorIOF,
        a.valorIPI,
        a.valorPIS,
        a.valorPISST,
        a.valorCOFINS,
        a.valorCOFINSST,
        a.valorCreditoSimplesNacional,
        a.valorICMSOperacao,
        a.valorICMSDiferido,
        a.valorICMS,
        a.valorICMSDesoneracao,
        a.valorICMSST,
        a.valorICMSSTAnteriormente,
        a.valorICMSUFDestinatario,
        a.valorICMSUFRemetente,
        a.valorFCP,
        a.valorFCPST,
        a.valorFCPSTAnteriormente,
        a.valorFCPUFDestinatario,
        a.valorLiquidoItem,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        locEst.indicadorPropriedadePosseItem
      FROM MOORCAMENTOXITENS a
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      JOIN PALOCAISESTOQUE locEst ON locEst.localEstoque = a.localEstoque
      WHERE orcamento = p_cab_orcamento;
BEGIN
  r_cab_valorTarifaCartao := FUNC_ADD_TARIFA_CART_ORCAMENTO (p_cab_orcamento);
  r_cab_valorMargem       := 0;
  r_cab_valorMargem       := 0;
  r_cab_percentualMargem  := 0;
  r_cab_imagemMargem      := ' ';
  DELETE TEMPMARGEMCONTRIBUICAO
  WHERE uniqueMachineID = p_uniqueMachineID
  AND orcamentoPredocumentoDocumento = 'O'
  AND idCabecalho = p_cab_orcamento;
  SELECT
    cab.estabelecimento,
    cab.dataEmissao,
    cab.prazoMedioPonderado,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    COALESCE((
      SELECT MAX(munEndEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEndEst
      ON munEndEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1),'  ')
  INTO
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_prazoMedioPonderado,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorAdicFreteMarinTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_munEndEst_uf
  FROM MOORCAMENTOS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  WHERE cab.orcamento = p_cab_orcamento;
  FOR item IN c_item LOOP
    ADD_CALCULA_MARGEM_CONTRIB (
      p_config_65_casasDecEntrada,
      p_config_209_filtrarGrupoEcon,
      p_config_362_calcCustoPorGrade,
      p_regMarg_tipoPreco,
      p_regMarg_tabelaPreco,
      p_regMarg_fatorMultiplicador,
      p_regMarg_tipoPrecoB,
      p_regMarg_tabelaPrecoB,
      p_regMarg_fatorMultiplicadorB,
      p_regMarg_reduzirImpostos,
      p_regMarg_reduzirTarifaCartao,
      p_regMarg_taxaCapitacaoCustoFi,
      p_regMarg_exibImagemMargemItem,
      p_regMarg_regraImagemItem,
      v_cab_estabelecimento,
      v_cab_dataEmissao,
      v_cab_prazoMedioPonderado,
      v_cab_valorLiquidoItem,
      r_cab_valorTarifaCartao,
      v_munEndEst_uf,
      item.idFormulaTinta,
      item.personalizacao,
      item.localEstoque,
      item.pessoaParticipante,
      item.quantidade,
      item.valorFreteTotal,
      item.valorSeguroTotal,
      item.valorAdicFreteMarinhaMerTotal,
      item.valorDespesasAduaneirasTotal,
      item.valorII,
      item.valorIOF,
      item.valorIPI,
      0,
      item.valorPIS,
      item.valorPISST,
      item.valorCOFINS,
      item.valorCOFINSST,
      item.valorCreditoSimplesNacional,
      item.valorICMSOperacao,
      item.valorICMSDiferido,
      item.valorICMS,
      item.valorICMSDesoneracao,
      item.valorICMSST,
      item.valorICMSSTAnteriormente,
      item.valorICMSUFDestinatario,
      item.valorICMSUFRemetente,
      item.valorFCP,
      item.valorFCPST,
      item.valorFCPSTAnteriormente,
      item.valorFCPUFDestinatario,
      item.valorLiquidoItem,
      item.produto,
      item.cor,
      item.tamanho,
      item.controleEstoque,
      item.indicadorPropriedadePosseItem,
      /* Retornos */
      v_item_valorLiquidoSemFreteSeg,
      v_item_valorCaptacao,
      v_item_valorTarifaCartao,
      v_item_valorImpostos,
      v_item_precoCusto,
      v_item_valorCusto,
      v_item_valorMargem,
      v_item_percentualMargem);
    IF p_regMarg_exibImagemMargemItem = 1 AND p_regMarg_regraImagemItem <> 0 THEN
      v_item_imagemMargem := FUNC_ADD_BUSCA_IMAGEM_FAIXA (p_regMarg_regraImagemItem, v_item_percentualMargem);
    ELSE
      v_item_imagemMargem := ' ';
    END IF;
    IF item.cancelado = 0 THEN
      r_cab_valorMargem := r_cab_valorMargem + v_item_valorMargem;
    END IF;
    INSERT INTO TEMPMARGEMCONTRIBUICAO (
      uniqueMachineID,
      orcamentoPredocumentoDocumento,
      idCabecalho,
      sequencia,
      valorLiquidoSemFreteSeguro,
      valorCaptacao,
      valorTarifaCartao,
      valorImpostos,
      precoCusto,
      valorCusto,
      valorMargem,
      percentualMargem,
      imagemMargem
    ) VALUES (
      p_uniqueMachineID,
      'O',
      p_cab_orcamento,
      item.sequencia,
      v_item_valorLiquidoSemFreteSeg,
      v_item_valorCaptacao,
      v_item_valorTarifaCartao,
      v_item_valorImpostos,
      v_item_precoCusto,
      v_item_valorCusto,
      v_item_valorMargem,
      v_item_percentualMargem,
      v_item_imagemMargem);
  END LOOP;
  r_cab_percentualMargem := CASE WHEN v_cab_valorLiquidoItem - v_cab_valorFreteTotal - v_cab_valorSeguroTotal - v_cab_valorAdicFreteMarinTotal - v_cab_valorDespesasAduanTotal = 0 THEN 0 ELSE ROUND ((100 * r_cab_valorMargem / (v_cab_valorLiquidoItem - v_cab_valorFreteTotal - v_cab_valorSeguroTotal - v_cab_valorAdicFreteMarinTotal - v_cab_valorDespesasAduanTotal)), 8) END;
  IF p_regMarg_exibImagemMargemCab = 1 AND p_regMarg_regraImagemCab <> 0 THEN
    r_cab_imagemMargem := FUNC_ADD_BUSCA_IMAGEM_FAIXA (p_regMarg_regraImagemCab, r_cab_percentualMargem);
  END IF;
END ADD_ORCAMENTO_GERA_TEMP_MARGEM;

/

create or replace PROCEDURE ADD_ORCAMENTO_CALC_IMP_ITENS (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_orcamento                IN NUMBER,
    p_cab_origemDocumento          IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataEntradaSaida         IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_cab_localDestinoOperacao     IN CHAR,
    p_cab_indicadorConsumidorFinal IN CHAR,
    p_cab_tipoPagamentoFrete       IN CHAR,
    p_modDoc_diminuiDescontoPrUnit IN NUMBER,
    p_modDoc_somaAcrescimosPrUnit  IN NUMBER,
    p_modDoc_somaFreteSeguroPrUnit IN NUMBER,
    p_pess_indicadorInscricaoEstad IN CHAR,
    /* Retornos */
    r_cab_valorProdutos            OUT NUMBER,
    r_cab_valorServicos            OUT NUMBER,
    r_cab_valorBasePagamento       OUT NUMBER,
    r_cab_valorAVistaMinimo        OUT NUMBER,
    r_cab_valorFreteTotal          OUT NUMBER,
    r_cab_valorSeguroTotal         OUT NUMBER,
    r_cab_valorDescontoTotal       OUT NUMBER,
    r_cab_valorOutrasDespesasTotal OUT NUMBER,
    r_cab_valorAdicFreteMarinTotal OUT NUMBER,
    r_cab_valorDespesasAduanTotal  OUT NUMBER,
    r_cab_valorImpSomaPagamento    OUT NUMBER,
    r_cab_valorImpDiminuiPagamento OUT NUMBER,
    r_cab_valorLiquidoItem         OUT NUMBER)
IS
    v_auxNumber                    NUMBER;
    v_precoUnitario                NUMBER;
    v_precoUnitarioConvertido      NUMBER;
    v_valorProdutoServico          NUMBER;
    v_valorBasePagamento           NUMBER;
    v_valorFreteTotal              NUMBER;
    v_valorSeguroTotal             NUMBER;
    v_valorDescontoTotal           NUMBER;
    v_valorOutrasDespesasTotal     NUMBER;
    v_valorAdicFreteMarinMerTotal  NUMBER;
    v_valorDespesasAduaneirasTotal NUMBER;
    v_baseISSQN                    NUMBER;
    v_valorISSQN                   NUMBER;
    v_baseIRRF                     NUMBER;
    v_valorIRRF                    NUMBER;
    v_baseINSS                     NUMBER;
    v_valorINSS                    NUMBER;
    v_baseRetPIS                   NUMBER;
    v_valorRetPIS                  NUMBER;
    v_baseRetCOFINS                NUMBER;
    v_valorRetCOFINS               NUMBER;
    v_baseRetCSLL                  NUMBER;
    v_valorRetCSLL                 NUMBER;
    v_baseII                       NUMBER;
    v_valorII                      NUMBER;
    v_baseIOF                      NUMBER;
    v_valorIOF                     NUMBER;
    v_baseIPI                      NUMBER;
    v_valorIPI                     NUMBER;
    v_basePIS                      NUMBER;
    v_valorPIS                     NUMBER;
    v_basePISST                    NUMBER;
    v_valorPISST                   NUMBER;
    v_baseCOFINS                   NUMBER;
    v_valorCOFINS                  NUMBER;
    v_baseCOFINSST                 NUMBER;
    v_valorCOFINSST                NUMBER;
    v_baseCreditoSimplesNacional   NUMBER;
    v_valorCreditoSimplesNacional  NUMBER;
    v_baseICMS                     NUMBER;
    v_valorICMSOperacao            NUMBER;
    v_valorICMSDiferido            NUMBER;
    v_valorICMS                    NUMBER;
    v_valorICMSDesoneracao         NUMBER;
    v_baseICMSST                   NUMBER;
    v_valorICMSST                  NUMBER;
    v_baseICMSSTAnteriormente      NUMBER;
    v_valorICMSSTAnteriormente     NUMBER;
    v_valorICMSProprioSubstituto   NUMBER;
    v_baseICMSEfetivo              NUMBER;
    v_valorICMSEfetivo             NUMBER;
    v_baseICMSUFDestinatario       NUMBER;
    v_valorICMSUFDestinatario      NUMBER;
    v_baseICMSUFRemetente          NUMBER;
    v_valorICMSUFRemetente         NUMBER;
    v_baseFCP                      NUMBER;
    v_valorFCP                     NUMBER;
    v_baseFCPST                    NUMBER;
    v_valorFCPST                   NUMBER;
    v_baseFCPSTAnteriormente       NUMBER;
    v_valorFCPSTAnteriormente      NUMBER;
    v_baseFCPUFDestinatario        NUMBER;
    v_valorFCPUFDestinatario       NUMBER;
    v_baseEstimadaImpostos         NUMBER;
    v_valorEstimadoImpFederais     NUMBER;
    v_valorEstimadoImpEstaduais    NUMBER;
    v_valorEstimadoImpMunicipais   NUMBER;
    v_valorImpSomaPagamento        NUMBER;
    v_valorImpDiminuiPagamento     NUMBER;
    v_valorLiquidoItem             NUMBER;
    CURSOR c_item IS
      SELECT
        a.*,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        prod.tipoProduto
      FROM MOORCAMENTOXITENS a
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      WHERE a.orcamento = p_cab_orcamento
      AND a.cancelado = 0
      ORDER BY a.sequencia;
BEGIN
  r_cab_valorProdutos            := 0;
  r_cab_valorServicos            := 0;
  r_cab_valorBasePagamento       := 0;
  r_cab_valorAVistaMinimo        := 0;
  r_cab_valorFreteTotal          := 0;
  r_cab_valorSeguroTotal         := 0;
  r_cab_valorDescontoTotal       := 0;
  r_cab_valorOutrasDespesasTotal := 0;
  r_cab_valorAdicFreteMarinTotal := 0;
  r_cab_valorDespesasAduanTotal  := 0;
  r_cab_valorImpSomaPagamento    := 0;
  r_cab_valorImpDiminuiPagamento := 0;
  r_cab_valorLiquidoItem         := 0;
  FOR item IN c_item LOOP
    v_precoUnitario                := item.precoUnitario;
    v_precoUnitarioConvertido      := item.precoUnitarioConvertido;
    v_valorProdutoServico          := item.valorProdutoServico;
    v_valorBasePagamento           := item.valorBasePagamento;
    v_valorFreteTotal              := item.valorFreteTotal;
    v_valorSeguroTotal             := item.valorSeguroTotal;
    v_valorDescontoTotal           := item.valorDescontoTotal;
    v_valorOutrasDespesasTotal     := item.valorOutrasDespesasTotal;
    v_valorAdicFreteMarinMerTotal  := item.valorAdicFreteMarinhaMerTotal;
    v_valorDespesasAduaneirasTotal := item.valorDespesasAduaneirasTotal;
    v_baseISSQN                    := item.baseISSQN;
    v_valorISSQN                   := item.valorISSQN;
    v_baseIRRF                     := item.baseIRRF;
    v_valorIRRF                    := item.valorIRRF;
    v_baseINSS                     := item.baseINSS;
    v_valorINSS                    := item.valorINSS;
    v_baseRetPIS                   := item.baseRetPIS;
    v_valorRetPIS                  := item.valorRetPIS;
    v_baseRetCOFINS                := item.baseRetCOFINS;
    v_valorRetCOFINS               := item.valorRetCOFINS;
    v_baseRetCSLL                  := item.baseRetCSLL;
    v_valorRetCSLL                 := item.valorRetCSLL;
    v_baseII                       := item.baseII;
    v_valorII                      := item.valorII;
    v_baseIOF                      := item.baseIOF;
    v_valorIOF                     := item.valorIOF;
    v_baseIPI                      := item.baseIPI;
    v_valorIPI                     := item.valorIPI;
    v_basePIS                      := item.basePIS;
    v_valorPIS                     := item.valorPIS;
    v_basePISST                    := item.basePISST;
    v_valorPISST                   := item.valorPISST;
    v_baseCOFINS                   := item.baseCOFINS;
    v_valorCOFINS                  := item.valorCOFINS;
    v_baseCOFINSST                 := item.baseCOFINSST;
    v_valorCOFINSST                := item.valorCOFINSST;
    v_baseCreditoSimplesNacional   := item.baseCreditoSimplesNacional;
    v_valorCreditoSimplesNacional  := item.valorCreditoSimplesNacional;
    v_baseICMS                     := item.baseICMS;
    v_valorICMSOperacao            := item.valorICMSOperacao;
    v_valorICMSDiferido            := item.valorICMSDiferido;
    v_valorICMS                    := item.valorICMS;
    v_valorICMSDesoneracao         := item.valorICMSDesoneracao;
    v_baseICMSST                   := item.baseICMSST;
    v_valorICMSST                  := item.valorICMSST;
    v_baseICMSSTAnteriormente      := item.baseICMSSTAnteriormente;
    v_valorICMSSTAnteriormente     := item.valorICMSSTAnteriormente;
    v_valorICMSProprioSubstituto   := item.valorICMSProprioSubstituto;
    v_baseICMSEfetivo              := item.baseICMSEfetivo;
    v_valorICMSEfetivo             := item.valorICMSEfetivo;
    v_baseICMSUFDestinatario       := item.baseICMSUFDestinatario;
    v_valorICMSUFDestinatario      := item.valorICMSUFDestinatario;
    v_baseICMSUFRemetente          := item.baseICMSUFRemetente;
    v_valorICMSUFRemetente         := item.valorICMSUFRemetente;
    v_baseFCP                      := item.baseFCP;
    v_valorFCP                     := item.valorFCP;
    v_baseFCPST                    := item.baseFCPST;
    v_valorFCPST                   := item.valorFCPST;
    v_baseFCPSTAnteriormente       := item.baseFCPSTAnteriormente;
    v_valorFCPSTAnteriormente      := item.valorFCPSTAnteriormente;
    v_baseFCPUFDestinatario        := item.baseFCPUFDestinatario;
    v_valorFCPUFDestinatario       := item.valorFCPUFDestinatario;
    v_baseEstimadaImpostos         := item.baseEstimadaImpostos;
    v_valorEstimadoImpFederais     := item.valorEstimadoImpFederais;
    v_valorEstimadoImpEstaduais    := item.valorEstimadoImpEstaduais;
    v_valorEstimadoImpMunicipais   := item.valorEstimadoImpMunicipais;
    v_valorImpSomaPagamento        := item.valorImpostosSomaPagamento;
    v_valorImpDiminuiPagamento     := item.valorImpostosDiminuiPagamento;
    v_valorLiquidoItem             := item.valorLiquidoItem;
    ADD_CALCULA_TOTAIS_ITEM(
      p_cab_tipoPagamentoFrete,
      p_modDoc_diminuiDescontoPrUnit,
      p_modDoc_somaAcrescimosPrUnit,
      p_modDoc_somaFreteSeguroPrUnit,
      item.quantidade,
      item.quantidadeConvertida,
      item.precoUnitarioBruto,
      item.acrescimoUnitarioComposicao,
      item.precoUnitario,
      item.valorDescontoItem,
      item.valorAcrescimoItem,
      item.valorFreteItem,
      item.valorSeguroItem,
      item.valorAdicFreteMarinhaMerItem,
      item.valorDespesasAduaneirasItem,
      item.valorFreteGeral,
      item.valorSeguroGeral,
      item.valorDescontoGeral,
      item.valorOutrasDespesasGeral,
      item.valorAdicFreteMarinhaMerGeral,
      item.valorDespesasAduaneirasGeral,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      0,
      0,
      0,
      0,
      /* Retornos */
      v_precoUnitario,
      v_precoUnitarioConvertido,
      v_valorProdutoServico,
      v_auxNumber,
      v_auxNumber,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorAdicFreteMarinMerTotal,
      v_valorDespesasAduaneirasTotal,
      v_auxNumber,
      v_auxNumber);
    ADD_CALCULA_IMPOSTOS_ITEM (
      p_config_64_casasDecSaidas,
      p_config_209_filtrarGrupoEcon,
      p_config_330_redIcmsBasePisCof,
      p_config_362_calcCustoPorGrade,
      p_cab_entradaSaida,
      0,
      p_cab_estabelecimento,
      0,
      p_cab_dataEntradaSaida,
      p_cab_pessoa,
      p_cab_localDestinoOperacao,
      p_cab_indicadorConsumidorFinal,
      p_cab_tipoPagamentoFrete,
      p_pess_indicadorInscricaoEstad,
      item.personalizacao,
      item.quantidade,
      item.precoPautaTabelado,
      v_valorProdutoServico,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorAdicFreteMarinMerTotal,
      v_valorDespesasAduaneirasTotal,
      item.cfop,
      1,
      item.indicadorISSQN,
      item.aliquotaISSQN,
      v_baseISSQN,
      v_valorISSQN,
      1,
      item.aliquotaIRRF,
      v_baseIRRF,
      v_valorIRRF,
      1,
      item.aliquotaINSS,
      v_baseINSS,
      v_valorINSS,
      1,
      item.retencaoPIS,
      v_baseRetPIS,
      v_valorRetPIS,
      1,
      item.retencaoCOFINS,
      v_baseRetCOFINS,
      v_valorRetCOFINS,
      1,
      item.retencaoCSLL,
      v_baseRetCSLL,
      v_valorRetCSLL,
      1,
      item.aliquotaII,
      v_baseII,
      v_valorII,
      1,
      item.aliquotaIOF,
      v_baseIOF,
      v_valorIOF,
      1,
      item.aliquotaIPI,
      item.valorAliquotaIPI,
      v_baseIPI,
      v_valorIPI,
      0,
      1,
      item.aliquotaPIS,
      item.valorAliquotaPIS,
      v_basePIS,
      v_valorPIS,
      1,
      item.aliquotaPISST,
      item.valorAliquotaPISST,
      v_basePISST,
      v_valorPISST,
      1,
      item.aliquotaCOFINS,
      item.valorAliquotaCOFINS,
      v_baseCOFINS,
      v_valorCOFINS,
      1,
      item.aliquotaCOFINSST,
      item.valorAliquotaCOFINSST,
      v_baseCOFINSST,
      v_valorCOFINSST,
      1,
      item.stSimplesNacional,
      item.creditoSimplesNacional,
      v_baseCreditoSimplesNacional,
      v_valorCreditoSimplesNacional,
      1,
      item.stICMS,
      item.modalidadeBaseCalcICMS,
      item.reducaoBaseICMS,
      item.aliquotaICMS,
      item.diferimentoICMS,
      v_baseICMS,
      v_valorICMSOperacao,
      v_valorICMSDiferido,
      v_valorICMS,
      v_valorICMSDesoneracao,
      1,
      item.modalidadeBaseCalcICMSST,
      item.margemValorAdicionadoST,
      item.reducaoBaseST,
      item.aliquotaICMSST,
      v_baseICMSST,
      v_valorICMSST,
      1,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      item.reducaoBaseICMSEfetivo,
      item.aliquotaICMSEfetivo,
      v_baseICMSEfetivo,
      v_valorICMSEfetivo,
      0,
      '  ',
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      1,
      item.aliquotaICMSUFDestinatario,
      item.aliquotaICMSInterestadual,
      item.partilhaICMSInterestadual,
      v_baseICMSUFDestinatario,
      v_valorICMSUFDestinatario,
      v_baseICMSUFRemetente,
      v_valorICMSUFRemetente,
      1,
      item.aliquotaFCP,
      v_baseFCP,
      v_valorFCP,
      item.aliquotaFCPST,
      v_baseFCPST,
      v_valorFCPST,
      item.aliquotaFCPSTAnteriormente,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente,
      item.aliquotaFCPUFDestinatario,
      v_baseFCPUFDestinatario,
      v_valorFCPUFDestinatario,
      1,
      item.aliquotaEstimadaImpFederais,
      item.aliquotaEstimadaImpEstaduais,
      item.aliquotaEstimadaImpMunicipais,
      v_baseEstimadaImpostos,
      v_valorEstimadoImpFederais,
      v_valorEstimadoImpEstaduais,
      v_valorEstimadoImpMunicipais,
      item.produto,
      item.cor,
      item.tamanho,
      item.controleEstoque,
      item.tipoProduto,
      /* Retornos */
      v_baseISSQN,
      v_valorISSQN,
      v_baseIRRF,
      v_valorIRRF,
      v_baseINSS,
      v_valorINSS,
      v_baseRetPIS,
      v_valorRetPIS,
      v_baseRetCOFINS,
      v_valorRetCOFINS,
      v_baseRetCSLL,
      v_valorRetCSLL,
      v_baseII,
      v_valorII,
      v_baseIOF,
      v_valorIOF,
      v_baseIPI,
      v_valorIPI,
      v_basePIS,
      v_valorPIS,
      v_basePISST,
      v_valorPISST,
      v_baseCOFINS,
      v_valorCOFINS,
      v_baseCOFINSST,
      v_valorCOFINSST,
      v_baseCreditoSimplesNacional,
      v_valorCreditoSimplesNacional,
      v_baseICMS,
      v_valorICMSOperacao,
      v_valorICMSDiferido,
      v_valorICMS,
      v_valorICMSDesoneracao,
      v_baseICMSST,
      v_valorICMSST,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      v_baseICMSEfetivo,
      v_valorICMSEfetivo,
      v_auxNumber,
      v_auxNumber,
      v_auxNumber,
      v_auxNumber,
      v_auxNumber,
      v_baseICMSUFDestinatario,
      v_valorICMSUFDestinatario,
      v_baseICMSUFRemetente,
      v_valorICMSUFRemetente,
      v_baseFCP,
      v_valorFCP,
      v_baseFCPST,
      v_valorFCPST,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente,
      v_baseFCPUFDestinatario,
      v_valorFCPUFDestinatario,
      v_baseEstimadaImpostos,
      v_valorEstimadoImpFederais,
      v_valorEstimadoImpEstaduais,
      v_valorEstimadoImpMunicipais);
    ADD_CALCULA_VALOR_LIQUIDO (
      p_cab_origemDocumento,
      0,
      p_cab_tipoPagamentoFrete,
      item.geraFinanceiro,
      v_valorProdutoServico,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorIRRF,
      v_valorINSS,
      v_valorRetPIS,
      v_valorRetCOFINS,
      v_valorRetCSLL,
      v_valorII,
      v_valorIOF,
      v_valorIPI,
      0,
      v_valorICMSST,
      0,
      0,
      0,
      /* Retornos */
      v_valorBasePagamento,
      v_valorImpSomaPagamento,
      v_valorImpDiminuiPagamento,
      v_valorLiquidoItem);
    UPDATE MOORCAMENTOXITENS SET
      precoUnitario                 = v_precoUnitario,
      precoUnitarioConvertido       = v_precoUnitarioConvertido,
      valorProdutoServico           = v_valorProdutoServico,
      valorBasePagamento            = v_valorBasePagamento,
      valorFreteTotal               = v_valorFreteTotal,
      valorSeguroTotal              = v_valorSeguroTotal,
      valorDescontoTotal            = v_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_valorAdicFreteMarinMerTotal,
      valorDespesasAduaneirasTotal  = v_valorDespesasAduaneirasTotal,
      baseISSQN                     = v_baseISSQN,
      valorISSQN                    = v_valorISSQN,
      baseIRRF                      = v_baseIRRF,
      valorIRRF                     = v_valorIRRF,
      baseINSS                      = v_baseINSS,
      valorINSS                     = v_valorINSS,
      baseRetPIS                    = v_baseRetPIS,
      valorRetPIS                   = v_valorRetPIS,
      baseRetCOFINS                 = v_baseRetCOFINS,
      valorRetCOFINS                = v_valorRetCOFINS,
      baseRetCSLL                   = v_baseRetCSLL,
      valorRetCSLL                  = v_valorRetCSLL,
      baseII                        = v_baseII,
      valorII                       = v_valorII,
      baseIOF                       = v_baseIOF,
      valorIOF                      = v_valorIOF,
      baseIPI                       = v_baseIPI,
      valorIPI                      = v_valorIPI,
      basePIS                       = v_basePIS,
      valorPIS                      = v_valorPIS,
      basePISST                     = v_basePISST,
      valorPISST                    = v_valorPISST,
      baseCOFINS                    = v_baseCOFINS,
      valorCOFINS                   = v_valorCOFINS,
      baseCOFINSST                  = v_baseCOFINSST,
      valorCOFINSST                 = v_valorCOFINSST,
      baseCreditoSimplesNacional    = v_baseCreditoSimplesNacional,
      valorCreditoSimplesNacional   = v_valorCreditoSimplesNacional,
      baseICMS                      = v_baseICMS,
      valorICMSOperacao             = v_valorICMSOperacao,
      valorICMSDiferido             = v_valorICMSDiferido,
      valorICMS                     = v_valorICMS,
      valorICMSDesoneracao          = v_valorICMSDesoneracao,
      baseICMSST                    = v_baseICMSST,
      valorICMSST                   = v_valorICMSST,
      baseICMSSTAnteriormente       = v_baseICMSSTAnteriormente,
      valorICMSSTAnteriormente      = v_valorICMSSTAnteriormente,
      valorICMSProprioSubstituto    = v_valorICMSProprioSubstituto,
      baseICMSEfetivo               = v_baseICMSEfetivo,
      valorICMSEfetivo              = v_valorICMSEfetivo,
      baseICMSUFDestinatario        = v_baseICMSUFDestinatario,
      valorICMSUFDestinatario       = v_valorICMSUFDestinatario,
      baseICMSUFRemetente           = v_baseICMSUFRemetente,
      valorICMSUFRemetente          = v_valorICMSUFRemetente,
      baseFCP                       = v_baseFCP,
      valorFCP                      = v_valorFCP,
      baseFCPST                     = v_baseFCPST,
      valorFCPST                    = v_valorFCPST,
      baseFCPSTAnteriormente        = v_baseFCPSTAnteriormente,
      valorFCPSTAnteriormente       = v_valorFCPSTAnteriormente,
      baseFCPUFDestinatario         = v_baseFCPUFDestinatario,
      valorFCPUFDestinatario        = v_valorFCPUFDestinatario,
      baseEstimadaImpostos          = v_baseEstimadaImpostos,
      valorEstimadoImpFederais      = v_valorEstimadoImpFederais,
      valorEstimadoImpEstaduais     = v_valorEstimadoImpEstaduais,
      valorEstimadoImpMunicipais    = v_valorEstimadoImpMunicipais,
      valorImpostosSomaPagamento    = v_valorImpSomaPagamento,
      valorImpostosDiminuiPagamento = v_valorImpDiminuiPagamento,
      valorLiquidoItem              = v_valorLiquidoItem
    WHERE idItemOrcamento           = item.idItemOrcamento;
    IF item.servico = 1 THEN
      r_cab_valorServicos            := r_cab_valorServicos + v_valorProdutoServico;
    ELSE
      r_cab_valorProdutos            := r_cab_valorProdutos + v_valorProdutoServico;
    END IF;
    r_cab_valorBasePagamento       := r_cab_valorBasePagamento + v_valorBasePagamento;
    IF item.usarPrecoAVista = 1 AND item.geraFinanceiro = 1 THEN
      r_cab_valorAVistaMinimo        := r_cab_valorAVistaMinimo + v_valorProdutoServico + item.valorDescontoPagamento - item.valorOutrasDespesasPagamento - item.valorJurosPagamento - v_valorDescontoTotal + v_valorOutrasDespesasTotal;
    END IF;
    r_cab_valorFreteTotal          := r_cab_valorFreteTotal + v_valorFreteTotal;
    r_cab_valorSeguroTotal         := r_cab_valorSeguroTotal + v_valorSeguroTotal;
    r_cab_valorDescontoTotal       := r_cab_valorDescontoTotal + v_valorDescontoTotal;
    r_cab_valorOutrasDespesasTotal := r_cab_valorOutrasDespesasTotal + v_valorOutrasDespesasTotal;
    r_cab_valorAdicFreteMarinTotal := r_cab_valorAdicFreteMarinTotal + v_valorAdicFreteMarinMerTotal;
    r_cab_valorDespesasAduanTotal  := r_cab_valorDespesasAduanTotal + v_valorDespesasAduaneirasTotal;
    r_cab_valorImpSomaPagamento    := r_cab_valorImpSomaPagamento + v_valorImpSomaPagamento;
    r_cab_valorImpDiminuiPagamento := r_cab_valorImpDiminuiPagamento + v_valorImpDiminuiPagamento;
    r_cab_valorLiquidoItem         := r_cab_valorLiquidoItem + v_valorLiquidoItem;
  END LOOP;
END ADD_ORCAMENTO_CALC_IMP_ITENS;

/

create or replace PROCEDURE ADD_ORCAMENTO_CALC_IMP_CAB (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_orcamento                IN NUMBER,
    p_troca_tipoPagamentoFrete     IN NUMBER,
    p_a_cab_tipoPagamentoFrete     IN CHAR)
IS
    v_cab_valorProdutos            NUMBER;
    v_cab_valorServicos            NUMBER;
    v_cab_valorBasePagamento       NUMBER;
    v_cab_valorAVistaMinimo        NUMBER;
    v_cab_valorFreteTotal          NUMBER;
    v_cab_valorSeguroTotal         NUMBER;
    v_cab_valorDescontoTotal       NUMBER;
    v_cab_valorOutrasDespesasTotal NUMBER;
    v_cab_valorAdicFreteMarinTotal NUMBER;
    v_cab_valorDespesasAduanTotal  NUMBER;
    v_cab_valorImpSomaPagamento    NUMBER;
    v_cab_valorImpDiminuiPagamento NUMBER;
    v_cab_valorLiquidoItem         NUMBER;
    v_calcularImpostosItem         NUMBER;
    CURSOR c_cab IS
      SELECT a.*,
        modDoc.diminuiDescontoPrUnit,
        modDoc.somaAcrescimosPrUnit,
        modDoc.somaFreteSeguroPrUnit,
        modDoc.habilitaControleEntrega,
        pess.indicadorInscricaoEstadual,
        COALESCE((
          SELECT MIN(munEndEst.uf)
          FROM PAESTABELECIMENTOS est
          JOIN CAENDERECOSPESSOA endEst ON endEst.pessoa = est.pessoaEstabelecimento
          JOIN SIMUNICIPIOS munEndEst on munEndEst.municipio = endEst.municipio
          WHERE est.estabelecimento = a.estabelecimento
          AND endEst.ativo = 1
          AND endEst.principal = 1
          ),'  ') munEndEst_uf
      FROM MOORCAMENTOS a
      JOIN PAMODELOSDOCUMENTO modDoc ON modDoc.modeloDocumento = a.modeloDocumento
      JOIN CAPESSOAS pess ON pess.pessoa = a.pessoa
      WHERE a.orcamento = p_cab_orcamento;
BEGIN
  FOR cab IN c_cab LOOP
    v_cab_valorProdutos            := cab.valorProdutos;
    v_cab_valorServicos            := cab.valorServicos;
    v_cab_valorBasePagamento       := cab.valorBasePagamento;
    v_cab_valorAVistaMinimo        := cab.valorAVistaMinimo;
    v_cab_valorFreteTotal          := cab.valorFreteTotal;
    v_cab_valorSeguroTotal         := cab.valorSeguroTotal;
    v_cab_valorDescontoTotal       := cab.valorDescontoTotal;
    v_cab_valorOutrasDespesasTotal := cab.valorOutrasDespesasTotal;
    v_cab_valorAdicFreteMarinTotal := cab.valorAdicFreteMarinhaMerTotal;
    v_cab_valorDespesasAduanTotal  := cab.valorDespesasAduaneirasTotal;
    v_cab_valorImpSomaPagamento    := cab.valorImpostosSomaPagamento;
    v_cab_valorImpDiminuiPagamento := cab.valorImpostosDiminuiPagamento;
    v_cab_valorLiquidoItem         := cab.valorLiquidoItem;
    ADD_ORCAMENTO_CALC_IMP_RATEIO (
      cab.orcamento,
      p_troca_tipoPagamentoFrete,
      p_a_cab_tipoPagamentoFrete,
      cab.origemDocumento,
      cab.modeloDocumento,
      cab.entradaSaida,
      cab.atualizaCustoMedio,
      cab.tipoPagamentoFrete,
      cab.valorFreteGeral,
      cab.valorSeguroGeral,
      cab.valorDescontoGeral,
      cab.valorOutrasDespesasGeral,
      cab.valorAdicFreteMarinhaMerGeral,
      cab.valorDespesasAduaneirasGeral,
      cab.valorDescontoPagamento,
      cab.valorOutrasDespesasPagamento,
      cab.valorJurosPagamento,
      cab.impostosEditados,
      cab.diminuiDescontoPrUnit,
      cab.somaAcrescimosPrUnit,
      cab.somaFreteSeguroPrUnit,
      cab.habilitaControleEntrega,
      /* Retornos */
      v_cab_valorProdutos,
      v_cab_valorServicos,
      v_cab_valorBasePagamento,
      v_cab_valorAVistaMinimo,
      v_cab_valorFreteTotal,
      v_cab_valorSeguroTotal,
      v_cab_valorDescontoTotal,
      v_cab_valorOutrasDespesasTotal,
      v_cab_valorAdicFreteMarinTotal,
      v_cab_valorDespesasAduanTotal,
      v_cab_valorImpSomaPagamento,
      v_cab_valorImpDiminuiPagamento,
      v_cab_valorLiquidoItem,
      v_calcularImpostosItem);
    IF v_calcularImpostosItem = 1 THEN
      ADD_ORCAMENTO_CALC_IMP_ITENS(
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_330_redIcmsBasePisCof,
        p_config_362_calcCustoPorGrade,
        cab.orcamento,
        cab.origemDocumento,
        cab.entradaSaida,
        cab.estabelecimento,
        cab.dataEmissao,
        cab.pessoa,
        cab.localDestinoOperacao,
        cab.indicadorConsumidorFinal,
        cab.tipoPagamentoFrete,
        cab.diminuiDescontoPrUnit,
        cab.somaAcrescimosPrUnit,
        cab.somaFreteSeguroPrUnit,
        cab.indicadorInscricaoEstadual,
        /* Retornos */
        v_cab_valorProdutos,
        v_cab_valorServicos,
        v_cab_valorBasePagamento,
        v_cab_valorAVistaMinimo,
        v_cab_valorFreteTotal,
        v_cab_valorSeguroTotal,
        v_cab_valorDescontoTotal,
        v_cab_valorOutrasDespesasTotal,
        v_cab_valorAdicFreteMarinTotal,
        v_cab_valorDespesasAduanTotal,
        v_cab_valorImpSomaPagamento,
        v_cab_valorImpDiminuiPagamento,
        v_cab_valorLiquidoItem);
    END IF;
    UPDATE MOORCAMENTOS SET 
      valorProdutos                 = v_cab_valorProdutos,
      valorServicos                 = v_cab_valorServicos,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarinTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorImpostosSomaPagamento    = v_cab_valorImpSomaPagamento,
      valorImpostosDiminuiPagamento = v_cab_valorImpDiminuiPagamento,
      valorLiquidoItem              = v_cab_valorLiquidoItem
    WHERE orcamento                 = cab.orcamento;
  END LOOP;
END ADD_ORCAMENTO_CALC_IMP_CAB;

/

create or replace PROCEDURE ADD_PRE_DOC_GERA_TEMP_MARGEM (
    p_uniqueMachineID              IN VARCHAR2,
    p_config_65_casasDecEntrada    IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_regMarg_tipoPreco            IN CHAR,
    p_regMarg_tabelaPreco          IN VARCHAR2,
    p_regMarg_fatorMultiplicador   IN NUMBER,
    p_regMarg_tipoPrecoB           IN CHAR,
    p_regMarg_tabelaPrecoB         IN VARCHAR2,
    p_regMarg_fatorMultiplicadorB  IN NUMBER,
    p_regMarg_reduzirImpostos      IN NUMBER,
    p_regMarg_reduzirTarifaCartao  IN NUMBER,
    p_regMarg_taxaCapitacaoCustoFi IN NUMBER,
    p_regMarg_exibImagemMargemCab  IN NUMBER,
    p_regMarg_regraImagemCab       IN NUMBER,
    p_regMarg_exibImagemMargemItem IN NUMBER,
    p_regMarg_regraImagemItem      IN NUMBER,
    p_cab_preDocumento             IN NUMBER,
    /* Retornos */
    r_cab_valorTarifaCartao        OUT NUMBER,
    r_cab_valorMargem              OUT NUMBER,
    r_cab_percentualMargem         OUT NUMBER,
    r_cab_imagemMargem             OUT VARCHAR2)
IS
    v_cab_estabelecimento          NUMBER;
    v_cab_dataEmissao              DATE;
    v_cab_prazoMedioPonderado      NUMBER;
    v_cab_valorFreteTotal          NUMBER;
    v_cab_valorSeguroTotal         NUMBER;
    v_cab_valorAdicFreteMarinTotal NUMBER;
    v_cab_valorDespesasAduanTotal  NUMBER;
    v_cab_valorLiquidoItem         NUMBER;
    v_munEndEst_uf                 CHAR(2);
    v_item_valorLiquidoSemFreteSeg NUMBER;
    v_item_valorCaptacao           NUMBER;
    v_item_valorTarifaCartao       NUMBER;
    v_item_valorImpostos           NUMBER;
    v_item_precoCusto              NUMBER;
    v_item_valorCusto              NUMBER;
    v_item_valorMargem             NUMBER;
    v_item_percentualMargem        NUMBER;
    v_item_imagemMargem            VARCHAR2(256);
    CURSOR c_item IS
      SELECT
        a.sequencia,
        a.cancelado,
        a.idFormulaTinta,
        a.personalizacao,
        a.localEstoque,
        a.pessoaParticipante,
        a.quantidade,
        a.valorFreteTotal,
        a.valorSeguroTotal,
        a.valorAdicFreteMarinhaMerTotal,
        a.valorDespesasAduaneirasTotal,
        a.valorII,
        a.valorIOF,
        a.valorIPI,
        a.valorIPIDevolucao,
        a.valorPIS,
        a.valorPISST,
        a.valorCOFINS,
        a.valorCOFINSST,
        a.valorCreditoSimplesNacional,
        a.valorICMSOperacao,
        a.valorICMSDiferido,
        a.valorICMS,
        a.valorICMSDesoneracao,
        a.valorICMSST,
        a.valorICMSSTAnteriormente,
        a.valorICMSUFDestinatario,
        a.valorICMSUFRemetente,
        a.valorFCP,
        a.valorFCPST,
        a.valorFCPSTAnteriormente,
        a.valorFCPUFDestinatario,
        a.valorLiquidoItem,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        locEst.indicadorPropriedadePosseItem
      FROM MOPREDOCUMXITENS a
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      JOIN PALOCAISESTOQUE locEst ON locEst.localEstoque = a.localEstoque
      WHERE preDocumento = p_cab_preDocumento;
BEGIN
  r_cab_valorTarifaCartao := FUNC_ADD_TARIFA_CART_PRE_DOC (p_cab_preDocumento);
  r_cab_valorMargem       := 0;
  r_cab_valorMargem       := 0;
  r_cab_percentualMargem  := 0;
  r_cab_imagemMargem      := ' ';
  DELETE TEMPMARGEMCONTRIBUICAO
  WHERE uniqueMachineID = p_uniqueMachineID
  AND orcamentoPredocumentoDocumento = 'P'
  AND idCabecalho = p_cab_preDocumento;
  SELECT
    cab.estabelecimento,
    cab.dataEmissao,
    cab.prazoMedioPonderado,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    COALESCE((
      SELECT MAX(munEndEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEndEst
      ON munEndEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1),'  ')
  INTO
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_prazoMedioPonderado,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorAdicFreteMarinTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_munEndEst_uf
  FROM MOPREDOCUMENTOS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  WHERE cab.preDocumento = p_cab_preDocumento;
  FOR item IN c_item LOOP
    ADD_CALCULA_MARGEM_CONTRIB (
      p_config_65_casasDecEntrada,
      p_config_209_filtrarGrupoEcon,
      p_config_362_calcCustoPorGrade,
      p_regMarg_tipoPreco,
      p_regMarg_tabelaPreco,
      p_regMarg_fatorMultiplicador,
      p_regMarg_tipoPrecoB,
      p_regMarg_tabelaPrecoB,
      p_regMarg_fatorMultiplicadorB,
      p_regMarg_reduzirImpostos,
      p_regMarg_reduzirTarifaCartao,
      p_regMarg_taxaCapitacaoCustoFi,
      p_regMarg_exibImagemMargemItem,
      p_regMarg_regraImagemItem,
      v_cab_estabelecimento,
      v_cab_dataEmissao,
      v_cab_prazoMedioPonderado,
      v_cab_valorLiquidoItem,
      r_cab_valorTarifaCartao,
      v_munEndEst_uf,
      item.idFormulaTinta,
      item.personalizacao,
      item.localEstoque,
      item.pessoaParticipante,
      item.quantidade,
      item.valorFreteTotal,
      item.valorSeguroTotal,
      item.valorAdicFreteMarinhaMerTotal,
      item.valorDespesasAduaneirasTotal,
      item.valorII,
      item.valorIOF,
      item.valorIPI,
      item.valorIPIDevolucao,
      item.valorPIS,
      item.valorPISST,
      item.valorCOFINS,
      item.valorCOFINSST,
      item.valorCreditoSimplesNacional,
      item.valorICMSOperacao,
      item.valorICMSDiferido,
      item.valorICMS,
      item.valorICMSDesoneracao,
      item.valorICMSST,
      item.valorICMSSTAnteriormente,
      item.valorICMSUFDestinatario,
      item.valorICMSUFRemetente,
      item.valorFCP,
      item.valorFCPST,
      item.valorFCPSTAnteriormente,
      item.valorFCPUFDestinatario,
      item.valorLiquidoItem,
      item.produto,
      item.cor,
      item.tamanho,
      item.controleEstoque,
      item.indicadorPropriedadePosseItem,
      /* Retornos */
      v_item_valorLiquidoSemFreteSeg,
      v_item_valorCaptacao,
      v_item_valorTarifaCartao,
      v_item_valorImpostos,
      v_item_precoCusto,
      v_item_valorCusto,
      v_item_valorMargem,
      v_item_percentualMargem);
    IF p_regMarg_exibImagemMargemItem = 1 AND p_regMarg_regraImagemItem <> 0 THEN
      v_item_imagemMargem := FUNC_ADD_BUSCA_IMAGEM_FAIXA (p_regMarg_regraImagemItem, v_item_percentualMargem);
    ELSE
      v_item_imagemMargem := ' ';
    END IF;
    IF item.cancelado = 0 THEN
      r_cab_valorMargem := r_cab_valorMargem + v_item_valorMargem;
    END IF;
    INSERT INTO TEMPMARGEMCONTRIBUICAO (
      uniqueMachineID,
      orcamentoPredocumentoDocumento,
      idCabecalho,
      sequencia,
      valorLiquidoSemFreteSeguro,
      valorCaptacao,
      valorTarifaCartao,
      valorImpostos,
      precoCusto,
      valorCusto,
      valorMargem,
      percentualMargem,
      imagemMargem
    ) VALUES (
      p_uniqueMachineID,
      'P',
      p_cab_preDocumento,
      item.sequencia,
      v_item_valorLiquidoSemFreteSeg,
      v_item_valorCaptacao,
      v_item_valorTarifaCartao,
      v_item_valorImpostos,
      v_item_precoCusto,
      v_item_valorCusto,
      v_item_valorMargem,
      v_item_percentualMargem,
      v_item_imagemMargem);
  END LOOP;
  r_cab_percentualMargem := CASE WHEN v_cab_valorLiquidoItem - v_cab_valorFreteTotal - v_cab_valorSeguroTotal - v_cab_valorAdicFreteMarinTotal - v_cab_valorDespesasAduanTotal = 0 THEN 0 ELSE ROUND ((100 * r_cab_valorMargem / (v_cab_valorLiquidoItem - v_cab_valorFreteTotal - v_cab_valorSeguroTotal - v_cab_valorAdicFreteMarinTotal - v_cab_valorDespesasAduanTotal)), 8) END;
  IF p_regMarg_exibImagemMargemCab = 1 AND p_regMarg_regraImagemCab <> 0 THEN
    r_cab_imagemMargem := FUNC_ADD_BUSCA_IMAGEM_FAIXA (p_regMarg_regraImagemCab, r_cab_percentualMargem);
  END IF;
END ADD_PRE_DOC_GERA_TEMP_MARGEM;

/

create or replace PROCEDURE ADD_PRE_DOC_CALC_IMP_ITENS (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_preDocumento             IN NUMBER,
    p_cab_origemDocumento          IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_atualizaCustoMedio       IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataEntradaSaida         IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_cab_localDestinoOperacao     IN CHAR,
    p_cab_indicadorConsumidorFinal IN CHAR,
    p_cab_tipoPagamentoFrete       IN CHAR,
    p_modDoc_diminuiDescontoPrUnit IN NUMBER,
    p_modDoc_somaAcrescimosPrUnit  IN NUMBER,
    p_modDoc_somaFreteSeguroPrUnit IN NUMBER,
    p_pess_indicadorInscricaoEstad IN CHAR,
    /* Retornos */
    r_cab_valorProdutos            OUT NUMBER,
    r_cab_valorServicos            OUT NUMBER,
    r_cab_valorBasePagamento       OUT NUMBER,
    r_cab_valorAVistaMinimo        OUT NUMBER,
    r_cab_valorFreteTotal          OUT NUMBER,
    r_cab_valorSeguroTotal         OUT NUMBER,
    r_cab_valorDescontoTotal       OUT NUMBER,
    r_cab_valorOutrasDespesasTotal OUT NUMBER,
    r_cab_valorAdicFreteMarinTotal OUT NUMBER,
    r_cab_valorDespesasAduanTotal  OUT NUMBER,
    r_cab_valorImpSomaPagamento    OUT NUMBER,
    r_cab_valorImpDiminuiPagamento OUT NUMBER,
    r_cab_valorLiquidoItem         OUT NUMBER,
    r_cab_valorDescCustoOpTotal    OUT NUMBER,
    r_cab_valorAcrescCustoOpTotal  OUT NUMBER,
    r_cab_valorCustoOperacao       OUT NUMBER,
    r_cab_valorCMV                 OUT NUMBER,
    r_cab_valorAcrescExtempTotal   OUT NUMBER)
IS
    v_auxNumber                    NUMBER;
    v_precoUnitario                NUMBER;
    v_precoUnitarioConvertido      NUMBER;
    v_valorProdutoServico          NUMBER;
    v_valorBasePagamento           NUMBER;
    v_valorFreteTotal              NUMBER;
    v_valorSeguroTotal             NUMBER;
    v_valorDescontoTotal           NUMBER;
    v_valorOutrasDespesasTotal     NUMBER;
    v_valorAdicFreteMarinMerTotal  NUMBER;
    v_valorDespesasAduaneirasTotal NUMBER;
    v_baseISSQN                    NUMBER;
    v_valorISSQN                   NUMBER;
    v_baseIRRF                     NUMBER;
    v_valorIRRF                    NUMBER;
    v_baseINSS                     NUMBER;
    v_valorINSS                    NUMBER;
    v_baseRetPIS                   NUMBER;
    v_valorRetPIS                  NUMBER;
    v_baseRetCOFINS                NUMBER;
    v_valorRetCOFINS               NUMBER;
    v_baseRetCSLL                  NUMBER;
    v_valorRetCSLL                 NUMBER;
    v_baseII                       NUMBER;
    v_valorII                      NUMBER;
    v_baseIOF                      NUMBER;
    v_valorIOF                     NUMBER;
    v_baseIPI                      NUMBER;
    v_valorIPI                     NUMBER;
    v_basePIS                      NUMBER;
    v_valorPIS                     NUMBER;
    v_basePISST                    NUMBER;
    v_valorPISST                   NUMBER;
    v_baseCOFINS                   NUMBER;
    v_valorCOFINS                  NUMBER;
    v_baseCOFINSST                 NUMBER;
    v_valorCOFINSST                NUMBER;
    v_baseCreditoSimplesNacional   NUMBER;
    v_valorCreditoSimplesNacional  NUMBER;
    v_baseICMS                     NUMBER;
    v_valorICMSOperacao            NUMBER;
    v_valorICMSDiferido            NUMBER;
    v_valorICMS                    NUMBER;
    v_valorICMSDesoneracao         NUMBER;
    v_baseICMSST                   NUMBER;
    v_valorICMSST                  NUMBER;
    v_baseICMSSTAnteriormente      NUMBER;
    v_valorICMSSTAnteriormente     NUMBER;
    v_valorICMSProprioSubstituto   NUMBER;
    v_baseICMSEfetivo              NUMBER;
    v_valorICMSEfetivo             NUMBER;
    v_baseICMSUFDestinatario       NUMBER;
    v_valorICMSUFDestinatario      NUMBER;
    v_baseICMSUFRemetente          NUMBER;
    v_valorICMSUFRemetente         NUMBER;
    v_baseFCP                      NUMBER;
    v_valorFCP                     NUMBER;
    v_baseFCPST                    NUMBER;
    v_valorFCPST                   NUMBER;
    v_baseFCPSTAnteriormente       NUMBER;
    v_valorFCPSTAnteriormente      NUMBER;
    v_baseFCPUFDestinatario        NUMBER;
    v_valorFCPUFDestinatario       NUMBER;
    v_baseEstimadaImpostos         NUMBER;
    v_valorEstimadoImpFederais     NUMBER;
    v_valorEstimadoImpEstaduais    NUMBER;
    v_valorEstimadoImpMunicipais   NUMBER;
    v_valorImpSomaPagamento        NUMBER;
    v_valorImpDiminuiPagamento     NUMBER;
    v_valorLiquidoItem             NUMBER;
    v_valorDescontoCustoOpTotal    NUMBER;
    v_valorAcrescimoCustoOpTotal   NUMBER;
    v_precoCustoOperacao           NUMBER;
    v_valorCustoOperacao           NUMBER;
    v_precoCMV                     NUMBER;
    v_valorCMV                     NUMBER;
    v_valorAcrescimoExtempSubtotal NUMBER;
    v_valorAcrescimoExtempTotal    NUMBER;
    CURSOR c_item IS
      SELECT
        a.*,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        prod.tipoProduto
      FROM MOPREDOCUMXITENS a
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      WHERE a.preDocumento = p_cab_preDocumento
      AND a.cancelado = 0
      ORDER BY a.sequencia;
BEGIN
  r_cab_valorProdutos            := 0;
  r_cab_valorServicos            := 0;
  r_cab_valorBasePagamento       := 0;
  r_cab_valorAVistaMinimo        := 0;
  r_cab_valorFreteTotal          := 0;
  r_cab_valorSeguroTotal         := 0;
  r_cab_valorDescontoTotal       := 0;
  r_cab_valorOutrasDespesasTotal := 0;
  r_cab_valorAdicFreteMarinTotal := 0;
  r_cab_valorDespesasAduanTotal  := 0;
  r_cab_valorImpSomaPagamento    := 0;
  r_cab_valorImpDiminuiPagamento := 0;
  r_cab_valorLiquidoItem         := 0;
  r_cab_valorDescCustoOpTotal    := 0;
  r_cab_valorAcrescCustoOpTotal  := 0;
  r_cab_valorCustoOperacao       := 0;
  r_cab_valorCMV                 := 0;
  r_cab_valorAcrescExtempTotal   := 0;  
  FOR item IN c_item LOOP
    v_precoUnitario                := item.precoUnitario;
    v_precoUnitarioConvertido      := item.precoUnitarioConvertido;
    v_valorProdutoServico          := item.valorProdutoServico;
    v_valorBasePagamento           := item.valorBasePagamento;
    v_valorFreteTotal              := item.valorFreteTotal;
    v_valorSeguroTotal             := item.valorSeguroTotal;
    v_valorDescontoTotal           := item.valorDescontoTotal;
    v_valorOutrasDespesasTotal     := item.valorOutrasDespesasTotal;
    v_valorAdicFreteMarinMerTotal  := item.valorAdicFreteMarinhaMerTotal;
    v_valorDespesasAduaneirasTotal := item.valorDespesasAduaneirasTotal;
    v_baseISSQN                    := item.baseISSQN;
    v_valorISSQN                   := item.valorISSQN;
    v_baseIRRF                     := item.baseIRRF;
    v_valorIRRF                    := item.valorIRRF;
    v_baseINSS                     := item.baseINSS;
    v_valorINSS                    := item.valorINSS;
    v_baseRetPIS                   := item.baseRetPIS;
    v_valorRetPIS                  := item.valorRetPIS;
    v_baseRetCOFINS                := item.baseRetCOFINS;
    v_valorRetCOFINS               := item.valorRetCOFINS;
    v_baseRetCSLL                  := item.baseRetCSLL;
    v_valorRetCSLL                 := item.valorRetCSLL;
    v_baseII                       := item.baseII;
    v_valorII                      := item.valorII;
    v_baseIOF                      := item.baseIOF;
    v_valorIOF                     := item.valorIOF;
    v_baseIPI                      := item.baseIPI;
    v_valorIPI                     := item.valorIPI;
    v_basePIS                      := item.basePIS;
    v_valorPIS                     := item.valorPIS;
    v_basePISST                    := item.basePISST;
    v_valorPISST                   := item.valorPISST;
    v_baseCOFINS                   := item.baseCOFINS;
    v_valorCOFINS                  := item.valorCOFINS;
    v_baseCOFINSST                 := item.baseCOFINSST;
    v_valorCOFINSST                := item.valorCOFINSST;
    v_baseCreditoSimplesNacional   := item.baseCreditoSimplesNacional;
    v_valorCreditoSimplesNacional  := item.valorCreditoSimplesNacional;
    v_baseICMS                     := item.baseICMS;
    v_valorICMSOperacao            := item.valorICMSOperacao;
    v_valorICMSDiferido            := item.valorICMSDiferido;
    v_valorICMS                    := item.valorICMS;
    v_valorICMSDesoneracao         := item.valorICMSDesoneracao;
    v_baseICMSST                   := item.baseICMSST;
    v_valorICMSST                  := item.valorICMSST;
    v_baseICMSSTAnteriormente      := item.baseICMSSTAnteriormente;
    v_valorICMSSTAnteriormente     := item.valorICMSSTAnteriormente;
    v_valorICMSProprioSubstituto   := item.valorICMSProprioSubstituto;
    v_baseICMSEfetivo              := item.baseICMSEfetivo;
    v_valorICMSEfetivo             := item.valorICMSEfetivo;
    v_baseICMSUFDestinatario       := item.baseICMSUFDestinatario;
    v_valorICMSUFDestinatario      := item.valorICMSUFDestinatario;
    v_baseICMSUFRemetente          := item.baseICMSUFRemetente;
    v_valorICMSUFRemetente         := item.valorICMSUFRemetente;
    v_baseFCP                      := item.baseFCP;
    v_valorFCP                     := item.valorFCP;
    v_baseFCPST                    := item.baseFCPST;
    v_valorFCPST                   := item.valorFCPST;
    v_baseFCPSTAnteriormente       := item.baseFCPSTAnteriormente;
    v_valorFCPSTAnteriormente      := item.valorFCPSTAnteriormente;
    v_baseFCPUFDestinatario        := item.baseFCPUFDestinatario;
    v_valorFCPUFDestinatario       := item.valorFCPUFDestinatario;
    v_baseEstimadaImpostos         := item.baseEstimadaImpostos;
    v_valorEstimadoImpFederais     := item.valorEstimadoImpFederais;
    v_valorEstimadoImpEstaduais    := item.valorEstimadoImpEstaduais;
    v_valorEstimadoImpMunicipais   := item.valorEstimadoImpMunicipais;
    v_valorImpSomaPagamento        := item.valorImpostosSomaPagamento;
    v_valorImpDiminuiPagamento     := item.valorImpostosDiminuiPagamento;
    v_valorLiquidoItem             := item.valorLiquidoItem;
    v_valorDescontoCustoOpTotal    := item.valorDescontoCustoOpTotal;
    v_valorAcrescimoCustoOpTotal   := item.valorAcrescimoCustoOpTotal;
    v_precoCustoOperacao           := item.precoCustoOperacao;
    v_valorCustoOperacao           := item.valorCustoOperacao;
    v_precoCMV                     := item.precoCMV;
    v_valorCMV                     := item.valorCMV;
    v_valorAcrescimoExtempSubtotal := item.valorAcrescimoExtempSubtotal;
    v_valorAcrescimoExtempTotal    := item.valorAcrescimoExtempTotal;
    ADD_CALCULA_TOTAIS_ITEM(
      p_cab_tipoPagamentoFrete,
      p_modDoc_diminuiDescontoPrUnit,
      p_modDoc_somaAcrescimosPrUnit,
      p_modDoc_somaFreteSeguroPrUnit,
      item.quantidade,
      item.quantidadeConvertida,
      item.precoUnitarioBruto,
      item.acrescimoUnitarioComposicao,
      item.precoUnitario,
      item.valorDescontoItem,
      item.valorAcrescimoItem,
      item.valorFreteItem,
      item.valorSeguroItem,
      item.valorAdicFreteMarinhaMerItem,
      item.valorDespesasAduaneirasItem,
      item.valorFreteGeral,
      item.valorSeguroGeral,
      item.valorDescontoGeral,
      item.valorOutrasDespesasGeral,
      item.valorAdicFreteMarinhaMerGeral,
      item.valorDespesasAduaneirasGeral,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      item.quantidadeExtemporanea,
      item.acrescimoUnitarioExtemporaneo,
      item.valorAcrescimoExtempItem,
      item.valorAcrescimoExtempGeral,
      /* Retornos */
      v_precoUnitario,
      v_precoUnitarioConvertido,
      v_valorProdutoServico,
      v_auxNumber,
      v_auxNumber,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorAdicFreteMarinMerTotal,
      v_valorDespesasAduaneirasTotal,
      v_valorAcrescimoExtempSubtotal,
      v_valorAcrescimoExtempTotal);
    ADD_CALCULA_IMPOSTOS_ITEM (
      p_config_64_casasDecSaidas,
      p_config_209_filtrarGrupoEcon,
      p_config_330_redIcmsBasePisCof,
      p_config_362_calcCustoPorGrade,
      p_cab_entradaSaida,
      p_cab_devolucaoAnulacaoRetorno,
      p_cab_estabelecimento,
      0,
      p_cab_dataEntradaSaida,
      p_cab_pessoa,
      p_cab_localDestinoOperacao,
      p_cab_indicadorConsumidorFinal,
      p_cab_tipoPagamentoFrete,
      p_pess_indicadorInscricaoEstad,
      item.personalizacao,
      item.quantidade,
      item.precoPautaTabelado,
      v_valorProdutoServico,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorAdicFreteMarinMerTotal,
      v_valorDespesasAduaneirasTotal,
      item.cfop,
      1,
      item.indicadorISSQN,
      item.aliquotaISSQN,
      v_baseISSQN,
      v_valorISSQN,
      1,
      item.aliquotaIRRF,
      v_baseIRRF,
      v_valorIRRF,
      1,
      item.aliquotaINSS,
      v_baseINSS,
      v_valorINSS,
      1,
      item.retencaoPIS,
      v_baseRetPIS,
      v_valorRetPIS,
      1,
      item.retencaoCOFINS,
      v_baseRetCOFINS,
      v_valorRetCOFINS,
      1,
      item.retencaoCSLL,
      v_baseRetCSLL,
      v_valorRetCSLL,
      1,
      item.aliquotaII,
      v_baseII,
      v_valorII,
      1,
      item.aliquotaIOF,
      v_baseIOF,
      v_valorIOF,
      1,
      item.aliquotaIPI,
      item.valorAliquotaIPI,
      v_baseIPI,
      v_valorIPI,
      item.valorIPIDevolucao,
      1,
      item.aliquotaPIS,
      item.valorAliquotaPIS,
      v_basePIS,
      v_valorPIS,
      1,
      item.aliquotaPISST,
      item.valorAliquotaPISST,
      v_basePISST,
      v_valorPISST,
      1,
      item.aliquotaCOFINS,
      item.valorAliquotaCOFINS,
      v_baseCOFINS,
      v_valorCOFINS,
      1,
      item.aliquotaCOFINSST,
      item.valorAliquotaCOFINSST,
      v_baseCOFINSST,
      v_valorCOFINSST,
      1,
      item.stSimplesNacional,
      item.creditoSimplesNacional,
      v_baseCreditoSimplesNacional,
      v_valorCreditoSimplesNacional,
      1,
      item.stICMS,
      item.modalidadeBaseCalcICMS,
      item.reducaoBaseICMS,
      item.aliquotaICMS,
      item.diferimentoICMS,
      v_baseICMS,
      v_valorICMSOperacao,
      v_valorICMSDiferido,
      v_valorICMS,
      v_valorICMSDesoneracao,
      1,
      item.modalidadeBaseCalcICMSST,
      item.margemValorAdicionadoST,
      item.reducaoBaseST,
      item.aliquotaICMSST,
      v_baseICMSST,
      v_valorICMSST,
      1,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      item.reducaoBaseICMSEfetivo,
      item.aliquotaICMSEfetivo,
      v_baseICMSEfetivo,
      v_valorICMSEfetivo,
      0,
      '  ',
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      0,
      1,
      item.aliquotaICMSUFDestinatario,
      item.aliquotaICMSInterestadual,
      item.partilhaICMSInterestadual,
      v_baseICMSUFDestinatario,
      v_valorICMSUFDestinatario,
      v_baseICMSUFRemetente,
      v_valorICMSUFRemetente,
      1,
      item.aliquotaFCP,
      v_baseFCP,
      v_valorFCP,
      item.aliquotaFCPST,
      v_baseFCPST,
      v_valorFCPST,
      item.aliquotaFCPSTAnteriormente,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente,
      item.aliquotaFCPUFDestinatario,
      v_baseFCPUFDestinatario,
      v_valorFCPUFDestinatario,
      1,
      item.aliquotaEstimadaImpFederais,
      item.aliquotaEstimadaImpEstaduais,
      item.aliquotaEstimadaImpMunicipais,
      v_baseEstimadaImpostos,
      v_valorEstimadoImpFederais,
      v_valorEstimadoImpEstaduais,
      v_valorEstimadoImpMunicipais,
      item.produto,
      item.cor,
      item.tamanho,
      item.controleEstoque,
      item.tipoProduto,
      /* Retornos */
      v_baseISSQN,
      v_valorISSQN,
      v_baseIRRF,
      v_valorIRRF,
      v_baseINSS,
      v_valorINSS,
      v_baseRetPIS,
      v_valorRetPIS,
      v_baseRetCOFINS,
      v_valorRetCOFINS,
      v_baseRetCSLL,
      v_valorRetCSLL,
      v_baseII,
      v_valorII,
      v_baseIOF,
      v_valorIOF,
      v_baseIPI,
      v_valorIPI,
      v_basePIS,
      v_valorPIS,
      v_basePISST,
      v_valorPISST,
      v_baseCOFINS,
      v_valorCOFINS,
      v_baseCOFINSST,
      v_valorCOFINSST,
      v_baseCreditoSimplesNacional,
      v_valorCreditoSimplesNacional,
      v_baseICMS,
      v_valorICMSOperacao,
      v_valorICMSDiferido,
      v_valorICMS,
      v_valorICMSDesoneracao,
      v_baseICMSST,
      v_valorICMSST,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      v_baseICMSEfetivo,
      v_valorICMSEfetivo,
      v_auxNumber,
      v_auxNumber,
      v_auxNumber,
      v_auxNumber,
      v_auxNumber,
      v_baseICMSUFDestinatario,
      v_valorICMSUFDestinatario,
      v_baseICMSUFRemetente,
      v_valorICMSUFRemetente,
      v_baseFCP,
      v_valorFCP,
      v_baseFCPST,
      v_valorFCPST,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente,
      v_baseFCPUFDestinatario,
      v_valorFCPUFDestinatario,
      v_baseEstimadaImpostos,
      v_valorEstimadoImpFederais,
      v_valorEstimadoImpEstaduais,
      v_valorEstimadoImpMunicipais);
    ADD_CALCULA_VALOR_LIQUIDO (
      p_cab_origemDocumento,
      0,
      p_cab_tipoPagamentoFrete,
      item.geraFinanceiro,
      v_valorProdutoServico,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorIRRF,
      v_valorINSS,
      v_valorRetPIS,
      v_valorRetCOFINS,
      v_valorRetCSLL,
      v_valorII,
      v_valorIOF,
      v_valorIPI,
      item.valorIPIDevolucao,
      v_valorICMSST,
      0,
      0,
      v_valorAcrescimoExtempTotal,
      /* Retornos */
      v_valorBasePagamento,
      v_valorImpSomaPagamento,
      v_valorImpDiminuiPagamento,
      v_valorLiquidoItem);
    ADD_CALCULA_CUSTO_CMV (
      p_cab_atualizaCustoMedio,
      0,
      item.modeloDocumento,
      item.quantidade,
      v_valorII,
      v_valorIOF,
      v_valorIPI,
      item.valorIPIDevolucao,
      v_valorPIS,
      v_valorPISST,
      v_valorCOFINS,
      v_valorCOFINSST,
      v_valorCreditoSimplesNacional,
      v_valorICMS,
      v_valorICMSST,
      0,
      v_valorLiquidoItem,
      item.valorDescontoCustoOpItem,
      item.valorDescontoCustoOpGeral,
      item.valorAcrescimoCustoOpItem,
      item.valorAcrescimoCustoOpGeral,
      v_valorAcrescimoExtempTotal,
      /* Retornos */
      v_valorDescontoCustoOpTotal,
      v_valorAcrescimoCustoOpTotal,
      v_precoCustoOperacao,
      v_valorCustoOperacao,
      v_precoCMV,
      v_valorCMV);
    UPDATE MOPREDOCUMXITENS SET
      precoUnitario                 = v_precoUnitario,
      precoUnitarioConvertido       = v_precoUnitarioConvertido,
      valorProdutoServico           = v_valorProdutoServico,
      valorBasePagamento            = v_valorBasePagamento,
      valorFreteTotal               = v_valorFreteTotal,
      valorSeguroTotal              = v_valorSeguroTotal,
      valorDescontoTotal            = v_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_valorAdicFreteMarinMerTotal,
      valorDespesasAduaneirasTotal  = v_valorDespesasAduaneirasTotal,
      baseISSQN                     = v_baseISSQN,
      valorISSQN                    = v_valorISSQN,
      baseIRRF                      = v_baseIRRF,
      valorIRRF                     = v_valorIRRF,
      baseINSS                      = v_baseINSS,
      valorINSS                     = v_valorINSS,
      baseRetPIS                    = v_baseRetPIS,
      valorRetPIS                   = v_valorRetPIS,
      baseRetCOFINS                 = v_baseRetCOFINS,
      valorRetCOFINS                = v_valorRetCOFINS,
      baseRetCSLL                   = v_baseRetCSLL,
      valorRetCSLL                  = v_valorRetCSLL,
      baseII                        = v_baseII,
      valorII                       = v_valorII,
      baseIOF                       = v_baseIOF,
      valorIOF                      = v_valorIOF,
      baseIPI                       = v_baseIPI,
      valorIPI                      = v_valorIPI,
      basePIS                       = v_basePIS,
      valorPIS                      = v_valorPIS,
      basePISST                     = v_basePISST,
      valorPISST                    = v_valorPISST,
      baseCOFINS                    = v_baseCOFINS,
      valorCOFINS                   = v_valorCOFINS,
      baseCOFINSST                  = v_baseCOFINSST,
      valorCOFINSST                 = v_valorCOFINSST,
      baseCreditoSimplesNacional    = v_baseCreditoSimplesNacional,
      valorCreditoSimplesNacional   = v_valorCreditoSimplesNacional,
      baseICMS                      = v_baseICMS,
      valorICMSOperacao             = v_valorICMSOperacao,
      valorICMSDiferido             = v_valorICMSDiferido,
      valorICMS                     = v_valorICMS,
      valorICMSDesoneracao          = v_valorICMSDesoneracao,
      baseICMSST                    = v_baseICMSST,
      valorICMSST                   = v_valorICMSST,
      baseICMSSTAnteriormente       = v_baseICMSSTAnteriormente,
      valorICMSSTAnteriormente      = v_valorICMSSTAnteriormente,
      valorICMSProprioSubstituto    = v_valorICMSProprioSubstituto,
      baseICMSEfetivo               = v_baseICMSEfetivo,
      valorICMSEfetivo              = v_valorICMSEfetivo,
      baseICMSUFDestinatario        = v_baseICMSUFDestinatario,
      valorICMSUFDestinatario       = v_valorICMSUFDestinatario,
      baseICMSUFRemetente           = v_baseICMSUFRemetente,
      valorICMSUFRemetente          = v_valorICMSUFRemetente,
      baseFCP                       = v_baseFCP,
      valorFCP                      = v_valorFCP,
      baseFCPST                     = v_baseFCPST,
      valorFCPST                    = v_valorFCPST,
      baseFCPSTAnteriormente        = v_baseFCPSTAnteriormente,
      valorFCPSTAnteriormente       = v_valorFCPSTAnteriormente,
      baseFCPUFDestinatario         = v_baseFCPUFDestinatario,
      valorFCPUFDestinatario        = v_valorFCPUFDestinatario,
      baseEstimadaImpostos          = v_baseEstimadaImpostos,
      valorEstimadoImpFederais      = v_valorEstimadoImpFederais,
      valorEstimadoImpEstaduais     = v_valorEstimadoImpEstaduais,
      valorEstimadoImpMunicipais    = v_valorEstimadoImpMunicipais,
      valorImpostosSomaPagamento    = v_valorImpSomaPagamento,
      valorImpostosDiminuiPagamento = v_valorImpDiminuiPagamento,
      valorLiquidoItem              = v_valorLiquidoItem,
      valorDescontoCustoOpTotal     = v_valorDescontoCustoOpTotal,
      valorAcrescimoCustoOpTotal    = v_valorAcrescimoCustoOpTotal,
      precoCustoOperacao            = v_precoCustoOperacao,
      valorCustoOperacao            = v_valorCustoOperacao,
      precoCMV                      = v_precoCMV,
      valorCMV                      = v_valorCMV,
      valorAcrescimoExtempSubtotal  = v_valorAcrescimoExtempSubtotal,
      valorAcrescimoExtempTotal     = v_valorAcrescimoExtempTotal
    WHERE idItemPreDocumento        = item.idItemPreDocumento;
    IF item.servico = 1 THEN
      r_cab_valorServicos            := r_cab_valorServicos + v_valorProdutoServico;
    ELSE
      r_cab_valorProdutos            := r_cab_valorProdutos + v_valorProdutoServico;
    END IF;
    r_cab_valorBasePagamento       := r_cab_valorBasePagamento + v_valorBasePagamento;
    IF item.usarPrecoAVista = 1 AND item.geraFinanceiro = 1 THEN
      r_cab_valorAVistaMinimo        := r_cab_valorAVistaMinimo + v_valorProdutoServico + item.valorDescontoPagamento - item.valorOutrasDespesasPagamento - item.valorJurosPagamento - v_valorDescontoTotal + v_valorOutrasDespesasTotal;
    END IF;
    r_cab_valorFreteTotal          := r_cab_valorFreteTotal + v_valorFreteTotal;
    r_cab_valorSeguroTotal         := r_cab_valorSeguroTotal + v_valorSeguroTotal;
    r_cab_valorDescontoTotal       := r_cab_valorDescontoTotal + v_valorDescontoTotal;
    r_cab_valorOutrasDespesasTotal := r_cab_valorOutrasDespesasTotal + v_valorOutrasDespesasTotal;
    r_cab_valorAdicFreteMarinTotal := r_cab_valorAdicFreteMarinTotal + v_valorAdicFreteMarinMerTotal;
    r_cab_valorDespesasAduanTotal  := r_cab_valorDespesasAduanTotal + v_valorDespesasAduaneirasTotal;
    r_cab_valorImpSomaPagamento    := r_cab_valorImpSomaPagamento + v_valorImpSomaPagamento;
    r_cab_valorImpDiminuiPagamento := r_cab_valorImpDiminuiPagamento + v_valorImpDiminuiPagamento;
    r_cab_valorLiquidoItem         := r_cab_valorLiquidoItem + v_valorLiquidoItem;
    r_cab_valorDescCustoOpTotal    := r_cab_valorDescCustoOpTotal + v_valorDescontoCustoOpTotal;
    r_cab_valorAcrescCustoOpTotal  := r_cab_valorAcrescCustoOpTotal + v_valorAcrescimoCustoOpTotal;
    r_cab_valorCustoOperacao       := r_cab_valorCustoOperacao + v_valorCustoOperacao;
    r_cab_valorCMV                 := r_cab_valorCMV + v_valorCMV;
    r_cab_valorAcrescExtempTotal   := r_cab_valorAcrescExtempTotal + v_valorAcrescimoExtempTotal;
  END LOOP;
END ADD_PRE_DOC_CALC_IMP_ITENS;

/

create or replace PROCEDURE ADD_PRE_DOC_CALC_IMP_CAB (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_preDocumento             IN NUMBER,
    p_troca_tipoPagamentoFrete     IN NUMBER,
    p_a_cab_tipoPagamentoFrete     IN CHAR)
    /* Retornos */
IS
    v_cab_valorProdutos            NUMBER;
    v_cab_valorServicos            NUMBER;
    v_cab_valorBasePagamento       NUMBER;
    v_cab_valorAVistaMinimo        NUMBER;
    v_cab_valorFreteTotal          NUMBER;
    v_cab_valorSeguroTotal         NUMBER;
    v_cab_valorDescontoTotal       NUMBER;
    v_cab_valorOutrasDespesasTotal NUMBER;
    v_cab_valorAdicFreteMarinTotal NUMBER;
    v_cab_valorDespesasAduanTotal  NUMBER;
    v_cab_valorImpSomaPagamento    NUMBER;
    v_cab_valorImpDiminuiPagamento NUMBER;
    v_cab_valorLiquidoItem         NUMBER;
    v_cab_valorCustoOperacao       NUMBER;
    v_cab_valorCMV                 NUMBER;
    v_cab_valorDescCustoOpTotal    NUMBER;
    v_cab_valorAcrescCustoOpTotal  NUMBER;
    v_cab_valorAcrescExtempTotal   NUMBER;
    v_calcularImpostosItem         NUMBER;
    v_modDoc_habilitaControleEntr  NUMBER;
    CURSOR c_cab IS
      SELECT a.*,
        modDoc.diminuiDescontoPrUnit,
        modDoc.somaAcrescimosPrUnit,
        modDoc.somaFreteSeguroPrUnit,
        modDoc.habilitaControleEntrega,
        pess.indicadorInscricaoEstadual,
        COALESCE((
          SELECT MIN(munEndEst.uf)
          FROM PAESTABELECIMENTOS est
          JOIN CAENDERECOSPESSOA endEst ON endEst.pessoa = est.pessoaEstabelecimento
          JOIN SIMUNICIPIOS munEndEst on munEndEst.municipio = endEst.municipio
          WHERE est.estabelecimento = a.estabelecimento
          AND endEst.ativo = 1
          AND endEst.principal = 1
          ),'  ') munEndEst_uf
      FROM MOPREDOCUMENTOS a
      JOIN PAMODELOSDOCUMENTO modDoc ON modDoc.modeloDocumento = a.modeloDocumento
      JOIN CAPESSOAS pess ON pess.pessoa = a.pessoa
      WHERE a.preDocumento = p_cab_preDocumento;
BEGIN
  FOR cab IN c_cab LOOP
    v_cab_valorProdutos            := cab.valorProdutos;
    v_cab_valorServicos            := cab.valorServicos;
    v_cab_valorBasePagamento       := cab.valorBasePagamento;
    v_cab_valorAVistaMinimo        := cab.valorAVistaMinimo;
    v_cab_valorFreteTotal          := cab.valorFreteTotal;
    v_cab_valorSeguroTotal         := cab.valorSeguroTotal;
    v_cab_valorDescontoTotal       := cab.valorDescontoTotal;
    v_cab_valorOutrasDespesasTotal := cab.valorOutrasDespesasTotal;
    v_cab_valorAdicFreteMarinTotal := cab.valorAdicFreteMarinhaMerTotal;
    v_cab_valorDespesasAduanTotal  := cab.valorDespesasAduaneirasTotal;
    v_cab_valorImpSomaPagamento    := cab.valorImpostosSomaPagamento;
    v_cab_valorImpDiminuiPagamento := cab.valorImpostosDiminuiPagamento;
    v_cab_valorLiquidoItem         := cab.valorLiquidoItem;
    v_cab_valorDescCustoOpTotal    := cab.valorDescontoCustoOpTotal;
    v_cab_valorAcrescCustoOpTotal  := cab.valorAcrescimoCustoOpTotal;
    v_cab_valorCustoOperacao       := cab.valorCustoOperacao;
    v_cab_valorCMV                 := cab.valorCMV;
    v_cab_valorAcrescExtempTotal   := cab.valorAcrescimoExtempTotal;    
    v_modDoc_habilitaControleEntr  := cab.habilitaControleEntrega;
    IF v_modDoc_habilitaControleEntr = 0 THEN
      SELECT CASE WHEN EXISTS (
        SELECT 1
        FROM MOPREDOCUMXITENS a
        JOIN MOPREDOCUMXORCAMENTOITEM docXorc
        ON docXorc.idItemPreDocumento = a.idItemPreDocumento
        JOIN MOORCAMENTOXITENS itemOrc
        ON itemOrc.idItemOrcamento = docXorc.idItemOrcamento
        JOIN PACONTROLESENTREGA contr
        ON contr.controleEntrega = itemOrc.controleEntrega
        WHERE a.preDocumento = p_cab_preDocumento
        AND itemOrc.controleEntrega <> 0
        AND contr.habilitaFrete = 1) THEN 1 ELSE 0 END
      INTO v_modDoc_habilitaControleEntr
      FROM DUAL;
    END IF;
    ADD_PRE_DOC_CALC_IMP_RATEIO (
      cab.preDocumento,
      p_troca_tipoPagamentoFrete,
      p_a_cab_tipoPagamentoFrete,
      cab.origemDocumento,
      cab.entradaSaida,
      cab.devolucaoAnulacaoRetorno,
      cab.atualizaCustoMedio,
      cab.tipoPagamentoFrete,
      cab.valorFreteGeral,
      cab.valorSeguroGeral,
      cab.valorDescontoGeral,
      cab.valorOutrasDespesasGeral,
      cab.valorAdicFreteMarinhaMerGeral,
      cab.valorDespesasAduaneirasGeral,
      cab.valorDescontoPagamento,
      cab.valorOutrasDespesasPagamento,
      cab.valorJurosPagamento,
      cab.impostosEditados,
      cab.valorDescontoCustoOpGeral,
      cab.valorAcrescimoCustoOpGeral,
      cab.valorAcrescimoExtempGeral,
      cab.diminuiDescontoPrUnit,
      cab.somaAcrescimosPrUnit,
      cab.somaFreteSeguroPrUnit,
      v_modDoc_habilitaControleEntr,
      /* Retornos */
      v_cab_valorProdutos,
      v_cab_valorServicos,
      v_cab_valorBasePagamento,
      v_cab_valorAVistaMinimo,
      v_cab_valorFreteTotal,
      v_cab_valorSeguroTotal,
      v_cab_valorDescontoTotal,
      v_cab_valorOutrasDespesasTotal,
      v_cab_valorAdicFreteMarinTotal,
      v_cab_valorDespesasAduanTotal,
      v_cab_valorImpSomaPagamento,
      v_cab_valorImpDiminuiPagamento,
      v_cab_valorLiquidoItem,
      v_cab_valorDescCustoOpTotal,
      v_cab_valorAcrescCustoOpTotal,
      v_cab_valorCustoOperacao,
      v_cab_valorCMV,
      v_cab_valorAcrescExtempTotal,
      v_calcularImpostosItem);
    IF v_calcularImpostosItem = 1 THEN
      ADD_PRE_DOC_CALC_IMP_ITENS(
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_330_redIcmsBasePisCof,
        p_config_362_calcCustoPorGrade,
        cab.preDocumento,
        cab.origemDocumento,
        cab.entradaSaida,
        cab.devolucaoAnulacaoRetorno,
        cab.atualizaCustoMedio,
        cab.estabelecimento,
        cab.dataEntradaSaida,
        cab.pessoa,
        cab.localDestinoOperacao,
        cab.indicadorConsumidorFinal,
        cab.tipoPagamentoFrete,
        cab.diminuiDescontoPrUnit,
        cab.somaAcrescimosPrUnit,
        cab.somaFreteSeguroPrUnit,
        cab.indicadorInscricaoEstadual,
        /* Retornos */
        v_cab_valorProdutos,
        v_cab_valorServicos,
        v_cab_valorBasePagamento,
        v_cab_valorAVistaMinimo,
        v_cab_valorFreteTotal,
        v_cab_valorSeguroTotal,
        v_cab_valorDescontoTotal,
        v_cab_valorOutrasDespesasTotal,
        v_cab_valorAdicFreteMarinTotal,
        v_cab_valorDespesasAduanTotal,
        v_cab_valorImpSomaPagamento,
        v_cab_valorImpDiminuiPagamento,
        v_cab_valorLiquidoItem,
        v_cab_valorDescCustoOpTotal,
        v_cab_valorAcrescCustoOpTotal,
        v_cab_valorCustoOperacao,
        v_cab_valorCMV,
        v_cab_valorAcrescExtempTotal);
    END IF;
    UPDATE MOPREDOCUMENTOS SET 
      valorProdutos                 = v_cab_valorProdutos,
      valorServicos                 = v_cab_valorServicos,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarinTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorImpostosSomaPagamento    = v_cab_valorImpSomaPagamento,
      valorImpostosDiminuiPagamento = v_cab_valorImpDiminuiPagamento,
      valorLiquidoItem              = v_cab_valorLiquidoItem,
      valorDescontoCustoOpTotal     = v_cab_valorDescCustoOpTotal,
      valorAcrescimoCustoOpTotal    = v_cab_valorAcrescCustoOpTotal,
      valorCustoOperacao            = v_cab_valorCustoOperacao,
      valorCMV                      = v_cab_valorCMV,
      valorAcrescimoExtempTotal     = v_cab_valorAcrescExtempTotal
    WHERE preDocumento              = cab.preDocumento;
  END LOOP;
END ADD_PRE_DOC_CALC_IMP_CAB;

/

create or replace PROCEDURE ADD_DOC_FISC_GERA_TEMP_MARGEM (
    p_uniqueMachineID              IN VARCHAR2,
    p_config_65_casasDecEntrada    IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_regMarg_tipoPreco            IN CHAR,
    p_regMarg_tabelaPreco          IN VARCHAR2,
    p_regMarg_fatorMultiplicador   IN NUMBER,
    p_regMarg_tipoPrecoB           IN CHAR,
    p_regMarg_tabelaPrecoB         IN VARCHAR2,
    p_regMarg_fatorMultiplicadorB  IN NUMBER,
    p_regMarg_reduzirImpostos      IN NUMBER,
    p_regMarg_reduzirTarifaCartao  IN NUMBER,
    p_regMarg_taxaCapitacaoCustoFi IN NUMBER,
    p_regMarg_exibImagemMargemCab  IN NUMBER,
    p_regMarg_regraImagemCab       IN NUMBER,
    p_regMarg_exibImagemMargemItem IN NUMBER,
    p_regMarg_regraImagemItem      IN NUMBER,
    p_cab_idDocumentoFiscal        IN NUMBER,
    /* Retornos */
    r_cab_valorTarifaCartao        OUT NUMBER,
    r_cab_valorMargem              OUT NUMBER,
    r_cab_percentualMargem         OUT NUMBER,
    r_cab_imagemMargem             OUT VARCHAR2)
IS
    v_cab_estabelecimento          NUMBER;
    v_cab_dataEmissao              DATE;
    v_cab_prazoMedioPonderado      NUMBER;
    v_cab_valorFreteTotal          NUMBER;
    v_cab_valorSeguroTotal         NUMBER;
    v_cab_valorAdicFreteMarinTotal NUMBER;
    v_cab_valorDespesasAduanTotal  NUMBER;
    v_cab_valorLiquidoItem         NUMBER;
    v_munEndEst_uf                 CHAR(2);
    v_item_valorLiquidoSemFreteSeg NUMBER;
    v_item_valorCaptacao           NUMBER;
    v_item_valorTarifaCartao       NUMBER;
    v_item_valorImpostos           NUMBER;
    v_item_precoCusto              NUMBER;
    v_item_valorCusto              NUMBER;
    v_item_valorMargem             NUMBER;
    v_item_percentualMargem        NUMBER;
    v_item_imagemMargem            VARCHAR2(256);
    CURSOR c_item IS
      SELECT
        a.sequencia,
        a.cancelado,
        a.idFormulaTinta,
        a.personalizacao,
        a.localEstoque,
        a.pessoaParticipante,
        a.quantidade,
        a.valorFreteTotal,
        a.valorSeguroTotal,
        a.valorAdicFreteMarinhaMerTotal,
        a.valorDespesasAduaneirasTotal,
        a.valorII,
        a.valorIOF,
        a.valorIPI,
        a.valorIPIDevolucao,
        a.valorPIS,
        a.valorPISST,
        a.valorCOFINS,
        a.valorCOFINSST,
        a.valorCreditoSimplesNacional,
        a.valorICMSOperacao,
        a.valorICMSDiferido,
        a.valorICMS,
        a.valorICMSDesoneracao,
        a.valorICMSST,
        a.valorICMSSTAnteriormente,
        a.valorICMSUFDestinatario,
        a.valorICMSUFRemetente,
        a.valorFCP,
        a.valorFCPST,
        a.valorFCPSTAnteriormente,
        a.valorFCPUFDestinatario,
        a.valorLiquidoItem,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        locEst.indicadorPropriedadePosseItem
      FROM MODOCFISCALXITENS a
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      JOIN PALOCAISESTOQUE locEst ON locEst.localEstoque = a.localEstoque
      WHERE idDocumentoFiscal = p_cab_idDocumentoFiscal;
BEGIN
  r_cab_valorTarifaCartao := FUNC_ADD_TARIFA_CART_DOC_FISC (p_cab_idDocumentoFiscal);
  r_cab_valorMargem       := 0;
  r_cab_valorMargem       := 0;
  r_cab_percentualMargem  := 0;
  r_cab_imagemMargem      := ' ';
  DELETE TEMPMARGEMCONTRIBUICAO
  WHERE uniqueMachineID = p_uniqueMachineID
  AND orcamentoPredocumentoDocumento = 'D'
  AND idCabecalho = p_cab_idDocumentoFiscal;
  SELECT
    cab.estabelecimento,
    cab.dataEmissao,
    cab.prazoMedioPonderado,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    COALESCE((
      SELECT MAX(munEndEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEndEst
      ON munEndEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1),'  ')
  INTO
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_prazoMedioPonderado,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorAdicFreteMarinTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_munEndEst_uf
  FROM MODOCUMENTOSFISCAIS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  WHERE cab.idDocumentoFiscal = p_cab_idDocumentoFiscal;
  FOR item IN c_item LOOP
    ADD_CALCULA_MARGEM_CONTRIB (
      p_config_65_casasDecEntrada,
      p_config_209_filtrarGrupoEcon,
      p_config_362_calcCustoPorGrade,
      p_regMarg_tipoPreco,
      p_regMarg_tabelaPreco,
      p_regMarg_fatorMultiplicador,
      p_regMarg_tipoPrecoB,
      p_regMarg_tabelaPrecoB,
      p_regMarg_fatorMultiplicadorB,
      p_regMarg_reduzirImpostos,
      p_regMarg_reduzirTarifaCartao,
      p_regMarg_taxaCapitacaoCustoFi,
      p_regMarg_exibImagemMargemItem,
      p_regMarg_regraImagemItem,
      v_cab_estabelecimento,
      v_cab_dataEmissao,
      v_cab_prazoMedioPonderado,
      v_cab_valorLiquidoItem,
      r_cab_valorTarifaCartao,
      v_munEndEst_uf,
      item.idFormulaTinta,
      item.personalizacao,
      item.localEstoque,
      item.pessoaParticipante,
      item.quantidade,
      item.valorFreteTotal,
      item.valorSeguroTotal,
      item.valorAdicFreteMarinhaMerTotal,
      item.valorDespesasAduaneirasTotal,
      item.valorII,
      item.valorIOF,
      item.valorIPI,
      item.valorIPIDevolucao,
      item.valorPIS,
      item.valorPISST,
      item.valorCOFINS,
      item.valorCOFINSST,
      item.valorCreditoSimplesNacional,
      item.valorICMSOperacao,
      item.valorICMSDiferido,
      item.valorICMS,
      item.valorICMSDesoneracao,
      item.valorICMSST,
      item.valorICMSSTAnteriormente,
      item.valorICMSUFDestinatario,
      item.valorICMSUFRemetente,
      item.valorFCP,
      item.valorFCPST,
      item.valorFCPSTAnteriormente,
      item.valorFCPUFDestinatario,
      item.valorLiquidoItem,
      item.produto,
      item.cor,
      item.tamanho,
      item.controleEstoque,
      item.indicadorPropriedadePosseItem,
      /* Retornos */
      v_item_valorLiquidoSemFreteSeg,
      v_item_valorCaptacao,
      v_item_valorTarifaCartao,
      v_item_valorImpostos,
      v_item_precoCusto,
      v_item_valorCusto,
      v_item_valorMargem,
      v_item_percentualMargem);
    IF p_regMarg_exibImagemMargemItem = 1 AND p_regMarg_regraImagemItem <> 0 THEN
      v_item_imagemMargem := FUNC_ADD_BUSCA_IMAGEM_FAIXA (p_regMarg_regraImagemItem, v_item_percentualMargem);
    ELSE
      v_item_imagemMargem := ' ';
    END IF;
    IF item.cancelado = 0 THEN
      r_cab_valorMargem := r_cab_valorMargem + v_item_valorMargem;
    END IF;
    INSERT INTO TEMPMARGEMCONTRIBUICAO (
      uniqueMachineID,
      orcamentoPredocumentoDocumento,
      idCabecalho,
      sequencia,
      valorLiquidoSemFreteSeguro,
      valorCaptacao,
      valorTarifaCartao,
      valorImpostos,
      precoCusto,
      valorCusto,
      valorMargem,
      percentualMargem,
      imagemMargem
    ) VALUES (
      p_uniqueMachineID,
      'D',
      p_cab_idDocumentoFiscal,
      item.sequencia,
      v_item_valorLiquidoSemFreteSeg,
      v_item_valorCaptacao,
      v_item_valorTarifaCartao,
      v_item_valorImpostos,
      v_item_precoCusto,
      v_item_valorCusto,
      v_item_valorMargem,
      v_item_percentualMargem,
      v_item_imagemMargem);
  END LOOP;
  r_cab_percentualMargem := CASE WHEN v_cab_valorLiquidoItem - v_cab_valorFreteTotal - v_cab_valorSeguroTotal - v_cab_valorAdicFreteMarinTotal - v_cab_valorDespesasAduanTotal = 0 THEN 0 ELSE ROUND ((100 * r_cab_valorMargem / (v_cab_valorLiquidoItem - v_cab_valorFreteTotal - v_cab_valorSeguroTotal - v_cab_valorAdicFreteMarinTotal - v_cab_valorDespesasAduanTotal)), 8) END;
  IF p_regMarg_exibImagemMargemCab = 1 AND p_regMarg_regraImagemCab <> 0 THEN
    r_cab_imagemMargem := FUNC_ADD_BUSCA_IMAGEM_FAIXA (p_regMarg_regraImagemCab, r_cab_percentualMargem);
  END IF;
END ADD_DOC_FISC_GERA_TEMP_MARGEM;

/

create or replace PROCEDURE ADD_DOC_FISC_CALC_IMP_ITENS (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_idDocumentoFiscal        IN NUMBER,
    p_cab_origemDocumento          IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_atualizaCustoMedio       IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_nfFornecedor             IN NUMBER,
    p_cab_dataEntradaSaida         IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_cab_localDestinoOperacao     IN CHAR,
    p_cab_indicadorConsumidorFinal IN CHAR,
    p_cab_tipoPagamentoFrete       IN CHAR,
    p_modDoc_diminuiDescontoPrUnit IN NUMBER,
    p_modDoc_somaAcrescimosPrUnit  IN NUMBER,
    p_modDoc_somaFreteSeguroPrUnit IN NUMBER,
    p_pess_indicadorInscricaoEstad IN CHAR,
    /* Retornos */
    r_cab_valorProdutos            OUT NUMBER,
    r_cab_valorServicos            OUT NUMBER,
    r_cab_valorBasePagamento       OUT NUMBER,
    r_cab_valorAVistaMinimo        OUT NUMBER,
    r_cab_valorFreteTotal          OUT NUMBER,
    r_cab_valorSeguroTotal         OUT NUMBER,
    r_cab_valorDescontoTotal       OUT NUMBER,
    r_cab_valorOutrasDespesasTotal OUT NUMBER,
    r_cab_valorAdicFreteMarinTotal OUT NUMBER,
    r_cab_valorDespesasAduanTotal  OUT NUMBER,
    r_cab_valorImpSomaPagamento    OUT NUMBER,
    r_cab_valorImpDiminuiPagamento OUT NUMBER,
    r_cab_valorLiquidoItem         OUT NUMBER,
    r_cab_valorDescCustoOpTotal    OUT NUMBER,
    r_cab_valorAcrescCustoOpTotal  OUT NUMBER,
    r_cab_valorCustoOperacao       OUT NUMBER,
    r_cab_valorCMV                 OUT NUMBER,
    r_cab_valorAcrescExtempTotal   OUT NUMBER)
IS
    v_auxNumber                    NUMBER;
    v_precoUnitario                NUMBER;
    v_precoUnitarioConvertido      NUMBER;
    v_valorProdutoServico          NUMBER;
    v_valorBasePagamento           NUMBER;
    v_valorFreteTotal              NUMBER;
    v_valorSeguroTotal             NUMBER;
    v_valorDescontoTotal           NUMBER;
    v_valorOutrasDespesasTotal     NUMBER;
    v_valorAdicFreteMarinMerTotal  NUMBER;
    v_valorDespesasAduaneirasTotal NUMBER;
    v_baseISSQN                    NUMBER;
    v_valorISSQN                   NUMBER;
    v_baseIRRF                     NUMBER;
    v_valorIRRF                    NUMBER;
    v_baseINSS                     NUMBER;
    v_valorINSS                    NUMBER;
    v_baseRetPIS                   NUMBER;
    v_valorRetPIS                  NUMBER;
    v_baseRetCOFINS                NUMBER;
    v_valorRetCOFINS               NUMBER;
    v_baseRetCSLL                  NUMBER;
    v_valorRetCSLL                 NUMBER;
    v_baseII                       NUMBER;
    v_valorII                      NUMBER;
    v_baseIOF                      NUMBER;
    v_valorIOF                     NUMBER;
    v_baseIPI                      NUMBER;
    v_valorIPI                     NUMBER;
    v_basePIS                      NUMBER;
    v_valorPIS                     NUMBER;
    v_basePISST                    NUMBER;
    v_valorPISST                   NUMBER;
    v_baseCOFINS                   NUMBER;
    v_valorCOFINS                  NUMBER;
    v_baseCOFINSST                 NUMBER;
    v_valorCOFINSST                NUMBER;
    v_baseCreditoSimplesNacional   NUMBER;
    v_valorCreditoSimplesNacional  NUMBER;
    v_baseICMS                     NUMBER;
    v_valorICMSOperacao            NUMBER;
    v_valorICMSDiferido            NUMBER;
    v_valorICMS                    NUMBER;
    v_valorICMSDesoneracao         NUMBER;
    v_baseICMSST                   NUMBER;
    v_valorICMSST                  NUMBER;
    v_baseICMSSTAnteriormente      NUMBER;
    v_valorICMSSTAnteriormente     NUMBER;
    v_valorICMSProprioSubstituto   NUMBER;
    v_baseICMSEfetivo              NUMBER;
    v_valorICMSEfetivo             NUMBER;
    v_baseICMSEscrituracao         NUMBER;
    v_valorICMSEscrituracao        NUMBER;
    v_valorICMSDesonEscrituracao   NUMBER;
    v_baseICMSSTEscrituracao       NUMBER;
    v_valorICMSSTEscrituracao      NUMBER;
    v_baseICMSUFDestinatario       NUMBER;
    v_valorICMSUFDestinatario      NUMBER;
    v_baseICMSUFRemetente          NUMBER;
    v_valorICMSUFRemetente         NUMBER;
    v_baseFCP                      NUMBER;
    v_valorFCP                     NUMBER;
    v_baseFCPST                    NUMBER;
    v_valorFCPST                   NUMBER;
    v_baseFCPSTAnteriormente       NUMBER;
    v_valorFCPSTAnteriormente      NUMBER;
    v_baseFCPUFDestinatario        NUMBER;
    v_valorFCPUFDestinatario       NUMBER;
    v_baseEstimadaImpostos         NUMBER;
    v_valorEstimadoImpFederais     NUMBER;
    v_valorEstimadoImpEstaduais    NUMBER;
    v_valorEstimadoImpMunicipais   NUMBER;
    v_valorImpSomaPagamento        NUMBER;
    v_valorImpDiminuiPagamento     NUMBER;
    v_valorLiquidoItem             NUMBER;
    v_valorDescontoCustoOpTotal    NUMBER;
    v_valorAcrescimoCustoOpTotal   NUMBER;
    v_precoCustoOperacao           NUMBER;
    v_valorCustoOperacao           NUMBER;
    v_precoCMV                     NUMBER;
    v_valorCMV                     NUMBER;
    v_valorAcrescimoExtempSubtotal NUMBER;
    v_valorAcrescimoExtempTotal    NUMBER;
    CURSOR c_item IS
      SELECT
        a.*,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        prod.tipoProduto
      FROM MODOCFISCALXITENS a
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      WHERE a.idDocumentoFiscal = p_cab_idDocumentoFiscal
      AND a.cancelado = 0
      ORDER BY a.sequencia;
BEGIN  
  r_cab_valorProdutos            := 0;
  r_cab_valorServicos            := 0;
  r_cab_valorBasePagamento       := 0;
  r_cab_valorAVistaMinimo        := 0;
  r_cab_valorFreteTotal          := 0;
  r_cab_valorSeguroTotal         := 0;
  r_cab_valorDescontoTotal       := 0;
  r_cab_valorOutrasDespesasTotal := 0;
  r_cab_valorAdicFreteMarinTotal := 0;
  r_cab_valorDespesasAduanTotal  := 0;
  r_cab_valorImpSomaPagamento    := 0;
  r_cab_valorImpDiminuiPagamento := 0;
  r_cab_valorLiquidoItem         := 0;
  r_cab_valorDescCustoOpTotal    := 0;
  r_cab_valorAcrescCustoOpTotal  := 0;
  r_cab_valorCustoOperacao       := 0;
  r_cab_valorCMV                 := 0;
  r_cab_valorAcrescExtempTotal   := 0;
  FOR item IN c_item LOOP
    v_precoUnitario                := item.precoUnitario;
    v_precoUnitarioConvertido      := item.precoUnitarioConvertido;
    v_valorProdutoServico          := item.valorProdutoServico;
    v_valorBasePagamento           := item.valorBasePagamento;
    v_valorFreteTotal              := item.valorFreteTotal;
    v_valorSeguroTotal             := item.valorSeguroTotal;
    v_valorDescontoTotal           := item.valorDescontoTotal;
    v_valorOutrasDespesasTotal     := item.valorOutrasDespesasTotal;
    v_valorAdicFreteMarinMerTotal  := item.valorAdicFreteMarinhaMerTotal;
    v_valorDespesasAduaneirasTotal := item.valorDespesasAduaneirasTotal;
    v_baseISSQN                    := item.baseISSQN;
    v_valorISSQN                   := item.valorISSQN;
    v_baseIRRF                     := item.baseIRRF;
    v_valorIRRF                    := item.valorIRRF;
    v_baseINSS                     := item.baseINSS;
    v_valorINSS                    := item.valorINSS;
    v_baseRetPIS                   := item.baseRetPIS;
    v_valorRetPIS                  := item.valorRetPIS;
    v_baseRetCOFINS                := item.baseRetCOFINS;
    v_valorRetCOFINS               := item.valorRetCOFINS;
    v_baseRetCSLL                  := item.baseRetCSLL;
    v_valorRetCSLL                 := item.valorRetCSLL;
    v_baseII                       := item.baseII;
    v_valorII                      := item.valorII;
    v_baseIOF                      := item.baseIOF;
    v_valorIOF                     := item.valorIOF;
    v_baseIPI                      := item.baseIPI;
    v_valorIPI                     := item.valorIPI;
    v_basePIS                      := item.basePIS;
    v_valorPIS                     := item.valorPIS;
    v_basePISST                    := item.basePISST;
    v_valorPISST                   := item.valorPISST;
    v_baseCOFINS                   := item.baseCOFINS;
    v_valorCOFINS                  := item.valorCOFINS;
    v_baseCOFINSST                 := item.baseCOFINSST;
    v_valorCOFINSST                := item.valorCOFINSST;
    v_baseCreditoSimplesNacional   := item.baseCreditoSimplesNacional;
    v_valorCreditoSimplesNacional  := item.valorCreditoSimplesNacional;
    v_baseICMS                     := item.baseICMS;
    v_valorICMSOperacao            := item.valorICMSOperacao;
    v_valorICMSDiferido            := item.valorICMSDiferido;
    v_valorICMS                    := item.valorICMS;
    v_valorICMSDesoneracao         := item.valorICMSDesoneracao;
    v_baseICMSST                   := item.baseICMSST;
    v_valorICMSST                  := item.valorICMSST;
    v_baseICMSSTAnteriormente      := item.baseICMSSTAnteriormente;
    v_valorICMSSTAnteriormente     := item.valorICMSSTAnteriormente;
    v_valorICMSProprioSubstituto   := item.valorICMSProprioSubstituto;
    v_baseICMSEfetivo              := item.baseICMSEfetivo;
    v_valorICMSEfetivo             := item.valorICMSEfetivo;
    v_baseICMSEscrituracao         := item.baseICMSEscrituracao;
    v_valorICMSEscrituracao        := item.valorICMSEscrituracao;
    v_valorICMSDesonEscrituracao   := item.valorICMSDesonEscrituracao;
    v_baseICMSSTEscrituracao       := item.baseICMSSTEscrituracao;
    v_valorICMSSTEscrituracao      := item.valorICMSSTEscrituracao;
    v_baseICMSUFDestinatario       := item.baseICMSUFDestinatario;
    v_valorICMSUFDestinatario      := item.valorICMSUFDestinatario;
    v_baseICMSUFRemetente          := item.baseICMSUFRemetente;
    v_valorICMSUFRemetente         := item.valorICMSUFRemetente;
    v_baseFCP                      := item.baseFCP;
    v_valorFCP                     := item.valorFCP;
    v_baseFCPST                    := item.baseFCPST;
    v_valorFCPST                   := item.valorFCPST;
    v_baseFCPSTAnteriormente       := item.baseFCPSTAnteriormente;
    v_valorFCPSTAnteriormente      := item.valorFCPSTAnteriormente;
    v_baseFCPUFDestinatario        := item.baseFCPUFDestinatario;
    v_valorFCPUFDestinatario       := item.valorFCPUFDestinatario;
    v_baseEstimadaImpostos         := item.baseEstimadaImpostos;
    v_valorEstimadoImpFederais     := item.valorEstimadoImpFederais;
    v_valorEstimadoImpEstaduais    := item.valorEstimadoImpEstaduais;
    v_valorEstimadoImpMunicipais   := item.valorEstimadoImpMunicipais;
    v_valorImpSomaPagamento        := item.valorImpostosSomaPagamento;
    v_valorImpDiminuiPagamento     := item.valorImpostosDiminuiPagamento;
    v_valorLiquidoItem             := item.valorLiquidoItem;
    v_valorDescontoCustoOpTotal    := item.valorDescontoCustoOpTotal;
    v_valorAcrescimoCustoOpTotal   := item.valorAcrescimoCustoOpTotal;
    v_precoCustoOperacao           := item.precoCustoOperacao;
    v_valorCustoOperacao           := item.valorCustoOperacao;
    v_precoCMV                     := item.precoCMV;
    v_valorCMV                     := item.valorCMV;
    v_valorAcrescimoExtempSubtotal := item.valorAcrescimoExtempSubtotal;
    v_valorAcrescimoExtempTotal    := item.valorAcrescimoExtempTotal;
    ADD_CALCULA_TOTAIS_ITEM(
      p_cab_tipoPagamentoFrete,
      p_modDoc_diminuiDescontoPrUnit,
      p_modDoc_somaAcrescimosPrUnit,
      p_modDoc_somaFreteSeguroPrUnit,
      item.quantidade,
      item.quantidadeConvertida,
      item.precoUnitarioBruto,
      item.acrescimoUnitarioComposicao,
      item.precoUnitario,
      item.valorDescontoItem,
      item.valorAcrescimoItem,
      item.valorFreteItem,
      item.valorSeguroItem,
      item.valorAdicFreteMarinhaMerItem,
      item.valorDespesasAduaneirasItem,
      item.valorFreteGeral,
      item.valorSeguroGeral,
      item.valorDescontoGeral,
      item.valorOutrasDespesasGeral,
      item.valorAdicFreteMarinhaMerGeral,
      item.valorDespesasAduaneirasGeral,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      item.quantidadeExtemporanea,
      item.acrescimoUnitarioExtemporaneo,
      item.valorAcrescimoExtempItem,
      item.valorAcrescimoExtempGeral,
      /* Retornos */
      v_precoUnitario,
      v_precoUnitarioConvertido,
      v_valorProdutoServico,
      v_auxNumber,
      v_auxNumber,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorAdicFreteMarinMerTotal,
      v_valorDespesasAduaneirasTotal,
      v_valorAcrescimoExtempSubtotal,
      v_valorAcrescimoExtempTotal);
    ADD_CALCULA_IMPOSTOS_ITEM (
      p_config_64_casasDecSaidas,
      p_config_209_filtrarGrupoEcon,
      p_config_330_redIcmsBasePisCof,
      p_config_362_calcCustoPorGrade,
      p_cab_entradaSaida,
      p_cab_devolucaoAnulacaoRetorno,
      p_cab_estabelecimento,
      p_cab_nfFornecedor,
      p_cab_dataEntradaSaida,
      p_cab_pessoa,
      p_cab_localDestinoOperacao,
      p_cab_indicadorConsumidorFinal,
      p_cab_tipoPagamentoFrete,
      p_pess_indicadorInscricaoEstad,
      item.personalizacao,
      item.quantidade,
      item.precoPautaTabelado,
      v_valorProdutoServico,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorAdicFreteMarinMerTotal,
      v_valorDespesasAduaneirasTotal,
      item.cfop,
      1,
      item.indicadorISSQN,
      item.aliquotaISSQN,
      v_baseISSQN,
      v_valorISSQN,
      1,
      item.aliquotaIRRF,
      v_baseIRRF,
      v_valorIRRF,
      1,
      item.aliquotaINSS,
      v_baseINSS,
      v_valorINSS,
      1,
      item.retencaoPIS,
      v_baseRetPIS,
      v_valorRetPIS,
      1,
      item.retencaoCOFINS,
      v_baseRetCOFINS,
      v_valorRetCOFINS,
      1,
      item.retencaoCSLL,
      v_baseRetCSLL,
      v_valorRetCSLL,
      1,
      item.aliquotaII,
      v_baseII,
      v_valorII,
      1,
      item.aliquotaIOF,
      v_baseIOF,
      v_valorIOF,
      1,
      item.aliquotaIPI,
      item.valorAliquotaIPI,
      v_baseIPI,
      v_valorIPI,
      item.valorIPIDevolucao,
      1,
      item.aliquotaPIS,
      item.valorAliquotaPIS,
      v_basePIS,
      v_valorPIS,
      1,
      item.aliquotaPISST,
      item.valorAliquotaPISST,
      v_basePISST,
      v_valorPISST,
      1,
      item.aliquotaCOFINS,
      item.valorAliquotaCOFINS,
      v_baseCOFINS,
      v_valorCOFINS,
      1,
      item.aliquotaCOFINSST,
      item.valorAliquotaCOFINSST,
      v_baseCOFINSST,
      v_valorCOFINSST,
      1,
      item.stSimplesNacional,
      item.creditoSimplesNacional,
      v_baseCreditoSimplesNacional,
      v_valorCreditoSimplesNacional,
      1,
      item.stICMS,
      item.modalidadeBaseCalcICMS,
      item.reducaoBaseICMS,
      item.aliquotaICMS,
      item.diferimentoICMS,
      v_baseICMS,
      v_valorICMSOperacao,
      v_valorICMSDiferido,
      v_valorICMS,
      v_valorICMSDesoneracao,
      1,
      item.modalidadeBaseCalcICMSST,
      item.margemValorAdicionadoST,
      item.reducaoBaseST,
      item.aliquotaICMSST,
      v_baseICMSST,
      v_valorICMSST,
      1,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      item.reducaoBaseICMSEfetivo,
      item.aliquotaICMSEfetivo,
      v_baseICMSEfetivo,
      v_valorICMSEfetivo,
      1,
      item.stICMSEscrituracao,
      item.reducaoBaseICMSEscrituracao,
      item.aliquotaICMSEscrituracao,
      v_baseICMSEscrituracao,
      v_valorICMSEscrituracao,
      v_valorICMSDesonEscrituracao,
      1,
      item.margemValorAdicSTEscrituracao,
      item.reducaoBaseSTEscrituracao,
      item.aliquotaICMSSTEscrituracao,
      v_baseICMSSTEscrituracao,
      v_valorICMSSTEscrituracao,
      1,
      item.aliquotaICMSUFDestinatario,
      item.aliquotaICMSInterestadual,
      item.partilhaICMSInterestadual,
      v_baseICMSUFDestinatario,
      v_valorICMSUFDestinatario,
      v_baseICMSUFRemetente,
      v_valorICMSUFRemetente,
      1,
      item.aliquotaFCP,
      v_baseFCP,
      v_valorFCP,
      item.aliquotaFCPST,
      v_baseFCPST,
      v_valorFCPST,
      item.aliquotaFCPSTAnteriormente,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente,
      item.aliquotaFCPUFDestinatario,
      v_baseFCPUFDestinatario,
      v_valorFCPUFDestinatario,
      1,
      item.aliquotaEstimadaImpFederais,
      item.aliquotaEstimadaImpEstaduais,
      item.aliquotaEstimadaImpMunicipais,
      v_baseEstimadaImpostos,
      v_valorEstimadoImpFederais,
      v_valorEstimadoImpEstaduais,
      v_valorEstimadoImpMunicipais,
      item.produto,
      item.cor,
      item.tamanho,
      item.controleEstoque,
      item.tipoProduto,
      /* Retornos */
      v_baseISSQN,
      v_valorISSQN,
      v_baseIRRF,
      v_valorIRRF,
      v_baseINSS,
      v_valorINSS,
      v_baseRetPIS,
      v_valorRetPIS,
      v_baseRetCOFINS,
      v_valorRetCOFINS,
      v_baseRetCSLL,
      v_valorRetCSLL,
      v_baseII,
      v_valorII,
      v_baseIOF,
      v_valorIOF,
      v_baseIPI,
      v_valorIPI,
      v_basePIS,
      v_valorPIS,
      v_basePISST,
      v_valorPISST,
      v_baseCOFINS,
      v_valorCOFINS,
      v_baseCOFINSST,
      v_valorCOFINSST,
      v_baseCreditoSimplesNacional,
      v_valorCreditoSimplesNacional,
      v_baseICMS,
      v_valorICMSOperacao,
      v_valorICMSDiferido,
      v_valorICMS,
      v_valorICMSDesoneracao,
      v_baseICMSST,
      v_valorICMSST,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      v_baseICMSEfetivo,
      v_valorICMSEfetivo,
      v_baseICMSEscrituracao,
      v_valorICMSEscrituracao,
      v_valorICMSDesonEscrituracao,
      v_baseICMSSTEscrituracao,
      v_valorICMSSTEscrituracao,
      v_baseICMSUFDestinatario,
      v_valorICMSUFDestinatario,
      v_baseICMSUFRemetente,
      v_valorICMSUFRemetente,
      v_baseFCP,
      v_valorFCP,
      v_baseFCPST,
      v_valorFCPST,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente,
      v_baseFCPUFDestinatario,
      v_valorFCPUFDestinatario,
      v_baseEstimadaImpostos,
      v_valorEstimadoImpFederais,
      v_valorEstimadoImpEstaduais,
      v_valorEstimadoImpMunicipais);    
    ADD_CALCULA_VALOR_LIQUIDO (
      p_cab_origemDocumento,
      p_cab_nfFornecedor,
      p_cab_tipoPagamentoFrete,
      item.geraFinanceiro,
      v_valorProdutoServico,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      v_valorFreteTotal,
      v_valorSeguroTotal,
      v_valorDescontoTotal,
      v_valorOutrasDespesasTotal,
      v_valorIRRF,
      v_valorINSS,
      v_valorRetPIS,
      v_valorRetCOFINS,
      v_valorRetCSLL,
      v_valorII,
      v_valorIOF,
      v_valorIPI,
      item.valorIPIDevolucao,
      v_valorICMSST,
      v_valorICMSSTEscrituracao,
      item.somarICMSST,
      v_valorAcrescimoExtempTotal,
      /* Retornos */
      v_valorBasePagamento,
      v_valorImpSomaPagamento,
      v_valorImpDiminuiPagamento,
      v_valorLiquidoItem);
    ADD_CALCULA_CUSTO_CMV (
      p_cab_atualizaCustoMedio,
      p_cab_nfFornecedor,
      item.modeloDocumento,
      item.quantidade,
      v_valorII,
      v_valorIOF,
      v_valorIPI,
      item.valorIPIDevolucao,
      v_valorPIS,
      v_valorPISST,
      v_valorCOFINS,
      v_valorCOFINSST,
      v_valorCreditoSimplesNacional,
      v_valorICMS,
      v_valorICMSST,
      v_valorICMSSTEscrituracao,
      v_valorLiquidoItem,
      item.valorDescontoCustoOpItem,
      item.valorDescontoCustoOpGeral,
      item.valorAcrescimoCustoOpItem,
      item.valorAcrescimoCustoOpGeral,
      v_valorAcrescimoExtempTotal,
      /* Retornos */
      v_valorDescontoCustoOpTotal,
      v_valorAcrescimoCustoOpTotal,
      v_precoCustoOperacao,
      v_valorCustoOperacao,
      v_precoCMV,
      v_valorCMV);
    UPDATE MODOCFISCALXITENS SET
      precoUnitario                 = v_precoUnitario,
      precoUnitarioConvertido       = v_precoUnitarioConvertido,
      valorProdutoServico           = v_valorProdutoServico,
      valorBasePagamento            = v_valorBasePagamento,
      valorFreteTotal               = v_valorFreteTotal,
      valorSeguroTotal              = v_valorSeguroTotal,
      valorDescontoTotal            = v_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_valorAdicFreteMarinMerTotal,
      valorDespesasAduaneirasTotal  = v_valorDespesasAduaneirasTotal,
      baseISSQN                     = v_baseISSQN,
      valorISSQN                    = v_valorISSQN,
      baseIRRF                      = v_baseIRRF,
      valorIRRF                     = v_valorIRRF,
      baseINSS                      = v_baseINSS,
      valorINSS                     = v_valorINSS,
      baseRetPIS                    = v_baseRetPIS,
      valorRetPIS                   = v_valorRetPIS,
      baseRetCOFINS                 = v_baseRetCOFINS,
      valorRetCOFINS                = v_valorRetCOFINS,
      baseRetCSLL                   = v_baseRetCSLL,
      valorRetCSLL                  = v_valorRetCSLL,
      baseII                        = v_baseII,
      valorII                       = v_valorII,
      baseIOF                       = v_baseIOF,
      valorIOF                      = v_valorIOF,
      baseIPI                       = v_baseIPI,
      valorIPI                      = v_valorIPI,
      basePIS                       = v_basePIS,
      valorPIS                      = v_valorPIS,
      basePISST                     = v_basePISST,
      valorPISST                    = v_valorPISST,
      baseCOFINS                    = v_baseCOFINS,
      valorCOFINS                   = v_valorCOFINS,
      baseCOFINSST                  = v_baseCOFINSST,
      valorCOFINSST                 = v_valorCOFINSST,
      baseCreditoSimplesNacional    = v_baseCreditoSimplesNacional,
      valorCreditoSimplesNacional   = v_valorCreditoSimplesNacional,
      baseICMS                      = v_baseICMS,
      valorICMSOperacao             = v_valorICMSOperacao,
      valorICMSDiferido             = v_valorICMSDiferido,
      valorICMS                     = v_valorICMS,
      valorICMSDesoneracao          = v_valorICMSDesoneracao,
      baseICMSST                    = v_baseICMSST,
      valorICMSST                   = v_valorICMSST,
      baseICMSSTAnteriormente       = v_baseICMSSTAnteriormente,
      valorICMSSTAnteriormente      = v_valorICMSSTAnteriormente,
      valorICMSProprioSubstituto    = v_valorICMSProprioSubstituto,
      baseICMSEfetivo               = v_baseICMSEfetivo,
      valorICMSEfetivo              = v_valorICMSEfetivo,
      baseICMSEscrituracao          = v_baseICMSEscrituracao,
      valorICMSEscrituracao         = v_valorICMSEscrituracao,
      valorICMSDesonEscrituracao    = v_valorICMSDesonEscrituracao,
      baseICMSSTEscrituracao        = v_baseICMSSTEscrituracao,
      valorICMSSTEscrituracao       = v_valorICMSSTEscrituracao,
      baseICMSUFDestinatario        = v_baseICMSUFDestinatario,
      valorICMSUFDestinatario       = v_valorICMSUFDestinatario,
      baseICMSUFRemetente           = v_baseICMSUFRemetente,
      valorICMSUFRemetente          = v_valorICMSUFRemetente,
      baseFCP                       = v_baseFCP,
      valorFCP                      = v_valorFCP,
      baseFCPST                     = v_baseFCPST,
      valorFCPST                    = v_valorFCPST,
      baseFCPSTAnteriormente        = v_baseFCPSTAnteriormente,
      valorFCPSTAnteriormente       = v_valorFCPSTAnteriormente,
      baseFCPUFDestinatario         = v_baseFCPUFDestinatario,
      valorFCPUFDestinatario        = v_valorFCPUFDestinatario,
      baseEstimadaImpostos          = v_baseEstimadaImpostos,
      valorEstimadoImpFederais      = v_valorEstimadoImpFederais,
      valorEstimadoImpEstaduais     = v_valorEstimadoImpEstaduais,
      valorEstimadoImpMunicipais    = v_valorEstimadoImpMunicipais,
      valorImpostosSomaPagamento    = v_valorImpSomaPagamento,
      valorImpostosDiminuiPagamento = v_valorImpDiminuiPagamento,
      valorLiquidoItem              = v_valorLiquidoItem,
      valorDescontoCustoOpTotal     = v_valorDescontoCustoOpTotal,
      valorAcrescimoCustoOpTotal    = v_valorAcrescimoCustoOpTotal,
      precoCustoOperacao            = v_precoCustoOperacao,
      valorCustoOperacao            = v_valorCustoOperacao,
      precoCMV                      = v_precoCMV,
      valorCMV                      = v_valorCMV,
      valorAcrescimoExtempSubtotal  = v_valorAcrescimoExtempSubtotal,
      valorAcrescimoExtempTotal     = v_valorAcrescimoExtempTotal
    WHERE idItemDocFiscal           = item.idItemDocFiscal;
    IF item.servico = 1 THEN
      r_cab_valorServicos            := r_cab_valorServicos + v_valorProdutoServico;
    ELSE
      r_cab_valorProdutos            := r_cab_valorProdutos + v_valorProdutoServico;
    END IF;
    r_cab_valorBasePagamento       := r_cab_valorBasePagamento + v_valorBasePagamento;
    IF item.usarPrecoAVista = 1 AND item.geraFinanceiro = 1 THEN
      r_cab_valorAVistaMinimo        := r_cab_valorAVistaMinimo + v_valorProdutoServico + item.valorDescontoPagamento - item.valorOutrasDespesasPagamento - item.valorJurosPagamento - v_valorDescontoTotal + v_valorOutrasDespesasTotal;
    END IF;
    r_cab_valorFreteTotal          := r_cab_valorFreteTotal + v_valorFreteTotal;
    r_cab_valorSeguroTotal         := r_cab_valorSeguroTotal + v_valorSeguroTotal;
    r_cab_valorDescontoTotal       := r_cab_valorDescontoTotal + v_valorDescontoTotal;
    r_cab_valorOutrasDespesasTotal := r_cab_valorOutrasDespesasTotal + v_valorOutrasDespesasTotal;
    r_cab_valorAdicFreteMarinTotal := r_cab_valorAdicFreteMarinTotal + v_valorAdicFreteMarinMerTotal;
    r_cab_valorDespesasAduanTotal  := r_cab_valorDespesasAduanTotal + v_valorDespesasAduaneirasTotal;
    r_cab_valorImpSomaPagamento    := r_cab_valorImpSomaPagamento + v_valorImpSomaPagamento;
    r_cab_valorImpDiminuiPagamento := r_cab_valorImpDiminuiPagamento + v_valorImpDiminuiPagamento;
    r_cab_valorLiquidoItem         := r_cab_valorLiquidoItem + v_valorLiquidoItem;
    r_cab_valorDescCustoOpTotal    := r_cab_valorDescCustoOpTotal + v_valorDescontoCustoOpTotal;
    r_cab_valorAcrescCustoOpTotal  := r_cab_valorAcrescCustoOpTotal + v_valorAcrescimoCustoOpTotal;
    r_cab_valorCustoOperacao       := r_cab_valorCustoOperacao + v_valorCustoOperacao;
    r_cab_valorCMV                 := r_cab_valorCMV + v_valorCMV;
    r_cab_valorAcrescExtempTotal   := r_cab_valorAcrescExtempTotal + v_valorAcrescimoExtempTotal;
  END LOOP;
END ADD_DOC_FISC_CALC_IMP_ITENS;

/

create or replace PROCEDURE ADD_DOC_FISC_CALC_IMP_CAB (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_idDocumentoFiscal        IN NUMBER,
    p_troca_tipoPagamentoFrete     IN NUMBER,
    p_a_cab_tipoPagamentoFrete     IN CHAR)
IS
    v_cab_valorProdutos            NUMBER;
    v_cab_valorServicos            NUMBER;
    v_cab_valorBasePagamento       NUMBER;
    v_cab_valorAVistaMinimo        NUMBER;
    v_cab_valorFreteTotal          NUMBER;
    v_cab_valorSeguroTotal         NUMBER;
    v_cab_valorDescontoTotal       NUMBER;
    v_cab_valorOutrasDespesasTotal NUMBER;
    v_cab_valorAdicFreteMarinTotal NUMBER;
    v_cab_valorDespesasAduanTotal  NUMBER;
    v_cab_valorImpSomaPagamento    NUMBER;
    v_cab_valorImpDiminuiPagamento NUMBER;
    v_cab_valorLiquidoItem         NUMBER;
    v_cab_valorCustoOperacao       NUMBER;
    v_cab_valorCMV                 NUMBER;
    v_cab_valorDescCustoOpTotal    NUMBER;
    v_cab_valorAcrescCustoOpTotal  NUMBER;
    v_cab_valorAcrescExtempTotal   NUMBER;
    v_calcularImpostosItem         NUMBER;
    v_modDoc_habilitaControleEntr  NUMBER;
    CURSOR c_cab IS
      SELECT a.*,
        modDoc.diminuiDescontoPrUnit,
        modDoc.somaAcrescimosPrUnit,
        modDoc.somaFreteSeguroPrUnit,
        modDoc.habilitaControleEntrega,
        pess.indicadorInscricaoEstadual,
        COALESCE((
          SELECT MIN(munEndEst.uf)
          FROM PAESTABELECIMENTOS est
          JOIN CAENDERECOSPESSOA endEst ON endEst.pessoa = est.pessoaEstabelecimento
          JOIN SIMUNICIPIOS munEndEst on munEndEst.municipio = endEst.municipio
          WHERE est.estabelecimento = a.estabelecimento
          AND endEst.ativo = 1
          AND endEst.principal = 1
          ),'  ') munEndEst_uf
      FROM MODOCUMENTOSFISCAIS a
      JOIN PAMODELOSDOCUMENTO modDoc ON modDoc.modeloDocumento = a.modeloDocumento
      JOIN CAPESSOAS pess ON pess.pessoa = a.pessoa
      WHERE a.idDocumentoFiscal = p_cab_idDocumentoFiscal;
BEGIN
  FOR cab IN c_cab LOOP
    v_cab_valorProdutos            := cab.valorProdutos;
    v_cab_valorServicos            := cab.valorServicos;
    v_cab_valorBasePagamento       := cab.valorBasePagamento;
    v_cab_valorAVistaMinimo        := cab.valorAVistaMinimo;
    v_cab_valorFreteTotal          := cab.valorFreteTotal;
    v_cab_valorSeguroTotal         := cab.valorSeguroTotal;
    v_cab_valorDescontoTotal       := cab.valorDescontoTotal;
    v_cab_valorOutrasDespesasTotal := cab.valorOutrasDespesasTotal;
    v_cab_valorAdicFreteMarinTotal := cab.valorAdicFreteMarinhaMerTotal;
    v_cab_valorDespesasAduanTotal  := cab.valorDespesasAduaneirasTotal;
    v_cab_valorImpSomaPagamento    := cab.valorImpostosSomaPagamento;
    v_cab_valorImpDiminuiPagamento := cab.valorImpostosDiminuiPagamento;
    v_cab_valorLiquidoItem         := cab.valorLiquidoItem;
    v_cab_valorDescCustoOpTotal    := cab.valorDescontoCustoOpTotal;
    v_cab_valorAcrescCustoOpTotal  := cab.valorAcrescimoCustoOpTotal;
    v_cab_valorCustoOperacao       := cab.valorCustoOperacao;
    v_cab_valorCMV                 := cab.valorCMV;
    v_cab_valorAcrescExtempTotal   := cab.valorAcrescimoExtempTotal;
    v_modDoc_habilitaControleEntr  := cab.habilitaControleEntrega;
    IF v_modDoc_habilitaControleEntr = 0 THEN
      SELECT CASE WHEN EXISTS (
        SELECT 1
        FROM MODOCFISCALXITENS a
        JOIN MODOCFISCALXORCAMENTOITEM docXorc
        ON docXorc.idItemDocFiscal = a.idItemDocFiscal
        JOIN MOORCAMENTOXITENS itemOrc
        ON itemOrc.idItemOrcamento = docXorc.idItemOrcamento
        JOIN PACONTROLESENTREGA contr
        ON contr.controleEntrega = itemOrc.controleEntrega
        WHERE a.idDocumentoFiscal = p_cab_idDocumentoFiscal
        AND itemOrc.controleEntrega <> 0
        AND contr.habilitaFrete = 1) THEN 1 ELSE 0 END
      INTO v_modDoc_habilitaControleEntr
      FROM DUAL;
    END IF;
    ADD_DOC_FISC_CALC_IMP_RATEIO (
      cab.idDocumentoFiscal,
      p_troca_tipoPagamentoFrete,
      p_a_cab_tipoPagamentoFrete,
      cab.origemDocumento,
      cab.entradaSaida,
      cab.devolucaoAnulacaoRetorno,
      cab.atualizaCustoMedio,
      cab.nfFornecedor,
      cab.tipoPagamentoFrete,
      cab.valorFreteGeral,
      cab.valorSeguroGeral,
      cab.valorDescontoGeral,
      cab.valorOutrasDespesasGeral,
      cab.valorAdicFreteMarinhaMerGeral,
      cab.valorDespesasAduaneirasGeral,
      cab.valorDescontoPagamento,
      cab.valorOutrasDespesasPagamento,
      cab.valorJurosPagamento,
      cab.impostosEditados,
      cab.valorDescontoCustoOpGeral,
      cab.valorAcrescimoCustoOpGeral,
      cab.valorAcrescimoExtempGeral,
      cab.diminuiDescontoPrUnit,
      cab.somaAcrescimosPrUnit,
      cab.somaFreteSeguroPrUnit,
      v_modDoc_habilitaControleEntr,
      /* Retornos */
      v_cab_valorProdutos,
      v_cab_valorServicos,
      v_cab_valorBasePagamento,
      v_cab_valorAVistaMinimo,
      v_cab_valorFreteTotal,
      v_cab_valorSeguroTotal,
      v_cab_valorDescontoTotal,
      v_cab_valorOutrasDespesasTotal,
      v_cab_valorAdicFreteMarinTotal,
      v_cab_valorDespesasAduanTotal,
      v_cab_valorImpSomaPagamento,
      v_cab_valorImpDiminuiPagamento,
      v_cab_valorLiquidoItem,
      v_cab_valorDescCustoOpTotal,
      v_cab_valorAcrescCustoOpTotal,
      v_cab_valorCustoOperacao,
      v_cab_valorCMV,
      v_cab_valorAcrescExtempTotal,
      v_calcularImpostosItem);
    IF v_calcularImpostosItem = 1 THEN
      ADD_DOC_FISC_CALC_IMP_ITENS(
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_330_redIcmsBasePisCof,
        p_config_362_calcCustoPorGrade,
        cab.idDocumentoFiscal,
        cab.origemDocumento,
        cab.entradaSaida,
        cab.devolucaoAnulacaoRetorno,
        cab.atualizaCustoMedio,
        cab.estabelecimento,
        cab.nfFornecedor,
        cab.dataEntradaSaida,
        cab.pessoa,
        cab.localDestinoOperacao,
        cab.indicadorConsumidorFinal,
        cab.tipoPagamentoFrete,
        cab.diminuiDescontoPrUnit,
        cab.somaAcrescimosPrUnit,
        cab.somaFreteSeguroPrUnit,
        cab.indicadorInscricaoEstadual,
        /* Retornos */
        v_cab_valorProdutos,
        v_cab_valorServicos,
        v_cab_valorBasePagamento,
        v_cab_valorAVistaMinimo,
        v_cab_valorFreteTotal,
        v_cab_valorSeguroTotal,
        v_cab_valorDescontoTotal,
        v_cab_valorOutrasDespesasTotal,
        v_cab_valorAdicFreteMarinTotal,
        v_cab_valorDespesasAduanTotal,
        v_cab_valorImpSomaPagamento,
        v_cab_valorImpDiminuiPagamento,
        v_cab_valorLiquidoItem,
        v_cab_valorDescCustoOpTotal,
        v_cab_valorAcrescCustoOpTotal,
        v_cab_valorCustoOperacao,
        v_cab_valorCMV,
        v_cab_valorAcrescExtempTotal);
    END IF;
    UPDATE MODOCUMENTOSFISCAIS SET 
      valorProdutos                 = v_cab_valorProdutos,
      valorServicos                 = v_cab_valorServicos,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarinTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorImpostosSomaPagamento    = v_cab_valorImpSomaPagamento,
      valorImpostosDiminuiPagamento = v_cab_valorImpDiminuiPagamento,
      valorLiquidoItem              = v_cab_valorLiquidoItem,
      valorDescontoCustoOpTotal     = v_cab_valorDescCustoOpTotal,
      valorAcrescimoCustoOpTotal    = v_cab_valorAcrescCustoOpTotal,
      valorCustoOperacao            = v_cab_valorCustoOperacao,
      valorCMV                      = v_cab_valorCMV,
      valorAcrescimoExtempTotal     = v_cab_valorAcrescExtempTotal
    WHERE idDocumentoFiscal         = cab.idDocumentoFiscal;
  END LOOP;
END ADD_DOC_FISC_CALC_IMP_CAB;

/

UPDATE PACONTASBANCARIASCAIXAS a
SET a.codigoCedente = (SELECT MAX (b.convenio) FROM PACARTFINANCXESTABELECIM b WHERE b.contaBancariaCaixa = a.contaBancariaCaixa AND b.ativo = 1 AND b.convenio <> ' ')
WHERE a.codigoCedente = ' '
AND a.contaBancariaCaixa <> 0
AND EXISTS (SELECT 1 FROM PACARTFINANCXESTABELECIM b WHERE b.contaBancariaCaixa = a.contaBancariaCaixa AND b.ativo = 1 AND b.convenio <> ' ');

COMMIT;

CREATE TABLE PACARTFINANCXESTABELECIM_2301 AS SELECT * FROM PACARTFINANCXESTABELECIM;

DROP TABLE PACARTFINANCXESTABELECIM;

-- PACARTFINANCXESTABELECIM
CREATE TABLE PACARTFINANCXESTABELECIM
  (
    id                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    carteiraFinanceira         NUMERIC (4,0) DEFAULT 0 NOT NULL,
    estabelecimento            NUMERIC (4,0) DEFAULT 0 NOT NULL,
    ativo                      NUMERIC (1,0) DEFAULT 0 NOT NULL,
    contaBancariaCaixa         NUMERIC (4,0) DEFAULT 0 NOT NULL,
    meioPagamentoBaixa         NUMERIC (2,0) DEFAULT 0 NOT NULL,
    diasParaCompensacao        NUMERIC (6,0) DEFAULT 0 NOT NULL,
    compensacaoAutomatica      NUMERIC (1,0) DEFAULT 0 NOT NULL,
    codigoTransmissao          VARCHAR (20) DEFAULT ' ' NOT NULL,
    carteira                   CHAR (4) DEFAULT '    ' NOT NULL,
    variacaoCarteira           VARCHAR (15) DEFAULT ' ' NOT NULL,
    especie                    CHAR (3) DEFAULT '   ' NOT NULL,
    moeda                      CHAR (3) DEFAULT '   ' NOT NULL,
    instrucaoA                 CHAR (3) DEFAULT '   ' NOT NULL,
    instrucaoB                 CHAR (3) DEFAULT '   ' NOT NULL,
    naoReceberApos             NUMERIC (6,0) DEFAULT 0 NOT NULL,
    protestarApos              NUMERIC (6,0) DEFAULT 0 NOT NULL,
    comando                    CHAR (3) DEFAULT '   ' NOT NULL,
    aceite                     CHAR (3) DEFAULT '   ' NOT NULL,
    boletoTextoA               VARCHAR (256) DEFAULT ' ' NOT NULL,
    boletoTextoB               VARCHAR (256) DEFAULT ' ' NOT NULL,
    boletoTextoC               VARCHAR (256) DEFAULT ' ' NOT NULL,
    boletoTextoD               VARCHAR (256) DEFAULT ' ' NOT NULL,
    boletoTextoE               VARCHAR (256) DEFAULT ' ' NOT NULL,
    carteiraFinanceiraProtesto NUMERIC (4,0) DEFAULT 0 NOT NULL,
    classificacaoPessoa        VARCHAR (3) DEFAULT ' ' NOT NULL,
    diretorioRemessa           VARCHAR (256) DEFAULT ' ' NOT NULL,
    basicAuthorization         VARCHAR (600) DEFAULT ' ' NOT NULL,
    applicationKey             VARCHAR (256) DEFAULT ' ' NOT NULL,
    tipoChavePix               NUMERIC (3,0) DEFAULT 0 NOT NULL,
    chavePix                   VARCHAR (600) DEFAULT ' ' NOT NULL,
    segundosExpiracao          NUMERIC (14,0) DEFAULT 0 NOT NULL,
    observacoes                VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PACARTFINANCXESTABELECIM_K2 ON PACARTFINANCXESTABELECIM (carteiraFinanceira, estabelecimento);

INSERT INTO PACARTFINANCXESTABELECIM (id, carteiraFinanceira, estabelecimento, ativo, contaBancariaCaixa, meioPagamentoBaixa, diasParaCompensacao, compensacaoAutomatica, codigoTransmissao, carteira, variacaoCarteira, especie, moeda, instrucaoA, instrucaoB, naoReceberApos, protestarApos, comando, aceite, boletoTextoA, boletoTextoB, boletoTextoC, boletoTextoD, boletoTextoE, carteiraFinanceiraProtesto, classificacaoPessoa, diretorioRemessa, basicAuthorization, applicationKey, tipoChavePix, chavePix, segundosExpiracao, observacoes) VALUES (0, 0, 0, 1, 0, 0, 0, 0, ' ', '    ', ' ', '   ', '   ', '   ', '   ', 0, 0, '   ', '   ', ' ', ' ', ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', 0, ' ', 0, ' ');
INSERT INTO PACARTFINANCXESTABELECIM (id, carteiraFinanceira, estabelecimento, ativo, contaBancariaCaixa, meioPagamentoBaixa, diasParaCompensacao, compensacaoAutomatica, codigoTransmissao, carteira, variacaoCarteira, especie, moeda, instrucaoA, instrucaoB, naoReceberApos, protestarApos, comando, aceite, boletoTextoA, boletoTextoB, boletoTextoC, boletoTextoD, boletoTextoE, carteiraFinanceiraProtesto, classificacaoPessoa, diretorioRemessa, basicAuthorization, applicationKey, tipoChavePix, chavePix, segundosExpiracao, observacoes) SELECT id, carteiraFinanceira, estabelecimento, ativo, contaBancariaCaixa, meioPagamentoBaixa, diasParaCompensacao, compensacaoAutomatica, codigoTransmissao, carteira, variacaoCarteira, especie, moeda, instrucaoA, instrucaoB, 0, protestarApos, comando, aceite, boletoTextoA, boletoTextoB, boletoTextoC, boletoTextoD, boletoTextoE, carteiraFinanceiraProtesto, classificacaoPessoa, diretorioRemessa, basicAuthorization, applicationKey, tipoChavePix, chavePix, segundosExpiracao, observacoes FROM PACARTFINANCXESTABELECIM_2301 WHERE id <> 0;

COMMIT;

ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK1 FOREIGN KEY (carteiraFinanceira) REFERENCES PACARTEIRASFINANCEIRAS (carteiraFinanceira);
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK2 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK3 FOREIGN KEY (contaBancariaCaixa) REFERENCES PACONTASBANCARIASCAIXAS (contaBancariaCaixa);
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK4 FOREIGN KEY (meioPagamentoBaixa) REFERENCES SIMEIOSPAGAMENTO (meioPagamento);
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK5 FOREIGN KEY (carteiraFinanceiraProtesto) REFERENCES PACARTEIRASFINANCEIRAS (carteiraFinanceira);
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK6 FOREIGN KEY (classificacaoPessoa) REFERENCES PACLASSIFICACOESPESSOA (classificacaoPessoa);
ALTER TABLE PACARTFINANCXESTABELECIM ADD CONSTRAINT PACARTFINANCXESTABELECIM_FK7 FOREIGN KEY (tipoChavePix) REFERENCES SITIPOSCHAVEPIX (tipoChavePix);

UPDATE SINCMS SET ativo = 0 WHERE idNcm IN (39081024000,40022090000,87149310000,87149600000,90183924000,47032100000);

COMMIT;

INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (39081025000, '39081025','   ', 'Poliamidas em formas primárias. - Poliamida-6, -11, -12, -6,6, -6,9, -6,10 ou -6,12 Nas formas previstas na Nota 6 b) deste Capítulo Poliamida-6, sem carga', 1, '3908102', 2806400, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (39081026000, '39081026','   ', 'Poliamidas em formas primárias. - Poliamida-6, -11, -12, -6,6, -6,9, -6,10 ou -6,12 Nas formas previstas na Nota 6 b) deste Capítulo Poliamida-6,6, sem carga', 1, '3908102', 2806400, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (40022091000, '40022091','   ', 'Borracha sintética e borracha artificial derivada dos óleos, em formas primárias ou em chapas, folhas ou tiras; misturas dos produtos da posição 40.01 com produtos da presente posição, em formas primárias ou em chapas, folhas ou tiras. - Borracha de but...', 1, '400220', 2806100, 'Borracha sintética e borracha artificial derivada dos óleos, em formas primárias ou em chapas, folhas ou tiras; misturas dos produtos da posição 40.01 com produtos da presente posição, em formas primárias ou em chapas, folhas ou tiras. - Borracha de butadieno (BR) 1,2-polibutadieno sindiotáctico');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (40022099000, '40022099','   ', 'Borracha sintética e borracha artificial derivada dos óleos, em formas primárias ou em chapas, folhas ou tiras; misturas dos produtos da posição 40.01 com produtos da presente posição, em formas primárias ou em chapas, folhas ou tiras. - Borracha de but...', 1, '400220', 2806100, 'Borracha sintética e borracha artificial derivada dos óleos, em formas primárias ou em chapas, folhas ou tiras; misturas dos produtos da posição 40.01 com produtos da presente posição, em formas primárias ou em chapas, folhas ou tiras. - Borracha de butadieno (BR) Outras');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149311000, '87149311','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Cubos, exceto de freios (travões), e pinhões de rodas livres Cubos, exceto de freios (travões) Sem rosca, para pinhões do tipo cassete', 1, '871493', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149319000, '87149319','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Cubos, exceto de freios (travões), e pinhões de rodas livres Cubos, exceto de freios (travões) Outras', 1, '871493', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149611000, '87149611','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Pedais e pedaleiros, e suas partes - Pedaleiros com pedivelas de peça única (monobloco)', 1, '87149', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149612000, '87149612','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Pedais e pedaleiros, e suas partes - Pedivelas de peça única (monobloco)', 1, '87149', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149619000, '87149619','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Pedais e pedaleiros, e suas partes - Outros', 1, '87149', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149690000, '87149690','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Pedais e pedaleiros, e suas partes - Outros - Outros', 1, '87149', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (87149920000, '87149920','   ', 'Partes e acessórios dos veículos das posições 87.11 a 87.13. - Outros: -- Outros Caixas de direção sem rosca', 1, '871499', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (90183926000, '90183926','   ', 'Instrumentos e aparelhos para medicina, cirurgia, odontologia e veterinária, incluindo os aparelhos para cintilografia e outros aparelhos eletromédicos, bem como os aparelhos para testes visuais. - Seringas, agulhas, cateteres, cânulas e instrumentos se...', 1, '9018392', 2805800, 'Instrumentos e aparelhos para medicina, cirurgia, odontologia e veterinária, incluindo os aparelhos para cintilografia e outros aparelhos eletromédicos, bem como os aparelhos para testes visuais. - Seringas, agulhas, cateteres, cânulas e instrumentos semelhantes: -- Outros Cateteres intravenosos periféricos, de plástico');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (39074020000, '39074020','   ', 'Poliacetais, outros poliéteres e resinas epóxidas, em formas primárias; policarbonatos, resinas alquídicas, poliésteres alílicos e outros poliésteres, em formas primárias. - Em pó ou flocos, com índice de fluidez de massa inferior a 60g/10min ou superio...', 1, '390740', 2806400, 'Poliacetais, outros poliéteres e resinas epóxidas, em formas primárias; policarbonatos, resinas alquídicas, poliésteres alílicos e outros poliésteres, em formas primárias. - Em pó ou flocos, com índice de fluidez de massa inferior a 60g/10min ou superior a 80 g/10min segundo Norma ASTM D 1238');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (47032110000, '47032110','   ', 'Pastas químicas de madeira, à soda ou ao sulfato, exceto pastas para dissolução. - Semibranqueadas ou branqueadas: -- De coníferas - Em rolos', 1, '47032', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (47032190000, '47032190','   ', 'Pastas químicas de madeira, à soda ou ao sulfato, exceto pastas para dissolução. - Semibranqueadas ou branqueadas: -- De coníferas - Outras', 1, '47032', 0, ' ');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (76061230000, '76061230','   ', 'Chapas e tiras, de alumínio, de espessura superior a 0,2 mm. - De forma quadrada ou retangular: -- Simplesmente laminadas, constituídas de, pelo menos duas camadas de diferentes ligas de alumínio, sendo uma o núcleo e as outras de revestimento, exceto: ...', 1, '760612', 2806100, 'Chapas e tiras, de alumínio, de espessura superior a 0,2 mm. - De forma quadrada ou retangular: -- Simplesmente laminadas, constituídas de, pelo menos duas camadas de diferentes ligas de alumínio, sendo uma o núcleo e as outras de revestimento, exceto: núcleo de liga da Aluminium Association AA 3003 modificada (liga de alumínio com um teor, em peso, de silício inferior ou igual a 0,60%, de ferro inferior ou igual a 0,70%, de cobre igual ou superior a 0,05% e inferior ou igual a 0,20%, de manganês igual ou superior a 1,0% e inferior ou igual a 1,5%, de zinco inferior ou igual a 0,15% e de outros elementos total inferior ou igual a 0,15%) com revestimento de liga AA 4343 (liga de alumínio com um teor, em peso, de silício igual ou superior a 6,8% e inferior ou igual a 8,2%, de ferro inferior ou igual a 0,80%, de cobre inferior ou igual a 0,25%, de manganês inferior ou igual a 0,10%, de zinco inferior ou igual a 0,20% e de outros elementos total inferior ou igual a 0,15%)');
INSERT INTO SINCMS (idNcm, ncm, excecaoTipi, descricao, ativo, grupoNcm, cest, observacoes) VALUES (76071120000, '76071120','   ', 'Folhas e tiras, delgadas, de alumínio (mesmo impressas ou com suporte de papel, cartão, plástico ou semelhantes), de espessura não superior a 0,2 mm (excluindo o suporte). - Sem suporte: -- Simplesmente laminadas Constituídas de, pelo menos duas camada...', 1, '760711', 2806100, 'Folhas e tiras, delgadas, de alumínio (mesmo impressas ou com suporte de papel, cartão, plástico ou semelhantes), de espessura não superior a 0,2 mm (excluindo o suporte). - Sem suporte: -- Simplesmente laminadas Constituídas de, pelo menos duas camadas de diferentes ligas de alumínio, sendo uma o núcleo e as outras de revestimento, exceto: núcleo de liga da Aluminium Association AA 3003 modificada (liga de alumínio com um teor, em peso, de silício inferior ou igual a 0,60%, de ferro inferior ou igual a 0,70%, de cobre igual ou superior a 0,05% e inferior ou igual a 0,20%, de manganês igual ou superior a 1,0% e inferior ou igual a 1,5%, de zinco inferior ou igual a 0,15% e de outros elementos total inferior ou igual a 0,15%) com revestimento de liga AA 4343 (liga de alumínio com um teor, em peso, de silício igual ou superior a 6,8% e inferior ou igual a 8,2%, de ferro inferior ou igual a 0,80%, de cobre inferior ou igual a 0,25%, de manganês inferior ou igual a 0,10%, de zinco inferior ou igual a 0,20% e de outros elementos total inferior ou igual a 0,15%)');

COMMIT;

UPDATE SITABELASSISTEMA SET descricao = 'Motivos Bloqueio Documento Permitidos' WHERE tabelaSistema = 'PAMOTIVOSBLOQPERMITIDOS';

COMMIT;

UPDATE SIMENUS SET descricao = 'Motivos Bloqueio Documento Permitidos' WHERE menu = 336;

COMMIT;

UPDATE SIBANCOS SET descricao = 'BANCO ORIGINAL S.A.' WHERE banco = '212';

COMMIT;

INSERT INTO SIBANCOS (banco, descricao, ativo, dvBanco, site, segmento, raizCnpj, observacoes) values ('121', 'BANCO AGIBANK S/A', 1, ' ', 'www.agi.com.br', 'Banco Múltiplo', '10664513', ' ');
INSERT INTO SIBANCOS (banco, descricao, ativo, dvBanco, site, segmento, raizCnpj, observacoes) values ('260', 'NUBANK – NU FINANCEIRA S.A.', 1, ' ', 'nubank.com.br', 'Banco Múltiplo', '30680829', ' ');
INSERT INTO SIBANCOS (banco, descricao, ativo, dvBanco, site, segmento, raizCnpj, observacoes) values ('290', 'PAGBANK – PAGSEGURO INTERNET S.A.', 1, ' ', 'pagseguro.uol.com.br', 'Banco Múltiplo', '08561701', ' ');
INSERT INTO SIBANCOS (banco, descricao, ativo, dvBanco, site, segmento, raizCnpj, observacoes) values ('323', 'MERCADO PAGO', 1, ' ', 'www.mercadopago.com.br', 'Banco Múltiplo', '10573521',' ');
INSERT INTO SIBANCOS (banco, descricao, ativo, dvBanco, site, segmento, raizCnpj, observacoes) values ('335', 'BANCO DIGIO S.A.', 1, ' ', 'www.digio.com.br', 'Banco Múltiplo', '27098060',' ');
INSERT INTO SIBANCOS (banco, descricao, ativo, dvBanco, site, segmento, raizCnpj, observacoes) values ('336', 'BANCO C6 S.A.', 1, ' ', 'www.c6bank.com.br', 'Banco Múltiplo', '31872495',' ');

COMMIT;

INSERT INTO SICNAES (cnae, descricao, ativo, classeCnae, observacoes) values (5611204, 'Bares e outros estabelecimentos especializados em servir bebidas, sem entretenimento', 1, 56112, ' ');
INSERT INTO SICNAES (cnae, descricao, ativo, classeCnae, observacoes) values (5611205, 'Bares e outros estabelecimentos especializados em servir bebidas, com entretenimento', 1, 56112, ' ');

COMMIT;

DELETE MOACESSOSMENU WHERE menu IN (614,786,855);
DELETE PAMENUXLAYOUTPESQUISA WHERE menu IN (614,786,855);
DELETE PAMENUXCAMPOSPESQUISA WHERE menu IN (614,786,855);
DELETE PAMENUXPERMISSOES WHERE menu IN (614,786,855);

UPDATE PAGERADORRELFILTROS SET menuPesquisa = 0 WHERE menuPesquisa IN (614,786,855);
UPDATE PAGERADORRELCAMPOSVISAO SET menuPesquisa = 0 WHERE menuPesquisa IN (614,786,855);

DELETE SIMENUS WHERE menu IN (614,786,855);

COMMIT;

INSERT INTO SIVERSOESSISTEMA (idVersaoSistema, versaoAplicativo, dataLiberacaoVersao, possuiConversaoTabelas, atualizada, dataAtualizacaoVersao, observacoes) VALUES (2023001001, '2023.1.1', TO_DATE('02/01/2023','DD/MM/YYYY'), 1, 1, sysdate, ' ');

COMMIT;

--exec dbms_utility.compile_schema('ADDERI');
--exec dbms_stats.gather_schema_stats('ADDERI');

/*
*/