Count hand-valued assets into the wealth figure

A wealth figure that ignores the house is not a wealth figure. Assets
without a market feed - a house, a car, a private loan - are now added
by hand on the Wealth page with a stated value, a currency and the day
the estimate was made; a negative value records a liability. They are
registry entities in assets.finance like everything else, join the
per-currency totals immediately, and a currency held only in an asset
earns its own line.
This commit is contained in:
Lars Nolden
2026-09-14 09:29:19 +02:00
parent a1480af74d
commit 77f4ea5655
15 changed files with 564 additions and 29 deletions
+19 -9
View File
@@ -147,8 +147,14 @@ this is not local AI and cannot promise that a remote provider honors policy.
Each classification sends the transaction date, signed amount, currency,
merchant and counterparty text, account institution/currency, the complete
leaf-category registry for the transaction kind, all tags and all merchants
with their real local IDs. Identifier-only redaction removes IBANs (with a
leaf-category registry for the transaction kind, all tags and all merchants.
Names, paths, hints and aliases remain available, but registry IDs use short
request-local references (c1, m1, t1), including merchant usual categories and
history. History includes only categories offered for that transaction kind.
Responses are mapped back to canonical IDs and validated locally; canonical
IDs are not accepted as alternative response references. This keeps the full
registry without the long-ID schema overhead that providers can reject.
Identifier-only redaction removes IBANs (with a
directly attached BIC), labeled BIC/SWIFT references, UUIDs, URLs/emails,
labeled payment or customer references, card fragments, long digit-bearing
tokens, the row's own IDs, account labels and configured private names. A
@@ -536,10 +542,13 @@ repeats daily. Nothing is committed when no quote changed.
A holding's value is its share count times its quote, rounded half away from
zero to money's four places. Positions is that value summed per account, wealth
is cash plus positions, and result is value plus everything the position
returned less everything put into it - the outcome to date, realised and not.
None of these figures are read from the DuckDB index: the report is recomputed
from the journal so it can be checked against a broker's own screen.
is cash plus positions plus hand-valued assets, and result is value plus
everything the position returned less everything put into it - the outcome to
date, realised and not. A hand-valued asset (a house, a car, a private loan) is
entered on the Wealth page with a stated value, a currency and the day the
estimate was made; a negative value records a liability. None of these figures
are read from the DuckDB index: the report is recomputed from the journal so it
can be checked against a broker's own screen.
A broker reuses one reference across every leg of an economic event: the cash
and position sides of a corporate action arrive with the same reference byte for
@@ -652,6 +661,7 @@ finance/
tags.finance
merchants.finance
instruments.finance
assets.finance
journal/YYYY/YYYY-MM.finance
state/sync-state.json sensitive local consent/session metadata
state/openrouter.json sensitive UI-managed OpenRouter key or explicit disable
@@ -738,9 +748,9 @@ recurring payees classify locally without any provider request.
The finished run is a read-only preview. Apply all/selected writes all
selected changes in one canonical commit; financial facts never change. A
manual edit, external journal change or taxonomy change invalidates old previews.
Previews are kept in memory for up to one hour and disappear on restart. Cancel
writes nothing. Transfers and broker facts are skipped, and unselected fields
are preserved.
Previews are kept in memory for up to 24 hours from the start of analysis and
disappear on restart. Cancel writes nothing. Transfers and broker facts are
skipped, and unselected fields are preserved.
When a selected transaction is linked to a merchant, applying the preview and
manual transaction edits may add its normalized counterparty as an alias if
that alias is unambiguous and the merchant has fewer than 32 aliases. A new