| name | readyframe-takeoff-validator |
| description | Validates ReadyFrame material takeoffs against all system rules and specifications to catch errors before materials are ordered. Use when validating takeoffs, checking material quantities, reviewing ReadyFrame compliance, verifying plate ratios, checking stud counts, validating opening components, ensuring grade assignments are correct, or when asked to "check this takeoff", "validate materials", "review for errors", or "does this look right". Critical for quality assurance before ordering materials. |
ReadyFrame Takeoff Validator
Overview
Validate ReadyFrame material takeoffs against comprehensive system rules to catch errors before materials are ordered. Performs 7 critical quality assurance checks and provides detailed feedback on compliance issues.
Quick Validation
For a complete takeoff validation, provide:
- Wall dimensions (length and height)
- Material quantities (plates, studs, opening components)
- Material grades and categories
The validator will check:
- Plate Ratio (2:1 ReadyFrame:Loose)
- Stud Density (~0.75 per LF for 16" O.C.)
- Material Categorization (ReadyFrame vs Loose)
- Grade Assignments (No.2 vs DF Stud)
- Opening Components (completeness and counts)
- Documentation Consistency (matching across sources)
- Layout Integrity (stud spacing and critical studs)
Validation Workflows
1. Quick Validation (Basic Checks)
When to use: Rapid validation of overall takeoff accuracy
Required inputs:
- Wall length (LF)
- ReadyFrame plates (LF)
- Loose plates (LF)
- Total stud count
- Number of openings
Validates:
- Plate ratio check (Expected: 2:1, Range: 1.8-2.2)
- Total plates check (Should equal 3× wall length)
- Stud density check (Expected: ~0.75 per LF for 16" O.C.)
Usage:
python scripts/quick_validate.py \
--wall-length 84.5 \
--rf-plates 169 \
--loose-plates 84.5 \
--studs 64 \
--openings 0
2. Comprehensive Validation (All Checks)
When to use: Complete validation before ordering materials
Required inputs:
- All basic inputs, plus:
- Complete material breakdown by component
- Grade assignments for each component
- Panel elevations or cutting lists
- Opening specifications
Validates:
- All quick validation checks
- Material categorization (each component)
- Grade assignments (No.2 vs DF Stud)
- Opening component completeness
- Trimmer quantities by opening type
- Documentation consistency
Usage:
python scripts/comprehensive_validate.py --input takeoff_data.json
3. Panel-by-Panel Validation
When to use: Validating individual panel specifications
Required inputs:
- Panel ID and dimensions
- Panel cutting list
- Component specifications
Validates:
- Panel material consistency
- Component labeling accuracy
- Dimensional accuracy
- Grade specifications
Seven Critical Validation Checks
Check 1: Plate Ratio Validation
Rule: ReadyFrame plates : Loose plates ≈ 2:1
Formula:
Plate Ratio = ReadyFrame Plates LF / Loose Plates LF
Acceptable Range: 1.8 to 2.2
Common Errors:
- ❌ All 3 plates categorized as ReadyFrame (ratio = ∞)
- ❌ Only bottom plate in ReadyFrame (ratio = 0.5)
- ❌ Forgetting third top plate entirely
Example Validation:
Input:
- Wall: 84.5 LF
- ReadyFrame plates: 169 LF
- Loose plates: 84.5 LF
Calculation:
- Ratio = 169 / 84.5 = 2.0
Result: ✓ PASS (within 1.8-2.2 range)
Error Messages:
- Warning: "Plate ratio 2.3 outside expected range 1.8-2.2"
- Critical: "Plate ratio 3.5 indicates incorrect categorization"
Check 2: Total Plate Verification
Rule: Total plates / 3 ≈ Wall length
Formula:
Total Plates LF = ReadyFrame Plates + Loose Plates
Expected = Wall Length LF × 3
Variance = ABS(Total - Expected) / Expected
Acceptable Variance: < 5%
Purpose: Catches missing plates or calculation errors
Example Validation:
Input:
- Wall: 84.5 LF
- Total plates: 253.5 LF (169 + 84.5)
Calculation:
- Expected: 84.5 × 3 = 253.5 LF
- Variance: 0%
Result: ✓ PASS
Common Errors:
- ❌ Forgetting one plate type
- ❌ Miscalculating panel lengths
- ❌ Not accounting for mitered ends
Check 3: Stud Density Validation
Rule: ~0.75 studs per linear foot (16" O.C.)
Formula:
Stud Density = Total Studs / Wall Length LF
Acceptable Range: 0.65 to 0.85 studs/LF
Accounts For:
- Opening adjustments
- Panel seam requirements
- Corner conditions
Example Validation:
Input:
- Wall: 84.5 LF
- Total studs: 64
Calculation:
- Density = 64 / 84.5 = 0.757 studs/LF
Result: ✓ PASS (within 0.65-0.85 range)
Spacing Adjustments:
- 16" O.C.: 0.75 studs/LF baseline
- 24" O.C.: 0.50 studs/LF baseline
- With openings: Adjust for reductions and kings
Check 4: Material Categorization
Rule: Components must be correctly categorized as ReadyFrame or Loose
Decision Tree: See references/categorization_rules.md
Validates:
- ✓ Bottom plates → ReadyFrame
- ✓ First top plates → ReadyFrame
- ✓ Third top plates → Loose
- ✓ Full-length studs → Loose
- ✓ Trimmers → ReadyFrame
- ✓ Headers → ReadyFrame
- ✓ King studs → Loose
Common Errors:
- ❌ King studs in ReadyFrame package
- ❌ Third top plate in ReadyFrame
- ❌ Trimmers in Loose package
Validation Script: scripts/validate_categorization.py
Check 5: Grade Assignment Validation
Rule: Proper lumber grade for each component category
No.2 Grade (ReadyFrame):
- All plates in ReadyFrame package
- Trimmers (cut to exact heights)
- Headers (cut to exact spans)
- Cripples (calculated heights)
- Custom-cut components
DF Stud Grade (Loose):
- All full-length studs
- Third top plates (16' lengths)
- King studs (full standard height)
- Critical studs
Common Errors:
- ❌ Trimmers specified as DF Stud
- ❌ King studs specified as No.2
- ❌ Mixing grades within same category
Check 6: Opening Component Completeness
Rule: Every opening must have all required components
Minimum Requirements Per Opening:
- 2 king studs (Loose, DF Stud, full height)
- Minimum 2 trimmers (ReadyFrame, No.2, cut height)
- 1 header (ReadyFrame, No.2, 2-ply)
- 1 sill if window (ReadyFrame, No.2)
- Cripples as needed (ReadyFrame, No.2)
Trimmer Count Validation:
See references/trimmer_validation.md for complete rules
Standard Window: 2 trimmers Wide Window (>5'): 2 + 2×FLOOR((W-5)/5) Mulled Units: # units + 1 Bay Windows: 2 + 2×(sections-1)
Validation Example:
Opening: 6' wide window
Expected trimmers: 2 (standard, ≤5' gets 2)
Wait - 6' > 5', recalculate:
2 + 2×FLOOR((6-5)/5) = 2 + 2×0 = 2 trimmers
Actually still 2 because (6-5)/5 = 0.2, floor = 0
Check 7: Documentation Consistency
Rule: All documents must match and be complete
Cross-Reference Validation:
- Panel IDs on placement match elevation sheets
- Panel dimensions consistent across documents
- Cutting lists match material sheets
- Header sizes appropriate for spans
Common Inconsistencies:
- ❌ Panel shown on placement but no elevation
- ❌ Dimensions don't match between documents
- ❌ Missing panels in sequence (E101, E103... where's E102?)
- ❌ Header size inadequate for span width
Validation Severity Levels
PASS ✓
All checks within acceptable ranges. Takeoff ready for ordering.
WARNING ⚠️
Minor deviations that should be reviewed but may be acceptable:
- Plate ratio 1.75-1.79 or 2.21-2.25
- Stud density 0.62-0.64 or 0.86-0.88
- Minor documentation formatting issues
ERROR ❌
Significant issues that must be corrected before ordering:
- Plate ratio < 1.5 or > 2.5
- Stud density < 0.55 or > 0.95
- Missing opening components
- Incorrect grade assignments
- Material categorization errors
CRITICAL 🚨
Major errors indicating fundamental misunderstanding:
- Missing entire plate categories
- No trimmers for openings
- All materials in wrong category
- Grade specifications completely reversed
Validation Output Format
Summary Report
READYFRAME TAKEOFF VALIDATION REPORT
====================================
PROJECT: HH-1890A
WALL: E102 (84-1/2" length)
DATE: 2025-11-15
VALIDATION RESULTS:
[✓] Plate Ratio: 2.00 (PASS)
[✓] Total Plates: 253.5 LF vs 253.5 expected (PASS)
[✓] Stud Density: 0.76 studs/LF (PASS)
[✓] Material Categories: All correct (PASS)
[✓] Grade Assignments: All correct (PASS)
[✓] Opening Components: N/A - No openings (PASS)
[✓] Documentation: Consistent (PASS)
OVERALL STATUS: ✓ READY TO ORDER
No issues found. Takeoff validated against all ReadyFrame rules.
Detailed Error Report
READYFRAME TAKEOFF VALIDATION REPORT
====================================
PROJECT: Sample Project
WALL: P105 (30' length)
DATE: 2025-11-15
VALIDATION RESULTS:
[❌] Plate Ratio: 3.00 (ERROR)
[⚠️] Stud Density: 0.87 studs/LF (WARNING)
[❌] Material Categories: 2 errors found (ERROR)
[✓] Grade Assignments: All correct (PASS)
[❌] Opening Components: Missing trimmers (CRITICAL)
[✓] Documentation: Consistent (PASS)
OVERALL STATUS: ❌ REQUIRES CORRECTION
ERRORS FOUND:
1. PLATE RATIO ERROR (CRITICAL)
Problem: Ratio of 3.00 indicates missing Loose plates
Expected: ~2.0 (range 1.8-2.2)
Actual: ReadyFrame 60 LF, Loose 20 LF
Solution: Verify third top plate is categorized as Loose
2. MATERIAL CATEGORIZATION ERROR
Problem: King studs listed in ReadyFrame package
Component: 4 king studs
Expected Category: Loose (DF Stud grade)
Actual Category: ReadyFrame (No.2 grade)
Solution: Move king studs to Loose package
3. OPENING COMPONENTS ERROR (CRITICAL)
Problem: Opening specified but no trimmers found
Opening: 4'×5' window
Required: Minimum 2 trimmers (ReadyFrame, No.2)
Found: 0 trimmers
Solution: Add 2 trimmers at proper height to cutting list
RECOMMENDATIONS:
- Recategorize third top plate as Loose
- Move 4 king studs to Loose package
- Add 2 trimmers for window opening
- Revalidate after corrections
Using the Validation Scripts
Quick Validation Script
python scripts/quick_validate.py \
--wall-length 84.5 \
--rf-plates 169 \
--loose-plates 84.5 \
--studs 64 \
--openings 0 \
--output summary
Comprehensive Validation
python scripts/comprehensive_validate.py \
--input takeoff.json \
--output detailed \
--check-all
Batch Validation
python scripts/batch_validate.py \
--folder /path/to/takeoffs/ \
--format excel \
--output validation_results.xlsx
Integration with Workflow
Pre-Order Checklist
Before ordering materials:
- ✓ Run quick validation on totals
- ✓ Run comprehensive validation on details
- ✓ Review any warnings or errors
- ✓ Make corrections as needed
- ✓ Revalidate after changes
- ✓ Generate final validation report
- ✓ Attach report to purchase order
Quality Gate
Use as quality gate in workflow:
- Takeoff creation → Quick validation
- Corrections → Comprehensive validation
- Final review → Full validation report
- Only proceed if STATUS = READY TO ORDER
Common Validation Scenarios
Scenario 1: Basic Wall (No Openings)
Input:
- 84.5 LF wall, 104-5/8" height, 2x6 @ 16" O.C.
- RF plates: 169 LF
- Loose plates: 84.5 LF
- Studs: 64
Expected Result: ✓ All checks pass
Scenario 2: Wall with Windows
Input:
- 30 LF wall with two 4'×5' windows
- RF plates: 60 LF
- Loose plates: 30 LF
- Studs: 25 (21 common + 4 kings)
- Trimmers: 4
- Headers: 2
- Sills: 2
Expected Result: ✓ All checks pass
Scenario 3: Common Error - Missing Third Plate
Input:
- 30 LF wall
- RF plates: 90 LF (all three plates!)
- Loose plates: 0 LF
Expected Result: ❌ ERROR
- Plate ratio: ∞ (division by zero)
- Error: "Third top plate missing from Loose package"
Resources
scripts/
quick_validate.py- Fast validation of basic checkscomprehensive_validate.py- Complete validation enginebatch_validate.py- Validate multiple takeoffsvalidate_categorization.py- Check material categoriesvalidate_grades.py- Verify lumber grade assignments
references/
validation_rules.md- Complete validation rule setcategorization_rules.md- Material categorization decision treetrimmer_validation.md- Trimmer count validation by typeerror_messages.md- All error messages with solutionsvalidation_examples.md- Real-world validation examples
CRITICAL: Always validate takeoffs before ordering materials. Catching errors early saves time and money!