Payroll Provider Setup, and map people to payroll on enrollment

Featurekamo-internal
Shipped
August 14, 2026 at 12:19 AM UTC
Author
kamo
Commit
7eb4b11

Replaces the placeholder HRS Overview tab with the real thing. The tab is now "Provider Setup" and the screen is "Payroll Provider Setup", following the email provider screen it is modelled on — the tab key stays "overview" so the settings menu, the launchpad card and every existing bookmark keep working. Built so an HR administrator with no technical background can answer three questions without asking anyone: is this connected, did it sync, and is anything wrong right now. - Provider cards show what each vendor can actually do BEFORE the org commits, so choosing is a comparison rather than a guess, and an absent capability is visible up front instead of discovered on payroll day. - The credentials form is rendered from the BACKEND's field schema. Adding a field to a vendor is one Java change instead of a new React component — the email screen hand-writes one component per provider and has twelve. - Secrets are never sent back to the browser, only a "this is set" flag, and a blank box means unchanged rather than clear. - The health panel leads with the two ways hours silently fail to reach payroll — unmapped people and unmapped earning codes — because both are invisible at the time and only surface as a pay complaint. - A partial run is its own colour. "412 of 415 people" is not a success and not a failure, and rendering it as either hides three unpaid people. - Run detail names the person and the fix, not a stack trace. Issue codes come from the server as stable tokens and are localized here. Enrollment gains the payroll mapping column, because enrolling somebody and telling payroll who they are is one job. Auto-match proposes on exact work-email equality and a human confirms — a name is not an identity, and a wrong link sends one person's hours to another person's pay. An already-claimed provider record stays visible but unpickable. That screen also had no translations at all and rendered raw 19-digit member ids; both fixed, with the display-name lookup extracted to a hook since every timecard screen has the same gap. Platform advanced config gains the seven payroll vendors where Kamo holds one partner registration. Deliberately no card for Dayforce, Workday or UKG: they issue credentials per customer, and the screen renders a card for every enum constant, so one for them would be a form no operator could fill in. RoleRightType mirror gains 197, 198 and 199 — the first two existed server-side and were already missing here, so checkRight had nothing typed to reference.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing