ExpenseManager V2

May 1, 2026 · 2 min read
ExpenseManager Architecture and Dashboard
projects

Description

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 ControladorAppGastos automatically 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
    
Guillermo F. Parra
Authors
Mathematics & Computer Science Student | Founder & President @ Club de Finanzas FIUM

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.