feat(infra): adiciona vw_metas ao schema SAR — metas do ERP (gestao.metavenda)

View sar.vw_metas expõe gestao.metavenda com joins descritivos:
- nome_vendedor (gestao.vendedor)
- desc_grupo / desc_subgrupo (gestao.grupo)
- nome_marca (gestao.marca)
- Campos calculados: ano e mes extraídos de mes_ano (date)

Campo tipo (char 2) controla o escopo da meta:
  G/GE=geral, GR=grupo, SG=subgrupo, MA=marca, PR=produto, AC=classe ABC

DashboardService usará tipo='G' (ou equivalente) para calcular %
atingido vs meta; os demais tipos ficam disponíveis para detalhamento
futuro. Taxas de comissão/flex vêm de vw_representantes (taxa_com),
não da tabela sar.meta_representante (que guarda apenas overrides SAR).

Renumera seções 4-16 → 5-17 para acomodar vw_metas como seção 4.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-29 11:45:55 +00:00
parent f363d22d90
commit 6cdb4c578e

View File

@@ -125,7 +125,50 @@ 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;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 4. Clientes (sig.corrent) -- 4. Metas de vendas por representante (gestao.metavenda)
--
-- tipo (char 2) define o escopo da meta — valores comuns do ERP JCS:
-- 'G' ou 'GE' → meta geral de valor (a que o dashboard usa para % atingido)
-- 'GR' → meta por grupo de produto
-- 'SG' → meta por subgrupo
-- 'MA' → meta por marca
-- 'PR' → meta por produto
-- 'AC' → meta por classe ABC
--
-- Comissão e flex vêm de vw_representantes (taxa_com, taxa_com_super, permitir_flex).
-- sar.meta_representante só guarda overrides que não existem no ERP (ex: taxa_flex SAR).
-- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_metas AS
SELECT
m.id_metavenda,
m.id_empresa,
m.mes_ano,
EXTRACT(YEAR FROM m.mes_ano)::integer AS ano,
EXTRACT(MONTH FROM m.mes_ano)::integer AS mes,
m.cod_vendedor,
v.nome AS nome_vendedor,
m.tipo,
m.qtdade,
m.valor,
m.peso,
m.vl_fator,
-- Filtros de segmento (opcionais — NULL = meta geral)
m.cod_grupo,
grp.descricao AS desc_grupo,
m.cod_subgrupo,
sub.descricao AS desc_subgrupo,
m.cod_produto,
m.cod_marca,
mrc.nome AS nome_marca,
m.classe_abc
FROM gestao.metavenda m
LEFT JOIN gestao.vendedor v ON v.codigo = m.cod_vendedor AND v.id_empresa = m.id_empresa
LEFT JOIN gestao.grupo grp ON grp.codigo = m.cod_grupo AND grp.id_empresa = m.id_empresa
LEFT JOIN gestao.grupo sub ON sub.codigo = m.cod_subgrupo AND sub.id_empresa = m.id_empresa
LEFT JOIN gestao.marca mrc ON mrc.codigo = m.cod_marca AND mrc.id_empresa = m.id_empresa;
-- -----------------------------------------------------------------------------
-- 5. Clientes (sig.corrent)
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_clientes AS CREATE OR REPLACE VIEW sar.vw_clientes AS
SELECT SELECT
@@ -167,7 +210,7 @@ SELECT
FROM sig.corrent c; FROM sig.corrent c;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 5. Municípios -- 6. Municípios
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_municipios AS CREATE OR REPLACE VIEW sar.vw_municipios AS
SELECT SELECT
@@ -178,7 +221,7 @@ SELECT
FROM gestao.municipio; FROM gestao.municipio;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 6. Formas de Pagamento -- 7. Formas de Pagamento
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_formas_pagamento AS CREATE OR REPLACE VIEW sar.vw_formas_pagamento AS
SELECT SELECT
@@ -197,7 +240,7 @@ SELECT
FROM gestao.formapag; FROM gestao.formapag;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 7. Produtos (catálogo com grupo, subgrupo, marca, tributação) -- 8. 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
@@ -244,7 +287,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;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 8. Estoque calculado (respeita tp_estoque da configuração SAR) -- 9. 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
@@ -275,7 +318,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);
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 9. Situação Tributária ICMS-ST -- 10. Situação Tributária ICMS-ST
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_sticms AS CREATE OR REPLACE VIEW sar.vw_sticms AS
SELECT SELECT
@@ -295,7 +338,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;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 10. Pautas de Preço -- 11. Pautas de Preço
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_pautas AS CREATE OR REPLACE VIEW sar.vw_pautas AS
SELECT SELECT
@@ -324,7 +367,7 @@ SELECT
FROM gestao.pauta p; FROM gestao.pauta p;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 11. Produtos por Pauta (preços específicos por pauta) -- 12. 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
@@ -339,7 +382,7 @@ SELECT
FROM gestao.pauxpro pp; FROM gestao.pauxpro pp;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 12. Pedidos históricos do ERP (sig.pedidos — somente leitura) -- 13. 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
@@ -391,7 +434,7 @@ LEFT JOIN gestao.pauta pau ON pau.codigo = p.cod_pauta
END; END;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 13. Itens dos Pedidos ERP (sig.peditens — somente leitura) -- 14. 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
@@ -415,7 +458,7 @@ SELECT
FROM sig.peditens i; FROM sig.peditens i;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 14. Contas a Receber (sig.ctr — situação financeira do cliente) -- 15. 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
@@ -437,7 +480,7 @@ SELECT
FROM sig.ctr c; FROM sig.ctr c;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 15. Grupos de Produtos -- 16. Grupos de Produtos
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_grupos AS CREATE OR REPLACE VIEW sar.vw_grupos AS
SELECT SELECT
@@ -451,7 +494,7 @@ SELECT
FROM gestao.grupo; FROM gestao.grupo;
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- 16. Marcas -- 17. Marcas
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_marcas AS CREATE OR REPLACE VIEW sar.vw_marcas AS
SELECT SELECT