buildDataQualityReview extracts an auditable record per INSUFFICIENT_CONTEXT ticket (ticket_id, title, ai_reason, context_size, has_description, followup_count, task_count, has_solution, last_interaction_at) -- not sent anywhere, just for calibration. Also tightened validateAiClassification to reject an empty/whitespace-only next_action (was previously accepted). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
30 lines
1.2 KiB
JavaScript
30 lines
1.2 KiB
JavaScript
// Fila interna de auditoria/calibracao para chamados classificados como INSUFFICIENT_CONTEXT.
|
|
// Nao e enviada a ninguem -- serve so pra identificar problemas de preenchimento no GLPI
|
|
// (ver secao 10/14 da missao original). Fica gravada dentro do resumo do shadow run.
|
|
function buildDataQualityReview(items) {
|
|
return items
|
|
.filter((item) => item.aiClassification.classification === 'INSUFFICIENT_CONTEXT')
|
|
.map((item) => {
|
|
const t = item.ticket;
|
|
const followups = t.followups || [];
|
|
const tasks = t.tasks || [];
|
|
const contextSize = (t.descricao || '').length
|
|
+ followups.reduce((sum, f) => sum + (f.texto || '').length, 0)
|
|
+ tasks.reduce((sum, task) => sum + (task.texto || '').length, 0);
|
|
|
|
return {
|
|
ticket_id: t.id,
|
|
title: t.titulo,
|
|
ai_reason: item.aiClassification.reason,
|
|
context_size: contextSize,
|
|
has_description: Boolean(t.descricao && t.descricao.trim().length > 0),
|
|
followup_count: followups.length,
|
|
task_count: tasks.length,
|
|
has_solution: Boolean(t.solucao),
|
|
last_interaction_at: t.ultima_interacao_em,
|
|
};
|
|
});
|
|
}
|
|
|
|
module.exports = { buildDataQualityReview };
|