Fix candidatosEncontrados to reflect full eligible pool, not post-slice count
generateCampaignQueue computed candidatosEncontrados after slicing to quantidade, so it could never differ from adicionadosNaFila. An operator generating a queue with quantidade smaller than the eligible pool saw no signal that more eligible leads existed. Now candidatosEncontrados is read before the slice, while adicionadosNaFila still reflects rows actually inserted.
This commit is contained in:
@@ -38,10 +38,10 @@ export function generateCampaignQueue(db, campaignId, { quantidade = 50 } = {})
|
||||
if (!campaign.segmentos.length) throw new Error('campanha sem segmentos configurados');
|
||||
|
||||
const statement = db.prepare(candidateQuery());
|
||||
const candidatos = campaign.segmentos
|
||||
const todosCandidatos = campaign.segmentos
|
||||
.flatMap((segmento) => statement.all(campaign.produto, segmento, campaign.produto, campaign.produto))
|
||||
.sort((a, b) => a.prioridade - b.prioridade || b.score - a.score || a.id - b.id)
|
||||
.slice(0, quantidade);
|
||||
.sort((a, b) => a.prioridade - b.prioridade || b.score - a.score || a.id - b.id);
|
||||
const candidatos = todosCandidatos.slice(0, quantidade);
|
||||
|
||||
const insert = db.prepare(
|
||||
`INSERT INTO outreach_campaign_queue
|
||||
@@ -55,7 +55,7 @@ export function generateCampaignQueue(db, campaignId, { quantidade = 50 } = {})
|
||||
insert.run(campaignId, lead.id, variant.id, lead.segmento, lead.whatsapp, renderedMessage);
|
||||
adicionados += 1;
|
||||
}
|
||||
return { candidatosEncontrados: candidatos.length, adicionadosNaFila: adicionados };
|
||||
return { candidatosEncontrados: todosCandidatos.length, adicionadosNaFila: adicionados };
|
||||
}
|
||||
|
||||
export function listQueue(db, campaignId, status = null) {
|
||||
|
||||
@@ -105,6 +105,19 @@ test('generateCampaignQueue respeita o parametro quantidade', () => {
|
||||
db.close();
|
||||
});
|
||||
|
||||
test('generateCampaignQueue reporta candidatosEncontrados como o pool elegivel completo, mesmo com quantidade menor', () => {
|
||||
const db = openDb(':memory:');
|
||||
for (let i = 0; i < 5; i += 1) {
|
||||
inserirLead(db, { dedup_key: `pool-${i}`, whatsapp: `551199998000${i}` });
|
||||
}
|
||||
const campanha = campanhaComVariantes(db);
|
||||
const resultado = generateCampaignQueue(db, campanha.id, { quantidade: 2 });
|
||||
assert.equal(resultado.candidatosEncontrados, 5);
|
||||
assert.equal(resultado.adicionadosNaFila, 2);
|
||||
assert.equal(listQueue(db, campanha.id).length, 2);
|
||||
db.close();
|
||||
});
|
||||
|
||||
test('approveQueueRows so aprova linhas em preview da campanha certa', () => {
|
||||
const db = openDb(':memory:');
|
||||
inserirLead(db, { whatsapp: '5511999990001' });
|
||||
|
||||
Reference in New Issue
Block a user