Skip to main content

Payroll Employees

Payroll → Employees → Payroll Employees (/employees) — the durable payroll identity. Payroll keeps its own employee record so a pay run can be re-costed even if the HRMS profile changes.

Payroll Employees pagePayroll Employees page
Payroll Employees — directory with pay group and status

How employees get here​

  • Sync from HRMS — the Sync HRMS button pulls active employees from the Employee module (SyncHrmsButton). Payroll stores employeeCode, firstName/lastName, departmentName, designation, locationName, payGroupId and employmentStatus.
  • Manual create/edit — New Payroll Employee (/employees/new) and Edit (/employees/:id/edit) require payroll:manage. The form captures personal, job and pay-group assignment.

The directory​

  • Search by name or employeeCode; filters: Location, Department, Designation, Pay Group and Employment Status (ACTIVE by default). Filters are a popover with badge count; active filters show Clear chips.
  • The table shows avatar (initials), code, department, designation and Current CTC (from latest revision — bulk-fetched per page via useBulkLatestSalaryRevisions with withStatutory=false for speed).
  • Row click → detail view with tabs:
TabWhat it shows
OverviewPersonal + job snapshot
Pay GroupsPayGroupsTab — current group and history
AttendanceAttendanceTab — payroll attendance that will feed the next run

Clicking a directory row that came from HRMS but hasn't been pulled yet triggers an on-demand ensureMyPayrollEmployee path — the first payroll write bootstraps the payroll employee.

Bulk operations​

  • Uses the shared SyncHrmsButton progress + CountStats pattern: sync shows pending/processed/failed per employee.
  • Bulk pay-group assignment via BulkPayGroupAssignOverlay (selected IDs → target payGroupId).

:::note HRMS vs Payroll employee HRMS owns the system of record (profile, leaves, attendance). Payroll owns the payable identity (pay group, statutory overrides, salary revisions). A sync keeps them aligned; an attendance correction in HRMS is re-synced before the run's compute. :::