    UPDATE MOORCAMENTOXITENS
    SET quantidadeSaldo = quantidadeSaldo - p_quantidadeBaixar
    WHERE idItemOrcamento = p_idItemOrcamento;
    UPDATE MOCONSERTOS cons
    SET cons.situacaoConserto = 'R'
    WHERE cons.documentoTransferenciaFornec > 0
    AND cons.situacaoConserto = 'E'
    AND EXISTS (
      SELECT 1 FROM MODOCUMENTOTRANSFXITENS itemTransf
      JOIN MODOCTRANSFXORCAMENTOITEM transfXDoc
      ON transfXDoc.idItemDocTransferencia = itemTransf.idItemDocTransferencia
      WHERE itemTransf.documentoTransferencia = cons.documentoTransferenciaFornec
      AND transfXDoc.entradaSaidaOriginal = 'E'
      AND transfXDoc.idItemOrcamento = p_idItemOrcamento);
    ADD_ENTREGA_CRIA_PENDENTE (
      p_sys_usuarioLogado,
      p_sys_estabelecimentoAtivo,
      p_config_209_filtrarGrupoEcon,
      p_config_354_estabProximoId,
      p_config_362_calcCustoPorGrade,
      p_idItemOrcamento);
    ADD_RESERVA_ESTOQUE_ORC_ITEM (
      p_sys_estabelecimentoAtivo,
      p_config_209_filtrarGrupoEcon,
      p_config_354_estabProximoId,
      p_config_362_calcCustoPorGrade,
      p_idItemOrcamento,
      '',
      '',
      v_auxAlpha,
      v_auxAlpha);
  END IF;
END ADD_PRE_DOC_ITEM_REF_ORCAMEN;

/

create or replace PROCEDURE ADD_PRE_DOC_ITEM_REF_PRE_DOC (
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_cab_preDocumento             IN NUMBER,
  p_cab_tipoDocumento            IN NUMBER,
  p_cab_documentoFiscal          IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_item_idItemPreDocumento      IN NUMBER,
  p_item_sequencia               IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_valorLiquidoItem        IN NUMBER,
  p_idItemPreDocumentoReferenc   IN NUMBER,
  p_quantidadeReferenciada       IN NUMBER,
  p_atualizarObservacoes         IN NUMBER,
  /* Retornos */
  r_atualizarObservacoes         OUT NUMBER)
IS
  v_id                       NUMBER;
  v_preDocumentoReferenciado NUMBER;
  v_sequenciaReferenciado    NUMBER;
  v_orc_pessoa               NUMBER;
  v_auxAlpha                 VARCHAR (3200);
BEGIN
  r_atualizarObservacoes := p_atualizarObservacoes;
  ADD_PRE_DOC_ITEM_N_SER_PRE_DOC (
    p_sys_estabelecimentoAtivo,
    p_idItemPreDocumentoReferenc,
    p_item_idItemPreDocumento,
    CASE WHEN p_quantidadeReferenciada > 0 THEN p_quantidadeReferenciada ELSE p_item_quantidade END,
    CASE WHEN p_quantidadeReferenciada > 0 THEN 1 ELSE 0 END,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  ADD_PRE_DOC_ITEM_CUSTO_PRE_DOC (
    p_sys_estabelecimentoAtivo,
    p_idItemPreDocumentoReferenc,
    p_item_idItemPreDocumento);
  ADD_PRE_DOC_ITEM_COMP_PRE_DOC (
    p_sys_estabelecimentoAtivo,
    p_idItemPreDocumentoReferenc,
    p_item_idItemPreDocumento,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  IF p_quantidadeReferenciada = 0 THEN
    v_orc_pessoa := 0;
    IF p_config_227_manterPessoaOrcam = 1 THEN
      SELECT COALESCE(MAX(orc.pessoa),0)
      INTO v_orc_pessoa
      FROM MOPREDOCUMXITENS itemDoc
      JOIN MOPREDOCUMXORCAMENTOITEM docXOrc
      ON docXOrc.idItemPreDocumento = itemDoc.idItemPreDocumento
      JOIN MOORCAMENTOXITENS itemOrc
      ON itemOrc.idItemOrcamento = docXOrc.idItemOrcamento
      JOIN MOORCAMENTOS orc
      ON orc.orcamento = itemOrc.orcamento
      WHERE itemDoc.preDocumento = p_cab_preDocumento
      AND docXOrc.quantidade <> 0;
    END IF;
    ADD_PRE_DOC_ITEM_MOT_PRE_DOC (
      p_sys_estabelecimentoAtivo,
      p_config_227_manterPessoaOrcam,
      p_cab_preDocumento,
      p_cab_tipoDocumento,
      p_cab_documentoFiscal,
      p_cab_estabelecimento,
      p_cab_pessoa,
      v_orc_pessoa,
      p_item_idItemPreDocumento,
      p_item_sequencia,
      p_item_vendedor,
      p_item_gradeProduto,
      p_item_unidadeMedidaConversao,
      p_item_quantidadeConvertida,
      p_item_valorLiquidoItem,
      p_idItemPreDocumentoReferenc);
  ELSE
    SELECT
      preDocumento,
      sequencia
    INTO
      v_preDocumentoReferenciado,
      v_sequenciaReferenciado
    FROM MOPREDOCUMXITENS
    WHERE idItemPreDocumento = p_idItemPreDocumentoReferenc;
    ADD_PRE_DOC_ITEM_BLOEST_PRE (
      p_sys_estabelecimentoAtivo,
      v_preDocumentoReferenciado,
      v_sequenciaReferenciado,
      p_cab_preDocumento,
      p_item_sequencia);
    SELECT COALESCE (MAX (id),0)
    INTO v_id
    FROM MOPREDOCUMXPREDOCUM
    WHERE idItemPreDocumento = p_item_idItemPreDocumento
    AND idItemPreDocReferenciado = p_idItemPreDocumentoReferenc;
    IF v_id > 0 THEN
      IF p_quantidadeReferenciada <> 0 THEN
        UPDATE MOPREDOCUMXPREDOCUM SET
          quantidade = quantidade + p_quantidadeReferenciada
        WHERE id = v_id;
      END IF;
    ELSE
      v_id := FUNC_ADD_BUSCA_PROXIMO_ID ('MOPREDOCUMXPREDOCUM', 'id', 14, p_sys_estabelecimentoAtivo, NULL);
      INSERT INTO MOPREDOCUMXPREDOCUM (
        id,
        idItemPreDocumento,
        idItemPreDocReferenciado,
        quantidade)
      VALUES (
        v_id,
        p_item_idItemPreDocumento,
        p_idItemPreDocumentoReferenc,
        p_quantidadeReferenciada);
    END IF;
  END IF;
END ADD_PRE_DOC_ITEM_REF_PRE_DOC;

/

create or replace PROCEDURE ADD_PRE_DOC_ITEM_REF_DOC_FIS (
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_cab_preDocumento             IN NUMBER,
  p_cab_tipoDocumento            IN NUMBER,
  p_cab_documentoFiscal          IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_item_idItemPreDocumento      IN NUMBER,
  p_item_sequencia               IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_valorLiquidoItem        IN NUMBER,
  p_idItemDocFiscalReferenciado  IN NUMBER,
  p_quantidadeReferenciada       IN NUMBER,
  p_atualizarObservacoes         IN NUMBER,
  /* Retornos */
  r_atualizarObservacoes         OUT NUMBER)
IS
  v_id                           NUMBER;
  v_idDocumentoFiscalReferenciad NUMBER;
  v_sequenciaReferenciado        NUMBER;
  v_orc_pessoa                   NUMBER;
  v_auxAlpha                     VARCHAR (3200);
BEGIN
  r_atualizarObservacoes := p_atualizarObservacoes;
  ADD_PRE_DOC_ITEM_N_SER_DOC_FIS (
    p_sys_estabelecimentoAtivo,
    p_idItemDocFiscalReferenciado,
    p_item_idItemPreDocumento,
    CASE WHEN p_quantidadeReferenciada > 0 THEN p_quantidadeReferenciada ELSE p_item_quantidade END,
    CASE WHEN p_quantidadeReferenciada > 0 THEN 1 ELSE 0 END,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  ADD_PRE_DOC_ITEM_CUSTO_DOC_FIS (
    p_sys_estabelecimentoAtivo,
    p_idItemDocFiscalReferenciado,
    p_item_idItemPreDocumento);
  ADD_PRE_DOC_ITEM_COMP_DOC_FIS (
    p_sys_estabelecimentoAtivo,
    p_idItemDocFiscalReferenciado,
    p_item_idItemPreDocumento,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  IF p_quantidadeReferenciada = 0 THEN
    v_orc_pessoa := 0;
    IF p_config_227_manterPessoaOrcam = 1 THEN
      SELECT COALESCE(MAX(orc.pessoa),0)
      INTO v_orc_pessoa
      FROM MOPREDOCUMXITENS itemDoc
      JOIN MOPREDOCUMXORCAMENTOITEM docXOrc
      ON docXOrc.idItemPreDocumento = itemDoc.idItemPreDocumento
      JOIN MOORCAMENTOXITENS itemOrc
      ON itemOrc.idItemOrcamento = docXOrc.idItemOrcamento
      JOIN MOORCAMENTOS orc
      ON orc.orcamento = itemOrc.orcamento
      WHERE itemDoc.preDocumento = p_cab_preDocumento
      AND docXOrc.quantidade <> 0;
    END IF;
    ADD_PRE_DOC_ITEM_MOT_DOC_FIS (
      p_sys_estabelecimentoAtivo,
      p_config_227_manterPessoaOrcam,
      p_cab_preDocumento,
      p_cab_tipoDocumento,
      p_cab_documentoFiscal,
      p_cab_estabelecimento,
      p_cab_pessoa,
      v_orc_pessoa,
      p_item_idItemPreDocumento,
      p_item_sequencia,
      p_item_vendedor,
      p_item_gradeProduto,
      p_item_unidadeMedidaConversao,
      p_item_quantidadeConvertida,
      p_item_valorLiquidoItem,
      p_idItemDocFiscalReferenciado);
  ELSE
    SELECT
      idDocumentoFiscal,
      sequencia
    INTO
      v_idDocumentoFiscalReferenciad,
      v_sequenciaReferenciado
    FROM MODOCFISCALXITENS
    WHERE idItemDocFiscal = p_idItemDocFiscalReferenciado;
    ADD_PRE_DOC_ITEM_BLOEST_DOC (
      p_sys_estabelecimentoAtivo,
      v_idDocumentoFiscalReferenciad,
      v_sequenciaReferenciado,
      p_cab_preDocumento,
      p_item_sequencia);
    SELECT COALESCE (MAX (id),0)
    INTO v_id
    FROM MOPREDOCUMXDOCFISCAL
    WHERE idItemPreDocumento = p_item_idItemPreDocumento
    AND idItemDocFiscalReferenciado = p_idItemDocFiscalReferenciado;
    IF v_id > 0 THEN
      IF p_quantidadeReferenciada <> 0 THEN
        UPDATE MOPREDOCUMXDOCFISCAL SET
          quantidade = quantidade + p_quantidadeReferenciada
        WHERE id = v_id;
      END IF;
    ELSE
      v_id := FUNC_ADD_BUSCA_PROXIMO_ID ('MOPREDOCUMXDOCFISCAL', 'id', 14, p_sys_estabelecimentoAtivo, NULL);
      INSERT INTO MOPREDOCUMXDOCFISCAL (
        id,
        idItemPreDocumento,
        idItemDocFiscalReferenciado,
        quantidade)
      VALUES (
        v_id,
        p_item_idItemPreDocumento,
        p_idItemDocFiscalReferenciado,
        p_quantidadeReferenciada);
    END IF;
  END IF;
END ADD_PRE_DOC_ITEM_REF_DOC_FIS;

/

create or replace PROCEDURE ADD_DOC_FISC_ITEM_REF_ORCAMEN (
  p_sys_usuarioLogado            IN NUMBER,
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_config_354_estabProximoId    IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_cab_idDocumentoFiscal        IN NUMBER,
  p_cab_tipoDocumento            IN NUMBER,
  p_cab_documentoFiscal          IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_item_idItemDocFiscal         IN NUMBER,
  p_item_sequencia               IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_valorLiquidoItem        IN NUMBER,
  p_idItemOrcamento              IN NUMBER,
  p_quantidadeBaixar             IN NUMBER,
  p_atualizarObservacoes         IN NUMBER,
  /* Retornos */
  r_atualizarObservacoes         OUT NUMBER)
IS
  v_id                    NUMBER;
  v_orcamentoReferenciado NUMBER;
  v_sequenciaReferenciado NUMBER;
  v_orc_pessoa            NUMBER;
  v_auxAlpha              VARCHAR (3200);
BEGIN
  r_atualizarObservacoes := p_atualizarObservacoes;
  ADD_DOC_FISC_ITEM_N_SER_ORCAM (
    p_sys_estabelecimentoAtivo,
    p_idItemOrcamento,
    p_item_idItemDocFiscal,
    CASE WHEN p_quantidadeBaixar > 0 THEN p_quantidadeBaixar ELSE p_item_quantidade END,
    CASE WHEN p_quantidadeBaixar > 0 THEN 1 ELSE 0 END,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  ADD_DOC_FISC_ITEM_CUSTO_ORCAM (
    p_sys_estabelecimentoAtivo,
    p_idItemOrcamento,
    p_item_idItemDocFiscal);
  ADD_DOC_FISC_ITEM_COMP_ORCAMEN (
    p_sys_estabelecimentoAtivo,
    p_idItemOrcamento,
    p_item_idItemDocFiscal,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  SELECT COALESCE (MAX (id),0)
  INTO v_id
  FROM MODOCFISCALXORCAMENTOITEM
  WHERE idItemDocFiscal = p_item_idItemDocFiscal
  AND idItemOrcamento = p_idItemOrcamento;
  IF v_id > 0 THEN
    IF p_quantidadeBaixar <> 0 THEN
      UPDATE MODOCFISCALXORCAMENTOITEM SET
        quantidade = quantidade + p_quantidadeBaixar
      WHERE id = v_id;
    END IF;
  ELSE
    v_id := FUNC_ADD_BUSCA_PROXIMO_ID ('MODOCFISCALXORCAMENTOITEM', 'id', 14, p_sys_estabelecimentoAtivo, NULL);
    INSERT INTO MODOCFISCALXORCAMENTOITEM (
      id,
      idItemDocFiscal,
      idItemOrcamento,
      quantidade,
      efetivacao)
    VALUES (
      v_id,
      p_item_idItemDocFiscal,
      p_idItemOrcamento,
      p_quantidadeBaixar,
      1);
  END IF;
  IF p_quantidadeBaixar <> 0 THEN
    SELECT
      orcamento,
      sequencia
    INTO
      v_orcamentoReferenciado,
      v_sequenciaReferenciado
    FROM MOORCAMENTOXITENS
    WHERE idItemOrcamento = p_idItemOrcamento;
    ADD_DOC_FISC_ITEM_BLOEST_ORC (
      p_sys_estabelecimentoAtivo,
      v_orcamentoReferenciado,
      v_sequenciaReferenciado,
      p_cab_idDocumentoFiscal,
      p_item_sequencia);
    v_orc_pessoa := 0;
    IF p_config_227_manterPessoaOrcam = 1 THEN
      SELECT COALESCE(MAX(orc.pessoa),0)
      INTO v_orc_pessoa
      FROM MODOCFISCALXITENS itemDoc
      JOIN MODOCFISCALXORCAMENTOITEM docXOrc
      ON docXOrc.idItemDocFiscal = itemDoc.idItemDocFiscal
      JOIN MOORCAMENTOXITENS itemOrc
      ON itemOrc.idItemOrcamento = docXOrc.idItemOrcamento
      JOIN MOORCAMENTOS orc
      ON orc.orcamento = itemOrc.orcamento
      WHERE itemDoc.idDocumentoFiscal = p_cab_idDocumentoFiscal
      AND docXOrc.quantidade <> 0;
    END IF;
    ADD_DOC_FISC_ITEM_MOT_ORCAMEN (
      p_sys_estabelecimentoAtivo,
      p_config_227_manterPessoaOrcam,
      p_cab_idDocumentoFiscal,
      p_cab_tipoDocumento,
      p_cab_documentoFiscal,
      p_cab_estabelecimento,
      p_cab_pessoa,
      v_orc_pessoa,
      p_item_idItemDocFiscal,
      p_item_sequencia,
      p_item_vendedor,
      p_item_gradeProduto,
      p_item_unidadeMedidaConversao,
      p_item_quantidadeConvertida,
      p_item_valorLiquidoItem,
      p_idItemOrcamento);
    UPDATE MOORCAMENTOXITENS
    SET quantidadeSaldo = quantidadeSaldo - p_quantidadeBaixar
    WHERE idItemOrcamento = p_idItemOrcamento;
    UPDATE MOCONSERTOS cons
    SET cons.situacaoConserto = 'R'
    WHERE cons.documentoTransferenciaFornec > 0
    AND cons.situacaoConserto = 'E'
    AND EXISTS (
      SELECT 1 FROM MODOCUMENTOTRANSFXITENS itemTransf
      JOIN MODOCTRANSFXORCAMENTOITEM transfXDoc
      ON transfXDoc.idItemDocTransferencia = itemTransf.idItemDocTransferencia
      WHERE itemTransf.documentoTransferencia = cons.documentoTransferenciaFornec
      AND transfXDoc.entradaSaidaOriginal = 'E'
      AND transfXDoc.idItemOrcamento = p_idItemOrcamento);
    ADD_ENTREGA_CRIA_PENDENTE (
      p_sys_usuarioLogado,
      p_sys_estabelecimentoAtivo,
      p_config_209_filtrarGrupoEcon,
      p_config_354_estabProximoId,
      p_config_362_calcCustoPorGrade,
      p_idItemOrcamento);
    ADD_RESERVA_ESTOQUE_ORC_ITEM (
      p_sys_estabelecimentoAtivo,
      p_config_209_filtrarGrupoEcon,
      p_config_354_estabProximoId,
      p_config_362_calcCustoPorGrade,
      p_idItemOrcamento,
      '',
      '',
      v_auxAlpha,
      v_auxAlpha);
  END IF;
END ADD_DOC_FISC_ITEM_REF_ORCAMEN;

/

create or replace PROCEDURE ADD_DOC_FISC_ITEM_REF_DFE_GRAD (
  p_sys_usuarioLogado            IN NUMBER,
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_person_138_etapOrcEmProcesso IN NUMBER,
  p_person_139_etapOrcLiberado   IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_config_230_etapaPedComprParc IN NUMBER,
  p_config_354_estabProximoId    IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_cab_idDocumentoFiscal        IN NUMBER,
  p_cab_tipoDocumento            IN NUMBER,
  p_cab_documentoFiscal          IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_item_idItemDocFiscal         IN NUMBER,
  p_item_sequencia               IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_valorLiquidoItem        IN NUMBER,
  p_gradeDistribuicaoDFe         IN NUMBER,
  p_atualizarObservacoes         IN NUMBER,
  /* Retornos */
  r_atualizarObservacoes         OUT NUMBER)
IS
  v_novaEtapaOrcamento NUMBER;
  v_quantidadeSaldo    NUMBER;
  v_auxNumber          NUMBER;
  v_auxChar            CHAR (1);
  v_auxVarchar         VARCHAR2 (32000);
BEGIN
  FOR a IN (
    SELECT
      a.idItemOrcamento,
      a.quantidadeSaldo,
      a.quantidadeBaixar,
      a.zerarSaldo,
      b.orcamento
    FROM MODISTRIBUICAODFEXORCAM a
    JOIN MOORCAMENTOXITENS b
    ON b.idItemOrcamento = a.idItemOrcamento
    WHERE a.gradeDistribuicaoDFe = p_gradeDistribuicaoDFe
    AND a.quantidadeBaixar > 0
    ORDER BY a.sequencia)
  LOOP
    UPDATE MODISTRIBUICAODFEXGRADE
    SET idItemDocFiscal = p_item_idItemDocFiscal
    WHERE gradeDistribuicaoDFe = p_gradeDistribuicaoDFe;
    ADD_DOC_FISC_ITEM_REF_ORCAMEN (
      p_sys_usuarioLogado,
      p_sys_estabelecimentoAtivo,
      p_config_209_filtrarGrupoEcon,
      p_config_227_manterPessoaOrcam,
      p_config_354_estabProximoId,
      p_config_362_calcCustoPorGrade,
      p_cab_idDocumentoFiscal,
      p_cab_tipoDocumento,
      p_cab_documentoFiscal,
      p_cab_estabelecimento,
      p_cab_pessoa,
      p_item_idItemDocFiscal,
      p_item_sequencia,
      p_item_vendedor,
      p_item_gradeProduto,
      p_item_unidadeMedidaConversao,
      p_item_quantidadeConvertida,
      p_item_quantidade,
      p_item_valorLiquidoItem,
      a.idItemOrcamento,
      CASE WHEN a.zerarSaldo = 1 THEN a.quantidadeSaldo ELSE a.quantidadeBaixar END,
      r_atualizarObservacoes,
      r_atualizarObservacoes);  
    SELECT COALESCE (SUM(b.quantidadeSaldo),0)
    INTO v_quantidadeSaldo
    FROM MOORCAMENTOXITENS b
    WHERE b.orcamento = a.orcamento
    AND b.cancelado = 0;
    IF v_quantidadeSaldo <= 0 THEN
      SELECT COALESCE(MAX(etapaOrcamento),0)
      INTO v_novaEtapaOrcamento
      FROM PAETAPASORCAMENTO
      WHERE etapaOrcamento > 0
      AND ativo = 1
      AND situacaoOrcamento = 80;      
      ADD_ORCAMENTO_CAB_ETAPA_TROCA (
        p_sys_usuarioLogado,
        p_sys_estabelecimentoAtivo,
        p_person_138_etapOrcEmProcesso,
        p_person_139_etapOrcLiberado,
        p_person_190_modeloFrete,
        p_config_209_filtrarGrupoEcon,
        p_config_354_estabProximoId,
        p_config_362_calcCustoPorGrade,
        p_config_378_calcularVolumes,
        a.orcamento,
        p_sys_usuarioLogado,
        v_novaEtapaOrcamento,
        ' ',
        0,
        0);
    ELSE
      v_novaEtapaOrcamento := p_config_230_etapaPedComprParc;
    END IF;  
    IF v_novaEtapaOrcamento <> 0 THEN
      ADD_ORCAMENTO_CAB_ETAPA_TROCA (
        p_sys_usuarioLogado,
        p_sys_estabelecimentoAtivo,
        p_person_138_etapOrcEmProcesso,
        p_person_139_etapOrcLiberado,
        p_person_190_modeloFrete,
        p_config_209_filtrarGrupoEcon,
        p_config_354_estabProximoId,
        p_config_362_calcCustoPorGrade,
        p_config_378_calcularVolumes,
        a.orcamento,
        p_sys_usuarioLogado,
        v_novaEtapaOrcamento,
        ' ',
        0,
        0);
    END IF;
  END LOOP;
END ADD_DOC_FISC_ITEM_REF_DFE_GRAD;

/

create or replace PROCEDURE ADD_DOC_FISC_ITEM_REF_PRE_DOC (
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_cab_idDocumentoFiscal        IN NUMBER,
  p_cab_tipoDocumento            IN NUMBER,
  p_cab_documentoFiscal          IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_item_idItemDocFiscal         IN NUMBER,
  p_item_sequencia               IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_valorLiquidoItem        IN NUMBER,
  p_idItemPreDocumentoReferenc   IN NUMBER,
  p_quantidadeReferenciada       IN NUMBER,
  p_atualizarObservacoes         IN NUMBER,
  /* Retornos */
  r_atualizarObservacoes         OUT NUMBER)
IS
  v_id                       NUMBER;
  v_preDocumentoReferenciado NUMBER;
  v_sequenciaReferenciado    NUMBER;
  v_orc_pessoa               NUMBER;
  v_auxAlpha                 VARCHAR (3200);
BEGIN
  r_atualizarObservacoes := p_atualizarObservacoes;
  ADD_DOC_FISC_ITEM_N_SER_PRE (
    p_sys_estabelecimentoAtivo,
    p_idItemPreDocumentoReferenc,
    p_item_idItemDocFiscal,
    CASE WHEN p_quantidadeReferenciada > 0 THEN p_quantidadeReferenciada ELSE p_item_quantidade END,
    CASE WHEN p_quantidadeReferenciada > 0 THEN 1 ELSE 0 END,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  ADD_DOC_FISC_ITEM_CUSTO_PRE (
    p_sys_estabelecimentoAtivo,
    p_idItemPreDocumentoReferenc,
    p_item_idItemDocFiscal);
  ADD_DOC_FISC_ITEM_COMP_PRE_DOC (
    p_sys_estabelecimentoAtivo,
    p_idItemPreDocumentoReferenc,
    p_item_idItemDocFiscal,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  IF p_quantidadeReferenciada = 0 THEN
    v_orc_pessoa := 0;
    IF p_config_227_manterPessoaOrcam = 1 THEN
      SELECT COALESCE(MAX(orc.pessoa),0)
      INTO v_orc_pessoa
      FROM MODOCFISCALXITENS itemDoc
      JOIN MODOCFISCALXORCAMENTOITEM docXOrc
      ON docXOrc.idItemDocFiscal = itemDoc.idItemDocFiscal
      JOIN MOORCAMENTOXITENS itemOrc
      ON itemOrc.idItemOrcamento = docXOrc.idItemOrcamento
      JOIN MOORCAMENTOS orc
      ON orc.orcamento = itemOrc.orcamento
      WHERE itemDoc.idDocumentoFiscal = p_cab_idDocumentoFiscal
      AND docXOrc.quantidade <> 0;
    END IF;
    ADD_DOC_FISC_ITEM_MOT_PRE_DOC (
      p_sys_estabelecimentoAtivo,
      p_config_227_manterPessoaOrcam,
      p_cab_idDocumentoFiscal,
      p_cab_tipoDocumento,
      p_cab_documentoFiscal,
      p_cab_estabelecimento,
      p_cab_pessoa,
      v_orc_pessoa,
      p_item_idItemDocFiscal,
      p_item_sequencia,
      p_item_vendedor,
      p_item_gradeProduto,
      p_item_unidadeMedidaConversao,
      p_item_quantidadeConvertida,
      p_item_valorLiquidoItem,
      p_idItemPreDocumentoReferenc);
  ELSE
    SELECT
      preDocumento,
      sequencia
    INTO
      v_preDocumentoReferenciado,
      v_sequenciaReferenciado
    FROM MOPREDOCUMXITENS
    WHERE idItemPreDocumento = p_idItemPreDocumentoReferenc;
    ADD_DOC_FISC_ITEM_BLOEST_PRE (
      p_sys_estabelecimentoAtivo,
      v_preDocumentoReferenciado,
      v_sequenciaReferenciado,
      p_cab_idDocumentoFiscal,
      p_item_sequencia);
    SELECT COALESCE (MAX (id),0)
    INTO v_id
    FROM MODOCFISCALXPREDOCUM
    WHERE idItemDocFiscal = p_item_idItemDocFiscal
    AND idItemPreDocReferenciado = p_idItemPreDocumentoReferenc;
    IF v_id > 0 THEN
      IF p_quantidadeReferenciada <> 0 THEN
        UPDATE MODOCFISCALXPREDOCUM SET
          quantidade = quantidade + p_quantidadeReferenciada
        WHERE id = v_id;
      END IF;
    ELSE
      v_id := FUNC_ADD_BUSCA_PROXIMO_ID ('MODOCFISCALXPREDOCUM', 'id', 14, p_sys_estabelecimentoAtivo, NULL);
      INSERT INTO MODOCFISCALXPREDOCUM (
        id,
        idItemDocFiscal,
        idItemPreDocReferenciado,
        quantidade)
      VALUES (
        v_id,
        p_item_idItemDocFiscal,
        p_idItemPreDocumentoReferenc,
        p_quantidadeReferenciada);
    END IF;
  END IF;
END ADD_DOC_FISC_ITEM_REF_PRE_DOC;

/

create or replace PROCEDURE ADD_DOC_FISC_ITEM_REF_DOC_FIS (
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_cab_idDocumentoFiscal        IN NUMBER,
  p_cab_tipoDocumento            IN NUMBER,
  p_cab_documentoFiscal          IN NUMBER,
  p_cab_estabelecimento          IN NUMBER,
  p_cab_pessoa                   IN NUMBER,
  p_item_idItemDocFiscal         IN NUMBER,
  p_item_sequencia               IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_valorLiquidoItem        IN NUMBER,
  p_idItemDocFiscalReferenciado  IN NUMBER,
  p_quantidadeReferenciada       IN NUMBER,
  p_atualizarObservacoes         IN NUMBER,
  /* Retornos */
  r_atualizarObservacoes         OUT NUMBER)
IS
  v_id                           NUMBER;
  v_idDocumentoFiscalReferenciad NUMBER;
  v_sequenciaReferenciado        NUMBER;
  v_orc_pessoa                   NUMBER;
  v_auxAlpha                     VARCHAR (3200);
BEGIN
  r_atualizarObservacoes := p_atualizarObservacoes;
  ADD_DOC_FISC_ITEM_N_SER_PRE (
    p_sys_estabelecimentoAtivo,
    p_idItemDocFiscalReferenciado,
    p_item_idItemDocFiscal,
    CASE WHEN p_quantidadeReferenciada > 0 THEN p_quantidadeReferenciada ELSE p_item_quantidade END,
    CASE WHEN p_quantidadeReferenciada > 0 THEN 1 ELSE 0 END,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  ADD_DOC_FISC_ITEM_CUSTO_DOC (
    p_sys_estabelecimentoAtivo,
    p_idItemDocFiscalReferenciado,
    p_item_idItemDocFiscal);
  ADD_DOC_FISC_ITEM_COMP_DOC_FIS (
    p_sys_estabelecimentoAtivo,
    p_idItemDocFiscalReferenciado,
    p_item_idItemDocFiscal,
    r_atualizarObservacoes,
    r_atualizarObservacoes);
  IF p_quantidadeReferenciada = 0 THEN
    v_orc_pessoa := 0;
    IF p_config_227_manterPessoaOrcam = 1 THEN
      SELECT COALESCE(MAX(orc.pessoa),0)
      INTO v_orc_pessoa
      FROM MODOCFISCALXITENS itemDoc
      JOIN MODOCFISCALXORCAMENTOITEM docXOrc
      ON docXOrc.idItemDocFiscal = itemDoc.idItemDocFiscal
      JOIN MOORCAMENTOXITENS itemOrc
      ON itemOrc.idItemOrcamento = docXOrc.idItemOrcamento
      JOIN MOORCAMENTOS orc
      ON orc.orcamento = itemOrc.orcamento
      WHERE itemDoc.idDocumentoFiscal = p_cab_idDocumentoFiscal
      AND docXOrc.quantidade <> 0;
    END IF;
    ADD_DOC_FISC_ITEM_MOT_DOC_FIS (
      p_sys_estabelecimentoAtivo,
      p_config_227_manterPessoaOrcam,
      p_cab_idDocumentoFiscal,
      p_cab_tipoDocumento,
      p_cab_documentoFiscal,
      p_cab_estabelecimento,
      p_cab_pessoa,
      v_orc_pessoa,
      p_item_idItemDocFiscal,
      p_item_sequencia,
      p_item_vendedor,
      p_item_gradeProduto,
      p_item_unidadeMedidaConversao,
      p_item_quantidadeConvertida,
      p_item_valorLiquidoItem,
      p_idItemDocFiscalReferenciado);
  ELSE
    SELECT
      idDocumentoFiscal,
      sequencia
    INTO
      v_idDocumentoFiscalReferenciad,
      v_sequenciaReferenciado
    FROM MODOCFISCALXITENS
    WHERE idItemDocFiscal = p_idItemDocFiscalReferenciado;
    ADD_DOC_FISC_ITEM_BLOEST_DOC (
      p_sys_estabelecimentoAtivo,
      v_idDocumentoFiscalReferenciad,
      v_sequenciaReferenciado,
      p_cab_idDocumentoFiscal,
      p_item_sequencia);
    SELECT COALESCE (MAX (id),0)
    INTO v_id
    FROM MODOCFISCALXDOCFISCAL
    WHERE idItemDocFiscal = p_item_idItemDocFiscal
    AND idItemDocFiscalReferenciado = p_idItemDocFiscalReferenciado;
    IF v_id > 0 THEN
      IF p_quantidadeReferenciada <> 0 THEN
        UPDATE MODOCFISCALXDOCFISCAL SET
          quantidade = quantidade + p_quantidadeReferenciada
        WHERE id = v_id;
      END IF;
    ELSE
      v_id := FUNC_ADD_BUSCA_PROXIMO_ID ('MODOCFISCALXDOCFISCAL', 'id', 14, p_sys_estabelecimentoAtivo, NULL);
      INSERT INTO MODOCFISCALXDOCFISCAL (
        id,
        idItemDocFiscal,
        idItemDocFiscalReferenciado,
        quantidade)
      VALUES (
        v_id,
        p_item_idItemDocFiscal,
        p_idItemDocFiscalReferenciado,
        p_quantidadeReferenciada);
    END IF;
  END IF;
END ADD_DOC_FISC_ITEM_REF_DOC_FIS;

/

create or replace PROCEDURE ADD_DOC_FISC_ITEM_EXCLUI (
  p_sys_usuarioLogado            IN NUMBER,
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_person_184_tipoEventoCancCon IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_95_etapaOrcamentoCanc IN NUMBER,
  p_config_96_etapaOrdemServCanc IN NUMBER,
  p_config_97_etapaPedCompraCanc IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_354_estabProximoId    IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_config_415_etapaFatContrCanc IN NUMBER,
  p_calcularImpostos             IN NUMBER,
  p_item_idItemDocFiscal         IN NUMBER,
  p_cancelando_Excluindo         IN CHAR,
  p_cancelandoExcluindoDocumento IN NUMBER,
  /* Retornos */
  r_calcularImpostos             OUT NUMBER)
IS
  v_cab_origemDocumento          NUMBER;
  v_cab_tipoDocumento            NUMBER;
  v_cab_entradaSaida             CHAR (1);
  v_cab_devolucaoAnulacaoRetorno NUMBER;
  v_cab_atualizaCustoMedio       NUMBER;
  v_cab_atualizaUltimaCompra     NUMBER;
  v_cab_estabelecimento          NUMBER;
  v_cab_nfFornecedor             NUMBER;
  v_cab_documentoFiscal          NUMBER;
  v_cab_dataEntradaSaida         DATE;
  v_cab_pessoa                   NUMBER;
  v_cab_modalidadeFrete          CHAR (1);
  v_cab_tipoPagamentoFrete       CHAR (1);
  v_cab_ultimoVendedorItem       NUMBER;
  v_cab_quantidadeVolume         NUMBER;
  v_cab_quantidade               NUMBER;
  v_cab_pesoLiquido              NUMBER;
  v_cab_pesoBruto                NUMBER;
  v_cab_valorProdutosBruto       NUMBER;
  v_cab_valorProdutos            NUMBER;
  v_cab_valorDescontoProdutos    NUMBER;
  v_cab_valorAcrescimoProdutos   NUMBER;
  v_cab_valorServicosBruto       NUMBER;
  v_cab_valorServicos            NUMBER;
  v_cab_valorDescontoServicos    NUMBER;
  v_cab_valorAcrescimoServicos   NUMBER;
  v_cab_valorFreteItem           NUMBER;
  v_cab_valorSeguroItem          NUMBER;
  v_cab_valorAdicFreteMarItem    NUMBER;
  v_cab_valorDespesasAduanItem   NUMBER;
  v_cab_valorFreteGeral          NUMBER;
  v_cab_valorSeguroGeral         NUMBER;
  v_cab_valorDescontoGeral       NUMBER;
  v_cab_valorOutrasDespesasGeral NUMBER;
  v_cab_valorAdicFreteMarGeral   NUMBER;
  v_cab_valorDespesasAduanGeral  NUMBER;
  v_cab_condicaoPagamento        NUMBER;
  v_cab_numeroParcelas           NUMBER;
  v_cab_somaPrazoParcelas        NUMBER;
  v_cab_valorXPrazoParcelas      NUMBER;
  v_cab_prazoMedio               NUMBER;
  v_cab_prazoMedioPonderado      NUMBER;
  v_cab_valorBasePagamento       NUMBER;
  v_cab_valorAVistaMinimo        NUMBER;
  v_cab_valorEntradaMinima       NUMBER;
  v_cab_valorAVistaEntrada       NUMBER;
  v_cab_valorPagamentoBruto      NUMBER;
  v_cab_valorDescontoPagamento   NUMBER;
  v_cab_valorOutrasDespPagamento NUMBER;
  v_cab_valorJurosPagamento      NUMBER;
  v_cab_valorPagamentoLiquido    NUMBER;
  v_cab_valorTroco               NUMBER;
  v_cab_valorFreteTotal          NUMBER;
  v_cab_valorSeguroTotal         NUMBER;
  v_cab_valorDescontoTotal       NUMBER;
  v_cab_valorOutrasDespesasTotal NUMBER;
  v_cab_valorAdicFreteMarTotal   NUMBER;
  v_cab_valorDespesasAduanTotal  NUMBER;
  v_cab_valorLiquidoItem         NUMBER;
  v_cab_valorDescontoCustoOpItem NUMBER;
  v_cab_valorDescontoCustoOpGera NUMBER;
  v_cab_valorDescontoCustoOpTota NUMBER;
  v_cab_valorAcrescimoCustoOpIte NUMBER;
  v_cab_valorAcrescimoCustoOpGer NUMBER;
  v_cab_valorAcrescimoCustoOpTot NUMBER;
  v_cab_valorCustoOperacao       NUMBER;
  v_cab_valorCMV                 NUMBER;
  v_cab_quantidadeExtemporanea   NUMBER;
  v_cab_valorAcrescimoExtempSubt NUMBER;
  v_cab_valorAcrescimoExtempItem NUMBER;
  v_cab_valorAcrescimoExtempGera NUMBER;
  v_cab_valorAcrescimoExtempTota NUMBER;
  v_cab_promocaoExiste           NUMBER;
  v_auxNumber                    NUMBER;
  v_auxVarchar                   VARCHAR2 (32000);
BEGIN
  r_calcularImpostos := p_calcularImpostos;
  FOR a IN (
    SELECT
      item.idDocumentoFiscal,
      item.gradeProduto,
      item.cancelado,
      item.usarPrecoAVista,
      item.geraFinanceiro,
      item.controleQuantidade,
      item.loteMultiplo,
      item.quantidade,
      item.quantidadeConvertida,
      item.pesoLiquido,
      item.pesoBruto,
      item.valorProdutoServicoBruto,
      item.valorProdutoServico,
      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.valorBasePagamento,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      item.valorFreteTotal,
      item.valorSeguroTotal,
      item.valorDescontoTotal,
      item.valorOutrasDespesasTotal,
      item.valorAdicFreteMarinhaMerTotal,
      item.valorDespesasAduaneirasTotal,
      item.valorLiquidoItem,
      item.valorDescontoCustoOpItem,
      item.valorDescontoCustoOpGeral,
      item.valorDescontoCustoOpTotal,
      item.valorAcrescimoCustoOpItem,
      item.valorAcrescimoCustoOpGeral,
      item.valorAcrescimoCustoOpTotal,
      item.valorCustoOperacao,
      item.valorCMV,
      item.quantidadeExtemporanea,
      item.valorAcrescimoExtempSubtotal,
      item.valorAcrescimoExtempItem,
      item.valorAcrescimoExtempGeral,
      item.valorAcrescimoExtempTotal,
      gradProd.produto,
      prod.tipoProduto
    FROM MODOCFISCALXITENS item
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = item.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    WHERE item.idItemDocFiscal = p_item_idItemDocFiscal)
  LOOP
    SELECT
      cab.origemDocumento,
      cab.tipoDocumento,
      cab.entradaSaida,
      cab.devolucaoAnulacaoRetorno,
      cab.atualizaCustoMedio,
      cab.atualizaUltimaCompra,
      cab.estabelecimento,
      cab.nfFornecedor,
      cab.documentoFiscal,
      cab.dataEntradaSaida,
      cab.pessoa,
      cab.modalidadeFrete,
      cab.tipoPagamentoFrete,
      cab.ultimoVendedorItem,
      cab.quantidadeVolume,
      cab.quantidade,
      cab.pesoLiquido,
      cab.pesoBruto,
      cab.valorProdutosBruto,
      cab.valorProdutos,
      cab.valorDescontoProdutos,
      cab.valorAcrescimoProdutos,
      cab.valorServicosBruto,
      cab.valorServicos,
      cab.valorDescontoServicos,
      cab.valorAcrescimoServicos,
      cab.valorFreteItem,
      cab.valorSeguroItem,
      cab.valorAdicFreteMarinhaMerItem,
      cab.valorDespesasAduaneirasItem,
      cab.valorFreteGeral,
      cab.valorSeguroGeral,
      cab.valorDescontoGeral,
      cab.valorOutrasDespesasGeral,
      cab.valorAdicFreteMarinhaMerGeral,
      cab.valorDespesasAduaneirasGeral,
      cab.condicaoPagamento,
      cab.numeroParcelas,
      cab.somaPrazoParcelas,
      cab.valorXPrazoParcelas,
      cab.prazoMedio,
      cab.prazoMedioPonderado,
      cab.valorBasePagamento,
      cab.valorAVistaMinimo,
      cab.valorEntradaMinima,
      cab.valorAVistaEntrada,
      cab.valorPagamentoBruto,
      cab.valorDescontoPagamento,
      cab.valorOutrasDespesasPagamento,
      cab.valorJurosPagamento,
      cab.valorPagamentoLiquido,
      cab.valorTroco,
      cab.valorFreteTotal,
      cab.valorSeguroTotal,
      cab.valorDescontoTotal,
      cab.valorOutrasDespesasTotal,
      cab.valorAdicFreteMarinhaMerTotal,
      cab.valorDespesasAduaneirasTotal,
      cab.valorLiquidoItem,
      cab.valorDescontoCustoOpItem,
      cab.valorDescontoCustoOpGeral,
      cab.valorDescontoCustoOpTotal,
      cab.valorAcrescimoCustoOpItem,
      cab.valorAcrescimoCustoOpGeral,
      cab.valorAcrescimoCustoOpTotal,
      cab.valorCustoOperacao,
      cab.valorCMV,
      cab.quantidadeExtemporanea,
      cab.valorAcrescimoExtempSubtotal,
      cab.valorAcrescimoExtempItem,
      cab.valorAcrescimoExtempGeral,
      cab.valorAcrescimoExtempTotal
    INTO
      v_cab_origemDocumento,
      v_cab_tipoDocumento,
      v_cab_entradaSaida,
      v_cab_devolucaoAnulacaoRetorno,
      v_cab_atualizaCustoMedio,
      v_cab_atualizaUltimaCompra,
      v_cab_estabelecimento,
      v_cab_nfFornecedor,
      v_cab_documentoFiscal,
      v_cab_dataEntradaSaida,
      v_cab_pessoa,
      v_cab_modalidadeFrete,
      v_cab_tipoPagamentoFrete,
      v_cab_ultimoVendedorItem,
      v_cab_quantidadeVolume,
      v_cab_quantidade,
      v_cab_pesoLiquido,
      v_cab_pesoBruto,
      v_cab_valorProdutosBruto,
      v_cab_valorProdutos,
      v_cab_valorDescontoProdutos,
      v_cab_valorAcrescimoProdutos,
      v_cab_valorServicosBruto,
      v_cab_valorServicos,
      v_cab_valorDescontoServicos,
      v_cab_valorAcrescimoServicos,
      v_cab_valorFreteItem,
      v_cab_valorSeguroItem,
      v_cab_valorAdicFreteMarItem,
      v_cab_valorDespesasAduanItem,
      v_cab_valorFreteGeral,
      v_cab_valorSeguroGeral,
      v_cab_valorDescontoGeral,
      v_cab_valorOutrasDespesasGeral,
      v_cab_valorAdicFreteMarGeral,
      v_cab_valorDespesasAduanGeral,
      v_cab_condicaoPagamento,
      v_cab_numeroParcelas,
      v_cab_somaPrazoParcelas,
      v_cab_valorXPrazoParcelas,
      v_cab_prazoMedio,
      v_cab_prazoMedioPonderado,
      v_cab_valorBasePagamento,
      v_cab_valorAVistaMinimo,
      v_cab_valorEntradaMinima,
      v_cab_valorAVistaEntrada,
      v_cab_valorPagamentoBruto,
      v_cab_valorDescontoPagamento,
      v_cab_valorOutrasDespPagamento,
      v_cab_valorJurosPagamento,
      v_cab_valorPagamentoLiquido,
      v_cab_valorTroco,
      v_cab_valorFreteTotal,
      v_cab_valorSeguroTotal,
      v_cab_valorDescontoTotal,
      v_cab_valorOutrasDespesasTotal,
      v_cab_valorAdicFreteMarTotal,
      v_cab_valorDespesasAduanTotal,
      v_cab_valorLiquidoItem,
      v_cab_valorDescontoCustoOpItem,
      v_cab_valorDescontoCustoOpGera,
      v_cab_valorDescontoCustoOpTota,
      v_cab_valorAcrescimoCustoOpIte,
      v_cab_valorAcrescimoCustoOpGer,
      v_cab_valorAcrescimoCustoOpTot,
      v_cab_valorCustoOperacao,
      v_cab_valorCMV,
      v_cab_quantidadeExtemporanea,
      v_cab_valorAcrescimoExtempSubt,
      v_cab_valorAcrescimoExtempItem,
      v_cab_valorAcrescimoExtempGera,
      v_cab_valorAcrescimoExtempTota
    FROM MODOCUMENTOSFISCAIS cab
    WHERE cab.idDocumentoFiscal = a.idDocumentoFiscal;
    IF p_cancelandoExcluindoDocumento = 0
      AND a.cancelado = 0
    THEN
      SELECT COALESCE (MAX(1), 0)
      INTO v_cab_promocaoExiste
      FROM MODOCFISCALXPROMOCOES
      WHERE idDocumentoFiscal = a.idDocumentoFiscal;
      IF v_cab_valorFreteGeral <> 0
        OR v_cab_valorSeguroGeral <> 0
        OR v_cab_valorDescontoGeral <> 0
        OR v_cab_valorOutrasDespesasGeral <> 0
        OR v_cab_valorAdicFreteMarGeral <> 0
        OR v_cab_valorDespesasAduanGeral <> 0
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF NOT(p_person_190_modeloFrete IS NULL)
        AND p_person_190_modeloFrete <> ' '
        AND a.valorFreteTotal <> 0
        AND v_cab_valorFreteTotal - a.valorFreteTotal <= 0
      THEN
        v_cab_modalidadeFrete := '9';
      END IF;    
      IF p_config_378_calcularVolumes = 1 THEN
        v_cab_quantidadeVolume := v_cab_quantidadeVolume - TRUNC(CASE WHEN a.controleQuantidade = 1 AND a.loteMultiplo <> 0 THEN a.quantidade / a.loteMultiplo ELSE a.quantidadeConvertida END,0);
      END IF;
      v_cab_quantidade := v_cab_quantidade - a.quantidadeConvertida;
      v_cab_pesoLiquido := v_cab_pesoLiquido - a.pesoLiquido;
      v_cab_pesoBruto := v_cab_pesoBruto - a.pesoBruto;
      IF a.tipoProduto = '09' THEN
        v_cab_valorServicosBruto := v_cab_valorServicosBruto - a.valorProdutoServicoBruto;
        v_cab_valorServicos := v_cab_valorServicos - a.valorProdutoServico;
        v_cab_valorDescontoServicos := v_cab_valorDescontoServicos - a.valorDescontoItem;
        v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos - a.valorAcrescimoItem;
      ELSE 
        v_cab_valorProdutosBruto := v_cab_valorProdutosBruto - a.valorProdutoServicoBruto;
        v_cab_valorProdutos := v_cab_valorProdutos - a.valorProdutoServico;
        v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos - a.valorDescontoItem;
        v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos - a.valorAcrescimoItem;
      END IF;
      v_cab_valorFreteItem := v_cab_valorFreteItem - a.valorFreteItem;
      v_cab_valorSeguroItem := v_cab_valorSeguroItem - a.valorSeguroItem;
      v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem - a.valorAdicFreteMarinhaMerItem;
      v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem - a.valorDespesasAduaneirasItem;
      v_cab_valorBasePagamento := v_cab_valorBasePagamento - a.valorBasePagamento;
      IF a.usarPrecoAVista = 1
        AND a.geraFinanceiro = 1
      THEN
        v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo - a.valorProdutoServico + a.valorDescontoTotal - a.valorOutrasDespesasTotal;
      END IF;
      v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento - a.valorDescontoPagamento;
      v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento - a.valorOutrasDespesasPagamento;
      v_cab_valorJurosPagamento := v_cab_valorJurosPagamento - a.valorJurosPagamento;
      v_cab_valorFreteTotal := v_cab_valorFreteTotal - a.valorFreteTotal;
      v_cab_valorSeguroTotal := v_cab_valorSeguroTotal - a.valorSeguroTotal;
      v_cab_valorDescontoTotal := v_cab_valorDescontoTotal - a.valorDescontoTotal;
      v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal - a.valorOutrasDespesasTotal;
      v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal - a.valorAdicFreteMarinhaMerTotal;
      v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal - a.valorDespesasAduaneirasTotal;
      v_cab_valorLiquidoItem := v_cab_valorLiquidoItem - a.valorLiquidoItem;
      v_cab_valorDescontoCustoOpItem := v_cab_valorDescontoCustoOpItem - a.valorDescontoCustoOpItem;
      v_cab_valorDescontoCustoOpGera := v_cab_valorDescontoCustoOpGera - a.valorDescontoCustoOpGeral;
      v_cab_valorDescontoCustoOpTota := v_cab_valorDescontoCustoOpTota - a.valorDescontoCustoOpTotal;
      v_cab_valorAcrescimoCustoOpIte := v_cab_valorAcrescimoCustoOpIte - a.valorAcrescimoCustoOpItem;
      v_cab_valorAcrescimoCustoOpGer := v_cab_valorAcrescimoCustoOpGer - a.valorAcrescimoCustoOpGeral;
      v_cab_valorAcrescimoCustoOpTot := v_cab_valorAcrescimoCustoOpTot - a.valorAcrescimoCustoOpTotal;
      v_cab_valorCustoOperacao := v_cab_valorCustoOperacao - a.valorCustoOperacao;
      v_cab_valorCMV := v_cab_valorCMV - a.valorCMV;
      v_cab_quantidadeExtemporanea := v_cab_quantidadeExtemporanea - a.quantidadeExtemporanea;
      v_cab_valorAcrescimoExtempSubt := v_cab_valorAcrescimoExtempSubt - a.valorAcrescimoExtempSubtotal;
      v_cab_valorAcrescimoExtempItem := v_cab_valorAcrescimoExtempItem - a.valorAcrescimoExtempItem;
      v_cab_valorAcrescimoExtempGera := v_cab_valorAcrescimoExtempGera - a.valorAcrescimoExtempGeral;
      v_cab_valorAcrescimoExtempTota := v_cab_valorAcrescimoExtempTota - a.valorAcrescimoExtempTotal;
      IF v_cab_valorDescontoGeral <> 0
        OR v_cab_valorOutrasDespesasGeral <> 0
        OR v_cab_valorPagamentoBruto <> 0
        OR v_cab_promocaoExiste = 1
      THEN
        ADD_DOC_FISC_PAG_EXCLUI_TROCA (
          r_calcularImpostos,
          a.idDocumentoFiscal,
          v_cab_valorDescontoGeral,
          v_cab_valorOutrasDespesasGeral,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_promocaoExiste,
          a.valorDescontoGeral,
          a.valorDescontoPagamento,
          a.valorOutrasDespesasPagamento,
          a.valorJurosPagamento,
          r_calcularImpostos,
          v_cab_valorDescontoGeral,
          v_cab_condicaoPagamento,
          v_cab_numeroParcelas,
          v_cab_somaPrazoParcelas,
          v_cab_valorXPrazoParcelas,
          v_cab_prazoMedio,
          v_cab_prazoMedioPonderado,
          v_cab_valorEntradaMinima,
          v_cab_valorAVistaEntrada,
          v_cab_valorPagamentoBruto,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_valorPagamentoLiquido,
          v_cab_valorTroco,
          v_auxNumber, -- r_item_valorDescontoGeral
          v_auxNumber, -- r_item_valorDescontoPagamento
          v_auxNumber, -- r_item_valorOutrasDespPag
          v_auxNumber); -- r_item_valorJurosPagamento
      END IF;
      UPDATE MODOCUMENTOSFISCAIS 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_valorOutrasDespesasGeral,
        valorAdicFreteMarinhaMerGeral = v_cab_valorAdicFreteMarGeral,
        valorDespesasAduaneirasGeral  = v_cab_valorDespesasAduanGeral,
        condicaoPagamento             = v_cab_condicaoPagamento,
        numeroParcelas                = v_cab_numeroParcelas,
        somaPrazoParcelas             = v_cab_somaPrazoParcelas,
        valorXPrazoParcelas           = v_cab_valorXPrazoParcelas,
        prazoMedio                    = v_cab_prazoMedio,
        prazoMedioPonderado           = v_cab_prazoMedioPonderado,
        valorBasePagamento            = v_cab_valorBasePagamento,
        valorAVistaMinimo             = v_cab_valorAVistaMinimo,
        valorEntradaMinima            = v_cab_valorEntradaMinima,
        valorAVistaEntrada            = v_cab_valorAVistaEntrada,
        valorPagamentoBruto           = v_cab_valorPagamentoBruto,
        valorDescontoPagamento        = v_cab_valorDescontoPagamento,
        valorOutrasDespesasPagamento  = v_cab_valorOutrasDespPagamento,
        valorJurosPagamento           = v_cab_valorJurosPagamento,
        valorPagamentoLiquido         = v_cab_valorPagamentoLiquido,
        valorTroco                    = v_cab_valorTroco,
        valorFreteTotal               = v_cab_valorFreteTotal,
        valorSeguroTotal              = v_cab_valorSeguroTotal,
        valorDescontoTotal            = v_cab_valorDescontoTotal,
        valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
        valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
        valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
        valorLiquidoItem              = v_cab_valorLiquidoItem,
        valorDescontoCustoOpItem      = v_cab_valorDescontoCustoOpItem,
        valorDescontoCustoOpGeral     = v_cab_valorDescontoCustoOpGera,
        valorDescontoCustoOpTotal     = v_cab_valorDescontoCustoOpTota,
        valorAcrescimoCustoOpItem     = v_cab_valorAcrescimoCustoOpIte,
        valorAcrescimoCustoOpGeral    = v_cab_valorAcrescimoCustoOpGer,
        valorAcrescimoCustoOpTotal    = v_cab_valorAcrescimoCustoOpTot,
        valorCustoOperacao            = v_cab_valorCustoOperacao,
        valorCMV                      = v_cab_valorCMV,
        quantidadeExtemporanea        = v_cab_quantidadeExtemporanea,
        valorAcrescimoExtempSubtotal  = v_cab_valorAcrescimoExtempSubt,
        valorAcrescimoExtempItem      = v_cab_valorAcrescimoExtempItem,
        valorAcrescimoExtempGeral     = v_cab_valorAcrescimoExtempGera,
        valorAcrescimoExtempTotal     = v_cab_valorAcrescimoExtempTota
      WHERE idDocumentoFiscal = a.idDocumentoFiscal;
    END IF;
    -- Cancela / Exclui Transferências vinculadas.
    FOR b IN (
      SELECT
        itemTransf.documentoTransferencia,
        docXTransf.entradaSaidaOriginal
      FROM MODOCTRANSFXDOCFISCAL docXTransf
      JOIN MODOCUMENTOTRANSFXITENS itemTransf
      ON itemTransf.idItemDocTransferencia = docXTransf.idItemDocTransferencia
      WHERE docXTransf.idItemDocFiscal = p_item_idItemDocFiscal
      AND NOT EXISTS (
        SELECT 1
        FROM MODOCUMENTOTRANSFXITENS itemTransf2
        JOIN MODOCTRANSFXORCAMENTOITEM docXTransf2
        ON docXTransf2.idItemDocTransferencia = itemTransf2.idItemDocTransferencia
        WHERE itemTransf2.documentoTransferencia = itemTransf.documentoTransferencia
        AND docXTransf2.entradaSaidaOriginal <> 'O')
      AND NOT EXISTS (
        SELECT 1
        FROM MODOCUMENTOTRANSFXITENS itemTransf2
        JOIN MODOCTRANSFXPREDOCUM docXTransf2
        ON docXTransf2.idItemDocTransferencia = itemTransf2.idItemDocTransferencia
        WHERE itemTransf2.documentoTransferencia = itemTransf.documentoTransferencia
        AND docXTransf2.entradaSaidaOriginal <> 'O')
      AND NOT EXISTS (
        SELECT 1
        FROM MODOCUMENTOTRANSFXITENS itemTransf2
        JOIN MODOCTRANSFXDOCFISCAL docXTransf2
        ON docXTransf2.idItemDocTransferencia = itemTransf2.idItemDocTransferencia
        WHERE itemTransf2.documentoTransferencia = itemTransf.documentoTransferencia
        AND (docXTransf2.entradaSaidaOriginal <> 'O'
          OR docXTransf2.idItemDocFiscal <> docXTransf.idItemDocFiscal))
      GROUP BY
        itemTransf.documentoTransferencia,
        docXTransf.entradaSaidaOriginal)
    LOOP
      IF b.entradaSaidaOriginal = 'O' THEN
        ADD_DOCTRANSF_CAB_EXCLUI (b.documentoTransferencia);
      ELSIF p_cancelando_Excluindo = 'C' THEN
        ADD_DOCTRANSF_CAB_SIT_GRAVA (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_config_354_estabProximoId,
          b.documentoTransferencia,
          'C',
          0,
          'Cancelamento Automático',
          'ADD_DOC_FISC_ITEM_EXCLUI');
      END IF;
    END LOOP;
    FOR b IN (
      SELECT
        docXTransf.idItemDocTransferencia,
        cabTransf.situacaoDocTransferencia
      FROM MODOCTRANSFXDOCFISCAL docXTransf
      JOIN MODOCUMENTOTRANSFXITENS itemTransf
      ON itemTransf.idItemDocTransferencia = docXTransf.idItemDocTransferencia
      JOIN MODOCUMENTOSTRANSFERENCIA cabTransf
      ON cabTransf.documentoTransferencia = itemTransf.documentoTransferencia
      WHERE docXTransf.idItemDocFiscal = p_item_idItemDocFiscal
      AND docXTransf.entradaSaidaOriginal = 'O')
    LOOP
      ADD_DOCTRANSF_ITEM_EXCLUI (
        b.idItemDocTransferencia,
        'C', -- p_cancela_Exclui_Reabre
        b.situacaoDocTransferencia,
        0, -- p_cab_quantidadeConvertida,
        0, -- p_cab_valorProdutoServico,
        /* Retornos */
        v_auxNumber, -- r_cab_quantidadeConvertida
        v_auxNumber); -- r_cab_valorProdutoServico
    END LOOP;
    FOR b IN (
      SELECT idProdutoXCusto
      FROM CAPRODUTOXCUSTOS
      WHERE idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      ADD_PRODUTO_CUSTO_EXCLUI (b.idProdutoXCusto);
    END LOOP;
    FOR b IN (
      SELECT
        id,
        idAtendimento
      FROM MODOCFISCALXATENDIMENTO
      WHERE idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      UPDATE MOATENDIMENTOS c SET
        c.situacaoAtendimento = 'P',
        c.dataAtendimento = NULL,
        c.cliente = 0,
        c.comissionadoB = 0,
        c.comissionadoC = 0
      WHERE c.idAtendimento = b.idAtendimento;
      DELETE MODOCFISCALXATENDIMENTO c WHERE c.id = b.id;
    END LOOP;
    ADD_MOTIVO_DOC_FISC_ITE_EXCLUI (
      p_item_idItemDocFiscal,
      0,
      v_auxNumber);
    ADD_ESTOQUE_DOC_FISC_EXCLUI (
      p_item_idItemDocFiscal,
      '',
      v_auxVarchar);
    ADD_VALEDESCONTO_DOC_ITE_EXCL (
      p_item_idItemDocFiscal,
      '',
      v_auxVarchar);
    DELETE MODOCFISCALXPRODUTOFILHO
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    DELETE MODOCFISCALXPROMOCOES
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    DELETE MOINGRESSOS
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    DELETE CATABELAPRECOXFORMACOESPR
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    UPDATE MOORCAMENTOXNUMEROSSERIE numSer
    SET numSer.efetivado = 0
    WHERE numSer.efetivado = 1
    AND EXISTS (
      SELECT 1
      FROM MODOCFISCALXORCAMENTOITEM docXDoc
      WHERE docXDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND docXDoc.idItemOrcamento = numSer.idItemOrcamento
      AND docXDoc.quantidade <> 0)
    AND EXISTS (
      SELECT 1
      FROM MODOCFISCALXNUMEROSSERIE numSerDoc
      WHERE numSerDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND numSerDoc.idNumeroSerie = numSer.idNumeroSerie);
    UPDATE MOPREDOCUMXNUMEROSSERIE numSer
    SET numSer.devolvidoRetornado = 0
    WHERE numSer.devolvidoRetornado = 1
    AND EXISTS (
      SELECT 1
      FROM MODOCFISCALXPREDOCUM docXDoc
      WHERE docXDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND docXDoc.idItemPreDocReferenciado = numSer.idItemPreDocumento
      AND docXDoc.quantidade <> 0)
    AND EXISTS (
      SELECT 1
      FROM MODOCFISCALXNUMEROSSERIE numSerDoc
      WHERE numSerDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND numSerDoc.idNumeroSerie = numSer.idNumeroSerie);
    UPDATE MODOCFISCALXNUMEROSSERIE numSer
    SET numSer.devolvidoRetornado = 0
    WHERE numSer.devolvidoRetornado = 1
    AND EXISTS (
      SELECT 1
      FROM MODOCFISCALXDOCFISCAL docXDoc
      WHERE docXDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND docXDoc.idItemDocFiscalReferenciado = numSer.idItemDocFiscal
      AND docXDoc.quantidade <> 0)
    AND EXISTS (
      SELECT 1
      FROM MODOCFISCALXNUMEROSSERIE numSerDoc
      WHERE numSerDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND numSerDoc.idNumeroSerie = numSer.idNumeroSerie);
    FOR b IN (
      SELECT
        entrega,
        idItemOrcamento,
        quantidade
      FROM MOENTREGAS
      WHERE idItemDocFiscalRemessa = p_item_idItemDocFiscal)
    LOOP
      ADD_ENTREGA_SITUACAO_TROCA (
        p_sys_usuarioLogado,
        p_sys_estabelecimentoAtivo,
        b.idItemOrcamento,
        b.entrega,
        b.quantidade,
        1, -- p_situacaoEntrega
        'ADD_DOC_FISC_ITEM_EXCLUI');
      ADD_ENTREGA_CRIA_PENDENTE (
        p_sys_usuarioLogado,
        p_sys_estabelecimentoAtivo,
        p_config_209_filtrarGrupoEcon,
        p_config_354_estabProximoId,
        p_config_362_calcCustoPorGrade,
        b.idItemOrcamento);
    END LOOP;
    FOR b IN (
      SELECT idConserto
      FROM MOCONSERTOS
      WHERE idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      IF p_cancelando_Excluindo = 'C' THEN
        ADD_CONSERTO_CANCELA (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_person_184_tipoEventoCancCon,
          p_config_354_estabProximoId,
          b.idConserto);
      ELSE
        ADD_CONSERTO_EXCLUI (b.idConserto);
      END IF;
    END LOOP;
    UPDATE MOCONSERTOS SET
      idItemDocFiscalDevolucao = 0,
      situacaoConserto = 'I'
    WHERE idItemDocFiscalDevolucao = p_item_idItemDocFiscal;
    FOR b IN (
      SELECT
        id,
        idItemOrcamento,
        quantidade
      FROM MODOCFISCALXORCAMENTOITEM
      WHERE idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      IF b.quantidade <> 0 THEN
        ADD_ORCAMENTO_ITEM_SALDO_VOLTA (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_person_184_tipoEventoCancCon,
          p_config_95_etapaOrcamentoCanc,
          p_config_96_etapaOrdemServCanc,
          p_config_97_etapaPedCompraCanc,
          p_config_209_filtrarGrupoEcon,
          p_config_354_estabProximoId,
          p_config_362_calcCustoPorGrade,
          p_config_415_etapaFatContrCanc,
          b.idItemOrcamento,
          b.quantidade);
      END IF;
      DELETE MODOCFISCALXORCAMENTOITEM c
      WHERE c.id = b.id;
    END LOOP;
    FOR b IN (
      SELECT
        docXDoc.id,
        docXDoc.idItemPreDocReferenciado,
        docXDoc.quantidade,
        itemPre.preDocumento,
        cabPre.statusPreDocumento
      FROM MODOCFISCALXPREDOCUM docXDoc
      JOIN MOPREDOCUMXITENS itemPre
      ON itemPre.idItemPreDocumento = docXDoc.idItemPreDocReferenciado
      JOIN MOPREDOCUMENTOS cabPre
      ON cabPre.predocumento = itemPre.preDocumento
      WHERE docXDoc.idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      IF v_cab_devolucaoAnulacaoRetorno = 1 THEN
        FOR c IN (
          SELECT
            c.entrega,
            c.idItemOrcamento,
            c.quantidade,
            c.situacaoEntrega
          FROM MOENTREGAS c
          WHERE c.idItemPreDocumentoRemessa = b.idItemPreDocReferenciado
          AND c.situacaoEntrega IN (6,7))
        LOOP
          ADD_ENTREGA_SITUACAO_TROCA (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            c.idItemOrcamento,
            c.entrega,
            c.quantidade,
            c.situacaoEntrega - 1,
            'ADD_DOC_FISC_ITEM_EXCLUI');
          ADD_ENTREGA_CRIA_PENDENTE (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            p_config_209_filtrarGrupoEcon,
            p_config_354_estabProximoId,
            p_config_362_calcCustoPorGrade,
            c.idItemOrcamento);
        END LOOP;
      END IF;
      IF b.quantidade <> 0 THEN
        ADD_DOC_ATUALIZA_QUANT_DEVOLV (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_config_209_filtrarGrupoEcon,
          p_config_354_estabProximoId,
          p_config_362_calcCustoPorGrade,
          v_cab_devolucaoAnulacaoRetorno,
          'D',
          p_item_idItemDocFiscal,
          - b.quantidade,
          - a.quantidadeConvertida,
          'P',
          b.idItemPreDocReferenciado);
      END IF;
      IF v_cab_origemDocumento IN (10,13)
        AND b.statusPreDocumento = 'F'
      THEN
        UPDATE MOPREDOCUMENTOS c
        SET c.statusPreDocumento = 'A'
        WHERE c.preDocumento = b.preDocumento;
      END IF;
      DELETE MODOCFISCALXPREDOCUM c
      WHERE c.id = b.id;
    END LOOP;
    DELETE MOPREDOCUMXDOCFISCAL
    WHERE idItemDocFiscalReferenciado = p_item_idItemDocFiscal;
    FOR b IN (
      SELECT
        id,
        idItemDocFiscalReferenciado,
        quantidade
      FROM MODOCFISCALXDOCFISCAL a
      WHERE idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      IF v_cab_devolucaoAnulacaoRetorno = 1 THEN
        FOR c IN (
          SELECT
            c.entrega,
            c.idItemOrcamento,
            c.quantidade,
            c.situacaoEntrega
          FROM MOENTREGAS c
          WHERE c.idItemDocFiscalRemessa = b.idItemDocFiscalReferenciado
          AND c.situacaoEntrega IN (6,7))
        LOOP
          ADD_ENTREGA_SITUACAO_TROCA (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            c.idItemOrcamento,
            c.entrega,
            c.quantidade,
            c.situacaoEntrega - 1,
            'ADD_DOC_FISC_ITEM_EXCLUI');
          ADD_ENTREGA_CRIA_PENDENTE (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            p_config_209_filtrarGrupoEcon,
            p_config_354_estabProximoId,
            p_config_362_calcCustoPorGrade,
            c.idItemOrcamento);
        END LOOP;
      END IF;
      IF b.quantidade <> 0 THEN
        ADD_DOC_ATUALIZA_QUANT_DEVOLV (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_config_209_filtrarGrupoEcon,
          p_config_354_estabProximoId,
          p_config_362_calcCustoPorGrade,
          v_cab_devolucaoAnulacaoRetorno,
          'D',
          p_item_idItemDocFiscal,
          - b.quantidade,
          - a.quantidadeConvertida,
          'D',
          b.idItemDocFiscalReferenciado);
      END IF;
      DELETE MODOCFISCALXDOCFISCAL c
      WHERE c.id = b.id;
    END LOOP;
    DELETE MODOCFISCALXDOCFISCAL
    WHERE idItemDocFiscalReferenciado = p_item_idItemDocFiscal;
    DELETE MODOCTRANSFXDOCFISCAL
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    DELETE MOBALANCOXDOCFISCAL
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    UPDATE MODISTRIBUICAODFEXGRADE
    SET idItemDocFiscal = 0
    WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    IF p_cancelando_Excluindo = 'C' THEN
      UPDATE MODOCFISCALXITENS
      SET cancelado = 1
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
    ELSE
      DELETE MODOCFISCALXCOMPOSICOESPR
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
      DELETE MODOCFISCALXNUMEROSSERIE
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
      DELETE MODOCFISCALXEMBALAGENSTIN
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
      DELETE MODOCFISCALXCENTROSCUSTOS
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
      DELETE MODOCFISCALXPROJETOS
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
      DELETE MODOCTROCAXITENS
      WHERE idItemDocFiscalSaida = p_item_idItemDocFiscal;
      DELETE MODOCTROCAXITENS
      WHERE idItemDocFiscalEntrada = p_item_idItemDocFiscal;
      DELETE MODOCFISCALXITENS
      WHERE idItemDocFiscal = p_item_idItemDocFiscal;
      IF p_cancelandoExcluindoDocumento = 0 THEN
        v_auxNumber := 0;
        FOR b IN (
          SELECT idItemDocFiscal
          FROM MODOCFISCALXITENS b
          WHERE b.idDocumentoFiscal = a.idDocumentoFiscal
          AND b.idItemDocFiscal <> p_item_idItemDocFiscal
          ORDER BY b.sequencia)
        LOOP
          v_auxNumber := v_auxNumber + 1;
          UPDATE MODOCFISCALXITENS c
          SET c.sequencia = v_auxNumber
          WHERE c.idItemDocFiscal = b.idItemDocFiscal;
        END LOOP;
      END IF;
    END IF;
  END LOOP;
END ADD_DOC_FISC_ITEM_EXCLUI;

/

create or replace PROCEDURE ADD_PRE_DOC_ITEM_EXCLUI (
  p_sys_usuarioLogado            IN NUMBER,
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_person_184_tipoEventoCancCon IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_95_etapaOrcamentoCanc IN NUMBER,
  p_config_96_etapaOrdemServCanc IN NUMBER,
  p_config_97_etapaPedCompraCanc IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_354_estabProximoId    IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_config_415_etapaFatContrCanc IN NUMBER,
  p_calcularImpostos             IN NUMBER,
  p_item_idItemPreDocumento      IN NUMBER,
  p_cancelando_Excluindo         IN CHAR,
  p_cancelandoExcluindoDocumento IN NUMBER,
  /* Retornos */
  r_calcularImpostos             OUT NUMBER)
IS
  v_cab_origemDocumento          NUMBER;
  v_cab_tipoDocumento            NUMBER;
  v_cab_entradaSaida             CHAR (1);
  v_cab_devolucaoAnulacaoRetorno NUMBER;
  v_cab_atualizaCustoMedio       NUMBER;
  v_cab_atualizaUltimaCompra     NUMBER;
  v_cab_estabelecimento          NUMBER;
  v_cab_documentoFiscal          NUMBER;
  v_cab_dataEntradaSaida         DATE;
  v_cab_pessoa                   NUMBER;
  v_cab_modalidadeFrete          CHAR (1);
  v_cab_tipoPagamentoFrete       CHAR (1);
  v_cab_ultimoVendedorItem       NUMBER;
  v_cab_quantidadeVolume         NUMBER;
  v_cab_quantidade               NUMBER;
  v_cab_pesoLiquido              NUMBER;
  v_cab_pesoBruto                NUMBER;
  v_cab_valorProdutosBruto       NUMBER;
  v_cab_valorProdutos            NUMBER;
  v_cab_valorDescontoProdutos    NUMBER;
  v_cab_valorAcrescimoProdutos   NUMBER;
  v_cab_valorServicosBruto       NUMBER;
  v_cab_valorServicos            NUMBER;
  v_cab_valorDescontoServicos    NUMBER;
  v_cab_valorAcrescimoServicos   NUMBER;
  v_cab_valorFreteItem           NUMBER;
  v_cab_valorSeguroItem          NUMBER;
  v_cab_valorAdicFreteMarItem    NUMBER;
  v_cab_valorDespesasAduanItem   NUMBER;
  v_cab_valorFreteGeral          NUMBER;
  v_cab_valorSeguroGeral         NUMBER;
  v_cab_valorDescontoGeral       NUMBER;
  v_cab_valorOutrasDespesasGeral NUMBER;
  v_cab_valorAdicFreteMarGeral   NUMBER;
  v_cab_valorDespesasAduanGeral  NUMBER;
  v_cab_condicaoPagamento        NUMBER;
  v_cab_numeroParcelas           NUMBER;
  v_cab_somaPrazoParcelas        NUMBER;
  v_cab_valorXPrazoParcelas      NUMBER;
  v_cab_prazoMedio               NUMBER;
  v_cab_prazoMedioPonderado      NUMBER;
  v_cab_valorBasePagamento       NUMBER;
  v_cab_valorAVistaMinimo        NUMBER;
  v_cab_valorEntradaMinima       NUMBER;
  v_cab_valorAVistaEntrada       NUMBER;
  v_cab_valorPagamentoBruto      NUMBER;
  v_cab_valorDescontoPagamento   NUMBER;
  v_cab_valorOutrasDespPagamento NUMBER;
  v_cab_valorJurosPagamento      NUMBER;
  v_cab_valorPagamentoLiquido    NUMBER;
  v_cab_valorTroco               NUMBER;
  v_cab_valorFreteTotal          NUMBER;
  v_cab_valorSeguroTotal         NUMBER;
  v_cab_valorDescontoTotal       NUMBER;
  v_cab_valorOutrasDespesasTotal NUMBER;
  v_cab_valorAdicFreteMarTotal   NUMBER;
  v_cab_valorDespesasAduanTotal  NUMBER;
  v_cab_valorLiquidoItem         NUMBER;
  v_cab_valorDescontoCustoOpItem NUMBER;
  v_cab_valorDescontoCustoOpGera NUMBER;
  v_cab_valorDescontoCustoOpTota NUMBER;
  v_cab_valorAcrescimoCustoOpIte NUMBER;
  v_cab_valorAcrescimoCustoOpGer NUMBER;
  v_cab_valorAcrescimoCustoOpTot NUMBER;
  v_cab_valorCustoOperacao       NUMBER;
  v_cab_valorCMV                 NUMBER;
  v_cab_quantidadeExtemporanea   NUMBER;
  v_cab_valorAcrescimoExtempSubt NUMBER;
  v_cab_valorAcrescimoExtempItem NUMBER;
  v_cab_valorAcrescimoExtempGera NUMBER;
  v_cab_valorAcrescimoExtempTota NUMBER;
  v_cab_promocaoExiste           NUMBER;
  v_auxNumber                    NUMBER;
  v_auxVarchar                   VARCHAR2 (32000);
BEGIN
  r_calcularImpostos := p_calcularImpostos;
  FOR a IN (
    SELECT
      item.preDocumento,
      item.gradeProduto,
      item.cancelado,
      item.usarPrecoAVista,
      item.geraFinanceiro,
      item.controleQuantidade,
      item.loteMultiplo,
      item.quantidade,
      item.quantidadeConvertida,
      item.quantidadeDevolvidaRetornada,
      item.pesoLiquido,
      item.pesoBruto,
      item.valorProdutoServicoBruto,
      item.valorProdutoServico,
      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.valorBasePagamento,
      item.valorDescontoPagamento,
      item.valorOutrasDespesasPagamento,
      item.valorJurosPagamento,
      item.valorFreteTotal,
      item.valorSeguroTotal,
      item.valorDescontoTotal,
      item.valorOutrasDespesasTotal,
      item.valorAdicFreteMarinhaMerTotal,
      item.valorDespesasAduaneirasTotal,
      item.valorLiquidoItem,
      item.valorDescontoCustoOpItem,
      item.valorDescontoCustoOpGeral,
      item.valorDescontoCustoOpTotal,
      item.valorAcrescimoCustoOpItem,
      item.valorAcrescimoCustoOpGeral,
      item.valorAcrescimoCustoOpTotal,
      item.valorCustoOperacao,
      item.valorCMV,
      item.quantidadeExtemporanea,
      item.valorAcrescimoExtempSubtotal,
      item.valorAcrescimoExtempItem,
      item.valorAcrescimoExtempGeral,
      item.valorAcrescimoExtempTotal,
      gradProd.produto,
      prod.tipoProduto
    FROM MOPREDOCUMXITENS item
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = item.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    WHERE item.idItemPreDocumento = p_item_idItemPreDocumento)
  LOOP
    SELECT
      cab.origemDocumento,
      cab.tipoDocumento,
      cab.entradaSaida,
      cab.devolucaoAnulacaoRetorno,
      cab.atualizaCustoMedio,
      cab.atualizaUltimaCompra,
      cab.estabelecimento,
      cab.documentoFiscal,
      cab.dataEntradaSaida,
      cab.pessoa,
      cab.modalidadeFrete,
      cab.tipoPagamentoFrete,
      cab.ultimoVendedorItem,
      cab.quantidadeVolume,
      cab.quantidade,
      cab.pesoLiquido,
      cab.pesoBruto,
      cab.valorProdutosBruto,
      cab.valorProdutos,
      cab.valorDescontoProdutos,
      cab.valorAcrescimoProdutos,
      cab.valorServicosBruto,
      cab.valorServicos,
      cab.valorDescontoServicos,
      cab.valorAcrescimoServicos,
      cab.valorFreteItem,
      cab.valorSeguroItem,
      cab.valorAdicFreteMarinhaMerItem,
      cab.valorDespesasAduaneirasItem,
      cab.valorFreteGeral,
      cab.valorSeguroGeral,
      cab.valorDescontoGeral,
      cab.valorOutrasDespesasGeral,
      cab.valorAdicFreteMarinhaMerGeral,
      cab.valorDespesasAduaneirasGeral,
      cab.condicaoPagamento,
      cab.numeroParcelas,
      cab.somaPrazoParcelas,
      cab.valorXPrazoParcelas,
      cab.prazoMedio,
      cab.prazoMedioPonderado,
      cab.valorBasePagamento,
      cab.valorAVistaMinimo,
      cab.valorEntradaMinima,
      cab.valorAVistaEntrada,
      cab.valorPagamentoBruto,
      cab.valorDescontoPagamento,
      cab.valorOutrasDespesasPagamento,
      cab.valorJurosPagamento,
      cab.valorPagamentoLiquido,
      cab.valorTroco,
      cab.valorFreteTotal,
      cab.valorSeguroTotal,
      cab.valorDescontoTotal,
      cab.valorOutrasDespesasTotal,
      cab.valorAdicFreteMarinhaMerTotal,
      cab.valorDespesasAduaneirasTotal,
      cab.valorLiquidoItem,
      cab.valorDescontoCustoOpItem,
      cab.valorDescontoCustoOpGeral,
      cab.valorDescontoCustoOpTotal,
      cab.valorAcrescimoCustoOpItem,
      cab.valorAcrescimoCustoOpGeral,
      cab.valorAcrescimoCustoOpTotal,
      cab.valorCustoOperacao,
      cab.valorCMV,
      cab.quantidadeExtemporanea,
      cab.valorAcrescimoExtempSubtotal,
      cab.valorAcrescimoExtempItem,
      cab.valorAcrescimoExtempGeral,
      cab.valorAcrescimoExtempTotal
    INTO
      v_cab_origemDocumento,
      v_cab_tipoDocumento,
      v_cab_entradaSaida,
      v_cab_devolucaoAnulacaoRetorno,
      v_cab_atualizaCustoMedio,
      v_cab_atualizaUltimaCompra,
      v_cab_estabelecimento,
      v_cab_documentoFiscal,
      v_cab_dataEntradaSaida,
      v_cab_pessoa,
      v_cab_modalidadeFrete,
      v_cab_tipoPagamentoFrete,
      v_cab_ultimoVendedorItem,
      v_cab_quantidadeVolume,
      v_cab_quantidade,
      v_cab_pesoLiquido,
      v_cab_pesoBruto,
      v_cab_valorProdutosBruto,
      v_cab_valorProdutos,
      v_cab_valorDescontoProdutos,
      v_cab_valorAcrescimoProdutos,
      v_cab_valorServicosBruto,
      v_cab_valorServicos,
      v_cab_valorDescontoServicos,
      v_cab_valorAcrescimoServicos,
      v_cab_valorFreteItem,
      v_cab_valorSeguroItem,
      v_cab_valorAdicFreteMarItem,
      v_cab_valorDespesasAduanItem,
      v_cab_valorFreteGeral,
      v_cab_valorSeguroGeral,
      v_cab_valorDescontoGeral,
      v_cab_valorOutrasDespesasGeral,
      v_cab_valorAdicFreteMarGeral,
      v_cab_valorDespesasAduanGeral,
      v_cab_condicaoPagamento,
      v_cab_numeroParcelas,
      v_cab_somaPrazoParcelas,
      v_cab_valorXPrazoParcelas,
      v_cab_prazoMedio,
      v_cab_prazoMedioPonderado,
      v_cab_valorBasePagamento,
      v_cab_valorAVistaMinimo,
      v_cab_valorEntradaMinima,
      v_cab_valorAVistaEntrada,
      v_cab_valorPagamentoBruto,
      v_cab_valorDescontoPagamento,
      v_cab_valorOutrasDespPagamento,
      v_cab_valorJurosPagamento,
      v_cab_valorPagamentoLiquido,
      v_cab_valorTroco,
      v_cab_valorFreteTotal,
      v_cab_valorSeguroTotal,
      v_cab_valorDescontoTotal,
      v_cab_valorOutrasDespesasTotal,
      v_cab_valorAdicFreteMarTotal,
      v_cab_valorDespesasAduanTotal,
      v_cab_valorLiquidoItem,
      v_cab_valorDescontoCustoOpItem,
      v_cab_valorDescontoCustoOpGera,
      v_cab_valorDescontoCustoOpTota,
      v_cab_valorAcrescimoCustoOpIte,
      v_cab_valorAcrescimoCustoOpGer,
      v_cab_valorAcrescimoCustoOpTot,
      v_cab_valorCustoOperacao,
      v_cab_valorCMV,
      v_cab_quantidadeExtemporanea,
      v_cab_valorAcrescimoExtempSubt,
      v_cab_valorAcrescimoExtempItem,
      v_cab_valorAcrescimoExtempGera,
      v_cab_valorAcrescimoExtempTota
    FROM MOPREDOCUMENTOS cab
    WHERE cab.preDocumento = a.preDocumento;
    IF p_cancelandoExcluindoDocumento = 0
      AND a.cancelado = 0
    THEN
      SELECT COALESCE (MAX(1), 0)
      INTO v_cab_promocaoExiste
      FROM MOPREDOCUMXPROMOCOES
      WHERE preDocumento = a.preDocumento;
      IF v_cab_valorFreteGeral <> 0
        OR v_cab_valorSeguroGeral <> 0
        OR v_cab_valorDescontoGeral <> 0
        OR v_cab_valorOutrasDespesasGeral <> 0
        OR v_cab_valorAdicFreteMarGeral <> 0
        OR v_cab_valorDespesasAduanGeral <> 0
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF NOT(p_person_190_modeloFrete IS NULL)
        AND p_person_190_modeloFrete <> ' '
        AND a.valorFreteTotal <> 0
        AND v_cab_valorFreteTotal - a.valorFreteTotal <= 0
      THEN
        v_cab_modalidadeFrete := '9';
      END IF;    
      IF p_config_378_calcularVolumes = 1 THEN
        v_cab_quantidadeVolume := v_cab_quantidadeVolume - TRUNC(CASE WHEN a.controleQuantidade = 1 AND a.loteMultiplo <> 0 THEN a.quantidade / a.loteMultiplo ELSE a.quantidadeConvertida END,0);
      END IF;
      v_cab_quantidade := v_cab_quantidade - a.quantidadeConvertida;
      v_cab_pesoLiquido := v_cab_pesoLiquido - a.pesoLiquido;
      v_cab_pesoBruto := v_cab_pesoBruto - a.pesoBruto;
      IF a.tipoProduto = '09' THEN
        v_cab_valorServicosBruto := v_cab_valorServicosBruto - a.valorProdutoServicoBruto;
        v_cab_valorServicos := v_cab_valorServicos - a.valorProdutoServico;
        v_cab_valorDescontoServicos := v_cab_valorDescontoServicos - a.valorDescontoItem;
        v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos - a.valorAcrescimoItem;
      ELSE 
        v_cab_valorProdutosBruto := v_cab_valorProdutosBruto - a.valorProdutoServicoBruto;
        v_cab_valorProdutos := v_cab_valorProdutos - a.valorProdutoServico;
        v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos - a.valorDescontoItem;
        v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos - a.valorAcrescimoItem;
      END IF;
      v_cab_valorFreteItem := v_cab_valorFreteItem - a.valorFreteItem;
      v_cab_valorSeguroItem := v_cab_valorSeguroItem - a.valorSeguroItem;
      v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem - a.valorAdicFreteMarinhaMerItem;
      v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem - a.valorDespesasAduaneirasItem;
      v_cab_valorBasePagamento := v_cab_valorBasePagamento - a.valorBasePagamento;
      IF a.usarPrecoAVista = 1
        AND a.geraFinanceiro = 1
      THEN
        v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo - a.valorProdutoServico + a.valorDescontoTotal - a.valorOutrasDespesasTotal;
      END IF;
      v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento - a.valorDescontoPagamento;
      v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento - a.valorOutrasDespesasPagamento;
      v_cab_valorJurosPagamento := v_cab_valorJurosPagamento - a.valorJurosPagamento;
      v_cab_valorFreteTotal := v_cab_valorFreteTotal - a.valorFreteTotal;
      v_cab_valorSeguroTotal := v_cab_valorSeguroTotal - a.valorSeguroTotal;
      v_cab_valorDescontoTotal := v_cab_valorDescontoTotal - a.valorDescontoTotal;
      v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal - a.valorOutrasDespesasTotal;
      v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal - a.valorAdicFreteMarinhaMerTotal;
      v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal - a.valorDespesasAduaneirasTotal;
      v_cab_valorLiquidoItem := v_cab_valorLiquidoItem - a.valorLiquidoItem;
      v_cab_valorDescontoCustoOpItem := v_cab_valorDescontoCustoOpItem - a.valorDescontoCustoOpItem;
      v_cab_valorDescontoCustoOpGera := v_cab_valorDescontoCustoOpGera - a.valorDescontoCustoOpGeral;
      v_cab_valorDescontoCustoOpTota := v_cab_valorDescontoCustoOpTota - a.valorDescontoCustoOpTotal;
      v_cab_valorAcrescimoCustoOpIte := v_cab_valorAcrescimoCustoOpIte - a.valorAcrescimoCustoOpItem;
      v_cab_valorAcrescimoCustoOpGer := v_cab_valorAcrescimoCustoOpGer - a.valorAcrescimoCustoOpGeral;
      v_cab_valorAcrescimoCustoOpTot := v_cab_valorAcrescimoCustoOpTot - a.valorAcrescimoCustoOpTotal;
      v_cab_valorCustoOperacao := v_cab_valorCustoOperacao - a.valorCustoOperacao;
      v_cab_valorCMV := v_cab_valorCMV - a.valorCMV;
      v_cab_quantidadeExtemporanea := v_cab_quantidadeExtemporanea - a.quantidadeExtemporanea;
      v_cab_valorAcrescimoExtempSubt := v_cab_valorAcrescimoExtempSubt - a.valorAcrescimoExtempSubtotal;
      v_cab_valorAcrescimoExtempItem := v_cab_valorAcrescimoExtempItem - a.valorAcrescimoExtempItem;
      v_cab_valorAcrescimoExtempGera := v_cab_valorAcrescimoExtempGera - a.valorAcrescimoExtempGeral;
      v_cab_valorAcrescimoExtempTota := v_cab_valorAcrescimoExtempTota - a.valorAcrescimoExtempTotal;
      IF v_cab_valorDescontoGeral <> 0
        OR v_cab_valorOutrasDespesasGeral <> 0
        OR v_cab_valorPagamentoBruto <> 0
        OR v_cab_promocaoExiste = 1
      THEN
        ADD_PRE_DOC_PAG_EXCLUI_TROCA (
          r_calcularImpostos,
          a.preDocumento,
          v_cab_valorDescontoGeral,
          v_cab_valorOutrasDespesasGeral,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_promocaoExiste,
          a.valorDescontoGeral,
          a.valorDescontoPagamento,
          a.valorOutrasDespesasPagamento,
          a.valorJurosPagamento,
          r_calcularImpostos,
          v_cab_valorDescontoGeral,
          v_cab_condicaoPagamento,
          v_cab_numeroParcelas,
          v_cab_somaPrazoParcelas,
          v_cab_valorXPrazoParcelas,
          v_cab_prazoMedio,
          v_cab_prazoMedioPonderado,
          v_cab_valorEntradaMinima,
          v_cab_valorAVistaEntrada,
          v_cab_valorPagamentoBruto,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_valorPagamentoLiquido,
          v_cab_valorTroco,
          v_auxNumber, -- r_item_valorDescontoGeral
          v_auxNumber, -- r_item_valorDescontoPagamento
          v_auxNumber, -- r_item_valorOutrasDespPag
          v_auxNumber); -- r_item_valorJurosPagamento
      END IF;
      UPDATE MOPREDOCUMENTOS 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_valorOutrasDespesasGeral,
        valorAdicFreteMarinhaMerGeral = v_cab_valorAdicFreteMarGeral,
        valorDespesasAduaneirasGeral  = v_cab_valorDespesasAduanGeral,
        condicaoPagamento             = v_cab_condicaoPagamento,
        numeroParcelas                = v_cab_numeroParcelas,
        somaPrazoParcelas             = v_cab_somaPrazoParcelas,
        valorXPrazoParcelas           = v_cab_valorXPrazoParcelas,
        prazoMedio                    = v_cab_prazoMedio,
        prazoMedioPonderado           = v_cab_prazoMedioPonderado,
        valorBasePagamento            = v_cab_valorBasePagamento,
        valorAVistaMinimo             = v_cab_valorAVistaMinimo,
        valorEntradaMinima            = v_cab_valorEntradaMinima,
        valorAVistaEntrada            = v_cab_valorAVistaEntrada,
        valorPagamentoBruto           = v_cab_valorPagamentoBruto,
        valorDescontoPagamento        = v_cab_valorDescontoPagamento,
        valorOutrasDespesasPagamento  = v_cab_valorOutrasDespPagamento,
        valorJurosPagamento           = v_cab_valorJurosPagamento,
        valorPagamentoLiquido         = v_cab_valorPagamentoLiquido,
        valorTroco                    = v_cab_valorTroco,
        valorFreteTotal               = v_cab_valorFreteTotal,
        valorSeguroTotal              = v_cab_valorSeguroTotal,
        valorDescontoTotal            = v_cab_valorDescontoTotal,
        valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
        valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
        valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
        valorLiquidoItem              = v_cab_valorLiquidoItem,
        valorDescontoCustoOpItem      = v_cab_valorDescontoCustoOpItem,
        valorDescontoCustoOpGeral     = v_cab_valorDescontoCustoOpGera,
        valorDescontoCustoOpTotal     = v_cab_valorDescontoCustoOpTota,
        valorAcrescimoCustoOpItem     = v_cab_valorAcrescimoCustoOpIte,
        valorAcrescimoCustoOpGeral    = v_cab_valorAcrescimoCustoOpGer,
        valorAcrescimoCustoOpTotal    = v_cab_valorAcrescimoCustoOpTot,
        valorCustoOperacao            = v_cab_valorCustoOperacao,
        valorCMV                      = v_cab_valorCMV,
        quantidadeExtemporanea        = v_cab_quantidadeExtemporanea,
        valorAcrescimoExtempSubtotal  = v_cab_valorAcrescimoExtempSubt,
        valorAcrescimoExtempItem      = v_cab_valorAcrescimoExtempItem,
        valorAcrescimoExtempGeral     = v_cab_valorAcrescimoExtempGera,
        valorAcrescimoExtempTotal     = v_cab_valorAcrescimoExtempTota
      WHERE preDocumento = a.preDocumento;
    END IF;
    -- Cancela / Exclui Transferências vinculadas.
    FOR b IN (
      SELECT
        itemTransf.documentoTransferencia,
        docXTransf.entradaSaidaOriginal
      FROM MODOCTRANSFXPREDOCUM docXTransf
      JOIN MODOCUMENTOTRANSFXITENS itemTransf
      ON itemTransf.idItemDocTransferencia = docXTransf.idItemDocTransferencia
      WHERE docXTransf.idItemPreDocumento = p_item_idItemPreDocumento
      AND NOT EXISTS (
        SELECT 1
        FROM MODOCUMENTOTRANSFXITENS itemTransf2
        JOIN MODOCTRANSFXORCAMENTOITEM docXTransf2
        ON docXTransf2.idItemDocTransferencia = itemTransf2.idItemDocTransferencia
        WHERE itemTransf2.documentoTransferencia = itemTransf.documentoTransferencia
        AND docXTransf2.entradaSaidaOriginal <> 'O')
      AND NOT EXISTS (
        SELECT 1
        FROM MODOCUMENTOTRANSFXITENS itemTransf2
        JOIN MODOCTRANSFXPREDOCUM docXTransf2
        ON docXTransf2.idItemDocTransferencia = itemTransf2.idItemDocTransferencia
        WHERE itemTransf2.documentoTransferencia = itemTransf.documentoTransferencia
        AND (docXTransf2.entradaSaidaOriginal <> 'O'
          OR docXTransf2.idItemPreDocumento <> docXTransf.idItemPreDocumento))
      AND NOT EXISTS (
        SELECT 1
        FROM MODOCUMENTOTRANSFXITENS itemTransf2
        JOIN MODOCTRANSFXDOCFISCAL docXTransf2
        ON docXTransf2.idItemDocTransferencia = itemTransf2.idItemDocTransferencia
        WHERE itemTransf2.documentoTransferencia = itemTransf.documentoTransferencia
        AND docXTransf2.entradaSaidaOriginal <> 'O')
      GROUP BY
        itemTransf.documentoTransferencia,
        docXTransf.entradaSaidaOriginal)
    LOOP
      IF b.entradaSaidaOriginal = 'O' THEN
        ADD_DOCTRANSF_CAB_EXCLUI (b.documentoTransferencia);
      ELSIF p_cancelando_Excluindo = 'C' THEN
        ADD_DOCTRANSF_CAB_SIT_GRAVA (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_config_354_estabProximoId,
          b.documentoTransferencia,
          'C',
          0,
          'Cancelamento Automático',
          'ADD_PRE_DOC_ITEM_EXCLUI');
      END IF;
    END LOOP;
    FOR b IN (
      SELECT
        docXTransf.idItemDocTransferencia,
        cabTransf.situacaoDocTransferencia
      FROM MODOCTRANSFXPREDOCUM docXTransf
      JOIN MODOCUMENTOTRANSFXITENS itemTransf
      ON itemTransf.idItemDocTransferencia = docXTransf.idItemDocTransferencia
      JOIN MODOCUMENTOSTRANSFERENCIA cabTransf
      ON cabTransf.documentoTransferencia = itemTransf.documentoTransferencia
      WHERE docXTransf.idItemPreDocumento = p_item_idItemPreDocumento
      AND docXTransf.entradaSaidaOriginal = 'O')
    LOOP
      ADD_DOCTRANSF_ITEM_EXCLUI (
        b.idItemDocTransferencia,
        'C', -- p_cancela_Exclui_Reabre
        b.situacaoDocTransferencia,
        0, -- p_cab_quantidadeConvertida,
        0, -- p_cab_valorProdutoServico,
        /* Retornos */
        v_auxNumber, -- r_cab_quantidadeConvertida
        v_auxNumber); -- r_cab_valorProdutoServico
    END LOOP;
    FOR b IN (
      SELECT idProdutoXCusto
      FROM CAPRODUTOXCUSTOS
      WHERE idItemPreDocumento = p_item_idItemPreDocumento)
    LOOP
      ADD_PRODUTO_CUSTO_EXCLUI (b.idProdutoXCusto);
    END LOOP;
    FOR b IN (
      SELECT
        id,
        idAtendimento
      FROM MOPREDOCUMXATENDIMENTO
      WHERE idItemPreDocumento = p_item_idItemPreDocumento)
    LOOP
      UPDATE MOATENDIMENTOS c SET
        c.situacaoAtendimento = 'P',
        c.dataAtendimento = NULL,
        c.cliente = 0,
        c.comissionadoB = 0,
        c.comissionadoC = 0
      WHERE c.idAtendimento = b.idAtendimento;
      DELETE MOPREDOCUMXATENDIMENTO c WHERE c.id = b.id;
    END LOOP;
    ADD_MOTIVO_PRE_DOC_ITE_EXCLUI (
      p_item_idItemPreDocumento,
      0,
      v_auxNumber);
    ADD_ESTOQUE_PRE_DOC_EXCLUI (
      p_item_idItemPreDocumento,
      '',
      v_auxVarchar);
    ADD_VALEDESCONTO_PRE_ITE_EXCL (
      p_item_idItemPreDocumento,
      '',
      v_auxVarchar);
    DELETE MOPREDOCUMXPRODUTOFILHO
    WHERE idItemPreDocumento = p_item_idItemPreDocumento;
    DELETE MOPREDOCUMXPROMOCOES
    WHERE idItemPreDocumento = p_item_idItemPreDocumento;
    DELETE MOINGRESSOS
    WHERE idItemPreDocumento = p_item_idItemPreDocumento;
    DELETE CATABELAPRECOXFORMACOESPR
    WHERE idItemPreDocumento = p_item_idItemPreDocumento;
    UPDATE MOORCAMENTOXNUMEROSSERIE numSer
    SET numSer.efetivado = 0
    WHERE numSer.efetivado = 1
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXORCAMENTOITEM docXDoc
      WHERE docXDoc.idItemPreDocumento = p_item_idItemPreDocumento
      AND docXDoc.idItemOrcamento = numSer.idItemOrcamento
      AND docXDoc.quantidade <> 0)
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXNUMEROSSERIE numSerDoc
      WHERE numSerDoc.idItemPreDocumento = p_item_idItemPreDocumento
      AND numSerDoc.idNumeroSerie = numSer.idNumeroSerie);
    UPDATE MOPREDOCUMXNUMEROSSERIE numSer
    SET numSer.devolvidoRetornado = 0
    WHERE numSer.devolvidoRetornado = 1
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXPREDOCUM docXDoc
      WHERE docXDoc.idItemPreDocumento = p_item_idItemPreDocumento
      AND docXDoc.idItemPreDocReferenciado = numSer.idItemPreDocumento
      AND docXDoc.quantidade <> 0)
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXNUMEROSSERIE numSerDoc
      WHERE numSerDoc.idItemPreDocumento = p_item_idItemPreDocumento
      AND numSerDoc.idNumeroSerie = numSer.idNumeroSerie);
    UPDATE MODOCFISCALXNUMEROSSERIE numSer
    SET numSer.devolvidoRetornado = 0
    WHERE numSer.devolvidoRetornado = 1
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXDOCFISCAL docXDoc
      WHERE docXDoc.idItemPreDocumento > 0
      AND docXDoc.idItemDocFiscalReferenciado = numSer.idItemDocFiscal
      AND docXDoc.quantidade <> 0)
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXNUMEROSSERIE numSerDoc
      WHERE numSerDoc.idItemPreDocumento > 0
      AND numSerDoc.idNumeroSerie = numSer.idNumeroSerie);
    FOR b IN (
      SELECT
        entrega,
        idItemOrcamento,
        quantidade
      FROM MOENTREGAS
      WHERE idItemPreDocumentoRemessa = p_item_idItemPreDocumento)
    LOOP
      ADD_ENTREGA_SITUACAO_TROCA (
        p_sys_usuarioLogado,
        p_sys_estabelecimentoAtivo,
        b.idItemOrcamento,
        b.entrega,
        b.quantidade,
        1, -- p_situacaoEntrega
        'ADD_PRE_DOC_ITEM_EXCLUI');
      ADD_ENTREGA_CRIA_PENDENTE (
        p_sys_usuarioLogado,
        p_sys_estabelecimentoAtivo,
        p_config_209_filtrarGrupoEcon,
        p_config_354_estabProximoId,
        p_config_362_calcCustoPorGrade,
        b.idItemOrcamento);
    END LOOP;
    FOR b IN (
      SELECT idConserto
      FROM MOCONSERTOS
      WHERE idItemPreDocumento = p_item_idItemPreDocumento)
    LOOP
      IF p_cancelando_Excluindo = 'C' THEN
        ADD_CONSERTO_CANCELA (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_person_184_tipoEventoCancCon,
          p_config_354_estabProximoId,
          b.idConserto);
      ELSE
        ADD_CONSERTO_EXCLUI(b.idConserto);
      END IF;
    END LOOP;
    UPDATE MOCONSERTOS SET
      idItemPreDocumentoDevolucao = 0,
      situacaoConserto = 'I'
    WHERE idItemPreDocumentoDevolucao = p_item_idItemPreDocumento;
    FOR b IN (
      SELECT
        id,
        idItemOrcamento,
        quantidade
      FROM MOPREDOCUMXORCAMENTOITEM
      WHERE idItemPreDocumento = p_item_idItemPreDocumento)
    LOOP
      IF b.quantidade <> 0 THEN
        ADD_ORCAMENTO_ITEM_SALDO_VOLTA (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_person_184_tipoEventoCancCon,
          p_config_95_etapaOrcamentoCanc,
          p_config_96_etapaOrdemServCanc,
          p_config_97_etapaPedCompraCanc,
          p_config_209_filtrarGrupoEcon,
          p_config_354_estabProximoId,
          p_config_362_calcCustoPorGrade,
          p_config_415_etapaFatContrCanc,
          b.idItemOrcamento,
          b.quantidade);
      END IF;
      DELETE MOPREDOCUMXORCAMENTOITEM c
      WHERE c.id = b.id;
    END LOOP;
    FOR b IN (
      SELECT
        docXDoc.id,
        docXDoc.idItemPreDocReferenciado,
        docXDoc.quantidade,
        itemPre.preDocumento,
        cabPre.statusPreDocumento
      FROM MOPREDOCUMXPREDOCUM docXDoc
      JOIN MOPREDOCUMXITENS itemPre
      ON itemPre.idItemPreDocumento = docXDoc.idItemPreDocReferenciado
      JOIN MOPREDOCUMENTOS cabPre
      ON cabPre.predocumento = itemPre.preDocumento
      WHERE docXDoc.idItemPreDocumento = p_item_idItemPreDocumento)
    LOOP
      IF v_cab_devolucaoAnulacaoRetorno = 1 THEN
        FOR c IN (
          SELECT
            c.entrega,
            c.idItemOrcamento,
            c.quantidade,
            c.situacaoEntrega
          FROM MOENTREGAS c
          WHERE c.idItemPreDocumentoRemessa = b.idItemPreDocReferenciado
          AND c.situacaoEntrega IN (6,7))
        LOOP
          ADD_ENTREGA_SITUACAO_TROCA (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            c.idItemOrcamento,
            c.entrega,
            c.quantidade,
            c.situacaoEntrega - 1,
            'ADD_PRE_DOC_ITEM_EXCLUI');
          ADD_ENTREGA_CRIA_PENDENTE (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            p_config_209_filtrarGrupoEcon,
            p_config_354_estabProximoId,
            p_config_362_calcCustoPorGrade,
            c.idItemOrcamento);
        END LOOP;
      END IF;
      IF b.quantidade <> 0 THEN
        ADD_DOC_ATUALIZA_QUANT_DEVOLV (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_config_209_filtrarGrupoEcon,
          p_config_354_estabProximoId,
          p_config_362_calcCustoPorGrade,
          v_cab_devolucaoAnulacaoRetorno,
          'P',
          p_item_idItemPreDocumento,
          - b.quantidade,
          - a.quantidadeConvertida,
          'P',
          b.idItemPreDocReferenciado);
      END IF;
      IF b.statusPreDocumento = 'F' THEN
        UPDATE MOPREDOCUMENTOS c
        SET c.statusPreDocumento = 'A'
        WHERE c.preDocumento = b.preDocumento;
      END IF;
      DELETE MOPREDOCUMXPREDOCUM c
      WHERE c.id = b.id;
    END LOOP;
    DELETE MOPREDOCUMXPREDOCUM
    WHERE idItemPreDocReferenciado = p_item_idItemPreDocumento;
    FOR b IN (
      SELECT
        id,
        idItemDocFiscalReferenciado,
        quantidade
      FROM MOPREDOCUMXDOCFISCAL
      WHERE idItemPreDocumento = p_item_idItemPreDocumento)
    LOOP
      IF v_cab_devolucaoAnulacaoRetorno = 1 THEN
        FOR c IN (
          SELECT
            c.entrega,
            c.idItemOrcamento,
            c.quantidade,
            c.situacaoEntrega
          FROM MOENTREGAS c
          WHERE c.idItemDocFiscalRemessa = b.idItemDocFiscalReferenciado
          AND c.situacaoEntrega IN (6,7))
        LOOP
          ADD_ENTREGA_SITUACAO_TROCA (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            c.idItemOrcamento,
            c.entrega,
            c.quantidade,
            c.situacaoEntrega - 1,
            'ADD_PRE_DOC_ITEM_EXCLUI');
          ADD_ENTREGA_CRIA_PENDENTE (
            p_sys_usuarioLogado,
            p_sys_estabelecimentoAtivo,
            p_config_209_filtrarGrupoEcon,
            p_config_354_estabProximoId,
            p_config_362_calcCustoPorGrade,
            c.idItemOrcamento);
        END LOOP;
      END IF;
      IF b.quantidade <> 0 THEN
        ADD_DOC_ATUALIZA_QUANT_DEVOLV (
          p_sys_usuarioLogado,
          p_sys_estabelecimentoAtivo,
          p_config_209_filtrarGrupoEcon,
          p_config_354_estabProximoId,
          p_config_362_calcCustoPorGrade,
          v_cab_devolucaoAnulacaoRetorno,
          'P',
          p_item_idItemPreDocumento,
          - b.quantidade,
          - a.quantidadeConvertida,
          'D',
          b.idItemDocFiscalReferenciado);
      END IF;
      DELETE MOPREDOCUMXDOCFISCAL c
      WHERE c.id = b.id;
    END LOOP;
    DELETE MODOCFISCALXPREDOCUM
    WHERE idItemPreDocReferenciado = p_item_idItemPreDocumento;
    DELETE MODOCTRANSFXPREDOCUM
    WHERE idItemPreDocumento = p_item_idItemPreDocumento;
    IF p_cancelando_Excluindo = 'C' THEN
      UPDATE MOPREDOCUMXITENS
      SET cancelado = 1
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
    ELSE
      DELETE MOPREDOCUMXCOMPOSICOESPR
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
      DELETE MOPREDOCUMXNUMEROSSERIE
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
      DELETE MOPREDOCUMXEMBALAGENSTIN
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
      DELETE MOPREDOCUMXCENTROSCUSTOS
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
      DELETE MOPREDOCUMXPROJETOS
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
      DELETE MODOCTROCAXITENS
      WHERE idItemPreDocumentoSaida = p_item_idItemPreDocumento;
      DELETE MOPREDOCUMXITENS
      WHERE idItemPreDocumento = p_item_idItemPreDocumento;
      IF p_cancelandoExcluindoDocumento = 0 THEN
        v_auxNumber := 0;
        FOR b IN (
          SELECT idItemPreDocumento
          FROM MOPREDOCUMXITENS b
          WHERE b.preDocumento = a.preDocumento
          AND b.idItemPreDocumento <> p_item_idItemPreDocumento
          ORDER BY b.sequencia)
        LOOP
          v_auxNumber := v_auxNumber + 1;
          UPDATE MOPREDOCUMXITENS c
          SET c.sequencia = v_auxNumber
          WHERE c.idItemPreDocumento = b.idItemPreDocumento;
        END LOOP;
      END IF;
    END IF;
  END LOOP;
END ADD_PRE_DOC_ITEM_EXCLUI;

/

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

/

create or replace PROCEDURE ADD_DOC_FISC_ITEM_GRAVA (
  p_sessaoClient                 IN VARCHAR2,
  p_sys_usuarioLogado            IN NUMBER,
  p_sys_perfilUsuarioLogado      IN NUMBER,
  p_sys_estabelecimentoAtivo     IN NUMBER,
  p_person_138_etapOrcEmProcesso IN NUMBER,
  p_person_139_etapOrcLiberado   IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_64_casasDecSaidas     IN CHAR,
  p_config_65_casasDecEntrada    IN CHAR,
  p_config_198_obs_add_referenc  IN NUMBER,
  p_config_199_obs_add_caractA   IN NUMBER,
  p_config_200_obs_add_caractB   IN NUMBER,
  p_config_201_obs_add_caractC   IN NUMBER,
  p_config_202_obs_add_caractD   IN NUMBER,
  p_config_203_obs_add_caractE   IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_227_manterPessoaOrcam IN NUMBER,
  p_config_230_etapaPedComprParc IN NUMBER,
  p_config_354_estabProximoId    IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_config_413_obs_add_marca     IN NUMBER,
  p_config_418_obs_efetarEnter   IN NUMBER,
  p_manterFinanceiro_Retotalizar IN NUMBER,
  p_buscarAliquotas_CalcularImp  IN CHAR, -- N = Não, S = Sim, T = Troca Produto / Operação Fiscal, I = Calcular Impostos
  p_buscarGeraFinanceiroEstoque  IN NUMBER,
  p_tipoDocumentoReferenciado    IN CHAR, -- B = Balanço, D = Documento Fiscal, G = Grade DF-e, O = Orçamento, P, Pré-Documento, T = Transferência
  p_idItemReferenciado           IN NUMBER,
  p_quantidadeReferenciada       IN NUMBER,
  p_tempComp_nomeTempComposicao  IN VARCHAR2,
  p_tempComp_sequencia           IN NUMBER,
  p_calcularImpostos             IN NUMBER,
  p_item_idItemDocFiscal         IN NUMBER,
  p_item_idDocumentoFiscal       IN NUMBER,
  p_item_pedidoCompraFornecedor  IN VARCHAR2,
  p_item_sequenciaPedidoCompraFo IN NUMBER,
  p_item_modeloDocumento         IN NUMBER,
  p_item_estabelecimentoOriginal IN NUMBER,
  p_item_vendedor                IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_idFormulaTinta          IN NUMBER,
  p_item_personalizacao          IN NUMBER,
  p_item_idLoteEstoque           IN NUMBER,
  p_item_idNumeroSerie           IN NUMBER,
  p_item_localEstoque            IN NUMBER,
  p_item_pessoaParticipante      IN NUMBER,
  p_item_controleQuantidade      IN NUMBER,
  p_item_unidadeMedidaConversao  IN VARCHAR2,
  p_item_conversorQuantidade     IN NUMBER,
  p_item_loteMinimo              IN NUMBER,
  p_item_loteMultiplo            IN NUMBER,
  p_item_altura                  IN NUMBER,
  p_item_largura                 IN NUMBER,
  p_item_comprimento             IN NUMBER,
  p_item_pecas                   IN NUMBER,
  p_item_quantidade              IN NUMBER,
  p_item_quantidadeConvertida    IN NUMBER,
  p_item_pesoLiquido             IN NUMBER,
  p_item_pesoBruto               IN NUMBER,
  p_item_tipoPreco               IN CHAR,
  p_item_tabelaPreco             IN VARCHAR2,
  p_item_precoSugestaoAPrazo     IN NUMBER,
  p_item_precoSugestaoAVista     IN NUMBER,
  p_item_precoDesconto           IN NUMBER,
  p_item_precoMinimo             IN NUMBER,
  p_item_usarPrecoAVista         IN NUMBER,
  p_item_precoUnitarioBruto      IN NUMBER,
  p_item_acrescimoUnitarioCompos IN NUMBER,
  p_item_precoUnitario           IN NUMBER,
  p_item_percDescontoItem        IN NUMBER,
  p_item_valorDescontoItem       IN NUMBER,
  p_item_percAcrescimoItem       IN NUMBER,
  p_item_valorAcrescimoItem      IN NUMBER,
  p_item_valorFreteItem          IN NUMBER,
  p_item_valorSeguroItem         IN NUMBER,
  p_item_valorAdicFreteMarItem   IN NUMBER,
  p_item_valorDespesasAduanItem  IN NUMBER,
  p_item_quantidadeExtemporanea  IN NUMBER,
  p_item_acrescimoUnitarioExtemp IN NUMBER,
  p_item_valorAcrescimoExtempIte IN NUMBER,
  p_item_valorDescontoCustoOpIte IN NUMBER,
  p_item_valorAcrescimoCustoOpIt IN NUMBER,
  p_item_observacoesDigitadas    IN VARCHAR2,
  p_item_valorFreteGeral         IN NUMBER,
  p_item_valorSeguroGeral        IN NUMBER,
  p_item_valorDescontoGeral      IN NUMBER,
  p_item_valorOutrasDespesasGer  IN NUMBER,
  p_item_valorAdicFreteMarGeral  IN NUMBER,
  p_item_valorDespesasAduanGeral IN NUMBER,
  p_item_valorAcrescimoExtempGer IN NUMBER,
  p_item_valorDescontoCustoOpGer IN NUMBER,
  p_item_valorAcrescimoCustoOpGe IN NUMBER,
  p_item_valorDescontoPagamento  IN NUMBER,
  p_item_valorOutrasDespPagament IN NUMBER,
  p_item_valorJurosPagamento     IN NUMBER,
  p_item_percentualDevolucao     IN NUMBER,
  p_item_valorIPIDevolucao       IN NUMBER,
  p_item_operacaoFiscal          IN NUMBER,
  p_item_movimentaEstoque        IN NUMBER,
  p_item_movimentaEstoqueFiscal  IN NUMBER,
  p_item_geraFinanceiro          IN NUMBER,
  p_item_cfop                    IN NUMBER,
  p_item_indicadorISSQN          IN CHAR,
  p_item_aliquotaISSQN           IN NUMBER,
  p_item_retidoISSQN             IN NUMBER,
  p_item_tributadoForaMunicipio  IN NUMBER,
  p_item_incentivoFiscal         IN NUMBER,
  p_item_listaServicos           IN NUMBER,
  p_item_cnae                    IN NUMBER,
  p_item_idServicoMunicipio      IN NUMBER,
  p_item_numeroProcessoAdministr IN VARCHAR2,
  p_item_retencaoIRRF            IN NUMBER,
  p_item_retencaoINSS            IN NUMBER,
  p_item_retencaoPIS             IN NUMBER,
  p_item_retencaoCOFINS          IN NUMBER,
  p_item_retencaoCSLL            IN NUMBER,
  p_item_retencaoOutros          IN NUMBER,
  p_item_aliquotaII              IN NUMBER,
  p_item_aliquotaIOF             IN NUMBER,
  p_item_codigoEnquadramentoIPI  IN NUMBER,
  p_item_stIPI                   IN CHAR,
  p_item_aliquotaIPI             IN NUMBER,
  p_item_valorAliquotaIPI        IN NUMBER,
  p_item_stPIS                   IN CHAR,
  p_item_aliquotaPIS             IN NUMBER,
  p_item_valorAliquotaPIS        IN NUMBER,
  p_item_aliquotaPISST           IN NUMBER,
  p_item_valorAliquotaPISST      IN NUMBER,
  p_item_stCOFINS                IN CHAR,
  p_item_aliquotaCOFINS          IN NUMBER,
  p_item_valorAliquotaCOFINS     IN NUMBER,
  p_item_aliquotaCOFINSST        IN NUMBER,
  p_item_valorAliquotaCOFINSST   IN NUMBER,
  p_item_stSimplesNacional       IN CHAR,
  p_item_creditoSimplesNacional  IN NUMBER,
  p_item_stICMS                  IN CHAR,
  p_item_modalBaseCalcICMS       IN CHAR,
  p_item_reducaoBaseICMS         IN NUMBER,
  p_item_aliquotaICMS            IN NUMBER,
  p_item_diferimentoICMS         IN NUMBER,
  p_item_motivoDesoneracaoICMS   IN CHAR,
  p_item_idBeneficio             IN NUMBER,
  p_item_modalBaseCalcICMSST     IN CHAR,
  p_item_margemValorAdicionadoST IN NUMBER,
  p_item_reducaoBaseST           IN NUMBER,
  p_item_aliquotaICMSST          IN NUMBER,
  p_item_aliquotaSTSuportConsFin IN NUMBER,
  p_item_reducaoBaseICMSEfetivo  IN NUMBER,
  p_item_aliquotaICMSEfetivo     IN NUMBER,
  p_item_stICMSEscrituracao      IN CHAR,
  p_item_reducaoBaseICMSEscritur IN NUMBER,
  p_item_aliquotaICMSEscrituraca IN NUMBER,
  p_item_diferimentoICMSEscritur IN NUMBER,
  p_item_margemValorAdicSTEscrit IN NUMBER,
  p_item_reducaoBaseSTEscriturac IN NUMBER,
  p_item_aliquotaICMSSTEscritura IN NUMBER,
  p_item_somarICMSST             IN NUMBER,
  p_item_aliquotaICMSUFDestinat  IN NUMBER,
  p_item_aliquotaICMSInterestad  IN NUMBER,
  p_item_partilhaICMSInterestad  IN NUMBER,
  p_item_aliquotaFCP             IN NUMBER,
  p_item_aliquotaFCPST           IN NUMBER,
  p_item_aliquotaFCPSTAnteriorm  IN NUMBER,
  p_item_aliquotaFCPUFDestinat   IN NUMBER,
  p_item_aliquotaEstImpFederais  IN NUMBER,
  p_item_aliquotaEstImpEstaduais IN NUMBER,
  p_item_aliquotaEstImpMunicipai IN NUMBER,
  p_item_baseISSQN               IN NUMBER,
  p_item_valorISSQN              IN NUMBER,
  p_item_baseRetIRRF             IN NUMBER,
  p_item_valorRetIRRF            IN NUMBER,
  p_item_baseRetINSS             IN NUMBER,
  p_item_valorRetINSS            IN NUMBER,
  p_item_baseRetPIS              IN NUMBER,
  p_item_valorRetPIS             IN NUMBER,
  p_item_baseRetCOFINS           IN NUMBER,
  p_item_valorRetCOFINS          IN NUMBER,
  p_item_baseRetCSLL             IN NUMBER,
  p_item_valorRetCSLL            IN NUMBER,
  p_item_baseRetOutros           IN NUMBER,
  p_item_valorRetOutros          IN NUMBER,
  p_item_baseII                  IN NUMBER,
  p_item_valorII                 IN NUMBER,
  p_item_baseIOF                 IN NUMBER,
  p_item_valorIOF                IN NUMBER,
  p_item_baseIPI                 IN NUMBER,
  p_item_valorIPI                IN NUMBER,
  p_item_basePIS                 IN NUMBER,
  p_item_valorPIS                IN NUMBER,
  p_item_basePISST               IN NUMBER,
  p_item_valorPISST              IN NUMBER,
  p_item_baseCOFINS              IN NUMBER,
  p_item_valorCOFINS             IN NUMBER,
  p_item_baseCOFINSST            IN NUMBER,
  p_item_valorCOFINSST           IN NUMBER,
  p_item_baseCreditoSimplesNac   IN NUMBER,
  p_item_valorCreditoSimplesNac  IN NUMBER,
  p_item_baseICMS                IN NUMBER,
  p_item_valorICMSOperacao       IN NUMBER,
  p_item_valorICMSDiferido       IN NUMBER,
  p_item_valorICMS               IN NUMBER,
  p_item_valorICMSDesoneracao    IN NUMBER,
  p_item_baseICMSST              IN NUMBER,
  p_item_valorICMSST             IN NUMBER,
  p_item_baseICMSSTAnteriormente IN NUMBER,
  p_item_valorICMSSTAnteriorment IN NUMBER,
  p_item_valorICMSProprioSubstit IN NUMBER,
  p_item_baseICMSEfetivo         IN NUMBER,
  p_item_valorICMSEfetivo        IN NUMBER,
  p_item_baseICMSEscrituracao    IN NUMBER,
  p_item_valorICMSEscrituracao   IN NUMBER,
  p_item_valorICMSDesonEscritura IN NUMBER,
  p_item_baseICMSSTEscrituracao  IN NUMBER,
  p_item_valorICMSSTEscrituracao IN NUMBER,
  p_item_baseICMSUFDestinatario  IN NUMBER,
  p_item_valorICMSUFDestinatario IN NUMBER,
  p_item_baseICMSUFRemetente     IN NUMBER,
  p_item_valorICMSUFRemetente    IN NUMBER,
  p_item_baseFCP                 IN NUMBER,
  p_item_valorFCP                IN NUMBER,
  p_item_baseFCPST               IN NUMBER,
  p_item_valorFCPST              IN NUMBER,
  p_item_baseFCPSTAnteriormente  IN NUMBER,
  p_item_valorFCPSTAnteriormente IN NUMBER,
  p_item_baseFCPUFDestinatario   IN NUMBER,
  p_item_valorFCPUFDestinatario  IN NUMBER,
  p_item_baseEstimadaImpostos    IN NUMBER,
  p_item_valorEstImpFederais     IN NUMBER,
  p_item_valorEstImpEstaduais    IN NUMBER,
  p_item_valorEstImpMunicipais   IN NUMBER,
  p_nivel                        IN NUMBER,
  p_buffer_idItemDocFiscal       IN VARCHAR2,
  /* Retornos */
  r_calcularImpostos             OUT NUMBER,
  r_item_idItemDocFiscal         OUT NUMBER,
  r_buffer_idItemDocFiscal       OUT VARCHAR2,
  r_valorInserido                OUT NUMBER)
IS
  v_cab_origemDocumento          NUMBER;
  v_cab_tipoDocumento            NUMBER;
  v_cab_entradaSaida             CHAR (1);
  v_cab_devolucaoAnulacaoRetorno NUMBER;
  v_cab_finalidadeNota           CHAR (1);
  v_cab_atualizaCustoMedio       NUMBER;
  v_cab_nfFornecedor             NUMBER;
  v_cab_documentoFiscal          NUMBER;
  v_cab_estabelecimento          NUMBER;
  v_cab_dataEmissao              DATE;
  v_cab_pessoa                   NUMBER;
  v_cab_vendaConsumidor          NUMBER;
  v_cab_enderecoEntregaPessoa    NUMBER;
  v_cab_municipioFatoGerador     NUMBER;
  v_cab_localDestinoOperacao     CHAR (1);
  v_cab_indicadorConsumidorFinal CHAR (1);
  v_cab_projeto                  VARCHAR2 (60);
  v_cab_modalidadeFrete          CHAR (1);
  v_cab_tipoPagamentoFrete       CHAR (1);
  v_cab_situacaoDocumentoFiscal  NUMBER;
  v_cab_ultimoVendedorItem       NUMBER;
  v_cab_quantidadeVolume         NUMBER;
  v_cab_quantidade               NUMBER;
  v_cab_pesoLiquido              NUMBER;
  v_cab_pesoBruto                NUMBER;
  v_cab_valorProdutosBruto       NUMBER;
  v_cab_valorProdutos            NUMBER;
  v_cab_valorDescontoProdutos    NUMBER;
  v_cab_valorAcrescimoProdutos   NUMBER;
  v_cab_valorServicosBruto       NUMBER;
  v_cab_valorServicos            NUMBER;
  v_cab_valorDescontoServicos    NUMBER;
  v_cab_valorAcrescimoServicos   NUMBER;
  v_cab_valorFreteItem           NUMBER;
  v_cab_valorSeguroItem          NUMBER;
  v_cab_valorAdicFreteMarItem    NUMBER;
  v_cab_valorDespesasAduanItem   NUMBER;
  v_cab_valorFreteGeral          NUMBER;
  v_cab_valorSeguroGeral         NUMBER;
  v_cab_valorDescontoGeral       NUMBER;
  v_cab_valorOutrasDespesasGeral NUMBER;
  v_cab_valorAdicFreteMarGeral   NUMBER;
  v_cab_valorDespesasAduanGeral  NUMBER;
  v_cab_condicaoPagamento        NUMBER;
  v_cab_numeroParcelas           NUMBER;
  v_cab_somaPrazoParcelas        NUMBER;
  v_cab_valorXPrazoParcelas      NUMBER;
  v_cab_prazoMedio               NUMBER;
  v_cab_prazoMedioPonderado      NUMBER;
  v_cab_valorBasePagamento       NUMBER;
  v_cab_valorAVistaMinimo        NUMBER;
  v_cab_valorEntradaMinima       NUMBER;
  v_cab_valorAVistaEntrada       NUMBER;
  v_cab_valorPagamentoBruto      NUMBER;
  v_cab_valorDescontoPagamento   NUMBER;
  v_cab_valorOutrasDespPagamento NUMBER;
  v_cab_valorJurosPagamento      NUMBER;
  v_cab_valorPagamentoLiquido    NUMBER;
  v_cab_valorTroco               NUMBER;
  v_cab_valorFreteTotal          NUMBER;
  v_cab_valorSeguroTotal         NUMBER;
  v_cab_valorDescontoTotal       NUMBER;
  v_cab_valorOutrasDespesasTotal NUMBER;
  v_cab_valorAdicFreteMarTotal   NUMBER;
  v_cab_valorDespesasAduanTotal  NUMBER;
  v_cab_valorLiquidoItem         NUMBER;
  v_cab_valorDescontoCustoOpItem NUMBER;
  v_cab_valorDescontoCustoOpGera NUMBER;
  v_cab_valorDescontoCustoOpTota NUMBER;
  v_cab_valorAcrescimoCustoOpIte NUMBER;
  v_cab_valorAcrescimoCustoOpGer NUMBER;
  v_cab_valorAcrescimoCustoOpTot NUMBER;
  v_cab_valorCustoOperacao       NUMBER;
  v_cab_valorCMV                 NUMBER;
  v_cab_quantidadeExtemporanea   NUMBER;
  v_cab_valorAcrescimoExtempSubt NUMBER;
  v_cab_valorAcrescimoExtempItem NUMBER;
  v_cab_valorAcrescimoExtempGera NUMBER;
  v_cab_valorAcrescimoExtempTota NUMBER;
  v_est_grupoFiscal              NUMBER;
  v_pessEst_regimeTributario     CHAR (1);
  v_munEndEst_uf                 CHAR (2);
  v_pess_indicadorInscricaoEstad CHAR (1);
  v_endPess_enderecoPessoa       NUMBER;
  v_munEndPess_uf                CHAR (2);
  v_munEndEntr_uf                CHAR (2);
  v_inserindoItem                NUMBER;
  v_cab_promocaoExiste           NUMBER;
  v_ini_cab_valorFreteItem       NUMBER;
  v_ini_cab_valorFreteGeral      NUMBER;
  v_ini_gradeProduto             NUMBER;
  v_ini_personalizacao           NUMBER;
  v_ini_operacaoFiscal           NUMBER;
  v_ini_quantidade               NUMBER;
  v_ini_valorProdutoServicoBruto NUMBER;
  v_ini_valorProdutoServico      NUMBER;
  v_ini_valorDescontoItem        NUMBER;
  v_ini_valorAcrescimoItem       NUMBER;
  v_ini_valorBasePagamento       NUMBER;
  v_ini_valorFreteTotal          NUMBER;
  v_ini_valorSeguroTotal         NUMBER;
  v_ini_valorDescontoTotal       NUMBER;
  v_ini_valorOutrasDespesasTotal NUMBER;
  v_ini_valorAdicFreteMarTotal   NUMBER;
  v_ini_valorDespesasAduanTotal  NUMBER;
  v_item_sequencia               NUMBER;
  v_item_cancelado               NUMBER;
  v_item_quantidadeDevolvidaRet  NUMBER;
  v_item_precoUnitario           NUMBER;
  v_item_precoUnitarioConvertido NUMBER;
  v_item_valorProdutoServicoBrut NUMBER;
  v_item_valorProdutoServico     NUMBER;
  v_item_valorDescontoGeral      NUMBER;
  v_item_valorBasePagamento      NUMBER;
  v_item_valorDescontoPagamento  NUMBER;
  v_item_valorOutrasDespPagament NUMBER;
  v_item_valorJurosPagamento     NUMBER;
  v_item_valorFreteTotal         NUMBER;
  v_item_valorSeguroTotal        NUMBER;
  v_item_valorDescontoTotal      NUMBER;
  v_item_valorOutrasDespesasTot  NUMBER;
  v_item_valorAdicFreteMarTotal  NUMBER;
  v_item_valorDespesasAduanTotal NUMBER;
  v_item_movimentaEstoque        NUMBER;
  v_item_movimentaEstoqueFiscal  NUMBER;
  v_item_geraFinanceiro          NUMBER;
  v_item_cfop                    NUMBER;
  v_item_indicadorISSQN          CHAR (1);
  v_item_aliquotaISSQN           NUMBER;
  v_item_retidoISSQN             NUMBER;
  v_item_tributadoForaMunicipio  NUMBER;
  v_item_incentivoFiscal         NUMBER;
  v_item_listaServicos           NUMBER;
  v_item_cnae                    NUMBER;
  v_item_idServicoMunicipio      NUMBER;
  v_item_numeroProcessoAdministr VARCHAR2 (30);
  v_item_retencaoIRRF            NUMBER;
  v_item_retencaoINSS            NUMBER;
  v_item_retencaoPIS             NUMBER;
  v_item_retencaoCOFINS          NUMBER;
  v_item_retencaoCSLL            NUMBER;
  v_item_retencaoOutros          NUMBER;
  v_item_aliquotaII              NUMBER;
  v_item_aliquotaIOF             NUMBER;
  v_item_codigoEnquadramentoIPI  NUMBER;
  v_item_stIPI                   CHAR (2);
  v_item_aliquotaIPI             NUMBER;
  v_item_valorAliquotaIPI        NUMBER;
  v_item_stPIS                   CHAR (2);
  v_item_aliquotaPIS             NUMBER;
  v_item_valorAliquotaPIS        NUMBER;
  v_item_aliquotaPISST           NUMBER;
  v_item_valorAliquotaPISST      NUMBER;
  v_item_stCOFINS                CHAR (2);
  v_item_aliquotaCOFINS          NUMBER;
  v_item_valorAliquotaCOFINS     NUMBER;
  v_item_aliquotaCOFINSST        NUMBER;
  v_item_valorAliquotaCOFINSST   NUMBER;
  v_item_stSimplesNacional       CHAR (3);
  v_item_creditoSimplesNacional  NUMBER;
  v_item_stICMS                  CHAR (2);
  v_item_modalBaseCalcICMS       CHAR (1);
  v_item_reducaoBaseICMS         NUMBER;
  v_item_aliquotaICMS            NUMBER;
  v_item_diferimentoICMS         NUMBER;
  v_item_motivoDesoneracaoICMS   CHAR (2);
  v_item_idBeneficio             NUMBER;
  v_item_modalBaseCalcICMSST     CHAR (1);
  v_item_margemValorAdicionadoST NUMBER;
  v_item_reducaoBaseST           NUMBER;
  v_item_aliquotaICMSST          NUMBER;
  v_item_aliquotaSTSuportConsFin NUMBER;
  v_item_reducaoBaseICMSEfetivo  NUMBER;
  v_item_aliquotaICMSEfetivo     NUMBER;
  v_item_stICMSEscrituracao      CHAR (2);
  v_item_reducaoBaseICMSEscritur NUMBER;
  v_item_aliquotaICMSEscrituraca NUMBER;
  v_item_diferimentoICMSEscritur NUMBER;
  v_item_margemValorAdicSTEscrit NUMBER;
  v_item_reducaoBaseSTEscriturac NUMBER;
  v_item_aliquotaICMSSTEscritura NUMBER;
  v_item_somarICMSST             NUMBER;
  v_item_aliquotaICMSUFDestinat  NUMBER;
  v_item_aliquotaICMSInterestad  NUMBER;
  v_item_partilhaICMSInterestad  NUMBER;
  v_item_aliquotaFCP             NUMBER;
  v_item_aliquotaFCPST           NUMBER;
  v_item_aliquotaFCPSTAnteriorm  NUMBER;
  v_item_aliquotaFCPUFDestinat   NUMBER;
  v_item_aliquotaEstImpFederais  NUMBER;
  v_item_aliquotaEstImpEstaduais NUMBER;
  v_item_aliquotaEstImpMunicipai NUMBER;
  v_item_baseISSQN               NUMBER;
  v_item_valorISSQN              NUMBER;
  v_item_baseRetIRRF             NUMBER;
  v_item_valorRetIRRF            NUMBER;
  v_item_baseRetINSS             NUMBER;
  v_item_valorRetINSS            NUMBER;
  v_item_baseRetPIS              NUMBER;
  v_item_valorRetPIS             NUMBER;
  v_item_baseRetCOFINS           NUMBER;
  v_item_valorRetCOFINS          NUMBER;
  v_item_baseRetCSLL             NUMBER;
  v_item_valorRetCSLL            NUMBER;
  v_item_baseRetOutros           NUMBER;
  v_item_valorRetOutros          NUMBER;
  v_item_baseII                  NUMBER;
  v_item_valorII                 NUMBER;
  v_item_baseIOF                 NUMBER;
  v_item_valorIOF                NUMBER;
  v_item_baseIPI                 NUMBER;
  v_item_valorIPI                NUMBER;
  v_item_basePIS                 NUMBER;
  v_item_valorPIS                NUMBER;
  v_item_basePISST               NUMBER;
  v_item_valorPISST              NUMBER;
  v_item_baseCOFINS              NUMBER;
  v_item_valorCOFINS             NUMBER;
  v_item_baseCOFINSST            NUMBER;
  v_item_valorCOFINSST           NUMBER;
  v_item_baseCreditoSimplesNac   NUMBER;
  v_item_valorCreditoSimplesNac  NUMBER;
  v_item_baseICMS                NUMBER;
  v_item_valorICMSOperacao       NUMBER;
  v_item_valorICMSDiferido       NUMBER;
  v_item_valorICMS               NUMBER;
  v_item_valorICMSDesoneracao    NUMBER;
  v_item_baseICMSST              NUMBER;
  v_item_valorICMSST             NUMBER;
  v_item_baseICMSSTAnteriormente NUMBER;
  v_item_valorICMSSTAnteriorment NUMBER;
  v_item_valorICMSProprioSubstit NUMBER;
  v_item_baseICMSEfetivo         NUMBER;
  v_item_valorICMSEfetivo        NUMBER;
  v_item_baseICMSEscrituracao    NUMBER;
  v_item_valorICMSEscrituracao   NUMBER;
  v_item_valorICMSDesonEscritura NUMBER;
  v_item_baseICMSSTEscrituracao  NUMBER;
  v_item_valorICMSSTEscrituracao NUMBER;
  v_item_baseICMSUFDestinatario  NUMBER;
  v_item_valorICMSUFDestinatario NUMBER;
  v_item_baseICMSUFRemetente     NUMBER;
  v_item_valorICMSUFRemetente    NUMBER;
  v_item_baseFCP                 NUMBER;
  v_item_valorFCP                NUMBER;
  v_item_baseFCPST               NUMBER;
  v_item_valorFCPST              NUMBER;
  v_item_baseFCPSTAnteriormente  NUMBER;
  v_item_valorFCPSTAnteriormente NUMBER;
  v_item_baseFCPUFDestinatario   NUMBER;
  v_item_valorFCPUFDestinatario  NUMBER;
  v_item_baseEstimadaImpostos    NUMBER;
  v_item_valorEstImpFederais     NUMBER;
  v_item_valorEstImpEstaduais    NUMBER;
  v_item_valorEstImpMunicipais   NUMBER;
  v_item_valorLiquidoItem        NUMBER;
  v_item_valorDescontoCustoOpTot NUMBER;
  v_item_valorAcrescimoCustoOpTo NUMBER;
  v_item_precoCustoOperacao      NUMBER;
  v_item_valorCustoOperacao      NUMBER;
  v_item_precoCMV                NUMBER;
  v_item_valorCMV                NUMBER;
  v_item_valorAcrescimoExtempSub NUMBER;
  v_item_valorAcrescimoExtempTot NUMBER;
  v_modDoc_capituloNatFiscal     NUMBER;
  v_modDoc_movimentaEstoque      NUMBER;
  v_modDoc_geraFinanceiro        NUMBER;
  v_modDoc_tipoPreco             CHAR (1);
  v_modDoc_tabelaPreco           VARCHAR (10);
  v_modDoc_fatorMultipPreco      NUMBER;
  v_modDoc_tipoPrecoB            CHAR (1);
  v_modDoc_tabelaPrecoB          VARCHAR (10);
  v_modDoc_fatorMultipPrecoB     NUMBER;
  v_modDoc_diminuiDescontoPrUnit NUMBER;
  v_modDoc_somaAcrescimosPrUnit  NUMBER;
  v_modDoc_somaFreteSeguroPrUnit NUMBER;
  v_gradProd_produto             NUMBER;
  v_gradProd_cor                 NUMBER;
  v_gradProd_tamanho             CHAR(10);
  v_prod_controleEstoque         NUMBER;
  v_prod_tipoProduto             CHAR(2);
  v_prod_origemMercadoria        CHAR(1);
  v_prod_idNcm                   NUMBER;
  v_prod_listaServicos           NUMBER;
  v_prod_precoPautaTabelado      NUMBER;
  v_prod_composicaoPreco         NUMBER;
  v_observacoes                  VARCHAR2 (4000);
  v_combo_operacaoFiscal         NUMBER;
  v_combo_controleQuantidade     NUMBER;
  v_combo_unidadeMedidaConversao VARCHAR2(6);
  v_combo_conversorQuantidade    NUMBER;
  v_combo_loteMinimo             NUMBER;
  v_combo_loteMultiplo           NUMBER;
  v_combo_altura                 NUMBER;
  v_combo_largura                NUMBER;
  v_combo_comprimento            NUMBER;
  v_combo_pecas                  NUMBER;
  v_combo_quantidadeConvertida   NUMBER;
  v_combo_pesoLiquido            NUMBER;
  v_combo_pesoBruto              NUMBER;
  v_combo_tipoPreco              CHAR(1);
  v_combo_tabelaPreco            VARCHAR2(10);
  v_combo_precoSugestaoAPrazo    NUMBER;
  v_combo_precoSugestaoAVista    NUMBER;
  v_combo_precoDesconto          NUMBER;
  v_combo_precoMinimo            NUMBER;
  v_combo_precoUnitario          NUMBER;
  v_combo_valorTotal             NUMBER;
  v_soma_valorProdutos           NUMBER;
  v_soma_valorDescontoProdutos   NUMBER;
  v_soma_valorAcrescimoProdutos  NUMBER;
  v_soma_valorServicos           NUMBER;
  v_soma_valorDescontoServicos   NUMBER;
  v_soma_valorAcrescimoServicos  NUMBER;
  v_ajuste_residuoDesconto       NUMBER;
  v_ajuste_residuoAcrescimo      NUMBER;
  v_ajuste_valorOriginal         NUMBER;
  v_ajuste_idItemDocFiscal       NUMBER;
  v_ajuste_quantidade            NUMBER;
  v_ajuste_precoUnitarioBruto    NUMBER;
  v_ajuste_valorProdutoServicoBr NUMBER;
  v_ajuste_valorDescontoItem     NUMBER;
  v_ajuste_valorAcrescimoItem    NUMBER;
  v_ajuste_prod_tipoProduto      CHAR(2);
  v_auxNumber                    NUMBER;
  v_auxVarchar                   VARCHAR2 (32000);
BEGIN
  r_calcularImpostos := p_calcularImpostos;
  r_item_idItemDocFiscal := p_item_idItemDocFiscal;
  r_buffer_idItemDocFiscal := p_buffer_idItemDocFiscal;
  r_valorInserido := 0;
  SELECT
    capituloNaturezaFiscal,
    movimentaEstoque,
    geraFinanceiro,
    tipoPreco,
    tabelaPreco,
    fatorMultiplicadorPreco,
    tipoPrecoB,
    tabelaPrecoB,
    fatorMultiplicadorPrecoB,
    diminuiDescontoPrUnit,
    somaAcrescimosPrUnit,
    somaFreteSeguroPrUnit
  INTO
    v_modDoc_capituloNatFiscal,
    v_modDoc_movimentaEstoque,
    v_modDoc_geraFinanceiro,
    v_modDoc_tipoPreco,
    v_modDoc_tabelaPreco,
    v_modDoc_fatorMultipPreco,
    v_modDoc_tipoPrecoB,
    v_modDoc_tabelaPrecoB,
    v_modDoc_fatorMultipPrecoB,
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit
  FROM PAMODELOSDOCUMENTO
  WHERE modeloDocumento = p_item_modeloDocumento;
  SELECT
    cab.origemDocumento,
    cab.tipoDocumento,
    cab.entradaSaida,
    cab.devolucaoAnulacaoRetorno,
    cab.finalidadeNota,
    cab.atualizaCustoMedio,
    cab.nfFornecedor,
    cab.documentoFiscal,
    cab.estabelecimento,
    cab.dataEmissao,
    cab.pessoa,
    cab.vendaConsumidor,
    cab.enderecoEntregaPessoa,
    cab.municipioFatoGerador,
    cab.localDestinoOperacao,
    cab.indicadorConsumidorFinal,
    cab.projeto,
    cab.modalidadeFrete,
    cab.tipoPagamentoFrete,
    cab.situacaoDocumentoFiscal,
    cab.ultimoVendedorItem,
    cab.quantidadeVolume,
    cab.quantidade,
    cab.pesoLiquido,
    cab.pesoBruto,
    cab.valorProdutosBruto,
    cab.valorProdutos,
    cab.valorDescontoProdutos,
    cab.valorAcrescimoProdutos,
    cab.valorServicosBruto,
    cab.valorServicos,
    cab.valorDescontoServicos,
    cab.valorAcrescimoServicos,
    cab.valorFreteItem,
    cab.valorSeguroItem,
    cab.valorAdicFreteMarinhaMerItem,
    cab.valorDespesasAduaneirasItem,
    cab.valorFreteGeral,
    cab.valorSeguroGeral,
    cab.valorDescontoGeral,
    cab.valorOutrasDespesasGeral,
    cab.valorAdicFreteMarinhaMerGeral,
    cab.valorDespesasAduaneirasGeral,
    cab.condicaoPagamento,
    cab.numeroParcelas,
    cab.somaPrazoParcelas,
    cab.valorXPrazoParcelas,
    cab.prazoMedio,
    cab.prazoMedioPonderado,
    cab.valorBasePagamento,
    cab.valorAVistaMinimo,
    cab.valorEntradaMinima,
    cab.valorAVistaEntrada,
    cab.valorPagamentoBruto,
    cab.valorDescontoPagamento,
    cab.valorOutrasDespesasPagamento,
    cab.valorJurosPagamento,
    cab.valorPagamentoLiquido,
    cab.valorTroco,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorDescontoTotal,
    cab.valorOutrasDespesasTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    cab.valorDescontoCustoOpItem,
    cab.valorDescontoCustoOpGeral,
    cab.valorDescontoCustoOpTotal,
    cab.valorAcrescimoCustoOpItem,
    cab.valorAcrescimoCustoOpGeral,
    cab.valorAcrescimoCustoOpTotal,
    cab.valorCustoOperacao,
    cab.valorCMV,
    cab.quantidadeExtemporanea,
    cab.valorAcrescimoExtempSubtotal,
    cab.valorAcrescimoExtempItem,
    cab.valorAcrescimoExtempGeral,
    cab.valorAcrescimoExtempTotal,
    est.grupoFiscal,
    COALESCE (pessEst.regimeTributario, ' '),
    COALESCE ((
      SELECT MIN(munEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEst
      ON munEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1), '  '),
    pess.indicadorInscricaoEstadual,
    COALESCE ((
      SELECT MIN(enderecoPessoa)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), 0),
    COALESCE ((
      SELECT MIN(munPess.uf)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), '  '),
    munEndEntr.uf
  INTO
    v_cab_origemDocumento,
    v_cab_tipoDocumento,
    v_cab_entradaSaida,
    v_cab_devolucaoAnulacaoRetorno,
    v_cab_finalidadeNota,
    v_cab_atualizaCustoMedio,
    v_cab_nfFornecedor,
    v_cab_documentoFiscal,
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_pessoa,
    v_cab_vendaConsumidor,
    v_cab_enderecoEntregaPessoa,
    v_cab_municipioFatoGerador,
    v_cab_localDestinoOperacao,
    v_cab_indicadorConsumidorFinal,
    v_cab_projeto,
    v_cab_modalidadeFrete,
    v_cab_tipoPagamentoFrete,
    v_cab_situacaoDocumentoFiscal,
    v_cab_ultimoVendedorItem,
    v_cab_quantidadeVolume,
    v_cab_quantidade,
    v_cab_pesoLiquido,
    v_cab_pesoBruto,
    v_cab_valorProdutosBruto,
    v_cab_valorProdutos,
    v_cab_valorDescontoProdutos,
    v_cab_valorAcrescimoProdutos,
    v_cab_valorServicosBruto,
    v_cab_valorServicos,
    v_cab_valorDescontoServicos,
    v_cab_valorAcrescimoServicos,
    v_cab_valorFreteItem,
    v_cab_valorSeguroItem,
    v_cab_valorAdicFreteMarItem,
    v_cab_valorDespesasAduanItem,
    v_cab_valorFreteGeral,
    v_cab_valorSeguroGeral,
    v_cab_valorDescontoGeral,
    v_cab_valorOutrasDespesasGeral,
    v_cab_valorAdicFreteMarGeral,
    v_cab_valorDespesasAduanGeral,
    v_cab_condicaoPagamento,
    v_cab_numeroParcelas,
    v_cab_somaPrazoParcelas,
    v_cab_valorXPrazoParcelas,
    v_cab_prazoMedio,
    v_cab_prazoMedioPonderado,
    v_cab_valorBasePagamento,
    v_cab_valorAVistaMinimo,
    v_cab_valorEntradaMinima,
    v_cab_valorAVistaEntrada,
    v_cab_valorPagamentoBruto,
    v_cab_valorDescontoPagamento,
    v_cab_valorOutrasDespPagamento,
    v_cab_valorJurosPagamento,
    v_cab_valorPagamentoLiquido,
    v_cab_valorTroco,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorDescontoTotal,
    v_cab_valorOutrasDespesasTotal,
    v_cab_valorAdicFreteMarTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_cab_valorDescontoCustoOpItem,
    v_cab_valorDescontoCustoOpGera,
    v_cab_valorDescontoCustoOpTota,
    v_cab_valorAcrescimoCustoOpIte,
    v_cab_valorAcrescimoCustoOpGer,
    v_cab_valorAcrescimoCustoOpTot,
    v_cab_valorCustoOperacao,
    v_cab_valorCMV,
    v_cab_quantidadeExtemporanea,
    v_cab_valorAcrescimoExtempSubt,
    v_cab_valorAcrescimoExtempItem,
    v_cab_valorAcrescimoExtempGera,
    v_cab_valorAcrescimoExtempTota,
    v_est_grupoFiscal,
    v_pessEst_regimeTributario,
    v_munEndEst_uf,
    v_pess_indicadorInscricaoEstad,
    v_endPess_enderecoPessoa,
    v_munEndPess_uf,
    v_munEndEntr_uf
  FROM MODOCUMENTOSFISCAIS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAPESSOAS pess
  ON pess.pessoa = cab.pessoa
  JOIN CAENDERECOSPESSOA endEntr
  ON endEntr.enderecoPessoa = cab.enderecoEntregaPessoa
  JOIN SIMUNICIPIOS munEndEntr
  ON munEndEntr.municipio = endEntr.municipio
  WHERE cab.idDocumentoFiscal = p_item_idDocumentoFiscal;
  v_ini_cab_valorFreteItem := v_cab_valorFreteItem;
  v_ini_cab_valorFreteGeral := v_cab_valorFreteGeral;
  SELECT
    diminuiDescontoPrUnit,
    somaAcrescimosPrUnit,
    somaFreteSeguroPrUnit
  INTO
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit
  FROM PAMODELOSDOCUMENTO
  WHERE modeloDocumento = p_item_modeloDocumento;
  SELECT
    gradProd.produto,
    gradProd.cor,
    gradProd.tamanho,
    prod.controleEstoque,
    prod.tipoProduto,
    prod.origemMercadoria,
    prod.idNcm,
    prod.listaServicos,
    prod.precoPautaTabelado,
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        WHERE comp.produto = gradProd.produto
        AND comp.ativo = 1)
      THEN 1
      ELSE 0
    END
  INTO
    v_gradProd_produto,
    v_gradProd_cor,
    v_gradProd_tamanho,
    v_prod_controleEstoque,
    v_prod_tipoProduto,
    v_prod_origemMercadoria,
    v_prod_idNcm,
    v_prod_listaServicos,
    v_prod_precoPautaTabelado,
    v_prod_composicaoPreco
  FROM CAGRADESPRODUTO gradProd
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  WHERE gradProd.gradeProduto = p_item_gradeProduto;
  v_inserindoItem                := 1;
  v_cab_promocaoExiste           := 0;
  v_item_cancelado               := 0;
  v_ini_gradeProduto             := 0;
  v_ini_personalizacao           := 0;
  v_ini_operacaoFiscal           := 0;
  v_ini_quantidade               := 0;
  v_ini_valorFreteTotal          := 0;
  v_ini_valorProdutoServicoBruto := 0;
  v_ini_valorProdutoServico      := 0;
  v_ini_valorDescontoItem        := 0;
  v_ini_valorAcrescimoItem       := 0;
  v_ini_valorBasePagamento       := 0;
  v_ini_valorFreteTotal          := 0;
  v_ini_valorSeguroTotal         := 0;
  v_ini_valorDescontoTotal       := 0;
  v_ini_valorOutrasDespesasTotal := 0;
  v_ini_valorAdicFreteMarTotal   := 0;
  v_ini_valorDespesasAduanTotal  := 0;
  v_item_quantidadeDevolvidaRet  := 0;
  v_item_precoUnitario           := p_item_precoUnitario;
  v_item_valorProdutoServicoBrut := ROUND (p_item_Quantidade * CASE WHEN v_modDoc_diminuiDescontoPrUnit = 1 OR v_modDoc_somaAcrescimosPrUnit = 1 OR v_modDoc_somaFreteSeguroPrUnit = 1 OR v_prod_composicaoPreco = 1 THEN p_item_precoUnitarioBruto ELSE p_item_precoUnitario END, 2);
  v_item_valorProdutoServico     := ROUND (p_item_Quantidade * p_item_precoUnitario, 2);
  v_item_valorDescontoGeral      := p_item_valorDescontoGeral;
  v_item_valorDescontoPagamento  := p_item_valorDescontoPagamento;
  v_item_valorOutrasDespPagament := p_item_valorOutrasDespPagament;
  v_item_valorJurosPagamento     := p_item_valorJurosPagamento;
  v_item_movimentaEstoque        := p_item_movimentaEstoque;
  v_item_movimentaEstoqueFiscal  := p_item_movimentaEstoqueFiscal;
  v_item_geraFinanceiro          := p_item_geraFinanceiro;
  v_item_cfop                    := p_item_cfop;
  v_item_indicadorISSQN          := p_item_indicadorISSQN;
  v_item_aliquotaISSQN           := p_item_aliquotaISSQN;
  v_item_retidoISSQN             := p_item_retidoISSQN;
  v_item_tributadoForaMunicipio  := p_item_tributadoForaMunicipio;
  v_item_incentivoFiscal         := p_item_incentivoFiscal;
  v_item_listaServicos           := p_item_listaServicos;
  v_item_cnae                    := p_item_cnae;
  v_item_idServicoMunicipio      := p_item_idServicoMunicipio;
  v_item_numeroProcessoAdministr := p_item_numeroProcessoAdministr;
  v_item_retencaoIRRF            := p_item_retencaoIRRF;
  v_item_retencaoINSS            := p_item_retencaoINSS;
  v_item_retencaoPIS             := p_item_retencaoPIS;
  v_item_retencaoCOFINS          := p_item_retencaoCOFINS;
  v_item_retencaoCSLL            := p_item_retencaoCSLL;
  v_item_retencaoOutros          := p_item_retencaoOutros;
  v_item_aliquotaII              := p_item_aliquotaII;
  v_item_aliquotaIOF             := p_item_aliquotaIOF;
  v_item_codigoEnquadramentoIPI  := p_item_codigoEnquadramentoIPI;
  v_item_stIPI                   := p_item_stIPI;
  v_item_aliquotaIPI             := p_item_aliquotaIPI;
  v_item_valorAliquotaIPI        := p_item_valorAliquotaIPI;
  v_item_stPIS                   := p_item_stPIS;
  v_item_aliquotaPIS             := p_item_aliquotaPIS;
  v_item_valorAliquotaPIS        := p_item_valorAliquotaPIS;
  v_item_aliquotaPISST           := p_item_aliquotaPISST;
  v_item_valorAliquotaPISST      := p_item_valorAliquotaPISST;
  v_item_stCOFINS                := p_item_stCOFINS;
  v_item_aliquotaCOFINS          := p_item_aliquotaCOFINS;
  v_item_valorAliquotaCOFINS     := p_item_valorAliquotaCOFINS;
  v_item_aliquotaCOFINSST        := p_item_aliquotaCOFINSST;
  v_item_valorAliquotaCOFINSST   := p_item_valorAliquotaCOFINSST;
  v_item_stSimplesNacional       := p_item_stSimplesNacional;
  v_item_creditoSimplesNacional  := p_item_creditoSimplesNacional;
  v_item_stICMS                  := p_item_stICMS;
  v_item_modalBaseCalcICMS       := p_item_modalBaseCalcICMS;
  v_item_reducaoBaseICMS         := p_item_reducaoBaseICMS;
  v_item_aliquotaICMS            := p_item_aliquotaICMS;
  v_item_diferimentoICMS         := p_item_diferimentoICMS;
  v_item_motivoDesoneracaoICMS   := p_item_motivoDesoneracaoICMS;
  v_item_idBeneficio             := p_item_idBeneficio;
  v_item_modalBaseCalcICMSST     := p_item_modalBaseCalcICMSST;
  v_item_margemValorAdicionadoST := p_item_margemValorAdicionadoST;
  v_item_reducaoBaseST           := p_item_reducaoBaseST;
  v_item_aliquotaICMSST          := p_item_aliquotaICMSST;
  v_item_aliquotaSTSuportConsFin := p_item_aliquotaSTSuportConsFin;
  v_item_reducaoBaseICMSEfetivo  := p_item_reducaoBaseICMSEfetivo;
  v_item_aliquotaICMSEfetivo     := p_item_aliquotaICMSEfetivo;
  v_item_stICMSEscrituracao      := p_item_stICMSEscrituracao;
  v_item_reducaoBaseICMSEscritur := p_item_reducaoBaseICMSEscritur;
  v_item_aliquotaICMSEscrituraca := p_item_aliquotaICMSEscrituraca;
  v_item_diferimentoICMSEscritur := p_item_diferimentoICMSEscritur;
  v_item_margemValorAdicSTEscrit := p_item_margemValorAdicSTEscrit;
  v_item_reducaoBaseSTEscriturac := p_item_reducaoBaseSTEscriturac;
  v_item_aliquotaICMSSTEscritura := p_item_aliquotaICMSSTEscritura;
  v_item_somarICMSST             := p_item_somarICMSST;
  v_item_aliquotaICMSUFDestinat  := p_item_aliquotaICMSUFDestinat;
  v_item_aliquotaICMSInterestad  := p_item_aliquotaICMSInterestad;
  v_item_partilhaICMSInterestad  := p_item_partilhaICMSInterestad;
  v_item_aliquotaFCP             := p_item_aliquotaFCP;
  v_item_aliquotaFCPST           := p_item_aliquotaFCPST;
  v_item_aliquotaFCPSTAnteriorm  := p_item_aliquotaFCPSTAnteriorm;
  v_item_aliquotaFCPUFDestinat   := p_item_aliquotaFCPUFDestinat;
  v_item_aliquotaEstImpFederais  := p_item_aliquotaEstImpFederais;
  v_item_aliquotaEstImpEstaduais := p_item_aliquotaEstImpEstaduais;
  v_item_aliquotaEstImpMunicipai := p_item_aliquotaEstImpMunicipai;
  v_item_baseISSQN               := p_item_baseISSQN;
  v_item_valorISSQN              := p_item_valorISSQN;
  v_item_baseRetIRRF             := p_item_baseRetIRRF;
  v_item_valorRetIRRF            := p_item_valorRetIRRF;
  v_item_baseRetINSS             := p_item_baseRetINSS;
  v_item_valorRetINSS            := p_item_valorRetINSS;
  v_item_baseRetPIS              := p_item_baseRetPIS;
  v_item_valorRetPIS             := p_item_valorRetPIS;
  v_item_baseRetCOFINS           := p_item_baseRetCOFINS;
  v_item_valorRetCOFINS          := p_item_valorRetCOFINS;
  v_item_baseRetCSLL             := p_item_baseRetCSLL;
  v_item_valorRetCSLL            := p_item_valorRetCSLL;
  v_item_baseRetOutros           := p_item_baseRetOutros;
  v_item_valorRetOutros          := p_item_valorRetOutros;
  v_item_baseII                  := p_item_baseII;
  v_item_valorII                 := p_item_valorII;
  v_item_baseIOF                 := p_item_baseIOF;
  v_item_valorIOF                := p_item_valorIOF;
  v_item_baseIPI                 := p_item_baseIPI;
  v_item_valorIPI                := p_item_valorIPI;
  v_item_basePIS                 := p_item_basePIS;
  v_item_valorPIS                := p_item_valorPIS;
  v_item_basePISST               := p_item_basePISST;
  v_item_valorPISST              := p_item_valorPISST;
  v_item_baseCOFINS              := p_item_baseCOFINS;
  v_item_valorCOFINS             := p_item_valorCOFINS;
  v_item_baseCOFINSST            := p_item_baseCOFINSST;
  v_item_valorCOFINSST           := p_item_valorCOFINSST;
  v_item_baseCreditoSimplesNac   := p_item_baseCreditoSimplesNac;
  v_item_valorCreditoSimplesNac  := p_item_valorCreditoSimplesNac;
  v_item_baseICMS                := p_item_baseICMS;
  v_item_valorICMSOperacao       := p_item_valorICMSOperacao;
  v_item_valorICMSDiferido       := p_item_valorICMSDiferido;
  v_item_valorICMS               := p_item_valorICMS;
  v_item_valorICMSDesoneracao    := p_item_valorICMSDesoneracao;
  v_item_baseICMSST              := p_item_baseICMSST;
  v_item_valorICMSST             := p_item_valorICMSST;
  v_item_baseICMSSTAnteriormente := p_item_baseICMSSTAnteriormente;
  v_item_valorICMSSTAnteriorment := p_item_valorICMSSTAnteriorment;
  v_item_valorICMSProprioSubstit := p_item_valorICMSProprioSubstit;
  v_item_baseICMSEfetivo         := p_item_baseICMSEfetivo;
  v_item_valorICMSEfetivo        := p_item_valorICMSEfetivo;
  v_item_baseICMSEscrituracao    := p_item_baseICMSEscrituracao;
  v_item_valorICMSEscrituracao   := p_item_valorICMSEscrituracao;
  v_item_valorICMSDesonEscritura := p_item_valorICMSDesonEscritura;
  v_item_baseICMSSTEscrituracao  := p_item_baseICMSSTEscrituracao;
  v_item_valorICMSSTEscrituracao := p_item_valorICMSSTEscrituracao;
  v_item_baseICMSUFDestinatario  := p_item_baseICMSUFDestinatario;
  v_item_valorICMSUFDestinatario := p_item_valorICMSUFDestinatario;
  v_item_baseICMSUFRemetente     := p_item_baseICMSUFRemetente;
  v_item_valorICMSUFRemetente    := p_item_valorICMSUFRemetente;
  v_item_baseFCP                 := p_item_baseFCP;
  v_item_valorFCP                := p_item_valorFCP;
  v_item_baseFCPST               := p_item_baseFCPST;
  v_item_valorFCPST              := p_item_valorFCPST;
  v_item_baseFCPSTAnteriormente  := p_item_baseFCPSTAnteriormente;
  v_item_valorFCPSTAnteriormente := p_item_valorFCPSTAnteriormente;
  v_item_baseFCPUFDestinatario   := p_item_baseFCPUFDestinatario;
  v_item_valorFCPUFDestinatario  := p_item_valorFCPUFDestinatario;
  v_item_baseEstimadaImpostos    := p_item_baseEstimadaImpostos;
  v_item_valorEstImpFederais     := p_item_valorEstImpFederais;
  v_item_valorEstImpEstaduais    := p_item_valorEstImpEstaduais;
  v_item_valorEstImpMunicipais   := p_item_valorEstImpMunicipais;
  IF p_manterFinanceiro_Retotalizar = 0 THEN
    SELECT COALESCE (MAX(1), 0)
    INTO v_cab_promocaoExiste
    FROM MODOCFISCALXPROMOCOES
    WHERE idDocumentoFiscal = p_item_idDocumentoFiscal;
  END IF;
  IF p_item_idItemDocFiscal > 0 THEN
    FOR a IN (
      SELECT
        a.sequencia,
        a.cancelado,
        a.gradeProduto,
        a.personalizacao,
        a.usarPrecoAVista,
        a.controleQuantidade,
        a.loteMultiplo,
        a.quantidade,
        a.quantidadeConvertida,
        a.quantidadeDevolvidaRetornada,
        a.pesoLiquido,
        a.pesoBruto,
        a.valorProdutoServicoBruto,
        a.valorProdutoServico,
        a.valorDescontoItem,
        a.valorAcrescimoItem,
        a.valorFreteItem,
        a.valorSeguroItem,
        a.valorAdicFreteMarinhaMerItem,
        a.valorDespesasAduaneirasItem,
        a.quantidadeExtemporanea,
        a.valorAcrescimoExtempSubtotal,
        a.valorAcrescimoExtempItem,
        a.valorDescontoCustoOpItem,
        a.valorAcrescimoCustoOpItem,
        a.valorFreteGeral,
        a.valorSeguroGeral,
        a.valorDescontoGeral,
        a.valorOutrasDespesasGeral,
        a.valorAdicFreteMarinhaMerGeral,
        a.valorDespesasAduaneirasGeral,
        a.valorAcrescimoExtempGeral,
        a.valorDescontoCustoOpGeral,
        a.valorAcrescimoCustoOpGeral,
        a.valorDescontoPagamento,
        a.valorOutrasDespesasPagamento,
        a.valorJurosPagamento,
        a.valorFreteTotal,
        a.valorSeguroTotal,
        a.valorDescontoTotal,
        a.valorOutrasDespesasTotal,
        a.valorAdicFreteMarinhaMerTotal,
        a.valorDespesasAduaneirasTotal,
        a.valorAcrescimoExtempTotal,
        a.valorDescontoCustoOpTotal,
        a.valorAcrescimoCustoOpTotal,
        a.operacaoFiscal,
        a.movimentaEstoque,
        a.movimentaEstoqueFiscal,
        a.geraFinanceiro,
        a.cfop,
        a.indicadorISSQN,
        a.aliquotaISSQN,
        a.retidoISSQN,
        a.tributadoForaMunicipio,
        a.incentivoFiscal,
        a.listaServicos,
        a.cnae,
        a.idServicoMunicipio,
        a.numeroProcessoAdministrativo,
        a.retencaoIRRF,
        a.retencaoINSS,
        a.retencaoPIS,
        a.retencaoCOFINS,
        a.retencaoCSLL,
        a.retencaoOutros,
        a.aliquotaII,
        a.aliquotaIOF,
        a.codigoEnquadramentoIPI,
        a.stIPI,
        a.aliquotaIPI,
        a.valorAliquotaIPI,
        a.stPIS,
        a.aliquotaPIS,
        a.valorAliquotaPIS,
        a.aliquotaPISST,
        a.valorAliquotaPISST,
        a.stCOFINS,
        a.aliquotaCOFINS,
        a.valorAliquotaCOFINS,
        a.aliquotaCOFINSST,
        a.valorAliquotaCOFINSST,
        a.stSimplesNacional,
        a.creditoSimplesNacional,
        a.stICMS,
        a.modalidadeBaseCalcICMS,
        a.reducaoBaseICMS,
        a.aliquotaICMS,
        a.diferimentoICMS,
        a.motivoDesoneracaoICMS,
        a.idBeneficio,
        a.modalidadeBaseCalcICMSST,
        a.margemValorAdicionadoST,
        a.reducaoBaseST,
        a.aliquotaICMSST,
        a.aliquotaSTSuportConsFinal,
        a.reducaoBaseICMSEfetivo,
        a.aliquotaICMSEfetivo,
        a.stICMSEscrituracao,
        a.reducaoBaseICMSEscrituracao,
        a.aliquotaICMSEscrituracao,
        a.diferimentoICMSEscrituracao,
        a.margemValorAdicSTEscrituracao,
        a.reducaoBaseSTEscrituracao,
        a.aliquotaICMSSTEscrituracao,
        a.somarICMSST,
        a.aliquotaICMSUFDestinatario,
        a.aliquotaICMSInterestadual,
        a.partilhaICMSInterestadual,
        a.aliquotaFCP,
        a.aliquotaFCPST,
        a.aliquotaFCPSTAnteriormente,
        a.aliquotaFCPUFDestinatario,
        a.aliquotaEstimadaImpFederais,
        a.aliquotaEstimadaImpEstaduais,
        a.aliquotaEstimadaImpMunicipais,
        a.baseISSQN,
        a.valorISSQN,
        a.baseRetIRRF,
        a.valorRetIRRF,
        a.baseRetINSS,
        a.valorRetINSS,
        a.baseRetPIS,
        a.valorRetPIS,
        a.baseRetCOFINS,
        a.valorRetCOFINS,
        a.baseRetCSLL,
        a.valorRetCSLL,
        a.baseRetOutros,
        a.valorRetOutros,
        a.baseII,
        a.valorII,
        a.baseIOF,
        a.valorIOF,
        a.baseIPI,
        a.valorIPI,
        a.basePIS,
        a.valorPIS,
        a.basePISST,
        a.valorPISST,
        a.baseCOFINS,
        a.valorCOFINS,
        a.baseCOFINSST,
        a.valorCOFINSST,
        a.baseCreditoSimplesNacional,
        a.valorCreditoSimplesNacional,
        a.baseICMS,
        a.valorICMSOperacao,
        a.valorICMSDiferido,
        a.valorICMS,
        a.valorICMSDesoneracao,
        a.baseICMSST,
        a.valorICMSST,
        a.baseICMSSTAnteriormente,
        a.valorICMSSTAnteriormente,
        a.valorICMSProprioSubstituto,
        a.baseICMSEfetivo,
        a.valorICMSEfetivo,
        a.baseICMSEscrituracao,
        a.valorICMSEscrituracao,
        a.valorICMSDesonEscrituracao,
        a.baseICMSSTEscrituracao,
        a.valorICMSSTEscrituracao,
        a.baseICMSUFDestinatario,
        a.valorICMSUFDestinatario,
        a.baseICMSUFRemetente,
        a.valorICMSUFRemetente,
        a.baseFCP,
        a.valorFCP,
        a.baseFCPST,
        a.valorFCPST,
        a.baseFCPSTAnteriormente,
        a.valorFCPSTAnteriormente,
        a.baseFCPUFDestinatario,
        a.valorFCPUFDestinatario,
        a.baseEstimadaImpostos,
        a.valorEstimadoImpFederais,
        a.valorEstimadoImpEstaduais,
        a.valorEstimadoImpMunicipais,
        a.valorBasePagamento,
        a.valorLiquidoItem,
        a.valorCustoOperacao,
        a.valorCMV,
        prod.tipoProduto
      FROM MODOCFISCALXITENS a
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = a.gradeProduto
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      WHERE a.idItemDocFiscal = p_item_idItemDocFiscal)
    LOOP
      v_inserindoItem := 0;
      v_item_sequencia := a.sequencia;
      v_item_cancelado := a.cancelado;
      v_ini_gradeProduto := a.gradeProduto;
      v_ini_personalizacao := a.personalizacao;
      v_ini_operacaoFiscal := a.operacaoFiscal;
      v_ini_quantidade := a.quantidade;
      v_ini_valorProdutoServicoBruto := a.valorProdutoServicoBruto;
      v_ini_valorProdutoServico := a.valorProdutoServico;
      v_ini_valorDescontoItem := a.valorDescontoItem;
      v_ini_valorAcrescimoItem := a.valorAcrescimoItem;
      v_ini_valorBasePagamento := a.valorBasePagamento;
      v_ini_valorFreteTotal := a.valorFreteTotal;
      v_ini_valorSeguroTotal := a.valorSeguroTotal;
      v_ini_valorDescontoTotal := a.valorDescontoTotal;
      v_ini_valorOutrasDespesasTotal := a.valorOutrasDespesasTotal;
      v_ini_valorAdicFreteMarTotal := a.valorAdicFreteMarinhaMerTotal;
      v_ini_valorDespesasAduanTotal := a.valorDespesasAduaneirasTotal;
      v_item_quantidadeDevolvidaRet := a.quantidadeDevolvidaRetornada;
      IF p_buscarAliquotas_CalcularImp ='T'
      THEN
        v_item_movimentaEstoque        := a.movimentaEstoque;
        v_item_movimentaEstoqueFiscal  := a.movimentaEstoqueFiscal;
        v_item_geraFinanceiro          := a.geraFinanceiro;
        v_item_cfop                    := a.cfop;
        v_item_indicadorISSQN          := a.indicadorISSQN;
        v_item_aliquotaISSQN           := a.aliquotaISSQN;
        v_item_retidoISSQN             := a.retidoISSQN;
        v_item_tributadoForaMunicipio  := a.tributadoForaMunicipio;
        v_item_incentivoFiscal         := a.incentivoFiscal;
        v_item_listaServicos           := a.listaServicos;
        v_item_cnae                    := a.cnae;
        v_item_idServicoMunicipio      := a.idServicoMunicipio;
        v_item_numeroProcessoAdministr := a.numeroProcessoAdministrativo;
        v_item_retencaoIRRF            := a.retencaoIRRF;
        v_item_retencaoINSS            := a.retencaoINSS;
        v_item_retencaoPIS             := a.retencaoPIS;
        v_item_retencaoCOFINS          := a.retencaoCOFINS;
        v_item_retencaoCSLL            := a.retencaoCSLL;
        v_item_retencaoOutros          := a.retencaoOutros;
        v_item_aliquotaII              := a.aliquotaII;
        v_item_aliquotaIOF             := a.aliquotaIOF;
        v_item_codigoEnquadramentoIPI  := a.codigoEnquadramentoIPI;
        v_item_stIPI                   := a.stIPI;
        v_item_aliquotaIPI             := a.aliquotaIPI;
        v_item_valorAliquotaIPI        := a.valorAliquotaIPI;
        v_item_stPIS                   := a.stPIS;
        v_item_aliquotaPIS             := a.aliquotaPIS;
        v_item_valorAliquotaPIS        := a.valorAliquotaPIS;
        v_item_aliquotaPISST           := a.aliquotaPISST;
        v_item_valorAliquotaPISST      := a.valorAliquotaPISST;
        v_item_stCOFINS                := a.stCOFINS;
        v_item_aliquotaCOFINS          := a.aliquotaCOFINS;
        v_item_valorAliquotaCOFINS     := a.valorAliquotaCOFINS;
        v_item_aliquotaCOFINSST        := a.aliquotaCOFINSST;
        v_item_valorAliquotaCOFINSST   := a.valorAliquotaCOFINSST;
        v_item_stSimplesNacional       := a.stSimplesNacional;
        v_item_creditoSimplesNacional  := a.creditoSimplesNacional;
        v_item_stICMS                  := a.stICMS;
        v_item_modalBaseCalcICMS       := a.modalidadeBaseCalcICMS;
        v_item_reducaoBaseICMS         := a.reducaoBaseICMS;
        v_item_aliquotaICMS            := a.aliquotaICMS;
        v_item_diferimentoICMS         := a.diferimentoICMS;
        v_item_motivoDesoneracaoICMS   := a.motivoDesoneracaoICMS;
        v_item_idBeneficio             := a.idBeneficio;
        v_item_modalBaseCalcICMSST     := a.modalidadeBaseCalcICMSST;
        v_item_margemValorAdicionadoST := a.margemValorAdicionadoST;
        v_item_reducaoBaseST           := a.reducaoBaseST;
        v_item_aliquotaICMSST          := a.aliquotaICMSST;
        v_item_aliquotaSTSuportConsFin := a.aliquotaSTSuportConsFinal;
        v_item_reducaoBaseICMSEfetivo  := a.reducaoBaseICMSEfetivo;
        v_item_aliquotaICMSEfetivo     := a.aliquotaICMSEfetivo;
        v_item_stICMSEscrituracao      := a.stICMSEscrituracao;
        v_item_reducaoBaseICMSEscritur := a.reducaoBaseICMSEscrituracao;
        v_item_aliquotaICMSEscrituraca := a.aliquotaICMSEscrituracao;
        v_item_diferimentoICMSEscritur := a.diferimentoICMSEscrituracao;
        v_item_margemValorAdicSTEscrit := a.margemValorAdicSTEscrituracao;
        v_item_reducaoBaseSTEscriturac := a.reducaoBaseSTEscrituracao;
        v_item_aliquotaICMSSTEscritura := a.aliquotaICMSSTEscrituracao;
        v_item_somarICMSST             := a.somarICMSST;
        v_item_aliquotaICMSUFDestinat  := a.aliquotaICMSUFDestinatario;
        v_item_aliquotaICMSInterestad  := a.aliquotaICMSInterestadual;
        v_item_partilhaICMSInterestad  := a.partilhaICMSInterestadual;
        v_item_aliquotaFCP             := a.aliquotaFCP;
        v_item_aliquotaFCPST           := a.aliquotaFCPST;
        v_item_aliquotaFCPSTAnteriorm  := a.aliquotaFCPSTAnteriormente;
        v_item_aliquotaFCPUFDestinat   := a.aliquotaFCPUFDestinatario;
        v_item_aliquotaEstImpFederais  := a.aliquotaEstimadaImpFederais;
        v_item_aliquotaEstImpEstaduais := a.aliquotaEstimadaImpEstaduais;
        v_item_aliquotaEstImpMunicipai := a.aliquotaEstimadaImpMunicipais;
        v_item_baseISSQN               := a.baseISSQN;
        v_item_valorISSQN              := a.valorISSQN;
        v_item_baseRetIRRF             := a.baseRetIRRF;
        v_item_valorRetIRRF            := a.valorRetIRRF;
        v_item_baseRetINSS             := a.baseRetINSS;
        v_item_valorRetINSS            := a.valorRetINSS;
        v_item_baseRetPIS              := a.baseRetPIS;
        v_item_valorRetPIS             := a.valorRetPIS;
        v_item_baseRetCOFINS           := a.baseRetCOFINS;
        v_item_valorRetCOFINS          := a.valorRetCOFINS;
        v_item_baseRetCSLL             := a.baseRetCSLL;
        v_item_valorRetCSLL            := a.valorRetCSLL;
        v_item_baseRetOutros           := a.baseRetOutros;
        v_item_valorRetOutros          := a.valorRetOutros;
        v_item_baseII                  := a.baseII;
        v_item_valorII                 := a.valorII;
        v_item_baseIOF                 := a.baseIOF;
        v_item_valorIOF                := a.valorIOF;
        v_item_baseIPI                 := a.baseIPI;
        v_item_valorIPI                := a.valorIPI;
        v_item_basePIS                 := a.basePIS;
        v_item_valorPIS                := a.valorPIS;
        v_item_basePISST               := a.basePISST;
        v_item_valorPISST              := a.valorPISST;
        v_item_baseCOFINS              := a.baseCOFINS;
        v_item_valorCOFINS             := a.valorCOFINS;
        v_item_baseCOFINSST            := a.baseCOFINSST;
        v_item_valorCOFINSST           := a.valorCOFINSST;
        v_item_baseCreditoSimplesNac   := a.baseCreditoSimplesNacional;
        v_item_valorCreditoSimplesNac  := a.valorCreditoSimplesNacional;
        v_item_baseICMS                := a.baseICMS;
        v_item_valorICMSOperacao       := a.valorICMSOperacao;
        v_item_valorICMSDiferido       := a.valorICMSDiferido;
        v_item_valorICMS               := a.valorICMS;
        v_item_valorICMSDesoneracao    := a.valorICMSDesoneracao;
        v_item_baseICMSST              := a.baseICMSST;
        v_item_valorICMSST             := a.valorICMSST;
        v_item_baseICMSSTAnteriormente := a.baseICMSSTAnteriormente;
        v_item_valorICMSSTAnteriorment := a.valorICMSSTAnteriormente;
        v_item_valorICMSProprioSubstit := a.valorICMSProprioSubstituto;
        v_item_baseICMSEfetivo         := a.baseICMSEfetivo;
        v_item_valorICMSEfetivo        := a.valorICMSEfetivo;
        v_item_baseICMSEscrituracao    := a.baseICMSEscrituracao;
        v_item_valorICMSEscrituracao   := a.valorICMSEscrituracao;
        v_item_valorICMSDesonEscritura := a.valorICMSDesonEscrituracao;
        v_item_baseICMSSTEscrituracao  := a.baseICMSSTEscrituracao;
        v_item_valorICMSSTEscrituracao := a.valorICMSSTEscrituracao;
        v_item_baseICMSUFDestinatario  := a.baseICMSUFDestinatario;
        v_item_valorICMSUFDestinatario := a.valorICMSUFDestinatario;
        v_item_baseICMSUFRemetente     := a.baseICMSUFRemetente;
        v_item_valorICMSUFRemetente    := a.valorICMSUFRemetente;
        v_item_baseFCP                 := a.baseFCP;
        v_item_valorFCP                := a.valorFCP;
        v_item_baseFCPST               := a.baseFCPST;
        v_item_valorFCPST              := a.valorFCPST;
        v_item_baseFCPSTAnteriormente  := a.baseFCPSTAnteriormente;
        v_item_valorFCPSTAnteriormente := a.valorFCPSTAnteriormente;
        v_item_baseFCPUFDestinatario   := a.baseFCPUFDestinatario;
        v_item_valorFCPUFDestinatario  := a.valorFCPUFDestinatario;
        v_item_baseEstimadaImpostos    := a.baseEstimadaImpostos;
        v_item_valorEstImpFederais     := a.valorEstimadoImpFederais;
        v_item_valorEstImpEstaduais    := a.valorEstimadoImpEstaduais;
        v_item_valorEstImpMunicipais   := a.valorEstimadoImpMunicipais;
      END IF;
      IF p_manterFinanceiro_Retotalizar = 0
        AND (v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0)
        AND (a.valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
          OR a.valorProdutoServico <> v_item_valorProdutoServico
          OR a.valorDescontoItem <> p_item_valorDescontoItem
          OR a.valorAcrescimoItem <> p_item_valorAcrescimoItem)
        OR a.valorFreteGeral <> p_item_valorFreteGeral
        OR a.valorSeguroGeral <> p_item_valorSeguroGeral
        OR a.valorDescontoGeral <> v_item_valorDescontoGeral
        OR a.valorOutrasDespesasGeral <> p_item_valorOutrasDespesasGer
        OR a.valorAdicFreteMarinhaMerGeral <> p_item_valorAdicFreteMarGeral
        OR a.valorDespesasAduaneirasGeral <> p_item_valorDespesasAduanGeral
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF p_manterFinanceiro_Retotalizar < 2
        AND a.cancelado = 0
      THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume - TRUNC(CASE WHEN a.controleQuantidade = 1 AND a.loteMultiplo <> 0 THEN a.quantidade / a.loteMultiplo ELSE a.quantidadeConvertida END,0);
        END IF;
        v_cab_quantidade := v_cab_quantidade - a.quantidadeConvertida;
        v_cab_pesoLiquido := v_cab_pesoLiquido - a.pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto - a.pesoBruto;
        IF a.tipoProduto = '09' THEN
          v_cab_valorServicosBruto := v_cab_valorServicosBruto - a.valorProdutoServicoBruto;
          v_cab_valorServicos := v_cab_valorServicos - a.valorProdutoServico;
          v_cab_valorDescontoServicos := v_cab_valorDescontoServicos - a.valorDescontoItem;
          v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos - a.valorAcrescimoItem;
        ELSE 
          v_cab_valorProdutosBruto := v_cab_valorProdutosBruto - a.valorProdutoServicoBruto;
          v_cab_valorProdutos := v_cab_valorProdutos - a.valorProdutoServico;
          v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos - a.valorDescontoItem;
          v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos - a.valorAcrescimoItem;
        END IF;
        v_cab_valorFreteItem := v_cab_valorFreteItem - a.valorFreteItem;
        v_cab_valorSeguroItem := v_cab_valorSeguroItem - a.valorSeguroItem;
        v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem - a.valorAdicFreteMarinhaMerItem;
        v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem - a.valorDespesasAduaneirasItem;
        v_cab_valorFreteGeral := v_cab_valorFreteGeral - a.valorFreteGeral;
        v_cab_valorSeguroGeral := v_cab_valorSeguroGeral - a.valorSeguroGeral;
        v_cab_valorDescontoGeral := v_cab_valorDescontoGeral - a.valorDescontoGeral;
        v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral - a.valorOutrasDespesasGeral;
        v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral - a.valorAdicFreteMarinhaMerGeral;
        v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral - a.valorDespesasAduaneirasGeral;
        v_cab_valorBasePagamento := v_cab_valorBasePagamento - a.valorBasePagamento;
        IF a.usarPrecoAVista = 1
          AND a.geraFinanceiro = 1
        THEN
          v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo - a.valorProdutoServico + a.valorDescontoTotal - a.valorOutrasDespesasTotal;
        END IF;
        v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento - a.valorDescontoPagamento;
        v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento - a.valorOutrasDespesasPagamento;
        v_cab_valorJurosPagamento := v_cab_valorJurosPagamento - a.valorJurosPagamento;
        v_cab_valorFreteTotal := v_cab_valorFreteTotal - a.valorFreteTotal;
        v_cab_valorSeguroTotal := v_cab_valorSeguroTotal - a.valorSeguroTotal;
        v_cab_valorDescontoTotal := v_cab_valorDescontoTotal - a.valorDescontoTotal;
        v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal - a.valorOutrasDespesasTotal;
        v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal - a.valorAdicFreteMarinhaMerTotal;
        v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal - a.valorDespesasAduaneirasTotal;
        v_cab_valorLiquidoItem := v_cab_valorLiquidoItem - a.valorLiquidoItem;
        v_cab_valorDescontoCustoOpItem := v_cab_valorDescontoCustoOpItem - a.valorDescontoCustoOpItem;
        v_cab_valorDescontoCustoOpGera := v_cab_valorDescontoCustoOpGera - a.valorDescontoCustoOpGeral;
        v_cab_valorDescontoCustoOpTota := v_cab_valorDescontoCustoOpTota - a.valorDescontoCustoOpTotal;
        v_cab_valorAcrescimoCustoOpIte := v_cab_valorAcrescimoCustoOpIte - a.valorAcrescimoCustoOpItem;
        v_cab_valorAcrescimoCustoOpGer := v_cab_valorAcrescimoCustoOpGer - a.valorAcrescimoCustoOpGeral;
        v_cab_valorAcrescimoCustoOpTot := v_cab_valorAcrescimoCustoOpTot - a.valorAcrescimoCustoOpTotal;
        v_cab_valorCustoOperacao := v_cab_valorCustoOperacao - a.valorCustoOperacao;
        v_cab_valorCMV := v_cab_valorCMV - a.valorCMV;
        v_cab_quantidadeExtemporanea := v_cab_quantidadeExtemporanea - a.quantidadeExtemporanea;
        v_cab_valorAcrescimoExtempSubt := v_cab_valorAcrescimoExtempSubt - a.valorAcrescimoExtempSubtotal;
        v_cab_valorAcrescimoExtempItem := v_cab_valorAcrescimoExtempItem - a.valorAcrescimoExtempItem;
        v_cab_valorAcrescimoExtempGera := v_cab_valorAcrescimoExtempGera - a.valorAcrescimoExtempGeral;
        v_cab_valorAcrescimoExtempTota := v_cab_valorAcrescimoExtempTota - a.valorAcrescimoExtempTotal;
      END IF;
    END LOOP;
  END IF;
  ADD_CALCULA_TOTAIS_ITEM (
    v_cab_tipoPagamentoFrete,
    p_item_quantidade,
    p_item_quantidadeConvertida,
    p_item_precoUnitarioBruto,
    p_item_acrescimoUnitarioCompos,
    v_item_precoUnitario,
    p_item_valorDescontoItem,
    p_item_valorAcrescimoItem,
    p_item_valorFreteItem,
    p_item_valorSeguroItem,
    p_item_valorAdicFreteMarItem,
    p_item_valorDespesasAduanItem,
    p_item_valorFreteGeral,
    p_item_valorSeguroGeral,
    v_item_valorDescontoGeral,
    p_item_valorOutrasDespesasGer,
    p_item_valorAdicFreteMarGeral,
    p_item_valorDespesasAduanGeral,
    v_item_valorDescontoPagamento,
    v_item_valorOutrasDespPagament,
    v_item_valorJurosPagamento,
    v_modDoc_diminuiDescontoPrUnit,
    v_modDoc_somaAcrescimosPrUnit,
    v_modDoc_somaFreteSeguroPrUnit,
    v_prod_composicaoPreco,
    v_item_precoUnitario,
    v_item_precoUnitarioConvertido,
    v_item_valorProdutoServico,
    v_item_valorFreteTotal,
    v_item_valorSeguroTotal,
    v_item_valorDescontoTotal,
    v_item_valorOutrasDespesasTot,
    v_item_valorAdicFreteMarTotal,
    v_item_valorDespesasAduanTotal);
  v_item_valorAcrescimoExtempSub := FUNC_ADD_CALC_EXTEMP_SUBTOTAL(
    p_item_quantidade,
    v_item_precoUnitario,
    p_item_quantidadeExtemporanea,
    p_item_acrescimoUnitarioExtemp);
  v_item_valorAcrescimoExtempTot := FUNC_ADD_CALC_EXTEMP_TOTAL(
    v_item_valorAcrescimoExtempSub,
    p_item_valorAcrescimoExtempIte,
    p_item_valorAcrescimoExtempGer);
  IF v_inserindoItem = 1
    AND v_prod_controleEstoque = 3
  THEN
    FOR a IN (
      SELECT
        kit.gradeProdutoFilho,
        ROUND (p_item_quantidade * kit.quantidade, unMed.casasDecimaisUnidadeMedida) quantidade,
        gradProd.produto,
        gradProd.cor,
        gradProd.tamanho,
        prod.controleEstoque,
        prod.unidadeMedida,
        prod.controleQuantidadeVenda,
        prod.unidadeMedidaVenda,
        prod.conversorQuantidadeVenda,
        prod.loteMinimoVenda,
        prod.loteMultiploVenda,
        prod.pesoLiquido,
        prod.pesoBruto,
        prod.altura,
        prod.largura,
        prod.comprimento,
        prod.tipoProduto,
        prod.origemMercadoria,
        prod.idNcm,
        prod.listaServicos,
        unMed.casasDecimaisUnidadeMedida,
        locEst.indicadorPropriedadePosseItem
      FROM CAGRADEPRODUTOXKITSCOMBOS kit
      JOIN CAGRADESPRODUTO gradProd
      ON gradProd.gradeProduto = kit.gradeProdutoFilho
      JOIN CAPRODUTOS prod
      ON prod.produto = gradProd.produto
      JOIN SIUNIDADESMEDIDA unMed
      ON unMed.unidadeMedida = prod.unidadeMedida
      JOIN PALOCAISESTOQUE locEst
      ON locEst.localEstoque = p_item_localEstoque
      WHERE kit.gradeProduto = p_item_gradeProduto
      AND kit.ativo = 1
      AND kit.gradeProduto <> kit.gradeProdutoFilho
      AND kit.quantidade > 0
      AND ROUND (p_item_quantidade * kit.quantidade, unMed.casasDecimaisUnidadeMedida) > 0)
    LOOP
      v_combo_operacaoFiscal := FUNC_ADD_BUSCA_OPERACAO_FISCAL (
        p_item_modeloDocumento,
        v_cab_entradaSaida,
        v_cab_pessoa,
        v_cab_vendaConsumidor,
        v_cab_indicadorConsumidorFinal,
        v_est_grupoFiscal,
        v_pessEst_regimeTributario,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_munEndPess_uf,
        a.produto);
      IF v_cab_entradaSaida = CASE WHEN v_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END
      THEN
        ADD_ITEM_PROD_REGRA_FORN_BUSCA (
          v_cab_pessoa,
          a.produto,
          a.unidadeMedida,
          a.casasDecimaisUnidadeMedida,
          /* Retornos */
          v_auxNumber,
          v_combo_controleQuantidade,
          v_combo_unidadeMedidaConversao,
          v_combo_conversorQuantidade,
          v_combo_loteMinimo,
          v_combo_loteMultiplo);
        IF v_auxNumber = 0
          AND v_cab_pessoa <> 0
        THEN
          ADD_ITEM_PROD_REGRA_FORN_BUSCA (
            0,
            a.produto,
            a.unidadeMedida,
            a.casasDecimaisUnidadeMedida,
            /* Retornos */
            v_auxNumber,
            v_combo_controleQuantidade,
            v_combo_unidadeMedidaConversao,
            v_combo_conversorQuantidade,
            v_combo_loteMinimo,
            v_combo_loteMultiplo);
        END IF;
        IF v_auxNumber = 0 THEN
          v_combo_controleQuantidade      := 1;
          v_combo_unidadeMedidaConversao  := a.unidadeMedida;
          v_combo_conversorQuantidade     := 1;
          v_combo_loteMinimo              := 0;
          v_combo_loteMultiplo            := 0;
        END IF;
      ELSE
        v_combo_controleQuantidade      := CASE WHEN a.controleQuantidadeVenda < 1 THEN 1 ELSE a.controleQuantidadeVenda END;
        v_combo_unidadeMedidaConversao  :=
          CASE
            WHEN a.controleQuantidadeVenda IN (2,3) 
            THEN 'PC'
            WHEN a.controleQuantidadeVenda IN (4,5) AND a.unidadeMedidaVenda <> ' '
            THEN a.unidadeMedidaVenda
            ELSE a.unidadeMedida
          END;
        v_combo_conversorQuantidade := CASE WHEN a.controleQuantidadeVenda IN (4,5) AND a.conversorQuantidadeVenda <> 0 THEN a.conversorQuantidadeVenda ELSE 0 END;
        v_combo_loteMinimo          := ROUND (a.loteMinimoVenda, a.casasDecimaisUnidadeMedida);
        v_combo_loteMultiplo        := ROUND (a.loteMultiploVenda, a.casasDecimaisUnidadeMedida);
      END IF;
      IF v_combo_controleQuantidade = 2 THEN
        v_combo_altura               := a.altura;
        v_combo_largura              := a.largura;
        v_combo_comprimento          := 0;
        v_combo_pecas                := CASE WHEN v_combo_altura = 0 OR v_combo_largura = 0 THEN 0 ELSE ROUND ((a.quantidade / ((v_combo_altura / 100) * (v_combo_largura / 100))), 6) END;
        v_combo_quantidadeConvertida := v_combo_pecas;
        v_combo_conversorQuantidade  := CASE WHEN v_combo_quantidadeConvertida = 0 THEN 0 ELSE ROUND (a.quantidade / v_combo_quantidadeConvertida, 6) END;
      ELSIF v_combo_controleQuantidade = 3 THEN
        v_combo_altura               := a.altura;
        v_combo_largura              := a.largura;
        v_combo_comprimento          := a.comprimento;
        v_combo_pecas                := CASE WHEN v_combo_altura = 0 OR v_combo_comprimento = 0 OR v_combo_comprimento = 0 THEN 0 ELSE ROUND (a.quantidade / ((v_combo_altura / 100) * (v_combo_largura / 100) * v_combo_comprimento), 6) END;
        v_combo_quantidadeConvertida := v_combo_pecas;
        v_combo_conversorQuantidade  := CASE WHEN v_combo_quantidadeConvertida = 0 THEN 0 ELSE ROUND (a.quantidade / v_combo_quantidadeConvertida, 6) END;
      ELSIF v_combo_controleQuantidade = 4 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := CASE WHEN v_combo_conversorQuantidade = 0 THEN 0 ELSE ROUND (a.quantidade / v_combo_conversorQuantidade, 6) END;
        v_combo_quantidadeConvertida := v_combo_pecas;
      ELSIF v_combo_controleQuantidade = 5 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := ROUND (a.quantidade * v_combo_conversorQuantidade, 6);
        v_combo_quantidadeConvertida := v_combo_pecas;
      ELSE
        v_combo_conversorQuantidade  := 1;
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := 0;
        v_combo_quantidadeConvertida := a.quantidade;
      END IF;
      v_combo_pesoLiquido := ROUND ((a.quantidade * a.pesoLiquido), 3);
      v_combo_pesoBruto   := ROUND ((a.quantidade * a.pesoBruto), 3);
      ADD_BUSCA_PRECO (
        p_config_64_casasDecSaidas,
        p_config_65_casasDecEntrada,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_sys_perfilUsuarioLogado,
        p_sys_usuarioLogado,
        v_cab_entradaSaida,
        v_cab_devolucaoAnulacaoRetorno,
        v_cab_estabelecimento,
        NULL, -- p_cab_dataPrecoInicial
        TRUNC (SYSDATE), -- p_cab_dataPrecoFinal
        v_cab_pessoa,
        v_cab_projeto,
        v_modDoc_capituloNatFiscal,
        v_modDoc_tipoPreco,
        v_modDoc_tabelaPreco,
        v_modDoc_fatorMultipPreco,
        v_modDoc_tipoPrecoB,
        v_modDoc_tabelaPrecoB,
        v_modDoc_fatorMultipPrecoB,
        v_munEndEst_uf,
        v_munEndPess_uf,
        p_item_vendedor,
        0, -- p_item_idFormulaTinta
        0, -- p_item_personalizacao
        p_item_localEstoque,
        p_item_pessoaParticipante,
        a.quantidade,
        a.produto,
        a.cor,
        a.tamanho,
        a.controleEstoque,
        a.indicadorPropriedadePosseItem,
        0, -- p_manterPreco
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_precoDesconto,
        v_combo_precoMinimo,
        v_auxNumber, -- r_informarPrecoManualmente
        v_auxNumber, -- r_precoAPrazo
        v_auxNumber, -- r_precoAVista
        v_auxNumber, -- r_promocao
        v_auxNumber, -- r_precoPromocaoAPrazo
        v_auxNumber, -- r_precoPromocaoAVista
        v_auxNumber, -- r_precoIndexadoAPrazo
        v_auxNumber); -- r_precoIndexadoAVista
      v_combo_precoUnitario := CASE WHEN p_item_usarPrecoAVista = 1 THEN v_combo_precoSugestaoAVista ELSE v_combo_precoSugestaoAPrazo END;
      ADD_DOC_FISC_ITEM_GRAVA (
        ' ', -- p_sessaoClient
        p_sys_usuarioLogado,
        p_sys_perfilUsuarioLogado,
        p_sys_estabelecimentoAtivo,
        p_person_138_etapOrcEmProcesso,
        p_person_139_etapOrcLiberado,
        p_person_190_modeloFrete,
        p_config_64_casasDecSaidas,
        p_config_65_casasDecEntrada,
        p_config_198_obs_add_referenc,
        p_config_199_obs_add_caractA,
        p_config_200_obs_add_caractB,
        p_config_201_obs_add_caractC,
        p_config_202_obs_add_caractD,
        p_config_203_obs_add_caractE,
        p_config_209_filtrarGrupoEcon,
        p_config_227_manterPessoaOrcam,
        p_config_230_etapaPedComprParc,
        p_config_354_estabProximoId,
        p_config_362_calcCustoPorGrade,
        p_config_378_calcularVolumes,
        p_config_413_obs_add_marca,
        p_config_418_obs_efetarEnter,
        p_manterFinanceiro_Retotalizar,
        'S', -- p_buscarAliquotas_CalcularImp
        p_buscarGeraFinanceiroEstoque,
        p_tipoDocumentoReferenciado,
        p_idItemReferenciado,
        CASE
          WHEN p_quantidadeReferenciada = 0
          OR p_item_quantidade = 0
          THEN 0
          ELSE ROUND(a.quantidade * p_quantidadeReferenciada / p_item_quantidade, 7)
        END, -- p_quantidadeReferenciada
        ' ', -- p_tempComp_nomeTempComposicao,
        0, -- p_tempComp_sequencia
        r_calcularImpostos,
        0, -- p_item_idItemDocFiscal
        p_item_idDocumentoFiscal,
        p_item_pedidoCompraFornecedor,
        p_item_sequenciaPedidoCompraFo,
        p_item_modeloDocumento,
        p_item_estabelecimentoOriginal,
        p_item_vendedor,
        a.gradeProdutoFilho,
        0, -- p_item_idFormulaTinta
        0, -- p_item_personalizacao
        0, -- p_item_idLoteEstoque
        0, -- p_item_idNumeroSerie
        p_item_localEstoque,
        p_item_pessoaParticipante,
        v_combo_controleQuantidade,
        v_combo_unidadeMedidaConversao,
        v_combo_conversorQuantidade,
        v_combo_loteMinimo,
        v_combo_loteMultiplo,
        v_combo_altura,
        v_combo_largura,
        v_combo_comprimento,
        v_combo_pecas,
        a.quantidade,
        v_combo_quantidadeConvertida,
        v_combo_pesoLiquido,
        v_combo_pesoBruto,
        v_combo_tipoPreco,
        v_combo_tabelaPreco,
        v_combo_precoSugestaoAPrazo,
        v_combo_precoSugestaoAVista,
        v_combo_precoDesconto,
        v_combo_precoMinimo,
        p_item_usarPrecoAVista,
        v_combo_precoUnitario, -- p_item_precoUnitarioBruto
        0, -- p_item_acrescimoUnitarioCompos
        v_combo_precoUnitario,
        p_item_percDescontoItem,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoItem
        p_item_percAcrescimoItem,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorFreteItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorFreteItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorSeguroItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorSeguroItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAdicFreteMarItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAdicFreteMarItem
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDespesasAduanItem
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDespesasAduanItem
        CASE
          WHEN p_item_quantidade = 0
          THEN 0
          ELSE ROUND(p_item_quantidadeExtemporanea * a.quantidade / p_item_quantidade, 2)
        END, -- p_item_quantidadeExtemporanea
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_acrescimoUnitarioExtemp
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_acrescimoUnitarioExtemp
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoExtempIte
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoExtempIte
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoCustoOpIte
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoCustoOpIte
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoCustoOpIt
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoCustoOpIt
        p_item_observacoesDigitadas,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorFreteGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorFreteGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorSeguroGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorSeguroGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorOutrasDespesasGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorOutrasDespesasGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAdicFreteMarGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAdicFreteMarGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDespesasAduanGeral
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDespesasAduanGeral
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoExtempGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoExtempGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoCustoOpGer
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoCustoOpGer
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorAcrescimoCustoOpGe
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorAcrescimoCustoOpGe
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorDescontoPagamento
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorDescontoPagamento
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorOutrasDespPagament
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorOutrasDespPagament
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorJurosPagamento
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorJurosPagamento
        p_item_percentualDevolucao,
        CASE
          WHEN ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2) = 0
          THEN 0
          ELSE ROUND(p_item_valorIPIDevolucao
            * ROUND (a.quantidade * v_combo_precoUnitario, 2)
            / ROUND (p_item_quantidade * p_item_precoUnitarioBruto, 2), 2)
        END, -- p_item_valorIPIDevolucao,
        v_combo_operacaoFiscal,
        p_item_movimentaEstoque,
        p_item_movimentaEstoqueFiscal,
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        0, -- p_item_retencaoIRRF
        0, -- p_item_retencaoINSS
        0, -- p_item_retencaoPIS
        0, -- p_item_retencaoCOFINS
        0, -- p_item_retencaoCSLL
        0, -- p_item_retencaoOutros
        0, -- p_item_aliquotaII
        0, -- p_item_aliquotaIOF
        0, -- p_item_codigoEnquadramentoIPI
        0, -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        ' ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        ' ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        '  ', -- p_item_stICMS
        0, -- p_item_modalBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        ' ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicionadoST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        0, -- p_item_aliquotaSTSuportConsFin
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        '  ', -- p_item_stICMSEscrituracao
        0, -- p_item_reducaoBaseICMSEscritur
        0, -- p_item_aliquotaICMSEscrituraca
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_item_margemValorAdicSTEscrit
        0, -- p_item_reducaoBaseSTEscriturac
        0, -- p_item_aliquotaICMSSTEscritura
        0, -- p_item_somarICMSST
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        0, -- p_item_baseISSQN
        0, -- p_item_valorISSQN
        0, -- p_item_baseRetIRRF
        0, -- p_item_valorRetIRRF
        0, -- p_item_baseRetINSS
        0, -- p_item_valorRetINSS
        0, -- p_item_baseRetPIS
        0, -- p_item_valorRetPIS
        0, -- p_item_baseRetCOFINS
        0, -- p_item_valorRetCOFINS
        0, -- p_item_baseRetCSLL
        0, -- p_item_valorRetCSLL
        0, -- p_item_baseRetOutros
        0, -- p_item_valorRetOutros
        0, -- p_item_baseII
        0, -- p_item_valorII
        0, -- p_item_baseIOF
        0, -- p_item_valorIOF
        0, -- p_item_baseIPI
        0, -- p_item_valorIPI
        0, -- p_item_basePIS
        0, -- p_item_valorPIS
        0, -- p_item_basePISST
        0, -- p_item_valorPISST
        0, -- p_item_baseCOFINS
        0, -- p_item_valorCOFINS
        0, -- p_item_baseCOFINSST
        0, -- p_item_valorCOFINSST
        0, -- p_item_baseCreditoSimplesNac
        0, -- p_item_valorCreditoSimplesNac
        0, -- p_item_baseICMS
        0, -- p_item_valorICMSOperacao
        0, -- p_item_valorICMSDiferido
        0, -- p_item_valorICMS
        0, -- p_item_valorICMSDesoneracao
        0, -- p_item_baseICMSST
        0, -- p_item_valorICMSST
        0, -- p_item_baseICMSSTAnteriormente
        0, -- p_item_valorICMSSTAnteriorment
        0, -- p_item_valorICMSProprioSubstit
        0, -- p_item_baseICMSEfetivo
        0, -- p_item_valorICMSEfetivo
        0, -- p_item_baseICMSEscrituracao
        0, -- p_item_valorICMSEscrituracao
        0, -- p_item_valorICMSDesonEscritura
        0, -- p_item_baseICMSSTEscrituracao
        0, -- p_item_valorICMSSTEscrituracao
        0, -- p_item_baseICMSUFDestinatario
        0, -- p_item_valorICMSUFDestinatario
        0, -- p_item_baseICMSUFRemetente
        0, -- p_item_valorICMSUFRemetente
        0, -- p_item_baseFCP
        0, -- p_item_valorFCP
        0, -- p_item_baseFCPST
        0, -- p_item_valorFCPST
        0, -- p_item_baseFCPSTAnteriormente
        0, -- p_item_valorFCPSTAnteriormente
        0, -- p_item_baseFCPUFDestinatario
        0, -- p_item_valorFCPUFDestinatario
        0, -- p_item_baseEstimadaImpostos
        0, -- p_item_valorEstImpFederais
        0, -- p_item_valorEstImpEstaduais
        0, -- p_item_valorEstImpMunicipais
        p_nivel + 1, -- p_nivel,
        r_buffer_idItemDocFiscal,
        /* Retornos */
        r_calcularImpostos,
        v_auxNumber, -- r_item_idItemDocFiscal
        r_buffer_idItemDocFiscal,
        v_combo_valorTotal);
      r_valorInserido := r_valorInserido + v_combo_valorTotal;
    END LOOP;
    IF p_nivel = 0
    AND r_valorInserido > 0
    AND r_valorInserido <> v_item_valorProdutoServico
      - CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN p_item_valorDescontoItem
          ELSE 0
        END
      + CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN p_item_valorAcrescimoItem
          ELSE 0
        END
    THEN
      v_soma_valorProdutos          := 0;
      v_soma_valorDescontoProdutos  := 0;
      v_soma_valorAcrescimoProdutos := 0;
      v_soma_valorServicos          := 0;
      v_soma_valorDescontoServicos  := 0;
      v_soma_valorAcrescimoServicos := 0;
      v_ajuste_residuoDesconto      := 0;
      v_ajuste_residuoAcrescimo     := 0;
      v_ajuste_valorOriginal        := v_item_valorProdutoServico -
        CASE
          WHEN v_modDoc_diminuiDescontoPrUnit = 1
          THEN 0
          ELSE p_item_valorDescontoItem
        END +
        CASE
          WHEN v_modDoc_somaAcrescimosPrUnit = 1
          THEN 0
          ELSE p_item_valorAcrescimoItem
        END;
      WHILE r_buffer_idItemDocFiscal IS NOT NULL AND LENGTH(RTRIM(r_buffer_idItemDocFiscal)) >= 14
      LOOP
        v_ajuste_idItemDocFiscal := TO_NUMBER(SUBSTR(r_buffer_idItemDocFiscal,1,14));
        r_buffer_idItemDocFiscal := RTRIM(SUBSTR(r_buffer_idItemDocFiscal,16,32000));
        SELECT
          a.quantidade,
          a.precoUnitarioBruto,
          a.valorProdutoServicoBruto,
          a.valorDescontoItem,
          a.valorAcrescimoItem,
          prod.tipoProduto
        INTO
          v_ajuste_quantidade,
          v_ajuste_precoUnitarioBruto,
          v_ajuste_valorProdutoServicoBr,
          v_ajuste_valorDescontoItem,
          v_ajuste_valorAcrescimoItem,
          v_ajuste_prod_tipoProduto
        FROM MODOCFISCALXITENS a
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = a.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto
        WHERE a.idItemDocFiscal = v_ajuste_idItemDocFiscal;
        IF v_ajuste_prod_tipoProduto = '09' THEN
          v_soma_valorServicos := v_soma_valorServicos - v_ajuste_valorProdutoServicoBr
            + CASE
                WHEN v_modDoc_diminuiDescontoPrUnit = 1
                THEN v_ajuste_valorDescontoItem
                ELSE 0
              END
            - CASE
                WHEN v_modDoc_somaAcrescimosPrUnit = 1
                THEN v_ajuste_valorAcrescimoItem
                ELSE 0
              END;
          v_soma_valorDescontoServicos  := v_soma_valorDescontoServicos  - v_ajuste_valorDescontoItem;
          v_soma_valorAcrescimoServicos := v_soma_valorAcrescimoServicos - v_ajuste_valorAcrescimoItem;
        ELSE
          v_soma_valorProdutos := v_soma_valorProdutos - v_ajuste_valorProdutoServicoBr
            + CASE
                WHEN v_modDoc_diminuiDescontoPrUnit = 1
                THEN v_ajuste_valorDescontoItem
                ELSE 0
              END
            - CASE
                WHEN v_modDoc_somaAcrescimosPrUnit = 1
                THEN v_ajuste_valorAcrescimoItem
                ELSE 0
              END;
          v_soma_valorDescontoProdutos  := v_soma_valorDescontoProdutos  - v_ajuste_valorDescontoItem;
          v_soma_valorAcrescimoProdutos := v_soma_valorAcrescimoProdutos - v_ajuste_valorAcrescimoItem;
        END IF;
        v_ajuste_valorDescontoItem := v_ajuste_valorDescontoItem + ROUND (
          CASE
            WHEN r_valorInserido > v_ajuste_valorOriginal
            THEN r_valorInserido - v_ajuste_valorOriginal
            ELSE 0
          END
          * (v_ajuste_valorProdutoServicoBr - v_ajuste_valorDescontoItem + v_ajuste_valorAcrescimoItem)
          / r_valorInserido + v_ajuste_residuoDesconto, 2);
        v_ajuste_residuoDesconto :=
          CASE
            WHEN r_valorInserido > v_ajuste_valorOriginal
            THEN r_valorInserido - v_ajuste_valorOriginal
            ELSE 0
          END
          * (v_ajuste_valorProdutoServicoBr - v_ajuste_valorDescontoItem + v_ajuste_valorAcrescimoItem)
          / r_valorInserido + v_ajuste_residuoDesconto - ROUND (
          CASE
            WHEN r_valorInserido > v_ajuste_valorOriginal
            THEN r_valorInserido - v_ajuste_valorOriginal
            ELSE 0
          END
          * (v_ajuste_valorProdutoServicoBr - v_ajuste_valorDescontoItem + v_ajuste_valorAcrescimoItem)
          / r_valorInserido + v_ajuste_residuoDesconto, 2);
        v_ajuste_valorAcrescimoItem := v_ajuste_valorAcrescimoItem + ROUND (
          CASE
            WHEN v_ajuste_valorOriginal > r_valorInserido
            THEN v_ajuste_valorOriginal - r_valorInserido
            ELSE 0
          END
          * (v_ajuste_valorProdutoServicoBr - v_ajuste_valorDescontoItem + v_ajuste_valorAcrescimoItem)
          / r_valorInserido + v_ajuste_residuoAcrescimo, 2);
        v_ajuste_residuoAcrescimo :=
          CASE
            WHEN v_ajuste_valorOriginal > r_valorInserido
            THEN v_ajuste_valorOriginal - r_valorInserido
            ELSE 0
          END
          * (v_ajuste_valorProdutoServicoBr - v_ajuste_valorDescontoItem + v_ajuste_valorAcrescimoItem)
          / r_valorInserido + v_ajuste_residuoAcrescimo - ROUND (
          CASE
            WHEN v_ajuste_valorOriginal > r_valorInserido
            THEN v_ajuste_valorOriginal - r_valorInserido
            ELSE 0
          END
          * (v_ajuste_valorProdutoServicoBr - v_ajuste_valorDescontoItem + v_ajuste_valorAcrescimoItem)
          / r_valorInserido + v_ajuste_residuoAcrescimo, 2);
        IF v_ajuste_prod_tipoProduto = '09' THEN
          v_soma_valorServicos := v_soma_valorServicos + v_ajuste_valorProdutoServicoBr
            - CASE
                WHEN v_modDoc_diminuiDescontoPrUnit = 1
                THEN v_ajuste_valorDescontoItem
                ELSE 0
              END
            + CASE
                WHEN v_modDoc_somaAcrescimosPrUnit = 1
                THEN v_ajuste_valorAcrescimoItem
                ELSE 0
              END;
          v_soma_valorDescontoServicos  := v_soma_valorDescontoServicos  + v_ajuste_valorDescontoItem;
          v_soma_valorAcrescimoServicos := v_soma_valorAcrescimoServicos + v_ajuste_valorAcrescimoItem;
        ELSE
          v_soma_valorProdutos := v_soma_valorProdutos + v_ajuste_valorProdutoServicoBr
            - CASE
                WHEN v_modDoc_diminuiDescontoPrUnit = 1
                THEN v_ajuste_valorDescontoItem
                ELSE 0
              END
            + CASE
                WHEN v_modDoc_somaAcrescimosPrUnit = 1
                THEN v_ajuste_valorAcrescimoItem
                ELSE 0
              END;
          v_soma_valorDescontoProdutos  := v_soma_valorDescontoProdutos  + v_ajuste_valorDescontoItem;
          v_soma_valorAcrescimoProdutos := v_soma_valorAcrescimoProdutos + v_ajuste_valorAcrescimoItem;
        END IF;
        UPDATE MODOCFISCALXITENS
        SET precoUnitario =
          CASE
            WHEN v_ajuste_quantidade = 0
              OR CASE
                   WHEN v_modDoc_diminuiDescontoPrUnit = 1
                   THEN v_ajuste_valorDescontoItem
                   ELSE 0
                 END =
                 CASE
                   WHEN v_modDoc_somaAcrescimosPrUnit = 1
                   THEN v_ajuste_valorAcrescimoItem
                   ELSE 0
                 END
            THEN v_ajuste_precoUnitarioBruto
            ELSE ROUND (( v_ajuste_valorProdutoServicoBr
              - CASE
                  WHEN v_modDoc_diminuiDescontoPrUnit = 1
                  THEN v_ajuste_valorDescontoItem
                  ELSE 0
                END
              + CASE
                  WHEN v_modDoc_somaAcrescimosPrUnit = 1
                  THEN v_ajuste_valorAcrescimoItem
                  ELSE 0
                END) / v_ajuste_quantidade, 7)
          END,
          valorProdutoServico = v_ajuste_valorProdutoServicoBr
            - CASE
                WHEN v_modDoc_diminuiDescontoPrUnit = 1
                THEN v_ajuste_valorDescontoItem
                ELSE 0
              END
            + CASE
                WHEN v_modDoc_somaAcrescimosPrUnit = 1
                THEN v_ajuste_valorAcrescimoItem
                ELSE 0
              END,
          percDescontoItem =
            CASE
              WHEN v_ajuste_valorProdutoServicoBr = 0
              THEN 0
              ELSE ROUND (100 * v_ajuste_valorDescontoItem / v_ajuste_valorProdutoServicoBr, 4)
            END,
          valorDescontoItem = v_ajuste_valorDescontoItem,
          percAcrescimoItem =
            CASE
              WHEN v_ajuste_valorProdutoServicoBr = 0
              THEN 0
              ELSE ROUND (100 * v_ajuste_valorAcrescimoItem / v_ajuste_valorProdutoServicoBr, 4)
            END,
          valorAcrescimoItem  = v_ajuste_valorAcrescimoItem
        WHERE idItemDocFiscal = v_ajuste_idItemDocFiscal;
      END LOOP;
      UPDATE MODOCUMENTOSFISCAIS SET
        valorProdutos          = valorProdutos          + v_soma_valorProdutos,
        valorDescontoProdutos  = valorDescontoProdutos  + v_soma_valorDescontoProdutos,
        valorAcrescimoProdutos = valorAcrescimoProdutos + v_soma_valorAcrescimoProdutos,
        valorServicos          = valorServicos          + v_soma_valorServicos,
        valorDescontoServicos  = valorDescontoServicos  + v_soma_valorDescontoServicos,
        valorAcrescimoServicos = valorAcrescimoServicos + v_soma_valorAcrescimoServicos
      WHERE idDocumentoFiscal  = p_item_idDocumentoFiscal;
      r_calcularImpostos := 1;
    END IF;
  ELSE
    IF r_item_idItemDocFiscal <= 0 THEN
      r_item_idItemDocFiscal := FUNC_ADD_BUSCA_PROXIMO_ID ('MODOCFISCALXITENS', 'idItemDocFiscal', 14, p_sys_estabelecimentoAtivo, NULL);
    END IF;
    IF p_manterFinanceiro_Retotalizar = 0
      AND v_item_cancelado = 0
    THEN
      IF v_inserindoItem = 1
        AND ( v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0
          OR p_item_valorAcrescimoExtempGer <> 0
          OR p_item_valorDescontoCustoOpGer <> 0
          OR p_item_valorAcrescimoCustoOpGe <> 0)
        THEN
          r_calcularImpostos := 1;
      END IF;
      IF (v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorPagamentoBruto <> 0
          OR v_cab_promocaoExiste = 1)
        AND (v_inserindoItem = 1
          OR p_item_gradeProduto <> v_ini_gradeProduto
          OR p_item_quantidade <> v_ini_quantidade
          OR v_item_valorBasePagamento <> v_ini_valorBasePagamento)
      THEN
        ADD_DOC_FISC_PAG_EXCLUI_TROCA (
          r_calcularImpostos,
          p_item_idDocumentoFiscal,
          v_cab_valorDescontoGeral,
          v_cab_valorOutrasDespesasGeral,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_promocaoExiste,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento,
          r_calcularImpostos,
          v_cab_valorDescontoGeral,
          v_cab_condicaoPagamento,
          v_cab_numeroParcelas,
          v_cab_somaPrazoParcelas,
          v_cab_valorXPrazoParcelas,
          v_cab_prazoMedio,
          v_cab_prazoMedioPonderado,
          v_cab_valorEntradaMinima,
          v_cab_valorAVistaEntrada,
          v_cab_valorPagamentoBruto,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_valorPagamentoLiquido,
          v_cab_valorTroco,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento);
      END IF;
      IF NOT (p_person_190_modeloFrete IS NULL)
        AND p_person_190_modeloFrete <> ' '
        AND v_modDoc_somaFreteSeguroPrUnit = 0
      THEN
        v_cab_modalidadeFrete := FUNC_ADD_BUSCA_MODALIDADE_FRET (
          p_person_190_modeloFrete,
          v_cab_modalidadeFrete,
          v_ini_cab_valorFreteItem,
          v_cab_valorFreteItem,
          v_ini_cab_valorFreteGeral,
          v_cab_valorFreteGeral,
          v_modDoc_somaFreteSeguroPrUnit);
      END IF;
      ADD_CALCULA_TOTAIS_ITEM (
        v_cab_tipoPagamentoFrete,
        p_item_quantidade,
        p_item_quantidadeConvertida,
        p_item_precoUnitarioBruto,
        p_item_acrescimoUnitarioCompos,
        v_item_precoUnitario,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        p_item_valorFreteItem,
        p_item_valorSeguroItem,
        p_item_valorAdicFreteMarItem,
        p_item_valorDespesasAduanItem,
        p_item_valorFreteGeral,
        p_item_valorSeguroGeral,
        v_item_valorDescontoGeral,
        p_item_valorOutrasDespesasGer,
        p_item_valorAdicFreteMarGeral,
        p_item_valorDespesasAduanGeral,
        v_item_valorDescontoPagamento,
        v_item_valorOutrasDespPagament,
        v_item_valorJurosPagamento,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        v_modDoc_somaFreteSeguroPrUnit,
        v_prod_composicaoPreco,
        v_item_precoUnitario,
        v_item_precoUnitarioConvertido,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal);
    END IF;
    IF p_buscarAliquotas_CalcularImp = 'S'
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal)
    THEN
      ADD_ITEM_OPERACAO_FISCAL_BUSCA (
        p_buscarGeraFinanceiroEstoque,
        v_cab_origemDocumento,
        v_cab_tipoDocumento,
        v_cab_entradaSaida,
        v_cab_devolucaoAnulacaoRetorno,
        v_cab_finalidadeNota,
        v_cab_estabelecimento,
        v_cab_nfFornecedor,
        SYSDATE, -- p_cab_dataEmissao
        v_cab_pessoa,
        v_cab_vendaConsumidor,
        v_cab_enderecoEntregaPessoa,
        v_cab_municipioFatoGerador,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_modDoc_movimentaEstoque,
        v_modDoc_geraFinanceiro,
        v_munEndEst_uf,
        v_pess_indicadorInscricaoEstad,
        v_endPess_enderecoPessoa,
        v_munEndPess_uf,
        v_munEndEntr_uf,
        p_item_operacaoFiscal,
        v_gradProd_produto,
        v_prod_tipoProduto,
        v_prod_origemMercadoria,
        v_prod_idNcm,
        v_prod_listaServicos,
        p_item_movimentaEstoque,
        p_item_movimentaEstoqueFiscal,
        p_item_geraFinanceiro,
        0, -- p_item_cfop
        1, -- p_atualizarISSQN
        ' ', -- p_item_indicadorISSQN
        0, -- p_item_aliquotaISSQN
        0, -- p_item_retidoISSQN
        0, -- p_item_tributadoForaMunicipio
        0, -- p_item_incentivoFiscal
        0, -- p_item_listaServicos
        0, -- p_item_cnae
        0, -- p_item_idServicoMunicipio
        ' ', -- p_item_numeroProcessoAdministr
        1, -- p_atualizarRetIRRF
        0, -- p_item_retencaoIRRF
        1, -- p_atualizarRetINSS
        0, -- p_item_retencaoINSS
        1, -- p_atualizarRetencaoPIS
        0, -- p_item_retencaoPIS
        1, -- p_atualizarRetencaoCOFINS
        0, -- p_item_retencaoCOFINS
        1, -- p_atualizarRetencaoCSLL
        0, -- p_item_retencaoCSLL
        1, -- p_atualizarRetencaoOutros
        0, -- p_item_retencaoOutros
        1, -- p_atualizarII
        0, -- p_item_aliquotaII
        1, -- p_atualizarIOF
        0, -- p_item_aliquotaIOF
        1, -- p_atualizarIPI
        0, -- p_item_codigoEnquadramentoIPI
        '  ', -- p_item_stIPI
        0, -- p_item_aliquotaIPI
        0, -- p_item_valorAliquotaIPI
        1, -- p_atualizarPIS
        '  ', -- p_item_stPIS
        0, -- p_item_aliquotaPIS
        0, -- p_item_valorAliquotaPIS
        1, -- p_atualizarPISST
        0, -- p_item_aliquotaPISST
        0, -- p_item_valorAliquotaPISST
        1, -- p_atualizarCOFINS
        '  ', -- p_item_stCOFINS
        0, -- p_item_aliquotaCOFINS
        0, -- p_item_valorAliquotaCOFINS
        1, -- p_atualizarCOFINSST
        0, -- p_item_aliquotaCOFINSST
        0, -- p_item_valorAliquotaCOFINSST
        1, -- p_atualizarSimplesNacional
        '   ', -- p_item_stSimplesNacional
        0, -- p_item_creditoSimplesNacional
        1, -- p_atualizarICMS
        '  ', -- p_item_stICMS
        ' ', -- p_item_modalidadeBaseCalcICMS
        0, -- p_item_reducaoBaseICMS
        0, -- p_item_aliquotaICMS
        0, -- p_item_diferimentoICMS
        '  ', -- p_item_motivoDesoneracaoICMS
        0, -- p_item_idBeneficio
        1, -- p_atualizarICMSST
        ' ', -- p_item_modalBaseCalcICMSST
        0, -- p_item_margemValorAdicST
        0, -- p_item_reducaoBaseST
        0, -- p_item_aliquotaICMSST
        1, -- p_atualizarICMSSTAnteriorEfet
        0, -- p_item_aliquotaSTSuportConsF
        0, -- p_item_reducaoBaseICMSEfetivo
        0, -- p_item_aliquotaICMSEfetivo
        1, -- p_atualizarICMSEscrituracao
        '  ', -- p_item_stICMSEscrit
        0, -- p_item_reducaoBaseICMSEscrit
        0, -- p_item_aliquotaICMSEscrit
        0, -- p_item_diferimentoICMSEscritur
        0, -- p_atualizarICMSSTEscrituracao
        0, -- p_item_margemValorAdicSTEscrit
        0, -- p_item_reducaoBaseSTEscrit
        0, -- p_item_aliquotaICMSSTEscrit
        0, -- p_item_somarICMSST
        1, -- p_atualizarDIFAL
        0, -- p_item_aliquotaICMSUFDestinat
        0, -- p_item_aliquotaICMSInterestad
        0, -- p_item_partilhaICMSInterestad
        1, -- p_atualizarFCP
        0, -- p_item_aliquotaFCP
        0, -- p_item_aliquotaFCPST
        0, -- p_item_aliquotaFCPSTAnteriorm
        0, -- p_item_aliquotaFCPUFDestinat
        1, -- p_atualizarImpostosEstimados
        0, -- p_item_aliquotaEstImpFederais
        0, -- p_item_aliquotaEstImpEstaduais
        0, -- p_item_aliquotaEstImpMunicipai
        v_auxNumber, -- r_encontrouRegistro
        v_item_movimentaEstoque,
        v_item_movimentaEstoqueFiscal,
        v_item_geraFinanceiro,
        v_item_cfop,
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        v_item_retidoISSQN,
        v_item_tributadoForaMunicipio,
        v_item_incentivoFiscal,
        v_item_listaServicos,
        v_item_cnae,
        v_item_idServicoMunicipio,
        v_item_numeroProcessoAdministr,
        v_item_retencaoIRRF,
        v_item_retencaoINSS,
        v_item_retencaoPIS,
        v_item_retencaoCOFINS,
        v_item_retencaoCSLL,
        v_item_retencaoOutros,
        v_item_aliquotaII,
        v_item_aliquotaIOF,
        v_item_codigoEnquadramentoIPI,
        v_item_stIPI,
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        v_item_stPIS,
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        v_item_stCOFINS,
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        v_item_motivoDesoneracaoICMS,
        v_item_idBeneficio,
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        v_item_aliquotaSTSuportConsFin,
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        v_item_stICMSEscrituracao,
        v_item_reducaoBaseICMSEscritur,
        v_item_aliquotaICMSEscrituraca,
        v_item_diferimentoICMSEscritur,
        v_item_margemValorAdicSTEscrit,
        v_item_reducaoBaseSTEscriturac,
        v_item_aliquotaICMSSTEscritura,
        v_item_somarICMSST,
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        v_item_aliquotaFCP,
        v_item_aliquotaFCPST,
        v_item_aliquotaFCPSTAnteriorm,
        v_item_aliquotaFCPUFDestinat,
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai);      
    END IF;
    IF p_buscarAliquotas_CalcularImp IN ('I','S')
      OR p_buscarAliquotas_CalcularImp ='T'
      AND (v_inserindoItem = 1
        OR v_ini_gradeProduto <> p_item_gradeProduto
        OR v_ini_personalizacao <> p_item_personalizacao
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_operacaoFiscal <> p_item_operacaoFiscal
        OR v_ini_quantidade <> p_item_quantidade
        OR v_ini_valorProdutoServicoBruto <> v_item_valorProdutoServicoBrut
        OR v_ini_valorProdutoServico <> v_item_valorProdutoServico
        OR v_ini_valorDescontoItem <> p_item_valorDescontoItem
        OR v_ini_valorAcrescimoItem <> p_item_valorAcrescimoItem
        OR v_cab_tipoPagamentoFrete <> 'V'
        AND (v_ini_valorFreteTotal <> v_item_valorFreteTotal
          OR v_ini_valorSeguroTotal <> v_item_valorSeguroTotal)
        OR v_ini_valorDescontoTotal <> v_item_valorDescontoTotal
        OR v_ini_valorOutrasDespesasTotal <> v_item_valorOutrasDespesasTot
        OR v_ini_valorAdicFreteMarTotal <> v_item_valorAdicFreteMarTotal
        OR v_ini_valorDespesasAduanTotal <> v_item_valorDespesasAduanTotal)
    THEN
      ADD_CALCULA_IMPOSTOS_ITEM (
        p_config_64_casasDecSaidas,
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        v_cab_entradaSaida,
        v_cab_devolucaoAnulacaoRetorno,
        v_cab_estabelecimento,
        v_cab_nfFornecedor,
        v_cab_dataEmissao, -- p_cab_dataEntradaSaida
        v_cab_pessoa,
        v_cab_localDestinoOperacao,
        v_cab_indicadorConsumidorFinal,
        v_cab_tipoPagamentoFrete,
        v_pess_indicadorInscricaoEstad,
        p_item_personalizacao,
        p_item_quantidade,
        v_item_valorProdutoServico,
        v_item_valorFreteTotal,
        v_item_valorSeguroTotal,
        v_item_valorDescontoTotal,
        v_item_valorOutrasDespesasTot,
        v_item_valorAdicFreteMarTotal,
        v_item_valorDespesasAduanTotal,
        v_item_cfop,
        1, -- p_calcularISSQN
        v_item_indicadorISSQN,
        v_item_aliquotaISSQN,
        0, -- p_baseISSQN
        0, -- p_valorISSQN
        1, -- p_calcularIRRF
        v_item_retencaoIRRF,
        0, -- p_baseRetIRRF
        0, -- p_valorRetIRRF
        1, -- p_calcularINSS
        v_item_retencaoINSS,
        0, -- p_baseRetINSS
        0, -- p_valorRetINSS
        1, -- p_calcularRetencaoPIS
        v_item_retencaoPIS,
        0, -- p_baseRetPIS
        0, -- p_valorRetPIS
        1, -- p_calcularRetencaoCOFINS
        v_item_retencaoCOFINS,
        0, -- p_baseRetCOFINS
        0, -- p_valorRetCOFINS
        1, -- p_calcularRetencaoCSLL
        v_item_retencaoCSLL,
        0, -- p_baseRetCSLL
        0, -- p_valorRetCSLL
        1, -- p_calcularRetencaoOutros
        v_item_retencaoOutros,
        0, -- p_baseRetOutros
        0, -- p_valorRetOutros
        1, -- p_calcularII
        v_item_aliquotaII,
        0, -- p_baseII
        0, -- p_valorII
        1, -- p_calcularIOF
        v_item_aliquotaIOF,
        0, -- p_baseIOF
        0, -- p_valorIOF
        1, -- p_calcularIPI
        v_item_aliquotaIPI,
        v_item_valorAliquotaIPI,
        0, -- p_baseIPI
        0, -- p_valorIPI
        p_item_valorIPIDevolucao,
        1, -- p_calcularPIS
        v_item_aliquotaPIS,
        v_item_valorAliquotaPIS,
        0, -- p_basePIS
        0, -- p_valorPIS
        1, -- p_calcularPISST
        v_item_aliquotaPISST,
        v_item_valorAliquotaPISST,
        0, -- p_basePISST
        0, -- p_valorPISST
        1, -- p_calcularCOFINS
        v_item_aliquotaCOFINS,
        v_item_valorAliquotaCOFINS,
        0, -- p_valorAliquotaCOFINS
        0, -- p_baseCOFINS
        1, -- p_valorCOFINS
        v_item_aliquotaCOFINSST,
        v_item_valorAliquotaCOFINSST,
        0, -- p_baseCOFINSST
        0, -- p_valorCOFINSST
        1, -- p_calcularSimplesNacional
        v_item_stSimplesNacional,
        v_item_creditoSimplesNacional,
        0, -- p_baseCreditoSimplesNacional
        0, -- p_valorCreditoSimplesNacional
        1, -- p_calcularICMS
        v_item_stICMS,
        v_item_modalBaseCalcICMS,
        v_item_reducaoBaseICMS,
        v_item_aliquotaICMS,
        v_item_diferimentoICMS,
        0, -- p_baseICMS
        0, -- p_valorICMSOperacao
        0, -- p_valorICMSDiferido
        0, -- p_valorICMS
        0, -- p_valorICMSDesoneracao
        1, -- p_calcularICMSST
        v_item_modalBaseCalcICMSST,
        v_item_margemValorAdicionadoST,
        v_item_reducaoBaseST,
        v_item_aliquotaICMSST,
        0, -- p_baseICMSST
        0, -- p_valorICMSST
        1, -- p_calcularICMSSTAnterEfetivo
        0, -- p_baseICMSSTAnteriormente
        0, -- p_valorICMSSTAnteriormente
        0, -- p_valorICMSProprioSubstituto
        v_item_reducaoBaseICMSEfetivo,
        v_item_aliquotaICMSEfetivo,
        0, -- p_baseICMSEfetivo
        0, -- p_valorICMSEfetivo
        1, -- p_calcularICMSEscrituracao
        v_item_stICMSEscrituracao,
        v_item_reducaoBaseICMSEscritur,
        v_item_aliquotaICMSEscrituraca,
        v_item_diferimentoICMSEscritur,
        0, -- p_baseICMSEscrituracao
        0, -- p_valorICMSEscrituracao
        0, -- p_valorICMSDesonEscrituracao
        1, -- p_calcularICMSSTEscrituracao
        v_item_margemValorAdicSTEscrit,
        v_item_reducaoBaseSTEscriturac,
        v_item_aliquotaICMSSTEscritura,
        0, -- p_baseICMSSTEscrituracao
        0, -- p_valorICMSSTEscrituracao
        1, -- p_calcularDIFAL
        v_item_aliquotaICMSUFDestinat,
        v_item_aliquotaICMSInterestad,
        v_item_partilhaICMSInterestad,
        0, -- p_baseICMSUFDestinatario
        0, -- p_valorICMSUFDestinatario
        0, -- p_baseICMSUFRemetente
        0, -- p_valorICMSUFRemetente
        1, -- p_calcularFCP
        v_item_aliquotaFCP,
        0, -- p_baseFCP
        0, -- p_valorFCP
        v_item_aliquotaFCPST,
        0, -- p_baseFCPST
        0, -- p_valorFCPST
        v_item_aliquotaFCPSTAnteriorm,
        0, -- p_baseFCPSTAnteriormente
        0, -- p_valorFCPSTAnteriormente
        v_item_aliquotaFCPUFDestinat,
        0, -- p_baseFCPUFDestinatario
        0, -- p_valorFCPUFDestinatario
        1, -- p_calcularImpostosEstimados
        v_item_aliquotaEstImpFederais,
        v_item_aliquotaEstImpEstaduais,
        v_item_aliquotaEstImpMunicipai,
        0, -- p_baseEstimadaImpostos
        0, -- p_valorEstimadoImpFederais
        0, -- p_valorEstimadoImpEstaduais
        0, -- p_valorEstimadoImpMunicipais
        v_gradProd_produto,
        v_gradProd_cor,
        v_gradProd_tamanho,
        v_prod_controleEstoque,
        v_prod_tipoProduto,
        v_prod_precoPautaTabelado,
        v_item_baseISSQN,
        v_item_valorISSQN,
        v_item_baseRetIRRF,
        v_item_valorRetIRRF,
        v_item_baseRetINSS,
        v_item_valorRetINSS,
        v_item_baseRetPIS,
        v_item_valorRetPIS,
        v_item_baseRetCOFINS,
        v_item_valorRetCOFINS,
        v_item_baseRetCSLL,
        v_item_valorRetCSLL,
        v_item_baseRetOutros,
        v_item_valorRetOutros,
        v_item_baseII,
        v_item_valorII,
        v_item_baseIOF,
        v_item_valorIOF,
        v_item_baseIPI,
        v_item_valorIPI,
        v_item_basePIS,
        v_item_valorPIS,
        v_item_basePISST,
        v_item_valorPISST,
        v_item_baseCOFINS,
        v_item_valorCOFINS,
        v_item_baseCOFINSST,
        v_item_valorCOFINSST,
        v_item_baseCreditoSimplesNac,
        v_item_valorCreditoSimplesNac,
        v_item_baseICMS,
        v_item_valorICMSOperacao,
        v_item_valorICMSDiferido,
        v_item_valorICMS,
        v_item_valorICMSDesoneracao,
        v_item_baseICMSST,
        v_item_valorICMSST,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSSTAnteriorment,
        v_item_valorICMSProprioSubstit,
        v_item_baseICMSEfetivo,
        v_item_valorICMSEfetivo,
        v_item_baseICMSEscrituracao,
        v_item_valorICMSEscrituracao,
        v_item_valorICMSDesonEscritura,
        v_item_baseICMSSTEscrituracao,
        v_item_valorICMSSTEscrituracao,
        v_item_baseICMSUFDestinatario,
        v_item_valorICMSUFDestinatario,
        v_item_baseICMSUFRemetente,
        v_item_valorICMSUFRemetente,
        v_item_baseFCP,
        v_item_valorFCP,
        v_item_baseFCPST,
        v_item_valorFCPST,
        v_item_baseFCPSTAnteriormente,
        v_item_valorFCPSTAnteriormente,
        v_item_baseFCPUFDestinatario,
        v_item_valorFCPUFDestinatario,
        v_item_baseEstimadaImpostos,
        v_item_valorEstImpFederais,
        v_item_valorEstImpEstaduais,
        v_item_valorEstImpMunicipais);
    END IF;
    v_item_valorBasePagamento := FUNC_ADD_CALC_BASE_PAGAMENTO (
      v_cab_origemDocumento,
      v_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_geraFinanceiro,
      v_item_valorProdutoServico,
      v_item_valorDescontoPagamento,
      v_item_valorOutrasDespPagament,
      v_item_valorJurosPagamento,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      p_item_valorIPIDevolucao,
      v_item_retidoISSQN,
      v_item_valorISSQN,
      v_item_valorRetIRRF,
      v_item_valorRetINSS,
      v_item_valorRetPIS,
      v_item_valorRetCOFINS,
      v_item_valorRetCSLL,
      v_item_valorRetOutros,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      v_item_valorICMSSTEscrituracao,
      v_item_somarICMSST,
      v_item_valorAcrescimoExtempTot,
      v_modDoc_geraFinanceiro);
    v_item_valorLiquidoItem := FUNC_ADD_CALC_VALOR_LIQUIDO (
      v_cab_nfFornecedor,
      v_cab_tipoPagamentoFrete,
      v_item_valorProdutoServico,
      v_item_valorFreteTotal,
      v_item_valorSeguroTotal,
      v_item_valorDescontoTotal,
      v_item_valorOutrasDespesasTot,
      p_item_valorIPIDevolucao,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      v_item_valorICMSST,
      v_item_valorICMSSTEscrituracao,
      v_item_somarICMSST);
    ADD_CALCULA_CUSTO_CMV (
      v_cab_atualizaCustoMedio,
      v_cab_estabelecimento,
      v_cab_nfFornecedor,
      p_item_modeloDocumento,
      p_item_quantidade,
      v_item_valorII,
      v_item_valorIOF,
      v_item_valorIPI,
      p_item_valorIPIDevolucao,
      v_item_valorPIS,
      v_item_valorPISST,
      v_item_valorCOFINS,
      v_item_valorCOFINSST,
      v_item_valorCreditoSimplesNac,
      v_item_valorICMS,
      v_item_valorICMSST,
      v_item_valorICMSSTEscrituracao,
      v_item_valorLiquidoItem,
      p_item_valorDescontoCustoOpIte,
      p_item_valorDescontoCustoOpGer,
      p_item_valorAcrescimoCustoOpIt,
      p_item_valorAcrescimoCustoOpGe,
      v_item_valorAcrescimoExtempTot,
      v_item_valorDescontoCustoOpTot,
      v_item_valorAcrescimoCustoOpTo,
      v_item_precoCustoOperacao,
      v_item_valorCustoOperacao,
      v_item_precoCMV,
      v_item_valorCMV);
    IF v_inserindoItem = 1 THEN
      SELECT COALESCE (MAX (sequencia),0) + 1
      INTO v_item_sequencia
      FROM MODOCFISCALXITENS
      WHERE idDocumentoFiscal = p_item_idDocumentoFiscal;
      v_cab_ultimoVendedorItem := p_item_vendedor;
    END IF;
    IF v_item_cancelado = 0 THEN
      IF p_manterFinanceiro_Retotalizar <> 2 THEN
        IF p_config_378_calcularVolumes = 1 THEN
          v_cab_quantidadeVolume := v_cab_quantidadeVolume + TRUNC(CASE WHEN p_item_controleQuantidade = 1 AND p_item_loteMultiplo <> 0 THEN p_item_quantidade / p_item_loteMultiplo ELSE p_item_quantidadeConvertida END,0);
        END IF;
        v_cab_pesoLiquido := v_cab_pesoLiquido + p_item_pesoLiquido;
        v_cab_pesoBruto := v_cab_pesoBruto + p_item_pesoBruto;
      END IF;
      v_cab_quantidade := v_cab_quantidade + p_item_quantidadeConvertida;
      IF v_prod_tipoProduto = '09' THEN
        v_cab_valorServicosBruto := v_cab_valorServicosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorServicos := v_cab_valorServicos + v_item_valorProdutoServico;
        v_cab_valorDescontoServicos := v_cab_valorDescontoServicos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoServicos := v_cab_valorAcrescimoServicos + p_item_valorAcrescimoItem;
      ELSE 
        v_cab_valorProdutosBruto := v_cab_valorProdutosBruto + v_item_valorProdutoServicoBrut;
        v_cab_valorProdutos := v_cab_valorProdutos + v_item_valorProdutoServico;
        v_cab_valorDescontoProdutos := v_cab_valorDescontoProdutos + p_item_valorDescontoItem;
        v_cab_valorAcrescimoProdutos := v_cab_valorAcrescimoProdutos + p_item_valorAcrescimoItem;
      END IF;
      v_cab_valorFreteItem := v_cab_valorFreteItem + p_item_valorFreteItem;
      v_cab_valorSeguroItem := v_cab_valorSeguroItem + p_item_valorSeguroItem;
      v_cab_valorAdicFreteMarItem := v_cab_valorAdicFreteMarItem + p_item_valorAdicFreteMarItem;
      v_cab_valorDespesasAduanItem := v_cab_valorDespesasAduanItem + p_item_valorDespesasAduanItem;
      v_cab_valorFreteGeral := v_cab_valorFreteGeral + p_item_valorFreteGeral;
      v_cab_valorSeguroGeral := v_cab_valorSeguroGeral + p_item_valorSeguroGeral;
      v_cab_valorDescontoGeral := v_cab_valorDescontoGeral + v_item_valorDescontoGeral;
      v_cab_valorOutrasDespesasGeral := v_cab_valorOutrasDespesasGeral + p_item_valorOutrasDespesasGer;
      v_cab_valorAdicFreteMarGeral := v_cab_valorAdicFreteMarGeral + p_item_valorAdicFreteMarGeral;
      v_cab_valorDespesasAduanGeral := v_cab_valorDespesasAduanGeral + p_item_valorDespesasAduanGeral;
      v_cab_valorBasePagamento := v_cab_valorBasePagamento + v_item_valorBasePagamento;
      IF p_item_usarPrecoAVista = 1
        AND v_item_geraFinanceiro = 1
      THEN
        v_cab_valorAVistaMinimo := v_cab_valorAVistaMinimo + v_item_valorProdutoServico - v_item_valorDescontoTotal + v_item_valorOutrasDespesasTot;
      END IF;
      v_cab_valorDescontoPagamento := v_cab_valorDescontoPagamento + v_item_valorDescontoPagamento;
      v_cab_valorOutrasDespPagamento := v_cab_valorOutrasDespPagamento + v_item_valorOutrasDespPagament;
      v_cab_valorJurosPagamento := v_cab_valorJurosPagamento + v_item_valorJurosPagamento;
      v_cab_valorFreteTotal := v_cab_valorFreteTotal + v_item_valorFreteTotal;
      v_cab_valorSeguroTotal := v_cab_valorSeguroTotal + v_item_valorSeguroTotal;
      v_cab_valorDescontoTotal := v_cab_valorDescontoTotal + v_item_valorDescontoTotal;
      v_cab_valorOutrasDespesasTotal := v_cab_valorOutrasDespesasTotal + v_item_valorOutrasDespesasTot;
      v_cab_valorAdicFreteMarTotal := v_cab_valorAdicFreteMarTotal + v_item_valorAdicFreteMarTotal;
      v_cab_valorDespesasAduanTotal := v_cab_valorDespesasAduanTotal + v_item_valorDespesasAduanTotal;
      v_cab_valorLiquidoItem := v_cab_valorLiquidoItem + v_item_valorLiquidoItem;
      v_cab_valorDescontoCustoOpItem := v_cab_valorDescontoCustoOpItem + p_item_valorDescontoCustoOpIte;
      v_cab_valorDescontoCustoOpGera := v_cab_valorDescontoCustoOpGera + p_item_valorDescontoCustoOpGer;
      v_cab_valorDescontoCustoOpTota := v_cab_valorDescontoCustoOpTota + v_item_valorDescontoCustoOpTot;
      v_cab_valorAcrescimoCustoOpIte := v_cab_valorAcrescimoCustoOpIte + p_item_valorAcrescimoCustoOpIt;
      v_cab_valorAcrescimoCustoOpGer := v_cab_valorAcrescimoCustoOpGer + p_item_valorAcrescimoCustoOpGe;
      v_cab_valorAcrescimoCustoOpTot := v_cab_valorAcrescimoCustoOpTot + v_item_valorAcrescimoCustoOpTo;
      v_cab_valorCustoOperacao := v_cab_valorCustoOperacao + v_item_valorCustoOperacao;
      v_cab_valorCMV := v_cab_valorCMV + v_item_valorCMV;
      v_cab_quantidadeExtemporanea := v_cab_quantidadeExtemporanea + p_item_quantidadeExtemporanea;
      v_cab_valorAcrescimoExtempSubt := v_cab_valorAcrescimoExtempSubt + v_item_valorAcrescimoExtempSub;
      v_cab_valorAcrescimoExtempItem := v_cab_valorAcrescimoExtempItem + p_item_valorAcrescimoExtempIte;
      v_cab_valorAcrescimoExtempGera := v_cab_valorAcrescimoExtempGera + p_item_valorAcrescimoExtempGer;
      v_cab_valorAcrescimoExtempTota := v_cab_valorAcrescimoExtempTota + v_item_valorAcrescimoExtempTot;
    END IF;
    UPDATE MODOCUMENTOSFISCAIS 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_valorOutrasDespesasGeral,
      valorAdicFreteMarinhaMerGeral = v_cab_valorAdicFreteMarGeral,
      valorDespesasAduaneirasGeral  = v_cab_valorDespesasAduanGeral,
      condicaoPagamento             = v_cab_condicaoPagamento,
      numeroParcelas                = v_cab_numeroParcelas,
      somaPrazoParcelas             = v_cab_somaPrazoParcelas,
      valorXPrazoParcelas           = v_cab_valorXPrazoParcelas,
      prazoMedio                    = v_cab_prazoMedio,
      prazoMedioPonderado           = v_cab_prazoMedioPonderado,
      valorBasePagamento            = v_cab_valorBasePagamento,
      valorAVistaMinimo             = v_cab_valorAVistaMinimo,
      valorEntradaMinima            = v_cab_valorEntradaMinima,
      valorAVistaEntrada            = v_cab_valorAVistaEntrada,
      valorPagamentoBruto           = v_cab_valorPagamentoBruto,
      valorDescontoPagamento        = v_cab_valorDescontoPagamento,
      valorOutrasDespesasPagamento  = v_cab_valorOutrasDespPagamento,
      valorJurosPagamento           = v_cab_valorJurosPagamento,
      valorPagamentoLiquido         = v_cab_valorPagamentoLiquido,
      valorTroco                    = v_cab_valorTroco,
      valorFreteTotal               = v_cab_valorFreteTotal,
      valorSeguroTotal              = v_cab_valorSeguroTotal,
      valorDescontoTotal            = v_cab_valorDescontoTotal,
      valorOutrasDespesasTotal      = v_cab_valorOutrasDespesasTotal,
      valorAdicFreteMarinhaMerTotal = v_cab_valorAdicFreteMarTotal,
      valorDespesasAduaneirasTotal  = v_cab_valorDespesasAduanTotal,
      valorLiquidoItem              = v_cab_valorLiquidoItem,
      valorDescontoCustoOpItem      = v_cab_valorDescontoCustoOpItem,
      valorDescontoCustoOpGeral     = v_cab_valorDescontoCustoOpGera,
      valorDescontoCustoOpTotal     = v_cab_valorDescontoCustoOpTota,
      valorAcrescimoCustoOpItem     = v_cab_valorAcrescimoCustoOpIte,
      valorAcrescimoCustoOpGeral    = v_cab_valorAcrescimoCustoOpGer,
      valorAcrescimoCustoOpTotal    = v_cab_valorAcrescimoCustoOpTot,
      valorCustoOperacao            = v_cab_valorCustoOperacao,
      valorCMV                      = v_cab_valorCMV,
      quantidadeExtemporanea        = v_cab_quantidadeExtemporanea,
      valorAcrescimoExtempSubtotal  = v_cab_valorAcrescimoExtempSubt,
      valorAcrescimoExtempItem      = v_cab_valorAcrescimoExtempItem,
      valorAcrescimoExtempGeral     = v_cab_valorAcrescimoExtempGera,
      valorAcrescimoExtempTotal     = v_cab_valorAcrescimoExtempTota
    WHERE idDocumentoFiscal = p_item_idDocumentoFiscal;
    IF p_item_idItemDocFiscal > 0 THEN
      DELETE MODOCFISCALXCOMPOSICOESPR compDoc
      WHERE compDoc.idItemDocFiscal = p_item_idItemDocFiscal
      AND EXISTS(
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.produto = comp.produto
        WHERE comp.composicaoPreco = compDoc.composicaoPreco
        AND gradProd.gradeProduto <> p_item_gradeProduto);
    END IF;
    v_observacoes := FUNC_ADD_MONTA_OBSERVACAO_ITEM (
      p_sessaoClient,
      p_config_198_obs_add_referenc,
      p_config_199_obs_add_caractA,
      p_config_200_obs_add_caractB,
      p_config_201_obs_add_caractC,
      p_config_202_obs_add_caractD,
      p_config_203_obs_add_caractE,
      p_config_413_obs_add_marca,
      p_config_418_obs_efetarEnter,
      ' ',
      0,
      'D',
      p_item_idItemDocFiscal,
      p_item_gradeProduto,
      p_item_idFormulaTinta,
      p_item_personalizacao,
      p_item_idLoteEstoque,
      p_item_controleQuantidade,
      p_item_loteMultiplo,
      p_item_altura,
      p_item_largura,
      p_item_comprimento,
      p_item_quantidade,
      p_item_observacoesDigitadas);
    MERGE INTO MODOCFISCALXITENS a USING (
