feat(dashboard): Startansicht mit Bewerbungen, Wandlung und Gewinnen

Erster Menuepunkt und Startansicht; das Logo oben links fuehrt dorthin zurueck.

Vier Kennzahlen (Bewerbungen, daraus Opportunities samt Quote, gewonnene
Projekte, aktuell beim Kunden), ein Saeulendiagramm mit denselben drei Reihen
ueber der Zeit, die Bewerbungen je Berater, die naechsten Termine und alle
Opportunities in Kundenvorstellung bzw. Interview Kunde. Zeitraum ueber vier
Vorgaben oder frei, Einteilung nach Tag, Monat, Quartal oder Jahr.

Bewerbung heisst dabei: ein Eintrag in der Akquise - jeder Eintrag bedeutet, dass
ein Profil raus ist (so vom Nutzer festgelegt).

Zwei Dinge dafuer am Datenmodell:

- crm_opportunities.won_at haelt den Zeitpunkt des Wechsels nach "Beauftragt".
  Die Phase allein sagt nur, wie es jetzt steht, nicht wann es passiert ist.
  Beim Wechsel heraus wird das Datum geleert, sonst zaehlt das Dashboard einen
  Gewinn, den es nicht gibt.
- Die Akquise loescht nach 90 Tagen - damit waere jede Jahresauswertung falsch.
  Der Aufraeumlauf sichert deshalb vorher Tag, Berater und Anzahl in
  crm_acquisition_history, in derselben Transaktion wie das Loeschen. Gesichert
  wird nur, was verschwindet; die Auswertung addiert beide Quellen und kann sich
  damit nicht ueberschneiden. Projektdaten sind nach dem Loeschen weiterhin weg.

Termine und die Phasenlisten kommen nicht aus einem eigenen Endpunkt: Termine und
Opportunities laedt die App ohnehin komplett, das Dashboard filtert sie selbst.

Diagramme von Hand (SVG-freie Balken plus Tailwind-Uebergaenge) statt einer
Bibliothek - drei Darstellungen rechtfertigen keine weitere Abhaengigkeit, und so
kommen die Farben aus denselben Tokens wie der Rest. Die Zahlen laufen hoch, die
Saeulen wachsen; wer Bewegung im System abgeschaltet hat, bekommt sofort den
Endwert.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-08-18 15:02:35 +02:00
co-authored by Claude Opus 5
parent 42639c65fa
commit 6f57483f33
17 changed files with 1133 additions and 19 deletions
+46
View File
@@ -9,6 +9,7 @@ Ein CRM für die Projektvermittlung. Es beantwortet vier Fragen:
| Frage | Bereich |
| --- | --- |
| Wie läuft es gerade? | **Dashboard** |
| Welche Projekte haben wir gefunden? | **Akquise** |
| Welche Geschäfte sind in Arbeit und was sind sie wert? | **Opportunities** |
| Wer ist wann wo, und wer ist beteiligt? | **Interviews** |
@@ -32,6 +33,7 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
```
┌──────────────┬───────────────────────────────────────────┐
│ Kategorien │ Titel der Ansicht [Hell/Dunkel] │
│ Dashboard │ │
│ Akquise ▾ │ │
│ Eingang │ │
│ Archiv 3│ │
@@ -57,6 +59,8 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
└──────────────┴───────────────────────────────────────────┘
```
* Der Klick auf das **perinco-Logo** oben links führt zurück zum **Dashboard** -
das ist auch die Ansicht, mit der die Anwendung startet.
* Der Knopf mit den drei Strichen oben links klappt das Menü auf Symbolbreite
zusammen - hilfreich auf kleinen Bildschirmen.
* Rechts oben schaltet zwischen hellem und dunklem Design. Ein **Doppelklick**
@@ -78,6 +82,48 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
> Alle Abbildungen in dieser Anleitung zeigen die Anwendung mit **erfundenen
> Beispieldaten**. Firmen, Personen und Zahlen darin gibt es nicht.
## Dashboard
Die Startansicht: wie der Vertrieb läuft, ohne dass man irgendwo hineinklicken
muss. Alle sehen dieselben Zahlen.
Oben steht der **Zeitraum**. Vier Vorgaben (30 Tage, 12 Monate, 8 Quartale,
5 Jahre) setzen Anfang, Ende und die passende Einteilung; *von* und *bis* lassen
sich frei setzen, und rechts wählt **Einteilung** aus, wie die Zeitachse
geschnitten wird - Tag, Monat, Quartal oder Jahr.
### Die vier Kennzahlen
| Kachel | Was gezählt wird |
| --- | --- |
| **Bewerbungen** | Einträge in der Akquise im Zeitraum. Jeder Eintrag ist eine versendete Bewerbung |
| **Zu Opportunity** | Bewerbungen, aus denen eine Opportunity geworden ist - dazu die Quote |
| **Gewonnen** | Opportunities, die in die Phase *Beauftragt* gekommen sind |
| **Beim Kunden** | Opportunities, die **jetzt** in *Kundenvorstellung* oder *Interview Kunde* stehen - unabhängig vom Zeitraum |
### Verlauf
Das Säulendiagramm zeigt dieselben drei Reihen über der Zeit: Bewerbungen, daraus
entstandene Opportunities und gewonnene Projekte. Leere Abschnitte bleiben
sichtbar - eine Woche ohne Bewerbung ist eine Aussage. Der Mauszeiger auf einer
Säule nennt Abschnitt, Reihe und Wert.
Rechts daneben steht **Bewerbungen je Berater** für denselben Zeitraum. Einträge
ohne hinterlegten Berater erscheinen als *Ohne Berater*.
### Anstehende Interviews und „Beim Kunden"
Unten links die nächsten acht Termine aus dem gemeinsamen Kalender mit Datum,
Uhrzeit, Ort, Teilnehmern und dem Abstand („morgen", „in 3 Tagen"). Unten rechts
alle Opportunities in *Kundenvorstellung* und *Interview Kunde* mit Firma,
Volumen und Zuständigem - also alles, wo gerade der Kunde am Zug ist.
> **Zur Genauigkeit der Zahlen:** Die Akquise löscht Einträge nach 90 Tagen.
> Damit die Auswertung über Monate und Jahre trotzdem stimmt, sichert das Backend
> vor dem Löschen Tag, Berater und Anzahl - die Projektdaten sind dann weg, die
> Zahl bleibt. „Gewonnen" wird ab dem 18.08.2026 mitgeschrieben (Zeitpunkt des
> Wechsels nach *Beauftragt*); für die Zeit davor gibt es diesen Zeitpunkt nicht.
## Akquise
Der Eingang für gefundene Projekte - alles, was per Mail, Telefon oder über ein