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>