BIR Withholding Tax and TRAIN Law
5 min readThe Bureau of Internal Revenue (BIR) administers income tax collection in the Philippines. TalinoHR computes withholding tax based on the TRAIN Law (Tax Reform for Acceleration and Inclusion Act) brackets.
TRAIN Law Tax Brackets (Annual)
The Philippines uses a progressive income tax system with 6 brackets. The first P250,000 of annual taxable income is exempt from tax.
| Bracket | Annual Taxable Income Range | Fixed Tax | Rate on Excess |
|---|---|---|---|
| 1 | P0 - P250,000 | P0 | 0% |
| 2 | P250,001 - P400,000 | P0 | 15% |
| 3 | P400,001 - P800,000 | P22,500 | 20% |
| 4 | P800,001 - P2,000,000 | P102,500 | 25% |
| 5 | P2,000,001 - P8,000,000 | P402,500 | 30% |
| 6 | Over P8,000,000 | P2,202,500 | 35% |
How Withholding Tax is Computed
The payroll engine computes withholding tax each pay period using the BIR tax table stored in the database. The tax table contains equivalent bracket amounts for different pay frequencies (monthly, semi-monthly).
Per-Period Computation Steps
- Compute gross pay: Basic pay - attendance deductions + overtime + holiday pay + NSD + allowances + other earnings.
- Subtract mandatory contributions: SSS employee share, PhilHealth employee share, Pag-IBIG employee share.
- Subtract non-taxable allowances: Allowances marked as non-taxable are excluded.
- Result = taxable income for the period.
- Look up the tax bracket in the BIR tax table matching the pay frequency and taxable income amount.
- Compute tax: Fixed tax + (taxable income - bracket floor) x rate on excess.
Example (Monthly)
An employee with P50,000 monthly gross pay:
- SSS employee share: P900
- PhilHealth employee share: P1,250
- Pag-IBIG employee share: P200
- Taxable income: P50,000 - P900 - P1,250 - P200 = P47,650
- This falls in the monthly equivalent of Bracket 3.
- Tax is computed as: fixed tax + (excess over bracket floor) x rate.
Annualization
At year-end, TalinoHR performs tax annualization to reconcile the total tax withheld throughout the year against the actual annual tax due.
Annualization Process
- Sum all taxable income from REGULAR, THIRTEENTH_MONTH, and ANNUALIZATION payroll runs for the year.
- Compute the annual tax due using the TRAIN Law brackets above.
- Compare annual tax due vs. total tax already withheld during the year.
- If total withheld exceeds tax due, the employee gets a refund (negative adjustment).
- If total withheld is less than tax due, the employee has an additional collection (positive adjustment).
Navigate to Payroll → Annualization (/payroll/annualization) to run the year-end tax annualization.
BIR 2316 (Annual Income Tax Return)
The BIR 2316 is the annual tax report generated for each employee. It summarizes:
- Total compensation received during the year
- Total mandatory government contributions (SSS, PhilHealth, Pag-IBIG)
- Non-taxable income (13th month pay up to P90,000 threshold)
- Taxable compensation
- Annual tax due
- Total tax withheld
- Tax adjustment (refund or collection)
Navigate to Payroll → Government (/payroll/government) and select "BIR 2316" with the applicable year.
13th Month Pay Tax Exemption
Under the TRAIN Law, the 13th month pay and other benefits are tax-exempt up to P90,000 per year. Any amount exceeding P90,000 is added to taxable compensation.
TalinoHR automatically applies this P90,000 threshold when computing taxable income for 13th month payroll runs.
BIR Alphalist (1604-CF)
The BIR Alphalist is an annual report listing all employees and their compensation details for the year. It is filed as BIR Form 1604-CF.
The alphalist includes:
- Employee TIN numbers
- Total basic pay, overtime, holiday pay, NSD, allowances
- 13th month pay
- Total compensation
- Mandatory contributions (SSS, PhilHealth, Pag-IBIG)
- Taxable compensation
- Annual tax due and total tax withheld
- Tax adjustment
Navigate to Payroll → Government (/payroll/government) and select "BIR Alphalist" with the applicable year. The report can be exported to CSV for filing with the BIR.
Semi-Monthly vs Monthly Tax Tables
The BIR provides different tax table bracket amounts for different pay frequencies. TalinoHR stores bracket amounts for both semi-monthly and monthly frequencies in the TaxTable database model. The payroll engine automatically selects the correct brackets based on the payroll run's pay frequency.
Important Notes
- The first P250,000 of annual taxable income is completely exempt from income tax.
- Government contributions (SSS, PhilHealth, Pag-IBIG) are pre-tax deductions that reduce taxable income.
- Non-taxable allowances (e.g., de minimis benefits) are also excluded from taxable income.
- Minimum wage earners are exempt from income tax (handled by the tax bracket — their taxable income falls in the 0% bracket).
- Tax computation uses the database-stored tax table for periodic withholding, and the hardcoded TRAIN brackets for annualization.
- All monetary computations use Decimal.js for precision.
Where to Manage Tax Settings
The BIR tax table is seeded during initial setup. To view or verify the tax brackets:
- Check the TaxTable entries in the database via Prisma Studio (
pnpm db:studio). - The annual brackets used for annualization are defined in the codebase at
lib/compliance/bir.ts.