Files
app-dono-modulos/src/flash/flash.module.ts
T
lucas.favaro 56a8015c46
davinTI/app-dono-modulos/pipeline/head There was a failure building this commit
Merge branch 'main' of https://git.davinti.com.br/davinTI/app-dono-modulos
2026-05-22 16:11:17 -03:00

1014 lines
44 KiB
TypeScript

import { createModuleFactory, createSchedule } from "@davinti/jeff";
const moduleFactory = createModuleFactory(["C5", "C5_big", "C5_mambo"]);
export default moduleFactory
.createModule({
id: "flash-de-vendas",
description: "Flash de Vendas",
label: "Flash de Vendas",
icon: "bar-chart",
ai: {
topics: {
flash_vendas: {
descricao:
"Consulta e análise do relatório Flash de Vendas. Permite visualizar metas do mês, vendas do mês atual, variações e projeções, além de comparativos com o mês anterior e ano anterior. Útil para projeção de batimento de meta, ranking de lojas e comparativos de performance.",
prompt: {
prompt_persona:
"Especialista em dados e extrator de filtros para o Flash de Vendas. Analise a solicitação sobre desempenho de vendas, identifique filtros (data, loja) e agrupamento, e preencha o schema.",
prompt_tarefa:
'1. Identifique filtros: extraia data de referência (default: hoje) e lojas se mencionadas. Apenas `data` e `loja` são suportados.\n2. Identifique agrupamento: vazio para total geral, ou "loja" se o usuário pediu ranking/comparação entre lojas.\n3. Identifique o propósito analítico (apenas para contexto, não preencha campo):\n - "Vou bater a meta?" → projeção de fechamento e gap.\n - "Loja mais distante da meta?" → ranking por % de atingimento.\n - Comparativos temporais → mes_anterior ou ano_anterior.',
prompt_regras_contexto:
'- Refinamentos ("e o ano passado?") → use o histórico para manter filtros anteriores.\n- Não invente valores que não foram informados.',
prompt_regras_gerais:
'- Múltiplas lojas ("loja A e loja B") → extraia como array.\n- Sem solicitação de agrupamento → deixe vazio.\n- Não invente filtros ou agrupamentos fora do schema (divisão, segmento, regional não são suportados).',
prompt_exemplos:
'- "Vou bater a meta do mês?" → sem filtro de loja, sem agrupamento\n- "Qual loja está mais distante da meta?" → agrupamento: "loja"\n- "Como estamos em relação ao mês passado?" → sem agrupamento (comparativo temporal direto)\n- "Como foi a loja Centro e Shopping?" → loja: ["Centro", "Shopping"]',
prompt_outras_infos:
"A query retorna colunas: mes_atual, meta_mes, mes_anterior, ano_anterior. Apenas totalizações gerais ou por loja são suportadas.",
prompt_saida:
"Sua resposta deve ser uma análise detalhada e objetiva dos dados recebidos, apresentando os principais insights de forma clara e concisa.",
},
json_params_saida: {
agrupamentos: [
{
nome_parametro: "loja",
coluna_vtr: "x.codigo",
},
],
filtros: {
data_venda: {
descricao_agente:
"A data base para a consulta das vendas. Caso não informada explicitamente, usar a data de hoje no formato YYYY-MM-DD.",
nome_parametro: "data_venda",
},
loja: {
descricao_agente:
"Lista de nomes ou códigos de lojas mencionados para filtragem.",
coluna_vtr: "x.nomeempresaapp",
tabela_rag: "tb_flash_nodo",
},
},
},
query_base: "flash_vendas_ai",
},
sem_assunto: {
descricao: "Fluxo a ser seguido quando não houver assunto definido",
prompt: {
prompt_persona: "",
prompt_tarefa: "",
prompt_regras_contexto: "",
prompt_regras_gerais: "",
prompt_exemplos: "",
prompt_outras_infos: "",
prompt_saida: "Responda que não conseguiu identificar o assunto de maneira amigável e mostre os assuntos disponíveis para consulta.",
},
json_params_saida: {
agrupamentos: [],
filtros: {},
},
query_base: "query_vazia"
}
},
},
queries: {
flash: {
name: "Flash de Vendas",
display: {
type: "flash",
settings: {
group_column: "canalapp",
total_indicator_column: "is_total",
null_label_key: "Geral",
},
header: {
title_column: "canalapp",
value_column: "venda_dia",
value_format: "currency",
},
rows: [
{
label: "Meta Mês",
column: "meta_mes",
format: "currency_short",
},
{
label: "Mês Atual",
column: "mes_atual",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_mes_atual",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_atual",
format: "percentage",
},
{
label: "Mês Anterior",
column: "mes_anterior",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_mes_anterior",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_mes_anterior",
format: "percentage",
},
{
label: "Ano Anterior",
column: "ano_anterior",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_ano_anterior",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_ano_anterior",
format: "percentage",
},
],
},
params: ["data_venda"],
},
flash_categorias: {
name: "Flash de Vendas por Categorias",
display: {
type: "flash",
settings: {
group_column: "categoriaapp",
total_indicator_column: "is_total",
null_label_key: "Geral",
},
header: {
title_column: "categoriaapp",
value_column: "venda_dia",
value_format: "currency",
},
rows: [
{
label: "Meta Mês",
column: "meta_mes",
format: "currency_short",
},
{
label: "Mês Atual",
column: "mes_atual",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_mes_atual",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_atual",
format: "percentage",
},
{
label: "Mês Anterior",
column: "mes_anterior",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_mes_anterior",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_mes_anterior",
format: "percentage",
},
{
label: "Ano Anterior",
column: "ano_anterior",
format: "currency_short",
},
{
label: "Dif ($)",
column: "dif_ano_anterior",
format: "currency_short",
},
{
label: "% Variação",
column: "variacao_ano_anterior",
format: "percentage",
},
],
},
params: ["data_venda", "codigo_categoria_pai", "cod_empresa"],
},
flash_vendas_ai: {
name: " Flash de vendas AI",
display: {
type: "none",
},
params: ["data_venda", "agrupamento"],
},
query_vazia: {
name: "Query Vazia",
display: {
type: "none",
},
params: [],
}
},
entrypoint: "flash" as "flash" | "flash_categorias",
})
.withImplementations({
C5: {
flash: (args) => {
return {
sql: /*sql*/ `
SELECT
'Lojas' 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_meta_efetiva ELSE 0 END) 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 - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva 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 = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) 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_meta_efetiva ELSE 0 END) 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
n.codigo,
n.nome AS nomeempresaapp,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM
tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n
ON
n.id_nodo = r.id_nodo
WHERE
n.tipo_nodo = 'EMPRESA'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp),
()
)
`,
};
},
flash_categorias: (args) => {
return {
sql: /*sql*/ `
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
),
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_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
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
()
)
ORDER BY
is_total,
nomeempresaapp
`,
};
},
flash_vendas_ai: (args) => {
return {
sql: /*sql*/ `
SELECT
${args.agrupamento} AS KEY_FIELD,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) 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 - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva 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 = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) 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_meta_efetiva ELSE 0 END) 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
n.codigo,
n.nome AS nomeempresaapp,
n.codigo || ' - ' || n.nome AS loja_formatada,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo
WHERE n.tipo_nodo = 'EMPRESA'
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
WHERE 1=1
--FILTROS--
GROUP BY ${args.agrupamento}
ORDER BY mes_atual DESC
`,
};
},
query_vazia: (args)=> {
return {
sql: /*sql*/``
}
},
},
C5_big: {
flash: (args) => {
return {
sql: /*sql*/ `
SELECT
'Lojas' 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_meta_efetiva ELSE 0 END) 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 - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva 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 = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) 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_meta_efetiva ELSE 0 END) 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
n.codigo,
n.nome AS nomeempresaapp,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
THEN 'ANO_ANTERIOR'
END AS periodo
FROM
tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n
ON
n.id_nodo = r.id_nodo
WHERE
n.tipo_nodo = 'EMPRESA'
and (n.cod_empresa in (${args.ctx_user_companies_for_module}))
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12)
AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp),
()
)
`,
};
},
flash_categorias: (args) => {
return {
sql: /*sql*/ `
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
),
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_meta_efetiva ELSE 0 END) 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 - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva 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 = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)
) * 100
) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) 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_meta_efetiva ELSE 0 END) 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_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
GROUP BY
GROUPING SETS (
(x.codigo, x.nomeempresaapp, x.tipo_nodo),
()
)
ORDER BY
is_total,
nomeempresaapp
`,
};
},
flash_vendas_ai: (args) => {
return {
sql: /*sql*/ `
SELECT
${args.agrupamento} AS KEY_FIELD,
SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END) 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 - x.valor_meta_efetiva ELSE 0 END) AS dif_mes_atual,
CASE
WHEN SUM(CASE WHEN x.periodo = 'ATUAL' THEN x.valor_meta_efetiva 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 = 'ATUAL' THEN x.valor_meta_efetiva ELSE 0 END)) * 100) - 100
, 2)
END AS variacao_atual,
SUM(CASE WHEN x.periodo = 'MES_ANTERIOR' THEN x.valor_meta_efetiva ELSE 0 END) 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_meta_efetiva ELSE 0 END) 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
n.codigo,
n.nome AS nomeempresaapp,
n.codigo || ' - ' || n.nome AS loja_formatada,
r.valor_meta_efetiva,
r.valor_venda,
CASE
WHEN r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD') THEN 'ATUAL'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) THEN 'MES_ANTERIOR'
WHEN r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) THEN 'ANO_ANTERIOR'
END AS periodo
FROM tb_flash_nodo_resumo_venda r
JOIN tb_flash_nodo n ON n.id_nodo = r.id_nodo
WHERE n.tipo_nodo = 'EMPRESA'
AND (
r.data_referencia BETWEEN TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AND TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1)
OR r.data_referencia BETWEEN ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AND ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12)
)
) x
WHERE 1=1
--FILTROS--
GROUP BY ${args.agrupamento}
ORDER BY mes_atual DESC
`,
};
},
query_vazia: (args)=> {
return {
sql: /*sql*/``
}
},
},
C5_mambo: {
flash: (args) => {
return {
sql: /*sql*/ `
select
tes.canalapp,
tes.nomeempresaapp,
grouping(tes.canalapp) is_total,
sum(tvf.vlrvendadia) venda_dia,
sum(tvf.vlrmetames) meta_mes,
sum(tvf.vlrvendaacumulada) vda,
sum(tvf.vlrvendaacumulada - tvf.vlrmetaaculumada) dma,
sum(tvf.vlrmetadia) meta_dia,
round(avg(tvf.vlrmetamargemdiaperc), 2) meta_margem_dia,
sum(tvf.qtdclientes) qtd_clientes,
round(sum(tvf.vlrvendadia) / nullif(sum(tvf.qtdclientes), 0), 2) as ticket_medio,
round((sum(tvf.vlrlucro) / nullif(sum(tvf.vlrvendadia), 0)) * 100, 2) as margem
from mboard.tb_venda_flash tvf
inner join mboard.tb_empresa_segmento tes
on tes.nroempresa = tvf.nroempresa
and tes.nrodivisao = tvf.nrodivisao
and tes.nrosegmento = tvf.nrosegmento
and tes.codcanal = tvf.codcanal
where 1=1
and tvf.vlrvendaacumulada > 0
and tvf.dtavda = TO_DATE(${args.data_venda}, 'YYYY-MM-DD')
and (tvf.nroempresa in (${args.ctx_user_companies_for_module}))
group by rollup(canalapp, nomeempresaapp)
order by grouping(canalapp) desc, grouping(nomeempresaapp) desc`,
};
},
flash_categorias: (args) => {
return {
sql: /*sql*/ `
select
'Categorias' as categoriaapp,
1 as is_total,
0 as venda_dia,
0 as meta_mes,
0 as mes_atual,
0 as dif_mes_atual,
0 as variacao_atual,
0 as mes_anterior,
0 as dif_mes_anterior,
0 as variacao_mes_anterior,
0 as ano_anterior,
0 as dif_ano_anterior,
0 as variacao_ano_anterior
from dual
where 1 = 0`,
};
},
flash_vendas_ai: (args) => {
return {
sql: /*sql*/ ``,
};
},
query_vazia: (args)=> {
return {
sql: /*sql*/``
}
},
},
})
.withSchedules({
C5: [
createSchedule({
name: "Procedure que atualiza os dados do flash",
params: [],
command: (params) => ({
sql: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_VENDA_DONO(
p_data_inicial => TRUNC(SYSDATE) - 30,
p_data_final => TRUNC(SYSDATE),
p_empresa_ini => 1,
p_empresa_fim => 300
);
END;`,
}),
cron: "0 * * * *",
timeout_seconds: 2400,
}),
],
C5_big: [
createSchedule({
name: "Procedure que atualiza os dados do flash",
params: [],
command: (params) => ({
sql: /*sql*/ `BEGIN
PRC_FLASH_ATUALIZA_VENDA_DONO(
p_data_inicial => TRUNC(SYSDATE) - 30,
p_data_final => TRUNC(SYSDATE),
p_empresa_ini => 1,
p_empresa_fim => 10
);
END;`,
}),
cron: "0 * * * *",
timeout_seconds: 2400,
}),
],
C5_mambo: [
{
name: "Procedure que atualiza os dados do flash",
command: /*sql*/ `BEGIN
END`,
cron: "0 * * * *",
timeout_seconds: 2400,
},
],
});