Skip to main content

Integrated personal-finance app: download, parse, categorize, and review bank statements.

Project description

dvm-finance

Integrated personal-finance app: download, parse, categorize, and review bank statements locally. Merges the abn-analyst analyzer and the abn-download downloaders into a single, local, single-user web application. No login, no charts, no LLM — rules + manual categorization, tables, and an audit trail.

Install & run (PyPI)

With PyPI, simply:

pip install dvm-finance
dvm-finance

Or with uv for no-venv installation:

uvx dvm-finance

For development from a local checkout / wheel:

uvx --from /path/to/abn-combined dvm-finance
uvx --from dist/dvm_finance-0.1.0-py3-none-any.whl dvm-finance

First run

dvm-finance             # serves http://127.0.0.1:8000 and prints the URL

On first start the app creates its data directory (SQLite DB, downloaded statements, snapshot exports) and migrates the schema automatically. Defaults to the platform user-data dir (macOS: ~/Library/Application Support/dvm-finance/); override with --data-dir or DVM_FINANCE_DATA_DIR. Other flags: --port (default 8000) and --host (default 127.0.0.1).

The app binds to 127.0.0.1 and has no authentication — do not widen the bind address on an untrusted network.

An empty install offers three ways in: migrate a legacy database (below), upload statement files on the Upload tab (MT940/STA, ABN XLS, generic CSV, PayPal TXT, Wise CSV, SEB CSV), or download directly from the Download tab.

Migrating from abn-analyst

One-time, idempotent import of all transactions, rules + conditions, budgets and manual categorizations from a legacy abn_analyst.db (opened read-only):

dvm-finance migrate-legacy /path/to/abn_analyst.db

Re-running skips already-present rows. A per-table summary is printed.

Sharing data with a second person

  • Export (Snapshots tab): one click writes a versioned, gzipped-JSON snapshot of transactions, rules, budgets and change reports, offered as a download.
  • Import (their machine): upload the file on the Snapshots tab. The merge is incoming wins — new records are inserted, conflicting records (including manual categorizations and rule edits) are overwritten by the snapshot; local records absent from the snapshot are never deleted. The database is backed up first and an import report is stored for review.
  • Second-user setup is two commands: uvx dvm-finance, then import a snapshot in the browser.

Security note: snapshot files contain your full financial data and are not encrypted. Exchange them only over a channel you trust.

Downloads

  • ABN AMRO: click "Start ABN download" — a headed Chromium opens; authenticate with the ABN AMRO app; statements are fetched, saved and imported automatically. Requires Playwright browsers:

    playwright install chromium
    

    The app works fine without them (upload/rules/trends); the Download page shows install instructions when they are missing.

  • PayPal: start Chrome with remote debugging first, log in to PayPal, then click "Start PayPal download":

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
      --remote-debugging-port=9226 --user-data-dir=~/.chrome/debugdir \
      https://www.paypal.com/reports/dlog
    

Development

source ~/venv/bin/activate
pip install -e ".[dev]"
playwright install chromium

ruff check .                 # lint
pytest                       # unit + integration (e2e/slow deselected)
pytest --cov=abn_combined    # coverage (fails under 80%)
pytest -m e2e                # Playwright end-to-end flows (headless Chromium)
dvm-finance --data-dir ./devdata   # run against a scratch data dir

See docs/architecture.md, docs/developer.md and docs/product.md for design notes, and docs/core-beliefs.md for the project's golden principles.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dvm_finance-1.0.0.tar.gz (155.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dvm_finance-1.0.0-py3-none-any.whl (199.0 kB view details)

Uploaded Python 3

File details

Details for the file dvm_finance-1.0.0.tar.gz.

File metadata

  • Download URL: dvm_finance-1.0.0.tar.gz
  • Upload date:
  • Size: 155.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dvm_finance-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b9e89987b1c92fc80da4c0207b9bf7c2fed793bf118d7c072248cdfc40f013b3
MD5 f73f3aaedc578b5e148208e9fa47831d
BLAKE2b-256 f1fa9996e300b6254e14625dd77ac17a4e7a258378f7fda8c5a288748497634c

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvm_finance-1.0.0.tar.gz:

Publisher: publish.yml on divyavanmahajan/dvm-finance

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dvm_finance-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: dvm_finance-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 199.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dvm_finance-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 38c0d17f1875e8489f1ffad24019e19db3242e2ee596362aa424998996a0c322
MD5 31737a477dc8ece417f3ecf4c7e36b2c
BLAKE2b-256 5d3971f560193dfbc2eb102832594bccee01e5efa0d30a3bc7bcc475e1a7a33d

See more details on using hashes here.

Provenance

The following attestation bundles were made for dvm_finance-1.0.0-py3-none-any.whl:

Publisher: publish.yml on divyavanmahajan/dvm-finance

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page