feat(infra): adiciona vw_sarcfg ao schema SAR — regras de negócio por empresa

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) <noreply@anthropic.com>
This commit is contained in:
2026-05-29 11:38:55 +00:00
parent b0b60d7a14
commit f363d22d90

View File

@@ -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 CREATE OR REPLACE VIEW sar.vw_empresas AS
SELECT SELECT
@@ -39,7 +95,7 @@ FROM gestao.empresa e
LEFT JOIN gestao.sarcfg s ON s.id_empresa = e.id_empresa; 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 CREATE OR REPLACE VIEW sar.vw_representantes AS
SELECT SELECT
@@ -69,7 +125,7 @@ FROM gestao.vendedor v
LEFT JOIN gestao.flex f ON f.id_vendedor = v.id_vendedor; 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 CREATE OR REPLACE VIEW sar.vw_clientes AS
SELECT SELECT
@@ -111,7 +167,7 @@ SELECT
FROM sig.corrent c; FROM sig.corrent c;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 4. Municípios -- 5. Municípios
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_municipios AS CREATE OR REPLACE VIEW sar.vw_municipios AS
SELECT SELECT
@@ -122,7 +178,7 @@ SELECT
FROM gestao.municipio; FROM gestao.municipio;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 5. Formas de Pagamento -- 6. Formas de Pagamento
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_formas_pagamento AS CREATE OR REPLACE VIEW sar.vw_formas_pagamento AS
SELECT SELECT
@@ -141,7 +197,7 @@ SELECT
FROM gestao.formapag; 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 CREATE OR REPLACE VIEW sar.vw_produtos AS
SELECT SELECT
@@ -188,7 +244,7 @@ LEFT JOIN gestao.st st ON st.codigo = p.cod_st
WHERE p.id_erp IS NOT NULL; 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 CREATE OR REPLACE VIEW sar.vw_estoque AS
SELECT SELECT
@@ -219,7 +275,7 @@ WHERE p.id_erp IS NOT NULL
AND (sub.produto_variacao = 0 OR p.id_prodvinc > 0); 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 CREATE OR REPLACE VIEW sar.vw_sticms AS
SELECT SELECT
@@ -239,7 +295,7 @@ FROM gestao.sticms si
JOIN gestao.st st ON st.id_st = si.id_st; 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 CREATE OR REPLACE VIEW sar.vw_pautas AS
SELECT SELECT
@@ -268,7 +324,7 @@ SELECT
FROM gestao.pauta p; 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 CREATE OR REPLACE VIEW sar.vw_pauta_produtos AS
SELECT SELECT
@@ -283,7 +339,7 @@ SELECT
FROM gestao.pauxpro pp; 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 CREATE OR REPLACE VIEW sar.vw_pedidos_erp AS
SELECT SELECT
@@ -335,7 +391,7 @@ LEFT JOIN gestao.pauta pau ON pau.codigo = p.cod_pauta
END; 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 CREATE OR REPLACE VIEW sar.vw_peditens_erp AS
SELECT SELECT
@@ -359,7 +415,7 @@ SELECT
FROM sig.peditens i; 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 CREATE OR REPLACE VIEW sar.vw_ctr AS
SELECT SELECT
@@ -381,7 +437,7 @@ SELECT
FROM sig.ctr c; FROM sig.ctr c;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 14. Grupos de Produtos -- 15. Grupos de Produtos
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_grupos AS CREATE OR REPLACE VIEW sar.vw_grupos AS
SELECT SELECT
@@ -395,7 +451,7 @@ SELECT
FROM gestao.grupo; FROM gestao.grupo;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 15. Marcas -- 16. Marcas
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_marcas AS CREATE OR REPLACE VIEW sar.vw_marcas AS
SELECT SELECT