Files
money/README.md
T
2026-10-21 15:59:21 -04:00

48 lines
3.1 KiB
Markdown

# money
Local tool that loads bank/card statements (Chase Visa, Ally, CVFCU PDFs; CVFCU "Account Details" page saved as PDF for recent activity; Capital One CSV) into `Bills_Tracker.xlsx` and shows a web dashboard. Imported statements are filed into `Statements/year/month/` and never read again. Savings and loan balances (Ally savings, CVFCU share, mortgage) go to a separate Accounts tab and page, never into spending or the budget.
Everything runs locally; statements and the workbook are **never** committed or baked into the image.
## Run on ZimaOS / CasaOS
Add the app: App Store -> Custom Install -> import `compose.yaml` (it follows the ZimaOS `x-casaos` format).
Copy `Bills_Tracker.xlsx` into `/DATA/AppData/money/data/` (the app's data folder), then open the app's Web UI (port 8765).
The image is built by Gitea Actions (`.gitea/workflows/build.yml`) and pushed to `git.necloud.us/nate/money`.
Add a repository secret `REGISTRY_TOKEN` (a Gitea access token with `write:package`), and on the ZimaOS box run
`docker login git.necloud.us` once so it can pull the private image.
## Run with plain Docker
```bash
mkdir -p data && cp /path/to/Bills_Tracker.xlsx data/
TZ=America/New_York docker compose up -d # data is stored in /DATA/AppData/money/data on the host
```
## Starting fresh
`template/Bills_Tracker.template.xlsx` is a blank workbook (all tabs, formulas and charts; no data). The app's first-run screen has a
"Create a blank workbook" button that copies it into the data folder. Then drop statements in; new payees land on the Lists tab as
"Other / Unsorted" for you to categorize. `loader_rules.example.json` shows the private rules file format.
## Envelope budget
The **Budget** page (`/budget`) turns each category into an envelope. Each month, assign your income to envelopes; the goal is
"Ready to assign" = $0. Spending comes from the Bill Log, leftovers roll over, and overspending carries forward as a negative.
Tools: *Copy last month*, *Suggest from spending* (3-month average) and *Move money*. Amounts are saved to a `Budget` tab in the workbook
(one row per month and envelope), with a backup first.
## Categories
New payees are categorized by built-in generic merchant rules (`seed_rules.py`); anything unknown lands in "Other / Unsorted".
Use the **Categorize payees** card in the app (or the Lists tab) to set the rest. Your choices are saved in the workbook.
## Personal rules (not in git)
Your name, card last-4 and similar live in `loader_rules.json` next to the workbook (git-ignored, not in the image):
```json
{"own_names": ["JANE DOE"], "own_bank_hints": ["MY CREDIT UNION"], "csv_accounts": {"1234": "Capital One Card"}}
```
`own_names` lets the loader recognise transfers between your own accounts. Copy the file into the data folder (`/DATA/AppData/money/data/` on ZimaOS).
## Run without Docker
```bash
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt && .venv/bin/python app.py
```
`DATA_DIR` (default: this folder) is where statements, the workbook and `backups/` live.
The app has no login. Publish it on localhost only, or put it behind your own authentication.