CG-Feedback-Monitor/docs/FACHLICHE_ARCHITEKTUR.md

182 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Fachliche Architektur — Assignment Monitor
## Zweck und Kontext
Assignment Monitor ist eine Progressive Web App (PWA) zur **Live-Begleitung und Bewertung von Capgemini-Trainees** (Institutees) während ihrer Kunden-Assignments. Die App wird vom jeweiligen Lead (Führungskraft / Mentor) auf dem Smartphone genutzt, um:
- Kundentermine strukturiert zu protokollieren
- Beobachtungen und Bewertungen in Echtzeit zu erfassen
- Am Ende eines Assignments ein qualifiziertes Feedback vorzubereiten
**Nutzer:** Lars Stommer (Capgemini Management Consultant Trainee Program Lead)
**Sprache der App:** Deutsch (Bedienoberfläche), Englisch (Rating-Labels)
**Datenschutz:** Alle Daten bleiben lokal im Browser (IndexedDB). Kein Public Cloud Upload.
---
## Fachliche Entitätenhierarchie
```
AssignmentType ← Konfiguration (z.B. "Case Interview")
└── PhaseTemplate[] ← Definierter Meeting-Flow des Typs
└── criteriaIds: FeedbackCriterionItem[] ← Welche Kriterien gelten für diesen Typ
Assignment ← Ein konkretes Kundenprojekt
└── AssignmentType ← Zugeordneter Typ
└── Institutees: Consultant[] ← Begleitete Berater (1n)
└── MeetingInstance[] ← Durchgeführte Meetings je Phase
MeetingInstance ← Ein konkreter Termin (z.B. "Briefing Call #1")
└── PhaseTemplate ← Welche Phase des Assignments
└── ConversationEntry[] ← Zeitleiste: wer spricht wann
└── Assessment[] ← Gesamtbewertung pro Institutee am Ende
ConversationEntry ← Ein zusammenhängender Sprecher-Beitrag (mehrzeilig) eines Institutees
└── ConversationSkillScore[] ← Kategorie-Schnellbewertung (während des Beitrags)
└── lineTags[] ← Kriterium-Zuordnung einzelner Zeilen (nachträglich, per Zeilentext)
FeedbackDimension ← Übergeordnete Dimension für das Assignment-Feedback
└── FeedbackCategory[] ← Kategorie (z.B. "Kommunikationsfähigkeit")
└── FeedbackCriterionItem[] ← Einzelnes Kriterium (z.B. "To the point")
AssignmentFeedback ← Strukturiertes Abschluss-Feedback pro Institutee
└── FeedbackCategoryRating[] ← Bewertung je Kategorie
└── FeedbackDimensionText[] ← Freitext Achievements + Development Needs je Dimension
```
---
## Meeting-Phasen
Jeder AssignmentTyp definiert einen geordneten Flow von PhaseTemplates. Die drei vordefinierten Typen haben folgende Phasen:
| Phase | Mit wem | Wdh. | Protokoll | Bewertung | Generisch | Case | Pitch |
|---|---|:-:|:-:|:-:|:-:|:-:|:-:|
| Pre-Briefing (Lead) | Lead | — | — | — | ✓ | ✓ | ✓ |
| Briefing (Kunde) | Kunde | — | ✓ | ✓ | ✓ | ✓ | ✓ |
| Alignment Call | Kunde | **✓** | ✓ | ✓ | ✓ | — | ✓ |
| Pre-Delivery (Lead) | Lead | — | — | — | ✓ | — | ✓ |
| Delivery / Pitch | Kunde | — | ✓ | ✓ | ✓ | ✓ | ✓ |
| Feedback Call (Kunde) | Kunde | — | ✓ | ✓ | ✓ | ✓ | ✓ |
| Feedback Call (Lead) | Lead | — | — | — | ✓ | ✓ | ✓ |
Wiederholbare Phasen (z.B. Alignment Calls) werden mit fortlaufendem `phaseIndex` und Dateinamen-Suffix `-#2`, `-#3` etc. gekennzeichnet.
---
## Bewertungssystem
### Skala
| Label | Kürzel | Farbe | Numerischer Wert |
|---|---|---|:-:|
| N/A | N/A | grau | 0 |
| Not Client Ready | Not | rot | 1 |
| Partially Client Ready | Partially | orange | 2 |
| Nearly Client Ready | Nearly | hellgrün | 3 |
| Client Ready | Fully | dunkelgrün | 4 |
`N/A` gilt als „nicht gesetzt" und wird aus allen Berechnungen ausgeschlossen.
### Aggregationslogik
**Gewichteter Durchschnitt** über alle Kriterien mit `weight`-Faktor (konfigurierbar `0,0``2,0` in `0,1`-Schritten — `0` blendet ein Kriterium komplett aus, z.B. für sprachliche Weichmacher/Füllwörter mit reduziertem Einfluss):
```
avg = Σ(score_i × weight_i) / Σ(weight_i)
```
Mapping auf Rating:
- `avg < 1.5` → Not
- `avg < 2.5` → Partially
- `avg < 3.5` → Nearly
- `avg ≥ 3.5` → Fully
### Zwei Assessment-Ebenen
1. **Kategorie-Level (live, während Gesprächsbeitrag):** `ConversationSkillScore.criteriaId``FeedbackCategory.id`
Schnelle Bewertung während ein Institutee spricht. Optional, da im Hektik oft nicht machbar.
2. **Kriterium-Level (Gesamtbewertung am Ende des Meetings):** `Assessment.criteriaId``FeedbackCriterionItem.id`
Detaillierte Bewertung je Kriterium nach dem Meeting. Grundlage für die Kategorie-Farbkodierung im Gesamtbewertungs-Tab.
Verbindendes drittes Element: **Kriterium-Zuordnung einzelner Protokollzeilen** (`ConversationEntry.lineTags`). Der Lead schreibt während des Gesprächs einen zusammenhängenden, mehrzeiligen Beitrag pro Sprecher-Block; nachträglich (nicht während des Tippens, um den Schreibfluss nicht zu stören) kann jede einzelne Zeile über ein kleines Tag-Symbol direkt einem Kriterium zugeordnet werden. Diese Zuordnung ist die Grundlage für den Notation-Vorschlag (siehe unten) und fließt auch strukturiert in den KI-Prompt ein.
---
## Bewertungs-Vorschläge
Die App leitet an zwei Stellen automatisch einen Bewertungs-Vorschlag ab — beide bleiben reine Vorschläge, die der Lead frei übernehmen oder überschreiben kann.
### 1. Notation-Vorschlag in der Gesamtbewertung (pro Meeting)
Die Schnellnotations-Symbole (siehe unten) entsprechen einer Bewertungsstufe: `!` → Not, `(!)` → Partially, `(+)` → Nearly, `+` → Fully. Ist eine notierte Protokollzeile einem Kriterium zugeordnet (siehe oben), errechnet die App daraus einen Vorschlag für die Gesamtbewertung dieses Kriteriums ("Vorschlag aus Protokoll" mit Übernehmen-Button). Bei mehreren getaggten Zeilen zum selben Kriterium wird gemittelt. Jede Kategorie-Kopfzeile zeigt zusätzlich — auch zugeklappt — wie viele ihrer Kriterien einen offenen Vorschlag haben.
Füllwörter oder sprachliche Weichmacher ("ein bisschen") werden nicht automatisch erkannt, sondern über ein eigenes, niedrig gewichtetes Kriterium abgebildet, das ganz normal getaggt und notiert wird.
### 2. Zeitgewichteter Vorschlag über die Assignment-Laufzeit (`/evaluation`, Abschluss-Feedback)
Über mehrere Meetings hinweg gewichtet die App spätere Bewertungen stärker als frühere (Gewichtungsfaktor konfigurierbar unter Config → Gewichtung) und erkennt eine Verbesserung oder Verschlechterung eines Institutees über die Zeit. Der Vorschlag erscheint als Badge auf der Abschluss-Feedback-Seite, mit „Übernehmen" für den Bewertungswert und „Trend in Text übernehmen" für einen automatisch formulierten Hinweis auf die Entwicklung in Achievements/Development Needs.
Beide Vorschlags-Mechanismen greifen nicht in die manuell gepflegten Endergebnisse ein (`Assessment.score`, `FeedbackCategoryRating`) — sie liefern nur einen Ausgangspunkt.
---
## Feedback-Struktur (Abschluss-Feedback)
Die Feedback-Struktur ist vollständig konfigurierbar und von der Meeting-Bewertungsstruktur **getrennt**. Sie spiegelt das Capgemini-Kompetenzmodell wider:
| Dimension | Kategorien (Beispiele) |
|---|---|
| Mindset, Commitment, Collaboration | Persönliche Einstellung, Professionalität, Commitment, Kommunikationsfähigkeit, Zusammenarbeit |
| Running Our Projects | Ergebnisverantwortung, Arbeitsstil, Kundenmanagement, Lieferzeiten |
| Growing our People | Networking, Learning und Development |
| Functional & Technical Skills | Qualität des Inhalts, Inhaltliche Vollständigkeit, Qualität der Unterlage, Prozesstreue |
| Innovation und Asset Development | Innovation |
Das Abschluss-Feedback (`AssignmentFeedbackPage`) erlaubt:
- Manuelle Bewertung je Kategorie (N/A bis Fully)
- KI-gestützten Textentwurf via OpenRouter API (GPT-4o, Claude, Gemini)
- Manuell editierbare Textfelder „Achievements" und „Development Needs" je Dimension
- Status-Toggle: Entwurf → Final
---
## Protokoll-Notation
Im Gesprächsprotokoll unterstützt die App eine Schnellnotations-Syntax, die farbig gerendert wird:
| Symbol | Bedeutung | Darstellung |
|---|---|---|
| `+` | Positiv | grün |
| `(+)` | Positiv mit Abstrichen | grün (gedimmt) |
| `!` | Negativ | rot |
| `(!)` | Negativ mit Abstrichen | rot (gedimmt) |
| `>` | Einwand / Kundeninput | blau |
| `[…]` | Slide-/Dokument-Referenz | grau |
---
## Export-Funktionen
### Meeting-Export
**Format:** `{AssignmentNummer}_{Datum}_{PhasenLabel}{-#Nr}.{md|json}`
**Beispiel:** `CGI-2024-001_02-07-2026_Alignment Call-2.md`
- **Markdown:** Lesbare Dokumentation mit Protokoll, Bewertungen und Notizen — getaggte Protokollzeilen zeigen zusätzlich das zugeordnete Kriterium
- **JSON:** Vollständige Datensicherung eines einzelnen Meetings, inklusive Zeilen-Tags
### Datenbank-Backup
Vollständiger Export aller Tabellen als JSON-Datei. Import löscht alle Daten und stellt den gesicherten Stand wieder her. Backup sollte nach jedem Meeting erstellt werden.
---
## Datenschutz und Datenhaltung
- Alle Daten bleiben im **lokalen Browser-IndexedDB** (Dexie.js)
- Kein Backend, kein Cloud-Sync
- Personenbezogene Daten: Namen von Institutees, Kundennamen, Gesprächsnotizen
- GDPR-relevant: Backup-Dateien müssen sicher (OneDrive, lokaler Ordner) aufbewahrt werden
- **Kein Public Cloud Storage** erlaubt (explizite Anforderung)
- Zukünftig geplant: SQLite WASM + OPFS für robustere lokale Speicherung ohne Installation