core
core copied to clipboard
Decay unspent points after time
This PR adds a new APA method that allows to automatically decay unspent points after the decay period for these points has passed. Points are spent in a first in first out manner, i.e., the oldest points – which would decay first – are spent first.
Such a decay is frequently used in bonus points programs (such as airlines mileage programs).
Technically, this decay works as follows: For each point in time where positive points have been earned (through raids or adjustments), we know the point in time these points will decay (if not spent). To calculate the amount of unspent points, we need to calculate the balance at the end of the decay period and the number of positive points earned during the decay period (excluding the points we want to decay right now). If the balance is larger than the amount of newly earned points, the difference is what we need to decay.
From my side, there are two open points:
- [x] While writing this explanation, I realised that I should add a safeguard that only decays
min(balance - newly earned, points to decay)
to safeguard points earned before the start date. - [x] I'm open to changes to the naming. "Time decay" is not my favourite (all decays work over time) and I'm leaning towards "unspent decay" here. -> I changed it to "unspent decay", but if there are better names proposed, I can change it at any time.
Feedback welcome!