Storing grants instead of balances is a neat way to avoid the usual nightly-cron mess. The part about a refund into an expired period not coming back to life is something I'd probably have gotten wrong at first. Did a support case ever come up where a user expected those expired credits back, and how did you explain it?