How Pay Is Computed Pro / Solo

This page explains the full formula Sweldo uses to go from raw attendance data to the final net pay on each employee's payslip. Every number is traceable — nothing is a black box.

The hourly equivalent

Everything in payroll is built on an hourly equivalent (HE) — the amount the employee earns per hour:

Daily-rate employee: HE = daily_rate ÷ 8
Hourly-rate employee: HE = hourly_rate

For example, an employee on ₱600/day has HE = ₱75/hour.

1 — Base Pay

Daily-rate: base_pay = paid_days × daily_rate
Hourly-rate: base_pay = (hours_worked + approved_leave_days × 8) × HE

paid_days = days with a valid clock-out in the period + approved leave days.
Days where the employee clocked in but has no clock-out are excluded until the time log is completed or edited.
Absent days (no clock-in, no approved leave) contribute zero — this is the "no work, no pay" principle.

2 — Late Deduction

Daily-rate only: late_deduction = (total_late_minutes ÷ 60) × HE
Cap: late_deduction cannot exceed base_pay
Hourly-rate: no late deduction (they already earn fewer hours)

Daily-rate workers are paid for a full day regardless of when they arrive, so the late portion is deducted. Hourly-rate workers are not double-penalised — their late arrival already means fewer hours clocked, so their base pay is already reduced. Late minutes below the grace period (default: 15 min) are not counted at all.

3 — Overtime Pay

ot_pay = (approved_OT_minutes ÷ 60) × HE × 1.25

The 1.25 factor is the standard DOLE overtime premium — 25% above the regular hourly rate. Only approved OT is included. OT requests rejected or still pending are not.

4 — Rest Day Premium

rest_day_premium = rest_day_hours × HE × 0.30

An additional 30% of the hourly rate is paid for hours worked on a rest day (DOLE minimum). Only applies when Rest Day Premium is enabled in Settings and a rest-day shift adjustment is approved.

5 — Night Differential Pay

nd_pay = nd_hours × HE × nd_rate

Night differential covers hours worked between 10 PM and 6 AM. The rate is configurable per employee (default: 10%, DOLE minimum). Night-differential hours are logged separately.

6 — Gross Pay

gross_pay = base_pay
          + ot_pay
          + rest_day_premium
          + nd_pay
          + holiday_pay
          + thirteenth_month
          + quota_bonus
          + manual_adjustment
          − late_deduction

7 — Statutory Deductions (prorated)

Statutory deductions are based on the employee's monthly salary equivalent and then prorated for the pay period. The proration factor is period_days ÷ 30 (e.g., a 15-day cutoff uses factor = 0.5).

monthly_salary = daily_rate × 26 // 26 working days per month (industry standard)
SSS: bracket lookup on monthly_salary → employee_share × proration_factor
PhilHealth: monthly_salary × ph_rate ÷ 2 (employee pays half), capped at max → × proration_factor
Pag-IBIG: monthly_salary × pi_rate, capped at ₱100/month → × proration_factor

Rates and caps are maintained in Settings → Statutory Rates. Update them whenever SSS, PhilHealth, or Pag-IBIG releases a new contribution schedule.

8 — Withholding Tax (BIR TRAIN Law)

1. taxable_gross = gross_pay − de_minimis_allowances
2. annual_taxable = taxable_gross × pay_periods_per_year
3. annual_tax = apply TRAIN Law tax table to annual_taxable
4. withholding_tax = annual_tax ÷ pay_periods_per_year

For semi-monthly payroll, pay_periods_per_year = 24. De minimis allowances (rice subsidy, medical, clothing) are subtracted before annualizing — they are non-taxable up to BIR thresholds. Minimum wage earners always get ₱0 withholding tax regardless of this computation. The computed value is editable before releasing payroll.

9 — Net Pay

net_pay = max(0, gross_pay − SSS − PhilHealth − Pag-IBIG − withholding_tax − vale_deduction)

Net pay can never go below ₱0. If total deductions would exceed gross pay (rare, but possible with a large vale), the excess is carried forward — the employee still owes the balance in future periods.

13th Month Pay

thirteenth_month = total_basic_pay_for_year ÷ 12

Sweldo accumulates the employee's base_pay across all released payroll runs within the calendar year. The 13th month is typically added to the December payroll run. It can be entered manually or computed by clicking the "Compute 13th Month" button in the payroll editor, which reads the year's history automatically.

💡
Every computed value in Sweldo is a suggestion, not a final answer. You can edit any field on the payslip line before releasing — Sweldo always recalculates gross and net whenever you change a value. See Editing Payslip Lines →