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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
34f61abc3b
commit
485234dc88
@@ -0,0 +1,29 @@
|
||||
// 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 };
|
||||
Reference in New Issue
Block a user