Skip to main content

Payroll Compliance

MotorPH Enterprise is an all-in-one HR, payroll, CRM, and inventory platform built for Philippine businesses. This section documents the statutory side of that platform: the contributions and taxes the payroll engine computes, the versioned rate tables it reads, and the BIR and DOLE outputs it produces.

The pages here describe the engine's behaviour with the real numbers and the real field names. If you want the step-by-step arithmetic, start with Business rules; if you want one form traced from payslip column to printed line, read BIR Form 1601-C.

Scope of this documentation

These pages describe what the software implements, not what your company is obliged to file. They are not tax or legal advice.

Philippine contribution schedules and withholding tables change by government issuance — SSS circulars, PhilHealth advisories, HDMF circulars and BIR revenue regulations — and a page that was accurate when written can be superseded without the software changing at all. Treat the figures here as a description of the tables currently seeded in the system, and confirm current rates against the issuing agency before you file. Where the system knowingly does not model something, the documentation says so rather than implying coverage: the "Known limitations and deliberate tradeoffs" section of the 1601-C page is the clearest example.

What the engine implements

ObligationWhat the system doesWhere it is documented
SSS (regular, EC, MPF)Resolves employer and employee shares from a versioned Monthly Salary Credit bracket table by monthly salary and effective dateBusiness rules §5
PhilHealthPercentage premium split between employee and employer, with fixed amounts at the bracket extremes and configurable floor/ceiling clampsBusiness rules §5
Pag-IBIG (HDMF)Percentage shares below the fund-salary cap, fixed amounts above it, with employee and employer caps enforced in settingsBusiness rules §5
Withholding tax on compensationTable-driven BIR computation against the bracket table for the configured pay frequency, plus an optional year-end true-up on December's final cutoffBusiness rules §6
13th month pay and bonusesSplits bonuses against the annual non-taxable cap and derives the statutory entitlement from payslip historyBusiness rules §7
De minimis benefitsPays allowances in full, taxes only the portion above each benefit's ceiling, measured against the calendar month rather than the payslipBusiness rules §8
Expanded withholding tax (EWT)A registry of income payments to payees, keyed by ATC code, feeding the 0619-E, 1601-EQ and 2307 formsBusiness rules §9
Premium payRest day, special day, regular holiday, overtime and night differential factors that stack multiplicatively over the base hourly rateBusiness rules §3

Pay in this system is hours-based rather than fixed-salary: a payslip's earned pay is the sum of per-day pay over the period's qualifying timesheets. That matters for compliance because holiday pay, premium pay and overtime all derive from attendance records, not from a monthly figure divided down.

How historical runs stay reproducible

Statutory tables are not constants in the code. Each SSS, PhilHealth, Pag-IBIG and withholding-tax bracket carries an effective date, and the rows sharing one effective date form a version of that table — a cohort. A payroll run resolves the cohort in force on the period end date, so a run for a period in a prior year reads that year's brackets even after a new table has been loaded. Two TRAIN withholding cohorts ship seeded for exactly this reason, and historical periods resolve to the correct one by date.

Three mechanisms keep this stable:

  1. Effective-date resolution. The Statutory Rate Tables page states the rule in the interface: tables are versioned by effective date, and payroll runs apply the version in force on the period end date.
  2. Table pins. Payroll Settings → Statutory Clamps & Table Pins holds an SSS, PhilHealth and Pag-IBIG pin. A pin that parses as a four-digit year forces that year's cohort; left blank, the period end date selects the cohort. The same section records the Current Statutory Year, which the compliance checklist compares your loaded tables against.
  3. Frequency snapshots. A payroll run records the pay frequency it was created under, so changing the setting later cannot reinterpret an existing run when it is regenerated or picked up by year-end reporting. Runs created before that snapshot was introduced fall back to the current setting.

To load a new year's rates, duplicate an existing version to a new effective date and edit the copy's brackets. The Duplicate Table action on the Statutory Rate Tables page does this, and requires the platform.statutory.rates.manage permission — without it the tables render read-only, because they are maintained centrally and are identical for every company on the platform.

Before any payslip is written, the engine verifies that every employee has a covering bracket in all three contribution tables and fails the run rather than producing a payslip with a silent zero.

Where compliance work happens in the product

Navigation items appear only when the signed-in user holds the listed permission and is working in a role the item is scoped to, so two administrators can see different menus on the same deployment.

TaskMenu pathRouteMenu permission
Edit the statutory configurationPayroll → Payroll Settings/payroll-settingspayroll.settings.manage
Maintain contribution and tax bracketsPayroll → Contribution Rates/contribution-ratesany of payroll.sss.rates.manage, payroll.philhealth.rates.manage, payroll.pagibig.rates.manage
Generate BIR and DOLE outputsPayroll → Government Forms, or HR Management → Government Forms/government-formspayroll.manage from the Payroll menu; hr.employees.manage from the HR menu
Record income payments to payeesPayroll → EWT Registry/ewt-registrypayroll.ewt.manage
Maintain the holiday calendarPayroll → Holiday Calendar/holiday-calendarpayroll.holidays.manage or payroll.manage
Record bonuses and 13th month paymentsPayroll → Bonuses/bonusespayroll.bonus.manage

The Contribution Rates page presents one tab per table — SSS, PhilHealth, Pag-IBIG and Withholding Tax — and each tab is filtered by its own permission, so a user who may edit only the SSS table sees only that tab. The Withholding Tax tab is gated on payroll.withholdingtax.rates.manage, which is not one of the three permissions that open the page, so it is possible to reach the page without seeing that tab.

Payroll Settings opens on a Payroll Compliance Checklist: automated checks of the current configuration against Philippine statutory requirements, which flag outdated tables and risky settings before the next run rather than after it. The same page's Governance section carries a configuration version, an approved-by field, a change log, and a lock that rejects every edit until it is turned off and saved.

Forms the system produces

The Government Forms page presents each output as a card. The BIR compensation forms are BIR 1601-C, BIR 1604-C Alphalist (PDF plus the .DAT file for the BIR validation module) and BIR 2316. The expanded-withholding forms — BIR 0619-E, BIR 1601-EQ and BIR 2307 — are built from the EWT registry. Alongside them sit the SSS / PhilHealth / Pag-IBIG remittance report, 13th Month Pay, the DOLE 13th Month Report, the Year-End Tax Adjustment reconciliation, the Payroll Register, Daily Time Records, and Filings & Receipts for tracking what was filed and storing the confirmation.

Generated documents are working papers for the person who files. They reproduce the form's layout and arithmetic; they are not electronic submissions, and filing and payment still go through eFPS or eBIRForms.

  • Business rules — the full engine, with the rate tables, the premium matrix, the contribution split across cutoffs, and the withholding formula.
  • BIR Form 1601-C — every one of the form's 40 entry points mapped to its source, a worked example, and the limitations.
  • Payroll API — the endpoints behind all of the above, with the permission each one requires.
  • Data model — how the rate tables, payslips and deduction items are actually stored.