Personnel Actions
8 min readThis guide covers the personnel action system in TalinoHR, including the 15 action types, approval workflow, auto-apply logic, clearance process, and integration with payroll and performance.
Overview
Personnel actions formalize and track all employment changes in your organization. Navigate to HRIS → Personnel Actions (/personnel-actions) to manage them.
Every personnel action records:
- The employee affected
- The type of action
- Effective date
- Required fields based on action type
- Justification/reason
- Supporting documents
- Approval history
The 15 Action Types
TalinoHR supports 15 personnel action types, grouped by category:
Career Progression
| Action Type | Description | Required Fields |
|---|---|---|
| PROMOTION | Move to a higher position | New Position (required), New Salary, New Department, New Reporting To (optional) |
| DEMOTION | Move to a lower position | New Position (required), New Salary, New Department (optional) |
| MERIT_INCREASE | Salary increase based on performance | New Salary (required) |
| SALARY_ADJUSTMENT | Salary change (increase or decrease) | New Salary (required) |
| REGULARIZATION | Convert from probationary to regular | None (auto-updates status) |
Transfers
| Action Type | Description | Required Fields |
|---|---|---|
| DEPARTMENT_TRANSFER | Move to a different department | New Department (required), New Position, New Reporting To (optional) |
| LATERAL_TRANSFER | Move to equivalent position in another department | New Department (required), New Position (required), New Reporting To (optional) |
Disciplinary
| Action Type | Description | Required Fields |
|---|---|---|
| WRITTEN_WARNING | Formal written warning | NTE Issued Date, Hearing Date (optional) |
| PREVENTIVE_SUSPENSION | Temporary suspension pending investigation | NTE Issued Date, Hearing Date (optional); max 30 days per Labor Code |
| DISCIPLINARY_SUSPENSION | Suspension as penalty | NTE Issued Date, Hearing Date (optional) |
Separation
| Action Type | Description | Required Fields |
|---|---|---|
| RESIGNATION | Voluntary separation | Last Working Day (required) |
| TERMINATION_JUST_CAUSE | Dismissal for employee fault (Art. 297) | NTE Issued Date (required), Last Working Day (required), Hearing Date (optional) |
| TERMINATION_AUTHORIZED_CAUSE | Dismissal for business reasons (Art. 298-299) | Last Working Day (required); requires 30-day advance notice |
| RETIREMENT | End of employment due to retirement | Last Working Day (required) |
Other
| Action Type | Description | Required Fields |
|---|---|---|
| STATUS_CHANGE | Change employment status | New Employment Status (required) |
Field Rules
Each action type has specific field visibility rules defined in lib/personnel-actions/field-rules.ts. Fields can be:
- Required - Must be provided before submission
- Optional - Can be provided but not mandatory
- Hidden - Not applicable and not shown in the form
This ensures that users only see and fill in fields relevant to the action type. For example, MERIT_INCREASE only shows the New Salary field, while DEPARTMENT_TRANSFER shows New Department (required) and optionally New Position and New Reporting To.
Action Statuses
Personnel actions follow a 6-status lifecycle:
DRAFT -> PENDING -> [Approval Steps] -> APPROVED -> EFFECTIVE
-> REJECTED
-> CANCELLED
| Status | Description |
|---|---|
| DRAFT | Created but not yet submitted for approval |
| PENDING | Submitted and waiting for approval |
| APPROVED | All approval steps completed successfully |
| REJECTED | Rejected at any approval step |
| CANCELLED | Withdrawn by the creator |
| EFFECTIVE | Applied to the employee record on the effective date |
Multi-Level Approval
Approval Chain Configuration
Approval chains are configured per action type in ComplianceSetting with keys formatted as approval-chain:<ACTION_TYPE> (e.g., approval-chain:PROMOTION).
Each chain defines a sequence of approval steps, where each step specifies:
- The role required to approve (e.g., HR_ADMIN, PAYROLL_ADMIN)
- The step order
Approval Process
- When a personnel action moves from DRAFT to PENDING,
ApprovalSteprecords are created based on the configured chain - Each step must be approved in order
- The current pending step is highlighted for the responsible approver
- Approvers can approve or reject at their step
- If any step is rejected, the entire action is rejected with the reason recorded
SUPER_ADMIN Override
SUPER_ADMIN users can approve at any step regardless of the chain configuration. This provides an administrative override for urgent situations.
API Routes
- Submit for approval: Change status from DRAFT to PENDING
- Approve step:
POST /api/personnel-actions/[id]/approve-step - Reject step:
POST /api/personnel-actions/[id]/reject-step
Auto-Apply on Effective Date
When a personnel action reaches APPROVED status and the effective date arrives, the system automatically applies the changes to the employee record.
What Gets Updated
The lib/personnel-actions/apply.ts module handles auto-apply in a database transaction:
| Action Type | Employee Fields Updated |
|---|---|
| PROMOTION | positionId, departmentId, reportingToId, basicSalary |
| DEMOTION | positionId, departmentId, reportingToId, basicSalary |
| MERIT_INCREASE | basicSalary |
| SALARY_ADJUSTMENT | basicSalary |
| REGULARIZATION | employmentStatus -> REGULAR, regularizationDate |
| DEPARTMENT_TRANSFER | departmentId, positionId, reportingToId |
| LATERAL_TRANSFER | departmentId, positionId, reportingToId |
| RESIGNATION | employmentStatus -> RESIGNED, separationDate, isActive -> false |
| TERMINATION_JUST_CAUSE | employmentStatus -> TERMINATED, separationDate, isActive -> false |
| TERMINATION_AUTHORIZED_CAUSE | employmentStatus -> TERMINATED, separationDate, isActive -> false |
| RETIREMENT | employmentStatus -> RETIRED, separationDate, isActive -> false |
| STATUS_CHANGE | employmentStatus |
Payroll Integration
Payroll Adjustments
Salary-changing actions automatically create PayrollAdjustment records when applied:
- MERIT_INCREASE - Creates an adjustment for the salary differential
- PROMOTION - Creates an adjustment if salary changed
- SALARY_ADJUSTMENT - Creates an adjustment for the difference
- DEMOTION - Creates an adjustment if salary changed
These adjustments are consumed during payroll computation (Step 8.5 of the engine) and added to the otherEarnings component.
Retro Pay
If a salary-changing action has an effective date in the past (retroactive), the system computes a retro differential using lib/payroll/retro.ts:
- Count work days between the effective date and the current date
- Compute the daily rate difference (new salary - old salary)
- Create a payroll adjustment for the retro amount
Philippine Labor Compliance
The lib/personnel-actions/compliance.ts module enforces PH labor law requirements:
Twin Notice Rule (Termination for Just Cause)
For TERMINATION_JUST_CAUSE actions, the twin notice procedure requires:
- First Notice (NTE) - Written notice to the employee specifying the grounds
- Hearing/Conference - Opportunity for the employee to explain
- Second Notice (Decision) - Written notice of the decision
The NTE issued date field tracks the first notice. A minimum of 5 days must pass between the NTE and the termination.
Preventive Suspension Limit
PREVENTIVE_SUSPENSION actions are limited to 30 days maximum per the Labor Code. The system validates this limit.
Authorized Cause Notice Period
TERMINATION_AUTHORIZED_CAUSE requires 30 days advance notice to the employee and DOLE. The last working day must be at least 30 days from the action creation date.
Regularization Deadline
REGULARIZATION actions are tracked against the 180-day probationary period (Art. 296). The probation tracker alerts HR 30 days before the deadline.
Clearance Process
When a separation action (RESIGNATION, TERMINATION, RETIREMENT) is approved, clearance items are automatically created.
Clearance Categories
Five clearance categories are generated:
- IT/Equipment - Return of company devices, access card, keys
- Finance - Settlement of cash advances, petty cash
- HR - Return of company ID, handbook, uniform
- Department - Turnover of files, projects, responsibilities
- Admin - General administrative clearance
Clearance Workflow
Each clearance item must be signed off by the responsible department. The clearance status is tracked on the employee's personnel action record.
Final pay should only be released after all clearance items are completed.
Document Attachments
Personnel actions support file attachments via Cloudflare R2 storage:
- Resignation letters
- NTE documents
- Medical certificates
- Supporting evidence
- Administrative hearing minutes
Upload attachments through the personnel action detail page.
Email Notifications
The system sends email notifications at key points:
- Action Created - Notifies the next approver
- Step Approved - Notifies the next approver or the action creator if fully approved
- Step Rejected - Notifies the action creator
- Action Effective - Notifies the employee
Emails are sent via Mailjet and are best-effort (failures do not block the action).
Performance Integration
Disciplinary Actions
When a DISCIPLINARY_SUSPENSION action is applied, the system automatically creates a 90-day Performance Improvement Plan (PIP) for the employee. This ensures follow-up tracking after the disciplinary period.
Regularization
When a REGULARIZATION action is applied, it automatically links to the employee's latest completed performance review via the linkedReviewId field. This creates a documented connection between the performance evaluation and the regularization decision.
Reports
Navigate to Reports → Personnel Reports (/reports/personnel) for:
Turnover Report
- Monthly breakdown of separations
- Department-level grouping
- Turnover rate calculation (separations / average headcount)
- Year-over-year comparison
- Export as CSV
Promotion Report
- List of promotions within a year
- Before and after position and salary
- Department breakdown
- Export as CSV
Action Templates
Frequently used action configurations can be saved as templates in ComplianceSetting with the key action-templates. Templates pre-fill common fields to speed up personnel action creation.
Dashboard Widgets
The personnel actions dashboard displays three KPI cards:
- Actions This Month - Total personnel actions created in the current month
- Pending Approvals - Number of actions waiting for approval
- Regularizations Due - Probationary employees approaching the 180-day deadline