financial page with bank data
All checks were successful
Deploy / build-deploy (push) Successful in 1m48s

This commit is contained in:
Jorijn van der Graaf 2026-08-14 04:14:13 +02:00
commit 33c68c2f44
11 changed files with 394 additions and 87 deletions

View file

@ -544,7 +544,7 @@ of the fields the seven-year fiscal retention does not cover.
## The open financials page and the bunq mutation callback
`/financials` publishes running totals only: sales, donations, and expenses
grouped into recurring and one-off. Sales fold out of `orders.jsonl` on every
as one flat list of categories. Sales fold out of `orders.jsonl` on every
request and need no setup at all — that half works the moment the page ships.
This section is about the other half.
@ -593,14 +593,14 @@ page and logged for you to write a rule for. It is never published as "other".
```json
{"donation_accounts": [9911],
"rules": [
{"description_contains": "hetzner", "group": "recurring", "label": "Hosting"},
{"iban": "NL00INSURER0000000", "group": "recurring", "label": "Insurance"},
{"iban": "DE00SUPPLIER000000", "group": "single", "label": "Inventory"},
{"description_contains": "hetzner", "group": "expense", "label": "Hosting"},
{"iban": "NL00INSURER0000000", "group": "expense", "label": "Insurance"},
{"iban": "DE00SUPPLIER000000", "group": "expense", "label": "Inventory"},
{"iban": "NL00MOLLIE00000000", "group": "ignore"},
{"iban": "NL00OWNSELF0000000", "group": "ignore"}]}
```
`group` is `donations`, `recurring`, `single` or `ignore`; first match wins,
`group` is `donations`, `expense` or `ignore`; first match wins,
and explicit rules beat the donation-account default (which is how your own
transfer between accounts stays out of the donation total). **Ignore your
Mollie and CoinGate payouts** — those are sales, already counted from the