HelioCalc
Run the calculator
HelioCalc

Methodology — Every Formula and Default

By Jian Yuan · Last reviewed 2026-11-13 · Editorial standards

The complete HelioCalc calculation method: sizing, cost, incentives, net metering, cash flow, NPV, IRR, sensitivity and known omissions.

One kernel, two implementations

HelioCalc's Python reference model and the JavaScript model that runs in your browser implement the same equations. Before any deployment, a verification script runs both on identical inputs and asserts agreement on system size, production, gross and net cost, year-one savings, payback, NPV, IRR and 25-year net. The static answer tables on state pages are generated by the Python kernel, so a number in the HTML cannot disagree with the number the calculator shows.

1. Sizing and production

annual kWh = monthly bill × 12 ÷ retail rate, unless you enter annual kWh directly. specific yield = peak sun hours × 365 × derate × roof factor, where the roof factor multiplies orientation (south 1.00, southwest/southeast 0.97, east/west 0.90, north 0.78), tilt (0.95–1.00) and shading (none 1.00, light 0.93, moderate 0.82, heavy 0.68). kW = annual kWh × target offset ÷ specific yield, capped at usable roof area ÷ 55 sq ft per kW. Production = final kW × specific yield. Default derate 0.84.

2. Cost and incentives

Array cost = kW × 1,000 × $/W. Battery cost = kWh × $/kWh. A percentage state credit is min(percentage × array cost, statutory cap); a flat grant is capped at array cost; a user-entered utility rebate is capped at gross cost. The federal residential credit is 0. This is not an oversight: section 25D of the Internal Revenue Code was terminated for expenditures made after December 31, 2025 by Public Law 119-21, and the IRS treats the expenditure as made when the original installation is completed. Net cost = gross − state credit − federal credit − rebate, floored at zero.

3. Annual bill savings

Full-retail net metering: self-consumed kWh = min(production, annual usage), surplus valued at the retail rate. Net billing: self-consumed kWh = min(production, annual usage × self-consumption share), remainder valued at the export credit. The share defaults to 45% and rises with storage as 45% + 0.55 × battery kWh ÷ average daily usage, capped at 95%. Savings = self-consumed × retail rate + exported × export credit.

4. The 25-year loop

For year y: production = year-one production × (1 − degradation)^(y−1); retail rate = rate × (1 + escalation)^(y−1); maintenance = $150 × 1.02^(y−1); net = savings − maintenance. Cumulative cash flow starts at −net cost; payback is interpolated inside the crossing year. NPV discounts each annual net flow at the chosen discount rate (default 4%); IRR is solved by bisection. The sensitivity panel repeats the loop at 1%, 2.5%, 4% and 6% escalation. Defaults: 3% escalation, 0.5% degradation, 25 years.

5. Ownership comparison

Loan principal = net cost × (1 − down payment %); monthly payment uses P × r ÷ (1 − (1 + r)^−n) with r = APR/12 and n = term × 12. A lease/PPA has no upfront cost: yearly net = modeled bill saving − production × PPA $/kWh × (1 + escalator)^(y−1). The homeowner claims no federal credit in any structure. Section 48E belongs to the third-party owner and appears only indirectly in the price offered.

6. Environmental equivalence

0.855 lb CO₂ avoided per kWh (U.S. grid average), 48 lb CO₂ per mature tree per year, 0.89 lb CO₂ per gasoline passenger-car mile. These are educational equivalences, not audited offsets, and they do not account for marginal emissions or embodied manufacturing carbon.

7. Known omissions

Fixed monthly grid charges, non-bypassable charges, annual true-up caps, time-of-use arbitrage, demand charges, utility-specific interconnection limits, inverter and battery replacement, insurance, roof work, taxes on production incentives, home value effects, and taxes or fees on the purchase. Any of these can change a real outcome. This model is a disciplined starting point, not a quote.

Frequently asked questions

How often is the model updated?

State rates are pinned to EIA's August 2026 release; the federal rule is pinned to IRS FS-2025-05. Every page carries a 'last reviewed' date and material changes are logged on the corrections page.

Why do you show a $0 federal credit line instead of removing it?

Because a silent omission is indistinguishable from an error. Showing $0 makes the 2026 rule auditable on every estimate.

Can I reproduce a state table number?

Yes — open the state page, leave the defaults as loaded, and set the monthly bill to the row's value. The calculator is the same kernel.

Shareable link copied to clipboard