andy 3038fca8fa fix: improve recurring detection with fuzzy grouping and wider bands
Use fuzzy description grouping (strip digits/symbols) so transactions
like "FREEDOM MTG PYMTS 1234" and "FREEDOM MTG PYMTS 5678" are detected
together. Switch to median for amounts and intervals for outlier
resilience. Widen frequency bands to eliminate gaps (biweekly 10-18,
monthly 19-45) and add semi-annual detection. Raise default amount
tolerance to 15% and allow 25% outlier payments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 17:02:24 -05:00
2026-02-10 13:28:55 -05:00

SpendingAnalysis

Desktop app to intake data from various sources and analyze spending habits. Built with Python, PySide6 (Qt), and SQLite.

Features

  • CSV Import — drag-and-drop import wizard with configurable column mappings and duplicate detection
  • Transaction Management — browse, filter, and categorize transactions inline
  • Spending Analysis — trends, breakdowns, and forecasting charts
  • Recurring Detection — identify recurring charges across accounts
  • Cross-Account Transfers — automatic detection of transfers between accounts
  • Rule-Based Categorization — auto-categorize transactions using custom rules
  • Household Tracking — manage household members and shared expenses
  • Dark / Light Themes — toggle between themes from the sidebar

Requirements

  • Python 3.12+

Setup

# Clone the repo
git clone https://gitea.conlon.fun/andy/SpendingAnalysis.git
cd SpendingAnalysis

# Create a virtual environment and install
python -m venv .venv
.venv\Scripts\activate      # Windows
# source .venv/bin/activate  # macOS / Linux

pip install -e .

Running

With the virtual environment activated:

python -m src.main

The app stores its SQLite database at ~/.spending_analysis/spending.db. Default categories are seeded on first launch.

Running Tests

pip install -e ".[dev]"
pytest

Project Structure

src/
├── main.py              # Application entry point
├── db.py                # SQLAlchemy engine / session setup
├── seed.py              # Default category seeding
├── models/              # SQLAlchemy models (account, category, transaction, rule, etc.)
├── services/            # Business logic (import, categorization, analysis, forecasting)
└── ui/                  # PySide6 views and themes
    ├── main_window.py
    ├── sidebar.py
    ├── import_view.py
    ├── transactions_view.py
    ├── analysis_view.py
    ├── recurring_view.py
    ├── settings_view.py
    └── themes/
tests/                   # pytest test suite
S
Description
vibe coded app to intake data from various sources to help analyze my spending habits
Readme 197 KiB
Languages
Python 100%