ZyncDocs · MY-Payroll · Process flows
System step
Process Flows

MY-Payroll — Process Flows

The operating lifecycle of the Malaysian payroll, phase by phase: one-time configuration, enrolling employees, the monthly pay cycle from draft to paid, the exception paths, monthly statutory remittance, and the year-end compliance season. Every flow cites the functional requirements that back it on the Modules tab.

6
Flows
4
Actors
1
Journal per run
AOne-time SetupBefore the first pay run

Phase A · One-time Setup

Configure payroll foundations setup

HR and Finance stand up everything a run depends on. Statutory types and tax brackets self-seed; the item catalogue, contribution groups, registration numbers and GL accounts are operator work.

Primary actor
HR Admin + Finance Admin
Trigger
Company adopts payroll
Frequency
Once, revisited on Budget changes
Pre-conditions
Chart of accounts exists; HR module subscribed

Flow

  1. 1
    SystemSeeds foundations at boot.Statutory type masters (epf, socso, eis, pcb) and a tax bracket per current + next year (Malaysia PCB {year}: LHDN band scale, reliefs RM9,000 / RM4,000 / RM2,000 per child, caps EPF RM4,000 and SOCSO+EIS RM350). Idempotent — existing data untouched.
  2. 2
    HR AdminBuilds the item catalogue — Basic Salary, allowances, deductions, overtime, tax reliefs (create or spreadsheet import).Each item carries taxability, statutory bases, EA category, GL account, frequency, and flags. Only one item may be basic salary. Nothing is pre-seeded.
  3. 3
    HR AdminDefines contribution groups (e.g. "EPF+SOCSO+EIS, paid by both").Each scheme entry sets who pays and its GL payable account. Configured rates for EPF/SOCSO/EIS are ignored — the legal schedule always applies.
  4. 4
    HR AdminRecords the employer's statutory registration numbers — EPF, SOCSO, EIS, LHDN E-number.One number per scheme; the LHDN entry feeds the Borang E header.
  5. 5
    Finance AdminSets the payroll GL accounts and HRDF toggle/rate in company configuration.Salary expense, PCB payable, and net-salary liability accounts; HRDF at 1% (or 0.5%) when registered with HRD Corp.

Rules & gotchas

  • A year with no tax bracket silently computes zero PCB — the auto-seed exists to prevent this; verify brackets each new year.
  • Deduction items without GL accounts will later block journal posting — map accounts up front.
  • The configured employer-expense account is currently unused (employer costs are not journalled).

End state

Catalogue, groups, brackets, registrations and accounts in place — employees can be enrolled.

BOnboardingPer employee, ongoing

Phase B · Onboarding

Enrol an employee into payroll enrol

A hired employee becomes payable: tax profile completed, statutory numbers recorded, contribution group linked, and standing items assigned.

Primary actor
HR Admin / HR Staff
Trigger
New hire, or salary revision
Frequency
Per employee
Pre-conditions
Foundations configured (Phase A); employee record exists
Touches

Flow

  1. 1
    HR AdminCompletes the payroll profile on the employee master — residency, tax category, children, nationality, date of birth, join date, attendance group.These parameterise every statutory rule: age at pay date, foreign-worker EPF, spouse/child reliefs, proration. Blank nationality defaults to Malaysian; missing birth date to under-60.
  2. 2
    HR AdminLinks the employee to a contribution group.No group → no statutory contributions at all.
  3. 3
    HR StaffRecords the employee's statutory numbers (EPF / SOCSO / income tax).Identity only — eligibility never depends on a number being present; blanks render empty on forms.
  4. 4
    HR StaffAssigns standing items — Basic Salary with the monthly amount, recurring allowances/deductions, dated from the join date (create or bulk import).Active window = status active and pay date within [start, end]. No overlapping assignments of the same item. Annual amounts smooth ÷12 (except bonuses).

Rules & gotchas

  • The basic-salary assignment is what the run pays; the employee's basic-salary field is only a fallback.
  • Salary revisions are modelled by end-dating the old assignment and starting a new one — history stays intact.
  • No bank details exist anywhere — disbursement happens outside the system.

End state

The employee is fully payable: profile, group, numbers and standing items in place.

CMonthly CycleEvery pay month

Phase C · Monthly Cycle

Monthly pay run — draft to paid run

The core cycle. A run is created for the month, employees join it with their period inputs snapshotted, the engine calculates statutory and tax, approval locks the figures, the journal posts the accrual, and the run is marked paid.

Primary actor
HR Admin → Finance Admin
Trigger
Month-end payroll cut-off
Frequency
Monthly
Pre-conditions
Leave/timesheets for the period approved; employees enrolled

Flow

  1. 1
    HR AdminCreates the run — name, pay date, optional period window.Status DRAFT. The pay date's month anchors proration and the MTD month; its year selects the tax bracket. The period defaults to the pay date's calendar month.
  2. 2
    HR AdminAdds employees to the run.Per employee, in one transaction: snapshot basic salary; unpaid leave (approved unpaid days × salary ÷ working days); overtime (approved timesheet hours × hourly rate); absence (working days − present days × daily rate); and one contribution row per statutory scheme — EPF / SOCSO / EIS by the legal schedule, prorated and full-month amounts both stored.
  3. 3
    HR AdminReviews the draft — live estimated figures per line; adjusts items, overrides line inputs, or resyncs after changes.Estimates use the simplified annualised tax and skip proration — advisory only. Changing assignments requires a resync or contributions stay stale.
  4. 4
    HR AdminRuns the calculation.Per employee: prorate → gross → statutory sums → PCB/MTD with year-to-date true-up (bonus by differential method, zakat offset) → net (floored at 0) → HRDF → employer cost. All lines + run totals written in one transaction; status → PENDING_APPROVAL; any journal link cleared.
  5. 5
    HR AdminApproves the run.Status → APPROVED; figures locked; in-app notification to creator and managers. (Reject instead → back to DRAFT with calculated figures zeroed.)
  6. 6
    Finance AdminPreviews the journal, picks the net-salary liability account, posts.Preview surfaces unmapped items — posting refuses until every deduction/statutory line has a GL account. The entry is dated on the pay date and linked to the run.
  7. 7
    Finance AdminPays salaries through the bank (outside the system) and marks the run as paid.Mark-as-paid requires the posted journal. Status → PAID (terminal); notification fired. Settling the salary-payable liability is a separate manual finance entry.
  8. 8
    HR StaffShares payslips.Payslips render on-screen per line (earnings, deductions, statutory shares, PCB). No PDF/e-mail/self-service distribution exists — a known gap.

The journal (one balanced entry per run)

LegSideAccountAmount
Salary ExpenseDRPayroll expense (config)Σ gross salary
Item deductionsCREach item's accountPer employee per item
Employee EPF / SOCSO / EISCRGroup's per-scheme accountEmployee shares
PCBCRPayroll tax (config)Tax per employee
Net salaryCRSalary liability (chosen)Net per employee

Employer statutory shares and the HRDF levy are deliberately excluded — they are tracked on the run but settled and accounted for outside the salary journal.

Rules & gotchas

  • Approval is procedural, not enforced — the same user can calculate and approve (no maker/checker).
  • Approve runs in chronological order: the MTD true-up counts only earlier finalised runs, so out-of-order approval skews later months' PCB.
  • Loan instalments, advances and claim reimbursements must be entered as item assignments — nothing flows in automatically.

End state

A PAID run with locked figures, a balanced GL accrual, and per-line payslip data feeding the annual forms.

DExceptions & VariationsAs they arise

Phase D · Exceptions & Variations

Reject, re-run & special cases exceptions

The paths off the happy road: sending a run back for correction, re-running after approval, mid-month joiners and leavers, and bonus months.

Primary actor
HR Admin
Trigger
Errors found, staff movement, bonus season
Frequency
Occasional
Touches

Reject loop

  1. 1
    HR AdminRejects a pending run.Status → DRAFT; every line's calculated figures zeroed so stale numbers never display as final.
  2. 2
    HR AdminFixes items/inputs, resyncs, recalculates, re-approves.The cycle repeats from calculate; audit captures every transition.

Special cases

CaseBehaviour
Mid-month joiner / leaverBase, allowances, deductions, statutory base and HRDF base prorate by workedDays ÷ daysInMonth (join on the 16th of a 30-day month → ×0.5). OT/leave/absence stay per actual day; bonus never prorates.
Bonus monthAssign an additional-remuneration item — paid in full, folded into paid gross, taxed by the LHDN differential method on top of normal MTD.
Re-run after approvalAllowed (only PAID/CANCELLED block). Status returns to PENDING_APPROVAL and the journal link clears — but a posted journal entry is not deleted: remove it manually before re-posting or the GL doubles up.
CancelAny non-PAID run can be cancelled (terminal). Nothing is cleaned up — no journal reversal, no line reset.
Zero/negative netNet pay floors at 0; the shortfall stays in total deductions.

End state

Corrected figures re-approved, or the run cancelled with a clear audit trail.

EStatutory RemittanceMonthly, by agency deadlines

Phase E · Statutory Remittance

Monthly agency payments remit

Paying the withheld and employer amounts to the agencies. The system supplies authoritative figures; submission and payment happen on the agency portals — no e-files are generated.

Primary actor
Finance Admin / HR Admin
Trigger
Run finalised for the month
Frequency
Monthly — EPF & PCB by the 15th, SOCSO/EIS by the 15th of the following month
Touches

Flow

  1. 1
    Finance AdminReads the run's contribution summaries — employee + employer per scheme, PCB total, HRDF total.Grouped per statutory type on the run; per-employee rows available for reconciliation.
  2. 2
    Finance AdminSubmits and pays on each portal — EPF (i-Akaun), SOCSO/EIS (ASSIST), PCB (e-PCB/e-Data PCB), HRD Corp levy, zakat body.Figures are re-keyed manually — the system produces no CP39, EPF Form A, SOCSO 8A or bank files (explicit deferral).
  3. 3
    Finance AdminClears the payable accounts with manual journals as each payment lands.The salary journal only accrued the employee-side liabilities; employer statutory and HRDF were never journalled and need their own entries.

End state

All agency liabilities for the month settled; payable accounts cleared.

FYear-endJanuary – March

Phase F · Year-end

Annual compliance — EA Forms & Borang E yearend

After the December run is finalised: EA Forms to every employee by end of February, Borang E (with CP8D) to LHDN by 31 March, and the new year's tax bracket verified.

Primary actor
HR Admin
Trigger
Tax year closes
Frequency
Annually
Pre-conditions
All the year's runs approved/paid
Touches

Flow

  1. 1
    HR AdminConfirms every run of the year is finalised.Annual forms aggregate approved/paid runs only, by the pay date's calendar year — a draft December run simply drops out of the totals.
  2. 2
    HR AdminGenerates each employee's EA Form (CP8A) — preview, then PDF — and distributes it.Sections A–F mapped from payroll data and item EA categories; distribution is manual (no e-mail/self-service).
  3. 3
    HR AdminGenerates Borang E with the CP8D listing, overriding headcounts if join/resign data is unreliable, and files on LHDN e-Filing.Header pulls the LHDN E-number from statutory identity; figures are re-keyed into e-Filing (no e-CP8D file).
  4. 4
    HR AdminVerifies the new year's tax bracket against the Budget.The seed created it from last-known defaults — Budget changes to bands or reliefs must be edited in before the January run.

End state

Employees hold their EA Forms, Borang E is filed, and the new year's parameters are confirmed — the January run can proceed.