fix(ai): adicionar implementação da query para C5
davinTI/app-dono-modulos/pipeline/head This commit looks good
davinTI/app-dono-modulos/pipeline/head This commit looks good
This commit is contained in:
@@ -10,17 +10,24 @@ export default moduleFactory
|
|||||||
icon: "bar-chart",
|
icon: "bar-chart",
|
||||||
ai: {
|
ai: {
|
||||||
topics: {
|
topics: {
|
||||||
flash_vendas_big: {
|
flash_vendas: {
|
||||||
descricao:
|
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.",
|
"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: {
|
||||||
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_persona:
|
||||||
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.",
|
"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_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_tarefa:
|
||||||
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).",
|
'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_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_regras_contexto:
|
||||||
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.",
|
'- Refinamentos ("e o ano passado?") → use o histórico para manter filtros anteriores.\n- Não invente valores que não foram informados.',
|
||||||
prompt_saida: "Sua resposta deve ser uma análise detalhada e objetiva dos dados recebidos, apresentando os principais insights de forma clara e concisa."
|
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: {
|
json_params_saida: {
|
||||||
agrupamentos: [
|
agrupamentos: [
|
||||||
@@ -458,7 +465,68 @@ export default moduleFactory
|
|||||||
},
|
},
|
||||||
flash_vendas_ai: (args) => {
|
flash_vendas_ai: (args) => {
|
||||||
return {
|
return {
|
||||||
sql: /*sql*/ ``,
|
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
|
||||||
|
`,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user