NEC Panel Schedule Calculator

ANALife Services AuthorityNational Calculator Authority›NEC Panel Schedule Calculator

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

NEC Panel Schedule Calculator

Calculate panel load schedules per NEC Article 220, including connected loads, demand factors, total load, and minimum service/feeder sizing.

### Panel Information

System Voltage (V)

120V (1-phase) 240V (1-phase, 2-wire) 208V (3-phase) 480V (3-phase)

Number of Phases

Single-Phase Three-Phase

Power Factor

### Circuit Loads

Enter each circuit's breaker size and connected load. Select load type for NEC demand factor application.

### Additional Loads (NEC 220.14 / 220.82)

Floor Area (sq ft) — General Lighting @ 3 VA/sq ft

Small Appliance Circuits (qty, 1500 VA each)

Laundry Circuits (qty, 1500 VA each)

HVAC / A/C Load (VA)

Electric Heat Load (VA)

EV Charger Load (VA)

Calculate Panel Schedule

// ── Default circuits ────────────────────────────────────────────────────────── const necDefaultCircuits = [ { label:"Kitchen Range", breaker:50, va:12000, type:"range" }, { label:"Dryer", breaker:30, va:5000, type:"dryer" }, { label:"Water Heater", breaker:30, va:4500, type:"fixed" }, { label:"Dishwasher", breaker:20, va:1200, type:"fixed" }, { label:"Refrigerator", breaker:20, va:700, type:"fixed" }, { label:"Microwave", breaker:20, va:1500, type:"fixed" }, ];

const necLoadTypes = [ { value:"lighting", label:"General Lighting" }, { value:"receptacle",label:"Receptacle / Outlet" }, { value:"fixed", label:"Fixed Appliance" }, { value:"range", label:"Cooking Equipment (Range)" }, { value:"dryer", label:"Clothes Dryer" }, { value:"motor", label:"Motor Load" }, { value:"hvac", label:"HVAC / A/C" }, { value:"ev", label:"EV Charger" }, { value:"other", label:"Other / Continuous" }, ];

let necCircuitCount = 0;

function necBuildTypeOptions(selected) { return necLoadTypes.map(t => ${t.label} ).join(""); }

function necAddCircuit(label="", breaker=20, va=0, type="receptacle") { necCircuitCount++; const id = necCircuitCount; const container = document.getElementById("nec-circuits-container"); const row = document.createElement("div"); row.id = nec-circuit-row-${id}; row.style.cssText = "display:flex;gap:8px;align-items:center;margin-bottom:6px;flex-wrap:wrap;"; row.innerHTML = `

${necBuildTypeOptions(type)}

✕ `; container.appendChild(row); }

function necRemoveCircuit(id) { const el = document.getElementById(nec-circuit-row-${id}); if (el) el.remove(); }

// ── Demand factors per NEC ──────────────────────────────────────────────────── // NEC 220.55 Table — Cooking equipment demand (simplified column C for 1 unit) function necRangeDemand(va) { // NEC Table 220.55, Column C: 1 unit // ≤ 12 kVA → 8 kVA; > 12 kVA add 5% per kW over 12 const kva = va / 1000; if (kva a + b, 0); return loads.length >= 4 ? total * 0.75 : total; }

// NEC 220.60 — Largest of HVAC or heat (non-coincident), 100% of larger function necNonCoincident(hvac, heat) { return Math.max(hvac, heat); }

// ── Main calculation ────────────────────────────────────────────────────────── function necCalc() { const voltage = parseFloat(document.getElementById("nec-voltage").value); const phases = parseInt(document.getElementById("nec-phases").value); const pf = parseFloat(document.getElementById("nec-pf").value); const sqft = parseFloat(document.getElementById("nec-sqft").value) || 0; const saCirc = parseInt(document.getElementById("nec-small-appliance").value) || 0; const laundry = parseInt(document.getElementById("nec-laundry").value) || 0; const hvacVA = parseFloat(document.getElementById("nec-hvac").value) || 0; const heatVA = parseFloat(document.getElementById("nec-heat").value) || 0; const evVA = parseFloat(document.getElementById("nec-ev").value) || 0;

// Validate if (isNaN(voltage) || voltage 1.0) { alert("Power factor must be between 0.50 and 1.00."); return; }

// ── Collect circuit rows ── const rows = document.querySelectorAll("[id^='nec-circuit-row-']"); const circuits = []; for (const row of rows) { const rid = row.id.replace("nec-circuit-row-",""); const label = document.getElementById(nec-clabel-${rid}).value || Circuit ${rid}; const breaker = parseFloat(document.getElementById(nec-cbreaker-${rid}).value) || 0; const va = parseFloat(document.getElementById(nec-cva-${rid}).value) || 0; const type = document.getElementById(nec-ctype-${rid}).value; if (breaker a+b,0);

// Apply NEC 220.42 lighting demand const lightingDemand = necLightingDemand(totalLightingRaw);

// ── Range demand (NEC 220.55) ── let rangeDemand = 0; for (const rv of rangeLoads) rangeDemand += necRangeDemand(rv);

// ── Dryer demand (NEC 220.54) ── let dryerDemand = 0; for (const dv of dryerLoads) dryerDemand += necDryerDemand(dv);

// ── Fixed appliance demand (NEC 220.53) ── const fixedDemand = necFixedApplianceDemand(fixedLoads);

// ── Motor loads: 125% of largest motor (NEC 430.24) ── let motorDemand = 0; if (motorLoads.length > 0) { const largest = Math.max(...motorLoads); const rest = motorLoads.reduce((a,b)=>a+b,0) - largest; motorDemand = largest * 1.25 + rest; }

// ── HVAC / Heat non-coincident (NEC 220.60) ── const totalHVAC = hvacVA + hvacCircLoads.reduce((a,b)=>a+b,0); const hvacHeatDemand = necNonCoincident(totalHVAC, heatVA);

// ── EV charger: 100% (NEC 625.42) ── const evDemand = evVA + evCircLoads.reduce((a,b)=>a+b,0);

// ── Other loads: 100% ── const otherDemand = otherLoads.reduce((a,b)=>a+b,0);

// ── Total demand load ── const totalDemandVA = lightingDemand + rangeDemand + dryerDemand + fixedDemand + motorDemand + hvacHeatDemand + evDemand + otherDemand;

// ── Minimum service ampacity (NEC 230.42 / 220.87) ── // I = VA / (V × √3 for 3-phase, V for 1-phase) const sqrtThree = Math.sqrt(3); const divisor = phases === 3 ? voltage * sqrtThree : voltage; const minAmps = totalDemandVA / divisor;

// ── Standard service sizes (NEC 230.79) ── const stdSizes = [100, 125, 150, 200, 225, 300, 400, 600, 800, 1000, 1200]; const serviceSize = stdSizes.find(s => s >= minAmps) || Math.ceil(minAmps / 100) * 100;

// ── Feeder conductor size (NEC 310.12 / Table 310.16, 75°C Cu) ── // Simplified lookup const conductorTable = [ {amps:100, awg:"#4 AWG Cu"}, {amps:110, awg:"#3 AWG Cu"}, {amps:125, awg:"#2 AWG Cu"}, {amps:150, awg:"#1 AWG Cu"}, {amps:175, awg:"#1/0 AWG Cu"}, {amps:200, awg:"#2/0 AWG Cu"}, {amps:225, awg:"#3/0 AWG Cu"}, {amps:260, awg:"#4/0 AWG Cu"}, {amps:300, awg:"350 kcmil Cu"}, {amps:350, awg:"500 kcmil Cu"}, {amps:400, awg:"600 kcmil Cu"}, {amps:600, awg:"1000 kcmil Cu"}, ]; const conductor = conductorTable.find(c => c.amps >= serviceSize) || { awg: "See NEC Table 310.16" };

// ── Connected load total (no demand) ── const connectedTotal = circuits.reduce((a,c)=>a+c.va,0) + genLightingVA + saVA + laundryVA + hvacVA + heatVA + evVA;

// ── Build circuit table ── let circuitRows = ""; let cNum = 1; for (const c of circuits) { const maxVA = c.breaker * voltage; const pct = maxVA > 0 ? ((c.va / maxVA)*100).toFixed(1) : "—"; const amps = voltage > 0 ? (c.va / voltage).toFixed(1) : "—"; circuitRows += `

${cNum++} ${c.label} ${c.breaker}A ${c.va.toLocaleString()} ${amps} ${pct}% ${necLoadTypes.find(t=>t.value===c.type)?.label||c.type} `; }

// ── Render result ── const resultEl = document.getElementById("nec-result"); resultEl.style.display = "block"; resultEl.innerHTML = ` ### 📋 Panel Schedule Summary

#### Circuit Schedule

# Label Breaker Load (VA) Current (A) % Capacity Type

${circuitRows || 'No circuits entered'}

#### Load Demand Calculation (NEC Article 220)

Load Category Connected VA Demand Factor Demand VA

General Lighting (${sqft.toLocaleString()} sq ft × 3 VA) ${genLightingVA.toLocaleString()} NEC 220.42 —

Small Appliance Circuits (${Math.max(saCirc,2)} × 1,500 VA) ${saVA.toLocaleString()} NEC 220.14(B) —

Laundry Circuits (${laundry} × 1,500 VA) ${laundryVA.toLocaleString()} NEC 220.14(C) —

Lighting/Receptacle Demand Total ${totalLightingRaw.toLocaleString()} Tiered (100%/35%/25%) ${Math.round(lightingDemand).toLocaleString()}

Cooking Equipment (Range) ${rangeLoads.reduce((a,b)=>a+b,0).toLocaleString()} NEC Table 220.55 ${Math.round(rangeDemand).toLocaleString()}

Clothes Dryer ${dryerLoads.reduce((a,b)=>a+b,0).toLocaleString()} NEC 220.54 (min 5,000 VA) ${Math.round(dryerDemand).toLocaleString()}

Fixed Appliances (${fixedLoads.length} loads) ${fixedLoads.reduce((a,b)=>a+b,0).toLocaleString()} ${fixedLoads.length>=4?"75% (NEC 220.53)":"100%"} ${Math.round(fixedDemand).toLocaleString()}

Motor Loads (125% largest) ${motorLoads.reduce((a,b)=>a+b,0).toLocaleString()} NEC 430.24 ${Math.round(motorDemand).toLocaleString()}

HVAC / Heat (non-coincident) ${(totalHVAC + heatVA).toLocaleString()} NEC 220.60 (larger of HVAC/Heat) ${Math.round(hvacHeatDemand).toLocaleString()}

EV Charger ${evDemand.toLocaleString()} NEC 625.42 (100%) ${Math.round(evDemand).toLocaleString()}

Other Loads ${otherDemand.toLocaleString()} 100% ${Math.round(otherDemand).toLocaleString()}

TOTAL CONNECTED LOAD ${Math.round(connectedTotal).toLocaleString()} VA

TOTAL DEMAND LOAD

${Math.round(totalDemandVA).toLocaleString()} VA

#### Service / Feeder Sizing

Parameter Value Reference

System ${voltage}V, ${phases === 1 ? "Single" : "Three"}-Phase

Total Demand Load ${Math.round(totalDemandVA).toLocaleString()} VA (${(totalDemandVA/1000).toFixed(2)} kVA) NEC 220.40

Minimum Service Ampacity ${minAmps.toFixed(1)} A NEC 230.42

Recommended Service Size ${serviceSize}A NEC 230.79

Min. Feeder Conductor (75°C Cu) ${conductor.awg} NEC Table 310.16

Power Factor Used ${pf}

⚠️ This calculator provides estimates based on NEC 2023 Article 220 standard calculation method. Always verify with a licensed electrician and local AHJ (Authority Having Jurisdiction).

`; }

// ── Initialise default circuits on load ────────────────────────────────────── (function necInit() { for (const c of necDefaultCircuits) { necAddCircuit(c.label, c.breaker, c.va, c.type); } })();

#### Formulas Used

General Lighting Load (NEC 220.12): VA = Floor Area (sq ft) × 3 VA/sq ft

Lighting Demand Factor (NEC 220.42, Table 220.42): First 3,000 VA @ 100% + Next 3,001–120,000 VA @ 35% + Remainder @ 25%

Cooking Equipment Demand (NEC Table 220.55, Column C — 1 unit): ≤ 12 kVA → 8 kVA demand; > 12 kVA → 8 kVA + 5% per kW above 12 kVA

Dryer Demand (NEC 220.54): Demand = max(5,000 VA, Nameplate VA) × 100% (1 unit)

Fixed Appliance Demand (NEC 220.53): < 4 appliances → 100%; ≥ 4 appliances → 75% of total

Motor Load (NEC 430.24): Demand = Largest Motor × 125% + Sum of remaining motors × 100%

Non-Coincident Loads — HVAC/Heat (NEC 220.60): Demand = max(HVAC VA, Electric Heat VA)

Minimum Service Ampacity: Single-Phase: I = Total Demand VA ÷ Voltage Three-Phase: I = Total Demand VA ÷ (Voltage × √3)

#### Assumptions & References

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References