v16.16.0

frappe/hrmsv16.16.0Aug 7, 2026by frappe-pr-bot

AI Summary

This release adds new features for job application management, including duplicate applicant prevention, and enhances the 'Unpaid Expense Claim' report with better filtering and grouping options. It also includes various bug fixes for payroll and attendance.

Key Highlights

  • Prevents duplicate job applicants using the same email for the same position.
  • Enhanced 'Unpaid Expense Claim' report with Company/Department filters and subtotals.
  • Fixes statistical Salary Component formulas reading actual CTC instead of blank values.
  • Enforces mandatory Leave Approver selection for Leave Applications.

New Features

  • Prevent Duplicate Applicant option in Job Opening
  • Enhanced Unpaid Expense Claim report with filters and grouping

Full Release Notes

## Features
* Shows the job opening’s _Job Title_ instead of its ID on the job application web form.  
Adds a _Prevent Duplicate Applicant_ option to **Job Opening** that blocks repeat applications from the same email address for the same position. (https://github.com/frappe/hrms/pull/5030)
* Adds Company, Department, and Branch filters to the "Unpaid Expense Claim" report, with the _Department_ and _Employee_ filters limited to the selected _Company_.  
Adds _Posting Date_, _Company_, _Department_, and _Branch_ columns, plus grouping by Employee, Department, or Branch with subtotals and a grand total. (https://github.com/frappe/hrms/pull/5054)

## Bug Fixes
* Updates how HRMS retrieves data and removes unused code. (https://github.com/frappe/hrms/pull/4990)
* Fixes the **Mark Attendance** dialog so its _Start_ and _End_ dates use a valid date format and can load unmarked attendance days without an invalid date error. (https://github.com/frappe/hrms/pull/5052)
* Fixes statistical **Salary Component** formulas that use `ctc` so they read the employee’s actual CTC instead of a blank value from the **Salary Slip**, allowing dependent component amounts to use the correct value. (https://github.com/frappe/hrms/pull/5055)
* The "Monthly Attendance Sheet" report now distinguishes full dates when checking attendance, so holidays are counted correctly when date ranges span multiple months. (https://github.com/frappe/hrms/pull/5060)
* Requires users to select a _Leave Approver_ before saving a **Leave Application** when _Leave Approver Mandatory In Leave Application_ is enabled, and keeps _Leave Approver Name_ synchronized with that selection. Fills missing _Leave Approver Name_ values in existing **Leave Application** records. (https://github.com/frappe/hrms/pull/5066)
* Shows only submitted **Payroll Entry** records when selecting payroll entries for a **Journal Entry**, excluding draft and cancelled records. (https://github.com/frappe/hrms/pull/5045)

**Authors**: @akhtarmohsin, @pratheep-bit, @nareshkannasln, @asmitahase, @deepeshgarg007, @iamkhanraheel
**Reviewers**: @deepeshgarg007, @asmitahase, @iamkhanraheel

<details>
<summary>AI content</summary>

 For these release notes, we used an LLM (OpenAI gpt-5.6-luna) to review and summarise the code changes, along with the associated issue and PR descriptions. It may contain typical errors and inaccuracies. You can read the prompt [here](https://github.com/barredterra/pretty_release_notes). 

Changes with the following labels were excluded:
- skip-release-notes

Changes with the following types were excluded:
- ci
 - build
 - refactor
 - chore
 - docs
 - test
 - style

</details>