Do not delete invoices even after expire or redemption
I would consider seriously to find a more permanent solution to not delete invoices but set a pointer active or inactive invoice. You should have all historical data on the DB.
In my experience with other billing systems, they just mark it deleted but it is in the database, exist still the info. And this is my preferred way to be done.