SET DEFINE OFF;

UPDATE SITABELASSISTEMA SET ordenacao = 31484 WHERE tabelaSistema = 'PAREGRASFORMACAOPRECO';
UPDATE SITABELASSISTEMA SET ordenacao = 31487 WHERE tabelaSistema = 'PAMODELOSDOCUMENTO';
UPDATE SITABELASSISTEMA SET ordenacao = 31488 WHERE tabelaSistema = 'PAINFORMACOESCOMPLEMENTAR';
UPDATE SITABELASSISTEMA SET ordenacao = 31489 WHERE tabelaSistema = 'PAPRIORIDADESDOCUMENTO';

COMMIT;

UPDATE SITABELASSISTEMA SET nomePublicoZoom = 'PesqRegrasPontuacoes' WHERE tabelaSistema = 'PAREGRASPONTUACAO';
UPDATE SITABELASSISTEMA SET nomePublicoZoom = 'PesqRegPontXMeiosPagamento' WHERE tabelaSistema = 'PAREGRAPONTUACAOXMEIOSPAG';
UPDATE SITABELASSISTEMA SET nomePublicoZoom = 'PesqRegPontXTabelasPreco' WHERE tabelaSistema = 'PAREGRAPONTUACAOXTABELAS';

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, categoriaConfiguracao, categoriaPersonalCampo, categoriaMemoriaSistema, permiteReport, observacoes) values (845, 'Regras Pontuações', 1, 90002587, 'PA', 300002, 845, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqRegrasPontuacoes', 0, 0, 0, 0, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, categoriaConfiguracao, categoriaPersonalCampo, categoriaMemoriaSistema, permiteReport, observacoes) values (846, 'Regra Pontuação X MeiosPagamento', 1, 90002588, 'PA', 300002, 845, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqRegPontXMeiosPagamento', 0, 0, 0, 0, ' ');
INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, categoriaConfiguracao, categoriaPersonalCampo, categoriaMemoriaSistema, permiteReport, observacoes) values (847, 'Regra Pontuação X Tabelas Preço', 1, 90002588, 'PA', 300002, 845, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqRegPontXTabelasPreco', 0, 0, 0, 0, ' ');

COMMIT;

-- PATIPOSVENDA
CREATE TABLE PATIPOSVENDA
  (
    tipoVenda   NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descricao   VARCHAR (120) DEFAULT ' ' NOT NULL,
    ativo       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    observacoes VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PATIPOSVENDA ADD CONSTRAINT PATIPOSVENDA_PK1 PRIMARY KEY (tipoVenda);
CREATE INDEX PATIPOSVENDA_K2 ON PATIPOSVENDA (descricao);

INSERT INTO PATIPOSVENDA (tipoVenda, descricao, ativo, observacoes) VALUES (0, 'SELECIONE', 1, ' ');

COMMIT;

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PATIPOSVENDA', 'Tipos Venda', 1, 31485, 'PA', 'tipoVenda', 'N', 4, 'descricao', 1, ' ', 0, 100001, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTiposVenda', 1, 1, ' '); 

COMMIT;

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, categoriaConfiguracao, categoriaPersonalCampo, categoriaMemoriaSistema, permiteReport, observacoes) values (844, 'Tipos Venda', 1, 90002760, 'PA', 100001, 844, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqTiposVenda', 0, 0, 0, 0, ' ');

COMMIT;

CREATE TABLE MOORCAMENTOS_2204 AS SELECT * FROM MOORCAMENTOS;

ALTER TABLE MOORCAMENTOXITENS DROP CONSTRAINT MOORCAMENTOXITENS_FK1;
ALTER TABLE MOORCAMENTOXRECEITASOCUL DROP CONSTRAINT MOORCAMENTOXRECEITASOCUL_FK1;
ALTER TABLE MOORCAMENTOXPERSPROJETO DROP CONSTRAINT MOORCAMENTOXPERSPROJETO_FK1;
ALTER TABLE MOORCAMENTOXINFOCOMPLENT DROP CONSTRAINT MOORCAMENTOXINFOCOMPLENT_FK1;
ALTER TABLE MOORCAMENTOXETAPAS DROP CONSTRAINT MOORCAMENTOXETAPAS_FK1;
ALTER TABLE MOORCAMENTOXBLOQUEIOSEST DROP CONSTRAINT MOORCAMENTOXBLOQUEIOSEST_FK1;
ALTER TABLE MOORCAMENTOXPAGAMENTOS DROP CONSTRAINT MOORCAMENTOXPAGAMENTOS_FK1;
ALTER TABLE MOORCAMENTOXPROMOCOES DROP CONSTRAINT MOORCAMENTOXPROMOCOES_FK1;
ALTER TABLE MOSEPARACOES DROP CONSTRAINT MOSEPARACOES_FK5;
ALTER TABLE MODOCUMENTOSTRANSFERENCIA DROP CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK9;
ALTER TABLE MODOCUMENTOSTRANSFERENCIA DROP CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK13;
ALTER TABLE MOORCAMENTOXCONFERENCIAS DROP CONSTRAINT MOORCAMENTOXCONFERENCIAS_FK1;
ALTER TABLE MOMOTBLOQXORCAMENTOS DROP CONSTRAINT MOMOTBLOQXORCAMENTOS_FK2;
ALTER TABLE MOEVENTOS DROP CONSTRAINT MOEVENTOS_FK3;

DROP TABLE MOORCAMENTOS;

-- MOORCAMENTOS
CREATE TABLE MOORCAMENTOS
  (
    orcamento                      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    origemDocumento                NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tipoDocumento                  NUMERIC (3,0) DEFAULT 0 NOT NULL,
    idDocumento                    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoVenda                      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    modeloDocumento                NUMERIC (4,0) DEFAULT 0 NOT NULL,
    entradaSaida                   CHAR (1) DEFAULT ' ' NOT NULL,
    finalidadeNota                 CHAR (1) DEFAULT ' ' NOT NULL,
    atualizaCustoMedio             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    atualizaUltimaCompra           NUMERIC (1,0) DEFAULT 0 NOT NULL,
    validoFaturamento              NUMERIC (1,0) DEFAULT 0 NOT NULL,
    usarPrecoAVista                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    sessao                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idTerminalSiTef                VARCHAR (8) DEFAULT ' ' NOT NULL,
    estabelecimentoOriginal        NUMERIC (4,0) DEFAULT 0 NOT NULL,
    estabelecimento                NUMERIC (4,0) DEFAULT 0 NOT NULL,
    enderecoRetiradaEstabeleciment NUMERIC (14,0) DEFAULT 0 NOT NULL,
    indicadorPresencaComprador     CHAR (1) DEFAULT ' ' NOT NULL,
    controlaSeparacaoConferencia   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    dataEmissao                    DATE,
    timezoneEmissao                VARCHAR (6) DEFAULT ' ' NOT NULL,
    dataPreco                      DATE,
    dataValidade                   DATE,
    pessoa                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    autorizadoPessoa               NUMERIC (14,0) DEFAULT 0 NOT NULL,
    enderecoEntregaPessoa          NUMERIC (14,0) DEFAULT 0 NOT NULL,
    dataEntrega                    DATE,
    municipioFatoGerador           NUMERIC (7,0) DEFAULT 0 NOT NULL,
    localDestinoOperacao           CHAR (1) DEFAULT ' ' NOT NULL,
    indicadorConsumidorFinal       CHAR (1) DEFAULT ' ' NOT NULL,
    projeto                        VARCHAR (60) DEFAULT ' ' NOT NULL,
    contratoCompra                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    colaboradorResponsavel         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    tipoServico                    NUMERIC (4,0) DEFAULT 0 NOT NULL,
    solicitado                     VARCHAR (4000) DEFAULT ' ' NOT NULL,
    solucao                        VARCHAR (4000) DEFAULT ' ' NOT NULL,
    comissionadoB                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comissionadoC                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    modalidadeFrete                CHAR (1) DEFAULT ' ' NOT NULL,
    tipoPagamentoFrete             CHAR (1) DEFAULT ' ' NOT NULL,
    transportadora                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    enderecoTransportadora         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    motorista                      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    placa                          VARCHAR (7) DEFAULT ' ' NOT NULL,
    vagao                          VARCHAR (20) DEFAULT ' ' NOT NULL,
    balsa                          VARCHAR (20) DEFAULT ' ' NOT NULL,
    quantidadeVolume               NUMERIC (15,0) DEFAULT 0 NOT NULL,
    especieVolume                  VARCHAR (60) DEFAULT ' ' NOT NULL,
    descricaoMarca                 VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeracaoVolume                VARCHAR (60) DEFAULT ' ' NOT NULL,
    codigoIntegracao               VARCHAR (15) DEFAULT ' ' NOT NULL,
    atendimento                    VARCHAR (15) DEFAULT ' ' NOT NULL,
    prioridadeDocumento            NUMERIC (4,0) DEFAULT 0 NOT NULL,
    etapaOrcamento                 NUMERIC (4,0) DEFAULT 0 NOT NULL,
    ultimoVendedorItem             NUMERIC (14,0) DEFAULT 0 NOT NULL,
    quantidade                     NUMERIC (15,6) DEFAULT 0 NOT NULL,
    pesoLiquido                    NUMERIC (15,6) DEFAULT 0 NOT NULL,
    pesoBruto                      NUMERIC (15,6) DEFAULT 0 NOT NULL,
    valorProdutosBruto             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorProdutos                  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoProdutos          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoProdutos         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorServicosBruto             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorServicos                  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoServicos          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoServicos         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteItem                 NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroItem                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerItem   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasItem    NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteGeral                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroGeral               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoGeral             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasGeral       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerGeral  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasGeral   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    condicaoPagamento              NUMERIC (4,0) DEFAULT 0 NOT NULL,
    contaFinanceira                VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeroParcelas                 NUMERIC (3,0) DEFAULT 0 NOT NULL,
    somaPrazoParcelas              NUMERIC (6,0) DEFAULT 0 NOT NULL,
    valorXPrazoParcelas            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    prazoMedio                     NUMERIC (6,0) DEFAULT 0 NOT NULL,
    prazoMedioPonderado            NUMERIC (6,0) DEFAULT 0 NOT NULL,
    valorBasePagamento             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAVistaMinimo              NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorEntradaMinima             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAVistaEntrada             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorPagamentoBruto            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoPagamento         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasPagamento   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorJurosPagamento            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorPagamentoLiquido          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorTroco                     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteTotal                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroTotal               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoTotal             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasTotal       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerTotal  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasTotal   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    impostosEditados               NUMERIC (1,0) DEFAULT 0 NOT NULL,
    valorImpostosSomaPagamento     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorImpostosDiminuiPagamento  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorLiquidoItem               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    versaoAplicativo               VARCHAR (20) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_PK1 PRIMARY KEY (orcamento);
CREATE UNIQUE INDEX MOORCAMENTOS_K2 ON MOORCAMENTOS (tipoDocumento, idDocumento);
CREATE INDEX MOORCAMENTOS_K3 ON MOORCAMENTOS (tipoDocumento, estabelecimento, etapaOrcamento, dataEmissao DESC, idDocumento DESC);
CREATE INDEX MOORCAMENTOS_K4 ON MOORCAMENTOS (tipoDocumento, etapaOrcamento, dataEmissao DESC, idDocumento DESC);
CREATE INDEX MOORCAMENTOS_K5 ON MOORCAMENTOS (tipoDocumento, estabelecimento, dataEmissao DESC, idDocumento DESC);
CREATE INDEX MOORCAMENTOS_K6 ON MOORCAMENTOS (tipoDocumento, dataEmissao DESC, idDocumento DESC);
CREATE INDEX MOORCAMENTOS_K7 ON MOORCAMENTOS (estabelecimento);
CREATE INDEX MOORCAMENTOS_K8 ON MOORCAMENTOS (pessoa);
CREATE INDEX MOORCAMENTOS_K9 ON MOORCAMENTOS (atendimento);
CREATE INDEX MOORCAMENTOS_K10 ON MOORCAMENTOS (dataEmissao);
CREATE INDEX MOORCAMENTOS_K11 ON MOORCAMENTOS (dataPreco);
CREATE INDEX MOORCAMENTOS_K12 ON MOORCAMENTOS (dataValidade);
CREATE INDEX MOORCAMENTOS_K13 ON MOORCAMENTOS (dataEntrega);
CREATE INDEX MOORCAMENTOS_K14 ON MOORCAMENTOS (etapaOrcamento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK1 FOREIGN KEY (origemDocumento) REFERENCES SIORIGENSDOCUMENTO (origemDocumento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK2 FOREIGN KEY (tipoDocumento) REFERENCES SITIPOSDOCUMENTO (tipoDocumento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK3 FOREIGN KEY (tipoVenda) REFERENCES PATIPOSVENDA (tipoVenda);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK4 FOREIGN KEY (modeloDocumento) REFERENCES PAMODELOSDOCUMENTO (modeloDocumento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK5 FOREIGN KEY (entradaSaida) REFERENCES SIENTRADASAIDA (entradaSaida);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK6 FOREIGN KEY (finalidadeNota) REFERENCES SIFINALIDADESNOTA (finalidadeNota);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK7 FOREIGN KEY (sessao) REFERENCES MOSESSOES (sessao);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK8 FOREIGN KEY (estabelecimentoOriginal) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK9 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK10 FOREIGN KEY (enderecoRetiradaEstabeleciment) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK11 FOREIGN KEY (indicadorPresencaComprador) REFERENCES SIINDICPRESENCACOMPRADOR (indicadorPresencaComprador);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK12 FOREIGN KEY (pessoa) REFERENCES CAPESSOAS (pessoa);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK13 FOREIGN KEY (autorizadoPessoa) REFERENCES CAAUTORIZADOSPESSOA (autorizadoPessoa);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK14 FOREIGN KEY (enderecoEntregaPessoa) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK15 FOREIGN KEY (municipioFatoGerador) REFERENCES SIMUNICIPIOS (municipio);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK16 FOREIGN KEY (localDestinoOperacao) REFERENCES SILOCAISDESTINOOPERACAO (localDestinoOperacao);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK17 FOREIGN KEY (indicadorConsumidorFinal) REFERENCES SIINDICCONSUMIDORFINAL (indicadorConsumidorFinal);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK18 FOREIGN KEY (projeto) REFERENCES PAPROJETOS (projeto);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK19 FOREIGN KEY (colaboradorResponsavel) REFERENCES CACOLABORADORES (colaborador);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK20 FOREIGN KEY (tipoServico) REFERENCES PATIPOSSERVICO (tipoServico);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK21 FOREIGN KEY (comissionadoB) REFERENCES CACOMISSIONADOSB (comissionadoB);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK22 FOREIGN KEY (comissionadoC) REFERENCES CACOMISSIONADOSC (comissionadoC);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK23 FOREIGN KEY (modalidadeFrete) REFERENCES SIMODALIDADESFRETE (modalidadeFrete);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK24 FOREIGN KEY (tipoPagamentoFrete) REFERENCES SITIPOSPAGAMENTOFRETE (tipoPagamentoFrete);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK25 FOREIGN KEY (transportadora) REFERENCES CATRANSPORTADORAS (transportadora);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK26 FOREIGN KEY (enderecoTransportadora) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK27 FOREIGN KEY (motorista) REFERENCES CACOLABORADORES (colaborador);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK28 FOREIGN KEY (placa) REFERENCES CAPLACAS (placa);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK29 FOREIGN KEY (prioridadeDocumento) REFERENCES PAPRIORIDADESDOCUMENTO (prioridadeDocumento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK30 FOREIGN KEY (etapaOrcamento) REFERENCES PAETAPASORCAMENTO (etapaOrcamento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK31 FOREIGN KEY (ultimoVendedorItem) REFERENCES CAVENDEDORES (vendedor);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK32 FOREIGN KEY (condicaoPagamento) REFERENCES PACONDICOESPAGAMENTO (condicaoPagamento);
ALTER TABLE MOORCAMENTOS ADD CONSTRAINT MOORCAMENTOS_FK33 FOREIGN KEY (contaFinanceira) REFERENCES PACONTASFINANCEIRAS (contaFinanceira);

INSERT INTO MOORCAMENTOS (orcamento, origemDocumento, tipoDocumento, idDocumento, tipoVenda, modeloDocumento, entradaSaida, finalidadeNota, atualizaCustoMedio, atualizaUltimaCompra, validoFaturamento, usarPrecoAVista, sessao, idTerminalSiTef, estabelecimentoOriginal, estabelecimento, enderecoRetiradaEstabeleciment, indicadorPresencaComprador, controlaSeparacaoConferencia, dataEmissao, timezoneEmissao, dataPreco, dataValidade, pessoa, autorizadoPessoa, enderecoEntregaPessoa, dataEntrega, municipioFatoGerador, localDestinoOperacao, indicadorConsumidorFinal, projeto, contratoCompra, colaboradorResponsavel, tipoServico, solicitado, solucao, comissionadoB, comissionadoC, modalidadeFrete, tipoPagamentoFrete, transportadora, enderecoTransportadora, motorista, placa, vagao, balsa, quantidadeVolume, especieVolume, descricaoMarca, numeracaoVolume, codigoIntegracao, atendimento, prioridadeDocumento, etapaOrcamento, ultimoVendedorItem, quantidade, pesoLiquido, pesoBruto, valorProdutosBruto, valorProdutos, valorDescontoProdutos, valorAcrescimoProdutos, valorServicosBruto, valorServicos, valorDescontoServicos, valorAcrescimoServicos, valorFreteItem, valorSeguroItem, valorAdicFreteMarinhaMerItem, valorDespesasAduaneirasItem, valorFreteGeral, valorSeguroGeral, valorDescontoGeral, valorOutrasDespesasGeral, valorAdicFreteMarinhaMerGeral, valorDespesasAduaneirasGeral, condicaoPagamento, contaFinanceira, numeroParcelas, somaPrazoParcelas, valorXPrazoParcelas, prazoMedio, prazoMedioPonderado, valorBasePagamento, valorAVistaMinimo, valorEntradaMinima, valorAVistaEntrada, valorPagamentoBruto, valorDescontoPagamento, valorOutrasDespesasPagamento, valorJurosPagamento, valorPagamentoLiquido, valorTroco, valorFreteTotal, valorSeguroTotal, valorDescontoTotal, valorOutrasDespesasTotal, valorAdicFreteMarinhaMerTotal, valorDespesasAduaneirasTotal, impostosEditados, valorImpostosSomaPagamento, valorImpostosDiminuiPagamento, valorLiquidoItem, versaoAplicativo) VALUES (0, 0, 0, 0, 0, 0, ' ', ' ', 0, 0, 0, 0, 0, ' ', 0, 0, 0, ' ', 0, NULL, ' ', NULL, NULL, 0, 0, 0, NULL, 0, ' ', ' ', ' ', 0, 0, 0, ' ', ' ', 0, 0, ' ', ' ', 0, 0, 0, ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ');
INSERT INTO MOORCAMENTOS (orcamento, origemDocumento, tipoDocumento, idDocumento, tipoVenda, modeloDocumento, entradaSaida, finalidadeNota, atualizaCustoMedio, atualizaUltimaCompra, validoFaturamento, usarPrecoAVista, sessao, idTerminalSiTef, estabelecimentoOriginal, estabelecimento, enderecoRetiradaEstabeleciment, indicadorPresencaComprador, controlaSeparacaoConferencia, dataEmissao, timezoneEmissao, dataPreco, dataValidade, pessoa, autorizadoPessoa, enderecoEntregaPessoa, dataEntrega, municipioFatoGerador, localDestinoOperacao, indicadorConsumidorFinal, projeto, contratoCompra, colaboradorResponsavel, tipoServico, solicitado, solucao, comissionadoB, comissionadoC, modalidadeFrete, tipoPagamentoFrete, transportadora, enderecoTransportadora, motorista, placa, vagao, balsa, quantidadeVolume, especieVolume, descricaoMarca, numeracaoVolume, codigoIntegracao, atendimento, prioridadeDocumento, etapaOrcamento, ultimoVendedorItem, quantidade, pesoLiquido, pesoBruto, valorProdutosBruto, valorProdutos, valorDescontoProdutos, valorAcrescimoProdutos, valorServicosBruto, valorServicos, valorDescontoServicos, valorAcrescimoServicos, valorFreteItem, valorSeguroItem, valorAdicFreteMarinhaMerItem, valorDespesasAduaneirasItem, valorFreteGeral, valorSeguroGeral, valorDescontoGeral, valorOutrasDespesasGeral, valorAdicFreteMarinhaMerGeral, valorDespesasAduaneirasGeral, condicaoPagamento, contaFinanceira, numeroParcelas, somaPrazoParcelas, valorXPrazoParcelas, prazoMedio, prazoMedioPonderado, valorBasePagamento, valorAVistaMinimo, valorEntradaMinima, valorAVistaEntrada, valorPagamentoBruto, valorDescontoPagamento, valorOutrasDespesasPagamento, valorJurosPagamento, valorPagamentoLiquido, valorTroco, valorFreteTotal, valorSeguroTotal, valorDescontoTotal, valorOutrasDespesasTotal, valorAdicFreteMarinhaMerTotal, valorDespesasAduaneirasTotal, impostosEditados, valorImpostosSomaPagamento, valorImpostosDiminuiPagamento, valorLiquidoItem, versaoAplicativo) SELECT a.orcamento, a.origemDocumento, a.tipoDocumento, a.idDocumento, 0, a.modeloDocumento, a.entradaSaida, a.finalidadeNota, a.atualizaCustoMedio, a.atualizaUltimaCompra, a.validoFaturamento, a.usarPrecoAVista, a.sessao, a.idTerminalSiTef, a.estabelecimentoOriginal, a.estabelecimento, a.enderecoRetiradaEstabeleciment, a.indicadorPresencaComprador, a.controlaSeparacaoConferencia, a.dataEmissao, a.timezoneEmissao, a.dataPreco, a.dataValidade, a.pessoa, a.autorizadoPessoa, a.enderecoEntregaPessoa, a.dataEntrega, a.municipioFatoGerador, a.localDestinoOperacao, a.indicadorConsumidorFinal, a.projeto, a.contratoCompra, a.colaboradorResponsavel, a.tipoServico, a.solicitado, a.solucao, a.comissionadoB, a.comissionadoC, a.modalidadeFrete, a.tipoPagamentoFrete, a.transportadora, CASE WHEN a.transportadora = 0 THEN 0 ELSE COALESCE((SELECT MIN(b.enderecoPessoa) FROM CAENDERECOSPESSOA b WHERE b.pessoa = transportadora AND b.ativo = 1 AND b.principal = 1),0) END, a.motorista, a.placa, a.vagao, a.balsa, a.quantidadeVolume, a.especieVolume, a.descricaoMarca, a.numeracaoVolume, a.codigoIntegracao, a.atendimento, a.prioridadeDocumento, a.etapaOrcamento, a.ultimoVendedorItem, a.quantidade, a.pesoLiquido, a.pesoBruto, a.valorProdutosBruto, a.valorProdutos, a.valorDescontoProdutos, a.valorAcrescimoProdutos, a.valorServicosBruto, a.valorServicos, a.valorDescontoServicos, a.valorAcrescimoServicos, a.valorFreteItem, a.valorSeguroItem, a.valorAdicFreteMarinhaMerItem, a.valorDespesasAduaneirasItem, a.valorFreteGeral, a.valorSeguroGeral, a.valorDescontoGeral, a.valorOutrasDespesasGeral, a.valorAdicFreteMarinhaMerGeral, a.valorDespesasAduaneirasGeral, a.condicaoPagamento, a.contaFinanceira, a.numeroParcelas, a.somaPrazoParcelas, a.valorXPrazoParcelas, a.prazoMedio, a.prazoMedioPonderado, a.valorBasePagamento, a.valorAVistaMinimo, a.valorEntradaMinima, a.valorAVistaEntrada, a.valorPagamentoBruto, a.valorDescontoPagamento, a.valorOutrasDespesasPagamento, a.valorJurosPagamento, a.valorPagamentoLiquido, a.valorTroco, a.valorFreteTotal, a.valorSeguroTotal, a.valorDescontoTotal, a.valorOutrasDespesasTotal, a.valorAdicFreteMarinhaMerTotal, a.valorDespesasAduaneirasTotal, a.impostosEditados, a.valorImpostosSomaPagamento, a.valorImpostosDiminuiPagamento, a.valorLiquidoItem, a.versaoAplicativo FROM MOORCAMENTOS_2204 a WHERE a.orcamento <> 0;

COMMIT;

ALTER TABLE MOORCAMENTOXITENS ADD CONSTRAINT MOORCAMENTOXITENS_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXRECEITASOCUL ADD CONSTRAINT MOORCAMENTOXRECEITASOCUL_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXPERSPROJETO ADD CONSTRAINT MOORCAMENTOXPERSPROJETO_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXINFOCOMPLENT ADD CONSTRAINT MOORCAMENTOXINFOCOMPLENT_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXETAPAS ADD CONSTRAINT MOORCAMENTOXETAPAS_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXBLOQUEIOSEST ADD CONSTRAINT MOORCAMENTOXBLOQUEIOSEST_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXPAGAMENTOS ADD CONSTRAINT MOORCAMENTOXPAGAMENTOS_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXPROMOCOES ADD CONSTRAINT MOORCAMENTOXPROMOCOES_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOSEPARACOES ADD CONSTRAINT MOSEPARACOES_FK5 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MODOCUMENTOSTRANSFERENCIA ADD CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK9 FOREIGN KEY (orcamentoSaida) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MODOCUMENTOSTRANSFERENCIA ADD CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK13 FOREIGN KEY (orcamentoEntrada) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOORCAMENTOXCONFERENCIAS ADD CONSTRAINT MOORCAMENTOXCONFERENCIAS_FK1 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOMOTBLOQXORCAMENTOS ADD CONSTRAINT MOMOTBLOQXORCAMENTOS_FK2 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);
ALTER TABLE MOEVENTOS ADD CONSTRAINT MOEVENTOS_FK3 FOREIGN KEY (orcamento) REFERENCES MOORCAMENTOS (orcamento);

CREATE TABLE MOPREDOCUMENTOS_2204 AS SELECT * FROM MOPREDOCUMENTOS;

ALTER TABLE MOPREDOCUMXPERSPROJETO DROP CONSTRAINT MOPREDOCUMXPERSPROJETO_FK1;
ALTER TABLE MOPREDOCUMXITENS DROP CONSTRAINT MOPREDOCUMXITENS_FK1;
ALTER TABLE MOPREDOCUMXPAGAMENTOS DROP CONSTRAINT MOPREDOCUMXPAGAMENTOS_FK1;
ALTER TABLE MOPREDOCUMXINFOCOMPLENT DROP CONSTRAINT MOPREDOCUMXINFOCOMPLENT_FK1;
ALTER TABLE MOPREDOCUMXPROMOCOES DROP CONSTRAINT MOPREDOCUMXPROMOCOES_FK1;
ALTER TABLE MOPREDOCUMXSTATUS DROP CONSTRAINT MOPREDOCUMXSTATUS_FK1;
ALTER TABLE MOPREDOCUMXBLOQUEIOSEST DROP CONSTRAINT MOPREDOCUMXBLOQUEIOSEST_FK1;
ALTER TABLE MOPREDOCUMXCREDITO DROP CONSTRAINT MOPREDOCUMXCREDITO_FK1;
ALTER TABLE MOVALEDESCXPREDOCUM DROP CONSTRAINT MOVALEDESCXPREDOCUM_FK2;
ALTER TABLE MOFINANCEIROXCOMISSOES DROP CONSTRAINT MOFINANCEIROXCOMISSOES_FK2;
ALTER TABLE MOFINANCEIROXDOCUMENTOS DROP CONSTRAINT MOFINANCEIROXDOCUMENTOS_FK2;
ALTER TABLE MOBAIXAFINANCXPREDOCUM DROP CONSTRAINT MOBAIXAFINANCXPREDOCUM_FK2;
ALTER TABLE MOPREDOCUMXRESGATEPONTOS DROP CONSTRAINT MOPREDOCUMXRESGATEPONTOS_FK1;
ALTER TABLE MOPREVFINANCXFINANCEIRO DROP CONSTRAINT MOPREVFINANCXFINANCEIRO_FK3;
ALTER TABLE MOSEPARACOES DROP CONSTRAINT MOSEPARACOES_FK6;
ALTER TABLE MODOCUMENTOSTRANSFERENCIA DROP CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK10;
ALTER TABLE MODOCUMENTOSTRANSFERENCIA DROP CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK14;
ALTER TABLE MOPREDOCUMXCONFERENCIAS DROP CONSTRAINT MOPREDOCUMXCONFERENCIAS_FK1;
ALTER TABLE MOMOTBLOQXPREDOCUMENTOS DROP CONSTRAINT MOMOTBLOQXPREDOCUMENTOS_FK2;
ALTER TABLE MOEVENTOS DROP CONSTRAINT MOEVENTOS_FK4;

DROP TABLE MOPREDOCUMENTOS;

-- MOPREDOCUMENTOS
CREATE TABLE MOPREDOCUMENTOS
  (
    preDocumento                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    origemDocumento                NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tipoDocumento                  NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tipoVenda                      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    modeloDocumento                NUMERIC (4,0) DEFAULT 0 NOT NULL,
    entradaSaida                   CHAR (1) DEFAULT ' ' NOT NULL,
    devolucaoAnulacaoRetorno       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    finalidadeNota                 CHAR (1) DEFAULT ' ' NOT NULL,
    atualizaCustoMedio             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    atualizaUltimaCompra           NUMERIC (1,0) DEFAULT 0 NOT NULL,
    validoFaturamento              NUMERIC (1,0) DEFAULT 0 NOT NULL,
    usarPrecoAVista                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    sessao                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    sessaoCaixa                    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    fatoContabil                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idTerminalSiTef                VARCHAR (8) DEFAULT ' ' NOT NULL,
    estabelecimentoOriginal        NUMERIC (4,0) DEFAULT 0 NOT NULL,
    estabelecimento                NUMERIC (4,0) DEFAULT 0 NOT NULL,
    enderecoRetiradaEstabeleciment NUMERIC (14,0) DEFAULT 0 NOT NULL,
    indicadorPresencaComprador     CHAR (1) DEFAULT ' ' NOT NULL,
    controlaSeparacaoConferencia   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    serieFiscal                    VARCHAR (4) DEFAULT ' ' NOT NULL,
    subserieFiscal                 NUMERIC (3,0) DEFAULT 0 NOT NULL,
    documentoFiscal                NUMERIC (9,0) DEFAULT 0 NOT NULL,
    dataEmissao                    DATE,
    timezoneEmissao                VARCHAR (6) DEFAULT ' ' NOT NULL,
    dataEntradaSaida               DATE,
    pessoa                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    indicadorPessoa                CHAR (1) DEFAULT ' ' NOT NULL,
    indicadorDocumentoPessoa       CHAR (1) DEFAULT ' ' NOT NULL,
    cnpjCpfIdEstrangeiro           VARCHAR (20) DEFAULT ' ' NOT NULL,
    nomeRazaoSocial                VARCHAR (60) DEFAULT ' ' NOT NULL,
    fone                           VARCHAR (14) DEFAULT ' ' NOT NULL,
    indicadorFone                  NUMERIC (3,0) DEFAULT 0 NOT NULL,
    operadoraTelefonia             NUMERIC (3,0) DEFAULT 0 NOT NULL,
    autorizadoPessoa               NUMERIC (14,0) DEFAULT 0 NOT NULL,
    enderecoEntregaPessoa          NUMERIC (14,0) DEFAULT 0 NOT NULL,
    municipioFatoGerador           NUMERIC (7,0) DEFAULT 0 NOT NULL,
    localDestinoOperacao           CHAR (1) DEFAULT ' ' NOT NULL,
    indicadorConsumidorFinal       CHAR (1) DEFAULT ' ' NOT NULL,
    projeto                        VARCHAR (60) DEFAULT ' ' NOT NULL,
    contratoCompra                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comissionadoB                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comissionadoC                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    modalidadeFrete                CHAR (1) DEFAULT ' ' NOT NULL,
    tipoPagamentoFrete             CHAR (1) DEFAULT ' ' NOT NULL,
    transportadora                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    enderecoTransportadora         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    motorista                      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    placa                          VARCHAR (7) DEFAULT ' ' NOT NULL,
    vagao                          VARCHAR (20) DEFAULT ' ' NOT NULL,
    balsa                          VARCHAR (20) DEFAULT ' ' NOT NULL,
    quantidadeVolume               NUMERIC (15,0) DEFAULT 0 NOT NULL,
    especieVolume                  VARCHAR (60) DEFAULT ' ' NOT NULL,
    descricaoMarca                 VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeracaoVolume                VARCHAR (60) DEFAULT ' ' NOT NULL,
    codigoIntegracao               VARCHAR (15) DEFAULT ' ' NOT NULL,
    atendimento                    VARCHAR (15) DEFAULT ' ' NOT NULL,
    statusPreDocumento             CHAR (1) DEFAULT ' ' NOT NULL,
    ultimoVendedorItem             NUMERIC (14,0) DEFAULT 0 NOT NULL,
    quantidade                     NUMERIC (15,6) DEFAULT 0 NOT NULL,
    pesoLiquido                    NUMERIC (15,6) DEFAULT 0 NOT NULL,
    pesoBruto                      NUMERIC (15,6) DEFAULT 0 NOT NULL,
    valorProdutosBruto             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorProdutos                  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoProdutos          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoProdutos         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorServicosBruto             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorServicos                  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoServicos          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoServicos         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteItem                 NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroItem                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerItem   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasItem    NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteGeral                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroGeral               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoGeral             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasGeral       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerGeral  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasGeral   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    condicaoPagamento              NUMERIC (4,0) DEFAULT 0 NOT NULL,
    contaFinanceira                VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeroParcelas                 NUMERIC (3,0) DEFAULT 0 NOT NULL,
    somaPrazoParcelas              NUMERIC (6,0) DEFAULT 0 NOT NULL,
    valorXPrazoParcelas            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    prazoMedio                     NUMERIC (6,0) DEFAULT 0 NOT NULL,
    prazoMedioPonderado            NUMERIC (6,0) DEFAULT 0 NOT NULL,
    valorBasePagamento             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAVistaMinimo              NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorEntradaMinima             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAVistaEntrada             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorPagamentoBruto            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoPagamento         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasPagamento   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorJurosPagamento            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorPagamentoLiquido          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorTroco                     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteTotal                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroTotal               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoTotal             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasTotal       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerTotal  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasTotal   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    impostosEditados               NUMERIC (1,0) DEFAULT 0 NOT NULL,
    valorImpostosSomaPagamento     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorImpostosDiminuiPagamento  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorLiquidoItem               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoCustoOpItem       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoCustoOpGeral      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoCustoOpTotal      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoCustoOpItem      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoCustoOpGeral     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoCustoOpTotal     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorCustoOperacao             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorCMV                       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    quantidadeExtemporanea         NUMERIC (15,6) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempSubtotal   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempItem       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempGeral      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempTotal      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    versaoAplicativo               VARCHAR (20) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_PK1 PRIMARY KEY (preDocumento);
CREATE INDEX MOPREDOCUMENTOS_K2 ON MOPREDOCUMENTOS (estabelecimento, idTerminalSiTef, entradaSaida, statusPreDocumento);
CREATE INDEX MOPREDOCUMENTOS_K3 ON MOPREDOCUMENTOS (tipoDocumento, estabelecimento, statusPreDocumento, dataEmissao DESC, preDocumento DESC);
CREATE INDEX MOPREDOCUMENTOS_K4 ON MOPREDOCUMENTOS (tipoDocumento, statusPreDocumento, dataEmissao DESC, preDocumento DESC);
CREATE INDEX MOPREDOCUMENTOS_K5 ON MOPREDOCUMENTOS (tipoDocumento, estabelecimento, dataEmissao DESC, preDocumento DESC);
CREATE INDEX MOPREDOCUMENTOS_K6 ON MOPREDOCUMENTOS (tipoDocumento, dataEmissao DESC, preDocumento DESC);
CREATE INDEX MOPREDOCUMENTOS_K7 ON MOPREDOCUMENTOS (estabelecimento);
CREATE INDEX MOPREDOCUMENTOS_K8 ON MOPREDOCUMENTOS (pessoa);
CREATE INDEX MOPREDOCUMENTOS_K9 ON MOPREDOCUMENTOS (atendimento);
CREATE INDEX MOPREDOCUMENTOS_K10 ON MOPREDOCUMENTOS (dataEmissao);
CREATE INDEX MOPREDOCUMENTOS_K11 ON MOPREDOCUMENTOS (dataEntradaSaida);
CREATE INDEX MOPREDOCUMENTOS_K12 ON MOPREDOCUMENTOS (pessoa, entradaSaida, devolucaoAnulacaoRetorno, statusPreDocumento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK1 FOREIGN KEY (origemDocumento) REFERENCES SIORIGENSDOCUMENTO (origemDocumento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK2 FOREIGN KEY (tipoDocumento) REFERENCES SITIPOSDOCUMENTO (tipoDocumento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK3 FOREIGN KEY (tipoVenda) REFERENCES PATIPOSVENDA (tipoVenda);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK4 FOREIGN KEY (modeloDocumento) REFERENCES PAMODELOSDOCUMENTO (modeloDocumento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK5 FOREIGN KEY (entradaSaida) REFERENCES SIENTRADASAIDA (entradaSaida);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK6 FOREIGN KEY (finalidadeNota) REFERENCES SIFINALIDADESNOTA (finalidadeNota);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK7 FOREIGN KEY (sessao) REFERENCES MOSESSOES (sessao);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK8 FOREIGN KEY (sessaoCaixa) REFERENCES MOSESSOESCAIXA (sessaoCaixa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK9 FOREIGN KEY (fatoContabil) REFERENCES MOFATOSCONTABEIS (fatoContabil);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK10 FOREIGN KEY (estabelecimentoOriginal) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK11 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK12 FOREIGN KEY (enderecoRetiradaEstabeleciment) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK13 FOREIGN KEY (indicadorPresencaComprador) REFERENCES SIINDICPRESENCACOMPRADOR (indicadorPresencaComprador);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK14 FOREIGN KEY (pessoa) REFERENCES CAPESSOAS (pessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK15 FOREIGN KEY (indicadorPessoa) REFERENCES SIINDICPESSOA (indicadorPessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK16 FOREIGN KEY (indicadorDocumentoPessoa) REFERENCES SIINDICDOCUMENTOPESSOA (indicadorDocumentoPessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK17 FOREIGN KEY (indicadorFone) REFERENCES SIINDICFONE (indicadorFone);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK18 FOREIGN KEY (operadoraTelefonia) REFERENCES SIOPERADORASTELEFONIA (operadoraTelefonia);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK19 FOREIGN KEY (autorizadoPessoa) REFERENCES CAAUTORIZADOSPESSOA (autorizadoPessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK20 FOREIGN KEY (enderecoEntregaPessoa) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK21 FOREIGN KEY (municipioFatoGerador) REFERENCES SIMUNICIPIOS (municipio);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK22 FOREIGN KEY (localDestinoOperacao) REFERENCES SILOCAISDESTINOOPERACAO (localDestinoOperacao);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK23 FOREIGN KEY (indicadorConsumidorFinal) REFERENCES SIINDICCONSUMIDORFINAL (indicadorConsumidorFinal);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK24 FOREIGN KEY (projeto) REFERENCES PAPROJETOS (projeto);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK25 FOREIGN KEY (comissionadoB) REFERENCES CACOMISSIONADOSB (comissionadoB);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK26 FOREIGN KEY (comissionadoC) REFERENCES CACOMISSIONADOSC (comissionadoC);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK27 FOREIGN KEY (modalidadeFrete) REFERENCES SIMODALIDADESFRETE (modalidadeFrete);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK28 FOREIGN KEY (tipoPagamentoFrete) REFERENCES SITIPOSPAGAMENTOFRETE (tipoPagamentoFrete);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK29 FOREIGN KEY (transportadora) REFERENCES CATRANSPORTADORAS (transportadora);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK30 FOREIGN KEY (enderecoTransportadora) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK31 FOREIGN KEY (motorista) REFERENCES CACOLABORADORES (colaborador);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK32 FOREIGN KEY (placa) REFERENCES CAPLACAS (placa);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK33 FOREIGN KEY (statusPreDocumento) REFERENCES SISTATUSPREDOCUMENTO (statusPreDocumento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK34 FOREIGN KEY (ultimoVendedorItem) REFERENCES CAVENDEDORES (vendedor);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK35 FOREIGN KEY (condicaoPagamento) REFERENCES PACONDICOESPAGAMENTO (condicaoPagamento);
ALTER TABLE MOPREDOCUMENTOS ADD CONSTRAINT MOPREDOCUMENTOS_FK36 FOREIGN KEY (contaFinanceira) REFERENCES PACONTASFINANCEIRAS (contaFinanceira);

INSERT INTO MOPREDOCUMENTOS (preDocumento, origemDocumento, tipoDocumento, tipoVenda, modeloDocumento, entradaSaida, devolucaoAnulacaoRetorno, finalidadeNota, atualizaCustoMedio, atualizaUltimaCompra, validoFaturamento, usarPrecoAVista, sessao, sessaoCaixa, fatoContabil, idTerminalSiTef, estabelecimentoOriginal, estabelecimento, enderecoRetiradaEstabeleciment, indicadorPresencaComprador, controlaSeparacaoConferencia, serieFiscal, subserieFiscal, documentoFiscal, dataEmissao, timezoneEmissao, dataEntradaSaida, pessoa, indicadorPessoa, indicadorDocumentoPessoa, cnpjCpfIdEstrangeiro, nomeRazaoSocial, fone, indicadorFone, operadoraTelefonia, autorizadoPessoa, enderecoEntregaPessoa, municipioFatoGerador, localDestinoOperacao, indicadorConsumidorFinal, projeto, contratoCompra, comissionadoB, comissionadoC, modalidadeFrete, tipoPagamentoFrete, transportadora, enderecoTransportadora, motorista, placa, vagao, balsa, quantidadeVolume, especieVolume, descricaoMarca, numeracaoVolume, codigoIntegracao, atendimento, statusPreDocumento, ultimoVendedorItem, quantidade, pesoLiquido, pesoBruto, valorProdutosBruto, valorProdutos, valorDescontoProdutos, valorAcrescimoProdutos, valorServicosBruto, valorServicos, valorDescontoServicos, valorAcrescimoServicos, valorFreteItem, valorSeguroItem, valorAdicFreteMarinhaMerItem, valorDespesasAduaneirasItem, valorFreteGeral, valorSeguroGeral, valorDescontoGeral, valorOutrasDespesasGeral, valorAdicFreteMarinhaMerGeral, valorDespesasAduaneirasGeral, condicaoPagamento, contaFinanceira, numeroParcelas, somaPrazoParcelas, valorXPrazoParcelas, prazoMedio, prazoMedioPonderado, valorBasePagamento, valorAVistaMinimo, valorEntradaMinima, valorAVistaEntrada, valorPagamentoBruto, valorDescontoPagamento, valorOutrasDespesasPagamento, valorJurosPagamento, valorPagamentoLiquido, valorTroco, valorFreteTotal, valorSeguroTotal, valorDescontoTotal, valorOutrasDespesasTotal, valorAdicFreteMarinhaMerTotal, valorDespesasAduaneirasTotal, impostosEditados, valorImpostosSomaPagamento, valorImpostosDiminuiPagamento, valorLiquidoItem, valorDescontoCustoOpItem, valorDescontoCustoOpGeral, valorDescontoCustoOpTotal, valorAcrescimoCustoOpItem, valorAcrescimoCustoOpGeral, valorAcrescimoCustoOpTotal, valorCustoOperacao, valorCMV, quantidadeExtemporanea, valorAcrescimoExtempSubtotal, valorAcrescimoExtempItem, valorAcrescimoExtempGeral, valorAcrescimoExtempTotal, versaoAplicativo) VALUES (0, 0, 0, 0, 0, ' ', 0, ' ', 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, ' ', 0, ' ', 0, 0, NULL, ' ', NULL, 0, ' ', ' ', ' ', ' ', ' ', 0, 0, 0, 0, 0, ' ', ' ', ' ', 0, 0, 0, ' ', ' ', 0, 0, 0, ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ');
INSERT INTO MOPREDOCUMENTOS (preDocumento, origemDocumento, tipoDocumento, tipoVenda, modeloDocumento, entradaSaida, devolucaoAnulacaoRetorno, finalidadeNota, atualizaCustoMedio, atualizaUltimaCompra, validoFaturamento, usarPrecoAVista, sessao, sessaoCaixa, fatoContabil, idTerminalSiTef, estabelecimentoOriginal, estabelecimento, enderecoRetiradaEstabeleciment, indicadorPresencaComprador, controlaSeparacaoConferencia, serieFiscal, subserieFiscal, documentoFiscal, dataEmissao, timezoneEmissao, dataEntradaSaida, pessoa, indicadorPessoa, indicadorDocumentoPessoa, cnpjCpfIdEstrangeiro, nomeRazaoSocial, fone, indicadorFone, operadoraTelefonia, autorizadoPessoa, enderecoEntregaPessoa, municipioFatoGerador, localDestinoOperacao, indicadorConsumidorFinal, projeto, contratoCompra, comissionadoB, comissionadoC, modalidadeFrete, tipoPagamentoFrete, transportadora, enderecoTransportadora, motorista, placa, vagao, balsa, quantidadeVolume, especieVolume, descricaoMarca, numeracaoVolume, codigoIntegracao, atendimento, statusPreDocumento, ultimoVendedorItem, quantidade, pesoLiquido, pesoBruto, valorProdutosBruto, valorProdutos, valorDescontoProdutos, valorAcrescimoProdutos, valorServicosBruto, valorServicos, valorDescontoServicos, valorAcrescimoServicos, valorFreteItem, valorSeguroItem, valorAdicFreteMarinhaMerItem, valorDespesasAduaneirasItem, valorFreteGeral, valorSeguroGeral, valorDescontoGeral, valorOutrasDespesasGeral, valorAdicFreteMarinhaMerGeral, valorDespesasAduaneirasGeral, condicaoPagamento, contaFinanceira, numeroParcelas, somaPrazoParcelas, valorXPrazoParcelas, prazoMedio, prazoMedioPonderado, valorBasePagamento, valorAVistaMinimo, valorEntradaMinima, valorAVistaEntrada, valorPagamentoBruto, valorDescontoPagamento, valorOutrasDespesasPagamento, valorJurosPagamento, valorPagamentoLiquido, valorTroco, valorFreteTotal, valorSeguroTotal, valorDescontoTotal, valorOutrasDespesasTotal, valorAdicFreteMarinhaMerTotal, valorDespesasAduaneirasTotal, impostosEditados, valorImpostosSomaPagamento, valorImpostosDiminuiPagamento, valorLiquidoItem, valorDescontoCustoOpItem, valorDescontoCustoOpGeral, valorDescontoCustoOpTotal, valorAcrescimoCustoOpItem, valorAcrescimoCustoOpGeral, valorAcrescimoCustoOpTotal, valorCustoOperacao, valorCMV, quantidadeExtemporanea, valorAcrescimoExtempSubtotal, valorAcrescimoExtempItem, valorAcrescimoExtempGeral, valorAcrescimoExtempTotal, versaoAplicativo) SELECT a.preDocumento, a.origemDocumento, a.tipoDocumento, 0, a.modeloDocumento, a.entradaSaida, a.devolucaoAnulacaoRetorno, a.finalidadeNota, a.atualizaCustoMedio, a.atualizaUltimaCompra, a.validoFaturamento, a.usarPrecoAVista, a.sessao, a.sessaoCaixa, a.fatoContabil, a.idTerminalSiTef, a.estabelecimentoOriginal, a.estabelecimento, a.enderecoRetiradaEstabeleciment, a.indicadorPresencaComprador, a.controlaSeparacaoConferencia, a.serieFiscal, a.subserieFiscal, a.documentoFiscal, a.dataEmissao, a.timezoneEmissao, a.dataEntradaSaida, a.pessoa, a.indicadorPessoa, a.indicadorDocumentoPessoa, a.cnpjCpfIdEstrangeiro, a.nomeRazaoSocial, a.fone, a.indicadorFone, a.operadoraTelefonia, a.autorizadoPessoa, a.enderecoEntregaPessoa, a.municipioFatoGerador, a.localDestinoOperacao, a.indicadorConsumidorFinal, a.projeto, a.contratoCompra, a.comissionadoB, a.comissionadoC, a.modalidadeFrete, a.tipoPagamentoFrete, a.transportadora, CASE WHEN a.transportadora = 0 THEN 0 ELSE COALESCE((SELECT MIN(b.enderecoPessoa) FROM CAENDERECOSPESSOA b WHERE b.pessoa = transportadora AND b.ativo = 1 AND b.principal = 1),0) END, a.motorista, a.placa, a.vagao, a.balsa, a.quantidadeVolume, a.especieVolume, a.descricaoMarca, a.numeracaoVolume, a.codigoIntegracao, a.atendimento, a.statusPreDocumento, a.ultimoVendedorItem, a.quantidade, a.pesoLiquido, a.pesoBruto, a.valorProdutosBruto, a.valorProdutos, a.valorDescontoProdutos, a.valorAcrescimoProdutos, a.valorServicosBruto, a.valorServicos, a.valorDescontoServicos, a.valorAcrescimoServicos, a.valorFreteItem, a.valorSeguroItem, a.valorAdicFreteMarinhaMerItem, a.valorDespesasAduaneirasItem, a.valorFreteGeral, a.valorSeguroGeral, a.valorDescontoGeral, a.valorOutrasDespesasGeral, a.valorAdicFreteMarinhaMerGeral, a.valorDespesasAduaneirasGeral, a.condicaoPagamento, a.contaFinanceira, a.numeroParcelas, a.somaPrazoParcelas, a.valorXPrazoParcelas, a.prazoMedio, a.prazoMedioPonderado, a.valorBasePagamento, a.valorAVistaMinimo, a.valorEntradaMinima, a.valorAVistaEntrada, a.valorPagamentoBruto, a.valorDescontoPagamento, a.valorOutrasDespesasPagamento, a.valorJurosPagamento, a.valorPagamentoLiquido, a.valorTroco, a.valorFreteTotal, a.valorSeguroTotal, a.valorDescontoTotal, a.valorOutrasDespesasTotal, a.valorAdicFreteMarinhaMerTotal, a.valorDespesasAduaneirasTotal, a.impostosEditados, a.valorImpostosSomaPagamento, a.valorImpostosDiminuiPagamento, a.valorLiquidoItem, a.valorDescontoCustoOpItem, a.valorDescontoCustoOpGeral, a.valorDescontoCustoOpTotal, a.valorAcrescimoCustoOpItem, a.valorAcrescimoCustoOpGeral, a.valorAcrescimoCustoOpTotal, a.valorCustoOperacao, a.valorCMV, a.quantidadeExtemporanea, a.valorAcrescimoExtempSubtotal, a.valorAcrescimoExtempItem, a.valorAcrescimoExtempGeral, a.valorAcrescimoExtempTotal, a.versaoAplicativo FROM MOPREDOCUMENTOS_2204 a WHERE a.preDocumento <> 0;

COMMIT;

ALTER TABLE MOPREDOCUMXPERSPROJETO ADD CONSTRAINT MOPREDOCUMXPERSPROJETO_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXITENS ADD CONSTRAINT MOPREDOCUMXITENS_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXPAGAMENTOS ADD CONSTRAINT MOPREDOCUMXPAGAMENTOS_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXINFOCOMPLENT ADD CONSTRAINT MOPREDOCUMXINFOCOMPLENT_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXPROMOCOES ADD CONSTRAINT MOPREDOCUMXPROMOCOES_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXSTATUS ADD CONSTRAINT MOPREDOCUMXSTATUS_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXBLOQUEIOSEST ADD CONSTRAINT MOPREDOCUMXBLOQUEIOSEST_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXCREDITO ADD CONSTRAINT MOPREDOCUMXCREDITO_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOVALEDESCXPREDOCUM ADD CONSTRAINT MOVALEDESCXPREDOCUM_FK2 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOFINANCEIROXCOMISSOES ADD CONSTRAINT MOFINANCEIROXCOMISSOES_FK2 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOFINANCEIROXDOCUMENTOS ADD CONSTRAINT MOFINANCEIROXDOCUMENTOS_FK2 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOBAIXAFINANCXPREDOCUM ADD CONSTRAINT MOBAIXAFINANCXPREDOCUM_FK2 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXRESGATEPONTOS ADD CONSTRAINT MOPREDOCUMXRESGATEPONTOS_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREVFINANCXFINANCEIRO ADD CONSTRAINT MOPREVFINANCXFINANCEIRO_FK3 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOSEPARACOES ADD CONSTRAINT MOSEPARACOES_FK6 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MODOCUMENTOSTRANSFERENCIA ADD CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK10 FOREIGN KEY (preDocumentoSaida) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MODOCUMENTOSTRANSFERENCIA ADD CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK14 FOREIGN KEY (preDocumentoEntrada) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOPREDOCUMXCONFERENCIAS ADD CONSTRAINT MOPREDOCUMXCONFERENCIAS_FK1 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOMOTBLOQXPREDOCUMENTOS ADD CONSTRAINT MOMOTBLOQXPREDOCUMENTOS_FK2 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);
ALTER TABLE MOEVENTOS ADD CONSTRAINT MOEVENTOS_FK4 FOREIGN KEY (preDocumento) REFERENCES MOPREDOCUMENTOS (preDocumento);

CREATE TABLE MODOCUMENTOSFISCAIS_2204 AS SELECT * FROM MODOCUMENTOSFISCAIS;

ALTER TABLE MODOCFISCALXPERSPROJETO DROP CONSTRAINT MODOCFISCALXPERSPROJETO_FK1;
ALTER TABLE MODOCFISCALXNFREF DROP CONSTRAINT MODOCFISCALXNFREF_FK1;
ALTER TABLE MODOCFISCALXITENS DROP CONSTRAINT MODOCFISCALXITENS_FK1;
ALTER TABLE MODOCFISCALXPAGAMENTOS DROP CONSTRAINT MODOCFISCALXPAGAMENTOS_FK1;
ALTER TABLE MODOCFISCALXLACRES DROP CONSTRAINT MODOCFISCALXLACRES_FK1;
ALTER TABLE MODOCFISCALXDECLARACAOIMP DROP CONSTRAINT MODOCFISCALXDECLARACAOIMP_FK1;
ALTER TABLE MODOCFISCALXINFOCOMPLEMEN DROP CONSTRAINT MODOCFISCALXINFOCOMPLEMEN_FK1;
ALTER TABLE MODOCFISCALXPROMOCOES DROP CONSTRAINT MODOCFISCALXPROMOCOES_FK1;
ALTER TABLE MODOCFISCALXSITUACOES DROP CONSTRAINT MODOCFISCALXSITUACOES_FK1;
ALTER TABLE MODOCFISCALXBLOQUEIOSEST DROP CONSTRAINT MODOCFISCALXBLOQUEIOSEST_FK1;
ALTER TABLE MODOCFISCALXCREDITO DROP CONSTRAINT MODOCFISCALXCREDITO_FK1;
ALTER TABLE MODOCFISCALXLOTESNFE DROP CONSTRAINT MODOCFISCALXLOTESNFE_FK1;
ALTER TABLE MODISTRIBUICOESDFE DROP CONSTRAINT MODISTRIBUICOESDFE_FK10;
ALTER TABLE MOVALEDESCXDOCFISCAL DROP CONSTRAINT MOVALEDESCXDOCFISCAL_FK2;
ALTER TABLE MOFINANCEIROXCOMISSOES DROP CONSTRAINT MOFINANCEIROXCOMISSOES_FK3;
ALTER TABLE MOFINANCEIROXDOCUMENTOS DROP CONSTRAINT MOFINANCEIROXDOCUMENTOS_FK3;
ALTER TABLE MOBAIXAFINANCXDOCFISCAL DROP CONSTRAINT MOBAIXAFINANCXDOCFISCAL_FK2;
ALTER TABLE MODOCFISCALXRESGATEPONTOS DROP CONSTRAINT MODOCFISCALXRESGATEPONTOS_FK1;
ALTER TABLE MOPREVFINANCXFINANCEIRO DROP CONSTRAINT MOPREVFINANCXFINANCEIRO_FK4;
ALTER TABLE MOSEPARACOES DROP CONSTRAINT MOSEPARACOES_FK7;
ALTER TABLE MODOCUMENTOSTRANSFERENCIA DROP CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK11;
ALTER TABLE MODOCUMENTOSTRANSFERENCIA DROP CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK15;
ALTER TABLE MODOCFISCALXCONFERENCIAS DROP CONSTRAINT MODOCFISCALXCONFERENCIAS_FK1;
ALTER TABLE MOMOTBLOQXDOCUMENTOSFISC DROP CONSTRAINT MOMOTBLOQXDOCUMENTOSFISC_FK2;
ALTER TABLE MOEVENTOS DROP CONSTRAINT MOEVENTOS_FK5;

DROP TABLE MODOCUMENTOSFISCAIS;

-- MODOCUMENTOSFISCAIS
CREATE TABLE MODOCUMENTOSFISCAIS
  (
    idDocumentoFiscal              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    origemDocumento                NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tipoDocumento                  NUMERIC (3,0) DEFAULT 0 NOT NULL,
    tipoVenda                      NUMERIC (4,0) DEFAULT 0 NOT NULL,
    modeloDocumento                NUMERIC (4,0) DEFAULT 0 NOT NULL,
    entradaSaida                   CHAR (1) DEFAULT ' ' NOT NULL,
    devolucaoAnulacaoRetorno       NUMERIC (1,0) DEFAULT 0 NOT NULL,
    finalidadeNota                 CHAR (1) DEFAULT ' ' NOT NULL,
    atualizaCustoMedio             NUMERIC (1,0) DEFAULT 0 NOT NULL,
    atualizaUltimaCompra           NUMERIC (1,0) DEFAULT 0 NOT NULL,
    validoFaturamento              NUMERIC (1,0) DEFAULT 0 NOT NULL,
    usarPrecoAVista                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    sessao                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    sessaoCaixa                    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    fatoContabil                   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idTerminalSiTef                VARCHAR (8) DEFAULT ' ' NOT NULL,
    estabelecimentoOriginal        NUMERIC (4,0) DEFAULT 0 NOT NULL,
    estabelecimento                NUMERIC (4,0) DEFAULT 0 NOT NULL,
    enderecoRetiradaEstabeleciment NUMERIC (14,0) DEFAULT 0 NOT NULL,
    indicadorPresencaComprador     CHAR (1) DEFAULT ' ' NOT NULL,
    controlaSeparacaoConferencia   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    nfFornecedor                   NUMERIC (1,0) DEFAULT 0 NOT NULL,
    idSerieFiscal                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    serieFiscal                    VARCHAR (4) DEFAULT ' ' NOT NULL,
    subserieFiscal                 NUMERIC (3,0) DEFAULT 0 NOT NULL,
    modeloDocumentoFiscal          CHAR (2) DEFAULT '  ' NOT NULL,
    documentoFiscal                NUMERIC (9,0) DEFAULT 0 NOT NULL,
    dataEmissao                    DATE,
    timezoneEmissao                VARCHAR (6) DEFAULT ' ' NOT NULL,
    dataEntradaSaida               DATE,
    pessoa                         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    vendaConsumidor                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    indicadorPessoa                CHAR (1) DEFAULT ' ' NOT NULL,
    indicadorDocumentoPessoa       CHAR (1) DEFAULT ' ' NOT NULL,
    cnpjCpfIdEstrangeiro           VARCHAR (20) DEFAULT ' ' NOT NULL,
    nomeRazaoSocial                VARCHAR (60) DEFAULT ' ' NOT NULL,
    fone                           VARCHAR (14) DEFAULT ' ' NOT NULL,
    indicadorFone                  NUMERIC (3,0) DEFAULT 0 NOT NULL,
    operadoraTelefonia             NUMERIC (3,0) DEFAULT 0 NOT NULL,
    autorizadoPessoa               NUMERIC (14,0) DEFAULT 0 NOT NULL,
    enderecoEntregaPessoa          NUMERIC (14,0) DEFAULT 0 NOT NULL,
    municipioFatoGerador           NUMERIC (7,0) DEFAULT 0 NOT NULL,
    localDestinoOperacao           CHAR (1) DEFAULT ' ' NOT NULL,
    indicadorConsumidorFinal       CHAR (1) DEFAULT ' ' NOT NULL,
    projeto                        VARCHAR (60) DEFAULT ' ' NOT NULL,
    contratoCompra                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comissionadoB                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    comissionadoC                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    modalidadeFrete                CHAR (1) DEFAULT ' ' NOT NULL,
    tipoPagamentoFrete             CHAR (1) DEFAULT ' ' NOT NULL,
    transportadora                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    enderecoTransportadora         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    motorista                      NUMERIC (14,0) DEFAULT 0 NOT NULL,
    placa                          VARCHAR (7) DEFAULT ' ' NOT NULL,
    vagao                          VARCHAR (20) DEFAULT ' ' NOT NULL,
    balsa                          VARCHAR (20) DEFAULT ' ' NOT NULL,
    quantidadeVolume               NUMERIC (15,0) DEFAULT 0 NOT NULL,
    especieVolume                  VARCHAR (60) DEFAULT ' ' NOT NULL,
    descricaoMarca                 VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeracaoVolume                VARCHAR (60) DEFAULT ' ' NOT NULL,
    codigoIntegracao               VARCHAR (15) DEFAULT ' ' NOT NULL,
    atendimento                    VARCHAR (15) DEFAULT ' ' NOT NULL,
    tipoCTe                        CHAR (1) DEFAULT ' ' NOT NULL,
    idContingenciaNfe              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    codigoNumericoNfe              NUMERIC (8,0) DEFAULT 0 NOT NULL,
    digitoVerificadorNfe           NUMERIC (1,0) DEFAULT 0 NOT NULL,
    formaEmissaoNfe                CHAR (1) DEFAULT ' ' NOT NULL,
    indicadorAmbienteNfe           CHAR (1) DEFAULT ' ' NOT NULL,
    qrCode                         VARCHAR (600) DEFAULT ' ' NOT NULL,
    chaveNfe                       VARCHAR (44) DEFAULT ' ' NOT NULL,
    situacaoDocumentoFiscal        NUMERIC (2,0) DEFAULT 0 NOT NULL,
    ultimoVendedorItem             NUMERIC (14,0) DEFAULT 0 NOT NULL,
    quantidade                     NUMERIC (15,6) DEFAULT 0 NOT NULL,
    pesoLiquido                    NUMERIC (15,6) DEFAULT 0 NOT NULL,
    pesoBruto                      NUMERIC (15,6) DEFAULT 0 NOT NULL,
    valorProdutosBruto             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorProdutos                  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoProdutos          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoProdutos         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorServicosBruto             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorServicos                  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoServicos          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoServicos         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteItem                 NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroItem                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerItem   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasItem    NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteGeral                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroGeral               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoGeral             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasGeral       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerGeral  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasGeral   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    condicaoPagamento              NUMERIC (4,0) DEFAULT 0 NOT NULL,
    contaFinanceira                VARCHAR (60) DEFAULT ' ' NOT NULL,
    numeroParcelas                 NUMERIC (3,0) DEFAULT 0 NOT NULL,
    somaPrazoParcelas              NUMERIC (6,0) DEFAULT 0 NOT NULL,
    valorXPrazoParcelas            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    prazoMedio                     NUMERIC (6,0) DEFAULT 0 NOT NULL,
    prazoMedioPonderado            NUMERIC (6,0) DEFAULT 0 NOT NULL,
    valorBasePagamento             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAVistaMinimo              NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorEntradaMinima             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAVistaEntrada             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorPagamentoBruto            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoPagamento         NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasPagamento   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorJurosPagamento            NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorPagamentoLiquido          NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorTroco                     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorFreteTotal                NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorSeguroTotal               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoTotal             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorOutrasDespesasTotal       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAdicFreteMarinhaMerTotal  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDespesasAduaneirasTotal   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    impostosEditados               NUMERIC (1,0) DEFAULT 0 NOT NULL,
    valorImpostosSomaPagamento     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorImpostosDiminuiPagamento  NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorLiquidoItem               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoCustoOpItem       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoCustoOpGeral      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorDescontoCustoOpTotal      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoCustoOpItem      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoCustoOpGeral     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoCustoOpTotal     NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorCustoOperacao             NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorCMV                       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    quantidadeExtemporanea         NUMERIC (15,6) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempSubtotal   NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempItem       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempGeral      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    valorAcrescimoExtempTotal      NUMERIC (15,2) DEFAULT 0 NOT NULL,
    versaoAplicativo               VARCHAR (20) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_PK1 PRIMARY KEY (idDocumentoFiscal);
CREATE INDEX MODOCUMENTOSFISCAIS_K2 ON MODOCUMENTOSFISCAIS (documentoFiscal);
CREATE INDEX MODOCUMENTOSFISCAIS_K3 ON MODOCUMENTOSFISCAIS (estabelecimento, idTerminalSiTef, entradaSaida, modeloDocumentoFiscal, situacaoDocumentoFiscal);
CREATE INDEX MODOCUMENTOSFISCAIS_K4 ON MODOCUMENTOSFISCAIS (estabelecimento, dataEntradaSaida, documentoFiscal, idDocumentoFiscal);
CREATE INDEX MODOCUMENTOSFISCAIS_K5 ON MODOCUMENTOSFISCAIS (tipoDocumento, estabelecimento, situacaoDocumentoFiscal, dataEmissao DESC, documentoFiscal DESC);
CREATE INDEX MODOCUMENTOSFISCAIS_K6 ON MODOCUMENTOSFISCAIS (tipoDocumento, situacaoDocumentoFiscal, dataEmissao DESC, documentoFiscal DESC);
CREATE INDEX MODOCUMENTOSFISCAIS_K7 ON MODOCUMENTOSFISCAIS (tipoDocumento, estabelecimento, dataEmissao DESC, documentoFiscal DESC);
CREATE INDEX MODOCUMENTOSFISCAIS_K8 ON MODOCUMENTOSFISCAIS (tipoDocumento, dataEmissao DESC, documentoFiscal DESC);
CREATE INDEX MODOCUMENTOSFISCAIS_K9 ON MODOCUMENTOSFISCAIS (estabelecimento);
CREATE INDEX MODOCUMENTOSFISCAIS_K10 ON MODOCUMENTOSFISCAIS (pessoa);
CREATE INDEX MODOCUMENTOSFISCAIS_K11 ON MODOCUMENTOSFISCAIS (chaveNfe);
CREATE INDEX MODOCUMENTOSFISCAIS_K12 ON MODOCUMENTOSFISCAIS (atendimento);
CREATE INDEX MODOCUMENTOSFISCAIS_K13 ON MODOCUMENTOSFISCAIS (dataEmissao);
CREATE INDEX MODOCUMENTOSFISCAIS_K14 ON MODOCUMENTOSFISCAIS (dataEntradaSaida);
CREATE INDEX MODOCUMENTOSFISCAIS_K15 ON MODOCUMENTOSFISCAIS (pessoa, entradaSaida, devolucaoAnulacaoRetorno, situacaoDocumentoFiscal);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK1 FOREIGN KEY (origemDocumento) REFERENCES SIORIGENSDOCUMENTO (origemDocumento);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK2 FOREIGN KEY (tipoDocumento) REFERENCES SITIPOSDOCUMENTO (tipoDocumento);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK3 FOREIGN KEY (tipoVenda) REFERENCES PATIPOSVENDA (tipoVenda);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK4 FOREIGN KEY (modeloDocumento) REFERENCES PAMODELOSDOCUMENTO (modeloDocumento);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK5 FOREIGN KEY (entradaSaida) REFERENCES SIENTRADASAIDA (entradaSaida);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK6 FOREIGN KEY (finalidadeNota) REFERENCES SIFINALIDADESNOTA (finalidadeNota);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK7 FOREIGN KEY (sessao) REFERENCES MOSESSOES (sessao);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK8 FOREIGN KEY (sessaoCaixa) REFERENCES MOSESSOESCAIXA (sessaoCaixa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK9 FOREIGN KEY (fatoContabil) REFERENCES MOFATOSCONTABEIS (fatoContabil);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK10 FOREIGN KEY (estabelecimentoOriginal) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK11 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK12 FOREIGN KEY (enderecoRetiradaEstabeleciment) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK13 FOREIGN KEY (indicadorPresencaComprador) REFERENCES SIINDICPRESENCACOMPRADOR (indicadorPresencaComprador);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK14 FOREIGN KEY (idSerieFiscal) REFERENCES PASERIESFISCAIS (idSerieFiscal);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK15 FOREIGN KEY (modeloDocumentoFiscal) REFERENCES SIMODELOSDOCUMENTOFISCAL (modeloDocumentoFiscal);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK16 FOREIGN KEY (pessoa) REFERENCES CAPESSOAS (pessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK17 FOREIGN KEY (indicadorPessoa) REFERENCES SIINDICPESSOA (indicadorPessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK18 FOREIGN KEY (indicadorDocumentoPessoa) REFERENCES SIINDICDOCUMENTOPESSOA (indicadorDocumentoPessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK19 FOREIGN KEY (indicadorFone) REFERENCES SIINDICFONE (indicadorFone);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK20 FOREIGN KEY (operadoraTelefonia) REFERENCES SIOPERADORASTELEFONIA (operadoraTelefonia);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK21 FOREIGN KEY (autorizadoPessoa) REFERENCES CAAUTORIZADOSPESSOA (autorizadoPessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK22 FOREIGN KEY (enderecoEntregaPessoa) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK23 FOREIGN KEY (municipioFatoGerador) REFERENCES SIMUNICIPIOS (municipio);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK24 FOREIGN KEY (localDestinoOperacao) REFERENCES SILOCAISDESTINOOPERACAO (localDestinoOperacao);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK25 FOREIGN KEY (projeto) REFERENCES PAPROJETOS (projeto);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK26 FOREIGN KEY (indicadorConsumidorFinal) REFERENCES SIINDICCONSUMIDORFINAL (indicadorConsumidorFinal);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK27 FOREIGN KEY (comissionadoB) REFERENCES CACOMISSIONADOSB (comissionadoB);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK28 FOREIGN KEY (comissionadoC) REFERENCES CACOMISSIONADOSC (comissionadoC);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK29 FOREIGN KEY (modalidadeFrete) REFERENCES SIMODALIDADESFRETE (modalidadeFrete);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK30 FOREIGN KEY (tipoPagamentoFrete) REFERENCES SITIPOSPAGAMENTOFRETE (tipoPagamentoFrete);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK31 FOREIGN KEY (transportadora) REFERENCES CATRANSPORTADORAS (transportadora);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK32 FOREIGN KEY (enderecoTransportadora) REFERENCES CAENDERECOSPESSOA (enderecoPessoa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK33 FOREIGN KEY (motorista) REFERENCES CACOLABORADORES (colaborador);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK34 FOREIGN KEY (placa) REFERENCES CAPLACAS (placa);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK35 FOREIGN KEY (tipoCTe) REFERENCES SITIPOSCTE (tipoCTe);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK36 FOREIGN KEY (idContingenciaNfe) REFERENCES MOCONTINGENCIASNFE (idContingenciaNfe);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK37 FOREIGN KEY (formaEmissaoNfe) REFERENCES SIFORMASEMISSAONFE (formaEmissaoNfe);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK38 FOREIGN KEY (indicadorAmbienteNfe) REFERENCES SIINDICAMBIENTENFE (indicadorAmbienteNfe);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK39 FOREIGN KEY (situacaoDocumentoFiscal) REFERENCES SISITUACOESDOCUMENTOFISC (situacaoDocumentoFiscal);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK40 FOREIGN KEY (ultimoVendedorItem) REFERENCES CAVENDEDORES (vendedor);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK41 FOREIGN KEY (condicaoPagamento) REFERENCES PACONDICOESPAGAMENTO (condicaoPagamento);
ALTER TABLE MODOCUMENTOSFISCAIS ADD CONSTRAINT MODOCUMENTOSFISCAIS_FK42 FOREIGN KEY (contaFinanceira) REFERENCES PACONTASFINANCEIRAS (contaFinanceira);

INSERT INTO MODOCUMENTOSFISCAIS (idDocumentoFiscal, origemDocumento, tipoDocumento, tipoVenda, modeloDocumento, entradaSaida, devolucaoAnulacaoRetorno, finalidadeNota, atualizaCustoMedio, atualizaUltimaCompra, validoFaturamento, usarPrecoAVista, sessao, sessaoCaixa, fatoContabil, idTerminalSiTef, estabelecimentoOriginal, estabelecimento, enderecoRetiradaEstabeleciment, indicadorPresencaComprador, controlaSeparacaoConferencia, nfFornecedor, idSerieFiscal, serieFiscal, subserieFiscal, modeloDocumentoFiscal, documentoFiscal, dataEmissao, timezoneEmissao, dataEntradaSaida, pessoa, vendaConsumidor, indicadorPessoa, indicadorDocumentoPessoa, cnpjCpfIdEstrangeiro, nomeRazaoSocial, fone, indicadorFone, operadoraTelefonia, autorizadoPessoa, enderecoEntregaPessoa, municipioFatoGerador, localDestinoOperacao, indicadorConsumidorFinal, projeto, contratoCompra, comissionadoB, comissionadoC, modalidadeFrete, tipoPagamentoFrete, transportadora, enderecoTransportadora, motorista, placa, vagao, balsa, quantidadeVolume, especieVolume, descricaoMarca, numeracaoVolume, codigoIntegracao, atendimento, tipoCTe, idContingenciaNfe, codigoNumericoNfe, digitoVerificadorNfe, formaEmissaoNfe, indicadorAmbienteNfe, qrCode, chaveNfe, situacaoDocumentoFiscal, ultimoVendedorItem, quantidade, pesoLiquido, pesoBruto, valorProdutosBruto, valorProdutos, valorDescontoProdutos, valorAcrescimoProdutos, valorServicosBruto, valorServicos, valorDescontoServicos, valorAcrescimoServicos, valorFreteItem, valorSeguroItem, valorAdicFreteMarinhaMerItem, valorDespesasAduaneirasItem, valorFreteGeral, valorSeguroGeral, valorDescontoGeral, valorOutrasDespesasGeral, valorAdicFreteMarinhaMerGeral, valorDespesasAduaneirasGeral, condicaoPagamento, contaFinanceira, numeroParcelas, somaPrazoParcelas, valorXPrazoParcelas, prazoMedio, prazoMedioPonderado, valorBasePagamento, valorAVistaMinimo, valorEntradaMinima, valorAVistaEntrada, valorPagamentoBruto, valorDescontoPagamento, valorOutrasDespesasPagamento, valorJurosPagamento, valorPagamentoLiquido, valorTroco, valorFreteTotal, valorSeguroTotal, valorDescontoTotal, valorOutrasDespesasTotal, valorAdicFreteMarinhaMerTotal, valorDespesasAduaneirasTotal, impostosEditados, valorImpostosSomaPagamento, valorImpostosDiminuiPagamento, valorLiquidoItem, valorDescontoCustoOpItem, valorDescontoCustoOpGeral, valorDescontoCustoOpTotal, valorAcrescimoCustoOpItem, valorAcrescimoCustoOpGeral, valorAcrescimoCustoOpTotal, valorCustoOperacao, valorCMV, quantidadeExtemporanea, valorAcrescimoExtempSubtotal, valorAcrescimoExtempItem, valorAcrescimoExtempGeral, valorAcrescimoExtempTotal, versaoAplicativo) VALUES (0, 0, 0, 0, 0, ' ', 0, ' ', 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, ' ', 0, 0, 0, ' ', 0, '  ', 0, NULL, ' ', NULL, 0, 0, ' ', ' ', ' ', ' ', ' ', 0, 0, 0, 0, 0, ' ', ' ', ' ', 0, 0, 0, ' ', ' ', 0, 0, 0, ' ', ' ', ' ', 0, ' ', ' ', ' ', ' ', ' ', ' ', 0, 0, 0, ' ', ' ', ' ', ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ');
INSERT INTO MODOCUMENTOSFISCAIS (idDocumentoFiscal, origemDocumento, tipoDocumento, tipoVenda, modeloDocumento, entradaSaida, devolucaoAnulacaoRetorno, finalidadeNota, atualizaCustoMedio, atualizaUltimaCompra, validoFaturamento, usarPrecoAVista, sessao, sessaoCaixa, fatoContabil, idTerminalSiTef, estabelecimentoOriginal, estabelecimento, enderecoRetiradaEstabeleciment, indicadorPresencaComprador, controlaSeparacaoConferencia, nfFornecedor, idSerieFiscal, serieFiscal, subserieFiscal, modeloDocumentoFiscal, documentoFiscal, dataEmissao, timezoneEmissao, dataEntradaSaida, pessoa, vendaConsumidor, indicadorPessoa, indicadorDocumentoPessoa, cnpjCpfIdEstrangeiro, nomeRazaoSocial, fone, indicadorFone, operadoraTelefonia, autorizadoPessoa, enderecoEntregaPessoa, municipioFatoGerador, localDestinoOperacao, indicadorConsumidorFinal, projeto, contratoCompra, comissionadoB, comissionadoC, modalidadeFrete, tipoPagamentoFrete, transportadora, enderecoTransportadora, motorista, placa, vagao, balsa, quantidadeVolume, especieVolume, descricaoMarca, numeracaoVolume, codigoIntegracao, atendimento, tipoCTe, idContingenciaNfe, codigoNumericoNfe, digitoVerificadorNfe, formaEmissaoNfe, indicadorAmbienteNfe, qrCode, chaveNfe, situacaoDocumentoFiscal, ultimoVendedorItem, quantidade, pesoLiquido, pesoBruto, valorProdutosBruto, valorProdutos, valorDescontoProdutos, valorAcrescimoProdutos, valorServicosBruto, valorServicos, valorDescontoServicos, valorAcrescimoServicos, valorFreteItem, valorSeguroItem, valorAdicFreteMarinhaMerItem, valorDespesasAduaneirasItem, valorFreteGeral, valorSeguroGeral, valorDescontoGeral, valorOutrasDespesasGeral, valorAdicFreteMarinhaMerGeral, valorDespesasAduaneirasGeral, condicaoPagamento, contaFinanceira, numeroParcelas, somaPrazoParcelas, valorXPrazoParcelas, prazoMedio, prazoMedioPonderado, valorBasePagamento, valorAVistaMinimo, valorEntradaMinima, valorAVistaEntrada, valorPagamentoBruto, valorDescontoPagamento, valorOutrasDespesasPagamento, valorJurosPagamento, valorPagamentoLiquido, valorTroco, valorFreteTotal, valorSeguroTotal, valorDescontoTotal, valorOutrasDespesasTotal, valorAdicFreteMarinhaMerTotal, valorDespesasAduaneirasTotal, impostosEditados, valorImpostosSomaPagamento, valorImpostosDiminuiPagamento, valorLiquidoItem, valorDescontoCustoOpItem, valorDescontoCustoOpGeral, valorDescontoCustoOpTotal, valorAcrescimoCustoOpItem, valorAcrescimoCustoOpGeral, valorAcrescimoCustoOpTotal, valorCustoOperacao, valorCMV, quantidadeExtemporanea, valorAcrescimoExtempSubtotal, valorAcrescimoExtempItem, valorAcrescimoExtempGeral, valorAcrescimoExtempTotal, versaoAplicativo) SELECT a.idDocumentoFiscal, a.origemDocumento, a.tipoDocumento, 0, a.modeloDocumento, a.entradaSaida, a.devolucaoAnulacaoRetorno, a.finalidadeNota, a.atualizaCustoMedio, a.atualizaUltimaCompra, a.validoFaturamento, a.usarPrecoAVista, a.sessao, a.sessaoCaixa, a.fatoContabil, a.idTerminalSiTef, a.estabelecimentoOriginal, a.estabelecimento, a.enderecoRetiradaEstabeleciment, a.indicadorPresencaComprador, a.controlaSeparacaoConferencia, a.nfFornecedor, a.idSerieFiscal, a.serieFiscal, a.subserieFiscal, a.modeloDocumentoFiscal, a.documentoFiscal, a.dataEmissao, a.timezoneEmissao, a.dataEntradaSaida, a.pessoa, a.vendaConsumidor, a.indicadorPessoa, a.indicadorDocumentoPessoa, a.cnpjCpfIdEstrangeiro, a.nomeRazaoSocial, a.fone, a.indicadorFone, a.operadoraTelefonia, a.autorizadoPessoa, a.enderecoEntregaPessoa, a.municipioFatoGerador, a.localDestinoOperacao, a.indicadorConsumidorFinal, a.projeto, a.contratoCompra, a.comissionadoB, a.comissionadoC, a.modalidadeFrete, a.tipoPagamentoFrete, a.transportadora, CASE WHEN a.transportadora = 0 THEN 0 ELSE COALESCE((SELECT MIN(b.enderecoPessoa) FROM CAENDERECOSPESSOA b WHERE b.pessoa = transportadora AND b.ativo = 1 AND b.principal = 1),0) END, a.motorista, a.placa, a.vagao, a.balsa, a.quantidadeVolume, a.especieVolume, a.descricaoMarca, a.numeracaoVolume, a.codigoIntegracao, a.atendimento, a.tipoCTe, a.idContingenciaNfe, a.codigoNumericoNfe, a.digitoVerificadorNfe, a.formaEmissaoNfe, a.indicadorAmbienteNfe, a.qrCode, a.chaveNfe, a.situacaoDocumentoFiscal, a.ultimoVendedorItem, a.quantidade, a.pesoLiquido, a.pesoBruto, a.valorProdutosBruto, a.valorProdutos, a.valorDescontoProdutos, a.valorAcrescimoProdutos, a.valorServicosBruto, a.valorServicos, a.valorDescontoServicos, a.valorAcrescimoServicos, a.valorFreteItem, a.valorSeguroItem, a.valorAdicFreteMarinhaMerItem, a.valorDespesasAduaneirasItem, a.valorFreteGeral, a.valorSeguroGeral, a.valorDescontoGeral, a.valorOutrasDespesasGeral, a.valorAdicFreteMarinhaMerGeral, a.valorDespesasAduaneirasGeral, a.condicaoPagamento, a.contaFinanceira, a.numeroParcelas, a.somaPrazoParcelas, a.valorXPrazoParcelas, a.prazoMedio, a.prazoMedioPonderado, a.valorBasePagamento, a.valorAVistaMinimo, a.valorEntradaMinima, a.valorAVistaEntrada, a.valorPagamentoBruto, a.valorDescontoPagamento, a.valorOutrasDespesasPagamento, a.valorJurosPagamento, a.valorPagamentoLiquido, a.valorTroco, a.valorFreteTotal, a.valorSeguroTotal, a.valorDescontoTotal, a.valorOutrasDespesasTotal, a.valorAdicFreteMarinhaMerTotal, a.valorDespesasAduaneirasTotal, a.impostosEditados, a.valorImpostosSomaPagamento, a.valorImpostosDiminuiPagamento, a.valorLiquidoItem, a.valorDescontoCustoOpItem, a.valorDescontoCustoOpGeral, a.valorDescontoCustoOpTotal, a.valorAcrescimoCustoOpItem, a.valorAcrescimoCustoOpGeral, a.valorAcrescimoCustoOpTotal, a.valorCustoOperacao, a.valorCMV, a.quantidadeExtemporanea, a.valorAcrescimoExtempSubtotal, a.valorAcrescimoExtempItem, a.valorAcrescimoExtempGeral, a.valorAcrescimoExtempTotal, a.versaoAplicativo FROM MODOCUMENTOSFISCAIS_2204 a WHERE a.idDocumentoFiscal <> 0;

COMMIT;

ALTER TABLE MODOCFISCALXPERSPROJETO ADD CONSTRAINT MODOCFISCALXPERSPROJETO_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXNFREF ADD CONSTRAINT MODOCFISCALXNFREF_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXITENS ADD CONSTRAINT MODOCFISCALXITENS_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXPAGAMENTOS ADD CONSTRAINT MODOCFISCALXPAGAMENTOS_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXLACRES ADD CONSTRAINT MODOCFISCALXLACRES_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXDECLARACAOIMP ADD CONSTRAINT MODOCFISCALXDECLARACAOIMP_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXINFOCOMPLEMEN ADD CONSTRAINT MODOCFISCALXINFOCOMPLEMEN_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXPROMOCOES ADD CONSTRAINT MODOCFISCALXPROMOCOES_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXSITUACOES ADD CONSTRAINT MODOCFISCALXSITUACOES_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXBLOQUEIOSEST ADD CONSTRAINT MODOCFISCALXBLOQUEIOSEST_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXCREDITO ADD CONSTRAINT MODOCFISCALXCREDITO_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXLOTESNFE ADD CONSTRAINT MODOCFISCALXLOTESNFE_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODISTRIBUICOESDFE ADD CONSTRAINT MODISTRIBUICOESDFE_FK10 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOVALEDESCXDOCFISCAL ADD CONSTRAINT MOVALEDESCXDOCFISCAL_FK2 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOFINANCEIROXCOMISSOES ADD CONSTRAINT MOFINANCEIROXCOMISSOES_FK3 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOFINANCEIROXDOCUMENTOS ADD CONSTRAINT MOFINANCEIROXDOCUMENTOS_FK3 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOBAIXAFINANCXDOCFISCAL ADD CONSTRAINT MOBAIXAFINANCXDOCFISCAL_FK2 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXRESGATEPONTOS ADD CONSTRAINT MODOCFISCALXRESGATEPONTOS_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOPREVFINANCXFINANCEIRO ADD CONSTRAINT MOPREVFINANCXFINANCEIRO_FK4 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOSEPARACOES ADD CONSTRAINT MOSEPARACOES_FK7 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCUMENTOSTRANSFERENCIA ADD CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK11 FOREIGN KEY (idDocumentoFiscalSaida) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCUMENTOSTRANSFERENCIA ADD CONSTRAINT MODOCUMENTOSTRANSFERENCIA_FK15 FOREIGN KEY (idDocumentoFiscalEntrada) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MODOCFISCALXCONFERENCIAS ADD CONSTRAINT MODOCFISCALXCONFERENCIAS_FK1 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOMOTBLOQXDOCUMENTOSFISC ADD CONSTRAINT MOMOTBLOQXDOCUMENTOSFISC_FK2 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);
ALTER TABLE MOEVENTOS ADD CONSTRAINT MOEVENTOS_FK5 FOREIGN KEY (idDocumentoFiscal) REFERENCES MODOCUMENTOSFISCAIS (idDocumentoFiscal);

CREATE TABLE PACONTROLESENTREGA_2204 AS SELECT * FROM PACONTROLESENTREGA;

ALTER TABLE PAREGRASENTREGA DROP CONSTRAINT PAREGRASENTREGA_FK4;
ALTER TABLE CAPRODUTOXCONTROLEENTREGA DROP CONSTRAINT CAPRODUTOXCONTROLEENTREGA_FK2;
ALTER TABLE MOORCAMENTOXITENS DROP CONSTRAINT MOORCAMENTOXITENS_FK15;

DROP TABLE PACONTROLESENTREGA;

-- PACONTROLESENTREGA
CREATE TABLE PACONTROLESENTREGA
  (
    controleEntrega               NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descricao                     VARCHAR (120) 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,
    entregaFutura                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    reservaEstoque                NUMERIC (1,0) DEFAULT 0 NOT NULL,
    estabelecimentoSaida          NUMERIC (4,0) DEFAULT 0 NOT NULL,
    estabelecimentoRemessa        NUMERIC (4,0) DEFAULT 0 NOT NULL,
    localEstoqueSaida             NUMERIC (4,0) DEFAULT 0 NOT NULL,
    modeloDocumentoVenda          NUMERIC (4,0) DEFAULT 0 NOT NULL,
    descInformacaoComplementVenda VARCHAR (800) DEFAULT ' ' NOT NULL,
    modeloDocumentoEntrega        NUMERIC (4,0) DEFAULT 0 NOT NULL,
    tipoDocumentoEntrega          NUMERIC (3,0) DEFAULT 0 NOT NULL,
    efetuarProgramacaoEntrega     NUMERIC (1,0) DEFAULT 0 NOT NULL,
    habilitaFrete                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    solicitarEventoConfirmEntrega NUMERIC (1,0) DEFAULT 0 NOT NULL,
    imprimirComprovanteEntrega    NUMERIC (1,0) DEFAULT 0 NOT NULL,
    exigirCliente                 NUMERIC (1,0) DEFAULT 0 NOT NULL,
    geraTransferenciaEstab        NUMERIC (1,0) DEFAULT 0 NOT NULL,
    modeloDocumentoTransferencia  NUMERIC (4,0) DEFAULT 0 NOT NULL,
    observacoes                   VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_PK1 PRIMARY KEY (controleEntrega);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK1 FOREIGN KEY (estabelecimento) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK2 FOREIGN KEY (perfilUsuario) REFERENCES PAPERFISUSUARIO (perfilUsuario);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK3 FOREIGN KEY (usuario) REFERENCES CAUSUARIOS (usuario);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK4 FOREIGN KEY (estabelecimentoSaida) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK5 FOREIGN KEY (estabelecimentoRemessa) REFERENCES PAESTABELECIMENTOS (estabelecimento);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK6 FOREIGN KEY (localEstoqueSaida) REFERENCES PALOCAISESTOQUE (localEstoque);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK7 FOREIGN KEY (modeloDocumentoVenda) REFERENCES PAMODELOSDOCUMENTO (modeloDocumento);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK8 FOREIGN KEY (modeloDocumentoEntrega) REFERENCES PAMODELOSDOCUMENTO (modeloDocumento);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK9 FOREIGN KEY (tipoDocumentoEntrega) REFERENCES SITIPOSDOCUMENTO (tipoDocumento);
ALTER TABLE PACONTROLESENTREGA ADD CONSTRAINT PACONTROLESENTREGA_FK10 FOREIGN KEY (modeloDocumentoTransferencia) REFERENCES PAMODELOSDOCUMENTO (modeloDocumento);

INSERT INTO PACONTROLESENTREGA (controleEntrega, descricao, ativo, estabelecimento, perfilUsuario, usuario, entregaFutura, reservaEstoque, estabelecimentoSaida, estabelecimentoRemessa, localEstoqueSaida, modeloDocumentoVenda, descInformacaoComplementVenda, modeloDocumentoEntrega, tipoDocumentoEntrega, efetuarProgramacaoEntrega, habilitaFrete, solicitarEventoConfirmEntrega, imprimirComprovanteEntrega, exigirCliente, geraTransferenciaEstab, modeloDocumentoTransferencia, observacoes) VALUES (0, 'Retirada', 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, ' ', 0, 0, 0, 0, 0, 0, 0, 0, 0, 'RET');
INSERT INTO PACONTROLESENTREGA (controleEntrega, descricao, ativo, estabelecimento, perfilUsuario, usuario, entregaFutura, reservaEstoque, estabelecimentoSaida, estabelecimentoRemessa, localEstoqueSaida, modeloDocumentoVenda, descInformacaoComplementVenda, modeloDocumentoEntrega, tipoDocumentoEntrega, efetuarProgramacaoEntrega, habilitaFrete, solicitarEventoConfirmEntrega, imprimirComprovanteEntrega, exigirCliente, geraTransferenciaEstab, modeloDocumentoTransferencia, observacoes) SELECT controleEntrega, descricao, ativo, estabelecimento, perfilUsuario, usuario, entregaFutura, reservaEstoque, estabelecimentoSaida, 0, localEstoqueSaida, modeloDocumentoVenda, descInformacaoComplementVenda, modeloDocumentoEntrega, tipoDocumentoEntrega, efetuarProgramacaoEntrega, habilitaFrete, solicitarEventoConfirmEntrega, imprimirComprovanteEntrega, exigirCliente, geraTransferenciaEstab, modeloDocumentoTransferencia, observacoes FROM PACONTROLESENTREGA_2204 WHERE controleEntrega <> 0;

COMMIT;

ALTER TABLE PAREGRASENTREGA ADD CONSTRAINT PAREGRASENTREGA_FK4 FOREIGN KEY (controleEntrega) REFERENCES PACONTROLESENTREGA (controleEntrega);
ALTER TABLE CAPRODUTOXCONTROLEENTREGA ADD CONSTRAINT CAPRODUTOXCONTROLEENTREGA_FK2 FOREIGN KEY (controleEntrega) REFERENCES PACONTROLESENTREGA (controleEntrega);
ALTER TABLE MOORCAMENTOXITENS ADD CONSTRAINT MOORCAMENTOXITENS_FK15 FOREIGN KEY (controleEntrega) REFERENCES PACONTROLESENTREGA (controleEntrega);

DELETE SITABELASSISTEMA WHERE tabelaSistema = 'SIUFORIGEMXUFDESTINO';

DROP TABLE SIUFORIGEMXUFDESTINO;

UPDATE SIMENUS SET tipoMenu = 'PA', menuPrincipal = 24 WHERE menu = 24;
UPDATE SIMENUS SET tipoMenu = 'PA', menuPrincipal = 25 WHERE menu = 25;

COMMIT;

-- PAUFORIGEMXUFDESTINO
CREATE TABLE PAUFORIGEMXUFDESTINO
  (
    id            NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ufOrigem      CHAR (2) DEFAULT '  ' NOT NULL,
    ufDestino     CHAR (2) DEFAULT '  ' NOT NULL,
    aliquotaIcms  NUMERIC (7,4) DEFAULT 0 NOT NULL
  );
ALTER TABLE PAUFORIGEMXUFDESTINO ADD CONSTRAINT PAUFORIGEMXUFDESTINO_PK1 PRIMARY KEY (id);
CREATE UNIQUE INDEX PAUFORIGEMXUFDESTINO_K2 ON PAUFORIGEMXUFDESTINO (ufOrigem, ufDestino);
CREATE INDEX PAUFORIGEMXUFDESTINO_K3 ON PAUFORIGEMXUFDESTINO (ufDestino, ufOrigem);
ALTER TABLE PAUFORIGEMXUFDESTINO ADD CONSTRAINT PAUFORIGEMXUFDESTINO_FK1 FOREIGN KEY (ufOrigem) REFERENCES SIUFS (uf);
ALTER TABLE PAUFORIGEMXUFDESTINO ADD CONSTRAINT PAUFORIGEMXUFDESTINO_FK2 FOREIGN KEY (ufDestino) REFERENCES SIUFS (uf);

INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (0,'  ','  ',0);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (1,'AC','AC',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (2,'AC','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (3,'AC','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (4,'AC','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (5,'AC','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (6,'AC','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (7,'AC','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (8,'AC','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (9,'AC','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (10,'AC','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (11,'AC','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (12,'AC','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (13,'AC','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (14,'AC','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (15,'AC','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (16,'AC','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (17,'AC','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (18,'AC','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (19,'AC','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (20,'AC','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (21,'AC','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (22,'AC','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (23,'AC','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (24,'AC','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (25,'AC','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (26,'AC','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (27,'AC','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (28,'AC','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (29,'AL','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (30,'AL','AL',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (31,'AL','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (32,'AL','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (33,'AL','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (34,'AL','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (35,'AL','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (36,'AL','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (37,'AL','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (38,'AL','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (39,'AL','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (40,'AL','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (41,'AL','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (42,'AL','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (43,'AL','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (44,'AL','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (45,'AL','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (46,'AL','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (47,'AL','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (48,'AL','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (49,'AL','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (50,'AL','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (51,'AL','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (52,'AL','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (53,'AL','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (54,'AL','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (55,'AL','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (56,'AL','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (57,'AM','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (58,'AM','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (59,'AM','AM',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (60,'AM','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (61,'AM','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (62,'AM','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (63,'AM','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (64,'AM','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (65,'AM','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (66,'AM','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (67,'AM','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (68,'AM','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (69,'AM','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (70,'AM','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (71,'AM','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (72,'AM','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (73,'AM','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (74,'AM','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (75,'AM','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (76,'AM','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (77,'AM','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (78,'AM','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (79,'AM','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (80,'AM','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (81,'AM','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (82,'AM','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (83,'AM','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (84,'AM','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (85,'AP','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (86,'AP','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (87,'AP','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (88,'AP','AP',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (89,'AP','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (90,'AP','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (91,'AP','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (92,'AP','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (93,'AP','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (94,'AP','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (95,'AP','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (96,'AP','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (97,'AP','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (98,'AP','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (99,'AP','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (100,'AP','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (101,'AP','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (102,'AP','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (103,'AP','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (104,'AP','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (105,'AP','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (106,'AP','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (107,'AP','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (108,'AP','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (109,'AP','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (110,'AP','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (111,'AP','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (112,'AP','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (113,'BA','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (114,'BA','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (115,'BA','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (116,'BA','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (117,'BA','BA',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (118,'BA','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (119,'BA','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (120,'BA','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (121,'BA','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (122,'BA','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (123,'BA','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (124,'BA','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (125,'BA','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (126,'BA','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (127,'BA','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (128,'BA','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (129,'BA','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (130,'BA','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (131,'BA','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (132,'BA','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (133,'BA','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (134,'BA','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (135,'BA','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (136,'BA','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (137,'BA','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (138,'BA','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (139,'BA','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (140,'BA','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (141,'CE','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (142,'CE','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (143,'CE','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (144,'CE','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (145,'CE','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (146,'CE','CE',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (147,'CE','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (148,'CE','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (149,'CE','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (150,'CE','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (151,'CE','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (152,'CE','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (153,'CE','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (154,'CE','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (155,'CE','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (156,'CE','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (157,'CE','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (158,'CE','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (159,'CE','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (160,'CE','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (161,'CE','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (162,'CE','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (163,'CE','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (164,'CE','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (165,'CE','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (166,'CE','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (167,'CE','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (168,'CE','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (169,'DF','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (170,'DF','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (171,'DF','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (172,'DF','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (173,'DF','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (174,'DF','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (175,'DF','DF',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (176,'DF','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (177,'DF','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (178,'DF','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (179,'DF','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (180,'DF','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (181,'DF','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (182,'DF','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (183,'DF','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (184,'DF','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (185,'DF','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (186,'DF','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (187,'DF','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (188,'DF','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (189,'DF','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (190,'DF','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (191,'DF','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (192,'DF','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (193,'DF','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (194,'DF','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (195,'DF','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (196,'DF','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (197,'ES','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (198,'ES','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (199,'ES','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (200,'ES','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (201,'ES','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (202,'ES','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (203,'ES','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (204,'ES','ES',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (205,'ES','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (206,'ES','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (207,'ES','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (208,'ES','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (209,'ES','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (210,'ES','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (211,'ES','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (212,'ES','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (213,'ES','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (214,'ES','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (215,'ES','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (216,'ES','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (217,'ES','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (218,'ES','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (219,'ES','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (220,'ES','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (221,'ES','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (222,'ES','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (223,'ES','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (224,'ES','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (225,'GO','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (226,'GO','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (227,'GO','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (228,'GO','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (229,'GO','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (230,'GO','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (231,'GO','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (232,'GO','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (233,'GO','GO',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (234,'GO','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (235,'GO','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (236,'GO','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (237,'GO','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (238,'GO','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (239,'GO','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (240,'GO','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (241,'GO','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (242,'GO','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (243,'GO','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (244,'GO','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (245,'GO','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (246,'GO','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (247,'GO','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (248,'GO','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (249,'GO','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (250,'GO','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (251,'GO','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (252,'GO','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (253,'MA','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (254,'MA','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (255,'MA','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (256,'MA','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (257,'MA','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (258,'MA','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (259,'MA','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (260,'MA','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (261,'MA','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (262,'MA','MA',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (263,'MA','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (264,'MA','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (265,'MA','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (266,'MA','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (267,'MA','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (268,'MA','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (269,'MA','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (270,'MA','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (271,'MA','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (272,'MA','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (273,'MA','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (274,'MA','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (275,'MA','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (276,'MA','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (277,'MA','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (278,'MA','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (279,'MA','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (280,'MA','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (281,'MT','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (282,'MT','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (283,'MT','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (284,'MT','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (285,'MT','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (286,'MT','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (287,'MT','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (288,'MT','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (289,'MT','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (290,'MT','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (291,'MT','MT',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (292,'MT','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (293,'MT','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (294,'MT','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (295,'MT','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (296,'MT','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (297,'MT','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (298,'MT','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (299,'MT','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (300,'MT','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (301,'MT','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (302,'MT','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (303,'MT','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (304,'MT','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (305,'MT','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (306,'MT','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (307,'MT','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (308,'MT','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (309,'MS','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (310,'MS','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (311,'MS','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (312,'MS','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (313,'MS','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (314,'MS','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (315,'MS','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (316,'MS','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (317,'MS','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (318,'MS','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (319,'MS','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (320,'MS','MS',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (321,'MS','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (322,'MS','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (323,'MS','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (324,'MS','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (325,'MS','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (326,'MS','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (327,'MS','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (328,'MS','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (329,'MS','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (330,'MS','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (331,'MS','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (332,'MS','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (333,'MS','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (334,'MS','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (335,'MS','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (336,'MS','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (337,'MG','AC',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (338,'MG','AL',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (339,'MG','AM',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (340,'MG','AP',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (341,'MG','BA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (342,'MG','CE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (343,'MG','DF',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (344,'MG','ES',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (345,'MG','GO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (346,'MG','MA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (347,'MG','MT',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (348,'MG','MS',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (349,'MG','MG',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (350,'MG','PA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (351,'MG','PB',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (352,'MG','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (353,'MG','PE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (354,'MG','PI',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (355,'MG','RN',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (356,'MG','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (357,'MG','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (358,'MG','RO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (359,'MG','RR',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (360,'MG','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (361,'MG','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (362,'MG','SE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (363,'MG','TO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (364,'MG','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (365,'PA','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (366,'PA','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (367,'PA','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (368,'PA','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (369,'PA','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (370,'PA','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (371,'PA','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (372,'PA','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (373,'PA','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (374,'PA','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (375,'PA','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (376,'PA','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (377,'PA','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (378,'PA','PA',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (379,'PA','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (380,'PA','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (381,'PA','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (382,'PA','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (383,'PA','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (384,'PA','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (385,'PA','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (386,'PA','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (387,'PA','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (388,'PA','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (389,'PA','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (390,'PA','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (391,'PA','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (392,'PA','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (393,'PB','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (394,'PB','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (395,'PB','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (396,'PB','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (397,'PB','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (398,'PB','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (399,'PB','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (400,'PB','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (401,'PB','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (402,'PB','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (403,'PB','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (404,'PB','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (405,'PB','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (406,'PB','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (407,'PB','PB',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (408,'PB','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (409,'PB','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (410,'PB','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (411,'PB','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (412,'PB','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (413,'PB','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (414,'PB','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (415,'PB','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (416,'PB','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (417,'PB','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (418,'PB','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (419,'PB','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (420,'PB','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (421,'PR','AC',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (422,'PR','AL',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (423,'PR','AM',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (424,'PR','AP',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (425,'PR','BA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (426,'PR','CE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (427,'PR','DF',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (428,'PR','ES',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (429,'PR','GO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (430,'PR','MA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (431,'PR','MT',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (432,'PR','MS',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (433,'PR','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (434,'PR','PA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (435,'PR','PB',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (436,'PR','PR',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (437,'PR','PE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (438,'PR','PI',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (439,'PR','RN',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (440,'PR','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (441,'PR','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (442,'PR','RO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (443,'PR','RR',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (444,'PR','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (445,'PR','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (446,'PR','SE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (447,'PR','TO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (448,'PR','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (449,'PE','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (450,'PE','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (451,'PE','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (452,'PE','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (453,'PE','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (454,'PE','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (455,'PE','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (456,'PE','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (457,'PE','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (458,'PE','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (459,'PE','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (460,'PE','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (461,'PE','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (462,'PE','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (463,'PE','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (464,'PE','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (465,'PE','PE',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (466,'PE','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (467,'PE','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (468,'PE','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (469,'PE','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (470,'PE','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (471,'PE','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (472,'PE','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (473,'PE','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (474,'PE','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (475,'PE','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (476,'PE','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (477,'PI','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (478,'PI','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (479,'PI','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (480,'PI','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (481,'PI','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (482,'PI','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (483,'PI','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (484,'PI','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (485,'PI','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (486,'PI','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (487,'PI','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (488,'PI','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (489,'PI','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (490,'PI','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (491,'PI','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (492,'PI','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (493,'PI','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (494,'PI','PI',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (495,'PI','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (496,'PI','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (497,'PI','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (498,'PI','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (499,'PI','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (500,'PI','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (501,'PI','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (502,'PI','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (503,'PI','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (504,'PI','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (505,'RN','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (506,'RN','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (507,'RN','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (508,'RN','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (509,'RN','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (510,'RN','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (511,'RN','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (512,'RN','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (513,'RN','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (514,'RN','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (515,'RN','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (516,'RN','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (517,'RN','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (518,'RN','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (519,'RN','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (520,'RN','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (521,'RN','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (522,'RN','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (523,'RN','RN',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (524,'RN','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (525,'RN','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (526,'RN','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (527,'RN','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (528,'RN','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (529,'RN','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (530,'RN','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (531,'RN','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (532,'RN','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (533,'RS','AC',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (534,'RS','AL',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (535,'RS','AM',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (536,'RS','AP',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (537,'RS','BA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (538,'RS','CE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (539,'RS','DF',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (540,'RS','ES',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (541,'RS','GO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (542,'RS','MA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (543,'RS','MT',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (544,'RS','MS',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (545,'RS','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (546,'RS','PA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (547,'RS','PB',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (548,'RS','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (549,'RS','PE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (550,'RS','PI',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (551,'RS','RN',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (552,'RS','RS',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (553,'RS','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (554,'RS','RO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (555,'RS','RR',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (556,'RS','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (557,'RS','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (558,'RS','SE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (559,'RS','TO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (560,'RS','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (561,'RJ','AC',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (562,'RJ','AL',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (563,'RJ','AM',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (564,'RJ','AP',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (565,'RJ','BA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (566,'RJ','CE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (567,'RJ','DF',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (568,'RJ','ES',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (569,'RJ','GO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (570,'RJ','MA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (571,'RJ','MT',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (572,'RJ','MS',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (573,'RJ','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (574,'RJ','PA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (575,'RJ','PB',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (576,'RJ','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (577,'RJ','PE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (578,'RJ','PI',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (579,'RJ','RN',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (580,'RJ','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (581,'RJ','RJ',19);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (582,'RJ','RO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (583,'RJ','RR',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (584,'RJ','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (585,'RJ','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (586,'RJ','SE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (587,'RJ','TO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (588,'RJ','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (589,'RO','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (590,'RO','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (591,'RO','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (592,'RO','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (593,'RO','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (594,'RO','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (595,'RO','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (596,'RO','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (597,'RO','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (598,'RO','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (599,'RO','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (600,'RO','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (601,'RO','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (602,'RO','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (603,'RO','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (604,'RO','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (605,'RO','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (606,'RO','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (607,'RO','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (608,'RO','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (609,'RO','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (610,'RO','RO',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (611,'RO','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (612,'RO','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (613,'RO','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (614,'RO','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (615,'RO','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (616,'RO','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (617,'RR','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (618,'RR','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (619,'RR','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (620,'RR','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (621,'RR','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (622,'RR','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (623,'RR','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (624,'RR','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (625,'RR','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (626,'RR','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (627,'RR','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (628,'RR','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (629,'RR','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (630,'RR','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (631,'RR','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (632,'RR','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (633,'RR','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (634,'RR','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (635,'RR','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (636,'RR','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (637,'RR','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (638,'RR','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (639,'RR','RR',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (640,'RR','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (641,'RR','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (642,'RR','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (643,'RR','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (644,'RR','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (645,'SC','AC',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (646,'SC','AL',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (647,'SC','AM',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (648,'SC','AP',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (649,'SC','BA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (650,'SC','CE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (651,'SC','DF',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (652,'SC','ES',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (653,'SC','GO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (654,'SC','MA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (655,'SC','MT',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (656,'SC','MS',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (657,'SC','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (658,'SC','PA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (659,'SC','PB',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (660,'SC','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (661,'SC','PE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (662,'SC','PI',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (663,'SC','RN',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (664,'SC','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (665,'SC','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (666,'SC','RO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (667,'SC','RR',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (668,'SC','SC',17);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (669,'SC','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (670,'SC','SE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (671,'SC','TO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (672,'SC','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (673,'SP','AC',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (674,'SP','AL',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (675,'SP','AM',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (676,'SP','AP',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (677,'SP','BA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (678,'SP','CE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (679,'SP','DF',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (680,'SP','ES',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (681,'SP','GO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (682,'SP','MA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (683,'SP','MT',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (684,'SP','MS',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (685,'SP','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (686,'SP','PA',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (687,'SP','PB',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (688,'SP','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (689,'SP','PE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (690,'SP','PI',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (691,'SP','RN',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (692,'SP','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (693,'SP','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (694,'SP','RO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (695,'SP','RR',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (696,'SP','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (697,'SP','SP',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (698,'SP','SE',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (699,'SP','TO',7);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (700,'SP','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (701,'SE','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (702,'SE','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (703,'SE','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (704,'SE','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (705,'SE','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (706,'SE','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (707,'SE','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (708,'SE','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (709,'SE','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (710,'SE','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (711,'SE','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (712,'SE','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (713,'SE','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (714,'SE','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (715,'SE','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (716,'SE','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (717,'SE','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (718,'SE','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (719,'SE','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (720,'SE','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (721,'SE','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (722,'SE','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (723,'SE','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (724,'SE','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (725,'SE','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (726,'SE','SE',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (727,'SE','TO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (728,'SE','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (729,'TO','AC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (730,'TO','AL',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (731,'TO','AM',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (732,'TO','AP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (733,'TO','BA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (734,'TO','CE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (735,'TO','DF',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (736,'TO','ES',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (737,'TO','GO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (738,'TO','MA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (739,'TO','MT',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (740,'TO','MS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (741,'TO','MG',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (742,'TO','PA',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (743,'TO','PB',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (744,'TO','PR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (745,'TO','PE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (746,'TO','PI',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (747,'TO','RN',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (748,'TO','RS',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (749,'TO','RJ',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (750,'TO','RO',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (751,'TO','RR',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (752,'TO','SC',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (753,'TO','SP',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (754,'TO','SE',12);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (755,'TO','TO',18);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (756,'TO','EX',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (757,'EX','AC',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (758,'EX','AL',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (759,'EX','AM',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (760,'EX','AP',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (761,'EX','BA',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (762,'EX','CE',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (763,'EX','DF',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (764,'EX','ES',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (765,'EX','GO',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (766,'EX','MA',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (767,'EX','MT',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (768,'EX','MS',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (769,'EX','MG',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (770,'EX','PA',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (771,'EX','PB',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (772,'EX','PR',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (773,'EX','PE',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (774,'EX','PI',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (775,'EX','RN',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (776,'EX','RS',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (777,'EX','RJ',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (778,'EX','RO',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (779,'EX','RR',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (780,'EX','SC',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (781,'EX','SP',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (782,'EX','SE',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (783,'EX','TO',4);
INSERT INTO PAUFORIGEMXUFDESTINO (id, ufOrigem, ufDestino, aliquotaIcms) values (784,'EX','EX',4);

COMMIT;

INSERT INTO SITABELASSISTEMA (tabelaSistema, descricao, ativo, ordenacao, tipoTabela, nomeCampoCodigo, tipoCampoCodigo, numeroDigitosCodigo, nomeCampoDescricao, adicionarCodigoNaDescricao, nomeCampoIdSeDiferenteCodigo, numeroDigitosCampoId, categoriaTabelaSistema, aplicacaoZoom, nomePublicoZoom, versaoTabela, versaoDados, observacoes) values ('PAUFORIGEMXUFDESTINO', 'UF´s Origem', 1, 30011, 'PA', 'ufOrigem', 'A', 2, 'ufDestino', 0, 'id', 14, 800002, '%SYS_DIR%Versoes\%SYS_VER%\Framework.ecf', 'PesqUFsOrigem', 1, 1, ' '); 

COMMIT;

INSERT INTO SIPERSONALIZACOESCAMPOS (personalizacaoCampo, ordenacao, descricao, ativo, subcategoriaPersonalCampo, tipoCampo, mascara, exibirCampo, tipoArquivo, alteraTipoCampo, alteraExibirCampo, visivelSugestao, modificavelSugestao, obrigatorioSugestao, nomeCampoSugestao, conteudoSugestao, tabelaSistema, observacoes) VALUES (233, 30001001, 'Tipo Venda', 1, 30001, 'N', '4', 'P', 0, 0, 0, 0, 1, 0, 'Tipo Venda', '0', 'PATIPOSVENDA', ' ');

COMMIT;

create or replace FUNCTION FUNC_ADD_DATA_ULTIMA_VENDA(
    p_config_209_filtrarGrupoEcon IN NUMBER,
    p_dataInicial                 IN DATE,
    p_dataFinal                   IN DATE,
    p_produto                     IN NUMBER,
    p_estabelecimento             IN NUMBER)
  RETURN DATE
IS
  v_dataUltimaVenda DATE;
BEGIN
  SELECT MAX(TRUNC(a.dataEntradaSaida))
  INTO v_dataUltimaVenda
  FROM (
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MODOCUMENTOSFISCAIS cab
    JOIN MODOCFISCALXITENS item ON item.idDocumentoFiscal = cab.idDocumentoFiscal
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = item.gradeProduto
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'S'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.validoFaturamento = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MOPREDOCUMENTOS cab
    JOIN MOPREDOCUMXITENS item ON item.preDocumento = cab.preDocumento
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = item.gradeProduto
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'S'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.validoFaturamento = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MODOCUMENTOSFISCAIS cab
    JOIN MODOCFISCALXITENS item ON item.idDocumentoFiscal = cab.idDocumentoFiscal
    JOIN CAGRADEPRODUTOXKITSCOMBOS kit ON kit.gradeProduto = item.gradeProduto
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = kit.gradeProdutoFilho
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'S'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.validoFaturamento = 1
    AND kit.ativo = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MOPREDOCUMENTOS cab
    JOIN MOPREDOCUMXITENS item ON item.preDocumento = cab.preDocumento
    JOIN CAGRADEPRODUTOXKITSCOMBOS kit ON kit.gradeProduto = item.gradeProduto
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = kit.gradeProdutoFilho
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'S'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.validoFaturamento = 1
    AND kit.ativo = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
  ) a
  WHERE p_estabelecimento = 0
  OR p_estabelecimento <> 0
  AND p_config_209_filtrarGrupoEcon = 0
  AND EXISTS (
    SELECT 1
    FROM PAESTABELECIMENTOS est
    JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
    WHERE est.estabelecimento = a.estabelecimento
    AND (est.estabelecimento = p_estabelecimento
      OR est2.estabelecimento = p_estabelecimento))
  OR p_estabelecimento <> 0
  AND p_config_209_filtrarGrupoEcon = 1
  AND EXISTS (
    SELECT 1
    FROM PAESTABELECIMENTOS est
    JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
    JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
    JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
    WHERE est.estabelecimento = a.estabelecimento
    AND (est.estabelecimento = p_estabelecimento
      OR est2.estabelecimento = p_estabelecimento));
  RETURN v_dataUltimaVenda;
END;

/

create or replace FUNCTION FUNC_ADD_DATA_ULTIMA_COMPRA(
    p_config_209_filtrarGrupoEcon IN NUMBER,
    p_dataInicial                 IN DATE,
    p_dataFinal                   IN DATE,
    p_produto                     IN NUMBER,
    p_estabelecimento             IN NUMBER)
  RETURN DATE
IS
  v_dataUltimaCompra DATE;
BEGIN
  SELECT MAX(TRUNC(a.dataEntradaSaida))
  INTO v_dataUltimaCompra
  FROM (
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MODOCUMENTOSFISCAIS cab
    JOIN MODOCFISCALXITENS item ON item.idDocumentoFiscal = cab.idDocumentoFiscal
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = item.gradeProduto
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MOPREDOCUMENTOS cab
    JOIN MOPREDOCUMXITENS item ON item.preDocumento = cab.preDocumento
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = item.gradeProduto
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MODOCUMENTOSFISCAIS cab
    JOIN MODOCFISCALXITENS item ON item.idDocumentoFiscal = cab.idDocumentoFiscal
    JOIN CAGRADEPRODUTOXKITSCOMBOS kit ON kit.gradeProdutoFilho = item.gradeProduto
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = kit.gradeProduto
    WHERE gradProd.produto = p_produto
    AND kit.ativo = 1
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MOPREDOCUMENTOS cab
    JOIN MOPREDOCUMXITENS item ON item.preDocumento = cab.preDocumento
    JOIN CAGRADEPRODUTOXKITSCOMBOS kit ON kit.gradeProdutoFilho = item.gradeProduto
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = kit.gradeProduto
    WHERE gradProd.produto = p_produto
    AND kit.ativo = 1
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
  ) a
  WHERE p_estabelecimento = 0
  OR p_estabelecimento <> 0
  AND p_config_209_filtrarGrupoEcon = 0
  AND EXISTS (
    SELECT 1
    FROM PAESTABELECIMENTOS est
    JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
    WHERE est.estabelecimento = a.estabelecimento
    AND (est.estabelecimento = p_estabelecimento
      OR est2.estabelecimento = p_estabelecimento))
  OR p_estabelecimento <> 0
  AND p_config_209_filtrarGrupoEcon = 1
  AND EXISTS (
    SELECT 1
    FROM PAESTABELECIMENTOS est
    JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
    JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
    JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
    WHERE est.estabelecimento = a.estabelecimento
    AND (est.estabelecimento = p_estabelecimento
      OR est2.estabelecimento = p_estabelecimento));
  RETURN v_dataUltimaCompra;
END;

/

create or replace FUNCTION FUNC_ADD_DATA_PRIMEIRA_COMPRA(
    p_config_209_filtrarGrupoEcon IN NUMBER,
    p_dataInicial                 IN DATE,
    p_dataFinal                   IN DATE,
    p_produto                     IN NUMBER,
    p_estabelecimento             IN NUMBER)
  RETURN DATE
IS
  v_dataPrimeiraCompra DATE;
BEGIN
  SELECT MIN(TRUNC(a.dataEntradaSaida))
  INTO v_dataPrimeiraCompra
  FROM (
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MODOCUMENTOSFISCAIS cab
    JOIN MODOCFISCALXITENS item ON item.idDocumentoFiscal = cab.idDocumentoFiscal
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = item.gradeProduto
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MOPREDOCUMENTOS cab
    JOIN MOPREDOCUMXITENS item ON item.preDocumento = cab.preDocumento
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = item.gradeProduto
    WHERE gradProd.produto = p_produto
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MODOCUMENTOSFISCAIS cab
    JOIN MODOCFISCALXITENS item ON item.idDocumentoFiscal = cab.idDocumentoFiscal
    JOIN CAGRADEPRODUTOXKITSCOMBOS kit ON kit.gradeProdutoFilho = item.gradeProduto
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = kit.gradeProduto
    WHERE gradProd.produto = p_produto
    AND kit.ativo = 1
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
    UNION ALL
    SELECT cab.estabelecimento,
      cab.dataEntradaSaida
    FROM MOPREDOCUMENTOS cab
    JOIN MOPREDOCUMXITENS item ON item.preDocumento = cab.preDocumento
    JOIN CAGRADEPRODUTOXKITSCOMBOS kit ON kit.gradeProdutoFilho = item.gradeProduto
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = kit.gradeProduto
    WHERE gradProd.produto = p_produto
    AND kit.ativo = 1
    AND cab.entradaSaida = 'E'
    AND cab.devolucaoAnulacaoRetorno = 0
    AND cab.atualizaUltimaCompra = 1
    AND TRUNC(cab.dataEntradaSaida) BETWEEN CASE WHEN p_dataInicial IS NULL THEN  TO_DATE ('01/01/1900','DD/MM/YYYY') ELSE p_dataInicial END AND p_dataFinal
  ) a
  WHERE p_estabelecimento = 0
  OR p_estabelecimento <> 0
  AND p_config_209_filtrarGrupoEcon = 0
  AND EXISTS (
    SELECT 1
    FROM PAESTABELECIMENTOS est
    JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
    WHERE est.estabelecimento = a.estabelecimento
    AND (est.estabelecimento = p_estabelecimento
      OR est2.estabelecimento = p_estabelecimento))
  OR p_estabelecimento <> 0
  AND p_config_209_filtrarGrupoEcon = 1
  AND EXISTS (
    SELECT 1
    FROM PAESTABELECIMENTOS est
    JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
    JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
    JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
    WHERE est.estabelecimento = a.estabelecimento
    AND (est.estabelecimento = p_estabelecimento
      OR est2.estabelecimento = p_estabelecimento));
  RETURN v_dataPrimeiraCompra;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_estabelecimento              IN NUMBER,
    p_dataInicial                  IN DATE,
    p_dataFinal                    IN DATE,
    p_item_personalizacao          IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_retornarPrecoBruto           IN NUMBER)
  RETURN NUMBER
IS 
  v_dataInventario  DATE;
  v_precoInventario NUMBER;
  v_preco           NUMBER;
BEGIN
  SELECT
    TO_DATE(SUBSTR(a.ordenacao,1,8),'YYYYMMDD'),
    COALESCE ((TO_NUMBER(SUBSTR(a.ordenacao,9,15)) / 10000000),0)
  INTO
    v_dataInventario,
    v_precoInventario
  FROM (
    SELECT MAX((COALESCE(TO_CHAR(invEst.data,'YYYYMMDD'),'19000101')
      || LPAD((itemEst.precoUnitarioUltimaCompra * 10000000),15,'0'))) ordenacao
    FROM MOINVENTARIOESTOQUEXITENS itemEst
    JOIN MOINVENTARIOSESTOQUE invEst ON invEst.inventarioEstoque = itemEst.inventarioEstoque
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = itemEst.gradeProduto
    JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
    WHERE itemEst.precoUnitarioUltimaCompra <> 0
    AND gradProd.produto = p_gradProd_produto
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_gradProd_cor = 0
      OR gradProd.cor = p_gradProd_cor)
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_gradProd_tamanho = ''
      OR p_gradProd_tamanho = ' '
      OR gradProd.tamanho = p_gradProd_tamanho)
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_item_personalizacao = 0
      OR itemEst.personalizacao = p_item_personalizacao)
    AND invEst.data >= CASE
        WHEN NOT(p_dataInicial IS NULL)
        THEN TRUNC(p_dataInicial)
        ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
      END
    AND invEst.data < TRUNC(p_dataFinal) + CASE WHEN invEst.motivoInventarioEstoque = '01' THEN 1 ELSE 0 END) a;
  SELECT COALESCE ((
    SELECT TO_NUMBER(SUBSTR(MAX (a.dataPreco),9,15)) / 10000000
    FROM (
      SELECT COALESCE(TO_CHAR(doc.dataEntradaSaida,'YYYYMMDD'),'00000000')
        || LPAD(((CASE WHEN COUNT (1) = 1 OR SUM(item.quantidade) = 0 THEN MAX(item.precoUnitario) ELSE ROUND((SUM(item.valorProdutoServico) / SUM(item.quantidade)),7) END
        - CASE WHEN p_retornarPrecoBruto = 1 OR SUM(item.quantidade) = 0 THEN 0 ELSE ROUND(SUM(item.valorDescontoTotal) / SUM(item.quantidade),7) END
        ) * 10000000),15,'0') dataPreco,
        CASE WHEN COUNT (1) = 1 OR SUM(item.quantidade) = 0 THEN MAX(item.precoUnitario) ELSE ROUND((SUM(item.valorProdutoServico) / SUM(item.quantidade)),7) END
        - CASE WHEN p_retornarPrecoBruto = 1 OR SUM(item.quantidade) = 0 THEN 0 ELSE ROUND(SUM(item.valorDescontoTotal) / SUM(item.quantidade),7) END preco
      FROM MODOCFISCALXITENS item
      JOIN CAGRADESPRODUTO grad ON grad.gradeProduto = item.gradeProduto
      JOIN MODOCUMENTOSFISCAIS doc ON doc.idDocumentoFiscal = item.idDocumentoFiscal
      WHERE item.cancelado = 0
      AND grad.produto = p_gradProd_produto
      AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_cor = 0 OR grad.cor = p_gradProd_cor)
      AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_tamanho = '' OR p_gradProd_tamanho = ' ' OR grad.tamanho = p_gradProd_tamanho)
      AND (p_config_362_calcCustoPorGrade = 0 OR p_item_personalizacao = 0 OR item.personalizacao = p_item_personalizacao)
      AND doc.entradaSaida = 'E'
      AND doc.devolucaoAnulacaoRetorno = 0
      AND doc.situacaoDocumentoFiscal IN (21,22,23)
      AND doc.atualizaUltimaCompra = 1
      AND doc.dataEntradaSaida >= CASE
          WHEN NOT(v_dataInventario IS NULL)
          THEN v_dataInventario + 1
          WHEN NOT(p_dataInicial IS NULL)
          THEN TRUNC(p_dataInicial)
          ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
        END
      AND doc.dataEntradaSaida < TRUNC(p_dataFinal)+1
      AND (p_estabelecimento = 0
        OR p_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 0
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
          WHERE est.estabelecimento = doc.estabelecimento
          AND (est.estabelecimento = p_estabelecimento
            OR est2.estabelecimento = p_estabelecimento))
        OR p_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 1
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
          JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
          WHERE est.estabelecimento = doc.estabelecimento
          AND (est.estabelecimento = p_estabelecimento
            OR est2.estabelecimento = p_estabelecimento)))
      GROUP BY COALESCE(TO_CHAR(doc.dataEntradaSaida,'YYYYMMDD'),'00000000'), item.idDocumentoFiscal
      UNION ALL
      SELECT COALESCE(TO_CHAR(doc.dataEntradaSaida,'YYYYMMDD'),'00000000')
        || LPAD(((CASE WHEN COUNT (1) = 1 OR SUM(item.quantidade) = 0 THEN MAX(item.precoUnitario) ELSE ROUND((SUM(item.valorProdutoServico) / SUM(item.quantidade)),7) END
        - CASE WHEN p_retornarPrecoBruto = 1 OR SUM(item.quantidade) = 0 THEN 0 ELSE ROUND(SUM(item.valorDescontoTotal) / SUM(item.quantidade),7) END
        ) * 10000000),15,'0') dataPreco,
        CASE WHEN COUNT (1) = 1 OR SUM(item.quantidade) = 0 THEN MAX(item.precoUnitario) ELSE ROUND((SUM(item.valorProdutoServico) / SUM(item.quantidade)),7) END
        - CASE WHEN p_retornarPrecoBruto = 1 OR SUM(item.quantidade) = 0 THEN 0 ELSE ROUND(SUM(item.valorDescontoTotal) / SUM(item.quantidade),7) END preco
      FROM MOPREDOCUMXITENS item
      JOIN CAGRADESPRODUTO grad ON grad.gradeProduto = item.gradeProduto
      JOIN MOPREDOCUMENTOS doc ON doc.preDocumento = item.preDocumento
      WHERE item.cancelado = 0
      AND grad.produto = p_gradProd_produto
      AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_cor = 0 OR grad.cor = p_gradProd_cor)
      AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_tamanho = '' OR p_gradProd_tamanho = ' ' OR grad.tamanho = p_gradProd_tamanho)
      AND (p_config_362_calcCustoPorGrade = 0 OR p_item_personalizacao = 0 OR item.personalizacao = p_item_personalizacao)
      AND doc.entradaSaida = 'E'
      AND doc.devolucaoAnulacaoRetorno = 0
      AND doc.statusPreDocumento = 'A'
      AND doc.atualizaUltimaCompra = 1
      AND doc.dataEntradaSaida >= CASE
          WHEN NOT(v_dataInventario IS NULL)
          THEN v_dataInventario + 1
          WHEN NOT(p_dataInicial IS NULL)
          THEN TRUNC(p_dataInicial)
          ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
        END
      AND doc.dataEntradaSaida < TRUNC(p_dataFinal) + 1
      AND (p_estabelecimento = 0
        OR p_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 0
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
          WHERE est.estabelecimento = doc.estabelecimento
          AND (est.estabelecimento = p_estabelecimento
            OR est2.estabelecimento = p_estabelecimento))
        OR p_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 1
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
          JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
          WHERE est.estabelecimento = doc.estabelecimento
          AND (est.estabelecimento = p_estabelecimento
            OR est2.estabelecimento = p_estabelecimento)))
      GROUP BY COALESCE(TO_CHAR(doc.dataEntradaSaida,'YYYYMMDD'),'00000000'), item.preDocumento
    ) a
    WHERE a.preco > 0
  ),0)
  INTO v_preco
  FROM DUAL;
  IF v_preco = 0 THEN
    v_preco := v_precoInventario;
  END IF;
  IF v_preco = 0 AND (p_dataInicial IS NULL OR p_dataInicial = TO_DATE ('01/01/1900','DD/MM/YYYY')) THEN
    SELECT COALESCE(MAX(preco.precoUltimaCompraInicial),0)
    INTO v_preco      
    FROM CAPRODUTOXESTABELECIMENTO preco
    WHERE preco.produto = p_gradProd_produto
    AND preco.estabelecimento = p_estabelecimento
    AND preco.ativo = 1;
    IF p_estabelecimento <> 0 AND v_preco = 0 THEN
      SELECT COALESCE(MAX(preco.precoUltimaCompraInicial),0)
      INTO v_preco      
      FROM CAPRODUTOXESTABELECIMENTO preco
      WHERE preco.produto = p_gradProd_produto
      AND preco.ativo = 1
      AND (p_estabelecimento = 0
        OR p_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 0
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
          WHERE est.estabelecimento = preco.estabelecimento
          AND (est.estabelecimento = p_estabelecimento
            OR est2.estabelecimento = p_estabelecimento))
        OR p_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 1
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
          JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
          WHERE est.estabelecimento = preco.estabelecimento
          AND (est.estabelecimento = p_estabelecimento
            OR est2.estabelecimento = p_estabelecimento)));
    END IF;
    IF p_estabelecimento <> 0 AND v_preco = 0 THEN
      SELECT COALESCE(MAX(preco.precoUltimaCompraInicial),0)
      INTO v_preco      
      FROM CAPRODUTOXESTABELECIMENTO preco
      WHERE preco.produto = p_gradProd_produto
      AND preco.estabelecimento = 0
      AND preco.ativo = 1;
    END IF;
  END IF;
  RETURN v_preco;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_PRECO_FORMACAO(
    p_config_209_filtrarGrupoEcon IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_estabelecimento             IN NUMBER,
    p_dataInicial                 IN DATE,
    p_dataFinal                   IN DATE,
    p_item_personalizacao         IN NUMBER,
    p_gradProd_produto            IN NUMBER,
    p_gradProd_cor                IN NUMBER,
    p_gradProd_tamanho            IN VARCHAR)
  RETURN NUMBER
IS
  v_dataInventario  DATE;
  v_precoInventario NUMBER;
  v_preco           NUMBER;
BEGIN
  SELECT
    TO_DATE(SUBSTR(a.ordenacao,1,8),'YYYYMMDD'),
    COALESCE ((TO_NUMBER(SUBSTR(a.ordenacao,9,15)) / 10000000),0)
  INTO
    v_dataInventario,
    v_precoInventario
  FROM (
    SELECT MAX((COALESCE(TO_CHAR(invEst.data,'YYYYMMDD'),'19000101')
      || LPAD((itemEst.precoCustoUltimaFormacao * 10000000),15,'0'))) ordenacao
    FROM MOINVENTARIOESTOQUEXITENS itemEst
    JOIN MOINVENTARIOSESTOQUE invEst ON invEst.inventarioEstoque = itemEst.inventarioEstoque
    JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = itemEst.gradeProduto
    JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
    WHERE itemEst.precoCustoUltimaFormacao <> 0
    AND gradProd.produto = p_gradProd_produto
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_gradProd_cor = 0
      OR gradProd.cor = p_gradProd_cor)
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_gradProd_tamanho = ''
      OR p_gradProd_tamanho = ' '
      OR gradProd.tamanho = p_gradProd_tamanho)
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_item_personalizacao = 0
      OR itemEst.personalizacao = p_item_personalizacao)
    AND invEst.data >= CASE
        WHEN NOT(p_dataInicial IS NULL)
        THEN TRUNC(p_dataInicial)
        ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
      END
    AND invEst.data < TRUNC(p_dataFinal) + CASE WHEN invEst.motivoInventarioEstoque = '01' THEN 1 ELSE 0 END) a;
  SELECT COALESCE ((TO_NUMBER(SUBSTR(a.ordenacao,9,15)) / 10000000),0)
  INTO v_preco
  FROM (
    SELECT MAX((COALESCE(TO_CHAR(data,'YYYYMMDD'),'19000101')
      || LPAD((novoPrecoCusto * 10000000),15,'0'))) ordenacao
    FROM CAPRODUTOXCUSTOS
    WHERE produto = p_gradProd_produto
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_gradProd_cor = 0
      OR cor = p_gradProd_cor)
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_gradProd_tamanho = ''
      OR p_gradProd_tamanho = ' '
      OR tamanho = p_gradProd_tamanho)
    AND (p_config_362_calcCustoPorGrade = 0
      OR p_item_personalizacao = 0
      OR personalizacao = p_item_personalizacao)
    AND data >= CASE
          WHEN NOT(v_dataInventario IS NULL)
          THEN v_dataInventario + 1
          WHEN NOT(p_dataInicial IS NULL)
          THEN TRUNC(p_dataInicial)
          ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
        END
    AND data < TRUNC(p_dataFinal) + 1
    AND ativo = 1) a;
  IF v_preco = 0 THEN
    v_preco := v_precoInventario;
  END IF;
  IF v_preco = 0 AND (p_dataInicial IS NULL OR p_dataInicial = TO_DATE ('01/01/1900','DD/MM/YYYY')) THEN
    SELECT COALESCE(MAX(preco.precoCustoInicial),0)
    INTO v_preco      
    FROM CAPRODUTOXESTABELECIMENTO preco
    WHERE preco.produto = p_gradProd_produto
    AND preco.estabelecimento = p_estabelecimento
    AND preco.ativo = 1;
    IF p_estabelecimento <> 0 AND v_preco = 0 THEN
      SELECT COALESCE(MAX(preco.precoCustoInicial),0)
      INTO v_preco      
      FROM CAPRODUTOXESTABELECIMENTO preco
      JOIN PAESTABELECIMENTOS est ON est.estabelecimento = preco.estabelecimento
      JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
      JOIN PAESTABELECIMENTOS est2 ON est2.estabelecimento = p_estabelecimento
      JOIN CAPESSOAS pessEst2 ON pessEst2.pessoa = est2.pessoaEstabelecimento
      WHERE preco.produto = p_gradProd_produto
      AND preco.ativo = 1
      AND (p_config_209_filtrarGrupoEcon = 0 AND est.pessoaEstabelecimento = est2.pessoaEstabelecimento
        OR p_config_209_filtrarGrupoEcon = 1 AND pessEst.grupoEconomico = pessEst2.grupoEconomico);
    END IF;  
    IF p_estabelecimento <> 0 AND v_preco = 0 THEN
      SELECT COALESCE(MAX(preco.precoCustoInicial),0)
      INTO v_preco      
      FROM CAPRODUTOXESTABELECIMENTO preco
      WHERE preco.produto = p_gradProd_produto
      AND preco.estabelecimento = 0
      AND preco.ativo = 1;
    END IF;
  END IF;
  IF v_preco = 0 THEN
    SELECT
      TO_DATE(SUBSTR(a.ordenacao,1,8),'YYYYMMDD'),
      COALESCE ((TO_NUMBER(SUBSTR(a.ordenacao,9,15)) / 10000000),0)
    INTO
      v_dataInventario,
      v_precoInventario
    FROM (
      SELECT MAX((COALESCE(TO_CHAR(invEst.data,'YYYYMMDD'),'19000101')
        || LPAD((itemEst.precoUnitarioUltimaCompra * 10000000),15,'0'))) ordenacao
      FROM MOINVENTARIOESTOQUEXITENS itemEst
      JOIN MOINVENTARIOSESTOQUE invEst ON invEst.inventarioEstoque = itemEst.inventarioEstoque
      JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = itemEst.gradeProduto
      JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
      WHERE itemEst.precoUnitarioUltimaCompra <> 0
      AND gradProd.produto = p_gradProd_produto
      AND (p_config_362_calcCustoPorGrade = 0
        OR p_gradProd_cor = 0
        OR gradProd.cor = p_gradProd_cor)
      AND (p_config_362_calcCustoPorGrade = 0
        OR p_gradProd_tamanho = ''
        OR p_gradProd_tamanho = ' '
        OR gradProd.tamanho = p_gradProd_tamanho)
      AND (p_config_362_calcCustoPorGrade = 0
        OR p_item_personalizacao = 0
        OR itemEst.personalizacao = p_item_personalizacao)
      AND invEst.data >= CASE
          WHEN NOT(p_dataInicial IS NULL)
          THEN TRUNC(p_dataInicial)
          ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
        END
      AND invEst.data < TRUNC(p_dataFinal) + CASE WHEN invEst.motivoInventarioEstoque = '01' THEN 1 ELSE 0 END) a;
    SELECT COALESCE ((
      SELECT TO_NUMBER(SUBSTR(MAX (a.dataPreco),9,15)) / 10000000
      FROM (
        SELECT COALESCE(TO_CHAR(doc.dataEntradaSaida,'YYYYMMDD'),'00000000')
          || LPAD(((item.precoUnitario
          - CASE WHEN item.quantidade = 0 THEN 0 ELSE ROUND(item.valorDescontoTotal / item.quantidade,7) END
          ) * 10000000),15,'0') dataPreco
        FROM MODOCFISCALXITENS item
        JOIN CAGRADESPRODUTO grad ON grad.gradeProduto = item.gradeProduto
        JOIN MODOCUMENTOSFISCAIS doc ON doc.idDocumentoFiscal = item.idDocumentoFiscal
        WHERE item.cancelado = 0
        AND grad.produto = p_gradProd_produto
        AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_cor = 0 OR cor = p_gradProd_cor)
        AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_tamanho = '' OR p_gradProd_tamanho = ' ' OR tamanho = p_gradProd_tamanho)
        AND (p_config_362_calcCustoPorGrade = 0 OR p_item_personalizacao = 0 OR personalizacao = p_item_personalizacao)
        AND doc.entradaSaida = 'E'
        AND doc.devolucaoAnulacaoRetorno = 0
        AND doc.situacaoDocumentoFiscal IN (21,22,23)
        AND doc.atualizaUltimaCompra = 1
        AND doc.dataEntradaSaida >= CASE
            WHEN NOT(v_dataInventario IS NULL)
            THEN v_dataInventario + 1
            WHEN NOT(p_dataInicial IS NULL)
            THEN TRUNC(p_dataInicial)
            ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
          END
        AND doc.dataEntradaSaida < TRUNC(p_dataFinal) + 1
        AND (p_estabelecimento = 0
          OR p_estabelecimento <> 0
          AND p_config_209_filtrarGrupoEcon = 0
          AND EXISTS (
            SELECT 1
            FROM PAESTABELECIMENTOS est
            JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
            WHERE est.estabelecimento = doc.estabelecimento
            AND (est.estabelecimento = p_estabelecimento
              OR est2.estabelecimento = p_estabelecimento))
          OR p_estabelecimento <> 0
          AND p_config_209_filtrarGrupoEcon = 1
          AND EXISTS (
            SELECT 1
            FROM PAESTABELECIMENTOS est
            JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
            JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
            JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
            WHERE est.estabelecimento = doc.estabelecimento
            AND (est.estabelecimento = p_estabelecimento
              OR est2.estabelecimento = p_estabelecimento)))
        UNION ALL
        SELECT COALESCE(TO_CHAR(doc.dataEntradaSaida,'YYYYMMDD'),'00000000')
          || LPAD(((item.precoUnitario
          - CASE WHEN item.quantidade = 0 THEN 0 ELSE ROUND(item.valorDescontoTotal / item.quantidade,7) END
          ) * 10000000),15,'0') dataPreco
        FROM MOPREDOCUMXITENS item
        JOIN CAGRADESPRODUTO grad ON grad.gradeProduto = item.gradeProduto
        JOIN MOPREDOCUMENTOS doc ON doc.preDocumento = item.preDocumento
        WHERE item.cancelado = 0
        AND grad.produto = p_gradProd_produto
        AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_cor = 0 OR cor = p_gradProd_cor)
        AND (p_config_362_calcCustoPorGrade = 0 OR p_gradProd_tamanho = '' OR p_gradProd_tamanho = ' ' OR tamanho = p_gradProd_tamanho)
        AND (p_config_362_calcCustoPorGrade = 0 OR p_item_personalizacao = 0 OR personalizacao = p_item_personalizacao)
        AND doc.entradaSaida = 'E'
        AND doc.devolucaoAnulacaoRetorno = 0
        AND doc.statusPreDocumento = 'A'
        AND doc.atualizaUltimaCompra = 1
        AND doc.dataEntradaSaida >= CASE
            WHEN NOT(v_dataInventario IS NULL)
            THEN v_dataInventario + 1
            WHEN NOT(p_dataInicial IS NULL)
            THEN TRUNC(p_dataInicial)
            ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
          END
        AND doc.dataEntradaSaida < TRUNC(p_dataFinal) + 1
        AND (p_estabelecimento = 0
          OR p_estabelecimento <> 0
          AND p_config_209_filtrarGrupoEcon = 0
          AND EXISTS (
            SELECT 1
            FROM PAESTABELECIMENTOS est
            JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
            WHERE est.estabelecimento = doc.estabelecimento
            AND (est.estabelecimento = p_estabelecimento
              OR est2.estabelecimento = p_estabelecimento))
          OR p_estabelecimento <> 0
          AND p_config_209_filtrarGrupoEcon = 1
          AND EXISTS (
            SELECT 1
            FROM PAESTABELECIMENTOS est
            JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
            JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
            JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
            WHERE est.estabelecimento = doc.estabelecimento
            AND (est.estabelecimento = p_estabelecimento
              OR est2.estabelecimento = p_estabelecimento)))) a),0)
    INTO v_preco
    FROM DUAL;    
    IF v_preco = 0 THEN
      v_preco := v_precoInventario;
    END IF;
    IF v_preco = 0 AND (p_dataInicial IS NULL OR p_dataInicial = TO_DATE ('01/01/1900','DD/MM/YYYY')) THEN
      SELECT COALESCE(MAX(preco.precoUltimaCompraInicial),0)
      INTO v_preco      
      FROM CAPRODUTOXESTABELECIMENTO preco
      WHERE preco.produto = p_gradProd_produto
      AND preco.estabelecimento = p_estabelecimento
      AND preco.ativo = 1;  
      IF p_estabelecimento <> 0 AND v_preco = 0 THEN
        SELECT COALESCE(MAX(preco.precoUltimaCompraInicial),0)
        INTO v_preco      
        FROM CAPRODUTOXESTABELECIMENTO preco
        WHERE preco.produto = p_gradProd_produto
        AND preco.ativo = 1
        AND (p_config_209_filtrarGrupoEcon = 0
          AND EXISTS (
            SELECT 1
            FROM PAESTABELECIMENTOS est
            JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
            WHERE est.estabelecimento = preco.estabelecimento
            AND (est.estabelecimento = p_estabelecimento
              OR est2.estabelecimento = p_estabelecimento))
          OR p_config_209_filtrarGrupoEcon = 1
          AND EXISTS (
            SELECT 1
            FROM PAESTABELECIMENTOS est
            JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
            JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
            JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
            WHERE est.estabelecimento = preco.estabelecimento
            AND (est.estabelecimento = p_estabelecimento
              OR est2.estabelecimento = p_estabelecimento)));
      END IF;
      IF p_estabelecimento <> 0 AND v_preco = 0 THEN
        SELECT COALESCE(MAX(preco.precoUltimaCompraInicial),0)
        INTO v_preco      
        FROM CAPRODUTOXESTABELECIMENTO preco
        WHERE preco.produto = p_gradProd_produto
        AND preco.estabelecimento = 0
        AND preco.ativo = 1;
      END IF;
    END IF;
  END IF;
  RETURN v_preco;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_PRECO_KIT(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR
  )
  RETURN NUMBER
IS 
  v_preco      NUMBER;
  v_precoFilho NUMBER;

  CURSOR c_kit
  IS 
    SELECT 
      kit.quantidade,
      gradProdFilho.produto,
      gradProdFilho.cor,
      gradProdFilho.tamanho,
      prodFilho.controleEstoque
    FROM CAGRADEPRODUTOXKITSCOMBOS kit
    JOIN CAGRADESPRODUTO gradProdPai ON gradProdPai.gradeProduto = kit.gradeProduto
    JOIN CAGRADESPRODUTO gradProdFilho ON gradProdFilho.gradeProduto = kit.gradeProdutoFilho
    JOIN CAPRODUTOS prodFilho ON prodFilho.produto = gradProdFilho.produto
    WHERE gradProdPai.produto = p_gradProd_produto
    AND kit.gradeProdutoFilho > 0
    AND kit.ativo = 1
    AND kit.quantidade > 0
    AND kit.gradeProduto <> kit.gradeProdutoFilho;

BEGIN
  v_preco := 0;
  FOR kit IN c_kit LOOP
    v_precoFilho := 0;
    -- A Tabela de Preço Anterior
    IF p_tipoPreco = 'A' THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_ANTERIOR(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        kit.quantidade * p_item_quantidade,
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_manterPreco,
        p_tabelaPreco);
    -- C Custo Médio da Venda (CMV)
    ELSIF p_tipoPreco = 'C' AND NOT(kit.controleEstoque IN (3,4)) THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        0,
        0);
    -- F Formação Preço (Custo)
    ELSIF p_tipoPreco = 'F' THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_FORMACAO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho);
    -- G Custo Médio da Venda Gerencial (CMV)
    ELSIF p_tipoPreco = 'G' AND NOT(kit.controleEstoque IN (3,4)) THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        1,
        0);
    -- P Preço de Custo (Último Custo)
    ELSIF p_tipoPreco = 'P' THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_ULT_CUSTO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante);
    -- T Tabela de Preço
    ELSIF p_tipoPreco = 'T' THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_TABELA(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        kit.quantidade * p_item_quantidade,
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_manterPreco,
        p_tabelaPreco);
    -- U Última Compra
    ELSIF p_tipoPreco = 'U' THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        0);
    -- 2 Última Compra Bruto
    ELSIF p_tipoPreco = '2' THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        1);
    END IF;
    -- 3 = Combo / 4 = Kit
    IF v_precoFilho = 0 AND kit.controleEstoque IN (3,4) THEN
      v_precoFilho := FUNC_ADD_BUSCA_PRECO_KIT(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        kit.quantidade * p_item_quantidade,
        kit.produto,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco);
    END IF;
    IF v_precoFilho <> 0 THEN
      v_preco := v_preco + kit.quantidade * v_precoFilho;
    ELSE
      v_preco := 0;
    END IF;        
    EXIT WHEN v_preco = 0;
  END LOOP;
  RETURN v_preco;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_PRECO_PROTIN(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR,
    p_tinta_gradeProduto           IN NUMBER,
    p_tinta_quantidade             IN NUMBER,
    p_ini_preco                    IN NUMBER
  )
  RETURN NUMBER
IS
  v_preco      NUMBER;
  v_precoTinta NUMBER;

  CURSOR c_prod
  IS 
    SELECT 
      gradProd.produto,
      gradProd.cor,
      gradProd.tamanho,
      prod.controleEstoque
    FROM CAGRADESPRODUTO gradProd
    JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
    WHERE gradProd.gradeProduto = p_tinta_gradeProduto;

BEGIN
  v_preco := p_ini_preco;

  FOR prod IN c_prod LOOP
    v_precoTinta := 0;
    -- A Tabela de Preço Anterior
    IF p_tipoPreco = 'A' THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_ANTERIOR(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_tinta_quantidade * p_item_quantidade,
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_manterPreco,
        p_tabelaPreco);
    -- C Custo Médio da Venda (CMV)
    ELSIF p_tipoPreco = 'C' AND NOT(prod.controleEstoque IN (3,4)) THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        0,
        0);
    -- F Formação Preço (Custo)
    ELSIF p_tipoPreco = 'F' THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_FORMACAO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho);
    -- G Custo Médio da Venda Gerencial (CMV)
    ELSIF p_tipoPreco = 'G' AND NOT(prod.controleEstoque IN (3,4)) THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        1,
        0);
    -- P Preço de Custo (Último Custo)
    ELSIF p_tipoPreco = 'P' THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_ULT_CUSTO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante);
    -- T Tabela de Preço
    ELSIF p_tipoPreco = 'T' THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_TABELA(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_tinta_quantidade * p_item_quantidade,
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_manterPreco,
        p_tabelaPreco);
    -- U Última Compra
    ELSIF p_tipoPreco = 'U' THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        0);
    -- 2 Última Compra Bruto
    ELSIF p_tipoPreco = '2' THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, -- p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        1);
    END IF;
    -- 3 = Combo / 4 = Kit
    IF v_precoTinta = 0 AND prod.controleEstoque IN (3,4) THEN
      v_precoTinta := FUNC_ADD_BUSCA_PRECO_KIT(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_tinta_quantidade * p_item_quantidade,
        prod.produto,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco);
    END IF;
    v_preco := v_preco + p_tinta_quantidade * v_precoTinta;
  END LOOP;
  RETURN v_preco;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_PRECO_TINTA(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_idFormulaTinta          IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR)
  RETURN NUMBER
IS
  v_preco NUMBER;

  CURSOR c_formula
  IS 
    SELECT 
      a.idBaseTinta,
      base.gradeProduto,
      a.idColoranteTintaA,
      a.quantidadeA,
      colA.gradeProduto gradeProdutoA,
      a.idColoranteTintaB,
      a.quantidadeB,
      colB.gradeProduto gradeProdutoB,
      a.idColoranteTintaC,
      a.quantidadeC,
      colC.gradeProduto gradeProdutoC,
      a.idColoranteTintaD,
      a.quantidadeD,
      colD.gradeProduto gradeProdutoD,
      a.idColoranteTintaE,
      a.quantidadeE,
      colE.gradeProduto gradeProdutoE,
      a.idColoranteTintaF,
      a.quantidadeF,
      colF.gradeProduto gradeProdutoF,
      a.idColoranteTintaG,
      a.quantidadeG,
      colG.gradeProduto gradeProdutoG,
      a.idColoranteTintaH,
      a.quantidadeH,
      colH.gradeProduto gradeProdutoH,
      a.idColoranteTintaI,
      a.quantidadeI,
      colI.gradeProduto gradeProdutoI,
      a.idColoranteTintaJ,
      a.quantidadeJ,
      colJ.gradeProduto gradeProdutoJ,
      a.idColoranteTintaK,
      a.quantidadeK,
      colK.gradeProduto gradeProdutoK,
      a.idColoranteTintaL,
      a.quantidadeL,
      colL.gradeProduto gradeProdutoL,
      a.idColoranteTintaM,
      a.quantidadeM,
      colM.gradeProduto gradeProdutoM,
      a.idColoranteTintaN,
      a.quantidadeN,
      colN.gradeProduto gradeProdutoN,
      a.idColoranteTintaO,
      a.quantidadeO,
      colO.gradeProduto gradeProdutoO
    FROM CAFORMULASTINTAS a 
    JOIN CABASESTINTAS base ON base.idBaseTinta = a.idBaseTinta
    JOIN CACOLORANTESTINTAS colA ON colA.idColoranteTinta = a.idColoranteTintaA
    JOIN CACOLORANTESTINTAS colB ON colB.idColoranteTinta = a.idColoranteTintaB
    JOIN CACOLORANTESTINTAS colC ON colC.idColoranteTinta = a.idColoranteTintaC
    JOIN CACOLORANTESTINTAS colD ON colD.idColoranteTinta = a.idColoranteTintaD
    JOIN CACOLORANTESTINTAS colE ON colE.idColoranteTinta = a.idColoranteTintaE
    JOIN CACOLORANTESTINTAS colF ON colF.idColoranteTinta = a.idColoranteTintaF
    JOIN CACOLORANTESTINTAS colG ON colG.idColoranteTinta = a.idColoranteTintaG
    JOIN CACOLORANTESTINTAS colH ON colH.idColoranteTinta = a.idColoranteTintaH
    JOIN CACOLORANTESTINTAS colI ON colI.idColoranteTinta = a.idColoranteTintaI
    JOIN CACOLORANTESTINTAS colJ ON colJ.idColoranteTinta = a.idColoranteTintaJ
    JOIN CACOLORANTESTINTAS colK ON colK.idColoranteTinta = a.idColoranteTintaK
    JOIN CACOLORANTESTINTAS colL ON colL.idColoranteTinta = a.idColoranteTintaL
    JOIN CACOLORANTESTINTAS colM ON colM.idColoranteTinta = a.idColoranteTintaM
    JOIN CACOLORANTESTINTAS colN ON colN.idColoranteTinta = a.idColoranteTintaN
    JOIN CACOLORANTESTINTAS colO ON colO.idColoranteTinta = a.idColoranteTintaO
    WHERE a.idFormulaTinta = p_item_idFormulaTinta
    AND a.idBaseTinta > 0
    AND base.gradeProduto > 0;

BEGIN
  v_preco := 0;

  FOR formula IN c_formula LOOP
    v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
      p_config_209_filtrarGrupoEcon,
      p_config_362_calcCustoPorGrade,
      p_perfilUsuarioLogado,
      p_usuarioLogado,
      p_cab_entradaSaida,
      p_cab_devolucaoAnulacaoRetorno,
      p_cab_estabelecimento,
      p_cab_dataPrecoInicial,
      p_cab_dataPrecoFinal,
      p_cab_pessoa,
      p_modDoc_capituloNaturezaFisc,
      p_endPessEst_uf,
      p_endPess_uf,
      p_item_vendedor,
      p_item_personalizacao,
      p_item_localEstoque,
      p_item_pessoaParticipante,
      p_item_quantidade,
      p_locEst_indicadorPropPosseIt,
      p_manterPreco,
      p_tipoPreco,
      p_tabelaPreco,
      formula.gradeProduto,
      1, --p_tinta_quantidade
      v_preco);
    IF formula.idColoranteTintaA > 0 AND formula.gradeProdutoA > 0 AND formula.quantidadeA > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoA,
        formula.quantidadeA / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaB > 0 AND formula.gradeProdutoB > 0 AND formula.quantidadeB > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoB,
        formula.quantidadeB / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaC > 0 AND formula.gradeProdutoC > 0 AND formula.quantidadeC > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoC,
        formula.quantidadeC / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaD > 0 AND formula.gradeProdutoD > 0 AND formula.quantidadeD > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoD,
        formula.quantidadeD / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaE > 0 AND formula.gradeProdutoE > 0 AND formula.quantidadeE > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoE,
        formula.quantidadeE / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaF > 0 AND formula.gradeProdutoF > 0 AND formula.quantidadeF > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoF,
        formula.quantidadeF / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaG > 0 AND formula.gradeProdutoG > 0 AND formula.quantidadeG > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoG,
        formula.quantidadeG / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaH > 0 AND formula.gradeProdutoH > 0 AND formula.quantidadeH > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoH,
        formula.quantidadeH / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaI > 0 AND formula.gradeProdutoI > 0 AND formula.quantidadeI > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoI,
        formula.quantidadeI / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaJ > 0 AND formula.gradeProdutoJ > 0 AND formula.quantidadeJ > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoJ,
        formula.quantidadeJ / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaK > 0 AND formula.gradeProdutoK > 0 AND formula.quantidadeK > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoK,
        formula.quantidadeK / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaL > 0 AND formula.gradeProdutoL > 0 AND formula.quantidadeL > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoL,
        formula.quantidadeL / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaM > 0 AND formula.gradeProdutoM > 0 AND formula.quantidadeM > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoM,
        formula.quantidadeM / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaN > 0 AND formula.gradeProdutoN > 0 AND formula.quantidadeN > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoN,
        formula.quantidadeN / 900, --p_tinta_quantidade
        v_preco);
    END IF;
    IF formula.idColoranteTintaO > 0 AND formula.gradeProdutoO > 0 AND formula.quantidadeO > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoO,
        formula.quantidadeO / 900, --p_tinta_quantidade
        v_preco);
    END IF;
  END LOOP;
  RETURN v_preco;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_PRECO(
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPreco                IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_idFormulaTinta          IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR
  )
  RETURN NUMBER
IS 
  v_preco NUMBER;

BEGIN
  v_preco := 0;
  IF p_gradProd_produto > 0 AND p_tipoPreco <> 'I' THEN
    IF p_prod_controleEstoque = 12 AND p_item_idFormulaTinta > 0 THEN
      v_preco := FUNC_ADD_BUSCA_PRECO_TINTA(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        'S', --p_cab_entradaSaida
        0, --p_cab_devolucaoAnulacaoRetorno
        p_cab_estabelecimento,
        TO_DATE ('01/01/1900','DD/MM/YYYY'), -- p_cab_dataPrecoInicial
        p_cab_dataPreco, --p_cab_dataPrecoFinal
        p_cab_pessoa,
        1, --p_modDoc_capituloNaturezaFisc
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_idFormulaTinta,
        0, --p_item_personalizacao
        0, --p_item_localEstoque
        0, --p_item_pessoaParticipante
        1, --p_quantidade
        '0', --p_locEst_indicadorPropPosseiT
        CASE WHEN (p_tipoPreco= '' OR p_tipoPreco= ' ' OR p_tipoPreco= 'T' AND (p_tabelaPreco = '' OR p_tabelaPreco = ' ')) THEN 0 ELSE 1 END,
        p_tipoPreco,
        p_tabelaPreco);
    ELSE
      -- A Tabela de Preço Anterior
      IF p_tipoPreco = 'A' THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_ANTERIOR(
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          'S', --p_cab_entradaSaida
          0, --p_cab_devolucaoAnulacaoRetorno
          p_cab_estabelecimento,
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_cab_pessoa,
          1, --p_modDoc_capituloNaturezaFisc
          p_endPessEst_uf,
          p_endPess_uf,
          p_item_vendedor,
          0, --p_item_personalizacao
          0, --p_item_localEstoque
          1, --p_quantidade
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          CASE WHEN (p_tipoPreco= '' OR p_tipoPreco= ' ' OR p_tipoPreco= 'T' AND (p_tabelaPreco = '' OR p_tabelaPreco = ' ')) THEN 0 ELSE 1 END,
          p_tabelaPreco);
      -- C Custo Médio da Venda (CMV)
      ELSIF p_tipoPreco = 'C' AND NOT(p_prod_controleEstoque IN (3,4)) THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_MEDIO(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_cab_estabelecimento,
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          '0', --p_locEst_indicadorPropPosseIt
          0, --p_item_pessoaParticipante
          1, --p_buscarPrecoGerencial
          0); --p_especial
      -- F Formação Preço (Custo)
      ELSIF p_tipoPreco = 'F' THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_FORMACAO(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_cab_estabelecimento,
          TO_DATE ('01/01/1900','DD/MM/YYYY'), -- p_cab_dataPrecoInicial
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho);
      -- M Custo Médio da Venda Contábil (CMV)
      ELSIF p_tipoPreco = 'M' AND NOT(p_prod_controleEstoque IN (3,4)) THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_MEDIO(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_cab_estabelecimento,
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          '0', --p_locEst_indicadorPropPosseIt
          0, --p_item_pessoaParticipante
          0, --p_buscarPrecoGerencial
          0); --p_especial
      -- P Preço de Custo (Último Custo)
      ELSIF p_tipoPreco = 'P' THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_ULT_CUSTO(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_cab_estabelecimento,
          TO_DATE ('01/01/1900','DD/MM/YYYY'), -- p_cab_dataPrecoInicial
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          '0', --p_locEst_indicadorPropPosseIt
          0); --p_item_pessoaParticipante
      -- T Tabela de Preço
      ELSIF p_tipoPreco = 'T' THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_TABELA(
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          'S', --p_cab_entradaSaida
          0, --p_cab_devolucaoAnulacaoRetorno
          p_cab_estabelecimento,
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_cab_pessoa,
          1, --p_modDoc_capituloNaturezaFisc
          p_endPessEst_uf,
          p_endPess_uf,
          p_item_vendedor,
          0, --p_item_personalizacao
          0, --p_item_localEstoque
          1, --p_quantidade
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          CASE WHEN (p_tipoPreco= '' OR p_tipoPreco= ' ' OR p_tipoPreco= 'T' AND (p_tabelaPreco = '' OR p_tabelaPreco = ' ')) THEN 0 ELSE 1 END,
          p_tabelaPreco);
      -- U Última Compra
      ELSIF p_tipoPreco = 'U' THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_cab_estabelecimento,
          TO_DATE ('01/01/1900','DD/MM/YYYY'), -- p_cab_dataPrecoInicial
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          0);
      -- 2 Última Compra Bruto
      ELSIF p_tipoPreco = '2' THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_cab_estabelecimento,
          TO_DATE ('01/01/1900','DD/MM/YYYY'), -- p_cab_dataPrecoInicial
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          1);
      END IF;
      -- 3 = Combo / 4 = Kit
      IF v_preco = 0 AND p_prod_controleEstoque IN (3,4) THEN
        v_preco := FUNC_ADD_BUSCA_PRECO_KIT(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          'S', --p_cab_entradaSaida
          0, --p_cab_devolucaoAnulacaoRetorno
          p_cab_estabelecimento,
          TO_DATE ('01/01/1900','DD/MM/YYYY'), -- p_cab_dataPrecoInicial
          p_cab_dataPreco, --p_cab_dataPrecoFinal
          p_cab_pessoa,
          1, --p_modDoc_capituloNaturezaFisc
          p_endPessEst_uf,
          p_endPess_uf,
          p_item_vendedor,
          0, --p_item_personalizacao
          0, --p_item_localEstoque
          0, --p_item_pessoaParticipante
          1, --p_quantidade
          p_gradProd_produto,
          '0', --p_locEst_indicadorPropPosseiT
          CASE WHEN (p_tipoPreco= '' OR p_tipoPreco= ' ' OR p_tipoPreco= 'T' AND (p_tabelaPreco = '' OR p_tabelaPreco = ' ')) THEN 0 ELSE 1 END,
          p_tipoPreco,
          p_tabelaPreco);
      END IF;
    END IF;
    -- Efetua arredondamento de preço
    v_preco := ROUND (v_preco, TO_NUMBER(p_config_64_casasDecSaidas));
  END IF;
  RETURN v_preco;
END;

/

create or replace PROCEDURE ADD_BUSCA_PRECO_INTERNO_KIT(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_gradProd_produto                IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR,
    r_tabelaPreco                  OUT VARCHAR,
    r_precoSugestaoAPrazo          OUT NUMBER,
    r_precoSugestaoAVista          OUT NUMBER,
    r_precoDesconto                OUT NUMBER,
    r_precoMinimo                  OUT NUMBER,
    r_informarPrecoManualmente     OUT NUMBER,
    r_precoAPrazo                  OUT NUMBER,
    r_precoAVista                  OUT NUMBER,
    r_promocao                     OUT NUMBER,
    r_precoPromocaoAPrazo          OUT NUMBER,
    r_precoPromocaoAVista          OUT NUMBER,
    r_precoIndexadoAPrazo          OUT NUMBER,
    r_precoIndexadoAVista          OUT NUMBER)

IS
  v_tabelaPreco              VARCHAR (10);
  v_precoSugestaoAPrazo      NUMBER;
  v_precoSugestaoAVista      NUMBER;
  v_precoDesconto            NUMBER;
  v_precoMinimo              NUMBER;
  v_informarPrecoManualmente NUMBER;
  v_precoAPrazo              NUMBER;
  v_precoAVista              NUMBER;
  v_promocao                 NUMBER;
  v_precoPromocaoAPrazo      NUMBER;
  v_precoPromocaoAVista      NUMBER;
  v_precoIndexadoAPrazo      NUMBER;
  v_precoIndexadoAVista      NUMBER;

  CURSOR c_kit
  IS 
    SELECT 
      kit.quantidade,
      gradProdFilho.produto,
      gradProdFilho.cor,
      gradProdFilho.tamanho,
      prodFilho.controleEstoque
    FROM CAGRADEPRODUTOXKITSCOMBOS kit
    JOIN CAGRADESPRODUTO gradProdPai ON gradProdPai.gradeProduto = kit.gradeProduto
    JOIN CAGRADESPRODUTO gradProdFilho ON gradProdFilho.gradeProduto = kit.gradeProdutoFilho
    JOIN CAPRODUTOS prodFilho ON prodFilho.produto = gradProdFilho.produto
    WHERE gradProdPai.produto = p_gradProd_produto
    AND kit.gradeProdutoFilho > 0
    AND kit.ativo = 1
    AND kit.quantidade > 0
    AND kit.gradeProduto <> kit.gradeProdutoFilho;

BEGIN
  r_tabelaPreco := ' ';
  r_precoSugestaoAPrazo := 0;
  r_precoSugestaoAVista := 0;
  r_precoDesconto := 0;
  r_precoMinimo := 0;
  r_informarPrecoManualmente := 0;
  r_precoAPrazo := 0;
  r_precoAVista := 0;
  r_promocao := 0;
  r_precoPromocaoAPrazo := 0;
  r_precoPromocaoAVista := 0;
  r_precoIndexadoAPrazo := 0;
  r_precoIndexadoAVista := 0;

  FOR kit IN c_kit LOOP
    v_tabelaPreco              := ' ';
    v_precoSugestaoAPrazo      := 0;
    v_precoSugestaoAVista      := 0;
    v_precoDesconto            := 0;
    v_precoMinimo              := 0;
    v_informarPrecoManualmente := 0;
    v_precoAPrazo              := 0;
    v_precoAVista              := 0;
    v_promocao                 := 0;
    v_precoPromocaoAPrazo      := 0;
    v_precoPromocaoAVista      := 0;
    v_precoIndexadoAPrazo      := 0;
    v_precoIndexadoAVista      := 0;
    -- A Tabela de Preço Anterior
    IF p_tipoPreco = 'A' THEN
      ADD_BUSCA_PRECO_INTERNO_ANTER(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        kit.quantidade * p_item_quantidade,
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_manterPreco,
        0, --p_precoSugestaoAPrazoOriginal,
        0, --p_precoSugestaoAVistaOriginal,
        p_tabelaPreco,
        v_tabelaPreco,
        v_precoSugestaoAPrazo,
        v_precoSugestaoAVista,
        v_precoDesconto,
        v_precoMinimo,
        v_informarPrecoManualmente,
        v_precoAPrazo,
        v_precoAVista,
        v_promocao,
        v_precoPromocaoAPrazo,
        v_precoPromocaoAVista,
        v_precoIndexadoAPrazo,
        v_precoIndexadoAVista);
    -- C Custo Médio da Venda (CMV)
    ELSIF p_tipoPreco = 'C' AND NOT(kit.controleEstoque IN (3,4)) THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        0,
        0);
    -- F Formação Preço (Custo)
    ELSIF p_tipoPreco = 'F' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_FORMACAO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho);
    -- G Custo Médio da Venda Gerencial (CMV)
    ELSIF p_tipoPreco = 'G' AND NOT(kit.controleEstoque IN (3,4)) THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        1,
        0);
    -- P Preço de Custo (Último Custo)
    ELSIF p_tipoPreco = 'P' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_CUSTO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante);
    -- T Tabela de Preço
    ELSIF p_tipoPreco = 'T' THEN
      ADD_BUSCA_PRECO_INTERNO_TABELA(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        kit.quantidade * p_item_quantidade,
        kit.produto,
        kit.cor,
        kit.tamanho,
        p_manterPreco,
        0, --p_precoSugestaoAPrazoOriginal,
        0, --p_precoSugestaoAVistaOriginal,
        p_tabelaPreco,
        v_tabelaPreco,
        v_precoSugestaoAPrazo,
        v_precoSugestaoAVista,
        v_precoDesconto,
        v_precoMinimo,
        v_informarPrecoManualmente,
        v_precoAPrazo,
        v_precoAVista,
        v_promocao,
        v_precoPromocaoAPrazo,
        v_precoPromocaoAVista,
        v_precoIndexadoAPrazo,
        v_precoIndexadoAVista);
    -- U Última Compra
    ELSIF p_tipoPreco = 'U' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        0);
    -- 2 Última Compra Bruto
    ELSIF p_tipoPreco = '2' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        kit.produto,
        kit.cor,
        kit.tamanho,
        1);
    END IF;
    IF NOT(p_tipoPreco IN ('A','T')) THEN
      v_tabelaPreco              := ' ';
      v_precoSugestaoAVista      := v_precoSugestaoAPrazo;
      v_precoDesconto            := 0;
      v_precoMinimo              := 0;
      v_informarPrecoManualmente := 0;
      v_precoAPrazo              := v_precoSugestaoAPrazo;
      v_precoAVista              := v_precoSugestaoAPrazo;
      v_promocao                 := 0;
      v_precoPromocaoAPrazo      := v_precoSugestaoAPrazo;
      v_precoPromocaoAVista      := v_precoSugestaoAPrazo;
      v_precoIndexadoAPrazo      := v_precoSugestaoAPrazo;
      v_precoIndexadoAVista      := v_precoSugestaoAPrazo;
    END IF;  
    -- 3 = Combo / 4 = Kit
    IF v_precoSugestaoAPrazo = 0 AND kit.controleEstoque IN (3,4) THEN
      ADD_BUSCA_PRECO_INTERNO_KIT(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        kit.quantidade * p_item_quantidade,
        kit.produto,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        v_tabelaPreco,
        v_precoSugestaoAPrazo,
        v_precoSugestaoAVista,
        v_precoDesconto,
        v_precoMinimo,
        v_informarPrecoManualmente,
        v_precoAPrazo,
        v_precoAVista,
        v_promocao,
        v_precoPromocaoAPrazo,
        v_precoPromocaoAVista,
        v_precoIndexadoAPrazo,
        v_precoIndexadoAVista);
    END IF;
    IF v_precoSugestaoAPrazo <> 0 THEN
      r_tabelaPreco         := v_tabelaPreco;
      r_precoSugestaoAPrazo := r_precoSugestaoAPrazo + kit.quantidade * v_precoSugestaoAPrazo;
      r_precoSugestaoAVista := r_precoSugestaoAVista + kit.quantidade * v_precoSugestaoAVista;
      r_precoDesconto       := r_precoDesconto       + kit.quantidade * v_precoDesconto;
      r_precoMinimo         := r_precoMinimo         + kit.quantidade * v_precoMinimo;
      r_precoAPrazo         := r_precoAPrazo         + kit.quantidade * v_precoAPrazo;
      r_precoAVista         := r_precoAVista         + kit.quantidade * v_precoAVista;
      IF v_promocao = 1 THEN
        r_promocao          := 1;
      END IF;  
      r_precoPromocaoAPrazo := r_precoPromocaoAPrazo + kit.quantidade * v_precoPromocaoAPrazo;
      r_precoPromocaoAVista := r_precoPromocaoAVista + kit.quantidade * v_precoPromocaoAVista;
      r_precoIndexadoAPrazo := r_precoIndexadoAPrazo + kit.quantidade * v_precoIndexadoAPrazo;
      r_precoIndexadoAVista := r_precoIndexadoAVista + kit.quantidade * v_precoIndexadoAVista;
    ELSE
      r_tabelaPreco         := ' ';
      r_precoSugestaoAPrazo := 0;
      r_precoSugestaoAVista := 0;
      r_precoDesconto       := 0;
      r_precoMinimo         := 0;
      r_precoAPrazo         := 0;
      r_precoAVista         := 0;
      r_promocao            := 0;
      r_precoPromocaoAPrazo := 0;
      r_precoPromocaoAVista := 0;
      r_precoIndexadoAPrazo := 0;
      r_precoIndexadoAVista := 0;
    END IF;        
    EXIT WHEN r_precoSugestaoAPrazo = 0;
  END LOOP;
END ADD_BUSCA_PRECO_INTERNO_KIT;

/

create or replace PROCEDURE ADD_BUSCA_PRECO_INTERNO_PROTIN(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR,
    p_tinta_gradeProduto           IN NUMBER,
    p_tinta_quantidade             IN NUMBER,
    p_ini_tabelaPreco              IN VARCHAR,
    p_ini_precoSugestaoAPrazo      IN NUMBER,
    p_ini_precoSugestaoAVista      IN NUMBER,
    p_ini_precoDesconto            IN NUMBER,
    p_ini_precoMinimo              IN NUMBER,
    p_ini_informarPrecoManualmente IN NUMBER,
    p_ini_precoAPrazo              IN NUMBER,
    p_ini_precoAVista              IN NUMBER,
    p_ini_promocao                 IN NUMBER,
    p_ini_precoPromocaoAPrazo      IN NUMBER,
    p_ini_precoPromocaoAVista      IN NUMBER,
    p_ini_precoIndexadoAPrazo      IN NUMBER,
    p_ini_precoIndexadoAVista      IN NUMBER,
    r_tabelaPreco                  OUT VARCHAR,
    r_precoSugestaoAPrazo          OUT NUMBER,
    r_precoSugestaoAVista          OUT NUMBER,
    r_precoDesconto                OUT NUMBER,
    r_precoMinimo                  OUT NUMBER,
    r_informarPrecoManualmente     OUT NUMBER,
    r_precoAPrazo                  OUT NUMBER,
    r_precoAVista                  OUT NUMBER,
    r_promocao                     OUT NUMBER,
    r_precoPromocaoAPrazo          OUT NUMBER,
    r_precoPromocaoAVista          OUT NUMBER,
    r_precoIndexadoAPrazo          OUT NUMBER,
    r_precoIndexadoAVista          OUT NUMBER)

IS
  v_tabelaPreco              VARCHAR (10);
  v_precoSugestaoAPrazo      NUMBER;
  v_precoSugestaoAVista      NUMBER;
  v_precoDesconto            NUMBER;
  v_precoMinimo              NUMBER;
  v_informarPrecoManualmente NUMBER;
  v_precoAPrazo              NUMBER;
  v_precoAVista              NUMBER;
  v_promocao                 NUMBER;
  v_precoPromocaoAPrazo      NUMBER;
  v_precoPromocaoAVista      NUMBER;
  v_precoIndexadoAPrazo      NUMBER;
  v_precoIndexadoAVista      NUMBER;

  CURSOR c_prod
  IS 
    SELECT 
      gradProd.produto,
      gradProd.cor,
      gradProd.tamanho,
      prod.controleEstoque
    FROM CAGRADESPRODUTO gradProd
    JOIN CAPRODUTOS prod ON prod.produto = gradProd.produto
    WHERE gradProd.gradeProduto = p_tinta_gradeProduto;

BEGIN
  r_tabelaPreco              := p_ini_tabelaPreco;
  r_precoSugestaoAPrazo      := p_ini_precoSugestaoAPrazo;
  r_precoSugestaoAVista      := p_ini_precoSugestaoAVista;
  r_precoDesconto            := p_ini_precoDesconto;
  r_precoMinimo              := p_ini_precoMinimo;
  r_informarPrecoManualmente := p_ini_informarPrecoManualmente;
  r_precoAPrazo              := p_ini_precoAPrazo;
  r_precoAVista              := p_ini_precoAVista;
  r_promocao                 := p_ini_promocao;
  r_precoPromocaoAPrazo      := p_ini_precoPromocaoAPrazo;
  r_precoPromocaoAVista      := p_ini_precoPromocaoAVista;
  r_precoIndexadoAPrazo      := p_ini_precoIndexadoAPrazo;
  r_precoIndexadoAVista      := p_ini_precoIndexadoAVista;

  FOR prod IN c_prod LOOP
    v_tabelaPreco              := ' ';
    v_precoSugestaoAPrazo      := 0;
    v_precoSugestaoAVista      := 0;
    v_precoDesconto            := 0;
    v_precoMinimo              := 0;
    v_informarPrecoManualmente := 0;
    v_precoAPrazo              := 0;
    v_precoAVista              := 0;
    v_promocao                 := 0;
    v_precoPromocaoAPrazo      := 0;
    v_precoPromocaoAVista      := 0;
    v_precoIndexadoAPrazo      := 0;
    v_precoIndexadoAVista      := 0;
    -- A Tabela de Preço Anterior
    IF p_tipoPreco = 'A' THEN
      ADD_BUSCA_PRECO_INTERNO_ANTER(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_tinta_quantidade * p_item_quantidade,
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_manterPreco,
        0, --p_precoSugestaoAPrazoOriginal,
        0, --p_precoSugestaoAVistaOriginal,
        p_tabelaPreco,
        v_tabelaPreco,
        v_precoSugestaoAPrazo,
        v_precoSugestaoAVista,
        v_precoDesconto,
        v_precoMinimo,
        v_informarPrecoManualmente,
        v_precoAPrazo,
        v_precoAVista,
        v_promocao,
        v_precoPromocaoAPrazo,
        v_precoPromocaoAVista,
        v_precoIndexadoAPrazo,
        v_precoIndexadoAVista);
    -- C Custo Médio da Venda (CMV)
    ELSIF p_tipoPreco = 'C' AND NOT(prod.controleEstoque IN (3,4)) THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        0,
        0);
    -- F Formação Preço (Custo)
    ELSIF p_tipoPreco = 'F' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_FORMACAO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho);
    -- G Custo Médio da Venda Gerencial (CMV)
    ELSIF p_tipoPreco = 'G' AND NOT(prod.controleEstoque IN (3,4)) THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_MEDIO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante,
        1,
        0);
    -- P Preço de Custo (Último Custo)
    ELSIF p_tipoPreco = 'P' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_CUSTO(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_locEst_indicadorPropPosseIt,
        p_item_pessoaParticipante);
    -- T Tabela de Preço
    ELSIF p_tipoPreco = 'T' THEN
      ADD_BUSCA_PRECO_INTERNO_TABELA(
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_tinta_quantidade * p_item_quantidade,
        prod.produto,
        prod.cor,
        prod.tamanho,
        p_manterPreco,
        0, --p_precoSugestaoAPrazoOriginal,
        0, --p_precoSugestaoAVistaOriginal,
        p_tabelaPreco,
        v_tabelaPreco,
        v_precoSugestaoAPrazo,
        v_precoSugestaoAVista,
        v_precoDesconto,
        v_precoMinimo,
        v_informarPrecoManualmente,
        v_precoAPrazo,
        v_precoAVista,
        v_promocao,
        v_precoPromocaoAPrazo,
        v_precoPromocaoAVista,
        v_precoIndexadoAPrazo,
        v_precoIndexadoAVista);
    -- U Última Compra
    ELSIF p_tipoPreco = 'U' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        0);
    -- 2 Última Compra Bruto
    ELSIF p_tipoPreco = '2' THEN
      v_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        0, --p_item_personalizacao
        prod.produto,
        prod.cor,
        prod.tamanho,
        1);
    END IF;
    IF NOT(p_tipoPreco IN ('A','T')) THEN
      v_tabelaPreco              := ' ';
      v_precoSugestaoAVista      := v_precoSugestaoAPrazo;
      v_precoDesconto            := 0;
      v_precoMinimo              := 0;
      v_informarPrecoManualmente := 0;
      v_precoAPrazo              := v_precoSugestaoAPrazo;
      v_precoAVista              := v_precoSugestaoAPrazo;
      v_promocao                 := 0;
      v_precoPromocaoAPrazo      := v_precoSugestaoAPrazo;
      v_precoPromocaoAVista      := v_precoSugestaoAPrazo;
      v_precoIndexadoAPrazo      := v_precoSugestaoAPrazo;
      v_precoIndexadoAVista      := v_precoSugestaoAPrazo;
    END IF;  
    -- 3 = Combo / 4 = Kit
    IF v_precoSugestaoAPrazo = 0 AND prod.controleEstoque IN (3,4) THEN
      ADD_BUSCA_PRECO_INTERNO_KIT(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_tinta_quantidade * p_item_quantidade,
        prod.produto,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        v_tabelaPreco,
        v_precoSugestaoAPrazo,
        v_precoSugestaoAVista,
        v_precoDesconto,
        v_precoMinimo,
        v_informarPrecoManualmente,
        v_precoAPrazo,
        v_precoAVista,
        v_promocao,
        v_precoPromocaoAPrazo,
        v_precoPromocaoAVista,
        v_precoIndexadoAPrazo,
        v_precoIndexadoAVista);
    END IF;
    IF v_tabelaPreco <> ' ' THEN
      r_tabelaPreco       := v_tabelaPreco;
    END IF;
    r_precoSugestaoAPrazo := r_precoSugestaoAPrazo + p_tinta_quantidade * v_precoSugestaoAPrazo;
    r_precoSugestaoAVista := r_precoSugestaoAVista + p_tinta_quantidade * v_precoSugestaoAVista;
    r_precoDesconto       := r_precoDesconto       + p_tinta_quantidade * v_precoDesconto;
    r_precoMinimo         := r_precoMinimo         + p_tinta_quantidade * v_precoMinimo;
    r_precoAPrazo         := r_precoAPrazo         + p_tinta_quantidade * v_precoAPrazo;
    r_precoAVista         := r_precoAVista         + p_tinta_quantidade * v_precoAVista;
    IF v_promocao = 1 THEN
      r_promocao          := 1;
    END IF;
    r_precoPromocaoAPrazo := r_precoPromocaoAPrazo + p_tinta_quantidade * v_precoPromocaoAPrazo;
    r_precoPromocaoAVista := r_precoPromocaoAVista + p_tinta_quantidade * v_precoPromocaoAVista;
    r_precoIndexadoAPrazo := r_precoIndexadoAPrazo + p_tinta_quantidade * v_precoIndexadoAPrazo;
    r_precoIndexadoAVista := r_precoIndexadoAVista + p_tinta_quantidade * v_precoIndexadoAVista;
  END LOOP;
END ADD_BUSCA_PRECO_INTERNO_PROTIN;

/

create or replace PROCEDURE ADD_BUSCA_PRECO_INTERNO_TINTA(
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_idFormulaTinta          IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR,
    r_tabelaPreco                  OUT VARCHAR,
    r_precoSugestaoAPrazo          OUT NUMBER,
    r_precoSugestaoAVista          OUT NUMBER,
    r_precoDesconto                OUT NUMBER,
    r_precoMinimo                  OUT NUMBER,
    r_informarPrecoManualmente     OUT NUMBER,
    r_precoAPrazo                  OUT NUMBER,
    r_precoAVista                  OUT NUMBER,
    r_promocao                     OUT NUMBER,
    r_precoPromocaoAPrazo          OUT NUMBER,
    r_precoPromocaoAVista          OUT NUMBER,
    r_precoIndexadoAPrazo          OUT NUMBER,
    r_precoIndexadoAVista          OUT NUMBER)

IS

  CURSOR c_formula
  IS 
    SELECT 
      a.idBaseTinta,
      base.gradeProduto,
      a.idColoranteTintaA,
      a.quantidadeA,
      colA.gradeProduto gradeProdutoA,
      a.idColoranteTintaB,
      a.quantidadeB,
      colB.gradeProduto gradeProdutoB,
      a.idColoranteTintaC,
      a.quantidadeC,
      colC.gradeProduto gradeProdutoC,
      a.idColoranteTintaD,
      a.quantidadeD,
      colD.gradeProduto gradeProdutoD,
      a.idColoranteTintaE,
      a.quantidadeE,
      colE.gradeProduto gradeProdutoE,
      a.idColoranteTintaF,
      a.quantidadeF,
      colF.gradeProduto gradeProdutoF,
      a.idColoranteTintaG,
      a.quantidadeG,
      colG.gradeProduto gradeProdutoG,
      a.idColoranteTintaH,
      a.quantidadeH,
      colH.gradeProduto gradeProdutoH,
      a.idColoranteTintaI,
      a.quantidadeI,
      colI.gradeProduto gradeProdutoI,
      a.idColoranteTintaJ,
      a.quantidadeJ,
      colJ.gradeProduto gradeProdutoJ,
      a.idColoranteTintaK,
      a.quantidadeK,
      colK.gradeProduto gradeProdutoK,
      a.idColoranteTintaL,
      a.quantidadeL,
      colL.gradeProduto gradeProdutoL,
      a.idColoranteTintaM,
      a.quantidadeM,
      colM.gradeProduto gradeProdutoM,
      a.idColoranteTintaN,
      a.quantidadeN,
      colN.gradeProduto gradeProdutoN,
      a.idColoranteTintaO,
      a.quantidadeO,
      colO.gradeProduto gradeProdutoO
    FROM CAFORMULASTINTAS a 
    JOIN CABASESTINTAS base ON base.idBaseTinta = a.idBaseTinta
    JOIN CACOLORANTESTINTAS colA ON colA.idColoranteTinta = a.idColoranteTintaA
    JOIN CACOLORANTESTINTAS colB ON colB.idColoranteTinta = a.idColoranteTintaB
    JOIN CACOLORANTESTINTAS colC ON colC.idColoranteTinta = a.idColoranteTintaC
    JOIN CACOLORANTESTINTAS colD ON colD.idColoranteTinta = a.idColoranteTintaD
    JOIN CACOLORANTESTINTAS colE ON colE.idColoranteTinta = a.idColoranteTintaE
    JOIN CACOLORANTESTINTAS colF ON colF.idColoranteTinta = a.idColoranteTintaF
    JOIN CACOLORANTESTINTAS colG ON colG.idColoranteTinta = a.idColoranteTintaG
    JOIN CACOLORANTESTINTAS colH ON colH.idColoranteTinta = a.idColoranteTintaH
    JOIN CACOLORANTESTINTAS colI ON colI.idColoranteTinta = a.idColoranteTintaI
    JOIN CACOLORANTESTINTAS colJ ON colJ.idColoranteTinta = a.idColoranteTintaJ
    JOIN CACOLORANTESTINTAS colK ON colK.idColoranteTinta = a.idColoranteTintaK
    JOIN CACOLORANTESTINTAS colL ON colL.idColoranteTinta = a.idColoranteTintaL
    JOIN CACOLORANTESTINTAS colM ON colM.idColoranteTinta = a.idColoranteTintaM
    JOIN CACOLORANTESTINTAS colN ON colN.idColoranteTinta = a.idColoranteTintaN
    JOIN CACOLORANTESTINTAS colO ON colO.idColoranteTinta = a.idColoranteTintaO
    WHERE a.idFormulaTinta = p_item_idFormulaTinta
    AND a.idBaseTinta > 0
    AND base.gradeProduto > 0;

BEGIN
  r_tabelaPreco              := ' ';
  r_precoSugestaoAPrazo      := 0;
  r_precoSugestaoAVista      := 0;
  r_precoDesconto            := 0;
  r_precoMinimo              := 0;
  r_informarPrecoManualmente := 0;
  r_precoAPrazo              := 0;
  r_precoAVista              := 0;
  r_promocao                 := 0;
  r_precoPromocaoAPrazo      := 0;
  r_precoPromocaoAVista      := 0;
  r_precoIndexadoAPrazo      := 0;
  r_precoIndexadoAVista      := 0;

  FOR formula IN c_formula LOOP
    ADD_BUSCA_PRECO_INTERNO_PROTIN(
      p_config_209_filtrarGrupoEcon,
      p_config_362_calcCustoPorGrade,
      p_perfilUsuarioLogado,
      p_usuarioLogado,
      p_cab_entradaSaida,
      p_cab_devolucaoAnulacaoRetorno,
      p_cab_estabelecimento,
      p_cab_dataPrecoInicial,
      p_cab_dataPrecoFinal,
      p_cab_pessoa,
      p_modDoc_capituloNaturezaFisc,
      p_endPessEst_uf,
      p_endPess_uf,
      p_item_vendedor,
      p_item_personalizacao,
      p_item_localEstoque,
      p_item_pessoaParticipante,
      p_item_quantidade,
      p_locEst_indicadorPropPosseIt,
      p_manterPreco,
      p_tipoPreco,
      p_tabelaPreco,
      formula.gradeProduto,
      1, --p_tinta_quantidade
      r_tabelaPreco,
      r_precoSugestaoAPrazo,
      r_precoSugestaoAVista,
      r_precoDesconto,
      r_precoMinimo,
      r_informarPrecoManualmente,
      r_precoAPrazo,
      r_precoAVista,
      r_promocao,
      r_precoPromocaoAPrazo,
      r_precoPromocaoAVista,
      r_precoIndexadoAPrazo,
      r_precoIndexadoAVista,
      r_tabelaPreco,
      r_precoSugestaoAPrazo,
      r_precoSugestaoAVista,
      r_precoDesconto,
      r_precoMinimo,
      r_informarPrecoManualmente,
      r_precoAPrazo,
      r_precoAVista,
      r_promocao,
      r_precoPromocaoAPrazo,
      r_precoPromocaoAVista,
      r_precoIndexadoAPrazo,
      r_precoIndexadoAVista);
    IF formula.idColoranteTintaA > 0 AND formula.gradeProdutoA > 0 AND formula.quantidadeA > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoA,
        formula.quantidadeA / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaB > 0 AND formula.gradeProdutoB > 0 AND formula.quantidadeB > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoB,
        formula.quantidadeB / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaC > 0 AND formula.gradeProdutoC > 0 AND formula.quantidadeC > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoC,
        formula.quantidadeC / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaD > 0 AND formula.gradeProdutoD > 0 AND formula.quantidadeD > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoD,
        formula.quantidadeD / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaE > 0 AND formula.gradeProdutoE > 0 AND formula.quantidadeE > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoE,
        formula.quantidadeE / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaF > 0 AND formula.gradeProdutoF > 0 AND formula.quantidadeF > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoF,
        formula.quantidadeF / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaG > 0 AND formula.gradeProdutoG > 0 AND formula.quantidadeG > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoG,
        formula.quantidadeG / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaH > 0 AND formula.gradeProdutoH > 0 AND formula.quantidadeH > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoH,
        formula.quantidadeH / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaI > 0 AND formula.gradeProdutoI > 0 AND formula.quantidadeI > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoI,
        formula.quantidadeI / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaJ > 0 AND formula.gradeProdutoJ > 0 AND formula.quantidadeJ > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoJ,
        formula.quantidadeJ / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaK > 0 AND formula.gradeProdutoK > 0 AND formula.quantidadeK > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoK,
        formula.quantidadeK / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaL > 0 AND formula.gradeProdutoL > 0 AND formula.quantidadeL > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoL,
        formula.quantidadeL / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaM > 0 AND formula.gradeProdutoM > 0 AND formula.quantidadeM > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoM,
        formula.quantidadeM / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaN > 0 AND formula.gradeProdutoN > 0 AND formula.quantidadeN > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoN,
        formula.quantidadeN / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
    IF formula.idColoranteTintaO > 0 AND formula.gradeProdutoO > 0 AND formula.quantidadeO > 0 THEN
      ADD_BUSCA_PRECO_INTERNO_PROTIN(
        p_config_209_filtrarGrupoEcon,
        p_config_362_calcCustoPorGrade,
        p_perfilUsuarioLogado,
        p_usuarioLogado,
        p_cab_entradaSaida,
        p_cab_devolucaoAnulacaoRetorno,
        p_cab_estabelecimento,
        p_cab_dataPrecoInicial,
        p_cab_dataPrecoFinal,
        p_cab_pessoa,
        p_modDoc_capituloNaturezaFisc,
        p_endPessEst_uf,
        p_endPess_uf,
        p_item_vendedor,
        p_item_personalizacao,
        p_item_localEstoque,
        p_item_pessoaParticipante,
        p_item_quantidade,
        p_locEst_indicadorPropPosseIt,
        p_manterPreco,
        p_tipoPreco,
        p_tabelaPreco,
        formula.gradeProdutoO,
        formula.quantidadeO / 900, --p_tinta_quantidade
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista,
        r_tabelaPreco,
        r_precoSugestaoAPrazo,
        r_precoSugestaoAVista,
        r_precoDesconto,
        r_precoMinimo,
        r_informarPrecoManualmente,
        r_precoAPrazo,
        r_precoAVista,
        r_promocao,
        r_precoPromocaoAPrazo,
        r_precoPromocaoAVista,
        r_precoIndexadoAPrazo,
        r_precoIndexadoAVista);
    END IF;
  END LOOP;
END ADD_BUSCA_PRECO_INTERNO_TINTA;

/

create or replace PROCEDURE ADD_BUSCA_PRECO(
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_65_casasDecEntrada    IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPrecoInicial         IN DATE,
    p_cab_dataPrecoFinal           IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_modDoc_capituloNaturezaFisc  IN NUMBER,
    p_modDoc_tipoPreco             IN CHAR,
    p_modDoc_tabelaPreco           IN VARCHAR,
    p_modDoc_fatorMultiplicador    IN NUMBER,
    p_modDoc_tipoPrecoB            IN CHAR,
    p_modDoc_tabelaPrecoB          IN VARCHAR,
    p_modDoc_fatorMultiplicadorB   IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_idFormulaTinta          IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    p_manterPreco                  IN NUMBER,
    p_precoSugestaoAPrazoOriginal  IN NUMBER,
    p_precoSugestaoAVistaOriginal  IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR,
    r_tipoPreco                    OUT CHAR,
    r_tabelaPreco                  OUT VARCHAR,
    r_precoSugestaoAPrazo          OUT NUMBER,
    r_precoSugestaoAVista          OUT NUMBER,
    r_precoDesconto                OUT NUMBER,
    r_precoMinimo                  OUT NUMBER,
    r_informarPrecoManualmente     OUT NUMBER,
    r_precoAPrazo                  OUT NUMBER,
    r_precoAVista                  OUT NUMBER,
    r_promocao                     OUT NUMBER,
    r_precoPromocaoAPrazo          OUT NUMBER,
    r_precoPromocaoAVista          OUT NUMBER,
    r_precoIndexadoAPrazo          OUT NUMBER,
    r_precoIndexadoAVista          OUT NUMBER)

IS

BEGIN
  r_tipoPreco                := ' ';
  r_tabelaPreco              := ' ';
  r_precoSugestaoAPrazo      := 0;
  r_precoSugestaoAVista      := 0;
  r_precoDesconto            := 0;
  r_precoMinimo              := 0;
  r_informarPrecoManualmente := 0;
  r_precoAPrazo              := 0;
  r_precoAVista              := 0;
  r_promocao                 := 0;
  r_precoPromocaoAPrazo      := 0;
  r_precoPromocaoAVista      := 0;
  r_precoIndexadoAPrazo      := 0;
  r_precoIndexadoAVista      := 0;

  IF p_gradProd_produto > 0 THEN
    IF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'I' THEN
      r_tipoPreco := 'I';
    ELSE
      IF p_prod_controleEstoque = 12 AND p_item_idFormulaTinta > 0 THEN
        ADD_BUSCA_PRECO_INTERNO_TINTA(
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          p_cab_entradaSaida,
          p_cab_devolucaoAnulacaoRetorno,
          p_cab_estabelecimento,
          p_cab_dataPrecoInicial,
          p_cab_dataPrecoFinal,
          p_cab_pessoa,
          p_modDoc_capituloNaturezaFisc,
          p_endPessEst_uf,
          p_endPess_uf,
          p_item_vendedor,
          p_item_idFormulaTinta,
          p_item_personalizacao,
          p_item_localEstoque,
          p_item_pessoaParticipante,
          p_item_quantidade,
          p_locEst_indicadorPropPosseIt,
          p_manterPreco,
          CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END, --p_tipoPreco
          CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tabelaPreco ELSE p_modDoc_tabelaPreco END, --p_tabelaPreco
          r_tabelaPreco,
          r_precoSugestaoAPrazo,
          r_precoSugestaoAVista,
          r_precoDesconto,
          r_precoMinimo,
          r_informarPrecoManualmente,
          r_precoAPrazo,
          r_precoAVista,
          r_promocao,
          r_precoPromocaoAPrazo,
          r_precoPromocaoAVista,
          r_precoIndexadoAPrazo,
          r_precoIndexadoAVista);
      ELSE
        -- A Tabela de Preço Anterior
        IF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'A' THEN
          ADD_BUSCA_PRECO_INTERNO_ANTER(
            p_perfilUsuarioLogado,
            p_usuarioLogado,
            p_cab_entradaSaida,
            p_cab_devolucaoAnulacaoRetorno,
            p_cab_estabelecimento,
            p_cab_dataPrecoFinal,
            p_cab_pessoa,
            p_modDoc_capituloNaturezaFisc,
            p_endPessEst_uf,
            p_endPess_uf,
            p_item_vendedor,
            p_item_personalizacao,
            p_item_localEstoque,
            p_item_quantidade,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            p_manterPreco,
            p_precoSugestaoAPrazoOriginal,
            p_precoSugestaoAVistaOriginal,
            CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tabelaPreco ELSE p_modDoc_tabelaPreco END,
            r_tabelaPreco,
            r_precoSugestaoAPrazo,
            r_precoSugestaoAVista,
            r_precoDesconto,
            r_precoMinimo,
            r_informarPrecoManualmente,
            r_precoAPrazo,
            r_precoAVista,
            r_promocao,
            r_precoPromocaoAPrazo,
            r_precoPromocaoAVista,
            r_precoIndexadoAPrazo,
            r_precoIndexadoAVista);
        -- C Custo Médio da Venda (CMV)
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'C' AND NOT(p_prod_controleEstoque IN (3,4)) THEN
          r_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_MEDIO(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_cab_estabelecimento,
            p_cab_dataPrecoFinal,
            p_item_personalizacao,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            p_locEst_indicadorPropPosseIt,
            p_item_pessoaParticipante,
            1,
            0);
        -- F Formação Preço (Custo)
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'F' THEN
          r_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_FORMACAO(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_cab_estabelecimento,
            p_cab_dataPrecoInicial,
            p_cab_dataPrecoFinal,
            p_item_personalizacao,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho);
        -- M Custo Médio da Venda Contábil (CMV)
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'M' AND NOT(p_prod_controleEstoque IN (3,4)) THEN
          r_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_MEDIO(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_cab_estabelecimento,
            p_cab_dataPrecoFinal,
            p_item_personalizacao,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            p_locEst_indicadorPropPosseIt,
            p_item_pessoaParticipante,
            0,
            0);
        -- P Preço de Custo (Último Custo)
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'P' THEN
          r_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_CUSTO(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_cab_estabelecimento,
            p_cab_dataPrecoInicial,
            p_cab_dataPrecoFinal,
            p_item_personalizacao,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            p_locEst_indicadorPropPosseIt,
            p_item_pessoaParticipante);
        -- T Tabela de Preço
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'T' THEN
          ADD_BUSCA_PRECO_INTERNO_TABELA(
            p_perfilUsuarioLogado,
            p_usuarioLogado,
            p_cab_entradaSaida,
            p_cab_devolucaoAnulacaoRetorno,
            p_cab_estabelecimento,
            p_cab_dataPrecoFinal,
            p_cab_pessoa,
            p_modDoc_capituloNaturezaFisc,
            p_endPessEst_uf,
            p_endPess_uf,
            p_item_vendedor,
            p_item_personalizacao,
            p_item_localEstoque,
            p_item_quantidade,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            p_manterPreco,
            p_precoSugestaoAPrazoOriginal,
            p_precoSugestaoAVistaOriginal,
            CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tabelaPreco ELSE p_modDoc_tabelaPreco END,
            r_tabelaPreco,
            r_precoSugestaoAPrazo,
            r_precoSugestaoAVista,
            r_precoDesconto,
            r_precoMinimo,
            r_informarPrecoManualmente,
            r_precoAPrazo,
            r_precoAVista,
            r_promocao,
            r_precoPromocaoAPrazo,
            r_precoPromocaoAVista,
            r_precoIndexadoAPrazo,
            r_precoIndexadoAVista);
        -- U Última Compra
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'U' THEN
          r_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_cab_estabelecimento,
            p_cab_dataPrecoInicial,
            p_cab_dataPrecoFinal,
            p_item_personalizacao,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            0);
        -- 2 Última Compra Bruto
        ELSIF CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = '2' THEN
          r_precoSugestaoAPrazo := FUNC_ADD_BUSCA_PRECO_ULT_COMPR(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_cab_estabelecimento,
            p_cab_dataPrecoInicial,
            p_cab_dataPrecoFinal,
            p_item_personalizacao,
            p_gradProd_produto,
            p_gradProd_cor,
            p_gradProd_tamanho,
            1);
        END IF;
        IF NOT(CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END IN ('A','T')) THEN
          r_tabelaPreco              := ' ';
          r_precoSugestaoAVista      := r_precoSugestaoAPrazo;
          r_precoDesconto            := 0;
          r_precoMinimo              := 0;
          r_informarPrecoManualmente := 0;
          r_precoAPrazo              := r_precoSugestaoAPrazo;
          r_precoAVista              := r_precoSugestaoAPrazo;
          r_promocao                 := 0;
          r_precoPromocaoAPrazo      := r_precoSugestaoAPrazo;
          r_precoPromocaoAVista      := r_precoSugestaoAPrazo;
          r_precoIndexadoAPrazo      := r_precoSugestaoAPrazo;
          r_precoIndexadoAVista      := r_precoSugestaoAPrazo;
        END IF;
        -- 3 = Combo / 4 = Kit
        IF r_tabelaPreco = ' ' AND r_precoSugestaoAPrazo = 0 AND p_prod_controleEstoque IN (3,4) THEN
          ADD_BUSCA_PRECO_INTERNO_KIT(
            p_config_209_filtrarGrupoEcon,
            p_config_362_calcCustoPorGrade,
            p_perfilUsuarioLogado,
            p_usuarioLogado,
            p_cab_entradaSaida,
            p_cab_devolucaoAnulacaoRetorno,
            p_cab_estabelecimento,
            p_cab_dataPrecoInicial,
            p_cab_dataPrecoFinal,
            p_cab_pessoa,
            p_modDoc_capituloNaturezaFisc,
            p_endPessEst_uf,
            p_endPess_uf,
            p_item_vendedor,
            p_item_personalizacao,
            p_item_localEstoque,
            p_item_pessoaParticipante,
            p_item_quantidade,
            p_gradProd_produto,
            p_locEst_indicadorPropPosseIt,
            p_manterPreco,
            CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END,
            CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tabelaPreco ELSE p_modDoc_tabelaPreco END,
            r_tabelaPreco,
            r_precoSugestaoAPrazo,
            r_precoSugestaoAVista,
            r_precoDesconto,
            r_precoMinimo,
            r_informarPrecoManualmente,
            r_precoAPrazo,
            r_precoAVista,
            r_promocao,
            r_precoPromocaoAPrazo,
            r_precoPromocaoAVista,
            r_precoIndexadoAPrazo,
            r_precoIndexadoAVista);
        END IF;
      END IF;
      -- Se encontrou preço
      IF r_tabelaPreco <> ' ' OR r_precoSugestaoAPrazo <> 0 OR r_precoSugestaoAVista <> 0 OR r_precoDesconto <> 0 OR r_precoMinimo <> 0 OR r_informarPrecoManualmente <> 0 OR r_precoAPrazo <> 0 OR r_precoAVista <> 0 OR r_precoPromocaoAPrazo <> 0 OR r_precoPromocaoAVista <> 0 OR r_precoIndexadoAPrazo <> 0 OR r_precoIndexadoAVista <> 0 OR CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END = 'I' THEN
        r_tipoPreco := CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco ELSE p_modDoc_tipoPreco END;
        IF NOT (p_modDoc_fatorMultiplicador IN (0,1)) AND (p_manterPreco = 0 OR p_tipoPreco = p_modDoc_tipoPreco AND p_tabelaPreco = p_modDoc_tabelaPreco) THEN
          r_precoSugestaoAPrazo := r_precoSugestaoAPrazo * p_modDoc_fatorMultiplicador;
          r_precoSugestaoAVista := r_precoSugestaoAVista * p_modDoc_fatorMultiplicador;
          r_precoDesconto       := r_precoDesconto       * p_modDoc_fatorMultiplicador;
          r_precoMinimo         := r_precoMinimo         * p_modDoc_fatorMultiplicador;
          r_precoAPrazo         := r_precoAPrazo         * p_modDoc_fatorMultiplicador;
          r_precoAVista         := r_precoAVista         * p_modDoc_fatorMultiplicador;
          r_precoPromocaoAPrazo := r_precoPromocaoAPrazo * p_modDoc_fatorMultiplicador;
          r_precoPromocaoAVista := r_precoPromocaoAVista * p_modDoc_fatorMultiplicador;
          r_precoIndexadoAPrazo := r_precoIndexadoAPrazo * p_modDoc_fatorMultiplicador;
          r_precoIndexadoAVista := r_precoIndexadoAVista * p_modDoc_fatorMultiplicador;
        END IF;
      -- Se não encontrou preço, não mantém o atual e existe regra de preço B
      ELSIF p_manterPreco = 0 AND p_modDoc_tipoPrecoB <> ' ' THEN
        ADD_BUSCA_PRECO(
          p_config_64_casasDecSaidas,
          p_config_65_casasDecEntrada,
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          p_perfilUsuarioLogado,
          p_usuarioLogado,
          p_cab_entradaSaida,
          p_cab_devolucaoAnulacaoRetorno,
          p_cab_estabelecimento,
          p_cab_dataPrecoInicial,
          p_cab_dataPrecoFinal,
          p_cab_pessoa,
          p_modDoc_capituloNaturezaFisc,
          p_modDoc_tipoPrecoB,
          p_modDoc_tabelaPrecoB,
          p_modDoc_fatorMultiplicadorB,
          ' ',
          ' ',
          0,
          p_endPessEst_uf,
          p_endPess_uf,
          p_item_vendedor,
          p_item_idFormulaTinta,
          p_item_personalizacao,
          p_item_localEstoque,
          p_item_pessoaParticipante,
          p_item_quantidade,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          p_prod_controleEstoque,
          p_locEst_indicadorPropPosseIt,
          0,
          p_precoSugestaoAPrazoOriginal,
          p_precoSugestaoAVistaOriginal,
          p_modDoc_tipoPrecoB,
          p_modDoc_tabelaPrecoB,
          r_tipoPreco,
          r_tabelaPreco,
          r_precoSugestaoAPrazo,
          r_precoSugestaoAVista,
          r_precoDesconto,
          r_precoMinimo,
          r_informarPrecoManualmente,
          r_precoAPrazo,
          r_precoAVista,
          r_promocao,
          r_precoPromocaoAPrazo,
          r_precoPromocaoAVista,
          r_precoIndexadoAPrazo,
          r_precoIndexadoAVista);
        -- Se não encontrou preço B, devolve tipo preço e tabela atual
        IF r_precoSugestaoAPrazo = 0 AND r_precoSugestaoAVista = 0 AND r_precoDesconto = 0 AND r_precoMinimo = 0 AND r_informarPrecoManualmente = 0 AND r_precoAPrazo = 0 AND r_precoAVista = 0 AND r_precoPromocaoAPrazo = 0 AND r_precoPromocaoAVista = 0 AND r_precoIndexadoAPrazo = 0 AND r_precoIndexadoAVista = 0 AND p_modDoc_tipoPrecoB <> 'I' THEN
          r_tipoPreco   := CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco   ELSE p_modDoc_tipoPreco   END;
          r_tabelaPreco := CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tabelaPreco ELSE p_modDoc_tabelaPreco END;
        END IF;
      -- Se não encontrou e não usa regra B, devolve tipo preço e tabela atual
      ELSE
        r_tipoPreco   := CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tipoPreco   ELSE p_modDoc_tipoPreco   END;
        r_tabelaPreco := CASE WHEN p_manterPreco = 1 AND p_tipoPreco <> ' ' THEN p_tabelaPreco ELSE p_modDoc_tabelaPreco END;
      END IF;
      -- Efetua arredondamento de preço
      r_precoSugestaoAPrazo := ROUND (r_precoSugestaoAPrazo, TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoSugestaoAVista := ROUND (r_precoSugestaoAVista, TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoDesconto       := ROUND (r_precoDesconto      , TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoMinimo         := ROUND (r_precoMinimo        , TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoAPrazo         := ROUND (r_precoAPrazo        , TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoAVista         := ROUND (r_precoAVista        , TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoPromocaoAPrazo := ROUND (r_precoPromocaoAPrazo, TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoPromocaoAVista := ROUND (r_precoPromocaoAVista, TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoIndexadoAPrazo := ROUND (r_precoIndexadoAPrazo, TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
      r_precoIndexadoAVista := ROUND (r_precoIndexadoAVista, TO_NUMBER(CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN p_config_64_casasDecSaidas ELSE p_config_65_casasDecEntrada END));
    END IF;
  END IF;
END ADD_BUSCA_PRECO;

/

create or replace FUNCTION FUNC_ADD_BUSCA_STRING_PRECO(
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_perfilUsuarioLogado          IN NUMBER,
    p_usuarioLogado                IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPreco                IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_endPessEst_uf                IN CHAR,
    p_endPess_uf                   IN CHAR,
    p_item_vendedor                IN NUMBER,
    p_item_idFormulaTinta          IN NUMBER,
    p_grade_produto                IN NUMBER,
    p_grade_cor                    IN NUMBER,
    p_grade_tamanho                IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    p_tipoPreco                    IN CHAR,
    p_tabelaPreco                  IN VARCHAR
  )
  RETURN CHAR
IS
  v_tipoPreco                  CHAR(1);
  v_tabelaPreco                CHAR(10);
  v_precoSugestaoAPrazo        CHAR(20);
  v_precoSugestaoAVista        CHAR(20);
  v_precoDesconto              CHAR(20);
  v_precoMinimo                CHAR(20);
  v_informarPrecoManualmente   CHAR(1);
  v_precoAPrazo                CHAR(20);
  v_precoAVista                CHAR(20);
  v_promocao                   CHAR(1);
  v_precoPromocaoAPrazo        CHAR(20);
  v_precoPromocaoAVista        CHAR(20);
  v_precoIndexadoAPrazo        CHAR(20);
  v_precoIndexadoAVista        CHAR(20);
BEGIN
  ADD_BUSCA_PRECO (
    p_config_64_casasDecSaidas,
    p_config_64_casasDecSaidas,
    p_config_209_filtrarGrupoEcon,
    p_config_362_calcCustoPorGrade,
    p_perfilUsuarioLogado,
    p_usuarioLogado,
    'S',
    0,
    p_cab_estabelecimento,
    TO_DATE ('01/01/1900','DD/MM/YYYY'),
    p_cab_dataPreco,
    p_cab_pessoa,
    1,
    p_tipoPreco,
    p_tabelaPreco,
    1,
    ' ',
    ' ',
    0,
    p_endPessEst_uf,
    p_endPess_uf,
    p_item_vendedor,
    p_item_idFormulaTinta,
    0,
    0,
    0,
    1,
    p_grade_produto,
    p_grade_cor,
    p_grade_tamanho,
    p_prod_controleEstoque,
    '0',
    CASE WHEN (p_tipoPreco= '' OR p_tipoPreco= ' ' OR p_tipoPreco= 'T' AND (p_tabelaPreco = '' OR p_tabelaPreco = ' ')) THEN 0 ELSE 1 END,
    0,
    0,
    p_tipoPreco,
    p_tabelaPreco,
    v_tipoPreco,
    v_tabelaPreco,
    v_precoSugestaoAPrazo,
    v_precoSugestaoAVista,
    v_precoDesconto,
    v_precoMinimo,
    v_informarPrecoManualmente,
    v_precoAPrazo,
    v_precoAVista,
    v_promocao,
    v_precoPromocaoAPrazo,
    v_precoPromocaoAVista,
    v_precoIndexadoAPrazo,
    v_precoIndexadoAVista
  );
  RETURN COALESCE(v_tipoPreco,' ')
    || '|' || v_tabelaPreco
    || '|' || v_precoSugestaoAPrazo
    || '|' || v_precoSugestaoAVista
    || '|' || v_precoDesconto
    || '|' || v_precoMinimo
    || '|' || v_informarPrecoManualmente
    || '|' || v_precoAVista
    || '|' || v_precoAPrazo
    || '|' || v_promocao
    || '|' || v_precoPromocaoAVista
    || '|' || v_precoPromocaoAPrazo;
END;

/

create or replace PROCEDURE ADD_ITEM_OPERACAO_FISCAL_BUSCA (
    p_inserindoItem                IN NUMBER,
    p_cab_origemDocumento          IN NUMBER,
    p_cab_tipoDocumento            IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_finalidadeNota           IN CHAR,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_nfFornecedor             IN NUMBER,
    p_cab_dataEmissao              IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_cab_vendaConsumidor          IN NUMBER,
    p_cab_enderecoEntregaPessoa    IN NUMBER,
    p_cab_localDestinoOperacao     IN CHAR,
    p_cab_indicadorConsumidorFinal IN CHAR,
    p_modDoc_movimentaEstoque      IN NUMBER,
    p_modDoc_geraFinanceiro        IN NUMBER,
    p_munEndEst_uf                 IN CHAR,
    p_pess_indicadorInscricaoEstad IN CHAR,
    p_endPess_enderecoPessoa       IN NUMBER,
    p_munEndPess_uf                IN CHAR,
    p_munEndEntr_uf                IN CHAR,
    p_item_operacaoFiscal          IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_prod_tipoProduto             IN CHAR,
    p_prod_origemMercadoria        IN CHAR,
    p_prod_idNcm                   IN NUMBER,
    p_prod_listaServicos           IN NUMBER,
    p_movimentaEstoque             IN NUMBER,
    p_geraFinanceiro               IN NUMBER,
    p_item_cfop                    IN NUMBER,
    p_atualizarISSQN               IN NUMBER,
    p_item_indicadorISSQN          IN CHAR,
    p_item_aliquotaISSQN           IN NUMBER,
    p_atualizarIRRF                IN NUMBER,
    p_item_aliquotaIRRF            IN NUMBER,
    p_atualizarINSS                IN NUMBER,
    p_item_aliquotaINSS            IN NUMBER,
    p_atualizarRetencaoPIS         IN NUMBER,
    p_item_retencaoPIS             IN NUMBER,
    p_atualizarRetencaoCOFINS      IN NUMBER,
    p_item_retencaoCOFINS          IN NUMBER,
    p_atualizarRetencaoCSLL        IN NUMBER,
    p_item_retencaoCSLL            IN NUMBER,
    p_atualizarII                  IN NUMBER,
    p_item_aliquotaII              IN NUMBER,
    p_atualizarIOF                 IN NUMBER,
    p_item_aliquotaIOF             IN NUMBER,
    p_atualizarIPI                 IN NUMBER,
    p_item_codigoEnquadramentoIPI  IN NUMBER,
    p_item_stIPI                   IN CHAR,
    p_item_aliquotaIPI             IN NUMBER,
    p_item_valorAliquotaIPI        IN NUMBER,
    p_atualizarPIS                 IN NUMBER,
    p_item_stPIS                   IN CHAR,
    p_item_aliquotaPIS             IN NUMBER,
    p_item_valorAliquotaPIS        IN NUMBER,
    p_atualizarPISST               IN NUMBER,
    p_item_aliquotaPISST           IN NUMBER,
    p_item_valorAliquotaPISST      IN NUMBER,
    p_atualizarCOFINS              IN NUMBER,
    p_item_stCOFINS                IN CHAR,
    p_item_aliquotaCOFINS          IN NUMBER,
    p_item_valorAliquotaCOFINS     IN NUMBER,
    p_atualizarCOFINSST            IN NUMBER,
    p_item_aliquotaCOFINSST        IN NUMBER,
    p_item_valorAliquotaCOFINSST   IN NUMBER,
    p_atualizarSimplesNacional     IN NUMBER,
    p_item_stSimplesNacional       IN CHAR,
    p_item_creditoSimplesNacional  IN NUMBER,
    p_atualizarICMS                IN NUMBER,
    p_item_stICMS                  IN CHAR,
    p_item_modalidadeBaseCalcICMS  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_atualizarICMSST              IN NUMBER,
    p_item_modalBaseCalcICMSST     IN CHAR,
    p_item_margemValorAdicST       IN NUMBER,
    p_item_reducaoBaseST           IN NUMBER,
    p_item_aliquotaICMSST          IN NUMBER,
    p_atualizarICMSSTAnteriorEfet  IN NUMBER,
    p_item_aliquotaSTSuportConsF   IN NUMBER,
    p_item_reducaoBaseICMSEfetivo  IN NUMBER,
    p_item_aliquotaICMSEfetivo     IN NUMBER,
    p_atualizarICMSEscrituracao    IN NUMBER,
    p_item_stICMSEscrit            IN CHAR,
    p_item_reducaoBaseICMSEscrit   IN NUMBER,
    p_item_aliquotaICMSEscrit      IN NUMBER,
    p_atualizarICMSSTEscrituracao  IN NUMBER,
    p_item_margemValorAdicSTEscrit IN NUMBER,
    p_item_reducaoBaseSTEscrit     IN NUMBER,
    p_item_aliquotaICMSSTEscrit    IN NUMBER,
    p_item_somarICMSST             IN NUMBER,
    p_atualizarDIFAL               IN NUMBER,
    p_item_aliquotaICMSUFDestinat  IN NUMBER,
    p_item_aliquotaICMSInterestad  IN NUMBER,
    p_item_partilhaICMSInterestad  IN NUMBER,
    p_atualizarFCP                 IN NUMBER,
    p_item_aliquotaFCP             IN NUMBER,
    p_item_aliquotaFCPST           IN NUMBER,
    p_item_aliquotaFCPSTAnteriorm  IN NUMBER,
    p_item_aliquotaFCPUFDestinat   IN NUMBER,
    p_atualizarImpostosEstimados   IN NUMBER,
    p_item_aliquotaEstImpFederais  IN NUMBER,
    p_item_aliquotaEstImpEstaduais IN NUMBER,
    p_item_aliquotaEstImpMunicipai IN NUMBER,
    /* Retornos */
    r_encontrouRegistro            OUT NUMBER,
    r_movimentaEstoque             OUT NUMBER,
    r_geraFinanceiro               OUT NUMBER,
    r_item_cfop                    OUT NUMBER,
    r_item_indicadorISSQN          OUT CHAR,
    r_item_aliquotaISSQN           OUT NUMBER,
    r_item_aliquotaIRRF            OUT NUMBER,
    r_item_aliquotaINSS            OUT NUMBER,
    r_item_retencaoPIS             OUT NUMBER,
    r_item_retencaoCOFINS          OUT NUMBER,
    r_item_retencaoCSLL            OUT NUMBER,
    r_item_aliquotaII              OUT NUMBER,
    r_item_aliquotaIOF             OUT NUMBER,
    r_item_codigoEnquadramentoIPI  OUT NUMBER,
    r_item_stIPI                   OUT CHAR,
    r_item_aliquotaIPI             OUT NUMBER,
    r_item_valorAliquotaIPI        OUT NUMBER,
    r_item_stPIS                   OUT CHAR,
    r_item_aliquotaPIS             OUT NUMBER,
    r_item_valorAliquotaPIS        OUT NUMBER,
    r_item_aliquotaPISST           OUT NUMBER,
    r_item_valorAliquotaPISST      OUT NUMBER,
    r_item_stCOFINS                OUT CHAR,
    r_item_aliquotaCOFINS          OUT NUMBER,
    r_item_valorAliquotaCOFINS     OUT NUMBER,
    r_item_aliquotaCOFINSST        OUT NUMBER,
    r_item_valorAliquotaCOFINSST   OUT NUMBER,
    r_item_stSimplesNacional       OUT CHAR,
    r_item_creditoSimplesNacional  OUT NUMBER,
    r_item_stICMS                  OUT CHAR,
    r_item_modalidadeBaseCalcICMS  OUT CHAR,
    r_item_reducaoBaseICMS         OUT NUMBER,
    r_item_aliquotaICMS            OUT NUMBER,
    r_item_diferimentoICMS         OUT NUMBER,
    r_item_motivoDesoneracaoICMS   OUT CHAR,
    r_item_idBeneficio             OUT NUMBER,
    r_item_modalBaseCalcICMSST     OUT CHAR,
    r_item_margemValorAdicST       OUT NUMBER,
    r_item_reducaoBaseST           OUT NUMBER,
    r_item_aliquotaICMSST          OUT NUMBER,
    r_item_aliquotaSTSuportConsF   OUT NUMBER,
    r_item_reducaoBaseICMSEfetivo  OUT NUMBER,
    r_item_aliquotaICMSEfetivo     OUT NUMBER,
    r_item_stICMSEscrit            OUT CHAR,
    r_item_reducaoBaseICMSEscrit   OUT NUMBER,
    r_item_aliquotaICMSEscrit      OUT NUMBER,
    r_item_margemValorAdicSTEscrit OUT NUMBER,
    r_item_reducaoBaseSTEscrit     OUT NUMBER,
    r_item_aliquotaICMSSTEscrit    OUT NUMBER,
    r_item_somarICMSST             OUT NUMBER,
    r_item_aliquotaICMSUFDestinat  OUT NUMBER,
    r_item_aliquotaICMSInterestad  OUT NUMBER,
    r_item_partilhaICMSInterestad  OUT NUMBER,
    r_item_aliquotaFCP             OUT NUMBER,
    r_item_aliquotaFCPST           OUT NUMBER,
    r_item_aliquotaFCPSTAnteriorm  OUT NUMBER,
    r_item_aliquotaFCPUFDestinat   OUT NUMBER,
    r_item_aliquotaEstImpFederais  OUT NUMBER,
    r_item_aliquotaEstImpEstaduais OUT NUMBER,
    r_item_aliquotaEstImpMunicipai OUT NUMBER)    
IS    
    v_auxNumber                    NUMBER;
    v_auxVarchar                   VARCHAR2(60);  
    v_encontouDesoneracao          NUMBER;
    CURSOR c_opFisc IS
      SELECT
        opFisc.contaContabilDebito,
        opFisc.contaContabilCredito,
        opFisc.historicoContabil,
        opFisc.cfop,
        cfop.geraFinanceiro,
        opFisc.indicadorISSQN,
        opFisc.aliquotaISSQN,
        opFisc.aliquotaIRRF,
        opFisc.aliquotaINSS,
        opFisc.retencaoPIS,
        opFisc.retencaoCOFINS,
        opFisc.retencaoCSLL,
        opFisc.aliquotaII,
        opFisc.aliquotaIOF,
        opFisc.codigoEnquadramentoIPI,
        opFisc.stIPI,
        opFisc.aliquotaIPI,
        opFisc.valorAliquotaIPI,
        opFisc.stPIS,
        opFisc.aliquotaPIS,
        opFisc.valorAliquotaPIS,
        opFisc.aliquotaPISST,
        opFisc.valorAliquotaPISST,
        opFisc.stCOFINS,
        opFisc.aliquotaCOFINS,
        opFisc.valorAliquotaCOFINS,
        opFisc.aliquotaCOFINSST,
        opFisc.valorAliquotaCOFINSST,
        opFisc.stSimplesNacional,
        opFisc.creditoSimplesNacional,
        opFisc.stICMS,
        opFisc.modalidadeBaseCalcICMS,
        opFisc.reducaoBaseICMS,
        opFisc.aliquotaICMS,
        opFisc.diferimentoICMS,
        opFisc.motivoDesoneracaoICMS,
        opFisc.idBeneficio,
        opFisc.modalidadeBaseCalcICMSST,
        opFisc.margemValorAdicionadoST,
        opFisc.reducaoBaseST,
        opFisc.aliquotaICMSST,
        opFisc.aliquotaSTSuportConsFinal,
        opFisc.reducaoBaseICMSEfetivo,
        opFisc.aliquotaICMSEfetivo,
        opFisc.aliquotaICMSUFDestinatario,
        opFisc.aliquotaICMSInterestadual,
        opFisc.partilhaICMSInterestadual,
        opFisc.aliquotaFCP,
        opFisc.aliquotaFCPST,
        opFisc.aliquotaFCPSTAnteriormente,
        opFisc.aliquotaFCPUFDestinatario
      FROM PAOPERACOESFISCAIS opFisc
      JOIN SICFOPS cfop ON opFisc.cfop = cfop.cfop
      WHERE opFisc.operacaoFiscal = p_item_operacaoFiscal;
BEGIN
  r_movimentaEstoque             := p_movimentaEstoque;
  r_geraFinanceiro               := p_geraFinanceiro;
  r_item_cfop                    := p_item_cfop;
  r_item_indicadorISSQN          := p_item_indicadorISSQN;
  r_item_aliquotaISSQN           := p_item_aliquotaISSQN;
  r_item_aliquotaIRRF            := p_item_aliquotaIRRF;
  r_item_aliquotaINSS            := p_item_aliquotaINSS;
  r_item_retencaoPIS             := p_item_retencaoPIS;
  r_item_retencaoCOFINS          := p_item_retencaoCOFINS;
  r_item_retencaoCSLL            := p_item_retencaoCSLL;
  r_item_aliquotaII              := p_item_aliquotaII;
  r_item_aliquotaIOF             := p_item_aliquotaIOF;
  r_item_codigoEnquadramentoIPI  := p_item_codigoEnquadramentoIPI;
  r_item_stIPI                   := p_item_stIPI;
  r_item_aliquotaIPI             := p_item_aliquotaIPI;
  r_item_valorAliquotaIPI        := p_item_valorAliquotaIPI;
  r_item_stPIS                   := p_item_stPIS;
  r_item_aliquotaPIS             := p_item_aliquotaPIS;
  r_item_valorAliquotaPIS        := p_item_valorAliquotaPIS;
  r_item_aliquotaPISST           := p_item_aliquotaPISST;
  r_item_valorAliquotaPISST      := p_item_valorAliquotaPISST;
  r_item_stCOFINS                := p_item_stCOFINS;
  r_item_aliquotaCOFINS          := p_item_aliquotaCOFINS;
  r_item_valorAliquotaCOFINS     := p_item_valorAliquotaCOFINS;
  r_item_aliquotaCOFINSST        := p_item_aliquotaCOFINSST;
  r_item_valorAliquotaCOFINSST   := p_item_valorAliquotaCOFINSST;
  r_item_stSimplesNacional       := p_item_stSimplesNacional;
  r_item_creditoSimplesNacional  := p_item_creditoSimplesNacional;
  r_item_stICMS                  := p_item_stICMS;
  r_item_modalidadeBaseCalcICMS  := p_item_modalidadeBaseCalcICMS;
  r_item_reducaoBaseICMS         := p_item_reducaoBaseICMS;
  r_item_aliquotaICMS            := p_item_aliquotaICMS;
  r_item_diferimentoICMS         := p_item_diferimentoICMS;
  r_item_motivoDesoneracaoICMS   := p_item_motivoDesoneracaoICMS;
  r_item_idBeneficio             := p_item_idBeneficio;
  r_item_modalBaseCalcICMSST     := p_item_modalBaseCalcICMSST;
  r_item_margemValorAdicST       := p_item_margemValorAdicST;
  r_item_reducaoBaseST           := p_item_reducaoBaseST;
  r_item_aliquotaICMSST          := p_item_aliquotaICMSST;
  r_item_aliquotaSTSuportConsF   := p_item_aliquotaSTSuportConsF;
  r_item_reducaoBaseICMSEfetivo  := p_item_reducaoBaseICMSEfetivo;
  r_item_aliquotaICMSEfetivo     := p_item_aliquotaICMSEfetivo;
  r_item_stICMSEscrit            := p_item_stICMSEscrit;
  r_item_reducaoBaseICMSEscrit   := p_item_reducaoBaseICMSEscrit;
  r_item_aliquotaICMSEscrit      := p_item_aliquotaICMSEscrit;
  r_item_margemValorAdicSTEscrit := p_item_margemValorAdicSTEscrit;
  r_item_reducaoBaseSTEscrit     := p_item_reducaoBaseSTEscrit;
  r_item_aliquotaICMSSTEscrit    := p_item_aliquotaICMSSTEscrit;
  r_item_somarICMSST             := p_item_somarICMSST;
  r_item_aliquotaICMSUFDestinat  := p_item_aliquotaICMSUFDestinat;
  r_item_aliquotaICMSInterestad  := p_item_aliquotaICMSInterestad;
  r_item_partilhaICMSInterestad  := p_item_partilhaICMSInterestad;
  r_item_aliquotaFCP             := p_item_aliquotaFCP;
  r_item_aliquotaFCPST           := p_item_aliquotaFCPST;
  r_item_aliquotaFCPSTAnteriorm  := p_item_aliquotaFCPSTAnteriorm;
  r_item_aliquotaFCPUFDestinat   := p_item_aliquotaFCPUFDestinat;
  r_item_aliquotaEstImpFederais  := p_item_aliquotaEstImpFederais;
  r_item_aliquotaEstImpEstaduais := p_item_aliquotaEstImpEstaduais;
  r_item_aliquotaEstImpMunicipai := p_item_aliquotaEstImpMunicipai;
  r_encontrouRegistro := 0;
  FOR opFisc IN c_opFisc LOOP
    IF p_cab_origemDocumento NOT IN (4,6,9,10,11,12) OR p_inserindoItem = 1 THEN
      r_movimentaEstoque             := p_modDoc_movimentaEstoque;
    END IF;
    IF p_cab_origemDocumento NOT IN (4,6,9) OR p_inserindoItem = 1 THEN
      r_geraFinanceiro               := CASE WHEN p_modDoc_geraFinanceiro = 1 AND opFisc.geraFinanceiro = 1 THEN 1 ELSE 0 END;
    END IF;
    r_item_cfop                      := opFisc.cfop;
    IF p_atualizarISSQN = 1 THEN
      r_item_indicadorISSQN          := opFisc.indicadorISSQN;
      r_item_aliquotaISSQN           := opFisc.aliquotaISSQN;
    END IF;
    IF p_atualizarIRRF = 1 THEN
      r_item_aliquotaIRRF            := opFisc.aliquotaIRRF;
    END IF;
    IF p_atualizarINSS = 1 THEN
      r_item_aliquotaINSS            := opFisc.aliquotaINSS;
    END IF;
    IF p_atualizarRetencaoPIS = 1 THEN
      r_item_retencaoPIS             := opFisc.retencaoPIS;
    END IF;
    IF p_atualizarRetencaoCOFINS = 1 THEN
      r_item_retencaoCOFINS          := opFisc.retencaoCOFINS;
    END IF;
    IF p_atualizarRetencaoCSLL = 1 THEN
      r_item_retencaoCSLL            := opFisc.retencaoCSLL;
    END IF;
    IF p_atualizarII = 1 THEN
      r_item_aliquotaII              := opFisc.aliquotaII;
    END IF;
    IF p_atualizarIOF = 1 THEN
      r_item_aliquotaIOF             := opFisc.aliquotaIOF;
    END IF;
    IF p_atualizarIPI = 1 THEN
      r_item_codigoEnquadramentoIPI  := opFisc.codigoEnquadramentoIPI;
      r_item_stIPI                   := opFisc.stIPI;
      r_item_aliquotaIPI             := opFisc.aliquotaIPI;
      r_item_valorAliquotaIPI        := opFisc.valorAliquotaIPI;
    END IF;
    IF p_atualizarPIS = 1 THEN
      r_item_stPIS                   := opFisc.stPIS;
      r_item_aliquotaPIS             := opFisc.aliquotaPIS;
      r_item_valorAliquotaPIS        := opFisc.valorAliquotaPIS;
    END IF;
    IF p_atualizarPISST = 1 THEN
      r_item_aliquotaPISST           := opFisc.aliquotaPISST;
      r_item_valorAliquotaPISST      := opFisc.valorAliquotaPISST;
    END IF;
    IF p_atualizarCOFINS = 1 THEN
      r_item_stCOFINS                := opFisc.stCOFINS;
      r_item_aliquotaCOFINS          := opFisc.aliquotaCOFINS;
      r_item_valorAliquotaCOFINS     := opFisc.valorAliquotaCOFINS;
    END IF;
    IF p_atualizarCOFINSST = 1 THEN
      r_item_aliquotaCOFINSST        := opFisc.aliquotaCOFINSST;
      r_item_valorAliquotaCOFINSST   := opFisc.valorAliquotaCOFINSST;
    END IF;
    IF p_atualizarSimplesNacional = 1 THEN
      r_item_stSimplesNacional       := opFisc.stSimplesNacional;
      r_item_creditoSimplesNacional  := opFisc.creditoSimplesNacional;
    END IF;
    IF p_atualizarICMS = 1 THEN
      r_item_stICMS                  := opFisc.stICMS;
      ADD_ITEM_DESON_FISCAL_BUSCA (
        p_cab_tipoDocumento,
        p_cab_entradaSaida,
        p_cab_estabelecimento,
        p_cab_pessoa,
        p_cab_vendaConsumidor,
        p_munEndEst_uf,
        p_munEndPess_uf,
        r_item_stICMS,
        p_gradProd_produto,
        p_prod_origemMercadoria,
        p_prod_idNcm,
        /* Retornos */
        v_encontouDesoneracao,
        r_item_modalidadeBaseCalcICMS,
        r_item_reducaoBaseICMS,
        r_item_aliquotaICMS,
        r_item_diferimentoICMS,
        r_item_motivoDesoneracaoICMS,
        r_item_idBeneficio,
        v_auxNumber);
      IF v_encontouDesoneracao = 0 THEN
        r_item_modalidadeBaseCalcICMS  := opFisc.modalidadeBaseCalcICMS;
        r_item_reducaoBaseICMS         := opFisc.reducaoBaseICMS;
        r_item_aliquotaICMS            := opFisc.aliquotaICMS;
        r_item_diferimentoICMS         := opFisc.diferimentoICMS;
        r_item_motivoDesoneracaoICMS   := opFisc.motivoDesoneracaoICMS;
        r_item_idBeneficio             := opFisc.idBeneficio;
      END IF;
      IF r_item_aliquotaICMS = 0 AND r_item_stICMS in ('00','10','20','70') THEN
        SELECT COALESCE(MAX(aliquotaIcms),0)
        INTO r_item_aliquotaICMS
        FROM PAUFORIGEMXUFDESTINO
        WHERE ufOrigem =
          CASE
            WHEN p_cab_entradaSaida  = 'S'
            OR p_munEndPess_uf          = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_cab_tipoDocumento IN (503,504)
            THEN p_munEndEst_uf
            ELSE p_munEndPess_uf
          END
        AND ufDestino =
          CASE
            WHEN p_cab_entradaSaida  = 'E'
            OR p_munEndPess_uf          = '  '
            OR p_cab_vendaConsumidor = 1
            OR p_cab_tipoDocumento IN (503,504)
            THEN p_munEndEst_uf
            ELSE p_munEndPess_uf
          END;
      END IF;
    END IF;
    IF p_atualizarICMSST              = 1 THEN
      r_item_modalBaseCalcICMSST     := opFisc.modalidadeBaseCalcICMSST;
      r_item_margemValorAdicST       := opFisc.margemValorAdicionadoST;
      r_item_reducaoBaseST           := opFisc.reducaoBaseST;
      r_item_aliquotaICMSST          := opFisc.aliquotaICMSST;
      r_item_somarICMSST             := 1;
    END IF;
    IF p_atualizarICMSSTAnteriorEfet  = 1 THEN
      r_item_aliquotaSTSuportConsF   := opFisc.aliquotaSTSuportConsFinal;
      r_item_reducaoBaseICMSEfetivo  := opFisc.reducaoBaseICMSEfetivo;
      r_item_aliquotaICMSEfetivo     := opFisc.aliquotaICMSEfetivo;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_stICMSEscrit            := CASE WHEN p_cab_nfFornecedor = 1 AND p_prod_tipoProduto IN('07','08') THEN '90' WHEN p_cab_nfFornecedor = 1 AND r_item_stICMS IN('10','30','70') OR p_cab_nfFornecedor = 1 AND r_item_stICMS = ' ' AND r_item_stSimplesNacional IN ('201','202','203') OR r_item_stICMS = ' ' AND r_item_stSimplesNacional = '500' THEN '60' WHEN r_item_stICMS <> ' ' THEN r_item_stICMS WHEN r_item_stSimplesNacional IN ('101','102') AND r_item_reducaoBaseICMS = 0 THEN '00' WHEN r_item_stSimplesNacional IN ('101','102') THEN '20' WHEN r_item_stSimplesNacional IN ('103','300') THEN '40' WHEN r_item_stSimplesNacional IN ('201','202','203') AND r_item_reducaoBaseICMS = 0 THEN '10' WHEN r_item_stSimplesNacional IN ('201','202','203') THEN '70' WHEN r_item_stSimplesNacional = '400' THEN '41' ELSE '90' END;
      r_item_reducaoBaseICMSEscrit   := CASE WHEN p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','70') OR r_item_stICMS = ' ' AND r_item_stSimplesNacional IN ('201','202','203')) OR r_item_stICMS = ' ' AND r_item_stSimplesNacional = '500' THEN 0 WHEN r_item_stICMS <> ' ' THEN r_item_reducaoBaseICMS ELSE 0 END;
      r_item_aliquotaICMSEscrit      := CASE WHEN p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','70') OR r_item_stICMS = ' ' AND r_item_stSimplesNacional IN ('201','202','203')) OR r_item_stICMS = ' ' AND r_item_stSimplesNacional = '500' THEN 0 WHEN r_item_stICMS <> ' ' THEN r_item_aliquotaICMS WHEN r_item_stSimplesNacional IN ('101','201') THEN r_item_creditoSimplesNacional ELSE 0 END;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_margemValorAdicSTEscrit := CASE WHEN r_item_stICMS = ' ' OR p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','60','70')) THEN 0 ELSE r_item_margemValorAdicST END;
      r_item_reducaoBaseSTEscrit     := CASE WHEN r_item_stICMS = ' ' OR p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','60','70')) THEN 0 ELSE r_item_reducaoBaseST END;
      r_item_aliquotaICMSSTEscrit    := CASE WHEN r_item_stICMS = ' ' OR p_cab_nfFornecedor = 1 AND (p_prod_tipoProduto IN('07','08') OR r_item_stICMS IN('10','30','60','70')) THEN 0 ELSE r_item_aliquotaICMSST END;
    END IF;
    IF p_atualizarDIFAL                 = 1 THEN
      IF p_cab_entradaSaida='S'
        AND NOT(p_cab_finalidadeNota IN('2','3'))
        AND p_cab_localDestinoOperacao = '2'
        AND p_cab_indicadorConsumidorFinal = '1'
        AND p_pess_indicadorInscricaoEstad = '9'
        AND (p_cab_pessoa = 0
          OR p_cab_vendaConsumidor = 1
          OR p_cab_enderecoEntregaPessoa = p_endPess_enderecoPessoa
          OR p_munEndEntr_uf <> p_munEndEst_uf)
        AND NOT (r_item_cfop IN(6552,6922,6929))
        AND (p_prod_tipoProduto <> '09'
          OR NOT (r_item_indicadorISSQN IN('1','2','3','4','5','6','7')))
        AND NOT(r_item_stSimplesNacional IN('103','300','400'))
        AND NOT(r_item_stICMS IN('10','40','41','90')) THEN
        r_item_aliquotaICMSUFDestinat  := opFisc.aliquotaICMSUFDestinatario;
        r_item_aliquotaICMSInterestad  := opFisc.aliquotaICMSInterestadual;
        r_item_partilhaICMSInterestad  := opFisc.partilhaICMSInterestadual;
        IF r_item_aliquotaICMSUFDestinat = 0
          AND r_item_aliquotaICMSInterestad = 0
          AND r_item_partilhaICMSInterestad = 0
          AND (r_item_stSimplesNacional = ''
            OR r_item_stSimplesNacional = ' '
            OR r_item_stSimplesNacional = '  '
            OR r_item_stSimplesNacional = '   ') THEN
          SELECT COALESCE(MAX(aliquotaIcms),0)
          INTO r_item_aliquotaICMSUFDestinat
          FROM PAUFORIGEMXUFDESTINO
          WHERE ufOrigem = p_munEndPess_uf
          AND ufDestino = p_munEndPess_uf;
          IF p_prod_origemMercadoria = '0' THEN
            SELECT COALESCE(MAX(aliquotaIcms),0)
            INTO r_item_aliquotaICMSInterestad
            FROM PAUFORIGEMXUFDESTINO
            WHERE ufOrigem = p_munEndEst_uf
            AND ufDestino = p_munEndPess_uf;
          ELSE
            r_item_aliquotaICMSInterestad  := 4;
          END IF;
          r_item_partilhaICMSInterestad  := 100;
        END IF;
      ELSE
        r_item_aliquotaICMSUFDestinat  := 0;
        r_item_aliquotaICMSInterestad  := 0;
        r_item_partilhaICMSInterestad  := 0;
      END IF;
    END IF;
    IF p_atualizarFCP                 = 1 THEN
      r_item_aliquotaFCP             := opFisc.aliquotaFCP;
      r_item_aliquotaFCPST           := opFisc.aliquotaFCPST;
      r_item_aliquotaFCPSTAnteriorm  := opFisc.aliquotaFCPSTAnteriormente;
      r_item_aliquotaFCPUFDestinat   := opFisc.aliquotaFCPUFDestinatario;
    END IF;
    r_encontrouRegistro              := 1;
  END LOOP;
  
  IF r_encontrouRegistro              = 1 THEN
    IF p_atualizarImpostosEstimados   = 1 THEN
      r_item_aliquotaEstImpFederais  := 0;
      r_item_aliquotaEstImpEstaduais := 0;
      r_item_aliquotaEstImpMunicipai := 0;
      
      IF p_cab_entradaSaida = 'S' AND p_cab_devolucaoAnulacaoRetorno = 0 THEN
        ADD_BUSCA_IBPT (
          p_cab_dataEmissao,
          p_munEndEst_uf,
          p_prod_origemMercadoria,
          p_prod_idNcm,
          p_prod_listaServicos,
          /* Retornos */
          v_auxNumber,
          v_auxNumber,
          r_item_aliquotaEstImpFederais,
          r_item_aliquotaEstImpEstaduais,
          r_item_aliquotaEstImpMunicipai,
          v_auxVarchar,
          v_auxVarchar,
          v_auxVarchar
        );
      END IF;
    END IF;
  ELSE
    IF p_cab_origemDocumento NOT IN (4,6,9,10,11,12) THEN
      r_movimentaEstoque             := p_modDoc_movimentaEstoque;
      r_geraFinanceiro               := p_modDoc_geraFinanceiro;
    END IF;
    r_item_cfop                      := 0;
    IF p_atualizarISSQN               = 1 THEN
      r_item_indicadorISSQN          := ' ';
      r_item_aliquotaISSQN           := 0;
    END IF;
    IF p_atualizarIRRF                = 1 THEN
      r_item_aliquotaIRRF            := 0;
    END IF;
    IF p_atualizarINSS                = 1 THEN
      r_item_aliquotaINSS            := 0;
    END IF;
    IF p_atualizarRetencaoPIS         = 1 THEN
      r_item_retencaoPIS             := 0;
    END IF;
    IF p_atualizarRetencaoCOFINS      = 1 THEN
      r_item_retencaoCOFINS          := 0;
    END IF;
    IF p_atualizarRetencaoCSLL        = 1 THEN
      r_item_retencaoCSLL            := 0;
    END IF;
    IF p_atualizarII                  = 1 THEN
      r_item_aliquotaII              := 0;
    END IF;
    IF p_atualizarIOF                 = 1 THEN
      r_item_aliquotaIOF             := 0;
    END IF;
    IF p_atualizarIPI                 = 1 THEN
      r_item_codigoEnquadramentoIPI  := 0;
      r_item_stIPI                   := '  ';
      r_item_aliquotaIPI             := 0;
      r_item_valorAliquotaIPI        := 0;
    END IF;
    IF p_atualizarPIS                 = 1 THEN
      r_item_stPIS                   := '  ';
      r_item_aliquotaPIS             := 0;
      r_item_valorAliquotaPIS        := 0;
    END IF;
    IF p_atualizarPISST               = 1 THEN
      r_item_aliquotaPISST           := 0;
      r_item_valorAliquotaPISST      := 0;
    END IF;
    IF p_atualizarCOFINS              = 1 THEN
      r_item_stCOFINS                := '  ';
      r_item_aliquotaCOFINS          := 0;
      r_item_valorAliquotaCOFINS     := 0;
    END IF;
    IF p_atualizarCOFINSST            = 1 THEN
      r_item_aliquotaCOFINSST        := 0;
      r_item_valorAliquotaCOFINSST   := 0;
    END IF;
    IF p_atualizarSimplesNacional     = 1 THEN
      r_item_stSimplesNacional       := '   ';
      r_item_creditoSimplesNacional  := 0;
    END IF;
    IF p_atualizarICMS                = 1 THEN
      r_item_stICMS                  := '  ';
      r_item_modalidadeBaseCalcICMS  := ' ';
      r_item_reducaoBaseICMS         := 0;
      r_item_aliquotaICMS            := 0;
      r_item_diferimentoICMS         := 0;
      r_item_motivoDesoneracaoICMS   := '  ';
      r_item_idBeneficio             := 0;
    END IF;
    IF p_atualizarICMSST              = 1 THEN
      r_item_modalBaseCalcICMSST     := ' ';
      r_item_margemValorAdicST       := 0;
      r_item_reducaoBaseST           := 0;
      r_item_aliquotaICMSST          := 0;
      r_item_somarICMSST             := 0;
    END IF;
    IF p_atualizarICMSSTAnteriorEfet  = 1 THEN
      r_item_aliquotaSTSuportConsF   := 0;
      r_item_reducaoBaseICMSEfetivo  := 0;
      r_item_aliquotaICMSEfetivo     := 0;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_stICMSEscrit            := '  ';
      r_item_reducaoBaseICMSEscrit   := 0;
      r_item_aliquotaICMSEscrit      := 0;
    END IF;
    IF p_atualizarICMSEscrituracao    = 1 THEN
      r_item_margemValorAdicSTEscrit := 0;
      r_item_reducaoBaseSTEscrit     := 0;
      r_item_aliquotaICMSSTEscrit    := 0;
    END IF;
    IF p_atualizarDIFAL               = 1 THEN
      r_item_aliquotaICMSUFDestinat  := 0;
      r_item_aliquotaICMSInterestad  := 0;
      r_item_partilhaICMSInterestad  := 0;
    END IF;
    IF p_atualizarFCP                 = 1 THEN
      r_item_aliquotaFCP             := 0;
      r_item_aliquotaFCPST           := 0;
      r_item_aliquotaFCPSTAnteriorm  := 0;
      r_item_aliquotaFCPUFDestinat   := 0;
    END IF;
    IF p_atualizarImpostosEstimados   = 1 THEN
      r_item_aliquotaEstImpFederais  := 0;
      r_item_aliquotaEstImpEstaduais := 0;
      r_item_aliquotaEstImpMunicipai := 0;
    END IF;
  END IF;
END ADD_ITEM_OPERACAO_FISCAL_BUSCA;

/

create or replace PROCEDURE ADD_CALCULA_VALOR_LIQUIDO (
    p_cab_origemDocumento          IN NUMBER,
    p_cab_nfFornecedor             IN NUMBER,
    p_cab_tipoPagamentoFrete       IN CHAR,
    p_item_geraFinanceiro          IN NUMBER,
    p_item_valorProdutoServico     IN NUMBER,
    p_item_valorDescontoPagamento  IN NUMBER,
    p_item_valorOutrasDespPagam    IN NUMBER,
    p_item_valorJurosPagamento     IN NUMBER,
    p_item_valorFreteTotal         IN NUMBER,
    p_item_valorSeguroTotal        IN NUMBER,
    p_item_valorDescontoTotal      IN NUMBER,
    p_item_valorOutrasDespTotal    IN NUMBER,
    p_item_valorIRRF               IN NUMBER,
    p_item_valorINSS               IN NUMBER,
    p_item_valorRetPIS             IN NUMBER,
    p_item_valorRetCOFINS          IN NUMBER,
    p_item_valorRetCSLL            IN NUMBER,
    p_item_valorII                 IN NUMBER,
    p_item_valorIOF                IN NUMBER,
    p_item_valorIPI                IN NUMBER,
    p_item_valorIPIDevolucao       IN NUMBER,
    p_item_valorICMSST             IN NUMBER,
    p_item_valorICMSSTEscrit       IN NUMBER,
    p_item_somarICMSST             IN NUMBER,
    p_item_valorAcrescExtempTotal  IN NUMBER,
    /* Retornos */
    r_item_valorBasePagamento      OUT NUMBER,
    r_item_valorImpostosSomaPag    OUT NUMBER,
    r_item_valorImpostosDiminuiPag OUT NUMBER,
    r_item_valorLiquidoItem        OUT NUMBER)
IS
BEGIN
  r_item_valorImpostosSomaPag :=
    p_item_valorII
    + p_item_valorIOF
    + p_item_valorIPI
    + p_item_valorIPIDevolucao
    + CASE
        WHEN p_cab_nfFornecedor = 1 AND (p_item_somarICMSST = 1 AND p_item_geraFinanceiro = 1 OR p_item_somarICMSST = 2)
        THEN CASE WHEN p_item_valorICMSSTEscrit = 0 THEN p_item_valorICMSST ELSE p_item_valorICMSSTEscrit END
        WHEN p_cab_nfFornecedor = 1
        THEN 0
        ELSE p_item_valorICMSST
      END;
  r_item_valorImpostosDiminuiPag :=
    p_item_valorIRRF
    + p_item_valorINSS
    + p_item_valorRetPIS
    + p_item_valorRetCOFINS
    + p_item_valorRetCSLL;  
  r_item_valorBasePagamento :=
    CASE
      WHEN p_item_geraFinanceiro = 1
      THEN
        p_item_valorProdutoServico
        - p_item_valorDescontoTotal
        + p_item_valorDescontoPagamento
        + p_item_valorOutrasDespTotal
        - p_item_valorOutrasDespPagam
        - p_item_valorJurosPagamento
        + p_item_valorII
        + p_item_valorIOF
        + p_item_valorIPI
        + p_item_valorIPIDevolucao
        - p_item_valorIRRF
        - p_item_valorINSS
        - p_item_valorRetPIS
        - p_item_valorRetCOFINS
        - p_item_valorRetCSLL
        + p_item_valorAcrescExtempTotal
      ELSE 0
    END
    + CASE
        WHEN p_cab_tipoPagamentoFrete <> 'V'
          AND (p_item_geraFinanceiro = 1
            OR p_cab_origemDocumento <> 9)
        THEN p_item_valorFreteTotal + p_item_valorSeguroTotal
        ELSE 0
      END
    + CASE
        WHEN p_cab_nfFornecedor = 1
          AND (p_item_somarICMSST = 1
            AND p_item_geraFinanceiro = 1
            OR p_item_somarICMSST = 2)
        THEN
          CASE
            WHEN p_item_valorICMSSTEscrit = 0
            THEN p_item_valorICMSST
            ELSE p_item_valorICMSSTEscrit
          END
        WHEN p_cab_nfFornecedor = 1
          OR p_item_geraFinanceiro = 0
        THEN 0
        ELSE p_item_valorICMSST
      END;
  r_item_valorLiquidoItem := 
    p_item_valorProdutoServico
    + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_item_valorFreteTotal + p_item_valorSeguroTotal END
    - p_item_valorDescontoTotal
    + p_item_valorOutrasDespTotal
    + p_item_valorII
    + p_item_valorIOF
    + p_item_valorIPI
    + p_item_valorIPIDevolucao
    + CASE
        WHEN p_cab_nfFornecedor = 1
          AND p_item_somarICMSST = 1
        THEN
          CASE
            WHEN p_item_valorICMSSTEscrit = 0
            THEN p_item_valorICMSST
            ELSE p_item_valorICMSSTEscrit
          END
        WHEN p_cab_nfFornecedor = 1
        THEN 0
        ELSE p_item_valorICMSST
      END    
    - p_item_valorIRRF
    - p_item_valorINSS
    - p_item_valorRetPIS
    - p_item_valorRetCOFINS
    - p_item_valorRetCSLL;
END ADD_CALCULA_VALOR_LIQUIDO;

/

create or replace PROCEDURE ADD_CALCULA_MARGEM_CONTRIB (
    p_config_65_casasDecEntrada    IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_regMarg_tipoPreco            IN CHAR,
    p_regMarg_tabelaPreco          IN VARCHAR2,
    p_regMarg_fatorMultiplicador   IN NUMBER,
    p_regMarg_tipoPrecoB           IN CHAR,
    p_regMarg_tabelaPrecoB         IN VARCHAR2,
    p_regMarg_fatorMultiplicadorB  IN NUMBER,
    p_regMarg_reduzirImpostos      IN NUMBER,
    p_regMarg_reduzirTarifaCartao  IN NUMBER,
    p_regMarg_taxaCapitacaoCustoFi IN NUMBER,
    p_regMarg_exibImagemMargemItem IN NUMBER,
    p_regMarg_regraImagemItem      IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataPreco                IN DATE,
    p_cab_prazoMedioPonderado      IN NUMBER,
    p_cab_valorLiquidoItem         IN NUMBER,
    p_cab_valorTarifaCartao        IN NUMBER,
    p_munEndEst_uf                 IN CHAR,
    p_item_idFormulaTinta          IN NUMBER,
    p_item_personalizacao          IN NUMBER,
    p_item_localEstoque            IN NUMBER,
    p_item_pessoaParticipante      IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_item_valorFreteTotal         IN NUMBER,
    p_item_valorSeguroTotal        IN NUMBER,
    p_item_valorAdicFreteMarTotal  IN NUMBER,
    p_item_valorDespesasAduanTotal IN NUMBER,
    p_item_valorII                 IN NUMBER,
    p_item_valorIOF                IN NUMBER,
    p_item_valorIPI                IN NUMBER,
    p_item_valorIPIDevolucao       IN NUMBER,
    p_item_valorPIS                IN NUMBER,
    p_item_valorPISST              IN NUMBER,
    p_item_valorCOFINS             IN NUMBER,
    p_item_valorCOFINSST           IN NUMBER,
    p_item_valorCreditoSimplesNac  IN NUMBER,
    p_item_valorICMSOperacao       IN NUMBER,
    p_item_valorICMSDiferido       IN NUMBER,
    p_item_valorICMS               IN NUMBER,
    p_item_valorICMSDesoneracao    IN NUMBER,
    p_item_valorICMSST             IN NUMBER,
    p_item_valorICMSSTAnteriorment IN NUMBER,
    p_item_valorICMSUFDestinatario IN NUMBER,
    p_item_valorICMSUFRemetente    IN NUMBER,
    p_item_valorFCP                IN NUMBER,
    p_item_valorFCPST              IN NUMBER,
    p_item_valorFCPSTAnteriormente IN NUMBER,
    p_item_valorFCPUFDestinatario  IN NUMBER,
    p_item_valorLiquidoItem        IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR,
    /* Retornos */
    r_valorLiquidoSemFreteSeguro   OUT NUMBER,
    r_valorCaptacao                OUT NUMBER,
    r_valorTarifaCartao            OUT NUMBER,
    r_valorImpostos                OUT NUMBER,
    r_precoCusto                   OUT NUMBER,
    r_valorCusto                   OUT NUMBER,
    r_valorMargem                  OUT NUMBER,
    r_percentualMargem             OUT NUMBER)
IS
    v_auxNumber NUMBER;
    v_auxVarchar VARCHAR2(256);    
BEGIN
  r_valorLiquidoSemFreteSeguro := p_item_valorLiquidoItem - p_item_valorFreteTotal - p_item_valorSeguroTotal - p_item_valorAdicFreteMarTotal - p_item_valorDespesasAduanTotal;
  r_valorCaptacao := FUNC_ADD_CALC_VALOR_CAPTACAO(p_cab_prazoMedioPonderado,p_regMarg_taxaCapitacaoCustoFi,r_valorLiquidoSemFreteSeguro);
  IF (p_regMarg_reduzirTarifaCartao = 1 AND p_cab_valorLiquidoItem <> 0) THEN
    r_valorTarifaCartao := CASE WHEN p_cab_valorLiquidoItem = 0 THEN 0 ELSE ROUND ((p_cab_valorTarifaCartao * p_item_valorLiquidoItem / p_cab_valorLiquidoItem), 2) END;
  ELSE
    r_valorTarifaCartao := 0;
  END IF;
  IF p_regMarg_reduzirImpostos = 1 THEN
    r_valorImpostos :=
      p_item_valorII
      + p_item_valorIOF
      + p_item_valorIPI
      + p_item_valorIPIDevolucao
      + p_item_valorPIS
      + p_item_valorPISST
      + p_item_valorCOFINS
      + p_item_valorCOFINSST
      + p_item_valorCreditoSimplesNac
      + p_item_valorICMSOperacao
      + p_item_valorICMSDiferido
      + p_item_valorICMS
      + p_item_valorICMSDesoneracao
      + p_item_valorICMSST
      + p_item_valorICMSSTAnteriorment
      + p_item_valorICMSUFDestinatario
      + p_item_valorICMSUFRemetente
      + p_item_valorFCP
      + p_item_valorFCPST
      + p_item_valorFCPSTAnteriormente
      + p_item_valorFCPUFDestinatario;
  ELSE
    r_valorImpostos := 0;
  END IF;
  ADD_BUSCA_PRECO (
    p_config_65_casasDecEntrada,
    p_config_65_casasDecEntrada,
    p_config_209_filtrarGrupoEcon,
    p_config_362_calcCustoPorGrade,
    0,
    0,
    'E',
    0,
    p_cab_estabelecimento,
    NULL,
    p_cab_dataPreco,
    0,
    0,
    p_regMarg_tipoPreco,
    p_regMarg_tabelaPreco,
    p_regMarg_fatorMultiplicador,
    p_regMarg_tipoPrecoB,
    p_regMarg_tabelaPrecoB,
    p_regMarg_fatorMultiplicadorB,
    p_munEndEst_uf,
    p_munEndEst_uf,
    0,
    p_item_idFormulaTinta,
    p_item_personalizacao,
    p_item_localEstoque,
    p_item_pessoaParticipante,
    p_item_quantidade,
    p_gradProd_produto,
    p_gradProd_cor,
    p_gradProd_tamanho,
    p_prod_controleEstoque,
    p_locEst_indicadorPropPosseIt,
    0,
    0,
    0,
    ' ',
    ' ',
    /* Retornos */
    v_auxVarchar,
    v_auxVarchar,
    r_precoCusto,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber,
    v_auxNumber);
  -- CUSTOMIZAÇÃO CENTERLUZ
  -- r_valorImpostos      := ROUND ((r_valorLiquidoSemFreteSeguro * 0.3),2);
  -- r_valorTarifaCartao  := ROUND ((p_cab_valorLiquidoItem * 0.005),2);
  r_valorCusto         := ROUND ((p_item_quantidade * r_precoCusto),2);
  r_valorMargem        := r_valorLiquidoSemFreteSeguro - r_valorCaptacao - r_valorImpostos - r_valorTarifaCartao - r_valorCusto;
  r_percentualMargem   := CASE WHEN r_valorLiquidoSemFreteSeguro = 0 THEN 0 ELSE ROUND ((100 * r_valorMargem / r_valorLiquidoSemFreteSeguro), 8) END;
END ADD_CALCULA_MARGEM_CONTRIB;

/

create or replace FUNCTION FUNC_ADD_CALC_MARGEM_CONTRIB (
    p_config_65_casasDecEntrada    IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_regMarg_tipoPreco            CHAR,
    p_regMarg_tabelaPreco          VARCHAR2,
    p_regMarg_fatorMultiplicador   NUMBER,
    p_regMarg_tipoPrecoB           CHAR,
    p_regMarg_tabelaPrecoB         VARCHAR2,
    p_regMarg_fatorMultiplicadorB  NUMBER,
    p_regMarg_reduzirImpostos      NUMBER,
    p_regMarg_reduzirTarifaCartao  NUMBER,
    p_regMarg_taxaCapitacaoCustoFi NUMBER,
    p_regMarg_exibImagemMargemItem NUMBER,
    p_regMarg_regraImagemItem      NUMBER,
    p_cab_estabelecimento          NUMBER,
    p_cab_dataPreco                DATE,
    p_cab_prazoMedioPonderado      NUMBER,
    p_cab_valorLiquidoItem         NUMBER,
    p_cab_valorTarifaCartao        NUMBER,
    p_munEndEst_uf                 IN CHAR,
    p_item_idFormulaTinta          NUMBER,
    p_item_personalizacao          NUMBER,
    p_item_localEstoque            NUMBER,
    p_item_pessoaParticipante      NUMBER,
    p_item_quantidade              NUMBER,
    p_item_valorFreteTotal         NUMBER,
    p_item_valorSeguroTotal        NUMBER,
    p_item_valorAdicFreteMarTotal  NUMBER,
    p_item_valorDespesasAduanTotal NUMBER,
    p_item_valorII                 NUMBER,
    p_item_valorIOF                NUMBER,
    p_item_valorIPI                NUMBER,
    p_item_valorIPIDevolucao       NUMBER,
    p_item_valorPIS                NUMBER,
    p_item_valorPISST              NUMBER,
    p_item_valorCOFINS             NUMBER,
    p_item_valorCOFINSST           NUMBER,
    p_item_valorCreditoSimplesNac  NUMBER,
    p_item_valorICMSOperacao       NUMBER,
    p_item_valorICMSDiferido       NUMBER,
    p_item_valorICMS               NUMBER,
    p_item_valorICMSDesoneracao    NUMBER,
    p_item_valorICMSST             NUMBER,
    p_item_valorICMSSTAnteriorment NUMBER,
    p_item_valorICMSUFDestinatario NUMBER,
    p_item_valorICMSUFRemetente    NUMBER,
    p_item_valorFCP                NUMBER,
    p_item_valorFCPST              NUMBER,
    p_item_valorFCPSTAnteriormente NUMBER,
    p_item_valorFCPUFDestinatario  NUMBER,
    p_item_valorLiquidoItem        NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    p_locEst_indicadorPropPosseIt  IN CHAR)
  RETURN VARCHAR2
IS
    v_valorLiquidoSemFreteSeguro   NUMBER;
    v_valorCaptacao                NUMBER;
    v_valorTarifaCartao            NUMBER;
    v_valorImpostos                NUMBER;
    v_precoCusto                   NUMBER;
    v_valorCusto                   NUMBER;
    v_valorMargem                  NUMBER;
    v_percentualMargem             NUMBER;
BEGIN
  ADD_CALCULA_MARGEM_CONTRIB (
    p_config_65_casasDecEntrada,
    p_config_209_filtrarGrupoEcon,
    p_config_362_calcCustoPorGrade,
    p_regMarg_tipoPreco,
    p_regMarg_tabelaPreco,
    p_regMarg_fatorMultiplicador,
    p_regMarg_tipoPrecoB,
    p_regMarg_tabelaPrecoB,
    p_regMarg_fatorMultiplicadorB,
    p_regMarg_reduzirImpostos,
    p_regMarg_reduzirTarifaCartao,
    p_regMarg_taxaCapitacaoCustoFi,
    p_regMarg_exibImagemMargemItem,
    p_regMarg_regraImagemItem,
    p_cab_estabelecimento,
    p_cab_dataPreco,
    p_cab_prazoMedioPonderado,
    p_cab_valorLiquidoItem,
    p_cab_valorTarifaCartao,
    p_munEndEst_uf,
    p_item_idFormulaTinta,
    p_item_personalizacao,
    p_item_localEstoque,
    p_item_pessoaParticipante,
    p_item_quantidade,
    p_item_valorFreteTotal,
    p_item_valorSeguroTotal,
    p_item_valorAdicFreteMarTotal,
    p_item_valorDespesasAduanTotal,
    p_item_valorII,
    p_item_valorIOF,
    p_item_valorIPI,
    p_item_valorIPIDevolucao,
    p_item_valorPIS,
    p_item_valorPISST,
    p_item_valorCOFINS,
    p_item_valorCOFINSST,
    p_item_valorCreditoSimplesNac,
    p_item_valorICMSOperacao,
    p_item_valorICMSDiferido,
    p_item_valorICMS,
    p_item_valorICMSDesoneracao,
    p_item_valorICMSST,
    p_item_valorICMSSTAnteriorment,
    p_item_valorICMSUFDestinatario,
    p_item_valorICMSUFRemetente,
    p_item_valorFCP,
    p_item_valorFCPST,
    p_item_valorFCPSTAnteriormente,
    p_item_valorFCPUFDestinatario,
    p_item_valorLiquidoItem,
    p_gradProd_produto,
    p_gradProd_cor,
    p_gradProd_tamanho,
    p_prod_controleEstoque,
    p_locEst_indicadorPropPosseIt,
    /* Retornos */
    v_valorLiquidoSemFreteSeguro,
    v_valorCaptacao,
    v_valorTarifaCartao,
    v_valorImpostos,
    v_precoCusto,
    v_valorCusto,
    v_valorMargem,
    v_percentualMargem);
  RETURN (
    v_valorLiquidoSemFreteSeguro || '|' || 
    v_valorCaptacao || '|' || 
    v_valorTarifaCartao || '|' || 
    v_valorImpostos || '|' || 
    v_precoCusto || '|' || 
    v_valorCusto || '|' || 
    v_valorMargem || '|' || 
    v_percentualMargem);
END;

/

create or replace PROCEDURE ADD_BUSCA_ICMS_ST_ANTERIOR (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_dataEntradaSaida         IN DATE,
    p_item_personalizacao          IN NUMBER,
    p_item_quantidade              IN NUMBER,
    p_calcularICMSSTAnterEfetivo   IN NUMBER,
    p_calcularFCP                  IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    /* Retornos */
    r_item_baseICMSSTAnteriormente OUT NUMBER,
    r_item_valorICMSSTAnteriorment OUT NUMBER,
    r_item_valorICMSProprioSubstit OUT NUMBER,
    r_item_baseFCPSTAnteriormente  OUT NUMBER,
    r_item_valorFCPSTAnteriormente OUT NUMBER)
IS
  v_ufOrigDest_aliquotaIcms NUMBER;
  CURSOR c_item IS 
    SELECT a.ordenacao,
      a.quantidade,
      a.baseICMSST,
      a.valorICMSST,
      a.baseICMSSTEscrituracao,
      a.valorICMSSTEscrituracao,
      a.baseICMSSTAnteriormente,
      a.valorICMSSTAnteriormente,
      a.valorICMS,
      a.baseFCPST,
      a.valorFCPST,
      a.nfFornecedor
    FROM (
      SELECT ROW_NUMBER() OVER (ORDER BY cab.dataEntradaSaida desc, item.iditemDocFiscal desc) ordenacao,
        item.quantidade,
        item.baseICMSST,
        item.valorICMSST,
        item.baseICMSSTEscrituracao,
        item.valorICMSSTEscrituracao,
        item.baseICMSSTAnteriormente,
        item.valorICMSSTAnteriormente,
        item.valorICMS,
        item.baseFCPST,
        item.valorFCPST,
        cab.nfFornecedor
      FROM CAGRADESPRODUTO gradProd
      JOIN MODOCFISCALXITENS item ON item.gradeProduto = gradProd.gradeProduto
      JOIN MODOCUMENTOSFISCAIS cab ON cab.idDocumentoFiscal = item.idDocumentoFiscal
      WHERE gradProd.produto = p_gradProd_produto
      AND item.cancelado = 0
      AND item.quantidade > 0
      AND (cab.nfFornecedor = 1
        AND item.baseICMSSTEscrituracao > 0
        AND item.valorICMSSTEscrituracao > 0
        OR item.baseICMSST > 0
        AND item.valorICMSST > 0
        OR item.baseICMSSTAnteriormente > 0
        AND item.valorICMSSTAnteriormente > 0
        OR item.valorICMS > 0)
      AND cab.entradaSaida = 'E'
      AND cab.devolucaoAnulacaoRetorno = 0
      AND cab.atualizaUltimaCompra = 1
      AND TRUNC (cab.dataEntradaSaida) <= CASE WHEN p_cab_dataEntradaSaida IS NULL THEN TRUNC(SYSDATE) ELSE p_cab_dataEntradaSaida END
      AND (p_cab_estabelecimento = 0
        OR p_cab_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 0
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = est.pessoaEstabelecimento
          WHERE est.estabelecimento = cab.estabelecimento
          AND (est.estabelecimento = p_cab_estabelecimento
            OR est2.estabelecimento = p_cab_estabelecimento))
        OR p_cab_estabelecimento <> 0
        AND p_config_209_filtrarGrupoEcon = 1
        AND EXISTS (
          SELECT 1
          FROM PAESTABELECIMENTOS est
          JOIN CAPESSOAS pessEst ON pessEst.pessoa = est.pessoaEstabelecimento
          JOIN CAPESSOAS pessEst2 ON pessEst2.grupoEconomico = pessEst.grupoEconomico
          JOIN PAESTABELECIMENTOS est2 ON est2.pessoaEstabelecimento = pessEst2.pessoa
          WHERE est.estabelecimento = cab.estabelecimento
          AND (est.estabelecimento = p_cab_estabelecimento
            OR est2.estabelecimento = p_cab_estabelecimento)))    
    ) a
    WHERE a.ordenacao = 1;
BEGIN
  r_item_baseICMSSTAnteriormente := 0;
  r_item_valorICMSSTAnteriorment := 0;
  r_item_valorICMSProprioSubstit := 0;
  r_item_baseFCPSTAnteriormente := 0;
  r_item_valorFCPSTAnteriormente := 0;
  FOR item IN c_item LOOP
    IF p_calcularICMSSTAnterEfetivo = 1 THEN
      IF item.nfFornecedor = 1 AND item.baseICMSSTEscrituracao > 0 AND item.valorICMSSTEscrituracao > 0 THEN
        r_item_baseICMSSTAnteriormente := ROUND ((item.baseICMSSTEscrituracao * p_item_quantidade / item.quantidade), 2);
        r_item_valorICMSSTAnteriorment := ROUND ((item.valorICMSSTEscrituracao * p_item_quantidade / item.quantidade), 2);
      ELSIF item.baseICMSST > 0 AND item.valorICMSST > 0 THEN
        r_item_baseICMSSTAnteriormente := ROUND ((item.baseICMSST * p_item_quantidade / item.quantidade), 2);
        r_item_valorICMSSTAnteriorment := ROUND ((item.valorICMSST * p_item_quantidade / item.quantidade), 2);
      ELSE
        r_item_baseICMSSTAnteriormente := ROUND ((item.baseICMSSTAnteriormente * p_item_quantidade / item.quantidade), 2);
        r_item_valorICMSSTAnteriorment := ROUND ((item.valorICMSSTAnteriormente * p_item_quantidade / item.quantidade), 2);
      END IF;
      r_item_valorICMSProprioSubstit := ROUND ((item.valorICMS * p_item_quantidade / item.quantidade), 2);
    END IF;
    IF p_calcularFCP = 1 THEN
      r_item_baseFCPSTAnteriormente := ROUND ((item.baseFCPST * p_item_quantidade / item.quantidade), 2);
      r_item_valorFCPSTAnteriormente := ROUND ((item.valorFCPST * p_item_quantidade / item.quantidade), 2);
    END IF;
    IF p_calcularICMSSTAnterEfetivo = 1 AND r_item_baseICMSSTAnteriormente = 0 AND r_item_valorICMSSTAnteriorment = 0 AND r_item_valorICMSProprioSubstit = 0 THEN
      r_item_baseICMSSTAnteriormente := ROUND ((p_item_quantidade *
        FUNC_ADD_BUSCA_PRECO(
          p_config_64_casasDecSaidas,
          p_config_209_filtrarGrupoEcon,
          p_config_362_calcCustoPorGrade,
          0,
          0,
          p_cab_estabelecimento,
          CASE WHEN p_cab_dataEntradaSaida IS NULL THEN TRUNC(SYSDATE) ELSE p_cab_dataEntradaSaida END,
          0,
          ' ',
          ' ',
          0,
          0,
          p_item_personalizacao,
          p_gradProd_produto,
          p_gradProd_cor,
          p_gradProd_tamanho,
          p_prod_controleEstoque,
          'U',
          ' '
        )), 2);
      SELECT
        COALESCE((
          SELECT ufOrigDest.aliquotaIcms
          FROM PAESTABELECIMENTOS est
          JOIN CAENDERECOSPESSOA endEst ON endEst.pessoa = est.pessoaEstabelecimento
          JOIN SIMUNICIPIOS munEst ON munEst.municipio = endEst.municipio
          JOIN PAUFORIGEMXUFDESTINO ufOrigDest ON ufOrigDest.ufOrigem = munEst.uf AND ufOrigDest.ufDestino = munEst.uf
          WHERE est.estabelecimento = p_cab_estabelecimento
          AND endEst.ativo = 1
          AND endEst.principal = 1),0)
      INTO v_ufOrigDest_aliquotaIcms
      FROM DUAL;
      r_item_valorICMSSTAnteriorment := ROUND (r_item_baseICMSSTAnteriormente * v_ufOrigDest_aliquotaIcms / 100, 2);
    END IF;
  END LOOP;
END ADD_BUSCA_ICMS_ST_ANTERIOR;

/

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_CALCULA_IMPOSTOS_ITEM (
    p_config_64_casasDecSaidas     IN CHAR,
    p_config_209_filtrarGrupoEcon  IN NUMBER,
    p_config_330_redIcmsBasePisCof IN NUMBER,
    p_config_362_calcCustoPorGrade IN NUMBER,
    p_cab_entradaSaida             IN CHAR,
    p_cab_devolucaoAnulacaoRetorno IN NUMBER,
    p_cab_estabelecimento          IN NUMBER,
    p_cab_nfFornecedor             IN NUMBER,
    p_cab_dataEntradaSaida         IN DATE,
    p_cab_pessoa                   IN NUMBER,
    p_cab_localDestinoOperacao     IN CHAR,
    p_cab_indicadorConsumidorFinal IN CHAR,
    p_cab_tipoPagamentoFrete       IN CHAR,
    p_pess_indicadorInscricaoEstad IN CHAR,
    p_personalizacao               IN NUMBER,
    p_quantidade                   IN NUMBER,
    p_precoPautaTabelado           IN NUMBER,
    p_valorProdutoServico          IN NUMBER,
    p_valorFreteTotal              IN NUMBER,
    p_valorSeguroTotal             IN NUMBER,
    p_valorDescontoTotal           IN NUMBER,
    p_valorOutrasDespesasTotal     IN NUMBER,
    p_valorAdicFreteMarinMerTotal  IN NUMBER,
    p_valorDespesasAduaneirasTotal IN NUMBER,
    p_cfop                         IN NUMBER,
    p_calcularISSQN                IN NUMBER,
    p_indicadorISSQN               IN CHAR,
    p_aliquotaISSQN                IN NUMBER,
    p_baseISSQN                    IN NUMBER,
    p_valorISSQN                   IN NUMBER,
    p_calcularIRRF                 IN NUMBER,
    p_aliquotaIRRF                 IN NUMBER,
    p_baseIRRF                     IN NUMBER,
    p_valorIRRF                    IN NUMBER,
    p_calcularINSS                 IN NUMBER,
    p_aliquotaINSS                 IN NUMBER,
    p_baseINSS                     IN NUMBER,
    p_valorINSS                    IN NUMBER,
    p_calcularRetencaoPIS          IN NUMBER,
    p_retencaoPIS                  IN NUMBER,
    p_baseRetPIS                   IN NUMBER,
    p_valorRetPIS                  IN NUMBER,
    p_calcularRetencaoCOFINS       IN NUMBER,
    p_retencaoCOFINS               IN NUMBER,
    p_baseRetCOFINS                IN NUMBER,
    p_valorRetCOFINS               IN NUMBER,
    p_calcularRetencaoCSLL         IN NUMBER,
    p_retencaoCSLL                 IN NUMBER,
    p_baseRetCSLL                  IN NUMBER,
    p_valorRetCSLL                 IN NUMBER,
    p_calcularII                   IN NUMBER,
    p_aliquotaII                   IN NUMBER,
    p_baseII                       IN NUMBER,
    p_valorII                      IN NUMBER,
    p_calcularIOF                  IN NUMBER,
    p_aliquotaIOF                  IN NUMBER,
    p_baseIOF                      IN NUMBER,
    p_valorIOF                     IN NUMBER,
    p_calcularIPI                  IN NUMBER,
    p_aliquotaIPI                  IN NUMBER,
    p_valorAliquotaIPI             IN NUMBER,
    p_baseIPI                      IN NUMBER,
    p_valorIPI                     IN NUMBER,
    p_valorIPIDevolucao            IN NUMBER,
    p_calcularPIS                  IN NUMBER,
    p_aliquotaPIS                  IN NUMBER,
    p_valorAliquotaPIS             IN NUMBER,
    p_basePIS                      IN NUMBER,
    p_valorPIS                     IN NUMBER,
    p_calcularPISST                IN NUMBER,
    p_aliquotaPISST                IN NUMBER,
    p_valorAliquotaPISST           IN NUMBER,
    p_basePISST                    IN NUMBER,
    p_valorPISST                   IN NUMBER,
    p_calcularCOFINS               IN NUMBER,
    p_aliquotaCOFINS               IN NUMBER,
    p_valorAliquotaCOFINS          IN NUMBER,
    p_baseCOFINS                   IN NUMBER,
    p_valorCOFINS                  IN NUMBER,
    p_calcularCOFINSST             IN NUMBER,
    p_aliquotaCOFINSST             IN NUMBER,
    p_valorAliquotaCOFINSST        IN NUMBER,
    p_baseCOFINSST                 IN NUMBER,
    p_valorCOFINSST                IN NUMBER,
    p_calcularSimplesNacional      IN NUMBER,
    p_stSimplesNacional            IN CHAR,
    p_creditoSimplesNacional       IN NUMBER,
    p_baseCreditoSimplesNacional   IN NUMBER,
    p_valorCreditoSimplesNacional  IN NUMBER,
    p_calcularICMS                 IN NUMBER,
    p_stICMS                       IN CHAR,
    p_modalidadeBaseCalcICMS       IN CHAR,
    p_reducaoBaseICMS              IN NUMBER,
    p_aliquotaICMS                 IN NUMBER,
    p_diferimentoICMS              IN NUMBER,
    p_baseICMS                     IN NUMBER,
    p_valorICMSOperacao            IN NUMBER,
    p_valorICMSDiferido            IN NUMBER,
    p_valorICMS                    IN NUMBER,
    p_valorICMSDesoneracao         IN NUMBER,
    p_calcularICMSST               IN NUMBER,
    p_modalidadeBaseCalcICMSST     IN CHAR,
    p_margemValorAdicionadoST      IN NUMBER,
    p_reducaoBaseST                IN NUMBER,
    p_aliquotaICMSST               IN NUMBER,
    p_baseICMSST                   IN NUMBER,
    p_valorICMSST                  IN NUMBER,
    p_calcularICMSSTAnterEfetivo   IN NUMBER,
    p_baseICMSSTAnteriormente      IN NUMBER,
    p_valorICMSSTAnteriormente     IN NUMBER,
    p_valorICMSProprioSubstituto   IN NUMBER,
    p_reducaoBaseICMSEfetivo       IN NUMBER,
    p_aliquotaICMSEfetivo          IN NUMBER,
    p_baseICMSEfetivo              IN NUMBER,
    p_valorICMSEfetivo             IN NUMBER,
    p_calcularICMSEscrituracao     IN NUMBER,
    p_stICMSEscrituracao           IN CHAR,
    p_reducaoBaseICMSEscrituracao  IN NUMBER,
    p_aliquotaICMSEscrituracao     IN NUMBER,
    p_baseICMSEscrituracao         IN NUMBER,
    p_valorICMSEscrituracao        IN NUMBER,
    p_valorICMSDesonEscrituracao   IN NUMBER,
    p_calcularICMSSTEscrituracao   IN NUMBER,
    p_margemValorAdicSTEscriturac  IN NUMBER,
    p_reducaoBaseSTEscrituracao    IN NUMBER,
    p_aliquotaICMSSTEscrituracao   IN NUMBER,
    p_baseICMSSTEscrituracao       IN NUMBER,
    p_valorICMSSTEscrituracao      IN NUMBER,
    p_calcularDIFAL                IN NUMBER,
    p_aliquotaICMSUFDestinatario   IN NUMBER,
    p_aliquotaICMSInterestadual    IN NUMBER,
    p_partilhaICMSInterestadual    IN NUMBER,
    p_baseICMSUFDestinatario       IN NUMBER,
    p_valorICMSUFDestinatario      IN NUMBER,
    p_baseICMSUFRemetente          IN NUMBER,
    p_valorICMSUFRemetente         IN NUMBER,
    p_calcularFCP                  IN NUMBER,
    p_aliquotaFCP                  IN NUMBER,
    p_baseFCP                      IN NUMBER,
    p_valorFCP                     IN NUMBER,
    p_aliquotaFCPST                IN NUMBER,
    p_baseFCPST                    IN NUMBER,
    p_valorFCPST                   IN NUMBER,
    p_aliquotaFCPSTAnteriormente   IN NUMBER,
    p_baseFCPSTAnteriormente       IN NUMBER,
    p_valorFCPSTAnteriormente      IN NUMBER,
    p_aliquotaFCPUFDestinatario    IN NUMBER,
    p_baseFCPUFDestinatario        IN NUMBER,
    p_valorFCPUFDestinatario       IN NUMBER,
    p_calcularImpostosEstimados    IN NUMBER,
    p_aliquotaEstImpFederais       IN NUMBER,
    p_aliquotaEstImpEstaduais      IN NUMBER,
    p_aliquotaEstImpMunicipais     IN NUMBER,
    p_baseEstimadaImpostos         IN NUMBER,
    p_valorEstimadoImpFederais     IN NUMBER,
    p_valorEstimadoImpEstaduais    IN NUMBER,
    p_valorEstimadoImpMunicipais   IN NUMBER,
    p_gradProd_produto             IN NUMBER,
    p_gradProd_cor                 IN NUMBER,
    p_gradProd_tamanho             IN VARCHAR,
    p_prod_controleEstoque         IN NUMBER,
    p_prod_tipoProduto             IN CHAR,
    /* Retornos */
    r_baseISSQN                    OUT NUMBER,
    r_valorISSQN                   OUT NUMBER,
    r_baseIRRF                     OUT NUMBER,
    r_valorIRRF                    OUT NUMBER,
    r_baseINSS                     OUT NUMBER,
    r_valorINSS                    OUT NUMBER,
    r_baseRetPIS                   OUT NUMBER,
    r_valorRetPIS                  OUT NUMBER,
    r_baseRetCOFINS                OUT NUMBER,
    r_valorRetCOFINS               OUT NUMBER,
    r_baseRetCSLL                  OUT NUMBER,
    r_valorRetCSLL                 OUT NUMBER,
    r_baseII                       OUT NUMBER,
    r_valorII                      OUT NUMBER,
    r_baseIOF                      OUT NUMBER,
    r_valorIOF                     OUT NUMBER,
    r_baseIPI                      OUT NUMBER,
    r_valorIPI                     OUT NUMBER,
    r_basePIS                      OUT NUMBER,
    r_valorPIS                     OUT NUMBER,
    r_basePISST                    OUT NUMBER,
    r_valorPISST                   OUT NUMBER,
    r_baseCOFINS                   OUT NUMBER,
    r_valorCOFINS                  OUT NUMBER,
    r_baseCOFINSST                 OUT NUMBER,
    r_valorCOFINSST                OUT NUMBER,
    r_baseCreditoSimplesNacional   OUT NUMBER,
    r_valorCreditoSimplesNacional  OUT NUMBER,
    r_baseICMS                     OUT NUMBER,
    r_valorICMSOperacao            OUT NUMBER,
    r_valorICMSDiferido            OUT NUMBER,
    r_valorICMS                    OUT NUMBER,
    r_valorICMSDesoneracao         OUT NUMBER,
    r_baseICMSST                   OUT NUMBER,
    r_valorICMSST                  OUT NUMBER,
    r_baseICMSSTAnteriormente      OUT NUMBER,
    r_valorICMSSTAnteriormente     OUT NUMBER,
    r_valorICMSProprioSubstituto   OUT NUMBER,
    r_baseICMSEfetivo              OUT NUMBER,
    r_valorICMSEfetivo             OUT NUMBER,
    r_baseICMSEscrituracao         OUT NUMBER,
    r_valorICMSEscrituracao        OUT NUMBER,
    r_valorICMSDesonEscrituracao   OUT NUMBER,
    r_baseICMSSTEscrituracao       OUT NUMBER,
    r_valorICMSSTEscrituracao      OUT NUMBER,
    r_baseICMSUFDestinatario       OUT NUMBER,
    r_valorICMSUFDestinatario      OUT NUMBER,
    r_baseICMSUFRemetente          OUT NUMBER,
    r_valorICMSUFRemetente         OUT NUMBER,
    r_baseFCP                      OUT NUMBER,
    r_valorFCP                     OUT NUMBER,
    r_baseFCPST                    OUT NUMBER,
    r_valorFCPST                   OUT NUMBER,
    r_baseFCPSTAnteriormente       OUT NUMBER,
    r_valorFCPSTAnteriormente      OUT NUMBER,
    r_baseFCPUFDestinatario        OUT NUMBER,
    r_valorFCPUFDestinatario       OUT NUMBER,
    r_baseEstimadaImpostos         OUT NUMBER,
    r_valorEstimadoImpFederais     OUT NUMBER,
    r_valorEstimadoImpEstaduais    OUT NUMBER,
    r_valorEstimadoImpMunicipais    OUT NUMBER)
IS
    v_baseICMSSTAnteriormente      NUMBER;
    v_valorICMSSTAnteriormente     NUMBER;
    v_valorICMSProprioSubstituto   NUMBER;
    v_baseFCPSTAnteriormente       NUMBER;
    v_valorFCPSTAnteriormente      NUMBER;
BEGIN
  /* Inicia retornos com paramentros */
  r_baseISSQN                   := p_baseISSQN;
  r_valorISSQN                  := p_valorISSQN;
  r_baseIRRF                    := p_baseIRRF;
  r_valorIRRF                   := p_valorIRRF;
  r_baseINSS                    := p_baseINSS;
  r_valorINSS                   := p_valorINSS;
  r_baseRetPIS                  := p_baseRetPIS;
  r_valorRetPIS                 := p_valorRetPIS;
  r_baseRetCOFINS               := p_baseRetCOFINS;
  r_valorRetCOFINS              := p_valorRetCOFINS;
  r_baseRetCSLL                 := p_baseRetCSLL;
  r_valorRetCSLL                := p_valorRetCSLL;
  r_baseII                      := p_baseII;
  r_valorII                     := p_valorII;
  r_baseIOF                     := p_baseIOF;
  r_valorIOF                    := p_valorIOF;
  r_baseIPI                     := p_baseIPI;
  r_valorIPI                    := p_valorIPI;
  r_basePIS                     := p_basePIS;
  r_valorPIS                    := p_valorPIS;
  r_basePISST                   := p_basePISST;
  r_valorPISST                  := p_valorPISST;
  r_baseCOFINS                  := p_baseCOFINS;
  r_valorCOFINS                 := p_valorCOFINS;
  r_baseCOFINSST                := p_baseCOFINSST;
  r_valorCOFINSST               := p_valorCOFINSST;
  r_baseCreditoSimplesNacional  := p_baseCreditoSimplesNacional;
  r_valorCreditoSimplesNacional := p_valorCreditoSimplesNacional;
  r_baseICMS                    := p_baseICMS;
  r_valorICMSOperacao           := p_valorICMSOperacao;
  r_valorICMSDiferido           := p_valorICMSDiferido;
  r_valorICMS                   := p_valorICMS;
  r_valorICMSDesoneracao        := p_valorICMSDesoneracao;
  r_baseICMSST                  := p_baseICMSST;
  r_valorICMSST                 := p_valorICMSST;
  r_baseICMSSTAnteriormente     := p_baseICMSSTAnteriormente;
  r_valorICMSSTAnteriormente    := p_valorICMSSTAnteriormente;
  r_valorICMSProprioSubstituto  := p_valorICMSProprioSubstituto;
  r_baseICMSEfetivo             := p_baseICMSEfetivo;
  r_valorICMSEfetivo            := p_valorICMSEfetivo;
  r_baseICMSEscrituracao        := p_baseICMSEscrituracao;
  r_valorICMSEscrituracao       := p_valorICMSEscrituracao;
  r_valorICMSDesonEscrituracao  := p_valorICMSDesonEscrituracao;
  r_baseICMSSTEscrituracao      := p_baseICMSSTEscrituracao;
  r_valorICMSSTEscrituracao     := p_valorICMSSTEscrituracao;
  r_baseICMSUFDestinatario      := p_baseICMSUFDestinatario;
  r_valorICMSUFDestinatario     := p_valorICMSUFDestinatario;
  r_baseICMSUFRemetente         := p_baseICMSUFRemetente;
  r_valorICMSUFRemetente        := p_valorICMSUFRemetente;
  r_baseFCP                     := p_baseFCP;
  r_valorFCP                    := p_valorFCP;
  r_baseFCPST                   := p_baseFCPST;
  r_valorFCPST                  := p_valorFCPST;
  r_baseFCPSTAnteriormente      := p_baseFCPSTAnteriormente;
  r_valorFCPSTAnteriormente     := p_valorFCPSTAnteriormente;
  r_baseFCPUFDestinatario       := p_baseFCPUFDestinatario;
  r_valorFCPUFDestinatario      := p_valorFCPUFDestinatario;
  r_baseEstimadaImpostos        := p_baseEstimadaImpostos;
  r_valorEstimadoImpFederais    := p_valorEstimadoImpFederais;
  r_valorEstimadoImpEstaduais   := p_valorEstimadoImpEstaduais;
  r_valorEstimadoImpMunicipais  := p_valorEstimadoImpMunicipais;
  /* ISSQN */
  IF p_calcularISSQN = 1 THEN
    IF p_indicadorISSQN = '1' THEN
      r_baseISSQN := p_valorProdutoServico - p_valorDescontoTotal + p_valorOutrasDespesasTotal;
      r_valorISSQN := ROUND ((r_baseISSQN * p_aliquotaISSQN / 100), 2);
    ELSE
      r_baseISSQN := 0;
      r_valorISSQN := 0;
    END IF;
  END IF;
  /* IRRF */
  IF p_calcularIRRF = 1 THEN
    IF p_aliquotaIRRF > 0 THEN
      r_baseIRRF := p_valorProdutoServico - p_valorDescontoTotal + p_valorOutrasDespesasTotal;
      r_valorIRRF := ROUND ((r_baseIRRF * p_aliquotaIRRF / 100), 2);
    ELSE
      r_baseIRRF := 0;
      r_valorIRRF := 0;
    END IF;
  END IF;
  /* INSS */
  IF p_calcularINSS = 1 THEN
    IF p_aliquotaINSS > 0 THEN
      r_baseINSS := p_valorProdutoServico - p_valorDescontoTotal + p_valorOutrasDespesasTotal;
      r_valorINSS := ROUND ((r_baseINSS * p_aliquotaINSS / 100), 2);
    ELSE
      r_baseINSS := 0;
      r_valorINSS := 0;
    END IF;
  END IF;
  /* Retenção PIS */
  IF p_calcularRetencaoPIS = 1 THEN
    IF p_retencaoPIS > 0 THEN
      r_baseRetPIS := p_valorProdutoServico - p_valorDescontoTotal + p_valorOutrasDespesasTotal;
      r_valorRetPIS := ROUND ((r_baseRetPIS * p_retencaoPIS / 100), 2);
    ELSE
      r_baseRetPIS := 0;
      r_valorRetPIS := 0;
    END IF;
  END IF;
  /* Retenção COFINS */
  IF p_calcularRetencaoCOFINS = 1 THEN
    IF p_retencaoCOFINS > 0 THEN
      r_baseRetCOFINS := p_valorProdutoServico - p_valorDescontoTotal + p_valorOutrasDespesasTotal;
      r_valorRetCOFINS := ROUND ((r_baseRetCOFINS * p_retencaoCOFINS / 100), 2);
    ELSE
      r_baseRetCOFINS := 0;
      r_valorRetCOFINS := 0;
    END IF;
  END IF;
  /* Retenção CSLL */
  IF p_calcularRetencaoCSLL = 1 THEN
    IF p_retencaoCSLL > 0 THEN
      r_baseRetCSLL := p_valorProdutoServico - p_valorDescontoTotal + p_valorOutrasDespesasTotal;
      r_valorRetCSLL := ROUND ((r_baseRetCSLL * p_retencaoCSLL / 100), 2);
    ELSE
      r_baseRetCSLL := 0;
      r_valorRetCSLL := 0;
    END IF;
  END IF;
  /* II */
  IF p_calcularII = 1 THEN
    IF p_aliquotaII > 0 THEN
      r_baseII :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal;
      r_valorII := ROUND ((r_baseII * p_aliquotaII / 100), 2);
    ELSE
      r_baseII := 0;
      r_valorII := 0;
    END IF;
  END IF;
  /* IOF */
  IF p_calcularIOF = 1 THEN
    IF p_aliquotaIOF > 0 THEN
      r_baseIOF := 
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal;
      r_valorIOF := ROUND ((r_baseIOF * p_aliquotaIOF / 100), 2);
    ELSE
      r_baseIOF := 0;
      r_valorIOF := 0;
    END IF;
  END IF;
  /* IPI */
  IF p_calcularIPI = 1 THEN
    IF p_aliquotaIPI > 0 THEN
      r_baseIPI :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF;
      r_valorIPI := ROUND ((r_baseIPI * p_aliquotaIPI / 100), 2);
    ELSE
      r_baseIPI := 0;
      r_valorIPI := 0;
    END IF;
    IF p_valorAliquotaIPI > 0 THEN
      r_valorIPI := ROUND ((r_valorIPI + (p_quantidade * p_valorAliquotaIPI)), 2);
    END IF;
  END IF;
  /* Simples Nacional */
  IF p_calcularSimplesNacional = 1 THEN
    IF p_stSimplesNacional IN('101','102','201','202','900') AND p_creditoSimplesNacional > 0 THEN
      r_baseCreditoSimplesNacional :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END;
      r_valorCreditoSimplesNacional := ROUND ((r_baseCreditoSimplesNacional * p_creditoSimplesNacional / 100), 2);
    ELSE
      r_baseCreditoSimplesNacional := 0;
      r_valorCreditoSimplesNacional := 0;
    END IF;
  END IF;
  /* ICMS */
  IF p_calcularICMS = 1 THEN
      r_baseICMS := 0;
      r_valorICMSOperacao := 0;
      r_valorICMSDiferido := 0;
      r_valorICMS := 0;
      r_valorICMSDesoneracao := 0;
    IF p_aliquotaICMS > 0 AND (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS IN ('40','41','50') THEN
      r_valorICMSDesoneracao := ROUND (((
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END
      ) * p_aliquotaICMS / 100), 2);
    ELSE
      IF p_aliquotaICMS > 0 AND (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND (p_stICMS IN ('00','10','20','51','70') OR p_stICMS = '90' AND p_aliquotaICMS > 0) OR p_stSimplesNacional = '900' AND p_aliquotaICMS > 0 THEN
        r_baseICMS :=
          p_valorProdutoServico
          + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
          - p_valorDescontoTotal
          + p_valorOutrasDespesasTotal
          + p_valorAdicFreteMarinMerTotal
          + p_valorDespesasAduaneirasTotal
          + r_valorII
          + r_valorIOF
          + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END;
        IF p_precoPautaTabelado > 0 AND (p_modalidadeBaseCalcICMS = '1' OR p_modalidadeBaseCalcICMS = '2' AND r_baseICMS > p_quantidade * p_precoPautaTabelado) THEN
          r_baseICMS := ROUND ((p_quantidade * p_precoPautaTabelado), 2);
        END IF;
        r_valorICMS := ROUND ((r_baseICMS * p_aliquotaICMS / 100), 2);
        IF ((p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS IN ('20','70','90') OR p_stSimplesNacional = '900') AND p_reducaoBaseICMS > 0 THEN
          r_valorICMSDesoneracao := ROUND ((r_baseICMS * p_aliquotaICMS / 100), 2);
          r_baseICMS := ROUND ((r_baseICMS * (1 - p_reducaoBaseICMS / 100)), 2);
          r_valorICMS := ROUND ((r_baseICMS * p_aliquotaICMS / 100), 2);
          r_valorICMSDesoneracao := r_valorICMSDesoneracao - r_valorICMS;
        ELSE
          IF (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS = '51' AND p_reducaoBaseICMS > 0 AND p_reducaoBaseICMS <> p_diferimentoICMS THEN
            r_baseICMS := ROUND ((r_baseICMS * (1 - p_reducaoBaseICMS / 100)), 2);
            r_valorICMS := ROUND ((r_baseICMS * p_aliquotaICMS / 100), 2);
          END IF;
          r_valorICMSDesoneracao := 0;
        END IF;
        IF (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS = '51' THEN
          r_valorICMSOperacao := r_valorICMS;
          r_valorICMSDiferido := ROUND ((r_valorICMSOperacao * p_diferimentoICMS / 100), 2);
          r_valorICMS := r_valorICMSOperacao - r_valorICMSDiferido;
          IF r_valorICMS <= 0 THEN
            r_baseICMS := 0;
            r_valorICMS := 0;
          END IF;
        ELSE
          r_valorICMSOperacao := 0;
          r_valorICMSDiferido := 0;
        END IF;
      END IF;
    END IF;
  END IF;
  /* ICMS ST */
  IF p_calcularICMSST = 1 THEN
    IF (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND (p_stICMS IN ('10','30','70') OR p_stICMS = '90' AND p_aliquotaICMSST > 0) OR p_stSimplesNacional IN ('201','202') OR p_stSimplesNacional = '900' AND p_aliquotaICMSST > 0 THEN
      r_baseICMSST :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + r_valorIPI
        + p_valorIPIDevolucao;
      IF p_precoPautaTabelado > 0 AND (p_modalidadeBaseCalcICMSST = '5' OR p_modalidadeBaseCalcICMSST = '0' AND r_baseICMSST > p_quantidade * p_precoPautaTabelado) AND ((p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS IN ('10','30','70','90') OR p_stSimplesNacional IN ('201','202','900')) THEN
        r_baseICMSST := ROUND ((p_quantidade * p_precoPautaTabelado), 2);
      END IF;
      IF p_modalidadeBaseCalcICMSST = '4' OR (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS = '60' OR p_stSimplesNacional = '500' THEN
        r_baseICMSST := ROUND ((r_baseICMSST * (1 + p_margemValorAdicionadoST / 100)), 2);
      END IF;
      r_baseICMSST := ROUND ((r_baseICMSST * (1 - p_reducaoBaseST / 100)), 2);
      r_valorICMSST := ROUND (((r_baseICMSST * p_aliquotaICMSST / 100) - r_valorICMS), 2);
      IF r_valorICMSST <= 0 THEN
        r_baseICMSST := 0;
        r_valorICMSST := 0;
      END IF;
    ELSE
      r_baseICMSST := 0;
      r_valorICMSST := 0;
    END IF;
  END IF;
  /* Busca dados apenas quando precisa. */
  v_baseICMSSTAnteriormente := 0;
  v_valorICMSSTAnteriormente := 0;
  v_valorICMSProprioSubstituto := 0;
  v_baseFCPSTAnteriormente := 0;
  v_valorFCPSTAnteriormente := 0;
  IF (p_calcularICMSSTAnterEfetivo = 1 OR p_calcularFCP = 1) 
      AND ((p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS='60' OR p_stSimplesNacional='500') 
      AND p_cab_indicadorConsumidorFinal = '0' 
      AND (p_cab_entradaSaida = 'S'
      OR p_cfop IN (1201,1202,1203,1204,1208,1209,1410,1411,1503,1504,1505,1506,1553,1660,1661,1662,1918,1919)
      OR p_cfop IN (2201,2202,2203,2204,2208,2209,2410,2411,2503,2504,2505,2506,2553,2660,2661,2662,2918,2919)
      OR p_cfop IN (3201,3202,3211,3503,3553)) THEN
    ADD_BUSCA_ICMS_ST_ANTERIOR (
      p_config_64_casasDecSaidas,
      p_config_209_filtrarGrupoEcon,
      p_config_362_calcCustoPorGrade,
      p_cab_estabelecimento,
      p_cab_dataEntradaSaida,
      p_personalizacao,
      p_quantidade,
      p_calcularICMSSTAnterEfetivo,
      p_calcularFCP,
      p_gradProd_produto,
      p_gradProd_cor,
      p_gradProd_tamanho,
      p_prod_controleEstoque,
      v_baseICMSSTAnteriormente,
      v_valorICMSSTAnteriormente,
      v_valorICMSProprioSubstituto,
      v_baseFCPSTAnteriormente,
      v_valorFCPSTAnteriormente
    );
  END IF;
  /* ICMS ST Retido Anteriormente / Efetivo */
  IF p_calcularICMSSTAnterEfetivo = 1 THEN
    r_baseICMSSTAnteriormente := v_baseICMSSTAnteriormente;
    r_valorICMSSTAnteriormente := v_valorICMSSTAnteriormente;
    r_valorICMSProprioSubstituto := v_valorICMSProprioSubstituto;
    IF ((p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS = '60' OR p_stSimplesNacional = '500') AND p_aliquotaICMSEfetivo <> 0 THEN
      r_baseICMSEfetivo :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END;
      r_baseICMSEfetivo := ROUND ((r_baseICMSEfetivo * (1 - p_reducaoBaseICMSEfetivo / 100)), 2);
      r_valorICMSEfetivo := ROUND ((r_baseICMSEfetivo * p_aliquotaICMSEfetivo / 100), 2);
    ELSE
      r_baseICMSEfetivo := 0;
      r_valorICMSEfetivo := 0;
    END IF;
  END IF;
  /* ICMS Escrituracao */
  IF p_calcularICMSEscrituracao = 1 THEN
    IF p_stICMSEscrituracao = p_stICMS
      AND p_aliquotaICMSEscrituracao = p_aliquotaICMS
      AND p_reducaoBaseICMSEscrituracao = p_reducaoBaseICMS
    THEN
      r_baseICMSEscrituracao := r_baseICMS;
      r_valorICMSEscrituracao := r_valorICMS;
      r_valorICMSDesonEscrituracao := r_valorICMS;
    ELSE
      r_baseICMSEscrituracao := 0;
      r_valorICMSEscrituracao := 0;
      r_valorICMSDesonEscrituracao := 0;
      IF p_aliquotaICMSEscrituracao > 0 AND p_stICMSEscrituracao IN ('40','41','50') THEN
        r_valorICMSDesonEscrituracao := ROUND (((
          p_valorProdutoServico
          + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
          - p_valorDescontoTotal
          + p_valorOutrasDespesasTotal
          + p_valorAdicFreteMarinMerTotal
          + p_valorDespesasAduaneirasTotal
          + r_valorII
          + r_valorIOF
          + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END
        ) * p_aliquotaICMSEscrituracao / 100), 2);
      ELSE
        IF p_aliquotaICMSEscrituracao > 0 AND (p_stICMSEscrituracao IN ('00','10','20','51','70') OR p_stICMSEscrituracao = '90' AND p_aliquotaICMSEscrituracao > 0) THEN
          r_baseICMSEscrituracao :=
            p_valorProdutoServico
            + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
            - p_valorDescontoTotal
            + p_valorOutrasDespesasTotal
            + p_valorAdicFreteMarinMerTotal
            + p_valorDespesasAduaneirasTotal
            + r_valorII
            + r_valorIOF
            + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END;
          r_valorICMSEscrituracao := ROUND ((r_baseICMSEscrituracao * p_aliquotaICMSEscrituracao / 100), 2);
          IF p_stICMSEscrituracao IN ('20','70','90') AND p_reducaoBaseICMSEscrituracao > 0 THEN
            r_valorICMSDesonEscrituracao := ROUND ((r_baseICMSEscrituracao * p_aliquotaICMSEscrituracao / 100), 2);
            r_baseICMSEscrituracao := ROUND ((r_baseICMSEscrituracao * (1 - p_reducaoBaseICMSEscrituracao / 100)), 2);
            r_valorICMSEscrituracao := ROUND ((r_baseICMSEscrituracao * p_aliquotaICMSEscrituracao / 100), 2);
            r_valorICMSDesonEscrituracao := r_valorICMSDesonEscrituracao - r_valorICMSEscrituracao;
          ELSE
            IF p_stICMSEscrituracao = '51' AND p_reducaoBaseICMSEscrituracao > 0 AND p_reducaoBaseICMSEscrituracao <> p_diferimentoICMS THEN
              r_baseICMSEscrituracao := ROUND ((r_baseICMSEscrituracao * (1 - p_reducaoBaseICMSEscrituracao / 100)), 2);
              r_valorICMSEscrituracao := ROUND ((r_baseICMSEscrituracao * p_aliquotaICMSEscrituracao / 100), 2);
              r_valorICMSDesonEscrituracao := 0;
            ELSE
              r_valorICMSDesonEscrituracao := 0;
            END IF;
          END IF;
          IF p_stICMSEscrituracao = '51' THEN
            r_valorICMSEscrituracao := r_valorICMSEscrituracao - ROUND ((r_valorICMSEscrituracao * p_diferimentoICMS / 100), 2);
            IF p_cab_nfFornecedor = 1 THEN
              r_baseICMSEscrituracao := ROUND ((r_baseICMSEscrituracao * (1 - p_diferimentoICMS / 100)), 2);
            END IF;
            IF r_valorICMSEscrituracao <= 0 THEN
              r_baseICMSEscrituracao := 0;
              r_valorICMSEscrituracao := 0;
            END IF;
          END IF;
        END IF;
      END IF;
    END IF;
  END IF;
  /* ICMS ST Escrituracao */
  IF p_calcularICMSSTEscrituracao = 1 THEN
    IF p_stICMSEscrituracao = p_stICMS
      AND p_aliquotaICMSEscrituracao = p_aliquotaICMS
      AND p_reducaoBaseICMSEscrituracao = p_reducaoBaseICMS
      AND p_margemValorAdicSTEscriturac = p_margemValorAdicionadoST
      AND p_reducaoBaseSTEscrituracao = p_reducaoBaseST
      AND p_aliquotaICMSSTEscrituracao = p_aliquotaICMSST
    THEN
      r_baseICMSSTEscrituracao := r_baseICMSST;
      r_valorICMSSTEscrituracao := r_valorICMSST;
    ELSE
      IF p_stICMSEscrituracao IN ('10','30','70') OR p_stICMSEscrituracao = '90' AND p_aliquotaICMSSTEscrituracao > 0 THEN
        r_baseICMSSTEscrituracao := ROUND ((ROUND (((
          p_valorProdutoServico
          + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
          - p_valorDescontoTotal
          + p_valorOutrasDespesasTotal
          + p_valorAdicFreteMarinMerTotal
          + p_valorDespesasAduaneirasTotal
          + r_valorII
          + r_valorIOF
          + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END
        ) * (1 + p_margemValorAdicSTEscriturac / 100)), 2) * (1 - p_reducaoBaseSTEscrituracao / 100)), 2);
        r_valorICMSSTEscrituracao := ROUND (((r_baseICMSSTEscrituracao * p_aliquotaICMSSTEscrituracao / 100) - r_valorICMSEscrituracao), 2);
        IF r_valorICMSSTEscrituracao <= 0 THEN
          r_baseICMSSTEscrituracao := 0;
          r_valorICMSSTEscrituracao := 0;
        END IF;
      ELSE
        r_baseICMSSTEscrituracao := 0;
        r_valorICMSSTEscrituracao := 0;
      END IF;
    END IF;
  END IF;
  /* DIFAL */
  IF p_calcularDIFAL = 1 THEN
    IF p_cab_localDestinoOperacao = '2' AND (p_cab_entradaSaida = 'E' OR p_cab_indicadorConsumidorFinal = '1' OR p_pess_indicadorInscricaoEstad = '9') AND p_aliquotaICMSUFDestinatario <> 0 AND p_aliquotaICMSInterestadual <> 0 THEN
      IF (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND r_baseICMS = 0 OR p_stSimplesNacional IS NOT NULL AND p_stSimplesNacional <> '   ' AND r_baseCreditoSimplesNacional = 0 THEN
        r_baseICMSUFDestinatario :=
          p_valorProdutoServico
          + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
          - p_valorDescontoTotal
          + p_valorOutrasDespesasTotal
          + p_valorAdicFreteMarinMerTotal
          + p_valorDespesasAduaneirasTotal
          + r_valorII
          + r_valorIOF
          + CASE WHEN p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'S' ELSE 'E' END AND p_prod_tipoProduto IN ('07','08') OR p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END AND (p_cab_indicadorConsumidorFinal = '0' OR p_pess_indicadorInscricaoEstad = '9') THEN r_valorIPI + p_valorIPIDevolucao ELSE 0 END;
      ELSE
        r_baseICMSUFDestinatario := CASE WHEN (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') THEN r_baseICMS ELSE r_baseCreditoSimplesNacional END;
      END IF;
      r_baseICMSUFRemetente := r_baseICMSUFDestinatario;
      r_valorICMSUFDestinatario := ROUND ((r_baseICMSUFDestinatario * ((p_aliquotaICMSUFDestinatario - p_aliquotaICMSInterestadual) / 100) * (p_partilhaICMSInterestadual / 100)), 2);
      r_valorICMSUFRemetente := ROUND ((r_baseICMSUFRemetente * ((p_aliquotaICMSUFDestinatario - p_aliquotaICMSInterestadual) / 100) * (1 - p_partilhaICMSInterestadual / 100)), 2);
    ELSE
      r_baseICMSUFDestinatario := 0;
      r_valorICMSUFDestinatario := 0;
      r_baseICMSUFRemetente := 0;
      r_valorICMSUFRemetente := 0;
    END IF;
  END IF;
  /* Fundo de Combate a Pobreza */
  IF p_calcularFCP = 1 THEN
    IF r_baseCreditoSimplesNacional <> 0 AND p_aliquotaFCP <> 0 THEN
      r_baseFCP := r_baseCreditoSimplesNacional;
      r_valorFCP := ROUND ((r_baseFCP * p_aliquotaFCP / 100), 2);
    ELSE
      IF (p_stSimplesNacional IS NULL OR p_stSimplesNacional = '   ') AND p_stICMS IN ('00','20','51','90') AND r_baseICMS <> 0 AND p_aliquotaFCP <> 0 THEN
        r_baseFCP := r_baseICMS;
        r_valorFCP := ROUND ((r_baseFCP * p_aliquotaFCP / 100), 2);
      ELSE
        r_baseFCP := 0;
        r_valorFCP := 0;
      END IF;
    END IF;
    /* Fundo de Combate a Pobreza ST */
    IF r_baseICMSST <> 0 AND p_aliquotaFCPST <> 0 THEN
      r_baseFCPST := r_baseICMSST;
      r_valorFCPST := ROUND ((r_baseFCPST * p_aliquotaFCPST / 100), 2);
    ELSE
      r_baseFCPST := 0;
      r_valorFCPST := 0;
    END IF;
    /* Fundo de Combate a Pobreza ICMS ST Retido Anteriormente */
    r_baseFCPSTAnteriormente := v_baseFCPSTAnteriormente;
    r_valorFCPSTAnteriormente := v_valorFCPSTAnteriormente;
    /* Fundo de Combate a Pobreza DIFAL */
    IF p_cab_localDestinoOperacao = '2' AND (p_cab_entradaSaida = 'E' OR p_cab_indicadorConsumidorFinal = '1' OR p_pess_indicadorInscricaoEstad = '9') AND r_baseICMSUFDestinatario <> 0 AND p_aliquotaFCPUFDestinatario <> 0 THEN
      r_baseFCPUFDestinatario := r_baseICMSUFDestinatario;
      r_valorFCPUFDestinatario := ROUND ((r_baseFCPUFDestinatario * p_aliquotaFCPUFDestinatario / 100), 2);
    ELSE
      r_baseFCPUFDestinatario := 0;
      r_valorFCPUFDestinatario := 0;
    END IF;
  END IF;
  /* PIS */
  IF p_calcularPIS = 1 THEN
    IF p_aliquotaPIS > 0 THEN
      r_basePIS :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + r_valorIPI
        + p_valorIPIDevolucao
        - CASE WHEN p_config_330_redIcmsBasePisCof = 1 AND p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN r_valorICMS ELSE 0 END;
      r_valorPIS := ROUND ((r_basePIS * p_aliquotaPIS / 100), 2);
    ELSE
      r_basePIS := 0;
      r_valorPIS := 0;
    END IF;
    IF p_valorAliquotaPIS > 0 THEN
      r_valorPIS := ROUND ((r_valorPIS + (p_quantidade * p_valorAliquotaPIS)), 2);
    END IF;
  END IF;
  /* PIS ST */
  IF p_calcularPISST = 1 THEN
    IF p_aliquotaPISST > 0 THEN
      r_basePISST :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + r_valorIPI
        + p_valorIPIDevolucao
        - CASE WHEN p_config_330_redIcmsBasePisCof = 1 AND p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN r_valorICMS ELSE 0 END;
      r_valorPISST := ROUND ((r_basePISST * p_aliquotaPISST / 100), 2);
    ELSE
      r_basePISST := 0;
      r_valorPISST := 0;
    END IF;
    IF p_valorAliquotaPISST > 0 THEN
      r_valorPISST := ROUND ((r_valorPISST + (p_quantidade * p_valorAliquotaPISST)), 2);
    END IF;
  END IF;
  /* COFINS */
  IF p_calcularCOFINS = 1 THEN
    IF p_aliquotaCOFINS > 0 THEN
      r_baseCOFINS :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + r_valorIPI
        + p_valorIPIDevolucao
        - CASE WHEN p_config_330_redIcmsBasePisCof = 1 AND p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN r_valorICMS ELSE 0 END;
      r_valorCOFINS := ROUND ((r_baseCOFINS * p_aliquotaCOFINS / 100), 2);
    ELSE
      r_baseCOFINS := 0;
      r_valorCOFINS := 0;
    END IF;
    IF p_valorAliquotaCOFINS > 0 THEN
      r_valorCOFINS := ROUND ((r_valorCOFINS + (p_quantidade * p_valorAliquotaCOFINS)), 2);
    END IF;
  END IF;
  /* COFINS ST */
  IF p_calcularCOFINSST = 1 THEN
    IF p_aliquotaCOFINSST > 0 THEN
      r_baseCOFINSST :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal
        + p_valorAdicFreteMarinMerTotal
        + p_valorDespesasAduaneirasTotal
        + r_valorII
        + r_valorIOF
        + r_valorIPI
        + p_valorIPIDevolucao
        - CASE WHEN p_config_330_redIcmsBasePisCof = 1 AND p_cab_entradaSaida = CASE WHEN p_cab_devolucaoAnulacaoRetorno = 1 THEN 'E' ELSE 'S' END THEN r_valorICMS ELSE 0 END;
      r_valorCOFINSST := ROUND ((r_baseCOFINSST * p_aliquotaCOFINSST / 100), 2);
    ELSE
      r_baseCOFINSST := 0;
      r_valorCOFINSST := 0;
    END IF;
    IF p_valorAliquotaCOFINSST > 0 THEN
      r_valorCOFINSST := ROUND ((r_valorCOFINSST + (p_quantidade * p_valorAliquotaCOFINSST)), 2);
    END IF;
  END IF;
  /* Impostos Estimados */
  IF p_calcularImpostosEstimados = 1 THEN
    IF p_aliquotaEstImpFederais > 0 OR p_aliquotaEstImpEstaduais > 0 OR p_aliquotaEstImpMunicipais > 0 THEN
      r_baseEstimadaImpostos :=
        p_valorProdutoServico
        + CASE WHEN p_cab_tipoPagamentoFrete = 'V' THEN 0 ELSE p_valorFreteTotal + p_valorSeguroTotal END
        - p_valorDescontoTotal
        + p_valorOutrasDespesasTotal;
      r_valorEstimadoImpFederais := ROUND ((r_baseEstimadaImpostos * p_aliquotaEstImpFederais / 100), 2);
      r_valorEstimadoImpEstaduais := ROUND ((r_baseEstimadaImpostos * p_aliquotaEstImpEstaduais / 100), 2);
      r_valorEstimadoImpMunicipais := ROUND ((r_baseEstimadaImpostos * p_aliquotaEstImpMunicipais / 100), 2);
    ELSE
      r_baseEstimadaImpostos := 0;
      r_valorEstimadoImpFederais := 0;
      r_valorEstimadoImpEstaduais := 0;
      r_valorEstimadoImpMunicipais := 0;
    END IF;
  END IF;
END ADD_CALCULA_IMPOSTOS_ITEM;

/

