Subcontractor Compliance Checklist Scorer

ANALife Services AuthorityNational Calculator Authority›Subcontractor Compliance Checklist Scorer

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

Subcontractor Compliance Checklist Scorer

Evaluate subcontractor compliance across four weighted categories: Licensing & Credentials, Insurance Coverage, Safety Record, and Documentation. Each item is scored and weighted to produce an overall compliance score with a risk rating.

### 1. Licensing & Credentials (Weight: 30%)

Valid contractor license on file?

Yes – current and verified Yes – but expiring within 60 days No / Unknown

License scope matches work type?

Yes – exact match Partial match No / Not verified

Business registration / entity in good standing?

Yes – verified Pending renewal No / Unknown

### 2. Insurance Coverage (Weight: 35%)

General Liability insurance on file (COI)?

Yes – current COI, meets limits Yes – but limits below requirement No / Expired

Workers' Compensation insurance on file?

Yes – current and verified Exempt with documentation No / Expired / Unknown

Commercial Auto insurance (if applicable)?

Yes – current COI on file Not applicable – no vehicles used No / Expired

GC listed as Additional Insured?

Yes – confirmed on COI Requested but not confirmed No

### 3. Safety Record (Weight: 20%)

Experience Modification Rate (EMR / e-mod)

Below 1.0 (better than average) 1.0 (industry average) 1.01 – 1.25 (above average risk) Above 1.25 or unknown

Written safety program on file?

Yes – current, project-specific Yes – generic program No

OSHA violations in past 3 years?

None Minor / resolved citations only Serious, willful, or repeat violations

### 4. Documentation & Administration (Weight: 15%)

W-9 / tax form on file?

Yes – current No / Missing

Signed subcontract agreement on file?

Yes – fully executed Partially executed / pending No

Lien waiver process established?

Yes – conditional and unconditional waivers collected Partial – conditional only No process in place

Calculate Compliance Score Fill out all fields and click Calculate.

function subCalc() { // --- Licensing & Credentials (weight 30%) --- var licenseValid = parseInt(document.getElementById('sub-license-valid').value); var licenseScope = parseInt(document.getElementById('sub-license-scope').value); var businessReg = parseInt(document.getElementById('sub-business-reg').value);

// --- Insurance Coverage (weight 35%) --- var glInsurance = parseInt(document.getElementById('sub-gl-insurance').value); var wcInsurance = parseInt(document.getElementById('sub-wc-insurance').value); var autoInsurance = parseInt(document.getElementById('sub-auto-insurance').value); var additionalInsured = parseInt(document.getElementById('sub-additional-insured').value);

// --- Safety Record (weight 20%) --- var emod = parseInt(document.getElementById('sub-emod').value); var safetyProgram = parseInt(document.getElementById('sub-safety-program').value); var oshaViolations = parseInt(document.getElementById('sub-osha-violations').value);

// --- Documentation (weight 15%) --- var w9 = parseInt(document.getElementById('sub-w9').value); var contractSigned = parseInt(document.getElementById('sub-contract-signed').value); var lienWaiver = parseInt(document.getElementById('sub-lien-waiver').value);

// --- Raw category scores (each item max 10, averaged to 0–10 scale) --- var licensingRaw = (licenseValid + licenseScope + businessReg) / 3; // 3 items var insuranceRaw = (glInsurance + wcInsurance + autoInsurance + additionalInsured) / 4; // 4 items var safetyRaw = (emod + safetyProgram + oshaViolations) / 3; // 3 items var documentRaw = (w9 + contractSigned + lienWaiver) / 3; // 3 items

// --- Weighted score (0–100 scale) --- // Licensing 30%, Insurance 35%, Safety 20%, Documentation 15% var weightedScore = (licensingRaw * 0.30 + insuranceRaw * 0.35 + safetyRaw * 0.20 + documentRaw * 0.15) * 10;

weightedScore = Math.round(weightedScore * 10) / 10;

// --- Risk rating --- var riskRating, riskColor, riskAdvice; if (weightedScore >= 85) { riskRating = "Low Risk – Approved"; riskColor = "#2e7d32"; riskAdvice = "Subcontractor meets compliance standards. Proceed with engagement. Schedule annual re-verification."; } else if (weightedScore >= 70) { riskRating = "Moderate Risk – Conditional Approval"; riskColor = "#f57c00"; riskAdvice = "Subcontractor has gaps. Obtain missing documents or updated certificates before work begins. Re-score within 30 days."; } else if (weightedScore >= 50) { riskRating = "High Risk – Requires Remediation"; riskColor = "#c62828"; riskAdvice = "Significant compliance deficiencies identified. Do not authorize work until critical items (insurance, license) are resolved."; } else { riskRating = "Critical Risk – Do Not Engage"; riskColor = "#4a148c"; riskAdvice = "Subcontractor fails minimum compliance thresholds. Engagement poses serious legal and financial exposure. Disqualify or require full remediation."; }

// --- Category percentages for display --- var licensingPct = Math.round(licensingRaw * 10); var insurancePct = Math.round(insuranceRaw * 10); var safetyPct = Math.round(safetyRaw * 10); var documentPct = Math.round(documentRaw * 10);

// --- Critical flags --- var flags = []; if (glInsurance === 0) flags.push("⚠️ No General Liability insurance on file – critical gap."); if (wcInsurance === 0) flags.push("⚠️ No Workers' Compensation coverage – critical gap."); if (licenseValid === 0) flags.push("⚠️ No valid contractor license on file."); if (contractSigned === 0) flags.push("⚠️ No signed subcontract agreement."); if (oshaViolations === 0 && emod === 0) flags.push("⚠️ Poor safety record indicators – review before engagement."); if (additionalInsured === 0) flags.push("⚠️ GC not listed as Additional Insured on COI.");

var flagsHtml = flags.length > 0
? "Critical Flags:" + flags.map(function(f){ return ""; }).join("") + ""
"✅ No critical compliance flags identified.";

document.getElementById('sub-result').innerHTML = "### Compliance Score: " + weightedScore + " / 100 " + "Risk Rating: " + riskRating + "

" + "" + riskAdvice + "

" + "" + "" + "Category" + "Score" + "Weight" + "Contribution" + "" + "" + "Licensing & Credentials" + licensingPct + "%30%" + Math.round(licensingRaw * 0.30 * 10 * 10) / 10 + " pts" + "Insurance Coverage" + insurancePct + "%35%" + Math.round(insuranceRaw * 0.35 * 10 * 10) / 10 + " pts" + "Safety Record" + safetyPct + "%20%" + Math.round(safetyRaw * 0.20 * 10 * 10) / 10 + " pts" + "Documentation & Admin" + documentPct + "%15%" + Math.round(documentRaw * 0.15 * 10 * 10) / 10 + " pts" + "" + "" + flagsHtml; }

#### Formula

Category Raw Score = Average of item scores within category (each item: 0, 5, or 10)

Weighted Score (0–100) = (Licensing × 0.30 + Insurance × 0.35 + Safety × 0.20 + Documentation × 0.15) × 10

Risk Thresholds:

#### Assumptions & References

More Calculators

References