ExpenseManager V2
ExpenseManager Architecture and DashboardDescription
ExpenseManager is a robust solution for financial control. Unlike simple expense trackers, this system implements complex logic for shared accounts (flatmates, trips, couples) and a proactive alert system based on temporal strategies.
Technical Features
- Expense Management (CRUD): Detailed tracking with date, amount, category, and payer, supporting secure editing and deletion.
- Shared Accounts: Group management with configurable splitting algorithms (Equitable vs. Percentage) for automatic debt calculation among users.
- Alert System: Real-time notifications upon exceeding user-defined spending limits (Weekly or Monthly).
- Statistical Dashboard: Data visualization using interactive charts and advanced filtering (by dates and multiple categories).
- Bulk Import: Data loading from external CSV files using robust adapters.
- Persistence: Automatic local storage in JSON format using the Jackson library.
Architecture & Design Patterns
The project strictly follows the MVC (Model-View-Controller) pattern alongside several GoF design patterns to ensure scalability and maintainability:
- Singleton: Unique session management (
ControladorSesion) and factories (FactoriaEstrategia,FactoriaImportadores). - Strategy: Interchangeable algorithms for expense splitting (
RepartoEquitativo,RepartoPorcentual) and temporal alert logic (EstrategiaAlertaMensual,EstrategiaAlertaSemanal). - Factory Method: Dynamic creation of strategies and importers based on context, decoupling instantiation from business logic.
- Observer: Reactive communication where
ControladorAppGastosautomatically notifies Views (IObservador) of model changes. - Adapter: Integration of external CSV files into the application domain (
ImportadorCSV -> ImportadorGastos). - Repository (DAO): Abstraction of the data layer (
RepositorioGastosJSON,RepositorioCuentasJSON) for flexible storage switching.
Code Quality (Clean Code)
- Design by Contract: Defensive validations in constructors and setters to ensure data integrity (preventing negative amounts, null values, etc.).
- Modern Java (Streams & Lambdas): Extensive use of the Stream API for financial calculations and collection filtering.
- Immutability: Protection of internal data structures using defensive copies and unmodifiable lists.
Installation & Execution
- Technical Requirements: Java JDK 21 (Mandatory), Maven 3.8+.
- GUI Mode (JavaFX):
git clone [https://github.com/GuillermoPL/TDS-25-26.git](https://github.com/GuillermoPL/TDS-25-26.git) cd TDS-25-26 mvn clean javafx:run

Mathematics and Computer Engineering student with a focus on the intersection of rigorous theory and high-performance implementation. With a background marked by 23+ “Matrículas de Honor” and multiple Regional Olympiad awards, I thrive on bridging the gap between abstract mathematical models and efficient computational systems.
My core interests lie in Quantitative Finance, Stochastic Calculus, and Numerical Optimization. I am particularly passionate about transforming complex financial frameworks into high-performance algorithmic solutions. Currently, I balance my research in Quant Finance and Deep Learning with active leadership in university commissions.