diff --git a/scripts/sar-erp-schema.sql b/scripts/sar-erp-schema.sql index 0cf7eaf..a42ce5c 100644 --- a/scripts/sar-erp-schema.sql +++ b/scripts/sar-erp-schema.sql @@ -18,7 +18,63 @@ CREATE SCHEMA IF NOT EXISTS sar; -- ============================================================================= -- ----------------------------------------------------------------------------- --- 1. Empresas / configuração SAR por empresa +-- 1. Regras de negócio por empresa (decodifica bitmask + sarconfig key-value) +-- +-- Esta é a view mais importante para o SAR: controla o que o rep pode/não pode +-- fazer em cada empresa. O OrdersService lê esta view antes de processar qualquer +-- pedido para aplicar as restrições corretas. +-- +-- Flags de bloq_preco_pedido (bitmask de gestao.sarcfg): +-- bit 0 → blog_preco pode alterar preço? +-- bit 1 → blog_desconto pode dar desconto? +-- bit 2 → blog_limite_credito bloqueia venda com crédito estourado? +-- bit 3 → blog_novo_cliente pode vender para cliente novo? +-- bit 4 → blog_preco_promocional acessa preço promocional? +-- bit 5 → blog_formapag_cliente força forma de pagto do cliente? +-- ----------------------------------------------------------------------------- +CREATE OR REPLACE VIEW sar.vw_sarcfg AS +SELECT + a.id_empresa, + -- Flags decodificadas do bitmask + (a.bloq_preco_pedido >> 0)::integer & 1 AS blog_preco, + (a.bloq_preco_pedido >> 1)::integer & 1 AS blog_desconto, + (a.bloq_preco_pedido >> 2)::integer & 1 AS blog_limite_credito, + (a.bloq_preco_pedido >> 3)::integer & 1 AS blog_novo_cliente, + (a.bloq_preco_pedido >> 4)::integer & 1 AS blog_preco_promocional, + (a.bloq_preco_pedido >> 5)::integer & 1 AS blog_formapag_cliente, + -- Configurações gerais + COALESCE(a.ativar_prod_pauta::integer, 0) AS ativar_prod_pauta, + COALESCE(a.preco_padrao::integer, 0) AS preco_padrao, + COALESCE(a.preco_com_ipi::integer, 0) AS preco_com_ipi, + COALESCE(a.origem_descmax, 'P'::bpchar) AS origem_descmax, + COALESCE(a.cod_pauta1, 0) AS cod_pauta1, + COALESCE(a.cod_pauta2, 0) AS cod_pauta2, + COALESCE(a.cod_pauta3, 0) AS cod_pauta3, + -- Configs adicionais da tabela sarconfig (key-value) + (SELECT COALESCE( + (SELECT sc.valor::integer FROM gestao.sarconfig sc + WHERE sc.id_empresa = a.id_empresa + AND sc.nome = 'Bloqueio Alterar Pauta de Preços'), 0) + ) AS bloq_pauta_preco, + (SELECT COALESCE( + (SELECT sc.valor::integer FROM gestao.sarconfig sc + WHERE sc.id_empresa = a.id_empresa + AND sc.nome = 'Dias Bloqueio Crédito'), 0) + ) AS dias_bloq_credito, + (SELECT COALESCE( + (SELECT sc.valor::integer FROM gestao.sarconfig sc + WHERE sc.id_empresa = a.id_empresa + AND sc.nome = 'Dias Bloqueio Comunicação'), 0) + ) AS dias_bloq_comunicacao, + (SELECT COALESCE( + (SELECT sc.valor FROM gestao.sarconfig sc + WHERE sc.id_empresa = a.id_empresa + AND sc.nome = 'Tipo Comunicação'), 'C') + ) AS tipo_bloq_comunicacao +FROM gestao.sarcfg a; + +-- ----------------------------------------------------------------------------- +-- 2. Empresas / informações cadastrais -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_empresas AS SELECT @@ -39,7 +95,7 @@ FROM gestao.empresa e LEFT JOIN gestao.sarcfg s ON s.id_empresa = e.id_empresa; -- ----------------------------------------------------------------------------- --- 2. Representantes / vendedores habilitados no SAR +-- 3. Representantes / vendedores habilitados no SAR -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_representantes AS SELECT @@ -69,7 +125,7 @@ FROM gestao.vendedor v LEFT JOIN gestao.flex f ON f.id_vendedor = v.id_vendedor; -- ----------------------------------------------------------------------------- --- 3. Clientes (sig.corrent) +-- 4. Clientes (sig.corrent) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_clientes AS SELECT @@ -111,7 +167,7 @@ SELECT FROM sig.corrent c; -- ----------------------------------------------------------------------------- --- 4. Municípios +-- 5. Municípios -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_municipios AS SELECT @@ -122,7 +178,7 @@ SELECT FROM gestao.municipio; -- ----------------------------------------------------------------------------- --- 5. Formas de Pagamento +-- 6. Formas de Pagamento -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_formas_pagamento AS SELECT @@ -141,7 +197,7 @@ SELECT FROM gestao.formapag; -- ----------------------------------------------------------------------------- --- 6. Produtos (catálogo com grupo, subgrupo, marca, tributação) +-- 7. Produtos (catálogo com grupo, subgrupo, marca, tributação) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_produtos AS SELECT @@ -188,7 +244,7 @@ LEFT JOIN gestao.st st ON st.codigo = p.cod_st WHERE p.id_erp IS NOT NULL; -- ----------------------------------------------------------------------------- --- 7. Estoque calculado (respeita tp_estoque da configuração SAR) +-- 8. Estoque calculado (respeita tp_estoque da configuração SAR) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_estoque AS SELECT @@ -219,7 +275,7 @@ WHERE p.id_erp IS NOT NULL AND (sub.produto_variacao = 0 OR p.id_prodvinc > 0); -- ----------------------------------------------------------------------------- --- 8. Situação Tributária ICMS-ST +-- 9. Situação Tributária ICMS-ST -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_sticms AS SELECT @@ -239,7 +295,7 @@ FROM gestao.sticms si JOIN gestao.st st ON st.id_st = si.id_st; -- ----------------------------------------------------------------------------- --- 9. Pautas de Preço +-- 10. Pautas de Preço -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_pautas AS SELECT @@ -268,7 +324,7 @@ SELECT FROM gestao.pauta p; -- ----------------------------------------------------------------------------- --- 10. Produtos por Pauta (preços específicos por pauta) +-- 11. Produtos por Pauta (preços específicos por pauta) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_pauta_produtos AS SELECT @@ -283,7 +339,7 @@ SELECT FROM gestao.pauxpro pp; -- ----------------------------------------------------------------------------- --- 11. Pedidos históricos do ERP (sig.pedidos — somente leitura) +-- 12. Pedidos históricos do ERP (sig.pedidos — somente leitura) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_pedidos_erp AS SELECT @@ -335,7 +391,7 @@ LEFT JOIN gestao.pauta pau ON pau.codigo = p.cod_pauta END; -- ----------------------------------------------------------------------------- --- 12. Itens dos Pedidos ERP (sig.peditens — somente leitura) +-- 13. Itens dos Pedidos ERP (sig.peditens — somente leitura) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_peditens_erp AS SELECT @@ -359,7 +415,7 @@ SELECT FROM sig.peditens i; -- ----------------------------------------------------------------------------- --- 13. Contas a Receber (sig.ctr — situação financeira do cliente) +-- 14. Contas a Receber (sig.ctr — situação financeira do cliente) -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_ctr AS SELECT @@ -381,7 +437,7 @@ SELECT FROM sig.ctr c; -- ----------------------------------------------------------------------------- --- 14. Grupos de Produtos +-- 15. Grupos de Produtos -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_grupos AS SELECT @@ -395,7 +451,7 @@ SELECT FROM gestao.grupo; -- ----------------------------------------------------------------------------- --- 15. Marcas +-- 16. Marcas -- ----------------------------------------------------------------------------- CREATE OR REPLACE VIEW sar.vw_marcas AS SELECT