ALTER TABLE TEMPCONTABILSINTETICO ADD CONSTRAINT TEMPCONTABILSINTETICO_PK1 PRIMARY KEY (sessaoClient, contadorSessao, id);
CREATE INDEX TEMPCONTABILSINTETICO_K2 ON TEMPCONTABILSINTETICO (sessaoClient, contadorSessao, quebra, valor, estabelecimento, historicoContabil, debitar);
CREATE INDEX TEMPCONTABILSINTETICO_K3 ON TEMPCONTABILSINTETICO (sessaoClient, contadorSessao, quebra, valor, estabelecimento, historicoContabil, creditar);
CREATE INDEX TEMPCONTABILSINTETICO_K4 ON TEMPCONTABILSINTETICO (sessaoClient, contadorSessao, fato, sequencia);

CREATE GLOBAL TEMPORARY TABLE TEMPCONTABILANALITICO
  (
    sessaoClient      VARCHAR (30) DEFAULT ' ' NOT NULL,
    contadorSessao    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    quebra            VARCHAR (15) DEFAULT ' ' NOT NULL,
    debitoCredito     CHAR (1) DEFAULT ' ' NOT NULL,
    idContaContabil   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    historicoContabil NUMERIC (4,0) DEFAULT 0 NOT NULL,
    linhaContabil     NUMERIC (3,0) DEFAULT 0 NOT NULL,
    origemContabil    NUMERIC (3,0) DEFAULT 0 NOT NULL,
    idDocumento       NUMERIC (14,0) DEFAULT 0 NOT NULL,
    data              DATE,
    fatoContabil      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    estabelecimento   NUMERIC (4,0) DEFAULT 0 NOT NULL,
    pessoa            NUMERIC (14,0) DEFAULT 0 NOT NULL,
    documento         VARCHAR (60) DEFAULT ' ' NOT NULL,
    complemento       VARCHAR (120) DEFAULT ' ' NOT NULL,
    documentoAberto   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    valor             NUMERIC (15,2) DEFAULT 0 NOT NULL
  ) ON COMMIT PRESERVE ROWS;
ALTER TABLE TEMPCONTABILANALITICO ADD CONSTRAINT TEMPCONTABILANALITICO_PK1 PRIMARY KEY (sessaoClient, contadorSessao, id);
CREATE INDEX TEMPCONTABILANALITICO_K2 ON TEMPCONTABILANALITICO (sessaoClient, contadorSessao, quebra, debitoCredito, idContaContabil, historicoContabil);

create or replace PROCEDURE ADD_TEMPCONTABIL_VERIFICA_ERRO (
  p_sessaoClient   IN VARCHAR,
  p_contadorSessao IN NUMERIC,
  p_fato           IN NUMERIC)
IS
  v_fato        NUMBER;
  v_somaDebito  NUMBER;
  v_somaCredito NUMBER;
  v_contador    NUMBER;
  v_possuiErro  NUMBER;
BEGIN
  v_fato        := 0;
  v_somaDebito  := 0;
  v_somaCredito := 0;
  v_contador    := 0;
  v_possuiErro  := 0;
  FOR a IN (
    SELECT
      a.id,
      a.fato,
      a.debitar,
      a.creditar,
      a.valor,
      CASE
        WHEN a.debitar = 1
          AND a.debitoIdContaContabil = 0
          AND a.debitoCodigoDescricao = ' '
        THEN 'A'
        WHEN a.debitar = 1
          AND (a.debitoIdContaContabil = 0
            OR contDeb.idContaContabil IS NULL)
        THEN 'B'
        WHEN a.debitar = 1
          AND contDeb.ativo = 0
        THEN 'C'
        WHEN a.debitar = 1
          AND contDeb.indicadorConta <> 'A'
        THEN 'D'
        WHEN a.debitar = 1
          AND contDeb.idPlanoContaContabil <> a.idPlanoContaContabil
        THEN 'E'
        ELSE ' '
      END erroDebito,
      CASE
        WHEN a.creditar = 1
          AND a.creditoIdContaContabil = 0
          AND a.creditoCodigoDescricao = ' '
        THEN 'F'
        WHEN a.creditar = 1
          AND (a.creditoIdContaContabil = 0
            OR contCred.idContaContabil IS NULL)
        THEN 'G'
        WHEN a.creditar = 1
          AND contCred.ativo = 0
        THEN 'H'
        WHEN a.creditar = 1
          AND contCred.indicadorConta <> 'A'
        THEN 'I'
        WHEN a.creditar = 1
          AND contCred.idPlanoContaContabil <> a.idPlanoContaContabil
        THEN 'J'
        WHEN a.debitar = 1
          AND a.creditar = 1
          AND a.debitoIdContaContabil = a.creditoIdContaContabil
        THEN 'K'
        ELSE ' '
      END erroCredito,
      CASE
        WHEN a.historicoContabil = 0
        THEN 'L'
        WHEN (a.historicoMontado = ' '
          OR hist.historicoContabil IS NULL)
        THEN 'M'
        WHEN hist.ativo = 0
        THEN 'N'
        ELSE ' '
      END erroHistorico,
      CASE
        WHEN a.valor = 0
        THEN 'O'
        ELSE ' '
      END erroValor,
      CASE
        WHEN a.documentoAberto = 1
        THEN 'Q'
        ELSE ' '
      END erroGeral
    FROM TEMPCONTABILSINTETICO a
    LEFT JOIN PACONTASCONTABEIS contDeb
    ON contDeb.idContaContabil = a.debitoIdContaContabil
    LEFT JOIN PACONTASCONTABEIS contCred
    ON contCred.idContaContabil = a.creditoIdContaContabil
    LEFT JOIN PAHISTORICOSCONTABEIS hist
    ON hist.historicoContabil = a.historicoContabil
    WHERE a.sessaoClient = p_sessaoClient
    AND a.contadorSessao = p_contadorSessao
    AND (p_fato =  0
      OR a.fato = p_fato)
    ORDER BY
      a.fato,
      a.sequencia)
  LOOP
    IF v_fato <> a.fato THEN
      IF v_somaDebito <> v_somaCredito
        AND v_fato <> 0
      THEN
        UPDATE TEMPCONTABILSINTETICO b
        SET b.erroValor = 'P'
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.fato = v_fato
        AND b.erroValor = ' ';
        v_possuiErro := 1;
      END IF;
      IF v_possuiErro = 1
        AND v_fato <> 0
        AND v_contador > 1
      THEN
        UPDATE TEMPCONTABILSINTETICO b
        SET b.erroGeral = 'R'
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.fato = v_fato
        AND b.erroGeral = ' ';
      END IF;
      IF v_possuiErro = 1
        AND v_fato <> 0
      THEN
        UPDATE TEMPCONTABILSINTETICO b
        SET b.selecionado = 0
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.fato = v_fato;
      END IF;
      v_fato        := a.fato;
      v_somaDebito  := 0;
      v_somaCredito := 0;
      v_contador    := 0;
      v_possuiErro  := 0;
    END IF;
    IF v_possuiErro = 0
      AND (a.erroDebito <> ' '
        OR a.erroCredito <> ' '
        OR a.erroHistorico <> ' '
        OR a.erroValor <> ' '
        OR a.erroGeral <> ' ')
    THEN
      v_possuiErro := 1;
    END IF;
    UPDATE TEMPCONTABILSINTETICO b SET
      b.erroDebito = a.erroDebito,
      b.erroCredito = a.erroCredito,
      b.erroHistorico = a.erroHistorico,
      b.erroValor = a.erroValor,
      b.erroGeral = a.erroGeral
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.id = a.id;
    IF a.debitar = 0 THEN
      v_somaDebito := v_somaDebito + a.valor;
    END IF;
    IF a.creditar = 0 THEN
      v_somaCredito := v_somaCredito + a.valor;
    END IF;
    v_contador := v_contador + 1;
  END LOOP;
  IF v_somaDebito <> v_somaCredito
    AND v_fato <> 0
  THEN
    UPDATE TEMPCONTABILSINTETICO b
    SET b.erroValor = 'P'
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.fato = v_fato
    AND b.erroValor = ' ';
    v_possuiErro := 1;
  END IF;
  IF v_possuiErro = 1
    AND v_fato <> 0
    AND v_contador > 1
  THEN
    UPDATE TEMPCONTABILSINTETICO b
    SET b.erroGeral = 'R'
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.fato = v_fato
    AND b.erroGeral = ' ';
  END IF;
  IF v_possuiErro = 1
    AND v_fato <> 0
  THEN
    UPDATE TEMPCONTABILSINTETICO b
    SET b.selecionado = 0
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.fato = v_fato;
  END IF;
END ADD_TEMPCONTABIL_VERIFICA_ERRO;

/

create or replace PROCEDURE ADD_TEMPCONTABIL_CONTABILIZA (
  p_sessaoClient         IN VARCHAR,
  p_usuarioLogado        IN NUMBER,
  p_estabelecimentoAtivo IN NUMBER,
  p_contadorSessao       IN NUMERIC)
IS
  v_fatoContabil NUMBER;
  v_auxNumber    NUMBER;
BEGIN
  v_fatoContabil := 0;
  FOR a IN (
    SELECT
      id,
      estabelecimento,
      data,
      pessoa,
      documento,
      fatoContabil,
      sequencia,
      debitar,
      debitoIdContabil,
      debitoIdContaContabil,
      creditar,
      creditoIdContabil,
      creditoIdContaContabil,
      valor,
      historicoContabil,
      complemento,
      historicoMontado,
      origemContabil
    FROM TEMPCONTABILSINTETICO
    WHERE sessaoClient = p_sessaoClient
    AND contadorSessao = p_contadorSessao
    AND selecionado = 1
    AND erroDebito = ' '
    AND erroCredito = ' '
    AND erroHistorico = ' '
    AND erroValor = ' '
    AND erroGeral = ' '
    AND (debitar = 1
      AND debitoIdContabil = 0
      OR creditar = 1
      AND creditoIdContabil = 0)
    ORDER BY
      fato,
      sequencia)
  LOOP
    IF a.debitar = 1
      AND a.debitoIdContabil = 0
    THEN
      ADD_CONTABIL_GRAVA (
        p_usuarioLogado,
        p_estabelecimentoAtivo,
        0, -- p_idContabil
        a.estabelecimento,
        a.data,
        a.pessoa,
        a.documento,
        a.fatoContabil,
        a.sequencia,
        'D', -- p_debitoCredito
        a.debitoIdContaContabil, -- p_idContaContabil
        a.valor,
        a.historicoContabil,
        a.complemento,
        a.historicoMontado,
        a.origemContabil,
        ' ', -- p_observacoes
        v_auxNumber);
    END IF;
    IF a.creditar = 1
      AND a.creditoIdContabil = 0
    THEN
      ADD_CONTABIL_GRAVA (
        p_usuarioLogado,
        p_estabelecimentoAtivo,
        0, -- p_idContabil
        a.estabelecimento,
        a.data,
        a.pessoa,
        a.documento,
        a.fatoContabil,
        a.sequencia,
        'C', -- p_debitoCredito
        a.creditoIdContaContabil, -- p_idContaContabil
        a.valor,
        a.historicoContabil,
        a.complemento,
        a.historicoMontado,
        a.origemContabil,
        ' ', -- p_observacoes
        v_auxNumber);
    END IF;
    DELETE TEMPCONTABILSINTETICO b
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.id = a.id;
    IF v_fatoContabil <> a.fatoContabil THEN
      UPDATE MOFATOSCONTABEIS b
      SET b.situacaoContabilizacao = 'C'
      WHERE b.fatoContabil = a.fatoContabil;
      v_fatoContabil := a.fatoContabil;
    END IF;
  END LOOP;
END ADD_TEMPCONTABIL_CONTABILIZA;

/

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (971, 'Integração Contábil', 1, 8030009710, 80, 'ROT', 0, 971, '%SYS_DIR%Versoes\%SYS_VER%\Movimentos.ecf', 'IntegracaoContabil', ' ', 0, 0, NULL, ' ');

COMMIT;

CREATE TABLE PAREGRASCONTABILIZACAO_2402 AS SELECT * FROM PAREGRASCONTABILIZACAO;

ALTER TABLE PAREGRACONTABXLINHAS DROP CONSTRAINT PAREGRACONTABXLINHAS_FK1;
ALTER TABLE PAREGRACONTABXFILTROS DROP CONSTRAINT PAREGRACONTABXFILTROS_FK1;

DROP TABLE PAREGRASCONTABILIZACAO;

-- PAREGRASCONTABILIZACAO
CREATE TABLE PAREGRASCONTABILIZACAO
  (
    idRegraContabilizacao   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    origemContabil          NUMERIC (3,0) DEFAULT 0 NOT NULL,
    ordenacao               NUMERIC (11,0) DEFAULT 0 NOT NULL,
    descricao               VARCHAR (256) DEFAULT ' ' NOT NULL,
    ativo                   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    dataValidadeInicial     DATE,
    dataValidadeFinal       DATE,
    idPlanoContaContabil    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoAglutinacaoContabil NUMERIC (2,0) DEFAULT 0 NOT NULL,
    observacoes             VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_PK1 PRIMARY KEY (idRegraContabilizacao);
CREATE INDEX PAREGRASCONTABILIZACAO_K2 ON PAREGRASCONTABILIZACAO (descricao);
CREATE INDEX PAREGRASCONTABILIZACAO_K3 ON PAREGRASCONTABILIZACAO (origemContabil, ordenacao, idRegraContabilizacao);
CREATE INDEX PAREGRASCONTABILIZACAO_K4 ON PAREGRASCONTABILIZACAO (idPlanoContaContabil, origemContabil, ordenacao, idRegraContabilizacao);
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_FK1 FOREIGN KEY (origemContabil) REFERENCES SIORIGENSCONTABEIS (origemContabil);
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_FK2 FOREIGN KEY (idPlanoContaContabil) REFERENCES PAPLANOSCONTASCONTABEIS (idPlanoContaContabil);
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_FK3 FOREIGN KEY (tipoAglutinacaoContabil) REFERENCES SITIPOSAGLUTINACOESCONTAB (tipoAglutinacaoContabil);

INSERT INTO PAREGRASCONTABILIZACAO (idRegraContabilizacao, origemContabil, ordenacao, descricao, ativo, dataValidadeInicial, dataValidadeFinal, idPlanoContaContabil, tipoAglutinacaoContabil, observacoes) VALUES (0, 0, 0, 'SELECIONE', 1, TO_DATE ('01/01/1900', 'DD/MM/YYYY'), TO_DATE ('31/12/2500', 'DD/MM/YYYY'), 0, 0, ' ');
INSERT INTO PAREGRASCONTABILIZACAO (idRegraContabilizacao, origemContabil, ordenacao, descricao, ativo, dataValidadeInicial, dataValidadeFinal, idPlanoContaContabil, tipoAglutinacaoContabil, observacoes) SELECT a.idRegraContabilizacao, b.origemContabil, a.ordenacao, a.descricao, a.ativo, a.dataValidadeInicial, a.dataValidadeFinal, a.idPlanoContaContabil, a.tipoAglutinacaoContabil, a.observacoes FROM PAREGRASCONTABILIZACAO_2402 a JOIN SITIPOSDOCUMENTOCONTABIL b ON b.tipoDocumentoContabil = a.tipoDocumentoContabil WHERE a.idRegraContabilizacao > 0;

COMMIT;

ALTER TABLE PAREGRACONTABXLINHAS ADD CONSTRAINT PAREGRACONTABXLINHAS_FK1 FOREIGN KEY (idRegraContabilizacao) REFERENCES PAREGRASCONTABILIZACAO (idRegraContabilizacao);
ALTER TABLE PAREGRACONTABXFILTROS ADD CONSTRAINT PAREGRACONTABXFILTROS_FK1 FOREIGN KEY (idRegraContabilizacao) REFERENCES PAREGRASCONTABILIZACAO (idRegraContabilizacao);

DROP TABLE SITIPOSDOCUMENTOCONTABIL;

DELETE SITABELASSISTEMA  WHERE tabelaSistema = 'SITIPOSDOCUMENTOCONTABIL';

COMMIT;

DELETE MOACESSOSMENU WHERE menu = 916;
DELETE PAMENUXLAYOUTPESQUISA WHERE menu = 916;
DELETE PAMENUXATALHOS WHERE menu = 916;
DELETE PAMENUXFAVORITOS WHERE menu = 916;
DELETE PAMENUXPERMISSOES WHERE menu = 916;
DELETE PAGERADORRELFILTROS WHERE menuPesquisa = 916;
DELETE PAGERADORRELCAMPOSVISAO WHERE menuPesquisa = 916;
DELETE MOMARCADORES WHERE menu = 916;
DELETE MONOTIFICACOES WHERE menu = 916;
DELETE PAMENUSCUSTOMIZADOS WHERE menuRegistro = 916;
DELETE SIDOCVERSOESSISTEMA WHERE menu = 916;
DELETE SIMENUS WHERE menu = 916;

COMMIT;

create or replace PROCEDURE ADD_TEMPCONTABIL_GERA_TEMP (
  p_sessaoClient           IN VARCHAR,
  p_contadorSessao         IN NUMERIC,
  p_dataInicial            IN DATE,
  p_dataFinal              IN DATE,
  p_estabelecimento        IN NUMERIC,
  p_situacaoContabilizacao IN CHAR)
IS
  v_idRegraContabilizacao   NUMBER;
  v_idPlanoContaContabil    NUMBER;
  v_tipoAglutinacaoContabil NUMBER;
  v_valor                   NUMBER;
  v_residuo                 NUMBER;
  v_saldo                   NUMBER;
  v_idCriar                 NUMBER;
  v_idAtualizar             NUMBER;
  v_quebra                  VARCHAR (15);
  v_fato                    NUMBER;
  v_sequencia               NUMBER;
BEGIN
  DELETE TEMPCONTABILSINTETICO
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  DELETE TEMPCONTABILANALITICO
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  IF p_situacaoContabilizacao = 'C' THEN
    -- Início Gera TEMPCONTABILSINTETICO
    v_idCriar := 0;
    FOR a IN (
      SELECT
        idContabil,
        estabelecimento,
        data,
        pessoa,
        documento,
        fatoContabil,
        ordenacao,
        debitoCredito,
        idContaContabil,
        valor,
        historicoContabil,
        complemento,
        historicoMontado,
        origemContabil
      FROM MOCONTABEIS
      WHERE idContabil > 0
      AND data BETWEEN TO_DATE (
        CASE
          WHEN p_dataInicial IS NULL
          THEN '00/00/0000'
          ELSE TO_CHAR (p_dataInicial, 'DD/MM/YYYY')
        END || ' 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
      AND TO_DATE (
        CASE
          WHEN p_dataFinal IS NULL
            OR TO_CHAR (p_dataFinal, 'DD/MM/YYYY') = '00/00/0000'
          THEN '31/12/2500'
          ELSE TO_CHAR (p_dataFinal, 'DD/MM/YYYY')
        END || ' 23:59:59', 'DD/MM/YYYY HH24:MI:SS')
      AND estabelecimento = p_estabelecimento
      ORDER BY
        fatoContabil,
        ordenacao)
    LOOP
      IF a.debitoCredito = 'D' THEN
        SELECT COALESCE (MIN (b.id), 0)
        INTO v_idAtualizar
        FROM TEMPCONTABILSINTETICO b
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.quebra = '1' || LPAD (a.fatoContabil, 14, '0')
        AND b.valor = a.valor
        AND b.estabelecimento = a.estabelecimento
        AND b.historicoContabil = a.historicoContabil
        AND b.debitar = 0;
      ELSE
        SELECT COALESCE (MIN (b.id), 0)
        INTO v_idAtualizar
        FROM TEMPCONTABILSINTETICO b
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.quebra = '1' || LPAD (a.fatoContabil, 14, '0')
        AND b.valor = a.valor
        AND b.historicoContabil = a.historicoContabil
        AND b.creditar = 0;
      END IF;
      IF v_idAtualizar = 0 THEN
        v_idCriar := v_idCriar + 1;
        INSERT INTO TEMPCONTABILSINTETICO (
          sessaoClient,
          contadorSessao,
          id,
          quebra,
          fato,
          sequencia,
          selecionado,
          estabelecimento,
          estabelecimentoCodigoDescricao,
          idPlanoContaContabil,
          data,
          pessoa,
          pessoaCodigoDescricao,
          documento,
          fatoContabil,
          debitar,
          debitoIdContabil,
          debitoIdContaContabil,
          debitoReduzido,
          debitoCodigoDescricao,
          creditar,
          creditoIdContabil,
          creditoIdContaContabil,
          creditoReduzido,
          creditoCodigoDescricao,
          valor,
          historicoContabil,
          complemento,
          historicoMontado,
          origemContabil,
          idDocumento,
          documentoAberto,
          erroDebito,
          erroCredito,
          erroHistorico,
          erroValor,
          erroGeral)
        VALUES (
          p_sessaoClient,
          p_contadorSessao,
          v_idCriar, -- id
          '1' || LPAD (a.fatoContabil, 14, '0'),
          0, -- fato
          0, -- sequencia
          0, -- selecionado
          a.estabelecimento,
          ' ', -- estabelecimentoCodigoDescricao
          0, -- idPlanoContaContabil
          a.data,
          a.pessoa,
          ' ', -- pessoaCodigoDescricao
          a.documento,
          a.fatoContabil,
          CASE
            WHEN a.debitoCredito = 'D'
            THEN 1
            ELSE 0
          END, -- debitar
          CASE
            WHEN a.debitoCredito = 'D'
            THEN a.idContabil
            ELSE 0
          END, -- debitoIdContabil
          CASE
            WHEN a.debitoCredito = 'D'
            THEN a.idContaContabil
            ELSE 0
          END, -- debitoIdContaContabil
          0, -- debitoReduzido
          ' ', -- debitoCodigoDescricao
          CASE
            WHEN a.debitoCredito = 'C'
            THEN 1
            ELSE 0
          END, -- creditar,
          CASE
            WHEN a.debitoCredito = 'C'
            THEN a.idContabil
            ELSE 0
          END, -- creditoIdContabil
          CASE
            WHEN a.debitoCredito = 'C'
            THEN a.idContaContabil
            ELSE 0
          END, -- creditoIdContaContabil
          0, -- creditoReduzido
          ' ', -- creditoCodigoDescricao
          a.valor,
          a.historicoContabil,
          a.complemento,
          a.historicoMontado,
          a.origemContabil,
          0, -- idDocumento
          0, -- documentoAberto
          ' ',
          ' ',
          ' ',
          ' ',
          ' ');
      ELSIF a.debitoCredito = 'D' THEN
        UPDATE TEMPCONTABILSINTETICO b SET
          b.debitoIdContabil = a.idContabil,
          b.debitar = 1,
          b.debitoIdContaContabil = a.idContaContabil
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.id = v_idAtualizar;
      ELSE
        UPDATE TEMPCONTABILSINTETICO b SET
          b.creditoIdContabil = a.idContabil,
          b.creditar = 1,
          b.creditoIdContaContabil = a.idContaContabil
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.id = v_idAtualizar;
      END IF;
    END LOOP;
    -- Fim Gera TEMPCONTABILSINTETICO
  ELSE 
    v_idCriar := 0;
    -- Início Gera TEMPCONTABILANALITICO
    FOR a IN (
      SELECT fatoContabil
      FROM MOFATOSCONTABEIS
      WHERE fatoContabil > 0
      AND data BETWEEN TO_DATE (
        CASE
          WHEN p_dataInicial IS NULL
          THEN '00/00/0000'
          ELSE TO_CHAR (p_dataInicial, 'DD/MM/YYYY')
        END || ' 00:00:00', 'DD/MM/YYYY HH24:MI:SS')
      AND TO_DATE (
        CASE
          WHEN p_dataFinal IS NULL
            OR TO_CHAR (p_dataFinal, 'DD/MM/YYYY') = '00/00/0000'
          THEN '31/12/2500'
          ELSE TO_CHAR (p_dataFinal, 'DD/MM/YYYY')
        END || ' 23:59:59', 'DD/MM/YYYY HH24:MI:SS')
      AND estabelecimento = p_estabelecimento
      AND situacaoContabilizacao = p_situacaoContabilizacao)
    LOOP
      FOR b IN (
        SELECT
          'MODOCFISCALXITENS' tabelaSistema,
          b.idItemDocFiscal idTabelaSistema,
          100 origemContabil,
          b.idDocumentoFiscal idDocumento,
          cab.dataEmissao data,
          cab.fatoContabil,
          cab.estabelecimento,
          cab.pessoa,
          TO_CHAR (cab.documentoFiscal) documento,
          COALESCE (SUBSTR (RTRIM (
            COALESCE ((SELECT LISTAGG (UPPER (infCompl.descInformacaoComplementar), ' ')
            WITHIN GROUP (ORDER BY infCompl.sequencia)
            FROM MODOCFISCALXINFOCOMPLEMEN infCompl
            WHERE infCompl.idDocumentoFiscal = b.idDocumentoFiscal
            AND infCompl.geradoPeloSistema = 0
            AND infCompl.descInformacaoComplementar <> ' '), ' ')), 1, 120),' ') complemento,
          CASE
            WHEN cab.situacaoDocumentoFiscal < 23
            THEN 1
            ELSE 0
          END documentoAberto,
          gradProd.produto,
          cab.contaFinanceira,
          0 carteiraFinanceira,
          b.valorLiquidoItem valorContabil,
          b.valorFreteTotal,
          b.valorSeguroTotal,
          b.valorDescontoTotal,
          b.valorOutrasDespesasTotal,
          b.valorAdicFreteMarinhaMerTotal,
          b.valorDespesasAduaneirasTotal,
          b.valorDescontoCustoOpTotal,
          b.valorAcrescimoCustoOpTotal,
          b.valorAcrescimoExtempTotal,
          b.retidoISSQN,
          b.valorISSQN,
          b.valorRetIRRF,
          b.valorRetINSS,
          b.valorRetPIS,
          b.valorRetCOFINS,
          b.valorRetCSLL,
          b.valorRetOutros,
          b.valorII,
          b.valorIOF,
          b.valorIPI,
          b.valorIPIDevolucao,
          b.valorPIS,
          b.valorPISST,
          b.valorCOFINS,
          b.valorCOFINSST,
          b.valorCreditoSimplesNacional,
          b.valorICMSOperacao,
          b.valorICMSDiferido,
          b.valorICMS,
          b.valorICMSDesoneracao,
          b.valorICMSST,
          b.valorICMSSTAnteriormente,
          b.valorICMSProprioSubstituto,
          b.valorICMSEfetivo,
          b.valorICMSUFDestinatario,
          b.valorICMSUFRemetente,
          b.valorFCP,
          b.valorFCPST,
          b.valorFCPSTAnteriormente,
          b.valorFCPUFDestinatario,
          b.valorEstimadoImpFederais,
          b.valorEstimadoImpEstaduais,
          b.valorEstimadoImpMunicipais,
          b.valorCustoOperacao,
          b.valorCMV,
          0 baixa_valorVariacaoIndexador,
          0 baixa_valorJurosDeMora,
          0 baixa_valorMulta,
          0 baixa_valorTarifaCartao,
          0 baixa_valorDescontos,
          0 baixa_valorOutrosAcrescimos
        FROM MODOCFISCALXITENS b
        JOIN MODOCUMENTOSFISCAIS cab
        ON cab.idDocumentoFiscal = b.idDocumentoFiscal
        JOIN PAMODELOSDOCUMENTO modDoc
        ON modDoc.modeloDocumento = cab.modeloDocumento
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = b.gradeProduto
        WHERE cab.fatoContabil = a.fatoContabil
        AND b.cancelado = 0
        AND cab.situacaoDocumentoFiscal < 24
        UNION ALL
        SELECT
          'MOPREDOCUMXITENS' tabelaSistema,
          b.idItemPreDocumento idTabelaSistema,
          101 origemContabil,
          b.preDocumento idDocumento,
          cab.dataEmissao data,
          cab.fatoContabil,
          cab.estabelecimento,
          cab.pessoa,
          TO_CHAR (CASE WHEN cab.documentoFiscal = 0 THEN cab.preDocumento ELSE cab.documentoFiscal END) documento,
          COALESCE (SUBSTR (RTRIM (
            COALESCE ((SELECT LISTAGG (UPPER (infCompl.descInformacaoComplementar), ' ')
            WITHIN GROUP (ORDER BY infCompl.sequencia)
            FROM MOPREDOCUMXINFOCOMPLENT infCompl
            WHERE infCompl.preDocumento = b.preDocumento
            AND infCompl.geradoPeloSistema = 0
            AND infCompl.descInformacaoComplementar <> ' '), ' ')), 1, 120),' ') complemento,
          CASE
            WHEN cab.statusPreDocumento = 'E'
            THEN 1
            ELSE 0
          END documentoAberto,
          gradProd.produto,
          cab.contaFinanceira,
          0 carteiraFinanceira,
          b.valorLiquidoItem valorContabil,
          b.valorFreteTotal,
          b.valorSeguroTotal,
          b.valorDescontoTotal,
          b.valorOutrasDespesasTotal,
          b.valorAdicFreteMarinhaMerTotal,
          b.valorDespesasAduaneirasTotal,
          b.valorDescontoCustoOpTotal,
          b.valorAcrescimoCustoOpTotal,
          b.valorAcrescimoExtempTotal,
          b.retidoISSQN,
          b.valorISSQN,
          b.valorRetIRRF,
          b.valorRetINSS,
          b.valorRetPIS,
          b.valorRetCOFINS,
          b.valorRetCSLL,
          b.valorRetOutros,
          b.valorII,
          b.valorIOF,
          b.valorIPI,
          b.valorIPIDevolucao,
          b.valorPIS,
          b.valorPISST,
          b.valorCOFINS,
          b.valorCOFINSST,
          b.valorCreditoSimplesNacional,
          b.valorICMSOperacao,
          b.valorICMSDiferido,
          b.valorICMS,
          b.valorICMSDesoneracao,
          b.valorICMSST,
          b.valorICMSSTAnteriormente,
          b.valorICMSProprioSubstituto,
          b.valorICMSEfetivo,
          b.valorICMSUFDestinatario,
          b.valorICMSUFRemetente,
          b.valorFCP,
          b.valorFCPST,
          b.valorFCPSTAnteriormente,
          b.valorFCPUFDestinatario,
          b.valorEstimadoImpFederais,
          b.valorEstimadoImpEstaduais,
          b.valorEstimadoImpMunicipais,
          b.valorCustoOperacao,
          b.valorCMV,
          0 baixa_valorVariacaoIndexador,
          0 baixa_valorJurosDeMora,
          0 baixa_valorMulta,
          0 baixa_valorTarifaCartao,
          0 baixa_valorDescontos,
          0 baixa_valorOutrosAcrescimos
        FROM MOPREDOCUMXITENS b
        JOIN MOPREDOCUMENTOS cab
        ON cab.preDocumento = b.preDocumento
        JOIN PAMODELOSDOCUMENTO modDoc
        ON modDoc.modeloDocumento = cab.modeloDocumento
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = b.gradeProduto
        WHERE cab.fatoContabil = a.fatoContabil
        AND b.cancelado = 0
        AND cab.statusPreDocumento <> 'C'
        UNION ALL
        SELECT
          'MOFINANCEIROS' tabelaSistema,
          b.idFinanceiro idTabelaSistema,
          200 origemContabil,
          b.idFinanceiro idDocumento,
          b.dataEmissao data,
          b.fatoContabil,
          b.estabelecimento,
          b.pessoa,
          b.documento,
          COALESCE (RTRIM (SUBSTR (b.complemento, 1, 120)), ' ') complemento,
          0 documentoAberto,
          0 produto,
          b.contaFinanceira,
          b.carteiraFinanceira,
          b.valor valorContabil,
          0 valorFreteTotal,
          0 valorSeguroTotal,
          0 valorDescontoTotal,
          0 valorOutrasDespesasTotal,
          0 valorAdicFreteMarinhaMerTotal,
          0 valorDespesasAduaneirasTotal,
          0 valorDescontoCustoOpTotal,
          0 valorAcrescimoCustoOpTotal,
          0 valorAcrescimoExtempTotal,
          0 retidoISSQN,
          0 valorISSQN,
          0 valorRetIRRF,
          0 valorRetINSS,
          0 valorRetPIS,
          0 valorRetCOFINS,
          0 valorRetCSLL,
          0 valorRetOutros,
          0 valorII,
          0 valorIOF,
          0 valorIPI,
          0 valorIPIDevolucao,
          0 valorPIS,
          0 valorPISST,
          0 valorCOFINS,
          0 valorCOFINSST,
          0 valorCreditoSimplesNacional,
          0 valorICMSOperacao,
          0 valorICMSDiferido,
          0 valorICMS,
          0 valorICMSDesoneracao,
          0 valorICMSST,
          0 valorICMSSTAnteriormente,
          0 valorICMSProprioSubstituto,
          0 valorICMSEfetivo,
          0 valorICMSUFDestinatario,
          0 valorICMSUFRemetente,
          0 valorFCP,
          0 valorFCPST,
          0 valorFCPSTAnteriormente,
          0 valorFCPUFDestinatario,
          0 valorEstimadoImpFederais,
          0 valorEstimadoImpEstaduais,
          0 valorEstimadoImpMunicipais,
          0 valorCustoOperacao,
          0 valorCMV,
          0 baixa_valorVariacaoIndexador,
          0 baixa_valorJurosDeMora,
          0 baixa_valorMulta,
          0 baixa_valorTarifaCartao,
          0 baixa_valorDescontos,
          0 baixa_valorOutrosAcrescimos
        FROM MOFINANCEIROS b
        WHERE b.fatoContabil = a.fatoContabil
        AND b.idPagamentoPreDocumento = 0
        AND b.idPagamentoDocFiscal = 0
        UNION ALL
        SELECT
          'MOFINANCEIROXBAIXAS' tabelaSistema,
          b.idBaixaFinanceiro idTabelaSistema,
          300 origemContabil,
          b.idBaixaFinanceiro idDocumento,
          b.data,
          b.fatoContabil,
          b.estabelecimento,
          financ.pessoa,
          financ.documento,
          COALESCE (RTRIM (SUBSTR (b.observacoes, 1, 120)), ' ') complemento,
          0 documentoAberto,
          0 produto,
          b.contaFinanceira,
          b.carteiraFinanceira,
          b.valorLiquido valorContabil,
          0 valorFreteTotal,
          0 valorSeguroTotal,
          0 valorDescontoTotal,
          0 valorOutrasDespesasTotal,
          0 valorAdicFreteMarinhaMerTotal,
          0 valorDespesasAduaneirasTotal,
          0 valorDescontoCustoOpTotal,
          0 valorAcrescimoCustoOpTotal,
          0 valorAcrescimoExtempTotal,
          0 retidoISSQN,
          0 valorISSQN,
          0 valorRetIRRF,
          0 valorRetINSS,
          0 valorRetPIS,
          0 valorRetCOFINS,
          0 valorRetCSLL,
          0 valorRetOutros,
          0 valorII,
          0 valorIOF,
          0 valorIPI,
          0 valorIPIDevolucao,
          0 valorPIS,
          0 valorPISST,
          0 valorCOFINS,
          0 valorCOFINSST,
          0 valorCreditoSimplesNacional,
          0 valorICMSOperacao,
          0 valorICMSDiferido,
          0 valorICMS,
          0 valorICMSDesoneracao,
          0 valorICMSST,
          0 valorICMSSTAnteriormente,
          0 valorICMSProprioSubstituto,
          0 valorICMSEfetivo,
          0 valorICMSUFDestinatario,
          0 valorICMSUFRemetente,
          0 valorFCP,
          0 valorFCPST,
          0 valorFCPSTAnteriormente,
          0 valorFCPUFDestinatario,
          0 valorEstimadoImpFederais,
          0 valorEstimadoImpEstaduais,
          0 valorEstimadoImpMunicipais,
          0 valorCustoOperacao,
          0 valorCMV,
          b.valorVariacaoIndexador baixa_valorVariacaoIndexador,
          b.valorJurosDeMora baixa_valorJurosDeMora,
          b.valorMulta baixa_valorMulta,
          b.valorTarifaCartao baixa_valorTarifaCartao,
          b.valorDescontos baixa_valorDescontos,
          b.valorOutrosAcrescimos baixa_valorOutrosAcrescimos
        FROM MOFINANCEIROXBAIXAS b
        JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = b.idFinanceiro
        WHERE b.fatoContabil = a.fatoContabil
        AND b.baixaAutomatica = 0)
      LOOP
        SELECT COALESCE (MAX (c.idRegraContabilizacao), 0)
        INTO v_idRegraContabilizacao
        FROM (
          SELECT
            c.idRegraContabilizacao,
            ROW_NUMBER() OVER (
              ORDER BY
                c.ordenacao,
                c.idRegraContabilizacao) ordenacao
          FROM (
            SELECT
              c.idRegraContabilizacao,
              c.ordenacao,
              c.id,
              MIN (c.valido) valido
            FROM (
              SELECT
                c.idRegraContabilizacao,
                c.ordenacao,
                c.id,
                c.filtroContabil,
                MAX (c.valido) valido
              FROM (
                SELECT
                  regra.idRegraContabilizacao,
                  regra.ordenacao,
                  COALESCE (regraXFiltro.id, 0) id,
                  COALESCE (regraXFiltro.filtroContabil, 0) filtroContabil,
                  CASE
                    WHEN regraXFiltro.filtroContabil IS NULL
                    THEN 1
                    WHEN filtro.campoSelect IS NULL
                      OR filtro.campoSelect = ' '
                    THEN 0
                    ELSE FUNC_ADD_EXECUTE_IMMEDIATE_N ('SELECT
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM PAREGRACONTABXFILTROS regraXFiltro
        LEFT JOIN SIFILTROSCONTABEIS filtro
        ON filtro.filtroContabil = regraXFiltro.filtroContabil
        LEFT JOIN SITABELASSISTEMA tabelaSistema
        ON tabelaSistema.tabelaSistema = filtro.tabelaSistema'
  || CASE b.tabelaSistema
       WHEN 'MODOCFISCALXITENS'
       THEN '
        JOIN MODOCFISCALXITENS itemDoc
        ON itemDoc.idItemDocFiscal = ' || TO_CHAR (b.idTabelaSistema) || CASE WHEN filtro.cabecalhoItemPagamento = 'C' THEN '
        JOIN MODOCUMENTOSFISCAIS cabDoc
        ON cabDoc.idDocumentoFiscal = itemDoc.idDocumentoFiscal' ELSE '' END
       WHEN 'MOPREDOCUMXITENS'
       THEN '
        JOIN MOPREDOCUMXITENS itemDoc
        ON itemDoc.idItemPreDocumento = ' || TO_CHAR (b.idTabelaSistema) || CASE WHEN filtro.cabecalhoItemPagamento = 'C' THEN '
        JOIN MOPREDOCUMENTOS cabDoc
        ON cabDoc.preDocumento = itemDoc.preDocumento' ELSE '' END
       WHEN 'MOFINANCEIROS'
       THEN '
        JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = ' || TO_CHAR (b.idTabelaSistema)
       WHEN 'MOFINANCEIROXBAIXAS'
       THEN '
        JOIN MOFINANCEIROXBAIXAS baixa
        ON baixa.idBaixaFinanceiro = ' || TO_CHAR (b.idTabelaSistema)
       ELSE ''
     END
  || CASE
       WHEN filtro.campoJoin IS NULL OR filtro.campoJoin = ' '
       THEN ''
       ELSE '
       ' || filtro.campoJoin
     END
  || '
        WHERE regraXFiltro.id = ' || TO_CHAR (regraXFiltro.id) || '
        AND (' || filtro.campoSelect || ') '
                      || CASE
                           WHEN filtro.tabelaSistema <> ' '
                           THEN 'IN ('
                             || CAST (regraXFiltro.campoIn AS VARCHAR2 (4000))
                             || ')'
                           WHEN filtro.tipoCampo = 'L'
                           THEN '= '
                             || CASE
                                  WHEN regraXFiltro.faixaDe IN ('S','1')
                                  THEN '1'
                                  ELSE '0'
                                END
                           WHEN filtro.tipoCampo = 'N'
                           THEN 'BETWEEN '
                             || CASE
                                  WHEN regraXFiltro.faixaDe = ' '
                                  THEN '0'
                                  ELSE REPLACE (regraXFiltro.faixaDe,',','.')
                                END
                             || ' AND '
                             || CASE
                                  WHEN regraXFiltro.faixaAte = ' '
                                  THEN '0'
                                  ELSE REPLACE (regraXFiltro.faixaAte,',','.')
                                END
                           ELSE 'BETWEEN '
                             || regraXFiltro.faixaDe
                             || ' AND '
                             || regraXFiltro.faixaAte
                         END || ')
      THEN 1
      ELSE 0
    END
  FROM DUAL')
                  END valido
                FROM PAREGRASCONTABILIZACAO regra
                JOIN PAESTABELECIMENTOS estab
                ON estab.estabelecimento = b.estabelecimento
                LEFT JOIN PAREGRACONTABXFILTROS regraXFiltro
                ON regraXFiltro.idRegraContabilizacao = regra.idRegraContabilizacao
                LEFT JOIN SIFILTROSCONTABEIS filtro
                ON filtro.filtroContabil = regraXFiltro.filtroContabil
                LEFT JOIN SITABELASSISTEMA tabelaSistema
                ON tabelaSistema.tabelaSistema = filtro.tabelaSistema
                WHERE regra.idRegraContabilizacao > 0
                AND regra.idPlanoContaContabil = estab.idPlanoContaContabil
                AND regra.origemContabil = CASE WHEN b.origemContabil = 101 THEN 100 ELSE b.origemContabil END
                AND regra.ativo = 1
                AND TRUNC (regra.dataValidadeInicial) <= TRUNC (SYSDATE)
                AND TRUNC (regra.dataValidadeFinal) >= TRUNC (SYSDATE)) c
              GROUP BY
                c.idRegraContabilizacao,
                c.ordenacao,
                c.id,
                c.filtroContabil) c
            GROUP BY
              c.idRegraContabilizacao,
              c.ordenacao,
              c.id) c
          WHERE c.valido = 1) c
        WHERE c.ordenacao = 1;
        SELECT
          idPlanoContaContabil,
          tipoAglutinacaoContabil
        INTO
          v_idPlanoContaContabil,
          v_tipoAglutinacaoContabil
        FROM PAREGRASCONTABILIZACAO
        WHERE idRegraContabilizacao = v_idRegraContabilizacao;
        FOR c IN (
          SELECT
            c.linhaContabil,
            c.debitoCredito,
            c.tipoContabilizacao,
            c.categoriaContabil,
            c.idContaContabil,
            c.valor,
            c.historicoContabil
          FROM (
            SELECT
              c.linhaContabil,
              c.debitoCredito,
              c.tipoContabilizacao,
              c.categoriaContabil,
              c.idContaContabil,
              CASE c.linhaContabil
                -- 110 Valor Frete
                WHEN 110 THEN b.valorFreteTotal
                -- 111 Valor Seguro
                WHEN 111 THEN b.valorSeguroTotal
                -- 112 Valor Desconto
                WHEN 112 THEN b.valorDescontoTotal
                -- 113 Valor Outras Despesas
                WHEN 113 THEN b.valorOutrasDespesasTotal
                -- 114 Valor Adicional Frete Marinha Mercantil
                WHEN 114 THEN b.valorAdicFreteMarinhaMerTotal
                -- 115 Valor Despesas Aduaneiras
                WHEN 115 THEN b.valorDespesasAduaneirasTotal
                -- 116 Valor Outros Descontos Custo
                WHEN 116 THEN b.valorDescontoCustoOpTotal
                -- 117 Valor Outros Acréscimos Custo
                WHEN 117 THEN b.valorAcrescimoCustoOpTotal
                -- 118 Valor Acréscimo Extemporâneo
                WHEN 118 THEN b.valorAcrescimoExtempTotal
                -- 130 Valor ISSQN
                WHEN 130 THEN
                  CASE
                    WHEN b.retidoISSQN = 1
                    THEN 0
                    ELSE b.valorISSQN
                  END
                -- 131 Valor ISSQN Retido
                WHEN 131 THEN
                  CASE
                    WHEN b.retidoISSQN = 1
                    THEN b.valorISSQN
                    ELSE 0
                  END
                -- 132 Valor Retenção IRRF
                WHEN 132 THEN b.valorRetIRRF
                -- 133 Valor Retenção INSS
                WHEN 133 THEN b.valorRetINSS
                -- 134 Valor Retenção PIS
                WHEN 134 THEN b.valorRetPIS
                -- 135 Valor Retenção COFINS
                WHEN 135 THEN b.valorRetCOFINS
                -- 136 Valor Retenção CSLL
                WHEN 136 THEN b.valorRetCSLL
                -- 137 Valor Retenção Outros
                WHEN 137 THEN b.valorRetOutros
                -- 140 Valor Imposto Importação
                WHEN 140 THEN b.valorII
                -- 141 Valor IOF
                WHEN 141 THEN b.valorIOF
                -- 142 Valor IPI
                WHEN 142 THEN b.valorIPI
                -- 143 Valor IPI Devolução
                WHEN 143 THEN b.valorIPIDevolucao
                -- 144 Valor PIS
                WHEN 144 THEN b.valorPIS
                -- 145 Valor PIS ST
                WHEN 145 THEN b.valorPISST
                -- 146 Valor COFINS
                WHEN 146 THEN b.valorCOFINS
                -- 147 Valor COFINS ST
                WHEN 147 THEN b.valorCOFINSST
                -- 148 Valor Crédito Simples Nacional
                WHEN 148 THEN b.valorCreditoSimplesNacional
                -- 160 Valor ICMS Operação
                WHEN 160 THEN b.valorICMSOperacao
                -- 161 Valor ICMS Diferido
                WHEN 161 THEN b.valorICMSDiferido
                -- 162 Valor ICMS
                WHEN 162 THEN b.valorICMS
                -- 163 Valor ICMS Desoneração
                WHEN 163 THEN b.valorICMSDesoneracao
                -- 164 Valor ICMS ST
                WHEN 164 THEN b.valorICMSST
                -- 165 Valor ICMS ST Anteriormente
                WHEN 165 THEN b.valorICMSSTAnteriormente
                -- 166 Valor ICMS Próprio Substituto
                WHEN 166 THEN b.valorICMSProprioSubstituto
                -- 167 Valor ICMS Efetivo
                WHEN 167 THEN b.valorICMSEfetivo
                -- 168 Valor ICMS UF Destinatario
                WHEN 168 THEN b.valorICMSUFDestinatario
                -- 169 Valor ICMS UF Remetente
                WHEN 169 THEN b.valorICMSUFRemetente
                -- 180 Valor FCP
                WHEN 180 THEN b.valorFCP
                -- 181 Valor FCP ST
                WHEN 181 THEN b.valorFCPST
                -- 182 Valor FCP ST Anteriormente
                WHEN 182 THEN b.valorFCPSTAnteriormente
                -- 183 Valor FCP UF Destinatario
                WHEN 183 THEN b.valorFCPUFDestinatario
                -- 187 Valor Estimado Impostos Federais
                WHEN 187 THEN b.valorEstimadoImpFederais
                -- 188 Valor Estimado Impostos Estaduais
                WHEN 188 THEN b.valorEstimadoImpEstaduais
                -- 189 Valor Estimado Impostos Municipais
                WHEN 189 THEN b.valorEstimadoImpMunicipais
                -- 190 Valor Custo Operação
                WHEN 190 THEN b.valorCustoOperacao
                -- 191 Valor CMV
                WHEN 191 THEN b.valorCMV
                -- 301 Valor Variação Indexador Redução
                WHEN 301 THEN
                  CASE
                    WHEN b.baixa_valorVariacaoIndexador < 0
                    THEN - b.baixa_valorVariacaoIndexador
                    ELSE 0
                  END
                -- 302 Valor Variação Indexador Acréscimo
                WHEN 302 THEN
                  CASE
                    WHEN b.baixa_valorVariacaoIndexador > 0
                    THEN b.baixa_valorVariacaoIndexador
                    ELSE 0
                  END
                -- 303 Valor Juros de Mora
                WHEN 303 THEN b.baixa_valorJurosDeMora
                -- 304 Valor Multa
                WHEN 304 THEN b.baixa_valorMulta
                -- 305 Valor Tarifa Cartão
                WHEN 305 THEN b.baixa_valorTarifaCartao
                -- 306 Valor Descontos
                WHEN 306 THEN b.baixa_valorDescontos
                -- 307 Valor Outros Acréscimos
                WHEN 307 THEN b.baixa_valorOutrosAcrescimos
                -- 100 Valor Contábil
                -- 200 Valor Contábil
                -- 300 Valor Contábil
                ELSE b.valorContabil + COALESCE ((
                  SELECT SUM (
                    CASE d.linhaContabil
                      -- 110 Valor Frete
                      WHEN 110 THEN b.valorFreteTotal
                      -- 111 Valor Seguro
                      WHEN 111 THEN b.valorSeguroTotal
                      -- 112 Valor Desconto
                      WHEN 112 THEN b.valorDescontoTotal
                      -- 113 Valor Outras Despesas
                      WHEN 113 THEN b.valorOutrasDespesasTotal
                      -- 114 Valor Adicional Frete Marinha Mercantil
                      WHEN 114 THEN b.valorAdicFreteMarinhaMerTotal
                      -- 115 Valor Despesas Aduaneiras
                      WHEN 115 THEN b.valorDespesasAduaneirasTotal
                      -- 116 Valor Outros Descontos Custo
                      WHEN 116 THEN b.valorDescontoCustoOpTotal
                      -- 117 Valor Outros Acréscimos Custo
                      WHEN 117 THEN b.valorAcrescimoCustoOpTotal
                      -- 118 Valor Acréscimo Extemporâneo
                      WHEN 118 THEN b.valorAcrescimoExtempTotal
                      -- 130 Valor ISSQN
                      WHEN 130 THEN
                        CASE
                          WHEN b.retidoISSQN = 1
                          THEN 0
                          ELSE b.valorISSQN
                        END
                      -- 131 Valor ISSQN Retido
                      WHEN 131 THEN
                        CASE
                          WHEN b.retidoISSQN = 1
                          THEN b.valorISSQN
                          ELSE 0
                        END
                      -- 132 Valor Retenção IRRF
                      WHEN 132 THEN b.valorRetIRRF
                      -- 133 Valor Retenção INSS
                      WHEN 133 THEN b.valorRetINSS
                      -- 134 Valor Retenção PIS
                      WHEN 134 THEN b.valorRetPIS
                      -- 135 Valor Retenção COFINS
                      WHEN 135 THEN b.valorRetCOFINS
                      -- 136 Valor Retenção CSLL
                      WHEN 136 THEN b.valorRetCSLL
                      -- 137 Valor Retenção Outros
                      WHEN 137 THEN b.valorRetOutros
                      -- 140 Valor Imposto Importação
                      WHEN 140 THEN b.valorII
                      -- 141 Valor IOF
                      WHEN 141 THEN b.valorIOF
                      -- 142 Valor IPI
                      WHEN 142 THEN b.valorIPI
                      -- 143 Valor IPI Devolução
                      WHEN 143 THEN b.valorIPIDevolucao
                      -- 144 Valor PIS
                      WHEN 144 THEN b.valorPIS
                      -- 145 Valor PIS ST
                      WHEN 145 THEN b.valorPISST
                      -- 146 Valor COFINS
                      WHEN 146 THEN b.valorCOFINS
                      -- 147 Valor COFINS ST
                      WHEN 147 THEN b.valorCOFINSST
                      -- 148 Valor Crédito Simples Nacional
                      WHEN 148 THEN b.valorCreditoSimplesNacional
                      -- 160 Valor ICMS Operação
                      WHEN 160 THEN b.valorICMSOperacao
                      -- 161 Valor ICMS Diferido
                      WHEN 161 THEN b.valorICMSDiferido
                      -- 162 Valor ICMS
                      WHEN 162 THEN b.valorICMS
                      -- 163 Valor ICMS Desoneração
                      WHEN 163 THEN b.valorICMSDesoneracao
                      -- 164 Valor ICMS ST
                      WHEN 164 THEN b.valorICMSST
                      -- 165 Valor ICMS ST Anteriormente
                      WHEN 165 THEN b.valorICMSSTAnteriormente
                      -- 166 Valor ICMS Próprio Substituto
                      WHEN 166 THEN b.valorICMSProprioSubstituto
                      -- 167 Valor ICMS Efetivo
                      WHEN 167 THEN b.valorICMSEfetivo
                      -- 168 Valor ICMS UF Destinatario
                      WHEN 168 THEN b.valorICMSUFDestinatario
                      -- 169 Valor ICMS UF Remetente
                      WHEN 169 THEN b.valorICMSUFRemetente
                      -- 180 Valor FCP
                      WHEN 180 THEN b.valorFCP
                      -- 181 Valor FCP ST
                      WHEN 181 THEN b.valorFCPST
                      -- 182 Valor FCP ST Anteriormente
                      WHEN 182 THEN b.valorFCPSTAnteriormente
                      -- 183 Valor FCP UF Destinatario
                      WHEN 183 THEN b.valorFCPUFDestinatario
                      -- 187 Valor Estimado Impostos Federais
                      WHEN 187 THEN b.valorEstimadoImpFederais
                      -- 188 Valor Estimado Impostos Estaduais
                      WHEN 188 THEN b.valorEstimadoImpEstaduais
                      -- 189 Valor Estimado Impostos Municipais
                      WHEN 189 THEN b.valorEstimadoImpMunicipais
                      -- 190 Valor Custo Operação
                      WHEN 190 THEN b.valorCustoOperacao
                      -- 191 Valor CMV
                      WHEN 191 THEN b.valorCMV
                      -- 301 Valor Variação Indexador Redução
                      WHEN 301 THEN
                        CASE
                          WHEN b.baixa_valorVariacaoIndexador < 0
                          THEN - b.baixa_valorVariacaoIndexador
                          ELSE 0
                        END
                      -- 302 Valor Variação Indexador Acréscimo
                      WHEN 302 THEN
                        CASE
                          WHEN b.baixa_valorVariacaoIndexador > 0
                          THEN b.baixa_valorVariacaoIndexador
                          ELSE 0
                        END
                      -- 303 Valor Juros de Mora
                      WHEN 303 THEN b.baixa_valorJurosDeMora
                      -- 304 Valor Multa
                      WHEN 304 THEN b.baixa_valorMulta
                      -- 305 Valor Tarifa Cartão
                      WHEN 305 THEN b.baixa_valorTarifaCartao
                      -- 306 Valor Descontos
                      WHEN 306 THEN b.baixa_valorDescontos
                      -- 307 Valor Outros Acréscimos
                      WHEN 307 THEN b.baixa_valorOutrosAcrescimos
                      -- 100 Valor Contábil
                      -- 200 Valor Contábil
                      -- 300 Valor Contábil
                      ELSE b.valorContabil
                    END
                    * CASE
                        WHEN c.debitoCredito = 'D'
                          AND d.tipoContabilizacaoDebito = '90'
                          OR c.debitoCredito = 'C'
                          AND d.tipoContabilizacaoCredito = '90'
                        THEN -1
                        ELSE 1
                      END)
                  FROM PAREGRACONTABXLINHAS d
                  WHERE d.idRegraContabilizacao = v_idRegraContabilizacao
                  AND (c.debitoCredito = 'D'
                    AND d.tipoContabilizacaoDebito IN (90,91)
                    OR c.debitoCredito = 'C'
                    AND d.tipoContabilizacaoCredito IN (90,91))), 0)
              END valor,
              c.historicoContabil 
            FROM (
              SELECT
                c.linhaContabil,
                'D' debitoCredito,
                c.tipoContabilizacaoDebito tipoContabilizacao,
                c.idContaContabilDebito idContaContabil,
                c.categoriaContabilDebito categoriaContabil,
                c.historicoContabil
                FROM PAREGRACONTABXLINHAS c
                WHERE c.idRegraContabilizacao = v_idRegraContabilizacao
                AND c.tipoContabilizacaoDebito IN (1,10,20,40,50)
              UNION ALL
              SELECT
                c.linhaContabil,
                'C' debitoCredito,
                c.tipoContabilizacaoCredito tipoContabilizacao,
                c.idContaContabilCredito idContaContabil,
                c.categoriaContabilCredito categoriaContabil,
                c.historicoContabil
                FROM PAREGRACONTABXLINHAS c
                WHERE c.idRegraContabilizacao = v_idRegraContabilizacao
                AND c.tipoContabilizacaoCredito IN (1,10,20,40,50)) c) c
          WHERE c.valor <> 0)
        LOOP
          IF b.origemContabil = 100
            AND c.tipoContabilizacao IN (40,50)
            AND b.valorContabil <> 0
          THEN
            v_valor   := 0;
            v_residuo := 0;
            v_saldo   := c.valor;
            FOR d IN (
              SELECT
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN financ.contaFinanceira
                  -- 50 Carteira Financeira
                  ELSE ' '
                END contaFinanceira,
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN 0
                  -- 50 Carteira Financeira
                  ELSE financ.carteiraFinanceira
                END carteiraFinanceira,
                SUM (financ.valor *
                  CASE
                    WHEN pag.pagamentoTroco = 'T'
                    THEN -1
                    ELSE 1
                  END) valor
              FROM MODOCFISCALXPAGAMENTOS pag
              JOIN MOFINANCEIROS financ
              ON financ.idPagamentoDocFiscal = pag.idPagamentoDocFiscal
              WHERE pag.idDocumentoFiscal = b.idDocumento
              GROUP BY
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN financ.contaFinanceira
                  -- 50 Carteira Financeira
                  ELSE ' '
                END,
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN 0
                  -- 50 Carteira Financeira
                  ELSE financ.carteiraFinanceira
                END)
            LOOP
              v_valor   := ROUND (((c.valor * d.valor / b.valorContabil) + v_residuo), 2);
              v_residuo := ((c.valor * d.valor / b.valorContabil) + v_residuo)
                  - ROUND (((c.valor * d.valor / b.valorContabil) + v_residuo), 2);
              v_saldo   := v_saldo - v_valor;
              v_idCriar := v_idCriar + 1;
              INSERT INTO TEMPCONTABILANALITICO (
                sessaoClient,
                contadorSessao,
                id,
                debitoCredito,
                idContaContabil,
                historicoContabil,
                linhaContabil,
                quebra,
                origemContabil,
                idDocumento,
                data,
                fatoContabil,
                estabelecimento,
                pessoa,
                documento,
                complemento,
                documentoAberto,
                valor)
              VALUES (
                p_sessaoClient,
                p_contadorSessao,
                v_idCriar,
                c.debitoCredito,
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM PACONTAFINANCEIRAXCONTAB conta
                    WHERE conta.contaFinanceira = d.contaFinanceira
                    AND conta.categoriaContabil = c.categoriaContabil
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), COALESCE ((
                      SELECT MAX (conta.idContaContabil)
                      FROM PACONTAFINANCEIRAXCONTAB conta
                      WHERE conta.contaFinanceira = d.contaFinanceira
                      AND conta.categoriaContabil = 0
                      AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                      AND conta.estabelecimento = b.estabelecimento
                      AND conta.ativo = 1), 0))
                  -- 50 Carteira Financeira
                  ELSE COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM PACARTFINANCXCONTASCONTAB conta
                    WHERE conta.carteiraFinanceira = d.carteiraFinanceira
                    AND conta.categoriaContabil = c.categoriaContabil
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), COALESCE ((
                      SELECT MAX (conta.idContaContabil)
                      FROM PACARTFINANCXCONTASCONTAB conta
                      WHERE conta.carteiraFinanceira = d.carteiraFinanceira
                      AND conta.categoriaContabil = 0
                      AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                      AND conta.estabelecimento = b.estabelecimento
                      AND conta.ativo = 1), 0))
                END, -- idContaContabil
                c.historicoContabil,
                c.linhaContabil,
                CASE v_tipoAglutinacaoContabil
                  -- 2	Dia
                  WHEN 2 THEN '2' || TO_CHAR (b.data, 'YYYYMMDD')
                  -- 3	Mês
                  WHEN 3 THEN '3' || TO_CHAR (b.data, 'YYYYMM')
                  -- 1	Fato Contábil
                  ELSE '1' || LPAD (b.fatoContabil, 14, '0')
                END, -- quebra
                b.origemContabil,
                b.idDocumento,
                b.data,
                b.fatoContabil,
                b.estabelecimento,
                b.pessoa,
                b.documento,
                b.complemento,
                b.documentoAberto,
                v_valor);
            END LOOP;
            IF v_saldo <> 0 THEN
              v_idCriar := v_idCriar + 1;
              INSERT INTO TEMPCONTABILANALITICO (
                sessaoClient,
                contadorSessao,
                id,
                debitoCredito,
                idContaContabil,
                historicoContabil,
                linhaContabil,
                quebra,
                origemContabil,
                idDocumento,
                data,
                fatoContabil,
                estabelecimento,
                pessoa,
                documento,
                complemento,
                documentoAberto,
                valor)
              VALUES (
                p_sessaoClient,
                p_contadorSessao,
                v_idCriar,
                c.debitoCredito,
                c.idContaContabil,
                c.historicoContabil,
                c.linhaContabil,
                CASE v_tipoAglutinacaoContabil
                  -- 2	Dia
                  WHEN 2 THEN '2' || TO_CHAR (b.data, 'YYYYMMDD')
                  -- 3	Mês
                  WHEN 3 THEN '3' || TO_CHAR (b.data, 'YYYYMM')
                  -- 1	Fato Contábil
                  ELSE '1' || LPAD (b.fatoContabil, 14, '0')
                END, -- quebra
                b.origemContabil,
                b.idDocumento,
                b.data,
                b.fatoContabil,
                b.estabelecimento,
                b.pessoa,
                b.documento,
                b.complemento,
                b.documentoAberto,
                v_saldo);
            END IF;
          ELSIF b.origemContabil = 101
            AND c.tipoContabilizacao IN (40,50)
          THEN
            v_valor   := 0;
            v_residuo := 0;
            v_saldo   := c.valor;
            FOR d IN (
              SELECT
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN financ.contaFinanceira
                  -- 50 Carteira Financeira
                  ELSE ' '
                END contaFinanceira,
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN 0
                  -- 50 Carteira Financeira
                  ELSE financ.carteiraFinanceira
                END carteiraFinanceira,
                SUM (financ.valor *
                  CASE
                    WHEN pag.pagamentoTroco = 'T'
                    THEN -1
                    ELSE 1
                  END) valor
              FROM MOPREDOCUMXPAGAMENTOS pag
              JOIN MOFINANCEIROS financ
              ON financ.idPagamentoPreDocumento = pag.idPagamentoPreDocumento
              WHERE pag.preDocumento = b.idDocumento
              GROUP BY
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN financ.contaFinanceira
                  -- 50 Carteira Financeira
                  ELSE ' '
                END,
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN 0
                  -- 50 Carteira Financeira
                  ELSE financ.carteiraFinanceira
                END)
            LOOP
              v_valor   := ROUND (((c.valor * d.valor / b.valorContabil) + v_residuo), 2);
              v_residuo := ((c.valor * d.valor / b.valorContabil) + v_residuo)
                  - ROUND (((c.valor * d.valor / b.valorContabil) + v_residuo), 2);
              v_saldo   := v_saldo - v_valor;
              v_idCriar := v_idCriar + 1;
              INSERT INTO TEMPCONTABILANALITICO (
                sessaoClient,
                contadorSessao,
                id,
                debitoCredito,
                idContaContabil,
                historicoContabil,
                linhaContabil,
                quebra,
                origemContabil,
                idDocumento,
                data,
                fatoContabil,
                estabelecimento,
                pessoa,
                documento,
                complemento,
                documentoAberto,
                valor)
              VALUES (
                p_sessaoClient,
                p_contadorSessao,
                v_idCriar,
                c.debitoCredito,
                CASE
                  -- 40 Conta Financeira
                  WHEN c.tipoContabilizacao = 40
                  THEN COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM PACONTAFINANCEIRAXCONTAB conta
                    WHERE conta.contaFinanceira = d.contaFinanceira
                    AND conta.categoriaContabil = c.categoriaContabil
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), COALESCE ((
                      SELECT MAX (conta.idContaContabil)
                      FROM PACONTAFINANCEIRAXCONTAB conta
                      WHERE conta.contaFinanceira = d.contaFinanceira
                      AND conta.categoriaContabil = 0
                      AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                      AND conta.estabelecimento = b.estabelecimento
                      AND conta.ativo = 1), 0))
                  -- 50 Carteira Financeira
                  ELSE COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM PACARTFINANCXCONTASCONTAB conta
                    WHERE conta.carteiraFinanceira = d.carteiraFinanceira
                    AND conta.categoriaContabil = c.categoriaContabil
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), COALESCE ((
                      SELECT MAX (conta.idContaContabil)
                      FROM PACARTFINANCXCONTASCONTAB conta
                      WHERE conta.carteiraFinanceira = d.carteiraFinanceira
                      AND conta.categoriaContabil = 0
                      AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                      AND conta.estabelecimento = b.estabelecimento
                      AND conta.ativo = 1), 0))
                END, -- idContaContabil
                c.historicoContabil,
                c.linhaContabil,
                CASE v_tipoAglutinacaoContabil
                  -- 2	Dia
                  WHEN 2 THEN '2' || TO_CHAR (b.data, 'YYYYMMDD')
                  -- 3	Mês
                  WHEN 3 THEN '3' || TO_CHAR (b.data, 'YYYYMM')
                  -- 1	Fato Contábil
                  ELSE '1' || LPAD (b.fatoContabil, 14, '0')
                END, -- quebra
                b.origemContabil,
                b.idDocumento,
                b.data,
                b.fatoContabil,
                b.estabelecimento,
                b.pessoa,
                b.documento,
                b.complemento,
                b.documentoAberto,
                v_valor);
            END LOOP;
            IF v_saldo <> 0 THEN
              v_idCriar := v_idCriar + 1;
              INSERT INTO TEMPCONTABILANALITICO (
                sessaoClient,
                contadorSessao,
                id,
                debitoCredito,
                idContaContabil,
                historicoContabil,
                linhaContabil,
                quebra,
                origemContabil,
                idDocumento,
                data,
                fatoContabil,
                estabelecimento,
                pessoa,
                documento,
                complemento,
                documentoAberto,
                valor)
              VALUES (
                p_sessaoClient,
                p_contadorSessao,
                v_idCriar,
                c.debitoCredito,
                c.idContaContabil,
                c.historicoContabil,
                c.linhaContabil,
                CASE v_tipoAglutinacaoContabil
                  -- 2	Dia
                  WHEN 2 THEN '2' || TO_CHAR (b.data, 'YYYYMMDD')
                  -- 3	Mês
                  WHEN 3 THEN '3' || TO_CHAR (b.data, 'YYYYMM')
                  -- 1	Fato Contábil
                  ELSE '1' || LPAD (b.fatoContabil, 14, '0')
                END, -- quebra
                b.origemContabil,
                b.idDocumento,
                b.data,
                b.fatoContabil,
                b.estabelecimento,
                b.pessoa,
                b.documento,
                b.complemento,
                b.documentoAberto,
                v_saldo);
            END IF;
          ELSE
            v_idCriar := v_idCriar + 1;
            INSERT INTO TEMPCONTABILANALITICO (
              sessaoClient,
              contadorSessao,
              id,
              debitoCredito,
              idContaContabil,
              historicoContabil,
              linhaContabil,
              quebra,
              origemContabil,
              idDocumento,
              data,
              fatoContabil,
              estabelecimento,
              pessoa,
              documento,
              complemento,
              documentoAberto,
              valor)
            VALUES (
              p_sessaoClient,
              p_contadorSessao,
              v_idCriar,
              c.debitoCredito,
              CASE c.tipoContabilizacao
                -- 1 Conta Contábil
                WHEN 1 THEN c.idContaContabil
                -- 10 Pessoa
                WHEN 10 THEN COALESCE ((
                  SELECT MAX (conta.idContaContabil)
                  FROM CAPESSOAXCONTASCONTABEIS conta
                  WHERE conta.pessoa = b.pessoa
                  AND conta.categoriaContabil = c.categoriaContabil
                  AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                  AND conta.estabelecimento = b.estabelecimento
                  AND conta.ativo = 1), COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM CAPESSOAXCONTASCONTABEIS conta
                    WHERE conta.pessoa = b.pessoa
                    AND conta.categoriaContabil = 0
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), 0))
                -- 20 Produto
                WHEN 20 THEN COALESCE ((
                  SELECT MAX (conta.idContaContabil)
                  FROM CAPRODUTOXCONTASCONTABEIS conta
                  WHERE conta.produto = b.produto
                  AND conta.categoriaContabil = c.categoriaContabil
                  AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                  AND conta.estabelecimento = b.estabelecimento
                  AND conta.ativo = 1), COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM CAPRODUTOXCONTASCONTABEIS conta
                    WHERE conta.produto = b.produto
                    AND conta.categoriaContabil = 0
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), 0))
                -- 40 Conta Financeira
                WHEN 40 THEN COALESCE ((
                  SELECT MAX (conta.idContaContabil)
                  FROM PACONTAFINANCEIRAXCONTAB conta
                  WHERE conta.contaFinanceira = b.contaFinanceira
                  AND conta.categoriaContabil = c.categoriaContabil
                  AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                  AND conta.estabelecimento = b.estabelecimento
                  AND conta.ativo = 1), COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM PACONTAFINANCEIRAXCONTAB conta
                    WHERE conta.contaFinanceira = b.contaFinanceira
                    AND conta.categoriaContabil = 0
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), 0))
                -- 50 Carteira Financeira
                WHEN 50 THEN COALESCE ((
                  SELECT MAX (conta.idContaContabil)
                  FROM PACARTFINANCXCONTASCONTAB conta
                  WHERE conta.carteiraFinanceira = b.carteiraFinanceira
                  AND conta.categoriaContabil = c.categoriaContabil
                  AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                  AND conta.estabelecimento = b.estabelecimento
                  AND conta.ativo = 1), COALESCE ((
                    SELECT MAX (conta.idContaContabil)
                    FROM PACARTFINANCXCONTASCONTAB conta
                    WHERE conta.carteiraFinanceira = b.carteiraFinanceira
                    AND conta.categoriaContabil = 0
                    AND conta.idPlanoContaContabil = v_idPlanoContaContabil
                    AND conta.estabelecimento = b.estabelecimento
                    AND conta.ativo = 1), 0))
                -- 90 Diminuir Valor Contábil
                -- 91 Somar Valor Contábil
                ELSE 0
              END, -- idContaContabil
              c.historicoContabil,
              c.linhaContabil,
              CASE v_tipoAglutinacaoContabil
                -- 2	Dia
                WHEN 2 THEN '2' || TO_CHAR (b.data, 'YYYYMMDD')
                -- 3	Mês
                WHEN 3 THEN '3' || TO_CHAR (b.data, 'YYYYMM')
                -- 1	Fato Contábil
                ELSE '1' || LPAD (b.fatoContabil, 14, '0')
              END, -- quebra
              b.origemContabil,
              b.idDocumento,
              b.data,
              b.fatoContabil,
              b.estabelecimento,
              b.pessoa,
              b.documento,
              b.complemento,
              b.documentoAberto,
              c.valor);
          END IF;
        END LOOP;
      END LOOP;
    END LOOP;
    -- Fim Gera TEMPCONTABILANALITICO
    -- Início Gera TEMPCONTABILSINTETICO
    v_idCriar := 0;
    FOR a IN (
      SELECT
        a.quebra,
        a.debitoCredito,
        a.idContaContabil,
        a.historicoContabil,
        a.linhaContabil,
        a.origemContabil,
        a.idDocumento,
        a.data,
        a.fatoContabil,
        a.estabelecimento,
        a.pessoa,
        a.documento,
        a.complemento,
        a.documentoAberto,
        a.valor,
        pess.nomeRazaoSocial,
        hist.descricaoMontada
      FROM (
        SELECT
          quebra,
          origemContabil,
          debitoCredito,
          idContaContabil,
          historicoContabil,
          MIN (linhaContabil) linhaContabil,
          MIN (idDocumento) idDocumento,
          MIN (data) data,
          MIN (fatoContabil) fatoContabil,
          MIN (estabelecimento) estabelecimento,
          MIN (pessoa) pessoa,
          MIN (documento) documento,
          MIN (complemento) complemento,
          MAX (documentoAberto) documentoAberto,
          SUM (valor) valor
        FROM TEMPCONTABILANALITICO
        WHERE sessaoClient = p_sessaoClient
        AND contadorSessao = p_contadorSessao
        GROUP BY
          quebra,
          origemContabil,
          debitoCredito,
          idContaContabil,
          historicoContabil) a
      JOIN CAPESSOAS pess
      ON pess.pessoa = a.pessoa
      JOIN PAHISTORICOSCONTABEIS hist
      ON hist.historicoContabil = a.historicoContabil
      ORDER BY
        a.quebra,
        a.linhaContabil,
        a.valor,
        a.debitoCredito DESC,
        a.idContaContabil,
        a.historicoContabil)
    LOOP
      IF a.debitoCredito = 'D' THEN
        SELECT COALESCE (MIN (b.id), 0)
        INTO v_idAtualizar
        FROM TEMPCONTABILSINTETICO b
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.quebra = a.quebra
        AND b.valor = a.valor
        AND b.estabelecimento = a.estabelecimento
        AND b.historicoContabil = a.historicoContabil
        AND b.debitar = 0;
      ELSE
        SELECT COALESCE (MIN (b.id), 0)
        INTO v_idAtualizar
        FROM TEMPCONTABILSINTETICO b
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.quebra = a.quebra
        AND b.valor = a.valor
        AND b.estabelecimento = a.estabelecimento
        AND b.historicoContabil = a.historicoContabil
        AND b.creditar = 0;
      END IF;
      IF v_idAtualizar = 0 THEN
        v_idCriar := v_idCriar + 1;
        INSERT INTO TEMPCONTABILSINTETICO (
          sessaoClient,
          contadorSessao,
          id,
          quebra,
          fato,
          sequencia,
          selecionado,
          estabelecimento,
          estabelecimentoCodigoDescricao,
          idPlanoContaContabil,
          data,
          pessoa,
          pessoaCodigoDescricao,
          documento,
          fatoContabil,
          debitar,
          debitoIdContabil,
          debitoIdContaContabil,
          debitoReduzido,
          debitoCodigoDescricao,
          creditar,
          creditoIdContabil,
          creditoIdContaContabil,
          creditoReduzido,
          creditoCodigoDescricao,
          valor,
          historicoContabil,
          complemento,
          historicoMontado,
          origemContabil,
          idDocumento,
          documentoAberto,
          erroDebito,
          erroCredito,
          erroHistorico,
          erroValor,
          erroGeral)
        VALUES (
          p_sessaoClient,
          p_contadorSessao,
          v_idCriar, -- id
          a.quebra,
          0, -- fato
          0, -- sequencia
          1, -- selecionado
          a.estabelecimento,
          ' ', -- estabelecimentoCodigoDescricao
          0, -- idPlanoContaContabil
          a.data,
          a.pessoa,
          ' ', -- pessoaCodigoDescricao
          a.documento,
          a.fatoContabil,
          CASE
            WHEN a.debitoCredito = 'D'
            THEN 1
            ELSE 0
          END, -- debitar
          0, -- debitoIdContabil
          CASE
            WHEN a.debitoCredito = 'D'
            THEN a.idContaContabil
            ELSE 0
          END, -- debitoIdContaContabil
          0, -- debitoReduzido
          ' ', -- debitoCodigoDescricao
          CASE
            WHEN a.debitoCredito = 'C'
            THEN 1
            ELSE 0
          END, -- creditar
          0, -- creditoIdContabil
          CASE
            WHEN a.debitoCredito = 'C'
            THEN a.idContaContabil
            ELSE 0
          END, -- creditoIdContaContabil
          0, -- creditoReduzido
          ' ', -- creditoCodigoDescricao
          a.valor,
          a.historicoContabil,
          a.complemento,
          REPLACE (
            REPLACE (
              REPLACE (
                REPLACE (
                  a.descricaoMontada,
                  '@DATA', COALESCE (TO_CHAR (a.data, 'DD/MM/YYYY'), '00/00/0000')),
                '@PESSOA',
                  CASE
                    WHEN a.pessoa = 0
                    THEN 'CONSUMIDOR FINAL'
                    ELSE a.nomeRazaoSocial
                  END),
              '@DOCUMENTO', a.documento),
            '@COMPLEMENTO', a.complemento), -- descricaoHistorico
          a.origemContabil,
          a.idDocumento,
          a.documentoAberto,
          ' ',
          ' ',
          ' ',
          ' ',
          ' ');
      ELSIF a.debitoCredito = 'D' THEN
        UPDATE TEMPCONTABILSINTETICO b SET
          b.debitar = 1,
          b.debitoIdContaContabil = a.idContaContabil
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.id = v_idAtualizar;
      ELSE
        UPDATE TEMPCONTABILSINTETICO b SET
          b.creditar = 1,
          b.creditoIdContaContabil = a.idContaContabil
        WHERE b.sessaoClient = p_sessaoClient
        AND b.contadorSessao = p_contadorSessao
        AND b.id = v_idAtualizar;
      END IF;
    END LOOP;
  END IF;
  v_quebra    := ' ';
  v_fato      := 0;
  v_sequencia := 0;
  FOR a IN (
    SELECT
      a.id,
      a.quebra,
      CASE
        WHEN a.estabelecimento = 0
        THEN ' '
        ELSE COALESCE (estab.descricao, ' ')
      END estabelecimentoCodigoDescricao,
      estab.idPlanoContaContabil,
      CASE
        WHEN a.pessoa = 0
        THEN ' '
        ELSE COALESCE (pess.nomeRazaoSocial, ' ')
      END pessoaCodigoDescricao,
      CASE
        WHEN a.debitar = 0
          OR a.debitoIdContaContabil = 0
        THEN 0
        ELSE COALESCE (contDeb.reduzido, 0)
      END debitoReduzido,
      CASE
        WHEN a.debitar = 0
          OR a.debitoIdContaContabil = 0
        THEN ' '
        ELSE COALESCE (contDeb.contaEstruturada, ' ')
          || ' - '
          || COALESCE (contDeb.descricao, ' ')
      END debitoCodigoDescricao,
      CASE
        WHEN a.creditar = 0
          OR a.creditoIdContaContabil = 0
          THEN 0
          ELSE COALESCE (contCred.reduzido, 0)
      END creditoReduzido,
      CASE
        WHEN a.creditar = 0
          OR a.creditoIdContaContabil = 0
        THEN ' '
        ELSE COALESCE (contCred.contaEstruturada, ' ')
          || ' - '
          || COALESCE (contCred.descricao, ' ')
      END creditoCodigoDescricao
    FROM TEMPCONTABILSINTETICO a
    JOIN PAESTABELECIMENTOS estab
    ON estab.estabelecimento = a.estabelecimento
    JOIN CAPESSOAS pess
    ON pess.pessoa = a.pessoa
    JOIN PACONTASCONTABEIS contDeb
    ON contDeb.idContaContabil = a.debitoIdContaContabil
    JOIN PACONTASCONTABEIS contCred
    ON contCred.idContaContabil = a.creditoIdContaContabil
    WHERE a.sessaoClient = p_sessaoClient
    AND a.contadorSessao = p_contadorSessao
    ORDER BY
      a.quebra,
      a.id)
  LOOP
    IF v_quebra <> a.quebra THEN
      v_fato      := v_fato + 1;
      v_sequencia := 0;
      v_quebra    := a.quebra;
    END IF;
    v_sequencia := v_sequencia + 1;
    UPDATE TEMPCONTABILSINTETICO b SET
      b.fato = v_fato,
      b.sequencia = v_sequencia,
      b.estabelecimentoCodigoDescricao = a.estabelecimentoCodigoDescricao,
      b.idPlanoContaContabil = a.idPlanoContaContabil,
      b.pessoaCodigoDescricao = a.pessoaCodigoDescricao,
      b.debitoReduzido = a.debitoReduzido,
      b.debitoCodigoDescricao = a.debitoCodigoDescricao,
      b.creditoReduzido = a.creditoReduzido,
      b.creditoCodigoDescricao = a.creditoCodigoDescricao
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.id = a.id;
  END LOOP;
  IF p_situacaoContabilizacao <> 'C' THEN
    -- Fim Gera TEMPCONTABILSINTETICO
    ADD_TEMPCONTABIL_VERIFICA_ERRO (
      p_sessaoClient,
      p_contadorSessao,
      0); -- p_fato
  END IF;
END ADD_TEMPCONTABIL_GERA_TEMP;

/

INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (101, 'Tipo Documento', 1, 100, 'N', '3', 'SITIPOSDOCUMENTO', 'C', 'cabDoc.tipoDocumento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (102, 'Tipo Venda', 1, 100, 'N', '4', 'PATIPOSVENDA', 'C', 'cabDoc.tipoVenda', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (103, 'Finalidade Nota', 1, 100, 'A', '1', 'SIFINALIDADESNOTA', 'C', 'cabDoc.finalidadeNota', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (104, 'Estabelecimento', 1, 100, 'N', '4', 'PAESTABELECIMENTOS', 'C', 'cabDoc.estabelecimento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (104, 'Pessoa', 1, 100, 'N', '14', 'CAPESSOAS', 'C', 'cabDoc.pessoa', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (121, 'Grupo Econômico Estabelecimento', 1, 100, 'N', '14', 'CAGRUPOSECONOMICOS', 'C', 'pessEst.grupoEconomico', 'JOIN PAESTABELECIMENTOS estab
        ON estab.estabelecimento = cabDoc.estabelecimento
        JOIN CAPESSOAS pessEst
        ON pessEst.pessoa = estab.pessoaEstabelecimento', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (151, 'Modelo Documento', 1, 100, 'N', '4', 'PAMODELOSDOCUMENTO', 'I', 'itemDoc.modeloDocumento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (152, 'Operação Fiscal', 1, 100, 'N', '14', 'PAOPERACOESFISCAIS', 'I', 'itemDoc.operacaoFiscal', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (153, 'CFOP', 1, 100, 'N', '4', 'SICFOPS', 'I', 'itemDoc.cfop', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (154, 'Local Estoque', 1, 100, 'N', '4', 'PALOCAISESTOQUE', 'I', 'itemDoc.localEstoque', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (155, 'Vendedor', 1, 100, 'N', '14', 'CAPESSOAS', 'I', 'itemDoc.vendedor', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (156, 'Grade Produto', 1, 100, 'N', '14', 'CAGRADESPRODUTO', 'I', 'itemDoc.gradeProduto', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (171, 'Produto', 1, 100, 'N', '7', 'CAPRODUTOS', 'I', 'gradProd.produto', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (172, 'Categoria Produto', 1, 100, 'N', '4', 'PACATEGORIASPRODUTO', 'I', 'subCat.categoriaProduto', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto
        JOIN PASUBCATEGORIASPRODUTO subCat
        ON subCat.subcategoriaProduto = prod.subcategoriaProduto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (173, 'Subcategoria Produto', 1, 100, 'N', '8', 'PASUBCATEGORIASPRODUTO', 'I', 'prod.subcategoriaProduto', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (174, 'Marca', 1, 100, 'N', '7', 'PAMARCAS', 'I', 'prod.marca', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (175, 'Característica A', 1, 100, 'N', '7', 'PACARACTERISTICASA', 'I', 'prod.caracteristicaA', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (176, 'Característica B', 1, 100, 'N', '7', 'PACARACTERISTICASB', 'I', 'prod.caracteristicaB', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (177, 'Característica C', 1, 100, 'N', '7', 'PACARACTERISTICASC', 'I', 'prod.caracteristicaC', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (178, 'Característica D', 1, 100, 'N', '7', 'PACARACTERISTICASD', 'I', 'prod.caracteristicaD', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (179, 'Característica E', 1, 100, 'N', '7', 'PACARACTERISTICASE', 'I', 'prod.caracteristicaE', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (180, 'Exclusivo Produto A', 1, 100, 'N', '14', 'PAEXCLUSIVOSPRODUTOA', 'I', 'prod.exclusivoProdutoA', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (181, 'Exclusivo Produto B', 1, 100, 'N', '14', 'PAEXCLUSIVOSPRODUTOB', 'I', 'prod.exclusivoProdutoB', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (182, 'Exclusivo Produto C', 1, 100, 'N', '14', 'PAEXCLUSIVOSPRODUTOC', 'I', 'prod.exclusivoProdutoC', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (183, 'Exclusivo Produto D', 1, 100, 'N', '14', 'PAEXCLUSIVOSPRODUTOD', 'I', 'prod.exclusivoProdutoD', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (184, 'Exclusivo Produto E', 1, 100, 'N', '14', 'PAEXCLUSIVOSPRODUTOE', 'I', 'prod.exclusivoProdutoE', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (185, 'ID Ncm', 1, 100, 'N', '11', 'SINCMS', 'I', 'prod.idNcm', 'JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = itemDoc.gradeProduto
        JOIN CAPRODUTOS prod
        ON prod.produto = gradProd.produto', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (201, 'Estabelecimento', 1, 200, 'N', '4', 'PAESTABELECIMENTOS', 'C', 'financ.estabelecimento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (202, 'Conta Financeira', 1, 200, 'A', '60', 'PACONTASFINANCEIRAS', 'C', 'financ.contaFinanceira', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (203, 'Pagamento / Recebimento', 1, 200, 'A', '1', 'SIPAGAMENTORECEBIMENTO', 'C', 'financ.pagamentoRecebimento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (204, 'Operação Financeira', 1, 200, 'N', '2', 'SIOPERACOESFINANCEIRAS', 'C', 'financ.operacaoFinanceira', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (205, 'Pessoa', 1, 200, 'N', '14', 'CAPESSOAS', 'C', 'financ.pessoa', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (206, 'Cobrança', 1, 200, 'N', '14', 'CAPESSOAS', 'C', 'financ.cobranca', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (207, 'Meio Pagamento', 1, 200, 'N', '2', 'SIMEIOSPAGAMENTO', 'C', 'financ.meioPagamento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (208, 'Carteira Financeira', 1, 200, 'N', '4', 'PACARTEIRASFINANCEIRAS', 'C', 'financ.carteiraFinanceira', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (221, 'Grupo Econômico Estabelecimento', 1, 200, 'N', '14', 'CAGRUPOSECONOMICOS', 'C', 'pessEst.grupoEconomico', 'JOIN PAESTABELECIMENTOS estab
        ON financ.estabelecimento = cabDoc.estabelecimento
        JOIN CAPESSOAS pessEst
        ON pessEst.pessoa = estab.pessoaEstabelecimento', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (301, 'Estabelecimento Baixa', 1, 300, 'N', '4', 'PAESTABELECIMENTOS', 'C', 'baixa.estabelecimento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (302, 'Conta Financeira Baixa', 1, 300, 'A', '60', 'PACONTASFINANCEIRAS', 'C', 'baixa.contaFinanceira', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (303, 'Pagamento / Recebimento Baixa', 1, 300, 'A', '1', 'SIPAGAMENTORECEBIMENTO', 'C', 'baixa.pagamentoRecebimento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (304, 'Operação Financeira Baixa', 1, 300, 'N', '2', 'SIOPERACOESFINANCEIRAS', 'C', 'baixa.operacaoFinanceira', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (306, 'Cobrança Baixa', 1, 300, 'N', '14', 'CAPESSOAS', 'C', 'baixa.cobranca', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (307, 'Meio Pagamento Baixa', 1, 300, 'N', '2', 'SIMEIOSPAGAMENTO', 'C', 'baixa.meioPagamento', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (308, 'Carteira Financeira Baixa', 1, 300, 'N', '4', 'PACARTEIRASFINANCEIRAS', 'C', 'baixa.carteiraFinanceira', ' ', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (321, 'Grupo Econômico Estabelecimento Baixa', 1, 300, 'N', '14', 'CAGRUPOSECONOMICOS', 'C', 'pessEst.grupoEconomico', 'JOIN PAESTABELECIMENTOS estab
        ON estab.estabelecimento = baixa.estabelecimento
        JOIN CAPESSOAS pessEst
        ON pessEst.pessoa = estab.pessoaEstabelecimento', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (351, 'Estabelecimento Financeiro', 1, 300, 'N', '4', 'PAESTABELECIMENTOS', 'C', 'financ.estabelecimento', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (352, 'Conta Financeira Financeiro', 1, 300, 'A', '60', 'PACONTASFINANCEIRAS', 'C', 'financ.contaFinanceira', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (353, 'Pagamento / Recebimento Financeiro', 1, 300, 'A', '1', 'SIPAGAMENTORECEBIMENTO', 'C', 'financ.pagamentoRecebimento', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (354, 'Operação Financeira Financeiro', 1, 300, 'N', '2', 'SIOPERACOESFINANCEIRAS', 'C', 'financ.operacaoFinanceira', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (355, 'Pessoa Financeiro', 1, 300, 'N', '14', 'CAPESSOAS', 'C', 'financ.pessoa', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (356, 'Cobrança Financeiro', 1, 300, 'N', '14', 'CAPESSOAS', 'C', 'financ.cobranca', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (357, 'Meio Pagamento Financeiro', 1, 300, 'N', '2', 'SIMEIOSPAGAMENTO', 'C', 'financ.meioPagamento', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (358, 'Carteira Financeira Financeiro', 1, 300, 'N', '4', 'PACARTEIRASFINANCEIRAS', 'C', 'financ.carteiraFinanceira', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro', ' ');
INSERT INTO SIFILTROSCONTABEIS (filtroContabil, descricao, ativo, origemContabil, tipoCampo, mascara, tabelaSistema, cabecalhoItemPagamento, campoSelect, campoJoin, observacoes) VALUES (371, 'Grupo Econômico Estabelecimento Financeiro', 1, 300, 'N', '14', 'CAGRUPOSECONOMICOS', 'C', 'pessEst.grupoEconomico', 'JOIN MOFINANCEIROS financ
        ON financ.idFinanceiro = baixa.idFinanceiro
        JOIN PAESTABELECIMENTOS estab
        ON estab.estabelecimento = financ.estabelecimento
        JOIN CAPESSOAS pessEst
        ON pessEst.pessoa = estab.pessoaEstabelecimento', ' ');

COMMIT;

DROP TABLE TEMPPERSONALIZACOESPROJET;
DROP TABLE TEMPTAREFAS;

-- TEMPQUESTIONARIO
CREATE GLOBAL TEMPORARY TABLE TEMPQUESTIONARIO
  (
    sessaoClient                 VARCHAR (30) DEFAULT ' ' NOT NULL,
    contadorSessao               NUMERIC (14,0) DEFAULT 0 NOT NULL,
    contador                     NUMERIC (14,0) DEFAULT 0 NOT NULL,
    excluido                     NUMERIC (1,0) DEFAULT 0 NOT NULL,
    ordenacao                    NUMERIC (11,0) DEFAULT 0 NOT NULL,
    subOrdenacao                 NUMERIC (11,0) DEFAULT 0 NOT NULL,
    idSalvar                     NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idQuestionario               NUMERIC (14,0) DEFAULT 0 NOT NULL,
    nomeCampo                    VARCHAR (256) DEFAULT ' ' NOT NULL,
    tipoCampo                    CHAR (1) DEFAULT ' ' NOT NULL,
    mascara                      VARCHAR (30) DEFAULT ' ' NOT NULL,
    exibirCampo                  CHAR (1) DEFAULT ' ' NOT NULL,
    obrigatorio                  NUMERIC (1,0) DEFAULT 0 NOT NULL,
    tabelaSistema                VARCHAR (30) DEFAULT ' ' NOT NULL,
    numeroDigitosCampoId         NUMERIC (6,0) DEFAULT 0 NOT NULL,
    conteudoId                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    conteudoCodigo               VARCHAR (256) DEFAULT ' ' NOT NULL,
    conteudoCodigoDescricao      VARCHAR (300) DEFAULT ' ' NOT NULL,
    conteudoCombo                VARCHAR (256) DEFAULT ' ' NOT NULL,
    conteudoComboItemList        CLOB,
    conteudoComboDisplayList     CLOB,
    conteudoData                 DATE,
    conteudoHora                 CHAR (6),
    conteudoLogico               NUMERIC (1,0) DEFAULT 0 NOT NULL,
    conteudoNumerico             NUMERIC (16,8) DEFAULT 0 NOT NULL,
    conteudoEdit                 VARCHAR (4000) DEFAULT ' ' NOT NULL,
    observacoes                  VARCHAR (4000) DEFAULT ' ' NOT NULL
  ) ON COMMIT PRESERVE ROWS;
CREATE UNIQUE INDEX TEMPQUESTIONARIO_PK1 ON TEMPQUESTIONARIO (sessaoClient, contadorSessao, contador);
CREATE INDEX TEMPQUESTIONARIO_K2 ON TEMPQUESTIONARIO (sessaoClient, contadorSessao, excluido, ordenacao, subOrdenacao);

create or replace PROCEDURE ADD_ORCAMENTO_CAB_PROJ_GRAVA (
  p_estabelecimentoAtivo     IN NUMBER,
  p_idPersonProjetoOrcamento IN NUMBER,
  p_orcamento                IN NUMBER,
  p_personalizacaoProjeto    IN NUMBER,
  p_conteudo                 IN VARCHAR2,
  /* Retornos */
  r_idPersonProjetoOrcamento OUT NUMBER)
IS
BEGIN
  r_idPersonProjetoOrcamento := p_idPersonProjetoOrcamento;
  IF r_idPersonProjetoOrcamento = 0 THEN
    r_idPersonProjetoOrcamento := FUNC_ADD_BUSCA_PROXIMO_ID ('MOORCAMENTOXPERSPROJETO', 'idPersonProjetoOrcamento', 14, p_estabelecimentoAtivo, NULL);
  END IF;
  MERGE INTO MOORCAMENTOXPERSPROJETO a 
  USING (
    SELECT
      r_idPersonProjetoOrcamento idPersonProjetoOrcamento,
      p_orcamento                orcamento,
      p_personalizacaoProjeto    personalizacaoProjeto,
      p_conteudo                 conteudo
    FROM DUAL) b
  ON (a.idPersonProjetoOrcamento = b.idPersonProjetoOrcamento)
  WHEN MATCHED THEN UPDATE SET
    a.orcamento             = b.orcamento,
    a.personalizacaoProjeto = b.personalizacaoProjeto,
   a.conteudo               = b.conteudo
  WHEN NOT MATCHED THEN INSERT (
    idPersonProjetoOrcamento,
    orcamento,
    personalizacaoProjeto,
    conteudo)
  VALUES (
    b.idPersonProjetoOrcamento,
    b.orcamento,
    b.personalizacaoProjeto,
    b.conteudo);
END ADD_ORCAMENTO_CAB_PROJ_GRAVA;

/

create or replace PROCEDURE ADD_PRE_DOC_CAB_PROJ_GRAVA (
  p_estabelecimentoAtivo        IN NUMBER,
  p_idPersonProjetoPreDocumento IN NUMBER,
  p_preDocumento                IN NUMBER,
  p_personalizacaoProjeto       IN NUMBER,
  p_conteudo                    IN VARCHAR2,
  /* Retornos */
  r_idPersonProjetoPreDocumento OUT NUMBER)
IS
BEGIN
  r_idPersonProjetoPreDocumento := p_idPersonProjetoPreDocumento;
  IF r_idPersonProjetoPreDocumento = 0 THEN
    r_idPersonProjetoPreDocumento := FUNC_ADD_BUSCA_PROXIMO_ID ('MOPREDOCUMXPERSPROJETO', 'idPersonProjetoPreDocumento', 14, p_estabelecimentoAtivo, NULL);
  END IF;
  MERGE INTO MOPREDOCUMXPERSPROJETO a 
  USING (
    SELECT
      r_idPersonProjetoPreDocumento idPersonProjetoPreDocumento,
      p_preDocumento                preDocumento,
      p_personalizacaoProjeto       personalizacaoProjeto,
      p_conteudo                    conteudo
    FROM DUAL) b
  ON (a.idPersonProjetoPreDocumento = b.idPersonProjetoPreDocumento)
  WHEN MATCHED THEN UPDATE SET
    a.preDocumento          = b.preDocumento,
    a.personalizacaoProjeto = b.personalizacaoProjeto,
   a.conteudo               = b.conteudo
  WHEN NOT MATCHED THEN INSERT (
    idPersonProjetoPreDocumento,
    preDocumento,
    personalizacaoProjeto,
    conteudo)
  VALUES (
    b.idPersonProjetoPreDocumento,
    b.preDocumento,
    b.personalizacaoProjeto,
    b.conteudo);
END ADD_PRE_DOC_CAB_PROJ_GRAVA;

/

create or replace PROCEDURE ADD_DOC_FISC_CAB_PROJ_GRAVA (
  p_estabelecimentoAtivo     IN NUMBER,
  p_idPersonProjetoDocFiscal IN NUMBER,
  p_idDocumentoFiscal        IN NUMBER,
  p_personalizacaoProjeto    IN NUMBER,
  p_conteudo                 IN VARCHAR2,
  /* Retornos */
  r_idPersonProjetoDocFiscal OUT NUMBER)
IS
BEGIN
  r_idPersonProjetoDocFiscal := p_idPersonProjetoDocFiscal;
  IF r_idPersonProjetoDocFiscal = 0 THEN
    r_idPersonProjetoDocFiscal := FUNC_ADD_BUSCA_PROXIMO_ID ('MODOCFISCALXPERSPROJETO', 'idPersonProjetoDocFiscal', 14, p_estabelecimentoAtivo, NULL);
  END IF;
  MERGE INTO MODOCFISCALXPERSPROJETO a 
  USING (
    SELECT
      r_idPersonProjetoDocFiscal idPersonProjetoDocFiscal,
      p_idDocumentoFiscal        idDocumentoFiscal,
      p_personalizacaoProjeto    personalizacaoProjeto,
      p_conteudo                 conteudo
    FROM DUAL) b
  ON (a.idPersonProjetoDocFiscal = b.idPersonProjetoDocFiscal)
  WHEN MATCHED THEN UPDATE SET
    a.idDocumentoFiscal     = b.idDocumentoFiscal,
    a.personalizacaoProjeto = b.personalizacaoProjeto,
   a.conteudo               = b.conteudo
  WHEN NOT MATCHED THEN INSERT (
    idPersonProjetoDocFiscal,
    idDocumentoFiscal,
    personalizacaoProjeto,
    conteudo)
  VALUES (
    b.idPersonProjetoDocFiscal,
    b.idDocumentoFiscal,
    b.personalizacaoProjeto,
    b.conteudo);
END ADD_DOC_FISC_CAB_PROJ_GRAVA;

/

create or replace PROCEDURE ADD_TEMPQUESTIONARIO_EFETIVA (
  p_sessaoClient                IN VARCHAR,
  p_estabelecimentoAtivo        IN NUMBER,
  p_contadorSessao              IN NUMERIC,
  p_DocFisc_PreDoc_Orcam_Tarefa IN CHAR,
  p_idPai                       IN NUMBER)
IS
  v_idSalvar  NUMBER;
  v_ordenacao NUMBER;
BEGIN
  FOR a IN (
    SELECT
      contador,
      idSalvar
    FROM TEMPQUESTIONARIO
    WHERE sessaoClient = p_sessaoClient
    AND contadorSessao = p_contadorSessao
    AND excluido = 1
    AND idSalvar > 0)
  LOOP
    IF p_DocFisc_PreDoc_Orcam_Tarefa = 'D' THEN
      DELETE MODOCFISCALXPERSPROJETO b
      WHERE b.idPersonProjetoDocFiscal = a.idSalvar;
    ELSIF p_DocFisc_PreDoc_Orcam_Tarefa = 'P' THEN
      DELETE MOPREDOCUMXPERSPROJETO b
      WHERE b.idPersonProjetoPreDocumento = a.idSalvar;
    ELSIF p_DocFisc_PreDoc_Orcam_Tarefa = 'O' THEN
      DELETE MOORCAMENTOXPERSPROJETO b
      WHERE b.idPersonProjetoOrcamento = a.idSalvar;
    ELSIF p_DocFisc_PreDoc_Orcam_Tarefa = 'T' THEN
      DELETE MOORCAMENTOXTAREFAS b
      WHERE b.idTarefaOrcamento = a.idSalvar;
    END IF;
  END LOOP;
  FOR a IN (
    SELECT
      a.contador,
      a.idSalvar,
      a.idQuestionario,
      CASE
        WHEN a.tabelaSistema <> ' '
        THEN
          CASE
            WHEN tabSist.nomeCampoIdSeDiferenteCodigo <> ' '
              OR tabSist.tipoCampoCodigo = 'N'
            THEN CASE WHEN a.conteudoId = 0 THEN ' ' ELSE TRIM (TO_CHAR (a.conteudoId)) END
            ELSE a.conteudoCodigo
          END
        WHEN a.tipoCampo = 'D'
        THEN CASE WHEN COALESCE (TO_CHAR (a.conteudoData, 'DD/MM/YYYY'), '00/00/0000') = '00/00/0000' THEN ' ' ELSE COALESCE (TO_CHAR (a.conteudoData, 'DD/MM/YYYY'), '00/00/0000') END
        WHEN a.tipoCampo = 'H'
        THEN CASE WHEN COALESCE (conteudoHora, '000000') = '000000' THEN ' ' ELSE COALESCE (SUBSTR (a.conteudoHora, 1, 2) || ':' || SUBSTR (a.conteudoHora, 3, 2) || ':' || SUBSTR (a.conteudoHora, 5, 2), '00:00:00') END 
        WHEN a.tipoCampo = 'L'
        THEN
          CASE
            WHEN a.conteudoLogico = '1'
            THEN 'S'
            ELSE ' '
          END
        WHEN a.tipoCampo = 'N'
        THEN CASE WHEN a.conteudoNumerico = 0 THEN ' ' ELSE REPLACE (TRIM (TO_CHAR (a.conteudoNumerico, 'FM99999999999999999990D99999999999999999990')), '.', ',') END
        WHEN a.exibirCampo = 'P'
        THEN a.conteudoCombo
        ELSE a.conteudoEdit
      END conteudo,
      a.observacoes
    FROM TEMPQUESTIONARIO a
    JOIN SITABELASSISTEMA tabSist
    ON tabSist.tabelaSistema = a.tabelaSistema
    WHERE a.sessaoClient = p_sessaoClient
    AND a.contadorSessao = p_contadorSessao
    AND a.excluido = 0
    ORDER BY
      a.ordenacao,
      a.subOrdenacao)
  LOOP
    v_idSalvar  := a.idSalvar;
    IF p_DocFisc_PreDoc_Orcam_Tarefa = 'D' THEN
      ADD_DOC_FISC_CAB_PROJ_GRAVA (
        p_estabelecimentoAtivo,
        v_idSalvar, -- p_idPersonProjetoDocFiscal
        p_idPai, -- p_idDocumentoFiscal
        a.idQuestionario, -- p_personalizacaoProjeto
        a.conteudo,
        /* Retornos */
        v_idSalvar); -- r_idTarefaOrcamento
    ELSIF p_DocFisc_PreDoc_Orcam_Tarefa = 'P' THEN
      ADD_PRE_DOC_CAB_PROJ_GRAVA (
        p_estabelecimentoAtivo,
        v_idSalvar, -- p_idPersonProjetoPreDocumento
        p_idPai, -- p_preDocumento
        a.idQuestionario, -- p_personalizacaoProjeto
        a.conteudo,
        /* Retornos */
        v_idSalvar); -- r_idTarefaOrcamento
    ELSIF p_DocFisc_PreDoc_Orcam_Tarefa = 'O' THEN
      ADD_ORCAMENTO_CAB_PROJ_GRAVA (
        p_estabelecimentoAtivo,
        v_idSalvar, -- p_idPersonProjetoOrcamento
        p_idPai, -- p_orcamento
        a.idQuestionario, -- p_personalizacaoProjeto
        a.conteudo,
        /* Retornos */
        v_idSalvar); -- r_idTarefaOrcamento
    ELSIF p_DocFisc_PreDoc_Orcam_Tarefa = 'T' THEN
      v_ordenacao := 0;
      IF v_idSalvar > 0 THEN
        SELECT COALESCE (MAX (ordenacao), 0)
        INTO v_ordenacao
        FROM MOORCAMENTOXTAREFAS
        WHERE idTarefaOrcamento = v_idSalvar;
      END IF;
      IF v_ordenacao <= 0 THEN
        SELECT COALESCE (MAX (ordenacao), 0) + 1
        INTO v_ordenacao
        FROM MOORCAMENTOXTAREFAS
        WHERE idAtividadePrevOrcamento = p_idPai
        AND idCheckListXTarefas = a.idQuestionario;
      END IF;
      ADD_ORCAMENTO_ITEM_TAREF_GRAVA (
        p_estabelecimentoAtivo,
        v_idSalvar, -- p_idTarefaOrcamento
        p_idPai, -- p_idAtividadePrevOrcamento
        a.idQuestionario, -- p_idCheckListXTarefas
        v_ordenacao,
        a.conteudo,
        a.observacoes,
        /* Retornos */
        v_idSalvar); -- r_idTarefaOrcamento
    END IF;
  END LOOP;
  DELETE TEMPQUESTIONARIO b
  WHERE b.sessaoClient = p_sessaoClient
  AND b.contadorSessao = p_contadorSessao;
END ADD_TEMPQUESTIONARIO_EFETIVA;

/

create or replace PROCEDURE ADD_TEMPQUESTIONARIO_GERA_TAR (
  p_sessaoClient             IN VARCHAR,
  p_contadorSessao           IN NUMERIC,
  p_idAtividadePrevOrcamento IN NUMBER,
  p_checkList                IN NUMBER)
IS
  v_contador                 NUMBER;
  v_conteudoComboItemList    CLOB;
  v_conteudoComboDisplayList CLOB;
BEGIN
  DELETE TEMPQUESTIONARIO
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  v_contador := 0;
  FOR a IN (
    SELECT
      a.idCheckListXTarefas,
      a.sequencia,
      a.descricao,
      a.tipoCampo,
      a.mascara,
      a.exibirCampo,
      a.obrigatorio,
      a.tabelaSistema,
      tabSist.nomeCampoCodigo,
      tabSist.tipoCampoCodigo,
      tabSist.numeroDigitosCodigo,
      tabSist.nomeCampoDescricao,
      tabSist.adicionarCodigoNaDescricao,
      tabSist.nomeCampoIdSeDiferenteCodigo,
      tabSist.numeroDigitosCampoId,
      COALESCE (b.idTarefaOrcamento, 0) idTarefaOrcamento,
      COALESCE (b.conteudo, a.conteudoSugestao) conteudo,
      COALESCE (b.observacoes, ' ') observacoes
    FROM PACHECKLISTXTAREFAS a
    JOIN SITABELASSISTEMA tabSist
    ON tabSist.tabelaSistema = a.tabelaSistema
    LEFT JOIN MOORCAMENTOXTAREFAS b
    ON b.idCheckListXTarefas = a.idCheckListXTarefas
    AND b.idAtividadePrevOrcamento = p_idAtividadePrevOrcamento
    WHERE a.checkList = p_checkList
    AND (a.ativo = 1
      OR b.idTarefaOrcamento IS NOT NULL)
    ORDER BY
      a.sequencia,
      COALESCE (b.idTarefaOrcamento, 0))
  LOOP
    v_contador                 := v_contador + 1;
    v_conteudoComboItemList    := NULL;
    v_conteudoComboDisplayList := NULL;
    IF a.tabelaSistema = ' '
      AND a.tipoCampo = 'A'
      AND a.exibirCampo = 'P'
    THEN
      SELECT
        TO_CLOB (LISTAGG (opcoes.conteudo, ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',',''))),
        TO_CLOB (LISTAGG (REPLACE(opcoes.descricao,',',''), ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',','')))
      INTO
        v_conteudoComboItemList,
        v_conteudoComboDisplayList
      FROM PACHECKLISTXTAREFAXOPCOES opcoes
      WHERE opcoes.idCheckListXTarefas = a.idCheckListXTarefas
      AND opcoes.ativo = 1;
    END IF;
    INSERT INTO TEMPQUESTIONARIO (
      sessaoClient,
      contadorSessao,
      contador,
      excluido,
      ordenacao,
      subOrdenacao,
      idSalvar,
      idQuestionario,
      nomeCampo,
      tipoCampo,
      mascara,
      exibirCampo,
      obrigatorio,
      tabelaSistema,
      conteudoId,
      conteudoCodigo,
      conteudoCodigoDescricao,
      conteudoCombo,
      conteudoComboItemList,
      conteudoComboDisplayList,
      conteudoData,
      conteudoHora,
      conteudoLogico,
      conteudoNumerico,
      conteudoEdit,
      observacoes)
    VALUES (
      p_sessaoClient,
      p_contadorSessao,
      v_contador,
      0, -- excluido
      a.sequencia, -- ordenacao
      a.idTarefaOrcamento, -- subOrdenacao
      a.idTarefaOrcamento, -- idSalvar
      a.idCheckListXTarefas, -- idQuestionario
      a.descricao, -- nomeCampo,
      a.tipoCampo,
      a.mascara,
      a.exibirCampo,
      a.obrigatorio,
      a.tabelaSistema,
      CASE
        WHEN a.tabelaSistema <> ' '
        AND (a.nomeCampoIdSeDiferenteCodigo <> ' '
          OR a.tipoCampoCodigo = 'N')
        AND a.conteudo <> ' '
        THEN TO_NUMBER (a.conteudo)
        ELSE 0
      END, -- conteudoId
      CASE
        WHEN a.tabelaSistema <> ' '
        AND a.nomeCampoIdSeDiferenteCodigo = ' '
        AND a.tipoCampoCodigo <> 'N'
        AND a.conteudo <> ' '
        THEN a.conteudo
        ELSE ' '
      END, -- conteudoCodigo,
      CASE
        WHEN a.tabelaSistema <> ' '
        AND a.conteudo <> ' '
        THEN BUSCA_CODIGO_DESCRICAO_CAMPO (
          a.tabelaSistema,
          a.conteudo,
          a.nomeCampoCodigo,
          a.tipoCampoCodigo,
          a.numeroDigitosCodigo,
          a.nomeCampoDescricao,
          a.adicionarCodigoNaDescricao,
          a.nomeCampoIdSeDiferenteCodigo,
          a.numeroDigitosCampoId)
        ELSE ' '
      END, -- conteudoCodigoDescricao,
      CASE
        WHEN a.tabelaSistema = ' '
        AND a.tipoCampo = 'A'
        AND a.exibirCampo = 'P'
        AND a.conteudo <> ' '
        THEN a.conteudo
        ELSE ' '
      END, -- conteudoCombo,
      v_conteudoComboItemList,
      v_conteudoComboDisplayList,
      CASE
        WHEN a.tabelaSistema = ' '
        AND a.tipoCampo = 'D'
        AND a.conteudo <> ' '
        AND a.conteudo <> '00/00/0000'
        THEN TO_DATE (a.conteudo, 'DD/MM/YYYY')
        ELSE NULL
      END, -- conteudoData,
      CASE
        WHEN a.tabelaSistema = ' '
        AND a.tipoCampo = 'H'
        AND a.conteudo <> ' '
        AND a.conteudo <> '00:00:00'
        THEN REPLACE (a.conteudo, ':', '')
        ELSE '000000'
      END, -- conteudoHora,
      CASE
        WHEN a.tabelaSistema = ' '
        AND a.tipoCampo = 'L'
        AND a.conteudo = 'S'
        THEN 1
        ELSE 0
      END, -- conteudoLogico,
      CASE
        WHEN a.tabelaSistema = ' '
        AND a.tipoCampo = 'N'
        AND a.conteudo <> ' '
        AND a.conteudo <> '0'
        THEN TO_NUMBER (a.conteudo)
        ELSE 0
      END, -- conteudoNumerico,
      CASE
        WHEN a.tabelaSistema = ' '
        AND a.tipoCampo = 'A'
        AND a.exibirCampo <> 'P'
        AND a.conteudo <> ' '
        THEN a.conteudo
        ELSE ' '
      END, -- conteudoEdit,
      a.observacoes);
  END LOOP;
END ADD_TEMPQUESTIONARIO_GERA_TAR;

/

create or replace PROCEDURE ADD_TEMPQUESTIONARIO_GERA_ORC (
  p_sessaoClient                 IN VARCHAR,
  p_contadorSessao               IN NUMERIC,
  p_orcamento                    IN NUMBER,
  p_categoriaProjeto             IN NUMBER,
  r_numeroPersonalizacoesProjeto OUT NUMBER)
IS
  v_contadorCriar            NUMBER;
  v_contadorSalvar           NUMBER;
  v_conteudoComboItemList    CLOB;
  v_conteudoComboDisplayList CLOB;
BEGIN
  r_numeroPersonalizacoesProjeto := 0;
  UPDATE TEMPQUESTIONARIO
  SET excluido = 1
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  SELECT COALESCE (MAX (contador), 0)
  INTO v_contadorCriar
  FROM TEMPQUESTIONARIO
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  FOR a IN (
    SELECT
      a.personalizacaoProjeto,
      a.sequencia,
      a.descricao,
      a.tipoCampo,
      a.mascara,
      a.exibirCampo,
      a.tipoArquivo,
      a.obrigatorio,
      a.tabelaSistema,
      tabSist.nomeCampoCodigo,
      tabSist.tipoCampoCodigo,
      tabSist.numeroDigitosCodigo,
      tabSist.nomeCampoDescricao,
      tabSist.adicionarCodigoNaDescricao,
      tabSist.nomeCampoIdSeDiferenteCodigo,
      tabSist.numeroDigitosCampoId,
      COALESCE (b.idPersonProjetoOrcamento, 0) idPersonProjetoOrcamento,
      COALESCE (b.conteudo, a.conteudoSugestao) conteudo
    FROM PAPERSONALIZACOESPROJETO a
    JOIN SITABELASSISTEMA tabSist
    ON tabSist.tabelaSistema = a.tabelaSistema
    LEFT JOIN MOORCAMENTOXPERSPROJETO b
    ON b.personalizacaoProjeto = a.personalizacaoProjeto
    AND b.orcamento = p_orcamento
    WHERE a.categoriaProjeto = p_categoriaProjeto
    AND (a.ativo = 1
      OR b.idPersonProjetoOrcamento IS NOT NULL)
    ORDER BY
      a.sequencia,
      COALESCE (b.idPersonProjetoOrcamento, 0))
  LOOP
    r_numeroPersonalizacoesProjeto := r_numeroPersonalizacoesProjeto + 1;
    SELECT COALESCE (MAX (b.contador), 0)
    INTO v_contadorSalvar
    FROM TEMPQUESTIONARIO b
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.idQuestionario = a.personalizacaoProjeto
    AND b.idSalvar = a.idPersonProjetoOrcamento;
    IF v_contadorSalvar > 0 THEN
      UPDATE TEMPQUESTIONARIO b
      SET b.excluido = 0
      WHERE b.sessaoClient = p_sessaoClient
      AND b.contadorSessao = p_contadorSessao
      AND b.contador = v_contadorSalvar;
    ELSE
      v_contadorCriar            := v_contadorCriar + 1;
      v_conteudoComboItemList    := NULL;
      v_conteudoComboDisplayList := NULL;
      IF a.tabelaSistema = ' '
        AND a.tipoCampo = 'A'
        AND a.exibirCampo = 'P'
      THEN
        SELECT
          TO_CLOB (LISTAGG (opcoes.conteudo, ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',',''))),
          TO_CLOB (LISTAGG (REPLACE(opcoes.descricao,',',''), ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',','')))
        INTO
          v_conteudoComboItemList,
          v_conteudoComboDisplayList
        FROM PAOPCOESCOMBOPERSPROJETO opcoes
        WHERE opcoes.personalizacaoProjeto = a.personalizacaoProjeto
        AND opcoes.ativo = 1;
      END IF;
      INSERT INTO TEMPQUESTIONARIO (
        sessaoClient,
        contadorSessao,
        contador,
        excluido,
        ordenacao,
        subOrdenacao,
        idSalvar,
        idQuestionario,
        nomeCampo,
        tipoCampo,
        mascara,
        exibirCampo,
        obrigatorio,
        tabelaSistema,
        conteudoId,
        conteudoCodigo,
        conteudoCodigoDescricao,
        conteudoCombo,
        conteudoComboItemList,
        conteudoComboDisplayList,
        conteudoData,
        conteudoHora,
        conteudoLogico,
        conteudoNumerico,
        conteudoEdit,
        observacoes)
      VALUES (
        p_sessaoClient,
        p_contadorSessao,
        v_contadorCriar,
        0, -- excluido
        a.sequencia, -- ordenacao
        a.idPersonProjetoOrcamento, -- subOrdenacao
        a.idPersonProjetoOrcamento, -- idSalvar
        a.personalizacaoProjeto, -- idQuestionario
        a.descricao, -- nomeCampo,
        a.tipoCampo,
        a.mascara,
        a.exibirCampo,
        a.obrigatorio,
        a.tabelaSistema,
        CASE
          WHEN a.tabelaSistema <> ' '
          AND (a.nomeCampoIdSeDiferenteCodigo <> ' '
            OR a.tipoCampoCodigo = 'N')
          AND a.conteudo <> ' '
          THEN TO_NUMBER (a.conteudo)
          ELSE 0
        END, -- conteudoId
        CASE
          WHEN a.tabelaSistema <> ' '
          AND a.nomeCampoIdSeDiferenteCodigo = ' '
          AND a.tipoCampoCodigo <> 'N'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoCodigo,
        CASE
          WHEN a.tabelaSistema <> ' '
          AND a.conteudo <> ' '
          THEN BUSCA_CODIGO_DESCRICAO_CAMPO (
            a.tabelaSistema,
            a.conteudo,
            a.nomeCampoCodigo,
            a.tipoCampoCodigo,
            a.numeroDigitosCodigo,
            a.nomeCampoDescricao,
            a.adicionarCodigoNaDescricao,
            a.nomeCampoIdSeDiferenteCodigo,
            a.numeroDigitosCampoId)
          ELSE ' '
        END, -- conteudoCodigoDescricao,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'A'
          AND a.exibirCampo = 'P'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoCombo,
        v_conteudoComboItemList,
        v_conteudoComboDisplayList,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'D'
          AND a.conteudo <> ' '
          AND a.conteudo <> '00/00/0000'
          THEN TO_DATE (a.conteudo, 'DD/MM/YYYY')
          ELSE NULL
        END, -- conteudoData,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'H'
          AND a.conteudo <> ' '
          AND a.conteudo <> '00:00:00'
          THEN REPLACE (a.conteudo, ':', '')
          ELSE '000000'
        END, -- conteudoHora,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'L'
          AND a.conteudo = 'S'
          THEN 1
          ELSE 0
        END, -- conteudoLogico,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'N'
          AND a.conteudo <> ' '
          AND a.conteudo <> '0'
          THEN TO_NUMBER (a.conteudo)
          ELSE 0
        END, -- conteudoNumerico,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'A'
          AND a.exibirCampo <> 'P'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoEdit,
        ' '); -- observacoes
    END IF;
  END LOOP;
END ADD_TEMPQUESTIONARIO_GERA_ORC;

/

create or replace PROCEDURE ADD_TEMPQUESTIONARIO_GERA_PRE (
  p_sessaoClient                 IN VARCHAR,
  p_contadorSessao               IN NUMERIC,
  p_preDocumento                 IN NUMBER,
  p_categoriaProjeto             IN NUMBER,
  r_numeroPersonalizacoesProjeto OUT NUMBER)
IS
  v_contadorCriar            NUMBER;
  v_contadorSalvar           NUMBER;
  v_conteudoComboItemList    CLOB;
  v_conteudoComboDisplayList CLOB;
BEGIN
  r_numeroPersonalizacoesProjeto := 0;
  UPDATE TEMPQUESTIONARIO
  SET excluido = 1
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  SELECT COALESCE (MAX (contador), 0)
  INTO v_contadorCriar
  FROM TEMPQUESTIONARIO
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  FOR a IN (
    SELECT
      a.personalizacaoProjeto,
      a.sequencia,
      a.descricao,
      a.tipoCampo,
      a.mascara,
      a.exibirCampo,
      a.obrigatorio,
      a.tabelaSistema,
      tabSist.nomeCampoCodigo,
      tabSist.tipoCampoCodigo,
      tabSist.numeroDigitosCodigo,
      tabSist.nomeCampoDescricao,
      tabSist.adicionarCodigoNaDescricao,
      tabSist.nomeCampoIdSeDiferenteCodigo,
      tabSist.numeroDigitosCampoId,
      COALESCE (b.idPersonProjetoPreDocumento, 0) idPersonProjetoPreDocumento,
      COALESCE (b.conteudo, a.conteudoSugestao) conteudo
    FROM PAPERSONALIZACOESPROJETO a
    JOIN SITABELASSISTEMA tabSist
    ON tabSist.tabelaSistema = a.tabelaSistema
    LEFT JOIN MOPREDOCUMXPERSPROJETO b
    ON b.personalizacaoProjeto = a.personalizacaoProjeto
    AND b.preDocumento = p_preDocumento
    WHERE a.categoriaProjeto = p_categoriaProjeto
    AND (a.ativo = 1
      OR b.idPersonProjetoPreDocumento IS NOT NULL)
    ORDER BY
      a.sequencia,
      COALESCE (b.idPersonProjetoPreDocumento, 0))
  LOOP
    r_numeroPersonalizacoesProjeto := r_numeroPersonalizacoesProjeto + 1;
    SELECT COALESCE (MAX (b.contador), 0)
    INTO v_contadorSalvar
    FROM TEMPQUESTIONARIO b
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.idQuestionario = a.personalizacaoProjeto
    AND b.idSalvar = a.idPersonProjetoPreDocumento;
    IF v_contadorSalvar > 0 THEN
      UPDATE TEMPQUESTIONARIO b
      SET b.excluido = 0
      WHERE b.sessaoClient = p_sessaoClient
      AND b.contadorSessao = p_contadorSessao
      AND b.contador = v_contadorSalvar;
    ELSE
      v_contadorCriar            := v_contadorCriar + 1;
      v_conteudoComboItemList    := NULL;
      v_conteudoComboDisplayList := NULL;
      IF a.tabelaSistema = ' '
        AND a.tipoCampo = 'A'
        AND a.exibirCampo = 'P'
      THEN
        SELECT
          TO_CLOB (LISTAGG (opcoes.conteudo, ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',',''))),
          TO_CLOB (LISTAGG (REPLACE(opcoes.descricao,',',''), ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',','')))
        INTO
          v_conteudoComboItemList,
          v_conteudoComboDisplayList
        FROM PAOPCOESCOMBOPERSPROJETO opcoes
        WHERE opcoes.personalizacaoProjeto = a.personalizacaoProjeto
        AND opcoes.ativo = 1;
      END IF;
      INSERT INTO TEMPQUESTIONARIO (
        sessaoClient,
        contadorSessao,
        contador,
        excluido,
        ordenacao,
        subOrdenacao,
        idSalvar,
        idQuestionario,
        nomeCampo,
        tipoCampo,
        mascara,
        exibirCampo,
        obrigatorio,
        tabelaSistema,
        conteudoId,
        conteudoCodigo,
        conteudoCodigoDescricao,
        conteudoCombo,
        conteudoComboItemList,
        conteudoComboDisplayList,
        conteudoData,
        conteudoHora,
        conteudoLogico,
        conteudoNumerico,
        conteudoEdit,
        observacoes)
      VALUES (
        p_sessaoClient,
        p_contadorSessao,
        v_contadorCriar,
        0, -- excluido
        a.sequencia, -- ordenacao
        a.idPersonProjetoPreDocumento, -- subOrdenacao
        a.idPersonProjetoPreDocumento, -- idSalvar
        a.personalizacaoProjeto, -- idQuestionario
        a.descricao, -- nomeCampo,
        a.tipoCampo,
        a.mascara,
        a.exibirCampo,
        a.obrigatorio,
        a.tabelaSistema,
        CASE
          WHEN a.tabelaSistema <> ' '
          AND (a.nomeCampoIdSeDiferenteCodigo <> ' '
            OR a.tipoCampoCodigo = 'N')
          AND a.conteudo <> ' '
          THEN TO_NUMBER (a.conteudo)
          ELSE 0
        END, -- conteudoId
        CASE
          WHEN a.tabelaSistema <> ' '
          AND a.nomeCampoIdSeDiferenteCodigo = ' '
          AND a.tipoCampoCodigo <> 'N'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoCodigo,
        CASE
          WHEN a.tabelaSistema <> ' '
          AND a.conteudo <> ' '
          THEN BUSCA_CODIGO_DESCRICAO_CAMPO (
            a.tabelaSistema,
            a.conteudo,
            a.nomeCampoCodigo,
            a.tipoCampoCodigo,
            a.numeroDigitosCodigo,
            a.nomeCampoDescricao,
            a.adicionarCodigoNaDescricao,
            a.nomeCampoIdSeDiferenteCodigo,
            a.numeroDigitosCampoId)
          ELSE ' '
        END, -- conteudoCodigoDescricao,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'A'
          AND a.exibirCampo = 'P'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoCombo,
        v_conteudoComboItemList,
        v_conteudoComboDisplayList,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'D'
          AND a.conteudo <> ' '
          AND a.conteudo <> '00/00/0000'
          THEN TO_DATE (a.conteudo, 'DD/MM/YYYY')
          ELSE NULL
        END, -- conteudoData,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'H'
          AND a.conteudo <> ' '
          AND a.conteudo <> '00:00:00'
          THEN REPLACE (a.conteudo, ':', '')
          ELSE '000000'
        END, -- conteudoHora,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'L'
          AND a.conteudo = 'S'
          THEN 1
          ELSE 0
        END, -- conteudoLogico,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'N'
          AND a.conteudo <> ' '
          AND a.conteudo <> '0'
          THEN TO_NUMBER (a.conteudo)
          ELSE 0
        END, -- conteudoNumerico,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'A'
          AND a.exibirCampo <> 'P'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoEdit,
        ' '); -- observacoes
    END IF;
  END LOOP;
END ADD_TEMPQUESTIONARIO_GERA_PRE;

/

create or replace PROCEDURE ADD_TEMPQUESTIONARIO_GERA_DOC (
  p_sessaoClient                 IN VARCHAR,
  p_contadorSessao               IN NUMERIC,
  p_idDocumentoFiscal            IN NUMBER,
  p_categoriaProjeto             IN NUMBER,
  r_numeroPersonalizacoesProjeto OUT NUMBER)
IS
  v_contadorCriar            NUMBER;
  v_contadorSalvar           NUMBER;
  v_conteudoComboItemList    CLOB;
  v_conteudoComboDisplayList CLOB;
BEGIN
  r_numeroPersonalizacoesProjeto := 0;
  UPDATE TEMPQUESTIONARIO
  SET excluido = 1
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  SELECT COALESCE (MAX (contador), 0)
  INTO v_contadorCriar
  FROM TEMPQUESTIONARIO
  WHERE sessaoClient = p_sessaoClient
  AND contadorSessao = p_contadorSessao;
  FOR a IN (
    SELECT
      a.personalizacaoProjeto,
      a.sequencia,
      a.descricao,
      a.tipoCampo,
      a.mascara,
      a.exibirCampo,
      a.obrigatorio,
      a.tabelaSistema,
      tabSist.nomeCampoCodigo,
      tabSist.tipoCampoCodigo,
      tabSist.numeroDigitosCodigo,
      tabSist.nomeCampoDescricao,
      tabSist.adicionarCodigoNaDescricao,
      tabSist.nomeCampoIdSeDiferenteCodigo,
      tabSist.numeroDigitosCampoId,
      COALESCE (b.idPersonProjetoDocFiscal, 0) idPersonProjetoDocFiscal,
      COALESCE (b.conteudo, a.conteudoSugestao) conteudo
    FROM PAPERSONALIZACOESPROJETO a
    JOIN SITABELASSISTEMA tabSist
    ON tabSist.tabelaSistema = a.tabelaSistema
    LEFT JOIN MODOCFISCALXPERSPROJETO b
    ON b.personalizacaoProjeto = a.personalizacaoProjeto
    AND b.idDocumentoFiscal = p_idDocumentoFiscal
    WHERE a.categoriaProjeto = p_categoriaProjeto
    AND (a.ativo = 1
      OR b.idPersonProjetoDocFiscal IS NOT NULL)
    ORDER BY
      a.sequencia,
      COALESCE (b.idPersonProjetoDocFiscal, 0))
  LOOP
    r_numeroPersonalizacoesProjeto := r_numeroPersonalizacoesProjeto + 1;
    SELECT COALESCE (MAX (b.contador), 0)
    INTO v_contadorSalvar
    FROM TEMPQUESTIONARIO b
    WHERE b.sessaoClient = p_sessaoClient
    AND b.contadorSessao = p_contadorSessao
    AND b.idQuestionario = a.personalizacaoProjeto
    AND b.idSalvar = a.idPersonProjetoDocFiscal;
    IF v_contadorSalvar > 0 THEN
      UPDATE TEMPQUESTIONARIO b
      SET b.excluido = 0
      WHERE b.sessaoClient = p_sessaoClient
      AND b.contadorSessao = p_contadorSessao
      AND b.contador = v_contadorSalvar;
    ELSE
      v_contadorCriar            := v_contadorCriar + 1;
      v_conteudoComboItemList    := NULL;
      v_conteudoComboDisplayList := NULL;
      IF a.tabelaSistema = ' '
        AND a.tipoCampo = 'A'
        AND a.exibirCampo = 'P'
      THEN
        SELECT
          TO_CLOB (LISTAGG (opcoes.conteudo, ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',',''))),
          TO_CLOB (LISTAGG (REPLACE(opcoes.descricao,',',''), ',') WITHIN GROUP (ORDER BY opcoes.ordenacao, opcoes.conteudo, REPLACE(opcoes.descricao,',','')))
        INTO
          v_conteudoComboItemList,
          v_conteudoComboDisplayList
        FROM PAOPCOESCOMBOPERSPROJETO opcoes
        WHERE opcoes.personalizacaoProjeto = a.personalizacaoProjeto
        AND opcoes.ativo = 1;
      END IF;
      INSERT INTO TEMPQUESTIONARIO (
        sessaoClient,
        contadorSessao,
        contador,
        excluido,
        ordenacao,
        subOrdenacao,
        idSalvar,
        idQuestionario,
        nomeCampo,
        tipoCampo,
        mascara,
        exibirCampo,
        obrigatorio,
        tabelaSistema,
        conteudoId,
        conteudoCodigo,
        conteudoCodigoDescricao,
        conteudoCombo,
        conteudoComboItemList,
        conteudoComboDisplayList,
        conteudoData,
        conteudoHora,
        conteudoLogico,
        conteudoNumerico,
        conteudoEdit,
        observacoes)
      VALUES (
        p_sessaoClient,
        p_contadorSessao,
        v_contadorCriar,
        0, -- excluido
        a.sequencia, -- ordenacao
        a.idPersonProjetoDocFiscal, -- subOrdenacao
        a.idPersonProjetoDocFiscal, -- idSalvar
        a.personalizacaoProjeto, -- idQuestionario
        a.descricao, -- nomeCampo,
        a.tipoCampo,
        a.mascara,
        a.exibirCampo,
        a.obrigatorio,
        a.tabelaSistema,
        CASE
          WHEN a.tabelaSistema <> ' '
          AND (a.nomeCampoIdSeDiferenteCodigo <> ' '
            OR a.tipoCampoCodigo = 'N')
          AND a.conteudo <> ' '
          THEN TO_NUMBER (a.conteudo)
          ELSE 0
        END, -- conteudoId
        CASE
          WHEN a.tabelaSistema <> ' '
          AND a.nomeCampoIdSeDiferenteCodigo = ' '
          AND a.tipoCampoCodigo <> 'N'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoCodigo,
        CASE
          WHEN a.tabelaSistema <> ' '
          AND a.conteudo <> ' '
          THEN BUSCA_CODIGO_DESCRICAO_CAMPO (
            a.tabelaSistema,
            a.conteudo,
            a.nomeCampoCodigo,
            a.tipoCampoCodigo,
            a.numeroDigitosCodigo,
            a.nomeCampoDescricao,
            a.adicionarCodigoNaDescricao,
            a.nomeCampoIdSeDiferenteCodigo,
            a.numeroDigitosCampoId)
          ELSE ' '
        END, -- conteudoCodigoDescricao,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'A'
          AND a.exibirCampo = 'P'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoCombo,
        v_conteudoComboItemList,
        v_conteudoComboDisplayList,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'D'
          AND a.conteudo <> ' '
          AND a.conteudo <> '00/00/0000'
          THEN TO_DATE (a.conteudo, 'DD/MM/YYYY')
          ELSE NULL
        END, -- conteudoData,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'H'
          AND a.conteudo <> ' '
          AND a.conteudo <> '00:00:00'
          THEN REPLACE (a.conteudo, ':', '')
          ELSE '000000'
        END, -- conteudoHora,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'L'
          AND a.conteudo = 'S'
          THEN 1
          ELSE 0
        END, -- conteudoLogico,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'N'
          AND a.conteudo <> ' '
          AND a.conteudo <> '0'
          THEN TO_NUMBER (a.conteudo)
          ELSE 0
        END, -- conteudoNumerico,
        CASE
          WHEN a.tabelaSistema = ' '
          AND a.tipoCampo = 'A'
          AND a.exibirCampo <> 'P'
          AND a.conteudo <> ' '
          THEN a.conteudo
          ELSE ' '
        END, -- conteudoEdit,
        ' '); -- observacoes
    END IF;
  END LOOP;
END ADD_TEMPQUESTIONARIO_GERA_DOC;

/

create or replace FUNCTION FUNC_ADD_TEMPQUESTION_VALIDA (
  p_sessaoClient   IN VARCHAR,
  p_contadorSessao IN NUMERIC)
  RETURN CLOB
IS
  v_mensagemErro           CLOB;
  v_mensagemMultiplosErros CLOB;
  v_contador               NUMBER;
BEGIN
  v_mensagemErro := '';
  v_mensagemMultiplosErros := 'Os seguintes campos devem ser informados:';
  v_contador := 0;
  FOR a IN (
    SELECT a.nomeCampo
    FROM TEMPQUESTIONARIO a
    JOIN SITABELASSISTEMA tabSist
    ON tabSist.tabelaSistema = a.tabelaSistema
    WHERE a.sessaoClient = p_sessaoClient
    AND a.contadorSessao = p_contadorSessao
    AND a.excluido = 0
    AND a.obrigatorio = 1
    AND (a.tabelaSistema <> ' '
      AND ((tabSist.nomeCampoIdSeDiferenteCodigo <> ' '
          OR tabSist.tipoCampoCodigo = 'N')
        AND a.conteudoId = 0
        OR  tabSist.nomeCampoIdSeDiferenteCodigo = ' '
        AND tabSist.tipoCampoCodigo = 'N'
        AND a.conteudoCodigo = ' ')
      OR a.tabelaSistema = ' '
      AND (a.tipoCampo = 'D'
        AND (a.conteudoData IS NULL
          OR TO_CHAR (a.conteudoData, 'DD/MM/YYYY') = '00/00/0000')
        OR a.tipoCampo = 'H'
        AND (a.conteudoHora IS NULL
          OR a.conteudoHora = '000000')
        OR a.tipoCampo = 'N'
        AND a.conteudoNumerico = 0
        OR a.tipoCampo = 'A'
        AND (a.exibirCampo = 'P'
          AND a.conteudoCombo = ' '
          OR a.exibirCampo <> 'P'
          AND a.conteudoEdit = ' ')))
    ORDER BY
      a.ordenacao,
      a.subOrdenacao)
  LOOP
    v_mensagemErro := 'O campo "' || TRIM(a.nomeCampo) || '" deve ser informado.';
    v_mensagemMultiplosErros := v_mensagemMultiplosErros || '
' || TRIM(a.nomeCampo);
    v_contador := v_contador + 1;
  END LOOP;
  RETURN CASE WHEN v_contador > 2 THEN v_mensagemMultiplosErros ELSE v_mensagemErro END;
END;

/

UPDATE SIVERSOESSISTEMA SET dataLiberacaoVersao = TO_DATE ('21/01/2025', 'DD/MM/YYYY'), dataAtualizacaoVersao =  SYSDATE, observacoes = 'BETA 2' WHERE idVersaoSistema = 2024001006;

COMMIT;

-- FIM BETA 2 - 21/01/2025

-- PACONDPAGAMENTOPERMITIDAS
CREATE TABLE PACONDPAGAMENTOPERMITIDAS
  (
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    meioPagamento     NUMERIC (2,0) DEFAULT 0 NOT NULL,
    condicaoPagamento NUMERIC (4,0) DEFAULT 0 NOT NULL,
    tipoDocumento     NUMERIC (3,0) DEFAULT 0 NOT NULL,
    estabelecimento   NUMERIC (4,0) DEFAULT 0 NOT NULL,
    perfilUsuario     NUMERIC (6,0) DEFAULT 0 NOT NULL,
    usuario           NUMERIC (14,0) DEFAULT 0 NOT NULL,
    permitido         NUMERIC (1,0) DEFAULT 0 NOT NULL
  );
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PACONDPAGAMENTOPERMITIDAS_K2 ON PACONDPAGAMENTOPERMITIDAS (meioPagamento, condicaoPagamento, tipoDocumento, estabelecimento, perfilUsuario, usuario);
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_FK1 FOREIGN KEY (meioPagamento) REFERENCES SIMEIOSPAGAMENTO (meioPagamento);
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_FK2 FOREIGN KEY (condicaoPagamento) REFERENCES PACONDICOESPAGAMENTO (condicaoPagamento);
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_FK3 FOREIGN KEY (tipoDocumento) REFERENCES SITIPOSDOCUMENTO (tipoDocumento);
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_FK4 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_FK5 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PACONDPAGAMENTOPERMITIDAS ADD CONSTRAINT PACONDPAGAMENTOPERMITIDAS_FK6 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);

INSERT INTO PACONDPAGAMENTOPERMITIDAS (id, meioPagamento, condicaoPagamento, tipoDocumento, estabelecimento, perfilUsuario, usuario, permitido) VALUES (99999999999999, 0, 0, 0, 0, 0, 0, 1);

COMMIT;

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PACONDPAGAMENTOPERMITIDAS', 'Condições Pagamento Permitidas', 1, 31657, 'PA', 'id', 'N', 14, ' ', 1, ' ', 0, 800001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqCondicoesPagamentoPermitid', 1, 1, ' '); 

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (972, 'Condições Pagamento Permitidas', 1, 5060009720, 50, 'PAR', 0, 972, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqCondicoesPagamentoPermitid', ' ', 0, 0, NULL, ' ');

COMMIT;

create or replace PROCEDURE ADD_TROCA_PESSOA (
  p_pessoaDe   IN NUMBER,
  p_pessoaPara IN NUMBER)
IS
  v_existe NUMBER;
BEGIN
  -- Pessoa Fisica
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAPESSOASFISICAS
  WHERE pessoa = p_pessoaPara;
  IF v_existe = 0 THEN
    INSERT INTO CAPESSOASFISICAS (
      pessoa,
      sexo,
      rg,
      ufRg,
      orgaoEmissorRg,
      dataEmissaoRg,
      dataValidadeIdEstrangeiro,
      mae,
      pai,
      nacionalidade,
      municipioNaturalidade,
      tipoImovel,
      valorImovel,
      valorAluguelFinanciamento,
      desdeImovel,
      comprovouResidencia,
      comprovanteResidencia,
      escolaridade,
      ocupacaoPessoa,
      remuneracao,
      outrosRendimentos,
      comprovouRendimento,
      comprovanteRendimento,
      empregoRazaoSocial,
      empregoCnpjCpfIdEstrangeiro,
      empregoFone,
      empregoAdmissao,
      empregoCep,
      empregoTipoLogradouro,
      empregoLogradouro,
      empregoNumero,
      empregoComplemento,
      empregoBairroDistrito,
      empregoMunicipio,
      empregoPais,
      empregoObservacoes,
      estadoCivil,
      numeroDependentes,
      conjugeNome,
      conjugeCpf,
      conjugeRemuneracao,
      conjugeComprovouRendim,
      conjugeComprovanteRendim,
      conjugeFone,
      possuiCartaoCredito,
      bandeiraCartaoDebCred,
      ultimosDigitosCartaoCred,
      credscoreData,
      credscoreNota,
      rendaPresumidaData,
      rendaPresumidaValor,
      consultaSpcData,
      estaNoSpc,
      registroSpcData,
      registroSpcValor,
      estaNoSpcLoja,
      estaEmCobranca,
      protestado)
    SELECT p_pessoaPara,
      sexo,
      rg,
      ufRg,
      orgaoEmissorRg,
      dataEmissaoRg,
      dataValidadeIdEstrangeiro,
      mae,
      pai,
      nacionalidade,
      municipioNaturalidade,
      tipoImovel,
      valorImovel,
      valorAluguelFinanciamento,
      desdeImovel,
      comprovouResidencia,
      comprovanteResidencia,
      escolaridade,
      ocupacaoPessoa,
      remuneracao,
      outrosRendimentos,
      comprovouRendimento,
      comprovanteRendimento,
      empregoRazaoSocial,
      empregoCnpjCpfIdEstrangeiro,
      empregoFone,
      empregoAdmissao,
      empregoCep,
      empregoTipoLogradouro,
      empregoLogradouro,
      empregoNumero,
      empregoComplemento,
      empregoBairroDistrito,
      empregoMunicipio,
      empregoPais,
      empregoObservacoes,
      estadoCivil,
      numeroDependentes,
      conjugeNome,
      conjugeCpf,
      conjugeRemuneracao,
      conjugeComprovouRendim,
      conjugeComprovanteRendim,
      conjugeFone,
      possuiCartaoCredito,
      bandeiraCartaoDebCred,
      ultimosDigitosCartaoCred,
      credscoreData,
      credscoreNota,
      rendaPresumidaData,
      rendaPresumidaValor,
      consultaSpcData,
      estaNoSpc,
      registroSpcData,
      registroSpcValor,
      estaNoSpcLoja,
      estaEmCobranca,
      protestado
    FROM CAPESSOASFISICAS
    WHERE pessoa = p_pessoaDe;
  END IF;
  -- Transportadora
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CATRANSPORTADORAS
  WHERE transportadora = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CATRANSPORTADORAS a
    SET a.ativo            = 1
    WHERE a.transportadora = p_pessoaPara
    AND a.ativo            = 0
    AND EXISTS
      (SELECT 1
      FROM CATRANSPORTADORAS b
      WHERE b.transportadora = p_pessoaDe
      AND b.ativo            = 1
      );
  ELSE
    INSERT INTO CATRANSPORTADORAS (
      transportadora,
      ativo)
    SELECT p_pessoaPara,
      ativo
    FROM CATRANSPORTADORAS
    WHERE transportadora = p_pessoaDe;
  END IF;
  -- Vendedor
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAVENDEDORES
  WHERE vendedor = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CAVENDEDORES a
    SET a.ativo      = 1
    WHERE a.vendedor = p_pessoaPara
    AND a.ativo      = 0
    AND EXISTS
      (SELECT 1 FROM CAVENDEDORES b WHERE b.vendedor = p_pessoaDe AND b.ativo = 1
      );
  ELSE
    INSERT INTO CAVENDEDORES (
      vendedor,
      ativo)
    SELECT
      p_pessoaPara,
      ativo
    FROM CAVENDEDORES
    WHERE vendedor = p_pessoaDe;
  END IF;
  -- Comissionado B
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACOMISSIONADOSB
  WHERE comissionadoB = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CACOMISSIONADOSB a
    SET a.ativo           = 1
    WHERE a.comissionadoB = p_pessoaPara
    AND a.ativo           = 0
    AND EXISTS
      (SELECT 1
      FROM CACOMISSIONADOSB b
      WHERE b.comissionadoB = p_pessoaDe
      AND b.ativo           = 1
      );
  ELSE
    INSERT INTO CACOMISSIONADOSB (
      comissionadoB,
      ativo)
    SELECT p_pessoaPara,
      ativo
    FROM CACOMISSIONADOSB
    WHERE comissionadoB = p_pessoaDe;
  END IF;
  -- Comissionado C
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACOMISSIONADOSC
  WHERE comissionadoC = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CACOMISSIONADOSC a
    SET a.ativo           = 1
    WHERE a.comissionadoC = p_pessoaPara
    AND a.ativo           = 0
    AND EXISTS
      (SELECT 1
      FROM CACOMISSIONADOSC b
      WHERE b.comissionadoC = p_pessoaDe
      AND b.ativo           = 1
      );
  ELSE
    INSERT INTO CACOMISSIONADOSC (
      comissionadoC,
      ativo,
      percentualComissaoB,
      percentualComissaoC)
    SELECT p_pessoaPara,
      ativo,
      percentualComissaoB,
      percentualComissaoC
    FROM CACOMISSIONADOSC
    WHERE comissionadoC = p_pessoaDe;
  END IF;
  -- Colaborador
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACOLABORADORES
  WHERE colaborador = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CACOLABORADORES a
    SET a.ativo         = 1
    WHERE a.colaborador = p_pessoaPara
    AND a.ativo         = 0
    AND EXISTS
      (SELECT 1
      FROM CACOLABORADORES b
      WHERE b.colaborador = p_pessoaDe
      AND b.ativo         = 1
      );
  ELSE
    INSERT INTO CACOLABORADORES (
      colaborador,
      ativo,
      permiteDescontoEmFolha)
    SELECT p_pessoaPara,
      ativo,
      permiteDescontoEmFolha
    FROM CACOLABORADORES
    WHERE colaborador = p_pessoaDe;
  END IF;
  -- Usuário
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAUSUARIOS
  WHERE usuario = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CAUSUARIOS a
    SET a.login = COALESCE((SELECT MAX(b.login)
      FROM CAUSUARIOS b
      WHERE b.usuario = p_pessoaDe),' '),
      a.senha = COALESCE((SELECT MAX(b.senha)
      FROM CAUSUARIOS b
      WHERE b.usuario = p_pessoaDe),' '),
      a.ativo     = 1
    WHERE a.usuario = p_pessoaPara
    AND a.ativo     = 0
    AND EXISTS
      (SELECT 1
      FROM CAUSUARIOS b
      WHERE b.usuario = p_pessoaDe
      AND b.ativo     = 1
      );
  ELSE
    INSERT INTO CAUSUARIOS (
      usuario,
      ativo,
      login,
      senha,
      perfilUsuario)
    SELECT p_pessoaPara,
      ativo,
      login,
      senha,
      perfilUsuario
    FROM CAUSUARIOS
    WHERE usuario = p_pessoaDe;
  END IF;
  -- Técnico
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CATECNICOS
  WHERE tecnico = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CATECNICOS a
    SET a.ativo     = 1
    WHERE a.tecnico = p_pessoaPara
    AND a.ativo     = 0
    AND EXISTS
      (SELECT 1
      FROM CATECNICOS b
      WHERE b.tecnico = p_pessoaDe
      AND b.ativo     = 1
      );
  ELSE
    INSERT INTO CATECNICOS (
      tecnico,
      ativo,
      equipeTecnica)
    SELECT p_pessoaPara,
      ativo,
      equipeTecnica
    FROM CATECNICOS
    WHERE tecnico = p_pessoaDe;
  END IF;
  -- Separador
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CASEPARADORES
  WHERE separador = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CASEPARADORES a
    SET a.ativo       = 1
    WHERE a.separador = p_pessoaPara
    AND a.ativo       = 0
    AND EXISTS
      (SELECT 1
      FROM CASEPARADORES b
      WHERE b.separador = p_pessoaDe
      AND b.ativo       = 1
      );
  ELSE
    INSERT INTO CASEPARADORES (
      separador,
      ativo)
    SELECT
      p_pessoaPara,
      ativo
    FROM CASEPARADORES
    WHERE separador = p_pessoaDe;
  END IF;
  -- Profissional Registrado
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAPROFISSIONAISREGISTRAD
  WHERE profissionalRegistrado = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CAPROFISSIONAISREGISTRAD a
    SET a.ativo                    = 1
    WHERE a.profissionalRegistrado = p_pessoaPara
    AND a.ativo                    = 0
    AND EXISTS
      (SELECT 1
      FROM CAPROFISSIONAISREGISTRAD b
      WHERE b.profissionalRegistrado = p_pessoaDe
      AND b.ativo                    = 1
      );
  ELSE
    INSERT INTO CAPROFISSIONAISREGISTRAD (
      profissionalRegistrado,
      ativo,
      conselhoClasseProfissional,
      uf,
      registroConselhoClassePro)
    SELECT p_pessoaPara,
      ativo,
      conselhoClasseProfissional,
      uf,
      registroConselhoClassePro
    FROM CAPROFISSIONAISREGISTRAD
    WHERE profissionalRegistrado = p_pessoaDe;
  END IF;
  -- Credenciadora Cartão
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACREDENCIADORASCARTAO
  WHERE credenciadoraCartao = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CACREDENCIADORASCARTAO a
    SET a.ativo                 = 1
    WHERE a.credenciadoraCartao = p_pessoaPara
    AND a.ativo                 = 0
    AND EXISTS
      (SELECT 1
      FROM CACREDENCIADORASCARTAO b
      WHERE b.credenciadoraCartao = p_pessoaDe
      AND b.ativo                 = 1
      );
  ELSE
    INSERT INTO CACREDENCIADORASCARTAO (
      credenciadoraCartao,
      ativo,
      credenciadoraTef)
    SELECT p_pessoaPara,
      ativo,
      credenciadoraTef
    FROM CACREDENCIADORASCARTAO
    WHERE credenciadoraCartao = p_pessoaDe;
  END IF;
  -- Orgão Federal / Estadual / Municipal
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAORGAOSFEDERESTADMUNIC
  WHERE orgaoFederalEstadualMunicipal = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CAORGAOSFEDERESTADMUNIC a
    SET a.ativo                           = 1
    WHERE a.orgaoFederalEstadualMunicipal = p_pessoaPara
    AND a.ativo                           = 0
    AND EXISTS
      (SELECT 1
      FROM CAORGAOSFEDERESTADMUNIC b
      WHERE b.orgaoFederalEstadualMunicipal = p_pessoaDe
      AND b.ativo                           = 1
      );
  ELSE
    INSERT INTO CAORGAOSFEDERESTADMUNIC (
        orgaoFederalEstadualMunicipal,
        ativo,
        federalEstadualMunicipal)
    SELECT p_pessoaPara,
      ativo,
      federalEstadualMunicipal
    FROM CAORGAOSFEDERESTADMUNIC
    WHERE orgaoFederalEstadualMunicipal = p_pessoaDe;
  END IF;
  -- Pessoa Estabelecimento
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAPESSOAESTABELECIMENTOS
  WHERE pessoaEstabelecimento = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CAPESSOAESTABELECIMENTOS a
    SET a.ativo                   = 1
    WHERE a.pessoaEstabelecimento = p_pessoaPara
    AND a.ativo                   = 0
    AND EXISTS
      (SELECT 1
      FROM CAPESSOAESTABELECIMENTOS b
      WHERE b.pessoaEstabelecimento = p_pessoaDe
      AND b.ativo                   = 1
      );
  ELSE
    INSERT INTO CAPESSOAESTABELECIMENTOS (
      pessoaEstabelecimento,
      ativo)
    SELECT p_pessoaPara,
      ativo
    FROM CAPESSOAESTABELECIMENTOS
    WHERE pessoaEstabelecimento = p_pessoaDe;
  END IF;
  -- Cliente
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACLIENTES
  WHERE cliente = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CACLIENTES a
    SET a.ativo     = 1
    WHERE a.cliente = p_pessoaPara
    AND a.ativo     = 0
    AND EXISTS
      (SELECT 1
      FROM CACLIENTES b
      WHERE b.cliente = p_pessoaDe
      AND b.ativo     = 1
      );
  ELSE
    INSERT INTO CACLIENTES (
      cliente,
      ativo,
      permiteVendaACredito,
      permiteVendaConsignada,
      permiteVendaContaCorrente,
      convenio,
      classificacaoPessoa,
      pontuacaoCredito,
      limiteCredito,
      creditoPorParcela,
      percAcrescimoCredito,
      percEntradaMinima,
      condicaoPagamento,
      diaFixoVencimento)
    SELECT p_pessoaPara,
      ativo,
      permiteVendaACredito,
      permiteVendaConsignada,
      permiteVendaContaCorrente,
      convenio,
      classificacaoPessoa,
      pontuacaoCredito,
      limiteCredito,
      creditoPorParcela,
      percAcrescimoCredito,
      percEntradaMinima,
      condicaoPagamento,
      diaFixoVencimento
    FROM CACLIENTES
    WHERE cliente = p_pessoaDe;
  END IF;
  -- Fornecedor
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAFORNECEDORES
  WHERE fornecedor = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE CAFORNECEDORES a
    SET a.ativo        = 1
    WHERE a.fornecedor = p_pessoaPara
    AND a.ativo        = 0
    AND EXISTS
      (SELECT 1
      FROM CAFORNECEDORES b
      WHERE b.fornecedor = fornecedor
      AND b.ativo        = 1
      );
  ELSE
    INSERT INTO CAFORNECEDORES (
      fornecedor,
      ativo,
      condicaoPagamento,
      prazoEntrega,
      valorMinimoPedidoCompra)
    SELECT p_pessoaPara,
      ativo,
      condicaoPagamento,
      prazoEntrega,
      valorMinimoPedidoCompra
    FROM CAFORNECEDORES
    WHERE fornecedor = p_pessoaDe;
  END IF;
  -- Botões
  UPDATE CAAUTORIZADOSPESSOA       a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAAUTORIZADOSPESSOA b WHERE b.pessoa = p_pessoaPara AND b.pessoaAutorizada = a.pessoaAutorizada);
  UPDATE CAAUTORIZADOSPESSOA       a SET a.pessoaAutorizada = p_pessoaPara WHERE a.pessoaAutorizada = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAAUTORIZADOSPESSOA b WHERE b.pessoaAutorizada = p_pessoaPara AND b.pessoa = a.pessoa);
  UPDATE CAREFERBANCARIASPESSOA    a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAREFERBANCARIASPESSOA b WHERE b.pessoa = p_pessoaPara AND b.banco = a.banco AND b.agenciaBanco = a.agenciaBanco AND b.contaBanco = a.contaBanco);
  UPDATE CAREFERCOMERCIAISPESSOA   a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAREFERCOMERCIAISPESSOA b WHERE b.pessoa = p_pessoaPara AND b.empresa = a.empresa);
  UPDATE CAREFERPESSOAISPESSOA     a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAREFERPESSOAISPESSOA b WHERE b.pessoa = p_pessoaPara AND b.contato = a.contato);
  UPDATE CAPESSOAXARQUIVOS           SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE CAPESSOAXBIOMETRIAS       a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAPESSOAXBIOMETRIAS b WHERE b.pessoa = p_pessoaPara AND b.dedo = a.dedo);
  UPDATE CAPESSOAXUFS              a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAPESSOAXUFS b WHERE b.pessoa = p_pessoaPara AND b.uf = a.uf);
  UPDATE CAPESSOAXCONTASCONTABEIS  a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAPESSOAXCONTASCONTABEIS b WHERE b.pessoa = p_pessoaPara AND b.categoriaContabil = a.categoriaContabil AND b.idPlanoContaContabil = a.idPlanoContaContabil);
  UPDATE CAPLACAS                    SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
  UPDATE CAPESSOASXESTABELECIMTOS  a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAPESSOASXESTABELECIMTOS b WHERE b.pessoa = p_pessoaPara AND b.estabelecimento = a.estabelecimento);
  UPDATE CAPESSOASXESTABELECIMTOS  a SET a.ativo = 1 WHERE a.pessoa = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM CAPESSOASXESTABELECIMTOS b WHERE b.pessoa = p_pessoaDe AND b.estabelecimento = a.estabelecimento AND b.ativo = 1);
  -- Parâmetros / Cadastros
  UPDATE PAFILTROCABECXPESSOAS     a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAFILTROCABECXPESSOAS b WHERE b.pessoa = p_pessoaPara AND b.filtroCabecalho = a.filtroCabecalho);
  UPDATE PAFILTROCABECXPESSOAS     a SET a.ativo = 1 WHERE a.pessoa = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAFILTROCABECXPESSOAS b WHERE b.pessoa = p_pessoaDe AND b.filtroCabecalho = a.filtroCabecalho AND b.ativo = 1);
  UPDATE PAREGRASFRETE             a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAREGRASFRETE b WHERE b.pessoa = p_pessoaPara AND b.estabelecimento = a.estabelecimento AND b.uf = a.uf AND b.mesorregiaoGeografica = a.mesorregiaoGeografica AND b.microrregiaoGeografica = a.microrregiaoGeografica AND b.municipio = a.municipio AND b.bairroDistrito = a.bairroDistrito AND b.exclusivoPessoaA = a.exclusivoPessoaA AND b.exclusivoPessoaB = a.exclusivoPessoaB AND b.exclusivoPessoaC = a.exclusivoPessoaC AND b.exclusivoPessoaD = a.exclusivoPessoaD AND b.exclusivoPessoaE = a.exclusivoPessoaE);
  UPDATE CAGRADEPRODUTOXPESSOAS    a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAGRADEPRODUTOXPESSOAS b WHERE b.pessoa = p_pessoaPara AND b.gradeProduto = a.gradeProduto AND b.codigoProduto = a.codigoProduto);
  UPDATE PAPROJETOS                  SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE PACARTOESPROPRIOS           SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE CARECEITASLENTESCLIENTE     SET paciente = p_pessoaPara WHERE paciente = p_pessoaDe;
  UPDATE PAMETAXCONTEUDOS            SET comissionado = p_pessoaPara WHERE comissionado = p_pessoaDe;
  UPDATE PAMETAXCOMISSIONADO       a SET a.comissionado = p_pessoaPara WHERE a.comissionado = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMETAXCOMISSIONADO b WHERE b.comissionado = p_pessoaPara AND b.idMetaXConteudo = a.idMetaXConteudo);
  UPDATE PAMETAXCOMISSIONADO       a SET a.ativo = 1 WHERE a.comissionado = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAMETAXCOMISSIONADO b WHERE b.comissionado = p_pessoaDe AND b.idMetaXConteudo = a.idMetaXConteudo AND b.ativo = 1);
  UPDATE PAMODELOSFINANCEIRO         SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE PAOPERFISCALXPESSOAS      a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAOPERFISCALXPESSOAS b WHERE b.pessoa = p_pessoaPara AND b.operacaoFiscal = a.operacaoFiscal);
  UPDATE PAOPERFISCALXPESSOAS      a SET a.ativo = 1 WHERE a.pessoa = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAOPERFISCALXPESSOAS b WHERE b.pessoa = p_pessoaDe AND b.operacaoFiscal = a.operacaoFiscal AND b.ativo = 1);
  UPDATE PAMVAS                    a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMVAS b WHERE b.pessoa = p_pessoaPara AND b.idNcm = a.idNcm AND b.produto = a.produto AND b.origemMercadoria = a.origemMercadoria AND b.estabelecimento = a.estabelecimento AND b.ufOrigem = a.ufOrigem);
  UPDATE PADESONERACOESFISCAIS     a SET a.pessoa = p_pessoaPara WHERE a.pessoa = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PADESONERACOESFISCAIS b WHERE b.pessoa = p_pessoaPara AND b.idNcm = a.idNcm AND b.produto = a.produto AND b.origemMercadoria = a.origemMercadoria AND b.estabelecimento = a.estabelecimento AND b.ufOrigem = a.ufOrigem AND b.stICMS = a.stICMS);
  -- Movimentações
  UPDATE MOHISTORICOCREDITO          SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOCONTABEIS                 SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOORCAMENTOS                SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOORCAMENTOS                SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
  UPDATE MOORCAMENTOXITENS           SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOORCAMENTOXBLOQUEIOSEST    SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOCONTRATOS                 SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOCONTRATOS                 SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOPREDOCUMENTOS             SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOPREDOCUMENTOS             SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
  UPDATE MOPREDOCUMXITENS            SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOPREDOCUMXPAGAMENTOS       SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOPREDOCUMXBLOQUEIOSEST     SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MODOCFISCALXSERVICO         SET intermediario = p_pessoaPara WHERE intermediario = p_pessoaDe;
  UPDATE MODOCUMENTOSFISCAIS         SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MODOCUMENTOSFISCAIS         SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
  UPDATE MODOCFISCALXSERVICO         SET intermediario = p_pessoaPara WHERE intermediario = p_pessoaDe;
  UPDATE MODOCFISCALXNFREF           SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MODOCFISCALXITENS           SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MODOCFISCALXPAGAMENTOS      SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MODOCFISCALXBLOQUEIOSEST    SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOVALESDESCONTO             SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOVALESDESCONTO             SET beneficiario = p_pessoaPara WHERE beneficiario = p_pessoaDe;
  UPDATE MOFINANCEIROS               SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOFINANCEIROS               SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOFINANCEIROXCOMISSOES      SET comissionado = p_pessoaPara WHERE comissionado = p_pessoaDe;
  UPDATE MOFINANCEIROXBAIXAS         SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MONEGOCIACOESDIVIDAS        SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOREPARCELAMENTOS           SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOREPARCXPAGAMENTOS         SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOSPCREGISTROS              SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOHISTORICOCOBRANCA         SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOCRMS                      SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOPONTUACOES                SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOORCAMENTOXPAGAMENTOS      SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOPREVISOESFINANCEIRAS      SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOPREVISOESFINANCEIRAS      SET cobranca = p_pessoaPara WHERE cobranca = p_pessoaDe;
  UPDATE MOSEPARACOES                SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOSEPARACAOXITENS           SET pessoaParticipanteSaida = p_pessoaPara WHERE pessoaParticipanteSaida = p_pessoaDe;
  UPDATE MOSEPARACAOXITENS           SET pessoaParticipanteEntrada = p_pessoaPara WHERE pessoaParticipanteEntrada = p_pessoaDe;
  UPDATE MOSEPARACAOXBLOQUEIOSEST    SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOINVENTARIOESTOQUEXITENS   SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOINVENTARIOESTOQUEXFISC    SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOESTOQUES                  SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MODOCUMENTOSTROCA           SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MODOCTROCAXITENS            SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOBALANCOS                  SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MODOCUMENTOSTRANSFERENCIA   SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MODOCUMENTOTRANSFXITENS     SET pessoaParticipanteSaida = p_pessoaPara WHERE pessoaParticipanteSaida = p_pessoaDe;
  UPDATE MODOCUMENTOTRANSFXITENS     SET pessoaParticipanteEntrada = p_pessoaPara WHERE pessoaParticipanteEntrada = p_pessoaDe;
  UPDATE MODOCTRANSFXBLOQUEIOSEST    SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOCONSERTOS                 SET cliente = p_pessoaPara WHERE cliente = p_pessoaDe;
  UPDATE MORESERVASESTOQUE           SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOMOTIVOSBLOQUEIOS          SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOLOTESINGRESSO             SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE MOEVENTOS                   SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  -- Transportadoras
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CATRANSPORTADORAS
  WHERE transportadora = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Parâmetros
    UPDATE PAREGRASFRETE               SET transportadora = p_pessoaPara WHERE transportadora = p_pessoaDe;
    -- Cadastros
    UPDATE CAPLACAS                    SET transportadora = p_pessoaPara WHERE transportadora = p_pessoaDe;
    -- Movimentações
    UPDATE MOORCAMENTOS                SET transportadora = p_pessoaPara WHERE transportadora = p_pessoaDe;
    UPDATE MOPREDOCUMENTOS             SET transportadora = p_pessoaPara WHERE transportadora = p_pessoaDe;
    UPDATE MODOCUMENTOSFISCAIS         SET transportadora = p_pessoaPara WHERE transportadora = p_pessoaDe;
  END IF;
  -- Vendedores
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAVENDEDORES
  WHERE vendedor = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Parâmetros
    UPDATE PAFILTROPRODUTOXVENDEDOR  a SET a.vendedor = p_pessoaPara WHERE a.vendedor = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAFILTROPRODUTOXVENDEDOR b WHERE b.vendedor = p_pessoaPara AND b.filtroProduto = a.filtroProduto);
    UPDATE PAFILTROPRODUTOXVENDEDOR  a SET a.ativo = 1 WHERE a.vendedor = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAFILTROPRODUTOXVENDEDOR b WHERE b.vendedor = p_pessoaDe AND b.filtroProduto = a.filtroProduto AND b.ativo = 1);
    UPDATE PATABELAPRECOXVENDEDORES  a SET a.vendedor = p_pessoaPara WHERE a.vendedor = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PATABELAPRECOXVENDEDORES b WHERE b.vendedor = p_pessoaPara AND b.tabelaPreco = a.tabelaPreco);
    UPDATE PATABELAPRECOXVENDEDORES  a SET a.ativo = 1 WHERE a.vendedor = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PATABELAPRECOXVENDEDORES b WHERE b.vendedor = p_pessoaDe AND b.tabelaPreco = a.tabelaPreco AND b.ativo = 1);
    UPDATE PAMETAXVENDEDOR           a SET a.vendedor = p_pessoaPara WHERE a.vendedor = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMETAXVENDEDOR b WHERE b.vendedor = p_pessoaPara AND b.idMetaXConteudo = a.idMetaXConteudo);
    UPDATE PAMETAXVENDEDOR           a SET a.ativo = 1 WHERE a.vendedor = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAMETAXVENDEDOR b WHERE b.vendedor = p_pessoaDe AND b.idMetaXConteudo = a.idMetaXConteudo AND b.ativo = 1);
    -- Cadastros
    UPDATE CAVENDEDORESXCLIENTES     a SET a.vendedor = p_pessoaPara WHERE a.vendedor = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAVENDEDORESXCLIENTES b WHERE b.vendedor = p_pessoaPara AND b.cliente = a.cliente);
    UPDATE CAVENDEDORESXCLIENTES     a SET a.ativo = 1 WHERE a.vendedor = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM CAVENDEDORESXCLIENTES b WHERE b.vendedor = p_pessoaDe AND b.cliente = a.cliente AND b.ativo = 1);
    -- Movimentações
    UPDATE MOORCAMENTOS                SET ultimoVendedorItem = p_pessoaPara WHERE ultimoVendedorItem = p_pessoaDe;
    UPDATE MOORCAMENTOXITENS           SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MOCONTRATOS                 SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MOPREDOCUMENTOS             SET ultimoVendedorItem = p_pessoaPara WHERE ultimoVendedorItem = p_pessoaDe;
    UPDATE MOPREDOCUMXITENS            SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MODOCUMENTOSFISCAIS         SET ultimoVendedorItem = p_pessoaPara WHERE ultimoVendedorItem = p_pessoaDe;
    UPDATE MODOCFISCALXITENS           SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MOVALESDESCONTO             SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MODOCUMENTOSTROCA           SET ultimoVendedorItem = p_pessoaPara WHERE ultimoVendedorItem = p_pessoaDe;
    UPDATE MODOCTROCAXITENS            SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MODOCUMENTOSTRANSFERENCIA   SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MOCONSERTOS                 SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
    UPDATE MOMOTIVOSBLOQUEIOS          SET vendedor = p_pessoaPara WHERE vendedor = p_pessoaDe;
  END IF;
  -- Comissionado B
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACOMISSIONADOSB
  WHERE comissionadoB = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Movimentações
    UPDATE MOATENDIMENTOS              SET comissionadoB = p_pessoaPara WHERE comissionadoB = p_pessoaDe;
    UPDATE MOORCAMENTOS                SET comissionadoB = p_pessoaPara WHERE comissionadoB = p_pessoaDe;
    UPDATE MOCONTRATOS                 SET comissionadoB = p_pessoaPara WHERE comissionadoB = p_pessoaDe;
    UPDATE MOPREDOCUMENTOS             SET comissionadoB = p_pessoaPara WHERE comissionadoB = p_pessoaDe;
    UPDATE MODOCUMENTOSFISCAIS         SET comissionadoB = p_pessoaPara WHERE comissionadoB = p_pessoaDe;
  END IF;
  -- Comissionado C
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACOMISSIONADOSC
  WHERE comissionadoC = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Movimentações
    UPDATE MOATENDIMENTOS              SET comissionadoC = p_pessoaPara WHERE comissionadoC = p_pessoaDe;
    UPDATE MOORCAMENTOS                SET comissionadoC = p_pessoaPara WHERE comissionadoC = p_pessoaDe;
    UPDATE MOCONTRATOS                 SET comissionadoC = p_pessoaPara WHERE comissionadoC = p_pessoaDe;
    UPDATE MOPREDOCUMENTOS             SET comissionadoC = p_pessoaPara WHERE comissionadoC = p_pessoaDe;
    UPDATE MODOCUMENTOSFISCAIS         SET comissionadoC = p_pessoaPara WHERE comissionadoC = p_pessoaDe;
  END IF;
  -- Colaboradores
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACOLABORADORES
  WHERE colaborador = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Parâmetros
    UPDATE PAINDICADORES               SET colaboradorResponsavel = p_pessoaPara WHERE colaboradorResponsavel = p_pessoaDe;
    -- Movimentações
    UPDATE MOORCAMENTOS                SET colaboradorResponsavel = p_pessoaPara WHERE colaboradorResponsavel = p_pessoaDe;
    UPDATE MOPLANEJAMENTOATIVIDADES    SET colaboradorResponsavel = p_pessoaPara WHERE colaboradorResponsavel = p_pessoaDe;
    UPDATE MODOCUMENTOSTRANSFERENCIA   SET colaboradorResponsavelRetirada = p_pessoaPara WHERE colaboradorResponsavelRetirada = p_pessoaDe;
    UPDATE MODOCUMENTOSTRANSFERENCIA   SET colaboradorResponsavelRecebim  = p_pessoaPara WHERE colaboradorResponsavelRecebim  = p_pessoaDe;
    UPDATE MOORCAMENTOS                SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
    UPDATE MOCONTRATOS                 SET colaboradorResponsavel = p_pessoaPara WHERE colaboradorResponsavel = p_pessoaDe;
    UPDATE MOPREDOCUMENTOS             SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
    UPDATE MODOCUMENTOSFISCAIS         SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
    UPDATE MOENTREGAS                  SET motorista = p_pessoaPara WHERE motorista = p_pessoaDe;
    UPDATE MOPAINEISCOMPRA             SET comprador = p_pessoaPara WHERE comprador = p_pessoaDe;
    UPDATE MOLOTESINGRESSO             SET colaboradorResponsavel = p_pessoaPara WHERE colaboradorResponsavel = p_pessoaDe;
  END IF;
  -- Usuários
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAUSUARIOS
  WHERE usuario = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Parâmetros
    UPDATE PAMENUSCUSTOMIZADOS         SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MONOTIFICACOES              SET usuarioCriacao = p_pessoaPara WHERE usuarioCriacao = p_pessoaDe;
    UPDATE MONOTIFICACAOXUSUARIOS      SET usuarioNotificado = p_pessoaPara WHERE usuarioNotificado = p_pessoaDe;
    UPDATE MOMARCADORES                SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE PAWHATSAPPCONEXOES        a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAWHATSAPPCONEXOES b WHERE b.usuario = p_pessoaPara AND b.wsWhatsApp = a.wsWhatsApp AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAWHATSAPPCONEXOES        a SET a.ativo = 1 WHERE a.usuario = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAWHATSAPPCONEXOES b WHERE b.usuario = p_pessoaDe AND b.wsWhatsApp = a.wsWhatsApp AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.ativo = 1);
    UPDATE PAFILTROCABECXUSUARIOS    a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAFILTROCABECXUSUARIOS b WHERE b.usuario = p_pessoaPara AND b.filtroCabecalho = a.filtroCabecalho);
    UPDATE PAFILTROCABECXUSUARIOS    a SET a.ativo = 1 WHERE a.usuario = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAFILTROCABECXUSUARIOS b WHERE b.usuario = p_pessoaDe AND b.filtroCabecalho = a.filtroCabecalho AND b.ativo = 1);
    UPDATE PACLASSIFICPRODXREGRAS    a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACLASSIFICPRODXREGRAS b WHERE b.usuario = p_pessoaPara AND b.classificacaoProduto = a.classificacaoProduto AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACONFIGURACAOXCONTEUDOS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACONFIGURACAOXCONTEUDOS b WHERE b.usuario = p_pessoaPara AND b.configuracao = a.configuracao AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAPERSCAMPOSXCONTEUDOS    a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAPERSCAMPOSXCONTEUDOS b WHERE b.usuario = p_pessoaPara AND b.personalizacaoCampo = a.personalizacaoCampo AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMENUXPERMISSOES         a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMENUXPERMISSOES b WHERE b.usuario = p_pessoaPara AND b.tipoMenu = a.tipoMenu AND b.categoriaMenu = a.categoriaMenu AND b.menu = a.menu AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMENUXFAVORITOS          a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMENUXFAVORITOS b WHERE b.usuario = p_pessoaPara AND b.tipoMenu = a.tipoMenu AND b.categoriaMenu = a.categoriaMenu AND b.menu = a.menu AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMENUXATALHOS            a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMENUXATALHOS b WHERE b.usuario = p_pessoaPara AND b.tipoMenu = a.tipoMenu AND b.categoriaMenu = a.categoriaMenu AND b.menu = a.menu AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMENUXLAYOUTPESQUISA     a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMENUXLAYOUTPESQUISA b WHERE b.usuario = p_pessoaPara AND b.menu = a.menu AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.dispositivo = a.dispositivo);
    UPDATE PACARTEIRASFINPERMITIDAS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACARTEIRASFINPERMITIDAS b WHERE b.usuario = p_pessoaPara AND b.carteiraFinanceira = a.carteiraFinanceira AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACONTASFINANCPERMITIDAS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACONTASFINANCPERMITIDAS b WHERE b.usuario = p_pessoaPara AND b.contaFinanceira = a.contaFinanceira AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACONDPAGAMENTOPERMITIDAS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACONDPAGAMENTOPERMITIDAS b WHERE b.usuario = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.condicaoPagamento = a.condicaoPagamento AND b.tipoDocumento = a.tipoDocumento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACONDPAGAMENTOPERMITIDAS  a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND EXISTS (SELECT 1 FROM PACONDPAGAMENTOPERMITIDAS b WHERE b.usuario = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.condicaoPagamento = a.condicaoPagamento AND b.tipoDocumento = a.tipoDocumento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permitido = 1);
    UPDATE PAMODELOSFINANPERMITIDOS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMODELOSFINANPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.modeloFinanceiro = a.modeloFinanceiro AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMODELOSFINANPERMITIDOS  a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND EXISTS (SELECT 1 FROM PAMODELOSFINANPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.modeloFinanceiro = a.modeloFinanceiro AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permitido = 1);
    UPDATE PAMODELOSDOCUMPERMITIDOS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMODELOSDOCUMPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.modeloDocumento = a.modeloDocumento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMODELOSDOCUMPERMITIDOS  a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND EXISTS (SELECT 1 FROM PAMODELOSDOCUMPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.modeloDocumento = a.modeloDocumento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permitido = 1);
    UPDATE PALOCAISESTOQUEPERMITIDOS a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PALOCAISESTOQUEPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.localEstoque = a.localEstoque AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PALOCAISESTOQUEPERMITIDOS a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND EXISTS (SELECT 1 FROM PALOCAISESTOQUEPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.localEstoque = a.localEstoque AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permitido = 1);
    UPDATE PAVALIDACOESPESSOA        a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAVALIDACOESPESSOA b WHERE b.usuario = p_pessoaPara AND b.campoValidarPessoa = a.campoValidarPessoa AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.localValidarCampoPessoa = a.localValidarCampoPessoa AND b.meioPagamento = a.meioPagamento);
    UPDATE PACONTROLESENTREGA          SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE PAREGRASENTREGA             SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE PACONTROLESENTREGAPERMIT  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACONTROLESENTREGAPERMIT b WHERE b.usuario = p_pessoaPara AND b.controleEntrega = a.controleEntrega AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACONTROLESENTREGAPERMIT  a SET a.permiteOrcamento = 'S' WHERE a.usuario = p_pessoaPara AND a.permiteOrcamento <> 'S' AND EXISTS (SELECT 1 FROM PACONTROLESENTREGAPERMIT b WHERE b.usuario = p_pessoaPara AND b.controleEntrega = a.controleEntrega AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permiteOrcamento = 'S');
    UPDATE PACONTROLESENTREGAPERMIT  a SET a.permiteLogistica = 'S' WHERE a.usuario = p_pessoaPara AND a.permiteLogistica <> 'S' AND EXISTS (SELECT 1 FROM PACONTROLESENTREGAPERMIT b WHERE b.usuario = p_pessoaPara AND b.controleEntrega = a.controleEntrega AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permiteLogistica = 'S');
    UPDATE PALISTACOBRANCAXUSUARIOS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PALISTACOBRANCAXUSUARIOS b WHERE b.usuario = p_pessoaPara AND b.listaCobranca = a.listaCobranca);
    UPDATE PALISTACOBRANCAXUSUARIOS  a SET a.ativo = 1 WHERE a.usuario = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PALISTACOBRANCAXUSUARIOS b WHERE b.usuario = p_pessoaDe AND b.listaCobranca = a.listaCobranca AND b.ativo = 1);
    UPDATE PALISTACRMXUSUARIOS       a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PALISTACRMXUSUARIOS b WHERE b.usuario = p_pessoaPara AND b.listaCRM = a.listaCRM);
    UPDATE PALISTACRMXUSUARIOS       a SET a.ativo = 1 WHERE a.usuario = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PALISTACRMXUSUARIOS b WHERE b.usuario = p_pessoaDe AND b.listaCRM = a.listaCRM AND b.ativo = 1);
    UPDATE PAREGRASCREDITO             SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE PAMOTORCREDITO              SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE PAGERADORESRELPERMITIDOS  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAGERADORESRELPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.categoriaGeradorRelatorio = a.categoriaGeradorRelatorio AND b.geradorRelatorio = a.geradorRelatorio AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAGERADORESRELPERMITIDOS  a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND EXISTS (SELECT 1 FROM PAGERADORESRELPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.categoriaGeradorRelatorio = a.categoriaGeradorRelatorio AND b.geradorRelatorio = a.geradorRelatorio AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permitido = 1);
    UPDATE PAMOTIVOSBLOQPERMITIDOS   a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMOTIVOSBLOQPERMITIDOS b WHERE b.usuario = p_pessoaPara AND b.motivoBloqueioDocumento = a.motivoBloqueioDocumento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAETAPASORCAMENTODEPARA   a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAETAPASORCAMENTODEPARA b WHERE b.usuario = p_pessoaPara AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.etapaOrcamentoDe = a.etapaOrcamentoDe AND b.etapaOrcamentoPara = a.etapaOrcamentoPara);
    UPDATE PAETAPASORCAMENTOPERMITID a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAETAPASORCAMENTOPERMITID b WHERE b.usuario = p_pessoaPara AND b.etapaOrcamento = a.etapaOrcamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAETAPASORCAMENTOPERMITID a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND EXISTS (SELECT 1 FROM PAETAPASORCAMENTOPERMITID b WHERE b.usuario = p_pessoaPara AND b.etapaOrcamento = a.etapaOrcamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.permitido = 1);
    UPDATE PAEMAILS                  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAEMAILS b WHERE b.usuario = p_pessoaPara AND b.tipoEmail = a.tipoEmail AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAEMAILS                  a SET a.ativo = 1 WHERE a.usuario = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAEMAILS b WHERE b.usuario = p_pessoaDe AND b.tipoEmail = a.tipoEmail AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.ativo = 1);
    UPDATE PAWEBSERVICESCONEXOES     a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAWEBSERVICESCONEXOES b WHERE b.usuario = p_pessoaPara AND b.tipoWebService = a.tipoWebService AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAWEBSERVICESCONEXOES     a SET a.ativo = 1 WHERE a.usuario = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PAWEBSERVICESCONEXOES b WHERE b.usuario = p_pessoaDe AND b.tipoWebService = a.tipoWebService AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.ativo = 1);
    UPDATE PAIMAGENSSISTEMA          a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAIMAGENSSISTEMA b WHERE b.usuario = p_pessoaPara AND b.tipoImagemSistema = a.tipoImagemSistema AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.dispositivo = a.dispositivo);
    UPDATE PAIMPRESSORAXDOCUMENTO    a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAIMPRESSORAXDOCUMENTO b WHERE b.usuario = p_pessoaPara AND b.tipoDocumentoImpresso = a.tipoDocumentoImpresso AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.dispositivo = a.dispositivo AND b.enderecoMAC = a.enderecoMAC AND b.etapaOrcamento = a.etapaOrcamento);
    UPDATE PACAIXASUSUARIOS          a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACAIXASUSUARIOS b WHERE b.usuario = p_pessoaPara AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.dispositivo = a.dispositivo AND b.enderecoMAC = a.enderecoMAC);
    UPDATE PAMEIOSPAGAMENTOABRIRGAV  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMEIOSPAGAMENTOABRIRGAV b WHERE b.usuario = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMEIOSPAGAMENTOABRIRGAV  a SET a.abrirGaveta = 1 WHERE a.usuario = p_pessoaPara AND a.abrirGaveta = 0 AND EXISTS (SELECT 1 FROM PAMEIOSPAGAMENTOABRIRGAV b WHERE b.usuario = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.abrirGaveta = 1);
    UPDATE PAMEIOSPAGAMENTOAUTOEFET  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAMEIOSPAGAMENTOAUTOEFET b WHERE b.usuario = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAMEIOSPAGAMENTOAUTOEFET  a SET a.autoEfetivar = 1 WHERE a.usuario = p_pessoaPara AND a.autoEfetivar = 0 AND EXISTS (SELECT 1 FROM PAMEIOSPAGAMENTOAUTOEFET b WHERE b.usuario = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.autoEfetivar = 1);
    UPDATE PACONDICOESPAGAMENTOAUTO  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACONDICOESPAGAMENTOAUTO b WHERE b.usuario = p_pessoaPara AND b.condicaoPagamento = a.condicaoPagamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACONDICOESPAGAMENTOAUTO  a SET a.autoEfetivar = 1 WHERE a.usuario = p_pessoaPara AND a.autoEfetivar = 0 AND EXISTS (SELECT 1 FROM PACONDICOESPAGAMENTOAUTO b WHERE b.usuario = p_pessoaPara AND b.condicaoPagamento = a.condicaoPagamento AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario AND b.autoEfetivar = 1);
    UPDATE PAREGRASCAIXAS            a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAREGRASCAIXAS b WHERE b.usuario = p_pessoaPara AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PAREGRASMARGEMCONTRIBUIC  a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PAREGRASMARGEMCONTRIBUIC b WHERE b.usuario = p_pessoaPara AND b.estabelecimento = a.estabelecimento AND b.perfilUsuario = a.perfilUsuario);
    UPDATE PACATEGORIASPRODUTOSVENDA   SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE PAREGRASFAIXASATRASO        SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    -- Cadastros
    UPDATE CAPRODUTOS                  SET usuarioInclusao = p_pessoaPara WHERE usuarioInclusao = p_pessoaDe;
    UPDATE CAPRODUTOS                  SET usuarioAlteracao = p_pessoaPara WHERE usuarioAlteracao = p_pessoaDe;
    UPDATE CATABELAPRECOXALTERACOES    SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE CAPRODUTOXCONTROLEENTREGA   SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    -- Movimentações
    UPDATE MOCATEGORIASMENUUSUARIO   a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM MOCATEGORIASMENUUSUARIO b WHERE b.usuario = p_pessoaPara AND b.areaMenu = a.areaMenu AND b.tipoMenu = a.tipoMenu AND b.categoriaMenu = a.categoriaMenu);
    UPDATE MOGUIASMENUUSUARIO        a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM MOGUIASMENUUSUARIO b WHERE b.usuario = p_pessoaPara AND b.guia = a.guia AND b.categoria = a.categoria);
    UPDATE MOACESSOSMENU             a SET a.usuario = p_pessoaPara WHERE a.usuario = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM MOACESSOSMENU b WHERE b.usuario = p_pessoaPara AND b.menu = a.menu);
    UPDATE MOSESSOES                   SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOLOGALTERACOES             SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOCONSULTASDADOSCPF         SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOSPCCONSULTAS              SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOORCAMENTOXETAPAS          SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOORCAMENTOXBLOQUEIOSEST    SET usuarioLiberacao = p_pessoaPara WHERE usuarioLiberacao = p_pessoaDe;
    UPDATE MOSESSOESCAIXA              SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOPREDOCUMXSTATUS           SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOPREDOCUMXBLOQUEIOSEST     SET usuarioLiberacao = p_pessoaPara WHERE usuarioLiberacao = p_pessoaDe;
    UPDATE MODOCFISCALXSITUACOES       SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MODOCFISCALXBLOQUEIOSEST    SET usuarioLiberacao = p_pessoaPara WHERE usuarioLiberacao = p_pessoaDe;
    UPDATE MONEGOCIACOESDIVIDAS        SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOREPARCELAMENTOS           SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOSPCREGISTROS              SET usuarioRegistroSPC = p_pessoaPara WHERE usuarioRegistroSPC = p_pessoaDe;
    UPDATE MOSPCREGISTROS              SET usuarioExclusaoSPC = p_pessoaPara WHERE usuarioExclusaoSPC = p_pessoaDe;
    UPDATE MOHISTORICOCOBRANCA         SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOCRMS                      SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOCRMXHISTORICO             SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOARQUIVOSCOBRANCA          SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOPONTUACOES                SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOARQUIVOSCONCILIACOES      SET usuarioImportacao = p_pessoaPara WHERE usuarioImportacao = p_pessoaDe;
    UPDATE MOCONCILIACOESCARTOES       SET usuarioProcessamento = p_pessoaPara WHERE usuarioProcessamento = p_pessoaDe;
    UPDATE MOSEPARACAOXBLOQUEIOSEST    SET usuarioLiberacao = p_pessoaPara WHERE usuarioLiberacao = p_pessoaDe;
    UPDATE MODOCTRANSFXBLOQUEIOSEST    SET usuarioLiberacao = p_pessoaPara WHERE usuarioLiberacao = p_pessoaDe;
    UPDATE MOCONSERTOS                 SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOCONSERTOS                 SET usuarioLiberacao = p_pessoaPara WHERE usuarioLiberacao = p_pessoaDe;
    UPDATE MOENTREGAXSITUACOES         SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOMOTBLOQXLIBERACOES        SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
    UPDATE MOEVENTOS                   SET usuario = p_pessoaPara WHERE usuario = p_pessoaDe;
  END IF;
  -- Técnicos
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CATECNICOS
  WHERE tecnico = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Cadastros
    UPDATE CATECNICOSXCLIENTES       a SET a.tecnico = p_pessoaPara WHERE a.tecnico = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CATECNICOSXCLIENTES b WHERE b.tecnico = p_pessoaPara AND b.cliente = a.cliente);
    UPDATE CATECNICOSXCLIENTES       a SET a.ativo = 1 WHERE a.tecnico = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM CATECNICOSXCLIENTES b WHERE b.tecnico = p_pessoaDe AND b.cliente = a.cliente AND b.ativo = 1);
    -- Movimentações
    UPDATE MOORCAMENTOXATIVIDADEPREV   SET tecnico = p_pessoaPara WHERE tecnico = p_pessoaDe;
    UPDATE MOORCAMENTOXATIVIDADEREAL   SET tecnico = p_pessoaPara WHERE tecnico = p_pessoaDe;
  END IF;
  -- Separadores
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CASEPARADORES
  WHERE separador = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Movimentações
    UPDATE MOSEPARACOES                SET separador = p_pessoaPara WHERE separador = p_pessoaDe;
  END IF;
  -- Profissionais Registrados
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAPROFISSIONAISREGISTRAD
  WHERE profissionalRegistrado = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Parâmetros
    UPDATE PAESTABELECIMENTOS          SET contador = p_pessoaPara WHERE contador = p_pessoaDe;
    -- Cadastros
    UPDATE CARECEITASLENTESCLIENTE     SET medico = p_pessoaPara WHERE medico = p_pessoaDe;
  END IF;
  -- Credenciadoras Cartões
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACREDENCIADORASCARTAO
  WHERE credenciadoraCartao = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Parâmetros
    UPDATE PACONDPAGAMXBANDEIRASCART a SET a.credenciadoraCartao = p_pessoaPara WHERE a.credenciadoraCartao = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM PACONDPAGAMXBANDEIRASCART b WHERE b.credenciadoraCartao = p_pessoaPara AND b.meioPagamento = a.meioPagamento AND b.condicaoPagamento = a.condicaoPagamento AND b.estabelecimento = a.estabelecimento AND b.bandeiraCartaoDebCred = a.bandeiraCartaoDebCred);
    UPDATE PACONDPAGAMXBANDEIRASCART a SET a.ativo = 1 WHERE a.credenciadoraCartao = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM PACONDPAGAMXBANDEIRASCART b WHERE b.credenciadoraCartao = p_pessoaDe AND b.meioPagamento = a.meioPagamento AND b.condicaoPagamento = a.condicaoPagamento AND b.estabelecimento = a.estabelecimento AND b.bandeiraCartaoDebCred = a.bandeiraCartaoDebCred AND b.ativo = 1);
    -- Movimentações
    UPDATE MOFINANCEIROXCARTAO         SET credenciadoraCartao = p_pessoaPara WHERE credenciadoraCartao = p_pessoaDe;
  END IF;
  -- Estabelecimentos
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAPESSOAESTABELECIMENTOS
  WHERE pessoaEstabelecimento = p_pessoaPara;
  IF v_existe = 1 THEN
    UPDATE PAESTABELECIMENTOS          SET pessoaEstabelecimento = p_pessoaPara WHERE pessoaEstabelecimento = p_pessoaDe;
  END IF;
  -- Clientes
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CACLIENTES
  WHERE cliente = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Cadastros
    UPDATE CAVENDEDORESXCLIENTES     a SET a.cliente = p_pessoaPara WHERE a.cliente = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAVENDEDORESXCLIENTES b WHERE b.cliente = p_pessoaPara AND b.vendedor = a.vendedor);
    UPDATE CAVENDEDORESXCLIENTES     a SET a.ativo = 1 WHERE a.cliente = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM CAVENDEDORESXCLIENTES b WHERE b.cliente = p_pessoaDe AND b.vendedor = a.vendedor AND b.ativo = 1);
    UPDATE CATECNICOSXCLIENTES       a SET a.cliente = p_pessoaPara WHERE a.cliente = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CATECNICOSXCLIENTES b WHERE b.cliente = p_pessoaPara AND b.tecnico = a.tecnico);
    UPDATE CATECNICOSXCLIENTES       a SET a.ativo = 1 WHERE a.cliente = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM CATECNICOSXCLIENTES b WHERE b.cliente = p_pessoaDe AND b.tecnico = a.tecnico AND b.ativo = 1);
    UPDATE CARECEITASLENTESCLIENTE     SET cliente = p_pessoaPara WHERE cliente = p_pessoaDe;
    -- Movimentações
    UPDATE MOATENDIMENTOS              SET cliente = p_pessoaPara WHERE cliente = p_pessoaDe;
  END IF;
  -- Fornecedores
  SELECT COALESCE(MAX(1),0)
  INTO v_existe
  FROM CAFORNECEDORES
  WHERE fornecedor = p_pessoaPara;
  IF v_existe = 1 THEN
    -- Cadastros
    UPDATE CAPRODUTOXFORNECEDORES    a SET a.fornecedor = p_pessoaPara WHERE a.fornecedor = p_pessoaDe AND NOT EXISTS (SELECT 1 FROM CAPRODUTOXFORNECEDORES b WHERE b.fornecedor = p_pessoaPara AND b.produto = a.produto AND b.codigoProduto = a.codigoProduto);
    UPDATE CAPRODUTOXFORNECEDORES    a SET a.ativo = 1 WHERE a.fornecedor = p_pessoaPara AND a.ativo = 0 AND EXISTS (SELECT 1 FROM CAPRODUTOXFORNECEDORES b WHERE b.fornecedor = p_pessoaDe AND b.produto = a.produto AND b.codigoProduto = a.codigoProduto AND b.ativo = 1);
    -- Movimentações
    UPDATE MOORCAMENTOXRECEITASOCUL    SET laboratorio = p_pessoaPara WHERE laboratorio = p_pessoaDe;
    UPDATE MOCONSERTOS                 SET fornecedor = p_pessoaPara WHERE fornecedor = p_pessoaDe;
    UPDATE MOPAINEISCOMPRA             SET fornecedor = p_pessoaPara WHERE fornecedor = p_pessoaDe;
    UPDATE MOPAINELCOMPRAXITENS        SET fornecedor = p_pessoaPara WHERE fornecedor = p_pessoaDe;
  END IF;  
END ADD_TROCA_PESSOA;

/

INSERT INTO SICONFIGURACOES (configuracao, descricao, ativo, subcategoriaConfiguracao, tipoCampo, mascara, exibirCampo, tipoArquivo, conteudoSugestao, tabelaSistema, observacoes) values (430, 'Sugerir usuário Logado no técnico da atividade', 1, 30001, 'L', '1', 'E', 0, 'N', ' ', ' ');

COMMIT;

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

/

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_PREV_RECALC (
  p_usuarioLogado                IN NUMBER,
  p_perfilUsuarioLogado          IN NUMBER,
  p_estabelecimentoAtivo         IN NUMBER,
  p_person_190_modeloFrete       IN CHAR,
  p_config_64_casasDecSaidas     IN CHAR,
  p_config_65_casasDecEntrada    IN CHAR,
  p_config_198_obs_add_referenc  IN NUMBER,
  p_config_199_obs_add_caractA   IN NUMBER,
  p_config_200_obs_add_caractB   IN NUMBER,
  p_config_201_obs_add_caractC   IN NUMBER,
  p_config_202_obs_add_caractD   IN NUMBER,
  p_config_203_obs_add_caractE   IN NUMBER,
  p_config_209_filtrarGrupoEcon  IN NUMBER,
  p_config_362_calcCustoPorGrade IN NUMBER,
  p_config_378_calcularVolumes   IN NUMBER,
  p_config_413_obs_add_marca     IN NUMBER,
  p_config_418_obs_efetarEnter   IN NUMBER,
  p_config_430_sugerirUsuLogTec  IN NUMBER,
  p_idItemOrcamento              IN NUMBER)
IS
  v_calcularImpostos        NUMBER;
  v_ativ_numero             NUMBER;
  v_ativ_quantidade         NUMBER;
  v_ativ_precoUnitarioMenor NUMBER;
  v_ativ_precoUnitario      NUMBER;
  v_ativ_valorTotalItem     NUMBER;
  v_ativ_geraFinanceiro     NUMBER;
  v_auxNumber               NUMBER;
  v_auxVarchar              VARCHAR2 (32000);
BEGIN
  v_calcularImpostos := 0;
  SELECT
    COUNT (1) numeroAtividades,
    SUM (
      CASE
        WHEN prev.faturarAtividade = 'P'
        THEN prev.quantidade
        ELSE COALESCE ((
          SELECT realiz.quantidade
          FROM MOORCAMENTOXATIVIDADEREAL realiz
          WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
          AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
      END) quantidade,
    MIN (prev.precoUnitario) precoUnitarioMenor,
    MAX (prev.precoUnitario) precoUnitarioMaior,
    SUM (ROUND (
      CASE
        WHEN prev.faturarAtividade = 'P'
        THEN prev.quantidade
        ELSE COALESCE ((
          SELECT realiz.quantidade
          FROM MOORCAMENTOXATIVIDADEREAL realiz
          WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
          AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)
      END * prev.precoUnitario, 2)) valorTotalItem
  INTO
    v_ativ_numero,
    v_ativ_quantidade,
    v_ativ_precoUnitarioMenor,
    v_ativ_precoUnitario,
    v_ativ_valorTotalItem
  FROM MOORCAMENTOXATIVIDADEPREV prev
  WHERE prev.idItemOrcamento = p_idItemOrcamento
  AND prev.statusAtividadeServico <> 'C'
  AND prev.faturarAtividade IN ('P','R');
  IF v_ativ_numero > 0 THEN
    v_ativ_geraFinanceiro := 1;
    IF v_ativ_numero > 1
      AND v_ativ_precoUnitarioMenor <> v_ativ_precoUnitario
      AND v_ativ_quantidade <> 0
    THEN
      v_ativ_precoUnitario := ROUND (v_ativ_valorTotalItem / v_ativ_quantidade, TO_NUMBER (p_config_64_casasDecSaidas));
    END IF;
  ELSE
    SELECT
      COUNT (1) numeroAtividades,
      SUM (COALESCE ((
        SELECT realiz.quantidade
        FROM MOORCAMENTOXATIVIDADEREAL realiz
        WHERE realiz.idAtividadePrevOrcamento = prev.idAtividadePrevOrcamento
        AND realiz.statusAtividadeServico <> 'C'), prev.quantidade)) quantidade,
        MIN (prev.precoUnitario) precoUnitarioMenor,
        MAX (prev.precoUnitario) precoUnitarioMaior,
        SUM (ROUND (COALESCE ((
