# Rebalancing-WebApp — Design-Spec **Status:** Umgesetzt in 0.1.0 — Abweichungen siehe Ticket-Board (`_tickets/README.md`) **Datum:** 2026-08-06 **Autor:** MM + Claude (Brainstorming-Session) **Ziel:** Nachbau der Excel-Datei `Rebalancing-v2-Claude.xlsx` als Vue 3 WebApp mit deutlich besserem UI, Kursen aus der StockInfo-API und späterer Erweiterbarkeit für Threshold-Notifications. --- ## Übersicht - [1 — Ziel & Scope](#1--ziel--scope) - [2 — Excel-Analyse (was wird nachgebaut)](#2--excel-analyse-was-wird-nachgebaut) - [3 — Tech-Stack & Konventionen](#3--tech-stack--konventionen) - [4 — Projekt-Layout](#4--projekt-layout) - [5 — Datenmodell & Persistenz](#5--datenmodell--persistenz) - [6 — API-Client (StockInfo)](#6--api-client-stockinfo) - [7 — Rebalancing-Domain-Logik](#7--rebalancing-domain-logik) - [8 — UI-Konzept](#8--ui-konzept) - [9 — Docker & Deployment](#9--docker--deployment) - [10 — Makefile & Scripts](#10--makefile--scripts) - [11 — Testing](#11--testing) - [12 — Nicht im MVP](#12--nicht-im-mvp) - [13 — Offene Punkte / spätere Ausbaustufen](#13--offene-punkte--spätere-ausbaustufen) --- ## 1 — Ziel & Scope Der User pflegt sein Portfolio derzeit in einer Excel-Datei mit *Tolerance-Band-Rebalancing*: pro Position gibt es ein Ziel-Prozent und ein Toleranzband (Lower/Upper). Ist der aktuelle Marktwert außerhalb des Bands, wird *Kaufen* oder *Verkaufen* empfohlen. Die Excel-Datei zieht Kurse über ein externes Makro (`_FV(...)`) und ist damit an eine Windows-Excel-Instanz gebunden. **Was die WebApp bringt:** - Kurse aus der eigenen [StockInfo-API](https://stockinfo.int.mikemitterer.at) — plattformunabhängig - deutlich reduziertes, fokussiertes UI (Excel zeigt ~30 Spalten, die App zeigt ~8 mit Drilldown) - visuelles Feedback pro Position (Delta-Balken mit Bändern) - konfigurierbare Bänder und Kennzahlen - persistiert im Browser (IndexedDB), Export/Import als JSON - Docker-Deploy für Unraid o. ä. (statisch, Nginx-Container) **Explizit nicht Teil der App (Entscheidungen aus Brainstorming):** - Trade-Journal / Dokumentation - Pyramidisieren bei Verlust (3 Strategien) - Push-Notifications (kommt später als eigener Backend-Cron-Dienst) - Multi-Currency / FX-Umrechnung - Multi-Portfolio-Vergleichsansichten [↑ Übersicht](#übersicht) --- ## 2 — Excel-Analyse (was wird nachgebaut) Das Analyse-Skript hat folgende Strukturelemente identifiziert: **Struktur (Sheet „Rebalancing"):** | Excel-Bereich | Bedeutung | in App? | |---|---|---| | I3 `=ROUND(K7+K14+K16+K19,-3)` | Gesamtsumme, auf Tausender gerundet | ✅ | | G3, L2 | Überschriften | — | | Zeile 5 | Header (Symbol, ISIN, Bezeichnung, Meldefond, Bestand, Bestand opt., Kurs, Volatilität, Marktwert, IST-%, Target-%, Target Details) | ✅ als Tabellen-Spalten | | Zeilen 7 / 14 / 16 / 19 | Gruppen-Zeilen: Aktien, Anleihen, Edelmetalle, Cash | ✅ als Gruppen-Balken + Row-Grouping | | Zeilen 8–13, 15, 17 | Positionen | ✅ | | G22 / H22 | Lower-Band (6 %) / Upper-Band (15 %) | ✅ in Settings | | Spalten O–S | pro-Position Band-Berechnungen (Low/Target/High €) | ✅ als Domain-Funktionen | | Spalte Y | Vorschlag (`Kaufen/Verkaufen/OK`) | ✅ als Status-Badge | | Spalte Z | Delta Bestand (Stück) | ✅ im Drilldown | | Spalten AA/AB/AC/AD | manuelle Trade-Simulation | ✅ als inline-Simulator im Drilldown | | Spalten AE/AF/AG | projizierte Bänder nach Trade | ✅ im Simulator | | I25 | Save-Asset-Grenze (170.000 €) | ✅ in Settings | | I26 / I27 | Liquiditäts-Puffer € und % | ✅ als KPI-Karte | | G29 | Rebalancing-Budget (230.000 €) | ✅ in Settings | | R26 / R27 / R28 | Ziel-Investitionsreserve % / € / Verkauf-Vorschlag | ✅ als KPI-Karte | | Zeilen 31–36 | Pyramidisieren bei Verlust (3 Strategien) | ❌ nicht MVP | | R30 ff. | Dokumentation / Trade-Journal | ❌ nicht MVP | | E-Spalte `_FV(C…, "Name")` | Instrument-Name von externem Provider | ✅ ersetzt durch `GET /quote/{isin}.name` | | I-Spalte `_FV(C…, "Preis")` | Kurs | ✅ ersetzt durch `GET /quote/{isin}.price` | | F-Spalte `HYPERLINK myOEKB` | Meldefond-Check-Link | ✅ als kleines Icon-Link im Drilldown | **Excel-Zellbezüge / Formeln, die 1:1 als reine TS-Funktionen abgebildet werden:** ``` Excel TS-Domain ──────────────────────────────────────── ───────────────────────────────────────── K = G*I marketValue(pos, quote) L = K*100/I3 actualPercent(pos, total) R = I3/100 * M targetValue(pos, total) Q = R − R*G22% lowerBand(pos, bands) S = R + R*H22% upperBand(pos, bands) Y = IF(K>S,"Verkaufen",IF(K0, U*100/R, 100) relativeDeltaPercent(pos) AF = ((G-(AA*-1))*I) * 100 / I3 projectedPercentAfterTrade(pos, tradeUnits) ``` Diese Formeln sind die Testgrundlage: die App muss für den Excel-Datensatz exakt dieselben Ergebnisse liefern. [↑ Übersicht](#übersicht) --- ## 3 — Tech-Stack & Konventionen - **Vue 3** (Composition-API, `