Adicionando assunto de flash de vendas por categoria ia
This commit is contained in:
+163
-1
@@ -48,11 +48,45 @@ export default moduleFactory
|
||||
"Lista de nomes ou códigos de lojas mencionados para filtragem.",
|
||||
coluna_vtr: "x.nomeempresaapp",
|
||||
tabela_rag: "lojas",
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
query_base: "flash_vendas_ai",
|
||||
},
|
||||
flash_vendas_categorais : {
|
||||
descricao: "Consulta e análise do Flash de Vendas por Categorias do Verdemar. Visualiza metas, vendas, variações e comparativos temporais (mês anterior e ano anterior) por categorias e subcategorias de produtos, de forma hierárquica. Permite filtrar por loja e por categoria pai.",
|
||||
prompt: {
|
||||
prompt_persona: "Você é um Extrator de Filtros especializado. Sua única tarefa: analisar a solicitação do usuário sobre vendas por categorias (Flash de Categorias) da rede Verdemar, identificar as informações desejadas (data de referência, loja ou categoria pai) e preencher as variáveis exatas do sistema de relatórios.",
|
||||
prompt_tarefa: "1. Filtros: extraia a data em 'data_venda' (default: hoje, YYYY-MM-DD), a loja em 'cod_empresa' e a categoria pai em 'codigo_categoria_pai'.\n2. Agrupamento: esta query não exige quebra dinâmica; mantenha o agrupamento vazio.\n3. Propósito analítico:\n - Categoria/subcategoria específica (ex: Bebidas, Padaria, Açougue) → extraia o código/nome para 'codigo_categoria_pai'.\n - Visão geral sem detalhar nenhuma categoria → deixe 'codigo_categoria_pai' vazio.",
|
||||
prompt_regras_gerais: "- Filtro de data obrigatório (default: hoje, YYYY-MM-DD).\n- Loja específica → extraia o código em 'cod_empresa'.\n- 'codigo_categoria_pai' recebe a categoria/seção pai cujas subcategorias o usuário quer detalhar.",
|
||||
prompt_regras_contexto: "- Em mensagens incompletas ou de continuação (ex: 'E na loja Sion?'), use o histórico para manter data base, loja e categorias anteriores.\n- Não invente valores de filtro não citados claramente.",
|
||||
prompt_exemplos: "Ex.1 (Visão Geral/Raiz): 'Como foram as vendas por categoria ontem?' → data_venda='ontem', sem cod_empresa, sem codigo_categoria_pai (raiz nível 2).\nEx.2 (Categoria + Loja): 'Vendas de Bebidas na loja Sion hoje.' → data_venda='hoje', cod_empresa='Sion', codigo_categoria_pai='Bebidas'.\nEx.3 (Drill-Down): 'Quero detalhar a seção de Cervejas.' → codigo_categoria_pai='Cervejas'; mantém data e loja do contexto, se houver.",
|
||||
prompt_outras_infos: "A query fornece vendas e comparativos por categoria de produtos (mes_atual, mes_anterior, ano_anterior). Suporta filtros por loja (cod_empresa) e categoria pai (codigo_categoria_pai) para navegação hierárquica.",
|
||||
prompt_saida: "Responda ÚNICA e EXCLUSIVAMENTE com um objeto JSON válido, aderente ao schema de filtros e agrupamentos. Sem texto extra e sem markdown — apenas o JSON puro."
|
||||
},
|
||||
json_params_saida: {
|
||||
agrupamentos: [],
|
||||
filtros: {
|
||||
data_venda: {
|
||||
descricao_agente: "A data base para a consulta de vendas (YYYY-MM-DD). Caso não seja informada explicitamente pelo usuário, use a data de hoje.",
|
||||
coluna_vtr: "args.data_venda",
|
||||
// tabela_rag: null
|
||||
},
|
||||
cod_empresa: {
|
||||
descricao_agente: "Código ou nome da loja (empresa) do Verdemar para filtrar as vendas por categoria.",
|
||||
coluna_vtr: "args.cod_empresa",
|
||||
//tabela_rag: "tb_flash_nodo"
|
||||
},
|
||||
codigo_categoria_pai: {
|
||||
descricao_agente: "Código ou nome da categoria pai para detalhamento (drill-down) das subcategorias. Se não especificado, retorna as categorias principais.",
|
||||
coluna_vtr: "args.codigo_categoria_pai",
|
||||
// tabela_rag: "tb_flash_nodo"
|
||||
}
|
||||
}
|
||||
},
|
||||
query_base: "flash_vendas_categoria_ai",
|
||||
},
|
||||
sem_assunto: {
|
||||
descricao: "Fluxo a ser seguido quando não houver assunto definido",
|
||||
prompt: {
|
||||
@@ -243,6 +277,13 @@ export default moduleFactory
|
||||
},
|
||||
params: ["data_venda", "agrupamento"],
|
||||
},
|
||||
flash_vendas_categoria_ai: {
|
||||
name: " Flash de vendas Categoria AI",
|
||||
display: {
|
||||
type: "none",
|
||||
},
|
||||
params: ["data_venda"],
|
||||
},
|
||||
query_vazia: {
|
||||
name: "Query Vazia",
|
||||
display: {
|
||||
@@ -600,6 +641,12 @@ export default moduleFactory
|
||||
return {
|
||||
sql: /*sql*/``
|
||||
|
||||
}
|
||||
},
|
||||
flash_vendas_categoria_ai: (args)=> {
|
||||
return {
|
||||
sql: /*sql*/``
|
||||
|
||||
}
|
||||
},
|
||||
},
|
||||
@@ -943,7 +990,13 @@ export default moduleFactory
|
||||
|
||||
}
|
||||
},
|
||||
},
|
||||
flash_vendas_categoria_ai: (args)=> {
|
||||
return {
|
||||
sql: /*sql*/``
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
C5_mambo: {
|
||||
flash: (args) => {
|
||||
return {
|
||||
@@ -1011,6 +1064,12 @@ where 1 = 0`,
|
||||
return {
|
||||
sql: /*sql*/``
|
||||
|
||||
}
|
||||
},
|
||||
flash_vendas_categoria_ai: (args)=> {
|
||||
return {
|
||||
sql: /*sql*/``
|
||||
|
||||
}
|
||||
},
|
||||
},
|
||||
@@ -1291,6 +1350,109 @@ where 1 = 0`,
|
||||
sql: /*sql*/` select nome, id_nodo, codigo from verdemar.tb_flash_nodo where tipo_nodo = 'EMPRESA'`
|
||||
}
|
||||
},
|
||||
flash_vendas_categoria_ai: (args)=> {
|
||||
return {
|
||||
sql: /*sql*/`
|
||||
WITH Parametros_Base 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
|
||||
),
|
||||
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
|
||||
),
|
||||
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), ())
|
||||
)
|
||||
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,
|
||||
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
|
||||
|
||||
`
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
.withSchedules({
|
||||
|
||||
Reference in New Issue
Block a user