I want to schedule a simple budget application. In my application, the budget is divided into budget periods (default months, but may be biweekly or weekly periods). In each period there is a list of spending categories. The user can perform different actions in a category, such as recording an expense, assigning a budget, creating a new category, closing an existing category, etc. Therefore, each category must have a different status for each period, but changes for a particular state of a specific period must influence the status of the category of the consecutive period (any change in spending / budget in January should change the status of a category in February). Therefore, each period must have a specific state of category that belongs to it and it can operate, but the category itself must be able to see the changes that are made and make changes in other states. Initially, I was thinking of implementing a category as a list of its states, but my instinct tells me it is not a good design. I would really like to know if there is a better design / design pattern that can be used here.