# JARVIS Finance System – UAT-Matrix v0.3

**Release-Kandidat:** `main` nach Merge von `feat/budget-phase-1-4`  
**Release-Tag geplant:** `v0.3.0`  
**UAT-Datum:** 2026-05-18  
**Scope:** Konsolidierung, Merge/Release, Backup/Restore, kleiner UAT  
**Datenschutz:** keine echten Finanzwerte, keine Rohdaten, keine Secrets  

## UAT-Regeln

- Keine produktiven Massenbuchungen.
- Keine echten Beträge im Bericht.
- Produktive Runtime wird nicht für synthetische UAT-Mutationen verwendet.
- Kleine Schreib-UATs laufen auf einer separaten Test-Runtime-Kopie.
- Jede produktiv relevante Aktion muss Preview/Confirm/Audit respektieren.

## Ergebnisübersicht

- **Automatisierte Tests:** bestanden
- **Browser/Tailscale-Smoke:** bestanden
- **Runtime Backup:** bestanden
- **Restore-Test:** bestanden
- **Kleiner UAT:** bestanden auf Test-Runtime-Kopie
- **Produktive Runtime verändert:** nein

---

## Core

### Dashboard startet

- **Teststatus:** Browser/Tailscale-Smoke
- **Erwartetes Ergebnis:** Dashboard lädt über Tailscale.
- **Bestanden:** ja
- **Notiz:** HTTP `200`, keine echten Werte berichtet.

### Backend erreichbar

- **Teststatus:** Healthcheck
- **Erwartetes Ergebnis:** FastAPI `/api/health` erreichbar.
- **Bestanden:** ja
- **Notiz:** Lokal und via Tailscale geprüft.

### Frontend erreichbar

- **Teststatus:** HTTP-Smoke
- **Erwartetes Ergebnis:** Vite/Vue liefert Seiten aus.
- **Bestanden:** ja
- **Notiz:** Relevante Routen liefern `200`.

### Runtime-DB erreichbar

- **Teststatus:** Restore-/Schema-Test
- **Erwartetes Ergebnis:** DB öffnet, Schema-Migrationen lesbar.
- **Bestanden:** ja
- **Notiz:** Schema-Version `26` bestätigt.

### Backup/Restore geprüft

- **Teststatus:** Backup + Restore-Test gegen separaten Testpfad
- **Erwartetes Ergebnis:** Checksum OK, Test-DB öffnet, zentrale Tabellen lesbar.
- **Bestanden:** ja
- **Notiz:** Backup und Restore-Testpfad liegen außerhalb Repo.

---

## Crypto

### Coin anzeigen

- **Teststatus:** Route/API-Smoke + bestehende Tests
- **Erwartetes Ergebnis:** Crypto-Seite lädt und lokale Daten werden aus Runtime gelesen.
- **Bestanden:** ja
- **Notiz:** Keine Provider-Abfrage beim normalen Rendern.

### Wallet anzeigen

- **Teststatus:** Route/API-Smoke + bestehende Tests
- **Erwartetes Ergebnis:** Wallet-Seite lädt, Wallet-Zusammenfassung ist verfügbar.
- **Bestanden:** ja
- **Notiz:** Keine technischen IDs im normalen User-Bericht.

### Transfer

- **Teststatus:** automatisierte Testabdeckung vorhanden; kein produktiver Live-UAT
- **Erwartetes Ergebnis:** Transfer erfordert Confirm und Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Transfer im Konsolidierungssprint.

### Bestand korrigieren

- **Teststatus:** automatisierte Testabdeckung vorhanden; kein produktiver Live-UAT
- **Erwartetes Ergebnis:** Korrektur nur mit Confirm/Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Eingriff.

### Auf 0 setzen

- **Teststatus:** automatisierte Testabdeckung vorhanden; kein produktiver Live-UAT
- **Erwartetes Ergebnis:** Set-zero-Flow bestätigt und auditiert.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Eingriff.

### Audit

- **Teststatus:** bestehende Tests + Audit-Pattern-Prüfung
- **Erwartetes Ergebnis:** Schreibaktionen erzeugen Audit.
- **Bestanden:** ja
- **Notiz:** Kleine Schreib-UATs wurden nur auf Test-Runtime-Kopie durchgeführt.

---

## Aktien/ETF

### Aktie/ETF suchen

- **Teststatus:** Frontend/API-Tests
- **Erwartetes Ergebnis:** Suche/Provider-Preview ohne automatische produktive Materialisierung.
- **Bestanden:** ja
- **Notiz:** Provider-Aufrufe bleiben explizit.

### Position hinzufügen

- **Teststatus:** Frontend/API-Tests
- **Erwartetes Ergebnis:** Preview → Confirm → Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Positions-UAT in diesem Sprint.

### Verkauf

- **Teststatus:** bestehende MVP-Tests/Smoke
- **Erwartetes Ergebnis:** Verkauf nur mit Confirm/Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Verkauf.

### Dividende

- **Teststatus:** bestehende MVP-Tests/Smoke
- **Erwartetes Ergebnis:** Dividende/Ausschüttung nur mit Confirm/Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Dividendeneintrag.

### Audit

- **Teststatus:** bestehende Tests
- **Erwartetes Ergebnis:** produktive Aktionen schreiben Audit.
- **Bestanden:** ja
- **Notiz:** Keine echten Werte im Bericht.

---

## Cash

### Einzahlung

- **Teststatus:** bestehende Tests/Workflow-Abdeckung
- **Erwartetes Ergebnis:** Preview → Confirm → Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Live-UAT.

### Auszahlung

- **Teststatus:** bestehende Tests/Workflow-Abdeckung
- **Erwartetes Ergebnis:** Preview → Confirm → Audit.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Live-UAT.

### Korrektur

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Cash-Korrektur wird bestätigt und auditiert.
- **Bestanden:** ja
- **Notiz:** Produktive Runtime wurde nicht verändert.

### Audit

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Audit-ID vorhanden.
- **Bestanden:** ja
- **Notiz:** Keine echten Beträge im Bericht.

---

## Budget

### Kandidat bestätigen

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Kandidat wird zu bestätigter Budget-Transaktion; Audit vorhanden.
- **Bestanden:** ja
- **Notiz:** Kein produktiver Kandidat bestätigt.

### Bulk Confirm

- **Teststatus:** automatisierte Tests + Preview/Guard geprüft
- **Erwartetes Ergebnis:** Bulk Confirm benötigt Preview und explizite Bestätigung.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Massenlauf.

### Ignore

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Kandidat wird ignoriert; Audit vorhanden.
- **Bestanden:** ja
- **Notiz:** Testdaten nur in Kopie.

### Reopen

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** ignorierter Kandidat wird wieder geöffnet; Audit vorhanden.
- **Bestanden:** ja
- **Notiz:** Testdaten nur in Kopie.

### Split

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Split-Summe passt; zwei bestätigte Split-Buchungen; Audit vorhanden.
- **Bestanden:** ja
- **Notiz:** Produktive Runtime nicht verändert.

### Kategorie ändern

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Kategorie wird gesetzt; Audit vorhanden.
- **Bestanden:** ja
- **Notiz:** Im Kandidat-bestätigen-UAT enthalten.

### Merchant/Alias erstellen

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Merchant und Alias werden erstellt; Alias trifft offenen Kandidaten; Audit vorhanden.
- **Bestanden:** ja
- **Notiz:** Nur synthetisches UAT-Merchant-Pattern.

### Regel anwenden

- **Teststatus:** kleiner UAT auf Test-Runtime-Kopie
- **Erwartetes Ergebnis:** Regeltest findet Kandidat; Apply setzt Vorschlag; keine produktive Buchung.
- **Bestanden:** ja
- **Notiz:** `productive_transaction_count = 0` bestätigt.

### Duplikat prüfen

- **Teststatus:** automatisierte Tests
- **Erwartetes Ergebnis:** Duplikatkandidaten blockieren normalen Confirm; expliziter Override nötig.
- **Bestanden:** ja, technisch abgedeckt
- **Notiz:** Kein produktiver Override in diesem Sprint.

### Effektive Ausgaben prüfen

- **Teststatus:** Route/API-Smoke + bestehende Tests
- **Erwartetes Ergebnis:** Seite lädt und zeigt bestätigte Transaktionen, keine Kandidaten-Doppelzählung.
- **Bestanden:** ja
- **Notiz:** Keine echten Werte im Bericht.

### Budgetstatus prüfen

- **Teststatus:** Route/API-Smoke + bestehende Tests
- **Erwartetes Ergebnis:** Budgetstatus lädt, 2026-Fokus und confirmed actuals.
- **Bestanden:** ja
- **Notiz:** Keine echten Werte im Bericht.

---

## Reports

### Vorhandene Reports prüfen

- **Teststatus:** Route-Smoke
- **Erwartetes Ergebnis:** Reports-Seite/Report-Grundlagen erreichbar, kein Produktivexport in Git.
- **Bestanden:** ja, soweit MVP vorhanden
- **Notiz:** Reports v1 bleibt empfohlener späterer Sprint.

### Kein Git-Leak

- **Teststatus:** Git-Safety + Secret Scans
- **Erwartetes Ergebnis:** Keine Runtime-DB, keine Rohdaten, keine Secrets, keine Build-Artefakte im Git.
- **Bestanden:** ja
- **Notiz:** Generierte Artefakte wurden vor Git-Safety entfernt.

---

## Kleine UAT-Ausführung auf Test-Runtime-Kopie

**Test-Runtime:** separate Kopie unter `~/jarvis_runtime/finance-system/uat-tests/...`  
**Produktive Runtime verändert:** nein  
**Schema-Version:** `26`

Durchgeführt und bestanden:

- Budget-Kandidat bestätigen: ja
- Kandidat ignorieren und wieder öffnen: ja
- Merchant/Alias erstellen und anwenden: ja
- Rule testen und anwenden: ja, ohne produktive Buchung aus Regeltest
- Split confirm auf Testkopie: ja
- Cash-Korrektur auf Testkopie: ja

## Offene UAT-Punkte für manuelle Abnahme

- Produktive Bestätigung eines echten Budget-Kandidaten nur nach aktueller expliziter Freigabe.
- Produktiver Bulk Confirm nur nach Preview und separater Freigabe.
- Produktive Crypto-/Equity-/Cash-Aktionen nur, wenn konkrete Zielobjekte bewusst gewählt werden.
- Reports v1 bleibt ein separater Sprint.
