feat: ATS breakdown in Telegram summary after each apply run

This commit is contained in:
2026-03-06 00:27:43 +00:00
parent de36e5637c
commit b496ee4a3a
2 changed files with 24 additions and 9 deletions

View File

@@ -46,15 +46,28 @@ export function formatSearchSummary(added, skipped, platforms) {
export function formatApplySummary(results) {
const { submitted, failed, needs_answer, total,
skipped_recruiter, skipped_external, skipped_no_easy_apply } = results;
skipped_recruiter, skipped_external, skipped_no_easy_apply, atsCounts } = results;
const lines = [
`✅ *Apply Run Complete*`,
`Applied: ${submitted} | Failed: ${failed} | Needs answer: ${needs_answer}`,
`Skipped: ${skipped_recruiter} recruiter-only | ${skipped_external} external ATS | ${skipped_no_easy_apply} no Easy Apply`,
`Total processed: ${total}`,
`✅ *Apply Run Complete*${total} jobs processed`,
``,
`📬 Applied: ${submitted}`,
`⏭️ Skipped (no Easy Apply): ${skipped_no_easy_apply}`,
`🚫 Recruiter-only: ${skipped_recruiter}`,
`❌ Failed: ${failed}`,
`💬 Needs your answer: ${needs_answer}`,
];
if (needs_answer > 0) lines.push(`\n💬 Check messages — I sent questions that need your answers`);
if (skipped_external > 0) lines.push(`\n🔜 ${skipped_external} external ATS jobs saved for when Greenhouse/Lever support lands`);
if (skipped_external > 0 && atsCounts) {
const sorted = Object.entries(atsCounts).sort((a, b) => b[1] - a[1]);
lines.push(``, `🌐 *External ATS — ${skipped_external} jobs* (saved for later):`);
for (const [platform, count] of sorted) {
lines.push(`${platform}: ${count}`);
}
}
if (needs_answer > 0) lines.push(``, `💬 Check Telegram — questions waiting for your answers`);
return lines.join('\n');
}