# vladdovhay/lab2-2026 architecture

> Architecture diagram of the GitHub repository vladdovhay/lab2-2026, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vladdovhay/lab2-2026
- Repository: https://github.com/vladdovhay/lab2-2026

## Overview

This is a single-file Ukrainian personal-finance CLI, not a multi-service product. Its main workflow is a user selecting a menu action, entering validated values where needed, and receiving a calculation or transaction summary. The code covers spending analysis, loans, deposits, budgeting, price changes, currency conversion, and budget-based wishlist selection. Because excerpts omit some handler bodies, uncertain internal calls are not shown.

Main entry points: [`src/lab2.py`](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py) (Menu dispatcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["CLI interface"]
  node_main["Menu dispatcher<br/>[lab2.py]"]
  node_input["Input validation<br/>[lab2.py]"]
end

subgraph group_finance["Finance calculations"]
  node_loan["Loan payment<br/>[lab2.py]"]
  node_deposit["Compound deposit<br/>[lab2.py]"]
  node_budget["Budget balance<br/>[lab2.py]"]
  node_average["Average expense<br/>[lab2.py]"]
  node_price["Price calculations<br/>[lab2.py]"]
end

subgraph group_analysis["Spending and planning"]
  node_transactions["Transaction data<br/>[lab2.py]"]
  node_wishlist["Wishlist data<br/>[lab2.py]"]
  node_show["Show transactions<br/>[lab2.py]"]
  node_categories["Category totals<br/>[lab2.py]"]
  node_convert["Convert expenses<br/>[lab2.py]"]
  node_choose["Choose purchases<br/>[lab2.py]"]
  node_higher["Apply conversion<br/>[lab2.py]"]
end

node_user(("User"))

node_user -->|"selects"| node_main
node_main -->|"dispatches"| node_show
node_main -->|"dispatches"| node_loan
node_main -->|"dispatches"| node_deposit
node_main -->|"dispatches"| node_budget
node_main -->|"dispatches"| node_average
node_main -->|"dispatches"| node_categories
node_main -->|"dispatches"| node_convert
node_main -->|"dispatches"| node_price
node_main -->|"dispatches"| node_choose
node_show -->|"reads"| node_transactions
node_choose -->|"reads"| node_wishlist
node_convert -->|"uses"| node_higher
node_loan -->|"reads via"| node_input
node_deposit -->|"reads via"| node_input
node_budget -->|"reads via"| node_input
node_average -->|"reads via"| node_input
node_price -->|"reads via"| node_input
node_choose -->|"reads via"| node_input

click node_main "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_input "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_transactions "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_wishlist "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_show "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_categories "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_convert "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_choose "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_loan "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_deposit "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_budget "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_average "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_price "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"
click node_higher "https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_input,node_user toneBlue
class node_loan,node_deposit,node_budget,node_average,node_price toneAmber
class node_transactions,node_wishlist,node_show,node_categories,node_convert,node_choose,node_higher toneMint
```

## Components

### CLI interface

- [Menu dispatcher](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Input validation](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`

### Finance calculations

- [Loan payment](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Compound deposit](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Budget balance](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Average expense](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Price calculations](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`

### Spending and planning

- [Transaction data](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Wishlist data](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Show transactions](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Category totals](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Convert expenses](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Choose purchases](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`
- [Apply conversion](https://github.com/vladdovhay/lab2-2026/blob/main/src/lab2.py): `src/lab2.py`

### Other components

- **User**

## Connections

- User → Menu dispatcher: selects
- Menu dispatcher → Show transactions: dispatches
- Menu dispatcher → Loan payment: dispatches
- Menu dispatcher → Compound deposit: dispatches
- Menu dispatcher → Budget balance: dispatches
- Menu dispatcher → Average expense: dispatches
- Menu dispatcher → Category totals: dispatches
- Menu dispatcher → Convert expenses: dispatches
- Menu dispatcher → Price calculations: dispatches
- Menu dispatcher → Choose purchases: dispatches
- Show transactions → Transaction data: reads
- Choose purchases → Wishlist data: reads
- Convert expenses → Apply conversion: uses
- Loan payment → Input validation: reads via
- Compound deposit → Input validation: reads via
- Budget balance → Input validation: reads via
- Average expense → Input validation: reads via
- Price calculations → Input validation: reads via
- Choose purchases → Input validation: reads via
