diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 7c37721..7d82011 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -55,9 +55,11 @@ Pflicht-Passwortwechsel, Kontenliste. Stufe 2 ✅: Übersicht, Budget-Monat, Buchungsliste mit Suche, Vertragsliste. Stufe 3 ✅: Buchungen, Budget-Zeilen, Verträge und Konten anlegen, ändern und löschen. Stufe 4 ✅: Arbeitsliste mit Eingang, Übertragsvorschlägen, Gebuchtem ohne Kategorie und Dubletten. -Übersetzt fehlerfrei, 54 Tests grün, läuft im Simulator; das Xcode-Projekt +Stufe 5 ✅: Kategorien samt Erkennungswörtern, Schlagwörter, Einstellungen, +Bankabruf und das Einrichten des zweiten Faktors. +Übersetzt fehlerfrei, 59 Tests grün, läuft im Simulator; das Xcode-Projekt entsteht aus `ios/project.yml`, die Modelle werden gegen echte Serverantworten geprüft. -Stufen 5–7 (Nebenräume, Erweiterungen, voller CSV-Import) stehen aus. +Stufen 6–7 (Teilen-Menü und Kurzbefehle, voller CSV-Import) stehen aus. **Stand, Entscheidungen und offene Punkte: `ios/UEBERGABE.md`.** diff --git a/ios/README.md b/ios/README.md index 30c85f7..7652917 100644 --- a/ios/README.md +++ b/ios/README.md @@ -48,6 +48,7 @@ Vollzugang. Wer eine Ausnahme braucht, trägt sie bewusst in `project.yml` ein. | `Buchungen/` | Buchungsliste mit Suche, Formular zum Anlegen und Ändern | | `Abos/` | Verträge und Abos | | `Arbeitsliste/` | Eingang, Übertragsvorschläge, Dubletten | +| `Nebenraeume/` | Kategorien, Schlagwörter, Bank, zweiter Faktor | | `Konten/` | Kontenliste und Konto-Formular | | `Texte/` | Übersetzungen, Deutsch und Englisch zeilengleich | | `Tests/` | Logiktests ohne Netz, plus die Modellprüfung gegen `Fixtures/antworten.json` | diff --git a/ios/UEBERGABE.md b/ios/UEBERGABE.md index e435ce6..c6ac7fc 100644 --- a/ios/UEBERGABE.md +++ b/ios/UEBERGABE.md @@ -6,7 +6,7 @@ haben: was entschieden ist, was fertig ist, was als Nächstes dran ist, und was ich über das Backend herausgefunden habe. Lies sie ganz, bevor du anfängst — die Abschnitte „Was das Backend vorgibt" und „Fallen" ersparen dir Tage. -Stand: 21.10.2026, Commit `9edf610`. Alles committet und gepusht. +Stand: 21.10.2026, Commit `d290930`. Alles committet und gepusht. --- @@ -242,7 +242,7 @@ Drei Tests in `test_budget.py` halten beide Richtungen und die Null fest. --- -## 5. Was fertig ist — Stufen 1 bis 4 ✅ +## 5. Was fertig ist — Stufen 1 bis 5 ✅ ### Stufe 1 (Commit `6b86a6b`) @@ -434,6 +434,39 @@ Richtung: Was verknüpft wird, fällt über `verbraucht` heraus — ein blosser Vorschlag nicht. Die Weboberfläche zeigte den Doppeleintrag genauso. Behoben in `services/uebertraege.py` (`schlage_vor`), mit Test. +### Stufe 5 — Nebenräume ✅ (Commit `d290930`) + +Kategorien, Schlagwörter, Bankabruf und der zweite Faktor — alle unter +**Einstellungen**, nicht als eigene Reiter. Man braucht sie selten, und eine +Leiste mit zehn Reitern findet niemand mehr. `Nebenraeume/`. + +#### Was hier bewusst nicht geht + +- **Den zweiten Faktor abschalten.** Es verlangt das Kontopasswort, und die + App speichert keines. Ein Vollzugang auf diesem Gerät soll den Schutz des + Kontos nicht aufheben können. Dasselbe gilt für neue Rettungscodes. +- **Eine Bank verbinden.** Die Bank leitet fest auf `{base_url}/bank/rueckkehr` + zurück; der Weg führt zwangsläufig über den Browser. Abrufen und Salden + auffrischen gehen von hier. + +#### Zwei Eigenheiten, die beim Nachbauen zählen + +1. **Der zweite Faktor braucht auf dem Telefon keinen QR-Code.** Die + Authenticator-App liegt daneben — `otpauth_uri` führt per Link direkt + hinein. `qr_png` bleibt ungenutzt; auf dem iPad könnte man es zeigen. +2. **Die Rettungscodes erscheinen genau einmal.** Das Blatt lässt sich nicht + wegwischen (`interactiveDismissDisabled`) und erst schliessen, wenn der + Nutzer bestätigt hat, sie gesichert zu haben. Wer es verliert, braucht + das Kontopasswort am Rechner. + +#### Einstellungen schreiben ohne Sichern-Knopf + +`PUT /settings/{key}` nimmt je Aufruf **einen** Wert, als Query. Die Bindung +schreibt beim Setzen direkt; ein Formular mit Sichern-Knopf wäre eine +Zwischenstufe, die nichts bringt. Die Werte gehören dem **Konto**, nicht dem +Gerät — das steht auch unter dem Abschnitt, sonst wundert sich jemand, warum +der Browser sich mitändert. + #### Prüfdatei-Tests zählen keine Mengen mehr Die Saat in `erzeuge_ios_fixture.py` wuchs um Eingangseintrag, Dubletten und @@ -446,19 +479,19 @@ erweiterst.** ## 6. Was als Nächstes dran ist -**Stufe 5 ist dran.** Alle vier Backend-Ergänzungen sind drin; von hier an +**Stufe 6 ist dran.** Alle vier Backend-Ergänzungen sind drin; von hier an reicht die API, wie sie ist. Was bewusst nicht mitkam: das **Logo** eines Vertrags (Upload und Zuschnitt, `POST /subscriptions/{id}/logo`), die **Reihenfolge** der Konten -(`PUT /accounts/order`) und das **Lösen** einer Übertrags-Verknüpfung -(`DELETE /uebertraege/{link_id}`) — in der Arbeitsliste gibt es nur noch -nichts Verknüpftes zu lösen. Alles drei ist am Rechner bequemer und hielt -niemanden auf. +(`PUT /accounts/order`), das **Lösen** einer Übertrags-Verknüpfung +(`DELETE /uebertraege/{link_id}`), die **Transfer-Schlagwörter** +(`/categories/transfer-keywords`) und das **Anwenden** von Regeln auf +Bestehendes (`POST /categories/keywords/anwenden`). Alles am Rechner +bequemer, nichts davon hielt jemanden auf. -**Stufe 5 — Nebenräume.** Kategorien, Tags, Schlagwörter, Einstellungen, -Bankabruf anstossen. Hier gehört auch das **Einrichten** des zweiten Faktors -hin — bisher verweist die App dafür in den Browser. +Weiter aussen vor, wie von Anfang an entschieden: Bank **verbinden**, +Postfach einrichten, Sicherung und Wiederherstellung, Benutzerverwaltung. **Stufe 6 — Erweiterungen.** Teilen-Menü und Kurzbefehle. Brauchen eigene Ziele im Xcode-Projekt, eine **App-Gruppe** und eine **geteilte @@ -474,8 +507,9 @@ Vorlagen, Verlauf mit Rücknahme. ### Zum Umfang, ehrlich Die Weboberfläche hat rund 8900 Zeilen JSX. Nativ wird das nicht weniger. -Stufe 2 hat rund 1800 Zeilen gebraucht, Stufe 3 rund 1200, Stufe 4 rund 900; -Stufen 5 und 6 zusammen sind grob eine Woche, Stufe 7 nochmal zwei bis drei. +Stufe 2 hat rund 1800 Zeilen gebraucht, Stufe 3 rund 1200, Stufe 4 rund 900, +Stufe 5 rund 1500; Stufe 6 ist überschaubar, Stufe 7 nochmal zwei bis drei +Wochen. Der **409-Fall** („nachfragen", mit `trotzdem=true` wiederholbar) ist in Stufe 4 angekommen und erledigt — siehe dort. In den Stufen 5 bis 7 kommt er