Skip to content

feat(recruitment): enhance recruitment dashboard with advanced analytics charts - #5084

Open
iamkhanraheel wants to merge 7 commits into
frappe:developfrom
iamkhanraheel:feat/recruitment_analytics
Open

feat(recruitment): enhance recruitment dashboard with advanced analytics charts#5084
iamkhanraheel wants to merge 7 commits into
frappe:developfrom
iamkhanraheel:feat/recruitment_analytics

Conversation

@iamkhanraheel

Copy link
Copy Markdown
Collaborator

Summary

Adds four custom analytics charts to the Recruitment dashboard, replacing charts that were less actionable (Job Applicant Source, Job Offer Status, Interview Status).

New charts:

  • Recruitment Funnel - 6-stage bar chart (Applied → Shortlisted → Interviewed → Offered → Accepted → Rejected); Applied/Shortlisted from Job Applicant, Interviewed from Interview, Offered/Accepted/Rejected from Job Offer status
  • Source to Hire Conversion - compares total applicants vs hired per source; hired = Job Offer accepted
image
  • Open Position Age - shows top 10 oldest open positions by days since posting
  • Interviewer Load - pending vs total interviews per interviewer (top 10 by load)
image

All charts support company-level filtering and use Custom chart type for cross-doctype aggregation.

Also updates Job Applicant Pipeline to Pie chart with a cap of 8 groups.

@greptile-apps

greptile-apps Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 4/5

The PR is not safe to merge until progressed applicants remain represented in the Shortlisted funnel stage.

The funnel still derives Shortlisted exclusively from the applicant’s current status, while later workflow transitions overwrite that status and leave the chart undercounting progressed candidates.

Files Needing Attention: hrms/hr/dashboard_chart_source/recruitment_funnel/recruitment_funnel.py

Reviews (2): Last reviewed commit: "fix: company filter scoping and rewrite ..." | Re-trigger Greptile


applicant_names = [a.name for a in all_applicants]
total = len(all_applicants)
shortlisted = sum(1 for a in all_applicants if a.status == "Shortlisted")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Shortlisted stage loses progressed applicants

When a shortlisted applicant advances, the Interview or Job Offer workflow overwrites their status with Accepted or Rejected, so this current-status check drops them while later stages still count their records, causing the funnel to underreport Shortlisted and potentially show it below later stages.

Knowledge Base Used: Recruitment Pipeline: Requisition to Job Offer

Fix in Claude Code Fix in Codex

Comment thread hrms/hr/dashboard_chart_source/recruitment_funnel/recruitment_funnel.py Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant