     1|module github.com/mayswind/ezbookkeeping
     2|
     3|go 1.26.0
     4|
     5|require (
     6|	github.com/boombuler/barcode v1.1.0
     7|	github.com/coreos/go-oidc/v3 v3.18.0
     8|	github.com/extrame/xls v0.0.2-0.20200426124601-4a6cf263071b
     9|	github.com/gin-contrib/cache v1.4.4
    10|	github.com/gin-contrib/gzip v1.2.6
    11|	github.com/gin-gonic/gin v1.12.0
    12|	github.com/go-co-op/gocron/v2 v2.21.1
    13|	github.com/go-playground/validator/v10 v10.30.2
    14|	github.com/go-sql-driver/mysql v1.9.3
    15|	github.com/golang-jwt/jwt/v5 v5.3.1
    16|	github.com/invopop/jsonschema v0.13.0
    17|	github.com/lib/pq v1.12.3
    18|	github.com/mattn/go-sqlite3 v1.14.42
    19|	github.com/minio/minio-go/v7 v7.0.100
    20|	github.com/patrickmn/go-cache v2.1.0+incompatible
    21|	github.com/pquerna/otp v1.5.0
    22|	github.com/sirupsen/logrus v1.9.4
    23|	github.com/stretchr/testify v1.11.1
    24|	github.com/urfave/cli/v3 v3.8.0
    25|	github.com/wk8/go-ordered-map/v2 v2.1.8
    26|	github.com/xuri/excelize/v2 v2.10.1
    27|	golang.org/x/crypto v0.50.0
    28|	golang.org/x/net v0.53.0
    29|	golang.org/x/oauth2 v0.36.0
    30|	golang.org/x/text v0.36.0
    31|	gopkg.in/ini.v1 v1.67.1
    32|	gopkg.in/mail.v2 v2.3.1
    33|	xorm.io/builder v0.3.13
    34|	xorm.io/xorm v1.3.11
    35|)
    36|
    37|require (
    38|	filippo.io/edwards25519 v1.1.0 // indirect
    39|	github.com/bahlo/generic-list-go v0.2.0 // indirect
    40|	github.com/bradfitz/gomemcache v0.0.0-20250403215159-8d39553ac7cf // indirect
    41|	github.com/buger/jsonparser v1.1.1 // indirect
    42|	github.com/bytedance/gopkg v0.1.3 // indirect
    43|	github.com/bytedance/sonic v1.15.0 // indirect
    44|	github.com/bytedance/sonic/loader v0.5.0 // indirect
    45|	github.com/cespare/xxhash/v2 v2.3.0 // indirect
    46|	github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
    47|	github.com/chenzhuoyu/iasm v0.9.1 // indirect
    48|	github.com/cloudwego/base64x v0.1.6 // indirect
    49|	github.com/cloudwego/iasm v0.2.0 // indirect
    50|	github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
    51|	github.com/davecgh/go-spew v1.1.1 // indirect
    52|	github.com/dustin/go-humanize v1.0.1 // indirect
    53|	github.com/extrame/goyymmdd v0.0.0-20210114090516-7cc815f00d1a // indirect
    54|	github.com/extrame/ole2 v0.0.0-20160812065207-d69429661ad7 // indirect
    55|	github.com/gabriel-vasile/mimetype v1.4.13 // indirect
    56|	github.com/gin-contrib/sse v1.1.0 // indirect
    57|	github.com/go-ini/ini v1.67.0 // indirect
    58|	github.com/go-jose/go-jose/v4 v4.1.4 // indirect
    59|	github.com/go-playground/locales v0.14.1 // indirect
    60|	github.com/go-playground/universal-translator v0.18.1 // indirect
    61|	github.com/goccy/go-json v0.10.5 // indirect
    62|	github.com/goccy/go-yaml v1.19.2 // indirect
    63|	github.com/golang/snappy v0.0.4 // indirect
    64|	github.com/gomodule/redigo v1.9.2 // indirect
    65|	github.com/google/uuid v1.6.0 // indirect
    66|	github.com/jonboulle/clockwork v0.5.0 // indirect
    67|	github.com/json-iterator/go v1.1.12 // indirect
    68|	github.com/klauspost/compress v1.18.5 // indirect
    69|	github.com/klauspost/cpuid/v2 v2.3.0 // indirect
    70|	github.com/klauspost/crc32 v1.3.0 // indirect
    71|	github.com/leodido/go-urn v1.4.0 // indirect
    72|	github.com/mailru/easyjson v0.7.7 // indirect
    73|	github.com/mattn/go-isatty v0.0.20 // indirect
    74|	github.com/memcachier/mc/v3 v3.0.3 // indirect
    75|	github.com/minio/crc64nvme v1.1.1 // indirect
    76|	github.com/minio/md5-simd v1.1.2 // indirect
    77|	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
    78|	github.com/modern-go/reflect2 v1.0.2 // indirect
    79|	github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
    80|	github.com/pelletier/go-toml/v2 v2.2.4 // indirect
    81|	github.com/philhofer/fwd v1.2.0 // indirect
    82|	github.com/pmezard/go-difflib v1.0.0 // indirect
    83|	github.com/quic-go/qpack v0.6.0 // indirect
    84|	github.com/quic-go/quic-go v0.59.0 // indirect
    85|	github.com/richardlehane/mscfb v1.0.6 // indirect
    86|	github.com/richardlehane/msoleps v1.0.6 // indirect
    87|	github.com/robfig/cron/v3 v3.0.1 // indirect
    88|	github.com/robfig/go-cache v0.0.0-20130306151617-9fc39e0dbf62 // indirect
    89|	github.com/rs/xid v1.6.0 // indirect
    90|	github.com/russross/blackfriday/v2 v2.1.0 // indirect
    91|	github.com/syndtr/goleveldb v1.0.0 // indirect
    92|	github.com/tealeg/xlsx v1.0.5 // indirect
    93|	github.com/tiendc/go-deepcopy v1.7.2 // indirect
    94|	github.com/tinylib/msgp v1.6.1 // indirect
    95|	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
    96|	github.com/ugorji/go/codec v1.3.1 // indirect
    97|	github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
    98|	github.com/xuri/efp v0.0.1 // indirect
    99|	github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
   100|	go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect
   101|	go.yaml.in/yaml/v3 v3.0.4 // indirect
   102|	golang.org/x/arch v0.22.0 // indirect
   103|	golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect
   104|	golang.org/x/mod v0.34.0 // indirect
   105|	golang.org/x/sync v0.20.0 // indirect
   106|	golang.org/x/sys v0.43.0 // indirect
   107|	golang.org/x/tools v0.43.0 // indirect
   108|	google.golang.org/protobuf v1.36.10 // indirect
   109|	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
   110|	gopkg.in/yaml.v3 v3.0.1 // indirect
   111|)
   112|


terminal

Output:
## feat/budget-phase-1-4...origin/feat/budget-phase-1-4
?? docs/budget/
REF_CLONE_OK
/home/agent/.hermes/reference_repos/ezbookkeeping
1f7411a


Explanation:
**Reviewing document requirements**

I’m considering the need to ensure the document meets all user requests, including the matrix columns with priority. It seems like the existing document tables might lack a priority column, which could be an issue. I need to revise and improve the final document based on this realization. I'll make sure to read the rest of the document to gather all necessary information. It’s all about getting it right for the user!


   259|## 7. Navigationsvorschlag
   260|
   261|Ziel: Budget, Ausgaben und Analyse weniger verstreut, stärker arbeitsorientiert, keine Fake-Funktionen, klare Trennung zwischen „anschauen“, „prüfen“ und „einrichten“.
   262|
   263|### 7.1 Desktop Navigation
   264|
   265|#### Hauptbereiche
   266|
   267|- **Command Center**
   268|- **Budget**
   269|- **Ausgaben**
   270|- **Einnahmen**
   271|- **Analyse**
   272|- **Setup**
   273|- **Portfolio / Crypto / Reports** wie bisher außerhalb Budget
   274|
   275|#### Budget
   276|
   277|1. **Budget Cockpit**
   278|   - Aktueller `Budgetstatus nach Kategorie`.
   279|   - KPI: geplante Einnahmen, geplante Ausgaben, Ist, Netto, Restbudget, Review offen.
   280|   - Ampeln und Prognose.
   281|
   282|2. **Budgetpläne**
   283|   - Monats-/Jahresmatrix.
   284|   - Planpositionen erstellen/ändern/archivieren mit Preview/Confirm.
   285|   - Später: wiederkehrende Planvorlagen.
   286|
   287|3. **Budget Review**
   288|   - Offene Budgetplan-/Seed-Kandidaten.
   289|   - Übernahme aus Excel/Seed Review.
   290|
   291|#### Ausgaben
   292|
   293|1. **Buchungen prüfen**
   294|   - Aktuelle Import Review Seite.
   295|   - Zentraler Ort für Kandidaten, Duplikate, Splits, Transfers, Batch Preview.
   296|
   297|2. **Effektive Ausgaben**
   298|   - Bestätigte Ausgaben.
   299|   - Filter, Detail, Reversal/Adjustment.
   300|
   301|3. **Ausgabe erfassen**
   302|   - Eigener Schnell-Erfassungsmodus oder dedizierte Seite.
   303|   - Preview/Confirm prominent.
   304|
   305|4. **Transfers**
   306|   - Spätestens in Stufe 2 als eigene Seite oder Subtab.
   307|
   308|#### Einnahmen
   309|
   310|1. **Einnahmen Cockpit**
   311|   - Plan/Ist/Forecast.
   312|
   313|2. **Effektive Einnahmen**
   314|   - Bestätigte Einnahmentransaktionen.
   315|
   316|3. **Einnahme erfassen**
   317|   - Preview/Confirm.
   318|
   319|#### Analyse
   320|
   321|1. **Budget vs Ist**
   322|   - Bestehende Logik, besser visualisiert.
   323|
   324|2. **Cashflow**
   325|   - Einnahmen/Ausgaben/Netto je Monat.
   326|
   327|3. **Kategorien**
   328|   - Anteil, Top-Kategorien, Monatsvergleich.
   329|
   330|4. **Trends & Prognose**
   331|   - Monats-/Quartalsaggregation, gleitender Durchschnitt, Forecast-Hinweise.
   332|
   333|5. **Datenqualität**
   334|   - Unkategorisiert, FX fehlt, Review nötig, Duplikate, offene Kandidaten.
   335|
   336|#### Setup
   337|
   338|1. **Konten**
   339|2. **Kategorien**
   340|3. **Tags**
   341|4. **Regeln**
   342|5. **Importquellen**
   343|6. **Audit / Sicherheit** optional als Link in bestehenden Audit-Bereich
   344|
   345|### 7.2 Mobile Navigation
   346|
   347|Bottom Nav maximal 5 primäre Einträge plus Mehr:
   348|
   349|- **Home**
   350|- **Budget**
   351|- **Prüfen**
   352|- **Ausgaben**
   353|- **Mehr**
   354|
   355|Mehr-Menü:
   356|
   357|- Einnahmen
   358|- Analyse
   359|- Kategorien
   360|- Konten
   361|- Regeln
   362|- Reports
   363|- Portfolio/Crypto falls im Gesamtprodukt nötig
   364|
   365|Mobile UX-Prinzipien:
   366|
   367|- Keine breiten Tabellen.
   368|- Budgetstatus als Kartenliste mit Ampel und 3 Kernzahlen.
   369|- Import Review als Kandidatenkarten mit Aktionen:
   370|  - Kategorie wählen
   371|  - Preview
   372|  - Confirm
   373|  - Ignorieren
   374|  - Splitten
   375|- Batch Confirm mobil nur mit expliziter Preview-Seite und klarer Anzahl.
   376|
   377|### 7.3 URL-Struktur Vorschlag
   378|
   379|```text
   380|/planning/budget/cockpit
   381|/planning/budget/plans
   382|/planning/budget/seed-review
   383|
   384|/planning/expenses/review
   385|/planning/expenses/actual
   386|/planning/expenses/new
   387|/planning/expenses/transfers
   388|
   389|/planning/income/cockpit
   390|/planning/income/actual
   391|/planning/income/new
   392|
   393|/planning/analysis/budget-vs-actual
   394|/planning/analysis/cashflow
   395|/planning/analysis/categories
   396|/planning/analysis/trends
   397|/planning/analysis/data-quality
   398|
   399|/planning/setup/accounts
   400|/planning/setup/categories
   401|/planning/setup/tags
   402|/planning/setup/rules
   403|/planning/setup/import-sources
   404|```
   405|
   406|Hinweis: Bestehende URLs können per Redirect erhalten bleiben. Keine Implementierung in diesem Dokument.
   407|
   408|## 8. UX-Designvorschläge nach Kernflow
   409|
   410|### 8.1 Budget Cockpit
   411|
   412|Ziel: Ein Nutzer soll in 30 Sekunden wissen:
   413|
   414|- Sind wir im Budget?
   415|- Welche Kategorien laufen rot?
   416|- Was muss geprüft werden?
   417|- Welche Buchungen verursachen die Abweichung?
   418|
   419|Design:
   420|
   421|- Top KPI Row:
   422|  - Geplante Einnahmen
   423|  - Geplante Ausgaben
   424|  - Ist Einnahmen
   425|  - Ist Ausgaben
   426|  - Forecast Netto
   427|  - Review offen
   428|- Ampel-Kategorien als Tabelle Desktop / Cards Mobile:
   429|  - Kategorie
   430|  - Budget Monat
   431|  - Ist aktueller Monat
   432|  - Jahr bisher
   433|  - Forecast Jahr
   434|  - Abweichung
   435|  - Status
   436|- Klick öffnet Drawer:
   437|  - Monatsbars
   438|  - Merchant/Source Breakdown
   439|  - relevante Buchungen
   440|  - direkte Korrektur von Kategorie/Tags/Beschreibung mit Audit
   441|- Kein technischer ID-Filter im Drawer; Konto als Dropdown nach Name.
   442|
   443|### 8.2 Effektive Ausgaben
   444|
   445|Design nach ezBookkeeping, aber JARVIS-sicher:
   446|
   447|- Filterleiste:
   448|  - Zeitraum: Monat, Jahr, frei, Vor/Zurück
   449|  - Konto: Namen, Mehrfachauswahl später
   450|  - Kategorie: Baum/Gruppe
   451|  - Tag
   452|  - Händler/Suche
   453|  - Betrag: kleiner/größer/zwischen
   454|  - Quelle
   455|- Listentypen:
   456|  - Tabelle Desktop
   457|  - Karten Mobile
   458|  - Kalender später optional
   459|- Detaildrawer:
   460|  - Stammdaten
   461|  - Kategorie/Tags/Beschreibung ändern
   462|  - Reversal Preview
   463|  - Adjustment Preview
   464|  - Audit-Historie
   465|- Betragsänderung weiterhin blockieren; nur Reversal/Adjustment.
   466|
   467|### 8.3 Buchungen prüfen / Import Review
   468|
   469|Design:
   470|
   471|- Drei Haupttabs statt zu vieler Spezialtabs:
   472|  - **Automatisch vorgeschlagen**
   473|  - **Manuell prüfen**
   474|  - **Ausgeschlossen / Duplikate / Covered**
   475|- Darunter Filter-Chips für Spezialfälle:
   476|  - Galaxus/Digitec
   477|  - Migros
   478|  - Transfers
   479|  - Duplikate
   480|  - Unklar
   481|  - Quelle
   482|- Kandidatenkarte/-zeile zeigt:
   483|  - Datum
   484|  - Händler/Beschreibung
   485|  - Betrag
   486|  - Kategorie-Vorschlag
   487|  - Confidence als Text + Farbe
   488|  - Regel/Grund menschenlesbar
   489|  - Status menschenlesbar
   490|- Batch-Aktionsleiste:
   491|  - Auswahlanzahl
   492|  - Kategorie zuweisen
   493|  - Preview Confirm
   494|  - Ignorieren
   495|  - Transfer markieren
   496|- Batch Confirm Dialog:
   497|  - Anzahl bestätigbarer Kandidaten
   498|  - Konflikte
   499|  - Kategorienverteilung
   500|  - Zielkonto Name
   501|  - Warnung: „Diese Aktion erstellt echte Buchungen nach Confirm.“
   502|
   503|### 8.4 Import Wizard
   504|
   505|JARVIS-Variante inspiriert von ezBookkeeping:
   506|
   507|1. **Quelle wählen**
   508|   - Bank CSV
   509|   - Kreditkarte
   510|   - Migros/Cumulus
   511|   - Manuelle CSV
   512|   - Später: Beleg/OCR
   513|
   514|2. **Datei/Spalten prüfen**
   515|   - Keine Datei in Repo speichern.
   516|   - Nur Vorschau der Kopfzeilen und anonymisierte Beispielzeilen in UI.
   517|   - Spaltenmapping nur für Kandidatenerzeugung.
   518|
   519|3. **Kandidaten erzeugen**
   520|   - Summary: erzeugt, ignoriert, Duplikate, Review nötig, Auto-Vorschläge.
   521|
   522|4. **Review & Regeln anwenden**
   523|   - Regeln nur Kandidatenstatus ändern, keine Buchung.
   524|
   525|5. **Confirm Preview**
   526|   - Zielkonto, Jahr, Kategorieverteilung, Konflikte.
   527|
   528|6. **Confirm & Audit**
   529|   - Buchungen erstellen.
   530|   - Ergebnis und Audit-Referenz anzeigen.
   531|
   532|### 8.5 Analyse Hub
   533|
   534|JARVIS sollte eine sichere Analyse-Navigation bauen, nicht direkt einen freien Query Explorer.
   535|
   536|Vordefinierte Views:
   537|
   538|- **Budget vs Ist**
   539|  - Kategorie, Monat, Jahr, Forecast.
   540|- **Cashflow**
   541|  - Einnahmen, Ausgaben, Netto je Monat.
   542|- **Kategorieanteile**
   543|  - Pie/Bar mit Drilldown.
   544|- **Trend**
   545|  - Monat/Quartal, Kategorie oder Gesamtausgaben.
   546|- **Datenqualität**
   547|  - Unkategorisiert, FX fehlt, ohne Budget, offene Reviews, Duplikate.
   548|
   549|Erst wenn diese stabil sind:
   550|
   551|- Read-only Explorer mit gespeicherten Views.
   552|- Keine Batch-Änderungen direkt aus Explorer.
   553|
   554|## 9. 4-stufige Roadmap
   555|
   556|### Stufe 1 – Konsolidierung und User-Mode-Polish
   557|
   558|Ziel: Bestehende Funktionen verständlicher, sicherer und nutzerfreundlicher machen.
   559|
   560|Umfang:
   561|
   562|- Budget Cockpit visuell schärfen:
   563|  - KPI Row priorisieren.
   564|  - Ampelstatus vereinheitlichen.
   565|  - Monatsanalyse klarer darstellen.
   566|- Technische IDs aus User Mode entfernen:
   567|  - Konto-ID-Felder durch Dropdowns mit Namen ersetzen.
   568|  - Statuswerte übersetzen: `confirmed` → „Bestätigt“, `needs_review` → „Prüfung nötig“.
   569|- Effektive Ausgaben verbessern:
   570|  - Betrag-Filter ergänzen.
   571|  - Zeitraum-Presets und Monat vor/zurück.
   572|  - Tags sichtbar machen.
   573|- Reversal/Adjustment UX entwerfen:
   574|  - Preview im Drawer.
   575|  - Confirm mit Audit-Hinweis.
   576|- Import Review vereinfachen:
   577|  - Weniger Haupttabs, Spezialfälle als Chips.
   578|  - Batch Preview deutlicher und sicherer formulieren.
   579|- Setup-Seiten sprachlich vereinheitlichen:
   580|  - Kategorie-Typen in Deutsch anzeigen.
   581|  - Archive/Delete/Merge mit Auswirkungs-Vorschau erklären.
   582|
   583|Erfolgskriterien:
   584|
   585|- Nutzer kann ohne technische IDs Ausgaben filtern und korrigieren.
   586|- Jede Schreibaktion zeigt Preview/Confirm/Audit klar sichtbar.
   587|- Keine Placeholder wirken wie aktive Funktionen.
   588|
   589|Risiken / Grenzen:
   590|
   591|- Keine neuen Importquellen.
   592|- Keine AI/OCR.
   593|- Keine freien Queries.
   594|
   595|### Stufe 2 – Geführter Import- und Review-Wizard
   596|
   597|Ziel: ezBookkeeping-Importkomfort adaptieren, aber JARVIS-Sicherheitsmodell erhalten.
   598|
   599|Umfang:
   600|
   601|- Import Wizard als UX-Konzept:
   602|  - Quelle wählen
   603|  - Datei/Mapping prüfen
   604|  - Kandidaten erzeugen
   605|  - Review
   606|  - Batch Preview
   607|  - Confirm
   608|  - Ergebnis
   609|- Generisches Spaltenmapping für CSV/Excel-ähnliche Quellen:
   610|  - Datum
   611|  - Beschreibung/Händler
   612|  - Betrag
   613|  - Währung
   614|  - Kontoquelle optional
   615|- Duplikat-Review als eigener Subflow:
   616|  - Treffer anzeigen
   617|  - Ignorieren, wieder öffnen, manuell bestätigen
   618|- Transfer-Flow sichtbar machen:
   619|  - Transfer-Kandidaten prüfen
   620|  - Transfer Preview/Confirm mit zwei Buchungen oder Transfer-Entity erklären
   621|- Regeln-UX verbessern:
   622|  - Regel testen
   623|  - Trefferanzahl und Beispielkandidaten
   624|  - Apply nur auf Kandidaten, nicht auf bestätigte Buchungen
   625|- Mobile Review Cards für die wichtigsten Aktionen.
   626|
   627|Erfolgskriterien:
   628|
   629|- Import erzeugt nie direkte Buchungen.
   630|- Batch Confirm verlangt immer Preview-ID und zeigt Konflikte.
   631|- Nutzer versteht Quelle, Regel und Grund jedes Kandidaten.
   632|
   633|Risiken / Grenzen:
   634|
   635|- Kein Custom Script im User Mode.
   636|- Keine Mass Imports ohne Confirm.
   637|- Keine Speicherung hochgeladener Dateien im Repo.
   638|
   639|### Stufe 3 – Analyse-Hub und Budget-Intelligenz
   640|
   641|Ziel: Die Analysebreite von ezBookkeeping als sichere, geführte JARVIS-Auswertung nutzbar machen.
   642|
   643|Umfang:
   644|
   645|- Analyse-Hub mit vordefinierten Views:
   646|  - Budget vs Ist
   647|  - Cashflow
   648|  - Kategorieanteile
   649|  - Trends
   650|  - Datenqualität
   651|- Chart-Typen:
   652|  - Monatsbar Einnahmen/Ausgaben
   653|  - Kategorie-Bar
   654|  - Donut/Pie für Anteile
   655|  - Trendline für Kategorie/Netto
   656|  - Optional Sankey: Konto → Kategorie → Monat
   657|- Drilldown:
   658|  - Jeder Chartpunkt öffnet gefilterte Transaktionen.
   659|  - Keine Analyse ohne nachvollziehbaren Buchungsbezug.
   660|- Forecast verbessern:
   661|  - Monatsdurchschnitt transparent machen.
   662|  - Statushinweise: „wenige Monate Daten“, „ohne Budget“, „FX fehlt“.
   663|- Tags als Analyse-Dimension:
   664|  - Tag-Filter
   665|  - Tag-Auswertung
   666|  - Tag-Gruppen später.
   667|
   668|Erfolgskriterien:
   669|
   670|- Nutzer kann rote Budgetbereiche erklären und zu Buchungen drillen.
   671|- Analyse zeigt keine Scheingenauigkeit bei wenigen Daten.
   672|- Keine Provider-Aufrufe beim Rendern.
   673|
   674|Risiken / Grenzen:
   675|
   676|- Freier Explorer nur read-only und erst nach stabilen Standardviews.
   677|- Keine Batch-Änderungen aus Analyse ohne Review-Pipeline.
   678|
   679|### Stufe 4 – Automatisierung, Belege und fortgeschrittene Finanzplanung
   680|
   681|Ziel: Produktivität erhöhen, ohne Sicherheitsprinzipien aufzugeben.
   682|
   683|Umfang:
   684|
   685|- Wiederkehrende Zahlungen / Fixkosten:
   686|  - Erwartete Kandidaten generieren.
   687|  - Abgleich mit bestätigten Buchungen.
   688|  - Nie still buchen.
   689|- Beleg-/Foto-Import:
   690|  - Upload als expliziter Job.
   691|  - OCR/AI optional, kein Provider beim Rendern.
   692|  - Ergebnis als Kandidat mit Confidence und Review.
   693|- Export und Reconciliation:
   694|  - Gefilterter Export mit Preview.
   695|  - Kontoabgleich optional, wenn Bankimport stabil ist.
   696|- Read-only Insights Explorer:
   697|  - Gespeicherte Analyse-Views.
   698|  - Kein Schreiben aus Explorer ohne Preview/Confirm.
   699|- Szenarien/Ziele:
   700|  - Haushaltsziele, Sparziele, Jahresprognosen.
   701|  - Trennung von Budget-Plan und echten Buchungen.
   702|
   703|Erfolgskriterien:
   704|
   705|- Automatisierung reduziert Review-Aufwand, ersetzt aber nicht Confirm.
   706|- Belege und OCR sind auditierbar.
   707|- Fortgeschrittene Planung vermischt keine hypothetischen und bestätigten Werte.
   708|
   709|Risiken / Grenzen:
   710|
   711|- AI/OCR Datenschutz und Providerkosten.
   712|- Reconciliation kann hohe Komplexität erzeugen.
   713|- Explorer kann User überfordern; daher erst nach Standardanalyse.
   714|
   715|## 10. Priorisierte Backlog-Schnitte
   716|
   717|### Quick Wins
   718|
   719|- Konto-ID Eingabefelder in Budget-Drawern durch Konto-Dropdown ersetzen.
   720|- Statuslabels ins Deutsche mappen.
   721|- Betragfilter in Effektive Ausgaben ergänzen.
   722|- Tags in Ausgabenliste anzeigen.
   723|- Batch Preview Warntexte klarer machen.
   724|- „Analyse“ als eigene Gruppe in Sidebar statt gemischter Budget-Routen.
   725|
   726|### Mittlere Pakete
   727|
   728|- Reversal/Adjustment Drawer Flow.
   729|- Import Wizard Shell ohne neue Parser.
   730|- Duplikat-Review-Seite.
   731|- Regel-Test mit Beispieltreffern und Trefferanzahl.
   732|- Mobile Kandidatenkarten.
   733|
   734|### Große Pakete
   735|
   736|- Analyse-Hub mit Chart-Komponenten und Drilldown.
   737|- Spaltenmapping-UI für generische CSV/Excel-Imports.
   738|- Fixkosten/Recurring-Kandidaten.
   739|- Beleg/OCR-Pipeline.
   740|- Read-only Explorer.
   741|
   742|## 11. Nicht-Ziele für die nächsten Stufen
   743|
   744|- Keine direkte Massenbuchung aus Importdateien.
   745|- Kein Custom Script Import im normalen User Mode.
   746|- Kein Provider-/OCR-/AI-Aufruf beim Seitenrendern.
   747|- Keine echten Beträge oder Runtime-Daten in Dokumentation, Tests oder Repo.
   748|- Keine stillen Betragsänderungen an bestätigten Buchungen.
   749|- Keine technischen IDs als primäre User-Interaktion.
   750|
   751|## 12. Schlussfolgerung
   752|
   753|JARVIS ist kein einfacher Klon von ezBookkeeping und sollte es auch nicht werden. ezBookkeeping ist eine starke Referenz für reife Transaktions-, Import- und Analyse-UX. JARVIS hat dagegen bereits ein strengeres Budget-Sicherheitsmodell und einen klaren Fokus auf Plan/Ist/Forecast/Audit.
   754|
   755|Die beste Richtung ist:
   756|
   757|1. JARVIS Budget Cockpit als zentrale Wahrheit behalten.
   758|2. ezBookkeeping-Filter, Drilldowns und Analyse-Patterns übernehmen.
   759|3. Importkomfort als Wizard nachbauen, aber nur bis Kandidaten/Preview/Confirm.
   760|4. Automatisierung erst später und immer auditierbar.
   761|
   762|Damit entsteht ein Budgetsystem, das alltagstauglicher als der aktuelle Stand wird, ohne die Sicherheitsgrenzen des FinanceManager-Projekts zu verletzen.
   763|


Das vorhandene Dokument ist solide, aber für Ihre Vorgabe noch nicht streng genug: Die Matrix hat nicht exakt die gewünschte Spalte **Priorität**, und Lizenz-/Stack-/Datenmodellvergleich sollten expliziter sein. Ich überarbeite das Dokument jetzt auf die vollständige Spezifikation.

Explanation:
**Improving documentation**

I'm noticing that the document is missing crucial technical stack details and a mandated matrix for exact areas and priorities. I really need to enhance the document by generating a comprehensive version myself using the outputs I have. I’ll ensure to include all the mandatory sections. I might need to inspect the current JARVIS files for the exact routes and package summaries. I'll use the terminal to collect the model file names.

from hermes_tools import terminal
import json, os, textwrap
repo='/home/agent/.hermes/reference_repos/ezbookkeeping'
fm='/home/agent/.hermes/repos/FinanceManager'
cmds={
'ez_top':'git ls-tree -d --name-only HEAD',
'ez_models':'git ls-files pkg/models | sed -n "1,160p"',
'ez_api':'git ls-files pkg/api | sed -n "1,120p"',
'ez_services':'git ls-files pkg/services | sed -n "1,120p"',
'ez_frontend_views':'git ls-files src/views | sed -n "1,220p"',
'ez_components':'git ls-files src/components | sed -n "1,180p"',
'fm_budget_files':'git ls-files src/jarvis_finance frontend/src tests | grep -E "budget|Budget|expense|Expense|transaction|Transaction" | sed -n "1,220p"',
}
for name,cmd in cmds.items():
    wd=repo if name.startswith('ez_') else fm
    res=terminal(cmd, workdir=wd, timeout=60)
    print(f'--- {name} ---')
    print(res['output'][:6000])


Output:
--- ez_top ---
.gitea
.github
cmd
conf
docker
etc
pkg
public
skills
src
templates
testdata
--- ez_models ---
pkg/models/account.go
pkg/models/account_test.go
pkg/models/auth_response.go
pkg/models/data_management.go
pkg/models/exchange_rate.go
pkg/models/exchange_rate_test.go
pkg/models/explorer.go
pkg/models/explorer_test.go
pkg/models/forget_password.go
pkg/models/imported_transaction.go
pkg/models/imported_transaction_test.go
pkg/models/large_language_model.go
pkg/models/oauth2.go
pkg/models/token_record.go
pkg/models/token_record_test.go
pkg/models/transaction.go
pkg/models/transaction_category.go
pkg/models/transaction_category_test.go
pkg/models/transaction_picture_info.go
pkg/models/transaction_picture_info_test.go
pkg/models/transaction_tag.go
pkg/models/transaction_tag_group.go
pkg/models/transaction_tag_index.go
pkg/models/transaction_tag_index_test.go
pkg/models/transaction_tag_test.go
pkg/models/transaction_template.go
pkg/models/transaction_template_test.go
pkg/models/transaction_test.go
pkg/models/two_factor.go
pkg/models/two_factor_recovery_code.go
pkg/models/user.go
pkg/models/user_app_cloud_setting.go
pkg/models/user_external_auth.go
pkg/models/user_external_auth_test.go
pkg/models/user_test.go
--- ez_api ---
pkg/api/accounts.go
pkg/api/amap_api_proxies.go
pkg/api/authorizations.go
pkg/api/base.go
pkg/api/data_managements.go
pkg/api/default.go
pkg/api/exchange_rates.go
pkg/api/explorers.go
pkg/api/forget_passwords.go
pkg/api/healths.go
pkg/api/large_language_models.go
pkg/api/map_image_proxies.go
pkg/api/model_context_protocols.go
pkg/api/oauth2_authentications.go
pkg/api/qrcodes.go
pkg/api/server_settings.go
pkg/api/systems.go
pkg/api/tokens.go
pkg/api/transaction_categories.go
pkg/api/transaction_pictures.go
pkg/api/transaction_tag_groups.go
pkg/api/transaction_tags.go
pkg/api/transaction_templates.go
pkg/api/transactions.go
pkg/api/twofactor_authorizations.go
pkg/api/user_app_cloud_settings.go
pkg/api/user_external_auths.go
pkg/api/users.go
--- ez_services ---
pkg/services/accounts.go
pkg/services/accounts_test.go
pkg/services/base.go
pkg/services/explorer.go
pkg/services/forget_passwords.go
pkg/services/tokens.go
pkg/services/transaction_categories.go
pkg/services/transaction_categories_test.go
pkg/services/transaction_pictures.go
pkg/services/transaction_tag_groups.go
pkg/services/transaction_tags.go
pkg/services/transaction_tags_test.go
pkg/services/transaction_templates.go
pkg/services/transactions.go
pkg/services/twofactor_authorizations.go
pkg/services/user_app_cloud_settings.go
pkg/services/user_custom_exchange_rates.go
pkg/services/user_external_auths.go
pkg/services/users.go
--- ez_frontend_views ---
src/views/base/AboutPageBase.ts
src/views/base/ExchangeRatesPageBase.ts
src/views/base/HomePageBase.ts
src/views/base/LoginPageBase.ts
src/views/base/SignupPageBase.ts
src/views/base/UnlockPageBase.ts
src/views/base/accounts/AccountEditPageBase.ts
src/views/base/accounts/AccountListPageBase.ts
src/views/base/accounts/MoveAllTransactionsPageBase.ts
src/views/base/accounts/ReconciliationStatementPageBase.ts
src/views/base/categories/CategoryEditPageBase.ts
src/views/base/categories/CategoryListPageBase.ts
src/views/base/explorer/ExplorerDataTablePageBase.ts
src/views/base/settings/AccountCategoryDisplayOrderSettingsPageBase.ts
src/views/base/settings/AccountFilterSettingPageBase.ts
src/views/base/settings/AppBrowserCacheSettingPageBase.ts
src/views/base/settings/AppCloudSyncPageBase.ts
src/views/base/settings/AppLockPageBase.ts
src/views/base/settings/AppSettingsPageBase.ts
src/views/base/settings/CategoryFilterSettingPageBase.ts
src/views/base/settings/TransactionTagFilterSettingPageBase.ts
src/views/base/statistics/StatisticsSettingPageBase.ts
src/views/base/statistics/StatisticsTransactionPageBase.ts
src/views/base/tags/TagListPageBase.ts
src/views/base/transactions/TransactionEditPageBase.ts
src/views/base/transactions/TransactionListPageBase.ts
src/views/base/users/DataManagementPageBase.ts
src/views/base/users/UserProfilePageBase.ts
src/views/desktop/AboutPage.vue
src/views/desktop/ForgetPasswordPage.vue
src/views/desktop/HomePage.vue
src/views/desktop/LoginPage.vue
src/views/desktop/MainLayout.vue
src/views/desktop/OAuth2CallbackPage.vue
src/views/desktop/ResetPasswordPage.vue
src/views/desktop/SignupPage.vue
src/views/desktop/UnlockPage.vue
src/views/desktop/VerifyEmailPage.vue
src/views/desktop/accounts/ListPage.vue
src/views/desktop/accounts/list/dialogs/ClearAllTransactionsDialog.vue
src/views/desktop/accounts/list/dialogs/EditDialog.vue
src/views/desktop/accounts/list/dialogs/MoveAllTransactionsDialog.vue
src/views/desktop/accounts/list/dialogs/ReconciliationStatementDialog.vue
src/views/desktop/app/AppSettingsPage.vue
src/views/desktop/app/settings/dialogs/AccountCategoryDisplayOrderDialog.vue
src/views/desktop/app/settings/tabs/AppBasicSettingTab.vue
src/views/desktop/app/settings/tabs/AppBrowserCacheSettingTab.vue
src/views/desktop/app/settings/tabs/AppCloudSyncSettingTab.vue
src/views/desktop/app/settings/tabs/AppLockSettingTab.vue
src/views/desktop/app/settings/tabs/AppStatisticsSettingTab.vue
src/views/desktop/categories/ListPage.vue
src/views/desktop/categories/list/dialogs/EditDialog.vue
src/views/desktop/categories/list/dialogs/PresetDialog.vue
src/views/desktop/common/cards/AccountFilterSettingsCard.vue
src/views/desktop/common/cards/CategoryFilterSettingsCard.vue
src/views/desktop/common/cards/TransactionTagFilterSettingsCard.vue
src/views/desktop/exchangerates/ListPage.vue
src/views/desktop/exchangerates/list/dialogs/UpdateDialog.vue
src/views/desktop/insights/ExplorerPage.vue
src/views/desktop/insights/dialogs/BatchDeleteDialog.vue
src/views/desktop/insights/dialogs/BatchUpdateAccountDialog.vue
src/views/desktop/insights/dialogs/BatchUpdateCategoryDialog.vue
src/views/desktop/insights/dialogs/BatchUpdateTagsDialog.vue
src/views/desktop/insights/dialogs/ExplorerChangeDisplayOrderDialog.vue
src/views/desktop/insights/tabs/ExplorerChartTab.vue
src/views/desktop/insights/tabs/ExplorerDataTableTab.vue
src/views/desktop/insights/tabs/ExplorerEditableDataTableTab.vue
src/views/desktop/insights/tabs/ExplorerQueryTab.vue
src/views/desktop/overview/cards/IncomeExpenseOverviewCard.vue
src/views/desktop/overview/cards/MonthlyIncomeAndExpenseCard.vue
src/views/desktop/statistics/TransactionPage.vue
src/views/desktop/statistics/transaction/dialogs/ExportDialog.vue
src/views/desktop/tags/ListPage.vue
src/views/desktop/tags/dialog/TagGroupChangeDisplayOrderDialog.vue
src/views/desktop/templates/ListPage.vue
src/views/desktop/transactions/ListPage.vue
src/views/desktop/transactions/import/ImportDialog.vue
src/views/desktop/transactions/import/dialogs/BatchCreateDialog.vue
src/views/desktop/transactions/import/dialogs/BatchReplaceAllTypesDialog.vue
src/views/desktop/transactions/import/dialogs/BatchReplaceDialog.vue
src/views/desktop/transactions/import/tabs/ImportTransactionCheckDataTab.vue
src/views/desktop/transactions/import/tabs/ImportTransactionDefineColumnTab.vue
src/views/desktop/transactions/import/tabs/ImportTransactionExecuteCustomScriptTab.vue
src/views/desktop/transactions/list/dialogs/AIImageRecognitionDialog.vue
src/views/desktop/transactions/list/dialogs/EditDialog.vue
src/views/desktop/user/UserSettingsPage.vue
src/views/desktop/user/settings/dialogs/UnlinkThirdPartyLoginDialog.vue
src/views/desktop/user/settings/dialogs/UserGenerateTokenDialog.vue
src/views/desktop/user/settings/tabs/UserBasicSettingTab.vue
src/views/desktop/user/settings/tabs/UserDataManagementSettingTab.vue
src/views/desktop/user/settings/tabs/UserSecuritySettingTab.vue
src/views/desktop/user/settings/tabs/UserTwoFactorAuthSettingTab.vue
src/views/mobile/AboutPage.vue
src/views/mobile/ApplicationLockPage.vue
src/views/mobile/HomePage.vue
src/views/mobile/LoginPage.vue
src/views/mobile/SettingsPage.vue
src/views/mobile/SignupPage.vue
src/views/mobile/UnlockPage.vue
src/views/mobile/accounts/EditPage.vue
src/views/mobile/accounts/ListPage.vue
src/views/mobile/accounts/MoveAllTransactionsPage.vue
src/views/mobile/accounts/ReconciliationStatementPage.vue
src/views/mobile/categories/AllPage.vue
src/views/mobile/categories/EditPage.vue
src/views/mobile/categories/ListPage.vue
src/views/mobile/categories/PresetPage.vue
src/views/mobile/exchangerates/ListPage.vue
src/views/mobile/exchangerates/UpdatePage.vue
src/views/mobile/settings/AccountCategoryDisplayOrderSettingsPage.vue
src/views/mobile/settings/AccountFilterSettingsPage.vue
src/views/mobile/settings/ApplicationCloudSyncSettingsPage.vue
src/views/mobile/settings/BrowserCacheSettingPage.vue
src/views/mobile/settings/CategoryFilterSettingsPage.vue
s
--- ez_components ---
src/components/base/AccountBalanceTrendsChartBase.ts
src/components/base/CommonNumberInputBase.ts
src/components/base/DateRangeSelectionBase.ts
src/components/base/DateTimeSelectionBase.ts
src/components/base/FiscalYearStartSelectionBase.ts
src/components/base/ItemIconBase.ts
src/components/base/LanguageSelectBase.ts
src/components/base/MonthRangeSelectionBase.ts
src/components/base/MonthlyTrendsChartBase.ts
src/components/base/NumberInputBase.ts
src/components/base/PieChartBase.ts
src/components/base/ScheduleFrequencySelectionBase.ts
src/components/base/TransactionTagSelectionBase.ts
src/components/base/TrendsChartBase.ts
src/components/base/TwoColumnListItemSelectionBase.ts
src/components/base/TwoLevelItemSelectionBase.ts
src/components/common/DateTimePicker.vue
src/components/common/MapView.vue
src/components/common/MonthPicker.vue
src/components/common/PinCodeInput.vue
src/components/common/TransactionCalendar.vue
src/components/desktop/AccountAndCategorySankeyChart.vue
src/components/desktop/AccountBalanceTrendsChart.vue
src/components/desktop/AmountInput.vue
src/components/desktop/AmountInputDialog.vue
src/components/desktop/AxisChart.vue
src/components/desktop/BtnVerticalGroup.vue
src/components/desktop/CalendarHeatMapChart.vue
src/components/desktop/ColorSelect.vue
src/components/desktop/ConfirmDialog.vue
src/components/desktop/CurrencySelect.vue
src/components/desktop/DateRangeSelectionDialog.vue
src/components/desktop/DateSelect.vue
src/components/desktop/DateTimeSelect.vue
src/components/desktop/FiscalYearStartSelect.vue
src/components/desktop/HeatMapChart.vue
src/components/desktop/HierarchyChart.vue
src/components/desktop/IconSelect.vue
src/components/desktop/ItemIcon.vue
src/components/desktop/LanguageSelect.vue
src/components/desktop/LanguageSelectButton.vue
src/components/desktop/MonthRangeSelectionDialog.vue
src/components/desktop/MonthSelectionDialog.vue
src/components/desktop/NumberInput.vue
src/components/desktop/PaginationButtons.vue
src/components/desktop/PieChart.vue
src/components/desktop/RadarChart.vue
src/components/desktop/RenameDialog.vue
src/components/desktop/ScheduleFrequencySelect.vue
src/components/desktop/SnackBar.vue
src/components/desktop/StepsBar.vue
src/components/desktop/SwitchToMobileDialog.vue
src/components/desktop/TransactionTagAutoComplete.vue
src/components/desktop/TrendsChart.vue
src/components/desktop/TwoColumnSelect.vue
src/components/mobile/AIImageRecognitionSheet.vue
src/components/mobile/AccountBalanceTrendsBarChart.vue
src/components/mobile/ColorSelectionSheet.vue
src/components/mobile/DateRangeSelectionSheet.vue
src/components/mobile/DateSelectionSheet.vue
src/components/mobile/DateTimeSelectionSheet.vue
src/components/mobile/FiscalYearStartSelectionSheet.vue
src/components/mobile/IconSelectionSheet.vue
src/components/mobile/ImageBox.vue
src/components/mobile/InformationSheet.vue
src/components/mobile/ItemIcon.vue
src/components/mobile/LanguageSelectButton.vue
src/components/mobile/ListItemSelectionPopup.vue
src/components/mobile/ListItemSelectionSheet.vue
src/components/mobile/ListNumberInput.vue
src/components/mobile/MapSheet.vue
src/components/mobile/MonthRangeSelectionSheet.vue
src/components/mobile/MonthSelectionSheet.vue
src/components/mobile/NumberPadSheet.vue
src/components/mobile/PasscodeInputSheet.vue
src/components/mobile/PasswordInputSheet.vue
src/components/mobile/PieChart.vue
src/components/mobile/PinCodeInputSheet.vue
src/components/mobile/ScheduleFrequencySheet.vue
src/components/mobile/TransactionTagSelectionSheet.vue
src/components/mobile/TreeViewSelectionSheet.vue
src/components/mobile/TrendsBarChart.vue
src/components/mobile/TwoColumnListItemSelectionSheet.vue
--- fm_budget_files ---
frontend/src/api/budget.ts
frontend/src/pages/BudgetAccountsPage.vue
frontend/src/pages/BudgetCategoriesPage.vue
frontend/src/pages/BudgetCategoryAssignmentPage.vue
frontend/src/pages/BudgetImportReviewPage.vue
frontend/src/pages/BudgetIncomePage.vue
frontend/src/pages/BudgetOverviewPage.vue
frontend/src/pages/BudgetPhase1.test.ts
frontend/src/pages/BudgetRulesPage.vue
frontend/src/pages/BudgetSetupPage.test.ts
frontend/src/pages/BudgetSetupPage.vue
frontend/src/pages/BudgetTransactionsPage.vue
src/jarvis_finance/api/routers/budget.py
src/jarvis_finance/api/schemas/transactions.py
src/jarvis_finance/budget/__init__.py
src/jarvis_finance/budget/excel_seed.py
src/jarvis_finance/crypto/transactions.py
src/jarvis_finance/imports/crypto_transactions_importer.py
src/jarvis_finance/imports/transactions_importer.py
src/jarvis_finance/ledger/transactions.py
src/jarvis_finance/services/budget_accounts.py
src/jarvis_finance/services/budget_categories.py
src/jarvis_finance/services/budget_cleanup.py
src/jarvis_finance/services/budget_common.py
src/jarvis_finance/services/budget_imports.py
src/jarvis_finance/services/budget_overview.py
src/jarvis_finance/services/budget_plans.py
src/jarvis_finance/services/budget_seed_review.py
src/jarvis_finance/services/budget_transactions.py
tests/fixtures/crypto_transactions.csv
tests/fixtures/transactions.csv
tests/unit/test_budget_overview_plans.py
tests/unit/test_budget_phase1.py
tests/unit/test_budget_phase11.py
tests/unit/test_budget_phase110_2026_core.py
tests/unit/test_budget_phase111_migros_monthly_analytics.py
tests/unit/test_budget_phase111_status_income_formatting.py
tests/unit/test_budget_phase12_seed_review.py
tests/unit/test_budget_phase14_workview.py
tests/unit/test_budget_phase15_source_aware_imports.py
tests/unit/test_budget_phase16_user_rules.py
tests/unit/test_budget_phase17_ux_workflow.py
tests/unit/test_budget_phase18_core_flow.py
tests/unit/test_budget_phase19_review_productivity.py
tests/unit/test_transactions_importer.py


Explanation:
**Improving documentation**

I need to write a better document, aiming for about 12,000 words. I want to include an exact matrix, but I've noticed that Telegram tables can be problematic. It seems like I could convert the information into a markdown table instead, which should work better. I need to make sure there's no issue with formatting. I'll use the function to write the file once I have everything properly organized.

# JARVIS Finance System – ezBookkeeping Reference Analysis & Budget UX Roadmap

Stand: 2026-05-17
Referenzrepo: `https://github.com/mayswind/ezbookkeeping`
Lokaler Pfad: `/home/agent/.hermes/reference_repos/ezbookkeeping`
JARVIS-Projekt: `/home/agent/.hermes/repos/FinanceManager`

## 0. Scope und Compliance

Diese Analyse ist **kein Implementierungs-Sprint**.

Durchgeführt wurde:

- ezBookkeeping separat als Referenz geklont.
- Lizenz, Tech-Stack, Struktur, UI/UX, API, Datenmodelle, Import- und Analysekonzepte statisch analysiert.
- JARVIS FinanceManager anhand Repo-Struktur und Codeoberflächen verglichen.
- Designvorschläge und Roadmap abgeleitet.

Nicht durchgeführt wurde:

- keine Implementierung im JARVIS-Code
- keine Runtime-DB gelesen oder verändert
- keine echten JARVIS-Beträge/Daten verwendet
- kein Fremdcode übernommen
- keine Assets, Icons, Templates oder Screenshots aus ezBookkeeping übernommen
- keine Provider-/OCR-/AI-Aufrufe gestartet

## 1. Lizenznotiz

### ezBookkeeping Lizenz

- Lizenzdatei: `/home/agent/.hermes/reference_repos/ezbookkeeping/LICENSE`
- Lizenz: **MIT License**
- Copyright: `Copyright (c) 2020-2026 MaysWind`
- `package.json` bestätigt ebenfalls `"license": "MIT"`.

### Konsequenz für JARVIS

MIT erlaubt grundsätzlich Nutzung, Modifikation und Weiterverbreitung, sofern Copyright- und Lizenzhinweis erhalten bleiben. Für dieses Projekt gilt aber eine strengere interne Vorgabe:

- Wir übernehmen **nur Ideen, UX-Patterns und Architekturkonzepte**.
- Wir kopieren **keinen Code**.
- Wir kopieren **keine Assets/Icons/Templates/Screenshots**.
- Falls später ein konkreter Codeausschnitt aus ezBookkeeping direkt übernommen werden soll, muss vorher eine separate Lizenz-/Kompatibilitätsnotiz erstellt und der MIT-Hinweis in der betreffenden Datei/Dokumentation gepflegt werden.

## 2. ezBookkeeping technische Struktur

### 2.1 Frontend-Stack

- Vue 3
- TypeScript
- Vite
- Pinia
- Vue Router für Desktop
- Framework7 Router für Mobile
- Vuetify 3 für Desktop UI
- Framework7 Vue für Mobile UI
- Axios API Client
- ECharts / vue-echarts
- Moment / moment-timezone
- vue-i18n
- PWA via `vite-plugin-pwa`
- SCSS/Sass

Wichtige Dateien:

- `package.json`
- `vite.config.ts`
- `src/index-main.ts`
- `src/desktop-main.ts`
- `src/mobile-main.ts`
- `src/router/desktop.ts`
- `src/router/mobile.ts`

### 2.2 Backend-Stack

- Go 1.26 laut `go.mod`
- Gin Web Framework
- XORM ORM
- SQLite / MySQL / PostgreSQL Support
- urfave/cli CLI
- go-playground/validator
- JWT / OAuth2 / OIDC / 2FA
- Build per `build.sh`, `build.bat`, `build.ps1`
- Dockerfile und Docker Bake

Wichtige Pfade:

- `ezbookkeeping.go`
- `cmd/webserver.go`
- `cmd/database.go`
- `pkg/api/`
- `pkg/services/`
- `pkg/models/`
- `pkg/datastore/`
- `pkg/converters/`
- `pkg/exchangerates/`

### 2.3 Build-System

Frontend:

- `npm run lint`
- `npm run test`
- `npm run build`

Backend:

- `go vet`
- `go test ./...`
- `go build` mit Version/Commit/Build-Zeit via ldflags

Packaging:

- Backend-Binary
- Frontend `dist` als public/static asset
- Config/Templates/Lizenz
- Runtime-Verzeichnisse separat im Paket

Für JARVIS geeignet:

- Build-Metadata und Version-Endpoint übernehmen.
- Frontend/Backend separat baubar halten.
- Runtime-Daten konsequent außerhalb Repo/Build-Artefakten halten.

## 3. ezBookkeeping Ordner- und Komponentenstruktur

### 3.1 Grobe Struktur

- `cmd/`: CLI, Server, DB, Cron Jobs
- `pkg/api/`: HTTP API Handler
- `pkg/services/`: Business Logic
- `pkg/models/`: DB-/Domain-Modelle
- `pkg/converters/`: Import-/Export-Konverter
- `pkg/datastore/`: DB-Container und Stores
- `src/views/base/`: gemeinsame View-Logik
- `src/views/desktop/`: Desktop Views
- `src/views/mobile/`: Mobile Views
- `src/components/base/`: gemeinsame Komponentenlogik
- `src/components/desktop/`: Desktop-Komponenten
- `src/components/mobile/`: Mobile-Komponenten
- `src/components/common/`: gemeinsame Vue-Komponenten
- `src/stores/`: Pinia Stores
- `src/core/`: Core Types/Enums/Logik
- `src/models/`: Frontend Models
- `src/lib/services.ts`: API Client

### 3.2 Interessantes Strukturpattern

Das wichtigste Pattern ist die Dreiteilung:

1. `base` für geteilte Fach-/View-Logik
2. `desktop` für tabellarische, breite Workflows
3. `mobile` für native-like Sheets, Cards, Pull-to-refresh und Infinite Scroll

Für JARVIS geeignet:

- `frontend/src/composables/budget/...` für gemeinsame Logik
- `frontend/src/pages/...` aktuell beibehalten, später ggf. `desktop`/`mobile` Unterkomponenten
- UI-spezifische Präsentation trennen von Budget-Filter-/DTO-/Formatierungslogik

## 4. ezBookkeeping Routing, State und API Patterns

### 4.1 Routing

Desktop-Routen u.a.:

- `/transaction/list`
- `/statistics/transaction`
- `/insights/explorer`
- `/account/list`
- `/category/list`
- `/tag/list`
- `/template/list`
- `/schedule/list`
- `/exchange_rates`

Mobile-Routen u.a.:

- `/transaction/list`
- `/transaction/add`
- `/transaction/edit`
- `/statistic/transaction`
- `/settings/filter/account`
- `/settings/filter/category`
- `/settings/filter/tag`

Wichtiges Pattern:

- Filterzustand wird häufig über Query-Parameter abgebildet.
- Transaktionsliste und Statistik sind bookmarkbar/wiederherstellbar.

Für JARVIS geeignet:

- Filter für Effektive Ausgaben, Buchungen prüfen und Analyse in URL Query spiegeln.
- Mobile darf andere Routen/Interaktionen haben, soll aber dieselben Filtermodelle nutzen.

### 4.2 State Management

Pinia Stores:

- `transaction.ts`
- `statistics.ts`
- `explorer.ts`
- `account.ts`
- `transactionCategory.ts`
- `transactionTag.ts`
- `transactionTemplate.ts`
- `overview.ts`
- `exchangeRates.ts`
- `setting.ts`
- `user.ts`

Pattern:

- API-Aufrufe primär im Store.
- Views nutzen Stores plus Base-Composables.
- Invalidierungsflags für abhängige Daten.
- Transformierte Models statt roher API-Response im UI.

Für JARVIS geeignet:

- Budget Stores nach Domäne strukturieren: `budgetTransactions`, `budgetReview`, `budgetAnalytics`, `budgetSetup`.
- Gemeinsame Filter-/Formatierungslogik zentralisieren.
- API-DTOs und Display-Models trennen.

### 4.3 API-Struktur

Backend API ist in `cmd/webserver.go` zentral registriert und ruft Handler aus `pkg/api/` auf.

Relevante Endpunkte:

- Accounts: `/api/v1/accounts/...`
- Transactions: `/api/v1/transactions/...`
- Categories: `/api/v1/transaction/categories/...`
- Tags: `/api/v1/transaction/tags/...`
- Templates: `/api/v1/transaction/templates/...`
- Statistics: `/api/v1/transactions/statistics...`
- Explorer: `/api/v1/insights/explorers/...`
- Exchange Rates: `/api/v1/exchange_rates/...`

Für JARVIS geeignet:

- FastAPI Router nach Fachdomänen behalten/ausbauen.
- Query-Services von Command-Services trennen.
- Einheitliche Response-/Error-DTOs.
- Explizite endpoints für Drilldown und Analyse, kein UI-SQL.

## 5. ezBookkeeping Datenmodelle vs JARVIS

### 5.1 Accounts

**ezBookkeeping:**

- zweistufige Accounts
- Kategorien wie Cash, Checking, Credit Card, Virtual, Debt, Receivables, Investment, Savings
- Felder: Name, Icon, Color, Currency, Balance, Hidden, DisplayOrder
- Reconciliation-/Credit-Card-Statement-Metadaten

**JARVIS:**

- Budget Accounts vorhanden
- Fokus stärker auf Budget-/Import-/Review-Kontext
- Portfolio/Crypto Accounts existieren separat in anderen Domänen

**Empfehlung:**

- Für Budget: Account-UX verbessern, nicht das gesamte ezBookkeeping Accountmodell kopieren.
- `hidden`/`archived` und `display_order` stärker sichtbar machen.
- Reconciliation später, erst nach Bankimport-Stabilität.

### 5.2 Transactions

**ezBookkeeping:**

- Types: Modify Balance, Income, Expense, Transfer
- Transfers mit Related-Feldern
- Amount als integerartige DB-Repräsentation
- Soft delete
- Geo, Pictures, Comments, Hide Amount
- Scheduled-created Flag

**JARVIS:**

- `budget_transactions` für confirmed Budget-/Cashflow-Buchungen
- Review Candidates getrennt von bestätigten Transaktionen
- Splits, source links, Audit und Confirm-Grenzen sind JARVIS-Stärke

**Antwort auf Frage:** Sind `budget_transactions` ausreichend?

- Für Budget UX v2 und Analytics v1: **ja, ausreichend**, wenn Filter, Tags, Merchant und Splits sauberer exponiert werden.
- Für Advanced Imports/Explorer: `budget_transactions` sollten um vollwertigere Merchant-/Split-/Template-Referenzen ergänzt werden, aber nicht ersetzt werden.

### 5.3 Categories

**ezBookkeeping:**

- Income / Expense / Transfer Kategorien
- zweistufige Hierarchie
- Icon, Color, Hidden, DisplayOrder

**JARVIS:**

- Kategorien mit Typ, Parent, Farbe, Icon, Archiv/Merge/Delete Preview vorhanden
- Kategoriebaum funktional, UX noch technisch

**Empfehlung:**

- Konzept übernehmen: sichtbarer Kategoriebaum mit Icon/Farbe/Sortierung.
- User Mode gruppiert nach Einnahmen/Ausgaben; technische Typen übersetzen.

### 5.4 Tags

**ezBookkeeping:**

- Tags plus Tag Groups
- M:N TransactionTagIndex
- starke Filterlogik: has any/all, not any/all, without tags

**JARVIS:**

- Tags vorhanden, aber nicht vollwertig als Analyse-/Filterobjekt sichtbar

**Empfehlung:**

- Tags früher vollwertig machen.
- Tag Groups später.
- Tag-Filter als wichtiges Effektive-Ausgaben-/Explorer-Feature.

### 5.5 Scheduled Transactions / Templates

**ezBookkeeping:**

- Transaction Templates und Scheduled Templates
- Frequenz: daily, weekly, monthly, yearly

**JARVIS:**

- Fixkosten/Recurring bisher Roadmap/Placeholder
- Budget Plans decken geplante Beträge, aber nicht erwartete konkrete Transaktionen ab

**Antwort:** Brauchen wir `scheduled_transactions` früher?

- Für Budget UX v2: nein.
- Für Budget Advanced/Imports v1: ja, als **expected transaction candidates**, nicht als stille Auto-Buchungen.
- Scheduled Transactions sollten Kandidaten erzeugen, die mit realen Importen gematcht oder manuell bestätigt werden.

### 5.6 Splits

**JARVIS:**

- Splits existieren bereits im Review-Kontext.

**Antwort:** Sollten `budget_transaction_splits` zuerst vollwertiger werden?

- Ja, spätestens vor Advanced Analytics.
- Splits sind wichtiger als freie Explorer-Magie, weil Migros/Galaxus/Apotheke/Shopping oft Mischbelege sind.
- Splits sollten confirmed transaction level und candidate level sauber verbinden.

### 5.7 Merchant Entity

**ezBookkeeping:**

- Merchant/Payee ist eher über Beschreibung/Kommentar/Filter modelliert, nicht als starkes eigenes Kernobjekt im analysierten Modell.

**JARVIS:**

- Merchant/Payee/Source ist schon implizit in Kandidaten/Buchungen.

**Antwort:** Brauchen wir Merchant Entity früher?

- Ja, aber leichtgewichtig.
- Empfehlung: `budget_merchants` oder normalisierte Merchant-Alias-Tabelle in Imports v1/Analytics v1, damit Top Händler, Regeln und Duplikate stabiler werden.
- Nicht sofort als großes CRM-Modell bauen. Kleiner Alias-/Canonical-Merchant-Resolver reicht.

### 5.8 Transaction Templates

**Antwort:** Brauchen wir transaction templates?

- Ja, aber nach UX v2.
- Gute Templates:
  - manuelle Standardausgabe
  - monatliche Fixkosten-Kandidaten
  - wiederkehrende Einnahmen
- Templates müssen Preview/Confirm nutzen.

### 5.9 Exchange Rates

**ezBookkeeping:**

- viele Exchange Rate Provider und User Custom Exchange Rates

**JARVIS:**

- Finance-System hat FX-/Provider-Regeln separat, no-provider-on-render ist Pflicht

**Empfehlung:**

- Provider-Adapter-Idee übernehmen, aber nur als explizite Jobs/Cache.
- Budgetseiten lesen nur lokale Snapshots.

### 5.10 Imports

**ezBookkeeping:**

- sehr breite Importformate
- DataTable-Abstraktion
- Custom CSV/XLS/XLSX mit Spaltenmapping
- Importprozess mit Parse/Check/Modify/Import

**JARVIS:**

- source-aware import candidates, Migros/Credit Card/Bank/Excel Seeds, Review/Confirm/Audit

**Empfehlung:**

- Nicht breit alle Formate nachbauen.
- Stattdessen JARVIS Import Wizard für unsere Quellen: Kreditkarte, Migros, Bank CSV, manuelle CSV.
- Spaltenmapping nur zur Kandidatenerzeugung, nie direkte Buchung.

## 6. Transaktionsliste: UX-Vergleich und Empfehlungen

### 6.1 ezBookkeeping Transaktionsliste

Interessante Elemente:

- linke Navigation mit Listen-/Kalender-/Gallery-Modus
- Datumsbereich und Monatssprung
- Suche/Keyword
- Einnahmen-/Ausgaben- oder Inflow-/Outflow-Summen
- tabellarische Liste bzw. mobile Cards
- Gruppierung nach Monat/Datum
- Kategorie mit Icon/Farbe
- Konto-Spalte
- Tags
- Beschreibung
- Pagination/Infinite Scroll
- Import/Export Actions

### 6.2 Für JARVIS Effektive Ausgaben übernehmen

Empfehlung:

- Datum gruppieren: Monat → Tag → Transaktionen
- Summenzeile pro Zeitraum: Einnahmen, Ausgaben, Netto, Anzahl
- Kategorie als farbiger Chip mit Icon
- Händler/Beschreibung prominent
- Konto nach Name, nicht ID
- Tags sichtbar und filterbar
- Suchfeld immer oben sichtbar
- Monatsfilter mit Vor/Zurück
- Row Click öffnet Detail Drawer
- Reversal/Adjustment nur über Preview/Confirm
- Mobile Cards statt Tabelle

### 6.3 Für JARVIS Buchungen prüfen übernehmen

Empfehlung:

- Review-Liste ruhiger machen:
  - weniger Haupttabs
  - Spezialfälle als Filter-Chips
  - Status- und Confidence-Texte menschenlesbar
  - technische Kandidatenlogik aus User Mode ausblenden
- Gruppierung nach Datum/Quelle
- Batch-Aktionsleiste erst anzeigen, wenn ausgewählt wurde
- Kategorie-Dropdown mit Suchfeld
- Konflikt-/Warnhinweise pro Kandidat kompakt
- Preview Confirm als Pflichtgrenze

## 7. Statistik & Analyse: UX-Vergleich und Chart-Empfehlung

### 7.1 ezBookkeeping Analysekonzepte

- Zeitraumsteuerung
- Analysearten: Categorical Analysis, Trend Analysis, Asset Trends
- Chart data type getrennt von Chart type
- Filter für Accounts, Categories, Tags, Keyword, Zeitraum
- Pie/Bar/Radar
- Area/Column/Bubble Trends
- Sankey für Overview
- Explorer mit Pie, Stacked/Grouped Columns, Lines, Area, Bubble, Radar, Treemap, Sunburst, Heatmap, Calendar Heatmap

### 7.2 Was passt für Budget-Auswertung?

- Bar: Budget vs Ist je Kategorie
- Donut/Pie: Anteil Ausgaben nach Kategorie
- Trendline/Area: Monatsverlauf Einnahmen/Ausgaben/Netto
- Stacked Bar: Kategorien pro Monat
- Top Händler: Bar/List
- Sankey optional: Konto → Kategorie → Monat

### 7.3 Was passt für Budgetstatus nach Kategorie?

- Monatsbalken pro Kategorie
- Budgetlinie je Monat
- Ampelfarbe pro Monat
- Forecast und Abweichung
- Klick auf Kategorie/Monat → gefilterte Buchungen

### 7.4 Was passt für Daten-Explorer?

- Read-only Query Builder mit Dimensionen und Metriken
- gespeicherte Views
- Chart Type Auswahl
- keine Batch-Aktionen aus Explorer v1

### 7.5 Chart-Priorität

| Chart | Empfehlung | Grund | Zeitpunkt |
|---|---|---|---|
| Bar | Ja | Budget vs Ist, Top Kategorien, Top Händler | Analytics v1 |
| Donut/Pie | Ja, begrenzt | Kategorieanteile schnell lesbar | Analytics v1 |
| Trendline/Area | Ja | Monatsverlauf und Cashflow | Analytics v1 |
| Stacked Bar | Ja | Kategorien über Monate | Analytics v1/v2 |
| Treemap | Optional | Hierarchische Kategorien, große Ausgabenblöcke | Advanced |
| Sunburst | Optional/später | Kategoriebaum drilldown, kann überladen wirken | Advanced |
| Heatmap | Später | Aktivität/Spending Patterns | Advanced |
| Calendar Heatmap | Später | Ausgabentage, ungewöhnliche Tage | Advanced |
| Sankey | Optional | Konto → Kategorie Flüsse | Advanced, nach Stabilisierung |
| Radar | Nein/kaum | Für Budget wenig intuitiv | Nicht priorisieren |
| Bubble | Nein/später | Mehrdimensional, schwer verständlich | Explorer später |

## 8. Funktionsmatrix

| Bereich | ezBookkeeping-Funktion | JARVIS aktueller Stand | Lücke | Empfehlung | Priorität |
|---|---|---|---|---|---|
| Konten | Zwei-Level Accounts, Typen, Währung, Icon/Farbe, Hidden, Reconciliation | Budget Accounts vorhanden, Portfolio/Crypto separat | Konto-UX weniger klar, Hidden/Sortierung/Reconciliation schwach | Kontoübersicht mit Namen, Typ, aktiv/archiviert, Default; Reconciliation später | P2 |
| Kategorien | Income/Expense/Transfer, zweistufig, Icon/Farbe, Hidden, DisplayOrder | Kategoriebaum, Typen, Farbe/Icon, Merge/Archive vorhanden | User Mode zeigt teils technische Struktur | Vereinfachter Kategoriebaum, deutsche Labels, Such-/Gruppendropdown | P1 |
| Tags | Tags + Tag Groups + starke Filterlogik | Tags vorhanden, aber nicht vollwertig sichtbar | Tags fehlen in Analyse/Filter als Kernobjekt | Tags sichtbar machen, Filter has any/all später | P1/P2 |
| Transaktionen | Income/Expense/Transfer/Modify Balance, Kommentare, Bilder, Location | budget_transactions confirmed + Review Candidates | Transfers/Reversal/Adjustment UX noch schwach | Confirmed Ledger behalten, Transfer/Adjustment Drawer ergänzen | P1/P2 |
| Transaktionsliste | Liste/Kalender/Galerie, Datumssprung, Summen, Filter, Pagination | Effektive Ausgaben vorhanden, mobil verbessert | Filter-/Gruppierungs-UX weniger reif | Datum gruppiert, Suchfeld, Monatssprung, Summen, Row Drawer | P1 |
| Geplante Transaktionen | Templates + Scheduled frequency | Budget Plans/Income Plans, Fixkosten Placeholder | erwartete konkrete Zahlungen fehlen | scheduled candidates später, nie still buchen | P4 |
| Imports | Viele Formate, Custom Mapping, Check/Modify/Import | Source-aware candidates, Migros/CreditCard/Bank/Excel Seeds | kein geführter generischer Wizard | Import Wizard Shell mit JARVIS Confirm-Grenze | P3 |
| Suche/Filter | Zeitraum, Typ, Kategorie, Konto, Tags, Betrag, Keyword | Teilweise vorhanden | Mehrfachfilter und URL Query ausbaufähig | einheitliches Filtermodell für Ausgaben/Review/Analyse | P1 |
| Statistiken | Categorical, Trends, Asset Trends | Budgetstatus/Charts vorhanden | Analyse-Hub fehlt | vordefinierte Analyse-Seiten, kein freier Explorer zuerst | P2 |
| Kategorieanalyse | Pie/Bar/Radar, drilldown | Top/Breakdown teilweise | visuell noch simpel | Donut/Bar plus Buchungsdrilldown | P2 |
| Trendanalyse | Area/Column/Bubble, Aggregation | Forecast/Monatswerte | Trendzentrale fehlt | Cashflow- und Kategorie-Trendlinien | P2 |
| Vermögenstrends | Asset Trends, Net Worth | Portfolio/Crypto separat vorhanden | Budget und Vermögen noch getrennt | Im Budget nur Cashflow; Vermögen in Portfolio lassen | P4 |
| Daten-Explorer | Saved Explorer, Query/Chart/Data Table | nicht vorhanden | freies Analysesystem fehlt | read-only Explorer nach Standardviews | P4 |
| Mobile UX | separate Mobile App, PWA, Sheets, Pull-to-refresh | Bottom Nav, Mobile Cards vorhanden | Review mobil noch schwer | Mobile Review Cards + Sheets | P2 |
| Dark Theme | vorhanden | JARVIS Dark UI vorhanden | Konsistenz/Polish | beibehalten, Chart-Farben vereinheitlichen | P1 |
| Batch-Aktionen | Batch update/import/edit | Preview/Confirm Batch vorhanden | UX kann klarer werden | Batch nur mit Preview, Konfliktliste, Audit | P1 |
| Duplikate | Import/Transaction Workflow integriert | duplicate_of/status teilweise | eigener Duplikatflow fehlt | Duplikat Review als Subflow | P3 |
| Budgetstatus | Kein Hauptbudgetmodul, Analyse stark | JARVIS stark: Plan/Ist/Forecast/Ampel | Visual Analytics ausbaufähig | Budget Cockpit als zentrale Wahrheit behalten | P1 |
| Rule Engine | eher Import/Mapping/Automation Patterns | Rule MVP-light suggestions vorhanden | Test-/Treffer-UX fehlt | Regeln nur Kandidaten vorschlagen, nie direkt buchen | P3 |
| Reports | Export/Stats/Explorer | Reports minimal/Portfolio getrennt | Budget Reports fehlen | monatlicher Budgetreport nach Analytics v1 | P3 |

## 9. Konkrete UI-Vorschläge für JARVIS

### A. Buchungen prüfen

Ziel: produktiver, ruhiger, weniger technisch.

Vorschlag:

- Drei Haupttabs:
  - Automatisch vorgeschlagen
  - Manuell prüfen
  - Ausgeschlossen / Duplikate / Covered
- Filter-Chips statt vieler Spezialtabs:
  - Migros
  - Galaxus/Digitec
  - Transfers
  - Duplikate
  - Unklar
  - Quelle
- Kompakte Kandidatenzeile:
  - Datum
  - Händler/Beschreibung
  - Betrag
  - Kategorie-Vorschlag
  - Confidence als Text/Farbe
  - Regel/Grund menschenlesbar
- Linke/obere Filter:
  - Zeitraum
  - Quelle
  - Kategorie
  - Konto
  - Status
  - Confidence
  - Suche
- Batch-Aktionsleiste:
  - erscheint nur bei Auswahl
  - Kategorie zuweisen
  - Preview Confirm
  - Ignorieren
  - Transfer markieren
- Keine technischen Candidate IDs in User Mode.
- Detail Drawer für Audit/Source/Line Items/Conflicts.

### B. Effektive Ausgaben

Ziel: echte Transaktionsliste.

Vorschlag:

- Gruppierung nach Monat und Tag.
- Kopf-Summen:
  - Ausgaben
  - Einnahmen optional
  - Netto optional
  - Anzahl
- Row:
  - Datum
  - Kategoriechip mit Icon/Farbe
  - Händler/Beschreibung
  - Konto
  - Tags
  - Quelle
  - Betrag rechts prominent
- Filter:
  - Monat/Jahr/freier Zeitraum
  - Vor/Zurück
  - Kategoriebaum
  - Konto
  - Tag
  - Händler/Suche
  - Betragsspanne
  - Quelle
- Row Click → Detail Drawer:
  - Buchungsdetails
  - Kategorie/Tags/Beschreibung ändern
  - Reversal Preview
  - Adjustment Preview
  - Audit-Historie
- Mobile:
  - Cards
  - Bottom Sheet Filter
  - keine breite Tabelle

### C. Budgetstatus nach Kategorie

Ziel: Analyse statt Tabelle mit Zahlenfriedhof — was für eine kühne Innovation.

Vorschlag:

- Budget Cockpit als Start:
  - KPI Row
  - rote/gelbe Kategorien zuerst
  - Review-Offen prominent
- Kategoriezeile:
  - Budget Monat
  - Ist Monat
  - Jahr bisher
  - Forecast
  - Abweichung
  - Ampel
- Row Click:
  - Monatsbalken mit Budgetlinie
  - Forecast Erklärung
  - Merchant/Source Breakdown
  - Buchungen der Kategorie
  - Link zu Effektive Ausgaben mit Filter
- Kein Budget:
  - klar `ohne Budget`, keine falsche Abweichungspräzision

### D. Budget-Auswertung

Neue Analysezentrale:

- Ausgaben nach Kategorie: Donut + Bar + Tabelle
- Ausgaben nach Konto: Bar/List
- Einnahmen nach Konto/Quelle: Bar/List
- Monatsverlauf: Einnahmen, Ausgaben, Netto
- Budgetabweichung: Kategorie x Monat
- Top Händler: Bar/List mit Drilldown
- Datenqualität: unkategorisiert, offene Reviews, Duplikate, ohne Budget
- Optional später:
  - Treemap
  - Sunburst
  - Heatmap
  - Calendar Heatmap
  - Sankey

### E. Daten-Explorer

Langfristig sinnvoll, aber **nicht zuerst**.

Dimensionen:

- Zeitraum
- Konto
- Kategorie
- Händler
- Tag
- Quelle
- Betragsspanne
- Transaktionstyp
- Review-/Datenqualitätsstatus

Metriken:

- Summe
- Durchschnitt
- Anzahl
- Median später
- Monatsvergleich
- Anteil
- Budgetabweichung
- Top-N Anteil später

Sicherheitsregeln:

- v1 read-only
- keine freien SQL Queries
- nur whitelist-basierter Query Builder
- Saved Views mit Schema-Version
- keine Batch-Aktionen aus Explorer ohne Review/Preview/Confirm

## 10. Navigationsempfehlung

### Empfohlene Hauptnavigation

Ich empfehle **nicht** alles unter `Budget` zu stopfen. Das würde wieder zu einer Menühalde führen — ausgesprochen demokratisch, aber nutzlos.

Empfohlene Struktur:

- Command Center
- Budget
- Transaktionen
- Analyse
- Setup
- Portfolio / Crypto / Reports separat wie bisher

### Budget

- Übersicht / Cockpit
- Budgets / Pläne
- Einnahmenplanung

### Transaktionen

- Liste / Effektive Ausgaben
- Buchungen prüfen
- Ausgabe erfassen
- Transfers
- Imports später als Wizard/Flow

### Analyse

- Budget vs Ist
- Kategorien
- Trends
- Konten
- Händler
- Datenqualität
- Daten-Explorer später

### Setup

- Konten
- Kategorien & Tags
- Regeln
- Importquellen
- Audit/Sicherheit optional

### Warum diese Empfehlung?

- `Budget` bleibt Plan/Ist/Forecast.
- `Transaktionen` wird die Arbeitsfläche für echte Buchungen und Review.
- `Analyse` wird nicht mit Setup/Review vermischt.
- `Setup` enthält Stammdaten und Regeln.
- Mobile kann daraus 5 Einträge machen: Home, Budget, Prüfen, Ausgaben, Mehr.

## 11. Roadmap in 4 Stufen

### 11.1 Budget UX v2

Nur UI/Workflow-Verbesserung, keine neue Import-/Provider-Engine.

Umfang:

- Navigation bereinigen
- Transaktionsliste verbessern
- Effektive Ausgaben als echte Transaktionsliste
- Buchungen prüfen ruhiger machen
- Kategoriebaum vereinfachen
- Tags sichtbar machen
- technische IDs aus User Mode entfernen
- Batch Preview deutlicher machen
- mobile Review Cards entwerfen

Erfolgskriterien:

- Nutzer findet Budget, Transaktionen, Review und Analyse ohne Fachjargon.
- Filter sind schneller erreichbar.
- Jede Schreibaktion bleibt Preview/Confirm/Audit.

### 11.2 Budget Analytics v1

Umfang:

- Kategorieanalyse
- Monatsvergleich
- Budget vs Ist
- einfache Charts:
  - Bar
  - Donut/Pie
  - Trendline
  - Stacked Bar optional
- Top Händler
- Top Kategorien
- Drilldown von Charts zu Transaktionen
- Datenqualität-Panel

Erfolgskriterien:

- Rote Kategorien sind erklärbar.
- Charts führen immer zu Buchungen/Details.
- Keine Provider-Aufrufe beim Rendern.

### 11.3 Budget Imports v1

Umfang:

- Kreditkartenimport produktiv, aber staged
- Migros-Bons produktiv weiterführen
- Bank CSV vorbereiten
- Import Wizard Shell
- Spaltenmapping für generische CSV/Excel nur bis Kandidaten
- Duplikate als Review-Subflow
- Review/Confirm/Audit konsequent
- Regel-Test mit Trefferanzahl

Erfolgskriterien:

- Import erzeugt Kandidaten, nicht direkte Buchungen.
- Batch Confirm hat Preview-ID, Konflikte, Zielkonto, Kategorieverteilung.
- Keine Datei landet im Repo.

### 11.4 Budget Advanced

Umfang:

- geplante Transaktionen / Fixkosten-Kandidaten
- Transaction Templates
- Merchant Entity / Alias Resolver
- vollwertigere Splits
- Rule Manager mit Simulationsmodus
- Read-only Daten-Explorer
- Sankey/Sunburst/Treemap/Heatmap/Calendar Heatmap
- Mobile Kamera/Receipt später
- OCR/AI nur expliziter Job mit Review

Erfolgskriterien:

- Automatisierung reduziert Arbeit, ersetzt aber nie Confirm.
- Explorer bleibt read-only oder nutzt Review-Pipeline.
- Hypothesen/Pläne und bestätigte Buchungen bleiben getrennt.

## 12. Was wir als Idee übernehmen dürfen

Geeignet als Idee:

- Desktop/Mobile getrennte UX-Flows
- Base-Composables für gemeinsame Fachlogik
- Transaktionsliste mit Datumssprung, Suche, Summen, Gruppierung
- Kategorie/Konto/Tag als primäre Filterdimensionen
- Analyse-Typen getrennt von Chart-Typen
- Explorer als gespeicherte Query-Konfiguration
- Import Wizard als mehrstufiger Review-Prozess
- Chart Drilldown zu Transaktionen
- Empty States und Skeleton Loading
- DisplayOrder/Hidden für Stammdaten

Nicht direkt übernehmen:

- Code
- Assets, Icons, Templates, Screenshots
- Vuetify/Framework7-Komponenten 1:1
- XORM Sync2 Migration Pattern
- Custom Script Import im User Mode
- Batch Updates aus Explorer ohne Preview/Confirm
- Provider-/OCR-Aufrufe beim Rendern

## 13. Offene Empfehlungen

1. Vor dem nächsten Feature-Sprint erst **Budget UX v2 Plan** schreiben, nicht direkt implementieren.
2. Budget Navigation zuerst bereinigen; sonst wird jeder weitere Chart nur Tapete auf Kabelsalat.
3. Tags und Merchant-Normalisierung früher priorisieren als Heatmaps/Sunburst.
4. Daten-Explorer erst nach stabilen Standardanalysen bauen.
5. Import Wizard erst als Shell/Workflow, dann Quellen nacheinander anschließen.
6. Scheduled Transactions als Kandidatenmodell, nicht als stille Buchungsmaschine.
7. Splits vollwertiger machen, bevor große Händler-/Kategorieanalysen finalisiert werden.

## 14. Abschluss-Checkliste

- ezBookkeeping separat geklont: ja
- Pfad geprüft: ja, `/home/agent/.hermes/reference_repos/ezbookkeeping`
- Lizenz geprüft: ja, MIT
- Frontend-Struktur analysiert: ja
- Backend-Struktur analysiert: ja
- Transaktions-UX analysiert: ja
- Statistik-/Analyse-UX analysiert: ja
- Funktionsmatrix erstellt: ja
- JARVIS-Navigationsvorschlag erstellt: ja
- Datenmodell-Vergleich erstellt: ja
- Roadmap erstellt: ja
- Keine Fremdcodes/Assets übernommen: bestätigt
- Keine Runtime-Daten genutzt/geändert: bestätigt
- Keine Implementierung gestartet: bestätigt


No linter for .md files

/home/agent/.hermes/repos/FinanceManager/docs/budget/jarvis-finance-system-ezbookkeeping-reference-analysis-budget-ux-roadmap.md was last read with offset/limit pagination (partial view). Re-read the whole file before overwriting it.


Explanation:
**Verifying document changes**

I need to verify the document without making any runtime changes. Maybe I should use git diff? The user mentioned Google Drive is optional, so it’s not a must. I’m considering whether to run any tests since it’s just documentation, so implementation may not be necessary. I should check if the file exists and search for headings. Using the terminal command, perhaps wc, sounds like a plan. The user didn’t ask for a commit; maybe I shouldn’t do that unless requested. Finally, I might need to run git status for uncommitted changes.

python3 - <<'PY'
from pathlib import Path
p=Path('docs/budget/jarvis-finance-system-ezbookkeeping-reference-analysis-budget-ux-roadmap.md')
text=p.read_text()
required=['## 1. Lizenznotiz','## 2. ezBookkeeping technische Struktur','## 5. ezBookkeeping Datenmodelle vs JARVIS','## 8. Funktionsmatrix','## 10. Navigationsempfehlung','## 11. Roadmap in 4 Stufen','Keine Fremdcodes/Assets übernommen']
print('DOC_EXISTS=' + str(p.exists()))
print('DOC_BYTES=' + str(p.stat().st_size))
for r in required:
    print(('OK ' if r in text else 'MISSING ') + r)
PY
git status --short --branch

git -C /home/agent/.hermes/reference_repos/ezbookkeeping status --short --branch && git -C /home/agent/.hermes/reference_repos/ezbookkeeping log -1 --oneline


     1|# JARVIS Finance System – ezBookkeeping Reference Analysis & Budget UX Roadmap
     2|
     3|Stand: 2026-05-17
     4|Referenzrepo: `https://github.com/mayswind/ezbookkeeping`
     5|Lokaler Pfad: `/home/agent/.hermes/reference_repos/ezbookkeeping`
     6|JARVIS-Projekt: `/home/agent/.hermes/repos/FinanceManager`
     7|
     8|## 0. Scope und Compliance
     9|
    10|Diese Analyse ist **kein Implementierungs-Sprint**.
    11|
    12|Durchgeführt wurde:
    13|
    14|- ezBookkeeping separat als Referenz geklont.
    15|- Lizenz, Tech-Stack, Struktur, UI/UX, API, Datenmodelle, Import- und Analysekonzepte statisch analysiert.
    16|- JARVIS FinanceManager anhand Repo-Struktur und Codeoberflächen verglichen.
    17|- Designvorschläge und Roadmap abgeleitet.
    18|
    19|Nicht durchgeführt wurde:
    20|
    21|- keine Implementierung im JARVIS-Code
    22|- keine Runtime-DB gelesen oder verändert
    23|- keine echten JARVIS-Beträge/Daten verwendet
    24|- kein Fremdcode übernommen
    25|- keine Assets, Icons, Templates oder Screenshots aus ezBookkeeping übernommen
    26|- keine Provider-/OCR-/AI-Aufrufe gestartet
    27|
    28|## 1. Lizenznotiz
    29|
    30|### ezBookkeeping Lizenz
    31|
    32|- Lizenzdatei: `/home/agent/.hermes/reference_repos/ezbookkeeping/LICENSE`
    33|- Lizenz: **MIT License**
    34|- Copyright: `Copyright (c) 2020-2026 MaysWind`
    35|- `package.json` bestätigt ebenfalls `"license": "MIT"`.
    36|
    37|### Konsequenz für JARVIS
    38|
    39|MIT erlaubt grundsätzlich Nutzung, Modifikation und Weiterverbreitung, sofern Copyright- und Lizenzhinweis erhalten bleiben. Für dieses Projekt gilt aber eine strengere interne Vorgabe:
    40|
    41|- Wir übernehmen **nur Ideen, UX-Patterns und Architekturkonzepte**.
    42|- Wir kopieren **keinen Code**.
    43|- Wir kopieren **keine Assets/Icons/Templates/Screenshots**.
    44|- Falls später ein konkreter Codeausschnitt aus ezBookkeeping direkt übernommen werden soll, muss vorher eine separate Lizenz-/Kompatibilitätsnotiz erstellt und der MIT-Hinweis in der betreffenden Datei/Dokumentation gepflegt werden.
    45|
    46|## 2. ezBookkeeping technische Struktur
    47|
    48|### 2.1 Frontend-Stack
    49|
    50|- Vue 3
    51|- TypeScript
    52|- Vite
    53|- Pinia
    54|- Vue Router für Desktop
    55|- Framework7 Router für Mobile
    56|- Vuetify 3 für Desktop UI
    57|- Framework7 Vue für Mobile UI
    58|- Axios API Client
    59|- ECharts / vue-echarts
    60|- Moment / moment-timezone
    61|- vue-i18n
    62|- PWA via `vite-plugin-pwa`
    63|- SCSS/Sass
    64|
    65|Wichtige Dateien:
    66|
    67|- `package.json`
    68|- `vite.config.ts`
    69|- `src/index-main.ts`
    70|- `src/desktop-main.ts`
    71|- `src/mobile-main.ts`
    72|- `src/router/desktop.ts`
    73|- `src/router/mobile.ts`
    74|
    75|### 2.2 Backend-Stack
    76|
    77|- Go 1.26 laut `go.mod`
    78|- Gin Web Framework
    79|- XORM ORM
    80|- SQLite / MySQL / PostgreSQL Support
    81|

Use offset=81 to continue reading (showing 1-80 of 902 lines)


Output:
DOC_EXISTS=True
DOC_BYTES=27618
OK ## 1. Lizenznotiz
OK ## 2. ezBookkeeping technische Struktur
OK ## 5. ezBookkeeping Datenmodelle vs JARVIS
OK ## 8. Funktionsmatrix
OK ## 10. Navigationsempfehlung
OK ## 11. Roadmap in 4 Stufen
OK Keine Fremdcodes/Assets übernommen
## feat/budget-phase-1-4...origin/feat/budget-phase-1-4
?? docs/budget/


Output:
## main...origin/main
1f7411a provide officially built macOS packages


todo

ezBookkeeping in separaten Reference-Ordner klonen und Pfade/Safety prüfen

Lizenz, Tech-Stack, Build-System und Ordnerstruktur analysieren

Frontend: Routing, Komponenten, State, Transaktions-/Statistik-UX analysieren

Backend: API, Datenmodelle, Importlogik, Statistikfunktionen analysieren

JARVIS Ist-Stand ohne Runtime-Daten anhand Repo-Struktur/Code vergleichen

Funktionsmatrix, UI-Vorschläge, Navigation, Datenmodell-Vergleich und 4-Stufen-Roadmap ausarbeiten

Markdown-Dokument unter docs/budget/ speichern und Abschlussbericht liefern


Erledigt, Sir. **Kein Feature-Sprint gestartet. Keine Implementierung. Nur Referenzanalyse und Roadmap-Dokumentation.**

## Abschlussbericht

- **ezBookkeeping Repo geklont:** ja
- **Pfad:** `/home/agent/.hermes/reference_repos/ezbookkeeping`
- **Referenz-Commit:** `1f7411a`
- **Separater Reference-Ordner:** ja
  Nicht in `FinanceManager/src`, nicht in `FinanceManager/frontend/src`.

- **Lizenz geprüft:** ja
  Lizenz: **MIT License**

- **Frontend-Struktur analysiert:** ja
  Vue 3, TypeScript, Vite, Pinia, Vuetify Desktop, Framework7 Mobile, ECharts, PWA, getrennte Desktop/Mobile Views.

- **Backend-Struktur analysiert:** ja
  Go, Gin, XORM, SQLite/MySQL/PostgreSQL, Service Layer, API Layer, Models, Import Converter, Exchange Rate Provider.

- **Build-System analysiert:** ja
  `build.sh`, `build.bat`, `build.ps1`, `go.mod`, `package.json`, Docker.

- **Routing analysiert:** ja
  Desktop und Mobile getrennt, Filter stark über Query State.

- **State Management analysiert:** ja
  Pinia Stores pro Domäne, API-Aufrufe im Store, Base-View-Logik.

- **API-Struktur analysiert:** ja
  Accounts, Transactions, Categories, Tags, Templates, Statistics, Explorer, Exchange Rates.

- **Datenmodelle analysiert:** ja
  Accounts, Transactions, Categories, Tags, Tag Groups, Templates/Scheduled Transactions, Exchange Rates, Imports, Explorer.

- **Transaktions-UX analysiert:** ja
  Liste/Kalender/Gallery, Datumssprung, Suche, Summen, Kategorien mit Icons/Farben, Konto, Tags, Beschreibung, Pagination/Infinite Scroll.

- **Statistik-/Analyse-UX analysiert:** ja
  Kategorieanalyse, Trendanalyse, Vermögenstrends, Explorer, Pie/Bar/Trend/Treemap/Sunburst/Heatmap/Calendar Heatmap bewertet.

- **Funktionsmatrix erstellt:** ja
  Mit Bereichen, ezBookkeeping-Funktion, JARVIS-Stand, Lücke, Empfehlung und Priorität.

- **JARVIS-Navigationsvorschlag erstellt:** ja
  Empfehlung: nicht alles unter Budget stopfen, sondern:
  - Budget
  - Transaktionen
  - Analyse
  - Setup

- **Datenmodell-Vergleich erstellt:** ja
  Accounts, Transactions, Categories, Tags, Scheduled Transactions, Exchange Rates, Imports, Analysis/Statistics.

- **Roadmap erstellt:** ja
  In 4 Stufen:
  1. Budget UX v2
  2. Budget Analytics v1
  3. Budget Imports v1
  4. Budget Advanced

- **Dokument gespeichert:** ja
  Pfad:

```text
/home/agent/.hermes/repos/FinanceManager/docs/budget/jarvis-finance-system-ezbookkeeping-reference-analysis-budget-ux-roadmap.md
```

- **Keine Fremdcodes/Assets übernommen:** bestätigt
- **Keine Runtime-DB gelesen/geändert:** bestätigt
- **Keine echten JARVIS-Beträge verwendet:** bestätigt
- **Keine Implementierung gestartet:** bestätigt
- **Google Drive Kopie:** nicht erstellt, weil optional und nicht explizit gefordert. Markdown liegt im Projekt.

## Wichtigste Empfehlung

JARVIS sollte **kein ezBookkeeping-Klon** werden. ezBookkeeping ist stark als UX-/Architektur-Referenz für:

- Transaktionsliste
- Filter
- Statistiknavigation
- Import Wizard
- Explorer-Konzept
- Desktop/Mobile-Trennung

JARVIS ist dagegen stärker bei:

- Budget Cockpit
- Preview / Confirm / Audit
- source-aware Import Review
- sicherer Runtime-Trennung
- Budgetstatus mit Plan/Ist/Forecast

Die beste Richtung ist:

1. **Budget Cockpit als zentrale Wahrheit behalten**
2. **Transaktionen und Review deutlich ruhiger strukturieren**
3. **Analyse-Hub mit vordefinierten Views bauen**
4. **Daten-Explorer erst später read-only**
5. **Import Wizard nur staged: Datei → Kandidaten → Review → Preview → Confirm**

## Offene Empfehlungen

- Vor einem nächsten Code-Sprint zuerst einen **Budget UX v2 Plan** schreiben.
- Priorität 1 sollte nicht Heatmap/Sunburst sein, sondern:
  - Navigation bereinigen
  - Effektive Ausgaben als echte Transaktionsliste
  - Buchungen prüfen ruhiger machen
  - Tags/Händler/Filter verbessern
  - technische IDs aus User Mode entfernen
- Merchant Entity / Alias Resolver früher einplanen als exotische Charts.
- Scheduled Transactions als **Kandidatenmodell**, nicht als stille Buchungsmaschine.
- Splits vollwertiger machen, bevor große Händler-/Kategorieanalysen finalisiert werden.

Der Dokumentationsstand ist im Repo aktuell **uncommitted** unter `docs/budget/`, wie gewünscht nur gespeichert, nicht als Feature-Sprint committed.