Ask most BESS control room operators what percentage the system is at right now and they'll give you a number without hesitation — that's SoC. Ask the same operator what percentage of original capacity the system can still deliver and you'll often get a pause. That second number is SoH, and it's the one that actually determines whether your BESS will meet its contracted dispatch obligations next quarter.
The distinction matters more than most operations teams acknowledge. SoC is a real-time snapshot; SoH is the boundary condition that sets how useful that snapshot is. This article explains what each metric measures, how each is calculated in practice, and why operators need both — but need SoH more urgently than most current monitoring setups reflect.
What SoC Actually Measures — and Where It Breaks Down
State of Charge expresses how much energy is currently stored in the battery as a fraction of its present usable capacity. The keyword is "present." SoC is normalized to whatever the battery can currently deliver — not what it could deliver at commissioning.
This normalization is both SoC's utility and its limitation. A battery reporting 80% SoC will dispatch reliably to that percentage of its current capacity. But if current capacity is 82% of the original nameplate due to degradation, then 80% SoC actually corresponds to 65.6% of the system's contracted nameplate energy. Your EMS sees 80% and schedules accordingly; your battery can't actually deliver what that scheduling assumes.
The BMS typically computes SoC via one of three methods: coulomb counting (integrating current in and out with corrections for efficiency losses), OCV-SoC lookup (inferring SoC from open-circuit voltage at rest using a chemistry-specific OCV curve), or a combination of both with Kalman filtering. All three methods share a common dependency: they need an accurate value for the battery's present maximum capacity to normalize against. If that reference capacity is stale — if the BMS is still using the commissioning capacity as its denominator — SoC readings are systematically optimistic as the battery ages.
OCV hysteresis adds another complication. LFP chemistry in particular has a very flat OCV-SoC curve across the 20–80% SoC range, meaning a 10 mV change in OCV corresponds to an enormous SoC range during that portion of the curve. OCV-based SoC estimation in LFP systems has uncertainty bands of ±5–8% in the mid-range — accurate enough for dispatch decisions in some contexts, not accurate enough for tight energy arbitrage where you're trying to extract the last 5% of margin from a spread.
What SoH Actually Measures
State of Health quantifies the battery's remaining capacity relative to its original rated capacity. A SoH of 80% means the battery can store and deliver 80% of what it could when new. Most project finance models assume a battery will operate to a minimum SoH — often 70–80% — before triggering a capacity augmentation event or triggering warranty coverage for replacement. That threshold is the project's end-of-life boundary for planning purposes.
SoH is usually calculated from a full capacity test: charge the battery to 100% SoC, rest it, then discharge to the lower voltage cutoff at a standardized C-rate (often C/5 or C/3), measure the actual Ah delivered, and divide by the original rated Ah. This gives you a direct measurement. The problem is that full capacity tests take 4–10 hours, take the asset offline, and consume cycle budget — so in practice, most operators run them quarterly at best, and some never run them on a structured schedule at all.
Between formal capacity tests, SoH can be estimated from partial cycle data using statistical methods, or inferred from impedance spectroscopy, which tracks internal resistance rise as a proxy for aging. Internal resistance and SoH are correlated but not identical — resistance rise typically outpaces capacity fade in the early lifecycle, then capacity fade accelerates later. Using resistance alone as a SoH proxy will underestimate health degradation in systems past their midlife point.
How the Two Metrics Interact in Dispatch Decisions
Consider a grid-scale BESS contracted to provide 50 MWh of energy per dispatch cycle for energy arbitrage. At commissioning: 100% SoH, so 100 MWh nameplate → 50 MWh dispatched at 50% SoC draw. Two years later: 88% SoH, so 88 MWh usable capacity. To dispatch 50 MWh, the EMS now needs to draw to roughly 57% SoC depth — deeper than the original operating profile assumed.
If the EMS is scheduling based on nameplate capacity and a stale SoH estimate, it's repeatedly dispatching to an SoC depth that's tighter than operators realize. Over time this accelerates cycle aging on already-degraded cells. The system degrades faster than the model projected, which is exactly the scenario that produces warranty disputes and unplanned augmentation costs.
In our work building electrochemical models for fielded BESS systems, we've found that the gap between the SoH operators believe their system has and the SoH it actually has tends to widen fastest in the first 12–18 months post-commissioning — precisely when the operator has the least historical data to detect the drift.
SoH Measurement Approaches Compared
| Method | Accuracy | Downtime Required | Cell-Level Resolution |
|---|---|---|---|
| Full discharge capacity test (C/5) | ±1–2% | 4–10 hours | Yes (if BMS logs per-cell) |
| Partial cycle estimation (statistical) | ±3–5% | None | Depends on BMS configuration |
| Impedance spectroscopy (EIS) | Indirect proxy | Minutes per module | Yes (portable EIS at cell level) |
| OCV-based inference at rest | ±4–8% (LFP), ±2–4% (NMC) | Rest period (30–120 min) | Depends on BMS |
Practical Recommendations for Operators
The most common gap we see in operational monitoring setups is not lack of data — it's lack of structured SoH tracking cadence. Operators collect cell-level voltage data but don't run the analytics to turn that data into capacity estimates. Here's what a practical minimum looks like:
- Monthly: Review cell voltage spread trends. Widening spread at end of charge is the first indicator that cells are diverging in capacity.
- Quarterly: Run a partial cycle capacity estimation using your historian data. Even a C/3 partial discharge covering 20–80% SoC range gives you enough to trend SoH directionally.
- Annually or after major cycling regime changes: Run a full C/5 capacity test per rack. This is your baseline anchor — everything else is interpolated from this.
- After any thermal event: Run full capacity test plus EIS if available. Thermal stress accelerates degradation mechanisms that don't show up immediately in capacity but will appear in resistance signature.
SoC is what your EMS sees every second. SoH is what your EMS should be recalibrated against every month. The former without the latter is like navigating with a speedometer but no odometer — you know how fast you're going, but you don't know how much road you have left.