Do you have connected battery in your setup or still disconnected?
If still no battery and USB is connected, the reading that you get is from the open circuit voltage of the charger IC. This is normal.
However, if there is battery connected and unit is not being charged, what voltage do you see on the battery and what is the retured value of the api.system.bat.get()?
Yes I have a lithium battery and I get 4.19 or 4.20 in any situation (USB connected or not, when not I get result by LoRaWAN, battery connected or not).
The internal ADC of STM32WL is not optimized since we do not comply on its required input impedance. This is needed as a comprise to achieve low power operation.
If you can share me the actual voltage of the battery during these testing.
If you can use a drained battery and do the test (so we have a low voltage reading).
These two items will be helpful for us to assess your findings and investigate.
I did some test on my RAK3172 evaluation board and also seen some discrepancy. We are supposed to fixed this before already but it appears discrepancy still exist (I also around 0.2V which is really significant).
At the moment, I don’t think it will be useful to detect that the battery if fully charge. Maybe possible to detect if it is low. But either situation, if you need better accuracy, I suggest to detect the battery using lower resistor values (might compromise low-current operation) and use another ADC channel.