The easiest would be to base it on the last bonus paid date rather than the contract start date. That might be the DMax of LastPaid date for a particular employee. Then you can use DateAdd to add one year to it (or there are other ways of adding a year). I would add this date as a record rather than over-writing the last paid date in case there are years when things are too lean to pay out bonuses. As for trapping the last year to be paid, that could be adding Date() to the start date and comparing that to the EndDate.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.