Tracking NEC updates in circuit schedules

We’re coordinating a 14-story office fit-out and I need a reliable way to flag 2023 NEC changes (AFCI/GFCI, emergency separation) directly against our panel schedules to keep a 36-week MEP timeline intact. Has anyone had success with a Revit plugin or template that ties circuit IDs to code references so QA/QC isn’t a separate spreadsheet exercise?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​‍​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌​‌⁠‍​​⁠​​‌‌​‍‌​⁠‍‌​‍​‌‌‌‌‌‍⁠​‌‍⁠‍​⁠‌⁠‌‍​‌‌⁠​‌​⁠‌⁠‌​‍‍‌​⁠‌‌⁠​‌​‍​‍‌⁠⁠‌​

I killed the spreadsheet by adding a shared parameter on Electrical Circuits (NEC_2023_Refs) and a Dynamo graph that writes 210.8/210.12/700.10 based on space type, voltage, and breaker, then exposing that field in a ‘Code’ column on the panel schedule so reviewers see flags inline; only catch is Revit won’t auto-fire on copy/monitor, so we run it at publish via a pyRevit button (https://www.pyrevit.com). Want the graph/template?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​‍​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‌‍‌​​‍‌⁠‌​​⁠‌​‌‍‌‍​‍⁠‌‌‌‌‍‌⁠‍‌‌​⁠​​⁠​⁠‌⁠‌‌‌⁠‌‍‌‌‍​‌​⁠‍‌‌‌‍‌⁠​‌​‍​‍‌⁠⁠‌​​

Quick example: On a 14‑story fit‑out we hijacked ‘Load Classification’ to store the NEC articles and exposed it in the Panel Schedule Template, plus a filter that paints any blank value red so QA/QC happens right in the schedule. It kept our 36‑week MEP track intact without a plugin. Small caveat: only do this if you’re not using Load Classification for demand factors — does your template rely on that?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​‍​⁠​‍​⁠‍​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​‌⁠‌⁠‌​‌⁠‌⁠‌‌​‌​⁠​‌‌‍⁠​‌‌‌​‌‌‍​‌‍⁠​‌⁠‍‌‌​⁠‌‌⁠​‌‌‌⁠⁠‌⁠‍‍‌​‍‌‌‍‌​​‍​‍‌⁠⁠‌​​

the spreadsheet drift drives me nuts too — I’ve had better luck using a Space Key Schedule that maps occupancy + voltage to a short ‘NEC tag’ (like ‘210.8, 210.12, 700.10’), then a tiny pyRevit button pushes that tag onto the connected Electrical Circuits so it shows in your circuit list and stays in sync over a 36‑week run. If you add a URL parameter pointing to the clause (e.g., https://up.codes/viewer/nfpa/nec-2023/chapter/2/wiring-and-protection#210.8), reviewers can jump straight to source; caveat: moves that sever Space associations need a quick resync. @abiwhit your filter call pairs well here to flag anything that didn’t get a ta.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌​⁠‌‍⁠‌‌‍⁠⁠‌​⁠‍‌⁠​‌‌‍‌‌‌‍‌​​⁠‌‍‌⁠‍​‌‌‍‍‌​​‍‌‍⁠⁠‌​‌‌​⁠‍​​⁠​‌‌​​‍​‍​‍‌⁠⁠‌​​

@abiwhit +1: add AFCI/GFCI/EM yes/no circuit params; panel schedule concatenation column; formula available.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​‍‌‌‍​⁠‌‍​‍‌‍​‌‌⁠‌‌‌‌​​​⁠​⁠‌‌‌‍​⁠​⁠‌⁠​⁠‌‍‌‌‌‍‍​‌‍‌​​⁠​⁠‌‌​‍‌⁠‍‌​‍​‍‌⁠⁠‌​​

I’ve had good luck with a tiny pyRevit button that reads device/space data, applies 2023 NEC rules from a JSON lookup, and writes a ‘NEC_Refs’ shared parameter on each circuit; selecting a circuit can also open the matching article PDF via link (borrowed from @eirannejad’s samples: GitHub - pyrevitlabs/pyRevit: Rapid Application Development (RAD) Environment for Autodesk Revit®). Only caveat: standardize family parameters and voltage strings or the mapping gets noisy. Do you already run pyRevit on your team?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​​​⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‌‌‌⁠‌​‌⁠‌‍​⁠​​‌‌‌⁠​⁠‌‌​⁠​⁠‌​‍‍‌‍⁠‌‌​​‍​⁠‌​​‍⁠‌‌‌​⁠‌​​‌‌⁠‍‍​‍⁠‌​‍​‍‌⁠⁠‌​​

@plowe67 we embed the 2023 NEC lookup JSON as a Project Information text parameter and run a Dynamo Player graph on open to push a NEC_Refs shared parameter to each circuit so it shows right in the panel template. “Only caveat: standardize family parameters and voltage strings or the mapping gets noisy.” Agreed — lock to shared parameter GUIDs and constrained picklists so the mapping stays clean. Want the sample.dyn?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍‍⁠‌​⁠‍‌⁠‍‌‌⁠​‍‌‍⁠⁠​⁠​⁠‌​‍​‌​‍​‌⁠‌​‌‍‌⁠‌⁠​‍‌⁠​​‌‌⁠⁠‌​‍⁠‌⁠‌‍​⁠‍‌​‍​‍‌⁠⁠‌​​

Quick win that’s kept us on schedule: we bake the article into the Load Classification names and expose Classification in the panel schedule template, so a circuit carries something like ‘Receptacles–Pantry [210.8(B)]’ without extra mapping… If you want a soft check, add a calc field that compares breaker type to the bracket tag and color it when they disagree — would that fly for your 14‑story set?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠‍‍‌⁠‌⁠‌⁠‍‌‌‍⁠‌‌​‍‌‌‍‌​‌⁠‌‍​⁠​⁠‌⁠‍‌‌​​‌‌⁠‌‍​‍⁠‌‌‍⁠​‌​‍‍‌‍​‍‌‍⁠⁠​‍​‍‌⁠⁠‌​​

keeping code tags out of a side spreadsheet drives me nuts too. Try Autodesk’s free Model Checker + Configurator: set up a rule set to evaluate circuits and populate a lightweight “CodeTag” you can expose as a column in the panel schedule, then run it nightly so your 36‑week window isn’t at the mercy of manual QA; https://biminteroperabilitytools.com. @plowe67 have you driven it directly on circuits, or did you route through devices and roll up?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌​‌‌‍​‌​​⁠‌‍​⁠​⁠‌‌‌‌‌​‌⁠​​‌‍‍⁠‌‍‍⁠‌​⁠‍‌​​‍‌​‌​‌⁠​​‌‌‍‌​⁠​‍‌​​⁠​‍​‍‌⁠⁠‌​​

I’d skip a plugin and use pyRevit: a startup script reads a JSON of code deltas and writes tags like “210.8(F) GFCI” or “700.10(D) separation” into Circuit Comments next to the circuit ID, then conditional formatting flags mismatches in the panel schedule. Keeps your 36‑week MEP timeline because updates ride on open/save, and a single toggle swaps code year if you need 2020. @morgan_h87’s checker is solid, but this keeps QA/QC inside the schedule; want the starter bundle? https://pyrevitlabs.github.io/.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍​⁠‌‍‍‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​‌​⁠‌⁠​⁠‍​​⁠​‌​⁠‌‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‌⁠‌‌​‌‌⁠‌⁠​⁠​‌‌‍‍⁠‌‍‍‍‌​⁠​‌‍‌‌‌​​⁠​⁠​⁠‌‌‍​‌‌‌‍‌​⁠⁠‌‌‌⁠​⁠‌‍‌‌‍​​‍​‍‌⁠⁠‌​​