Со всеми этими изменениями в способе указания повторения я бы отказался от одной единой реализации структуры данных, чтобы учесть все 5 сценариев.
Вместо этого я (и для предыдущего проекта) построю простые структуры, которые обращаются к каждому типу повторения. Вы можете обернуть их все так, чтобы они выглядели как единая структура данных, но под капотом они могли делать все, что им нравится. Благодаря реализации интерфейса я смог одинаково обработать каждый тип повторения, чтобы он выглядел как единая структура данных, подходящая для всех. Я мог бы попросить у любого экземпляра все даты повторения в течение определенного периода времени, и это помогло.
Я также хотел бы узнать больше о том, как эти даты нужно использовать, прежде чем остановиться на конкретной реализации.