Every number on this site comes from one of two places: a manufacturer datasheet (cited on the page it appears on, with the date it was checked), or this engine — the same JavaScript that runs live in the checker at /builder/, ported statement-for-statement to PHP so every reference page shows the identical result. 34 compatibility rules, 290 verified components, one set of constants.
Cold-weather voltage (NEC 690.7)
Open-circuit voltage rises in the cold. vocCold(voc, coefficient, t): at temperature t equals the datasheet Voc at 25 °C times (1 + coefficient × (t − 25)). A string in series multiplies that by the panel count. Every panel/controller compatibility table on this site (318 locations, every panel × every controller) runs this formula at the location's design low, not at the 25 °C label figure.
Design low vs. record low
design_low_c is the average of each year's single coldest night, 1991–2020, at the nearest weather station with at least 25 complete years of data — not the coldest night ever recorded there. The string-length tables use design_low_c minus a 5 °C margin (DESIGN_LOW_MARGIN_C); record_low_c is shown separately so a string that is safe on an average cold night but fails on the record one is visible, not hidden.
Array and battery sizing
| Constant | Value | Where it applies |
|---|---|---|
| MPPT_DERATE | 90 % | Array sizing behind an MPPT controller — real-world loss vs. the datasheet's STC number. |
| PWM_DERATE | 75 % | Same, behind a PWM controller (panel Vmp is clamped to battery voltage). |
| PV_CIRCUIT_FACTOR | 1.56 × Isc | PV cable/fuse ampacity (NEC 690.8: continuous-current factor). |
| FUSE_FACTOR | 1.25 × draw | Minimum fuse rating for a non-PV circuit (ABYC E-11). |
| VDROP_LIMIT_CRITICAL / GENERAL / PV | 3 / 10 / 2 % | Voltage-drop ceiling used to size wire gauge, by circuit type. |
| DEFAULT_INVERTER_EFFICIENCY | 88 % | AC load → DC draw when an inverter's own published efficiency is unknown. |
| INVERTER_DC_EFFICIENCY_CAP | 85 % | Ceiling on published inverter efficiency for the DC-side current calculation — a peak-efficiency datasheet number would understate the real draw on the battery. |
| DEFAULT_DAYS_AUTONOMY | 2 days | Battery bank sizing default when no autonomy target is set. |
Simulation, not just averages
The monthly peak-sun-hours numbers on a geo page describe an average day. The "Does the battery last through {month}?" block instead runs a full typical-weather-year, hour by hour (8760 hours from NREL's hourly TMY data), because an average conceals the week-long cloudy spell that actually drains a battery. Both numbers are shown because they answer different questions: sizing an array uses the average; predicting a specific bad week needs the simulation.
Verified vs. draft
A component reaches the catalog as <code>draft</code>: every field the compatibility rules touch is filled and cited, but the site will not use it in the checker, a kit audit, or a station's panel table until <code>bin/validate-db.php</code> promotes it to <code>verified</code>. Right now that is 290 components across 6 categories; every draft row and the specific field it is missing is visible on its own /parts/ page.
These results are for reference. Wiring must be installed by a qualified electrician. Mobile installations follow ABYC E-11; stationary ones NEC 690/706.