Files
SLACK_COORD_RELATORIO/logic/context.js
T

63 lines
2.3 KiB
JavaScript

function normalizeTicket(row, extras) {
const followups = (extras && extras.followups) || [];
const tasks = (extras && extras.tasks) || [];
return {
id: Number(row.id),
titulo: row.titulo,
status: Number(row.status),
status_nome: row.status_nome,
aberto_em: row.aberto_em,
ultima_interacao_em: row.ultima_interacao_em,
dias_aberto: Number(row.dias_aberto),
dias_sem_interacao: Number(row.dias_sem_interacao),
sla_vencido: Number(row.sla_vencido) === 1,
sla_em_risco: Number(row.sla_em_risco) === 1,
horas_ate_sla: row.horas_ate_sla == null ? null : Number(row.horas_ate_sla),
prioridade: Number(row.prioridade),
urgencia: Number(row.urgencia),
impacto: Number(row.impacto),
entidade: row.entidade,
categoria: row.categoria,
tecnico_atribuido: row.tecnico_atribuido,
sem_tecnico: Number(row.sem_tecnico) === 1,
link_glpi: row.link_glpi,
score_criticidade: Number(row.score_criticidade),
followups,
tasks,
};
}
function truncate(text, maxChars) {
const clean = String(text || '').replace(/\s+/g, ' ').trim();
return clean.length > maxChars ? `${clean.slice(0, Math.max(0, maxChars - 3))}...` : clean;
}
function buildAiContextText(ticket, maxChars) {
const budget = Math.max(200, Number(maxChars) || 4000);
const followupsText = ticket.followups
.slice(-5)
.map((f) => `- [followup ${f.date}] ${truncate(f.texto, 300)}`)
.join('\n');
const tasksText = ticket.tasks
.slice(-5)
.map((t) => `- [tarefa ${t.date} status=${t.status}] ${truncate(t.texto, 300)}`)
.join('\n');
const header = [
`Chamado #${ticket.id} - ${ticket.titulo}`,
`Status: ${ticket.status_nome} | Categoria: ${ticket.categoria} | Entidade: ${ticket.entidade}`,
`Tecnico: ${ticket.tecnico_atribuido}`,
`Prioridade: ${ticket.prioridade} Urgencia: ${ticket.urgencia} Impacto: ${ticket.impacto}`,
`SLA vencido: ${ticket.sla_vencido} | Dias sem interacao: ${ticket.dias_sem_interacao} | Dias aberto: ${ticket.dias_aberto}`,
].join('\n');
const body = [
'Ultimos apontamentos:',
followupsText || '(nenhum)',
'',
'Ultimas tarefas:',
tasksText || '(nenhuma)',
].join('\n');
return truncate(`${header}\n\n${body}`, budget);
}
module.exports = { normalizeTicket, buildAiContextText, truncate };