Manage employee records
The Employees page at /employees is the master record for everyone the company
pays. Payroll reads from it, the government forms are generated from it, and
every leave or timesheet row points back at it, so a mistake here surfaces
everywhere else.
Opening the page needs hr.employees.view. Creating, editing, and changing
status are three separate permissions, listed with each task below.
The toolbar, search, View and Table menus, column filters and pagination work the same way here as on every list page — see the shared toolbar. This page covers only what is specific to employees.
What the table shows
Five tabs across the top, each with a live count: All, Regular, Probationary, Inactive and Archived. The first four split by employment status; Archived holds records that were archived rather than deleted, and they appear in no other tab.
Eight columns are shown by default:
| Column | Notes |
|---|---|
| Employee No. | Pinned to the left, so it stays visible while you scroll sideways. |
| Last Name | |
| First Name | |
| Position | |
| Department | |
| Status | Rendered as a coloured badge. |
| Date Hired | |
| Basic Salary |
Seventeen more are available under Columns in the View menu and are off until you switch them on: Middle Name, Nationality, Birthday, Address, Phone, SSS Number, PhilHealth Number, TIN, Pag-IBIG Number, Rice Subsidy, Phone Allowance, Clothing Allowance, Semi-Monthly Rate, Hourly Rate, Rest Day, Separation Date and Separation Reason.
The Rest Day column shows a day name, but filters on the stored day number (1 for Monday through 7 for Sunday). An employee with no rest day of their own displays as "Company default" and follows the rest day configured in payroll settings.
Add an employee
Requires hr.employees.create. Without it the Add Employee button is not
shown.
The position you are assigning must already exist, and positions belong to departments — see Departments and positions if you need to create one first.
- Select Add Employee on the toolbar. A drawer opens with four sections.
- Fill in Personal Information. First name, last name, birthday, phone number and address are required; middle name and nationality are optional but are used in BIR reporting, so fill them in if you have them.
- Fill in Employment. Date hired and status are required. Status is Probationary, Regular or Inactive, and defaults to Probationary. Leave Separation Date and Reason of Separation empty for a current employee — the separation reason offers the BIR alphalist codes T (terminated or resigned), TR (transferred), R (retirement) and D (death).
- Choose a Position. The dropdown groups positions under their department.
- Fill in Government IDs. SSS number, PhilHealth number, TIN and Pag-IBIG number are all required, and all four must be unique across the company. A number already on another employee's record is rejected with a message naming the conflict rather than being saved.
- Fill in Compensation. Basic salary, gross semi-monthly rate, hourly rate, rice subsidy, phone allowance and clothing allowance are all required and may be zero.
- Select Create Employee.
A note on the salary fields
Basic salary and gross semi-monthly rate are stored per half-month regardless of how often the company actually pays. The payroll engine doubles them to get the monthly figure it uses for SSS, PhilHealth, Pag-IBIG and BIR bracket lookups. Entering a monthly figure in these boxes will put every employee in the wrong contribution bracket.
Actual pay is computed from hours worked, not from a fixed salary — the rates here are inputs to that computation. The full rules are in Business rules.
Edit an employee
Requires hr.employees.edit.
Choose Edit from the row's kebab menu. The drawer is the same one used for creating, pre-filled with the whole record — including the fields your grid columns are hiding, since the drawer fetches the full record rather than reading the row. Select Save Changes.
To read a record without editing it, choose View, or double-click the row. The detail drawer shows the complete record grouped the same way as the form.
Change employment status
Requires hr.employees.delete.
- Choose Deactivate from the row's kebab menu — or Reactivate if the employee is already inactive.
- Confirm in the dialog.
The row moves to the tab matching its new status and all tab counts update.
To change several at once, select the rows, then use Set Status in the bulk bar and pick REGULAR, PROBATIONARY or INACTIVE. Each employee is updated individually; if some fail, the ones that succeeded stay changed and the message tells you the rest did not.
Archive and restore
Requires hr.employees.delete.
Archiving takes an employee out of the working tabs without deleting the record or its history. Choose Archive from the row menu, or select several rows and use Archive Selected. Archived employees appear only under the Archived tab, where their row menu offers Restore instead.
Import employees from a CSV
Requires hr.employees.create. Choose Import CSV from the Table menu to
open the Bulk Import Employees dialog.
The dialog opens with a prerequisite warning, because the CSV refers to positions and departments by name and those names have to already exist. Shortcut buttons to the Positions and Departments pages are provided.
- Select Download Template CSV. The file contains the expected header row and two example rows.
- Fill it in. Position and department names must match existing records; the
comparison ignores case but nothing else. Status must be one of
PROBATIONARY,REGULARorINACTIVE. - Select Choose CSV File and pick your file. A preview appears showing the row count and the first five rows.
- Select Import N Employees. A progress bar tracks the import.
- Read the result. Successes and failures are counted separately, and every failed row is listed with its row number, the employee's name and the reason it failed. A position-name mismatch is called out specifically, with a link to the Positions page.
Rows are created one at a time, so a failure part-way through does not undo the rows already imported. Fix the failed rows in your file and import just those.
Export employees
Four exports are available from the Table menu, and they answer different questions.
| Action | What you get |
|---|---|
| Export CSV | Every column of the employee record — including the ones your grid is hiding — for the rows matching the active tab and your column filters. Money is unformatted and dates are ISO, so the file sorts and re-imports cleanly. |
| Export PDF | The same rows, but only the columns currently on screen, laid out as a printable landscape table. |
| Export Full Details | Opens a dialog offering Current Page (whatever the grid is holding) or All Employees (everything matching your filters, refetched in full). |
| Export BIR Alphalist | Opens the alphalist preview. |
Export PDF is deliberately narrower than Export CSV: all twenty-five columns on one page reduce every heading to a vertical stack of letters. Switch on the columns you want before exporting to PDF.
The BIR alphalist
Export BIR Alphalist opens a full-screen preview of the alphalist for a chosen year — pick the year from the selector at the top. Only employees with payroll data for that year appear; if none do, the preview says so.
Two downloads sit in the footer:
- Download .DAT produces the file for BIR electronic submission. Validate it with the BIR Alphalist Data Entry and Validation Module before submitting it.
- Download PDF produces the human-readable version.
Activity history
Activity History in the row menu opens a drawer listing the recorded activity against that employee record. Use it when you need to know what changed and when.
Card view
The card toggle at the top right replaces the table with a card per employee, scoped to the active tab. Selecting a card opens the detail drawer. Card view loads a summary of each record rather than every column, and does not support bulk selection.