From 0778d9c132cd2ced55ce9e2bda8588b3d6f5c63e Mon Sep 17 00:00:00 2001 From: "lucas.favaro" Date: Fri, 29 May 2026 09:17:47 -0300 Subject: [PATCH] Ajuste da query de categorias Flash de Perdas --- src/flash_perdas/flash_perdas.module.ts | 175 +++++++++++++++++++++++- 1 file changed, 174 insertions(+), 1 deletion(-) diff --git a/src/flash_perdas/flash_perdas.module.ts b/src/flash_perdas/flash_perdas.module.ts index cce5596..dd6c70a 100644 --- a/src/flash_perdas/flash_perdas.module.ts +++ b/src/flash_perdas/flash_perdas.module.ts @@ -239,7 +239,180 @@ export default moduleFactory }, flash_categorias: (args) => { return { - sql: /*sql*/ ``, + sql: /*sql*/ ` + WITH params AS ( + SELECT + TO_DATE(${args.data_perda}, 'YYYY-MM-DD') AS data_venda, + ${args.codigo_categoria_pai} AS codigo_categoria_pai, + ${args.cod_empresa} AS cod_empresa + FROM dual + ), + 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})) + AND ( + p.cod_empresa IS NULL + OR n.cod_empresa = 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 + CROSS JOIN params p + WHERE filho.tipo_nodo IN ('CATEGORIA', 'PRODUTO') + AND filho.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR filho.cod_empresa = p.cod_empresa + ) + + 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 ( + p.cod_empresa IS NULL + OR n.cod_empresa = p.cod_empresa + ) + AND n.nivel = ( + SELECT MIN(n2.nivel) + FROM tb_flash_nodo n2 + WHERE n2.tipo_nodo = 'CATEGORIA' + AND n2.ativo = 'S' + AND ( + p.cod_empresa IS NULL + OR n2.cod_empresa = p.cod_empresa + ) + ) + ) + SELECT + x.tipo_nodo AS canalapp, + + x.codigo AS cod_empresa, + + x.nomeempresaapp AS nomeempresaapp, + + CASE + WHEN GROUPING(x.codigo) = 1 THEN 1 + ELSE 0 + END AS is_total, + + 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 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.tipo_nodo, + 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_perda 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 + + GROUP BY + GROUPING SETS ( + (x.codigo, x.nomeempresaapp, x.tipo_nodo), + () + ) + + ORDER BY + is_total, + nomeempresaapp + `, }; }, },