Payroll Setup
10 min readThis guide covers the configuration steps needed before running payroll in TalinoHR, including pay frequencies, work schedules, contribution tables, the payroll calendar, and payslip password schemes.
Pay Frequency
Navigate to Settings → Company (/settings/company) to configure your company's pay frequency. TalinoHR supports four pay frequencies:
| Frequency | Periods Per Year | Description |
|---|---|---|
| SEMI_MONTHLY | 24 | Most common in the Philippines. Two pay periods per month. |
| MONTHLY | 12 | Single pay period per month. |
| WEEKLY | ~52 | Weekly pay periods. |
| DAILY | ~260 | Daily pay computation. |
Semi-Monthly Cutoff Settings
For semi-monthly payroll, configure two cutoff dates:
- First Cutoff (default: 15) - The first pay period covers day 1 through this date
- Second Cutoff (default: 30) - The second pay period covers the day after first cutoff through this date (or last day of month)
Example: With cutoffs of 15 and 30, January payroll has two periods:
- 1st half: January 1-15
- 2nd half: January 16-31
Work Schedules
Navigate to Time & Leave → Schedules (/attendance/schedules) to manage work schedules. Schedules directly affect payroll calculations.
How Schedules Affect Payroll
The payroll engine uses each employee's assigned work schedule to derive:
- Work Days Per Month - Number of working days based on which days have scheduled hours
- Work Hours Per Day - Derived from scheduled time-in/time-out minus break minutes
These parameters feed into rate calculations:
- Daily Rate (for MONTHLY employees): monthlySalary / workDaysPerMonth
- Hourly Rate: dailyRate / workHoursPerDay
If an employee has no assigned schedule, the system falls back to company defaults (workHoursPerDay and workDaysPerWeek from company settings).
Grace Period Per Schedule
Each work schedule can have its own gracePeriodMinutes setting that overrides the company-wide default. This is useful when different shifts have different tardiness tolerance (e.g., factory shift vs. office shift).
Government Contribution Tables
TalinoHR stores contribution tables in the database for SSS, PhilHealth, and Pag-IBIG. These tables are seeded during initial setup and can be updated when government rates change.
SSS Contribution Table
The 2025 SSS table has 61 brackets with Monthly Salary Credit (MSC) ranging from P5,000 to P35,000. The system looks up the bracket based on the employee's derived monthly salary and applies:
- Employee Share - Ranges from P250 (minimum) to P1,000 (at P20,000 MSC and above)
- Employer Share - Ranges from P500 to P2,000
- EC Contribution - P10 (MSC below P15,000) or P30 (P15,000 and above)
- MPF Employee - P0 for MSC up to P20,000; increases by P25 per P500 MSC above P20,000, up to P750
- MPF Employer - P0 for MSC up to P20,000; increases by P50 per P500 MSC above P20,000, up to P1,500
- WISP - Workers' Investment and Savings Program, comprises the MPF employee and employer shares
For semi-monthly payroll, the total monthly contribution is split evenly between the two pay periods.
PhilHealth Contribution Table
PhilHealth uses a percentage-based computation:
- Rate: 5% of monthly basic salary (2025 rate)
- Sharing: Split 50/50 between employee and employer
- Floor: P10,000 monthly salary (minimum contribution)
- Ceiling: P100,000 monthly salary (maximum contribution)
Pag-IBIG Contribution Table
Pag-IBIG (HDMF) contributions:
- Monthly salary up to P1,500: Employee 1%, Employer 2%
- Monthly salary over P1,500: Employee 2%, Employer 2%
- Ceiling: P10,000 monthly salary (maximum base for contribution)
- Maximum employee share: P200/month
- Maximum employer share: P200/month
Updating Contribution Tables
When government agencies update contribution rates, you need to update the GovernmentContributionTable records in the database. The SSS table is stored row-by-row with columns for rangeFrom, rangeTo, employeeShare, employerShare, ecContribution, mpfEmployee, and mpfEmployer.
Payroll Calendar
Navigate to Payroll → Calendar (/payroll/calendar) to view and manage the payroll schedule.
How the Calendar Works
The payroll calendar is generated based on your company's pay frequency and cutoff settings. For a semi-monthly company, it generates 24 periods per year with:
- Period Start and Period End dates
- Pay Date - Computed as period end + pay date offset days
- Label - e.g., "Jan 2026 - 1st Half"
Calendar Configuration
The calendar configuration is stored in the ComplianceSetting table with the key payroll-calendar. Settings include:
- reminderDaysBeforeCutoff - Days before cutoff to send reminders (default: [3, 1])
- reminderDaysBeforePayDate - Days before pay date to send reminders (default: [2])
- payDateOffsetDays - Number of days after period end for pay date (default: 3)
The calendar is informational and does not auto-execute payroll. It provides a visual overview of which periods have existing payroll runs and their statuses.
Existing Run Tracking
The calendar cross-references with existing payroll runs, showing:
- Which periods already have a payroll run created
- The status of each run (DRAFT, PROCESSING, COMPUTED, REVIEWED, APPROVED, DISBURSED, CLOSED)
Payslip Password Scheme
Navigate to payslip delivery settings to configure how payslip PDFs are protected.
Password Scheme Options
The password scheme is stored in ComplianceSetting with the key payslip-password-scheme. The default scheme is LASTNAME_BIRTHDATE, which generates a password from the employee's last name combined with their birth date.
Payslip PIN (ESS)
Employees must set a personal payslip PIN through the Employee Self-Service portal before they can view payslips. The PIN is stored in two forms:
- payslipPin - bcrypt hash used for PIN verification when the employee enters it
- payslipPinEncrypted - AES-256-GCM encrypted version used as the PDF password for emailed payslips
When viewing payslips in ESS, the employee enters their PIN, which is verified server-side. On success, an HMAC-signed cookie (payslip-access, 30-minute TTL) is set. The payslips API checks this cookie on every request — the UI alone cannot bypass the gate.
If the employee hasn't set a PIN, the ESS payslips page shows a setup prompt. The PAYSLIP_ENCRYPTION_KEY environment variable (32 bytes / 64 hex chars) is required for AES encryption. If not configured, the system falls back to the LASTNAME_BIRTHDATE password scheme for PDF protection.
Payroll Approval Chain
The payroll approval workflow is configured via ComplianceSetting with the key payroll-approval-chain.
Default Approval Chain
The default chain requires two levels of approval:
- PAYROLL_ADMIN - First reviewer
- HR_ADMIN - Final approver
Users with SUPER_ADMIN in their roles can always approve at any step regardless of the chain configuration.
Custom Chains
You can modify the approval chain to fit your organization's needs. Each step specifies:
- The role required to approve
- The order in the approval sequence
Allowances and Deductions
Allowances and deductions are configured per employee on the Compensation tab of the employee detail page. See the Employee Management guide for full details on types and fields.
Allowance Types
TalinoHR classifies allowances by tax treatment:
| Type | Tax Treatment | Examples |
|---|---|---|
| Taxable (Regular) | Fully taxable | Fixed monthly allowance, representation allowance |
| De Minimis Benefit | Tax-exempt up to BIR ceiling per category; excess goes to 90K pool | Rice subsidy, meal allowance, laundry allowance |
| Other Benefit | Draws from the P90,000 annual tax-exempt pool | Mid-year bonus, performance bonus |
| Non-Taxable (Statutory) | Fully exempt | Hazard pay, government-mandated allowances |
Deduction Types
| Type | Description | Labor Code Note |
|---|---|---|
| Authorized (Voluntary) | Employee-consented deductions | Requires documented consent |
| Loss/Damage | For loss or damage to company property | Capped at 20% of weekly wage (Art. 114) |
| Union Dues | CBA-mandated union membership fees | |
| Other | Miscellaneous deductions |
De Minimis Benefits (BIR Revenue Regulation 29-2025)
De minimis benefits are small employee benefits exempt from income tax up to prescribed annual ceilings. TalinoHR tracks 10 BIR-recognized categories with per-employee, per-year tracking:
| Category | Annual Ceiling |
|---|---|
| Rice Subsidy | P2,000/month (P24,000/year) |
| Meal Allowance | P150/meal (max 25% of basic salary) |
| Laundry Allowance | P300/month (P3,600/year) |
| Clothing/Uniform Allowance | P6,000/year |
| Medical Cash Allowance | P1,500/employee/semester |
| Employee Achievement Awards | P10,000/year |
| Christmas Gifts | P5,000/year |
| Daily Meal Allowance (OT) | Reasonable amount |
| CBA Benefits | P10,000/year |
| Other De Minimis | Per BIR ruling |
When an employee's de minimis benefits exceed the ceiling for a category, the excess automatically flows into the 90K other benefits pool.
The P90,000 Other Benefits Pool
Under the TRAIN Law, the following benefits share a combined P90,000 annual tax exemption:
- 13th Month Pay - The tax-exempt portion
- De Minimis Excess - Amounts exceeding per-category ceilings
- Other Bonuses - Benefits classified as OTHER_BENEFIT
The payroll engine tracks the running total across all three sources per employee per year. Once the pool exceeds P90,000, any further amounts become taxable.
Payroll Engine Integration
The payroll engine processes allowances and deductions with full type awareness:
- Step 8 (Allowances): Processes each allowance based on its type — TAXABLE_REGULAR goes directly to taxable income, DE_MINIMIS is checked against annual ceilings, OTHER_BENEFIT draws from the 90K pool, NON_TAXABLE_STATUTORY is fully exempt
- Step 15 (Deductions): Validates each deduction by type — LOSS_DAMAGE is capped at 20% of weekly wage, AUTHORIZED_VOLUNTARY checks for consent, date ranges are enforced
- Line items: Individual
PayrollItemAllowanceandPayrollItemDeductionrecords are created per payroll item for audit trail and payslip itemization - One-time processing: Non-recurring allowances and deductions are automatically deactivated after one payroll run
- YTD trackers:
DeMinimisTrackerandOtherBenefitsTrackerrecords are updated after each payroll computation
Loans
Navigate to the employee's profile or Loans section to manage employee loans.
Loan Types
TalinoHR tracks loans with these statuses:
- ACTIVE - Currently being deducted from payroll
- PAID - Fully paid off (auto-closed when remaining balance reaches zero)
- DEFAULTED - Employee defaulted on the loan
- WRITTEN_OFF - Loan written off by the company
Payroll Integration
Active loans are automatically deducted during payroll computation (Step 14 of the engine). The system:
- Creates a
LoanPaymentrecord for each deduction - Updates the loan's
totalPaidandremainingBalance - Auto-closes the loan (sets status to PAID) when the remaining balance reaches zero
If a payroll run is recomputed, loan payments from the previous computation are reversed before re-running.
Pre-Payroll Checklist
Before running your first payroll, verify:
- Company profile is complete (name, TIN, government registration numbers)
- Pay frequency and cutoff dates are set correctly
- Work schedules are created and assigned to employees
- Government contribution tables are loaded (SSS, PhilHealth, Pag-IBIG)
- All employees have basic salary and pay basis configured
- Government ID numbers are entered for all employees
- Tax status and dependents are set for withholding tax computation
- Payroll approval chain is configured
- Bank details are entered (for bank file export)
- Payslip password scheme is configured (for email delivery)