This skill should be used when the user asks to "read a planset", "generate a BOM", "create a bill of materials from a plan set", "extract equipment from a planset", "pull the BOM from this PDF", "what's on this planset", "read this design plan", or drops a Photon Brothers stamped planset PDF. Produces a full bill of materials from a PB solar/storage design planset, outputting CSV, Markdown, and JSON matched to the InternalProduct inventory schema.
Generate a complete Bill of Materials from a Photon Brothers stamped solar/storage planset PDF.
Read a PB planset PDF and extract every line item into a structured BOM covering:
Output all three formats: CSV, Markdown, and JSON (inventory-ready).
Every PB planset is a stamped AutoCAD PDF with consistent sheet numbering:
| Sheet | Source | What to Extract |
|---|---|---|
| PV-0 | Cover sheet | System size (kWdc/kWac), equipment list with / prefixes |
(N)(E)| PV-2 | Roof plan | BILL OF MATERIALS table — primary source |
| PV-4 | Electrical line diagram | Equipment model numbers, AC disconnect callout, rapid shutdown switch |
| PV-5 | Electrical calculation | OCPD rating for validation |
| PV-6 | Warning labels | ESS kWh size for battery validation |
Focus extraction on PV-2 BOM table (primary) and PV-4 SLD (part numbers, AC disconnect callout, rapid shutdown switch).
Before extracting, fetch recent feedback to calibrate:
GET /api/bom/feedback (or query the DB directly)Note: The API extraction path (
/api/bom/extract) and pipeline now inject feedback into the system prompt automatically. This step ensures skill-driven (interactive) sessions also benefit from feedback.
Use the Read tool on the PDF. If it's large, read pages 1–3 first (PV-0, PV-1, PV-2), then pages 5–6 (PV-4, PV-5) for the conductor table.
From the system headline and PHOTOVOLTAIC SYSTEM SPECIFICATIONS block:
systemSizeKwdc, systemSizeKwac from headline: 16 MODULES-ROOF MOUNTED - 7.040 kWDC, 11.500 kWACcustomer, address, apn, utility, ahj from the title block (right side of sheet)plansetRev, stampDate from revisions block(N) [QTY] - [MAKE MODEL] lines — (N) = new, (E) = existing (skip from BOM)Find the BILL OF MATERIALS table with columns EQUIPMENT | QTY | DESCRIPTION.
Parse each row into:
lineItem, category, brand, model, description, qty, unitSpec, unitLabel, source="PV-2"
Also read the module detail block (upper-left of PV-2) for: module dimensions, weight, PSF, and roof coverage %.
Do NOT extract wires or conductors. Skip the entire conductor schedule table on PV-4 (Tags A/B/C/D). Wires are stocked internally and not needed in the BOM.
A. Rapid Shutdown Switch — scan the SLD diagram itself (not the table) for:
(N) RAPID SHUTDOWN SWITCH
If present → add to BOM:
{ "category": "RAPID_SHUTDOWN", "brand": "IMO", "model": "IMO SI16-PEL64R-2",
"description": "IMO RAPID SHUTDOWN DEVICE, SI16-PEL64R-2", "qty": 1, "source": "PV-4" }
This is the control unit that triggers the MCI-2 module-level devices. It does NOT appear in the PV-2 BOM table — only in the PV-4 SLD. Always qty 1 per job.
B. AC disconnect wire configuration — read the SLD callout for the 60A disconnect:
1-PHASE, 3-WIRE → use SKU TGN3322R (3-pole, for service upgrade jobs with neutral)2-WIRE or no wire count → use SKU DG222URB (2-pole, standard)C. Part numbers — from PV-4 spec tables:
1707000-XX-Y) → model: "1707000-XX-Y", description: "TESLA POWERWALL 3, 13.5kWh BATTERY & INVERTER"1841000-X1-Y) → model: "1841000-X1-Y", description: "TESLA BACKUP GATEWAY 3, 200A, NEMA 3R"Model field rule: Always use the manufacturer part number (alphanumeric code from the planset specs) as model, never the marketing product name. Put the product name in description.
Set validation.moduleCountMatch, batteryCapacityMatch, ocpdMatch booleans.
Assemble the full BOM JSON matching the schema in references/bom-schema.md.
Output all three formats inline:
/api/inventory/sync-productsOptionally run the export script if a file path is needed:
python3 .claude/skills/planset-bom/scripts/export-bom.py bom.json
| Source | EQUIPMENT Label | Category | Notes |
|---|---|---|---|
| PV-2 | SOLAR PV MODULE | MODULE | e.g. "SEG Solar", "Hyundai Solar" |
| PV-2 | BATTERY & INVERTER | BATTERY | "Tesla" (Powerwall-3 is combo unit) |
| PV-2 | RAPID SHUTDOWN | RAPID_SHUTDOWN | "Tesla" MCI-2 devices |
| PV-4 SLD | RAPID SHUTDOWN SWITCH | RAPID_SHUTDOWN | "IMO" — NOT in PV-2 BOM; scan SLD diagram |
| PV-2 | RAIL | RACKING | "IronRidge" XR10 or XR100 per roof type |
| PV-2 | BONDED SPLICE | RACKING | "IronRidge" |
| PV-2 | CLAMP (MID/END) | RACKING | "IronRidge" |
| PV-2 | ATTACHMENT | RACKING | "IronRidge" (HUG = Halo Ultragrip) |
| PV-2 | RD STRUCTURAL SCREW | RACKING | "IronRidge" (HW-RD1430-01-M1) |
| PV-2 | GROUNDING LUG | ELECTRICAL_BOS | — |
| PV-2 | JUNCTION BOX | ELECTRICAL_BOS | "EZ Solar" (JB-1.2) |
| PV-2 | AC DISCONNECT | ELECTRICAL_BOS | Check PV-4 SLD: 2-WIRE → DG222URB, 3-WIRE → TGN3322R |
| PV-2 | TESLA BACKUP GATEWAY | MONITORING | "Tesla" (Backup Gateway-3) |
| PV-2 | PRODUCTION METER | MONITORING | "Xcel Energy" (Xcel jobs only) |
Always read DESIGN CRITERIA on PV-0 for roof type first — it determines the attachment system:
| Roof Type | Attachment | Rail | Lag Screws |
|---|---|---|---|
| ASPHALT SHINGLE | IronRidge HUG | XR10 | Yes (HW-RD1430-01-M1) |
| TRAPEZOIDAL METAL ROOF | S-5! ProteaBracket | XR100 | No |
For metal roofs: ATTACHMENT row = "S-5! PROTEABRACKET ATTACHMENTS", no RD STRUCTURAL SCREW row.
Patterns seen across multiple reviewed jobs — expect to see these on most jobs:
Modules (varies per job):
Battery/Inverter: Tesla Powerwall 3 → brand: "Tesla", model: "1707000-XX-Y", description: "TESLA POWERWALL 3, 13.5kWh BATTERY & INVERTER" (part number from PV-4 SPECIFICATIONS table)
Rapid Shutdown: Tesla MCI-2 (standard) or MCI-2 High Current — count = number of modules / 2 rounded up, or 1 per string
Racking: IronRidge XR10 rail (168" lengths), HUG attachments, HW-RD1430-01-M1 structural screws
Gateway: Tesla Backup Gateway-3, 200A, NEMA 3R (model 1841000-X1-Y)
references/extraction-guide.md — Full extraction guide with real BOM examples from two actual PB jobs (Cantwell PROJ8783 and Anderson PROJ-8539), complete conductor schedules, and validation rulesreferences/bom-schema.md — Full JSON schema, CSV column order, and Markdown template with example outputscripts/export-bom.py — Export script: takes BOM JSON, outputs .csv + .md + pretty JSON