CREATE TABLE PAMENUSCUSTOMIZADOS
  (
    idMenuCustomizado  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    descricao          VARCHAR (256) DEFAULT ' ' NOT NULL,
    ativo              NUMERIC (1,0) DEFAULT 0 NOT NULL,
    ordenacao          NUMERIC (11,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,
    areaMenu           NUMERIC (2,0) DEFAULT 0 NOT NULL,
    tipoMenu           CHAR (3) DEFAULT '   ' NOT NULL,
    categoriaMenu      NUMERIC (6,0) DEFAULT 0 NOT NULL,
    tipoAnexo          CHAR (1) DEFAULT ' ' NOT NULL,
    anexoAplicacao     NCLOB,
    filtrosNomePublico VARCHAR (4000) DEFAULT ' ' NOT NULL,
    observacoes        VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_PK1 PRIMARY KEY (idMenuCustomizado);
CREATE INDEX PAMENUSCUSTOMIZADOS_K2 ON PAMENUSCUSTOMIZADOS (descricao);
CREATE INDEX PAMENUSCUSTOMIZADOS_K3 ON PAMENUSCUSTOMIZADOS (ordenacao, descricao);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK1 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK2 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK4 FOREIGN KEY (areaMenu) REFERENCES SIAREASMENU (areaMenu);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK5 FOREIGN KEY (tipoMenu) REFERENCES SITIPOSMENU (tipoMenu);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK6 FOREIGN KEY (categoriaMenu) REFERENCES SICATEGORIASMENU (categoriaMenu);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK7 FOREIGN KEY (tipoAnexo) REFERENCES SITIPOSANEXO (tipoAnexo);

INSERT INTO PAMENUSCUSTOMIZADOS (idMenuCustomizado, descricao, ativo, ordenacao, estabelecimento, perfilUsuario, usuario, areaMenu, tipoMenu, categoriaMenu, tipoAnexo, anexoAplicacao, filtrosNomePublico, observacoes) VALUES (0, 'SELECIONE', 1, 0, 0, 0, 0, 0, '   ', 0, ' ', NULL, ' ', ' ');

COMMIT;

-- MOCATEGORIASMENUUSUARIO
CREATE TABLE MOCATEGORIASMENUUSUARIO
  (
    id            NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuario       NUMERIC (14,0) DEFAULT 0 NOT NULL,
    areaMenu      NUMERIC (2,0) DEFAULT 0 NOT NULL,
    tipoMenu      CHAR (3) DEFAULT '   ' NOT NULL,
    categoriaMenu NUMERIC (6,0) DEFAULT 0 NOT NULL,
    expandido     NUMERIC (1,0) DEFAULT 0 NOT NULL
  );
ALTER TABLE MOCATEGORIASMENUUSUARIO ADD CONSTRAINT MOCATEGORIASMENUUSUARIO_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX MOCATEGORIASMENUUSUARIO_K2 ON MOCATEGORIASMENUUSUARIO (usuario, areaMenu, tipoMenu, categoriaMenu);
ALTER TABLE MOCATEGORIASMENUUSUARIO ADD CONSTRAINT MOCATEGORIASMENUUSUARIO_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOCATEGORIASMENUUSUARIO ADD CONSTRAINT MOCATEGORIASMENUUSUARIO_FK2 FOREIGN KEY (areaMenu) REFERENCES SIAREASMENU (areaMenu);
ALTER TABLE MOCATEGORIASMENUUSUARIO ADD CONSTRAINT MOCATEGORIASMENUUSUARIO_FK3 FOREIGN KEY (tipoMenu) REFERENCES SITIPOSMENU (tipoMenu);
ALTER TABLE MOCATEGORIASMENUUSUARIO ADD CONSTRAINT MOCATEGORIASMENUUSUARIO_FK4 FOREIGN KEY (categoriaMenu) REFERENCES SICATEGORIASMENU (categoriaMenu);

INSERT INTO MOCATEGORIASMENUUSUARIO (id, usuario, areaMenu, tipoMenu, categoriaMenu, expandido) VALUES (0, 0, 0, '   ', 0, 0);

COMMIT;

-- MOGUIASMENUUSUARIO
CREATE TABLE MOGUIASMENUUSUARIO
  (
    id        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuario   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    guia      CHAR (1) DEFAULT ' ' NOT NULL,
    categoria VARCHAR (256) DEFAULT ' ' NOT NULL,
    expandido NUMERIC (1,0) DEFAULT 0 NOT NULL
  );
ALTER TABLE MOGUIASMENUUSUARIO ADD CONSTRAINT MOGUIASMENUUSUARIO_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX MOGUIASMENUUSUARIO_K2 ON MOGUIASMENUUSUARIO (usuario, guia, categoria);
ALTER TABLE MOGUIASMENUUSUARIO ADD CONSTRAINT MOGUIASMENUUSUARIO_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);

INSERT INTO MOGUIASMENUUSUARIO (id, usuario, guia, categoria, expandido) VALUES (0, 0, ' ', ' ', 0);

COMMIT;

-- MOACESSOSMENU
CREATE TABLE MOACESSOSMENU
  (
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuario           NUMERIC (14,0) DEFAULT 0 NOT NULL,
    menu              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizado NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ultimoAcesso      DATE,
    numeroAcessos     NUMERIC (11,0) DEFAULT 0 NOT NULL
  );
ALTER TABLE MOACESSOSMENU ADD CONSTRAINT MOACESSOSMENU_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX MOACESSOSMENU_K2 ON MOACESSOSMENU (usuario, menu, idMenuCustomizado);
ALTER TABLE MOACESSOSMENU ADD CONSTRAINT MOACESSOMENU_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOACESSOSMENU ADD CONSTRAINT MOACESSOMENU_FK2 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE MOACESSOSMENU ADD CONSTRAINT MOACESSOMENU_FK3 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);

INSERT INTO MOACESSOSMENU (id, usuario, menu, idMenuCustomizado, ultimoAcesso, numeroAcessos) VALUES (0, 0, 0, 0, NULL, 0);
INSERT INTO MOACESSOSMENU (id, usuario, menu, idMenuCustomizado, ultimoAcesso, numeroAcessos) SELECT a.id, a.usuario, a.menu, 0, a.ultimoAcesso, a.numeroAcessos FROM MOACESSOSMENU_2401 a WHERE a.id > 0 AND EXISTS (SELECT 1 FROM SIMENUS b WHERE b.menu = a.menu) AND NOT EXISTS (SELECT 1 FROM MOACESSOSMENU b WHERE b.usuario = a.usuario AND b.menu = a.menu AND b.idMenuCustomizado = 0);

COMMIT;

-- PAMENUXPERMISSOES
CREATE TABLE PAMENUXPERMISSOES
  (
    id                      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    areaMenu                NUMERIC (2,0) DEFAULT 0 NOT NULL,
    tipoMenu                CHAR (3) DEFAULT '   ' NOT NULL,
    categoriaMenu           NUMERIC (6,0) DEFAULT 0 NOT NULL,
    menu                    NUMERIC (10,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,
    descricao               VARCHAR (256) DEFAULT ' ' NOT NULL,
    visivel                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permitePesquisar        NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permiteCriar            NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permiteModificar        NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permiteExcluir          NUMERIC (1,0) DEFAULT 0 NOT NULL,
    periodoEdicao           NUMERIC (2,0) DEFAULT 0 NOT NULL,
    diasEdicao              NUMERIC (6,0) DEFAULT 0 NOT NULL,
    dataEdicao              DATE,
    periodoSugestaoPesquisa NUMERIC (2,0) DEFAULT 0 NOT NULL,
    diasSugestaoPesquisa    NUMERIC (6,0) DEFAULT 0 NOT NULL,
    dataSugestaoPesquisa    DATE,
    observacoes             VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAMENUXPERMISSOES_K2 ON PAMENUXPERMISSOES (areaMenu, tipoMenu, categoriaMenu, menu, estabelecimento, perfilUsuario, usuario);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK1 FOREIGN KEY (areaMenu) REFERENCES SIAREASMENU (areaMenu);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK2 FOREIGN KEY (tipoMenu) REFERENCES SITIPOSMENU (tipoMenu);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK3 FOREIGN KEY (categoriaMenu) REFERENCES SICATEGORIASMENU (categoriaMenu);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK4 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK5 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK6 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK7 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK8 FOREIGN KEY (periodoEdicao) REFERENCES SIPERIODOS (periodo);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK9 FOREIGN KEY (periodoSugestaoPesquisa) REFERENCES SIPERIODOS (periodo);

INSERT INTO PAMENUXPERMISSOES (id, areaMenu, tipoMenu, categoriaMenu, menu, estabelecimento, perfilUsuario, usuario, descricao, visivel, permitePesquisar, permiteCriar, permiteModificar, permiteExcluir, periodoEdicao, diasEdicao, dataEdicao, periodoSugestaoPesquisa, diasSugestaoPesquisa, dataSugestaoPesquisa, observacoes) VALUES (0, 0, '   ', 0, 0, 0, 0, 0, 'SELECIONE', 1, 1, 1, 1, 1, 0, 0, NULL, 0, 0, NULL, ' ');
INSERT INTO PAMENUXPERMISSOES (id, areaMenu, tipoMenu, categoriaMenu, menu, estabelecimento, perfilUsuario, usuario, descricao, visivel, permitePesquisar, permiteCriar, permiteModificar, permiteExcluir, periodoEdicao, diasEdicao, dataEdicao, periodoSugestaoPesquisa, diasSugestaoPesquisa, dataSugestaoPesquisa, observacoes) SELECT a.id, 0, CASE a.tipoMenu WHEN 'CO' THEN 'OCU' WHEN 'MA' THEN 'MAN' WHEN 'MO' THEN 'MOV' WHEN 'PA' THEN 'PAR' WHEN 'PE' THEN 'CAD' WHEN 'PR' THEN 'ROT' WHEN 'RE' THEN 'REL' WHEN 'SI' THEN 'SIS' ELSE '   ' END, 0, a.menu, a.estabelecimento, a.perfilUsuario, a.usuario, a.descricao, a.visivel, a.permitePesquisar, a.permiteCriar, a.permiteModificar, a.permiteExcluir, a.periodoEdicao, a.diasEdicao, a.dataEdicao, a.periodoSugestaoPesquisa, a.diasSugestaoPesquisa, a.dataSugestaoPesquisa, a.observacoes FROM PAMENUXPERMISSOES_2401 a WHERE a.id > 0 AND (a.menu = 0 AND a.categoriaMenu = 0 OR a.menu > 0 AND EXISTS (SELECT 1 FROM SIMENUS b WHERE b.menu = a.menu));

COMMIT;

-- PAMENUXFAVORITOS
CREATE TABLE PAMENUXFAVORITOS
  (
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    areaMenu          NUMERIC (2,0) DEFAULT 0 NOT NULL,
    tipoMenu          CHAR (3) DEFAULT '   ' NOT NULL,
    categoriaMenu     NUMERIC (6,0) DEFAULT 0 NOT NULL,
    menu              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizado NUMERIC (14,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,
    categoria         VARCHAR (256) DEFAULT ' ' NOT NULL,
    descricao         VARCHAR (256) DEFAULT ' ' NOT NULL,
    ativo             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAMENUXFAVORITOS_K2 ON PAMENUXFAVORITOS (areaMenu, tipoMenu, categoriaMenu, menu, idMenuCustomizado, estabelecimento, perfilUsuario, usuario);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK1 FOREIGN KEY (areaMenu) REFERENCES SIAREASMENU (areaMenu);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK2 FOREIGN KEY (tipoMenu) REFERENCES SITIPOSMENU (tipoMenu);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK3 FOREIGN KEY (categoriaMenu) REFERENCES SICATEGORIASMENU (categoriaMenu);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK4 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK5 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK6 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK7 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK8 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);

INSERT INTO PAMENUXFAVORITOS (id, areaMenu, tipoMenu, categoriaMenu, menu, idMenuCustomizado, estabelecimento, perfilUsuario, usuario, categoria, descricao, ativo, observacoes) VALUES (0, 0, '   ', 0, 0, 0, 0, 0, 0, ' ', 'SELECIONE', 1, ' ');
INSERT INTO PAMENUXFAVORITOS (id, areaMenu, tipoMenu, categoriaMenu, menu, idMenuCustomizado, estabelecimento, perfilUsuario, usuario, categoria, descricao, ativo, observacoes) SELECT FUNC_ADD_BUSCA_PROXIMO_ID ('PAMENUXFAVORITOS', 'id', 0, 1, NULL), 0, CASE a.tipoMenu WHEN 'CO' THEN 'OCU' WHEN 'MA' THEN 'MAN' WHEN 'MO' THEN 'MOV' WHEN 'PA' THEN 'PAR' WHEN 'PE' THEN 'CAD' WHEN 'PR' THEN 'ROT' WHEN 'RE' THEN 'REL' WHEN 'SI' THEN 'SIS' ELSE '   ' END, 0, a.menu, 0, a.estabelecimento, a.perfilUsuario, a.usuario, ' ', a.descricao, 1, a.observacoes FROM PAMENUXPERMISSOES_2401 a WHERE a.id > 0 AND a.favorito = 1 AND (a.menu = 0 AND a.categoriaMenu = 0 OR a.menu > 0 AND EXISTS (SELECT 1 FROM SIMENUS b WHERE b.menu = a.menu));

COMMIT;

-- PAMENUXATALHOS
CREATE TABLE PAMENUXATALHOS
  (
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    areaMenu          NUMERIC (2,0) DEFAULT 0 NOT NULL,
    tipoMenu          CHAR (3) DEFAULT '   ' NOT NULL,
    categoriaMenu     NUMERIC (6,0) DEFAULT 0 NOT NULL,
    menu              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizado NUMERIC (14,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,
    categoria         VARCHAR (256) DEFAULT ' ' NOT NULL,
    descricao         VARCHAR (256) DEFAULT ' ' NOT NULL,
    ativo             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAMENUXATALHOS_K2 ON PAMENUXATALHOS (areaMenu, tipoMenu, categoriaMenu, menu, idMenuCustomizado, estabelecimento, perfilUsuario, usuario);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK1 FOREIGN KEY (areaMenu) REFERENCES SIAREASMENU (areaMenu);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK2 FOREIGN KEY (tipoMenu) REFERENCES SITIPOSMENU (tipoMenu);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK3 FOREIGN KEY (categoriaMenu) REFERENCES SICATEGORIASMENU (categoriaMenu);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK4 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK5 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK6 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK7 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK8 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);

INSERT INTO PAMENUXATALHOS (id, areaMenu, tipoMenu, categoriaMenu, menu, idMenuCustomizado, estabelecimento, perfilUsuario, usuario, categoria, descricao, ativo, observacoes) VALUES (0, 0, '   ', 0, 0, 0, 0, 0, 0, ' ', 'SELECIONE', 1, ' ');
INSERT INTO PAMENUXATALHOS (id, areaMenu, tipoMenu, categoriaMenu, menu, idMenuCustomizado, estabelecimento, perfilUsuario, usuario, categoria, descricao, ativo, observacoes) SELECT FUNC_ADD_BUSCA_PROXIMO_ID ('PAMENUXATALHOS', 'id', 0, 1, NULL), 0, CASE a.tipoMenu WHEN 'CO' THEN 'OCU' WHEN 'MA' THEN 'MAN' WHEN 'MO' THEN 'MOV' WHEN 'PA' THEN 'PAR' WHEN 'PE' THEN 'CAD' WHEN 'PR' THEN 'ROT' WHEN 'RE' THEN 'REL' WHEN 'SI' THEN 'SIS' ELSE '   ' END, 0, a.menu, 0, a.estabelecimento, a.perfilUsuario, a.usuario, ' ', a.descricao, 1, a.observacoes FROM PAMENUXPERMISSOES_2401 a WHERE a.id > 0 AND a.atalho = 1 AND (a.menu = 0 AND a.categoriaMenu = 0 OR a.menu > 0 AND EXISTS (SELECT 1 FROM SIMENUS b WHERE b.menu = a.menu));

COMMIT;

-- MONOTIFICACOES
CREATE TABLE MONOTIFICACOES
  (
    idNotificacao     NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuarioCriacao    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    dataCriacao       DATE,
    assunto           VARCHAR (4000) DEFAULT ' ' NOT NULL,
    abrirTela         NUMERIC (1,0) DEFAULT 0 NOT NULL,
    enviarWhatsApp    NUMERIC (1,0) DEFAULT 0 NOT NULL,
    enviarEmail       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    tipoAnexo         CHAR (1) DEFAULT ' ' NOT NULL,
    anexo             NCLOB,
    filtros           VARCHAR (4000) DEFAULT ' ' NOT NULL,
    menu              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizado NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idRegistro        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    codigoRegistro    VARCHAR (256) DEFAULT ' ' NOT NULL,
    recorrencia       CHAR (1) DEFAULT ' ' NOT NULL,
    notificarAte      DATE
  );
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_PK1 PRIMARY KEY (idNotificacao);
CREATE INDEX MONOTIFICACOES_K2 ON MONOTIFICACOES (dataCriacao DESC);
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK1 FOREIGN KEY (usuarioCriacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK2 FOREIGN KEY (tipoAnexo) REFERENCES SITIPOSANEXO (tipoAnexo);
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK3 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK4 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK5 FOREIGN KEY (recorrencia) REFERENCES SIRECORRENCIAS (recorrencia);

INSERT INTO MONOTIFICACOES (idNotificacao, usuarioCriacao, dataCriacao, assunto, abrirTela, enviarWhatsApp, enviarEmail, tipoAnexo, anexo, filtros, menu, idMenuCustomizado, idRegistro, codigoRegistro, recorrencia, notificarAte) VALUES (0, 0, NULL, 'SELECIONE', 0, 0, 0, ' ', NULL, ' ', 0, 0, 0, ' ', ' ', NULL);

COMMIT;

-- MONOTIFICACAOXUSUARIOS
CREATE TABLE MONOTIFICACAOXUSUARIOS
  (
    id                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idNotificacao       NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuarioNotificado   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    dataNotificacao     DATE,
    situacaoNotificacao CHAR (1) DEFAULT ' ' NOT NULL,
    dataVisualizacao    DATE,
    arquivoGerado       VARCHAR (256) DEFAULT ' ' NOT NULL,
    dataEncerramento    DATE,
    observacoes         VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MONOTIFICACAOXUSUARIOS ADD CONSTRAINT MONOTIFICACAOXUSUARIOS_PK1 PRIMARY KEY (id);
CREATE INDEX MONOTIFICACAOXUSUARIOS_K2 ON MONOTIFICACAOXUSUARIOS (usuarioNotificado DESC, dataNotificacao DESC);
CREATE INDEX MONOTIFICACOES_K3 ON MONOTIFICACAOXUSUARIOS (usuarioNotificado DESC, situacaoNotificacao, dataNotificacao DESC);
ALTER TABLE MONOTIFICACAOXUSUARIOS ADD CONSTRAINT MONOTIFICACAOXUSUARIOS_FK1 FOREIGN KEY (idNotificacao) REFERENCES MONOTIFICACOES (idNotificacao);
ALTER TABLE MONOTIFICACAOXUSUARIOS ADD CONSTRAINT MONOTIFICACAOXUSUARIOS_FK2 FOREIGN KEY (usuarioNotificado) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MONOTIFICACAOXUSUARIOS ADD CONSTRAINT MONOTIFICACAOXUSUARIOS_FK3 FOREIGN KEY (situacaoNotificacao) REFERENCES SISITUACOESNOTIFICACOES (situacaoNotificacao);

INSERT INTO MONOTIFICACAOXUSUARIOS (id, idNotificacao, usuarioNotificado, dataNotificacao, situacaoNotificacao, dataVisualizacao, arquivoGerado, dataEncerramento, observacoes) VALUES (0, 0, 0, NULL, ' ', NULL, ' ', NULL, ' ');

COMMIT;

-- MOMARCADORES
CREATE TABLE MOMARCADORES
  (
    idMarcador        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuario           NUMERIC (14,0) DEFAULT 0 NOT NULL,
    categoria         VARCHAR (256) DEFAULT ' ' NOT NULL,
    ordenacao         NUMERIC (11,0) DEFAULT 0 NOT NULL,
    tipoAnexo         CHAR (1) DEFAULT ' ' NOT NULL,
    anexo             NCLOB,
    menu              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizado NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idRegistro        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    codigoRegistro    VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_PK1 PRIMARY KEY (idMarcador);
CREATE INDEX MOMARCADORES_K2 ON MOMARCADORES (usuario, categoria, ordenacao, idMarcador);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK2 FOREIGN KEY (tipoAnexo) REFERENCES SITIPOSANEXO (tipoAnexo);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK3 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK4 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);

INSERT INTO MOMARCADORES (idMarcador, usuario, categoria, ordenacao, tipoAnexo, anexo, menu, idMenuCustomizado, idRegistro, codigoRegistro, observacoes) VALUES (0, 0, ' ', 0, ' ', NULL, 0, 0, 0, ' ', ' ');

COMMIT;

ALTER TABLE SIDOCVERSOESSISTEMA ADD CONSTRAINT SIDOCVERSOESSISTEMA_FK3 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE PAGERADORRELCAMPOSVISAO ADD CONSTRAINT PAGERADORRELCAMPOSVISAO_FK3 FOREIGN KEY (menuPesquisa) REFERENCES SIMENUS (menu);
ALTER TABLE PAGERADORRELFILTROS ADD CONSTRAINT PAGERADORRELFILTROS_FK4 FOREIGN KEY (menuPesquisa) REFERENCES SIMENUS (menu);
ALTER TABLE PAMENUXLAYOUTPESQUISA ADD CONSTRAINT PAMENUXLAYOUTPESQUISA_FK1 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);


UPDATE SICONFIGURACOES SET descricao = 'Visualiza Programas de Tipo Menu Cadastro' WHERE configuracao = 116;
UPDATE SICONFIGURACOES SET descricao = 'Visualiza Programas de Tipo Menu Rotina' WHERE configuracao = 117;
UPDATE SICONFIGURACOES SET descricao = 'Visualiza Programas de Tipo Menu Oculto', conteudoSugestao = 'N' WHERE configuracao = 120;

COMMIT;

DROP TABLE TEMPETIQUETA;

CREATE TABLE TEMPETIQUETA
  (
    uniqueMachineID       VARCHAR (30) DEFAULT ' ' NOT NULL,
    contadorSessao        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    sequencial            NUMERIC (14,0) DEFAULT 0 NOT NULL,
    quantidadeEstoque     NUMERIC (15,6) DEFAULT 0 NOT NULL,
    quantidadeDocumento   NUMERIC (15,6) DEFAULT 0 NOT NULL,
    quantidadeEtiquetas   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    gradeProduto          NUMERIC (14,0) DEFAULT 0 NOT NULL,
    produtoImpresso       VARCHAR (60) DEFAULT ' ' NOT NULL,
    tabelaPreco           VARCHAR (10) DEFAULT ' ' NOT NULL,
    precoUnitarioAnterior NUMERIC (15,7) DEFAULT 0 NOT NULL,
    precoUnitarioAPrazo   NUMERIC (15,7) DEFAULT 0 NOT NULL,
    precoUnitarioAVista   NUMERIC (15,7) DEFAULT 0 NOT NULL,
    linhaA                VARCHAR (300) DEFAULT ' ' NOT NULL,
    linhaB                VARCHAR (300) DEFAULT ' ' NOT NULL,
    linhaC                VARCHAR (300) DEFAULT ' ' NOT NULL,
    linhaD                VARCHAR (300) DEFAULT ' ' NOT NULL,
    linhaE                VARCHAR (300) DEFAULT ' ' NOT NULL,
    linhaF                VARCHAR (60) DEFAULT ' ' NOT NULL,
    imagemServer          VARCHAR (256) DEFAULT ' ' NOT NULL,
    imagemClient          VARCHAR (256) DEFAULT ' ' NOT NULL
  );
ALTER TABLE TEMPETIQUETA ADD CONSTRAINT TEMPETIQUETA_PK1 PRIMARY KEY (uniqueMachineID, contadorSessao, sequencial);
CREATE INDEX TEMPETIQUETA_K2 ON TEMPETIQUETA (uniqueMachineID, contadorSessao, gradeProduto);

DELETE SISITUACOESNOTIFICACOES  WHERE situacaoNotificacao <> ' ';

INSERT INTO SISITUACOESNOTIFICACOES (situacaoNotificacao, ordenacao, descricao, ativo, observacoes) values ('P', 1, 'Pendente', 1, ' ');
INSERT INTO SISITUACOESNOTIFICACOES (situacaoNotificacao, ordenacao, descricao, ativo, observacoes) values ('E', 2, 'Enviado', 1, ' ');
INSERT INTO SISITUACOESNOTIFICACOES (situacaoNotificacao, ordenacao, descricao, ativo, observacoes) values ('V', 3, 'Visualizado', 1, ' ');
INSERT INTO SISITUACOESNOTIFICACOES (situacaoNotificacao, ordenacao, descricao, ativo, observacoes) values ('C', 4, 'Concluído', 1, ' ');
INSERT INTO SISITUACOESNOTIFICACOES (situacaoNotificacao, ordenacao, descricao, ativo, observacoes) values ('D', 6, 'Descartado', 1, ' ');

COMMIT;

UPDATE SITABELASSISTEMA SET ordenacao = 31003, tipoCampoCodigo = 'N' WHERE tabelaSistema = 'PAESTABXCONCILIACAOCARTOES';

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SITIPOSAGLUTINACOESCONTAB', 'Tipos Aglutinações Contábeis', 1, 809, 'SI', 'tipoAglutinacaoContabil', 'N', 2, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTiposAglutinacoesContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SITIPOSDOCUMENTOCONTABIL', 'Tipos Documento Contábil', 1, 809, 'SI', 'tipoDocumentoContabil', 'N', 3, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTiposDocumentosContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SILINHASCONTABEIS', 'Linhas Contábeis', 1, 809, 'SI', 'linhaContabil', 'N', 3, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqLinhasContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SIFILTROSCONTABEIS', 'Filtros Contábeis', 1, 809, 'SI', 'filtroContabil', 'N', 3, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqFiltrosContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PACATEGORIASCONTABEIS', 'Categorias Contábeis', 1, 30021, 'PA', 'categoriaContabil', 'N', 6, 'descricao', 1, ' ', 0, 100004, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqCategoriasContabeis', 1, 1, ' ');
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('CAPESSOAXCONTASCONTABEIS', 'Pessoa X Contas Contábeis', 1, 30395, 'CA', 'id', 'N', 14, ' ', 1, ' ', 0, 200001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqPessoaXContasContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('CAPRODUTOXCONTASCONTABEIS', 'Produto X Contas Contábeis', 1, 30734, 'CA', 'id', 'N', 14, ' ', 0, ' ', 0, 200002, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqProdutoXContasContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PACONTAFINANCEIRAXCONTAB', 'Conta Financeira X Contas Contábeis', 1, 31001, 'PA',  'id', 'N', 14, 'descricao', 1, ' ', 0, 100002, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqContFinacXContContabeis', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PACARTFINANCXCONTASCONTAB', 'Carteira Financeira X Contas Contábeis', 1, 30991, 'PA', 'id', 'N', 14, ' ', 1, ' ', 0, 100002, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqCartFinancXContContabeis', 1, 1, ' ');
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAREGRASCONTABILIZACAO', 'Regras Contabilização', 1, 30065, 'PA', 'idRegraContabilizacao', 'N', 14, 'descricao', 1, ' ', 0, 100004, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'RegrasContabilizacao', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAREGRACONTABXLINHAS', 'Regra Contabilização X Linhas', 1, 30066, 'PA', 'id', 'N', 14, ' ', 1, ' ', 0, 100004, ' ', ' ', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAREGRACONTABXFILTROS', 'Regra Contabilização X Filtros', 1, 30067, 'PA', 'id', 'N', 14, ' ', 1, ' ', 0, 100004, ' ', ' ', 1, 1, ' '); 

UPDATE SIMENUS SET descricao = 'Tipos Contabilização' WHERE menu = 913;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (915, 'Tipos Aglutinações Contábeis', 1, 7090009150, 70, 'SIS', 0, 915, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTiposAglutinacoesContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (916, 'Tipos Documento Contábil', 1, 7090009160, 70, 'SIS', 0, 916, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTiposDocumentosContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (917, 'Linhas Contábeis', 1, 7090009170, 70, 'SIS', 0, 917, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqLinhasContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (918, 'Filtros Contábeis', 1, 7090009180, 70, 'SIS', 0, 918, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqFiltrosContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (919, 'Categorias Contábeis', 1, 7060009190, 70, 'PAR', 0, 919, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqCategoriasContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (920, 'Pessoa X Contas Contábeis', 1, 7080009200, 70, 'OCU', 0, 920, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqPessoaXContasContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (921, 'Produto X Contas Contábeis', 1, 7080009210, 70, 'OCU', 0, 921, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqProdutoXContasContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (922, 'Conta Financeira X Contas Contábeis', 1, 7080009220, 70, 'OCU', 0, 922, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqContFinacXContContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (923, 'Carteira Financeira X Contas Contábeis', 1, 7080009230, 70, 'OCU', 0, 923, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqCartFinancXContContabeis', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (924, 'Regras Contabilização', 1, 7060009240, 70, 'PAR', 0, 924, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'RegrasContabilizacao', ' ', 0, 0, NULL, ' ');

COMMIT;

UPDATE SITABELASSISTEMA SET nomePublicoZoom = 'PesqContFinacXContaContabeis' WHERE tabelaSistema = 'PACONTAFINANCEIRAXCONTAB';
UPDATE SITABELASSISTEMA SET nomePublicoZoom = 'PesqCartFinancXContaContabeis' WHERE tabelaSistema = 'PACARTFINANCXCONTASCONTAB';

UPDATE SIMENUS SET nomePublico = 'PesqContFinacXContaContabeis' WHERE menu = 922;
UPDATE SIMENUS SET nomePublico = 'PesqCartFinancXContaContabeis' WHERE menu = 923;

UPDATE SITABELASSISTEMA SET descricao = 'Comissionados B' WHERE tabelaSistema = 'CACOMISSIONADOSB';
UPDATE SITABELASSISTEMA SET descricao = 'Comissionados C' WHERE tabelaSistema = 'CACOMISSIONADOSC';

UPDATE SIMENUS SET descricao = 'Comissionados B' WHERE menu = 152;
UPDATE SIMENUS SET descricao = 'Comissionados C' WHERE menu = 153;

UPDATE SIMENUS SET tipoMenu = 'OCU' WHERE menu = 295;

UPDATE SITABELASSISTEMA SET descricao = 'Notificações', aplicacaoZoom = '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', nomePublicoZoom = 'PesqNotificacoes' WHERE tabelaSistema = 'MONOTIFICACOES';
UPDATE SITABELASSISTEMA SET descricao = 'Notificação X Usuários', aplicacaoZoom = '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', nomePublicoZoom = 'PesqNotificacaoXUsuarios' WHERE tabelaSistema = 'MONOTIFICACAOXUSUARIOS';
UPDATE SITABELASSISTEMA SET descricao = 'Marcadores', aplicacaoZoom = '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', nomePublicoZoom = 'PesqMarcadores' WHERE tabelaSistema = 'MOMARCADORES';
UPDATE SITABELASSISTEMA SET descricao = 'LOG´s Alteracoes', aplicacaoZoom = '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', nomePublicoZoom = 'PesqLogsAlteracoes' WHERE tabelaSistema = 'MOLOGALTERACOES';

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAMENUSCUSTOMIZADOS', 'Menus Customizados', 1, 30440, 'PA', 'idMenuCustomizado', 'N', 14, 'descricao', 1, ' ', 0, 100003, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenusCustomizados', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('MOGUIASMENUUSUARIO', 'Guias Menu Usuário', 1, 50001, 'MO', 'id', 'N', 14, ' ', 1, ' ', 0, 800001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqGuiasMenuUsuario', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAMENUXFAVORITOS', 'Menu X Favoritos', 1, 31651, 'PA', 'id', 'N', 14, 'descricao', 1, ' ', 0, 800001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenuXFavoritos', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAMENUXATALHOS', 'Menu X Atalhos', 1, 31652, 'PA', 'id', 'N', 14, 'descricao', 1, ' ', 0, 800001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenuXAtalhos', 1, 1, ' '); 

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (925, 'Menus Customizados', 1, 9080009250, 90, 'PAR', 0, 925, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenusCustomizados', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (926, 'Notificações', 1, 9010009260, 90, 'MOV', 0, 926, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqNotificacoes', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (927, 'Notificação X Usuários', 1, 9010009270, 90, 'MOV', 0, 927, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqNotificacaoXUsuarios', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (928, 'Marcadores', 1, 9010009280, 90, 'MOV', 0, 928, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMarcadores', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (929, 'Guias Menu Usuário', 1, 9090009290, 90, 'OCU', 0, 929, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqGuiasMenuUsuario', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (930, 'Menu X Favoritos', 1, 9060009300, 90, 'PAR', 0, 930, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenuXFavoritos', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (931, 'Menu X Atalhos', 1, 9060009310, 90, 'PAR', 0, 931, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenuXAtalhos', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (932, 'LOG´s Alteracoes', 1, 9010009320, 90, 'MOV', 0, 932, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqLogsAlteracoes', ' ', 0, 0, NULL, ' ');

COMMIT;

DROP INDEX PACONTASCONTABEIS_K2;
CREATE INDEX PACONTASCONTABEIS_K2 ON PACONTASCONTABEIS (idPlanoContaContabil, contaEstruturada, reduzido);

CREATE TABLE PAREGRASCONTABILIZACAO_2401 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,
    idPlanoContaContabil    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoDocumentoContabil   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,
    tipoAglutinacaoContabil NUMERIC (2,0) DEFAULT 0 NOT NULL,
    dataValidadeInicial     DATE,
    dataValidadeFinal       DATE,
    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 (idPlanoContaContabil, tipoDocumentoContabil, ordenacao, idRegraContabilizacao);
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_FK1 FOREIGN KEY (idPlanoContaContabil) REFERENCES PAPLANOSCONTASCONTABEIS (idPlanoContaContabil);
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_FK2 FOREIGN KEY (tipoDocumentoContabil) REFERENCES SITIPOSDOCUMENTOCONTABIL (tipoDocumentoContabil);
ALTER TABLE PAREGRASCONTABILIZACAO ADD CONSTRAINT PAREGRASCONTABILIZACAO_FK3 FOREIGN KEY (tipoAglutinacaoContabil) REFERENCES SITIPOSAGLUTINACOESCONTAB (tipoAglutinacaoContabil);

INSERT INTO PAREGRASCONTABILIZACAO (idRegraContabilizacao, idPlanoContaContabil, tipoDocumentoContabil, ordenacao, descricao, ativo, tipoAglutinacaoContabil, dataValidadeInicial, dataValidadeFinal, observacoes) VALUES (0, 0, 0, 0, 'SELECIONE', 1, 0, NULL, NULL, ' ');
INSERT INTO PAREGRASCONTABILIZACAO (idRegraContabilizacao, idPlanoContaContabil, tipoDocumentoContabil, ordenacao, descricao, ativo, tipoAglutinacaoContabil, dataValidadeInicial, dataValidadeFinal, observacoes) SELECT idRegraContabilizacao, idPlanoContaContabil, tipoDocumentoContabil, ordenacao, descricao, ativo, tipoAglutinacaoContabil, TO_DATE ('01/01/1900', 'DD/MM/YYYY'), TO_DATE ('31/12/2500', 'DD/MM/YYYY'), observacoes FROM PAREGRASCONTABILIZACAO_2401 WHERE 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);

-- FIM BETA 2 - 28/2/24

CREATE INDEX MOFINANCEIROXBAIXAS_K9 ON MOFINANCEIROXBAIXAS (observacoes);

DECLARE
  v_valorSaldo NUMBER;
BEGIN
  UPDATE MOFINANCEIROXBAIXAS baixFin SET
    baixFin.baixaAutomatica = 0,
    baixFin.unificadoReparcelado = 0
  WHERE baixFin.observacoes = 'MANUTENÇÃO VIA SCRIPT';
  COMMIT;
  FOR a IN (
    SELECT
      baixFin.idBaixaFinanceiro,
      baixFin.idFinanceiro,
      baixFin.valorBruto
    FROM MOFINANCEIROXBAIXAS baixFin
    WHERE baixFin.observacoes = 'MANUTENÇÃO VIA SCRIPT')
  LOOP
    ADD_FINANC_BAIXA_EXCLUI_CORREL (a.idBaixaFinanceiro);
    DELETE MOFINANCEIROXBAIXAS baixFin
    WHERE baixFin.idBaixaFinanceiro = a.idBaixaFinanceiro;
    UPDATE MOFINANCEIROS financ SET
      financ.saldo = financ.saldo + a.valorBruto,
      financ.efetivado = 0
    WHERE financ.idFinanceiro = a.idFinanceiro;
    COMMIT;
  END LOOP;
  FOR a IN (
    SELECT DISTINCT pagPre.preDocumento
    FROM MOFINANCEIROS financ
    JOIN MOPREDOCUMXPAGAMENTOS pagPre
    ON pagPre.idPagamentoPreDocumento = financ.idPagamentoPreDocumento
    JOIN MOPREDOCUMENTOS preDoc
    ON preDoc.preDocumento = pagPre.preDocumento
    WHERE financ.idPagamentoPreDocumento > 0
    AND financ.meioPagamento = 64
    AND financ.saldo > 0
    AND preDoc.statusPreDocumento <> 'F'
    AND NOT EXISTS (
      SELECT 1
      FROM MOPREDOCUMXITENS itemPre
      JOIN MOPREDOCUMXORCAMENTOITEM preXOrc
      ON preXOrc.idItemPreDocumento = itemPre.idItemPreDocumento
      WHERE itemPre.preDocumento = pagPre.preDocumento
      AND itemPre.cancelado = 0
      AND preXOrc.efetivacao = 1
      AND preXOrc.quantidade > 0
      AND (itemPre.quantidade
        - COALESCE((
            SELECT SUM (docXDoc.quantidade)
            FROM MOPREDOCUMXPREDOCUM docXDoc
            JOIN MOPREDOCUMXITENS itemDev
            ON itemDev.idItemPreDocumento = docXDoc.idItemPreDocumento
            JOIN MOPREDOCUMENTOS cabDev
            ON cabDev.preDocumento = itemDev.preDocumento
            WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
            AND itemDev.cancelado = 0
            AND NOT(cabDev.origemDocumento IN (6,9))),0)
        - COALESCE((
            SELECT SUM (docXDoc.quantidade)
            FROM MODOCFISCALXPREDOCUM docXDoc
            JOIN MODOCFISCALXITENS itemDev
            ON itemDev.idItemDocFiscal = docXDoc.idItemDocFiscal
            JOIN MODOCUMENTOSFISCAIS cabDev
            ON cabDev.idDocumentoFiscal = itemDev.idDocumentoFiscal
            WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
            AND itemDev.cancelado = 0
            AND NOT(cabDev.origemDocumento IN (6,9))),0)) > 0)
    AND NOT EXISTS (
      SELECT 1
      FROM MOPREDOCUMXITENS itemPre
      JOIN MOPREDOCUMXPREDOCUM docXDoc
      ON docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
      JOIN MOPREDOCUMXITENS itemNovo
      ON itemNovo.idItemPreDocumento = docXDoc.idItemPreDocumento
      JOIN MOPREDOCUMENTOS docNovo
      ON docNovo.preDocumento = itemNovo.preDocumento
      WHERE itemPre.preDocumento = pagPre.preDocumento
      AND itemPre.cancelado = 0
      AND docNovo.origemDocumento = 10)
    AND NOT EXISTS (
      SELECT 1
      FROM MOPREDOCUMXITENS itemPre
      JOIN MODOCFISCALXPREDOCUM docXDoc
      ON docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
      JOIN MODOCFISCALXITENS itemNovo
      ON itemNovo.idItemDocFiscal = docXDoc.idItemDocFiscal
      JOIN MODOCUMENTOSFISCAIS docNovo
      ON docNovo.idDocumentoFiscal = itemNovo.idDocumentoFiscal
      WHERE itemPre.preDocumento = pagPre.preDocumento
      AND itemPre.cancelado = 0
      AND docNovo.origemDocumento = 10))
  LOOP
    UPDATE MOPREDOCUMENTOS preDoc
    SET preDoc.statusPreDocumento = 'F'
    WHERE preDoc.preDocumento = a.preDocumento;
    COMMIT;
  END LOOP;
  FOR a IN (
    SELECT
      a.preDocumento,
      a.saldoNovo,
      a.saldoAtual
    FROM (
      SELECT
        a.preDocumento,
        COALESCE (ROUND ((
          SELECT SUM (itemPre.valorBasePagamento * (itemPre.quantidade
            - COALESCE((
                SELECT SUM (docXDoc.quantidade)
                FROM MOPREDOCUMXPREDOCUM docXDoc
                JOIN MOPREDOCUMXITENS itemDev
                ON itemDev.idItemPreDocumento = docXDoc.idItemPreDocumento
                JOIN MOPREDOCUMENTOS cabDev
                ON cabDev.preDocumento = itemDev.preDocumento
                WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
                AND itemDev.cancelado = 0
                AND NOT (cabDev.origemDocumento IN (6,9))),0)
            - COALESCE((
                SELECT SUM (docXDoc.quantidade)
                FROM MODOCFISCALXPREDOCUM docXDoc
                JOIN MODOCFISCALXITENS itemDev
                ON itemDev.idItemDocFiscal = docXDoc.idItemDocFiscal
                JOIN MODOCUMENTOSFISCAIS cabDev
                ON cabDev.idDocumentoFiscal = itemDev.idDocumentoFiscal
                WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
                AND itemDev.cancelado = 0
                AND NOT (cabDev.origemDocumento IN (6,9))),0)) / itemPre.quantidade)
          FROM MOPREDOCUMXITENS itemPre
          JOIN MOPREDOCUMXORCAMENTOITEM preXOrc
          ON preXOrc.idItemPreDocumento = itemPre.idItemPreDocumento
          WHERE itemPre.preDocumento = a.preDocumento
          AND itemPre.cancelado = 0
          AND itemPre.valorBasePagamento > 0
          AND preXOrc.efetivacao = 1
          AND preXOrc.quantidade > 0
          AND (itemPre.quantidade
            - COALESCE((
                SELECT SUM (docXDoc.quantidade)
                FROM MOPREDOCUMXPREDOCUM docXDoc
                JOIN MOPREDOCUMXITENS itemDev
                ON itemDev.idItemPreDocumento = docXDoc.idItemPreDocumento
                JOIN MOPREDOCUMENTOS cabDev
                ON cabDev.preDocumento = itemDev.preDocumento
                WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
                AND itemDev.cancelado = 0
                AND NOT(cabDev.origemDocumento IN (6,9))),0)
            - COALESCE((
                SELECT SUM (docXDoc.quantidade)
                FROM MODOCFISCALXPREDOCUM docXDoc
                JOIN MODOCFISCALXITENS itemDev
                ON itemDev.idItemDocFiscal = docXDoc.idItemDocFiscal
                JOIN MODOCUMENTOSFISCAIS cabDev
                ON cabDev.idDocumentoFiscal = itemDev.idDocumentoFiscal
                WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
                AND itemDev.cancelado = 0
                AND NOT(cabDev.origemDocumento IN (6,9))),0)) > 0), 2),0) saldoNovo,
        COALESCE (ROUND ((
          SELECT SUM (financ.saldo)
          FROM MOPREDOCUMXPAGAMENTOS pagPre
          JOIN MOFINANCEIROS financ
          ON financ.idPagamentoPreDocumento = pagPre.idPagamentoPreDocumento
          WHERE pagPre.preDocumento = a.preDocumento
          AND financ.meioPagamento = 64), 2),0) saldoAtual
      FROM (
        SELECT DISTINCT pagPre.preDocumento
        FROM MOFINANCEIROS financ
        JOIN MOPREDOCUMXPAGAMENTOS pagPre
        ON pagPre.idPagamentoPreDocumento = financ.idPagamentoPreDocumento
        JOIN MOPREDOCUMENTOS preDoc
        ON preDoc.preDocumento = pagPre.preDocumento
        WHERE financ.idPagamentoPreDocumento > 0
        AND financ.meioPagamento = 64
        AND (
          preDoc.statusPreDocumento = 'F'
          OR EXISTS (
            SELECT 1
            FROM MOPREDOCUMXITENS itemPre
            JOIN MOPREDOCUMXPREDOCUM docXDoc
            ON docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
            JOIN MOPREDOCUMXITENS itemNovo
            ON itemNovo.idItemPreDocumento = docXDoc.idItemPreDocumento
            JOIN MOPREDOCUMENTOS docNovo
            ON docNovo.preDocumento = itemNovo.preDocumento
            WHERE itemPre.preDocumento = pagPre.preDocumento
            AND itemPre.cancelado = 0
            AND docNovo.origemDocumento = 10)
          OR EXISTS (
            SELECT 1
            FROM MOPREDOCUMXITENS itemPre
            JOIN MODOCFISCALXPREDOCUM docXDoc
            ON docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
            JOIN MODOCFISCALXITENS itemNovo
            ON itemNovo.idItemDocFiscal = docXDoc.idItemDocFiscal
            JOIN MODOCUMENTOSFISCAIS docNovo
            ON docNovo.idDocumentoFiscal = itemNovo.idDocumentoFiscal
            WHERE itemPre.preDocumento = pagPre.preDocumento
            AND itemPre.cancelado = 0
            AND docNovo.origemDocumento = 10))) a) a
    WHERE a.saldoNovo <> a.saldoAtual)
  LOOP
    IF a.saldoNovo < a.saldoAtual THEN
      v_valorSaldo := a.saldoAtual - a.saldoNovo;
      FOR b IN (
        SELECT
          financ.idFinanceiro,
          financ.sessaoCaixa,
          financ.fatoContabil,
          financ.estabelecimento,
          financ.dataEmissao,
          financ.contaFinanceira,
          financ.pagamentoRecebimento,
          financ.cobranca,
          financ.meioPagamento,
          financ.carteiraFinanceira,
          financ.cotacao,
          financ.saldoIndexado,
          financ.saldo
        FROM MOPREDOCUMXPAGAMENTOS pagPre
        JOIN MOFINANCEIROS financ
        ON financ.idPagamentoPreDocumento = pagPre.idPagamentoPreDocumento
        WHERE pagPre.preDocumento = a.preDocumento
        AND pagPre.idPagamentoPreDocumento > 0
        AND financ.meioPagamento = 64
        AND financ.saldo > 0)
      LOOP
        IF v_valorSaldo >= b.saldo THEN
          INSERT INTO MOFINANCEIROXBAIXAS (
            idBaixaFinanceiro,
            sessaoCaixa,
            fatoContabil,
            idFinanceiro,
            estabelecimento,
            data,
            contaFinanceira,
            pagamentoRecebimento,
            operacaoFinanceira,
            cobranca,
            meioPagamento,
            carteiraFinanceira,
            cotacao,
            valorBrutoIndexado,
            valorBruto,
            valorVariacaoIndexador,
            valorJurosDeMora,
            valorMulta,
            valorTarifaCartao,
            valorDescontos,
            valorOutrosAcrescimos,
            valorLiquido,
            baixaAutomatica,
            unificadoReparcelado,
            observacoes)
          VALUES (
            FUNC_ADD_BUSCA_PROXIMO_ID('MOFINANCEIROXBAIXAS', 'idBaixaFinanceiro', 0, b.estabelecimento, NULL),
            b.sessaoCaixa,
            b.fatoContabil,
            b.idFinanceiro,
            b.estabelecimento,
            b.dataEmissao,
            b.contaFinanceira,
            b.pagamentoRecebimento,
            33,
            b.cobranca,
            b.meioPagamento,
            b.carteiraFinanceira,
            b.cotacao,
            b.saldoIndexado,
            b.saldo,
            0,
            0,
            0,
            0,
            0,
            0,
            b.saldo,
            0,
            0,
            'MANUTENÇÃO VIA SCRIPT');
          UPDATE MOFINANCEIROS financ SET
            financ.saldo         = 0,
            financ.saldoIndexado = 0,
            financ.efetivado     = 1
          WHERE financ.idFinanceiro = b.idFinanceiro;
          v_valorSaldo := v_valorSaldo - b.saldo;
        ELSIF v_valorSaldo > 0 THEN
          INSERT INTO MOFINANCEIROXBAIXAS (
            idBaixaFinanceiro,
            sessaoCaixa,
            fatoContabil,
            idFinanceiro,
            estabelecimento,
            data,
            contaFinanceira,
            pagamentoRecebimento,
            operacaoFinanceira,
            cobranca,
            meioPagamento,
            carteiraFinanceira,
            cotacao,
            valorBrutoIndexado,
            valorBruto,
            valorVariacaoIndexador,
            valorJurosDeMora,
            valorMulta,
            valorTarifaCartao,
            valorDescontos,
            valorOutrosAcrescimos,
            valorLiquido,
            baixaAutomatica,
            unificadoReparcelado,
            observacoes)
          VALUES (
            FUNC_ADD_BUSCA_PROXIMO_ID('MOFINANCEIROXBAIXAS', 'idBaixaFinanceiro', 0, b.estabelecimento, NULL),
            b.sessaoCaixa,
            b.fatoContabil,
            b.idFinanceiro,
            b.estabelecimento,
            b.dataEmissao,
            b.contaFinanceira,
            b.pagamentoRecebimento,
            33,
            b.cobranca,
            b.meioPagamento,
            b.carteiraFinanceira,
            b.cotacao,
            b.saldoIndexado,
            v_valorSaldo,
            0,
            0,
            0,
            0,
            0,
            0,
            v_valorSaldo,
            0,
            0,
            'MANUTENÇÃO VIA SCRIPT');
          v_valorSaldo := 0;
        END IF;
      END LOOP;
    ELSE
      v_valorSaldo := a.saldoNovo - a.saldoAtual;
      FOR b IN (
        SELECT
          baixFin.idBaixaFinanceiro,
          baixFin.idFinanceiro,
          baixFin.valorBruto
        FROM MOPREDOCUMXPAGAMENTOS pagPre
        JOIN MOFINANCEIROS financ
        ON financ.idPagamentoPreDocumento = pagPre.idPagamentoPreDocumento
        JOIN MOFINANCEIROXBAIXAS baixFin
        ON baixFin.idFinanceiro = financ.idFinanceiro
        WHERE pagPre.preDocumento = a.preDocumento
        AND pagPre.idPagamentoPreDocumento > 0
        AND financ.meioPagamento = 64
        AND baixFin.valorBruto > 0)
      LOOP
        IF v_valorSaldo >= b.valorBruto THEN
          ADD_FINANC_BAIXA_EXCLUI_CORREL (b.idBaixaFinanceiro);
          DELETE MOFINANCEIROXBAIXAS baixFin
          WHERE baixFin.idBaixaFinanceiro = b.idBaixaFinanceiro;
          UPDATE MOFINANCEIROS financ SET
            financ.saldo = financ.saldo + b.valorBruto,
            financ.efetivado = 0
          WHERE financ.idFinanceiro = b.idFinanceiro;
          v_valorSaldo := v_valorSaldo - b.valorBruto;
        ELSIF v_valorSaldo > 0 THEN
          UPDATE MOFINANCEIROXBAIXAS baixFin SET
            baixFin.valorBruto = baixFin.valorBruto - v_valorSaldo,
            baixFin.valorLiquido = baixFin.valorLiquido - v_valorSaldo
          WHERE baixFin.idBaixaFinanceiro = b.idBaixaFinanceiro;
          UPDATE MOFINANCEIROS financ SET
            financ.saldo = financ.saldo + v_valorSaldo,
            financ.efetivado = 0
          WHERE financ.idFinanceiro = b.idFinanceiro;
          v_valorSaldo := 0;
        END IF;
      END LOOP;
    END IF;
    COMMIT;
  END LOOP;
  FOR a IN (
    SELECT DISTINCT pagPre.preDocumento
    FROM MOFINANCEIROS financ
    JOIN MOPREDOCUMXPAGAMENTOS pagPre
    ON pagPre.idPagamentoPreDocumento = financ.idPagamentoPreDocumento
    JOIN MOPREDOCUMENTOS preDoc
    ON preDoc.preDocumento = pagPre.preDocumento
    WHERE financ.idPagamentoPreDocumento > 0
    AND financ.meioPagamento = 64
    AND preDoc.statusPreDocumento = 'F'
    AND EXISTS (
      SELECT 1
      FROM MOPREDOCUMXITENS itemPre
      JOIN MOPREDOCUMXORCAMENTOITEM preXOrc
      ON preXOrc.idItemPreDocumento = itemPre.idItemPreDocumento
      WHERE itemPre.preDocumento = pagPre.preDocumento
      AND itemPre.cancelado = 0
      AND preXOrc.efetivacao = 1
      AND preXOrc.quantidade > 0
      AND (itemPre.quantidade
        - COALESCE((
            SELECT SUM (docXDoc.quantidade)
            FROM MOPREDOCUMXPREDOCUM docXDoc
            JOIN MOPREDOCUMXITENS itemDev
            ON itemDev.idItemPreDocumento = docXDoc.idItemPreDocumento
            JOIN MOPREDOCUMENTOS cabDev
            ON cabDev.preDocumento = itemDev.preDocumento
            WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
            AND itemDev.cancelado = 0
            AND NOT(cabDev.origemDocumento IN (6,9))),0)
        - COALESCE((
            SELECT SUM (docXDoc.quantidade)
            FROM MODOCFISCALXPREDOCUM docXDoc
            JOIN MODOCFISCALXITENS itemDev
            ON itemDev.idItemDocFiscal = docXDoc.idItemDocFiscal
            JOIN MODOCUMENTOSFISCAIS cabDev
            ON cabDev.idDocumentoFiscal = itemDev.idDocumentoFiscal
            WHERE docXDoc.idItemPreDocReferenciado = itemPre.idItemPreDocumento
            AND itemDev.cancelado = 0
            AND NOT(cabDev.origemDocumento IN (6,9))),0)) > 0))
  LOOP
    UPDATE MOPREDOCUMENTOS preDoc
    SET preDoc.statusPreDocumento = 'A'
    WHERE preDoc.preDocumento = a.preDocumento;
    COMMIT;
  END LOOP;
END;

/

DELETE MOMARCADORES WHERE idMarcador > 0;
DELETE MONOTIFICACAOXUSUARIOS WHERE id > 0;
DELETE MONOTIFICACOES WHERE idNotificacao > 0;
DELETE MOACESSOSMENU WHERE idMenuCustomizado > 0;
DELETE PAMENUXATALHOS WHERE idMenuCustomizado > 0;
DELETE PAMENUXFAVORITOS WHERE idMenuCustomizado > 0;

ALTER TABLE MONOTIFICACOES DROP CONSTRAINT MONOTIFICACOES_FK4;
ALTER TABLE MOMARCADORES DROP CONSTRAINT MOMARCADORES_FK4;
ALTER TABLE PAMENUXFAVORITOS DROP CONSTRAINT PAMENUXFAVORITOS_FK5;
ALTER TABLE PAMENUXATALHOS DROP CONSTRAINT PAMENUXATALHOS_FK5;
ALTER TABLE MOACESSOSMENU DROP CONSTRAINT MOACESSOMENU_FK3;

DROP TABLE PAMENUSCUSTOMIZADOS;

-- PAMENUSCUSTOMIZADOS
CREATE TABLE PAMENUSCUSTOMIZADOS
  (
    idMenuCustomizado         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    descricao                 VARCHAR (256) DEFAULT ' ' NOT NULL,
    ativo                     NUMERIC (1,0) DEFAULT 0 NOT NULL,
    ordenacao                 NUMERIC (11,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,
    areaMenu                  NUMERIC (2,0) DEFAULT 0 NOT NULL,
    tipoMenu                  CHAR (3) DEFAULT '   ' NOT NULL,
    categoriaMenu             NUMERIC (6,0) DEFAULT 0 NOT NULL,
    tipoAnexo                 CHAR (1) DEFAULT ' ' NOT NULL,
    anexoAplicacao            NCLOB,
    filtrosNomePublico        VARCHAR (4000) DEFAULT ' ' NOT NULL,
    menuRegistro              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizadoRegistro NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idRegistro                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    codigoRegistro            VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes               VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_PK1 PRIMARY KEY (idMenuCustomizado);
CREATE INDEX PAMENUSCUSTOMIZADOS_K2 ON PAMENUSCUSTOMIZADOS (descricao);
CREATE INDEX PAMENUSCUSTOMIZADOS_K3 ON PAMENUSCUSTOMIZADOS (ordenacao, descricao);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK1 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK2 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK4 FOREIGN KEY (areaMenu) REFERENCES SIAREASMENU (areaMenu);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK5 FOREIGN KEY (tipoMenu) REFERENCES SITIPOSMENU (tipoMenu);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK6 FOREIGN KEY (categoriaMenu) REFERENCES SICATEGORIASMENU (categoriaMenu);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK7 FOREIGN KEY (tipoAnexo) REFERENCES SITIPOSANEXO (tipoAnexo);
ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK8 FOREIGN KEY (menuRegistro) REFERENCES SIMENUS (menu);

INSERT INTO PAMENUSCUSTOMIZADOS (idMenuCustomizado, descricao, ativo, ordenacao, estabelecimento, perfilUsuario, usuario, areaMenu, tipoMenu, categoriaMenu, tipoAnexo, anexoAplicacao, filtrosNomePublico, menuRegistro, idMenuCustomizadoRegistro, idRegistro, codigoRegistro, observacoes) VALUES (0, 'SELECIONE', 1, 0, 0, 0, 0, 0, '   ', 0, ' ', NULL, ' ', 0, 0, 0, ' ', ' ');

COMMIT;

ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK4 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK4 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK5 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK5 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);
ALTER TABLE MOACESSOSMENU ADD CONSTRAINT MOACESSOMENU_FK3 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);

create or replace PROCEDURE ADD_ORCAMENTO_ITEM_RES_ITEM (
  p_item_idItemOrcamento         IN NUMBER,
  p_estabelecimentoAtivo         IN NUMBER,
  p_bufferIdReservaEstoque       IN VARCHAR2,
  /* Retornos */
  r_bufferIdReservaEstoque       OUT VARCHAR2)
IS
  v_idReservaEstoque          NUMBER;
  v_quantidadeEnderecoEstoque NUMBER;
  v_quantidadeNumerosSerie    NUMBER;
BEGIN
  r_bufferIdReservaEstoque := p_bufferIdReservaEstoque;
  ADD_RESERVA_ESTOQUE_ORC_EXCLUI (
    p_item_idItemOrcamento,
    r_bufferIdReservaEstoque,
    r_bufferIdReservaEstoque);
  FOR a IN (
    SELECT
      cabOrc.modeloDocumento,
      cabOrc.entradaSaida,
      CASE
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.estabelecimentoRemessa > 0
        THEN contrEntr.estabelecimentoRemessa
        WHEN prod.estabelecimentoFaturamento > 0
        THEN prod.estabelecimentoFaturamento
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.estabelecimentoSaida > 0
        THEN contrEntr.estabelecimentoSaida
        ELSE cabOrc.estabelecimento
      END estabelecimento,
      cabOrc.dataEmissao,
      cabOrc.dataEntrega,
      itemOrc.idItemOrcamento,
      itemOrc.gradeProduto,
      itemOrc.personalizacao,
      itemOrc.idFormulaTinta,
      itemOrc.idLoteEstoque,
      CASE
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.localEstoqueSaida > 0
        THEN contrEntr.localEstoqueSaida
        ELSE itemOrc.localEstoque
      END localEstoque,
      itemOrc.pessoaParticipante,
      itemOrc.quantidadeSaldo,
      itemOrc.observacoes,
      prod.controlaNumeroSerie,
      prod.controleEstoque,
      locEst.indicadorPropriedadePosseItem,
      COALESCE (estXLoc.solicitaEnderecoEstoque,0) solicitaEnderecoEstoque
    FROM MOORCAMENTOXITENS itemOrc
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = itemOrc.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    JOIN PACONTROLESENTREGA contrEntr
    ON contrEntr.controleEntrega = itemOrc.controleEntrega
    JOIN MOORCAMENTOS cabOrc
    ON cabOrc.orcamento = itemOrc.orcamento
    JOIN PAETAPASORCAMENTO etapOrc
    ON etapOrc.etapaOrcamento = cabOrc.etapaOrcamento
    JOIN PALOCAISESTOQUE locEst
    ON locEst.localEstoque =
      CASE
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.localEstoqueSaida > 0
        THEN contrEntr.localEstoqueSaida
        ELSE itemOrc.localEstoque
      END 
    LEFT JOIN PAESTABELECIMENTOXLOCAISE estXLoc
    ON estXLoc.estabelecimento = 
      CASE
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.estabelecimentoRemessa > 0
        THEN contrEntr.estabelecimentoRemessa
        WHEN prod.estabelecimentoFaturamento > 0
        THEN prod.estabelecimentoFaturamento
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.estabelecimentoSaida > 0
        THEN contrEntr.estabelecimentoSaida
        ELSE cabOrc.estabelecimento
      END
    AND estXLoc.localEstoque =
      CASE
        WHEN itemOrc.controleEntrega > 0
          AND contrEntr.localEstoqueSaida > 0
        THEN contrEntr.localEstoqueSaida
        ELSE itemOrc.localEstoque
      END 
    WHERE itemOrc.idItemOrcamento = p_item_idItemOrcamento
    AND itemOrc.cancelado = 0
    AND itemOrc.movimentaEstoque = 1
    AND itemOrc.quantidadeSaldo > 0
    AND etapOrc.situacaoOrcamento BETWEEN 41 AND 89
    UNION ALL
    SELECT
      cabOrc.modeloDocumento,
      cabOrc.entradaSaida,
      CASE
        WHEN contrEntr.estabelecimentoRemessa > 0
        THEN contrEntr.estabelecimentoRemessa
        ELSE doc.estabelecimento
      END estabelecimento,
      doc.dataEmissao,
      doc.dataEntradaSaida dataEntrega,
      itemOrc.idItemOrcamento,
      itemDoc.gradeProduto,
      itemDoc.personalizacao,
      itemDoc.idFormulaTinta,
      itemDoc.idLoteEstoque,
      itemDoc.localEstoque,
      itemDoc.pessoaParticipante,
      ( itemDoc.quantidade
        - itemDoc.quantidadeDevolvidaRetornada
        - COALESCE ((
            SELECT SUM (entr.quantidade *
              CASE
                WHEN itemDoc.quantidadeConvertida = 0
                THEN 1
                ELSE itemDoc.quantidade / itemDoc.quantidadeConvertida
              END)
            FROM MOENTREGAS entr
            WHERE entr.idItemOrcamento = itemOrc.idItemOrcamento
            AND entr.situacaoEntrega IN (5,6)),0)) quantidadeSaldo,
      itemDoc.observacoes,
      prod.controlaNumeroSerie,
      prod.controleEstoque,
      locEst.indicadorPropriedadePosseItem,
      COALESCE (estXLoc.solicitaEnderecoEstoque,0) solicitaEnderecoEstoque
    FROM MOORCAMENTOXITENS itemOrc
    JOIN MOPREDOCUMXORCAMENTOITEM docXOrc
    ON docXOrc.idItemOrcamento = itemOrc.idItemOrcamento
    JOIN MOPREDOCUMXITENS itemDoc
    ON itemDoc.idItemPreDocumento = docXOrc.idItemPreDocumento
    JOIN MOPREDOCUMENTOS doc
    ON doc.preDocumento = itemDoc.preDocumento
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = itemDoc.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    JOIN PACONTROLESENTREGA contrEntr
    ON contrEntr.controleEntrega = itemOrc.controleEntrega
    JOIN MOORCAMENTOS cabOrc
    ON cabOrc.orcamento = itemOrc.orcamento
    JOIN PAETAPASORCAMENTO etapOrc
    ON etapOrc.etapaOrcamento = cabOrc.etapaOrcamento
    JOIN PALOCAISESTOQUE locEst
    ON locEst.localEstoque = itemDoc.localEstoque 
    LEFT JOIN PAESTABELECIMENTOXLOCAISE estXLoc
    ON estXLoc.estabelecimento =
      CASE
        WHEN contrEntr.estabelecimentoRemessa > 0
        THEN contrEntr.estabelecimentoRemessa
        ELSE doc.estabelecimento
      END    
    AND estXLoc.localEstoque = itemDoc.localEstoque
    WHERE itemOrc.idItemOrcamento = p_item_idItemOrcamento
    AND itemOrc.cancelado = 0
    AND itemOrc.movimentaEstoque = 1
    AND itemOrc.quantidadeSaldo = 0
    AND etapOrc.situacaoOrcamento BETWEEN 64 AND 89
    AND itemOrc.controleEntrega > 0
    AND contrEntr.reservaEstoque = 1
    AND docXOrc.quantidade > 0
    AND itemDoc.cancelado = 0
    AND itemDoc.movimentaEstoque = 0
    AND doc.entradaSaida = 'S'
    AND doc.devolucaoAnulacaoRetorno = 0
    AND doc.statusPreDocumento <> 'C'
    AND ( itemDoc.quantidade
      - itemDoc.quantidadeDevolvidaRetornada
      - COALESCE ((
          SELECT SUM (entr.quantidade *
            CASE
              WHEN itemDoc.quantidadeConvertida = 0
              THEN 1
              ELSE itemDoc.quantidade / itemDoc.quantidadeConvertida
            END)
          FROM MOENTREGAS entr
          WHERE entr.idItemOrcamento = itemOrc.idItemOrcamento
          AND entr.situacaoEntrega IN (5,6)),0)) > 0
    UNION ALL
    SELECT
      cabOrc.modeloDocumento,
      cabOrc.entradaSaida,
      CASE
        WHEN contrEntr.estabelecimentoRemessa > 0
        THEN contrEntr.estabelecimentoRemessa
        ELSE doc.estabelecimento
      END estabelecimento,
      doc.dataEmissao,
      doc.dataEntradaSaida dataEntrega,
      itemOrc.idItemOrcamento,
      itemDoc.gradeProduto,
      itemDoc.personalizacao,
      itemDoc.idFormulaTinta,
      itemDoc.idLoteEstoque,
      itemDoc.localEstoque,
      itemDoc.pessoaParticipante,
      ( itemDoc.quantidade
        - itemDoc.quantidadeDevolvidaRetornada
        - COALESCE ((
            SELECT SUM (entr.quantidade *
              CASE
                WHEN itemDoc.quantidadeConvertida = 0
                THEN 1
                ELSE itemDoc.quantidade / itemDoc.quantidadeConvertida
              END)
            FROM MOENTREGAS entr
            WHERE entr.idItemOrcamento = itemOrc.idItemOrcamento
            AND entr.situacaoEntrega IN (5,6)),0)) quantidadeSaldo,
      itemDoc.observacoes,
      prod.controlaNumeroSerie,
      prod.controleEstoque,
      locEst.indicadorPropriedadePosseItem,
      COALESCE (estXLoc.solicitaEnderecoEstoque,0) solicitaEnderecoEstoque
    FROM MOORCAMENTOXITENS itemOrc
    JOIN MODOCFISCALXORCAMENTOITEM docXOrc
    ON docXOrc.idItemOrcamento = itemOrc.idItemOrcamento
    JOIN MODOCFISCALXITENS itemDoc
    ON itemDoc.idItemDocFiscal = docXOrc.idItemDocFiscal
    JOIN MODOCUMENTOSFISCAIS doc
    ON doc.idDocumentoFiscal = itemDoc.idDocumentoFiscal
    JOIN CAGRADESPRODUTO gradProd
    ON gradProd.gradeProduto = itemDoc.gradeProduto
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    JOIN PACONTROLESENTREGA contrEntr
    ON contrEntr.controleEntrega = itemOrc.controleEntrega
    JOIN MOORCAMENTOS cabOrc
    ON cabOrc.orcamento = itemOrc.orcamento
    JOIN PAETAPASORCAMENTO etapOrc
    ON etapOrc.etapaOrcamento = cabOrc.etapaOrcamento
    JOIN PALOCAISESTOQUE locEst
    ON locEst.localEstoque = itemDoc.localEstoque 
    LEFT JOIN PAESTABELECIMENTOXLOCAISE estXLoc
    ON estXLoc.estabelecimento =
      CASE
        WHEN contrEntr.estabelecimentoRemessa > 0
        THEN contrEntr.estabelecimentoRemessa
        ELSE doc.estabelecimento
      END
    AND estXLoc.localEstoque = itemDoc.localEstoque
    WHERE itemOrc.idItemOrcamento = p_item_idItemOrcamento
    AND itemOrc.cancelado = 0
    AND itemOrc.movimentaEstoque = 1
    AND itemOrc.quantidadeSaldo = 0
    AND etapOrc.situacaoOrcamento BETWEEN 64 AND 89
    AND itemOrc.controleEntrega > 0
    AND contrEntr.reservaEstoque = 1
    AND docXOrc.quantidade > 0
    AND itemDoc.cancelado = 0
    AND itemDoc.movimentaEstoque = 0
    AND doc.entradaSaida = 'S'
    AND doc.devolucaoAnulacaoRetorno = 0
    AND doc.situacaoDocumentoFiscal <= 23
    AND ( itemDoc.quantidade
      - itemDoc.quantidadeDevolvidaRetornada
      - COALESCE ((
          SELECT SUM (entr.quantidade *
            CASE
              WHEN itemDoc.quantidadeConvertida = 0
              THEN 1
              ELSE itemDoc.quantidade / itemDoc.quantidadeConvertida
            END)
          FROM MOENTREGAS entr
          WHERE entr.idItemOrcamento = itemOrc.idItemOrcamento
          AND entr.situacaoEntrega IN (5,6)),0)) > 0)
  LOOP
    v_quantidadeEnderecoEstoque := 0;
    v_quantidadeNumerosSerie    := 0;
    IF a.solicitaEnderecoEstoque = 1
      AND a.controleEstoque IN (1,3,4,5,11,12)
    THEN
      ADD_ORCAMENTO_ITEM_RES_ENDEREC(
        r_bufferIdReservaEstoque, 
        p_estabelecimentoAtivo, 
        a.modeloDocumento,
        a.entradaSaida,
        a.estabelecimento,
        a.dataEmissao,
        a.dataEntrega,
        a.idItemOrcamento,
        a.gradeProduto,
        a.personalizacao,
        a.idFormulaTinta,
        a.idLoteEstoque,
        a.localEstoque,
        a.pessoaParticipante,
        a.quantidadeSaldo,
        a.observacoes,
        a.controlaNumeroSerie,
        a.controleEstoque,
        a.indicadorPropriedadePosseItem,
        r_bufferIdReservaEstoque,
        v_quantidadeEnderecoEstoque);
    END IF;
    IF a.quantidadeSaldo > v_quantidadeEnderecoEstoque THEN
      IF a.controleEstoque = 12 AND a.idFormulaTinta > 0 THEN
        ADD_RESERVA_ESTOQUE_FORM_TINTA(
          r_bufferIdReservaEstoque, 
          p_estabelecimentoAtivo, 
          a.modeloDocumento,
          a.entradaSaida,
          a.estabelecimento,
          a.dataEmissao,
          a.dataEntrega,
          a.idItemOrcamento,
          0, -- p_idItemDocTransferencia
          a.idFormulaTinta,
          a.localEstoque,
          a.pessoaParticipante,
          0, -- p_item_idEnderecoEstoque
          a.quantidadeSaldo - v_quantidadeEnderecoEstoque,
          a.observacoes,
          a.indicadorPropriedadePosseItem,
          r_bufferIdReservaEstoque);
      ELSIF a.controleEstoque IN (3,4) THEN
        ADD_ORCAMENTO_ITEM_RES_KIT(
          r_bufferIdReservaEstoque,
          p_estabelecimentoAtivo,
          a.modeloDocumento,
          a.entradaSaida,
          a.estabelecimento,
          a.dataEmissao,
          a.dataEntrega,
          a.idItemOrcamento,
          a.gradeProduto,
          a.localEstoque,
          a.pessoaParticipante,
          0, -- p_item_idEnderecoEstoque
          a.quantidadeSaldo - v_quantidadeEnderecoEstoque,
          a.observacoes,
          0, -- p_end_idEnderecoEstoqueOrcam
          a.indicadorPropriedadePosseItem,
          r_bufferIdReservaEstoque);
      ELSIF a.controleEstoque IN (1,5,11,12) THEN
        v_quantidadeNumerosSerie := 0;
        IF a.controlaNumeroSerie > 0 THEN
          ADD_ORCAMENTO_ITEM_RES_N_SERIE(
            r_bufferIdReservaEstoque, 
            p_estabelecimentoAtivo, 
            a.modeloDocumento,
            a.entradaSaida,
            a.estabelecimento,
            a.dataEmissao,
            a.dataEntrega,
            a.idItemOrcamento,
            a.gradeProduto,
            a.personalizacao,
            a.idLoteEstoque,
            a.localEstoque,
            a.pessoaParticipante,
            0, -- p_item_idEnderecoEstoque
            a.observacoes,
            0, -- p_end_idEnderecoEstoqueOrcam
            a.indicadorPropriedadePosseItem,
            r_bufferIdReservaEstoque,
            v_quantidadeNumerosSerie);
        END IF;
        IF a.quantidadeSaldo - v_quantidadeEnderecoEstoque > v_quantidadeNumerosSerie THEN
          ADD_RESERVA_ESTOQUE_GRAVA(
            0,
            r_bufferIdReservaEstoque, 
            p_estabelecimentoAtivo, 
            a.estabelecimento,
            CASE
              WHEN a.dataEntrega IS NULL
                OR a.dataEntrega < a.dataEmissao
              THEN a.dataEmissao
              ELSE a.dataEntrega
            END, -- p_data
            a.gradeProduto,
            a.modeloDocumento,
            a.entradaSaida,
            a.indicadorPropriedadePosseItem,
            a.pessoaParticipante,
            a.localEstoque,
            a.personalizacao,
            a.idLoteEstoque,
            0, -- p_idEnderecoEstoque
            0, -- p_idNumeroSerie
            a.quantidadeSaldo - v_quantidadeEnderecoEstoque - v_quantidadeNumerosSerie,
            a.observacoes,
            a.idItemOrcamento,
            0, -- p_idItemDocTransferencia
            v_idReservaEstoque,
            r_bufferIdReservaEstoque);
        END IF;
      END IF;
    END IF;
  END LOOP;  
END ADD_ORCAMENTO_ITEM_RES_ITEM;

/

create or replace PROCEDURE ADD_ORCAMENTO_CAB_RESERVA_GRAV (
  p_orcamento            IN NUMBER,
  p_estabelecimentoAtivo IN NUMBER)
IS
  v_bufferIdReservaEstoque VARCHAR2 (32000);
BEGIN
  v_bufferIdReservaEstoque := '';
  FOR a IN (
    SELECT idItemOrcamento
    FROM MOORCAMENTOXITENS
    WHERE orcamento = p_orcamento
    ORDER BY sequencia)
  LOOP
    ADD_ORCAMENTO_ITEM_RES_ITEM(
      a.idItemOrcamento,
      p_estabelecimentoAtivo, 
      v_bufferIdReservaEstoque, 
      v_bufferIdReservaEstoque);
  END LOOP;
END ADD_ORCAMENTO_CAB_RESERVA_GRAV;

/

DROP TABLE MOMARCADORES;

-- MOMARCADORES
CREATE TABLE MOMARCADORES
  (
    idMarcador        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    usuario           NUMERIC (14,0) DEFAULT 0 NOT NULL,
    categoria         VARCHAR (256) DEFAULT ' ' NOT NULL,
    ordenacao         NUMERIC (11,0) DEFAULT 0 NOT NULL,
    tipoAnexo         CHAR (1) DEFAULT ' ' NOT NULL,
    anexo             NCLOB,
    filtros           VARCHAR (4000) DEFAULT ' ' NOT NULL,
    menu              NUMERIC (10,0) DEFAULT 0 NOT NULL,
    idMenuCustomizado NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idRegistro        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    codigoRegistro    VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_PK1 PRIMARY KEY (idMarcador);
CREATE INDEX MOMARCADORES_K2 ON MOMARCADORES (usuario, categoria, ordenacao, idMarcador);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK2 FOREIGN KEY (tipoAnexo) REFERENCES SITIPOSANEXO (tipoAnexo);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK3 FOREIGN KEY (menu) REFERENCES SIMENUS (menu);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK4 FOREIGN KEY (idMenuCustomizado) REFERENCES PAMENUSCUSTOMIZADOS (idMenuCustomizado);

INSERT INTO MOMARCADORES (idMarcador, usuario, categoria, ordenacao, tipoAnexo, anexo, filtros, menu, idMenuCustomizado, idRegistro, codigoRegistro, observacoes) VALUES (0, 0, ' ', 0, ' ', NULL, ' ', 0, 0, 0, ' ', ' ');

COMMIT;

DELETE MONOTIFICACOES WHERE menu = 320;
DELETE MOACESSOSMENU WHERE menu = 320;
DELETE PAMENUXLAYOUTPESQUISA WHERE menu = 320;
DELETE PAMENUXATALHOS WHERE menu = 320;
DELETE PAMENUXFAVORITOS WHERE menu = 320;
DELETE PAMENUXPERMISSOES WHERE menu = 320;
DELETE PAGERADORRELFILTROS WHERE menuPesquisa = 320;
DELETE PAGERADORRELCAMPOSVISAO WHERE menuPesquisa = 320;
DELETE MOMARCADORES WHERE menu = 320;
DELETE MONOTIFICACOES WHERE menu = 320;
DELETE PAMENUSCUSTOMIZADOS WHERE menuRegistro = 320;
DELETE SIDOCVERSOESSISTEMA WHERE menu = 320;
DELETE SIMENUS WHERE menu = 320;
DELETE SITABELASSISTEMA WHERE tabelaSistema = 'SIORDENARPOR'; 
DROP TABLE SIORDENARPOR;

-- SIMENUINICIAR
CREATE TABLE SIMENUINICIAR
  (
    menuIniciar NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descricao   VARCHAR (60) DEFAULT ' ' NOT NULL,
    ativo       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE SIMENUINICIAR ADD CONSTRAINT SIMENUINICIAR_PK1 PRIMARY KEY (menuIniciar);
CREATE INDEX SIMENUINICIAR_K2 ON SIMENUINICIAR (descricao);

INSERT INTO SIMENUINICIAR (menuIniciar, descricao, ativo, observacoes) values (0, 'SELECIONE', 1, ' ');
INSERT INTO SIMENUINICIAR (menuIniciar, descricao, ativo, observacoes) values (1, 'Clássico', 1, ' ');
INSERT INTO SIMENUINICIAR (menuIniciar, descricao, ativo, observacoes) values (2, 'Barra Lateral', 1, ' ');
INSERT INTO SIMENUINICIAR (menuIniciar, descricao, ativo, observacoes) values (3, 'Rodapé Flutuante', 1, ' ');

COMMIT;

-- SIPALETACORES
CREATE TABLE SIPALETACORES
  (
    paletaCor   NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descricao   VARCHAR (60) DEFAULT ' ' NOT NULL,
    ativo       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE SIPALETACORES ADD CONSTRAINT SIPALETACORES_PK1 PRIMARY KEY (paletaCor);
CREATE INDEX SIPALETACORES_K2 ON SIPALETACORES (descricao);

INSERT INTO SIPALETACORES (paletaCor, descricao, ativo, observacoes) values (0, 'SELECIONE', 1, ' ');
INSERT INTO SIPALETACORES (paletaCor, descricao, ativo, observacoes) values (1, 'Índico (Padrão)', 1, ' ');

COMMIT;

-- SITEMAS
CREATE TABLE SITEMAS
  (
    tema        NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descricao   VARCHAR (60) DEFAULT ' ' NOT NULL,
    ativo       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE SITEMAS ADD CONSTRAINT SITEMAS_PK1 PRIMARY KEY (tema);
CREATE INDEX SITEMAS_K2 ON SITEMAS (descricao);

INSERT INTO SITEMAS (tema, descricao, ativo, observacoes) values (0, 'SELECIONE', 1, ' ');
INSERT INTO SITEMAS (tema, descricao, ativo, observacoes) values (1, 'Claro', 1, ' ');
INSERT INTO SITEMAS (tema, descricao, ativo, observacoes) values (2, 'Escuro', 1, ' ');

COMMIT;

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SIMENUINICIAR', 'MenuIniciar', 1, 13, 'SI', 'tema', 'N', 4, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenuIniciar', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SIPALETACORES', 'Paleta Cores', 1, 13, 'SI', 'tema', 'N', 4, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'Paleta Cores', 1, 1, ' '); 
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SITEMAS', 'Temas', 1, 13, 'SI', 'tema', 'N', 4, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTemas', 1, 1, ' '); 

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (933, 'Menu Iniciar', 1, 9090003200, 90, 'SIS', 0, 933, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMenuIniciar', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (934, 'Paleta Cores', 1, 9090003210, 90, 'SIS', 0, 934, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqPaletaCores', ' ', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (935, 'Temas', 1, 9090003200, 90, 'SIS', 0, 935, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTemas', ' ', 0, 0, NULL, ' ');

COMMIT;

CREATE TABLE CAUSUARIOS_2401 AS SELECT * FROM CAUSUARIOS;

ALTER TABLE PAMENUSCUSTOMIZADOS DROP CONSTRAINT PAMENUSCUSTOMIZADOS_FK3;
ALTER TABLE MONOTIFICACOES DROP CONSTRAINT MONOTIFICACOES_FK1;
ALTER TABLE MONOTIFICACAOXUSUARIOS DROP CONSTRAINT MONOTIFICACAOXUSUARIOS_FK2;
ALTER TABLE MOMARCADORES DROP CONSTRAINT MOMARCADORES_FK1;
ALTER TABLE PAWHATSAPPCONEXOES DROP CONSTRAINT PAWHATSAPPCONEXOES_FK3;
ALTER TABLE PAFILTROCABECXUSUARIOS DROP CONSTRAINT PAFILTROCABECXUSUARIOS_FK2;
ALTER TABLE PACLASSIFICPRODXREGRAS DROP CONSTRAINT PACLASSIFICPRODXREGRAS_FK4;
ALTER TABLE CAPRODUTOS DROP CONSTRAINT CAPRODUTOS_FK28;
ALTER TABLE CAPRODUTOS DROP CONSTRAINT CAPRODUTOS_FK29;
ALTER TABLE CATABELAPRECOXALTERACOES DROP CONSTRAINT CATABELAPRECOXALTERACOES_FK2;
ALTER TABLE PACONFIGURACAOXCONTEUDOS DROP CONSTRAINT PACONFIGURACAOXCONTEUDOS_FK4;
ALTER TABLE PAPERSCAMPOSXCONTEUDOS DROP CONSTRAINT PAPERSCAMPOSXCONTEUDOS_FK4;
ALTER TABLE PAMENUXPERMISSOES DROP CONSTRAINT PAMENUXPERMISSOES_FK7;
ALTER TABLE PAMENUXFAVORITOS DROP CONSTRAINT PAMENUXFAVORITOS_FK8;
ALTER TABLE PAMENUXATALHOS DROP CONSTRAINT PAMENUXATALHOS_FK8;
ALTER TABLE PAMENUXLAYOUTPESQUISA DROP CONSTRAINT PAMENUXLAYOUTPESQUISA_FK4;
ALTER TABLE PACARTEIRASFINPERMITIDAS DROP CONSTRAINT PACARTEIRASFINPERMITIDAS_FK4;
ALTER TABLE PAMODELOSFINANPERMITIDOS DROP CONSTRAINT PAMODELOSFINANPERMITIDOS_FK4;
ALTER TABLE PAMODELOSDOCUMPERMITIDOS DROP CONSTRAINT PAMODELOSDOCUMPERMITIDOS_FK4;
ALTER TABLE PALOCAISESTOQUEPERMITIDOS DROP CONSTRAINT PALOCAISESTOQUEPERMITIDOS_FK4;
ALTER TABLE PAVALIDACOESPESSOA DROP CONSTRAINT PAVALIDACOESPESSOA_FK4;
ALTER TABLE PACONTROLESENTREGA DROP CONSTRAINT PACONTROLESENTREGA_FK3;
ALTER TABLE PAREGRASENTREGA DROP CONSTRAINT PAREGRASENTREGA_FK3;
ALTER TABLE CAPRODUTOXCONTROLEENTREGA DROP CONSTRAINT CAPRODUTOXCONTROLEENTREGA_FK5;
ALTER TABLE PACONTROLESENTREGAPERMIT DROP CONSTRAINT PACONTROLESENTREGAPERMIT_FK4;
ALTER TABLE PALISTACOBRANCAXUSUARIOS DROP CONSTRAINT PALISTACOBRANCAXUSUARIOS_FK2;
ALTER TABLE PALISTACRMXUSUARIOS DROP CONSTRAINT PALISTACRMXUSUARIOS_FK2;
ALTER TABLE PAREGRASCREDITO DROP CONSTRAINT PAREGRASCREDITO_FK5;
ALTER TABLE PAMOTORCREDITO DROP CONSTRAINT PAMOTORCREDITO_FK3;
ALTER TABLE PAGERADORESRELPERMITIDOS DROP CONSTRAINT PAGERADORESRELPERMITIDOS_FK5;
ALTER TABLE PAMOTIVOSBLOQPERMITIDOS DROP CONSTRAINT PAMOTIVOSBLOQPERMITIDOS_FK4;
ALTER TABLE PAETAPASORCAMENTODEPARA DROP CONSTRAINT PAETAPASORCAMENTODEPARA_FK3;
ALTER TABLE PAETAPASORCAMENTOPERMITID DROP CONSTRAINT PAETAPASORCAMENTOPERMITID_FK3;
ALTER TABLE PAEMAILS DROP CONSTRAINT PAEMAILS_FK4;
ALTER TABLE PAWEBSERVICESCONEXOES DROP CONSTRAINT PAWEBSERVICESCONEXOES_FK4;
ALTER TABLE PAIMAGENSSISTEMA DROP CONSTRAINT PAIMAGENSSISTEMA_FK4;
ALTER TABLE PAIMPRESSORAXDOCUMENTO DROP CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK5;
ALTER TABLE PACAIXASUSUARIOS DROP CONSTRAINT PACAIXASUSUARIOS_FK3;
ALTER TABLE PAMEIOSPAGAMENTOAUTOEFET DROP CONSTRAINT PAMEIOSPAGAMENTOAUTOEFET_FK4;
ALTER TABLE PACONDICOESPAGAMENTOAUTO DROP CONSTRAINT PACONDICOESPAGAMENTOAUTO_FK4;
ALTER TABLE PAREGRASCAIXAS DROP CONSTRAINT PAREGRASCAIXAS_FK3;
ALTER TABLE PAREGRASMARGEMCONTRIBUIC DROP CONSTRAINT PAREGRASMARGEMCONTRIBUIC_FK3;
ALTER TABLE PACATEGORIASPRODUTOSVENDA DROP CONSTRAINT PACATEGORIASPRODUTOSVENDA_FK3;
ALTER TABLE PAREGRASFAIXASATRASO DROP CONSTRAINT PAREGRASFAIXASATRASO_FK3;
ALTER TABLE MOCATEGORIASMENUUSUARIO DROP CONSTRAINT MOCATEGORIASMENUUSUARIO_FK1;
ALTER TABLE MOGUIASMENUUSUARIO DROP CONSTRAINT MOGUIASMENUUSUARIO_FK1;
ALTER TABLE MOACESSOSMENU DROP CONSTRAINT MOACESSOMENU_FK1;
ALTER TABLE MOSESSOES DROP CONSTRAINT MOSESSOES_FK2;
ALTER TABLE MOLOGALTERACOES DROP CONSTRAINT MOLOGALTERACOES_FK1;
ALTER TABLE MOCONSULTASDADOSCPF DROP CONSTRAINT MOCONSULTASDADOSCPF_FK2;
ALTER TABLE MOSPCCONSULTAS DROP CONSTRAINT MOSPCCONSULTAS_FK1;
ALTER TABLE MOORCAMENTOXETAPAS DROP CONSTRAINT MOORCAMENTOXETAPAS_FK2;
ALTER TABLE MOORCAMENTOXBLOQUEIOSEST DROP CONSTRAINT MOORCAMENTOXBLOQUEIOSEST_FK11;
ALTER TABLE MOSESSOESCAIXA DROP CONSTRAINT MOSESSOESCAIXA_FK2;
ALTER TABLE MOPREDOCUMXSTATUS DROP CONSTRAINT MOPREDOCUMXSTATUS_FK2;
ALTER TABLE MOPREDOCUMXBLOQUEIOSEST DROP CONSTRAINT MOPREDOCUMXBLOQUEIOSEST_FK11;
ALTER TABLE MODOCFISCALXSITUACOES DROP CONSTRAINT MODOCFISCALXSITUACOES_FK2;
ALTER TABLE MODOCFISCALXBLOQUEIOSEST DROP CONSTRAINT MODOCFISCALXBLOQUEIOSEST_FK11;
ALTER TABLE MONEGOCIACOESDIVIDAS DROP CONSTRAINT MONEGOCIACOESDIVIDAS_FK2;
ALTER TABLE MOREPARCELAMENTOS DROP CONSTRAINT MOREPARCELAMENTOS_FK2;
ALTER TABLE MOSPCREGISTROS DROP CONSTRAINT MOSPCREGISTROS_FK6;
ALTER TABLE MOSPCREGISTROS DROP CONSTRAINT MOSPCREGISTROS_FK8;
ALTER TABLE MOHISTORICOCOBRANCA DROP CONSTRAINT MOHISTORICOCOBRANCA_FK3;
ALTER TABLE MOHISTORICOCRM DROP CONSTRAINT MOHISTORICOCRM_FK3;
ALTER TABLE MOARQUIVOSCOBRANCA DROP CONSTRAINT MOARQUIVOSCOBRANCA_FK2;
ALTER TABLE MOPONTUACOES DROP CONSTRAINT MOPONTUACOES_FK3;
ALTER TABLE MOARQUIVOSCONCILIACOES DROP CONSTRAINT MOARQUIVOSCONCILIACOES_FK3;
ALTER TABLE MOCONCILIACOESCARTOES DROP CONSTRAINT MOCONCILIACOESCARTOES_FK11;
ALTER TABLE MOSEPARACAOXBLOQUEIOSEST DROP CONSTRAINT MOSEPARACAOXBLOQUEIOSEST_FK11;
ALTER TABLE MODOCTRANSFXBLOQUEIOSEST DROP CONSTRAINT MODOCTRANSFXBLOQUEIOSEST_FK11;
ALTER TABLE MOCONSERTOS DROP CONSTRAINT MOCONSERTOS_FK2;
ALTER TABLE MOCONSERTOS DROP CONSTRAINT MOCONSERTOS_FK20;
ALTER TABLE MOENTREGAXSITUACOES DROP CONSTRAINT MOENTREGAXSITUACOES_FK3;
ALTER TABLE MOMOTBLOQXLIBERACOES DROP CONSTRAINT MOMOTBLOQXLIBERACOES_FK2;
ALTER TABLE MOEVENTOS DROP CONSTRAINT MOEVENTOS_FK13;

DROP TABLE CAUSUARIOS;

-- CAUSUARIOS
CREATE TABLE CAUSUARIOS
  (
    usuario       NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ativo         NUMERIC (1,0) DEFAULT 0 NOT NULL,
    login         VARCHAR (60) DEFAULT ' ' NOT NULL,
    senha         VARCHAR (256) DEFAULT ' ' NOT NULL,
    perfilUsuario NUMERIC (6,0) DEFAULT 0 NOT NULL,
    tema          NUMERIC (4,0) DEFAULT 0 NOT NULL
  );
ALTER TABLE CAUSUARIOS ADD CONSTRAINT CAUSUARIOS_PK1 PRIMARY KEY (usuario);
CREATE INDEX CAUSUARIOS_K2 ON CAUSUARIOS (login);
CREATE INDEX CAUSUARIOS_K3 ON CAUSUARIOS (usuario, ativo);
ALTER TABLE CAUSUARIOS ADD CONSTRAINT CAUSUARIOS_FK1 FOREIGN KEY (usuario) REFERENCES CAPESSOAS (pessoa);
ALTER TABLE CAUSUARIOS ADD CONSTRAINT CAUSUARIOS_FK2 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE CAUSUARIOS ADD CONSTRAINT CAUSUARIOS_FK3 FOREIGN KEY (tema) REFERENCES SITEMAS (tema);

INSERT INTO CAUSUARIOS (usuario, ativo, login, senha, perfilUsuario, tema) VALUES (0, 1, ' ', ' ', 0, 1);
INSERT INTO CAUSUARIOS (usuario, ativo, login, senha, perfilUsuario, tema) SELECT usuario, ativo, login, senha, perfilUsuario, 1 FROM CAUSUARIOS_2401 WHERE usuario > 0;

COMMIT;

ALTER TABLE PAMENUSCUSTOMIZADOS ADD CONSTRAINT PAMENUSCUSTOMIZADOS_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MONOTIFICACOES ADD CONSTRAINT MONOTIFICACOES_FK1 FOREIGN KEY (usuarioCriacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MONOTIFICACAOXUSUARIOS ADD CONSTRAINT MONOTIFICACAOXUSUARIOS_FK2 FOREIGN KEY (usuarioNotificado) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOMARCADORES ADD CONSTRAINT MOMARCADORES_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAWHATSAPPCONEXOES ADD CONSTRAINT PAWHATSAPPCONEXOES_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAFILTROCABECXUSUARIOS ADD CONSTRAINT PAFILTROCABECXUSUARIOS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACLASSIFICPRODXREGRAS ADD CONSTRAINT PACLASSIFICPRODXREGRAS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE CAPRODUTOS ADD CONSTRAINT CAPRODUTOS_FK28 FOREIGN KEY (usuarioInclusao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE CAPRODUTOS ADD CONSTRAINT CAPRODUTOS_FK29 FOREIGN KEY (usuarioAlteracao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE CATABELAPRECOXALTERACOES ADD CONSTRAINT CATABELAPRECOXALTERACOES_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACONFIGURACAOXCONTEUDOS ADD CONSTRAINT PACONFIGURACAOXCONTEUDOS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAPERSCAMPOSXCONTEUDOS ADD CONSTRAINT PAPERSCAMPOSXCONTEUDOS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUXPERMISSOES ADD CONSTRAINT PAMENUXPERMISSOES_FK7 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUXFAVORITOS ADD CONSTRAINT PAMENUXFAVORITOS_FK8 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUXATALHOS ADD CONSTRAINT PAMENUXATALHOS_FK8 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMENUXLAYOUTPESQUISA ADD CONSTRAINT PAMENUXLAYOUTPESQUISA_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACARTEIRASFINPERMITIDAS ADD CONSTRAINT PACARTEIRASFINPERMITIDAS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMODELOSFINANPERMITIDOS ADD CONSTRAINT PAMODELOSFINANPERMITIDOS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMODELOSDOCUMPERMITIDOS ADD CONSTRAINT PAMODELOSDOCUMPERMITIDOS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PALOCAISESTOQUEPERMITIDOS ADD CONSTRAINT PALOCAISESTOQUEPERMITIDOS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAVALIDACOESPESSOA ADD CONSTRAINT PAVALIDACOESPESSOA_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAREGRASENTREGA ADD CONSTRAINT PAREGRASENTREGA_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE CAPRODUTOXCONTROLEENTREGA ADD CONSTRAINT CAPRODUTOXCONTROLEENTREGA_FK5 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACONTROLESENTREGAPERMIT ADD CONSTRAINT PACONTROLESENTREGAPERMIT_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PALISTACOBRANCAXUSUARIOS ADD CONSTRAINT PALISTACOBRANCAXUSUARIOS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PALISTACRMXUSUARIOS ADD CONSTRAINT PALISTACRMXUSUARIOS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAREGRASCREDITO ADD CONSTRAINT PAREGRASCREDITO_FK5 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMOTORCREDITO ADD CONSTRAINT PAMOTORCREDITO_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAGERADORESRELPERMITIDOS ADD CONSTRAINT PAGERADORESRELPERMITIDOS_FK5 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMOTIVOSBLOQPERMITIDOS ADD CONSTRAINT PAMOTIVOSBLOQPERMITIDOS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAETAPASORCAMENTODEPARA ADD CONSTRAINT PAETAPASORCAMENTODEPARA_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAETAPASORCAMENTOPERMITID ADD CONSTRAINT PAETAPASORCAMENTOPERMITID_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAEMAILS ADD CONSTRAINT PAEMAILS_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAWEBSERVICESCONEXOES ADD CONSTRAINT PAWEBSERVICESCONEXOES_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK5 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACAIXASUSUARIOS ADD CONSTRAINT PACAIXASUSUARIOS_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAMEIOSPAGAMENTOAUTOEFET ADD CONSTRAINT PAMEIOSPAGAMENTOAUTOEFET_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACONDICOESPAGAMENTOAUTO ADD CONSTRAINT PACONDICOESPAGAMENTOAUTO_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAREGRASCAIXAS ADD CONSTRAINT PAREGRASCAIXAS_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAREGRASMARGEMCONTRIBUIC ADD CONSTRAINT PAREGRASMARGEMCONTRIBUIC_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACATEGORIASPRODUTOSVENDA ADD CONSTRAINT PACATEGORIASPRODUTOSVENDA_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAREGRASFAIXASATRASO ADD CONSTRAINT PAREGRASFAIXASATRASO_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOCATEGORIASMENUUSUARIO ADD CONSTRAINT MOCATEGORIASMENUUSUARIO_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOGUIASMENUUSUARIO ADD CONSTRAINT MOGUIASMENUUSUARIO_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOACESSOSMENU ADD CONSTRAINT MOACESSOMENU_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOSESSOES ADD CONSTRAINT MOSESSOES_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOLOGALTERACOES ADD CONSTRAINT MOLOGALTERACOES_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOCONSULTASDADOSCPF ADD CONSTRAINT MOCONSULTASDADOSCPF_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOSPCCONSULTAS ADD CONSTRAINT MOSPCCONSULTAS_FK1 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOORCAMENTOXETAPAS ADD CONSTRAINT MOORCAMENTOXETAPAS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOORCAMENTOXBLOQUEIOSEST ADD CONSTRAINT MOORCAMENTOXBLOQUEIOSEST_FK11 FOREIGN KEY (usuarioLiberacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOSESSOESCAIXA ADD CONSTRAINT MOSESSOESCAIXA_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOPREDOCUMXSTATUS ADD CONSTRAINT MOPREDOCUMXSTATUS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOPREDOCUMXBLOQUEIOSEST ADD CONSTRAINT MOPREDOCUMXBLOQUEIOSEST_FK11 FOREIGN KEY (usuarioLiberacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MODOCFISCALXSITUACOES ADD CONSTRAINT MODOCFISCALXSITUACOES_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MODOCFISCALXBLOQUEIOSEST ADD CONSTRAINT MODOCFISCALXBLOQUEIOSEST_FK11 FOREIGN KEY (usuarioLiberacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MONEGOCIACOESDIVIDAS ADD CONSTRAINT MONEGOCIACOESDIVIDAS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOREPARCELAMENTOS ADD CONSTRAINT MOREPARCELAMENTOS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOSPCREGISTROS ADD CONSTRAINT MOSPCREGISTROS_FK6 FOREIGN KEY (usuarioRegistroSPC) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOSPCREGISTROS ADD CONSTRAINT MOSPCREGISTROS_FK8 FOREIGN KEY (usuarioExclusaoSPC) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOHISTORICOCOBRANCA ADD CONSTRAINT MOHISTORICOCOBRANCA_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOHISTORICOCRM ADD CONSTRAINT MOHISTORICOCRM_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOARQUIVOSCOBRANCA ADD CONSTRAINT MOARQUIVOSCOBRANCA_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOPONTUACOES ADD CONSTRAINT MOPONTUACOES_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOARQUIVOSCONCILIACOES ADD CONSTRAINT MOARQUIVOSCONCILIACOES_FK3 FOREIGN KEY (usuarioImportacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOCONCILIACOESCARTOES ADD CONSTRAINT MOCONCILIACOESCARTOES_FK11 FOREIGN KEY (usuarioProcessamento) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOSEPARACAOXBLOQUEIOSEST ADD CONSTRAINT MOSEPARACAOXBLOQUEIOSEST_FK11 FOREIGN KEY (usuarioLiberacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MODOCTRANSFXBLOQUEIOSEST ADD CONSTRAINT MODOCTRANSFXBLOQUEIOSEST_FK11 FOREIGN KEY (usuarioLiberacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOCONSERTOS ADD CONSTRAINT MOCONSERTOS_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOCONSERTOS ADD CONSTRAINT MOCONSERTOS_FK20 FOREIGN KEY (usuarioLiberacao) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOENTREGAXSITUACOES ADD CONSTRAINT MOENTREGAXSITUACOES_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOMOTBLOQXLIBERACOES ADD CONSTRAINT MOMOTBLOQXLIBERACOES_FK2 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE MOEVENTOS ADD CONSTRAINT MOEVENTOS_FK13 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);

INSERT INTO SIPERSONALIZACOESCAMPOS (personalizacaoCampo, ordenacao, descricao, ativo, subcategoriaPersonalCampo, tipoCampo, mascara, exibirCampo, tipoArquivo, alteraTipoCampo, alteraExibirCampo, visivelSugestao, modificavelSugestao, obrigatorioSugestao, nomeCampoSugestao, conteudoSugestao, tabelaSistema, observacoes) VALUES (239, 10007008, 'Tema Usuário', 1, 10007, 'N', '4', 'P', 0, 0, 1, 1, 1, 0, 'Tema', '1', 'SITEMAS', ' ');

COMMIT;

CREATE TABLE PAIMAGENSSISTEMA_2401 AS SELECT * FROM PAIMAGENSSISTEMA;

DROP TABLE PAIMAGENSSISTEMA;

--PAIMAGENSSISTEMA
CREATE TABLE PAIMAGENSSISTEMA
  (
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoImagemSistema 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,
    dispositivo       CHAR (1) DEFAULT ' ' NOT NULL,
    menuIniciar       NUMERIC (4,0) DEFAULT 0 NOT NULL,
    paletaCor         NUMERIC (4,0) DEFAULT 0 NOT NULL,
    imagem            VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAIMAGENSSISTEMA_K2 ON PAIMAGENSSISTEMA (tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK1 FOREIGN KEY (tipoImagemSistema) REFERENCES SITIPOSIMAGEMSISTEMA (tipoImagemSistema);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK2 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK3 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK5 FOREIGN KEY (dispositivo) REFERENCES SIDISPOSITIVOS (dispositivo);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK6 FOREIGN KEY (menuIniciar) REFERENCES SIMENUINICIAR (menuIniciar);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK7 FOREIGN KEY (paletaCor) REFERENCES SIPALETACORES (paletaCor);

INSERT INTO PAIMAGENSSISTEMA (id, tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo, menuIniciar, paletaCor, imagem, observacoes) VALUES (0, 0, 0, 0, 0, ' ', 0, 0, ' ', ' ');
INSERT INTO PAIMAGENSSISTEMA (id, tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo, menuIniciar, paletaCor, imagem, observacoes) SELECT id, tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo, 1, 1, imagem, observacoes FROM PAIMAGENSSISTEMA_2401 WHERE id > 0;

COMMIT;

DROP TABLE MOORCAMENTOXTAREFAS;
DROP TABLE PACHECKLISTXTAREFAS;
DROP TABLE PATAREFAS;

-- PACHECKLISTXTAREFAS
CREATE TABLE PACHECKLISTXTAREFAS
  (
    idCheckListXTarefas   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    checklist             NUMERIC (4,0) DEFAULT 0 NOT NULL,
    sequencia             NUMERIC (3,0) DEFAULT 0 NOT NULL,
    descricao             VARCHAR (256) DEFAULT ' ' NOT NULL,
    ativo                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    tipoCampo             CHAR (1) DEFAULT ' ' NOT NULL,
    mascara               VARCHAR (30) DEFAULT ' ' NOT NULL,
    exibirCampo           CHAR (1) DEFAULT ' ' NOT NULL,
    tipoArquivo           NUMERIC (3,0) DEFAULT 0 NOT NULL,
    obrigatorio           NUMERIC (1,0) DEFAULT 0 NOT NULL,
    conteudoSugestao      VARCHAR (256) DEFAULT ' ' NOT NULL,
    tabelaSistema         VARCHAR (30) DEFAULT ' ' NOT NULL,
    observacoes           VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACHECKLISTXTAREFAS ADD CONSTRAINT PACHECKLISTXTAREFAS_PK1 PRIMARY KEY (idCheckListXTarefas);
CREATE UNIQUE INDEX PACHECKLISTXTAREFAS_K2 ON PACHECKLISTXTAREFAS (checklist, sequencia);
CREATE INDEX PACHECKLISTXTAREFAS_K3 ON PACHECKLISTXTAREFAS (descricao);
ALTER TABLE PACHECKLISTXTAREFAS ADD CONSTRAINT PACHECKLISTXTAREFAS_FK1 FOREIGN KEY (checklist) REFERENCES PACHECKLISTS (checklist);
ALTER TABLE PACHECKLISTXTAREFAS ADD CONSTRAINT PACHECKLISTXTAREFAS_FK2 FOREIGN KEY (tipoCampo) REFERENCES SITIPOSCAMPO (tipoCampo);
ALTER TABLE PACHECKLISTXTAREFAS ADD CONSTRAINT PACHECKLISTXTAREFAS_FK3 FOREIGN KEY (exibirCampo) REFERENCES SIEXIBIRCAMPO (exibirCampo);
ALTER TABLE PACHECKLISTXTAREFAS ADD CONSTRAINT PACHECKLISTXTAREFAS_FK4 FOREIGN KEY (tipoArquivo) REFERENCES SITIPOSARQUIVO (tipoArquivo);
ALTER TABLE PACHECKLISTXTAREFAS ADD CONSTRAINT PACHECKLISTXTAREFAS_FK5 FOREIGN KEY (tabelaSistema) REFERENCES SITABELASSISTEMA (tabelaSistema);

INSERT INTO PACHECKLISTXTAREFAS (idCheckListXTarefas, checklist, sequencia, descricao, ativo, tipoCampo, mascara, exibirCampo, tipoArquivo, obrigatorio, conteudoSugestao, tabelaSistema, observacoes) VALUES (0, 0, 0, ' ', 1, ' ', ' ', ' ', 0, 0, ' ', ' ', ' ');

COMMIT;

-- PACHECKLISTXTAREFAXOPCOES
CREATE TABLE PACHECKLISTXTAREFAXOPCOES
  (
    id                    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    conteudo              VARCHAR (256) DEFAULT ' ' NOT NULL,
    descricao             VARCHAR (256) DEFAULT ' ' NOT NULL,
    idCheckListXTarefas   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ativo                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    ordenacao             NUMERIC (11,0) DEFAULT 0 NOT NULL,
    observacoes           VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACHECKLISTXTAREFAXOPCOES ADD CONSTRAINT PACHECKLISTXTAREFAXOPCOES_PK1 PRIMARY KEY (id);
CREATE INDEX PACHECKLISTXTAREFAXOPCOES_K2 ON PACHECKLISTXTAREFAXOPCOES (descricao);
CREATE UNIQUE INDEX PACHECKLISTXTAREFAXOPCOES_K3 ON PACHECKLISTXTAREFAXOPCOES (idCheckListXTarefas, conteudo);
CREATE INDEX PACHECKLISTXTAREFAXOPCOES_K4 ON PACHECKLISTXTAREFAXOPCOES (idCheckListXTarefas, ordenacao, conteudo);
ALTER TABLE PACHECKLISTXTAREFAXOPCOES ADD CONSTRAINT PACHECKLISTXTAREFAXOPCOES_FK1 FOREIGN KEY (idCheckListXTarefas) REFERENCES PACHECKLISTXTAREFAS (idCheckListXTarefas);

INSERT INTO PACHECKLISTXTAREFAXOPCOES (id, conteudo, descricao, idCheckListXTarefas, ativo, ordenacao, observacoes) VALUES (0, ' ', 'SELECIONE', 0, 0, 0, ' ');

COMMIT;

-- MOORCAMENTOXTAREFAS
CREATE TABLE MOORCAMENTOXTAREFAS
  (
    idTarefaOrcamento        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idAtividadePrevOrcamento NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idCheckListXTarefas      NUMERIC (7,0) DEFAULT 0 NOT NULL,
    conteudo                 VARCHAR (256) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOORCAMENTOXTAREFAS ADD CONSTRAINT MOORCAMENTOXTAREFAS_PK1 PRIMARY KEY (idTarefaOrcamento);
CREATE UNIQUE INDEX MOORCAMENTOXTAREFAS_K2 ON MOORCAMENTOXTAREFAS (idAtividadePrevOrcamento, idCheckListXTarefas);
CREATE INDEX MOORCAMENTOXTAREFAS_K3 ON MOORCAMENTOXTAREFAS (idAtividadePrevOrcamento);
CREATE INDEX MOORCAMENTOXTAREFAS_K4 ON MOORCAMENTOXTAREFAS (idCheckListXTarefas);
ALTER TABLE MOORCAMENTOXTAREFAS ADD CONSTRAINT MOORCAMENTOXTAREFAS_FK1 FOREIGN KEY (idAtividadePrevOrcamento) REFERENCES MOORCAMENTOXATIVIDADEPREV (idAtividadePrevOrcamento);
ALTER TABLE MOORCAMENTOXTAREFAS ADD CONSTRAINT MOORCAMENTOXTAREFAS_FK2 FOREIGN KEY (idCheckListXTarefas) REFERENCES PACHECKLISTXTAREFAS (idCheckListXTarefas);

INSERT INTO MOORCAMENTOXTAREFAS (idTarefaOrcamento, idAtividadePrevOrcamento, idCheckListXTarefas, conteudo) VALUES (0, 0, 0, ' ');

COMMIT;

DELETE SITABELASSISTEMA WHERE tabelaSistema = 'PATAREFAS';
UPDATE SITABELASSISTEMA SET nomeCampoCodigo = 'idCheckListXTarefas', nomePublicoZoom = 'PesqChecklistXTarefas' WHERE tabelaSistema = 'PACHECKLISTXTAREFAS';
INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PACHECKLISTXTAREFAXOPCOES', 'Checklist x Opções', 1, 30817, 'PA', 'id', 'N', 4, 'descricao', 1, ' ', 0, 200005, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqChecklistXOpcoes', 1, 1, ' '); 

COMMIT;

UPDATE SIMENUS SET descricao = 'Checklist x Opções', ordenacao = 2070006381, tipoMenu = 'OCU', nomePublico = 'PesqChecklistXOpcoes' WHERE menu = 636;
UPDATE SIMENUS SET ordenacao = 2070006380, tipoMenu = 'OCU', nomePublico = 'PesqChecklistXTarefas' WHERE menu = 638;

COMMIT;

create or replace PROCEDURE ADD_ATEND_ORCAMENTO_BUSCA (
  p_usuario             IN NUMBER,
  p_estabelecimento     IN NUMBER,
  p_modeloDocumento     IN NUMBER,
  p_atendimento         IN VARCHAR2,
  /* Retornos */
  r_orcamento           OUT NUMBER)
IS
BEGIN
  SELECT COALESCE (MAX (a.orcamento), 0)
  INTO r_orcamento
  FROM MOORCAMENTOS a
  JOIN PAETAPASORCAMENTO etOrc
  ON etOrc.etapaOrcamento = a.etapaOrcamento
  WHERE a.estabelecimento = p_estabelecimento
  AND TRUNC(a.dataEmissao) = TRUNC (SYSDATE)
  AND a.atendimento = p_atendimento
  AND a.tipoDocumento = 101
  AND a.modeloDocumento = p_modeloDocumento
  AND etOrc.situacaoOrcamento <= 60
  AND EXISTS (
    SELECT 1
    FROM PAETAPASORCAMENTODEPARA etOrcDePara
    WHERE (etOrcDePara.estabelecimento = 0
      OR etOrcDePara.estabelecimento = p_estabelecimento)
    AND (etOrcDePara.perfilUsuario = 0
      OR etOrcDePara.perfilUsuario = (
      SELECT COALESCE (MAX (usu.perfilUsuario), 0)
      FROM CAUSUARIOS usu
      WHERE usu.usuario = p_usuario))
    AND (etOrcDePara.usuario = 0
      OR etOrcDePara.usuario = p_usuario)
    AND (etOrcDePara.etapaOrcamentoDe = 0
      OR etOrcDePara.etapaOrcamentoDe = a.etapaOrcamento)
    AND (etOrcDePara.etapaOrcamentoPara = 0
      OR etOrcDePara.etapaOrcamentoPara = a.etapaOrcamento));
END ADD_ATEND_ORCAMENTO_BUSCA;

/

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 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
  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 PAPROJETOS                  SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  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 PACARTOESPROPRIOS           SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE PAMODELOSFINANCEIRO         SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  UPDATE PAOPERFISCALXPESSOAS        SET pessoa = p_pessoaPara WHERE pessoa = p_pessoaDe;
  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));
  -- Cadastros
  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 CARECEITASLENTESCLIENTE     SET paciente = p_pessoaPara WHERE paciente = p_pessoaDe;
  -- 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 MOORCAMENTOXITENS           SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOORCAMENTOXBLOQUEIOSEST    SET pessoaParticipante = p_pessoaPara WHERE pessoaParticipante = p_pessoaDe;
  UPDATE MOPREDOCUMENTOS             SET pessoa = p_pessoaPara WHERE pessoa = 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 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 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 MOHISTORICOCRM              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 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 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 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 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 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 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 PACARTEIRASFINPERMITIDAS  a SET a.permitido = 1 WHERE a.usuario = p_pessoaPara AND a.permitido = 0 AND 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 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 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 MOHISTORICOCRM              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 SITIPOSARQUIVO (tipoArquivo, descricao, ativo, observacoes) values (5,'Assinatura',1,' ');

COMMIT;

-- FIM BETA 3 - 04/3/24

CREATE INDEX MOLOTESWEBSERVICE_K6 ON MOLOTESWEBSERVICE (tipoWebService, loteWebService, eventoWebService, data DESC);

UPDATE SITABELASSISTEMA SET numeroDigitosCodigo = 14 WHERE tabelaSistema = 'PACHECKLISTXTAREFAXOPCOES';

COMMIT;

DROP TABLE MOORCAMENTOXTAREFAS;

-- MOORCAMENTOXTAREFAS
CREATE TABLE MOORCAMENTOXTAREFAS
  (
    idTarefaOrcamento        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idAtividadePrevOrcamento NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idCheckListXTarefas      NUMERIC (7,0) DEFAULT 0 NOT NULL,
    ordenacao                NUMERIC (11,0) DEFAULT 0 NOT NULL,
    conteudo                 VARCHAR (256) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOORCAMENTOXTAREFAS ADD CONSTRAINT MOORCAMENTOXTAREFAS_PK1 PRIMARY KEY (idTarefaOrcamento);
CREATE UNIQUE INDEX MOORCAMENTOXTAREFAS_K2 ON MOORCAMENTOXTAREFAS (idAtividadePrevOrcamento, idCheckListXTarefas, ordenacao);
CREATE INDEX MOORCAMENTOXTAREFAS_K3 ON MOORCAMENTOXTAREFAS (idAtividadePrevOrcamento);
CREATE INDEX MOORCAMENTOXTAREFAS_K4 ON MOORCAMENTOXTAREFAS (idCheckListXTarefas);
ALTER TABLE MOORCAMENTOXTAREFAS ADD CONSTRAINT MOORCAMENTOXTAREFAS_FK1 FOREIGN KEY (idAtividadePrevOrcamento) REFERENCES MOORCAMENTOXATIVIDADEPREV (idAtividadePrevOrcamento);
ALTER TABLE MOORCAMENTOXTAREFAS ADD CONSTRAINT MOORCAMENTOXTAREFAS_FK2 FOREIGN KEY (idCheckListXTarefas) REFERENCES PACHECKLISTXTAREFAS (idCheckListXTarefas);

INSERT INTO MOORCAMENTOXTAREFAS (idTarefaOrcamento, idAtividadePrevOrcamento, idCheckListXTarefas, ordenacao, conteudo) VALUES (0, 0, 0, 0, ' ');

COMMIT;

CREATE TABLE PAIMAGENSSISTEMA_2401B AS SELECT * FROM PAIMAGENSSISTEMA;

DROP TABLE PAIMAGENSSISTEMA;

--PAIMAGENSSISTEMA
CREATE TABLE PAIMAGENSSISTEMA
  (
    id                NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoImagemSistema 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,
    dispositivo       CHAR (1) DEFAULT ' ' NOT NULL,
    menuIniciar       NUMERIC (4,0) DEFAULT 0 NOT NULL,
    paletaCor         NUMERIC (4,0) DEFAULT 0 NOT NULL,
    tema              NUMERIC (4,0) DEFAULT 0 NOT NULL,
    imagem            VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes       VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAIMAGENSSISTEMA_K2 ON PAIMAGENSSISTEMA (tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK1 FOREIGN KEY (tipoImagemSistema) REFERENCES SITIPOSIMAGEMSISTEMA (tipoImagemSistema);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK2 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK3 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK5 FOREIGN KEY (dispositivo) REFERENCES SIDISPOSITIVOS (dispositivo);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK6 FOREIGN KEY (menuIniciar) REFERENCES SIMENUINICIAR (menuIniciar);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK7 FOREIGN KEY (paletaCor) REFERENCES SIPALETACORES (paletaCor);
ALTER TABLE PAIMAGENSSISTEMA ADD CONSTRAINT PAIMAGENSSISTEMA_FK8 FOREIGN KEY (tema) REFERENCES SITEMAS (tema);

INSERT INTO PAIMAGENSSISTEMA (id, tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo, menuIniciar, paletaCor, tema, imagem, observacoes) VALUES (0, 0, 0, 0, 0, ' ', 0, 0, 0, ' ', ' ');
INSERT INTO PAIMAGENSSISTEMA (id, tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo, menuIniciar, paletaCor, tema, imagem, observacoes) SELECT id, tipoImagemSistema, estabelecimento, perfilUsuario, usuario, dispositivo, menuIniciar, paletaCor, 1, imagem, observacoes FROM PAIMAGENSSISTEMA_2401B WHERE id > 0;

COMMIT;

UPDATE SIMENUINICIAR SET descricao = 'Transparente' WHERE menuIniciar = 3;

COMMIT;

UPDATE SITEMAS SET descricao = 'Padrão' WHERE tema = 1;
UPDATE SITEMAS SET descricao = 'Claro' WHERE tema = 2;
INSERT INTO SITEMAS (tema, descricao, ativo, observacoes) values (3, 'Escuro', 1, ' ');

COMMIT;

UPDATE SIMENUS SET nomePublicoDetalhe = 'Relatorios' WHERE menu = 379;

COMMIT;

-- FIM BETA 4 - 08/3/24

DROP INDEX MONOTIFICACOES_K3;
CREATE INDEX MONOTIFICACAOXUSUARIOS_K3 ON MONOTIFICACAOXUSUARIOS (usuarioNotificado DESC, situacaoNotificacao, dataNotificacao DESC);
CREATE INDEX MONOTIFICACAOXUSUARIOS_K4 ON MONOTIFICACAOXUSUARIOS (idNotificacao);

-- FIM BETA 5 - 11/3/24

MERGE INTO PAULTIMOSIDS a USING (
  SELECT
  'MODISTRIBUICOESDFE|ULTIMO_' || LPAD (a.tipoDocumento,3,'0') || '|' || Trim(c.cnpjCpfIdEstrangeiro) nomeId,
  MAX (a.nsuDfe) ultimoId
FROM MODISTRIBUICOESDFE a
JOIN PAESTABELECIMENTOS b
ON b.estabelecimento = a.estabelecimento
JOIN CAPESSOAS c
ON c.pessoa = b.pessoaEstabelecimento
WHERE a.estabelecimento > 0
AND a.tipoDocumento > 0
AND a.nsuDfe > 0
GROUP BY 'MODISTRIBUICOESDFE|ULTIMO_' || LPAD (a.tipoDocumento,3,'0') || '|' || Trim(c.cnpjCpfIdEstrangeiro)) b
ON (  a.nomeId  = b.nomeId)
WHEN MATCHED THEN UPDATE SET a.ultimoId = b.ultimoId
WHEN NOT MATCHED THEN INSERT (
  nomeId,
  ultimoId)
VALUES (
  b.nomeId,
  b.ultimoId);

COMMIT;

-- TEMPAGENDAAUXILIAR
CREATE GLOBAL TEMPORARY TABLE TEMPAGENDAAUXILIAR
  (
    sessaoClient   VARCHAR (30) DEFAULT ' ' NOT NULL,
    contadorSessao NUMERIC (14,0) DEFAULT 0 NOT NULL,
    grupo          NUMERIC (3,0) DEFAULT 0 NOT NULL,
    id             NUMERIC (14,0) DEFAULT 0 NOT NULL,
    data           DATE,
    horaInicial    CHAR(6),
    ordenacao      NUMERIC (11,0) DEFAULT 0 NOT NULL,
    tempo          NUMERIC (15,6) DEFAULT 0 NOT NULL
  ) ON COMMIT PRESERVE ROWS;
CREATE UNIQUE INDEX TEMPAGENDAAUXILIAR_PK1 ON TEMPAGENDAAUXILIAR (sessaoClient, contadorSessao, grupo, id);
CREATE INDEX TEMPAGENDAAUXILIAR_K2 ON TEMPAGENDAAUXILIAR (sessaoClient, contadorSessao, grupo, data, horaInicial, ordenacao);

INSERT INTO SICONFIGURACOES (configuracao, descricao, ativo, subcategoriaConfiguracao, tipoCampo, mascara, exibirCampo, tipoArquivo, conteudoSugestao, tabelaSistema, observacoes) values (411, 'Tipo evento a salvar DANFE´s', 1, 30001, 'N', '4', 'E', 0, '0', 'PATIPOSEVENTO', 'Preenchendo esta configuração o sistema passa salvar o caminho dos DANFE´s (PDF´s) gerados em eventos vinculados ao documento.');
INSERT INTO SICONFIGURACOES (configuracao, descricao, ativo, subcategoriaConfiguracao, tipoCampo, mascara, exibirCampo, tipoArquivo, conteudoSugestao, tabelaSistema, observacoes) values (412, 'Tipo evento a salvar boletos', 1, 30001, 'N', '4', 'E', 0, '0', 'PATIPOSEVENTO', 'Preenchendo esta configuração o sistema passa salvar o caminho dos boletos (PDF´s) gerados em eventos vinculados ao documento.');
INSERT INTO SICONFIGURACOES (configuracao, descricao, ativo, subcategoriaConfiguracao, tipoCampo, mascara, exibirCampo, tipoArquivo, conteudoSugestao, tabelaSistema, observacoes) values (413, 'Adicionar campo "Marca" do produto na observação complementar do item', 1, 30001, 'L', '1', 'E', 0, 'N', ' ', ' ');
INSERT INTO SICONFIGURACOES (configuracao, descricao, ativo, subcategoriaConfiguracao, tipoCampo, mascara, exibirCampo, tipoArquivo, conteudoSugestao, tabelaSistema, observacoes) values (414, 'Conferir Entradas por Transferência (Volumes)', 1, 30001, 'L', '1', 'E', 0, 'S', ' ', ' ');

COMMIT;

-- FIM BETA 6 - 12/3/24

create or replace FUNCTION FUNC_ADD_GERA_XML_ENVIO (
  p_idDocumentoFiscal      IN NUMBER,
  p_seqLoteWebServiceEnvio IN NUMBER,
  p_loteWebService         IN VARCHAR)
  RETURN CLOB
/*  
  Todas as alterações realizadas estão comentadas como CK
  1º Efetuada alteração na exigilidadeISSqn que estava fixa como 3 e foi aplicado para utlizar o IndicadorISSqn do item da nota fiscal
*/  
IS
  v_xml                         CLOB;
  v_tecnologiaNFSe              NUMBER;
  v_versaoNFSe                  VARCHAR(20);
  v_estab_nomeRazaoSocial       VARCHAR(60);
  v_estab_indicadorPessoa       CHAR(1);
  v_estab_cnpjCpfIdEstrangeiro  VARCHAR(20);
  v_estab_inscricaoMunicipal    VARCHAR(15);
  v_estab_municipio             NUMBER;
  v_estab_pais                  VARCHAR(4);
  v_estab_uf                    CHAR(2);
  v_regimeEspecialTributacao    CHAR (1);
  v_indicadorIssqn              CHAR (1);
  v_optanteSimplesNacional      NUMBER;
  v_incentivadorCultural        NUMBER;
  v_incentivoFiscal             NUMBER;
  v_intermediario               NUMBER;
  v_pess_nomeRazaoSocial        VARCHAR(60);
  v_pess_apelidoFantasia        VARCHAR(60);
  v_pess_indicadorPessoa        CHAR(1);
  v_pess_cnpjCpfIdEstrangeiro   VARCHAR(20);
  v_pess_inscricaoEstadual      VARCHAR(14);
  v_pess_inscricaoMunicipal     VARCHAR(15);
  v_pess_logradouro             VARCHAR(60);
  v_pess_numero                 VARCHAR(60);
  v_pess_complemento            VARCHAR(60);
  v_pess_bairroDistrito         VARCHAR(60);
  v_pess_municipio              NUMBER;
  v_pess_cep                    NUMBER;
  v_pess_pais                   VARCHAR(4);
  v_pess_uf                     CHAR(2);
  v_pess_observacoesEndereco    VARCHAR(4000);
  v_pess_fone                   VARCHAR(14);
  v_pess_email                  VARCHAR(60);
  v_interm_nomeRazaoSocial      VARCHAR(60);
  v_interm_indicadorPessoa      CHAR(1);
  v_interm_cnpjCpfIdEstrangeiro VARCHAR(20);
  v_interm_inscricaoMunicipal   VARCHAR(15);
  v_municipioFatoGerador        NUMBER;
  v_documentoFiscal             VARCHAR(15);
  v_serieFiscal                 VARCHAR(4);
  v_dataEmissao                 DATE;
  v_dataCompetencia             DATE;
  v_baseCalculoCrs              NUMBER;
  v_valorServicos               NUMBER;
  v_valorDeducoes               NUMBER;
  v_valorPis                    NUMBER;
  v_valorCofins                 NUMBER;
  v_valorInss                   NUMBER;
  v_valorIrrf                   NUMBER;
  v_valorCsll                   NUMBER;
  v_valorOutrasRetencoes        NUMBER;
  v_valorIssqn                  NUMBER;
  v_aliquotaIssqn               NUMBER;
  v_percentualCargaTributariaFe NUMBER;
  v_valorCargaTributariaFederal NUMBER;
  v_percentualCargaTributariaEs NUMBER;
  v_valorCargaTributariaEstad   NUMBER;
  v_percentualCargaTributariaMu NUMBER;
  v_valorCargaTributariaMunicip NUMBER;
  v_valorDescontoTotal          NUMBER;
  v_valorDescontoCondicionado   NUMBER;
  v_irrfIndenizacao             NUMBER;
  v_issRetido                   NUMBER;
  v_tributadoForaMunicipio      NUMBER;
  v_responsavelRetencao         NUMBER;
  v_listaServicos               NUMBER;
  v_cnae                        NUMBER;
  v_produtoImpresso             VARCHAR(60);
  v_quantidade                  NUMBER;
  v_precoUnitario               NUMBER;
  v_codigoTributacaoMunicipio   VARCHAR(60);
  v_discriminacao               VARCHAR(4000);
  v_numeroProcesso              VARCHAR(60);
  v_codigoObra                  VARCHAR(60);
  v_art                         VARCHAR(60);
  v_outrasInformacoes           VARCHAR(4000);
  v_formaPagamento              NUMBER;
  v_numeroParcelas              NUMBER;

BEGIN
  -- NÃO DESENVOLVIDO
  v_baseCalculoCrs              := 0;
  v_valorDeducoes               := 0;
  v_valorDescontoCondicionado   := 0;
  v_irrfIndenizacao             := 0;
  v_responsavelRetencao         := 0;
  v_formaPagamento              := 0;
  v_numeroParcelas              := 0;

  -- DOCUMENTO
  SELECT
    CASE
      WHEN munEst.versaoNFSe = '1.00'
      THEN TO_CHAR (a.dataEmissao, 'YYYY') || LPAD (a.documentoFiscal, 11, '0')
      ELSE TO_CHAR (a.documentoFiscal)
    END,
    a.serieFiscal,
    a.dataEmissao,
    a.municipioFatoGerador,
    a.valorServicos,
    a.valorDescontoTotal,
    COALESCE (SUBSTR( TRIM(
      COALESCE ((SELECT LISTAGG(UPPER(infCompl.descInformacaoComplementar), ' ')
        WITHIN GROUP (ORDER BY infCompl.sequencia)
        FROM MODOCFISCALXINFOCOMPLEMEN infCompl
        WHERE infCompl.idDocumentoFiscal = a.idDocumentoFiscal
        AND infCompl.geradoPeloSistema = 1
        AND infCompl.descInformacaoComplementar <> ' '),
        ' ')),1,4000),' '),
    COALESCE (docXServ.dataCompetencia, a.dataEmissao),
    FUNC_ADD_REMOVE_CARACT_ESPEC (obra.codigoObra),
    FUNC_ADD_REMOVE_CARACT_ESPEC (obra.art),
    FUNC_ADD_REMOVE_CARACT_ESPEC (pessEst.nomeRazaoSocial),
    pessEst.indicadorPessoa,
    CASE
      WHEN pessEst.cnpjCpfIdEstrangeiro <> ' '
      THEN pessEst.cnpjCpfIdEstrangeiro
      WHEN pessEst.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (pessEst.inscricaoMunicipal),
    CASE WHEN pessEst.regimeTributario IN ('1', '2') THEN 1 ELSE 2 END,
    endEst.municipio,
    endEst.pais,
    munEst.uf,
    munEst.tecnologiaNFSe,
    munEst.versaoNFSe,
    COALESCE (estXnfse.regimeEspecialTributacao, ' '),
    CASE WHEN estXnfse.incentivadorCultural = 1 THEN 1 ELSE 2 END,
    COALESCE (docXServ.intermediario, 0),
    CASE WHEN a.pessoa = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (pess.nomeRazaoSocial) END,
    CASE WHEN a.pessoa = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (pess.apelidoFantasia) END,
    pess.indicadorPessoa,
    CASE
      WHEN pess.cnpjCpfIdEstrangeiro <> ' '
      THEN pess.cnpjCpfIdEstrangeiro
      WHEN pess.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (pess.inscricaoEstadual),
    FUNC_ADD_REMOVE_CARACT_ESPEC (pess.inscricaoMunicipal),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.logradouro),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.numero),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.complemento),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.bairroDistrito),
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.municipio),
    endPess.cep,
    endPess.pais,
    munPess.uf,
    FUNC_ADD_REMOVE_CARACT_ESPEC (endPess.observacoes),
    fonPess.fone,
    emailPess.email,
    CASE WHEN COALESCE (docXServ.intermediario, 0) = 0 THEN ' ' ELSE FUNC_ADD_REMOVE_CARACT_ESPEC (interm.nomeRazaoSocial) END,
    interm.indicadorPessoa,
    CASE
      WHEN interm.cnpjCpfIdEstrangeiro <> ' '
      THEN interm.cnpjCpfIdEstrangeiro
      WHEN interm.indicadorPessoa = 'J'
      THEN '00000000000000'
      ELSE '00000000000'
    END,
    FUNC_ADD_REMOVE_CARACT_ESPEC (interm.inscricaoMunicipal)
  INTO
    v_documentoFiscal,
    v_serieFiscal,
    v_dataEmissao,
    v_municipioFatoGerador,
    v_valorServicos,
    v_valorDescontoTotal,
    v_outrasInformacoes,
    v_dataCompetencia,
    v_codigoObra,
    v_art,
    v_estab_nomeRazaoSocial,
    v_estab_indicadorPessoa,
    v_estab_cnpjCpfIdEstrangeiro,
    v_estab_inscricaoMunicipal,
    v_optanteSimplesNacional,
    v_estab_municipio,
    v_estab_pais,
    v_estab_uf,
    v_tecnologiaNFSe,
    v_versaoNFSe,
    v_regimeEspecialTributacao,
    v_incentivadorCultural,
    v_intermediario,
    v_pess_nomeRazaoSocial,
    v_pess_apelidoFantasia,
    v_pess_indicadorPessoa,
    v_pess_cnpjCpfIdEstrangeiro,
    v_pess_inscricaoEstadual,
    v_pess_inscricaoMunicipal,
    v_pess_logradouro,
    v_pess_numero,
    v_pess_complemento,
    v_pess_bairroDistrito,
    v_pess_municipio,
    v_pess_cep,
    v_pess_pais,
    v_pess_uf,
    v_pess_observacoesEndereco,
    v_pess_fone,
    v_pess_email,
    v_interm_nomeRazaoSocial,
    v_interm_indicadorPessoa,
    v_interm_cnpjCpfIdEstrangeiro,
    v_interm_inscricaoMunicipal
  FROM MODOCUMENTOSFISCAIS a
  LEFT JOIN MODOCFISCALXSERVICO docXServ
  ON docXServ.idDocumentoFiscal = a.idDocumentoFiscal
  JOIN PAOBRAS obra
  ON obra.idObra = COALESCE (docXServ.idObra, 0)
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = a.estabelecimento
  LEFT JOIN PAESTABELECIMENTOXNFSE estXnfse
  ON estXnfse.estabelecimento = a.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAENDERECOSPESSOA endEst
  ON endEst.enderecoPessoa = COALESCE ((
    SELECT MAX (end.enderecoPessoa)
    FROM CAENDERECOSPESSOA end
    WHERE end.pessoa = est.pessoaEstabelecimento
    AND end.ativo = 1
    AND end.principal = 1), 0)
  JOIN SIMUNICIPIOS munEst
  ON munEst.municipio = endEst.municipio
  JOIN CAPESSOAS pess
  ON pess.pessoa = a.pessoa
  JOIN CAENDERECOSPESSOA endPess
  ON endPess.enderecoPessoa = COALESCE ((
    SELECT MAX (end.enderecoPessoa)
    FROM CAENDERECOSPESSOA end
    WHERE end.pessoa = a.pessoa
    AND end.ativo = 1
    AND end.principal = 1), 0)
  JOIN SIMUNICIPIOS munPess
  ON munPess.municipio = endPess.municipio
  JOIN CAFONESPESSOA fonPess
  ON fonPess.idFonePessoa = COALESCE ((
    SELECT MAX (fon.idFonePessoa)
    FROM CAFONESPESSOA fon
    WHERE fon.pessoa = a.pessoa
    AND fon.ativo = 1
    AND fon.principal = 1), 0)
  JOIN CAEMAILSPESSOA emailPess
  ON emailPess.idEmailPessoa = COALESCE ((
    SELECT MAX (email.idEmailPessoa)
    FROM CAEMAILSPESSOA email
    WHERE email.pessoa = a.pessoa
    AND email.ativo = 1
    AND email.principal = 1), 0)
  JOIN CAPESSOAS interm
  ON interm.pessoa = COALESCE (docXServ.intermediario, 0)
  WHERE a.idDocumentoFiscal = p_idDocumentoFiscal;

  -- ITENS
  SELECT
    COALESCE (MAX (gradProd.produtoImpresso), ' '),
    COALESCE (SUM (a.quantidade), 0),
    COALESCE (MAX (a.precoUnitario), 0),
    COALESCE (MAX (a.indicadorIssqn), ' '),
    COALESCE (SUM (a.valorIssqn), 0),
    COALESCE (MAX (a.aliquotaIssqn), 0),
    CASE WHEN COALESCE (MAX (a.retidoIssqn), 0) = 1 THEN 1 ELSE 2 END,
    CASE WHEN COALESCE (MAX (a.tributadoForaMunicipio), 0) = 1 THEN 1 ELSE 2 END,
    CASE WHEN COALESCE (MAX (a.incentivoFiscal), 0) = 1 THEN 1 ELSE 2 END,
    COALESCE (MAX (a.listaServicos), 0),
    COALESCE (MAX (a.cnae), 0),
    COALESCE (MAX (servMun.codigoServicoMunicipio), ' '),
    COALESCE (MAX (a.numeroProcessoAdministrativo), ' '),
    COALESCE (SUM (a.valorRetInss), 0),
    COALESCE (SUM (a.valorRetIrrf), 0),
    COALESCE (SUM (a.valorRetPis), 0),
    COALESCE (SUM (a.valorRetCofins), 0),
    COALESCE (SUM (a.valorRetCsll), 0),
    COALESCE (SUM (a.valorRetOutros), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpFederais), 0),
    COALESCE (SUM (a.valorEstimadoImpFederais), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpEstaduais), 0),
    COALESCE (SUM (a.valorEstimadoImpEstaduais), 0),
    COALESCE (MAX (a.aliquotaEstimadaImpMunicipais), 0),
    COALESCE (SUM (a.valorEstimadoImpMunicipais), 0),
    FUNC_ADD_REMOVE_CARACT_ESPEC (COALESCE (MAX (
      CASE
        WHEN a.quantidadeConvertida = 1
          OR v_tecnologiaNFSe = 2
        THEN ''
        ELSE TO_CHAR(a.quantidadeConvertida)
          || ' '
          || a.unidadeMedidaConversao
          || ' X '
      END
      || TRIM (TRIM (gradProd.descricaoImpressa
      || ' '
      || a.observacoes)
      || CASE
           WHEN v_versaoNFSe = '1.00'
           THEN ' |||| Trib. Aprox.: R$ ' || TO_CHAR (a.valorEstimadoImpFederais, 'FM9999999999990D00') || ' Federal e R$ ' || TO_CHAR (a.valorEstimadoImpMunicipais, 'FM9999999999990D00') || ' Municipal'
           ELSE ''
         END)), ' '))
  INTO
    v_produtoImpresso,
    v_quantidade,
    v_precoUnitario,
    v_indicadorIssqn,
    v_valorIssqn,
    v_aliquotaIssqn,
    v_issRetido,
    v_tributadoForaMunicipio,
    v_incentivoFiscal,
    v_listaServicos,
    v_cnae,
    v_codigoTributacaoMunicipio,
    v_numeroProcesso,
    v_valorInss,
    v_valorIrrf,
    v_valorPis,
    v_valorCofins,
    v_valorCsll,
    v_valorOutrasRetencoes,
    v_percentualCargaTributariaFe,
    v_valorCargaTributariaFederal,
    v_percentualCargaTributariaEs,
    v_valorCargaTributariaEstad,
    v_percentualCargaTributariaMu,
    v_valorCargaTributariaMunicip,
    v_discriminacao
  FROM MODOCFISCALXITENS a
  JOIN CAGRADESPRODUTO gradProd
  ON gradProd.gradeProduto = a.gradeProduto
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  JOIN PASERVICOSMUNICIPIOS servMun
  ON servMun.idServicoMunicipio = a.idServicoMunicipio
  WHERE a.idDocumentoFiscal = p_idDocumentoFiscal
  AND a.cancelado = 0;

  IF v_tecnologiaNFSe = 2 THEN
    -- NFS-e
    v_xml := '<nfse id="rps_' || v_documentoFiscal || '">'
  || '<rps>'
    || FUNC_ADD_TAG_XML ('nro_recibo_provisorio', v_documentoFiscal)
    || FUNC_ADD_TAG_XML ('serie_recibo_provisorio', v_serieFiscal)
    || FUNC_ADD_TAG_XML ('data_emissao_recibo_provisorio', CASE WHEN v_dataEmissao IS NULL THEN '00/00/0000' ELSE TO_CHAR (v_dataEmissao, 'DD/MM/YYYY') END)
    || FUNC_ADD_TAG_XML ('hora_emissao_recibo_provisorio', CASE WHEN v_dataEmissao IS NULL THEN '00:00:00' ELSE TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
  || '</rps>';

    -- NF
    v_xml := v_xml
  || '<nf>'
    || FUNC_ADD_TAG_XML ('valor_total', TO_CHAR (v_valorServicos - v_valorDescontoTotal, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_desconto', TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_ir', TO_CHAR (v_valorIrrf, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_inss', TO_CHAR (v_valorInss, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_contribuicao_social', TO_CHAR (v_valorCsll, 'FM9999999999990D00'))
    || '<valor_rps>0,00</valor_rps>'
    || FUNC_ADD_TAG_XML ('valor_pis', TO_CHAR (v_valorPis, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('valor_cofins', TO_CHAR (v_valorCofins, 'FM9999999999990D00'))
    || FUNC_ADD_TAG_XML ('observacao', v_outrasInformacoes)
  || '</nf>';

    -- Prestador
    v_xml := v_xml
  || '<prestador>'
    || FUNC_ADD_TAG_XML ('cpfcnpj', v_estab_cnpjCpfIdEstrangeiro)
    || FUNC_ADD_TAG_XML ('cidade', TO_CHAR (v_estab_municipio))
  || '</prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
  || '<tomador>'
    || FUNC_ADD_TAG_XML ('tipo', v_pess_indicadorPessoa)
    || FUNC_ADD_TAG_XML ('cpfcnpj', v_pess_cnpjCpfIdEstrangeiro)
    || FUNC_ADD_TAG_XML ('ie', v_pess_inscricaoEstadual)
    || FUNC_ADD_TAG_XML ('nome_razao_social', v_pess_nomeRazaoSocial)
    || FUNC_ADD_TAG_XML ('sobrenome_nome_fantasia', v_pess_apelidoFantasia)
    || FUNC_ADD_TAG_XML ('logradouro', v_pess_logradouro)
    || FUNC_ADD_TAG_XML ('email', v_pess_email)
    || FUNC_ADD_TAG_XML ('numero_residencia', v_pess_numero)
    || FUNC_ADD_TAG_XML ('complemento', v_pess_complemento)
    || FUNC_ADD_TAG_XML ('ponto_referencia', v_pess_observacoesEndereco)
    || FUNC_ADD_TAG_XML ('bairro', v_pess_bairroDistrito)
    || FUNC_ADD_TAG_XML ('cidade', TO_CHAR (v_pess_municipio))
    || FUNC_ADD_TAG_XML ('cep', TO_CHAR (v_pess_cep))
    || '<ddd_fone_comercial/>'
    || FUNC_ADD_TAG_XML ('fone_comercial', v_pess_fone)
    || '<ddd_fone_residencial/>'
    || '<fone_residencial/>'
    || '<ddd_fax/>'
    || '<fone_fax/>'
  || '</tomador>';

    -- Itens
    v_xml := v_xml
  || '<itens>'
    || '<lista>'
      || FUNC_ADD_TAG_XML ('codigo_local_prestacao_servico', TO_CHAR (v_municipioFatoGerador))
      || FUNC_ADD_TAG_XML ('codigo_item_lista_servico', TO_CHAR (v_listaServicos))
      || FUNC_ADD_TAG_XML ('descritivo', v_discriminacao)
      || FUNC_ADD_TAG_XML ('aliquota_item_lista_servico', TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('situacao_tributaria', '0')
      || FUNC_ADD_TAG_XML ('valor_tributavel', TO_CHAR (v_valorIssqn, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('valor_deducao', TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('valor_issrf', CASE WHEN v_issRetido = 1 THEN  TO_CHAR (v_valorIssqn, 'FM9999999999990D00') ELSE '0,00' END)
      || FUNC_ADD_TAG_XML ('tributa_municipio_prestador', CASE WHEN v_tributadoForaMunicipio = 1 THEN 'N' ELSE 'S' END)
      || '<unidade_codigo/>'
      || FUNC_ADD_TAG_XML ('unidade_quantidade', TO_CHAR (v_quantidade, 'FM9999999999990D00'))
      || FUNC_ADD_TAG_XML ('unidade_valor_unitario', TO_CHAR (v_precoUnitario - (v_valorDescontoTotal / v_quantidade), 'FM9999999999990D00'))
    || '</lista>'
  || '</itens>'
  -- Assinar Aqui
|| '</nfse>';

  ELSIF v_versaoNFSe = '1.00' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">'
      || '<LoteRps Id="lote" versao="1.00">'
        || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
        || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
        || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
        || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')
        || '<ListaRps>'
          || '<Rps>'
            || '<InfRps Id="rps:' || v_documentoFiscal || TRIM(v_serieFiscal) || '">'
              || '<IdentificacaoRps>'
                || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
                || FUNC_ADD_TAG_XML ('Serie', v_serieFiscal)
                || FUNC_ADD_TAG_XML ('Tipo', '1')
              || '</IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
              || FUNC_ADD_TAG_XML ('NaturezaOperacao', v_indicadorIssqn)
              || CASE WHEN v_regimeEspecialTributacao = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao) END
              || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
              || FUNC_ADD_TAG_XML ('IncentivadorCultural', TO_CHAR (v_incentivadorCultural))
              || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END)
              || FUNC_ADD_TAG_XML ('Status', '1');

    -- Serviço
    v_xml := v_xml
              || '<Servico>'
                || '<Valores>'
                  || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
                  || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
                || '</Valores>'
                || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos,4,'0'),1,2) || '.' || SUBSTR (LPAD (v_listaServicos,4,'0'),3,2))
                || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
                || FUNC_ADD_TAG_XML ('Discriminacao', v_discriminacao)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
              || '</Servico>';

  -- Prestador (Estabelecimento)
  v_xml := v_xml
              || '<Prestador>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
              || '</Prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
              || '<Tomador>'
                || '<IdentificacaoTomador>'
                  || '<CpfCnpj>'
                    || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
                  || '</CpfCnpj>'
                  || CASE WHEN v_pess_inscricaoMunicipal = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal) END
                || '</IdentificacaoTomador>'
                || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
                || '<Endereco>'
                  || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
                  || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
                  || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
                  || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
                  || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
                  || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
                  || FUNC_ADD_TAG_XML ('Cep', TO_CHAR (v_pess_cep))
                || '</Endereco>'
              || '</Tomador>';

    -- Intermediário
    IF v_intermediario > 0 THEN
      v_xml := v_xml
              || '<IntermediarioServico>'
                || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
              || '</IntermediarioServico>';
    END IF;

    -- Construção Civil
    IF v_codigoObra <> ' ' THEN
      v_xml := v_xml
              || '<ConstrucaoCivil>'
                || FUNC_ADD_TAG_XML ('CodigoObra', v_codigoObra)
                || FUNC_ADD_TAG_XML ('Art', v_art)
              || '</ConstrucaoCivil>';
    END IF;

    -- Outros
    v_xml := v_xml
            || '</InfRps>'
            -- Assinar aqui
          || '</Rps>'
        || '</ListaRps>'
      || '</LoteRps>'
      -- Assinar aqui
    || '</EnviarLoteRpsEnvio>';
  ELSIF v_versaoNFSe = '2.03' THEN
    -- NFS-e
    v_xml := '<EnviarLoteRpsEnvio>'
  || '<LoteRps Id="'
  || CASE WHEN v_dataEmissao IS NULL THEN '00000000' ELSE TO_CHAR (v_dataEmissao, 'YYYYMMDD') END
  || LPAD (p_loteWebService, 4, '0')
  || '" versao="2.03">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || '<QuantidadeRps>1</QuantidadeRps>'
    || '<ListaRps>'
      || '<Rps>'
        || '<InfDeclaracaoPrestacaoServico>'
          || '<Rps>'
            || '<IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
              || FUNC_ADD_TAG_XML ('Serie', '0')
              || FUNC_ADD_TAG_XML ('Tipo', '1')
            || '</IdentificacaoRps>'
            || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') END)
            || FUNC_ADD_TAG_XML ('Status', '1')
          || '</Rps>'
          || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') END);

    -- Serviço
    v_xml := v_xml
          || '<Servico>'
            || '<Valores>'
              || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
              || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
            || '</Valores>'
            || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
            || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
            || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
            || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
            || FUNC_ADD_TAG_XML ('Discriminacao', v_discriminacao)
            || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
            || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
          || '</Servico>';

    -- Prestador
    v_xml := v_xml
          || '<Prestador>'
            || '<CpfCnpj>'
              || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
            || '</CpfCnpj>'
            || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
          || '</Prestador>';

    -- Tomador
    v_xml := v_xml
          || '<Tomador>'
            || '<IdentificacaoTomador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
            || '</IdentificacaoTomador>'
            || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
            || '<Endereco>'
              || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
              || CASE WHEN v_pess_numero = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Numero', v_pess_numero) END
              || CASE WHEN v_pess_complemento = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento) END
              || CASE WHEN v_pess_bairroDistrito = ' ' THEN '' ELSE FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito) END
              || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
              || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
              || FUNC_ADD_TAG_XML ('Cep', TO_CHAR (v_pess_cep))
            || '</Endereco>'
            || '<Contato>'
            || '</Contato>'
          || '</Tomador>';
    -- Outros
    v_xml := v_xml
          || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
          || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
        || '</InfDeclaracaoPrestacaoServico>'
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
  -- Assinar aqui
|| '</EnviarLoteRpsEnvio>';
  ELSE
    -- NFS-e
    v_xml := '<EnviarLoteRpsSincronoEnvio xmlns="http://www.abrasf.org.br/nfse.xsd">'
  || '<LoteRps Id="1'
  || TO_CHAR (v_dataEmissao, 'YYYY')
  || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
  || LPAD (p_seqLoteWebServiceEnvio, 14, '0')
  || '" versao="20.01">'
    || FUNC_ADD_TAG_XML ('NumeroLote', p_loteWebService)
    || '<CpfCnpj>'
      || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_estab_cnpjCpfIdEstrangeiro)
    || '</CpfCnpj>'
    || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
    || FUNC_ADD_TAG_XML ('QuantidadeRps', '1')
    || '<ListaRps>'
      || '<Rps>'
        || '<tcDeclaracaoPrestacaoServico>'
          || '<InfDeclaracaoPrestacaoServico Id="1'
            || CASE WHEN v_estab_indicadorPessoa = 'J' THEN '1' ELSE '2' END || SUBSTR ('00000000000000' || TRIM (v_estab_cnpjCpfIdEstrangeiro), -14)
            || LPAD (p_loteWebService, 14, '0')
            || '">'          
            || '<Rps>'
              || '<IdentificacaoRps>'
                || FUNC_ADD_TAG_XML ('Numero', v_documentoFiscal)
                || FUNC_ADD_TAG_XML ('Serie', 'UNICA')
                || FUNC_ADD_TAG_XML ('Tipo', '1')
              || '</IdentificacaoRps>'
              || FUNC_ADD_TAG_XML ('DataEmissao', CASE WHEN v_dataEmissao IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataEmissao, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataEmissao, 'HH24:MI:SS') END)
              || FUNC_ADD_TAG_XML ('Status', '1')
            || '</Rps>'
            || FUNC_ADD_TAG_XML ('Competencia', CASE WHEN v_dataCompetencia IS NULL THEN '0000-00-00T00:00:00' ELSE TO_CHAR (v_dataCompetencia, 'YYYY-MM-DD') || 'T' || TO_CHAR (v_dataCompetencia, 'HH24:MI:SS') END)
            || FUNC_ADD_TAG_XML ('IdCidade', TO_CHAR (v_estab_municipio));

    -- Serviço
    v_xml := v_xml
            || '<Servico>'
              || '<tcDadosServico>'
                || '<Valores>'
                  || FUNC_ADD_TAG_XML ('BaseCalculoCRS', REPLACE (TO_CHAR (v_baseCalculoCrs, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorServicos', REPLACE (TO_CHAR (v_valorServicos, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorDeducoes', REPLACE (TO_CHAR (v_valorDeducoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorPis', REPLACE (TO_CHAR (v_valorPis, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCofins', REPLACE (TO_CHAR (v_valorCofins, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorInss', REPLACE (TO_CHAR (v_valorInss, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIr', REPLACE (TO_CHAR (v_valorIrrf, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorCsll', REPLACE (TO_CHAR (v_valorCsll, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('OutrasRetencoes', REPLACE (TO_CHAR (v_valorOutrasRetencoes, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('ValorIss', REPLACE (TO_CHAR (v_valorIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('Aliquota', REPLACE (TO_CHAR (v_aliquotaIssqn, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoIncondicionado', REPLACE (TO_CHAR (v_valorDescontoTotal, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('DescontoCondicionado', REPLACE (TO_CHAR (v_valorDescontoCondicionado, 'FM9999999999990D00'), ',', '.'))
                  || FUNC_ADD_TAG_XML ('IrrfIndenizacao', TO_CHAR (v_irrfIndenizacao))
                || '</Valores>'
                || FUNC_ADD_TAG_XML ('IssRetido', TO_CHAR (v_issRetido))
                || FUNC_ADD_TAG_XML ('ResponsavelRetencao', TO_CHAR (v_responsavelRetencao))
                || FUNC_ADD_TAG_XML ('ItemListaServico', SUBSTR (LPAD (v_listaServicos, 4, '0'), 1, 2) || '.' || SUBSTR (LPAD (v_listaServicos, 4, '0'), 3, 2))
                || FUNC_ADD_TAG_XML ('CodigoCnae', LPAD (v_cnae, 7, '0'))
                || FUNC_ADD_TAG_XML ('CodigoTributacaoMunicipio', v_codigoTributacaoMunicipio)
                || FUNC_ADD_TAG_XML ('Discriminacao', v_discriminacao)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_estab_municipio))
                || FUNC_ADD_TAG_XML ('CodigoPais', v_estab_pais)
                || FUNC_ADD_TAG_XML ('ExigibilidadeISS', v_indicadorIssqn)
                || FUNC_ADD_TAG_XML ('MunicipioIncidencia', TO_CHAR (v_municipioFatoGerador))
                || FUNC_ADD_TAG_XML ('NumeroProcesso', v_numeroProcesso)
              || '</tcDadosServico>'
            || '</Servico>';

    -- Prestador (Estabelecimento)
    v_xml := v_xml
            || '<Prestador>'
              || '<CpfCnpj>'
                || FUNC_ADD_TAG_XML (CASE WHEN v_estab_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END , v_estab_cnpjCpfIdEstrangeiro)
              || '</CpfCnpj>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_estab_nomeRazaoSocial)
              || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_estab_inscricaoMunicipal)
            || '</Prestador>';

    -- Tomador (Cliente)
    v_xml := v_xml
            || '<Tomador>'
              || '<IdentificacaoTomador>'
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_pess_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_pess_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_pess_inscricaoMunicipal)
              || '</IdentificacaoTomador>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_pess_nomeRazaoSocial)
              || '<Endereco>'
                || FUNC_ADD_TAG_XML ('Endereco', v_pess_logradouro)
                || FUNC_ADD_TAG_XML ('Numero', v_pess_numero)
                || FUNC_ADD_TAG_XML ('Complemento', v_pess_complemento)
                || FUNC_ADD_TAG_XML ('Bairro', v_pess_bairroDistrito)
                || FUNC_ADD_TAG_XML ('CodigoMunicipio', TO_CHAR (v_pess_municipio))
                || FUNC_ADD_TAG_XML ('Uf', v_pess_uf)
                || FUNC_ADD_TAG_XML ('CodigoPais', v_pess_pais)
                || FUNC_ADD_TAG_XML ('Cep', TO_CHAR (v_pess_cep))
              || '</Endereco>'
              || '<Contato>'
                || FUNC_ADD_TAG_XML ('Telefone', v_pess_fone)
                || FUNC_ADD_TAG_XML ('Email', v_pess_email)
              || '</Contato>'
            || '</Tomador>';

    IF v_intermediario <> 0 THEN
      -- Intermediário
      v_xml := v_xml
            || '<Intermediario>'
              || '<IdentificacaoIntermediario>'
                || '<CpfCnpj>'
                  || FUNC_ADD_TAG_XML (CASE WHEN v_interm_indicadorPessoa = 'J' THEN 'Cnpj' ELSE 'Cpf' END, v_interm_cnpjCpfIdEstrangeiro)
                || '</CpfCnpj>'
                || FUNC_ADD_TAG_XML ('InscricaoMunicipal', v_interm_inscricaoMunicipal)
              || '</IdentificacaoIntermediario>'
              || FUNC_ADD_TAG_XML ('RazaoSocial', v_interm_nomeRazaoSocial)
            || '</Intermediario>';
    END IF;

    -- Construção Civil
    v_xml := v_xml
            || '<ConstrucaoCivil>'
              || FUNC_ADD_TAG_XML ('CodigoObra', v_codigoObra)
              || FUNC_ADD_TAG_XML ('Art', v_art)
            || '</ConstrucaoCivil>';

    -- Outros
    v_xml := v_xml
            || FUNC_ADD_TAG_XML ('RegimeEspecialTributacao', v_regimeEspecialTributacao)
            || FUNC_ADD_TAG_XML ('NaturezaOperacao', v_indicadorIssqn)
            || FUNC_ADD_TAG_XML ('OptanteSimplesNacional', TO_CHAR (v_optanteSimplesNacional))
            || FUNC_ADD_TAG_XML ('IncentivoFiscal', TO_CHAR (v_incentivoFiscal))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributaria', TO_CHAR (v_percentualCargaTributariaFe))
            || FUNC_ADD_TAG_XML ('ValorCargaTributaria', TO_CHAR (v_valorCargaTributariaFederal))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributariaEstadual', TO_CHAR (v_percentualCargaTributariaEs))
            || FUNC_ADD_TAG_XML ('ValorCargaTributariaEstadual', TO_CHAR (v_valorCargaTributariaEstad))
            || FUNC_ADD_TAG_XML ('PercentualCargaTributariaMunicipal', TO_CHAR (v_percentualCargaTributariaMu))
            || FUNC_ADD_TAG_XML ('ValorCargaTributariaMunicipal', TO_CHAR (v_valorCargaTributariaMunicip))
            || FUNC_ADD_TAG_XML ('OutrasInformacoes', v_outrasInformacoes)
            || FUNC_ADD_TAG_XML ('SiglaUF', v_estab_uf)
            || FUNC_ADD_TAG_XML ('IdCidade', TO_CHAR (v_estab_municipio))
            || FUNC_ADD_TAG_XML ('FormaPagamento', v_formaPagamento)
--                    <!--identificação da forma de pagamento-->
--                        <!--0-Não identificada-->
--                        <!--1-A Vista-->
--                        <!--2-Apresentação-->
--                        <!--3-A Prazo-->
--                        <!--4-Cartão de Débito-->
--                        <!--5-Cartão de Crédito-->
            || FUNC_ADD_TAG_XML ('NumeroParcelas', v_numeroParcelas)
--                    <!--Caso não houver parcelamento informar o 0 e não colocar as tags abaixo-->
--            || '<Parcelamento>'
--              || '<Parcelas>'
--                || '<tcParcela>'
--                  || '<Numero>1</Numero>'
--                  || '<Valor>20.00</Valor>'
--                  || '<DataVencimento>2019-05-02T00:00:00</DataVencimento>'
--                || '</tcParcela>'
--                || '<tcParcela>'
--                  || '<Numero>2</Numero>'
--                  || '<Valor>20.00</Valor>'
--                  || '<DataVencimento>2019-06-02T00:00:00</DataVencimento>'
--                || '</tcParcela>'
--              || '</Parcelas>'
--            || '</Parcelamento>'
          || '</InfDeclaracaoPrestacaoServico>'
        -- Assinar aqui
        || '</tcDeclaracaoPrestacaoServico>'
      || '</Rps>'
    || '</ListaRps>'
  || '</LoteRps>'
|| '</EnviarLoteRpsSincronoEnvio>';

  END IF;
  RETURN v_xml;
END;

/

-- FIM BETA 7 - 13/3/24

UPDATE PACATEGORIASCONTABEIS SET descricao = 'SELECIONE' WHERE categoriaContabil = 0;

COMMIT;

CREATE TABLE CAPESSOAXCONTASCONTABEIS_2401 AS SELECT * FROM CAPESSOAXCONTASCONTABEIS;

DROP TABLE CAPESSOAXCONTASCONTABEIS;

-- CAPESSOAXCONTASCONTABEIS
CREATE TABLE CAPESSOAXCONTASCONTABEIS
  (
    id                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    pessoa               NUMERIC (14,0) DEFAULT 0 NOT NULL,
    categoriaContabil    NUMERIC (6,0) DEFAULT 0 NOT NULL,
    idPlanoContaContabil NUMERIC (14,0) DEFAULT 0 NOT NULL,
    estabelecimento      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    ativo                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    idContaContabil      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    observacoes          VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE CAPESSOAXCONTASCONTABEIS ADD CONSTRAINT CAPESSOAXCONTASCONTABEIS_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX CAPESSOAXCONTASCONTABEIS_K2 ON CAPESSOAXCONTASCONTABEIS (pessoa, categoriaContabil, idPlanoContaContabil, estabelecimento);
CREATE INDEX CAPESSOAXCONTASCONTABEIS_K3 ON CAPESSOAXCONTASCONTABEIS (pessoa);
ALTER TABLE CAPESSOAXCONTASCONTABEIS ADD CONSTRAINT CAPESSOAXCONTASCONTABEIS_FK1 FOREIGN KEY (pessoa) REFERENCES CAPESSOAS (pessoa);
ALTER TABLE CAPESSOAXCONTASCONTABEIS ADD CONSTRAINT CAPESSOAXCONTASCONTABEIS_FK2 FOREIGN KEY (categoriaContabil) REFERENCES PACATEGORIASCONTABEIS (categoriaContabil);
ALTER TABLE CAPESSOAXCONTASCONTABEIS ADD CONSTRAINT CAPESSOAXCONTASCONTABEIS_FK3 FOREIGN KEY (idPlanoContaContabil) REFERENCES PAPLANOSCONTASCONTABEIS (idPlanoContaContabil);
ALTER TABLE CAPESSOAXCONTASCONTABEIS ADD CONSTRAINT CAPESSOAXCONTASCONTABEIS_FK4 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE CAPESSOAXCONTASCONTABEIS ADD CONSTRAINT CAPESSOAXCONTASCONTABEIS_FK5 FOREIGN KEY (idContaContabil) REFERENCES PACONTASCONTABEIS (idContaContabil);

INSERT INTO CAPESSOAXCONTASCONTABEIS (id, pessoa, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) VALUES (0, 0, 0, 0, 0, 1, 0, ' ');
INSERT INTO CAPESSOAXCONTASCONTABEIS (id, pessoa, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) SELECT id, pessoa, categoriaContabil, idPlanoContaContabil, 0, ativo, idContaContabil, observacoes FROM CAPESSOAXCONTASCONTABEIS_2401 WHERE id > 0;

COMMIT;

CREATE TABLE CAPRODUTOXCONTASCONTABEIS_2401 AS SELECT * FROM CAPRODUTOXCONTASCONTABEIS;

DROP TABLE CAPRODUTOXCONTASCONTABEIS;

-- CAPRODUTOXCONTASCONTABEIS
CREATE TABLE CAPRODUTOXCONTASCONTABEIS
  (
    id                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    produto              NUMERIC (7,0) DEFAULT 0 NOT NULL,
    categoriaContabil    NUMERIC (6,0) DEFAULT 0 NOT NULL,
    idPlanoContaContabil NUMERIC (14,0) DEFAULT 0 NOT NULL,
    estabelecimento      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    ativo                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    idContaContabil      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    observacoes          VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE CAPRODUTOXCONTASCONTABEIS ADD CONSTRAINT CAPRODUTOXCONTASCONTABEIS_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX CAPRODUTOXCONTASCONTABEIS_K2 ON CAPRODUTOXCONTASCONTABEIS (produto, categoriaContabil, idPlanoContaContabil, estabelecimento);
CREATE INDEX CAPRODUTOXCONTASCONTABEIS_K3 ON CAPRODUTOXCONTASCONTABEIS (produto);
ALTER TABLE CAPRODUTOXCONTASCONTABEIS ADD CONSTRAINT CAPRODUTOXCONTASCONTABEIS_FK1 FOREIGN KEY (produto) REFERENCES CAPRODUTOS (produto);
ALTER TABLE CAPRODUTOXCONTASCONTABEIS ADD CONSTRAINT CAPRODUTOXCONTASCONTABEIS_FK2 FOREIGN KEY (categoriaContabil) REFERENCES PACATEGORIASCONTABEIS (categoriaContabil);
ALTER TABLE CAPRODUTOXCONTASCONTABEIS ADD CONSTRAINT CAPRODUTOXCONTASCONTABEIS_FK3 FOREIGN KEY (idPlanoContaContabil) REFERENCES PAPLANOSCONTASCONTABEIS (idPlanoContaContabil);
ALTER TABLE CAPRODUTOXCONTASCONTABEIS ADD CONSTRAINT CAPRODUTOXCONTASCONTABEIS_FK4 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE CAPRODUTOXCONTASCONTABEIS ADD CONSTRAINT CAPRODUTOXCONTASCONTABEIS_FK5 FOREIGN KEY (idContaContabil) REFERENCES PACONTASCONTABEIS (idContaContabil);

INSERT INTO CAPRODUTOXCONTASCONTABEIS (id, produto, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) VALUES (0, 0, 0, 0, 0, 1, 0, ' ');
INSERT INTO CAPRODUTOXCONTASCONTABEIS (id, produto, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) SELECT id, produto, categoriaContabil, idPlanoContaContabil, 0, ativo, idContaContabil, observacoes FROM CAPRODUTOXCONTASCONTABEIS_2401 WHERE id > 0;

COMMIT;

CREATE TABLE PACONTAFINANCEIRAXCONTAB_2401 AS SELECT * FROM PACONTAFINANCEIRAXCONTAB;

DROP TABLE PACONTAFINANCEIRAXCONTAB;

-- PACONTAFINANCEIRAXCONTAB
CREATE TABLE PACONTAFINANCEIRAXCONTAB
  (
    id                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    contaFinanceira      VARCHAR (60) DEFAULT ' ' NOT NULL,
    categoriaContabil    NUMERIC (6,0) DEFAULT 0 NOT NULL,
    idPlanoContaContabil NUMERIC (14,0) DEFAULT 0 NOT NULL,
    estabelecimento      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    ativo                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    idContaContabil      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    observacoes          VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACONTAFINANCEIRAXCONTAB ADD CONSTRAINT PACONTAFINANCEIRAXCONTAB_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PACONTAFINANCEIRAXCONTAB_K2 ON PACONTAFINANCEIRAXCONTAB (contaFinanceira, categoriaContabil, idPlanoContaContabil, estabelecimento);
CREATE INDEX PACONTAFINANCEIRAXCONTAB_K3 ON PACONTAFINANCEIRAXCONTAB (contaFinanceira);
ALTER TABLE PACONTAFINANCEIRAXCONTAB ADD CONSTRAINT PACONTAFINANCEIRAXCONTAB_FK1 FOREIGN KEY (contaFinanceira) REFERENCES PACONTASFINANCEIRAS (contaFinanceira);
ALTER TABLE PACONTAFINANCEIRAXCONTAB ADD CONSTRAINT PACONTAFINANCEIRAXCONTAB_FK2 FOREIGN KEY (categoriaContabil) REFERENCES PACATEGORIASCONTABEIS (categoriaContabil);
ALTER TABLE PACONTAFINANCEIRAXCONTAB ADD CONSTRAINT PACONTAFINANCEIRAXCONTAB_FK3 FOREIGN KEY (idPlanoContaContabil) REFERENCES PAPLANOSCONTASCONTABEIS (idPlanoContaContabil);
ALTER TABLE PACONTAFINANCEIRAXCONTAB ADD CONSTRAINT PACONTAFINANCEIRAXCONTAB_FK4 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACONTAFINANCEIRAXCONTAB ADD CONSTRAINT PACONTAFINANCEIRAXCONTAB_FK5 FOREIGN KEY (idContaContabil) REFERENCES PACONTASCONTABEIS (idContaContabil);

INSERT INTO PACONTAFINANCEIRAXCONTAB (id, contaFinanceira, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) VALUES (0, ' ', 0, 0, 0, 1, 0, ' ');
INSERT INTO PACONTAFINANCEIRAXCONTAB (id, contaFinanceira, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) SELECT id, contaFinanceira, categoriaContabil, idPlanoContaContabil, 0, ativo, idContaContabil, observacoes FROM PACONTAFINANCEIRAXCONTAB_2401 WHERE id > 0;

COMMIT;

CREATE TABLE PACARTFINANCXCONTASCONTAB_2401 AS SELECT * FROM PACARTFINANCXCONTASCONTAB;

DROP TABLE PACARTFINANCXCONTASCONTAB;

-- PACARTFINANCXCONTASCONTAB;
CREATE TABLE PACARTFINANCXCONTASCONTAB
  (
    id                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    carteiraFinanceira   NUMERIC (4,0) DEFAULT 0 NOT NULL,
    categoriaContabil    NUMERIC (6,0) DEFAULT 0 NOT NULL,
    idPlanoContaContabil NUMERIC (14,0) DEFAULT 0 NOT NULL,
    estabelecimento      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    ativo                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    idContaContabil      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    observacoes          VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACARTFINANCXCONTASCONTAB ADD CONSTRAINT PACARTFINANCXCONTASCONTAB_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PACARTFINANCXCONTASCONTAB_K2 ON PACARTFINANCXCONTASCONTAB (carteiraFinanceira, categoriaContabil, idPlanoContaContabil, estabelecimento);
CREATE INDEX PACARTFINANCXCONTASCONTAB_K3 ON PACARTFINANCXCONTASCONTAB (carteiraFinanceira);
ALTER TABLE PACARTFINANCXCONTASCONTAB ADD CONSTRAINT PACARTFINANCXCONTASCONTAB_FK1 FOREIGN KEY (carteiraFinanceira) REFERENCES PACARTEIRASFINANCEIRAS (carteiraFinanceira);
ALTER TABLE PACARTFINANCXCONTASCONTAB ADD CONSTRAINT PACARTFINANCXCONTASCONTAB_FK2 FOREIGN KEY (categoriaContabil) REFERENCES PACATEGORIASCONTABEIS (categoriaContabil);
ALTER TABLE PACARTFINANCXCONTASCONTAB ADD CONSTRAINT PACARTFINANCXCONTASCONTAB_FK3 FOREIGN KEY (idPlanoContaContabil) REFERENCES PAPLANOSCONTASCONTABEIS (idPlanoContaContabil);
ALTER TABLE PACARTFINANCXCONTASCONTAB ADD CONSTRAINT PACARTFINANCXCONTASCONTAB_FK4 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACARTFINANCXCONTASCONTAB ADD CONSTRAINT PACARTFINANCXCONTASCONTAB_FK5 FOREIGN KEY (idContaContabil) REFERENCES PACONTASCONTABEIS (idContaContabil);

INSERT INTO PACARTFINANCXCONTASCONTAB (id, carteiraFinanceira, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) VALUES (0, 0, 0, 0, 0, 1, 0, ' ');
INSERT INTO PACARTFINANCXCONTASCONTAB (id, carteiraFinanceira, categoriaContabil, idPlanoContaContabil, estabelecimento, ativo, idContaContabil, observacoes) SELECT id, carteiraFinanceira, categoriaContabil, idPlanoContaContabil, 0, ativo, idContaContabil, observacoes FROM PACARTFINANCXCONTASCONTAB_2401 WHERE id > 0;

COMMIT;

-- SICOMANDOSABRIRGAVETA
CREATE TABLE SICOMANDOSABRIRGAVETA
  (
    comandoAbrirGaveta NUMERIC (3,0) DEFAULT 0 NOT NULL,
    descricao          VARCHAR (60) DEFAULT ' ' NOT NULL,
    ativo              NUMERIC (1,0) DEFAULT 0 NOT NULL,
    arquivoComando     VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes        VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE SICOMANDOSABRIRGAVETA ADD CONSTRAINT SICOMANDOSABRIRGAVETA_PK1 PRIMARY KEY (comandoAbrirGaveta);
CREATE INDEX SICOMANDOSABRIRGAVETA_K2 ON SICOMANDOSABRIRGAVETA (descricao);

INSERT INTO SICOMANDOSABRIRGAVETA (comandoAbrirGaveta, descricao, ativo, arquivoComando, observacoes) VALUES (0, 'SELECIONE', 1, ' ', ' ');
INSERT INTO SICOMANDOSABRIRGAVETA (comandoAbrirGaveta, descricao, ativo, arquivoComando, observacoes) VALUES (1, 'Bematech', 1, '%SYS_DIR%Versoes%MAGIC_VER%\%SYS_VER%\Dlls\abreGavetaBematech.txt', ' ');
INSERT INTO SICOMANDOSABRIRGAVETA (comandoAbrirGaveta, descricao, ativo, arquivoComando, observacoes) VALUES (2, 'Epson', 1, '%SYS_DIR%Versoes%MAGIC_VER%\%SYS_VER%\Dlls\abreGavetaEpson.txt', ' ');

COMMIT;

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('SICOMANDOSABRIRGAVETA', 'Comandos Abrir Gaveta', 1, 59, 'SI', 'comandoAbrirGaveta', 'N', 3, 'descricao', 0, ' ', 0, 999999, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqComandosAbrirGaveta', 1, 1, ' '); 

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (936, 'Comandos Abrir Gaveta', 1, 9090009360, 90, 'SIS', 0, 936, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqComandosAbrirGaveta', ' ', 0, 0, NULL, ' ');

COMMIT;

ALTER TABLE PAIMPRESSORAXDOCUMENTO DROP CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK1;

DROP TABLE SITIPOSDOCUMENTOIMPRESSO;

-- SITIPOSDOCUMENTOIMPRESSO
CREATE TABLE SITIPOSDOCUMENTOIMPRESSO
  (
    tipoDocumentoImpresso NUMERIC (3,0) DEFAULT 0 NOT NULL,
    descricao             VARCHAR (60) DEFAULT ' ' NOT NULL,
    ativo                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    ordenacao             NUMERIC (11,0) DEFAULT 0 NOT NULL,
    habilitaFinalizacao   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    habilitaAbrirGaveta   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permiteGrafico        NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permiteCaractere      NUMERIC (1,0) DEFAULT 0 NOT NULL,
    permiteMerge          NUMERIC (1,0) DEFAULT 0 NOT NULL,
    arquivoModeloMerge    VARCHAR (256) DEFAULT ' ' NOT NULL,
    permiteReport         NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoesReport     VARCHAR (4000) DEFAULT ' ' NOT NULL,
    permiteFiscal         NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes           VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE SITIPOSDOCUMENTOIMPRESSO ADD CONSTRAINT SITIPOSDOCUMENTOIMPRESSO_PK1 PRIMARY KEY (tipoDocumentoImpresso);
CREATE INDEX SITIPOSDOCUMENTOIMPRESSO_K2 ON SITIPOSDOCUMENTOIMPRESSO (descricao);
CREATE INDEX SITIPOSDOCUMENTOIMPRESSO_K3 ON SITIPOSDOCUMENTOIMPRESSO (ordenacao);

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (0, 'SELECIONE', 1, 0, 0, 0, 0, 0, 0, ' ', 0, ' ', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (1, 'Relatórios', 1, 1, 0, 0, 1, 0, 0, ' ', 0, ' ', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (52, 'Contas à Pagar / Receber', 1, 2, 0, 0, 1, 0, 1, '%SYS_DIR_ARQ_MODELOS%ContasPagarReceber.rtf', 0, ' ', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (10, 'Orçamento', 1, 100, 1, 0, 0, 1, 1, '%SYS_DIR_ARQ_MODELOS%Orcamento.rtf', 1, 'Tipo Documento = "O"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (11, 'Receita Óculos', 1, 101, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%Orcamento.rtf', 1, 'Tipo Documento = "O"', 0, 'Orçamento com receita de óculos vinculada a ele.');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (21, 'Pedido de Compra', 1, 102, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%PedidoCompra.rtf', 1, 'Tipo Documento = "O"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (48, 'Ordem de Serviço', 1, 103, 1, 0, 0, 1, 1, '%SYS_DIR_ARQ_MODELOS%Orcamento.rtf', 1, 'Tipo Documento = "O"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (16, 'Orçamento (Separação)', 1, 150, 1, 0, 0, 1, 1, '%SYS_DIR_ARQ_MODELOS%Orcamento.rtf', 1, 'Tipo Documento = "O"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (51, 'Lista Eventos', 1, 151, 1, 0, 0, 0, 0, ' ', 1, 'Tipo Documento = "E"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (6, 'Pré-Documento (Saída)', 1, 200, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%PreDocumentoSaida.rtf', 1, 'Tipo Documento = "P"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (35, 'Pré-Documento (Conta-Corrente)', 1, 201, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%PreDocumentoCc.rtf', 1, 'Tipo Documento = "P"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (30, 'Pré-Documento (Entrada)', 1, 202, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%PreDocumentoEntrada.rtf', 1, 'Tipo Documento = "P"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (34, 'Devolução Pré-Documento Saída', 1, 203, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%DevolucaoPreDocumentoSaida.rtf', 1, 'Tipo Documento = "P"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (7, 'DANFE', 1, 300, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%Danfe.rtf', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (8, 'NFC-e', 1, 301, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%NFCe.rtf', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (49, 'DAMDFE', 1, 302, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%DAMDFE.rtf', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (54, 'DANFSE', 1, 303, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%DANFSE.rtf', 1, 'Tipo Documento = "D"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (4, 'Comprov. Receb./Pagto.', 1, 400, 1, 1, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovantePagamento.rtf', 1, 'Tipo Documento:
"F" = Financeiro
"T" = Temporário', 1, 'Pagamento de prestações, financeiros impressos pelo "Modelo Financeiro", botão na tela do financeiro e da baixa.');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (23, 'Reparcelamento', 1, 401, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%Reparcelamento.rtf', 1, 'Tipo Documento:
"F" = Financeiro
"T" = Temporário', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (24, 'Transf. Cheques', 1, 402, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovanteTransferenciaCheque.rtf', 1, 'Tipo Documento = "T"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (12, 'TEF (Comprov. Cartão)', 1, 500, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%TransacaoTef.rtf', 1, 'Tipo Documento:
"C" = Contrato Compra
"D" = Documento Fiscal
"P" = Pré-Documento
"T" = TEF avulso', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (13, 'TEF (Autenticação Cheque)', 1, 501, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%TransacaoTef.rtf', 1, 'Tipo Documento:
"C" = Contrato Compra
"D" = Documento Fiscal
"P" = Pré-Documento
"T" = TEF avulso', 1, 'Autenticação de cheques transmitidos no TEF.');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (46, 'Boleto', 1, 510, 1, 0, 1, 0, 1, '%SYS_DIR_ARQ_MODELOS%Boleto.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"F" = Financeiro
"P" = Pré-Documento', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (2, 'Carnê', 1, 520, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%CarneDocumentoFiscal.rtf', 1, 'Tipo Documento:
"C" = Contrato Compra
"D" = Documento Fiscal
"P" = Pré-Documento', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (3, 'Promissória', 1, 530, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%NotaPromissoriaDocumentoFiscal.rtf', 1, 'Tipo Documento:
"C" = Contrato Compra
"D" = Documento Fiscal
"P" = Pré-Documento', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (29, 'Promissória (Conta-Corrente)', 1, 531, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%NotaPromissoriaDocumentoFiscal.rtf', 1, 'Tipo Documento:
"C" = Contrato Compra
"D" = Documento Fiscal
"P" = Pré-Documento', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (36, 'Promissória (Boleto)', 1, 532, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%NotaPromissoriaDocumentoFiscal.rtf', 1, 'Tipo Documento:
"C" = Contrato Compra
"D" = Documento Fiscal
"P" = Pré-Documento', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (18, 'DOF', 1, 540, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%DOF.rtf', 1, 'Tipo Documento = "D"', 0, 'Documento de Origem Florestal - DOF - Consumidor Isento de CTF. Emitido quando marcado no produto o campo "Gera DOF".');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (19, 'Comprov. Troca (Pré-Documento)', 1, 550, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovanteTrocaPreDocumento.rtf', 1, 'Tipo Documento = "P"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (20, 'Comprov. Troca (Documento Fiscal)', 1, 551, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovanteTrocaDocumentoFiscal.rtf', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (9, 'Vale Presente', 1, 560, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ValePresente.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"F" = Financeiro
"P" = Pré-Documento', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (27, 'Vale Crédito', 1, 561, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ValeTroca.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"F" = Financeiro
"P" = Pré-Documento', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (37, 'Vale Desconto', 1, 562, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ValeDesconto.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"P" = Pré-Documento
"V" = Vale Desconto', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (17, 'Logística (Entrega/Retirada)', 1, 570, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovanteEntregaRetirada.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"O" = Orçamento
"P" = Pré-Documento', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (31, 'Logística (Comprovante)', 1, 571, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovanteLogistica.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"P" = Pré-Documento', 0, 'Impresso ao gerar documento fiscal com itens de logística com os itens que serão entregues para assinatura do cliente.');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (32, 'Logística (Separação)', 1, 572, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%ComprovanteSeparacaoLogistica.rtf', 1, 'Tipo Documento:
"D" = Documento Fiscal
"P" = Pré-Documento', 0, 'Impresso ao gerar documento fiscal com itens de logística com os itens que serão entregues para separação  interna.');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (26, 'Remessa Demonstração', 1, 580, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%RemessaDemonstracao.rtf', 1, 'Tipo Documento = "D"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (22, 'Carta Correção', 1, 600, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%CCe.rtf', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (38, 'NF Entrada (Espelho)', 1, 610, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (39, 'NF Entrada (Divergências)', 1, 611, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "D"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (14, 'Etiqueta (Produtos)', 1, 620, 1, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "uniqueMachineID"
Id = "contadorSessao"
Ex.: SELECT *
FROM TEMPETIQUETA
WHERE uniqueMachineID = '':p_tipoDocumento''
AND contadorSessao = :p_id', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (47, 'Etiqueta (Volumes)', 1, 630, 1, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "D"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (5, 'Fechamento de Caixa', 1, 700, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%FechamentoCaixa.rtf', 1, 'Tipo Documento = "uniqueMachineID"
Id = "contadorSessao"
Ex.:
SELECT 
  TRUNC (MIN (sess.dataAbertura)),
  TO_CHAR (MIN (sess.dataAbertura),''HH24MISS''),
  SUM (sess.valorSaldoInicialCaixa),
  TRUNC (MAX (sess.dataEncerramento)),
  TO_CHAR (MAX (sess.dataEncerramento),''HH24MISS''),
  SUM (sess.valorTrocoFinalCaixa)
FROM MOSESSOESCAIXA sess
JOIN TEMPPESQUISAS temp ON temp.id = sess.sessaoCaixa
WHERE temp.uniqueMachineID = '':pTipoDocumento''
AND temp.nomePublico = ''PesqSessoesCaixa''
AND temp.contadorSessao = :pID
AND temp.selecionado = 1', 1, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (15, 'Logística (Botão Imprimir)', 1, 710, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%Logistica.rtf', 1, 'Tipo Documento = "O"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (25, 'Transf. Produtos', 1, 720, 1, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%MovimentoTransferencia.rtf', 1, 'Tipo Documento = "T"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (28, 'Transf. Orcamento', 1, 721, 0, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%TransfererenciaOrcamento.rtf', 1, 'Tipo Documento = "O"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (40, 'Painel de Compra', 1, 730, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "P"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (41, 'Conferência Documentos', 1, 740, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento:
"D" = Documento Fiscal
"O" = Orçamento
"P" = Pré-Documento', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (42, 'Balanço', 1, 750, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "B"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (43, 'Balanço (Divergência)', 1, 751, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "B"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (44, 'Mapa Separação', 1, 760, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "S"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (50, 'Inventário Estoque Gerencial', 1, 770, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "I"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (53, 'Inventário Estoque Fiscal', 1, 771, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "I"', 0, ' ');

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (45, 'Pessoa (Ficha)', 1, 800, 0, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "P"', 0, ' ');
INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, habilitaAbrirGaveta, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) VALUES (33, 'Pessoa (Abertura Crediário)', 1, 810, 0, 0, 0, 0, 1, '%SYS_DIR_ARQ_MODELOS%PropostaAberturaCredito.rtf', 1, 'Tipo Documento = "P"', 0, ' ');

COMMIT;

ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK1 FOREIGN KEY (tipoDocumentoImpresso) REFERENCES SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso);

CREATE TABLE PAIMPRESSORAXDOCUMENTO_2401 AS SELECT * FROM PAIMPRESSORAXDOCUMENTO;

DROP TABLE PAIMPRESSORAXDOCUMENTO;

-- PAIMPRESSORAXDOCUMENTO
CREATE TABLE PAIMPRESSORAXDOCUMENTO
  (
    id                             NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoDocumentoImpresso          NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tecnologiaImpressao            NUMERIC (3,0) DEFAULT 0 NOT NULL,
    descricao                      VARCHAR (60) DEFAULT ' ' NOT NULL,
    ativo                          NUMERIC (1,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,
    dispositivo                    CHAR (1) DEFAULT ' ' NOT NULL,
    enderecoMAC                    VARCHAR (12) DEFAULT ' ' NOT NULL,
    etapaOrcamento                 NUMERIC (4,0) DEFAULT 0 NOT NULL,
    selectWhere                    VARCHAR (4000) DEFAULT ' ' NOT NULL,
    imprimirFinalizacao            CHAR (1) DEFAULT ' ' NOT NULL,
    numeroViasFinalizacao          NUMERIC (1,0) DEFAULT 0 NOT NULL,
    visualizarAntesImprimirFinaliz NUMERIC (1,0) DEFAULT 0 NOT NULL,
    imprimirBotao                  CHAR (1) DEFAULT ' ' NOT NULL,
    numeroViasBotao                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    visualizarAntesImprimirBotao   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    arquivoModelo                  VARCHAR (256) DEFAULT ' ' NOT NULL,
    extensaoReport                 VARCHAR (10) DEFAULT ' ' NOT NULL,
    formaImpressao                 NUMERIC (3,0) DEFAULT 0 NOT NULL,
    idImpressora                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comandoAbrirGaveta             NUMERIC (3,0) DEFAULT 0 NOT NULL,
    observacoes                    VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_PK1 PRIMARY KEY (id);
CREATE INDEX PAIMPRESSORAXDOCUMENTO_K2 ON PAIMPRESSORAXDOCUMENTO (tipoDocumentoImpresso ASC, descricao ASC, etapaOrcamento DESC, enderecoMAC DESC, dispositivo DESC, usuario DESC, perfilUsuario DESC, estabelecimento DESC,id ASC);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK1 FOREIGN KEY (tipoDocumentoImpresso) REFERENCES SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK2 FOREIGN KEY (tecnologiaImpressao) REFERENCES SITECNOLOGIASIMPRESSAO (tecnologiaImpressao);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK3 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK4 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK5 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK6 FOREIGN KEY (dispositivo) REFERENCES SIDISPOSITIVOS (dispositivo);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK7 FOREIGN KEY (etapaOrcamento) REFERENCES PAETAPASORCAMENTO (etapaOrcamento);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK8 FOREIGN KEY (imprimirFinalizacao) REFERENCES SISIMNAOPERGUNTAR (simNaoPerguntar);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK9 FOREIGN KEY (numeroViasFinalizacao) REFERENCES SINUMEROVIAS (numeroVias);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK10 FOREIGN KEY (imprimirBotao) REFERENCES SISIMNAO (simNao);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK11 FOREIGN KEY (numeroViasBotao) REFERENCES SINUMEROVIAS (numeroVias);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK12 FOREIGN KEY (extensaoReport) REFERENCES SIEXTENSOESREPORT (extensaoReport);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK13 FOREIGN KEY (formaImpressao) REFERENCES SIFORMASIMPRESSAO (formaImpressao);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK14 FOREIGN KEY (idImpressora) REFERENCES PAIMPRESSORAS (idImpressora);
ALTER TABLE PAIMPRESSORAXDOCUMENTO ADD CONSTRAINT PAIMPRESSORAXDOCUMENTO_FK15 FOREIGN KEY (comandoAbrirGaveta) REFERENCES SICOMANDOSABRIRGAVETA (comandoAbrirGaveta);

INSERT INTO PAIMPRESSORAXDOCUMENTO (id, tipoDocumentoImpresso, tecnologiaImpressao, descricao, ativo, estabelecimento, perfilUsuario, usuario, dispositivo, enderecoMAC, etapaOrcamento, selectWhere, imprimirFinalizacao, numeroViasFinalizacao, visualizarAntesImprimirFinaliz, imprimirBotao, numeroViasBotao, visualizarAntesImprimirBotao, arquivoModelo, extensaoReport, formaImpressao, idImpressora, comandoAbrirGaveta, observacoes) VALUES (0, 0, 0, 'SELECIONE', 1, 0, 0, 0, ' ', ' ', 0, ' ', ' ', 0, 0, ' ', 0, 0, ' ', ' ', 0, 0, 0, ' ');
INSERT INTO PAIMPRESSORAXDOCUMENTO (id, tipoDocumentoImpresso, tecnologiaImpressao, descricao, ativo, estabelecimento, perfilUsuario, usuario, dispositivo, enderecoMAC, etapaOrcamento, selectWhere, imprimirFinalizacao, numeroViasFinalizacao, visualizarAntesImprimirFinaliz, imprimirBotao, numeroViasBotao, visualizarAntesImprimirBotao, arquivoModelo, extensaoReport, formaImpressao, idImpressora, comandoAbrirGaveta, observacoes) SELECT id, tipoDocumentoImpresso, tecnologiaImpressao, descricao, ativo, estabelecimento, perfilUsuario, usuario, dispositivo, enderecoMAC, etapaOrcamento, selectWhere, imprimirFinalizacao, numeroViasFinalizacao, visualizarAntesImprimirFinaliz, imprimirBotao, numeroViasBotao, visualizarAntesImprimirBotao, arquivoModelo, extensaoReport, formaImpressao, idImpressora, 0, observacoes FROM PAIMPRESSORAXDOCUMENTO_2401 WHERE id > 0;

COMMIT;

DROP TABLE TEMPIMPRESSOES;

-- TEMPIMPRESSOES;
CREATE GLOBAL TEMPORARY TABLE TEMPIMPRESSOES
  (
    sessaoClient            VARCHAR (30) DEFAULT ' ' NOT NULL,
    contadorSessao          NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ordenacao               NUMERIC (11,0) DEFAULT 0 NOT NULL,
    selecionar              NUMERIC (1,0) DEFAULT 0 NOT NULL,
    selecionado             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    tipoDocumentoImpresso   NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tecnologiaImpressao     NUMERIC (3,0) DEFAULT 0 NOT NULL,
    descricao               VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeroVias              NUMERIC (3,0) DEFAULT 0 NOT NULL,
    visualizarAntesImprimir NUMERIC (1,0) DEFAULT 0 NOT NULL,
    arquivoModelo           VARCHAR (256) DEFAULT ' ' NOT NULL,
    extensaoReport          VARCHAR (10) NOT NULL,
    arquivoGerado           CLOB,
    arquivoGeradoB          CLOB,
    formaImpressao          NUMERIC (3,0) DEFAULT 0 NOT NULL,
    idImpressora            NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comandoAbrirGaveta      NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tipoImpressora          NUMERIC (3,0) DEFAULT 0 NOT NULL,
    impressoraClient        NUMERIC (1,0) DEFAULT 0 NOT NULL,
    caminhoImpressora       VARCHAR (256) DEFAULT ' ' NOT NULL,
    observacoes             VARCHAR (4000) DEFAULT ' ' NOT NULL
  ) ON COMMIT PRESERVE ROWS;
ALTER TABLE TEMPIMPRESSOES ADD CONSTRAINT TEMPIMPRESSOES_PK1 PRIMARY KEY (sessaoClient, contadorSessao, ordenacao);

-- PAMEIOSPAGAMENTOABRIRGAV
CREATE TABLE PAMEIOSPAGAMENTOABRIRGAV
  (
    id              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    meioPagamento   NUMERIC (2,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,
    abrirGaveta     NUMERIC (1,0) DEFAULT 0 NOT NULL
  );
ALTER TABLE PAMEIOSPAGAMENTOABRIRGAV ADD CONSTRAINT PAMEIOSPAGAMENTOABRIRGAV_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAMEIOSPAGAMENTOABRIRGAV_K2 ON PAMEIOSPAGAMENTOABRIRGAV (meioPagamento, estabelecimento, perfilUsuario, usuario);
ALTER TABLE PAMEIOSPAGAMENTOABRIRGAV ADD CONSTRAINT PAMEIOSPAGAMENTOABRIRGAV_FK1 FOREIGN KEY (meioPagamento) REFERENCES SIMEIOSPAGAMENTO (meioPagamento);
ALTER TABLE PAMEIOSPAGAMENTOABRIRGAV ADD CONSTRAINT PAMEIOSPAGAMENTOABRIRGAV_FK2 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PAMEIOSPAGAMENTOABRIRGAV ADD CONSTRAINT PAMEIOSPAGAMENTOABRIRGAV_FK3 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PAMEIOSPAGAMENTOABRIRGAV ADD CONSTRAINT PAMEIOSPAGAMENTOABRIRGAV_FK4 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAMEIOSPAGAMENTOABRIRGAV', 'Meios Pagamento Abrir Gaveta', 1, 31705, 'PA', 'id', 'N', 14, ' ', 1, ' ', 0, 800001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMeiosPagamentoAbrirGaveta', 1, 1, ' '); 

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (937, 'Meios Pagamento Abrir Gaveta', 1, 1060009370, 10, 'PAR', 0, 937, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqMeiosPagamentoAbrirGaveta', ' ', 0, 0, NULL, ' ');

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (938, 'Movimento Contábil', 1, 7010009380, 70, 'MOV', 0, 939, '%SYS_DIR%Versoes\%SYS_VER%\Movimentos.ecf', 'DetContabil', 'DetContabil', 0, 0, NULL, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, areaMenu, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, nomePublicoDetalhe, categoriaConfiguracao, categoriaPersonalCampo, eCard, observacoes) VALUES (939, 'Pesquisa Movimentos Contábeis', 1, 7010009390, 70, 'MOV', 0, 938, '%SYS_DIR%Versoes\%SYS_VER%\Movimentos.ecf', 'PesqContabeis', 'DetContabil', 0, 0, NULL, ' ');

COMMIT;

create or replace FUNCTION FUNC_ADD_MONTA_OBSERVACAO_ITEM (
  p_sessaoClient                 IN VARCHAR2,
  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_413_obs_add_marca     IN NUMBER,
  p_tempComp_nomeTempComposicao  IN VARCHAR2,
  p_tempComp_sequencia           IN NUMBER,
  p_Doc_Orc_Pre_Sep_Transf       IN CHAR,
  p_item_id                      IN NUMBER,
  p_item_gradeProduto            IN NUMBER,
  p_item_idFormulaTinta          IN NUMBER,
  p_item_personalizacao          IN NUMBER,
  p_item_idLoteEstoque           IN NUMBER,
  p_item_controleQuantidade      IN NUMBER,
  p_item_loteMultiplo            IN NUMBER,
  p_item_altura                  IN NUMBER,
  p_item_largura                 IN NUMBER,
  p_item_comprimento             IN NUMBER,
  p_item_quantidade              IN NUMBER,
  p_item_observacoesDigitadas    IN VARCHAR2)
RETURN VARCHAR2
IS
  v_prod_caracteristicaA NUMBER;
  v_prod_caracteristicaB NUMBER;
  v_prod_caracteristicaC NUMBER;
  v_prod_caracteristicaD NUMBER;
  v_prod_caracteristicaE NUMBER;
  v_prod_marca           NUMBER;
  v_prod_referencia      VARCHAR2(60);
  v_observacoes          VARCHAR2(4000);
  v_aux_observacoes      VARCHAR2(4000);
BEGIN
  v_observacoes := '';
  IF p_config_198_obs_add_referenc = 1
    OR p_config_199_obs_add_caractA = 1
    OR p_config_200_obs_add_caractB = 1
    OR p_config_201_obs_add_caractC = 1
    OR p_config_202_obs_add_caractD = 1
    OR p_config_203_obs_add_caractE = 1
    OR p_config_413_obs_add_marca = 1
  THEN
    SELECT
      prod.caracteristicaA,
      prod.caracteristicaB,
      prod.caracteristicaC,
      prod.caracteristicaD,
      prod.caracteristicaE,
      prod.marca,
      prod.referencia
    INTO
      v_prod_caracteristicaA,
      v_prod_caracteristicaB,
      v_prod_caracteristicaC,
      v_prod_caracteristicaD,
      v_prod_caracteristicaE,
      v_prod_marca,
      v_prod_referencia
    FROM CAGRADESPRODUTO gradProd
    JOIN CAPRODUTOS prod
    ON prod.produto = gradProd.produto
    WHERE gradProd.gradeProduto = p_item_gradeProduto;
    -- Marca
    IF p_config_413_obs_add_marca = 1 AND v_prod_marca <> 0 THEN
      SELECT descricao
      INTO v_aux_observacoes
      FROM PAMARCAS
      WHERE marca = v_prod_marca;
      IF v_aux_observacoes <> ' ' THEN
        v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
      END IF;
    END IF;
    -- Referência Produto
    IF p_config_198_obs_add_referenc = 1 AND v_prod_referencia <> ' ' THEN
      v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || 'Ref.: ' || v_prod_referencia, 1, 4000));
    END IF;
    -- Caracteristica A
    IF p_config_199_obs_add_caractA = 1 AND v_prod_caracteristicaA <> 0 THEN
      SELECT descricao
      INTO v_aux_observacoes
      FROM PACARACTERISTICASA
      WHERE caracteristicaA = v_prod_caracteristicaA;
      IF v_aux_observacoes <> ' ' THEN
        v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
      END IF;
    END IF;
    -- Caracteristica B
    IF p_config_200_obs_add_caractB = 1 AND v_prod_caracteristicaB <> 0 THEN
      SELECT descricao
      INTO v_aux_observacoes
      FROM PACARACTERISTICASB
      WHERE caracteristicaB = v_prod_caracteristicaB;
      IF v_aux_observacoes <> ' ' THEN
        v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
      END IF;
    END IF;
    -- Caracteristica C
    IF p_config_201_obs_add_caractC = 1 AND v_prod_caracteristicaC <> 0 THEN
      SELECT descricao
      INTO v_aux_observacoes
      FROM PACARACTERISTICASC
      WHERE caracteristicaC = v_prod_caracteristicaC;
      IF v_aux_observacoes <> ' ' THEN
        v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
      END IF;
    END IF;
    -- Caracteristica D
    IF p_config_202_obs_add_caractD = 1 AND v_prod_caracteristicaD <> 0 THEN
      SELECT descricao
      INTO v_aux_observacoes
      FROM PACARACTERISTICASD
      WHERE caracteristicaD = v_prod_caracteristicaD;
      IF v_aux_observacoes <> ' ' THEN
        v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
      END IF;
    END IF;
    -- Caracteristica E
    IF p_config_203_obs_add_caractE = 1 AND v_prod_caracteristicaE <> 0 THEN
      SELECT descricao
      INTO v_aux_observacoes
      FROM PACARACTERISTICASE
      WHERE caracteristicaE = v_prod_caracteristicaE;
      IF v_aux_observacoes <> ' ' THEN
        v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
      END IF;
    END IF;
  END IF;
  -- Formula Tinta
  IF p_item_idFormulaTinta <> 0 THEN
    SELECT TRIM (UPPER (marcTint.descricao))
      || ' ' || TRIM (formTint.descricaoCor)
      || CASE WHEN formTint.descricaoCor = formTint.descricaoNomeCor THEN '' ELSE ' ' || TRIM (formTint.descricaoNomeCor) END
      || ' Base: ' || TRIM (baseTint.baseTinta)
      || ' Emb.: ' || TRIM (embTint.descricao) 
    INTO v_aux_observacoes
    FROM CAFORMULASTINTAS formTint
    JOIN SIMARCASTINTAS marcTint
    ON marcTint.marcaTinta = formTint.marcaTinta
    JOIN CABASESTINTAS baseTint
    ON baseTint.idBaseTinta = formTint.idBaseTinta
    JOIN SIEMBALAGENSTINTAS embTint
    ON embTint.embalagemTinta = baseTint.embalagemTinta
    WHERE formTint.idFormulaTinta = p_item_idFormulaTinta;
    IF v_aux_observacoes <> ' ' THEN
      v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
    END IF;
  END IF;
  -- Personalização
  IF p_item_personalizacao <> 0 THEN
    SELECT descricao
    INTO v_aux_observacoes
    FROM PAPERSONALIZACOES
    WHERE personalizacao = p_item_personalizacao;
    IF v_aux_observacoes <> ' ' THEN
      v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
    END IF;
  END IF;
  -- Lote
  IF p_item_idLoteEstoque <> 0 THEN
    SELECT 'Lote: ' || loteEstoque
    INTO v_aux_observacoes
    FROM CAGRADEPRODUTOXLOTESESTOQ
    WHERE idLoteEstoque = p_item_idLoteEstoque;
    IF v_aux_observacoes <> ' ' THEN
      v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
    END IF;
  END IF;
  -- Espessura / Largura / Comprimento
  IF p_item_controleQuantidade BETWEEN 2 AND 3 THEN
    v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END
      || 'Espessura ' || RTRIM (TO_CHAR (p_item_altura, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) || ' CM'
      || ' X Largura ' || RTRIM (TO_CHAR (p_item_largura, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) || ' CM', 1, 4000));
    IF p_item_controleQuantidade = 3 THEN
      v_observacoes := RTRIM (SUBSTR (v_observacoes || ' X Comprimento ' || RTRIM (TO_CHAR (p_item_comprimento, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) || ' MT', 1, 4000));
    END IF;
  END IF;
  -- Volumes
  IF p_item_loteMultiplo <> 0 THEN
    v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || 'Volumes: ' || RTRIM (TO_CHAR (( p_item_quantidade / p_item_loteMultiplo), 'FM999G999G999G999G999G990')), 1, 4000));
  END IF;
  -- Composição preço
  IF p_tempComp_nomeTempComposicao IS NOT NULL AND p_tempComp_nomeTempComposicao <> ' ' THEN
    SELECT COALESCE(LISTAGG((RTRIM (comp.descricao) || CASE WHEN comp.informaQuantidade = 1 THEN ' ' || RTRIM (TO_CHAR (temp.quantidade, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) ELSE '' END), ' ') WITHIN GROUP (ORDER BY comp.sequencia),' ') numeros
    INTO v_aux_observacoes
    FROM TEMPCOMPOSICAOPRECO temp
    JOIN CAPRODUTOXCOMPOSICOESPREC comp
    ON comp.composicaoPreco = temp.composicaoPreco
    WHERE temp.sessaoClient = p_sessaoClient
    AND temp.nomeTempComposicao = p_tempComp_nomeTempComposicao
    AND temp.sequencia = p_tempComp_sequencia
    AND temp.selecionado = 1;
  ELSIF p_Doc_Orc_Pre_Sep_Transf = 'D' AND p_item_id <> 0 THEN
    SELECT COALESCE(LISTAGG((RTRIM (comp.descricao) || CASE WHEN comp.informaQuantidade = 1 THEN ' ' || RTRIM (TO_CHAR (compDoc.quantidade, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) ELSE '' END), ' ') WITHIN GROUP (ORDER BY comp.sequencia, compDoc.id),' ') numeros
    INTO v_aux_observacoes
    FROM MODOCFISCALXCOMPOSICOESPR compDoc
    JOIN CAPRODUTOXCOMPOSICOESPREC comp
    ON comp.composicaoPreco = compDoc.composicaoPreco
    WHERE compDoc.idItemDocFiscal = p_item_id
    AND compDoc.selecionado = 1;
  ELSIF p_Doc_Orc_Pre_Sep_Transf = 'O' AND p_item_id <> 0 THEN
    SELECT COALESCE(LISTAGG((RTRIM (comp.descricao) || CASE WHEN comp.informaQuantidade = 1 THEN ' ' || RTRIM (TO_CHAR (compDoc.quantidade, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) ELSE '' END), ' ') WITHIN GROUP (ORDER BY comp.sequencia, compDoc.id),' ') numeros
    INTO v_aux_observacoes
    FROM MOORCAMENTOXCOMPOSICOESPR compDoc
    JOIN CAPRODUTOXCOMPOSICOESPREC comp
    ON comp.composicaoPreco = compDoc.composicaoPreco
    WHERE compDoc.idItemOrcamento = p_item_id
    AND compDoc.selecionado = 1;
  ELSIF p_Doc_Orc_Pre_Sep_Transf = 'P' AND p_item_id <> 0 THEN
    SELECT COALESCE(LISTAGG((RTRIM (comp.descricao) || CASE WHEN comp.informaQuantidade = 1 THEN ' ' || RTRIM (TO_CHAR (compDoc.quantidade, 'FM999G999G999G999G999G990D999999999999999999'), TO_CHAR (0, 'D')) ELSE '' END), ' ') WITHIN GROUP (ORDER BY comp.sequencia, compDoc.id),' ') numeros
    INTO v_aux_observacoes
    FROM MOPREDOCUMXCOMPOSICOESPR compDoc
    JOIN CAPRODUTOXCOMPOSICOESPREC comp
    ON comp.composicaoPreco = compDoc.composicaoPreco
    WHERE compDoc.idItemPreDocumento = p_item_id
    AND compDoc.selecionado = 1;
  ELSE
    v_aux_observacoes := ' ';
  END IF;
  IF NOT(v_aux_observacoes IS NULL) AND v_aux_observacoes <> ' ' THEN
    v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || v_aux_observacoes, 1, 4000));
  END IF;
  -- Observações Digitadas
  IF NOT(p_item_observacoesDigitadas IS NULL) AND p_item_observacoesDigitadas <> ' ' THEN
    v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || p_item_observacoesDigitadas, 1, 4000));
  END IF;
  -- Números Série
  IF p_item_id <> 0 THEN
    IF p_Doc_Orc_Pre_Sep_Transf = 'D' THEN
      SELECT COALESCE(LISTAGG(ns.numeroSerie, ' ') WITHIN GROUP (ORDER BY ns.numeroSerie),' ')
      INTO v_aux_observacoes
      FROM MODOCFISCALXNUMEROSSERIE nsDoc
      JOIN CAGRADEPRODUTOXNUMEROSSER ns
      ON ns.idNumeroSerie = nsDoc.idNumeroSerie
      WHERE nsDoc.idItemDocFiscal = p_item_id;
    ELSIF p_Doc_Orc_Pre_Sep_Transf = 'O' THEN
      SELECT COALESCE(LISTAGG(ns.numeroSerie, ' ') WITHIN GROUP (ORDER BY ns.numeroSerie),' ')
      INTO v_aux_observacoes
      FROM MOORCAMENTOXNUMEROSSERIE nsDoc
      JOIN CAGRADEPRODUTOXNUMEROSSER ns
      ON ns.idNumeroSerie = nsDoc.idNumeroSerie
      WHERE nsDoc.idItemOrcamento = p_item_id;
    ELSIF p_Doc_Orc_Pre_Sep_Transf = 'P' THEN
      SELECT COALESCE(LISTAGG(ns.numeroSerie, ' ') WITHIN GROUP (ORDER BY ns.numeroSerie),' ')
      INTO v_aux_observacoes
      FROM MOPREDOCUMXNUMEROSSERIE nsDoc
      JOIN CAGRADEPRODUTOXNUMEROSSER ns
      ON ns.idNumeroSerie = nsDoc.idNumeroSerie
      WHERE nsDoc.idItemPreDocumento = p_item_id;
    ELSIF p_Doc_Orc_Pre_Sep_Transf = 'S' THEN
      SELECT COALESCE(LISTAGG(ns.numeroSerie, ' ') WITHIN GROUP (ORDER BY ns.numeroSerie),' ')
      INTO v_aux_observacoes
      FROM MOSEPARACAOXNUMEROSSERIE nsDoc
      JOIN CAGRADEPRODUTOXNUMEROSSER ns
      ON ns.idNumeroSerie = nsDoc.idNumeroSerie
      WHERE nsDoc.idItemSeparacao = p_item_id;
    ELSIF p_Doc_Orc_Pre_Sep_Transf = 'T' THEN
      SELECT COALESCE(LISTAGG(ns.numeroSerie, ' ') WITHIN GROUP (ORDER BY ns.numeroSerie),' ')
      INTO v_aux_observacoes
      FROM MODOCTRANSFXNUMEROSSERIE nsDoc
      JOIN CAGRADEPRODUTOXNUMEROSSER ns
      ON ns.idNumeroSerie = nsDoc.idNumeroSerie
      WHERE nsDoc.idItemDocTransferencia = p_item_id;
    ELSE
      v_aux_observacoes := ' ';
    END IF;
    IF NOT(v_aux_observacoes IS NULL) AND v_aux_observacoes <> ' ' THEN
      v_observacoes := RTRIM (SUBSTR (CASE WHEN v_observacoes <> ' ' THEN v_observacoes || ' ' ELSE '' END || 'Seriais: ' || v_aux_observacoes, 1, 4000));
    END IF;
  END IF;
  IF v_observacoes IS NULL THEN
    v_observacoes := ' ';
  END IF;
  RETURN v_observacoes;
END;

/

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_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 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_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_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_modalidadeFrete          CHAR (1);
  v_cab_tipoPagamentoFrete       CHAR (1);
  v_cab_transportadora           NUMBER;
  v_cab_enderecoTransportadora   NUMBER;
  v_cab_ultimoVendedorItem       NUMBER;
  v_cab_quantidadeVolume         NUMBER;
  v_cab_quantidade               NUMBER;
  v_cab_pesoLiquido              NUMBER;
  v_cab_pesoBruto                NUMBER;
  v_cab_valorProdutosBruto       NUMBER;
  v_cab_valorProdutos            NUMBER;
  v_cab_valorDescontoProdutos    NUMBER;
  v_cab_valorAcrescimoProdutos   NUMBER;
  v_cab_valorServicosBruto       NUMBER;
  v_cab_valorServicos            NUMBER;
  v_cab_valorDescontoServicos    NUMBER;
  v_cab_valorAcrescimoServicos   NUMBER;
  v_cab_valorFreteItem           NUMBER;
  v_cab_valorSeguroItem          NUMBER;
  v_cab_valorAdicFreteMarItem    NUMBER;
  v_cab_valorDespesasAduanItem   NUMBER;
  v_cab_valorFreteGeral          NUMBER;
  v_cab_valorSeguroGeral         NUMBER;
  v_cab_valorDescontoGeral       NUMBER;
  v_cab_valorOutrasDespesasGeral NUMBER;
  v_cab_valorAdicFreteMarGeral   NUMBER;
  v_cab_valorDespesasAduanGeral  NUMBER;
  v_cab_condicaoPagamento        NUMBER;
  v_cab_numeroParcelas           NUMBER;
  v_cab_somaPrazoParcelas        NUMBER;
  v_cab_valorXPrazoParcelas      NUMBER;
  v_cab_prazoMedio               NUMBER;
  v_cab_prazoMedioPonderado      NUMBER;
  v_cab_valorBasePagamento       NUMBER;
  v_cab_valorAVistaMinimo        NUMBER;
  v_cab_valorEntradaMinima       NUMBER;
  v_cab_valorAVistaEntrada       NUMBER;
  v_cab_valorPagamentoBruto      NUMBER;
  v_cab_valorDescontoPagamento   NUMBER;
  v_cab_valorOutrasDespPagamento NUMBER;
  v_cab_valorJurosPagamento      NUMBER;
  v_cab_valorPagamentoLiquido    NUMBER;
  v_cab_valorTroco               NUMBER;
  v_cab_valorFreteTotal          NUMBER;
  v_cab_valorSeguroTotal         NUMBER;
  v_cab_valorDescontoTotal       NUMBER;
  v_cab_valorOutrasDespesasTotal NUMBER;
  v_cab_valorAdicFreteMarTotal   NUMBER;
  v_cab_valorDespesasAduanTotal  NUMBER;
  v_cab_valorLiquidoItem         NUMBER;
  v_est_grupoFiscal              NUMBER;
  v_pessEst_regimeTributario     CHAR (1);
  v_munEndEst_uf                 CHAR (2);
  v_pess_indicadorInscricaoEstad CHAR (1);
  v_endPess_enderecoPessoa       NUMBER;
  v_munEndPess_uf                CHAR (2);
  v_munEndEntr_uf                CHAR (2);
  v_etOrc_situacaoOrcamento      NUMBER;
  v_inserindoItem                NUMBER;
  v_cab_promocaoExiste           NUMBER;
  v_ini_cab_valorFreteItem       NUMBER;
  v_ini_cab_valorFreteGeral      NUMBER;
  v_ini_gradeProduto             NUMBER;
  v_ini_personalizacao           NUMBER;
  v_ini_operacaoFiscal           NUMBER;
  v_ini_quantidade               NUMBER;
  v_ini_controleEntrega          NUMBER;
  v_ini_valorProdutoServicoBruto NUMBER;
  v_ini_valorProdutoServico      NUMBER;
  v_ini_valorDescontoItem        NUMBER;
  v_ini_valorAcrescimoItem       NUMBER;
  v_ini_valorBasePagamento       NUMBER;
  v_ini_valorFreteTotal          NUMBER;
  v_ini_valorSeguroTotal         NUMBER;
  v_ini_valorDescontoTotal       NUMBER;
  v_ini_valorOutrasDespesasTotal NUMBER;
  v_ini_valorAdicFreteMarTotal   NUMBER;
  v_ini_valorDespesasAduanTotal  NUMBER;
  v_ini_contrEntr_habilitaFrete  NUMBER;
  v_item_sequencia               NUMBER;
  v_item_cancelado               NUMBER;
  v_item_quantidadeSaldo         NUMBER;
  v_item_precoUnitario           NUMBER;
  v_item_precoUnitarioConvertido NUMBER;
  v_item_valorProdutoServicoBrut NUMBER;
  v_item_valorProdutoServico     NUMBER;
  v_item_valorFreteGeral         NUMBER;
  v_item_valorDescontoGeral      NUMBER;
  v_item_valorBasePagamento      NUMBER;
  v_item_valorDescontoPagamento  NUMBER;
  v_item_valorOutrasDespPagament NUMBER;
  v_item_valorJurosPagamento     NUMBER;
  v_item_valorFreteTotal         NUMBER;
  v_item_valorSeguroTotal        NUMBER;
  v_item_valorDescontoTotal      NUMBER;
  v_item_valorOutrasDespesasTot  NUMBER;
  v_item_valorAdicFreteMarTotal  NUMBER;
  v_item_valorDespesasAduanTotal NUMBER;
  v_item_movimentaEstoque        NUMBER;
  v_item_geraFinanceiro          NUMBER;
  v_item_cfop                    NUMBER;
  v_item_indicadorISSQN          CHAR (1);
  v_item_aliquotaISSQN           NUMBER;
  v_item_retidoISSQN             NUMBER;
  v_item_tributadoForaMunicipio  NUMBER;
  v_item_incentivoFiscal         NUMBER;
  v_item_listaServicos           NUMBER;
  v_item_cnae                    NUMBER;
  v_item_idServicoMunicipio      NUMBER;
  v_item_numeroProcessoAdministr VARCHAR2 (30);
  v_item_retencaoIRRF            NUMBER;
  v_item_retencaoINSS            NUMBER;
  v_item_retencaoPIS             NUMBER;
  v_item_retencaoCOFINS          NUMBER;
  v_item_retencaoCSLL            NUMBER;
  v_item_retencaoOutros          NUMBER;
  v_item_aliquotaII              NUMBER;
  v_item_aliquotaIOF             NUMBER;
  v_item_codigoEnquadramentoIPI  NUMBER;
  v_item_stIPI                   CHAR (2);
  v_item_aliquotaIPI             NUMBER;
  v_item_valorAliquotaIPI        NUMBER;
  v_item_stPIS                   CHAR (2);
  v_item_aliquotaPIS             NUMBER;
  v_item_valorAliquotaPIS        NUMBER;
  v_item_aliquotaPISST           NUMBER;
  v_item_valorAliquotaPISST      NUMBER;
  v_item_stCOFINS                CHAR (2);
  v_item_aliquotaCOFINS          NUMBER;
  v_item_valorAliquotaCOFINS     NUMBER;
  v_item_aliquotaCOFINSST        NUMBER;
  v_item_valorAliquotaCOFINSST   NUMBER;
  v_item_stSimplesNacional       CHAR (3);
  v_item_creditoSimplesNacional  NUMBER;
  v_item_stICMS                  CHAR (2);
  v_item_modalBaseCalcICMS       CHAR (1);
  v_item_reducaoBaseICMS         NUMBER;
  v_item_aliquotaICMS            NUMBER;
  v_item_diferimentoICMS         NUMBER;
  v_item_motivoDesoneracaoICMS   CHAR (2);
  v_item_idBeneficio             NUMBER;
  v_item_modalBaseCalcICMSST     CHAR (1);
  v_item_margemValorAdicionadoST NUMBER;
  v_item_reducaoBaseST           NUMBER;
  v_item_aliquotaICMSST          NUMBER;
  v_item_aliquotaSTSuportConsFin NUMBER;
  v_item_reducaoBaseICMSEfetivo  NUMBER;
  v_item_aliquotaICMSEfetivo     NUMBER;
  v_item_aliquotaICMSUFDestinat  NUMBER;
  v_item_aliquotaICMSInterestad  NUMBER;
  v_item_partilhaICMSInterestad  NUMBER;
  v_item_aliquotaFCP             NUMBER;
  v_item_aliquotaFCPST           NUMBER;
  v_item_aliquotaFCPSTAnteriorm  NUMBER;
  v_item_aliquotaFCPUFDestinat   NUMBER;
  v_item_aliquotaEstImpFederais  NUMBER;
  v_item_aliquotaEstImpEstaduais NUMBER;
  v_item_aliquotaEstImpMunicipai NUMBER;
  v_item_baseISSQN               NUMBER;
  v_item_valorISSQN              NUMBER;
  v_item_baseRetIRRF             NUMBER;
  v_item_valorRetIRRF            NUMBER;
  v_item_baseRetINSS             NUMBER;
  v_item_valorRetINSS            NUMBER;
  v_item_baseRetPIS              NUMBER;
  v_item_valorRetPIS             NUMBER;
  v_item_baseRetCOFINS           NUMBER;
  v_item_valorRetCOFINS          NUMBER;
  v_item_baseRetCSLL             NUMBER;
  v_item_valorRetCSLL            NUMBER;
  v_item_baseRetOutros           NUMBER;
  v_item_valorRetOutros          NUMBER;
  v_item_baseII                  NUMBER;
  v_item_valorII                 NUMBER;
  v_item_baseIOF                 NUMBER;
  v_item_valorIOF                NUMBER;
  v_item_baseIPI                 NUMBER;
  v_item_valorIPI                NUMBER;
  v_item_basePIS                 NUMBER;
  v_item_valorPIS                NUMBER;
  v_item_basePISST               NUMBER;
  v_item_valorPISST              NUMBER;
  v_item_baseCOFINS              NUMBER;
  v_item_valorCOFINS             NUMBER;
  v_item_baseCOFINSST            NUMBER;
  v_item_valorCOFINSST           NUMBER;
  v_item_baseCreditoSimplesNac   NUMBER;
  v_item_valorCreditoSimplesNac  NUMBER;
  v_item_baseICMS                NUMBER;
  v_item_valorICMSOperacao       NUMBER;
  v_item_valorICMSDiferido       NUMBER;
  v_item_valorICMS               NUMBER;
  v_item_valorICMSDesoneracao    NUMBER;
  v_item_baseICMSST              NUMBER;
  v_item_valorICMSST             NUMBER;
  v_item_baseICMSSTAnteriormente NUMBER;
  v_item_valorICMSSTAnteriorment NUMBER;
  v_item_valorICMSProprioSubstit NUMBER;
  v_item_baseICMSEfetivo         NUMBER;
  v_item_valorICMSEfetivo        NUMBER;
  v_item_baseICMSUFDestinatario  NUMBER;
  v_item_valorICMSUFDestinatario NUMBER;
  v_item_baseICMSUFRemetente     NUMBER;
  v_item_valorICMSUFRemetente    NUMBER;
  v_item_baseFCP                 NUMBER;
  v_item_valorFCP                NUMBER;
  v_item_baseFCPST               NUMBER;
  v_item_valorFCPST              NUMBER;
  v_item_baseFCPSTAnteriormente  NUMBER;
  v_item_valorFCPSTAnteriormente NUMBER;
  v_item_baseFCPUFDestinatario   NUMBER;
  v_item_valorFCPUFDestinatario  NUMBER;
  v_item_baseEstimadaImpostos    NUMBER;
  v_item_valorEstImpFederais     NUMBER;
  v_item_valorEstImpEstaduais    NUMBER;
  v_item_valorEstImpMunicipais   NUMBER;
  v_item_valorLiquidoItem        NUMBER;
  v_modDoc_capituloNatFiscal     NUMBER;
  v_modDoc_movimentaEstoque      NUMBER;
  v_modDoc_geraFinanceiro        NUMBER;
  v_modDoc_tipoPreco             CHAR (1);
  v_modDoc_tabelaPreco           VARCHAR (10);
  v_modDoc_fatorMultipPreco      NUMBER;
  v_modDoc_tipoPrecoB            CHAR (1);
  v_modDoc_tabelaPrecoB          VARCHAR (10);
  v_modDoc_fatorMultipPrecoB     NUMBER;
  v_modDoc_diminuiDescontoPrUnit NUMBER;
  v_modDoc_somaAcrescimosPrUnit  NUMBER;
  v_modDoc_somaFreteSeguroPrUnit NUMBER;
  v_gradProd_produto             NUMBER;
  v_gradProd_cor                 NUMBER;
  v_gradProd_tamanho             CHAR(10);
  v_prod_controleEstoque         NUMBER;
  v_prod_tipoProduto             CHAR(2);
  v_prod_origemMercadoria        CHAR(1);
  v_prod_idNcm                   NUMBER;
  v_prod_listaServicos           NUMBER;
  v_prod_precoPautaTabelado      NUMBER;
  v_prod_composicaoPreco         NUMBER;
  v_ativServ_validoPrevisto      NUMBER;
  v_ativServ_habilitaAtivPrev    NUMBER;   
  v_contrEntr_habilitaFrete      NUMBER;
  v_atualizarObservacoes         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_uniMedConv_casasDecimaisUnid 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.modalidadeFrete,
    cab.tipoPagamentoFrete,
    cab.transportadora,
    cab.enderecoTransportadora,
    cab.ultimoVendedorItem,
    cab.quantidadeVolume,
    cab.quantidade,
    cab.pesoLiquido,
    cab.pesoBruto,
    cab.valorProdutosBruto,
    cab.valorProdutos,
    cab.valorDescontoProdutos,
    cab.valorAcrescimoProdutos,
    cab.valorServicosBruto,
    cab.valorServicos,
    cab.valorDescontoServicos,
    cab.valorAcrescimoServicos,
    cab.valorFreteItem,
    cab.valorSeguroItem,
    cab.valorAdicFreteMarinhaMerItem,
    cab.valorDespesasAduaneirasItem,
    cab.valorFreteGeral,
    cab.valorSeguroGeral,
    cab.valorDescontoGeral,
    cab.valorOutrasDespesasGeral,
    cab.valorAdicFreteMarinhaMerGeral,
    cab.valorDespesasAduaneirasGeral,
    cab.condicaoPagamento,
    cab.numeroParcelas,
    cab.somaPrazoParcelas,
    cab.valorXPrazoParcelas,
    cab.prazoMedio,
    cab.prazoMedioPonderado,
    cab.valorBasePagamento,
    cab.valorAVistaMinimo,
    cab.valorEntradaMinima,
    cab.valorAVistaEntrada,
    cab.valorPagamentoBruto,
    cab.valorDescontoPagamento,
    cab.valorOutrasDespesasPagamento,
    cab.valorJurosPagamento,
    cab.valorPagamentoLiquido,
    cab.valorTroco,
    cab.valorFreteTotal,
    cab.valorSeguroTotal,
    cab.valorDescontoTotal,
    cab.valorOutrasDespesasTotal,
    cab.valorAdicFreteMarinhaMerTotal,
    cab.valorDespesasAduaneirasTotal,
    cab.valorLiquidoItem,
    est.grupoFiscal,
    COALESCE (pessEst.regimeTributario, ' '),
    COALESCE ((
      SELECT MIN(munEst.uf)
      FROM CAENDERECOSPESSOA endEst
      JOIN SIMUNICIPIOS munEst
      ON munEst.municipio = endEst.municipio
      WHERE endEst.pessoa = est.pessoaEstabelecimento
      AND endEst.ativo = 1
      AND endEst.principal = 1), '  '),
    pess.indicadorInscricaoEstadual,
    COALESCE ((
      SELECT MIN(enderecoPessoa)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), 0),
    COALESCE ((
      SELECT MIN(munPess.uf)
      FROM CAENDERECOSPESSOA endPess
      JOIN SIMUNICIPIOS munPess
      ON munPess.municipio = endPess.municipio
      WHERE endPess.pessoa = cab.pessoa
      AND endPess.ativo = 1
      AND endPess.principal = 1), '  '),
    munEndEntr.uf,
    etOrc.situacaoOrcamento
  INTO
    v_cab_origemDocumento,
    v_cab_tipoDocumento,
    v_cab_entradaSaida,
    v_cab_finalidadeNota,
    v_cab_estabelecimento,
    v_cab_dataEmissao,
    v_cab_pessoa,
    v_cab_enderecoEntregaPessoa,
    v_cab_municipioFatoGerador,
    v_cab_localDestinoOperacao,
    v_cab_indicadorConsumidorFinal,
    v_cab_modalidadeFrete,
    v_cab_tipoPagamentoFrete,
    v_cab_transportadora,
    v_cab_enderecoTransportadora,
    v_cab_ultimoVendedorItem,
    v_cab_quantidadeVolume,
    v_cab_quantidade,
    v_cab_pesoLiquido,
    v_cab_pesoBruto,
    v_cab_valorProdutosBruto,
    v_cab_valorProdutos,
    v_cab_valorDescontoProdutos,
    v_cab_valorAcrescimoProdutos,
    v_cab_valorServicosBruto,
    v_cab_valorServicos,
    v_cab_valorDescontoServicos,
    v_cab_valorAcrescimoServicos,
    v_cab_valorFreteItem,
    v_cab_valorSeguroItem,
    v_cab_valorAdicFreteMarItem,
    v_cab_valorDespesasAduanItem,
    v_cab_valorFreteGeral,
    v_cab_valorSeguroGeral,
    v_cab_valorDescontoGeral,
    v_cab_valorOutrasDespesasGeral,
    v_cab_valorAdicFreteMarGeral,
    v_cab_valorDespesasAduanGeral,
    v_cab_condicaoPagamento,
    v_cab_numeroParcelas,
    v_cab_somaPrazoParcelas,
    v_cab_valorXPrazoParcelas,
    v_cab_prazoMedio,
    v_cab_prazoMedioPonderado,
    v_cab_valorBasePagamento,
    v_cab_valorAVistaMinimo,
    v_cab_valorEntradaMinima,
    v_cab_valorAVistaEntrada,
    v_cab_valorPagamentoBruto,
    v_cab_valorDescontoPagamento,
    v_cab_valorOutrasDespPagamento,
    v_cab_valorJurosPagamento,
    v_cab_valorPagamentoLiquido,
    v_cab_valorTroco,
    v_cab_valorFreteTotal,
    v_cab_valorSeguroTotal,
    v_cab_valorDescontoTotal,
    v_cab_valorOutrasDespesasTotal,
    v_cab_valorAdicFreteMarTotal,
    v_cab_valorDespesasAduanTotal,
    v_cab_valorLiquidoItem,
    v_est_grupoFiscal,
    v_pessEst_regimeTributario,
    v_munEndEst_uf,
    v_pess_indicadorInscricaoEstad,
    v_endPess_enderecoPessoa,
    v_munEndPess_uf,
    v_munEndEntr_uf,
    v_etOrc_situacaoOrcamento
  FROM MOORCAMENTOS cab
  JOIN PAESTABELECIMENTOS est
  ON est.estabelecimento = cab.estabelecimento
  JOIN CAPESSOAS pessEst
  ON pessEst.pessoa = est.pessoaEstabelecimento
  JOIN CAPESSOAS pess
  ON pess.pessoa = cab.pessoa
  JOIN CAENDERECOSPESSOA endEntr
  ON endEntr.enderecoPessoa = cab.enderecoEntregaPessoa
  JOIN SIMUNICIPIOS munEndEntr
  ON munEndEntr.municipio = endEntr.municipio
  JOIN PAETAPASORCAMENTO etOrc
  ON etOrc.etapaOrcamento = cab.etapaOrcamento
  WHERE cab.orcamento = p_item_orcamento;
  v_ini_cab_valorFreteItem := v_cab_valorFreteItem;
  v_ini_cab_valorFreteGeral := v_cab_valorFreteGeral;
  SELECT
    gradProd.produto,
    gradProd.cor,
    gradProd.tamanho,
    prod.controleEstoque,
    prod.tipoProduto,
    prod.origemMercadoria,
    prod.idNcm,
    prod.listaServicos,
    prod.precoPautaTabelado,
    CASE
      WHEN EXISTS (
        SELECT 1
        FROM CAPRODUTOXCOMPOSICOESPREC comp
        WHERE comp.produto = gradProd.produto
        AND comp.ativo = 1)
      THEN 1
      ELSE 0
    END
  INTO
    v_gradProd_produto,
    v_gradProd_cor,
    v_gradProd_tamanho,
    v_prod_controleEstoque,
    v_prod_tipoProduto,
    v_prod_origemMercadoria,
    v_prod_idNcm,
    v_prod_listaServicos,
    v_prod_precoPautaTabelado,
    v_prod_composicaoPreco
  FROM CAGRADESPRODUTO gradProd
  JOIN CAPRODUTOS prod
  ON prod.produto = gradProd.produto
  WHERE gradProd.gradeProduto = p_item_gradeProduto;
  v_inserindoItem                := 1;
  v_cab_promocaoExiste           := 0;
  v_item_cancelado               := 0;
  v_ini_gradeProduto             := 0;
  v_ini_personalizacao           := 0;
  v_ini_operacaoFiscal           := 0;
  v_ini_quantidade               := 0;
  v_ini_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_valorFreteTotal := a.valorFreteTotal;
      v_ini_contrEntr_habilitaFrete := a.habilitaFrete;
      IF p_buscarAliquotas_CalcularImp ='T'
      THEN
        v_item_movimentaEstoque        := a.movimentaEstoque;
        v_item_geraFinanceiro          := a.geraFinanceiro;
        v_item_cfop                    := a.cfop;
        v_item_indicadorISSQN          := a.indicadorISSQN;
        v_item_aliquotaISSQN           := a.aliquotaISSQN;
        v_item_retidoISSQN             := a.retidoISSQN;
        v_item_tributadoForaMunicipio  := a.tributadoForaMunicipio;
        v_item_incentivoFiscal         := a.incentivoFiscal;
        v_item_listaServicos           := a.listaServicos;
        v_item_cnae                    := a.cnae;
        v_item_idServicoMunicipio      := a.idServicoMunicipio;
        v_item_numeroProcessoAdministr := a.numeroProcessoAdministrativo;
        v_item_retencaoIRRF            := a.retencaoIRRF;
        v_item_retencaoINSS            := a.retencaoINSS;
        v_item_retencaoPIS             := a.retencaoPIS;
        v_item_retencaoCOFINS          := a.retencaoCOFINS;
        v_item_retencaoCSLL            := a.retencaoCSLL;
        v_item_retencaoOutros          := a.retencaoOutros;
        v_item_aliquotaII              := a.aliquotaII;
        v_item_aliquotaIOF             := a.aliquotaIOF;
        v_item_codigoEnquadramentoIPI  := a.codigoEnquadramentoIPI;
        v_item_stIPI                   := a.stIPI;
        v_item_aliquotaIPI             := a.aliquotaIPI;
        v_item_valorAliquotaIPI        := a.valorAliquotaIPI;
        v_item_stPIS                   := a.stPIS;
        v_item_aliquotaPIS             := a.aliquotaPIS;
        v_item_valorAliquotaPIS        := a.valorAliquotaPIS;
        v_item_aliquotaPISST           := a.aliquotaPISST;
        v_item_valorAliquotaPISST      := a.valorAliquotaPISST;
        v_item_stCOFINS                := a.stCOFINS;
        v_item_aliquotaCOFINS          := a.aliquotaCOFINS;
        v_item_valorAliquotaCOFINS     := a.valorAliquotaCOFINS;
        v_item_aliquotaCOFINSST        := a.aliquotaCOFINSST;
        v_item_valorAliquotaCOFINSST   := a.valorAliquotaCOFINSST;
        v_item_stSimplesNacional       := a.stSimplesNacional;
        v_item_creditoSimplesNacional  := a.creditoSimplesNacional;
        v_item_stICMS                  := a.stICMS;
        v_item_modalBaseCalcICMS       := a.modalidadeBaseCalcICMS;
        v_item_reducaoBaseICMS         := a.reducaoBaseICMS;
        v_item_aliquotaICMS            := a.aliquotaICMS;
        v_item_diferimentoICMS         := a.diferimentoICMS;
        v_item_motivoDesoneracaoICMS   := a.motivoDesoneracaoICMS;
        v_item_idBeneficio             := a.idBeneficio;
        v_item_modalBaseCalcICMSST     := a.modalidadeBaseCalcICMSST;
        v_item_margemValorAdicionadoST := a.margemValorAdicionadoST;
        v_item_reducaoBaseST           := a.reducaoBaseST;
        v_item_aliquotaICMSST          := a.aliquotaICMSST;
        v_item_aliquotaSTSuportConsFin := a.aliquotaSTSuportConsFinal;
        v_item_reducaoBaseICMSEfetivo  := a.reducaoBaseICMSEfetivo;
        v_item_aliquotaICMSEfetivo     := a.aliquotaICMSEfetivo;
        v_item_aliquotaICMSUFDestinat  := a.aliquotaICMSUFDestinatario;
        v_item_aliquotaICMSInterestad  := a.aliquotaICMSInterestadual;
        v_item_partilhaICMSInterestad  := a.partilhaICMSInterestadual;
        v_item_aliquotaFCP             := a.aliquotaFCP;
        v_item_aliquotaFCPST           := a.aliquotaFCPST;
        v_item_aliquotaFCPSTAnteriorm  := a.aliquotaFCPSTAnteriormente;
        v_item_aliquotaFCPUFDestinat   := a.aliquotaFCPUFDestinatario;
        v_item_aliquotaEstImpFederais  := a.aliquotaEstimadaImpFederais;
        v_item_aliquotaEstImpEstaduais := a.aliquotaEstimadaImpEstaduais;
        v_item_aliquotaEstImpMunicipai := a.aliquotaEstimadaImpMunicipais;
        v_item_baseISSQN               := a.baseISSQN;
        v_item_valorISSQN              := a.valorISSQN;
        v_item_baseRetIRRF             := a.baseRetIRRF;
        v_item_valorRetIRRF            := a.valorRetIRRF;
        v_item_baseRetINSS             := a.baseRetINSS;
        v_item_valorRetINSS            := a.valorRetINSS;
        v_item_baseRetPIS              := a.baseRetPIS;
        v_item_valorRetPIS             := a.valorRetPIS;
        v_item_baseRetCOFINS           := a.baseRetCOFINS;
        v_item_valorRetCOFINS          := a.valorRetCOFINS;
        v_item_baseRetCSLL             := a.baseRetCSLL;
        v_item_valorRetCSLL            := a.valorRetCSLL;
        v_item_baseRetOutros           := a.baseRetOutros;
        v_item_valorRetOutros          := a.valorRetOutros;
        v_item_baseII                  := a.baseII;
        v_item_valorII                 := a.valorII;
        v_item_baseIOF                 := a.baseIOF;
        v_item_valorIOF                := a.valorIOF;
        v_item_baseIPI                 := a.baseIPI;
        v_item_valorIPI                := a.valorIPI;
        v_item_basePIS                 := a.basePIS;
        v_item_valorPIS                := a.valorPIS;
        v_item_basePISST               := a.basePISST;
        v_item_valorPISST              := a.valorPISST;
        v_item_baseCOFINS              := a.baseCOFINS;
        v_item_valorCOFINS             := a.valorCOFINS;
        v_item_baseCOFINSST            := a.baseCOFINSST;
        v_item_valorCOFINSST           := a.valorCOFINSST;
        v_item_baseCreditoSimplesNac   := a.baseCreditoSimplesNacional;
        v_item_valorCreditoSimplesNac  := a.valorCreditoSimplesNacional;
        v_item_baseICMS                := a.baseICMS;
        v_item_valorICMSOperacao       := a.valorICMSOperacao;
        v_item_valorICMSDiferido       := a.valorICMSDiferido;
        v_item_valorICMS               := a.valorICMS;
        v_item_valorICMSDesoneracao    := a.valorICMSDesoneracao;
        v_item_baseICMSST              := a.baseICMSST;
        v_item_valorICMSST             := a.valorICMSST;
        v_item_baseICMSSTAnteriormente := a.baseICMSSTAnteriormente;
        v_item_valorICMSSTAnteriorment := a.valorICMSSTAnteriormente;
        v_item_valorICMSProprioSubstit := a.valorICMSProprioSubstituto;
        v_item_baseICMSEfetivo         := a.baseICMSEfetivo;
        v_item_valorICMSEfetivo        := a.valorICMSEfetivo;
        v_item_baseICMSUFDestinatario  := a.baseICMSUFDestinatario;
        v_item_valorICMSUFDestinatario := a.valorICMSUFDestinatario;
        v_item_baseICMSUFRemetente     := a.baseICMSUFRemetente;
        v_item_valorICMSUFRemetente    := a.valorICMSUFRemetente;
        v_item_baseFCP                 := a.baseFCP;
        v_item_valorFCP                := a.valorFCP;
        v_item_baseFCPST               := a.baseFCPST;
        v_item_valorFCPST              := a.valorFCPST;
        v_item_baseFCPSTAnteriormente  := a.baseFCPSTAnteriormente;
        v_item_valorFCPSTAnteriormente := a.valorFCPSTAnteriormente;
        v_item_baseFCPUFDestinatario   := a.baseFCPUFDestinatario;
        v_item_valorFCPUFDestinatario  := a.valorFCPUFDestinatario;
        v_item_baseEstimadaImpostos    := a.baseEstimadaImpostos;
        v_item_valorEstImpFederais     := a.valorEstimadoImpFederais;
        v_item_valorEstImpEstaduais    := a.valorEstimadoImpEstaduais;
        v_item_valorEstImpMunicipais   := a.valorEstimadoImpMunicipais;
      END IF;
      IF 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      := a.controleQuantidadeVenda;
        v_combo_unidadeMedidaConversao  :=
          CASE
            WHEN a.controleQuantidadeVenda IN (2,3) 
            THEN 'PC'
            ELSE (
              CASE
                WHEN a.controleQuantidadeVenda = 4 AND a.unidadeMedidaVenda <> ' ' AND a.conversorQuantidadeVenda <> 0 AND a.conversorQuantidadeVenda <> 1
                THEN a.unidadeMedidaVenda
                ELSE a.unidadeMedida
              END
            )
          END;
        v_combo_conversorQuantidade := a.conversorQuantidadeVenda;
        v_combo_loteMinimo          := ROUND (a.loteMinimoVenda, a.casasDecimaisUnidadeMedida);
        v_combo_loteMultiplo        := ROUND (a.loteMultiploVenda, a.casasDecimaisUnidadeMedida);
        SELECT COALESCE ( MAX (casasDecimaisUnidadeMedida), 0)
        INTO v_uniMedConv_casasDecimaisUnid
        FROM SIUNIDADESMEDIDA
        WHERE unidadeMedida = v_combo_unidadeMedidaConversao;
      END IF;
      IF v_combo_controleQuantidade NOT BETWEEN 1 AND 4 OR v_combo_controleQuantidade = 4 AND (v_combo_conversorQuantidade = 0 OR v_combo_conversorQuantidade = 1)
      THEN
        v_combo_controleQuantidade := 1;
      END IF;
      IF v_combo_controleQuantidade <> 4 THEN
        v_combo_conversorQuantidade  := 1;
      END IF;
      IF v_combo_controleQuantidade = 1 THEN
        v_combo_altura               := 0;
        v_combo_largura              := 0;
        v_combo_comprimento          := 0;
        v_combo_pecas                := 0;
        v_combo_quantidadeConvertida := a.quantidade;
      ELSIF 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 / ((a.altura / 100) * (v_combo_largura / 100))),3) END;
        v_combo_quantidadeConvertida := ROUND (v_combo_pecas, v_uniMedConv_casasDecimaisUnid);
      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 / ((a.altura / 100) * (v_combo_largura / 100) * v_combo_comprimento),3) END;
        v_combo_quantidadeConvertida := ROUND (v_combo_pecas, v_uniMedConv_casasDecimaisUnid);
      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),3) END;
        v_combo_quantidadeConvertida := ROUND (v_combo_pecas, v_uniMedConv_casasDecimaisUnid);
      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_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_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_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_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
      ADD_ORCAMENTO_ITEM_COMBO_RESID (
        p_item_orcamento,
        v_item_valorProdutoServico,
        p_item_valorDescontoItem,
        p_item_valorAcrescimoItem,
        v_modDoc_diminuiDescontoPrUnit,
        v_modDoc_somaAcrescimosPrUnit,
        r_buffer_idItemOrcamento,
        r_valorInserido);
      r_calcularImpostos := 1;
    END IF;
  ELSE
    IF r_item_idItemOrcamento <= 0 THEN
      r_item_idItemOrcamento := FUNC_ADD_BUSCA_PROXIMO_ID ('MOORCAMENTOXITENS', 'idItemOrcamento', 14, p_estabelecimentoAtivo, NULL);
    END IF;
    IF p_manterFinanceiro_Retotalizar = 0
      AND v_item_cancelado = 0
    THEN
      IF v_inserindoItem = 1
        AND (v_cab_valorFreteGeral <> 0
          OR v_cab_valorSeguroGeral <> 0
          OR v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorAdicFreteMarGeral <> 0
          OR v_cab_valorDespesasAduanGeral <> 0)
      THEN
        r_calcularImpostos := 1;
      END IF;
      IF (v_cab_valorDescontoGeral <> 0
          OR v_cab_valorOutrasDespesasGeral <> 0
          OR v_cab_valorPagamentoBruto <> 0
          OR v_cab_promocaoExiste = 1)
        AND (v_inserindoItem = 1
          OR p_item_gradeProduto <> v_ini_gradeProduto
          OR p_item_quantidade <> v_ini_quantidade
          OR v_item_valorBasePagamento <> v_ini_valorBasePagamento)
      THEN
        ADD_ORCAMENTO_PAG_EXCLUI_TROCA (
          r_calcularImpostos,
          p_item_orcamento,
          v_cab_valorDescontoGeral,
          v_cab_valorOutrasDespesasGeral,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_promocaoExiste,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento,
          r_calcularImpostos,
          v_cab_valorDescontoGeral,
          v_cab_condicaoPagamento,
          v_cab_numeroParcelas,
          v_cab_somaPrazoParcelas,
          v_cab_valorXPrazoParcelas,
          v_cab_prazoMedio,
          v_cab_prazoMedioPonderado,
          v_cab_valorEntradaMinima,
          v_cab_valorAVistaEntrada,
          v_cab_valorPagamentoBruto,
          v_cab_valorDescontoPagamento,
          v_cab_valorOutrasDespPagamento,
          v_cab_valorJurosPagamento,
          v_cab_valorPagamentoLiquido,
          v_cab_valorTroco,
          v_item_valorDescontoGeral,
          v_item_valorDescontoPagamento,
          v_item_valorOutrasDespPagament,
          v_item_valorJurosPagamento);
      END IF;
      IF p_item_controleEntrega > 0 THEN
        SELECT habilitaFrete
        INTO v_contrEntr_habilitaFrete
        FROM PACONTROLESENTREGA
        WHERE controleEntrega = p_item_controleEntrega;
      END IF;
      IF
        CASE
          WHEN v_ini_controleEntrega = 0
            OR v_ini_contrEntr_habilitaFrete = 0
          THEN 0
          ELSE v_ini_valorProdutoServicoBruto - v_ini_valorDescontoItem + v_ini_valorAcrescimoItem
        END <>
        CASE
          WHEN p_item_controleEntrega = 0
            OR v_contrEntr_habilitaFrete = 0
          THEN 0
          ELSE v_item_valorProdutoServicoBrut - p_item_valorDescontoItem + p_item_valorAcrescimoItem
        END
      THEN
        ADD_ORCAMENTO_CAB_BUSCA_FRETE (
          p_person_190_modeloFrete,
          0,
          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,
          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_cab_valorFreteGeral := v_valorFreteRegra;
          v_item_valorFreteGeral := 0;
        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,
      ' ',
      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_item_idItemOrcamento <= 0
      AND v_item_cancelado = 0
      AND p_item_atividadeServico > 0
    THEN
