MAINTENANCEHR record change in progress
Active case · loading…
P

PayEngine

stands in for · SAP / ADP payroll generation
Generate payroll data + validation run (Step 4)

One payroll module, two rhythms: on-cycle is scheduled and hands-off for everyone — it runs whether or not a ticket exists — while off-cycle / ad-hoc is the exception path that eats operator time: terminations, bonuses, corrections, each one requested and validated one at a time.

On-cycle — scheduled

The semi-monthly run for the whole population, computed live from PeopleCore comp data. No intake, no approval routing, no booking request — the closest thing in this suite to a non-event.

Current period
2026-08-01 → 2026-08-15
Scheduled pay date
2026-08-15
Cadence
Semi-monthly · 24 periods / year
Population
6 active employee(s), pulled live from PeopleCore
6
headcount · current preview (not yet run)
29,166.67
total gross (USD)
23,333.34
total net (USD)

Latest cycle — pay line detail

Regular gross = annual salary ÷ 24 pay periods. Withholding shown here is an ILLUSTRATIVE flat 20% rate — same honesty rule the off-cycle final-pay tax lines use below. The point is the routine gross→net structure for the whole population, not tax precision.

EmployeeNameDeptGross WithholdingNet
No run yet — press “Run this pay cycle” below.

Off-cycle — ad-hoc

Run final pay

SOP Step 4, live: pick an employee and their last day worked. PeopleCore's salary + PTO balance and CompHub's earned commission / clawback are pulled automatically — nothing hand-keyed.

Payroll generation runs

Each run validates date coherence and amount before it can complete. A run in error is exactly the SOP's "resolve validation errors before continuing" — in the manual flow that's a stop-and-rework; the automation catches it upstream at intake so it never reaches here.

RunEmployeePeriodScenario GrossStatusValidation
No runs yet — trigger one via /api/run or run the demo.

API

GET /api/oncycle/next
read-only preview of the current scheduled period + computed run
POST /api/oncycle/run
generate + persist the on-cycle run for every active employee (used by the button above)
POST /api/run
{employee_id, period, scenario, amount, effective_start} → run + validation_errors[]
POST /api/final_pay
gross→net final pay statement (used by the form above)
POST /api/pay_statement
{employee_id, gross, pay period context} → jurisdiction-taxed, DocStore-filed paystub
GET /api/runs/{id}
run detail
💬
00:00 manual timer
Cases