The most common cause for this is that the system thinks the battery has a higher voltage capability than it truly does, 14S instead of 13S, for instance. 58.8V instead of 54.6V, or something similar.
Some additional information about the bike and specs for it, how long he has had it, how long this problem has been happening, etc. would be useful.
If this problem has been present from day one, then the above is most likely the issue. If it was NOT present initially, and worked correctly for weeks or months, then something has happened to cause this problem. Crash, damage, left fully charged over winter, etc. Again, some additional information would be needed to nail this down.
Also, see if you can change the readout from a % to a voltage readout. More useful.
My Specizlized Levo SL app has a toggle option to set a charge limit of 80% so that you can extend the battery life for more charges I usually have it enabled so that I do not have to end up buying a very expensive battery down the road that either may or may not be available. If I know I’m going to be playing around a lot more than normal I will turn off the toggle and allow a 100% charge. So basically take a look in your settings on your app and see if you also have a charge limit option that you can turn on and off that may be what is going on.