@structupath/pi-steel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ Mark,Qty,Size,Grade,Length_ft,Unit_Wt_plf,Total_Wt_lbs,Connections,Notes
@@ -0,0 +1,153 @@
1
+ [
2
+ {
3
+ "grade": "A992",
4
+ "description": "Standard specification for structural steel shapes",
5
+ "typical_use": "W-shapes (wide flange beams and columns)",
6
+ "Fy_ksi": 50,
7
+ "Fu_ksi": 65,
8
+ "Fy_Fu_ratio_max": 0.85,
9
+ "elongation_pct": 18,
10
+ "weldability": "Excellent — no preheat typically required",
11
+ "notes": "Default grade for all W-shapes. Replaced A36 as standard."
12
+ },
13
+ {
14
+ "grade": "A500 Gr. B",
15
+ "description": "Cold-formed welded/seamless structural tubing — round",
16
+ "typical_use": "HSS round shapes, round pipe columns",
17
+ "Fy_ksi": 42,
18
+ "Fu_ksi": 58,
19
+ "elongation_pct": 23,
20
+ "weldability": "Good — may need preheat for thick walls",
21
+ "notes": "Standard grade for round HSS. Check wall thickness for weld requirements."
22
+ },
23
+ {
24
+ "grade": "A500 Gr. C",
25
+ "description": "Cold-formed welded/seamless structural tubing — rectangular",
26
+ "typical_use": "HSS rectangular/square shapes, HSS columns and bracing",
27
+ "Fy_ksi": 50,
28
+ "Fu_ksi": 62,
29
+ "elongation_pct": 21,
30
+ "weldability": "Good — may need preheat for thick walls (≥1/2\")",
31
+ "notes": "Standard grade for rectangular/square HSS. Higher Fy than Gr. B."
32
+ },
33
+ {
34
+ "grade": "A36",
35
+ "description": "Carbon structural steel",
36
+ "typical_use": "Angles, channels, plates, miscellaneous shapes",
37
+ "Fy_ksi": 36,
38
+ "Fu_ksi": 58,
39
+ "elongation_pct": 20,
40
+ "weldability": "Excellent — easiest steel to weld",
41
+ "notes": "Legacy standard. Still used for angles, channels, and plates. Dual-certified with A992 for many W-shapes."
42
+ },
43
+ {
44
+ "grade": "A572 Gr. 50",
45
+ "description": "High-strength low-alloy structural steel",
46
+ "typical_use": "Plates, built-up sections, heavy columns",
47
+ "Fy_ksi": 50,
48
+ "Fu_ksi": 65,
49
+ "elongation_pct": 18,
50
+ "weldability": "Good — preheat may be required for thick plates",
51
+ "notes": "Used for plates and built-up members. Same Fy as A992."
52
+ },
53
+ {
54
+ "grade": "A572 Gr. 42",
55
+ "description": "High-strength low-alloy structural steel — Grade 42",
56
+ "typical_use": "Lighter plates, structural shapes",
57
+ "Fy_ksi": 42,
58
+ "Fu_ksi": 60,
59
+ "elongation_pct": 20,
60
+ "weldability": "Good",
61
+ "notes": "Less common than Gr. 50. Check availability."
62
+ },
63
+ {
64
+ "grade": "A913 Gr. 50",
65
+ "description": "HSLA quenched and self-tempered shapes",
66
+ "typical_use": "Jumbo W-shapes (Group 4 and 5), heavy columns",
67
+ "Fy_ksi": 50,
68
+ "Fu_ksi": 65,
69
+ "elongation_pct": 21,
70
+ "weldability": "Excellent — superior to A992 for thick sections, no preheat needed",
71
+ "notes": "Premium grade for heavy sections. Better CVN toughness. Typically 5-10% cost premium."
72
+ },
73
+ {
74
+ "grade": "A913 Gr. 65",
75
+ "description": "HSLA quenched and self-tempered shapes — Grade 65",
76
+ "typical_use": "Heavy columns, high-rise applications",
77
+ "Fy_ksi": 65,
78
+ "Fu_ksi": 80,
79
+ "elongation_pct": 17,
80
+ "weldability": "Good — follow AWS D1.1 for thick sections",
81
+ "notes": "High-strength grade for reducing column sizes. Verify availability and lead time."
82
+ },
83
+ {
84
+ "grade": "A514",
85
+ "description": "High-yield-strength quenched and tempered alloy steel plates",
86
+ "typical_use": "Base plates, heavy gusset plates, built-up columns",
87
+ "Fy_ksi": 100,
88
+ "Fu_ksi": 115,
89
+ "elongation_pct": 16,
90
+ "weldability": "Requires special procedures — preheat, low-hydrogen electrodes, controlled heat input",
91
+ "notes": "Very high strength but difficult to weld. Use only when specified by engineer."
92
+ },
93
+ {
94
+ "grade": "A588 / A242",
95
+ "description": "Weathering steel — atmospheric corrosion resistant",
96
+ "typical_use": "Exposed structural steel, bridges, exterior applications",
97
+ "Fy_ksi": 50,
98
+ "Fu_ksi": 70,
99
+ "elongation_pct": 18,
100
+ "weldability": "Good — use matching weathering filler metals",
101
+ "notes": "Forms protective patina, no painting required. Not suitable for submerged or constantly wet conditions. Also known as COR-TEN."
102
+ },
103
+ {
104
+ "grade": "A53 Gr. B",
105
+ "description": "Pipe — welded and seamless",
106
+ "typical_use": "Standard weight, extra-strong, and double extra-strong pipe",
107
+ "Fy_ksi": 35,
108
+ "Fu_ksi": 60,
109
+ "elongation_pct": 22,
110
+ "weldability": "Excellent",
111
+ "notes": "Standard pipe grade. Available in STD, XS (extra strong), and XXS (double extra strong) wall thicknesses."
112
+ },
113
+ {
114
+ "grade": "A325",
115
+ "description": "High-strength bolts for structural joints",
116
+ "typical_use": "Standard structural bolts — 3/4\", 7/8\", 1\" diameter",
117
+ "Fy_ksi": 92,
118
+ "Fu_ksi": 120,
119
+ "elongation_pct": 14,
120
+ "weldability": "N/A — bolts not welded",
121
+ "notes": "Most common structural bolt. Superseded by ASTM F3125 Gr. A325 but still commonly referenced. Available as bearing (N/X) or slip-critical (SC)."
122
+ },
123
+ {
124
+ "grade": "A490",
125
+ "description": "High-strength bolts — heat treated",
126
+ "typical_use": "Heavy connections, moment frames, high-load joints",
127
+ "Fy_ksi": 130,
128
+ "Fu_ksi": 150,
129
+ "elongation_pct": 14,
130
+ "weldability": "N/A — bolts not welded, never galvanized",
131
+ "notes": "Higher capacity than A325. Cannot be galvanized. Superseded by ASTM F3125 Gr. A490."
132
+ },
133
+ {
134
+ "grade": "F1852",
135
+ "description": "Twist-off type tension control bolt (TC bolt) — A325 equivalent",
136
+ "typical_use": "Field connections — easier installation verification than A325",
137
+ "Fy_ksi": 92,
138
+ "Fu_ksi": 120,
139
+ "elongation_pct": 14,
140
+ "weldability": "N/A",
141
+ "notes": "TC bolts have a splined end that shears off at proper pretension. Same capacity as A325. Commonly used for slip-critical connections."
142
+ },
143
+ {
144
+ "grade": "E70XX",
145
+ "description": "Weld electrode/filler metal — 70 ksi tensile",
146
+ "typical_use": "Fillet welds, CJP welds, PJP welds on A36/A992/A572 steel",
147
+ "Fy_ksi": 58,
148
+ "Fu_ksi": 70,
149
+ "elongation_pct": 22,
150
+ "weldability": "N/A — this IS the filler metal",
151
+ "notes": "Standard electrode classification. FEXX = 70 ksi. Matches A992 and lower steels. Common designations: E7018 (SMAW), ER70S-6 (GMAW), E71T-1 (FCAW)."
152
+ }
153
+ ]
@@ -0,0 +1,96 @@
1
+ # AISC Shapes Guide — 16th Edition
2
+
3
+ ## Shape Families
4
+
5
+ ### W-Shapes (Wide Flange)
6
+ - **Designation**: WdXw (e.g., W14X30 = 14" nominal depth, 30 plf)
7
+ - **Grade**: A992 (Fy=50 ksi) — default for all W-shapes
8
+ - **Range**: W4X13 to W44X335 (standard) up to W14X730 (jumbo column)
9
+ - **Use**: Beams, columns, girders — the workhorse of structural steel
10
+ - **Key Properties**: d, bf, tf, tw, A, Ix, Sx, Iy, Sy, Zx, Zy, ry
11
+
12
+ **Common Beam Sizes**: W8, W10, W12, W14, W16, W18, W21, W24, W27, W30, W33, W36
13
+ **Common Column Sizes**: W10, W12, W14 (wide flange series with bf ≈ d)
14
+
15
+ ### S-Shapes (American Standard)
16
+ - **Designation**: SdXw (e.g., S12X35)
17
+ - **Grade**: A36 (Fy=36 ksi)
18
+ - **Note**: Rarely specified in new construction. Replaced by W-shapes.
19
+
20
+ ### HP-Shapes (Bearing Piles)
21
+ - **Designation**: HPdXw (e.g., HP14X73)
22
+ - **Grade**: A572 Gr. 50 or A36
23
+ - **Use**: Driven piles, foundation support
24
+ - **Key Feature**: Approximately equal flange width and depth (bf ≈ d)
25
+
26
+ ### C-Shapes (American Standard Channels)
27
+ - **Designation**: CdXw (e.g., C10X20)
28
+ - **Grade**: A36 (Fy=36 ksi)
29
+ - **Use**: Struts, framing, edge members, stair stringers
30
+ - **Key Properties**: Shear center is NOT at the centroid — beware of lateral-torsional effects
31
+
32
+ ### MC-Shapes (Miscellaneous Channels)
33
+ - **Designation**: MCdXw (e.g., MC8X22.8)
34
+ - **Grade**: A36
35
+ - **Use**: Similar to C-shapes but non-standard proportions
36
+
37
+ ### L-Shapes (Angles)
38
+ - **Designation**: LaxbXt (e.g., L4X4X3/8)
39
+ - Equal leg: L4X4X3/8 (4" x 4" x 3/8" thick)
40
+ - Unequal leg: L6X4X1/2 (6" x 4" x 1/2" thick)
41
+ - **Grade**: A36 (Fy=36 ksi)
42
+ - **Use**: Bracing, struts, lintels, clip angles, connections
43
+ - **Key Feature**: Properties about geometric axes AND principal axes differ
44
+
45
+ ### WT-Shapes (Structural Tees)
46
+ - **Designation**: WTdXw (e.g., WT7X15)
47
+ - **Grade**: A992 (same as parent W-shape)
48
+ - **Note**: Cut from W-shapes — WT7X15 is half of W14X30
49
+
50
+ ### HSS — Rectangular / Square
51
+ - **Designation**: HSSaxbXt (e.g., HSS8X6X1/2 = 8" x 6" x 1/2" wall)
52
+ - **Grade**: A500 Gr. C (Fy=50 ksi) for rectangular/square
53
+ - **Use**: Columns, bracing, truss members, exposed applications
54
+ - **Key Feature**: Excellent for compression (no weak axis). Clean appearance.
55
+ - **Wall thickness**: Nominal vs. design — design thickness = 0.93 × nominal
56
+
57
+ ### HSS — Round
58
+ - **Designation**: HSSd.dXt (e.g., HSS6.625X0.280)
59
+ - **Grade**: A500 Gr. C (Fy=42 ksi for round)
60
+ - **Use**: Columns, bracing, handrails, pipe bollards
61
+ - **Note**: Round HSS Fy is LOWER than rectangular HSS
62
+
63
+ ### Pipe
64
+ - **Designation**: PIPEdXtype (e.g., PIPE6STD, PIPE6XS, PIPE6XXS)
65
+ - STD = Standard wall
66
+ - XS = Extra Strong
67
+ - XXS = Double Extra Strong
68
+ - **Grade**: A53 Gr. B (Fy=35 ksi)
69
+ - **Use**: Columns, bollards, handrails, process structures
70
+
71
+ ## Property Definitions
72
+
73
+ | Symbol | Property | Units | What It Means |
74
+ |--------|----------|-------|---------------|
75
+ | d | Depth | in | Overall depth of section |
76
+ | bf | Flange width | in | Width of flange (W, C shapes) |
77
+ | tf | Flange thickness | in | Thickness of flange |
78
+ | tw | Web thickness | in | Thickness of web |
79
+ | A | Area | in² | Cross-sectional area — used for axial capacity |
80
+ | Ix | Moment of inertia (x) | in⁴ | Stiffness about strong axis — controls deflection |
81
+ | Sx | Section modulus (x) | in³ | Bending capacity about strong axis |
82
+ | Iy | Moment of inertia (y) | in⁴ | Stiffness about weak axis |
83
+ | Sy | Section modulus (y) | in³ | Bending capacity about weak axis |
84
+ | Zx | Plastic section modulus (x) | in³ | Full plastic bending capacity (strong axis) |
85
+ | Zy | Plastic section modulus (y) | in³ | Full plastic bending capacity (weak axis) |
86
+ | rx | Radius of gyration (x) | in | Column buckling parameter (strong axis) |
87
+ | ry | Radius of gyration (y) | in | Column buckling parameter (weak axis) — controls column capacity |
88
+ | J | Torsional constant | in⁴ | Resistance to twisting |
89
+ | Cw | Warping constant | in⁶ | Warping resistance |
90
+
91
+ ## Selection Tips for Takeoff
92
+
93
+ 1. **Beams**: Higher Ix = less deflection. Sx controls bending strength. Deeper beams are more efficient but check clearances.
94
+ 2. **Columns**: ry controls capacity (weak axis buckles first). W14 column series (W14X48 to W14X730) have bf ≈ d for balanced buckling.
95
+ 3. **Bracing**: HSS members are excellent — high r values in both directions. Angles are cheaper but less efficient.
96
+ 4. **Weight**: Always verify unit weight from database. Never estimate — the difference between W14X30 (30 plf) and W14X34 (34 plf) is 13% more steel.
@@ -0,0 +1,124 @@
1
+ # Steel Connection Types — Reference for Takeoff
2
+
3
+ ## Simple (Shear) Connections
4
+
5
+ ### Single Plate (Shear Tab)
6
+ - **Use**: Most common beam-to-beam and beam-to-column
7
+ - **Hardware**: 1 plate shop-welded to support, field-bolted to beam web
8
+ - **Typical bolts**: (3) to (5) 3/4" A325-N
9
+ - **Est. weight**: 8-15 lbs per connection
10
+ - **Takeoff note**: Count plates, bolts, and erection bolts
11
+
12
+ ### Double Angle (Clip Angle)
13
+ - **Use**: Beam-to-girder, beam-to-column
14
+ - **Hardware**: 2 angles, either shop-bolted or shop-welded to support
15
+ - **Typical bolts**: (3) to (6) 3/4" A325-N per side
16
+ - **Est. weight**: 10-25 lbs per connection
17
+ - **Takeoff note**: Count pairs of angles
18
+
19
+ ### Single Angle
20
+ - **Use**: Light beams, infill framing
21
+ - **Hardware**: 1 angle, bolted or welded
22
+ - **Typical bolts**: (2) to (3) 3/4" A325-N
23
+ - **Est. weight**: 4-10 lbs per connection
24
+
25
+ ### Seated Connection (Unstiffened/Stiffened)
26
+ - **Use**: When web connection is impractical
27
+ - **Hardware**: Seat angle or bracket below beam, top clip angle
28
+ - **Est. weight**: 15-35 lbs per connection
29
+
30
+ ## Moment Connections
31
+
32
+ ### Directly Welded Flange
33
+ - **Use**: Moment frames (pre-Northridge NOT recommended)
34
+ - **Hardware**: CJP welds at flanges, shear tab at web
35
+ - **Est. weight**: 25-50 lbs per connection (plates + welding material)
36
+ - **Takeoff note**: Flag for special inspection requirements
37
+
38
+ ### Bolted Flange Plate (BFP)
39
+ - **Use**: Moment frames per AISC 358
40
+ - **Hardware**: Top and bottom flange plates, bolted to beam flanges
41
+ - **Typical bolts**: (6) to (12) 7/8" or 1" A325 or A490
42
+ - **Est. weight**: 40-80 lbs per connection
43
+ - **Takeoff note**: Plates are shop-welded to column, field-bolted to beam
44
+
45
+ ### Extended End Plate
46
+ - **Use**: Moment frames, rigid connections
47
+ - **Hardware**: End plate welded to beam, bolted to column flange
48
+ - **Typical bolts**: (4) to (8) 1" A490
49
+ - **Est. weight**: 30-60 lbs per connection
50
+
51
+ ### Reduced Beam Section (RBS / "Dogbone")
52
+ - **Use**: Special moment frames (SMF) in seismic zones
53
+ - **Hardware**: Trimmed beam flanges + moment connection
54
+ - **Est. weight**: 30-50 lbs per connection + flange trimming labor
55
+ - **Takeoff note**: Requires CJP weld special inspection
56
+
57
+ ## Bracing Connections
58
+
59
+ ### Gusset Plate
60
+ - **Use**: Brace-to-beam/column intersection
61
+ - **Hardware**: Steel plate, bolted or welded to brace and frame
62
+ - **Size range**: 1/4" to 1" thick, varies widely by load
63
+ - **Est. weight**: 20-150 lbs per connection (highly variable)
64
+ - **Takeoff note**: Gusset plate weight can be significant — get sizes from details
65
+
66
+ ### Brace Clip
67
+ - **Use**: Light bracing, kicker bracing
68
+ - **Hardware**: Small plate or angle, bolted/welded
69
+ - **Est. weight**: 5-15 lbs per connection
70
+
71
+ ## Base Plates
72
+
73
+ ### Standard Base Plate
74
+ - **Use**: Column to foundation connection
75
+ - **Hardware**: Base plate + anchor bolts + leveling nuts + grout
76
+ - **Typical**: 4 anchor bolts for gravity columns, 4-8 for moment frames
77
+ - **Plate thickness**: 3/4" to 2" typically
78
+ - **Est. weight**: 25-200 lbs per base plate (varies with column load)
79
+ - **Takeoff note**: Include anchor bolts in steel or concrete scope (verify)
80
+
81
+ ### Moment Base Plate
82
+ - **Use**: Fixed-base columns, cantilevered columns
83
+ - **Hardware**: Heavy base plate + 4-8 anchor bolts + stiffeners
84
+ - **Est. weight**: 75-400 lbs per base plate
85
+ - **Takeoff note**: Much heavier than standard — get plate sizes from details
86
+
87
+ ## Connection Hardware Weight Rules of Thumb
88
+
89
+ | Building Type | Connection % of Member Weight |
90
+ |---|---|
91
+ | Simple warehouse / single-story | 8-10% |
92
+ | Standard commercial (2-5 stories) | 10-12% |
93
+ | Moment frame / complex framing | 12-18% |
94
+ | Heavy industrial / power plant | 15-20% |
95
+ | Seismic (SMF/SCBF) | 15-22% |
96
+
97
+ ## Bolt Weight Reference
98
+
99
+ | Bolt Diameter | Weight per Bolt (incl. nut + washer) |
100
+ |---|---|
101
+ | 1/2" A307 | 0.10 lb |
102
+ | 5/8" A325 | 0.20 lb |
103
+ | 3/4" A325 | 0.34 lb |
104
+ | 7/8" A325 | 0.56 lb |
105
+ | 1" A325 | 0.80 lb |
106
+ | 1-1/8" A325 | 1.15 lb |
107
+ | 1-1/4" A325 | 1.50 lb |
108
+
109
+ ## Shear Stud Weight Reference
110
+
111
+ | Stud Size | Weight Each |
112
+ |---|---|
113
+ | 3/4" x 3" | 0.14 lb |
114
+ | 3/4" x 4-1/2" | 0.20 lb |
115
+ | 7/8" x 3-1/2" | 0.22 lb |
116
+
117
+ ## Anchor Bolt Weight Reference
118
+
119
+ | Bolt Size | Weight per Foot (rod) | Typical Length | Weight Each (w/ nut+washer) |
120
+ |---|---|---|---|
121
+ | 3/4" F1554 | 1.50 lb/ft | 18"-24" | 3-4 lb |
122
+ | 1" F1554 | 2.67 lb/ft | 24"-36" | 7-10 lb |
123
+ | 1-1/4" F1554 | 4.17 lb/ft | 30"-48" | 12-20 lb |
124
+ | 1-1/2" F1554 | 6.01 lb/ft | 36"-60" | 20-35 lb |
@@ -0,0 +1,163 @@
1
+ # Steel Takeoff Procedures — Detailed Guide
2
+
3
+ ## Overview
4
+
5
+ A steel takeoff quantifies every piece of structural steel on a project to determine total tonnage for bidding. Accuracy directly impacts profit margin — a 5% error on a 200-ton job is 10 tons ($32,000+ at current rates).
6
+
7
+ ## Takeoff Order (recommended)
8
+
9
+ 1. **Columns** — Start at foundations, work up
10
+ 2. **Girders** — Primary spanning members (grid-to-grid)
11
+ 3. **Beams** — Secondary members (between girders)
12
+ 4. **Bracing** — Vertical and horizontal
13
+ 5. **Joists & Joist Girders** — If in scope (often separate trade)
14
+ 6. **Miscellaneous Steel** — Lintels, embeds, loose angles, stair framing
15
+ 7. **Connections** — Percentage allowance based on complexity
16
+
17
+ ## Step-by-Step Procedure
18
+
19
+ ### 1. Gather Documents
20
+ - Structural plans (S sheets)
21
+ - Structural details (SD sheets)
22
+ - General notes and specifications
23
+ - Architectural drawings (for clearances, finishes)
24
+ - Addenda and bulletins
25
+ - Geotechnical report (for pile/foundation type)
26
+
27
+ ### 2. Read General Notes FIRST
28
+ General notes override everything. Look for:
29
+ - Steel grade specifications (may differ from standard)
30
+ - Coating/painting requirements
31
+ - Fireproofing requirements (affects schedule, not weight)
32
+ - Special inspection requirements (affects cost)
33
+ - Fabrication standards (AISC certification level)
34
+ - Erection procedures or sequences
35
+ - Design loads (helps verify member sizes)
36
+
37
+ ### 3. Mark Up the Drawings
38
+ Use colored pencils/markers on prints (or layers in PDF):
39
+ - **Red** — Columns
40
+ - **Blue** — Beams/Girders
41
+ - **Green** — Bracing
42
+ - **Orange** — Misc steel
43
+ - **Yellow highlight** — Items already counted
44
+
45
+ ### 4. Column Takeoff
46
+
47
+ For each column mark:
48
+ ```
49
+ Mark | Qty | Size | Grade | Length (TOS to TOS) | Splice? | Base Plate
50
+ C1 | 8 | W14X48 | A992 | 14'-6" (FTG to 2nd) | No | 18"x18"x1"
51
+ C1a | 8 | W14X48 | A992 | 14'-0" (2nd to Roof) | Yes | N/A
52
+ ```
53
+
54
+ **Length rules:**
55
+ - Foundation to first floor: Top of base plate to TOS
56
+ - Floor to floor: TOS to TOS (top of steel)
57
+ - Top column: TOS to TOS at roof
58
+
59
+ **Watch for:**
60
+ - Column splices (add splice plate weight)
61
+ - Cap plates at top
62
+ - Stepped columns (different sizes at different levels)
63
+ - Cantilevered columns (verify fixed vs. pinned base)
64
+
65
+ ### 5. Beam/Girder Takeoff
66
+
67
+ ```
68
+ Mark | Qty | Size | Grade | Length | Camber | Studs | Connections
69
+ B1 | 12 | W16X26 | A992 | 28'-6" | None | (24) 3/4"x4-1/2" | 2x shear tab
70
+ G1 | 6 | W24X76 | A992 | 36'-0" | 3/4" | (56) 3/4"x4-1/2" | 2x moment
71
+ ```
72
+
73
+ **Length determination:**
74
+ - Grid line to grid line MINUS column setbacks
75
+ - Add for overhang/cantilever past column face
76
+ - If not dimensioned, scale from drawings (note as "SCALED")
77
+
78
+ **Watch for:**
79
+ - Camber requirements (affects fabrication cost)
80
+ - Composite design (shear studs — count them)
81
+ - Coped beams (note "COPE TOP" or "COPE BOT")
82
+ - Moment vs. shear connections (different hardware)
83
+ - Typical bays — count ALL typical bays, don't assume
84
+
85
+ ### 6. Bracing Takeoff
86
+
87
+ ```
88
+ Mark | Qty | Size | Grade | Length | Connection
89
+ BR1 | 8 | HSS6X6X3/8 | A500C | 18'-9" (diag) | Gusset both ends
90
+ BR2 | 4 | L4X4X3/8 | A36 | 12'-4" (diag) | Clip angle
91
+ ```
92
+
93
+ **Length:** Use diagonal length, not horizontal projection:
94
+ ```
95
+ Diagonal = √(horizontal² + vertical²)
96
+ Example: 24'-0" horizontal, 14'-0" vertical
97
+ Diagonal = √(24² + 14²) = √(576 + 196) = √772 = 27.78' → 27'-9"
98
+ ```
99
+
100
+ ### 7. Miscellaneous Steel
101
+
102
+ These items are easy to miss but add up:
103
+ - **Lintels** — Over CMU openings (angles, typically L4X4, L5X3-1/2)
104
+ - **Embed plates** — In concrete for attachments
105
+ - **Loose angles** — Shelf angles, relief angles, ledger angles
106
+ - **Kicker angles** — Diagonal braces for masonry/curtain wall support
107
+ - **Sag rods** — Between purlins
108
+ - **Stair framing** — Stringers (C10, C12), landing beams, toe plates
109
+ - **Handrail posts** — Pipe or HSS posts
110
+ - **Safety cable anchors** — Roof perimeter life safety
111
+
112
+ ### 8. Verify Completeness
113
+
114
+ Checklist:
115
+ - [ ] All grid intersections have a column
116
+ - [ ] Every bay has beams spanning both directions
117
+ - [ ] Bracing is shown at required locations (check all elevations)
118
+ - [ ] Stair/elevator framing accounted for
119
+ - [ ] Opening framing (headers, trimmers) included
120
+ - [ ] Roof framing matches roof plan
121
+ - [ ] Mezzanine/platform framing included
122
+ - [ ] Equipment support steel included
123
+ - [ ] Canopy/awning framing included
124
+
125
+ ## Common Takeoff Errors
126
+
127
+ | Error | Impact | How to Avoid |
128
+ |---|---|---|
129
+ | Missed symmetry | Under by 50% | Check "SIM OPP HAND" notes |
130
+ | Wrong bay count | Under/over 10-20% | Count every bay, mark on plan |
131
+ | Forgot elevation change | Wrong lengths | Cross-ref plans with sections |
132
+ | Didn't count connections | Under 10-15% | Always add connection allowance |
133
+ | Scaled instead of calculated | ±5-10% error | Calculate from grid dimensions |
134
+ | Missed addendum | Variable | Always read ALL addenda |
135
+ | Wrong grade assumed | Cost impact | Read general notes for grade specs |
136
+ | Forgot misc steel | Under 3-8% | Use the misc steel checklist above |
137
+
138
+ ## Output Format
139
+
140
+ Final takeoff should be organized by:
141
+
142
+ ### Level 1: By Drawing Sheet
143
+ ```
144
+ Sheet S-101: Foundation Plan
145
+ C1 - 8ea W14X48 @ 14'-6" = 5,568 lbs
146
+ ...
147
+ Sheet subtotal: XX,XXX lbs
148
+ ```
149
+
150
+ ### Level 2: By Category
151
+ ```
152
+ Columns: XX,XXX lbs (XX.X tons)
153
+ Beams: XX,XXX lbs (XX.X tons)
154
+ Girders: XX,XXX lbs (XX.X tons)
155
+ Bracing: XX,XXX lbs (XX.X tons)
156
+ Misc: XX,XXX lbs (XX.X tons)
157
+ Connection: XX,XXX lbs (XX.X tons) — X% allowance
158
+ ```
159
+
160
+ ### Level 3: Grand Total
161
+ ```
162
+ TOTAL: XXX,XXX lbs = XX.X tons
163
+ ```
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env bash
2
+ # ═══════════════════════════════════════════════════════════════════
3
+ # Steel Weight Calculator
4
+ # Usage: ./scripts/calculate-weight.sh path/to/bom.csv [connection_pct] [misc_pct]
5
+ #
6
+ # BOM CSV format:
7
+ # Mark,Qty,Size,Grade,Length_ft,Unit_Wt_plf,Total_Wt_lbs,Connections,Notes
8
+ #
9
+ # Optional arguments:
10
+ # connection_pct - Connection allowance percentage (default: 12)
11
+ # misc_pct - Misc steel allowance percentage (default: 5)
12
+ #
13
+ # Output: Line-by-line breakdown + totals with cost estimate
14
+ # ═══════════════════════════════════════════════════════════════════
15
+ set -euo pipefail
16
+
17
+ if [ $# -eq 0 ]; then
18
+ echo "Usage: $0 <bom.csv> [connection_pct] [misc_pct]"
19
+ echo ""
20
+ echo " bom.csv CSV file with columns: Mark,Qty,Size,Grade,Length_ft,Unit_Wt_plf,..."
21
+ echo " connection_pct Connection hardware allowance (default: 12%)"
22
+ echo " misc_pct Misc steel allowance (default: 5%)"
23
+ echo ""
24
+ echo "Example:"
25
+ echo " $0 takeoff.csv 15 5"
26
+ exit 1
27
+ fi
28
+
29
+ BOM_FILE="$1"
30
+ CONN_PCT="${2:-12}"
31
+ MISC_PCT="${3:-5}"
32
+
33
+ if [ ! -f "$BOM_FILE" ]; then
34
+ echo "ERROR: File not found: $BOM_FILE"
35
+ exit 1
36
+ fi
37
+
38
+ python3 - "$BOM_FILE" "$CONN_PCT" "$MISC_PCT" <<'PYTHON'
39
+ import csv
40
+ import sys
41
+ import os
42
+
43
+ bom_file = sys.argv[1]
44
+ conn_pct = float(sys.argv[2]) / 100.0
45
+ misc_pct = float(sys.argv[3]) / 100.0
46
+
47
+ print(f"\n{'='*78}")
48
+ print(f" STEEL TAKEOFF — WEIGHT CALCULATION")
49
+ print(f" File: {os.path.basename(bom_file)}")
50
+ print(f"{'='*78}\n")
51
+
52
+ # Header
53
+ print(f" {'Mark':<8} {'Qty':>4} x {'Size':<14} x {'Length':>9} @ {'Wt/ft':>8} = {'Total':>12} {'Grade':<8}")
54
+ print(f" {'-'*8} {'-'*4} {'-'*14} {'-'*9} {'-'*8} {'-'*12} {'-'*8}")
55
+
56
+ total_lbs = 0
57
+ total_pieces = 0
58
+ categories = {}
59
+ grade_totals = {}
60
+ line_count = 0
61
+
62
+ with open(bom_file) as f:
63
+ reader = csv.DictReader(f)
64
+ for row in reader:
65
+ mark = row.get("Mark", "").strip()
66
+ if not mark or mark.startswith("#"):
67
+ continue
68
+
69
+ qty = int(row.get("Qty", 0))
70
+ size = row.get("Size", "?").strip()
71
+ grade = row.get("Grade", "A992").strip()
72
+ length_str = row.get("Length_ft", "0").strip()
73
+ unit_wt_str = row.get("Unit_Wt_plf", "0").strip()
74
+
75
+ # Parse length — support both decimal (28.5) and feet-inches (28'-6")
76
+ if "'" in length_str:
77
+ parts = length_str.replace('"', '').split("'")
78
+ feet = float(parts[0].replace('-', '').strip())
79
+ inches = float(parts[1].replace('-', '').strip()) if len(parts) > 1 and parts[1].strip() else 0
80
+ length = feet + inches / 12.0
81
+ else:
82
+ length = float(length_str) if length_str else 0
83
+
84
+ unit_wt = float(unit_wt_str) if unit_wt_str else 0
85
+
86
+ line_wt = qty * length * unit_wt
87
+ total_lbs += line_wt
88
+ total_pieces += qty
89
+ line_count += 1
90
+
91
+ # Categorize by prefix
92
+ if size.startswith("W"):
93
+ cat = "W-Shapes"
94
+ elif size.startswith("HSS"):
95
+ cat = "HSS"
96
+ elif size.startswith("L"):
97
+ cat = "Angles"
98
+ elif size.startswith("C") or size.startswith("MC"):
99
+ cat = "Channels"
100
+ elif size.startswith("PIPE"):
101
+ cat = "Pipe"
102
+ elif size.startswith("PL") or size.startswith("PLATE"):
103
+ cat = "Plates"
104
+ else:
105
+ cat = "Other"
106
+
107
+ categories[cat] = categories.get(cat, 0) + line_wt
108
+ grade_totals[grade] = grade_totals.get(grade, 0) + line_wt
109
+
110
+ print(f" {mark:<8} {qty:>4} x {size:<14} x {length:>7.1f} ft @ {unit_wt:>6.1f} plf = {line_wt:>10,.0f} lb {grade:<8}")
111
+
112
+ # Connection & misc allowances
113
+ conn_wt = total_lbs * conn_pct
114
+ misc_wt = total_lbs * misc_pct
115
+ grand_total = total_lbs + conn_wt + misc_wt
116
+
117
+ print(f"\n {'='*78}")
118
+ print(f"\n CATEGORY BREAKDOWN:")
119
+ for cat in sorted(categories.keys()):
120
+ wt = categories[cat]
121
+ pct = (wt / total_lbs * 100) if total_lbs > 0 else 0
122
+ print(f" {cat:<20} {wt:>12,.0f} lb ({pct:>5.1f}%)")
123
+
124
+ print(f"\n GRADE BREAKDOWN:")
125
+ for grade in sorted(grade_totals.keys()):
126
+ wt = grade_totals[grade]
127
+ pct = (wt / total_lbs * 100) if total_lbs > 0 else 0
128
+ print(f" {grade:<20} {wt:>12,.0f} lb ({pct:>5.1f}%)")
129
+
130
+ print(f"\n {'─'*60}")
131
+ print(f" {'Members:':<30} {line_count:>8} marks")
132
+ print(f" {'Total Pieces:':<30} {total_pieces:>8} pcs")
133
+ print(f" {'Member Weight:':<30} {total_lbs:>12,.0f} lb ({total_lbs/2000:>8,.1f} tons)")
134
+ print(f" {'Connection Allow ({:.0f}%):':<30} {conn_wt:>12,.0f} lb ({conn_wt/2000:>8,.1f} tons)".format(conn_pct*100))
135
+ print(f" {'Misc Steel Allow ({:.0f}%):':<30} {misc_wt:>12,.0f} lb ({misc_wt/2000:>8,.1f} tons)".format(misc_pct*100))
136
+ print(f" {'─'*60}")
137
+ print(f" {'GRAND TOTAL:':<30} {grand_total:>12,.0f} lb ({grand_total/2000:>8,.1f} tons)")
138
+ print(f" {'─'*60}")
139
+
140
+ # Cost estimates at various $/ton rates
141
+ print(f"\n COST ESTIMATES:")
142
+ tons = grand_total / 2000
143
+ for rate in [2800, 3200, 3600, 4000]:
144
+ cost = tons * rate
145
+ print(f" @ ${rate:,}/ton: ${cost:>14,.0f}")
146
+
147
+ print(f"\n{'='*78}\n")
148
+ PYTHON