PH Rate Tables — single source of truth
Every value on this site comes from a JSON file in src/data/. Each calculator page inlines its data at build time. Below is the index of those tables with sizes, source URLs, and effective dates.
Why this page exists: Two reasons. (1) For auditability — anyone can check exactly which rate values flow into a calculation. (2) For SEO + AdSense review — a substantive, dated, sourced data sheet beats a 200-word landing page. The numeric JSON content below is real, not paraphrased.
Index of rate tables
| Table | Source | Effective | Rows |
|---|---|---|---|
| SSS contribution brackets | https://www.sss.gov.ph/wp-content/uploads/2024/12/2025-SSS-Contribution-Table-rev.pdf | 2026-01-01 | 61 |
| Pag-IBIG (HDMF Circular 460) | https://www.pagibigfund.gov.ph/ | 2024-02-01 | 2 |
| PhilHealth (PA2025-0002) | https://www.philhealth.gov.ph/advisories/2025/PA2025-0002.pdf | 2025-01-01 | 3 |
| Meralco August 2026 schedule | https://company.meralco.com.ph/news-and-advisories/lower-rates-august-2026 | 2026-08-01 | 7 |
| NWPC wage orders (NCR, IV-A, III) | https://nwpc.dole.gov.ph/ | Varies by region — latest in this snapshot covers through end of Q3 2026 | 3 |
| 2026 holidays (Proclamation 1006) | https://pco.gov.ph/issuances/proclamation-no-1006-declaring-the-regular-holidays-and-special-non-working-days-for-the-year-2026/ | statutory | 19 |
| OT premium matrix (Labor Code Art. 87) | Labor Code of the Philippines Art. 87 (overtime); DOLE Handbook on Workers' Statutory Monetary Benefits | statutory | 9 |
| TRAIN-law brackets (TRAIN Act, RA 10963) | https://www.bir.gov.ph/index.php/tax-information/income-tax.html | 2023-01-01 | 6 |
| 13th month pay statute (PD 851) | https://www.dole.gov.ph/php-13th-month-pay/ | statutory | — |
| BPO decimal hours schema | Pure arithmetic — no statutory citation needed beyond Labor Code Art. 87 (8-hour standard day, OT premium on excess hours). | statutory | — |
SSS contribution brackets
61 MSC brackets per SSS Circulars 2024-006..010 (revised 2025 schedule)
Show JSON (61 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "SSS",
"table": "Employee + Employer contribution (Regular, EC, MPF)",
"memberClass": "Employee (ER + EE)",
"year": 2026,
"effectiveFrom": "2026-01-01",
"sourcePrimary": "https://www.sss.gov.ph/wp-content/uploads/2024/12/2025-SSS-Contribution-Table-rev.pdf",
"sourceMirror": "https://mpm.ph/sss-table/",
"sourceCirc": "SSS Circulars 2024-006 through 2024-010 (revised 2025 table, applied for 2026)",
"fetchedOn": "2026-08-20",
"fetchMethod": "browser snapshot of mpm.ph (current SSS table), cross-referenced to sss.gov.ph PDF",
"notes": "ER = Employer share, EE = Employee share. EC = Employees' Compensation contribution (₱10 for MSC ≤ ₱14,500; ₱30 for higher brackets). MPF = Mandatory Provident Fund, applies only when MSC > ₱20,000. Total contribution is 15% of MSC under 'Regular' (ER 10% + EE 5%) for MSC ≤ ₱20,000; for MSC > ₱20,000 the full 20% is divided into 10% Regular (capped to MSC=20,000) and a progressive MPF. Verified: row 1 (MSC 5000) EE+ER=750, matches published schedule."
},
"brackets": [
{
"row": 1,
"rangeFrom": 0,
"rangeTo": 5249.99,
"msc": 5000,
"regularER": 500,
"regularEE": 250,
"ecER": 10,
"ecEE": 0,
"ecECC": 0,
"mpfER": 0,
"mpfEE": 0
},
{
"row": 2,
"rangeFrom": 5250,
"rangeTo": 5749.99,
"msc": 5500,
"regularER": 550,
"regularEE": 275,
"ecER": 10,
"ecEE": 0,
"ecECC": 0,
"mpfER": 0,
"mpfEE": 0
},
{
"row": 3,
"rangeFrom": 5750,
"rangeTo": 6249.99,
"msc": 6000,
"regularER": 600,
"regularEE": 300,
"ecER": 10,
"ecEE": 0,
"ecECC": 0,
"mpfER": 0,
"mpfEE": 0
},
{
"row": 4,
"rangeFrom": 6250,
"rangeTo": 6749.99,
"msc": 6500,
"regularER": 650,
"regularEE": 325,
"ecER": 10,
"ecEE": 0,
"ecECC": 0,
"mpfER": 0,
"mpfEE": 0
},
{
"row": 5,
"rangeFrom": 6750,
"rangeTo": 7249.99,
"msc": 7000,
"regularER": 700,
"regularEE": 350,
"ecER": 10,
"ecEE": 0,
"ecECC": 0,
"mpfER": 0,
"mpfEE": 0
},
{
"row": 6,
"rangeFrom": 7250,
"rangeTo": 7749.99,
… (truncated; full table is referenced from the calculator pages) Pag-IBIG (HDMF Circular 460)
1% EE on incomes ≤ ₱1,500; 2% otherwise; ER 2%; ₱200 per-side cap; MSC cap ₱10,000
Show JSON (2 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "Pag-IBIG (HDMF)",
"table": "Employee + Employer Pag-IBIG contribution",
"memberClass": "Employee (ER + EE)",
"year": 2026,
"effectiveFrom": "2024-02-01",
"sourcePrimary": "https://www.pagibigfund.gov.ph/",
"sourceMirror": "https://mpm.ph/pagibig-hdmf-table/",
"sourceCirc": "HDMF Circular 460 (raised contribution rates, effective February 2024)",
"fetchedOn": "2026-08-20",
"fetchMethod": "browser snapshot of mpm.ph (current Pag-IBIG table); cross-checked against HDMF Circular 460 reporting in sprout.ph (Pag-IBIG doubled Feb 2024)",
"notes": "Per HDMF Circular 460 (Feb 2024): EE rate 1% if monthly compensation ≤ ₱1,500, 2% if > ₱1,500. ER rate 2% always. MSC base cap = ₱10,000 (raised from ₱5,000 pre-2024). Per-side CONTRIBUTION cap = ₱200 (i.e., ₱200 EE max + ₱200 ER max = ₱400 total monthly).",
"discrepancyNote": "mpm.ph shows 'To 999,999,999.99' on row 2 (i.e., applies to all incomes above ₱1,500). Computations above MSC=10,000 cap the contribution at ₱200 per side. We compute contribution = min(percent * MSC_for_contribution, 200)."
},
"brackets": [
{
"row": 1,
"rangeFrom": 0,
"rangeTo": 1500,
"eeRatePercent": 1,
"erRatePercent": 2,
"eeMin": 0,
"eeMax": 200,
"erMin": 0,
"erMax": 200
},
{
"row": 2,
"rangeFrom": 1500.01,
"rangeTo": 99999999999.99,
"eeRatePercent": 2,
"erRatePercent": 2,
"eeMin": 0,
"eeMax": 200,
"erMin": 0,
"erMax": 200
}
],
"mscCap": 10000,
"contributionCapPerSide": 200,
"formula": "mscForContribution = min(monthlyCompensation, mscCap); eeContribution = min(round((eeRatePercent/100) * mscForContribution, 2), contributionCapPerSide); erContribution = min(round((erRatePercent/100) * mscForContribution, 2), contributionCapPerSide); total = eeContribution + erContribution",
"caveats": [
"Pre-2024, the maximum Pag-IBIG contribution was ₱100 per side. Feb 2024 (Circular 460) doubled the rates AND raised the cap to ₱200 per side.",
"Voluntary members (NWS, non-working spouse) and self-employed pay the same rates but EE rate is fixed at 2%.",
"Provident fund earnings (the investment side) are not modeled here; only the contribution is.",
"When EE contribution is cappe PhilHealth (PA2025-0002)
5% on monthly basic; 2.5% EE / 2.5% ER; floor ₱10,000; ceiling ₱100,000
Show JSON (3 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "PhilHealth (NHIP)",
"table": "Direct Contributors — Monthly Premium Contribution",
"memberClass": "Employee (Premium shared equally between EE and ER per RA 11223)",
"year": 2026,
"effectiveFrom": "2025-01-01",
"sourcePrimary": "https://www.philhealth.gov.ph/advisories/2025/PA2025-0002.pdf",
"sourceCross": "https://mpm.ph/philhealth-phic-table/",
"sourceLaw": "RA 11223 (Universal Health Care Act) §10; PhilHealth Circular 2020-0005 (contribution schedule); PhilHealth Advisory PA2025-0002",
"fetchedOn": "2026-08-20",
"fetchMethod": "Direct read of PhilHealth PDF advisory (PA2025-0002), cross-referenced to mpm.ph live table.",
"notes": "Per PhilHealth Advisory PA2025-0002, effective January 2025 the premium rate is 5.0% of MONTHLY BASIC SALARY (MBS), with income floor ₱10,000 and income ceiling ₱100,000. Total contribution is shared equally between ER and EE (RA 11223), i.e., 2.5% each side. Premium base = MBS, NOT total comp; MBS excludes overtime, commissions, allowances, 13th-month, bonuses. Per PhilHealth Circular 2020-0005."
},
"rates": {
"totalRatePercent": 5,
"eeRatePercent": 2.5,
"erRatePercent": 2.5,
"incomeFloorPHP": 10000,
"incomeCeilingPHP": 100000
},
"brackets": [
{
"row": 1,
"rangeFrom": 0,
"rangeTo": 10000,
"salaryBasis": "floor",
"eeMin": 250,
"eeMax": 250,
"erMin": 250,
"erMax": 250
},
{
"row": 2,
"rangeFrom": 10000.01,
"rangeTo": 99999.99,
"salaryBasis": "MBS × 2.5%",
"eeMin": 250,
"eeMax": 2500,
"erMin": 250,
"erMax": 2500
},
{
"row": 3,
"rangeFrom": 100000,
"rangeTo": 99999999999.99,
"salaryBasis": "ceiling",
"eeMin": 2500,
"eeMax": 2500,
"erMin": 2500,
"erMax": 2500
}
],
"formula": "premiumBase = clamp(monthlyBasicSalary, 10000, 100000); total = 0.05 * premiumBase; eeShare = total / 2; erShare = total / 2",
"caveats": [
"Income floor means: even if MBS < ₱10,000, premium is computed as if MBS = ₱10,000.",
"Income ceiling means: even if MBS > ₱100,000, premium is computed as if MBS = ₱100,000.",
"MBS = fixed monthly basic pay, excludes overtime, commissions, allowances, 13th month, bonuses (PhilHealth Circ Meralco August 2026 schedule
16 per-kWh components incl. AWAT refunds; per-band distribution
Show JSON (7 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "Meralco (Manila Electric Company)",
"table": "Residential Electricity Rates per kWh — by component, by consumption band",
"memberClass": "Residential / Lifeline / Senior Citizen",
"year": 2026,
"effectiveFrom": "2026-08-01",
"effectiveBillingPeriod": "August 2026",
"sourcePrimary": "https://company.meralco.com.ph/news-and-advisories/lower-rates-august-2026",
"sourceRateSchedule": "https://meralcomain.s3.ap-southeast-1.amazonaws.com/2026-08/08-2026_rate_schedule_0.pdf",
"sourceResidentialBills": "https://meralcomain.s3.ap-southeast-1.amazonaws.com/2026-08/08-2026_residential_bills.pdf",
"sourcePressRelease": "https://meralcomain.s3.ap-southeast-1.amazonaws.com/2026-08/english_press_release-_meralco_august_2026_rates.pdf",
"newsConfirmations": [
"https://www.rappler.com/business/meralco-customers-lower-electricity-rates-august-2026/",
"https://www.gmanetwork.com/news/money/companies/997965/meralco-electricity-rate-cut-august-2026/story/"
],
"fetchedOn": "2026-08-20",
"fetchMethod": "Direct read of Meralco press release + Schedule of Rates PDF (extracted text), cross-referenced with Residential Bills PDF and Rappler/GMA confirmations.",
"notes": "All rates VAT-exclusive. The headline ₱14.7833/kWh is the typical household (200 kWh band) August 2026 rate. Lower bands have slightly higher totals due to band-specific distribution costs; very low usage (≤200 kWh) avoids the higher-tier distribution charge.",
"discrepancyNote": "Several line items in the Rate Schedule PDF are refunded this month: AWAT Refund/(Collect) 1 of ₱0.4278/kWh (ongoing), AWAT Refund/(Collect) 2 of ₱0.5861/kWh (NEW August 2026, ₱9.5B ERC-approved refund spread over 6 months). Regulatory Reset Fees Adjustment is ₱(0.0023)/kWh. GEA-All collection of ₱0.0371/kWh is SUSPENDED for August.",
"scope": "Residential only. General Service A/B and General Power customers are NOT modeled here (different rate structure; out of scope per playbook section 3). Visayas/Mindanao electric cooperatives not modeled — only Meralco."
},
"headline": {
"label": "Typical household (200 kWh band)",
"totalRatePerKWh": 14.7833,
"vatExclusive": true,
"previousMonthPerKWh": 14.8261,
"monthOverMonthDeltaPerKWh": -0.0428,
"monthOverMonth NWPC wage orders (NCR, IV-A, III)
OCR-verified Wage Order NCR-27 (PDF read with macOS Vision)
Show JSON (3 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "NWPC / RTWPBs (National Wages and Productivity Commission / Regional Tripartite Wages and Productivity Boards)",
"table": "Regional daily minimum wage rates — by region, sector, area classification",
"memberClass": "Private sector minimum wage earners, including Kasambahay (separate wage order)",
"year": 2026,
"effectiveFrom": "Varies by region — latest in this snapshot covers through end of Q3 2026",
"sourcePrimary": "https://nwpc.dole.gov.ph/",
"sourceRegions": {
"CALABARZON (IV-A)": "https://nwpc.dole.gov.ph/region-iva/",
"Central Luzon (III)": "https://nwpc.dole.gov.ph/region-iii/"
},
"sourceCross": {
"NCR (verified via OCR of Wage Order NCR-27 PDF, 2026-08-20)": "https://nwpc.dole.gov.ph/wp-content/uploads/2026/07/Wage-Order-No.-NCR-27.pdf",
"All regions summary": "https://nwpc.dole.gov.ph/statistics/summary-of-latest-wage-orders-issued-by-the-regional-boards/"
},
"fetchedOn": "2026-08-20",
"fetchMethod": "Direct browser snapshots of https://nwpc.dole.gov.ph/region-iva/ and https://nwpc.dole.gov.ph/region-iii/. NCR data direct-OCR from scanned Wage Order NCR-27 PDF via PyMuPDF (page render) + macOS Vision framework (`VNRecognizeTextRequest`) — see helpers/ocr-pdf-vision.md in skills for the reproducible workflow.",
"notes": "Each region has its own Wage Order, typically issued 18–24 months apart. Two-tranche wage orders are common — initial increase on effectivity, second tranche 6–12 months later. The figures below are the CURRENT effective rate (not historical). Kasambahay (domestic worker) rates are SEPARATE wage orders, not included here — they are region-specific per Wage Order RB-REG-DW-XX.",
"ocrPipelineNote": "NCR-27 PDF is image-only (no embedded text). To extract: (1) PyMuPDF page.get_pixmap(dpi=200).save('out.png'); (2) macOS Vision framework via swift script with VNRecognizeTextRequest. The exact Swift source and bash wrapper are saved as a Hermes skill: try-agy-pdf-ocr so future NCR (or other scanned DOLE/NWPC/SSS/PHILHEALTH PDFs) can be extracted in <30s without OCR add-ons.",
"discrepancyNote": "Now RESOLVED for NCR: extracted directly from Wage Order NCR-27 PDF on 2026-08-20. Other regions (CAR, BARMM, Regions XI–XIII, etc.) are intentionally not in this file yet — add per 2026 holidays (Proclamation 1006)
Section 1.A + 1.B + 1.D of Proclamation 1006 (OCR-verified); 1.C EDSA is special working
Show JSON (18 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "Malacañang / Proclamation No. 1006 (and prior / supplemental proclamations)",
"table": "2026 Regular Holidays + Special Non-Working Days + Special Working Day",
"year": 2026,
"scope": "Nationwide holidays applicable for OT premium computation under the Labor Code.",
"sourcePrimary": "https://pco.gov.ph/issuances/proclamation-no-1006-declaring-the-regular-holidays-and-special-non-working-days-for-the-year-2026/",
"sourcePrimaryPDF": "https://pco.gov.ph/wp-content/uploads/2025/09/20250903-PROC-1006-FRM.pdf.pdf",
"sourceCross": [
"https://www.rappler.com/philippines/list-holidays-2026/",
"https://www.pna.gov.ph/articles/1258046"
],
"fetchedOn": "2026-08-20",
"fetchMethod": "Direct OCR of Proclamation 1006 PDF using PyMuPDF page render + macOS Vision framework (VNRecognizeTextRequest, accurate mode). Cross-confirmed against Rappler and PNA.",
"notes": "Eid'l Fitr (RA 9177) and Eid'l Adha (RA 9849) are STATUTORILY REGULAR holidays in PH, but their exact dates are determined by the Islamic calendar each year and proclaimed separately (not in Proclamation 1006). Add the supplemental proclamation date when available. Chinese New Year (17 Feb 2026 in this proclamation) and Black Saturday (4 Apr 2026) are ADDITIONAL SPECIAL NON-WORKING days not in Section 1.A/B.",
"discrepancyNote": "Now RESOLVED: read directly from the primary Proclamation 1006 PDF on 2026-08-20 via OCR. Earlier secondary-source reading listed Chinese New Year under Section 1.B in error — primary source confirms it's under Section 1.D (Additional Special Non-Working Days). EDSA 25 February is correctly listed as a SPECIAL (WORKING) day (Section 1.C) — work proceeds but a commemorative ceremony applies."
},
"regularHolidays": [
{
"date": "2026-01-01",
"dayOfWeek": "Thursday",
"name": "New Year's Day",
"fixStatus": "fixed",
"lawRef": "RA 9492"
},
{
"date": "2026-04-02",
"dayOfWeek": "Thursday",
"name": "Maundy Thursday",
"fixStatus": "movable",
"lawRef": "RA 9492"
},
{
"date": "2026-04-03",
"dayOfWeek": "Friday",
"name": "Good Friday",
"fixStatus": "movable",
"lawRef": "RA 9492"
},
{
"date": "2026-04-09",
"dayOfWeek": "Thursday",… (truncated; full table is referenced from the calculator pages) OT premium matrix (Labor Code Art. 87)
DOLE Handbook multipliers: OT hour = day-type rate × 1.30 (×1.25 ordinary); ND +10%
Show JSON (9 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "Philippine Labor Code + DOLE",
"table": "Overtime Pay & Night Differential premium matrix",
"year": 2026,
"sourcePrimary": "Labor Code of the Philippines Art. 87 (overtime); DOLE Handbook on Workers' Statutory Monetary Benefits",
"sourceHolidaysFile": "src/data/ph_holidays_2026.json",
"fetchedOn": "2026-08-20",
"fetchMethod": "Static, statutory — references holidays table for day classification.",
"notes": "Premium pay rates are STATUTORY and have not changed materially in decades. They are listed by the Labor Code Art. 87 + RA 9492 holiday pay rules. The base pay used for premium computation is the employee's hourly rate (daily ÷ 8).",
"discrepancyNote": "When a worker is paid a daily rate that DOES NOT divide cleanly by 8 (e.g., ₱755 ÷ 8 = ₱94.375/hour), bankers' rounding to the nearest centavo is standard. Always disclose your rounding rule."
},
"formulas": {"hourlyRateFromDaily": "dailyRate / 8","ordinaryDay_Base8h": "dailyRate (= hourly × 8)","ordinaryDay_OT_Hour": "hourlyRate * 1.25 per hour beyond 8","restDayOrSpecialDay_Base8h": "dailyRate * 1.30 (130%)","restDayOrSpecialDay_OT_Hour": "hourlyRate * 1.69 per hour beyond 8 (130% × 130%, DOLE Handbook)","regularHoliday_Base8h_UnworkedPaid": "dailyRate * 2.00 — paid even if not worked","regularHoliday_OT_Hour": "hourlyRate * 2.60 per hour beyond 8 (200% × 130%, DOLE Handbook)","regularHolidayOnRestDay_Base8h": "dailyRate * 2.60 (260%)","regularHolidayOnRestDay_OT_Hour": "hourlyRate * 3.38 per hour beyond 8 (260% × 130%)","nightDifferential": "+10% of the rate actually earned for hours between 22:00–06:00 (day-type rate for regular night hours; full OT-hour rate for night OT)"}, "matrix": {
"case": [
"dayType",
"workedOrNot",
"OT",
"base",
"OT_plus_premium"
],
"rows": [
{
"from": "regular_day",
"if_worked": true,
"otHours": 0,
"base": "hourlyRate * 8",
"extraPremium": "none",
"totalExtra… (truncated; full table is referenced from the calculator pages) TRAIN-law brackets (TRAIN Act, RA 10963)
For withholding caveat only — not a tax filing tool
Show JSON (6 brackets/rows + metadata)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "BIR (Bureau of Internal Revenue)",
"table": "TRAIN Law graduated income tax brackets (used for withholding CAVEAT only)",
"memberClass": "All individual taxpayers, single (semi-monthly rates shown for context)",
"year": 2026,
"effectiveFrom": "2023-01-01",
"sourcePrimary": "https://www.bir.gov.ph/index.php/tax-information/income-tax.html",
"sourceLaw": "TRAIN Act (RA 10963), effective January 2018; the optional 8% gross income tax election for self-employed/professionals sits under the CREATE Act (RA 11534) and is not modeled",
"fetchedOn": "2026-08-20",
"fetchMethod": "RA 10963 §24(A) graduated brackets published in BIR Form 2316 instructions; standard since 2018. The old RA 9504 personal/additional exemptions are repealed — the ₱250,000 zero-rate bracket replaces them.",
"scope": "CAVEAT-ONLY: this table is shipped as supporting data for the Net Take-Home withholding estimate. It is NOT a tax calculator. Tax computation depends on deductions (de minimis, optional 8%), and BIR ruling; use your payslip or BIR Form 2316 as the source of truth.",
"disclaimer": "This site does not provide tax advice and does not substitute for filing under BIR rules. Tax computation in the Net Take-Home tool is a withholding estimate, capped with caveats."
},
"notesForNetTakeHome": "Compute monthly taxable income = (gross monthly) - (gov't contributions as deducted EE share). Apply TRAIN brackets below. Result is the ESTIMATED monthly withholding tax. The actual withholding may differ based on: de minimis, holiday pay, bonuses, status (single/married, head of family, additional dependents), and BIR rulings. The Payslip / BIR Form 2316 is the source of truth — verify against that, not this estimate.",
"bracketsTaxableAnnual": [
{
"row": 1,
"over": 0,
"notOver": 250000,
"baseTax": 0,
"ratePercent": 0
},
{
"row": 2,
"over": 250000,
"notOver": 400000,
"baseTax": 0,
"ratePercent": 15,
"excessOver": 250000, },
{
"row": 3,
"over": 400000,
"notOver": 800000,
"baseTax": 22500,
"ratePercent": 20
},
{
"row": 4,
"over": 800000,
"notOver": 2000000,
"baseTax": 102500,
"ratePercent": 25
},
{
"row": 5,
"over": 2000000,
"notOver": 8000000,
"baseTax": 402500,
"ratePercent": 30
},
{
"ro 13th month pay statute (PD 851)
Formula + non-taxable cap + worked example
Show JSON (metadata only)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "Department of Labor and Employment (DOLE)",
"table": "13th Month Pay (mandatory statutory benefit)",
"year": 2026,
"scope": "PH Labor Code + Presidential Decree No. 851 (1975), as amended — applies to ALL private sector employers regardless of number of employees (the 2021 amendments removed the 'less than ₱1,500 basic wage' exemption and the small-employer threshold).",
"sourcePrimary": "https://www.dole.gov.ph/php-13th-month-pay/",
"sourceLaw": "Presidential Decree No. 851 (1975); Department of Labor and Employment (DOLE) 2021 amendments removing both exemption thresholds.",
"fetchedOn": "2026-08-20",
"fetchMethod": "Statutory formula, no live rate lookup.",
"notes": "No live data needed — formula and threshold are constant."
},
"formula": {
"basic_13th": "total_basic_salary_year / 12",
"tax_status": "First ₱90,000 of total non-taxable 13th month + other benefits is TAX-FREE per RA 10653 / TRAIN Law. Excess is taxable.",
"nonTaxableCapPHP": 90000,
"what_counts_as_basic_salary": [
"Basic monthly wage (excluding overtime, holiday premium, night differential, shift differential, allowances, commissions, bonuses)"
],
"what_excluded_from_basic_salary": [
"Overtime pay",
"Holiday premium (regular holiday 200%, special day 30%)",
"Night differential (10% between 10pm-6am)",
"Cost-of-living allowances (COLA) — when itemized",
"Performance bonuses / 13th month itself / profit sharing",
"Other allowances not integrated into base pay"
]
},
"rules": {
"what_to_pay_by_default": "If employer cannot determine exact total basic earnings, the safe default is 1/12 of the highest basic salary received within the year.",
"employers_exempted": "None. The 2021 rule change removed all exemptions (employer size, income threshold, government employees). It applies to all private-sector rank-and-file employees.",
"managerial_or_purely_commissioned_employees": "Still entitled unless properly classified under 'managerial' criteria and earning commissions that are not the principal source of pay (separate DOLE Handbook).",
"payment_deadline": "On or before 24 December each year. If the employer has a non-standard fiscal year and the CBA so specifies, payment may be earlier." BPO decimal hours schema
Pure-arithmetic conversion rules
Show JSON (metadata only)
{
"$schema": "https://ph-paymath.local/data.schema.json",
"_meta": {
"agency": "Department of Labor and Employment (DOLE) / Bureau of Working Conditions",
"table": "Decimal Hours ↔ Hours:Minutes converter (pure logic)",
"year": 2026,
"scope": "Standard time-arithmetic conversion commonly used in PH BPO payroll where billing/timelogs are in decimal hours (e.g., 7.5h = 7h 30m). No statutory or live rate lookup.",
"sourcePrimary": "Pure arithmetic — no statutory citation needed beyond Labor Code Art. 87 (8-hour standard day, OT premium on excess hours).",
"fetchedOn": "2026-08-20",
"fetchMethod": "Schema-only. No live rate lookup.",
"notes": "Pure arithmetic. The interesting question is how the input is interpreted, not the conversion itself."
},
"direction_definitions": {
"decimal_to_hhmm": "Output hours = floor(decimal); output minutes = round((decimal - floor(decimal)) * 60); total seconds = ((decimal - floor(decimal)) * 60 - minutes) * 60.",
"hhmm_to_decimal": "Input hours + (input minutes / 60) = decimal hours. Inputs may include seconds if a stopwatch-style logger provides them, but BPO payroll typically truncates to the nearest minute.",
"rounding_rule_default": "Round minutes to nearest whole minute. Round seconds to the nearest minute only when seconds ≥ 30."
},
"edgeCases": {
"decimal_8.00": "= 08:00 (8 hours exactly).",
"decimal_8.001": "= 08:00:00 + (0.001 * 3600) seconds = 08:00:03.6 ≈ 08:00 (rounded).",
"decimal_7.75": "= 7h 45m (standard '7 hours 45 minutes').",
"decimal_7.50": "= 7h 30m.",
"decimal_6.40": "= 6h 24m.",
"hhmm_input_negative": "Refuse input — decimal hours / HH:MM cannot be negative for payroll purposes.",
"hhmm_input_minutes_>=_60": "Refuse input — minutes must be 0..59. Roll minutes >=60 into hours before computing."
},
"legalUse": {
"what_this_is": "Same conversion HR systems do. BPO payroll systems (e.g., Sprout, BambooHR PH, custom PHP/SAP) commonly display 'time worked' in HH:MM but log it in decimal.",
"what_this_is_NOT": "Not a payroll rate calculator. Hourly rate × decimal hours = gross pay. That's outside this tool's scope.",
"ot_threshold_reminder": "Labor Code Art. 87: standard day is 8 hours. Decimal hours above 8 per day become overtime. Decimal hours between 22:00 and 06:00 (in clock time, not decimal input) accumulate How the build pipeline works
- Every data file lives in
src/data/as a JSON document with a_metablock (source URL, fetchedOn, fetchMethod, notes, discrepancyNote). - The Astro build
imports the JSON at build time and inlines the data into the static HTML/JSON script tags. - The page renders the SSR-default output server-side (no JS required), then re-evaluates on input changes via a small inline vanilla-JS handler.
- JSON-LD
WebApplication+FAQPageschema is rendered in the<head>for Google and AI search citation.
Any data point older than 90 days is flagged in the playground's _meta.discrepancyNote. The next refresh cycles through Meralco (monthly), NWPC wage orders (per region as issued), and SSS/Pag-IBIG/PhilHealth (typically annual).