We have a special low price plan for students that requires they submit a valid school ID before they can sign up. When their plan expires we need to ensure that they are not renewed at student rate again until they go through an ID check process each year to ensure student status. We have a custom field for the ID upload and it is set to be required.
Of course step one is to disable renewals for that plan, which we have done.
I see that requiring a coupon code for renewal is an option under Advanced Settings for the plan. We could issue the coupon code only to users who have submitted a current ID. I created a code that is available only to the Students group and only for renewals, however I worry about students sharing the code if it is the same every time, and I don't see a way to create a random code once the ID has been submitted.
Or maybe we just set Subscribe Access for that plan to the Students user group, and set the plan to switch them to just the Registered group when their subscription expires.
In any case, we will need to do some manual checking of the submitted IDs, so I don't think it can be completely automated. However we would like to find the best setup for our needs.