// Roda a avaliação (estágio 1) em lotes até zerar a fila de pendentes. // Uso: node scripts/avaliarTudo.js [--lote 20] import { avaliarPendentes, contarPendentes } from "../src/services/atendimentoAvaliacaoService.js"; const loteArg = process.argv.indexOf("--lote"); const LOTE = loteArg > -1 ? Number(process.argv[loteArg + 1]) : 20; async function main() { let restantes = await contarPendentes(); console.log(`[avaliar-tudo] ${restantes} pendentes, lotes de ${LOTE}`); while (restantes > 0) { const t0 = Date.now(); const r = await avaliarPendentes({ limite: LOTE }); restantes = await contarPendentes(); console.log( `[avaliar-tudo] +${r.avaliados} avaliados, ${r.semDialogo} sem diálogo, ${r.erros.length} erros ` + `(${((Date.now() - t0) / 1000).toFixed(0)}s) — restam ${restantes}` ); if (r.erros.length) r.erros.slice(0, 3).forEach((e) => console.log(" erro:", e.atendimentoId, e.erro)); // lote sem nenhum progresso = algo estrutural errado; para em vez de girar para sempre if (r.avaliados === 0 && r.semDialogo === 0) { console.error("[avaliar-tudo] lote inteiro falhou, abortando"); process.exit(1); } } console.log("[avaliar-tudo] fila zerada"); process.exit(0); } main().catch((e) => { console.error("[avaliar-tudo] falha:", e.message); process.exit(1); });