From f363d22d90b2bc7adfefb71b057a93f281483b46 Mon Sep 17 00:00:00 2001 From: julian Date: Fri, 29 May 2026 11:38:55 +0000 Subject: [PATCH] =?UTF-8?q?feat(infra):=20adiciona=20vw=5Fsarcfg=20ao=20sc?= =?UTF-8?q?hema=20SAR=20=E2=80=94=20regras=20de=20neg=C3=B3cio=20por=20emp?= =?UTF-8?q?resa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit View sar.vw_sarcfg lê gestao.sarcfg + gestao.sarconfig e expõe: - Flags booleanas decodificadas do bitmask bloq_preco_pedido (bits 0-5): blog_preco, blog_desconto, blog_limite_credito, blog_novo_cliente, blog_preco_promocional, blog_formapag_cliente - Configurações gerais: ativar_prod_pauta, preco_padrao, preco_com_ipi, origem_descmax, cod_pauta1/2/3 - Configs sarconfig (key-value): bloq_pauta_preco, dias_bloq_credito, dias_bloq_comunicacao, tipo_bloq_comunicacao Renumera seções de views: 1-15 → 1-16 (vw_sarcfg inserida como #1). OrdersService usará esta view para aplicar restrições por empresa. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- scripts/sar-erp-schema.sql | 86 +++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 15 deletions(-) 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