// Reavalia atendimentos onde Sentimento="indefinido" (cliente parou de responder/sumiu no final), // após correção do prompt do juiz que penalizava indevidamente o atendente nesse cenário // (rubrica "cliente abandonado" confundia atendente abandonando o cliente com o inverso). // // Uso: // node scripts/reavaliarClienteSumiu.js --limite 20 // node scripts/reavaliarClienteSumiu.js --score-max 4 // node scripts/reavaliarClienteSumiu.js import "dotenv/config"; import { Atendimento } from "../src/models/Atendimento.model.js"; import { avaliarAtendimento } from "../src/services/atendimentoAvaliacaoService.js"; const limiteIdx = process.argv.indexOf("--limite"); const LIMITE = limiteIdx > -1 ? Number(process.argv[limiteIdx + 1]) : null; const desdeIdx = process.argv.indexOf("--desde"); const DESDE = desdeIdx > -1 ? process.argv[desdeIdx + 1] : null; const scoreMaxIdx = process.argv.indexOf("--score-max"); const SCORE_MAX = scoreMaxIdx > -1 ? Number(process.argv[scoreMaxIdx + 1]) : null; async function main() { let query = Atendimento.query() .join("atendimento_avaliacoes as av", "av.AtendimentoId", "atendimentos.Id") .where("av.Avaliavel", true) .where("av.Sentimento", "indefinido") .select("atendimentos.Id", "atendimentos.Codigo") .orderBy("atendimentos.Id", "desc"); if (DESDE) query = query.where("av.UpdatedAt", "<", DESDE); if (SCORE_MAX !== null) query = query.where("av.ScoreAtendente", "<=", SCORE_MAX); if (LIMITE) query = query.limit(LIMITE); const alvos = await query; const total = alvos.length; console.log(`[reavaliar-cliente-sumiu] iniciando: ${total} atendimentos`); let processados = 0; let erros = 0; const t0 = Date.now(); for (const a of alvos) { try { await avaliarAtendimento(a.Id); } catch (err) { erros += 1; console.warn(`[reavaliar-cliente-sumiu] erro em ${a.Codigo}: ${err.message}`); } finally { processados += 1; if (processados % 25 === 0 || processados === total) { const s = Math.round((Date.now() - t0) / 1000); const ritmo = s / processados; const restamMin = Math.round(((total - processados) * ritmo) / 60); console.log( `[reavaliar-cliente-sumiu] progresso: ${processados}/${total} | erros: ${erros} | ${Math.round(s / 60)}min decorridos | ~${restamMin}min restantes` ); } } } console.log(`[reavaliar-cliente-sumiu] concluído: ${processados}/${total} | erros: ${erros} | ${Math.round((Date.now() - t0) / 60000)}min total`); process.exit(0); } main().catch((err) => { console.error("[reavaliar-cliente-sumiu] falha fatal:", err); process.exit(1); });