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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9e89987b1c92fc80da4c0207b9bf7c2fed793bf118d7c072248cdfc40f013b3
|
|
| MD5 |
f73f3aaedc578b5e148208e9fa47831d
|
|
| BLAKE2b-256 |
f1fa9996e300b6254e14625dd77ac17a4e7a258378f7fda8c5a288748497634c
|
Provenance
The following attestation bundles were made for dvm_finance-1.0.0.tar.gz:
Publisher:
publish.yml on divyavanmahajan/dvm-finance
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dvm_finance-1.0.0.tar.gz -
Subject digest:
b9e89987b1c92fc80da4c0207b9bf7c2fed793bf118d7c072248cdfc40f013b3 - Sigstore transparency entry: 2145957806
- Sigstore integration time:
-
Permalink:
divyavanmahajan/dvm-finance@2a91818d4849d82d206872167d28b78b02961a20 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/divyavanmahajan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2a91818d4849d82d206872167d28b78b02961a20 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38c0d17f1875e8489f1ffad24019e19db3242e2ee596362aa424998996a0c322
|
|
| MD5 |
31737a477dc8ece417f3ecf4c7e36b2c
|
|
| BLAKE2b-256 |
5d3971f560193dfbc2eb102832594bccee01e5efa0d30a3bc7bcc475e1a7a33d
|
Provenance
The following attestation bundles were made for dvm_finance-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on divyavanmahajan/dvm-finance
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dvm_finance-1.0.0-py3-none-any.whl -
Subject digest:
38c0d17f1875e8489f1ffad24019e19db3242e2ee596362aa424998996a0c322 - Sigstore transparency entry: 2145957813
- Sigstore integration time:
-
Permalink:
divyavanmahajan/dvm-finance@2a91818d4849d82d206872167d28b78b02961a20 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/divyavanmahajan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2a91818d4849d82d206872167d28b78b02961a20 -
Trigger Event:
push
-
Statement type: