Files
SLACK_COORD_RELATORIO/logic/dataQuality.js
T
GustavoandClaude Sonnet 5 485234dc88 feat(v2): add data-quality audit queue for INSUFFICIENT_CONTEXT, require non-empty next_action
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>
2026-08-24 16:52:22 -03:00

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 };