May 21, 2026 Release Notes
A new Time Card PWA Cash Fringe Accuracy check joins the time card checklist, and the way cash fringe gets distributed across days and jobs on certified payroll exports is now better aligned with what each job and each payroll week actually planned to pay. Plus a friendlier Requirements page search, a Project apprenticeship penalty total that calculates at the project level, and a renamed Job Time tab.
✅ Time Card PWA Cash Fringe Accuracy check
A new Time Card PWA Cash Fringe Accuracy compliance check now appears in the time card checklist alongside Gross Pay Accuracy. It compares the cash fringe paid through payroll against what DSPTCH expects for the worker's PWA hours and surfaces a failure when payroll is short.
The check is not applicable when expected cash fringe is zero, failed when payroll cash fringe is missing or below the expected amount, and passed when payroll meets or exceeds expected. The failure detail page names the worker, shows the actual versus expected dollars, and offers a Resolve action.

💵 Cash fringe distribution on per-week and per-job export rows
Two related improvements to how a paystub's cash fringe is distributed across the days and jobs on a time card. Pay-period totals don't change — what shifts is the per-day and per-job breakdown that compliance reports actually display.
- Biweekly IRA pay periods now reconcile per-week. For a worker on a biweekly Federal IRA pay period with overtime in one week and straight time in the other, daily over-coverage from the overtime week previously got stranded — the next week could surface a shortfall on the LCP export even though the pay period as a whole was compliant. Cash fringe is now pooled and distributed by payroll week so the per-week rows on the LCP export, WH-347, and state CPRs line up with the pay period total.
- Per-job rows match each job's planned cash fringe. When a worker logs hours on Job A (configured to pay a per-hour cash fringe) and Job B (no cash fringe configured), the paystub's cash fringe used to smear across both jobs by hours worked — pushing dollars onto Job B that the contractor never intended to pay there. Each job's planned cash fringe is now filled before any residual gets distributed, so per-job WH-347, LCP, and state CPR rows reflect what was actually planned per job.
Surfaces that read per-day and per-job cash fringe values (the LCP export, WH-347, state CPRs, the Pay by Day grid, and the per-day Job Time Card view) will display the new distribution automatically.
🔍 Requirements page polish
A couple of improvements to the Requirements page under Activity → Checklists:
- Search now does fuzzy matching. Searching for
hoursmatches titles containingHour(and vice versa), and accented characters compare loosely. Previously the search was a strict substring match, so plurals, singulars, and small variants in spelling wouldn't surface the requirement you were looking for. - The company filter sticks. Switching the company in the filter dropdown now reliably applies that company's scope. Previously a stale company in the URL could quietly override a freshly selected one from the dropdown.

🏗️ Project apprenticeship penalty now calculates at the project level
On the Project Overview page, the Apprenticeship Penalty total in the prevailing wage exposure breakdown is now calculated against the full project workforce rather than summed from per-contractor rows. Previously, when no single contractor on the project hit the federal apprentice labor-hours threshold on their own — but the project as a whole did — the total could understate the penalty. The grand total now pulls the project-aggregate value, so projects with many small contractors won't quietly undercount.
For non-federal apprenticeship projects, the apprenticeship penalty component stays at zero.
⏱️ Job Billing tab is now Time
On a job, the Billing tab is now called Time and lives at /time. The old /billing URL continues to work — it redirects to /time while preserving any filters and query parameters — and the underlying page is the same one you used before. The change unifies the route under a single canonical path and matches what the tab actually shows.

🛠️ Fixes
- Time Card Days CSV export column alignment is restored — incentive columns previously landed in the Region IDs slots and shifted overtime data right; rows now match their headers, including for jobs with regional pay configurations.
Have feedback or a feature request? Reach out — we'd love to hear from you.
The DSPTCH Team
