Problem statement
Design the object model and core APIs for a personal budget tracker that sorts a household's income and spending into categories and tracks each category against a monthly limit (an envelope-style budget).
Operating context. One user, single currency, in-process — no bank connection. The user defines categories (groceries, rent, entertainment) each with a monthly limit; every transaction is either income or an expense tagged to one category and a date. A budget period is a calendar month that opens, accrues transactions, and closes. The tracker reports remaining budget per category, flags overspend, and — for categories configured to do so — rolls an unused or overspent balance into the next month.
Out of scope. Bank / card import feeds, a persistence layer (assume in-memory for v1), multi-currency, forecasting or ML-based suggestions, and the presentation / charting layer.
What to produce. The class hierarchy (entities, value objects, services), the public APIs each class exposes, and the state transitions for a budget period (open, active, closed). Be explicit about: how a category's remaining budget is read cheaply after every transaction, how the limit rule is pluggable (fixed amount vs percent-of-income vs rollover) without touching the transaction path, and how adding a new category type stays a localized change.
Requirements
This assessment is a Premium feature.
The statement above is free to read. The functional and non-functional requirements, and the graded canvas that scores your design against them, come with Premium.
Topics
- System Design LLD
- Oop Solid
- Patterns Strategy
- Finance Budgeting
- Domain Money