v16.0.0

frappe/hrmsv16.0.0Jan 12, 2026by asmitahase

AI Summary

This major version release introduces a full Progressive Web App (PWA) for mobile access, Persian language support, and various HR/payroll enhancements like overtime, earned leave schedules, and multi-currency support.

Key Highlights

  • Full Progressive Web App (PWA) implementation
  • Persian language support
  • Overtime processing feature
  • Earned Leave Schedule
  • Multi-Currency support for Employee Advance and Expense Claim

New Features

  • PWA (Mobile App) for Leaves, Claims, and Salary Slips
  • Persian language support
  • Overtime feature
  • Leave Adjustment feature
  • Multi-Currency support
  • Earned Leave Schedule

Full Release Notes

<details>
<summary>πŸš€ New Features</summary>

- feat: Mobile App Starter (PWA) β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#595](https://github.com/frappe/hrms/pull/595))
- feat(PWA): Leaves, Expense Claims, & Employee Advances β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#807](https://github.com/frappe/hrms/pull/807))
- feat(PWA): view & download Salary Slips β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#822](https://github.com/frappe/hrms/pull/822))
- feat(PWA): add Install prompts β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#823](https://github.com/frappe/hrms/pull/823))
- feat(PWA): Notifications β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#836](https://github.com/frappe/hrms/pull/836))
- feat(PWA): Profile Page  β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#973](https://github.com/frappe/hrms/pull/973))
- feat(PWA): Bottom Tabs for navigation + consistent icons β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#984](https://github.com/frappe/hrms/pull/984))
- feat(PWA): misc improvements & fixes β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#1032](https://github.com/frappe/hrms/pull/1032))
- feat(PWA): File previews & better file/attachment handling β€” [@ruchamahabal](https://github.com/ruchamahabal) ([#1037](https://github.com/frappe/hrms/pull/1037))
- feat: add persian language β€” [@barredterra](https://github.com/barredterra) ([#1479](https://github.com/frappe/hrms/pull/1479))
- feat: Linked interview doctype with interview summary in job applicant doctype β€” [@speedhs](https://github.com/speedhs) ([#2014](https://github.com/frappe/hrms/pull/2014))
- feat: allow fractional values for "Current Work Experience" field in gratuity doctype (backport #2340) β€” [@mergify](https://github.com/mergify) ([#2341](https://github.com/frappe/hrms/pull/2341))
- feat: process leave encashment via payment entry β€” [@AyshaHakeem](https://github.com/AyshaHakeem) ([#2775](https://github.com/frappe/hrms/pull/2775))
- feat: Show invalid logs β€” [@asmitahase](https://github.com/asmitahase) ([#2782](https://github.com/frappe/hrms/pull/2782))
- feat: overtime β€” [@AyshaHakeem](https://github.com/AyshaHakeem) ([#2886](https://github.com/frappe/hrms/pull/2886))
- feat(Payroll):payroll correction for lwp reversal β€” [@shinil-cloud](https://github.com/shinil-cloud) ([#2942](https://github.com/frappe/hrms/pull/2942))
- feat!: redesign employee benefit β€” [@AyshaHakeem](https://github.com/AyshaHakeem) ([#3047](https://github.com/frappe/hrms/pull/3047))
- feat(minor): allow setting shift through bulk attendance option β€” [@asmitahase](https://github.com/asmitahase) ([#3265](https://github.com/frappe/hrms/pull/3265))
- feat(PWA): enable PDF download option via showDownloadPDFButton prop β€” [@KerollesFathy](https://github.com/KerollesFathy) ([#3321](https://github.com/frappe/hrms/pull/3321))
- feat!: Leave Adjustment β€” [@asmitahase](https://github.com/asmitahase) ([#3336](https://github.com/frappe/hrms/pull/3336))
- feat: filter unmarked attendance by shift in employee attendanceΒ toolΒ #3362 β€” [@anwarpatelnoori](https://github.com/anwarpatelnoori) ([#3363](https://github.com/frappe/hrms/pull/3363))
- feat(Earned Leave): Earned Leave Schedule β€” [@asmitahase](https://github.com/asmitahase) ([#3509](https://github.com/frappe/hrms/pull/3509))
- feat: handle salary structure arrears β€” [@AyshaHakeem](https://github.com/AyshaHakeem) ([#3560](https://github.com/frappe/hrms/pull/3560))
- feat: Multi-Currency support in Employee Advance, Expense Claim β€” [@iamkhanraheel](https://github.com/iamkhanraheel) ([#3609](https://github.com/frappe/hrms/pull/3609))
- feat: create attendance request from attendance β€” [@Vishnu7025](https://github.com/Vishnu7025) ([#3643](https://github.com/frappe/hrms/pull/3643))
- feat: export workspace sidebars β€” [@sokumon](https://github.com/sokumon) ([#3710](https://github.com/frappe/hrms/pull/3710))
- feat: export new desktop icons for the desktop β€” [@sokumon](https://github.com/sokumon) ([#3736](https://github.com/frappe/hrms/pull/3736))
- feat(attendance): show mark attendance based on permission β€” [@SowmyaArunachalam](https://github.com/SowmyaArunachalam) ([#3779](https://github.com/frappe/hrms/pull/3779))
- feat: Holiday List Assignment β€” [@asmitahase](https://github.com/asmitahase) ([#3928](https://github.com/frappe/hrms/pull/3928))
</details>

<details>
<summary>πŸ“ˆ Performance</summary>

- perf: batch and commit auto attendance processing β€” @ruchamahabal ([#1022](https://github.com/frappe/hrms/pull/1022))
- perf: faster Employee Leave Balance report β€” @ruchamahabal ([#1077](https://github.com/frappe/hrms/pull/1077))
- perf(PWA): infinite scroll for list views + other fixes β€” @ruchamahabal ([#1095](https://github.com/frappe/hrms/pull/1095))
- perf(Roster): improve get_holidays function β€” @krantheman ([#2281](https://github.com/frappe/hrms/pull/2281))
- perf(Auto Attendance): Use background job to process auto attendance β€” @asmitahase ([#3806](https://github.com/frappe/hrms/pull/3806))
</details>

<details>
<summary>πŸ“ Refactor</summary>

- refactor(PWA): upgrade frappe-ui to espresso β€” @ruchamahabal ([#849](https://github.com/frappe/hrms/pull/849))
- refactor: cleanup interviews β€” @krantheman ([#924](https://github.com/frappe/hrms/pull/924))
- refactor(PWA): better login β€” @ruchamahabal ([#968](https://github.com/frappe/hrms/pull/968))
- refactor(Report): Employee working on a holiday β€” @niraj2477 ([#977](https://github.com/frappe/hrms/pull/977))
- refactor(PWA): better routing β€” @ruchamahabal ([#1043](https://github.com/frappe/hrms/pull/1043))
- refactor: allow repost for `Expense Claim` β€” @ruthra-kumar ([#1046](https://github.com/frappe/hrms/pull/1046))
- refactor(PWA): navigation guards + List view & Link field performance fixes β€” @ruchamahabal ([#1051](https://github.com/frappe/hrms/pull/1051))
- refactor: permissions not applied in Income Tax Deductions report β€” @ruchamahabal ([#1069](https://github.com/frappe/hrms/pull/1069))
- refactor(PWA): realtime updates, caching & invalidation β€” @ruchamahabal ([#1191](https://github.com/frappe/hrms/pull/1191))
- refactor(HR Dashboard): show current quarter for Employees Joining and Employees Relieving cards β€” @krantheman ([#1268](https://github.com/frappe/hrms/pull/1268))
- refactor: improve onboarding β€” @krantheman ([#1472](https://github.com/frappe/hrms/pull/1472))
- refactor(Employee Advance): update Pending Amount on validation β€” @krantheman ([#1478](https://github.com/frappe/hrms/pull/1478))
- refactor: update exchange rate of reference document supplied by reconciliation tool β€” @ruthra-kumar ([#1489](https://github.com/frappe/hrms/pull/1489))
- refactor: allow payment entry as a valid reference β€” @ruthra-kumar ([#1492](https://github.com/frappe/hrms/pull/1492))
- refactor: additional parameter in get_matching_queries β€” @ruthra-kumar ([#1510](https://github.com/frappe/hrms/pull/1510))
- refactor: replace `in_list(array, member)` with `array.includes(member)` β€” @barredterra ([#1513](https://github.com/frappe/hrms/pull/1513))
- refactor(UX): show leave application links in leave allocation cancellation message β€” @creative-paramu ([#1520](https://github.com/frappe/hrms/pull/1520))
- refactor!: Switch default sort order to creation β€” @ankush ([#1590](https://github.com/frappe/hrms/pull/1590))
- refactor(PWA): setup frappe-ui git submodule & upgrade frappe-ui β€” @ruchamahabal ([#1855](https://github.com/frappe/hrms/pull/1855))
- refactor: validate total weightage in all appraisal forms β€” @ruchamahabal ([#1976](https://github.com/frappe/hrms/pull/1976))
- refactor: use IntegrationTestCase instead of FrappeTestCase β€” @krantheman ([#2277](https://github.com/frappe/hrms/pull/2277))
- refactor(Salary Structure Assignment): opening balances setup warning + section visibility β€” @ruchamahabal ([#2309](https://github.com/frappe/hrms/pull/2309))
- refactor(Roster): enforce selection of company β€” @krantheman ([#2395](https://github.com/frappe/hrms/pull/2395))
- refactor: Shift Assignment Schedule β€” @krantheman ([#2454](https://github.com/frappe/hrms/pull/2454))
- refactor: Flattened sidebar β€” @asmitahase ([#2642](https://github.com/frappe/hrms/pull/2642))
- refactor: fetch all employees that may have shift type as active shift β€” @asmitahase ([#2683](https://github.com/frappe/hrms/pull/2683))
- refactor: multiple checkin logs β€” @asmitahase ([#2773](https://github.com/frappe/hrms/pull/2773))
- refactor: Use web view for job opening β€” @asmitahase ([#2779](https://github.com/frappe/hrms/pull/2779))
- refactor: invalid logs for better readability β€” @asmitahase ([#2791](https://github.com/frappe/hrms/pull/2791))
- refactor: remove unused "status" field in appraisal β€” @asmitahase ([#2795](https://github.com/frappe/hrms/pull/2795))
- refactor: document share message β€” @asmitahase ([#3112](https://github.com/frappe/hrms/pull/3112))
- refactor: re-introduced checkbox grid for intuitive UI β€” @asmitahase ([#3167](https://github.com/frappe/hrms/pull/3167))
- refactor: use get_single_value to get value from single doctypes β€” @asmitahase ([#3325](https://github.com/frappe/hrms/pull/3325))
- refactor: half day payment calculation handling in payroll processing β€” @iamkhanraheel ([#3330](https://github.com/frappe/hrms/pull/3330))
- refactor: adjust for query builder changes β€” @akhilnarang ([#3741](https://github.com/frappe/hrms/pull/3741))
- refactor(HR Settings): Split HR settings according to workspaces β€” @asmitahase ([#3887](https://github.com/frappe/hrms/pull/3887))
</details>

<details>
<summary>πŸ” Already Backported</summary>

- feat: Job Portal Enhancements β€” @krantheman ([#835](https://github.com/frappe/hrms/pull/835))
- feat: Add title field in Employee Onboarding Template and Employee Separation Template β€” @niraj2477 ([#950](https://github.com/frappe/hrms/pull/950))
- feat(Payroll): Add employee grade filter in payroll entry β€” @niraj2477 ([#960](https://github.com/frappe/hrms/pull/960))
- feat: Goal enhancements β€” @krantheman ([#979](https://github.com/frappe/hrms/pull/979))
- feat: Add sender in Payroll Settings & HR Settings β€” @niraj2477 ([#988](https://github.com/frappe/hrms/pull/988))
- feat: Add Select/Unselect All options in Mark Attendance Dialog β€” @creative-paramu ([#1005](https://github.com/frappe/hrms/pull/1005))
- feat(util): add provision to get holidays except weekly offs from holiday list β€” @ruchamahabal ([#1011](https://github.com/frappe/hrms/pull/1011))
- feat(Interview): Add setting for sender in interview & interview feedback reminder emails β€” @niraj2477 ([#1033](https://github.com/frappe/hrms/pull/1033))
- feat(Attendance Request):  add 'Include Holidays' checkbox β€” @Vishnu7025 ([#1040](https://github.com/frappe/hrms/pull/1040))
- feat: Progressive Web App - Leaves, Claims, Advances & Salary Slips β€” @ruchamahabal ([#1041](https://github.com/frappe/hrms/pull/1041))
- feat: 'Email Salary Slips' bulk action in salary slip list view β€” @ruchamahabal ([#1063](https://github.com/frappe/hrms/pull/1063))
- feat: Add new doctype for Job offer Term Template β€” @niraj2477 ([#1089](https://github.com/frappe/hrms/pull/1089))
- feat: option to enable/disable multiple Shift Assignments for same dates β€” @krantheman ([#1100](https://github.com/frappe/hrms/pull/1100))
- feat(PWA): Workflow support + other enhancements β€” @ruchamahabal ([#1105](https://github.com/frappe/hrms/pull/1105))
- feat: add Amount Based on Formula to list view & fix UX β€” @krantheman ([#1113](https://github.com/frappe/hrms/pull/1113))
- feat: make Bulk Assign Structure a primary button and add Branch filter β€” @krantheman ([#1197](https://github.com/frappe/hrms/pull/1197))
- feat: Salary Component & Structure enhancements β€” @krantheman ([#1204](https://github.com/frappe/hrms/pull/1204))
- feat(Payroll): improve flow through buttons β€” @krantheman ([#1310](https://github.com/frappe/hrms/pull/1310))
- feat: mobile friendly Job Portal β€” @krantheman ([#1332](https://github.com/frappe/hrms/pull/1332))
- feat(Payroll): Option to use Email Template when send Salary Slip email β€” @kittiu ([#1350](https://github.com/frappe/hrms/pull/1350))
- feat: Bulk Salary Structure Assignment β€” @krantheman ([#1367](https://github.com/frappe/hrms/pull/1367))
- feat(minor): Show leave allocation table in Leave Application on refresh hook β€” @niraj2477 ([#1375](https://github.com/frappe/hrms/pull/1375))
- feat: Leave Ledger Report β€” @ruchamahabal ([#1381](https://github.com/frappe/hrms/pull/1381))
- feat(PWA): Push Notifications β€” @ruchamahabal ([#1384](https://github.com/frappe/hrms/pull/1384))
- feat: pass doctype as context when translating label β€” @barredterra ([#1439](https://github.com/frappe/hrms/pull/1439))
- feat(Gratuity): allow setting work experience manually β€” @ruchamahabal ([#1541](https://github.com/frappe/hrms/pull/1541))
- feat(Job Portal): add Publish Applications Received toggle β€” @krantheman ([#1561](https://github.com/frappe/hrms/pull/1561))
- feat: add setting to enable employee checkin for mobile app β€” @vinyselopal ([#1569](https://github.com/frappe/hrms/pull/1569))
- feat(PWA): allow adding attachments in Leave & Advances β€” @ruchamahabal ([#1591](https://github.com/frappe/hrms/pull/1591))
- feat: show holidays and colour code in attendance calendar β€” @vinyselopal ([#1595](https://github.com/frappe/hrms/pull/1595))
- feat: Shift Assignment Tool β€” @krantheman ([#1596](https://github.com/frappe/hrms/pull/1596))
- feat(Payroll): allow overwriting tax component through additional salary β€” @ruchamahabal ([#1600](https://github.com/frappe/hrms/pull/1600))
- feat(FnF): Option to recover asset costs instead of returning β€” @ruchamahabal ([#1611](https://github.com/frappe/hrms/pull/1611))
- feat(Desk + PWA): Geolocation in Employee Checkin β€” @ruchamahabal ([#1642](https://github.com/frappe/hrms/pull/1642))
- feat: Formula-based Final Score calculation in Appraisals β€” @vinyselopal ([#1670](https://github.com/frappe/hrms/pull/1670))
- feat: base Roster Management β€” @krantheman ([#1760](https://github.com/frappe/hrms/pull/1760))
- feat(minor): allow using `rounded` function in salary slip formulae β€” @ruchamahabal ([#1774](https://github.com/frappe/hrms/pull/1774))
- feat: Translate PWA β€” @cogk ([#1856](https://github.com/frappe/hrms/pull/1856))
- feat: add attachment for each type of proof in income tax proof submission instead of one single attachment β€” @shinil-cloud ([#1893](https://github.com/frappe/hrms/pull/1893))
- feat(PWA): Handle OTP in login form β€” @cogk ([#1923](https://github.com/frappe/hrms/pull/1923))
- feat: Salary Withholding β€” @ruchamahabal ([#1935](https://github.com/frappe/hrms/pull/1935))
- feat(Employee Checkin): geofencing β€” @krantheman ([#1948](https://github.com/frappe/hrms/pull/1948))
- feat(Earned Leave): allocate leaves manually β€” @krantheman ([#1950](https://github.com/frappe/hrms/pull/1950))
- feat(Salary Payments via ECS): add Net Pay column β€” @krantheman ([#1966](https://github.com/frappe/hrms/pull/1966))
- feat(Employee Checkin): add Fetch Shift buttons in form and list view actions β€” @krantheman ([#2071](https://github.com/frappe/hrms/pull/2071))
- feat: add HR app to apps page β€” @ruchamahabal ([#2076](https://github.com/frappe/hrms/pull/2076))
- feat(PWA): Allow login using OAuth β€” @cogk ([#2091](https://github.com/frappe/hrms/pull/2091))
- feat(PWA): Attendance Dashboard β€” @krantheman ([#2170](https://github.com/frappe/hrms/pull/2170))
- feat(Monthly Attendance Sheet): add Include Company Descendants filter β€” @krantheman ([#2177](https://github.com/frappe/hrms/pull/2177))
- feat: show In and Out Time in Attendance even if there is only one log β€” @krantheman ([#2238](https://github.com/frappe/hrms/pull/2238))
- feat: allow get_first_day and get_last_day in salary slip eval β€” @krantheman ([#2243](https://github.com/frappe/hrms/pull/2243))
- feat(Expense Claim): allow update of cost centre and project on submit β€” @krantheman ([#2267](https://github.com/frappe/hrms/pull/2267))
- feat(Shift Location): add Shift Assignment connection β€” @krantheman ([#2274](https://github.com/frappe/hrms/pull/2274))
- feat: allow creating attendance requests for future dates β€” @iamejaaz ([#2292](https://github.com/frappe/hrms/pull/2292))
- feat: allow fractional values for "Current Work Experience" field in gratuity doctype β€” @asmitahase ([#2340](https://github.com/frappe/hrms/pull/2340))
- feat: add Payroll Entry to Bank Account dashboard β€” @barredterra ([#2369](https://github.com/frappe/hrms/pull/2369))
- feat: add Absent Days column to salary register β€” @shinil-cloud ([#2485](https://github.com/frappe/hrms/pull/2485))
- feat: toggle self leave approval for employees from HR settings β€” @asmitahase ([#2486](https://github.com/frappe/hrms/pull/2486))
- feat(Shift Type): Auto update Last Sync of Checkin β€” @ruchamahabal ([#2513](https://github.com/frappe/hrms/pull/2513))
- feat: Allow setting From Date while manually allocating extra leaves β€” @ruchamahabal ([#2520](https://github.com/frappe/hrms/pull/2520))
- feat: add CI for docker container build β€” @NagariaHussain ([#2728](https://github.com/frappe/hrms/pull/2728))
- feat(minor): Show option to expire carried forward leaves β€” @asmitahase ([#2890](https://github.com/frappe/hrms/pull/2890))
- feat(minor): allow setting shift location through employee checkin api β€” @asmitahase ([#2900](https://github.com/frappe/hrms/pull/2900))
- feat: Half day lite in Payroll β€” @asmitahase ([#2978](https://github.com/frappe/hrms/pull/2978))
- feat(minor): show detailed error messages on check-in failure β€” @abela-a ([#3030](https://github.com/frappe/hrms/pull/3030))
- feat: tax relief or rebate configuration β€” @AyshaHakeem ([#3050](https://github.com/frappe/hrms/pull/3050))
- feat: update half day attendance from employee tool β€” @asmitahase ([#3057](https://github.com/frappe/hrms/pull/3057))
- feat: show team attendance requests under team requests β€” @asmitahase ([#3133](https://github.com/frappe/hrms/pull/3133))
- feat(minor): fetch only 10 notifications at a time β€” @asmitahase ([#3197](https://github.com/frappe/hrms/pull/3197))
- feat: Added checkbox to exclude specific salary component amount from Journal Entry β€” @iamkhanraheel ([#3315](https://github.com/frappe/hrms/pull/3315))
- feat(minor): prevent self approval for expense claims β€” @asmitahase ([#3388](https://github.com/frappe/hrms/pull/3388))
- feat: Calculate & Show Income tax breakup section in Salary Slip if it is overwritten from Additional salary β€” @iamkhanraheel ([#3449](https://github.com/frappe/hrms/pull/3449))
- feat (Monthly Attendance Sheet) : date range filter β€” @asmitahase ([#3597](https://github.com/frappe/hrms/pull/3597))
- feat(job-opening-template): auto fetch template values β€” @nareshkannasln ([#3844](https://github.com/frappe/hrms/pull/3844))
</details>