@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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 StructuPath LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # pi-steel
2
+
3
+ Structural steel estimating skills for the [Pi coding agent](https://pi.dev) — built by working steel estimators, not by people guessing what a takeoff is.
4
+
5
+ By [StructuPath](https://structupath.ai), from the team behind a production structural-steel fabrication shop in Denver, CO.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pi install npm:@structupath/pi-steel
11
+ ```
12
+
13
+ ## What's Inside
14
+
15
+ ### `steel-takeoff` — takeoffs, BOMs, tonnage
16
+
17
+ Structural steel quantity takeoff with a bundled **AISC 16th Edition shapes database (477 shapes)** — W, HSS, angles, channels, pipe — plus scripts the agent runs directly:
18
+
19
+ - `lookup-member.sh` — full property set for any AISC designation (`W14X30` → plf, d, bf, A, Ix, Sx, …)
20
+ - `calculate-weight.sh` — BOM totals with connection and misc-steel allowances, tonnage, cost sensitivity
21
+ - `validate-bom.py` — catches invalid designations, wrong grades, duplicate marks, unreasonable weights
22
+
23
+ Also includes reference guides for AISC shape families, takeoff procedures with worked examples, connection types and hardware weights, material grades, and bolt capacities.
24
+
25
+ Ask your agent things like:
26
+
27
+ > "Do a takeoff from these drawings and build me a BOM"
28
+ > "What's the lightest W-shape with depth ≥ 18" and Ix ≥ 1000?"
29
+ > "Total tonnage on this BOM with 12% connections"
30
+
31
+ ### `steel-rfq` — vendor quote requests
32
+
33
+ Turns a steel estimate/takeoff spreadsheet into a standardized vendor RFQ (.xlsx): materials grouped the way vendors stock them (W-shapes / plate / flat bar), yellow fill-in pricing columns, nesting/drop reference, and terms & conditions — branded with **your** company profile.
34
+
35
+ One-time setup: copy `skills/steel-rfq/assets/company-profile.example.json` to `company-profile.json` and put in your company name, city, and payment terms. The skill will ask and offer to save it if you skip this.
36
+
37
+ > "Send this takeoff out for pricing"
38
+ > "Generate an RFQ from this estimate"
39
+
40
+ ## Requirements
41
+
42
+ - `jq` and `python3` (with `pandas` + `openpyxl` for RFQ generation)
43
+ - macOS or Linux
44
+
45
+ ## License
46
+
47
+ MIT. AISC shape data derived from the publicly available AISC Shapes Database v16.0.
48
+
49
+ ---
50
+
51
+ Building software for steel fabricators? See [structupath.ai](https://structupath.ai).
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@structupath/pi-steel",
3
+ "version": "0.1.0",
4
+ "description": "Structural steel estimating skills for the Pi coding agent — AISC takeoffs, bills of material, tonnage calcs, and vendor RFQ generation.",
5
+ "type": "module",
6
+ "keywords": [
7
+ "pi-package",
8
+ "pi-skill",
9
+ "steel",
10
+ "structural-steel",
11
+ "estimating",
12
+ "takeoff",
13
+ "aisc",
14
+ "bom",
15
+ "rfq",
16
+ "construction",
17
+ "fabrication"
18
+ ],
19
+ "author": "StructuPath (https://structupath.ai)",
20
+ "license": "MIT",
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/StructuPath/pi-steel.git"
24
+ },
25
+ "homepage": "https://structupath.ai",
26
+ "engines": {
27
+ "node": ">=20.6.0"
28
+ },
29
+ "pi": {
30
+ "skills": ["./skills"]
31
+ },
32
+ "files": [
33
+ "skills",
34
+ "README.md",
35
+ "LICENSE"
36
+ ]
37
+ }
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: steel-rfq
3
+ description: "Generate standardized Request for Quotation (RFQ) spreadsheets from steel estimate takeoff files. Use this skill whenever someone mentions RFQ, request for quote, vendor quote, material quote, sending a material list to vendors, quoting steel, or getting pricing from a supplier. Also trigger when someone uploads a steel estimate or takeoff spreadsheet and wants to send it out for pricing. Even if they just say 'I need to send this to my vendor' or 'get me prices on this material' — that's an RFQ."
4
+ ---
5
+
6
+ # Steel RFQ Generator
7
+
8
+ ## What This Skill Does
9
+
10
+ This skill takes a steel estimate/takeoff spreadsheet (.xlsx) and produces a clean, standardized RFQ spreadsheet that can be sent directly to steel vendors. The output is always an Excel file with a consistent layout so every vendor gets the same professional format regardless of who creates it.
11
+
12
+ The RFQ format was designed around how steel vendors actually work — materials grouped by type (W-shapes, plates, flat bar) so vendors can quickly identify what they have in stock, quote pricing, and flag what they don't carry.
13
+
14
+ ## Company Profile (required setup)
15
+
16
+ The RFQ carries the requesting company's identity. Load it from
17
+ `assets/company-profile.json` in this skill's directory (copy
18
+ `company-profile.example.json` and edit). If the file is missing, ask the
19
+ user for their company name, city/state, and payment terms before
20
+ generating, and offer to save the answers as `company-profile.json` for
21
+ next time.
22
+
23
+ Profile fields:
24
+ - `company_name` — appears in the header and terms & conditions
25
+ - `city_state` — appears in the header (e.g., "Denver, CO")
26
+ - `payment_terms` — default "Net 30 from date of delivery"
27
+ - `quote_validity_days` — default 30
28
+ - `logo` — optional filename in `assets/` to embed top-left
29
+
30
+ Never invent company details. If the profile is incomplete, ask.
31
+
32
+ ## Input
33
+
34
+ Always a steel estimate spreadsheet (.xlsx). These files typically have:
35
+ - A "Steel Takeoff" sheet (or similar) with line items for structural members, plates, and connection hardware
36
+ - Item numbers (A-01, B-01, C-01, etc.), categories, descriptions, sizes, quantities, stock lengths, and weights
37
+ - Items marked "BY OTHERS" (typically purlins) that are NOT part of the fabricator's scope
38
+
39
+ The first step is always to read and understand the takeoff data before generating the RFQ.
40
+
41
+ ## Reading the Estimate
42
+
43
+ 1. Use pandas to read all sheets: `pd.ExcelFile(path)` then inspect sheet names
44
+ 2. Find the takeoff sheet (look for "Takeoff", "Steel Takeoff", "Material List", "BOM", or the sheet with item-level steel data)
45
+ 3. Read the full sheet with `header=None` to capture all rows including section headers
46
+ 4. Identify the data structure:
47
+ - Section headers (e.g., "A. MAIN BUILDING — W-SHAPES")
48
+ - Column headers (Item, Category, Description, Size, Qty, Length, Weight, Stock Purchase, Purchase Wt, Notes)
49
+ - Line items with actual material data
50
+ - Items with "BY OTHERS" in the description — these get **excluded**
51
+ - Subtotal and total rows
52
+
53
+ ## RFQ Output Format
54
+
55
+ The output is always a single .xlsx file with this exact structure:
56
+
57
+ ### Header Block (Rows 1–3)
58
+ - **Row 1**: "REQUEST FOR QUOTATION — Structural Steel" — dark blue background (#1F3864), white bold Arial 14pt, merged across all columns
59
+ - **Row 2**: "[Project Name] | [Company Name] — [City, ST]" — same dark blue, white bold Arial 11pt
60
+ - **Row 3**: "Date Issued: [today] | Response Requested By: _______________ | Project Location: [location]" — same dark blue, white Arial 10pt
61
+
62
+ ### Vendor Info Block (Rows 4–6)
63
+ Fillable fields for the vendor:
64
+ - Row 5: Company Name (merged A–B, input in C–E yellow) | Contact Name (merged F–G, input in H–J yellow)
65
+ - Row 6: Phone/Email (merged A–B, input in C–E yellow) | Quote Valid Until (merged F–G, input in H–J yellow)
66
+
67
+ ### Instructions Row (Row 7)
68
+ Single merged row with italic gray text explaining how to fill out the yellow columns. Text:
69
+ > "Instructions: Please fill in the YELLOW columns (Unit Price, Total Price, Availability, Lead Time, Alternate Size, Notes). Mark Availability as 'In Stock', 'Lead Time', or 'Unavailable'. If suggesting an alternate size, list it and adjust pricing accordingly."
70
+
71
+ ### Column Headers (Row 8)
72
+ 14 columns with medium blue background (#2E75B6), white bold Arial 10pt:
73
+
74
+ | Column | Header | Width | Purpose |
75
+ |--------|--------|-------|---------|
76
+ | A | Item | 7 | Item number from estimate (A-01, C-02, E-01, etc.) |
77
+ | B | Category | 13 | Columns, Girders, Plate, Flat Bar, etc. |
78
+ | C | Description | 38 | Full description including which structure it belongs to |
79
+ | D | Size / Designation | 22 | AISC shape or plate dimensions |
80
+ | E | Grade | 12 | A992 Gr.50, A572 Gr.50, A36, etc. |
81
+ | F | Qty | 6 | Number of pieces or sticks needed |
82
+ | G | Stock Length / Size | 20 | How it's being purchased (e.g., "3 sticks × 30′") |
83
+ | H | Est. Purchase Wt (lbs) | 20 | Weight from the estimate |
84
+ | I | Unit Price ($) | 14 | **VENDOR FILLS** — yellow background |
85
+ | J | Total Price ($) | 14 | **VENDOR FILLS** — yellow background |
86
+ | K | Availability | 14 | **VENDOR FILLS** — yellow background |
87
+ | L | Lead Time (days) | 14 | **VENDOR FILLS** — yellow background |
88
+ | M | Alternate Size | 18 | **VENDOR FILLS** — yellow background |
89
+ | N | Notes | 30 | **VENDOR FILLS** — yellow background |
90
+
91
+ Vendor columns (I–N) get a darker gold header (#BF8F00) to distinguish them from the material data columns.
92
+
93
+ ### Material Data Rows
94
+
95
+ **Grouping**: Always group by material type, not by structure. The three groups are:
96
+ 1. **W-SHAPES — [Grade]** (columns and girders from all structures combined)
97
+ 2. **PLATE STOCK — [Grade]** (all plate material)
98
+ 3. **FLAT BAR STOCK — [Grade]** (all flat bar material)
99
+
100
+ Each group gets a section header row: merged across all columns, medium blue background, white bold text.
101
+
102
+ **Data rows**:
103
+ - Alternate row shading: light blue (#D6E4F0) and white
104
+ - Vendor columns (I–N) always have yellow background (#FFF2CC) regardless of row
105
+ - Weight column (H) formatted as `#,##0`
106
+ - Price columns (I–J) formatted as `$#,##0.00`
107
+ - All cells have thin borders
108
+
109
+ **Filtering rules**:
110
+ - EXCLUDE any item where the description contains "BY OTHERS" (purlins, etc.)
111
+ - EXCLUDE any item where Qty = 0
112
+ - If the estimate has a "Stock Purchase" section (Section E or similar) with consolidated purchase items for plates/flat bar, use those instead of the individual connection plate items. The stock purchase items represent what's actually being ordered (full sheets, full bars), which is what the vendor needs to quote.
113
+ - Keep individual W-shape items because each shape/length combination matters for vendor stock
114
+
115
+ ### Totals Row
116
+ - "TOTAL PURCHASE WEIGHT / PRICE" label merged A–G, right-aligned bold
117
+ - Column H: `=SUM(H[first]:H[last])` formula for total weight, green background (#E2EFDA)
118
+ - Column J: `=SUM(J[first]:J[last])` formula for total price, green background
119
+
120
+ ### Nesting / Drop Reference Table
121
+ Below the totals (skip a row), add a reference section:
122
+ - Header: "NESTING / DROP REFERENCE (For Fabricator Use)" — dark blue bold text
123
+ - Three columns: Material | Nesting Plan | Drop Notes
124
+ - Column headers with medium blue background
125
+ - One row per material showing the nesting layout and expected drop from the estimate
126
+ - This helps cross-check vendor stock lengths against the cutting plan
127
+
128
+ ### Standard Terms & Conditions
129
+ Below the nesting table (skip a row), add:
130
+ - Header: "TERMS & CONDITIONS" — dark blue bold text
131
+ - Include these standard terms, each on its own row, substituting the company name and payment terms from the company profile:
132
+
133
+ 1. **Delivery**: All material to be delivered FOB jobsite unless otherwise agreed. Vendor to confirm freight costs separately.
134
+ 2. **Mill Certifications**: Mill test reports (MTRs) required for all structural steel per AISC/AWS standards. Certs must accompany delivery.
135
+ 3. **Payment Terms**: [payment_terms from profile] unless otherwise negotiated in writing.
136
+ 4. **Material Standards**: All wide-flange shapes to meet ASTM A992. All plate and bar to meet grade specified on this RFQ (A572 Gr.50 or A36).
137
+ 5. **Substitutions**: No substitutions without prior written approval from [Company Name]. If quoting alternate sizes, clearly note in the "Alternate Size" column.
138
+ 6. **Quote Validity**: Quoted prices to remain firm for [quote_validity_days] days from date of quote unless otherwise stated.
139
+ 7. **Inspection**: [Company Name] reserves the right to inspect material upon delivery and reject material not meeting specifications.
140
+ 8. **Cancellation**: Orders may be cancelled without penalty if material has not shipped. Restocking fees, if any, to be stated in quote.
141
+
142
+ ### Branding / Logo
143
+ If the company profile names a logo file and it exists in the skill's `assets/` directory, insert it in cell A1 area (top-left) and adjust the header text to not overlap. Otherwise use the text header as described above.
144
+
145
+ ## Print Setup
146
+ - Orientation: Landscape
147
+ - Fit to width: 1 page
148
+ - Fit to height: 0 (auto)
149
+ - Print title rows: Row 8 (column headers repeat on each page)
150
+
151
+ ## File Naming
152
+ Output file: `[ProjectName]_RFQ_Material_List.xlsx`
153
+ - Extract project name from the estimate file (look in "Project Info" sheet or the first rows of the takeoff)
154
+ - Replace spaces with underscores
155
+ - Example: `Cherokee_Boys_RFQ_Material_List.xlsx`
156
+
157
+ ## Step-by-Step Workflow
158
+
159
+ 1. Load the company profile (or collect it from the user — see Company Profile above)
160
+ 2. Read the uploaded estimate file with pandas to understand its structure
161
+ 3. Identify the takeoff sheet and parse all line items
162
+ 4. Filter out "BY OTHERS" items and zero-quantity items
163
+ 5. Group remaining items by material type (W-shapes → Plates → Flat Bar)
164
+ 6. If there's a stock purchase section, use those for plates/flat bar instead of individual pieces
165
+ 7. Build the RFQ spreadsheet using openpyxl following the format above
166
+ 8. Add formulas for totals and verify the SUM ranges cover exactly the data rows (formulas calculate when the vendor opens the file in Excel)
167
+ 9. Add nesting/drop reference from the estimate notes
168
+ 10. Add standard terms & conditions with profile values substituted
169
+ 11. Insert logo if configured
170
+ 12. Save the file and present it to the user
171
+
172
+ ## Common Variations
173
+
174
+ **Multiple structures in one project**: Combine all materials into one RFQ, but note which structure each item belongs to in the Description column (e.g., "W12×65 Columns (Bldg A)").
175
+
176
+ **Plate stock with nesting**: When plates are purchased as full sheets and then cut, show the full sheet as the line item (that's what the vendor ships) and put the cutting plan in the nesting reference table.
177
+
178
+ **Mixed grades**: Group by material type first, then note the grade in each row. If a project has A992, A572, and A36, they all appear in the appropriate material type section with grade clearly marked.
@@ -0,0 +1,7 @@
1
+ {
2
+ "company_name": "Acme Steel Fabrication",
3
+ "city_state": "Denver, CO",
4
+ "payment_terms": "Net 30 from date of delivery",
5
+ "quote_validity_days": 30,
6
+ "logo": null
7
+ }
@@ -0,0 +1,157 @@
1
+ ---
2
+ name: steel-takeoff
3
+ description: >
4
+ Structural steel takeoff, AISC member lookup, and quantity estimating.
5
+ Use when performing steel takeoffs, reading structural prints/blueprints,
6
+ looking up AISC member properties (W-shapes, HSS, angles, channels, pipe),
7
+ building bills of materials (BOM), calculating steel tonnage, or preparing
8
+ steel bid packages. Keywords: steel, takeoff, BOM, AISC, W-shape, HSS,
9
+ angle, channel, weight, tonnage, structural, estimating, blueprint,
10
+ quantity survey, beam, column, brace, connection, erection, ironwork.
11
+ license: MIT
12
+ compatibility: Requires jq and python3. macOS or Linux.
13
+ metadata:
14
+ domain: structural-steel
15
+ version: "1.0.0"
16
+ aisc-edition: "16th"
17
+ shapes-count: "400+"
18
+ allowed-tools: Bash Read Edit Write
19
+ ---
20
+
21
+ # Steel Takeoff Skill
22
+
23
+ Structural steel quantity takeoff and AISC member data lookup using the 16th Edition shapes database.
24
+
25
+ ## Setup (run once per machine)
26
+
27
+ ```bash
28
+ cd "$(dirname "$0")"
29
+ chmod +x scripts/*.sh
30
+ python3 -c "import json, csv, sys" || echo "ERROR: python3 required"
31
+ command -v jq >/dev/null || echo "ERROR: install jq (brew install jq / apt install jq)"
32
+ ```
33
+
34
+ ## Quick Reference: AISC Member Lookup
35
+
36
+ Look up any AISC shape's full property set:
37
+
38
+ ```bash
39
+ # Single member lookup — returns all properties
40
+ ./scripts/lookup-member.sh "W14X30"
41
+
42
+ # Search for W-shapes by minimum moment of inertia
43
+ jq '[.[] | select(.type == "W" and .Ix >= 800)] | sort_by(.weight_per_ft) | .[:5]' assets/aisc-shapes-database.json
44
+
45
+ # Find lightest W-shape with depth >= 18" and Ix >= 1000 in⁴
46
+ jq '[.[] | select(.type == "W" and .d >= 18 and .Ix >= 1000)] | sort_by(.weight_per_ft) | .[0]' assets/aisc-shapes-database.json
47
+
48
+ # List all HSS rectangular shapes
49
+ jq '[.[] | select(.type == "HSS-RECT")] | sort_by(.weight_per_ft)' assets/aisc-shapes-database.json
50
+
51
+ # Find angles with leg >= 4"
52
+ jq '[.[] | select(.type == "L" and .d >= 4)]' assets/aisc-shapes-database.json
53
+
54
+ # Find channels by weight range
55
+ jq '[.[] | select(.type == "C" and .weight_per_ft >= 15 and .weight_per_ft <= 30)]' assets/aisc-shapes-database.json
56
+ ```
57
+
58
+ ## Takeoff Procedure
59
+
60
+ ### Step 1 — Parse Drawings
61
+ Read the structural drawings and extract:
62
+ - Member marks (e.g., B1, B2, C1, G1, BR1)
63
+ - Member sizes (e.g., W14X30, HSS6X6X1/4, L4X4X3/8)
64
+ - Lengths (from grid dimensions or explicit call-outs, use feet-inches: 28'-6")
65
+ - Quantities (count per mark — check symmetry, typical bays, similar conditions)
66
+ - Connection types at each end
67
+
68
+ ### Step 2 — Build the BOM
69
+ For each unique member mark, create a line item:
70
+
71
+ ```bash
72
+ cat assets/bom-template.csv
73
+ ```
74
+
75
+ Fields: Mark, Qty, Size, Grade, Length_ft, Unit_Wt_plf, Total_Wt_lbs, Connections, Notes
76
+
77
+ ### Step 3 — Look Up Unit Weights
78
+ For every member size in the BOM, look up the unit weight from the AISC database:
79
+
80
+ ```bash
81
+ ./scripts/lookup-member.sh "W14X30"
82
+ # Output: W14X30 | 30.0 plf | d=13.84" | bf=6.730" | A=8.85 in² | Ix=291 in⁴ | Sx=42.0 in³
83
+
84
+ ./scripts/lookup-member.sh "HSS8X6X1/2"
85
+ # Output: HSS8X6X1/2 | 42.1 plf | d=8.00" | b=6.00" | A=11.7 in² | Ix=96.4 in⁴
86
+ ```
87
+
88
+ ### Step 4 — Calculate Totals
89
+
90
+ ```bash
91
+ # From a BOM CSV file
92
+ ./scripts/calculate-weight.sh path/to/bom.csv
93
+
94
+ # Output includes:
95
+ # Per-line weights
96
+ # Total weight in lbs and tons
97
+ # Connection allowance (12%)
98
+ # Misc steel allowance (5%)
99
+ # Grand total with estimated cost
100
+ ```
101
+
102
+ ### Step 5 — Add Connections & Misc Steel
103
+ See [connection types reference](references/connection-types.md) for standard connection weights.
104
+
105
+ Rules of thumb for connection allowance:
106
+ | Building Type | Connection % |
107
+ |---|---|
108
+ | Simple warehouse / pre-eng | 8-10% |
109
+ | Standard commercial | 10-12% |
110
+ | Moment frames / complex | 12-18% |
111
+ | Heavy industrial / power | 15-20% |
112
+
113
+ ### Step 6 — Validate
114
+
115
+ ```bash
116
+ python3 scripts/validate-bom.py path/to/bom.csv
117
+ # Checks:
118
+ # ✓ Valid AISC designations
119
+ # ✓ Non-zero quantities and lengths
120
+ # ✓ Correct grade for shape type
121
+ # ✓ Reasonable weight-per-foot values
122
+ # ✓ No duplicate marks
123
+ ```
124
+
125
+ ## Material Grades Quick Reference
126
+
127
+ | Grade | Typical Use | Fy (ksi) | Fu (ksi) |
128
+ |---|---|---|---|
129
+ | A992 | W-shapes (default) | 50 | 65 |
130
+ | A500 Gr. B | HSS round | 42 | 58 |
131
+ | A500 Gr. C | HSS rectangular | 50 | 62 |
132
+ | A36 | Angles, channels, plates | 36 | 58 |
133
+ | A572 Gr. 50 | Plates, built-ups | 50 | 65 |
134
+ | A913 Gr. 50/65 | Jumbo shapes | 50/65 | 65/80 |
135
+ | A514 | High-strength plates | 100 | 110-130 |
136
+ | A588 | Weathering steel | 50 | 70 |
137
+
138
+ Full grade specs: `cat assets/material-grades.json`
139
+
140
+ ## Bolt Reference
141
+
142
+ | Bolt Type | Grade | Tensile (ksi) | Shear (ksi) | Common Sizes |
143
+ |---|---|---|---|---|
144
+ | A325 / F1852 (TC) | — | 120 | 54/68 | 3/4", 7/8", 1" |
145
+ | A490 / F2280 (TC) | — | 150 | 68/84 | 3/4", 7/8", 1" |
146
+ | A307 | Gr. A | 60 | 24 | 1/2" - 1" |
147
+
148
+ - N = threads in shear plane (lower capacity)
149
+ - X = threads excluded (higher capacity)
150
+ - SC = slip-critical (higher bolt pretension required)
151
+
152
+ ## Detailed References
153
+
154
+ For in-depth guidance on specific topics:
155
+ - [AISC Shapes Guide](references/aisc-shapes-guide.md) — all shape families, property definitions, selection guidance
156
+ - [Takeoff Procedures](references/takeoff-procedures.md) — detailed step-by-step with worked examples
157
+ - [Connection Types](references/connection-types.md) — standard connection details, hardware weights, bolt patterns