Deliverable 3 - betoooo08/MyFinPlanner GitHub Wiki
Deliverable 3: MVP
1. Architecture & Data
1.1 Deployment Diagram
Below is the updated deployment diagram, considering the requirements implemented in this sprint.
Deployment Diagram:
Changes made:
- Se reemplazó el bloque “Bootstrap SERVER” por un dispositivo “Static Files” dedicado para servir CSS/JS
- Se externalizó la conexión con OpenAI a un nodo “OpenAI API” usando
.env
y la variableSECRET_KEY
- Se renombró el bloque de base de datos de “SQLite3” a “SQLite” para ajustarse a la configuración real
- Se agrupó el conjunto de apps (Accounts, Finances, Investments, Analytics) dentro de “MyFinPlanner Django Project”
- Se etiquetaron los enlaces:
HTTP
para cliente-servidor,Static Files
para archivos estáticos y.env
para variables sensibles - Se mejoró la coherencia visual y organizativa para reflejar con precisión la arquitectura de despliegue en GCP
1.2 Component Diagram
This diagram represents the software components and their dependencies. Below is the updated component diagram:
Component Diagram:
Changes made:
- Se unificaron los flujos principales entre Accounts, Finances, Investments y Analytics para reflejar el recorrido de datos al autenticarse y operar
- Se diferenció visualmente el flujo “hacia adelante” (flechas negras) de la retroalimentación de datos (flechas naranjas)
- Se ajustaron las dependencias internas de funcionalidades (p. ej. edición de transacciones, presupuestos, seguimiento de inversiones, análisis AI)
- Se mejoró la claridad general y la consistencia de colores en el diagrama
1.3 Data Model
The relational database model was refined to support core financial functionalities and user interactions, including structured handling of budgets, transactions, goals, investments, reports, and AI-generated insights.
Entity-Relationship Diagram (ERD):
Diagram with Apps division:
Data Dictionaries:
Users
| This table stores user account information |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique user identifier | Yes |
username | String | NN | User login name | ||
password | String | NN | Encrypted password | ||
String | NN | User email address | |||
is_active | Boolean | NN | Account active status | ||
is_staff | Boolean | NN | Staff permissions flag | ||
date_joined | Datetime | NN | Account creation timestamp | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id |
Transactions
| This table stores all financial transactions |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique transaction ID | Yes |
user_id | Int | NN | Associated user ID | ||
amount | Decimal | NN | Transaction amount | ||
description | String | Transaction description | |||
category_id | Int | NN | Category classification | ||
transaction_type | String | NN | Income/Expense type | ||
date | Date | NN | Transaction date | ||
merchant | String | Merchant name | |||
created_at | Datetime | NN | Record creation timestamp | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | user_id | |||
FOREIGN | FOREIGN | category_id |
Categories
| This table stores transaction categories |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique category ID | Yes |
name | String | NN | Category name | ||
category_type | String | NN | Income/Expense classification | ||
icon | String | Display icon | |||
color | String | Display color | |||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id |
Budgets
| This table stores user budgeting information |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique budget ID | Yes |
user_id | Int | NN | Owner user ID | ||
category_id | Int | NN | Budget category | ||
amount | Decimal | NN | Budgeted amount | ||
spent | Decimal | NN | Amount spent | ||
period | String | NN | Budget period (monthly/yearly) | ||
alert_threshold | Int | Spending alert percentage | |||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | user_id | |||
FOREIGN | FOREIGN | category_id |
Goals
| This table stores financial goals |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique goal ID | Yes |
user_id | Int | NN | Owner user ID | ||
name | String | NN | Goal name | ||
target_amount | Decimal | NN | Target amount | ||
current_amount | Decimal | NN | Current saved amount | ||
deadline | Date | NN | Target completion date | ||
description | Text | Detailed description | |||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | user_id |
Investments
| This table stores investment portfolio data |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique investment ID | Yes |
user_id | Int | NN | Owner user ID | ||
symbol_id | Int | NN | Investment symbol reference | ||
name | String | NN | Investment name | ||
shares | Decimal | NN | Number of shares | ||
purchase_price | Decimal | NN | Original purchase price | ||
current_price | Decimal | NN | Current market price | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | user_id | |||
FOREIGN | FOREIGN | symbol_id |
GoalContributions
| This table stores contributions made towards financial goals |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique contribution ID | Yes |
goal_id | Int | NN | Associated goal ID | ||
amount | Decimal | NN | Contribution amount | ||
date | Date | NN | Contribution date | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | goal_id |
InvestmentSymbols
| This table stores reference data for investment symbols |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique symbol ID | Yes |
symbol | String | NN | Ticker symbol | ||
name | String | NN | Company/fund name | ||
type | String | NN | Investment type (stock/bond/etc) | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id |
Reports
| This table stores generated financial reports |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique report ID | Yes |
user_id | Int | NN | Owner user ID | ||
name | String | NN | Report name | ||
description | Text | Report description | |||
category | String | NN | Report category | ||
format | String | NN | File format (PDF/CSV) | ||
start_date | Date | NN | Report period start | ||
end_date | Date | NN | Report period end | ||
file | File | NN | Generated file | ||
created_at | Datetime | NN | Creation timestamp | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | user_id |
AIInsights
| This table stores AI-generated financial insights |
Attribute Name | Data Type | Primary Key | Not Null | Attribute Description | AutoInc |
---|---|---|---|---|---|
id | Int | PK | NN | Unique insight ID | Yes |
user_id | Int | NN | Owner user ID | ||
prompt | Text | NN | User query prompt | ||
response | Text | NN | AI-generated response | ||
timestamp | Datetime | NN | Generation time | ||
insight_type | String | NN | Insight category | ||
--- | --- | --- | --- | --- | --- |
IndexName | IndexType | Attribute | |||
PRIMARY | PRIMARY | id | |||
FOREIGN | FOREIGN | user_id |
Changes made:
- Transaction Model:
- Changed
category
field from a simple CharField to a ForeignKey relationship with the Category model - This enables proper categorization and reporting of transactions as well as proper connection with Budgets
- Allows for better data integrity and consistency
- Budget Model:
- Changed
category
field from a simple CharField to a ForeignKey relationship with the Category model - This enables proper tracking of budget categories
- Allows for consistent reporting across transactions and budgets
Signal Method Implementation (def validate_and_update_budget):
- Added a pre_save signal on Transaction model to validate and update budgets
- When an expense transaction is saved, it checks if there's enough budget
- If the expense would exceed the budget, it raises a ValidationError
- Otherwise, it updates the spent amount in the related budget
- GoalContribution and Goals Model:
- Enhanced save method to validate that contributions don't exceed the goal's target amount
- Automatically updates the goal's current_amount when a contribution is saved
- Ensures data integrity between goals and their contributions
- Atribute Monthly Contribution in Goals Model deleted as goals will not be managed by monthly contributions, instead, a goal contribution entity is added to add money whenever the users decides to
- Investments and InvestmentSymbol Model:
-
The Investment app has been refactored into two separate models:
Investment
andInvestmentSymbol
. This change improves data integrity and better aligns with the integration of the FinnHub API for real-time stock and crypto symbol retrieval. -
Each
Investment
now references a singleInvestmentSymbol
, allowing a clear and consistent link between user-owned assets and their corresponding financial data. -
Irrelevant attributes such as
purchaseDate
andsymbol
(as an image-type attribute) were removed as they were irrelevant for the project -
A new
type
attribute was added to theInvestmentSymbol
model (e.g., stock, crypto) to enable more effective categorization and filtering of investment types.
- AIInsight Model
-
The
AIInsight
model was created to store and manage the financial insights generated by the open AI Chat GPT Model. -
Each record stores the prompt sent to the AI and the response received.
-
A timestamp is included to track when each insight was generated.
-
The
insight_type
field is used to differentiate the purpose or context of the insight (e.g., related to Goals, Transactions or Budgets).
🔄 Changes from the Previous Model:
-
Removed the fields Anomaly_Detected and Recommended_Action, as these are now handled contextually within the AI response.
-
Renamed attributes for clarity and consistency with the Django model (Query → prompt)
-
Streamlined the model to better support integration with the OpenAI API and simplify data handling.
This structure improves traceability and allows us to categorize and personalize insights based on different user interactions within the platform.
-
Reports and User Model
- The Report and User models remain unchanged, as no additional development has been carried out in these areas during this sprint. These models are scheduled to be addressed in Sprint 04, where any necessary modifications or improvements will be implemented based on the sprint requirements or expected functionality.
2. Corporate Image
- Logo:
-
Slogan:
"Make Every Peso Count" -
Color Palette
- Main Interfaces:
Screens where the brand identity is clearly integrated:
Home Screen:
On the Home Screen, the logo, slogan, mission, and vision are prominently displayed and well-integrated, as shown in the screenshots above.
Across the main interfaces,The brand color palette is clearly applied throughout the design, reinforcing the project's visual identity.
Main dashboard screen:
Transactions screen:
Budgets screen
Investments screen
Goals screen:
USABILITY CRITERIA
Usability Principle | Rating (1 to 5) | Notes |
---|---|---|
1) Visibility of system status | 3 | The system does not clearly show the status of user actions. |
2) Match between system and the real world (User language) | 4 | The language is clear and user-oriented but could be improved. |
3) User control and freedom | 5 | Users have clear options for navigating and performing actions. |
4) Consistency and standards | 4 | The interface follows common standards, though some areas could improve. |
5) Error prevention | 5 | Validations are implemented to prevent form-related errors. |
6) Recognition rather than recall | 5 | Visual elements reduce the user's memory load effectively. |
7) Flexibility and efficiency of use | 3 | Lacks advanced shortcuts for experienced users. |
8) Aesthetic and minimalist design | 5 | The design is clean, modern, and focused on essentials. |
9) Help users recognize, diagnose, and recover from errors | 3 | Error messages are basic and could be more descriptive. |
10) Help and documentation | 2 | There is no integrated help or documentation in the interface. |
3. Repository
-
GitHub Repository:
Link to the repository -
Commits:
All team members have contributed with clear, descriptive commits.
Check the commit history for details. -
requirements.txt
:
Requirements for the project are available at requierements.txt in the repository code -
Readme.md: Readme.md updated with clear instructions for running the program
5. Project Management
5.1 Backlog
The backlog has been successfully updated and is available in the project repository. It includes all requirements in the requested structure, each with well-defined acceptance criteria, updated status, assigned tasks, and designated team members.
All requirements from Sprint 03 have been moved to the "Done" section accordingly.
5.2 Weekly Meetings
Weekly Meetings available at Projects's Wiki
5.3 Retrospective
Retrospective available at Project's Wiki
5.4 Video
6. Sprint Review (In Class)
Pitch: Delivered by one team member.
Live Demo: Demonstrated key features such as:
- Tracking income and expenses
- Budget category creation and spending tracking
- Goal creation with AI-generated financial insights