## Verdict: **NOT APPROVED — 4 P1 findings, no P0** ### P1 findings 1. **Transaction filters do not align with the backend contract** - Frontend presents user-facing account/category/source text fields: `frontend/src/pages/HouseholdTransactionsPage.vue:8-14`. - Backend compares `account` and `category` against internal IDs and `source` against the technical source type: `src/jarvis_finance/services/household_import.py:914-923`. - Consequently, entering visible names such as “Haushalt” or “Lebensmittel” returns no matches unless users know hidden DB identifiers. The UI needs safe option tokens or the backend must filter by names. 2. **Review-status request/response contract is inconsistent** - Frontend sends `reviewed|open|ignored` and only labels those values: `frontend/src/pages/HouseholdTransactionsPage.vue:14,55`. - Backend only handles `open`; `reviewed` and `ignored` are silently ignored: `src/jarvis_finance/services/household_import.py:924-926`. - Every returned row instead has `review_status='confirmed'`: `src/jarvis_finance/services/household_import.py:929-932`. - This makes “Ignoriert” return ordinary confirmed transactions and displays the untranslated technical value “confirmed”. 3. **Monthly overview is not URL-addressable** - The page always initializes the current month and neither reads nor writes `?month=`: `frontend/src/pages/HouseholdOverviewPage.vue:54,67-68`. - Browser verification of `/household?month=2025-01` displayed `2026-07`. - Legacy redirects correctly preserve queries at `frontend/src/router/index.ts:38-39,61`, but the destination discards the preserved month semantically. 4. **Selected filename is exposed in the normal DOM** - The import control renders `fileName` directly: `frontend/src/pages/HouseholdImportsPage.vue:16,94`. - A real browser file-selection probe confirmed the basename became visible; raw CSV content did remain hidden. - This violates the explicit no-filename-in-normal-DOM requirement. ### Additional contract issue - `neutral_transfers_chf` is always `"0.00"` even though transfer volume is queried: `src/jarvis_finance/services/household_import.py:851-877`. The overview therefore cannot truthfully display actual neutral-transfer volume. ### Passed checks - Canonical plural import endpoints and exact preview→confirm payload alignment are correct. - Import and review confirmation are fingerprint/baseline-bound; review fingerprints also bind group, action, and row identity. - Mapping options avoid hashes, full source references, and account/DB IDs in visible option values. - Unsupported review actions are honestly disabled rather than issuing unsupported requests. - Legacy household redirects preserve query/hash and avoid a second routed household implementation. - Browser probes at **320, 768, and 1440 px** found no viewport-width horizontal overflow on all four household routes. - No raw CSV or fingerprints appeared in rendered text. ### Verification run - Frontend targeted tests: **12 passed** - Frontend production build: **passed** - Household backend tests: **21 passed** - `git diff --check`: **passed** - Build warning only: existing main chunk exceeds 500 kB. ### Files - **No repository files intentionally modified or retained.** - Temporary `uv.lock` generated by the browser-test environment was removed.