docs: Uebergabe, README und Fahrplan halten Stufe 2 fest

Was neu drinsteht, damit der naechste Agent es nicht selbst herausfinden muss:
die drei Entwurfsentscheidungen der Stufe 2 (Dashboard in einem Abruf,
Nachschlagewerk im AppZustand, Suche erst beim Absenden), die zwei Fallen der
Uebertrags-Paarung, und dass die Modellpruefung jetzt ein Test ist statt
Handarbeit - samt dem Befehl, die Pruefdatei neu zu erzeugen.

Naechster Schritt steht oben: Stufe 3, davor nur noch Backend-Ergaenzung D.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-10-21 20:25:11 +02:00
co-authored by Claude Opus 5
parent bf437b3b69
commit 37b29934ef
3 changed files with 73 additions and 12 deletions
+5 -3
View File
@@ -51,9 +51,11 @@ Gerät, kein 30-Tage-Ablauf, einzeln widerrufbar). Deutsch und Englisch, iPad
zweispaltig, offline der letzte Stand mit Datum.
Stufe 1 ✅: Gerüst, Netzwerkschicht, Anmeldung samt zweitem Faktor und
Pflicht-Passwortwechsel, Kontenliste. Übersetzt fehlerfrei, 28 Tests grün,
läuft im Simulator; das Xcode-Projekt entsteht aus `ios/project.yml`.
Stufen 2–7 (Lesen, Schreiben, Arbeitsliste, Nebenräume, Erweiterungen, voller
Pflicht-Passwortwechsel, Kontenliste. Stufe 2 ✅: Übersicht, Budget-Monat,
Buchungsliste mit Suche, Vertragsliste. Übersetzt fehlerfrei, 44 Tests grün,
läuft im Simulator; das Xcode-Projekt entsteht aus `ios/project.yml`, die
Modelle werden gegen echte Serverantworten geprüft.
Stufen 3–7 (Schreiben, Arbeitsliste, Nebenräume, Erweiterungen, voller
CSV-Import) stehen aus.
**Stand, Entscheidungen und offene Punkte: `ios/UEBERGABE.md`.**
+7 -3
View File
@@ -43,9 +43,13 @@ Vollzugang. Wer eine Ausnahme braucht, trägt sie bewusst in `project.yml` ein.
| `Modelle/` | Codable-Typen, eins zu eins zu den Backend-Schemas |
| `Bausteine/` | Wiederverwendetes: Geld, Farben, Symbole, Zustandsansichten |
| `Anmeldung/` | Server-Adresse, Anmeldung, zweiter Faktor, Passwortwechsel |
| `Konten/` | Kontenliste (die erste Fachansicht) |
| `Texte/` | Übersetzungen |
| `Tests/` | Reine Logiktests, ohne Netz |
| `Dashboard/` | Die Übersicht: vier feste Karten |
| `Budget/` | Soll gegen Ist, Monat für Monat |
| `Buchungen/` | Buchungsliste mit Suche und Filtern |
| `Abos/` | Verträge und Abos |
| `Konten/` | Kontenliste |
| `Texte/` | Übersetzungen, Deutsch und Englisch zeilengleich |
| `Tests/` | Logiktests ohne Netz, plus die Modellprüfung gegen `Fixtures/antworten.json` |
## Wie die Anmeldung funktioniert
+61 -6
View File
@@ -235,7 +235,9 @@ sie beide Richtungen anbietet. Nötig für Stufe 3.
---
## 5. Was fertig ist — Stufe 1 ✅ (Commit `6b86a6b`)
## 5. Was fertig ist — Stufen 1 und 2 ✅
### Stufe 1 (Commit `6b86a6b`)
21 Swift-Dateien, rund 2600 Zeilen, in `ios/`:
@@ -287,13 +289,62 @@ die App startet im Simulator bei der Serverabfrage.
Faktor, Marke anlegen, Kontenliste — das lief bisher nur gegen die Modelle,
nicht gegen einen laufenden Server. Siehe „Klartext-HTTP" unten.
### Stufe 2 — Lesen ✅ (Commit `bf437b3`)
Vier neue Reiter, dazu die Modelle und Endpunkte darunter:
| Ordner | Inhalt |
|---|---|
| `Dashboard/` | `DashboardAnsicht` — vier feste Karten, **ein** Abruf |
| `Budget/` | `BudgetAnsicht` — Soll/Ist je Gruppe, blätterbar |
| `Buchungen/` | `BuchungsListe` — Suche und Filter im Server |
| `Abos/` | `AboListe` — Monats- und Jahressumme, Fälligkeit |
| `Modelle/` | `Buchung`, `Budget`, `Abo`, `Kategorie`, `Dashboard` |
Drei Entscheidungen, die man kennen sollte, bevor man daran weiterbaut:
1. **Das Dashboard holt alles in einem Wert** (`Dashboarddaten`). Vier
getrennte Zwischenspeicher könnten offline aus vier verschiedenen
Momenten stammen und sich widersprechen.
2. **Das Nachschlagewerk sitzt im `AppZustand`**, nicht in den Ansichten.
`Nachschlag` hält Kategorien, Schlagwörter und Konten; jede Liste braucht
zu einer ID den Namen, das Symbol und die Farbe.
3. **Die Buchungsliste sucht erst beim Absenden.** Je Tastendruck zu fragen
hiesse, bei „Supermarkt" zehn Abrufe zu schicken, von denen neun niemanden
interessieren.
**Die Übertrags-Paarung steckt in `Buchungszeile.zeilen`** (`Modelle/Buchung.swift`).
Zwei Dinge daran sind leicht falsch zu machen, beide durch Tests festgehalten:
- Zusammengefasst wird **nur, wenn beide Beine in der Liste stehen**. Sonst
liesse ein Kontofilter Zeilen verschwinden, die zu diesem Konto gehören.
- Die Richtung kommt aus `richtung` der Verknüpfung, **nicht aus dem
Vorzeichen** — manche Banken liefern beide Beine positiv.
### Die Modellprüfung ist jetzt ein Test
`backend/scripts/erzeuge_ios_fixture.py` legt eine Wegwerfdatenbank an,
befüllt sie so, dass jedes Feld einmal belegt ist, und schreibt 15 echte
Antworten nach `ios/Tests/Fixtures/antworten.json`. Der Swift-Test
`Serverantworten` entschlüsselt daraus jedes Modell.
**Das ersetzt die Handarbeit, die hier früher beschrieben stand.** Nach jeder
Änderung an einem Schema das Skript neu laufen lassen und die Datei mit
committen:
```
cd backend && .venv/bin/python -m scripts.erzeuge_ios_fixture
```
Wer ein Modell für Stufe 3 ergänzt, nimmt seinen Endpunkt in `PFADE` auf und
schreibt eine Zeile im Test dazu. Das ist die einzige Prüfung, die einen
vertippten Feldnamen fängt — der übersetzt anstandslos.
---
## 6. Was als Nächstes dran ist
**Stufe 2 — Lesen.** Dashboard (feste Ansicht: Kontostände, Budget-Fortschritt,
letzte Buchungen, Einnahmen/Ausgaben), Budget-Monatsansicht, Buchungsliste,
Abo-Liste. Die Backend-Ergänzungen **B** und **C**, die sie braucht, sind da.
**Stufe 3 ist dran.** Davor liegt nur noch Backend-Ergänzung **D** (unten),
die zwei Kopier-Lücken im Budget.
**Stufe 3 — Schreiben.** Buchungen anlegen und ändern, Budget bearbeiten
(Monat und Vorlage, beide Betriebsarten `fest`/`berechnet`), Abos verwalten
@@ -321,8 +372,12 @@ Vorlagen, Verlauf mit Rücknahme.
### Zum Umfang, ehrlich
Die Weboberfläche hat rund 8900 Zeilen JSX. Nativ wird das nicht weniger.
Stufen 2 bis 6 zusammen sind grob drei bis vier Wochen, Stufe 7 nochmal zwei
bis drei.
Stufe 2 hat rund 1800 Zeilen gebraucht; Stufen 3 bis 6 zusammen sind grob
zwei bis drei Wochen, Stufe 7 nochmal zwei bis drei.
Stufe 3 wird die aufwendigste der verbliebenen: Schreiben heisst Formulare,
Fehlerbehandlung je Feld und der 409-Fall („nachfragen", oft mit
`trotzdem=true` wiederholbar). Lesen war dagegen geradeaus.
Stufe 7 steht bewusst am Ende. Alles davor ist für sich nutzbar. Der Ablauf
hat **keinen Server-Zustand** zwischen den Schritten: Die Datei wird bei jedem