AJustando query cateegorias ai vdm
davinTI/app-dono-modulos/pipeline/head This commit looks good

This commit is contained in:
sarah.magalhaes
2026-06-11 14:25:04 -03:00
parent cd9f7b6123
commit c28a8fc40a
+83 -90
View File
@@ -1354,102 +1354,95 @@ where 1 = 0`,
flash_vendas_categoria_ai: (args)=> { flash_vendas_categoria_ai: (args)=> {
return { return {
sql: /*sql*/` sql: /*sql*/`
WITH Parametros_Base AS ( WITH params AS (
SELECT SELECT
TO_DATE(\${args.data_venda}, 'YYYY-MM-DD') AS data_venda, COALESCE(TO_DATE(NULLIF('{{DATA_VENDA}}', ${args.data_venda}), 'YYYY-MM-DD'), TRUNC(SYSDATE)) AS data_venda,
\${args.codigo_categoria_pai} AS codigo_categoria_pai, NULLIF('{{CATEGORIA_PAI}}', null) AS codigo_categoria_pai
\${args.cod_empresa} AS cod_empresa FROM dual
FROM DUAL
), ),
Parametros AS ( nodo_pai_param AS (
SELECT SELECT n.*
data_venda, FROM tb_flash_nodo n
TRUNC(data_venda, 'MM') AS dt_inicio_mes, CROSS JOIN params p
ADD_MONTHS(TRUNC(data_venda, 'MM'), -1) AS dt_inicio_mes_ant, WHERE p.codigo_categoria_pai IS NOT NULL
ADD_MONTHS(data_venda, -1) AS dt_fim_mes_ant, AND n.tipo_nodo = 'CATEGORIA'
ADD_MONTHS(TRUNC(data_venda, 'MM'), -12) AS dt_inicio_ano_ant, AND n.codigo = p.codigo_categoria_pai
ADD_MONTHS(data_venda, -12) AS dt_fim_ano_ant, AND n.cod_empresa IN (${args.ctx_user_companies_for_module})
codigo_categoria_pai,
cod_empresa
FROM Parametros_Base
), ),
filhos AS ( nodos_filtrados AS (
SELECT SELECT filho.*
n.id_nodo, FROM tb_flash_nodo filho
CASE JOIN nodo_pai_param pai_param
WHEN p.cod_empresa IS NULL THEN ON pai_param.id_nodo = filho.id_nodo_pai
MIN(n.ID_NODO) OVER (PARTITION BY n.nome) WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
ELSE AND filho.ativo = 'S'
n.ID_NODO
END AS codigo, UNION ALL
n.nome, n.tipo_nodo, n.nivel,
n.cod_empresa, n.ordem_exibicao SELECT n.*
FROM VERDEMAR.TB_FLASH_NODO n FROM tb_flash_nodo n
CROSS JOIN Parametros p CROSS JOIN params p
WHERE n.ativo = 'S' WHERE p.codigo_categoria_pai IS NULL
AND n.cod_empresa IN (\${args.ctx_user_companies_for_module}) AND n.tipo_nodo = 'CATEGORIA'
AND ( (p.codigo_categoria_pai IS NULL AND n.tipo_nodo = 'CATEGORIA' AND n.NIVEL = 2) AND n.ativo = 'S'
OR (p.codigo_categoria_pai IS NOT NULL AND n.id_nodo_pai IN ( AND n.cod_empresa IN (${args.ctx_user_companies_for_module})
SELECT pai.id_nodo AND n.nivel = (
FROM VERDEMAR.TB_FLASH_NODO pai SELECT MIN(n2.nivel)
WHERE pai.nome = (SELECT nome FROM VERDEMAR.TB_FLASH_NODO WHERE id_nodo = p.codigo_categoria_pai) FROM tb_flash_nodo n2
)) ) WHERE n2.tipo_nodo = 'CATEGORIA'
AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa) AND n2.ativo = 'S'
), )
Vendas_Metas AS (
SELECT
f.id_nodo, f.codigo, f.nome, f.tipo_nodo, f.nivel,
f.cod_empresa, f.ordem_exibicao,
r.data_referencia AS data,
r.valor_venda AS venda,
0 AS meta
FROM filhos f
JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo
CROSS JOIN Parametros p
WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.data_venda
OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant
OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant)
),
Agrupado AS (
SELECT
v.codigo AS codigo,
MAX(v.nome) AS nome,
MAX(v.tipo_nodo) AS tipo_nodo,
MAX(v.nivel) AS nivel,
MAX(v.ordem_exibicao) AS ordem_exibicao,
GROUPING(v.codigo) AS is_total,
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.data_venda THEN v.venda ELSE 0 END) AS v_mes,
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.venda ELSE 0 END) AS v_mes_ant,
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.venda ELSE 0 END) AS v_ano_ant,
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.data_venda THEN v.meta ELSE 0 END) AS m_mes,
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.meta ELSE 0 END) AS m_mes_ant,
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.meta ELSE 0 END) AS m_ano_ant
FROM Vendas_Metas v
CROSS JOIN Parametros p
GROUP BY GROUPING SETS ((v.codigo, p.cod_empresa), ())
) )
SELECT SELECT
nome AS nomeempresaapp, :agrupamento AS KEY_FIELD,
tipo_nodo AS canalapp, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes,
codigo AS cod_empresa, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
is_total, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS dif_mes_atual,
m_mes AS meta_mes,
v_mes AS mes_atual,
(v_mes - m_mes) AS dif_mes_atual,
CASE CASE
WHEN m_mes = 0 THEN 0 WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 = 0 THEN 0
ELSE ROUND(((v_mes / m_mes) * 100) - 100, 2) ELSE ROUND(((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / (SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02)) * 100) - 100, 2)
END AS variacao_atual, END AS variacao_atual,
m_mes_ant AS meta_mes_anterior, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes_anterior,
v_mes_ant AS mes_anterior, SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS mes_anterior,
(v_mes - v_mes_ant) AS dif_mes_anterior, SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_mes_anterior,
ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior, CASE
m_ano_ant AS meta_ano_anterior, WHEN SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
v_ano_ant AS ano_anterior, ELSE ROUND(((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100, 2)
(v_mes - v_ano_ant) AS dif_ano_anterior, END AS variacao_mes_anterior,
ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_ano_anterior,
FROM Agrupado SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
ORDER BY is_total, ordem_exibicao NULLS LAST, nomeempresaapp SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) - SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS dif_ano_anterior,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) = 0 THEN 0
ELSE ROUND(((SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) / SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100, 2)
END AS variacao_ano_anterior
FROM (
SELECT
cat.codigo AS codigo,
cat.nome AS nomeempresaapp,
cat.codigo || ' - ' || cat.nome AS categoria_formatada,
cat.tipo_nodo,
cat.cod_empresa,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1) AND ADD_MONTHS(p.data_venda, -1) THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12) AND ADD_MONTHS(p.data_venda, -12) THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN nodos_filtrados cat ON cat.id_nodo = r.id_nodo
CROSS JOIN params p
WHERE (
r.data_referencia BETWEEN TRUNC(p.data_venda, 'MM') AND p.data_venda
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -1) AND ADD_MONTHS(p.data_venda, -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(p.data_venda, 'MM'), -12) AND ADD_MONTHS(p.data_venda, -12)
)
) x
WHERE 1=1
--FILTROS--
GROUP BY :agrupamento
ORDER BY mes_atual DESC
` `
} }