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)=> {
return {
sql: /*sql*/`
WITH Parametros_Base AS (
WITH params AS (
SELECT
TO_DATE(\${args.data_venda}, 'YYYY-MM-DD') AS data_venda,
\${args.codigo_categoria_pai} AS codigo_categoria_pai,
\${args.cod_empresa} AS cod_empresa
FROM DUAL
COALESCE(TO_DATE(NULLIF('{{DATA_VENDA}}', ${args.data_venda}), 'YYYY-MM-DD'), TRUNC(SYSDATE)) AS data_venda,
NULLIF('{{CATEGORIA_PAI}}', null) AS codigo_categoria_pai
FROM dual
),
Parametros AS (
SELECT
data_venda,
TRUNC(data_venda, 'MM') AS dt_inicio_mes,
ADD_MONTHS(TRUNC(data_venda, 'MM'), -1) AS dt_inicio_mes_ant,
ADD_MONTHS(data_venda, -1) AS dt_fim_mes_ant,
ADD_MONTHS(TRUNC(data_venda, 'MM'), -12) AS dt_inicio_ano_ant,
ADD_MONTHS(data_venda, -12) AS dt_fim_ano_ant,
codigo_categoria_pai,
cod_empresa
FROM Parametros_Base
nodo_pai_param AS (
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NOT NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.codigo = p.codigo_categoria_pai
AND n.cod_empresa IN (${args.ctx_user_companies_for_module})
),
filhos AS (
SELECT
n.id_nodo,
CASE
WHEN p.cod_empresa IS NULL THEN
MIN(n.ID_NODO) OVER (PARTITION BY n.nome)
ELSE
n.ID_NODO
END AS codigo,
n.nome, n.tipo_nodo, n.nivel,
n.cod_empresa, n.ordem_exibicao
FROM VERDEMAR.TB_FLASH_NODO n
CROSS JOIN Parametros p
WHERE n.ativo = 'S'
AND n.cod_empresa IN (\${args.ctx_user_companies_for_module})
AND ( (p.codigo_categoria_pai IS NULL AND n.tipo_nodo = 'CATEGORIA' AND n.NIVEL = 2)
OR (p.codigo_categoria_pai IS NOT NULL AND n.id_nodo_pai IN (
SELECT pai.id_nodo
FROM VERDEMAR.TB_FLASH_NODO pai
WHERE pai.nome = (SELECT nome FROM VERDEMAR.TB_FLASH_NODO WHERE id_nodo = p.codigo_categoria_pai)
)) )
AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa)
),
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), ())
nodos_filtrados AS (
SELECT filho.*
FROM tb_flash_nodo filho
JOIN nodo_pai_param pai_param
ON pai_param.id_nodo = filho.id_nodo_pai
WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO')
AND filho.ativo = 'S'
UNION ALL
SELECT n.*
FROM tb_flash_nodo n
CROSS JOIN params p
WHERE p.codigo_categoria_pai IS NULL
AND n.tipo_nodo = 'CATEGORIA'
AND n.ativo = 'S'
AND n.cod_empresa IN (${args.ctx_user_companies_for_module})
AND n.nivel = (
SELECT MIN(n2.nivel)
FROM tb_flash_nodo n2
WHERE n2.tipo_nodo = 'CATEGORIA'
AND n2.ativo = 'S'
)
)
SELECT
nome AS nomeempresaapp,
tipo_nodo AS canalapp,
codigo AS cod_empresa,
is_total,
m_mes AS meta_mes,
v_mes AS mes_atual,
(v_mes - m_mes) AS dif_mes_atual,
:agrupamento AS KEY_FIELD,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) AS mes_atual,
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,
CASE
WHEN m_mes = 0 THEN 0
ELSE ROUND(((v_mes / m_mes) * 100) - 100, 2)
END AS variacao_atual,
m_mes_ant AS meta_mes_anterior,
v_mes_ant AS mes_anterior,
(v_mes - v_mes_ant) AS dif_mes_anterior,
ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior,
m_ano_ant AS meta_ano_anterior,
v_ano_ant AS ano_anterior,
(v_mes - v_ano_ant) AS dif_ano_anterior,
ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior
FROM Agrupado
ORDER BY is_total, ordem_exibicao NULLS LAST, nomeempresaapp
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_venda ELSE 0 END) * 1.02 = 0 THEN 0
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,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_mes_anterior,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS 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,
CASE
WHEN SUM(CASE WHEN x.periodo = 'MES_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 = 'MES_ANTERIOR' THEN x.valor_venda ELSE 0 END)) * 100) - 100, 2)
END AS variacao_mes_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) * 1.02 AS meta_ano_anterior,
SUM(CASE WHEN x.periodo = 'ANO_ANTERIOR' THEN x.valor_venda ELSE 0 END) AS ano_anterior,
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
`
}