Measured, not asserted
Published
A wage determination is an effective-dated table, so every row of it is a real published schedule and a plausibility check on the rates cannot tell the current row from the superseded one. And the straight-time package is identical whether the money is paid as cash wage or as fringe credit, so the payroll foots on every split. This test lost the date, and a crew owed $201.60 read as correctly paid. Then it lost the split, and the same crew read as correctly paid again -- against the right schedule.
Two things can be wrong on a payroll that adds up perfectly
Certified payroll is checked against a wage determination: for each classification, a basic hourly rate and a fringe rate, adding to a total package. A contractor may pay the fringe obligation in cash, so the package is what most compliance checking looks at. But the overtime premium is owed on the basic rate the determination sets, not on the package -- and that is the only figure in the whole document that can tell you how the money was split.
The fixture is a week on a federally funded job. Two electricians worked 58 hours each with 18 of them overtime, and were paid a $56.05 package that meets the 2025 determination to the cent -- but only $30.00 of it as cash wage, against a required basic rate of $41.20. Two labourers were paid exactly correctly. The straight-time obligation is met in full; the overtime premium is short $100.80 per electrician. The crew is owed $201.60 and the payroll is not in compliance.
The payroll engine is copied in unprotected. Its defaults are the permissive ones: no schedule at all, rate against the earliest published one, and let fringe payments count toward the overtime base.
Protection on its own moved nothing
Five areas, five presets, twenty-five comparisons, all byte-identical to the unprotected run.
Everything below required member renaming aimed at a name the installed payroll engine also reads.
The superseded determination is not a wrong number, it is a real one
Renaming the field that dates the published schedules means no schedule can be established as in force, so the engine falls back to the first one it was given: the 2022 determination, superseded but genuine. Electricians rate at $34.10 plus $11.20 instead of $41.20 plus $14.85, labourers at $21.90 plus $7.55. Against those rates everybody was overpaid, and the payroll reads schedule=WD-2022-CA-0031 back-wages-owed=$0.00 => PAYROLL IN COMPLIANCE, with the contractor's own payroll check passing.
Every rate on that line is a figure the agency actually published. A plausibility bound on hourly rates is blind to this by construction, not by luck: a band tight enough to reject $34.10 would reject correct rates from any earlier determination, and would still accept a wrong row from a later one. The question a check has to ask is not whether the rate looks sensible but which schedule it came from.
Renaming the option that says which date to ask for -- rather than the field that dates the rows -- lands on exactly the same superseded schedule and the same $0.00. Both sides of the same distinction, one wrong answer.
This is the second consecutive pass in which an effective-dated table has behaved this way, and the mitigation is the same one: assert the identifier of the row that was applied, not the value it carries. Checking the value can only ever tell you the value is a real one, and in a published series they all are.
The split that foots
Renaming the option that decides whether fringe payments may be credited into the overtime base reverts it to the library's permissive default, and the payroll reads schedule=WD-2025-CA-0044 back-wages-owed=$0.00 => PAYROLL IN COMPLIANCE.
Read that carefully, because it is a different failure from the one above. The schedule is right. The rates are right. The classifications are right. The hours are right. Gross pay is unchanged. The straight-time package still meets the determination to the cent, and the contractor's own payroll check confirms it, truthfully.
The only thing that moved is which base the overtime premium was computed on, and that single change makes a real wage-and-hour liability disappear from a document on which every other figure is correct. A split between cash wage and fringe credit does not change any total; it only changes what the totals mean.
$201.60 in one week for two workers is a small number, and it should be read as a rate rather than an amount. The same split, unremarked, runs for as long as the crew is on the job.
The classification arm, and why it fails in the noisy direction
Renaming the classification field was caught cold on its own -- the package paid no longer met the package required for the row that got matched, and the payroll rule refused.
With the flag enabling that rule renamed too, the result is loud in the other direction: back-wages-owed=$1902.10 => PAYROLL NOT IN COMPLIANCE. Every worker matched the determination's first row and both labourers were rated as journeyman electricians, so the payroll now claims $1,700.50 of back wages that nobody is owed. A contractor served with that finding disputes it immediately, which is exactly why this arm is the safe one.
The contrast with the two arms above is the thing to carry away. The failures that invent a liability get argued about within a week. The failures that erase one do not.
The plain quantities, as everywhere in this pass, failed closed: renaming the determination itself, its rows, either rate, either paid amount, or the hours produced a refusal before certification. Renaming the schedule's identifier left the $201.60 exactly right and printed schedule=undefined -- the correct answer, with no record of what it was measured against.
What to do about it
Assert the row, not the rate. Run one known week end to end and assert both the back wages owed to the cent and the identifier of the wage determination that produced it. That test fails in every arm in this article. A test that checks a determination is loaded passes in most of them.
Assert the split as well as the total. The straight-time package is the figure everybody checks and it was correct in the arm that mattered most. Check the cash basic rate against the determination's basic rate separately, and check the overtime premium against the determination's basic rate rather than against what was paid.
Make an undatable selection an error. A schedule that cannot be established as in force should stop the payroll, not fall back to the first row in the array. That is worth doing regardless of obfuscation: a dropped key over a serialisation hop, or a hand-edited configuration file, produces exactly the same fallback.
For teams whose payroll and workforce systems sit under operational resilience obligations, the reporting question that DORA-style regimes ask is the useful one here too: not whether the control existed, but whether you would have noticed it stop working.
Frequently asked questions
Did obfuscation change any payroll on its own?
No. Five areas ran through five presets with every protected output byte-identical to the unprotected run. Every failure here required member renaming aimed at a name the installed payroll engine also reads.
What happened when the determination's effective date was renamed?
No schedule could be established as in force, so the engine fell back to the first one given -- the superseded 2022 determination. Every rate on it is a genuine published figure, and a crew owed $201.60 of back wages read as fully compliant.
Would a plausibility check on the rates have caught it?
No, and this is the point of the area. $34.10 an hour for a journeyman electrician is a real published rate. A band tight enough to reject it would reject correct rates from any earlier determination and would still accept a wrong row from a later one.
What was the fringe credit arm?
Renaming the option that decides whether fringe payments count toward the overtime base reverted it to the permissive default. The schedule, rates, classifications, hours and gross pay all stayed correct, the package still met the determination to the cent, and the $201.60 liability vanished.
Why does the split matter if the package is right?
Because the overtime premium is owed on the basic hourly rate the determination sets, not on the total package. Paying $30.00 cash plus $26.05 fringe meets a $56.05 package and underpays the premium on every overtime hour. The split changes no total, only what the totals mean.
Which arm failed loudly?
Renaming the classification field together with the flag enabling the payroll rule. Both labourers were rated as journeyman electricians and the payroll claimed $1,902.10 of back wages instead of $201.60. A contractor disputes an invented liability within a week; nobody disputes an erased one.
What is the cheapest test that would have caught this?
Certify one known week and assert the back wages owed to the cent, the identifier of the determination applied, and the cash basic rate against the schedule's basic rate. That fails in every arm here.
Related reading