Methodology
How every number is calculated.
This page explains exactly how Project Bijli calculates every number, so that any figure it shows can be checked and reproduced. The calculation code lives in src/lib/calc/ and is covered by automated tests.
1. Kinds of numbers
- Measured Comes directly from data you entered: bills, counts.
- Calculated Arithmetic on measured data only, e.g. kWh ÷ students, % change.
- Assumption A configurable input, such as the emission factor or a fan's wattage. Change it in Settings.
- Estimate Uses at least one assumption. Treat as approximate.
Potential savings (what recommendations might save) are always estimates. Measured savings are observed changes in bills after an intervention. They are reported separately and never added together.
2. Basic metrics
- kWh per day = bill kWh ÷ billing days. Used for all comparisons so that a 33-day bill isn't compared unfairly with a 28-day bill.
- Annual consumption = sum of the last 12 bills. With fewer than 12, it is annualised: (total kWh ÷ total days) × 365, and labelled as such.
- kWh/student, kWh/sq. ft., kWh/classroom, ₹/student = annual consumption (or cost) ÷ the value in Building info. 1 m² = 10.7639 sq. ft.
- Electricity price = total ₹ ÷ total kWh over the last 12 bills, unless you enter your own in Settings. Bills include fixed charges and taxes, so this average can be higher than the saving per kWh avoided.
- CO₂ = kWh × grid emission factor (default 0.710 kg CO₂/kWh, CEA). This factor covers CO₂ only, not other greenhouse gases, so results are labelled “kg CO₂”, not “kg CO₂e”.
- Dashboard headline compares the latest bill's kWh with the average kWh of the previous 3 bills. If you have marked vacation months, a term-time month is compared only with other term-time months.
3. Anomaly detection
Each month's kWh/day is compared with the school's own history using three simple checks:
- Recent average: % difference from the mean of the previous 3 months (needs all 3). Flagged at +15% or more. For term-time months, vacation months are skipped.
- Z-score: (this month − mean of previous 12 months) ÷ sample standard deviation of those months. Needs at least 6 earlier months. Flagged at z ≥ 2 (high) or z ≤ −2 (unusually low; not flagged for vacation months). Term-time months exclude vacation months from the history.
- Seasonal: % difference from the same calendar month last year, when that bill exists.
A high month is an alert when it is also 15%+ above the same month last year, or (when there is no bill from last year) when both the recent-average and z-score checks trigger. If last year's same month was similar or higher, the rise is shown as info (a seasonal rise). Otherwise it is shown as check: we can't yet tell whether it is seasonal. Data checks also flag missing months, billing periods outside 25–35 days, and bills whose ₹/kWh differs from the school's median by more than 25%. If you mark vacation months, a vacation month using more than 40% of term-time kWh/day is flagged.
4. Recommendation savings estimates
Savings are estimated only where a calculation can be shown. Every recommendation displays its full calculation.
- Days of use per year = operating days per week × teaching weeks per year (default 40).
- Lighting energy = lights × average W (mix of non-LED and LED by your LED %) × hours/day × days ÷ 1000.
- Fan energy = fans × fan W × hours/day × share of time fans are on × days ÷ 1000.
- AC energy = the lower of (a) ACs × kW × AC hours/day × AC days/year, and (b) the seasonal excess from bills, when 12 months exist: the sum over the last 12 term-time months of max(0, kWh/day − baseline) × days, where baseline is the average kWh/day of the 3 lowest months. Using the lower value avoids overstating savings.
- If the equipment estimates add up to more than 90% of billed consumption, they are scaled down proportionally, and the page says so.
- LED: non-LED lights × (old W − LED W) × hours × days. Efficient fans: fans × (old W − BLDC W) × hours × share × days.
- AC 24 °C guideline: AC energy × 6% per °C × degrees raised. AC servicing: AC energy × 5%. Switching off: (lighting + fan energy) × 10%.
- Vacation baseload: energy above 40% of term-time kWh/day during your vacation months.
Combined potential avoids double counting: measures on the same end use are combined as E × (1 − (1 − f₁)(1 − f₂)…) instead of being added. Different end uses are added. Recommendations without an estimate (night-time meter test, walk-through, investigating spikes) are not included.
5. Savings calculator
Monthly kWh saved = monthly kWh × reduction %. Monthly ₹ = kWh saved × ₹/kWh. Annual = monthly × 12. CO₂ avoided = annual kWh saved × emission factor. Example: 10,000 kWh × 8% = 800 kWh/month; at ₹8/kWh = ₹6,400/month = ₹76,800/year; 9,600 kWh × 0.710 = 6,816 kg CO₂/year.
6. Measuring interventions
- The month an intervention was implemented is a transition month and is excluded.
- Before/after: average kWh/day over up to 12 months before vs. all months after, shown as a monthly equivalent (kWh/day × 30.4). Needs at least 3 months before and 2 after.
- Same months last year: each month after vs. the same calendar month a year earlier (only if that earlier month is before the intervention). Saved kWh = (last year's kWh/day − this year's kWh/day) × this year's billing days. This controls for seasons and is preferred.
- If a “last year” comparison month was itself flagged as an alert (unusually high), the page warns and shows the result without it, because an unusual baseline makes savings look bigger.
- These show correlation, not causation. Weather, timetable, enrolment and other changes also affect bills.
7. School comparison
Opt-in only, and only between schools verified by the Project Bijli team. Uses annual kWh/student, kWh/sq. ft. and ₹/student from schools with at least 6 months of bills in the last 12. Statistics (median, quartiles) are shown only when at least 3 schools qualify. No names, ids or raw totals are shared. Demo schools are compared only with demo schools.
8. Platform totals
Only schools verified by the Project Bijli team are counted; new registrations wait for verification. Potential savings identified = sum of each school's combined potential (estimate, per year). Measured savings = for each school, the same-months-last-year comparison counted from the school's first implemented intervention (so overlapping interventions are not double counted), summed over all matched months so far. Baseline months flagged as alerts are excluded. Negative results are included, not hidden. ₹ values use each school's average price in those months. Demo schools are excluded unless explicitly included.
9. All assumptions and sources
10. Real-world data rules
- Rooftop solar: bills after commissioning show net grid import. Same-month comparisons whose baseline is before solar and whose comparison month is after it are left out of savings, because that difference is solar generation, not reduced use.
- Estimated bills (no meter reading) and the later bills that correct them are stored as billed and clearly marked.
- Several meters are added together per month.
- AC setting: if your usual setting is known, the 24 °C recommendation uses (24 − your setting) degrees, and promises nothing if you are already at 24 °C or warmer.
- Before/after comparisons warn whenever the two periods cover different months of the year.
11. Known limitations
- Monthly bills cannot show time-of-day patterns, individual rooms, or which equipment uses the most.
- No weather normalisation yet; seasonal effects are handled by same-month comparisons.
- Equipment-based estimates depend on counts and wattages that schools enter or that default to planning assumptions.
- Average price per kWh includes fixed charges, so ₹ savings can be overstated unless you enter your energy charge in Settings.
- Smart-meter readings can be received through the API but are not yet used in analysis.