The Self-Perform Classification Trap: When a GC's Own Crews Have the Wrong Code
General contractors who self-perform often allocate all payroll to a single governing code. NCCI's rules require a split. The mismatch can inflate premium and the mod.
When a general contractor self-performs carpentry, roofing, concrete, or other trades, NCCI rules require payroll for each trade to be reported under its specific class code, not the GC's governing code. The governing code covers supervision. Self-performed production work belongs under the applicable trade code. Misallocating all payroll to the governing code can inflate premium and distort the mod through incorrect expected loss rates.
A general contractor's workers' compensation policy carries a governing classification code that describes the business as a whole. For a GC that subcontracts all trade work and only provides supervision and project management, the governing code is correct for the entire payroll. The code's expected loss rate and premium rate reflect the risk profile of a supervisory-only operation.
When the same GC self-performs framing, roofing, concrete work, or any other trade, that analysis stops being correct. The self-performed work involves different tasks, different exposures, and different NCCI class codes. The payroll for those workers belongs under the applicable trade code, not under the governing class.
NCCI's experience rating plan computes expected losses per class code. The expected loss rate for a roofing code is different from the rate for a GC governing code. The gap between them determines how much the allocation error affects the mod.
The rate difference is the signal
A GC governing classification code in most NCCI states carries lower expected loss rates than the trade-specific codes for roofing, framing, or concrete. The governing class assumes a supervisory workforce with limited field exposure. The trade codes assume production workers doing the physical tasks that produce the claims.
When all payroll sits under the governing code, the expected losses in the mod formula are calculated using the governing code's lower ELR. A contractor whose actual losses are typical for their payroll mix sees a higher mod because the expected losses are too low to match the operations. The formula compares relatively high actual losses against relatively low expected losses, producing a mod that overstates the contractor's risk relative to their peers.
The opposite pattern also occurs. A GC whose self-performed work falls under a code with a lower ELR than the governing class sees the reverse effect. Expected losses are inflated because the governing code's ELR is higher than what the self-perform code would produce. The mod understates risk. In both cases, the worksheet is wrong.
How large the effect can be
In our reviews of Southeast contractor worksheets, approximately 85% of GCs who self-perform any trade had their self-perform payroll recorded entirely under the governing class code (Orson audit data, 2025-2026). The most common trades involved are carpentry and framing (code 5645) and concrete work (code 5223). Both carry ELRs that differ meaningfully from the GC governing code.
The dollar impact depends on the proportion of total payroll that is self-performed. A GC with $3 million total payroll and $800,000 in self-performed carpentry has roughly 27% of their payroll under the wrong code. The expected loss rate for code 5645 is higher than the GC code in most states. The worksheet underestimates expected losses for that $800,000 by the difference between the two ELRs. A 0.30 difference in expected loss rate per $100 of payroll produces approximately $2,400 in understated expected losses per year. Over a three-year experience period, that is $7,200 in missing expected losses, which translates directly into an inflated mod.
Why carriers assign it this way
Carriers typically classify an account based on the highest-payroll operation reported on the application. If the GC reports 100% of payroll under the GC governing code, the underwriter assigns the entire policy to that code. The carrier's underwriting system does not automatically split self-perform trade work into separate codes. The carrier relies on the employer to report payroll accurately by operation.
The premium audit at the end of each policy period is the point where the carrier checks the allocation. But premium auditors focus on total payroll verification, not on class code accuracy. A premium auditor who sees that all reported payroll matches the governing code will not reallocate it unless the discrepancy is obvious from the payroll records. The class code mismatch is invisible to the audit unless the auditor specifically reviews operational descriptions against each employee's work.
The retroactive fix path
When a class code allocation error is identified, the correction applies retroactively to open policy periods within NCCI's experience window. A corrected unit statistical report reallocates the misclassified payroll to the proper codes. The expected losses for each affected policy year are recalculated. The mod for the current period shifts to reflect the corrected allocation.
Corrections of this type are among the least adversarial audit outcomes. The data is what it is. The payroll was classified under a code that did not match the work performed. The corrected allocation produces a worksheet that matches the operations.
What an audit would check
An audit reviews how your payroll is allocated across class codes against what your crews actually do in the field. If your policy shows a single governing class code covering all employees and you self-perform any production work, the allocation is almost certainly wrong. An audit identifies the self-performed operations, maps each to its correct class code, and quantifies the expected loss rate difference. That difference is the dollar value of the classification error on your mod.
If your NCCI worksheet shows a single governing code and you self-perform carpentry, roofing, concrete, or site work, the allocation is worth reviewing. Send us your worksheet and we'll compare your reporting against the code definitions.
