upd
This commit is contained in:
parent
3287242f6f
commit
d96deacf9f
4 changed files with 590 additions and 582 deletions
|
|
@ -0,0 +1,279 @@
|
|||
<!-- status: plan -->
|
||||
<!-- started: 2026-04-13 -->
|
||||
<!-- component: gateway | frontend-nyla | platform -->
|
||||
|
||||
# Compliance & Audit View + Navigations-Rubrik "Übersichten"
|
||||
|
||||
## Beschreibung und Kontext
|
||||
|
||||
**Was:** Zwei zusammenhängende Verbesserungen:
|
||||
1. **Neue Navigations-Rubrik "Übersichten"** unter "Meine Sicht" — dorthin die bestehende "Integrationen"-Seite verschieben und eine neue "Compliance & AI-Audit"-Seite hinzufügen.
|
||||
2. **Compliance & AI-Audit-Seite** — ein mächtiges Werkzeug für Compliance-Manager und Datenschutzbeauftragte, um alle AI-Datenflüsse und Audit-Ereignisse transparent einzusehen.
|
||||
|
||||
**Warum jetzt:** Investoren und Treuhänder fragen nach Nachvollziehbarkeit und Datenschutz-Compliance. Eine dedizierte Audit-Ansicht schafft Vertrauen und ist ein Differenzierungsmerkmal gegenüber generischen AI-Tools. Für die Kundendemos ist dies ein starkes Signal: "Jeder AI-Call ist nachvollziehbar."
|
||||
|
||||
**Business-Treiber:**
|
||||
- Treuhänder unterliegen Revisionsanforderungen — sie müssen nachweisen können, welche Daten an welche AI-Modelle gesendet wurden.
|
||||
- Investoren wollen sehen, dass PORTA Enterprise-ready ist (Audit-Trail, Compliance).
|
||||
- Datenschutzbeauftragte brauchen eine Übersicht über alle AI-Datenflüsse pro Mandant.
|
||||
|
||||
**Abhängigkeiten:**
|
||||
- Bestehendes `AuditLogEntry`-System (`gateway/modules/shared/auditLogger.py`) — schreibt bereits Security/GDPR/Permission-Events.
|
||||
- Bestehendes Billing-System (`serviceBilling.recordUsage`) — zeichnet AI-Usage pro Call auf (Provider, Model, Kosten, Bytes).
|
||||
- Bestehende Integrationsseite (`IntegrationsOverviewPage.tsx`) — wird in neue Rubrik verschoben.
|
||||
- Navigation-System (`mainSystem.py` → `NAVIGATION_SECTIONS`) — muss um Subgroup erweitert werden.
|
||||
|
||||
**Risiko bei Nicht-Umsetzung:** Kunden sehen PORTA als "Black Box" — keine Transparenz über AI-Datenflüsse. Compliance-Anforderungen können nicht erfüllt werden.
|
||||
|
||||
## Fokus und kritische Details
|
||||
|
||||
### Ist-Zustand
|
||||
|
||||
**Navigation:**
|
||||
- "Integrationen" ist ein Top-Level-Item unter "Meine Sicht" (order 15).
|
||||
- Es gibt keine Rubrik "Übersichten".
|
||||
|
||||
**Audit-Logging:**
|
||||
- `AuditLogEntry` erfasst: userId, mandateId, featureInstanceId, category, action, resourceType, resourceId, details, IP, userAgent, success/error.
|
||||
- Kategorien: `access`, `key`, `data`, `security`, `gdpr`, `permission`, `system`.
|
||||
- **Kein API-Endpoint** zum Lesen von Audit-Logs im Frontend — `getAuditLogs()` existiert nur intern auf `AuditLogger`.
|
||||
|
||||
**AI-Usage-Logging:**
|
||||
- `serviceBilling.recordUsage` erfasst pro AI-Call: mandateId, userId, featureInstanceId, featureCode, aicoreProvider, aicoreModel, priceCHF, processingTime, bytesSent, bytesReceived, errorCount.
|
||||
- **Fehlend:** Der tatsächliche Content (Prompt/Response) wird nicht persistiert — nur Metadaten und Kosten.
|
||||
- Billing-Transaktionen sind über `GET /api/billing/transactions` abrufbar, aber nicht als Audit-View aufbereitet.
|
||||
|
||||
### Architektur-Entscheid: AI-Content-Audit-Log
|
||||
|
||||
Für den Compliance-View brauchen wir ein **neues AI-Audit-Log**, das pro AI-Interaktion speichert:
|
||||
- Wer (User), wann, in welcher Instanz, mit welchem Modell
|
||||
- Was gesendet wurde (Content-Hash oder Content selbst, konfigurierbar)
|
||||
- Was empfangen wurde (Response-Zusammenfassung)
|
||||
- Ob Neutralisierung aktiv war (und welche Mappings angewandt wurden)
|
||||
- Download-Möglichkeit für den vollständigen Content
|
||||
|
||||
**Wichtig:** Content-Speicherung muss **mandantenspezifisch konfigurierbar** sein (manche Mandanten wollen Full-Content-Audit, andere nur Metadaten). RBAC muss sicherstellen, dass nur berechtigte Rollen (Compliance-Manager, Admin) Zugriff haben.
|
||||
|
||||
### Kritische Stellen
|
||||
|
||||
- **Datenmenge:** AI-Audit-Logs können schnell gross werden — Pagination und Zeitraum-Filter sind Pflicht.
|
||||
- **RBAC:** Audit-Daten sind sensitiv — nur Mandate-Admins und Compliance-Rollen dürfen sie sehen.
|
||||
- **Performance:** Statistik-Aggregationen (Tab C) müssen effizient sein — ggf. materialisierte Views oder Pre-Aggregation.
|
||||
- **Content-Speicherung:** Vollständiger Prompt/Response-Content kann gross sein — separate Tabelle oder Object Storage.
|
||||
|
||||
## Ziel und Nicht-Ziele
|
||||
|
||||
**Ziel:**
|
||||
- Neue Subgroup "Übersichten" unter "Meine Sicht" mit Integrationen + Compliance-Seite
|
||||
- Compliance-Seite mit 3 Tabs:
|
||||
- **Tab A: AI-Datenfluss-Log** — Tabelle: wann, wer, welche Instanz, welches AI-Modell, welche Daten, Download
|
||||
- **Tab B: Audit-Log** — Tabelle: alle Security/GDPR/Permission-Events (bestehende `AuditLogEntry`-Daten)
|
||||
- **Tab C: Audit-Statistik** — Grafische Auswertung mit Zeitraum- und Kontext-Filtern
|
||||
- API-Endpoints für alle drei Tabs mit RBAC-Filterung
|
||||
- AI-Content-Audit-Log als neues Datenmodell im Gateway
|
||||
|
||||
**Explizit NICHT:**
|
||||
- Kein Real-Time-Streaming der Logs (Polling/Refresh reicht)
|
||||
- Keine Änderung am bestehenden Billing-System (ergänzend, nicht ersetzend)
|
||||
- Kein Log-Export als PDF/Excel in V1 (kommt ggf. später)
|
||||
- Keine mandantenübergreifende Ansicht für Nicht-SysAdmins
|
||||
|
||||
## Betroffene Module
|
||||
|
||||
- **Gateway:**
|
||||
- `modules/datamodels/datamodelAiAudit.py` (neu — AI-Audit-Log Datenmodell)
|
||||
- `modules/shared/aiAuditLogger.py` (neu — Logger für AI-Datenflüsse)
|
||||
- `modules/routes/routeAudit.py` (neu — API-Endpoints für Audit-Daten)
|
||||
- `modules/system/mainSystem.py` (Navigation: neue Subgroup "Übersichten")
|
||||
- `modules/serviceCenter/services/serviceAi/mainServiceAi.py` (AI-Audit-Log-Einträge schreiben)
|
||||
- `modules/serviceCenter/services/serviceAgent/mainServiceAgent.py` (Agent-Calls loggen)
|
||||
- **Frontend:**
|
||||
- `pages/ComplianceAuditPage.tsx` (neu — Hauptseite mit 3 Tabs)
|
||||
- `api/auditApi.ts` (neu — API-Funktionen)
|
||||
- `hooks/useAudit.ts` (neu — Hooks für Audit-Daten)
|
||||
- `config/pageRegistry.tsx` (Icon-Eintrag)
|
||||
- `App.tsx` (Route)
|
||||
- `components/Navigation/MandateNavigation.tsx` (ggf. Anpassung für Subgroup-Rendering)
|
||||
- **DB-Migration:** ja — neue Tabelle `ai_audit_log`
|
||||
- **Andere Komponenten:** keine
|
||||
|
||||
## Entscheidungen
|
||||
|
||||
| Datum | Entscheidung | Begründung |
|
||||
|-------|-------------|------------|
|
||||
| 2026-04-13 | Neues `AiAuditLog`-Modell statt Erweiterung von `AuditLogEntry` | AuditLogEntry ist für Security/GDPR optimiert. AI-Datenflüsse haben andere Felder (Model, Tokens, Content). Trennung hält beide Systeme sauber. |
|
||||
| 2026-04-13 | Content-Speicherung als opt-in pro Mandant | Datenschutz: nicht jeder Mandant will, dass Prompts/Responses gespeichert werden. Default: nur Metadaten. |
|
||||
| 2026-04-13 | "Übersichten" als Subgroup unter "Meine Sicht" (nicht als eigene Section) | Konsistent mit bestehendem Pattern (Basisdaten, Nutzung sind auch Subgroups). Kein neuer Top-Level-Block nötig. |
|
||||
| 2026-04-13 | RBAC: Mandate-Admin + neue Rolle `compliance-viewer` | Nicht jeder Admin braucht Audit-Zugriff. Dedizierte Rolle ermöglicht feingranulare Kontrolle. |
|
||||
|
||||
---
|
||||
|
||||
## Umsetzungs-Checkliste
|
||||
|
||||
### Phase 1: Navigation — Subgroup "Übersichten" (Gateway + Frontend)
|
||||
|
||||
- [ ] **`mainSystem.py`:** Neue Subgroup `system-overviews` ("Übersichten") unter Section `system` erstellen
|
||||
- [ ] **`mainSystem.py`:** "Integrationen" von Top-Level-Item in die neue Subgroup verschieben
|
||||
- [ ] **`mainSystem.py`:** Neues Item "Compliance & Audit" in Subgroup `system-overviews` hinzufügen
|
||||
- `objectKey: "ui.system.complianceAudit"`, `path: "/compliance-audit"`, `icon: "FaShieldAlt"`
|
||||
- [ ] **`pageRegistry.tsx`:** Icon-Eintrag für `page.system.complianceAudit`
|
||||
- [ ] **`App.tsx`:** Route `/compliance-audit` → `ComplianceAuditPage`
|
||||
- [ ] **Frontend Navigation:** Sicherstellen, dass `MandateNavigation.tsx` Subgroups unter "Meine Sicht" korrekt rendert (bestehendes Pattern: Basisdaten, Nutzung)
|
||||
|
||||
### Phase 2: Backend — AI-Audit-Log Datenmodell & Logger
|
||||
|
||||
- [ ] **`datamodelAiAudit.py`** (neu) — Datenmodell:
|
||||
|
||||
```python
|
||||
class AiAuditLogEntry(BaseModel):
|
||||
id: str
|
||||
timestamp: float
|
||||
userId: str
|
||||
username: Optional[str]
|
||||
mandateId: str
|
||||
featureInstanceId: Optional[str]
|
||||
featureCode: Optional[str]
|
||||
instanceLabel: Optional[str]
|
||||
|
||||
aiProvider: str # z.B. "azure-openai", "anthropic"
|
||||
aiModel: str # z.B. "gpt-4o", "claude-3.5-sonnet"
|
||||
operationType: str # z.B. "chat", "embedding", "image", "tts"
|
||||
|
||||
tokensInput: Optional[int]
|
||||
tokensOutput: Optional[int]
|
||||
processingTimeMs: Optional[int]
|
||||
priceCHF: Optional[float]
|
||||
|
||||
neutralizationActive: bool = False
|
||||
neutralizationMappingsCount: Optional[int]
|
||||
|
||||
contentStored: bool = False
|
||||
contentInputHash: Optional[str] # SHA-256 des Inputs
|
||||
contentInputPreview: Optional[str] # Erste 200 Zeichen (immer)
|
||||
contentOutputPreview: Optional[str] # Erste 200 Zeichen (immer)
|
||||
|
||||
# Full content nur wenn Mandant opt-in hat
|
||||
contentInputFull: Optional[str]
|
||||
contentOutputFull: Optional[str]
|
||||
|
||||
success: bool = True
|
||||
errorMessage: Optional[str]
|
||||
```
|
||||
|
||||
- [ ] **`aiAuditLogger.py`** (neu) — Service zum Schreiben von AI-Audit-Einträgen
|
||||
- `logAiCall(...)` — schreibt einen Eintrag
|
||||
- `getAiAuditLogs(mandateId, filters)` — liest Einträge mit Pagination
|
||||
- `getAiAuditStats(mandateId, timeRange, groupBy)` — Aggregationen für Tab C
|
||||
- [ ] **DB-Tabelle** `ai_audit_log` anlegen (via DatabaseConnector-Pattern)
|
||||
|
||||
### Phase 3: Backend — AI-Audit in AI-Pipeline integrieren
|
||||
|
||||
- [ ] **`mainServiceAi.py`:** Nach jedem AI-Call `aiAuditLogger.logAiCall()` aufrufen
|
||||
- Provider, Model, Tokens, Processing-Time aus `AiCallResponse`
|
||||
- Content (Input/Output) nur wenn Mandant opt-in
|
||||
- Neutralisierungs-Status aus Call-Context
|
||||
- [ ] **`mainServiceAgent.py`:** Agent-Calls ebenfalls loggen (delegiert an serviceAi)
|
||||
- [ ] **Neutralisierungs-Integration:** Wenn Neutralisierung aktiv, `neutralizationActive=True` + Mapping-Count loggen
|
||||
|
||||
### Phase 4: Backend — API-Endpoints
|
||||
|
||||
- [ ] **`routeAudit.py`** (neu) — API-Endpoints:
|
||||
- `GET /api/audit/ai-log` — AI-Datenfluss-Log (Tab A)
|
||||
- Query-Params: `mandateId`, `userId`, `featureInstanceId`, `aiModel`, `dateFrom`, `dateTo`, `limit`, `offset`
|
||||
- RBAC: Mandate-Admin oder `compliance-viewer`
|
||||
- `GET /api/audit/ai-log/{entryId}/content` — Full Content Download (Tab A Detail)
|
||||
- RBAC: Mandate-Admin oder `compliance-viewer`
|
||||
- `GET /api/audit/log` — Security/GDPR Audit-Log (Tab B)
|
||||
- Query-Params: `mandateId`, `userId`, `category`, `action`, `dateFrom`, `dateTo`, `limit`, `offset`
|
||||
- RBAC: Mandate-Admin oder `compliance-viewer`
|
||||
- `GET /api/audit/stats` — Audit-Statistiken (Tab C)
|
||||
- Query-Params: `mandateId`, `timeRange` (7d/30d/90d/custom), `groupBy` (model/user/feature/day)
|
||||
- RBAC: Mandate-Admin oder `compliance-viewer`
|
||||
|
||||
### Phase 5: Frontend — Compliance & Audit Page
|
||||
|
||||
- [ ] **`ComplianceAuditPage.tsx`** (neu) — Hauptseite mit 3 Tabs:
|
||||
|
||||
**Tab A: AI-Datenfluss-Log**
|
||||
- Tabelle mit Spalten: Zeitpunkt, User, Instanz (Feature + Label), AI-Modell, Typ, Tokens (In/Out), Kosten, Neutralisierung (Ja/Nein), Preview, Download-Button
|
||||
- Filter: Zeitraum, User, Feature, Modell
|
||||
- Sortierung: nach Zeitpunkt (neueste zuerst)
|
||||
- Pagination
|
||||
- Download-Button pro Eintrag → öffnet Detail-Modal oder lädt Content
|
||||
|
||||
**Tab B: Audit-Log**
|
||||
- Tabelle mit Spalten: Zeitpunkt, User, Kategorie, Aktion, Ressource, Details, Erfolg, IP
|
||||
- Filter: Zeitraum, User, Kategorie, Aktion
|
||||
- Farbcodierung: Erfolg (grün), Fehler (rot), Warnung (gelb)
|
||||
- Pagination
|
||||
|
||||
**Tab C: Audit-Statistik**
|
||||
- Zeitraum-Selektor (7 Tage, 30 Tage, 90 Tage, Custom)
|
||||
- Kontext-Filter (Mandant, Feature, User)
|
||||
- Charts:
|
||||
- AI-Calls pro Tag (Liniendiagramm)
|
||||
- AI-Calls nach Modell (Donut/Pie)
|
||||
- AI-Calls nach Feature (Balkendiagramm)
|
||||
- Kosten-Verlauf (Liniendiagramm)
|
||||
- Top-User nach AI-Usage (Balkendiagramm)
|
||||
- Neutralisierungs-Quote (Gauge oder Prozent-Anzeige)
|
||||
|
||||
- [ ] **`auditApi.ts`** (neu) — API-Funktionen für alle Endpoints
|
||||
- [ ] **`useAudit.ts`** (neu) — Hooks: `useAiAuditLog()`, `useAuditLog()`, `useAuditStats()`
|
||||
- [ ] **CSS/Styling** — konsistent mit bestehenden Admin-Seiten, Dark-Mode-Support
|
||||
|
||||
### Querschnitt-Checks
|
||||
|
||||
- [ ] API-Endpunkte: 4 neue Endpoints unter `/api/audit/`
|
||||
- [ ] DB-Schema / Migration: ja — neue Tabelle `ai_audit_log`
|
||||
- [ ] Frontend-Komponenten: `ComplianceAuditPage` (neu), Navigation-Anpassung
|
||||
- [ ] RBAC / Permissions: Mandate-Admin + neue Rolle `compliance-viewer`
|
||||
- [ ] Neutralisierung betroffen? Ja — Neutralisierungs-Status wird im AI-Audit-Log erfasst
|
||||
- [ ] Navigation / Routing: Neue Subgroup "Übersichten", Integrationen verschoben
|
||||
- [ ] Billing-Impact? Nein (ergänzend zu Billing, nicht ersetzend)
|
||||
- [ ] i18n: Alle Labels mehrsprachig (bestehendes Pattern)
|
||||
|
||||
---
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
| # | Kriterium (Given-When-Then) | Prio |
|
||||
|---|---------------------------|------|
|
||||
| 1 | Given Navigation "Meine Sicht", When User die Sidebar öffnet, Then gibt es eine Subgroup "Übersichten" mit "Integrationen" und "Compliance & Audit" | must |
|
||||
| 2 | Given Compliance-Seite Tab A, When ein Compliance-Manager die Seite öffnet, Then sieht er eine Tabelle aller AI-Calls seines Mandanten mit: Zeitpunkt, User, Instanz, Modell, Tokens, Kosten, Neutralisierungs-Status | must |
|
||||
| 3 | Given AI-Audit-Log-Eintrag mit gespeichertem Content, When der User auf "Download" klickt, Then erhält er den vollständigen Input/Output des AI-Calls | must |
|
||||
| 4 | Given Compliance-Seite Tab B, When der User den Audit-Log öffnet, Then sieht er alle Security/GDPR/Permission-Events seines Mandanten als Tabelle | must |
|
||||
| 5 | Given Compliance-Seite Tab C, When der User "Letzte 30 Tage" wählt, Then sieht er grafische Auswertungen: AI-Calls/Tag, Calls nach Modell, Kosten-Verlauf | must |
|
||||
| 6 | Given ein User ohne Compliance-Rolle, When er `/compliance-audit` aufruft, Then sieht er die Seite nicht in der Navigation und erhält 403 beim API-Call | must |
|
||||
| 7 | Given Neutralisierung aktiv bei einem AI-Call, When der Call im AI-Audit-Log erscheint, Then ist `neutralizationActive=true` und die Mapping-Anzahl sichtbar | should |
|
||||
| 8 | Given AI-Audit-Log mit 10.000+ Einträgen, When der User die Seite öffnet, Then lädt die Tabelle in <2s (Pagination, keine Full-Load) | should |
|
||||
|
||||
## Testplan
|
||||
|
||||
| ID | AC | Art | Automatisiert | Repo-Pfad | Status |
|
||||
|----|----|-----|--------------|-----------|--------|
|
||||
| T1 | 1 | e2e | nein | Manuell: Navigation prüfen | pending |
|
||||
| T2 | 2, 3 | api | ja | gateway/tests/audit/test_ai_audit_log.py | pending |
|
||||
| T3 | 4 | api | ja | gateway/tests/audit/test_audit_log_api.py | pending |
|
||||
| T4 | 5 | e2e | nein | Manuell: Charts prüfen | pending |
|
||||
| T5 | 6 | api | ja | gateway/tests/audit/test_audit_rbac.py | pending |
|
||||
| T6 | 7 | integration | ja | gateway/tests/audit/test_ai_audit_neutralization.py | pending |
|
||||
| T7 | 8 | performance | nein | Manuell: Load-Test mit >10k Einträgen | pending |
|
||||
|
||||
## Links
|
||||
|
||||
- Bestehendes Audit-System: `gateway/modules/shared/auditLogger.py`
|
||||
- Audit-Datenmodell: `gateway/modules/datamodels/datamodelAudit.py`
|
||||
- AI-Datenmodell: `gateway/modules/datamodels/datamodelAi.py`
|
||||
- Billing-Service: `gateway/modules/serviceCenter/services/serviceBilling/mainServiceBilling.py`
|
||||
- AI-Service: `gateway/modules/serviceCenter/services/serviceAi/mainServiceAi.py`
|
||||
- Navigation: `gateway/modules/system/mainSystem.py`
|
||||
- Integrationsseite: `frontend_nyla/src/pages/IntegrationsOverviewPage.tsx`
|
||||
- Navigation-Rendering: `frontend_nyla/src/components/Navigation/MandateNavigation.tsx`
|
||||
|
||||
## Abschluss
|
||||
|
||||
- [ ] b-reference/ aktualisiert (`b-reference/platform/audit.md` — neu anlegen)
|
||||
- [ ] b-reference/gateway/architecture.md aktualisiert (AI-Audit-Logger)
|
||||
- [ ] TOPICS.md aktualisiert (neues Thema "Compliance & Audit")
|
||||
- [ ] Dieses Dokument → z-archive/ verschoben
|
||||
|
|
@ -1,539 +0,0 @@
|
|||
<!-- status: plan -->
|
||||
<!-- started: 2026-04-12 -->
|
||||
<!-- component: gateway | frontend-nyla | platform -->
|
||||
|
||||
# Investor-Demo Dienstag — Live Product Demo (20 Min)
|
||||
|
||||
## Beschreibung und Kontext
|
||||
|
||||
**Was:** 20-Minuten Live-Demo von PowerON PORTA für Investoren und Treuhänder am Dienstag.
|
||||
**Wer präsentiert:** Kollegen präsentieren Keynotes (Use Cases), Patrick (CTO/CEO) zeigt die Plattform live.
|
||||
**Publikum:** Investoren (ROI, Skalierbarkeit, Marktdifferenzierung) + Treuhänder (Praxisnutzen, Datenschutz, Zeitersparnis).
|
||||
|
||||
**Business-Treiber:** Die Demo muss in 20 Min zeigen, dass PowerON kein Konzept ist, sondern ein funktionierendes Produkt mit echtem Kundennutzen. Investoren wollen Traktion sehen, Treuhänder wollen sich wiedererkennen.
|
||||
|
||||
**Abhängigkeiten:**
|
||||
- Trustee-Tooling-Plan: `c-work/1-plan/2026-04-customer-trustee-tooling-and-demo-prep.md` (Phase 1–3 erledigt ✅)
|
||||
- Customer Demo Enablement: `c-work/1-plan/2026-04-customer-demo-enablement.md` (Analyse vorhanden)
|
||||
- UI-Enhancements: `c-work/1-plan/2026-04-porta-ui-enhancements-team-meeting.md`
|
||||
|
||||
**Risiko bei Nicht-Umsetzung:** Demo scheitert live, Investoren sehen nur Slides statt funktionierendes Produkt. Vertrauensverlust.
|
||||
|
||||
---
|
||||
|
||||
## Fokus und kritische Details
|
||||
|
||||
### Was die Audienz überzeugt (Schritt 1 — gemeinsam klären)
|
||||
|
||||
**Investoren wollen sehen:**
|
||||
1. **Funktionierendes Produkt** — kein Mockup, echte Datenverarbeitung
|
||||
2. **Marktdifferenzierung** — warum nicht ChatGPT/Copilot/Langdock?
|
||||
3. **Wiederholbarkeit** — keine Einmal-Demo, sondern konfigurierbare Workflows
|
||||
4. **Skalierbarkeit** — Multi-Tenant, Multi-LLM, Usage-Based
|
||||
5. **Internationalisierung** — neue Sprache in 5 Min, AI-übersetzt, kein Redeploy
|
||||
|
||||
**Treuhänder wollen sehen:**
|
||||
1. **Zeitersparnis** — vorher 5–15 Min/Beleg → nachher Sekunden
|
||||
2. **Datenschutz** — keine Kundendaten an OpenAI/Google
|
||||
3. **Integration** — Abacus/Bexio/SharePoint ohne Systemwechsel
|
||||
4. **Kontrolle** — Audit-Trail, Nachvollziehbarkeit
|
||||
|
||||
### Drei Live Use Cases (aus Keynote-Deck)
|
||||
|
||||
| # | Use Case | Dauer | Wow-Effekt | Technische Basis |
|
||||
|---|----------|-------|------------|------------------|
|
||||
| UC1 | **Treuhand: Automatisierte Spesenverarbeitung** | 6 Min | Beleg → OCR → Kontierung → Export in Sekunden | Trustee-Feature, Graph-Editor Workflow, SharePoint-Nodes |
|
||||
| UC2 | **Immobilien: Automatisierte Machbarkeitsstudie** | 4 Min | Grundstück eingeben → 6 Min statt 4 Std. Recherche | RealEstate-Feature, Agent + webSearch + readUrl |
|
||||
| UC3 | **Enterprise: AI Knowledge Workspace** | 4 Min | Frage stellen → sofortige Antwort mit Quellenangabe | AI Workspace (nicht Chatbot), RAG auto-indexiert, Neutralisierung |
|
||||
| UC4 | **Sprach-Deployment: Neue Sprache in 5 Minuten** | 3 Min | Sprache anlegen → AI uebersetzt → UI sofort mehrsprachig | i18n-System, AI-Batch-Translation, Admin-UI |
|
||||
| UC5 | **Integrationen: Architektur-Visualisierung** | 1 Min | Komplette Integrationslandschaft auf einen Blick | Neue Systemseite, Custom React-Komponente |
|
||||
| — | **Neutralisierung (Querschnitt)** | 3 Min | PII live entfernen + Re-Personalisierung | Neutralisierung-Feature, Private LLM |
|
||||
|
||||
### Kritische Stellen
|
||||
|
||||
- **Graph-Editor Performance:** Workflow muss flüssig laufen (keine 15s-Wartezeiten)
|
||||
- **Neutralisierung live zeigen:** Muss am AI-Gate greifen, nicht nur im Playground
|
||||
- **Stabile Testdaten:** Jeder Demo-Lauf muss identische Ergebnisse liefern
|
||||
- **Internet-Abhängigkeit:** UC2 (webSearch) braucht stabiles Internet — Fallback vorbereiten
|
||||
- **LLM-Latenz:** Multi-LLM-Routing muss schnell sein — bevorzugt Azure OpenAI (geringste Latenz)
|
||||
|
||||
---
|
||||
|
||||
## Ziel und Nicht-Ziele
|
||||
|
||||
**Ziel:**
|
||||
- Drei Use Cases end-to-end live lauffähig auf einer Demo-Instanz
|
||||
- Bootstrap-Modul `demo` das den kompletten Demo-Zustand idempotent aufbaut
|
||||
- Detailliertes Drehbuch mit Timing, Talking Points und Fallbacks
|
||||
- Automatisiertes Testdrehbuch (pytest) das die Demo-Schritte verifiziert
|
||||
- Alles auf INT-Umgebung deployt und getestet bis Montag Abend
|
||||
|
||||
**Explizit NICHT:**
|
||||
- Keine neuen Features bauen (nutzen was da ist)
|
||||
- Kein neues Frontend (UI-Enhancements separat)
|
||||
- Keine neuen Connector-Implementierungen
|
||||
- Keine Änderung am Billing für die Demo
|
||||
|
||||
---
|
||||
|
||||
## Betroffene Module
|
||||
|
||||
- **Gateway:** `modules/demoConfigs/` (neu — Demo-Config-System), `modules/routes/routeAdminDemoConfig.py` (neu), `modules/system/mainSystem.py` (Nav-Eintrag), `features/trustee/`, `features/workspace/` (RAG fuer UC3), `features/neutralization/`, `features/graphicalEditor/`
|
||||
- **Frontend:** `pages/admin/AdminDemoConfigPage.tsx` (neu), `IntegrationsOverviewPage.tsx` (erledigt), `config/pageRegistry.tsx` (Eintrag), `App.tsx` (Route)
|
||||
- **DB-Migration:** nein (nur Daten-Seeding)
|
||||
- **Config:** `gateway/config.ini` (Demo_RMA_* Credentials)
|
||||
- **Andere Komponenten:** Testdaten (PDF, Excel, CSV) in `gateway/demoData/`, Demo-Skript (Markdown), Test-Suite (pytest)
|
||||
|
||||
---
|
||||
|
||||
## Entscheidungen
|
||||
|
||||
| Datum | Entscheidung | Begründung |
|
||||
|-------|-------------|------------|
|
||||
| 2026-04-12 | Bootstrap-Modul statt manuellem Setup | Idempotent, reproduzierbar, jeder kann die Demo aufsetzen |
|
||||
| 2026-04-12 | UC2 (Immobilien) als Agent-Demo statt RealEstate-Feature voll nutzen | RealEstate-Feature ist noch Shell; Agent + webSearch zeigt dieselbe Story |
|
||||
| 2026-04-12 | Neutralisierung als Querschnitt in UC1 + UC3 einbauen, nicht als eigenen Block | Natürlicher Flow, keine "Feature-Parade" |
|
||||
| 2026-04-12 | Testdrehbuch als pytest-Suite unter `gateway/tests/demo/` | Automatisch prüfbar, CI-fähig, reproduzierbar |
|
||||
| 2026-04-12 | Fallback-Screenshots für UC2 (Internet-abhängig) | Demo darf nicht an WLAN scheitern |
|
||||
| 2026-04-13 | UC3 nutzt AI Workspace statt Chatbot fuer RAG | Chatbot hat kein eigenes RAG (nur SQL + Tavily). Workspace hat vollstaendiges RAG: Upload → auto-Indexing (Extraktion + Embeddings) → semantische Suche via `buildAgentContext`. Einfacher, staerker, ein Interface fuer alles. |
|
||||
|
||||
---
|
||||
|
||||
## Umsetzungs-Checkliste
|
||||
|
||||
### Phase 0: Klärung — Was zeigen wir? (So Abend / Mo Morgen)
|
||||
|
||||
- [ ] **Use-Case-Auswahl bestätigen** mit Kollegen (Keynote-Alignment)
|
||||
- UC1: Treuhand Spesenverarbeitung → zeigt Plug&Play + Workflow
|
||||
- UC2: Immobilien Machbarkeitsstudie → zeigt AI-Agent-Power + Zeitersparnis
|
||||
- UC3: AI Knowledge Workspace → zeigt RAG + Enterprise-Readiness (via Workspace, nicht Chatbot)
|
||||
- UC4: Sprach-Deployment → zeigt Skalierbarkeit + Enterprise-Readiness (neue Sprache in 5 Min)
|
||||
- UC5: Integrationen → zeigt Plug&Play-Architektur visuell (Datenquellen → PORTA → Services)
|
||||
- Querschnitt: Neutralisierung → zeigt Privacy-First
|
||||
- [ ] **Demo-Storyline abstimmen:** Reihenfolge, Übergänge, wer was sagt
|
||||
- [ ] **Fallback-Strategie:** Was wenn ein UC live hängt? (→ vorbereitete Screenshots/Video)
|
||||
|
||||
### Phase 0.5: Demo-Config System (erledigt ✅)
|
||||
|
||||
- [x] **`gateway/modules/demoConfigs/`** — Modulares Demo-Config-System
|
||||
- `_baseDemoConfig.py` — Abstrakte Basisklasse mit `load()` / `remove()`
|
||||
- `__init__.py` — Auto-Discovery aller Config-Files im Ordner
|
||||
- `investorDemo2026.py` — Investor-Demo Konfiguration:
|
||||
- Mandant **HappyLife AG** (`happylife`): workspace (RAG fuer UC3), trustee(RMA), graphicalEditor, chatbot (inaktiv — UC3 nutzt Workspace), neutralization
|
||||
- Mandant **Alpina Treuhand AG** (`alpina-treuhand`): workspace, trustee(RMA), graphicalEditor, neutralization
|
||||
- User **Patrick Helvetia** (`p.motsch@poweron.swiss`): SysAdmin, Mitglied beider Mandanten
|
||||
- RMA-Credentials aus `config.ini` (Demo_RMA_*)
|
||||
- Billing, Neutralization-Config automatisch
|
||||
- [x] **Admin UI** unter `/admin/demo-config` (SysAdmin-only)
|
||||
- Listet alle verfuegbaren Demo-Configs
|
||||
- Pro Config: "Load" + "Remove" Buttons
|
||||
- API: `GET/POST /api/admin/demo-config`
|
||||
- [x] **`gateway/demoData/`** — Ordnerstruktur fuer Testdaten (Files manuell bereitstellen)
|
||||
- `invoices/`, `expenses/`, `knowledge-base/`
|
||||
|
||||
### Phase 1: Demo-Daten vorbereiten (Mo Vormittag)
|
||||
|
||||
- [ ] **RMA-Credentials** in `gateway/config.ini` eintragen (Demo_RMA_ApiBaseUrl, Demo_RMA_ClientName, Demo_RMA_ApiKey)
|
||||
- [ ] **Demo-Config laden** via Admin UI → `/admin/demo-config` → "Load"
|
||||
- [ ] **Demo-Testdaten** in `gateway/demoData/` bereitstellen:
|
||||
- `invoices/` — 3 Muster-Rechnungen (PDF): Handwerker, Bueromaterial, Versicherung
|
||||
- `expenses/` — 2 Spesenbelege (PDF): Reisekosten, Bewirtung
|
||||
- `tenant-dossier.pdf` — Fiktives Mieterdossier fuer Neutralisierung
|
||||
- `knowledge-base/` — 3-4 Firmen-Dokumente (Handbuch, FAQ, Prozessbeschreibung) fuer RAG
|
||||
|
||||
### Phase 2: Demo-Konfiguration pro Use Case (Mo Nachmittag)
|
||||
|
||||
#### UC1: Treuhand — Spesenverarbeitung
|
||||
|
||||
- [ ] **Trustee-Instanz konfigurieren** (Connector: RMA — Credentials via Demo-Config Bootstrap)
|
||||
- [ ] **Graph-Editor Workflow erstellen/aktivieren:**
|
||||
Trigger (manual) → SharePoint listFiles → Loop → downloadFile → extractFromFiles → processDocuments → syncToAccounting
|
||||
(System-Template "Treuhand: PDF-Klassifizierung & Trustee-Import" als Basis nutzen)
|
||||
- [ ] **SharePoint-Demo-Ordner** mit 3 Musterbelegen befüllen (oder lokaler Upload-Pfad)
|
||||
- [ ] **Demo-Prompt** vorbereiten: "Verarbeite die Belege im Eingangsordner und erstelle die Buchungen"
|
||||
- [ ] **Erwartetes Ergebnis dokumentieren:** Beleg → extrahierte Positionen → MWST-Code → Kontierung
|
||||
|
||||
#### UC2: Immobilien — Machbarkeitsstudie
|
||||
|
||||
- [ ] **Workspace-Instanz** mit RealEstate-Kontext konfigurieren
|
||||
- [ ] **Demo-Prompt** vorbereiten: "Erstelle eine Machbarkeitsstudie für das Grundstück an der Musterstrasse 42, 8001 Zürich. Analysiere Zonierung, Baurecht und Nutzungspotential."
|
||||
- [ ] **Agent-Tools sicherstellen:** `webSearch`, `readUrl`, `createChart` verfügbar
|
||||
- [ ] **Fallback:** Vorbereitete Ergebnis-Screenshots falls Internet ausfällt
|
||||
- [ ] **Erwartetes Ergebnis dokumentieren:** Automatische Datensammlung → BZO-Analyse → Zusammenfassung
|
||||
|
||||
#### UC3: Enterprise — AI Knowledge Workspace
|
||||
|
||||
> **Entscheidung:** UC3 nutzt den **AI Workspace** (nicht den Chatbot). Der Chatbot hat kein eigenes RAG-System
|
||||
> (er arbeitet mit SQL + Tavily). Der Workspace hat vollstaendiges RAG: Upload → automatisches Indexing
|
||||
> (Extraktion + Embeddings) → semantische Suche im Workspace-Chat via `buildAgentContext`.
|
||||
|
||||
- [ ] **Workspace-Instanz** in HappyLife AG verwenden (bereits via Bootstrap erstellt)
|
||||
- [ ] **Knowledge-Base befuellen:** Im Workspace-Dashboard (`/mandates/<id>/workspace/<instanceId>/dashboard`)
|
||||
die 4 Dokumente aus `gateway/demoData/knowledge-base/` hochladen (Drag & Drop oder + Button):
|
||||
- `investor-summary.md`
|
||||
- `2025-10-investor-detail.md`
|
||||
- `platform-overview.html`
|
||||
- `referenzen.html`
|
||||
RAG-Indexing laeuft **automatisch** nach Upload (async Pipeline: Pre-Scan → Extraktion → Chunking → Embeddings).
|
||||
Status pruefen unter **RAG Insights** (`/mandates/<id>/workspace/<instanceId>/rag-insights`).
|
||||
- [ ] **Demo-Fragen vorbereiten** (im Workspace-Chat stellen, nicht im Chatbot):
|
||||
- "Wie ist unser Reklamationsprozess?" (→ Antwort mit Quellenangabe)
|
||||
- "Welche Fristen gelten fuer Nebenkostenabrechnungen?" (→ zeigt domaenenspezifisches Wissen)
|
||||
- "Erstelle eine Zusammenfassung der Q1-Ergebnisse" (→ zeigt Analyse-Faehigkeit)
|
||||
- [ ] **Neutralisierung aktivieren** und in einer Frage live demonstrieren
|
||||
- [ ] **Erwartetes Ergebnis dokumentieren:** Frage → Antwort mit Quellenangabe + Audit-Trail
|
||||
|
||||
#### UC5: Integrationen — Architektur-Visualisierung (erledigt ✅)
|
||||
|
||||
- [x] **Systemseite `page.system.integrations`** implementiert
|
||||
- Route: `/integrations`, Navigation in `mainSystem.py`, Icon `FaProjectDiagram`
|
||||
- [x] **`IntegrationsOverviewPage.tsx`** mit 3-Schichten-Layout (Daten, PORTA, Organisation)
|
||||
- [x] **API `GET /api/system/integrations-overview`** aggregiert alle Daten
|
||||
- [ ] **Demo-Daten sicherstellen:** Mindestens 2 Connections, 2 System-Connectors, 3 Workflows, 2 Mandanten
|
||||
|
||||
#### UC4: Sprach-Deployment — Neue Sprache in 5 Minuten
|
||||
|
||||
- [ ] **Sicherstellen:** i18n Admin-UI erreichbar unter `/admin/languages`
|
||||
- [ ] **Bestehende Sprachen pruefen:** DE, EN, FR vorhanden und vollstaendig
|
||||
- [ ] **Demo-Sprache vorbereiten:** Spanisch (es) NICHT vorinstalliert lassen — wird live angelegt
|
||||
- [ ] **AI-Uebersetzungs-Pipeline testen:** `POST /api/i18n/sets` mit `code: "es"` → async Translation → Ergebnis in <5 Min
|
||||
- [ ] **Sprachwechsel im UI testen:** Nach Anlage → Sprachselektor zeigt "es" → UI komplett auf Spanisch
|
||||
- [ ] **Fallback:** Falls AI-Translation zu lang dauert → Sprache vorher anlegen, live nur den Wechsel zeigen
|
||||
- [ ] **Billing sicherstellen:** Demo-Mandant hat genuegend Credits fuer AI-Batch-Translation
|
||||
|
||||
#### Querschnitt: Neutralisierung
|
||||
|
||||
- [ ] **Demo-Flow vorbereiten:**
|
||||
1. Fiktives Mieterdossier (PDF) im Workspace öffnen
|
||||
2. Neutralisierung aktivieren → PII wird zu Platzhaltern
|
||||
3. AI-Analyse auf neutralisierten Daten ausführen
|
||||
4. Re-Personalisierung zeigen (Platzhalter → Originaldaten)
|
||||
- [ ] **NeutralizationPanel** im Frontend vorbereiten (Mappings sichtbar)
|
||||
|
||||
### Phase 3: Drehbuch der Demo (Mo Nachmittag)
|
||||
|
||||
- [ ] **Detailliertes Drehbuch erstellen** (siehe unten, Abschnitt "Demo-Drehbuch")
|
||||
- [ ] **Talking Points** für jede Szene (was sagen, was zeigen, was klicken)
|
||||
- [ ] **Timing-Markers** (Minute 0-20) mit Puffer
|
||||
|
||||
### Phase 4: Testdrehbuch — automatisiertes Testing (Mo Abend)
|
||||
|
||||
- [ ] **Test-Suite `gateway/tests/demo/`** erstellen
|
||||
- [ ] **`conftest.py`** mit Demo-Fixtures (Mandant, User, Feature-Instanzen)
|
||||
- [ ] **`test_demo_uc1_trustee.py`** — Trustee-Pipeline end-to-end
|
||||
- [ ] **`test_demo_uc2_realestate.py`** — Agent-basierte Machbarkeitsstudie
|
||||
- [ ] **`test_demo_uc3_chatbot.py`** — Knowledge-Chatbot mit RAG
|
||||
- [ ] **`test_demo_uc4_i18n.py`** — Sprach-Deployment + AI-Translation + UI-Wechsel
|
||||
- [ ] **`test_demo_neutralization.py`** — Neutralisierung roundtrip
|
||||
- [ ] **`test_demo_bootstrap.py`** — Bootstrap idempotent + Demo-Zustand korrekt
|
||||
- [ ] **Alle Tests grün** auf INT-Umgebung
|
||||
|
||||
### Phase 5: Generalprobe (Di Vormittag)
|
||||
|
||||
- [ ] **Komplette Demo 1x durchspielen** auf INT mit echtem Browser
|
||||
- [ ] **Timing messen** — muss in 20 Min passen (Ziel: 18 Min mit Puffer)
|
||||
- [ ] **Edge Cases testen:** Was wenn LLM langsam? Was wenn SharePoint-Timeout?
|
||||
- [ ] **Backup-Plan:** Browser-Tab mit vorbereiteten Ergebnissen für jeden UC
|
||||
|
||||
---
|
||||
|
||||
## Demo-Drehbuch (20 Minuten)
|
||||
|
||||
### Szene 0: Setup (vor der Demo, nicht sichtbar)
|
||||
|
||||
- Demo-Config geladen via Admin UI (`/admin/demo-config` → "Investor Demo April 2026" → Load)
|
||||
- Browser auf: PORTA Dashboard (eingeloggt als `p.motsch@poweron.swiss` / `patrick.helvetia`)
|
||||
- Mandanten: HappyLife AG + Alpina Treuhand AG
|
||||
- Tabs vorbereitet: Dashboard, Workspace (mit indexierten Knowledge-Docs), Graph-Editor, Trustee
|
||||
- SharePoint-Demo-Ordner mit Belegen befuellt
|
||||
- Neutralisierung aktiviert
|
||||
- Knowledge-Base indexiert
|
||||
|
||||
### Szene 1: Intro & Integrationslandschaft (0:00 – 3:00)
|
||||
|
||||
**Was zeigen:** PORTA Dashboard → Integrationsseite — die Architektur auf einen Blick
|
||||
**Talking Points:**
|
||||
- "Das ist PORTA — unsere AI Execution Layer. Ein Login, alle AI-Workflows."
|
||||
- "Jeder Mandant hat seine eigenen Features, Daten, Berechtigungen — komplett getrennt."
|
||||
|
||||
**Klick-Sequenz:**
|
||||
1. Dashboard → Mandanten-Übersicht
|
||||
2. Feature-Store → aktivierte Features zeigen (Treuhand, Chatbot, Neutralisierung)
|
||||
3. **Integrationen öffnen** → "Hier sehen Sie die komplette Architektur auf einen Blick."
|
||||
4. **Schicht für Schicht erklären:**
|
||||
- Unten: "Das sind die Datenquellen — Microsoft, Google, Abacus, Bexio. Die stecken wir an wie Stecker."
|
||||
- Mitte: "Hier laufen die Workflows — visuell gebaut, AI-gesteuert. System-Templates und individuelle."
|
||||
- Oben: "Die Services pro Mandant — jeder bekommt nur, was er braucht."
|
||||
5. "50+ Konnektoren, keine Seat-Lizenzen, Bezahlung pro Workflow-Ausführung."
|
||||
6. → Überleitung: "Schauen wir uns an, wie das konkret funktioniert."
|
||||
|
||||
### Szene 2: UC1 — Treuhand Spesenverarbeitung (3:00 – 9:00)
|
||||
|
||||
**Was zeigen:** Beleg → OCR → KI-Kontierung → Export — in Sekunden statt Minuten
|
||||
**Talking Points:**
|
||||
- "Treuhänder verbringen 5-15 Min pro Beleg mit manueller Erfassung."
|
||||
- "PowerON automatisiert das: Beleg hochladen oder aus SharePoint holen, KI extrahiert und kontiert."
|
||||
|
||||
**Klick-Sequenz:**
|
||||
1. Graph-Editor öffnen → Demo-Workflow "Treuhand: Belegverarbeitung" zeigen
|
||||
2. "Das ist ein visueller Workflow — kein Code nötig. SharePoint → Loop → Extraktion → Kontierung."
|
||||
3. Workflow manuell starten → Live-Ausführung zeigen
|
||||
4. Trustee-Bereich öffnen → extrahierte Positionen zeigen (Beleg, MWST, Konto)
|
||||
5. "Das lief gerade in Sekunden. Vorher: 15 Minuten pro Beleg. Das ist 98% Zeiteinsparung."
|
||||
6. Audit-Trail zeigen: "Jeder Schritt ist nachvollziehbar — für Revision und Compliance."
|
||||
|
||||
**Transition:** "Und das Beste: Die Kundendaten verlassen nie die Schweiz. Schauen wir uns das an."
|
||||
|
||||
### Szene 3: Neutralisierung live (9:00 – 12:00)
|
||||
|
||||
**Was zeigen:** PII-Schutz in Echtzeit — Daten werden vor dem LLM-Call anonymisiert
|
||||
**Talking Points:**
|
||||
- "Treuhänder, Anwälte, Gesundheitssektor — die können keine Kundendaten an OpenAI senden."
|
||||
- "PowerON löst das architektonisch: PII wird entfernt, BEVOR Daten zum Modell gehen."
|
||||
|
||||
**Klick-Sequenz:**
|
||||
1. Workspace öffnen → Mieterdossier (PDF) hochladen
|
||||
2. Neutralisierungs-Panel zeigen: "Hier sehen Sie die Mappings — jeder Name, jede Adresse wird durch Platzhalter ersetzt."
|
||||
3. AI-Analyse starten: "Analysiere das Mieterdossier und erstelle eine Risikobewertung"
|
||||
4. Ergebnis zeigen: Analyse ist inhaltlich korrekt, aber keine echten Namen im LLM-Call
|
||||
5. Re-Personalisierung: "Im Ergebnis stehen wieder die echten Namen — der Platzhalter-Roundtrip ist transparent."
|
||||
6. "Das ist keine opt-in Checkbox. Das ist Architektur. PII kann physisch nicht zum Modell-Anbieter gelangen."
|
||||
|
||||
**Transition:** "Jetzt zeigen wir, wie die KI auch ausserhalb der Treuhand arbeitet."
|
||||
|
||||
### Szene 4: UC2 — Immobilien Machbarkeitsstudie (12:00 – 15:00)
|
||||
|
||||
**Was zeigen:** Grundstück → automatische Recherche → Analyse in Minuten statt Stunden
|
||||
**Talking Points:**
|
||||
- "Immobilienfirmen recherchieren 2-4 Stunden pro Grundstück. Manuell, über verschiedene Quellen."
|
||||
- "PowerON automatisiert die Recherche und erstellt eine Machbarkeitsstudie."
|
||||
|
||||
**Klick-Sequenz:**
|
||||
1. Workspace öffnen → Prompt eingeben: "Erstelle eine Machbarkeitsstudie für Musterstrasse 42, 8001 Zürich"
|
||||
2. Agent arbeitet live: "Der Agent sucht jetzt automatisch in öffentlichen Quellen — swisstopo, Zonenpläne, ÖREB."
|
||||
3. Ergebnis zeigen: Zusammenfassung mit Zonierung, Baurecht, Nutzungspotential
|
||||
4. Chart zeigen (falls generiert): Flächenaufteilung, Nutzungsmix
|
||||
5. "6 Minuten statt 4 Stunden. 92% Zeiteinsparung. Und das funktioniert für jedes Grundstück in der Schweiz."
|
||||
|
||||
**Transition:** "Letztes Beispiel — wie die KI als Firmen-Wissensbasis funktioniert."
|
||||
|
||||
### Szene 5: UC3 — AI Knowledge Workspace (15:00 – 17:00)
|
||||
|
||||
**Was zeigen:** Firmenwissen sofort abrufbar — mit Quellenangabe, alles im AI Workspace
|
||||
**Talking Points:**
|
||||
- "Informationssilos sind der Produktivitätskiller Nr. 1. ERP, CRM, SharePoint — Daten überall."
|
||||
- "PowerON gibt ein einheitliches Interface auf alle Datenquellen."
|
||||
- "Dokumente hochladen — der Workspace indexiert automatisch. Fragen stellen — sofortige Antwort mit Quelle."
|
||||
|
||||
**Klick-Sequenz:**
|
||||
1. Workspace oeffnen (HappyLife AG) → Dokumente sind bereits hochgeladen und indexiert
|
||||
2. Optional: RAG Insights zeigen → "Hier sehen Sie den Index-Status — alle Dokumente sind verarbeitet."
|
||||
3. Im Workspace-Chat fragen: "Wie ist unser Reklamationsprozess?"
|
||||
4. Antwort zeigen: Strukturiert, mit Quellenangabe (Dokument + Abschnitt)
|
||||
5. Follow-up: "Welche Fristen gelten fuer Nebenkostenabrechnungen?"
|
||||
6. Antwort mit Rechtsgrundlage zeigen
|
||||
7. "Sofortige Antworten statt 10 Minuten Suche. Rollenbasierter Zugriff — jeder sieht nur, was er sehen darf."
|
||||
|
||||
### Szene 6: UC4 — Sprach-Deployment live (17:00 – 20:00)
|
||||
|
||||
**Was zeigen:** Neue Sprache in Minuten — AI uebersetzt das komplette UI automatisch
|
||||
**Talking Points:**
|
||||
- "European customers need multi-language support. German, French, English — and tomorrow maybe Spanish or Portuguese."
|
||||
- "With PowerON you create a new language, AI translates all UI texts, and in 5 minutes the system is fully available in the new language. No code change, no redeploy."
|
||||
- "This is not Google Translate. The AI understands context — 'Open' as status vs. 'Open' as action is translated correctly."
|
||||
|
||||
**Klick-Sequenz:**
|
||||
1. Administration → System → UI-Sprachen oeffnen → bestehende Sprachen zeigen (DE, EN, FR)
|
||||
2. "Neue Sprache anlegen" klicken → **Spanisch** (es) waehlen
|
||||
3. AI-Uebersetzung startet → Fortschritt zeigen (Batch-Pipeline)
|
||||
4. Sprache wechseln → komplettes UI ist sofort auf Spanisch
|
||||
5. "That just took 5 minutes. For an entire enterprise platform. No developer needed."
|
||||
6. Optional: "Update All" zeigen — scannt die Codebase, synchronisiert neue Keys, uebersetzt automatisch
|
||||
|
||||
**Transition:** "Das war PowerON PORTA — zurück zu den Zahlen."
|
||||
|
||||
### Szene 7: Closing (im Keynote-Deck, nicht in PORTA)
|
||||
|
||||
- Zurück zu den Keynote-Slides: Pricing, Roadmap, Next Steps
|
||||
- CTA für Investoren / Treuhänder
|
||||
|
||||
---
|
||||
|
||||
## Testdrehbuch (automatisiert)
|
||||
|
||||
### Architektur
|
||||
|
||||
```
|
||||
gateway/tests/demo/
|
||||
├── conftest.py # Demo-Fixtures, DB-Setup
|
||||
├── test_demo_bootstrap.py # Bootstrap idempotent, Demo-Zustand korrekt
|
||||
├── test_demo_uc1_trustee.py # UC1: Beleg → Extraktion → Kontierung
|
||||
├── test_demo_uc2_realestate.py # UC2: Agent → Web-Recherche → Analyse
|
||||
├── test_demo_uc3_chatbot.py # UC3: Frage → RAG → Antwort + Quelle
|
||||
├── test_demo_uc4_i18n.py # UC4: Sprache anlegen → AI-Translation → UI-Wechsel
|
||||
├── test_demo_neutralization.py # Neutralisierung: PII → Platzhalter → Roundtrip
|
||||
└── README.md # Ausführungshinweise
|
||||
```
|
||||
|
||||
### Test-Szenarien (Given-When-Then)
|
||||
|
||||
#### T-BOOT: Bootstrap
|
||||
|
||||
```
|
||||
Given keine Demo-Daten in der DB
|
||||
When bootstrapDemoEnvironment(db) ausgeführt wird
|
||||
Then Demo-Mandant existiert mit allen Feature-Instanzen
|
||||
AND Demo-User existiert mit korrekten Rollen
|
||||
AND Demo-Testdaten sind im Workspace geladen
|
||||
AND Neutralisierung ist aktiviert
|
||||
AND Graph-Editor hat Demo-Workflows
|
||||
|
||||
Given Demo-Daten bereits vorhanden
|
||||
When bootstrapDemoEnvironment(db) erneut ausgeführt wird
|
||||
Then kein Fehler (idempotent)
|
||||
AND Zustand ist identisch
|
||||
```
|
||||
|
||||
#### T-UC1: Treuhand Spesenverarbeitung
|
||||
|
||||
```
|
||||
Given Demo-Mandant mit Trustee-Instanz und 3 Musterbelegen im Workspace
|
||||
When Graph-Editor Workflow "Treuhand: Belegverarbeitung" gestartet wird
|
||||
Then alle 3 Belege werden extrahiert
|
||||
AND jeder Beleg hat mindestens 1 extrahierte Position
|
||||
AND jede Position hat: Betrag, MWST-Satz, Konto-Vorschlag
|
||||
AND Workflow-Status = completed
|
||||
AND Audit-Trail enthält alle Schritte
|
||||
|
||||
Given extrahierte Positionen vorhanden
|
||||
When syncToAccounting aufgerufen wird
|
||||
Then Positionen werden an Connector übergeben (Mock: Bexio-Sandbox)
|
||||
AND Sync-Status = "synced" für alle Positionen
|
||||
```
|
||||
|
||||
#### T-UC2: Immobilien Machbarkeitsstudie
|
||||
|
||||
```
|
||||
Given Demo-Mandant mit Workspace-Instanz
|
||||
When Agent-Prompt "Erstelle Machbarkeitsstudie für Musterstrasse 42, 8001 Zürich" ausgeführt wird
|
||||
Then Agent nutzt webSearch und/oder readUrl Tools
|
||||
AND Ergebnis enthält: Zonierung, Baurecht-Infos, Flächenanalyse
|
||||
AND Ergebnis ist strukturiert (Abschnitte, ggf. Chart)
|
||||
AND Antwortzeit < 120 Sekunden
|
||||
```
|
||||
|
||||
#### T-UC3: AI Knowledge Workspace
|
||||
|
||||
```
|
||||
Given Demo-Mandant mit Workspace-Instanz und indexierter Knowledge-Base (3+ Dokumente)
|
||||
AND Dokumente via Workspace-Dashboard hochgeladen (auto-indexiert via _autoIndexFile Pipeline)
|
||||
When im Workspace-Chat "Wie ist unser Reklamationsprozess?" gestellt wird
|
||||
Then Antwort referenziert mindestens 1 Quell-Dokument (via buildAgentContext → semanticSearch)
|
||||
AND Antwort ist inhaltlich korrekt (enthält Prozessschritte)
|
||||
AND Antwortzeit < 15 Sekunden
|
||||
|
||||
Given Workspace mit RAG-Index
|
||||
When Frage zu Thema ausserhalb der Knowledge-Base gestellt wird
|
||||
Then Antwort zeigt an, dass keine relevante Quelle gefunden wurde (kein Halluzinieren)
|
||||
```
|
||||
|
||||
#### T-UC4: Sprach-Deployment
|
||||
|
||||
```
|
||||
Given Demo-Mandant mit i18n Admin-Zugriff und bestehenden Sprachen DE, EN, FR
|
||||
AND Sprache "es" (Spanisch) existiert NICHT
|
||||
When POST /api/i18n/sets mit code "es" ausgefuehrt wird
|
||||
Then AI-Batch-Translation startet
|
||||
AND nach Abschluss enthaelt das es-Set alle Keys aus dem de-Master-Set
|
||||
AND Uebersetzungen sind kontextuell korrekt (Stichprobe: "Speichern" -> "Guardar", "Abbrechen" -> "Cancelar")
|
||||
AND Gesamtdauer < 5 Minuten
|
||||
|
||||
Given Sprache "es" vollstaendig uebersetzt
|
||||
When User die Sprache im UI auf "es" wechselt
|
||||
Then alle UI-Elemente zeigen spanische Texte
|
||||
AND kein Fallback auf deutsche Keys sichtbar (ausser bei fehlenden Uebersetzungen)
|
||||
```
|
||||
|
||||
#### T-NEU: Neutralisierung
|
||||
|
||||
```
|
||||
Given Demo-Mandant mit aktivierter Neutralisierung
|
||||
AND Mieterdossier-PDF mit PII (Name: "Hans Muster", Adresse: "Bahnhofstrasse 1")
|
||||
When PDF hochgeladen und Neutralisierung ausgeführt wird
|
||||
Then neutralisierter Text enthält Platzhalter statt "Hans Muster"
|
||||
AND Mapping-Tabelle enthält Zuordnung Platzhalter → Original
|
||||
AND resolveText() stellt Originaldaten korrekt wieder her
|
||||
|
||||
Given neutralisierter Text
|
||||
When AI-Analyse "Erstelle Risikobewertung" ausgeführt wird
|
||||
Then LLM erhält nur neutralisierten Text (kein PII im Request)
|
||||
AND Ergebnis nach Re-Personalisierung enthält "Hans Muster"
|
||||
```
|
||||
|
||||
### Ausführung
|
||||
|
||||
```bash
|
||||
cd gateway/
|
||||
|
||||
# Alle Demo-Tests:
|
||||
pytest tests/demo/ -v -m "not expensive"
|
||||
|
||||
# Nur Bootstrap:
|
||||
pytest tests/demo/test_demo_bootstrap.py -v
|
||||
|
||||
# Nur UC1:
|
||||
pytest tests/demo/test_demo_uc1_trustee.py -v
|
||||
|
||||
# Mit Live-AI-Calls (expensive, für Generalprobe):
|
||||
pytest tests/demo/ -v -m ""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
| # | Kriterium (Given-When-Then) | Prio |
|
||||
|---|---------------------------|------|
|
||||
| 1 | Given Demo-Mandant, When Bootstrap ausgeführt wird, Then alle Features aktiv + Testdaten geladen + Neutralisierung an | must |
|
||||
| 2 | Given 3 Musterbelege, When Trustee-Workflow läuft, Then Belege extrahiert + kontiert + Audit-Trail vorhanden | must |
|
||||
| 3 | Given Workspace mit Agent, When Machbarkeitsstudie-Prompt, Then strukturierte Analyse mit Quellen in <2 Min | must |
|
||||
| 4 | Given AI Workspace mit Knowledge-Base (auto-indexiert), When Frage im Workspace-Chat gestellt, Then Antwort mit Quellenangabe in <15s | must |
|
||||
| 5 | Given Mieterdossier-PDF, When Neutralisierung aktiv + AI-Analyse, Then PII nie an LLM gesendet + Re-Personalisierung korrekt | must |
|
||||
| 6 | Given i18n Admin-UI, When neue Sprache "es" angelegt wird, Then AI uebersetzt alle Keys in <5 Min und UI zeigt Spanisch nach Sprachwechsel | must |
|
||||
| 7 | Given komplettes Drehbuch, When Demo komplett durchgespielt, Then Timing ≤ 20 Min mit Puffer | must |
|
||||
| 8 | Given pytest-Suite, When `pytest tests/demo/` ausgeführt, Then alle Tests grün (ohne expensive: Bootstrap + Struktur; mit expensive: Live AI) | should |
|
||||
|
||||
## Testplan
|
||||
|
||||
| ID | AC | Art | Automatisiert | Repo-Pfad | Status |
|
||||
|----|----|-----|--------------|-----------|--------|
|
||||
| T1 | 1 | integration | ja | gateway/tests/demo/test_demo_bootstrap.py | pending |
|
||||
| T2 | 2 | e2e | ja (teilweise, AI=expensive) | gateway/tests/demo/test_demo_uc1_trustee.py | pending |
|
||||
| T3 | 3 | e2e | ja (expensive) | gateway/tests/demo/test_demo_uc2_realestate.py | pending |
|
||||
| T4 | 4 | e2e | ja (expensive) | gateway/tests/demo/test_demo_uc3_chatbot.py (Workspace-RAG, nicht Chatbot) | pending |
|
||||
| T5 | 5 | e2e | ja (expensive) | gateway/tests/demo/test_demo_neutralization.py | pending |
|
||||
| T6 | 6 | e2e | ja (expensive) | gateway/tests/demo/test_demo_uc4_i18n.py | pending |
|
||||
| T7 | 7 | manual | nein | — (Generalprobe Di Morgen) | pending |
|
||||
| T8 | 8 | ci | ja | `pytest tests/demo/ -v` | pending |
|
||||
|
||||
## Links
|
||||
|
||||
- Keynote Use Cases: `local/notes/use-cases-DEMO-TUE.md`
|
||||
- Customer Demo Enablement: `c-work/1-plan/2026-04-customer-demo-enablement.md`
|
||||
- Trustee Tooling Plan: `c-work/1-plan/2026-04-customer-trustee-tooling-and-demo-prep.md`
|
||||
- Bootstrap (bestehend): `gateway/modules/interfaces/interfaceBootstrap.py`
|
||||
- System-Templates (Treuhand): `interfaceBootstrap._buildSystemTemplates()`
|
||||
- Workflow-Engine: `b-reference/gateway/workflow.md`
|
||||
- Neutralisierung: `b-reference/platform/neutralization.md`
|
||||
- Testing-Strategie: `d-guides/testing-strategy.md`
|
||||
- Trustee-Feature: `gateway/modules/features/trustee/`
|
||||
- RealEstate-Feature: `gateway/modules/features/realEstate/`
|
||||
- Chatbot-Feature: `gateway/modules/features/chatbot/` (nicht fuer UC3 — UC3 nutzt Workspace-RAG)
|
||||
- Neutralisierung-Feature: `gateway/modules/features/neutralization/`
|
||||
- Graph-Editor: `gateway/modules/features/graphicalEditor/`
|
||||
|
||||
## Abschluss
|
||||
|
||||
- [ ] b-reference/ aktualisiert (keine neuen Features, nur Demo-Config)
|
||||
- [ ] TOPICS.md aktualisiert (falls neues Thema)
|
||||
- [ ] Dieses Dokument → z-archive/ verschoben
|
||||
277
c-work/3-validate/2026-04-investor-demo-tuesday.md
Normal file
277
c-work/3-validate/2026-04-investor-demo-tuesday.md
Normal file
|
|
@ -0,0 +1,277 @@
|
|||
<!-- status: build -->
|
||||
<!-- started: 2026-04-12 -->
|
||||
<!-- component: gateway | frontend-nyla | platform -->
|
||||
|
||||
# Investor-Demo Dienstag — Live Product Demo (20 Min)
|
||||
|
||||
**Was:** 20-Min Live-Demo von PowerON PORTA für Investoren + Treuhänder.
|
||||
**Wer:** Kollegen präsentieren Keynotes, Patrick zeigt die Plattform live.
|
||||
**Publikum:** Investoren (ROI, Skalierbarkeit) + Treuhänder (Praxisnutzen, Datenschutz).
|
||||
|
||||
---
|
||||
|
||||
## TEIL A — Demo-Drehbuch (20 Minuten)
|
||||
|
||||
> Ausdrucken, am Laptop daneben legen, Szene für Szene abarbeiten.
|
||||
|
||||
---
|
||||
|
||||
### Szene 0: Setup (vor der Demo)
|
||||
|
||||
- Demo-Config geladen: `/admin/demo-config` → "Investor Demo April 2026" → Load
|
||||
- Eingeloggt als `p.motsch@poweron.swiss`
|
||||
- Mandanten: HappyLife AG + Alpina Treuhand AG
|
||||
- Tabs vorbereitet: Dashboard, Workspace (indexierte Knowledge-Docs), Graph-Editor, Trustee
|
||||
- Neutralisierung aktiviert, Knowledge-Base indexiert
|
||||
- **Fallback-Tabs:** Pro UC ein Tab mit Ergebnis-Screenshots
|
||||
|
||||
---
|
||||
|
||||
### Szene 1: Intro & Integrationslandschaft (0:00 – 3:00)
|
||||
|
||||
**Zeigen:** PORTA Dashboard → Integrationsseite
|
||||
|
||||
**Sagen:**
|
||||
- "Das ist PORTA — unsere AI Execution Layer. Ein Login, alle AI-Workflows."
|
||||
- "Jeder Mandant hat eigene Features, Daten, Berechtigungen — komplett getrennt."
|
||||
|
||||
**Klicks:**
|
||||
1. Dashboard → Mandanten-Übersicht
|
||||
2. Feature-Store → aktivierte Features zeigen
|
||||
3. **Integrationen öffnen** → "Komplette Architektur auf einen Blick."
|
||||
4. Schichten erklären: Datenquellen → Workflows → Services
|
||||
5. "50+ Konnektoren, keine Seat-Lizenzen, Bezahlung pro Workflow."
|
||||
6. → "Schauen wir uns an, wie das konkret funktioniert."
|
||||
|
||||
---
|
||||
|
||||
### Szene 2: UC1 — Treuhand Spesenverarbeitung (3:00 – 9:00)
|
||||
|
||||
**Zeigen:** Beleg → OCR → KI-Kontierung → Export in Sekunden
|
||||
|
||||
**Sagen:**
|
||||
- "Treuhänder: 5-15 Min pro Beleg. PowerON: Sekunden."
|
||||
|
||||
**Klicks:**
|
||||
1. Graph-Editor → Demo-Workflow "Treuhand: Belegverarbeitung" zeigen
|
||||
2. "Visueller Workflow — kein Code. SharePoint → Loop → Extraktion → Kontierung."
|
||||
3. Workflow starten → Live-Ausführung
|
||||
4. Trustee-Bereich → extrahierte Positionen (Beleg, MWST, Konto)
|
||||
5. "98% Zeiteinsparung."
|
||||
6. Audit-Trail zeigen
|
||||
|
||||
→ "Die Kundendaten verlassen nie die Schweiz. Schauen wir uns das an."
|
||||
|
||||
**Fallback:** Ergebnis-Screenshot-Tab zeigen.
|
||||
|
||||
---
|
||||
|
||||
### Szene 3: Neutralisierung live (9:00 – 12:00)
|
||||
|
||||
**Zeigen:** PII-Schutz in Echtzeit
|
||||
|
||||
**Sagen:**
|
||||
- "Treuhänder, Anwälte, Gesundheitssektor — keine Kundendaten an OpenAI."
|
||||
- "PII wird entfernt, BEVOR Daten zum Modell gehen."
|
||||
|
||||
**Klicks:**
|
||||
1. Workspace → Mieterdossier (PDF) hochladen
|
||||
2. Neutralisierungs-Panel → Mappings zeigen
|
||||
3. AI-Analyse: "Analysiere das Mieterdossier und erstelle eine Risikobewertung"
|
||||
4. Ergebnis: korrekt, aber keine echten Namen im LLM-Call
|
||||
5. Re-Personalisierung zeigen
|
||||
6. "Das ist Architektur. PII kann physisch nicht zum Anbieter gelangen."
|
||||
|
||||
→ "Wie die KI auch ausserhalb der Treuhand arbeitet."
|
||||
|
||||
**Fallback:** Panel + Mappings zeigen ohne Live-Analyse.
|
||||
|
||||
---
|
||||
|
||||
### Szene 4: UC2 — Immobilien Machbarkeitsstudie (12:00 – 15:00)
|
||||
|
||||
**Zeigen:** Grundstück → automatische Recherche → Analyse
|
||||
|
||||
**Sagen:**
|
||||
- "Immobilienfirmen: 2-4 Stunden pro Grundstück. PowerON: Minuten."
|
||||
|
||||
**Klicks:**
|
||||
1. Workspace → "Erstelle eine Machbarkeitsstudie für Musterstrasse 42, 8001 Zürich"
|
||||
2. Agent arbeitet live (swisstopo, Zonenpläne, ÖREB)
|
||||
3. Ergebnis: Zonierung, Baurecht, Nutzungspotential
|
||||
4. "6 Minuten statt 4 Stunden. Funktioniert für jedes Grundstück."
|
||||
|
||||
→ "Wie die KI als Firmen-Wissensbasis funktioniert."
|
||||
|
||||
**Fallback:** Internet-abhängig → Ergebnis-Tab zeigen.
|
||||
|
||||
---
|
||||
|
||||
### Szene 5: UC3 — AI Knowledge Workspace (15:00 – 17:00)
|
||||
|
||||
**Zeigen:** Firmenwissen sofort abrufbar mit Quellenangabe
|
||||
|
||||
**Sagen:**
|
||||
- "Informationssilos = Produktivitätskiller Nr. 1."
|
||||
- "Dokumente hochladen → automatisch indexiert → sofortige Antwort mit Quelle."
|
||||
|
||||
**Klicks:**
|
||||
1. Workspace (HappyLife AG) → Dokumente bereits indexiert
|
||||
2. Optional: RAG Insights → Index-Status
|
||||
3. Fragen: "Wie ist unser Reklamationsprozess?"
|
||||
4. Antwort mit Quellenangabe
|
||||
5. Follow-up: "Welche Fristen gelten für Nebenkostenabrechnungen?"
|
||||
6. "Sofortige Antworten statt 10 Min Suche. Rollenbasierter Zugriff."
|
||||
|
||||
**Fallback:** Falls LLM langsam → zweite Frage überspringen.
|
||||
|
||||
---
|
||||
|
||||
### Szene 6: UC4 — Sprach-Deployment live (17:00 – 20:00)
|
||||
|
||||
**Zeigen:** Neue Sprache in Minuten — AI übersetzt das komplette UI
|
||||
|
||||
**Sagen:**
|
||||
- "New language, AI translates all UI texts, 5 minutes, no code change."
|
||||
- "Not Google Translate — context-aware."
|
||||
|
||||
**Klicks:**
|
||||
1. Admin → UI-Sprachen → DE, EN, FR zeigen
|
||||
2. "Neue Sprache" → **Spanisch** (es)
|
||||
3. AI-Übersetzung → Fortschritt
|
||||
4. Sprache wechseln → UI komplett auf Spanisch
|
||||
5. "5 minutes. Entire enterprise platform. No developer."
|
||||
|
||||
→ "Das war PowerON PORTA — zurück zu den Zahlen."
|
||||
|
||||
**Fallback:** Spanisch vorher anlegen, live nur Sprachwechsel zeigen.
|
||||
|
||||
---
|
||||
|
||||
### Szene 7: Closing (Keynote-Deck)
|
||||
|
||||
- Pricing, Roadmap, Next Steps, CTA
|
||||
|
||||
---
|
||||
|
||||
### Timing
|
||||
|
||||
| Szene | Inhalt | Dauer | Kumuliert |
|
||||
|-------|--------|-------|-----------|
|
||||
| 1 | Intro & Integrationen | 3 Min | 0:00 – 3:00 |
|
||||
| 2 | UC1: Treuhand Spesen | 6 Min | 3:00 – 9:00 |
|
||||
| 3 | Neutralisierung | 3 Min | 9:00 – 12:00 |
|
||||
| 4 | UC2: Immobilien | 3 Min | 12:00 – 15:00 |
|
||||
| 5 | UC3: Knowledge Workspace | 2 Min | 15:00 – 17:00 |
|
||||
| 6 | UC4: Sprach-Deployment | 3 Min | 17:00 – 20:00 |
|
||||
| | **Total** | **20 Min** | Ziel: 18 Min + 2 Min Puffer |
|
||||
|
||||
---
|
||||
---
|
||||
|
||||
## TEIL B — Vorbereitungs-Checkliste
|
||||
|
||||
### Phase 1: Demo-Daten (Mo Vormittag)
|
||||
|
||||
- [ ] RMA-Credentials in `gateway/config.ini`
|
||||
- [ ] Demo-Config laden: `/admin/demo-config` → Load
|
||||
- [ ] Testdaten prüfen:
|
||||
- `demoData/invoices/` — 3 Muster-Rechnungen (PDF)
|
||||
- `demoData/expenses/` — 2 Spesenbelege (PDF)
|
||||
- `demoData/neutralizer/tenant-dossier.pdf` — vorhanden ✅
|
||||
- `demoData/knowledge-base/` — 4 Dokumente vorhanden ✅
|
||||
|
||||
### Phase 2: Konfiguration pro UC (Mo Nachmittag)
|
||||
|
||||
**UC1: Treuhand**
|
||||
- [ ] Trustee-Instanz konfigurieren (RMA-Connector)
|
||||
- [ ] Graph-Editor Workflow erstellen (System-Template als Basis)
|
||||
- [ ] SharePoint-Demo-Ordner mit Belegen befüllen
|
||||
|
||||
**UC2: Immobilien**
|
||||
- [ ] Workspace-Instanz konfigurieren
|
||||
- [ ] Agent-Tools prüfen: `webSearch`, `readUrl`, `createChart`
|
||||
- [ ] Fallback-Screenshots vorbereiten
|
||||
|
||||
**UC3: Knowledge Workspace**
|
||||
- [ ] Workspace (HappyLife AG) — Knowledge-Base befüllen: 4 Docs hochladen
|
||||
- [ ] RAG-Indexierung prüfen unter RAG Insights
|
||||
- [ ] Neutralisierung aktivieren
|
||||
|
||||
**UC4: Sprach-Deployment**
|
||||
- [ ] Sprachen prüfen: DE, EN, FR vorhanden
|
||||
- [ ] Spanisch (es) NICHT vorinstalliert lassen
|
||||
- [ ] AI-Übersetzungs-Pipeline testen (<5 Min)
|
||||
- [ ] Fallback: Spanisch vorher anlegen falls Pipeline zu langsam
|
||||
|
||||
**UC5: Integrationen**
|
||||
- [ ] Demo-Daten: min. 2 Connections, 2 Connectors, 3 Workflows, 2 Mandanten
|
||||
|
||||
**Neutralisierung**
|
||||
- [ ] Demo-Flow testen: PDF hochladen → Mappings → AI-Analyse → Re-Personalisierung
|
||||
|
||||
### Phase 3: Testing (Mo Abend)
|
||||
|
||||
- [ ] `pytest tests/demo/ -v -m "not expensive"` — alle grün
|
||||
- [ ] `pytest tests/demo/ -v` — mit Live-AI-Calls
|
||||
|
||||
### Phase 4: Generalprobe (Di Vormittag)
|
||||
|
||||
- [ ] Komplette Demo durchspielen auf INT
|
||||
- [ ] Timing ≤ 20 Min
|
||||
- [ ] Fallback-Screenshots für jeden UC bereit
|
||||
|
||||
---
|
||||
|
||||
## Testdrehbuch (automatisiert)
|
||||
|
||||
### Architektur
|
||||
|
||||
```
|
||||
gateway/tests/demo/
|
||||
├── conftest.py # Demo-Fixtures, DB-Setup
|
||||
├── test_demo_bootstrap.py # Bootstrap idempotent
|
||||
├── test_demo_uc1_trustee.py # Beleg → Extraktion → Kontierung
|
||||
├── test_demo_uc2_realestate.py # Agent → Web-Recherche → Analyse
|
||||
├── test_demo_uc3_chatbot.py # Workspace-RAG → Antwort + Quelle
|
||||
├── test_demo_uc4_i18n.py # Sprache → AI-Translation → UI
|
||||
├── test_demo_neutralization.py # PII → Platzhalter → Roundtrip
|
||||
└── README.md
|
||||
```
|
||||
|
||||
```bash
|
||||
cd gateway/
|
||||
|
||||
# Alle (ohne AI-Calls):
|
||||
pytest tests/demo/ -v -m "not expensive"
|
||||
|
||||
# Mit Live-AI (Generalprobe):
|
||||
pytest tests/demo/ -v
|
||||
```
|
||||
|
||||
### Test-Szenarien
|
||||
|
||||
**T-BOOT:** Bootstrap idempotent, alle Features aktiv, Testdaten geladen.
|
||||
|
||||
**T-UC1:** 3 Belege → extrahiert + kontiert + Audit-Trail. Sync → "synced".
|
||||
|
||||
**T-UC2:** Machbarkeitsstudie-Prompt → Agent nutzt webSearch → Ergebnis <120s.
|
||||
|
||||
**T-UC3:** Workspace-RAG-Frage → Antwort mit Quellenangabe <15s. Frage ausserhalb KB → kein Halluzinieren.
|
||||
|
||||
**T-UC4:** Sprache "es" anlegen → AI übersetzt alle Keys <5 Min → UI auf Spanisch.
|
||||
|
||||
**T-NEU:** PDF mit PII → Platzhalter → AI-Analyse ohne PII → Re-Personalisierung korrekt.
|
||||
|
||||
---
|
||||
|
||||
## Links
|
||||
|
||||
- Keynote: `local/notes/use-cases-DEMO-TUE.md`
|
||||
- Bootstrap: `gateway/modules/interfaces/interfaceBootstrap.py`
|
||||
- Demo-Config: `gateway/modules/demoConfigs/investorDemo2026.py`
|
||||
- Test-Suite: `gateway/tests/demo/`
|
||||
|
||||
## Abschluss
|
||||
|
||||
- [ ] Dieses Dokument → z-archive/ verschoben
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<!-- status: plan -->
|
||||
<!-- status: build -->
|
||||
<!-- started: 2026-04-09 -->
|
||||
<!-- component: gateway | frontend-nyla | platform -->
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ Der Workspace hat bereits: Chat-Rendering, Chart-Anzeige, Datei-Handling, SSE-St
|
|||
|
||||
### Phase 1: Backend — Quick Action Definitionen & API (Gateway)
|
||||
|
||||
- [ ] **`QUICK_ACTIONS` in `mainTrustee.py` definieren**
|
||||
- [x] **`QUICK_ACTIONS` in `mainTrustee.py` definieren**
|
||||
|
||||
Gleiches Pattern wie `UI_OBJECTS`, `TEMPLATE_ROLES`:
|
||||
|
||||
|
|
@ -209,9 +209,9 @@ QUICK_ACTIONS = [
|
|||
]
|
||||
```
|
||||
|
||||
- [ ] **`getQuickActions()` Funktion in `mainTrustee.py`** analog zu `getUiObjects()`, `getTemplateRoles()`
|
||||
- [x] **`getQuickActions()` Funktion in `mainTrustee.py`** analog zu `getUiObjects()`, `getTemplateRoles()`
|
||||
|
||||
- [ ] **API-Endpoint `GET /api/trustee/{instanceId}/quick-actions`** in `routeFeatureTrustee.py`
|
||||
- [x] **API-Endpoint `GET /api/trustee/{instanceId}/quick-actions`** in `routeFeatureTrustee.py`
|
||||
- Liest `QUICK_ACTIONS` + optional `FeatureInstance.config.get("quickActions", [])`
|
||||
- Filtert nach User-Rollen (RBAC): nur Actions deren `requiredRoles` mit den Rollen des Users auf dieser Instanz übereinstimmen
|
||||
- Sortiert nach `sortOrder`
|
||||
|
|
@ -220,7 +220,7 @@ QUICK_ACTIONS = [
|
|||
|
||||
### Phase 2: Frontend — QuickActionBoard Komponente
|
||||
|
||||
- [ ] **Neue Komponente `components/QuickActionBoard/QuickActionBoard.tsx`**
|
||||
- [x] **Neue Komponente `components/QuickActionBoard/QuickActionBoard.tsx`**
|
||||
|
||||
Generische, wiederverwendbare Komponente:
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ UI:
|
|||
- Dark-Theme Support (bestehende CSS-Variablen nutzen)
|
||||
- Kein eigener State — rein präsentational mit `onDispatch`-Callback
|
||||
|
||||
- [ ] **CSS in `components/QuickActionBoard/QuickActionBoard.module.css`**
|
||||
- [x] **CSS in `components/QuickActionBoard/QuickActionBoard.module.css`**
|
||||
- Konsistentes Design mit bestehenden `TrusteeViews.module.css` Kacheln (`.statCard` Pattern)
|
||||
- Hover: leichter Scale + Shadow-Verstärkung
|
||||
- Active/Clicked: kurzer visueller Feedback (Pulse oder Farb-Flash)
|
||||
|
|
@ -259,7 +259,7 @@ UI:
|
|||
|
||||
### Phase 3: Frontend — Dashboard-Integration
|
||||
|
||||
- [ ] **`TrusteeDashboardView.tsx` erweitern**
|
||||
- [x] **`TrusteeDashboardView.tsx` erweitern**
|
||||
|
||||
Unter dem bestehenden `statsGrid` und `infoSection`:
|
||||
|
||||
|
|
@ -289,16 +289,15 @@ const _handleQuickAction = (action: QuickAction) => {
|
|||
};
|
||||
```
|
||||
|
||||
- [ ] **API-Hook `useTrusteeQuickActions(instanceId)`** in `hooks/useTrustee.ts`
|
||||
- Fetcht `GET /api/trustee/{instanceId}/quick-actions`
|
||||
- Cached Response (SWR-Pattern oder einfacher State)
|
||||
- Resolved `label`/`description` in die aktive Sprache (wie bei Navigation-Labels)
|
||||
- [~] **API-Hook `useTrusteeQuickActions(instanceId)`** in `hooks/useTrustee.ts` *(Logik inline im View implementiert — separater Hook ist optional/nice-to-have, kein Blocker)*
|
||||
- Fetcht `GET /api/trustee/{instanceId}/quick-actions` — erledigt (inline in `TrusteeDashboardView`)
|
||||
- Resolved `label`/`description` in die aktive Sprache — erledigt (API liefert aufgelöst)
|
||||
|
||||
- [ ] **Trustee API Funktion `fetchQuickActions()`** in `api/trusteeApi.ts`
|
||||
- [x] **Trustee API Funktion `fetchQuickActions()`** in `api/trusteeApi.ts`
|
||||
|
||||
### Phase 4: Frontend — Workspace Pre-Fill (Cross-Feature-Dispatch)
|
||||
|
||||
- [ ] **URL-Parameter-Support in `WorkspacePage.tsx`**
|
||||
- [x] **URL-Parameter-Support in `WorkspacePage.tsx`**
|
||||
|
||||
Workspace erkennt URL-Suchparameter:
|
||||
- `?prompt=<encodedText>` → Füllt Prompt-Feld vor
|
||||
|
|
@ -326,7 +325,7 @@ useEffect(() => {
|
|||
}, []);
|
||||
```
|
||||
|
||||
- [ ] **Workspace-Instanz-Auflösung** für Cross-Feature-Navigation
|
||||
- [x] **Workspace-Instanz-Auflösung** für Cross-Feature-Navigation
|
||||
|
||||
Helper-Funktion in Trustee Dashboard:
|
||||
```typescript
|
||||
|
|
@ -350,40 +349,32 @@ const _navigateToWorkspaceWithPrompt = async (config: QuickActionConfig) => {
|
|||
|
||||
### Phase 5: Workflow-Dispatch (für `actionType: "workflow"`)
|
||||
|
||||
- [ ] **Graph-Editor Workflow triggern** aus dem Trustee Dashboard
|
||||
> **Implementierungs-Entscheid:** Statt direktem Workflow-Trigger vom Dashboard navigieren die Analyse-/Abschluss-Actions
|
||||
> als `actionType: "link"` zu `TrusteeAnalyseView` bzw. `TrusteeAbschlussView` mit `?tab=...` Parameter.
|
||||
> Diese Views laden den zugehörigen Template-Workflow (via `templateTag`) und bieten eine dedizierte UI
|
||||
> mit Eingabemöglichkeiten, Workflow-Ausführung und Ergebnis-Anzeige. Das ist besser als ein direkter
|
||||
> One-Click-Trigger, weil der User Kontext sieht und Parameter eingeben kann.
|
||||
|
||||
Für `actionType: "workflow"`: Nutzt bestehenden `POST /api/graphicalEditor/{geInstanceId}/execute`:
|
||||
- [x] **Navigation zu Analyse/Abschluss-Views** mit Tab-Parameter implementiert
|
||||
- Quick Actions nutzen `targetView: "analyse"` / `"abschluss"` + `tab: "budget"` / `"kpi"` / etc.
|
||||
- `TrusteeAnalyseView` und `TrusteeAbschlussView` laden Workflows via `templateTag`-Matching
|
||||
- [x] **Template-Workflows** in `TEMPLATE_WORKFLOWS` definiert mit korrekten Tags
|
||||
- `template:trustee-budget-comparison`, `template:trustee-kpi-dashboard`, `template:trustee-cashflow`, `template:trustee-forecast`, `template:trustee-year-end-check`
|
||||
- [x] **Workflow-Kopierung** bei Instanz-Erstellung via `_copyTemplateWorkflows`
|
||||
- [x] **Nachträgliche Sync-Möglichkeit** via `POST /api/admin/features/instances/{id}/sync-workflows` (Admin UI Button)
|
||||
|
||||
```typescript
|
||||
const _triggerWorkflow = async (config: WorkflowActionConfig) => {
|
||||
// 1. GraphicalEditor-Instanz des gleichen Mandanten finden
|
||||
const geInstance = instances.find(
|
||||
i => i.featureCode === 'graphicalEditor' && i.mandateId === currentMandateId
|
||||
);
|
||||
|
||||
// 2. System-Template-Workflow finden (nach templateCode)
|
||||
const workflows = await fetchWorkflowsByTemplate(geInstance.id, config.workflowTemplateCode);
|
||||
|
||||
// 3. Ausführung triggern
|
||||
const run = await executeWorkflow(geInstance.id, workflows[0].id);
|
||||
|
||||
// 4. Feedback: Toast "Workflow gestartet" + optional Link zur Run-Ansicht
|
||||
showToast({ message: t('quickActions.workflowGestartet'), action: { label: t('quickActions.details'), onClick: () => navigateToRun(run.id) } });
|
||||
};
|
||||
```
|
||||
|
||||
- [ ] **API-Funktionen** in `api/graphicalEditorApi.ts` (falls nicht vorhanden): `fetchWorkflowsByTemplate()`, `executeWorkflow()`
|
||||
**Hinweis:** Direkter `actionType: "workflow"` Dispatch (One-Click-Trigger ohne Zwischen-UI) bleibt als spätere Erweiterung möglich, wird aber aktuell nicht benötigt.
|
||||
|
||||
### Querschnitt-Checks
|
||||
|
||||
- [ ] API-Endpunkte: `GET /api/trustee/{instanceId}/quick-actions` (neu)
|
||||
- [ ] DB-Schema / Migration: nein
|
||||
- [ ] Frontend-Komponenten: `QuickActionBoard` (neu, generisch), `TrusteeDashboardView` (erweitert)
|
||||
- [ ] RBAC / Permissions: Filterung über `requiredRoles` im API-Endpoint
|
||||
- [ ] Neutralisierung betroffen? nein (Prompts gehen durch normale Workspace-Pipeline)
|
||||
- [ ] Navigation / Routing: Workspace URL-Parameter-Support
|
||||
- [ ] Billing-Impact? nein (Agent-Calls laufen über bestehende Billing-Pipeline)
|
||||
- [ ] i18n: Alle Labels in `QUICK_ACTIONS` nutzen `TextMultilingual`-Format
|
||||
- [x] API-Endpunkte: `GET /api/trustee/{instanceId}/quick-actions` — implementiert in `routeFeatureTrustee.py`
|
||||
- [x] DB-Schema / Migration: nein (keine DB-Änderung nötig)
|
||||
- [x] Frontend-Komponenten: `QuickActionBoard` (neu, generisch), `TrusteeDashboardView` (erweitert)
|
||||
- [x] RBAC / Permissions: Filterung über `requiredRoles` im API-Endpoint
|
||||
- [x] Neutralisierung betroffen? nein (Prompts gehen durch normale Workspace-Pipeline)
|
||||
- [x] Navigation / Routing: Workspace URL-Parameter-Support (`?prompt=`, `?autoStart=`)
|
||||
- [x] Billing-Impact? nein (Agent-Calls laufen über bestehende Billing-Pipeline)
|
||||
- [x] i18n: Alle Labels in `QUICK_ACTIONS` nutzen `TextMultilingual`-Format
|
||||
|
||||
---
|
||||
|
||||
Loading…
Reference in a new issue