436 lines
26 KiB
Markdown
436 lines
26 KiB
Markdown
<!-- status: build -->
|
|
<!-- started: 2026-04-09 -->
|
|
<!-- component: gateway | frontend-nyla | platform -->
|
|
|
|
# Quick Actions — Feature-Dashboard mit One-Click-Aktionen
|
|
|
|
## Beschreibung und Kontext
|
|
|
|
Treuhandbüros (Bling, PWG) und andere Kunden wünschen sich ein **Cockpit**, von dem aus sie ihre häufigsten Aufgaben per Knopfdruck starten können — Budget-Vergleich, Belegverarbeitung, KPI-Dashboard, Cashflow etc. Heute müssen sie dafür den Workspace öffnen und den richtigen Prompt manuell eintippen.
|
|
|
|
**Business-Treiber:** Das Feature-Dashboard (z.B. Trustee Dashboard) ist aktuell eine passive Statistik-Seite (Anzahl Positionen, Dokumente, Sync-Status). Mit Quick Actions wird es zum **aktiven Cockpit** — der Einstiegspunkt für produktive Arbeit. Das macht den Unterschied zwischen "generischem AI-Chat" und "Branchenlösung für Treuhänder".
|
|
|
|
**Abhängigkeiten:**
|
|
- Trustee Agent-Tools müssen funktionieren (`c-work/1-plan/2026-04-trustee-tooling-and-demo-prep.md`)
|
|
- Workspace SSE-Streaming muss stabil laufen (`c-work/1-plan/2026-04-gateway-int-stability-and-bugfixes.md`)
|
|
- Prompt-Templates aus `c-work/1-plan/2026-04-customer-demo-enablement.md`
|
|
|
|
**Risiko bei Nicht-Umsetzung:** Kunden sehen PORTA als "noch ein Chat-Tool" statt als branchenspezifische Plattform. Die Hürde vom Login zum Mehrwert bleibt hoch.
|
|
|
|
## Fokus und kritische Details
|
|
|
|
### Ist-Zustand: Trustee Dashboard
|
|
|
|
`frontend_nyla/src/pages/views/trustee/TrusteeDashboardView.tsx` zeigt aktuell:
|
|
- **Stats-Grid:** 4 Kacheln (Positionen, Dokumente, Buchhaltungs-Sync, Rollen)
|
|
- **Info-Sektion:** Instanz-Label, Mandant, Buchhaltungssystem
|
|
|
|
Kein Weg zu einer Aktion — keine Buttons, keine Links zum Workspace, keine Workflows.
|
|
|
|
### Architektur-Entscheid: Zwei Dispatch-Typen
|
|
|
|
Quick Actions dispatchen zu **bestehender Infrastruktur** — es wird keine zweite AI-Oberfläche gebaut:
|
|
|
|
| Typ | Dispatch-Ziel | Wann nutzen |
|
|
|-----|--------------|-------------|
|
|
| **`agentPrompt`** | Workspace mit vorgefülltem Prompt → Agent startet automatisch | Analyse-Aufgaben (Budget, KPIs, Cashflow, Prognosen, Jahresabschluss) |
|
|
| **`workflow`** | Graph-Editor System-Template wird direkt getriggert | Automatisierungs-Aufgaben (Belegimport, Daten-Sync, Spesen-Import) |
|
|
| **`link`** | Navigation zu einer bestehenden Seite | Schnellzugriff (Scan/Upload, Dokumente, Einstellungen) |
|
|
|
|
### Kritische Stellen
|
|
|
|
- **Workspace Pre-Fill:** Der Workspace (`WorkspacePage.tsx`) hat aktuell **keinen** Mechanismus für URL-Parameter `?prompt=...`. Das muss ergänzt werden.
|
|
- **Cross-Feature-Navigation:** Eine Trustee Quick Action muss den User zur Workspace-Instanz des gleichen Mandanten navigieren. Das erfordert Auflösung: Trustee-InstanceId → MandateId → Workspace-InstanceId.
|
|
- **RBAC-Filterung:** Quick Actions müssen nach Rolle gefiltert werden. Ein `trustee-client` soll "Belege hochladen" sehen, aber nicht "Jahresabschluss prüfen".
|
|
- **i18n:** Alle Labels müssen mehrsprachig sein (bestehendes `TextMultilingual`-Pattern nutzen).
|
|
|
|
### Warum kein eigenes AI-Rendering auf dem Dashboard?
|
|
|
|
Der Workspace hat bereits: Chat-Rendering, Chart-Anzeige, Datei-Handling, SSE-Streaming, Progressive Summarization, Tool-Ergebnisse. Das zu duplizieren wäre enormer Aufwand. Stattdessen nutzen wir den Workspace als "Execution Engine" und das Dashboard als "Launchpad".
|
|
|
|
## Ziel und Nicht-Ziele
|
|
|
|
**Ziel:**
|
|
- Feature-Dashboards (Trustee als Pilot, danach CommCoach, Workspace) zeigen kontextspezifische Quick Action Cards
|
|
- Klick auf eine `agentPrompt`-Card öffnet Workspace mit vorgefülltem Prompt und startet den Agent
|
|
- Klick auf eine `workflow`-Card triggert einen Graph-Editor Workflow
|
|
- Actions sind RBAC-gefiltert, i18n-ready und per Feature-Instanz konfigurierbar
|
|
- Wiederverwendbare `QuickActionBoard`-Komponente für alle Features
|
|
|
|
**Explizit NICHT:**
|
|
- Kein AI-Rendering auf dem Dashboard selbst (kein Chat, keine Charts auf der Trustee-Seite)
|
|
- Keine neuen DB-Tabellen — Quick Actions leben im Code (wie `UI_OBJECTS`) + optional in `FeatureInstance.config`
|
|
- Keine neuen API-Verträge für Workflow-Execution (nutzt bestehenden `POST /{instanceId}/execute`)
|
|
- Kein Prompt-Editor für Endnutzer (kommt ggf. später)
|
|
|
|
## Betroffene Module
|
|
|
|
- **Gateway:** `features/trustee/mainTrustee.py` (Quick Action Definitionen), `features/trustee/routeFeatureTrustee.py` (API-Endpoint), ggf. `features/workspace/routeFeatureWorkspace.py` (Pre-Fill-Support)
|
|
- **Frontend:** `pages/views/trustee/TrusteeDashboardView.tsx` (Quick Action Board einbinden), neue Komponente `components/QuickActionBoard/`, `pages/views/workspace/WorkspacePage.tsx` (URL-Param-Support)
|
|
- **DB-Migration:** nein
|
|
- **Andere Komponenten:** Prompt-Templates (Markdown-Dateien, getrennt gepflegt)
|
|
|
|
## Entscheidungen
|
|
|
|
| Datum | Entscheidung | Begründung |
|
|
|-------|-------------|------------|
|
|
| 2026-04-09 | Quick Actions im Code definieren (wie `UI_OBJECTS`), nicht in einer DB-Tabelle | Einfach, versioniert, kein Migrations-Aufwand. Custom-Actions später über `FeatureInstance.config` |
|
|
| 2026-04-09 | Dispatch zu Workspace statt Inline-Rendering auf dem Dashboard | Workspace hat die komplette AI-Infrastruktur (Chat, Charts, Streaming). Kein Sinn in Duplizierung |
|
|
| 2026-04-09 | `QuickActionBoard` als generische Plattform-Komponente, nicht Trustee-spezifisch | CommCoach, Workspace, RealEstate können dieselbe Komponente nutzen |
|
|
| 2026-04-09 | Workspace bekommt URL-Parameter `?prompt=...&autoStart=true` | Einfachster Weg für Cross-Feature-Dispatch. Kein Backend-Spezialweg nötig |
|
|
| 2026-04-09 | Prompt-Templates als Konfigurationswert in der Quick Action, nicht als separate Dateien | Prompt gehört zur Aktion — eine Quelle der Wahrheit. Kein File-Lookup zur Laufzeit |
|
|
|
|
---
|
|
|
|
## Umsetzungs-Checkliste
|
|
|
|
### Phase 1: Backend — Quick Action Definitionen & API (Gateway)
|
|
|
|
- [x] **`QUICK_ACTIONS` in `mainTrustee.py` definieren**
|
|
|
|
Gleiches Pattern wie `UI_OBJECTS`, `TEMPLATE_ROLES`:
|
|
|
|
```python
|
|
QUICK_ACTIONS = [
|
|
{
|
|
"id": "trustee-process-receipts",
|
|
"label": {"de": "Belege verarbeiten", "en": "Process Receipts", "fr": "Traiter les justificatifs"},
|
|
"description": {"de": "Belege aus SharePoint importieren, klassifizieren und verbuchen", "en": "Import receipts from SharePoint, classify and book", "fr": "Importer les justificatifs depuis SharePoint, classer et comptabiliser"},
|
|
"icon": "mdi-file-document-check-outline",
|
|
"color": "#4CAF50",
|
|
"category": "import",
|
|
"actionType": "workflow",
|
|
"config": {
|
|
"workflowTemplateCode": "trustee-receipt-import"
|
|
},
|
|
"requiredRoles": ["trustee-user", "trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 1
|
|
},
|
|
{
|
|
"id": "trustee-sync-accounting",
|
|
"label": {"de": "Daten synchronisieren", "en": "Sync Accounting Data", "fr": "Synchroniser les données"},
|
|
"description": {"de": "Buchhaltungsdaten aus dem externen System aktualisieren", "en": "Refresh accounting data from external system", "fr": "Actualiser les données du système externe"},
|
|
"icon": "mdi-sync",
|
|
"color": "#FF9800",
|
|
"category": "import",
|
|
"actionType": "agentPrompt",
|
|
"config": {
|
|
"prompt": "Aktualisiere die Buchhaltungsdaten aus dem verbundenen Buchhaltungssystem. Nutze refreshTrusteeData mit forceRefresh=true. Zeige mir danach eine Zusammenfassung: Anzahl Konten, Buchungen, Kontakte und den Zeitraum der Daten."
|
|
},
|
|
"requiredRoles": ["trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 2
|
|
},
|
|
{
|
|
"id": "trustee-budget-comparison",
|
|
"label": {"de": "Budget-Vergleich", "en": "Budget Comparison", "fr": "Comparaison budgétaire"},
|
|
"description": {"de": "Soll/Ist-Vergleich der Buchhaltung mit Budget-Excel", "en": "Compare actuals vs. budget from Excel", "fr": "Comparer les données réelles avec le budget Excel"},
|
|
"icon": "mdi-chart-bar",
|
|
"color": "#2196F3",
|
|
"category": "analyse",
|
|
"actionType": "agentPrompt",
|
|
"config": {
|
|
"prompt": "Ich möchte einen Budget-Soll/Ist-Vergleich durchführen. Bitte:\n1. Frage mich nach der Budget-Datei (Excel) oder suche im Workspace nach einer Datei mit 'Budget' im Namen\n2. Lade die aktuellen Buchhaltungsdaten (refreshTrusteeData falls nötig)\n3. Vergleiche die Soll-Werte aus dem Budget mit den Ist-Werten aus der Buchhaltung pro Konto\n4. Berechne die Abweichung (absolut und prozentual)\n5. Erstelle ein Abweichungs-Chart (Balkendiagramm: Soll vs. Ist pro Konto)\n6. Markiere kritische Abweichungen (>10%) und gib eine kurze Einschätzung",
|
|
"suggestFileUpload": true,
|
|
"uploadHint": {"de": "Budget-Excel hochladen", "en": "Upload budget Excel"}
|
|
},
|
|
"requiredRoles": ["trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 3
|
|
},
|
|
{
|
|
"id": "trustee-kpi-dashboard",
|
|
"label": {"de": "KPI-Dashboard", "en": "KPI Dashboard", "fr": "Tableau de bord KPI"},
|
|
"description": {"de": "Kennzahlen berechnen und visualisieren", "en": "Calculate and visualize key metrics", "fr": "Calculer et visualiser les indicateurs clés"},
|
|
"icon": "mdi-view-dashboard-outline",
|
|
"color": "#9C27B0",
|
|
"category": "analyse",
|
|
"actionType": "agentPrompt",
|
|
"config": {
|
|
"prompt": "Erstelle ein KPI-Dashboard basierend auf den aktuellen Buchhaltungsdaten. Berechne und visualisiere:\n1. **Bruttogewinn** und Bruttogewinnmarge\n2. **EBIT** (Betriebsergebnis)\n3. **Gewinnmarge** (Reingewinn / Umsatz)\n4. **Eigenkapitalquote** und Check auf hälftigen Kapitalverlust (OR Art. 725)\n5. **Liquiditätsgrad 1-3** (Cash Ratio, Quick Ratio, Current Ratio)\n6. **Überschuldungs-Check**\n\nErstelle für jede Kennzahl einen kurzen Kommentar (gut/kritisch/Handlungsbedarf). Erstelle mindestens 2 Charts: ein Übersichts-Chart der Margen und ein Liquiditäts-Chart."
|
|
},
|
|
"requiredRoles": ["trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 4
|
|
},
|
|
{
|
|
"id": "trustee-cashflow",
|
|
"label": {"de": "Cashflow-Rechnung", "en": "Cash Flow Statement", "fr": "Tableau des flux de trésorerie"},
|
|
"description": {"de": "Cashflow berechnen und analysieren", "en": "Calculate and analyze cash flow", "fr": "Calculer et analyser le flux de trésorerie"},
|
|
"icon": "mdi-cash-multiple",
|
|
"color": "#009688",
|
|
"category": "analyse",
|
|
"actionType": "agentPrompt",
|
|
"config": {
|
|
"prompt": "Erstelle eine Cashflow-Rechnung basierend auf den aktuellen Buchhaltungsdaten:\n1. **Operativer Cashflow:** Starte vom Reingewinn, bereinige um nicht-cash-wirksame Positionen (Abschreibungen, Rückstellungen, Wertberichtigungen)\n2. **Investitions-Cashflow:** Investitionen in Sachanlagen, Finanzanlagen\n3. **Finanzierungs-Cashflow:** Darlehensaufnahmen/-rückzahlungen, Dividenden, Kapitalerhöhungen\n4. **Netto-Cashflow** und Veränderung der liquiden Mittel\n\nWarne bei kritischen Werten. Erstelle ein Wasserfall-Chart oder gestapeltes Balkendiagramm der drei Cashflow-Bereiche."
|
|
},
|
|
"requiredRoles": ["trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 5
|
|
},
|
|
{
|
|
"id": "trustee-year-end-check",
|
|
"label": {"de": "Jahresabschluss prüfen", "en": "Year-End Review", "fr": "Contrôle de clôture annuelle"},
|
|
"description": {"de": "Automatische Prüfungen für den Jahresabschluss", "en": "Automated year-end review checks", "fr": "Contrôles automatisés de clôture"},
|
|
"icon": "mdi-clipboard-check-outline",
|
|
"color": "#795548",
|
|
"category": "abschluss",
|
|
"actionType": "agentPrompt",
|
|
"config": {
|
|
"prompt": "Führe eine automatische Jahresabschluss-Prüfung durch:\n1. **Saldovalidierung:** Prüfe alle Bilanzkonten auf Plausibilität (negative Saldi wo nicht erwartet, ungewöhnlich hohe Saldi)\n2. **Vorjahresvergleich:** Vergleiche Bilanz- und ER-Positionen mit dem Vorjahr, markiere Abweichungen >20%\n3. **Abgrenzungen:** Identifiziere potenzielle transitorische Aktiven/Passiven (regelmässige Aufwände ohne Dezember-Buchung, Erträge im Voraus)\n4. **Gesetzliche Prüfungen:** Hälftiger Kapitalverlust (OR 725), Überschuldung, Mindestkapital\n5. **MWST-Plausibilisierung:** Vorsteuer vs. geschätzter Aufwand, Umsatzsteuer vs. Umsatz\n\nErstelle eine Checkliste mit Status (OK / Warnung / Kritisch) pro Prüfpunkt."
|
|
},
|
|
"requiredRoles": ["trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 6
|
|
},
|
|
{
|
|
"id": "trustee-forecast",
|
|
"label": {"de": "Prognose erstellen", "en": "Create Forecast", "fr": "Créer une prévision"},
|
|
"description": {"de": "Trend-Analyse und Prognose der nächsten Monate", "en": "Trend analysis and forecast for coming months", "fr": "Analyse de tendance et prévision"},
|
|
"icon": "mdi-chart-timeline-variant",
|
|
"color": "#E91E63",
|
|
"category": "analyse",
|
|
"actionType": "agentPrompt",
|
|
"config": {
|
|
"prompt": "Erstelle eine Finanzprognose basierend auf den historischen Buchhaltungsdaten:\n1. Analysiere die Umsatz- und Aufwandsentwicklung der letzten 6 Monate (monatliche Aggregation)\n2. Identifiziere Trends und Saisonalitäten\n3. Prognostiziere Umsatz, Aufwand und Gewinn für die nächsten 3 Monate\n4. Erstelle ein Chart mit Ist-Werten und Prognose-Korridor (Best/Expected/Worst Case)\n5. Markiere Risiken: \"Wenn der Trend anhält, passiert X\"\n\nNutze eine einfache lineare Extrapolation mit Saisonalitätskorrektur wo sinnvoll."
|
|
},
|
|
"requiredRoles": ["trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 7
|
|
},
|
|
{
|
|
"id": "trustee-upload-receipt",
|
|
"label": {"de": "Beleg hochladen", "en": "Upload Receipt", "fr": "Télécharger un justificatif"},
|
|
"description": {"de": "Beleg scannen oder als Datei hochladen", "en": "Scan or upload a receipt", "fr": "Scanner ou télécharger un justificatif"},
|
|
"icon": "mdi-camera-document-outline",
|
|
"color": "#607D8B",
|
|
"category": "schnellzugriff",
|
|
"actionType": "link",
|
|
"config": {
|
|
"targetView": "scan-upload"
|
|
},
|
|
"requiredRoles": ["trustee-user", "trustee-client", "trustee-accountant", "trustee-admin"],
|
|
"sortOrder": 8
|
|
},
|
|
]
|
|
```
|
|
|
|
- [x] **`getQuickActions()` Funktion in `mainTrustee.py`** analog zu `getUiObjects()`, `getTemplateRoles()`
|
|
|
|
- [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`
|
|
- Gruppiert nach `category` (optional, Frontend kann auch selbst gruppieren)
|
|
- Response: `{ "actions": [...], "categories": [{ "id": "import", "label": {...} }, ...] }`
|
|
|
|
### Phase 2: Frontend — QuickActionBoard Komponente
|
|
|
|
- [x] **Neue Komponente `components/QuickActionBoard/QuickActionBoard.tsx`**
|
|
|
|
Generische, wiederverwendbare Komponente:
|
|
|
|
```typescript
|
|
interface QuickAction {
|
|
id: string;
|
|
label: string; // bereits in User-Sprache aufgelöst
|
|
description: string;
|
|
icon: string;
|
|
color: string;
|
|
category: string;
|
|
actionType: 'agentPrompt' | 'workflow' | 'link';
|
|
config: Record<string, any>;
|
|
}
|
|
|
|
interface QuickActionBoardProps {
|
|
actions: QuickAction[];
|
|
onDispatch: (action: QuickAction) => void;
|
|
loading?: boolean;
|
|
}
|
|
```
|
|
|
|
UI:
|
|
- Responsive Card-Grid (`grid-template-columns: repeat(auto-fill, minmax(220px, 1fr))`)
|
|
- Jede Card: Icon (farbig) + Titel + Beschreibung (1-Zeiler) + Hover-Effekt
|
|
- Kategorien als optionale Section-Header
|
|
- Loading-Skeleton während API-Call
|
|
- Dark-Theme Support (bestehende CSS-Variablen nutzen)
|
|
- Kein eigener State — rein präsentational mit `onDispatch`-Callback
|
|
|
|
- [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)
|
|
- Icon-Rendering: `mdi-*` Icons aus bestehender Icon-Library oder als Unicode/SVG Fallback
|
|
|
|
### Phase 3: Frontend — Dashboard-Integration
|
|
|
|
- [x] **`TrusteeDashboardView.tsx` erweitern**
|
|
|
|
Unter dem bestehenden `statsGrid` und `infoSection`:
|
|
|
|
```tsx
|
|
// Nach der infoSection:
|
|
<QuickActionBoard
|
|
actions={quickActions}
|
|
onDispatch={_handleQuickAction}
|
|
loading={actionsLoading}
|
|
/>
|
|
```
|
|
|
|
Dispatch-Handler:
|
|
```tsx
|
|
const _handleQuickAction = (action: QuickAction) => {
|
|
switch (action.actionType) {
|
|
case 'agentPrompt':
|
|
_navigateToWorkspaceWithPrompt(action.config);
|
|
break;
|
|
case 'workflow':
|
|
_triggerWorkflow(action.config);
|
|
break;
|
|
case 'link':
|
|
_navigateToView(action.config.targetView);
|
|
break;
|
|
}
|
|
};
|
|
```
|
|
|
|
- [~] **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)
|
|
|
|
- [x] **Trustee API Funktion `fetchQuickActions()`** in `api/trusteeApi.ts`
|
|
|
|
### Phase 4: Frontend — Workspace Pre-Fill (Cross-Feature-Dispatch)
|
|
|
|
- [x] **URL-Parameter-Support in `WorkspacePage.tsx`**
|
|
|
|
Workspace erkennt URL-Suchparameter:
|
|
- `?prompt=<encodedText>` → Füllt Prompt-Feld vor
|
|
- `&autoStart=true` → Startet den Agent automatisch nach dem Laden
|
|
- `&sourceFeature=trustee` → Optional: Kontext-Hinweis woher der User kommt
|
|
- `&sourceInstanceId=<id>` → Optional: Trustee-Instanz für Feature-Data-Zugriff
|
|
|
|
Implementierung:
|
|
```tsx
|
|
useEffect(() => {
|
|
const params = new URLSearchParams(window.location.search);
|
|
const prompt = params.get('prompt');
|
|
const autoStart = params.get('autoStart') === 'true';
|
|
|
|
if (prompt) {
|
|
setInputText(decodeURIComponent(prompt));
|
|
// URL bereinigen (Params entfernen, damit Reload nicht erneut startet)
|
|
window.history.replaceState({}, '', window.location.pathname);
|
|
|
|
if (autoStart) {
|
|
// Kurze Verzögerung damit UI gerendert ist
|
|
setTimeout(() => _handleSend(), 300);
|
|
}
|
|
}
|
|
}, []);
|
|
```
|
|
|
|
- [x] **Workspace-Instanz-Auflösung** für Cross-Feature-Navigation
|
|
|
|
Helper-Funktion in Trustee Dashboard:
|
|
```typescript
|
|
const _navigateToWorkspaceWithPrompt = async (config: QuickActionConfig) => {
|
|
// 1. Workspace-Instanz des gleichen Mandanten finden
|
|
const workspaceInstance = instances.find(
|
|
i => i.featureCode === 'workspace' && i.mandateId === currentMandateId
|
|
);
|
|
if (!workspaceInstance) { /* Fehlerbehandlung */ }
|
|
|
|
// 2. Navigation mit Prompt-Parametern
|
|
const params = new URLSearchParams({
|
|
prompt: config.prompt,
|
|
autoStart: 'true',
|
|
sourceFeature: 'trustee',
|
|
sourceInstanceId: instanceId,
|
|
});
|
|
navigate(`/features/workspace/${workspaceInstance.id}/dashboard?${params}`);
|
|
};
|
|
```
|
|
|
|
### Phase 5: Workflow-Dispatch (für `actionType: "workflow"`)
|
|
|
|
> **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.
|
|
|
|
- [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)
|
|
|
|
**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
|
|
|
|
- [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
|
|
|
|
---
|
|
|
|
## Akzeptanzkriterien
|
|
|
|
| # | Kriterium (Given-When-Then) | Prio |
|
|
|---|---------------------------|------|
|
|
| 1 | Given Trustee Dashboard, When ein User mit Rolle `trustee-accountant` die Seite öffnet, Then sieht er mindestens 6 Quick Action Cards (Belege, Sync, Budget, KPIs, Cashflow, Jahresabschluss) in einem Card-Grid unterhalb der Statistiken | must |
|
|
| 2 | Given Quick Action "Budget-Vergleich" (Typ `agentPrompt`), When der User auf die Card klickt, Then wird er zum Workspace navigiert mit dem vorgefüllten Prompt und der Agent startet automatisch | must |
|
|
| 3 | Given Quick Action "Belege verarbeiten" (Typ `workflow`), When der User auf die Card klickt, Then wird der zugehörige Graph-Editor Workflow getriggert und der User erhält eine Bestätigung | must |
|
|
| 4 | Given Quick Action "Beleg hochladen" (Typ `link`), When der User auf die Card klickt, Then wird er zur Scan/Upload-Seite der aktuellen Trustee-Instanz navigiert | must |
|
|
| 5 | Given ein User mit Rolle `trustee-client`, When er das Trustee Dashboard öffnet, Then sieht er nur die Quick Actions für seine Rolle (z.B. "Beleg hochladen"), nicht die Accountant-Aktionen (Budget, KPIs etc.) | must |
|
|
| 6 | Given Dark Theme aktiv, When das Dashboard mit Quick Actions gerendert wird, Then sind alle Cards visuell korrekt (Farben, Kontraste, Hover-Effekte) im Dark Mode | should |
|
|
| 7 | Given Workspace geöffnet via Quick Action mit `autoStart=true`, When der Agent gestartet wird, Then enthält der System-Prompt Kontext über die Trustee-Instanz und der Agent kann sofort auf Trustee-Daten zugreifen | should |
|
|
| 8 | Given schmales Viewport (< 768px), When das Dashboard angezeigt wird, Then sind die Quick Action Cards in einem 1-2 Spalten Grid und weiterhin klickbar | should |
|
|
|
|
## Testplan
|
|
|
|
| ID | AC | Art | Automatisiert | Repo-Pfad / Methode | Status |
|
|
|----|----|-----|--------------|---------------------|--------|
|
|
| T1 | 1, 5 | api | ja | `gateway/tests/features/trustee/test_quick_actions_api.py` — Endpoint liefert gefilterte Actions pro Rolle | pending |
|
|
| T2 | 2 | e2e | nein | Manuell: Card klicken → Workspace öffnet mit Prompt → Agent startet | pending |
|
|
| T3 | 3 | e2e | nein | Manuell: Workflow-Card klicken → Workflow läuft → Bestätigung sichtbar | pending |
|
|
| T4 | 4 | e2e | nein | Manuell: Link-Card klicken → korrekte Navigation | pending |
|
|
| T5 | 6 | visual | nein | Manuell: Dark/Light Mode vergleichen | pending |
|
|
| T6 | 7 | e2e | nein | Manuell: Budget-Vergleich aus Quick Action → Agent nutzt Trustee-Daten korrekt | pending |
|
|
| T7 | 8 | visual | nein | Manuell: Browser-Fenster schmaler als 768px | pending |
|
|
|
|
## Spätere Erweiterungen (nicht in Scope)
|
|
|
|
| Idee | Beschreibung |
|
|
|------|-------------|
|
|
| **Custom Quick Actions pro Mandant** | Admin kann eigene Actions definieren (in `FeatureInstance.config.quickActions`), die mit den System-Actions gemergt werden |
|
|
| **Workspace Empty State** | Quick Actions des aktiven Features im Workspace Empty State anzeigen (wenn kein Chat offen) |
|
|
| **Inline-Ergebnis-Preview** | Nach Agent-Ausführung: Zusammenfassung und Charts auf dem Dashboard selbst anzeigen (statt nur im Workspace) |
|
|
| **Favoriten / Pinned Actions** | User kann Actions pinnen; gepinnte Actions erscheinen zuoberst oder auf einer persönlichen "Home"-Seite |
|
|
| **CommCoach Quick Actions** | "Mietergespräch üben", "Nebenkostenfragen trainieren" etc. auf dem CommCoach Dashboard |
|
|
| **Prompt-Editor** | Power-User können Prompts der Quick Actions anpassen (Mandanten-spezifisch) |
|
|
|
|
## Links
|
|
|
|
- Kundenwünsche: `local/notes/use-cases-inputs-customers.md`
|
|
- Customer Demo Enablement: `c-work/1-plan/2026-04-customer-demo-enablement.md`
|
|
- Trustee Tooling: `c-work/1-plan/2026-04-trustee-tooling-and-demo-prep.md`
|
|
- Trustee Dashboard (Frontend): `frontend_nyla/src/pages/views/trustee/TrusteeDashboardView.tsx`
|
|
- Trustee Feature (Gateway): `gateway/modules/features/trustee/mainTrustee.py`
|
|
- Trustee Routes (Gateway): `gateway/modules/features/trustee/routeFeatureTrustee.py`
|
|
- Workspace Routes (Gateway): `gateway/modules/features/workspace/routeFeatureWorkspace.py`
|
|
- Workspace Page (Frontend): `frontend_nyla/src/pages/views/workspace/WorkspacePage.tsx`
|
|
- FeatureView Registry (Frontend): `frontend_nyla/src/pages/FeatureView.tsx`
|
|
- Quick Action Board (Frontend, neu): `frontend_nyla/src/components/QuickActionBoard/`
|
|
- Navigation API: `wiki/b-reference/platform/navigation.md`
|
|
|
|
## Abschluss
|
|
|
|
- [ ] b-reference/ aktualisiert (`b-reference/gateway/features/trustee.md` — neu anlegen mit Quick Actions)
|
|
- [ ] b-reference/frontend-nyla/architecture.md aktualisiert (QuickActionBoard-Komponente)
|
|
- [ ] TOPICS.md aktualisiert (neues Thema "Quick Actions")
|
|
- [ ] Dieses Dokument → z-archive/ verschoben
|