Using the voltage to determine the SOC is the only option with these batteries (All lithium etc).
Accuracy is relative as well,
1) the Shunt has to be a good one (you'd be surprised),
2) the software has to be able to handle accuracy, preferably 3 decimal points, Lithium is Millivolt & Milliohm.
3) the readings are always affected whether charging/discharging or in "storage" mode. See Chart Below for Load/Rest values.
Clarification on what is FULL !
LFP Full Voltage Curve is 2.500-3.650. Full Working Voltage curve is 3.000-3.400 with Nominal being 3.200.
Gross Cell Capacity is rated from 2.50-3.65 BUT the Deliverable capacity (Grade A) should deliver specified AH rating from the Working Voltage.
This is why Grade-A Cells test out on average 10%+ higher than label rating. From 2.50-2.95 & 3.40-3.65 only represents 5-7% of Gross Capacity which more reserve off anyway.
Cells charged to 3.425 and fully saturated (meaning Amps taken drop as IR increases) will still settle (Normal for LFP) and that can be considered 100%. NOTE on Settling, it is quite Normal for LFP to settle as soon as charge ceases, the majority of settling occurs within 1 hour without loads being applied.
BMS & Other monitors accuracy.
Virtually all BMS' and shunt based monitors must go through a full cycle from your designated 0% SOC to your 100% SOC to be accurate for YOUR system setup. For example, my 100% is 3.400Vpc and my 0% is 2.85Vpc (Vpc = Volts per cell). Once everything is discharged to below "my 0%" I then charge to "my 100%" and stop when saturated. At this point the Shunts & BMS Coulomb Counters are starting from my designated point.
Hope this Helps, Good Luck.
Steve_S
View attachment 81048