Payroll adjustments — 24 months, and what to do about it

Every pay adjustment on work that already has a calculated price — where the volume, the money and the office time go, and the ranked list of what actually moves them.

Generated Sep 10, 2026 · source: TrackVia MCP Jobs Tasks Pay Info FULL (view 2827), joined to MCP Jobs Tasks General Data FULL (view 2805) and MCP Jobs General Data FULL (view 2803) · 61,742 task-pay rows pulled, 21,405 carried an adjustment signal, 11,481 of those are in this report’s population · Sep 10, 2024 to Sep 8, 2026

Pay adjustments
11,481
on 49,930 task-pay rows · ~5,740/yr
Adjustment rate
22.99%
nearly one row in four is re-priced by hand
Paid, trimmed
$1,032,188
$2,074,347 pre-trim · ~$516,094/yr
Median adjustment
$90
$50 – $160 interquartile · 8,181 paid rows
Volume growth
1.68×
4,285 → 7,196 · like-for-like 12-month halves
No category recorded
53.0%
6,090 adjustments with a blank category

1. Course of action

The biggest number in this analysis is not an automation opportunity. It is that Paper/Wire and insulation are priced wrong, and that $97,161 a year is paid on requests the office already judged invalid or grasping. Software is rank 3 and below.

Ranked by impact. Every prize below is computed on this report’s population; per-year figures are the 24-month figure halved. Jared, 2026-09-10: "please make suggestions for course of action - what will make the biggest impact and how you would suggest tackling them."

The top three, in order.
  1. Two trade price lists are wrong. Fix the price, not the workflow. — $143,892/yr · 1,421 office touches/yr
  2. Make review a payment gate, and decide what "Grasping" is worth. — $97,161/yr
  3. A fixed-amount menu on the request form for the four repeat reasons. — $80,831/yr · 834 office touches/yr
1

Two trade price lists are wrong. Fix the price, not the workflow.

POLICY (no software)

Paper/Wire generates an adjustment on 54.0% of its task rows against a 23.0% population rate - 2,084 adjustments, 18.1% of everything in the report, $179,714 over 24 months. Its dominant request theme is windows / flashing / trim: 674 requests, $63,316, median $100. The rate is 62.9% in Orem and 66.1% in Salt Lake against 25.1% in Ogden - a 2.5x spread on the same task, which is a price difference, not a difficulty difference. Separately, the insulation family has no working base rate at all: Insl Attic 100.0%, Insl Walls 98.5%, Insl Pre 1 94.7% - 382 adjustments on 391 task rows. One crew, Segundo Heriberto Torres, is 505 adjustments at an 85.2% rate across Insl Pre 1 / Insl Walls / Insl Attic / Insl Foam 1 / Shutters, and 331 of his requests read as "extra scope". He is not grasping; he is being paid through the wrong channel.

The pattern. 21 teams sit above a 60% adjustment rate on 30+ task rows. Eight of them have Paper/Wire as their top task type and the top one is an insulation crew. Chronic adjusters are not spread across trades - they cluster on two price lists.

$ / year
$143,892
adjustments / year
1,421
office touches / year
1,421

Basis: 598/yr if Paper/Wire ran at the 23.0% population rate, plus 823/yr if the 21 chronic teams did

This is money that stops flowing through the ADJUSTMENT channel, not money saved. Most of it is work the crews really did and would be paid for in the base rate instead. The genuinely recoverable slice is the grasping premium - see rank 2. Treat the $ as "volume that leaves the office queue".

High-rate teams and Paper/Wire overlap on 1,264 adjustments / $103,770. The union is 3,179 adjustments = 27.7% of the whole population, $287,783 over 24 months.

Confidence
HIGH on the diagnosis (the divisional spread and the 100% insulation rate are unambiguous). MEDIUM on the size - the counterfactual rate is an assumption.
What it takes
TrackVia: None required. Rates live in Task Team Additional Task Pay :: Additional Pay Per Foot (field 3645) and in the estimating price list, both editable today.
Scripts: None.
Policy: Estimating + division managers decide whether window taping / flashing is inside the Paper/Wire price and what the insulation tasks are worth.
Do not rebuild
Nothing to build. Any instinct to automate Paper/Wire adjustments is automating a pricing error.
Dependencies
None. This can start this week and does not wait on anything else.
First step
Pull the 674 Paper/Wire windows-flashing requests and put them in front of estimating with one question: is window taping in the Paper/Wire price? Then do the same for the insulation family with the one crew that owns it.
2

Make review a payment gate, and decide what "Grasping" is worth.

BUILD (1-2 months) + POLICY

$153,997 over 24 months - $76,999/yr - was paid on requests the office itself categorised GRASPING. 1,214 of 1,900 grasping requests were paid, 63.9%, median $100. A further $40,323 ($20,162/yr) was paid on requests marked "Not a Valid Request" - 408 of 629, 64.9%. And $345,198 ($172,599/yr) was paid on the 4,131 requests that carry no evaluation at all, 63.1% of them. In total $192,760/yr leaves the company with no valid recorded approval, and $97,161/yr of that is explicitly labelled invalid or grasping by the reviewer who looked at it.

The pattern. The evaluation field is advice, not a control. Nothing in the schema connects a decision to a payment.

$ / year recoverable
$97,161
$ / year under control
$192,760

Basis: $76,999/yr paid on Grasping + $20,162/yr paid on Not a Valid Request. Both are decisions the office already made and then did not enforce.

"Never evaluated but paid" may partly be requests reviewed verbally or in the free-text results box. Treat the $172,599/yr as uncontrolled rather than wrong.

Confidence
HIGH on the counts. MEDIUM on how much is truly recoverable - some grasping-labelled requests were reduced rather than refused, and the reduction is invisible because the approved amount is not stored.
What it takes
TrackVia: No new table. A Before Update branch on Jobs Tasks that refuses a non-zero Additional Pay Amount (684) when Payroll Adjustment Evaluation is blank or Not a Valid Request.
Scripts: Jobs Tasks :: Before Update. Note line 33 ALREADY throws when 684 is set - the new gate has to be written around that throw, not on top of it.
Policy: Does "Grasping" mean $0? Today it means a $100 median payment. That is a management decision, not a build.
Do not rebuild
The enforcement half exists. Proposed Additional Pay Amount (7640), Proposed Payroll Adjustment Results (9542), Approve Proposed Pay Amounts, Adjustment - More Info Needed From DM (9543) and Has Pending Payroll Adjustment Flag (9545) are a working propose/approve workflow. Jobs Tasks :: Before Update lines 19-22 already restrict approval of Payroll Adjustment Results to kyle@, ed@, it@ and jared@cascade.build. Suspend This Team From Submitting Payroll Adjustments (7637) + Task Teams :: Payroll Adjustments Suspension End Date (7636) are the team-level lever. None of this needs building again.
Blocker
Additional Pay Amount (684) is ONE currency slot and Before Update line 33 throws when it is already set. Any automated write - fuel, menu amount, gate - competes for that one slot. Additional Team Pay Amount (4365) is a separate summand in Task Pay Amount (682) and is the free lane.
Dependencies
Wants rank 9 (a structured decision + approved amount + reviewer) to be enforceable at all. Can ship the refuse-on-Not-Valid half without it.
First step
Get a ruling on Grasping. If Grasping means zero, the gate is a five-line script branch and $77,000/yr stops moving.
3

A fixed-amount menu on the request form for the four repeat reasons.

BUILD (1-2 months)

1,668 adjustments - 14.5% of the population, $161,662 over 24 months, $80,831/yr - are one of four reasons that recur at a stable price: material not ready / waiting / access (917, $97,343), return trip / second visit (715, $62,277), small job / minimum (178, $15,290) and weather (83, $9,895). They price themselves: the ten most common amounts are 66-81% of each theme's paid rows, 92.4% of every paid adjustment in the file is a multiple of $5, and the top twenty amounts alone cover 77.4% of all paid rows. The office is re-deciding $50, $60, $80 and $100 several hundred times a year.

$ / year routed automatically
$80,831
office touches / year
834

Basis: 1,668 adjustments over 24 months that a crew could self-serve from a priced menu instead of writing a sentence for someone to read.

Collapses the amount variance on these four reasons, which is what makes them auditable afterwards.

Confidence
HIGH. The clustering is the strongest quantitative signal in the whole dataset.
What it takes
TrackVia: One crew-facing choice field (the reason menu) + one currency default per choice. Write the amount to Proposed Additional Pay Amount (7640), never to 684.
Scripts: A Before Update branch that maps choice -> amount into 7640 and leaves the existing approve step in place.
Policy: Agree the price on each line. That is a 30-minute meeting, and it is the whole design.
Do not rebuild
Reuse the Proposed/Approve workflow (7640 / 9542 / Approve Proposed Pay Amounts). Do not invent a second approval path.
Dependencies
Depends on rank 4 - the menu IS the reason vocabulary. Build them as one change.
First step
Price the four lines. Start from the observed medians: material $100, return trip $80, small job $60, weather $120.

The rest of the list

4

Fix the reason vocabulary. Neither reason field answers "why".

QUICK WIN (weeks) - enabler for 2, 3 and everything reportable

Payroll Adjustment Category (6491) is BLANK on 53.0% of the population - 6,090 adjustments, 4,065 of them paid, $542,073 over 24 months ($271,037/yr) with no category at all. And its 14 choices are outcome labels - Valid Request, Grasping, Standard Adjustment - not reasons. Tipo de Ajuste (4589), the crew-facing field, has exactly FOUR choices: Dificultad extremo 44.4%, Viaje extra 25.8%, Reparaciones 25.4%, Diferencias con los planos 16.3% [~600 requests from one pay period, read live 2026-09-10]. There is no choice for ladder or height, none for material, none for weather, none for small job, and no "other". A crew with a height complaint has to file it as "extreme difficulty" or leave it blank. That is why the category is blank on half the file and why the office reads 10,457 free-text sentences a year.

$ / year unclassified
$271,037
adjustments / year unclassified
3,045

Basis: Nothing in ranks 2, 3, 5 or 6 can be targeted, measured or audited while the reason is a Spanish sentence. This is the cheapest change with the widest reach.

Confidence
HIGH. Both counts are direct.
What it takes
TrackVia: Extend Tipo de Ajuste (4589) with the missing reasons and make it required on the request form. Leave 6491 alone as the office OUTCOME field and stop treating it as a reason field.
Scripts: None.
Impact surface: Adding a choice to 6491 touches 19 views, 3 forms, 1 filter and 1 calculated field (Adjustment Category Text). Adding to 4589 is far cheaper - it is a crew-facing multi-select on the request form. Prefer 4589.
Policy: The reason list already exists - it is the theme table: extra scope, ladder/height, windows/flashing, fuel/travel, hours claimed, material waiting, return trip, small job, weather, footage dispute.
Do not rebuild
Do not build a new classification field. Two already exist and the problem is their choice lists, not their absence.
Dependencies
None. Do it first.
First step
Write the reason list off d["themes"] and add it to 4589. One field edit, one form edit.
5

Ship the ladder per-foot adder - but settle the no-scaff definition before setting any rate.

BUILD (1-2 months) - mechanism already live

1,228 adjustments (10.7% of the population, $150,362 over 24 months) sit on jobs built without scaffold; 749 of them ($95,198) are on trades the existing 4365 footage switch already covers. Annual adjustment spend on no-scaff jobs is $75,181, of which $36,473 is EXCESS over what the same trades generate on scaffold jobs. On measured footage - now available for 70.0% of no-scaff jobs, up from 33.6% - the budget-neutral rate is $0.0281/sq ft per covered task (excess-neutral) or $0.0538 all-in; on the strict stucco-only cut, $0.0129 and $0.0291.

The pattern. The rate moved 6.2x from the v3 figure and NOT because the money changed. v3 could only see 187 no-scaff jobs, on view 2807, and those were the big ones - ~2,047 ft each against a 671 ft measured median across all no-scaff jobs. No-scaff houses are small: only 31.1% carry any stucco footage at all, against 67% of scaffold jobs. Do not put $0.0453 on Additional Pay Per Foot (3645).

$ / year
$75,181
excess $ / year
$36,473
adjustments / year
614

Basis: All no-scaff adjustments / the excess over the scaffold benchmark. Combined with the fuel build this covers 23.0% of the population by count and 25.0% by dollars.

Confidence
MEDIUM. The rate is now measured rather than implied, but the POPULATION is the weak link - see risk.
What it takes
TrackVia: One new choice on Task Team Additional Task Pay :: When To Apply ("Only jobs without scaffold"). Two new branches in Additional Team Pay Amount (4365) for Paint and Vinyl.
Scripts: Jobs Tasks :: Before Update lines 82-86 - one extra branch to test the new choice.
Gap: Paint and Vinyl are the #3 and #4 no-scaff excess trades ($8,115/yr and $2,952/yr) and NEITHER is in the 4365 footage switch. A rate set on them today silently pays $0.
Do not rebuild
The whole chain is live: Additional Pay Per Foot (3645) -> Jobs Tasks :: Before Update lines 78-94 -> Additional Team Pay Per Foot (4367) -> Additional Team Pay Amount (4365) -> Task Pay Amount (682). 4365 is a SEPARATE summand from Additional Pay Amount (684), so the one-slot blocker on 684 does not apply here. The second currency slot everyone asked for already exists.
Risk
Jobs :: Scaff Footage (5513), recovered on 2026-09-10, says only 1 of 61 jobs the task rule calls no-scaff was bid with zero scaffold. The v3 cross-check against view 2807 said the same thing more mildly (54 of 262). Estimating priced scaffold on jobs where no Set Scaff task was ever paid. Whichever test the build uses defines a materially different population. This is now a bigger open question than the rate.
Watch out
Task Pay Amount (682) has a Minimum Task Pay Amount floor branch that tests Calculated Pay + Additional Team Pay against the minimum. Adding a rate can push a task OFF the floor and change the arithmetic path, not just the total. Re-read that branch before shipping.
Dependencies
Blocked on a decision, not on code: which test defines "no scaffold".
First step
Pick the no-scaff test - Scaff Footage (5513) = 0, or absence of a Set/Fix/Remove Scaff sibling task. Then re-run the sizing on that population; the rate will move again.
6

Ship the fuel gate as designed.

BUILD (in flight)

Fuel / travel / distance plus return trip is 1,583 adjustments, 13.8% of the population, $126,341 over 24 months ($63,170/yr). Roughly 41% clear the 30-mile crow-flies gate (Sep 1 measurement), so ~$26,000/yr and ~324 requests/yr would auto-pay. It also carries the highest defer-to-office rate of any theme at 45.8% - it is the single biggest generator of "unclear, ask the office".

$ / year
$26,000
adjustments / year
324
office touches / year
792

Basis: Half the 24-month union auto-triaged; the qualifying 41% auto-paid.

Confidence
MEDIUM-HIGH. Design is done (Sep 8-10, fuel-analysis/v2-button); the 41% is a Sep 1 measurement not recomputed on this population.
What it takes
TrackVia: As already specified in the fuel work. Amount lands in Additional Pay Amount (684).
Scripts: As specified.
Policy: Confirm the 30/45/60-mile tiers and the $0/$50/$75/$100 amounts.
Do not rebuild
Already built to spec elsewhere. Do not re-scope it here.
Blocker
Fuel writes to 684, the single currency slot with the line-33 throw. Ladder (4365) and fuel (684) can coexist, but two 684-writers cannot. Sequence any second 684 automation behind this one.
Dependencies
Independent of everything above.
First step
Recompute the 41% inside/outside split on the v4 population before locking the tiers.
7

Ogden evaluates everything and decides nothing.

POLICY (no software)

68.3% of Ogden's evaluated requests come back "Unclear - defer to office", against 19.4% in the rest of the company. Ogden is 9.9% of adjustments and 35.7% of all defers - 685 of 1,919. It is not disengagement: Ogden has the BEST evaluation coverage in the company (88.4% of requests evaluated, against 62.0% in Orem and 50.3% in St. George) and marks only 1.8% not-valid and 0.7% too-high. The division looks at everything and forwards it.

office touches / year
245
$ touched, 24 months
$56,224

Basis: If Ogden deferred at the 19.4% non-Ogden rate it would send 195 requests to the office instead of 685 - 490 fewer over 24 months.

Confidence
HIGH on the number. The cause is a management question, not a data question - it may be an authority problem rather than a willingness one.
What it takes
TrackVia: None.
Scripts: None.
Policy: One conversation with the Ogden DM about what they are and are not empowered to decide.
Dependencies
None.
First step
Ask the Ogden DM what they would need in order to approve a $80 return-trip request without forwarding it.
8

Add five fields to view 2827 and retype 4269. Then this analysis reruns itself.

QUICK WIN (weeks)

Tipo de Ajuste (4589), Request Completed Date (4269), Hours Late (4270), Review Date (9480) and Adjustment Request AI Summary (6409) exist on EVERY Jobs Tasks record but sit only on the table default view (view 58), which carries ~360 fields and times out on every read. Adding them to MCP Jobs Tasks Pay Info FULL (view 2827) makes reason, lateness and request-to-decision turnaround reportable for the whole population from the next nightly export onward. That is a VIEW EDIT, not a schema change. Retyping 4269 from paragraph to date IS a schema change - it currently holds a date as text, so TrackVia cannot sort or subtract it - and needs a migration of the existing values.

What it unlocks. Median 5.3 days from request to review, p90 8.4 days, 19.0% over a week [216 request/review pairs, one pay period, read live 2026-09-10]. Nobody has had this number before. It is a floor, because unreviewed requests - the ones that sit longest - have no review date to measure.

Prize
Enabler

Basis: Turns a 2.8%-coverage 600-row sample into a full 24-month series, and removes the "turnaround cannot be computed" caveat from every future report.

Confidence
HIGH. The fields and the view both exist; this is configuration.
What it takes
TrackVia: View 2827 - add 5 fields. Field 4269 - change type paragraph -> date (schema change, needs a data migration).
Scripts: None for the view edit.
Policy: None.
Do not rebuild
Hours Late (4270) is ALREADY computed and already drives Workato view "Workato_ payroll adjustment request more than 48 hours late" (view 1253). Do not build lateness again. AI Summary (6409) is already populated on 81.8% of the live queue - extend it, do not restart it.
Dependencies
None. Cheapest item in the list.
First step
Add the five fields to view 2827. It costs one person ten minutes and every future pass of this analysis gets better.
9

Replace the free-text results box with a decision, an amount and a reviewer.

BUILD (1-2 months)

Payroll Adjustment Results is a short-answer text field with 2,842 distinct values across 10,021 filled rows. Reviewers sign with initials - AS 1,552, MP 503, Ron 416, SH 253, KW 201, RO 159 - and that is the ONLY trace of who decided anything in the entire payroll-adjustment process. Six people carry the whole review load and the system does not know their names. The approved amount is also not stored separately, which is why "Valid, but too high" (1,010 requests, 81.4% paid, $124,556) cannot be audited: there is no record of what it was reduced FROM.

Prize
Enabler

Basis: No $ of its own. It is what makes rank 2 enforceable, rank 7 measurable and reviewer workload visible for the first time.

Confidence
HIGH.
What it takes
TrackVia: Decision choice field + Approved Amount (currency) + Reviewer (user field). Keep the free text as a note field, do not delete it.
Scripts: None strictly required; the gate in rank 2 reads the new decision field instead of parsing text.
Policy: Reviewers stop signing with initials.
Do not rebuild
Proposed Payroll Adjustment Results (9542) already exists as the proposal side. Model the new decision field on it rather than inventing a parallel vocabulary.
Dependencies
Pairs naturally with rank 2. Ship them together.
First step
Agree the decision vocabulary - Approve / Approve reduced / Refuse / Need more info - and whether the reviewer field is required.

Grouped by what kind of work it is

GroupItems, in rank order
Quick wins — view and field edits, weeks8. Add five fields to view 2827 and retype 4269. Then this analysis reruns itself.
4. Fix the reason vocabulary. Neither reason field answers "why".
7. Ogden evaluates everything and decides nothing.
Builds — scripts and fields, 1 to 2 months3. A fixed-amount menu on the request form for the four repeat reasons.
2. Make review a payment gate, and decide what "Grasping" is worth.
5. Ship the ladder per-foot adder - but settle the no-scaff definition before setting any rate.
6. Ship the fuel gate as designed.
9. Replace the free-text results box with a decision, an amount and a reviewer.
Policy — no software1. Two trade price lists are wrong. Fix the price, not the workflow.
7. Ogden evaluates everything and decides nothing.
the Grasping ruling inside 2

Sequencing

  1. Week 1: rank 1 (pricing conversation) + rank 8 (view 2827 edit)
  2. Week 2-4: rank 4 (reason list on 4589) + rank 7 (Ogden conversation)
  3. Month 2: rank 3 (fixed-amount menu) built on the rank 4 vocabulary
  4. Month 2-3: rank 2 (payment gate) + rank 9 (structured decision) as one change
  5. In parallel: rank 6 (fuel) on its existing schedule
  6. Blocked: rank 5 (ladder) until the no-scaff definition is decided
The recommendation. Do rank 1 and rank 8 THIS WEEK - one is a pricing conversation with no software in it and the biggest prize on the list, the other costs a view edit and makes every future pass of this analysis better. Then rank 4 (the reason list), because ranks 2, 3, 5 and 6 all get easier once a crew can say WHY in a field instead of a sentence. Then ranks 3 and 2 together - they are the same form and the same Proposed/Approve chain. Ship rank 6 (fuel) on its existing schedule. HOLD rank 5 (ladder) until somebody decides what "no scaffold" means; the rate is now measured but the population is not settled, and shipping a rate against the wrong population is worse than shipping nothing.

Hard blockers any build has to respect

Mechanisms that already exist — do not rebuild these

Honest limits on the numbers above

2. Volume trend

Like for like — the two 12-month halves of the same window, so neither side is flattered by which months it contains — adjustments went from 4,285 to 7,196 (1.68×), and trimmed dollars from $354,487 to $677,701 (1.91×). Task-pay rows themselves only grew 1.41×, so this is not just more work: the share of rows carrying an adjustment rose from 20.69% to 24.63%, +3.94 points. The median adjustment moved from $80 to $100.

Like-for-like halfAdjustmentsTask-pay rowsRateTrimmed $Adjustments / monthMedian
Year 1 — Sep 10, 2024 to Sep 10, 20254,28520,71520.69%$354,487357.1$80
Year 2 — Sep 10, 2025 to Sep 9, 20267,19629,21524.63%$677,701599.7$100
Change1.68×1.41×+3.94 pp1.91×1.68×$20

Day-based halves of the window, so both sides are the same length (year 2 is 2 days short). This is the honest year-on-year comparison; the calendar-year averages above are skewed by which months each side contains.

Month by month, by task type

  

■ bars: the selected measure per month  ·  ━ line: adjustment rate, that type’s adjustments divided by its task-pay rows in that month  ·  the last month (Sep 26) is partial and is drawn pale.

3. The ladder adder — a per-foot rate on houses built without scaffold

Jared’s definition, Jared, 2026-09-10. The ladder auto pay adjustment is a specific dollar amount PER FOOT added to certain trades when the house was built WITHOUT scaffold. The population is every adjustment on a covered trade on a no-scaff job - including requests whose text never mentions a ladder - and it excludes the majority of the old ladder/height theme, which lands on jobs that did have scaffold.

Section 8 of findings.md ("The ladder question, quantified both ways"). Reading A (ladder = the height/scaffold text theme) and Reading B (ladder = a tiered fee schedule) are both wrong. It is a per-foot adder gated on the absence of scaffold, so it is sized off no-scaff JOBS and FOOTAGE, not off request text.

Identifying a no-scaff job — and why that is now the biggest risk

A job is SCAFF if its lifetime task list (MCP Jobs Tasks General Data FULL, view 2805, 69,112 task rows) contains any of Set Scaff / Fix Scaff / Remove Scaff / Set Brick Scaff / Scaff Pickup. It is NO-SCAFF if it has none of those AND has reached at least one post-scaffold production milestone task (Stucco Color, Paint, Stucco Brown, Scratch Coat, Siding, Rock, Brick, Gutters, Soffit/Fascia, 4-Way Pass, QC Walk, Base Install Complete, Watering, Cleanup). Jobs with no scaff task and no milestone task are IMMATURE (not yet built) and are excluded from both sides rather than counted as no-scaff.

Jobs classified
2,869 scaff
556 no-scaff · 265 immature · 481 unknown
No-scaff share
16.2%
of 4,171 in-window jobs, classified
No-scaff adjustments
1,228
31.6% of 3,882 task rows · $150,362
Definition cross-check
1 of 61
task-rule no-scaff jobs that were actually bid with zero Scaff Footage
Settle the definition before setting any rate. The two tests agree on the SCAFF side (476 of 480) and disagree almost completely on the NO-SCAFF side: only 1 of 61 jobs the task rule calls no-scaff carry Scaff Footage = 0. The v3 cross-check against view 2807 said the same thing more mildly (54 of 262, 20.6%). Estimating priced scaffold on jobs where no Set Scaff task was ever paid. Whichever test the build uses will define a materially different population, and neither is a record of what physically stood on the site. This is now the single largest unresolved risk in the ladder adder - larger than the rate.

Source: Jobs :: Scaff Footage (field 5513), recovered 2026-09-10 for 535 jobs as a Job lookup on COO All Payroll Adjustments (view 2941). It is an ESTIMATE written at bid time. These 535 jobs are the jobs sitting in the LIVE adjustment queue, i.e. recent jobs that generated an adjustment. It is not a random sample of the 24-month job universe. Overall agreement across 541 testable jobs is 88.2%, but agreement on the no-scaff side alone is 1.6%.

Known weaknesses of the task-type test (6)

Which trades actually carry the effect

No-scaff task rows generate $38.73 of adjustment per task row against $19.94 on scaffold jobs — $18.79 of excess per task, $36,473/yr, inside $75,181/yr of total no-scaff adjustment spend. The adder is meant to replace the excess, not the whole figure.

TradeNo-scaff task rows$ / task, no-scaff$ / task, scaffExcess $ / taskExcess $ / yrIn the 4365 footage switch?
Soffit/Fascia366$87.21$18.37$68.84$12,598.33yes
Siding537$55.19$18.99$36.20$9,719.00yes
Paint232$97.67$27.72$69.95$8,114.72no
Vinyl199$47.17$17.50$29.67$2,952.28no
Housewrap329$28.03$17.25$10.78$1,773.95yes
Gutters423$5.62$1.59$4.04$854.22no
Rock187$19.32$11.39$7.94$741.93yes
Stucco Brown190$18.32$13.05$5.27$500.85yes
Stucco Color192$34.55$30.49$4.06$389.57yes
Return/Fix65$23.31$13.53$9.78$317.84no
Cleanup72$3.89$0.00$3.89$140.00no
Brick48$29.52$25.09$4.42$106.20yes
Insl Walls44$171.02$167.62$3.41$74.95no
Scratch Coat191$2.23$1.57$0.66$63.09yes
Watering111$0.99$1.51$-0.52$-28.66no
Porch OSB79$0.63$3.80$-3.16$-124.97no
Insl Attic42$68.81$86.28$-17.47$-366.94no
Foundation Plaster85$20.56$31.35$-10.79$-458.55no
Insl Pre 142$47.86$90.23$-42.37$-889.85no
Paper/Wire298$29.70$45.78$-16.07$-2,395.17yes
All trades3,882$38.73$19.94$18.79$36,473

Soffit/Fascia, Siding, Paint and Vinyl are the four trades carrying the effect. Negative excess — the trade generates less adjustment on no-scaff jobs than on scaffold jobs — on Watering, Porch OSB, Insl Attic, Foundation Plaster, Insl Pre 1, Paper/Wire, so they are excluded from any adder. Additional Work and Back Charge sit inside the population but outside this table, because they carry no footage. Trades with fewer than 150 classified task rows are omitted.

The request text is the wrong population to size from. Only 28.9% of ladder/height/scaffold-theme adjustments land on no-scaff jobs; 71.1% land on jobs that DID have scaffold. The theme is therefore mostly about scaffold pay - erecting, fixing, moving and striking scaffold - not about working off ladders. It is still a real signal: 28.9% against a 12.6% baseline share is a 2.29x concentration, and the no-scaff median is $200.0 against $100.0 on scaff jobs. An adder sized off the text theme would be sized off the wrong population.

Budget-neutral rates on measured footage

Footage is now measured on 389 of 556 no-scaff jobs (70.0%), up from 25.7% when the only readable footage sat on the 1,341-record RECENT jobs view. Coverage of no-scaff jobs went from 25.7% to 70.0%. But only 31.1% of no-scaff jobs carry Stucco Footage above zero at all, against 67% of scaff jobs, and the no-scaff median is 708 ft against 2,965 ft on scaff jobs. No-scaff jobs are disproportionately small and non-stucco - siding, vinyl and low elevations. That is a fact about WHO the adder pays, not a data gap.

BasisJobsFootageExcess-neutral $/ftAll-in $/ftWhat it means
Per covered task — what the live chain does3892,594,432 ft$0.0281$0.0538USE THIS ONE for a rate that goes on Additional Pay Per Foot (3645). A house with 8 covered tasks receives the adder 8 times.
Per house — footage counted once per job389260,970 ft$0.2791$0.5346Comparable to the v3 figure, which also counted footage once per job. Only meaningful if the adder were a single per-house payment, which the existing chain is not.
Strict stucco-only, real wall area1732,346,843 ft$0.0129$0.0291USE THIS for the stucco-family trades (Stucco Brown, Stucco Color, Scratch Coat, Paper/Wire), whose 4365 footage fields are stucco areas.
v3, for comparison187—$0.0453$0.0848Superseded. 6.2x higher below the same-basis v4 figure, because it was sized on the 187 biggest no-scaff jobs.
The rate that goes on the field is $0.0281 per square foot (excess-neutral), or $0.0538 all-in. That is the per-covered-task rate, because Additional Pay Per Foot (field 3645) is multiplied by footage on every covered task — a house with eight covered tasks receives the adder eight times. Do not put $0.0453 on field 3645. Two things, and neither is the dollars. (1) BASIS: v3 divided by footage once per house; the live chain multiplies the rate by footage on every covered task, so the honest denominator is ~7x larger. (2) SAMPLE: v3 could only see 187 no-scaff jobs and they were the large ones. Correcting the sample alone raises the per-house rate 6x. Do not put $0.0453 on Additional Pay Per Foot (3645) - it would underpay by roughly 6x per house.

Footage is NOT one unit. Stucco / Paint / Housewrap footage is wall square footage in the thousands per house; Soffit/Fascia, Siding, Gutters, Rock and Brick footage are linear or small-area figures in the hundreds. A single company-wide $/ft rate would therefore pay a soffit crew ~12x less than a paint crew for the same house. The adder must be set per trade in that trade's own footage unit, or applied to one common wall-footage figure.

Per-trade measured rates (indicative for the non-stucco trades)
TradeTask rows with footageMeasured footageMedian ft / taskAdjustment $, 24 moExcess-neutral $/ftAll-in $/ftIn 4365 switch?
Soffit/Fascia33782,285163$31,319$0.3054$0.3806yes
Siding483223,676197$28,199$0.0851$0.1261yes
Paint210148,163195$21,025$0.1026$0.1419no
Vinyl19443,255167$9,207$0.1344$0.2129no
Housewrap287171,220223$8,918$0.0232$0.0521yes
Insl Walls4410,555197$7,525$0.0142$0.7130no
Paper/Wire234260,749391$7,148$-0.0137$0.0274yes
Stucco Color173243,875909$6,183$0.0037$0.0254yes
Stucco Brown169227,5651,393$3,031$0.0036$0.0133yes
Insl Attic4210,005197$2,890$-0.0734$0.2889no
Gutters348214,401204$2,379$0.0085$0.0111no
Insl Pre 14210,005197$2,010$-0.1779$0.2009no
Foundation Plaster8114,102163$1,658$-0.0625$0.1175no
Return/Fix5836,109230$1,435$0.0180$0.0397no
Brick4342,051600$1,417$0.0080$0.0337yes
Rock123177,6001,711$359$-0.0059$0.0020yes
Watering93176,5422,060$110$-0.0002$0.0006no
Porch OSB63137,5962,087$50$-0.0014$0.0004no
Cleanup5027,865197$40$0.0014$0.0014no
Scratch Coat128173,6571,693$0$-0.0012$0.0000yes

Company-wide cost at a flat rate, on 1,297,216 ft of annual covered footage: $0.0050/ft = $6,486/yr · $0.0100/ft = $12,972/yr · $0.0200/ft = $25,944/yr · $0.0500/ft = $64,861/yr · $0.1000/ft = $129,722/yr · $0.1500/ft = $194,582/yr · $0.2500/ft = $324,304/yr.

The mechanism is already live — this is a trigger condition, not a build

The per-foot adder mechanism already exists and is live. This is not a new build - it is a new trigger condition on an existing chain.

StepTrackVia objectWhat it does today
1Task Team Additional Task Pay (table) :: Additional Pay Per Foot (field 3645)One record per Task Team x Task carrying a $/ft rate and a When To Apply choice (Always / Only Buildings / Only SF).
2Jobs Tasks :: Before Update (BEFORE_UPDATE), lines 78-94On any unpaid task with a Task Team, find()s the matching Task Team Additional Task Pay record, applies the When To Apply test against Job.Building Flag, and writes the rate to Additional Team Pay Per Foot (4367). Sets it to null when no rule matches.
3Jobs Tasks :: Additional Team Pay Per Foot (field 4367, currency)The per-task rate slot. 8 usages. On 2 forms (Job Task Office Form, Payroll View Job Task Form) where it drives a show/hide rule, and on MCP Jobs Tasks Pay Info FULL (view 2827).
4Jobs Tasks :: Additional Team Pay Amount (field 4365, calculated currency)rate x the job footage for that task type, plus Additional Team Pay Fixed Amount. This is the per-foot multiplication, already written.
5Jobs Tasks :: Task Pay Amount (field 682, calculated currency, 212 usages)Sums Calculated Pay Amount + Additional Pay Amount + Additional Team Pay Amount - Amount to Pay Later + Backcharge Amount, with a Final Pay Amount override and a Minimum Task Pay Amount floor.
The one-slot blocker does not apply here. The Sep 8 blocker - Jobs Tasks :: Before Update line 33 throws when Additional Pay Amount (684) is already set - governs field 684 only. Additional Team Pay Amount (4365) is a SEPARATE summand in Task Pay Amount (682), so a ladder adder routed through 4367/4365 cannot collide with a fuel adjustment sitting in 684. This is the single most important schema finding for this build: the second currency slot the Sep 8 note asked for already exists.
Paint and Vinyl are not in the footage switch. Paint is the #3 no-scaff excess trade at $8,115/yr and Vinyl the #4 at $2,952/yr, and NEITHER is in the switch - the formula returns 0 for them, so a rate set on those tasks would silently pay nothing. Covering Paint and Vinyl means adding two branches to the 4365 formula against Jobs :: Paint Footage T and the three Vinyl footage fields. Gutters has Jobs :: Gutter Footage available and is a one-line addition if wanted. Covered today: Stucco Brown, Stucco Color, Scratch Coat, Paper/Wire, Rock, Housewrap, Siding, Set Tarps, Soffit/Fascia, Brick, Set Scaff, Remove Scaff. Not covered: Paint, Gutters, Vinyl, Foundation Plaster, Shutters, Return/Fix, Cleanup, Penetration Sealing, Insl Walls, Insl Attic.
Which footage field each covered task type uses (12 task types)
Task typeFootage field the 4365 formula reads
Stucco BrownJobs :: Stucco Brown Pay Footage
Stucco ColorJobs :: Stucco Color Pay Footage
Scratch CoatJobs :: Scratch Extra Pay Footage
Paper/WireJobs :: Paper/Wire Extra Pay Footage
RockJobs :: Rock Pay Footage
HousewrapJobs :: Housewrap Footage
SidingNet Vertical Lap + Net Siding + Net Shake + Net Batten Footage (on the task)
Set TarpsJobs :: Tarp Footage
Soffit/FasciaJobs :: Soffit Extra Pay Footage
BrickJobs :: Brick Footage
Set ScaffJobs :: Scaff Footage (+ Brick Footage when Thin Brick? or Brick Wainscot Only?)
Remove ScaffJobs :: Scaff Footage + Brick Footage

Known gaps in the ladder sizing

4. The categorization gap

Half of these adjustments have no recorded reason at all. 6,090 of 11,481 (53.0%) carry a blank Payroll Adjustment Category (6491), and 4,514 of those were paid anyway — $542,073 over 24 months, $271,037/yr with no category on the record. 3,426 have neither a category nor an evaluation.

DivisionAdjustmentsBlank categoryBlank %
Orem5,8783,00051.0%
Salt Lake2,4271,38357.0%
St. George1,7981,11762.1%
Ogden1,13439234.6%
Commercial24419881.1%
All11,4816,09053.0%

Tipo de Ajuste (4589) unavailable in the full export, so "Tipo set but 6491 blank" cannot be measured over the 24-month window.

And where a category does exist, it is an outcome, not a reason

Payroll Adjustment Category (6491)AdjustmentsPaid rowsTrimmed $Median
(blank)6,0904,065$542,073$100
Valid Request2,2071,988$243,914$100
Grasping1,9001,214$153,997$100
Standard Adjustment1,5511,232$182,935$120
Low Pay Adjustment543539$31,625$50
Return Trip242232$16,252$60
No Details12222$1,916$76
Estimation Error10380$14,658$155
VPO7522$4,492$170
Shared Task457$870$120

“Valid Request”, “Grasping” and “Standard Adjustment” describe what the office decided, not what the crew asked for. The crew-facing field that should carry the reason — Tipo de Ajuste (4589) — has four choices and none of them is ladder, material, weather or small job (see section 10).

5. Evaluation outcomes — where the office time goes

7,350 of 11,481 adjustments were evaluated by a CM (64.0%); 4,131 were not. Of those evaluated, 1,919 (26.1%) came back “Unclear — defer to office”, which is ~80 requests a month landing on somebody’s desk in corporate.

OutcomeAdjustmentsPaid rowsPaid %Trimmed $Median
(not evaluated) paid anyway4,1312,60563.1%$345,198$90
Valid Request3,6652,94180.2%$340,380$80
Unclear - Defer to Office1,9191,33469.5%$173,108$100
Valid, but too high96578581.3%$119,055$120
Not a Valid Request paid anyway61239464.4%$38,398$70
Needs Additional Info18912264.6%$16,050$90

The Ogden defer split

Ogden evaluates almost everything and decides almost nothing. 68.3% of its evaluated requests come back “defer to office” against 19.4% everywhere else. Ogden is 9.9% of adjustments and 35.7% of every defer in the company (685 of 1,919). It is not disengagement — Ogden has the best evaluation coverage anywhere (88.4% evaluated) and marks only 1.8% not-valid and 0.7% too-high. It looks at everything and forwards it.

DivisionAdjustmentsEvaluatedEvaluated %DeferDefer % of evaluatedNot valid %Too high %
Orem5,8783,64462.0%53514.7%11.8%17.4%
Salt Lake2,4271,68969.6%43725.9%5.0%8.8%
St. George1,79890550.3%24627.2%10.6%23.8%
Ogden1,1341,00388.4%68568.3%1.8%0.7%
Commercial24410944.7%1614.7%0.0%6.4%
All divisions11,4817,35064.0%1,91926.1%8.6%13.7%

6. What crews are actually asking for

10,458 of 11,481 adjustments carry request text (1,023 do not). Those sentences were mined for recurring themes; a request can carry more than one, and 3,004 (28.7% of the text rows) match no theme at all.

ThemeAdjustmentsShare of textTrimmed $MedianTop-10 amount shareDeferred %Blank category %
Extra scope / added work1,74416.7%$160,558$9064.7%22.9%47.6%
Ladder / height / scaffold1,42813.7%$166,620$12054.5%22.2%54.3%
Windows / flashing / trim1,28912.3%$128,288$10553.8%15.1%39.3%
Fuel / travel / distance1,05410.1%$78,922$6067.8%45.8%32.0%
Hours claimed (time-based)1,0109.7%$99,400$10067.8%21.5%54.0%
Material not ready / waiting / access9178.8%$97,343$10066.4%23.1%53.0%
Stone / block / mix / lath8458.1%$74,113$9064.5%18.9%48.4%
Return trip / second visit7156.8%$62,277$8072.5%20.1%41.8%
Difficulty / hard conditions4934.7%$60,957$12063.3%22.9%41.8%
Paint / color / texture4734.5%$60,702$12054.0%25.6%35.7%
Repairs / rework4674.5%$38,636$8558.4%16.2%52.5%
Footage / measurement dispute3723.6%$38,365$12553.9%33.2%51.3%
Says supervisor authorized it2732.6%$26,810$10060.1%18.3%40.7%
Cleanup1801.7%$21,294$10064.6%23.1%80.0%
Small job / minimum1781.7%$15,290$6080.8%21.6%38.8%
Bare dollar amount, no reason given1731.7%$18,355$13570.7%41.5%53.2%
Plan discrepancy1711.6%$12,926$12052.3%29.2%43.3%
Crew size claimed1371.3%$18,283$15061.4%24.7%51.8%
Helper / extra crew1081.0%$10,330$8068.2%32.2%27.8%
Weather830.8%$9,895$12070.6%28.3%55.4%
Equipment / rental530.5%$6,416$12077.5%28.6%47.2%
Patching / fix scaff420.4%$5,290$10071.4%11.1%54.8%
Per-unit rate claimed240.2%$3,762$14670.0%30.0%45.8%
Duplicate / already paid60.1%$380$80100.0%0.0%50.0%

Theme counts per request: 0 → 3,004 · 1 → 4,264 · 2 → 2,045 · 3 → 805 · 4 → 251 · 5 → 72 · 6 → 17. The unmatched residual is 3,004 requests, $229,279 paid, median $80 — short, specific, one-off sentences.

7. There is already a tier system — nobody wrote it down

The twenty most common amounts account for 77.4% of every paid adjustment. 92.4% are a multiple of $5, 81.5% a multiple of $10, 43.1% a multiple of $25; only 7.6% are anything else. These are not calculations. They are a price list that lives in people’s heads, re-agreed one request at a time.

0216432648864$50: 864 payouts (10.56% of paid rows)864$5010.6%$100: 701 payouts (8.57% of paid rows)701$1008.6%$60: 697 payouts (8.52% of paid rows)697$608.5%$80: 619 payouts (7.57% of paid rows)619$807.6%$40: 470 payouts (5.75% of paid rows)470$405.8%$200: 422 payouts (5.16% of paid rows)422$2005.2%$150: 409 payouts (5.00% of paid rows)409$1505.0%$120: 382 payouts (4.67% of paid rows)382$1204.7%$30: 298 payouts (3.64% of paid rows)298$303.6%$75: 214 payouts (2.62% of paid rows)214$752.6%$300: 168 payouts (2.05% of paid rows)168$3002.0%$70: 163 payouts (1.99% of paid rows)163$702.0%$250: 152 payouts (1.86% of paid rows)152$2501.9%$90: 140 payouts (1.71% of paid rows)140$901.7%$20: 133 payouts (1.63% of paid rows)133$201.6%$180: 123 payouts (1.50% of paid rows)123$1801.5%$125: 103 payouts (1.26% of paid rows)103$1251.3%$400: 97 payouts (1.19% of paid rows)97$4001.2%$160: 96 payouts (1.17% of paid rows)96$1601.2%$25: 85 payouts (1.04% of paid rows)85$251.0%payouts at each amount (share of all 8,181 paid rows below each bar)

8. Automation readiness

Themes ranked by how mechanisable they look: volume, how tightly the amounts cluster, how much office time they consume, and how small the typical payment is. A high score means the reason repeats at a stable price — the conditions for a fixed amount or a formula. It is not a recommendation on its own; the ranked course of action in section 1 is.

#ThemeScoreAdjustmentsTrimmed $MedianAmount spread (cv)Top-10 shareDeferred %
1Extra scope / added work67.11,744$160,558$900.8064.7%22.9%
2Ladder / height / scaffold59.91,428$166,620$1200.6954.5%22.2%
3Fuel / travel / distance59.21,054$78,922$600.8867.8%45.8%
4Windows / flashing / trim56.91,289$128,288$1050.7053.8%15.1%
5Hours claimed (time-based)55.31,010$99,400$1000.7767.8%21.5%
6Material not ready / waiting / access52.7917$97,343$1000.8166.4%23.1%
7Stone / block / mix / lath51.5845$74,113$900.7664.5%18.9%
8Return trip / second visit50.8715$62,277$800.8172.5%20.1%
9Difficulty / hard conditions45.3493$60,957$1200.6963.3%22.9%
10Paint / color / texture42.9473$60,702$1200.7254.0%25.6%
11Repairs / rework42.6467$38,636$850.8258.4%16.2%
12Small job / minimum42.4178$15,290$600.9080.8%21.6%
13Footage / measurement dispute42.3372$38,365$1250.7453.9%33.2%
14Duplicate / already paid42.36$380$800.75100.0%0.0%
15Bare dollar amount, no reason given41.4173$18,355$1350.8270.7%41.5%

Lower cv means the amounts on that theme sit closer together; a high top-10 share means a handful of prices cover most of the payouts. Both are what make a fixed amount defensible.

9. What the two in-flight automations actually cover

Read against the request-text themes, fuel/travel and ladder/height together touch 2,834 adjustments (24.7% of the population), 177 of them in both. That leaves 8,647 adjustments and $758,750 untouched by anything currently being built.

PopulationAdjustmentsSharePaid rowsTrimmed $Median
Fuel / travel / distance1,58313.8%1,310$126,341$70
Ladder / height text theme1,42812.4%1,077$166,620$120
Everything else8,64775.3%5,929$758,750$100

Fuel tier gate is >=30 crow-flies one-way miles from the team leader home; that distance is NOT stored on Jobs Tasks, so this file cannot re-apply the gate. Sep 1 measured 59% of travel adjustments inside a 30-mile radius, i.e. roughly 41% of the fuel/travel population would qualify for a non-zero tier.

Sized the way the ladder adder is actually going to be built — off no-scaff jobs rather than off request text (section 3) — the picture changes: the no-scaff population on trades the 4365 footage switch already covers is 749 adjustments ($95,198), and across all trades 1,228 ($150,362). Fuel plus the all-trades no-scaff population is 2,640 adjustments, 23.0% of the population and 25.0% of the dollars — leaving a remaining pool of 8,841 adjustments and $774,188.

The fuel build pays $0 below 30 crow-flies one-way miles; only ~41% of the fuel/travel/return union clears that gate (Sep 1 measurement, not recomputed here). The ladder adder has no equivalent gate.

10. Turnaround — the data gap, and the first real number

Over the 24-month window, request-to-decision turnaround cannot be computed. Not because TrackVia does not hold the timestamps — it does — but because they are not on the export view.

What is and is not in the export

Turnaround CANNOT be computed from this dataset, but not because the timestamps are missing from TrackVia - they are missing from the EXPORT. Jobs Tasks does carry Payroll Adjustment Request Completed Date (field 4269, stored as a PARAGRAPH not a date), Payroll Adjustment Request - Hours Late (field 4270, number, already computed) and Payroll Adjustment Review Date (field 9480, date, only 3 usages so effectively unused). None of the three is on MCP Jobs Tasks Pay Info FULL (view 2827) or RECENT (view 2828), so no history of them is reachable. Complete->Pay Date below is a payroll-calendar artefact, not review speed.

The fix is a view edit. Adding 4269 / 4270 / 9480 to view 2827 would make request->decision latency reportable from the next nightly export onward. That is a view edit, not a schema change.

Complete-to-pay latency is not turnaround. That interval is the payroll calendar — when the pay run falls — and says nothing about how fast a request was reviewed. It is deliberately not reported here as a review-speed figure.

Current pay period sample

Label on every figure in this subsection: ~600 payroll-adjustment requests from one pay period (Sep 2026), read live on 2026-09-10 read-only through the beta TrackVia MCP. Not the 24-month window. 998 records were read from the live queues; 601 match a task in the 24-month export (2.8% of it) and 431 fall inside this report’s population. The figures below are the matched 601.

Tipo de Ajuste — the crew-facing reason field has four choices

ChoiceRequests% of rows with a value
Dificultad extremo26444.4%
Viaje extra15325.8%
Reparaciones15125.4%
Diferencias con los planos9716.3%
Rows with a value594of 601 rows · 66 carry two or more

Field 4589, multi-select, Spanish. FOUR choices only - there is no ladder, height, scaffold, material, weather or small-job choice, and no "other". A crew with a height complaint has to file it as Dificultad extremo or leave it blank. This is why 4589 and Payroll Adjustment Category (6491) do not agree and why 53.8% of the 24-month population has a blank 6491. [~600 payroll-adjustment requests from one pay period (Sep 2026), read live on 2026-09-10 read-only through the beta TrackVia MCP. Not the 24-month window.]

First request → decision turnaround

Median turnaround
5.3 days
216 request/review pairs
p90
8.4 days
p25 4.1 · p75 6.4
Over a week
19.0%
2.3% same or next day
Crew filing lateness
0 h
median · p90 6 h · crews file on time

~600 payroll-adjustment requests from one pay period (Sep 2026), read live on 2026-09-10 read-only through the beta TrackVia MCP. Not the 24-month window. FIRST REAL REQUEST-TO-DECISION NUMBER. Turnaround = Payroll Adjustment Review Date (9480, a real date field) MINUS Payroll Adjustment Request Completed Date (4269, stored as a PARAGRAPH - a date held as text, which is why TrackVia itself cannot compute this). Nothing else in TrackVia measures it. It is NOT the complete-to-pay gap in d["turnaround"], which is the payroll calendar.

Read the median as a floor. 9480 is populated on only 289 of the 998 rows and 216 of the matched 601, and it was added recently, so the pairs skew to requests that HAVE been reviewed. Unreviewed requests - the ones that sit longest - are structurally missing from this measure. Read the median as a floor. 9480 is date-only and 4269 carries a time, so a same-day review can compute as a small negative. Negatives are reported and excluded from the stats.

The AI summary field is already populated on 816 of 998 live-queue records (81.8%). Adjustment Request AI Summary (6409) - an AI translation + summary of the crew request already exists and is already populated on most of the live queue. Any triage build extends this, it does not start from scratch. [~600 payroll-adjustment requests from one pay period (Sep 2026), read live on 2026-09-10 read-only through the beta TrackVia MCP. Not the 24-month window.]

Tipo de Ajuste (4589), Payroll Adjustment Request Completed Date (4269), Hours Late (4270), Review Date (9480) and Adjustment Request AI Summary (6409) all exist on the Jobs Tasks default view (view 58) for every record. View 58 carries ~360 fields over the whole table and times out at 30 s on every read, so history is unreachable through the connector. Adding these five fields to MCP Jobs Tasks Pay Info FULL (view 2827) makes them reportable from the next nightly export onward - a view edit, not a schema change.

11. Concentration — a few teams, a few jobs, a few sentences

258 task teams appear in the window. The top 20 by count carry 45.9% of all adjustments and 42.6% of the dollars.

Read the team table with the job mix in mind. A team’s adjustment rate is partly a fact about the trades and divisions it is given: a crew doing mostly Paper/Wire or insulation sits on a price list that generates adjustments no matter who holds the tools (section 1, rank 1). High volume on a big crew is not the same finding as a high rate on a small one. The ranking changed once the populations listed under “How this was filtered” came out — teams moved up and down this list, so it does not match earlier versions of this analysis.
Task teamAdjustmentsTask rowsRatePaid rowsTrimmed $MedianPre-trim $
Hector Moreta5401,56734.5%394$37,275$60$49,568
Segundo Heriberto Torres50559385.2%457$50,949$80$62,749
Juan Pablo Moreno4361,74625.0%311$25,123$60$29,008
Ernesto Ramirez3951,37128.8%347$37,717$80$41,897
Javier Vazquez3771,94919.3%299$39,090$80$67,230
Sergio Aguilar27767341.2%104$12,257$80$21,288
Rodrigo Alcantar27447357.9%238$16,881$50$16,881
Armando Segundo-Garcia26155946.7%213$28,922$100$38,495
Juan Perez23834269.6%195$17,303$75$18,003
Alan Gonzalez22563035.7%175$13,950$60$15,378
Reynaldo Martinez22228677.6%169$16,981$86$18,048
Rafael Moguel2121,05020.2%159$26,865$120$61,519
Ricardo Anastacio Mejia20625879.8%164$16,232$82$16,232
Cristian Bermudes18158131.1%118$16,143$100$58,217
Jorge Castro18163228.6%119$20,085$135$27,551
Vicente Silva-Zavala16924668.7%127$9,464$60$10,239
Daniel Rodriguez15849531.9%126$14,920$100$17,495
Ariel Ramirez14830848.0%114$11,015$100$11,915
Alejandro Huerta13317376.9%103$19,720$160$45,485
Alfredo Chavarin Lopez13143630.1%110$8,734$60$8,734

Task types

Task typeAdjustmentsTask rowsRateTrimmed $
Paper/Wire2,0843,86254.0%$179,714
Set Scaff1,1153,34833.3%$84,187
Siding1,1064,38125.2%$99,916
Stucco Color9112,83932.1%$89,716
Soffit/Fascia8403,25725.8%$83,479
Housewrap7903,45122.9%$57,604
Paint7093,09222.9%$91,075
Fix Scaff6481,65839.1%$51,730
Remove Scaff5003,21515.6%$38,643
Stucco Brown4042,77114.6%$37,662
Rock3832,23817.1%$26,073
Return/Fix2481,02324.2%$12,435
Brick21877328.2%$19,094
Insl Walls13413698.5%$20,890
Insl Pre 112413194.7%$9,068
Population11,48149,93022.99%$1,032,188

Jobs and sentences

1,796 jobs — 50.0% of the 3,589 jobs that generated any adjustment — carry three or more, and they hold 8,771 adjustments (76.4% of the population) worth $805,261. 9,332 distinct request texts cover the 10,458 requests that carry text; 37 of those texts were used five times or more, covering 370 requests (3.5% of text rows). Crews are copy-pasting a sentence that worked.

The most repeated request texts (top 15, Spanish as written)
Request textTimes used
me puede ajustar el pago al precio acordado por favor44
instalación de soffit con escaleras $20034
80 dlrs de ajuste27
60 dlrs de ajuste21
trabajo terminado 60$18
si nos apoya con unos 80 dolares que tiene un desnivel considerable creo que estaríamos bien15
ya he platicado con alan acerca del precio de un dólar por pie cuadrado gracias12
450 dólares12
si nos apoya con unos 80 dolares que tiene un pequeño desnivel creo que estaríamos bien10
si nos apoya con unos 100 dolares que tiene un desnivel considerable creo que estaríamos bien9
60 dlrs desnivel9
gas8
aver si me pueden dar 30 dólares para la gasolina8
60 dlrs de desnivel8
solicito 70 dolares por este trabajo porqué no ajusta la paga7
Jobs with the most adjustments (top 15)
JobAdjustmentsTrimmed $
32 (Lawyer)-The Ridge at Alpine-E Builders23$3,136
Bldg 60-Highridge-Edge20$1,390
Bldg K-Daybreak Downtown-Sego Homes19$1,270
Bldg 7-Mt. Rainier-Edge19$590
Units 251-252-Paired Villas-Sego Homes18$2,797
Dewsnup Mountain Home-Custom Jobs (Spanish Fork)-Spencer Edwards17$540
Bldg 28-Mt. Rainier-Edge16$740
8 (Wagstaff)-Gable Ridge-E Builders16$2,155
Bldg 11-Mt. Rainier-Edge16$400
Bldg 24-Mt. Rainier-Edge15$1,395
Bldg 12-Mt. Rainier-Edge15$740
351-Watermark Village-Sego Homes15$1,706
Bldg 16-Mt. Rainier-Edge15$718
Drew Armstrong PG Buildings-Custom Jobs-Battle Creek15$1,300
4-Holladay Hills Estates-Tri Pointe Homes14$965

Who decided — as far as the system knows

Payroll Adjustment Results (shortAnswer) is free text; reviewers sign with initials. This is the ONLY trace of who decided. Not a user field, not reportable, not enforceable. 2,842 distinct values sit in that one free-text box. The initials that appear most often:

Signature in the results textRequests
AS1,552
MP503
Ron416
SH253
KW201
RO159
Alan14
Request4

Six people carry effectively the whole review load and the system does not record any of their names in a field. That is what section 1 rank 9 fixes.

12. Mechanisms that already exist — do not rebuild these

Read from the TrackVia metadata snapshot 2026-09-08, not from the pulled records. These already exist and are relevant to "what can we systematize".

Field or workflowWhat it already does
Adjustment Request AI Summary (field 6409, paragraph, 20 usages)An AI summary of the crew request already exists and is surfaced on the COO and pending-adjustment views. Any triage/auto-categorisation work should extend this, not start from scratch.
Payroll Adjustment Request - Hours Late (field 4270, number, 33 usages)Request lateness is already computed and drives Workato view "Workato_ payroll adjustment request more than 48 hours late" (view 1253).
Proposed Additional Pay Amount (7640) + Proposed Payroll Adjustment Results (9542) + Approve Proposed Pay Amounts + Adjustment - More Info Needed From DM (9543) + Has Pending Payroll Adjustment Flag (9545)A propose/approve workflow was built recently (high field ids). An auto-adjustment should write the PROPOSED field, because Jobs Tasks :: Before Update lines 19-22 restrict approval of Payroll Adjustment Results to kyle@, ed@, it@ and jared@cascade.build.
Suspend This Team From Submitting Payroll Adjustments (7637) + Task Teams :: Payroll Adjustments Suspension End Date (7636)A team-level suspension lever already exists - the enforcement half of any grasping policy is built.
Additional Pay Amount (684)HARD BLOCKER for any auto-adjustment: Jobs Tasks :: Before Update line 33 throws if the field is already set. It is ONE currency slot per task, so a ladder amount and a fuel amount cannot coexist without a new currency field that rolls into Task Pay Amount.
Payroll Adjustment Category (6491)14 choices, none of them fuel, travel, ladder or height. Adding a choice touches 19 views, 3 forms, 1 filter and 1 calc (Adjustment Category Text).

13. Known gaps in this analysis

Anchored to TrackVia

Every headline figure benchmarked against the TrackVia view its readers would open. For this report the honest answer is that no such view exists, so the source is cited instead.

NO TrackVia view reproduces this population or this window. Every adjustment view is scoped to the current pay period, to a pending queue, or to one person. Walter must print that rather than imply the report ties out to a screen the reader can open.
Report figureReport valueTrackVia referenceIts countStatus
Pay adjustments, 24 months (this report’s population)11,481 adjustments · $1,032,188 trimmedno view reproduces this populationnot available
no view in the account counts adjustments over 24 months
no reproducing view — source view cited
Pulled from the cached nightly export of MCP Jobs Tasks Pay Info FULL (view 2827), joined to MCP Jobs Tasks General Data FULL (view 2805) and MCP Jobs General Data FULL (view 2803), covering Sep 10, 2024 to Sep 8, 2026. The narrowing makes the tie-out problem WORSE, not better: no TrackVia view filters out VPO / Misc. / Warranty / Custom task types or warehouse-overhead jobs, and the 2026-09-10 beta-MCP sweep confirmed no view anywhere in the account counts adjustments over 24 months. Every payroll-adjustment view is a live queue of 82-958 records. Do not imply any screen reproduces this number.
Closest tie-out a reader can open5,391 adjustments carry a category in this windowPayroll Adjustments By Category (view 1993), Cascade Task Trackingnot read
the read-only reports connector has no count-only call; a human reads it off the screen
differs — expected, and in a known direction
Payroll Adjustment Category is not blank. No date bound - all time. Expect this view to read HIGHER than 5,391, because it is not date-bounded and this report is, and it shows only the 47.0% of adjustments that carry a category at all.
Live queue depth (not a historical count)—COO All Payroll Adjustments (view 2941), Cascade Task Tracking958 records
read live 2026-09-10, read-only, through the beta TrackVia MCP
not an anchor — queue depth
This is what is open on the desk right now, not a 24-month history. A live work queue, not a history. Counts open/unresolved items only; does not tie to any historical total.
Job footage behind the ladder rates (section 3)389 no-scaff jobs with a measured area (70.0% coverage)Scraper Job Footages (view 2377), Jobs17,519 job records paged in full
read live 2026-09-10, read-only, through the beta TrackVia MCP
source view cited — derived population
No TrackVia view lists jobs built without scaffold; the concept is not stored, so the no-scaff population is derived from the lifetime task list on MCP Jobs Tasks General Data FULL (view 2805) and cannot be read off a screen. Stucco Footage (field 467) is populated on 89.3% of the referenced jobs.
Current pay period sample (section 10)998 records read, 601 matched to the exportCOO All Payroll Adjustments (2941), Workato All Payroll Adjustments (1958), Payroll Adjustments In My Division (2648), Current Payroll Adjustments Not Inspected (2132)998 records
read live 2026-09-10, read-only, through the beta TrackVia MCP
one pay period — labelled as a sample throughout
These are live work queues covering roughly the current pay period. Every figure taken from them is labelled as a ~600-row one-pay-period sample and is never presented as a 24-month figure.

Beta TrackVia MCP, read-only, superadmin: no connector-produced 24-month count exists. The only defensible connector-sourced figure is COO All Payroll Adjustments (view 2941) = 958 records, which is LIVE QUEUE DEPTH as of 2026-09-10, not a historical count. trendRecords on MCP Jobs Tasks Pay Info FULL (view 2827) caps at a 10,000-row scan and reaches back only ~4 months, under-counting every month it does reach (2026-07: 1,156 vs the export 1,372). Do not use it.

Beta TrackVia MCP use on 2026-09-10: READ-ONLY. Tools used: whoAmI, getViews, describeView, resolveField, queryRecords, getViewRecords, exportAppSchema, trendRecords. Nothing was created, updated or deleted. No record in the 24-month population was changed, re-pulled or re-derived from the connector. The population itself still comes entirely from the cached nightly exports.

How this was filtered

The population, in words

Field divisions only (Orem, Salt Lake, St. George, Ogden, Commercial), MINUS task types VPO Work / Misc. Work / Warranty Work / Custom Work, MINUS every warehouse / manufacturing / internal-overhead row (Corporate division, builder = "Overhead", or an Overhead Projects / warehouse job name), MINUS rows whose division could not be resolved. Every task type left in the population has calculated pay, so an adjustment on it is a crew asking for MORE than the calculated amount - not the pay mechanism itself.

Populations deliberately excluded

Applied in this order, each row counted once. Start = 61,742 task-pay rows / 21,405 adjustment-signal rows in the 2024-09-10 .. 2026-09-08 window. Percentages elsewhere in this file are all computed on what is left.

Excluded populationTask rowsAdjustmentsPre-trim $Trimmed $Why
Corporate division (warehouse / cleanings / overhead projects)2,3982,304$374,014$209,587Warehouse / internal-overhead hourly labour — Additional Pay Amount is the pay mechanism on these rows, not a crew asking for more.
No division resolved160122$33,130$12,376No division could be resolved, so the row cannot be attributed to a field division.
Overhead-billed jobs sitting inside a field division5334$40,447$3,187Warehouse / internal-overhead hourly labour — Additional Pay Amount is the pay mechanism on these rows, not a crew asking for more.
VPO Work4,2503,390$810,316$392,400Always-adjusted task type — no calculated pay, so the adjustment IS the pay mechanism.
Misc. Work2,9172,485$673,783$298,343Always-adjusted task type — no calculated pay, so the adjustment IS the pay mechanism.
Warranty Work1,6551,262$190,522$118,303Always-adjusted task type — no calculated pay, so the adjustment IS the pay mechanism.
Custom Work379327$694,980$27,972Always-adjusted task type — no calculated pay, so the adjustment IS the pay mechanism.
Excluded, total11,8129,924$2,817,192$1,062,169
This report’s population49,93011,481$2,074,347$1,032,188

Reconciliation: 9,924 excluded + 11,481 in the population = 21,405 adjustment-signal rows, which is every signal row in the window (21,405). On task rows: 11,812 + 49,930 = 61,742 of 61,742.

Population from the cached nightly TrackVia exports (Task Pay Info full, view 2827, 2026-09-08) joined to Tasks General full (view 2805) and Jobs General full (view 2803). Job footage and the current-period gap fields read live 2026-09-10 through the beta TrackVia MCP, read-only. Analysis 2026-09-10, v4.

Payroll adjustments, Sep 10, 2024 to Sep 8, 2026 · population version v4 (2026-09-10, 4th pass - Custom Work removed) · analysis 2026-09-10 · report generated Sep 10, 2026