This commit is contained in:
ValueOn AG 2026-04-13 00:38:44 +02:00
parent 5de8aa0558
commit 4e6977ef96
6 changed files with 99 additions and 94 deletions

View file

@ -1,5 +1,5 @@
<!-- status: canonical --> <!-- status: canonical -->
<!-- lastReviewed: 2026-04-06 --> <!-- lastReviewed: 2026-04-12 -->
# Themen-Index für AI-Kontext # Themen-Index für AI-Kontext
@ -21,7 +21,7 @@ Lade immer zuerst diese Datei. Dann gezielt die passende(n) Referenz-Datei(en).
| Gateway-Architektur | b-reference/gateway/architecture.md | Backend-Module, Services, Interfaces | | Gateway-Architektur | b-reference/gateway/architecture.md | Backend-Module, Services, Interfaces |
| AI Agent & Tools | b-reference/gateway/ai-agent.md | Agent-Verhalten, Tool-Registrierung, RAG | | AI Agent & Tools | b-reference/gateway/ai-agent.md | Agent-Verhalten, Tool-Registrierung, RAG |
| Workflow-Engine | b-reference/gateway/workflow.md | Methoden, Aktionen, WorkflowManager | | Workflow-Engine | b-reference/gateway/workflow.md | Methoden, Aktionen, WorkflowManager |
| Automation | b-reference/gateway/automation.md | Automation v1+v2, Templates, Flow-Editor | | Automation | b-reference/gateway/automation.md | Graphical Editor, Scheduler, System-Automatisierung (`/automations`, `/api/system/workflow-runs/*`) |
| Billing & Subscriptions | b-reference/gateway/billing.md | Abrechnung, Prepaid, State Machine | | Billing & Subscriptions | b-reference/gateway/billing.md | Abrechnung, Prepaid, State Machine |
| Frontend Nyla | b-reference/frontend-nyla/architecture.md | UI-Seiten, Komponenten, Hooks, Routing | | Frontend Nyla | b-reference/frontend-nyla/architecture.md | UI-Seiten, Komponenten, Hooks, Routing |
| Private LLM | b-reference/private-llm/architecture.md | Internes LLM, Neutralisierung | | Private LLM | b-reference/private-llm/architecture.md | Internes LLM, Neutralisierung |
@ -42,6 +42,7 @@ Lade immer zuerst diese Datei. Dann gezielt die passende(n) Referenz-Datei(en).
| Thema | Datei | Wann laden | | Thema | Datei | Wann laden |
|-------|-------|------------| |-------|-------|------------|
| Automation Unification | c-work/1-plan/2026-04-automation-unification.md | Refactoring v1/v2/Workspace | | Automation Unification | c-work/1-plan/2026-04-automation-unification.md | Refactoring v1/v2/Workspace |
| Zentrale Workflow-Admin (Meine Sicht) | c-work/1-plan/2026-04-automation-central-admin.md | `/automations` Tabs Dashboard + Workflows, `GET .../workflow-runs/workflows` |
| Web Image Search | c-work/1-plan/2026-03-web-image-search.md | WEB_SEARCH_MEDIA Feature | | Web Image Search | c-work/1-plan/2026-03-web-image-search.md | WEB_SEARCH_MEDIA Feature |
| UI i18n / Sprachsets (done) | c-work/3-validate/2026-04-ui-i18n-dynamic-language-sets.md | Mehrsprachigkeit, `t()`, Sprachset-API, Admin-UI, AI-Übersetzung | | UI i18n / Sprachsets (done) | c-work/3-validate/2026-04-ui-i18n-dynamic-language-sets.md | Mehrsprachigkeit, `t()`, Sprachset-API, Admin-UI, AI-Übersetzung |
| Gateway i18n Unified | c-work/3-validate/2026-04 gateway-i18n-unified.md | `@i18nModel`, `t()` Backend, Boot-Sync, TextMultilingual dynamisch | | Gateway i18n Unified | c-work/3-validate/2026-04 gateway-i18n-unified.md | `@i18nModel`, `t()` Backend, Boot-Sync, TextMultilingual dynamisch |

View file

@ -1,5 +1,5 @@
<!-- status: canonical --> <!-- status: canonical -->
<!-- lastReviewed: 2026-04-07 --> <!-- lastReviewed: 2026-04-12 -->
<!-- verifiedAgainst: gateway (codebase audit 2026-04-07, post Automation Unification) --> <!-- verifiedAgainst: gateway (codebase audit 2026-04-07, post Automation Unification) -->
# Automation (Graphical Editor) # Automation (Graphical Editor)
@ -182,6 +182,28 @@ Rollen werden beim Feature-Start via `_syncTemplateRolesToDb()` synchronisiert (
--- ---
## System-Automatisierung (Meine Sicht)
Mandatsuebergreifende Uebersicht im Frontend: Route **`/automations`** (`frontend_nyla` → `AutomationsDashboardPage`), Eintrag unter **Meine Sicht** in der Navigation.
| Tab | Inhalt |
|-----|--------|
| **Dashboard** | Metriken (`GET /api/system/workflow-runs/metrics`), Runs-Tabelle mit Backend-Paginierung (`GET /api/system/workflow-runs`) |
| **Workflows** | Liste aller nicht-Template-Workflows aus der Greenfield-DB, gefiltert nach Mandatszugehoerigkeit; Enrichment mit Mandats- und Instanz-Label; pro Zeile **`canEdit` / `canDelete` / `canExecute`** (Sysadmin: alles; Mandats-Admin fuer betroffenes Mandat: alles; sonst keine Mutationsaktionen im UI) |
**Gateway:** `routes/routeWorkflowDashboard.py`, Router-Prefix **`/api/system/workflow-runs`**.
| Methode | Pfad | Beschreibung |
|---------|------|--------------|
| GET | `/api/system/workflow-runs` | Runs (offset/limit, RBAC) |
| GET | `/api/system/workflow-runs/metrics` | Aggregierte Kennzahlen |
| GET | `/api/system/workflow-runs/{runId}/steps` | Step-Logs fuer einen Run |
| GET | `/api/system/workflow-runs/workflows` | Workflows mandatsuebergreifend (Query: `active`, `mandateId`, `pagination` als JSON) |
Instanzspezifische Verwaltung unveraendert unter **`/api/workflows/{instanceId}/...`** (`routeFeatureGraphicalEditor.py`).
---
## Schluessel-Dateien ## Schluessel-Dateien
| Bereich | Pfade (`gateway/modules/`) | | Bereich | Pfade (`gateway/modules/`) |
@ -192,6 +214,7 @@ Rollen werden beim Feature-Start via `_syncTemplateRolesToDb()` synchronisiert (
| Datenmodell | `features/graphicalEditor/datamodelFeatureGraphicalEditor.py` | | Datenmodell | `features/graphicalEditor/datamodelFeatureGraphicalEditor.py` |
| Node-Definitionen | `features/graphicalEditor/nodeDefinitions/` | | Node-Definitionen | `features/graphicalEditor/nodeDefinitions/` |
| Execution Engine | `workflows/automation2/executionEngine.py` | | Execution Engine | `workflows/automation2/executionEngine.py` |
| System-Runs / zentrale Workflow-Liste | `routes/routeWorkflowDashboard.py` |
| Scheduler | `workflows/scheduler/mainScheduler.py` | | Scheduler | `workflows/scheduler/mainScheduler.py` |
| Toolbox Registry | `serviceCenter/services/serviceAgent/toolboxRegistry.py` | | Toolbox Registry | `serviceCenter/services/serviceAgent/toolboxRegistry.py` |
| Action Library | `workflows/methods/`, `workflows/processing/` (`ActionExecutor`, `methodDiscovery`) | | Action Library | `workflows/methods/`, `workflows/processing/` (`ActionExecutor`, `methodDiscovery`) |

View file

@ -45,7 +45,7 @@
| UC1 | **Treuhand: Automatisierte Spesenverarbeitung** | 6 Min | Beleg → OCR → Kontierung → Export in Sekunden | Trustee-Feature, Graph-Editor Workflow, SharePoint-Nodes | | 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 | | UC2 | **Immobilien: Automatisierte Machbarkeitsstudie** | 4 Min | Grundstück eingeben → 6 Min statt 4 Std. Recherche | RealEstate-Feature, Agent + webSearch + readUrl |
| UC3 | **Enterprise: AI Knowledge Chatbot** | 4 Min | Frage stellen → sofortige Antwort mit Quellenangabe | Chatbot-Feature, RAG, Neutralisierung | | UC3 | **Enterprise: AI Knowledge Chatbot** | 4 Min | Frage stellen → sofortige Antwort mit Quellenangabe | Chatbot-Feature, RAG, Neutralisierung |
| UC4 | **Sprach-Deployment: Neue Sprache in 5 Minuten** | 3 Min | Sprache anlegen → AI übersetzt → UI sofort mehrsprachig | i18n-System, AI-Batch-Translation, Admin-UI | | 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 | | 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 | | — | **Neutralisierung (Querschnitt)** | 3 Min | PII live entfernen + Re-Personalisierung | Neutralisierung-Feature, Private LLM |
@ -78,10 +78,11 @@
## Betroffene Module ## Betroffene Module
- **Gateway:** `modules/bootstrap/bootstrapDemo.py` (neu), `modules/system/mainSystem.py` (Nav-Eintrag), `features/trustee/`, `features/realestate/`, `features/chatbot/`, `features/neutralization/`, `features/workspace/`, `features/graphicalEditor/` - **Gateway:** `modules/demoConfigs/` (neu — Demo-Config-System), `modules/routes/routeAdminDemoConfig.py` (neu), `modules/system/mainSystem.py` (Nav-Eintrag), `features/trustee/`, `features/chatbot/`, `features/neutralization/`, `features/workspace/`, `features/graphicalEditor/`
- **Frontend:** `pages/system/IntegrationsOverviewPage.tsx` (neu), `config/pageRegistry.tsx` (Eintrag) - **Frontend:** `pages/admin/AdminDemoConfigPage.tsx` (neu), `IntegrationsOverviewPage.tsx` (erledigt), `config/pageRegistry.tsx` (Eintrag), `App.tsx` (Route)
- **DB-Migration:** nein (nur Daten-Seeding) - **DB-Migration:** nein (nur Daten-Seeding)
- **Andere Komponenten:** Testdaten (PDF, Excel, CSV), Demo-Skript (Markdown), Test-Suite (pytest) - **Config:** `gateway/config.ini` (Demo_RMA_* Credentials)
- **Andere Komponenten:** Testdaten (PDF, Excel, CSV) in `gateway/demoData/`, Demo-Skript (Markdown), Test-Suite (pytest)
--- ---
@ -111,37 +112,39 @@
- [ ] **Demo-Storyline abstimmen:** Reihenfolge, Übergänge, wer was sagt - [ ] **Demo-Storyline abstimmen:** Reihenfolge, Übergänge, wer was sagt
- [ ] **Fallback-Strategie:** Was wenn ein UC live hängt? (→ vorbereitete Screenshots/Video) - [ ] **Fallback-Strategie:** Was wenn ein UC live hängt? (→ vorbereitete Screenshots/Video)
### Phase 1: Bootstrap-Modul `demo` (Mo Vormittag) ### Phase 0.5: Demo-Config System (erledigt ✅)
- [ ] **`gateway/modules/bootstrap/bootstrapDemo.py`** erstellen - [x] **`gateway/modules/demoConfigs/`** — Modulares Demo-Config-System
- Funktion `bootstrapDemoEnvironment(db)` — idempotent, aufgerufen via CLI-Flag oder API - `_baseDemoConfig.py` — Abstrakte Basisklasse mit `load()` / `remove()`
- Erstellt Demo-Mandant "PowerON Demo" mit allen nötigen Feature-Instanzen - `__init__.py` — Auto-Discovery aller Config-Files im Ordner
- Seeded Demo-User: `demo@poweron.ch` (Admin), `treuhänder@demo.ch` (Rolle: Mandant) - `investorDemo2026.py` — Investor-Demo Konfiguration:
- Aktiviert Features: workspace, trustee, realestate, chatbot, neutralization, graphicalEditor - Mandant **HappyLife AG** (`happylife`): workspace, trustee(RMA), graphicalEditor, chatbot, neutralization
- Lädt Demo-Testdaten (PDFs, Excel) in den Workspace - Mandant **Alpina Treuhand AG** (`alpina-treuhand`): workspace, trustee(RMA), graphicalEditor, neutralization
- Konfiguriert Neutralisierung (enabled=true, Demo-Mappings) - User **Patrick Helvetia** (`p.motsch@poweron.swiss`): SysAdmin, Mitglied beider Mandanten
- Erstellt Graph-Editor Demo-Workflows aus System-Templates - RMA-Credentials aus `config.ini` (Demo_RMA_*)
- Setzt Demo-Billing (Trial-Modus mit genügend Credits) - 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/`
- [ ] **CLI-Einstiegspunkt** in `app.py` oder separates Script `scripts/bootstrapDemo.py` ### Phase 1: Demo-Daten vorbereiten (Mo Vormittag)
```
python -m scripts.bootstrapDemo --env int --reset
```
- `--reset` löscht bestehenden Demo-Mandant und baut neu auf
- `--env` wählt Zielumgebung (local, int)
- [ ] **Demo-Testdaten vorbereiten** (Ordner `gateway/demoData/`) - [ ] **RMA-Credentials** in `gateway/config.ini` eintragen (Demo_RMA_ApiBaseUrl, Demo_RMA_ClientName, Demo_RMA_ApiKey)
- `invoices/` — 3 Muster-Rechnungen (PDF): Handwerker, Büromaterial, Versicherung - [ ] **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 - `expenses/` — 2 Spesenbelege (PDF): Reisekosten, Bewirtung
- `tenant-dossier.pdf` — Fiktives Mieterdossier (Name, Adresse, Mietzins) für Neutralisierung - `tenant-dossier.pdf` — Fiktives Mieterdossier fuer Neutralisierung
- `knowledge-base/` — 3-4 Firmen-Dokumente (Handbuch, FAQ, Prozessbeschreibung) für RAG - `knowledge-base/` — 3-4 Firmen-Dokumente (Handbuch, FAQ, Prozessbeschreibung) fuer RAG
- `budget-2026.xlsx` — Budget-Soll-Werte für Trustee-Vergleich
### Phase 2: Demo-Konfiguration pro Use Case (Mo Nachmittag) ### Phase 2: Demo-Konfiguration pro Use Case (Mo Nachmittag)
#### UC1: Treuhand — Spesenverarbeitung #### UC1: Treuhand — Spesenverarbeitung
- [ ] **Trustee-Instanz konfigurieren** (Connector: Bexio-Sandbox oder Mock) - [ ] **Trustee-Instanz konfigurieren** (Connector: RMA — Credentials via Demo-Config Bootstrap)
- [ ] **Graph-Editor Workflow erstellen/aktivieren:** - [ ] **Graph-Editor Workflow erstellen/aktivieren:**
Trigger (manual) → SharePoint listFiles → Loop → downloadFile → extractFromFiles → processDocuments → syncToAccounting Trigger (manual) → SharePoint listFiles → Loop → downloadFile → extractFromFiles → processDocuments → syncToAccounting
(System-Template "Treuhand: PDF-Klassifizierung & Trustee-Import" als Basis nutzen) (System-Template "Treuhand: PDF-Klassifizierung & Trustee-Import" als Basis nutzen)
@ -168,47 +171,23 @@
- [ ] **Neutralisierung aktivieren** und in einer Frage live demonstrieren - [ ] **Neutralisierung aktivieren** und in einer Frage live demonstrieren
- [ ] **Erwartetes Ergebnis dokumentieren:** Frage → Antwort mit Quellenangabe + Audit-Trail - [ ] **Erwartetes Ergebnis dokumentieren:** Frage → Antwort mit Quellenangabe + Audit-Trail
#### UC5: Integrationen — Architektur-Visualisierung (neue Seite) #### UC5: Integrationen — Architektur-Visualisierung (erledigt ✅)
- [ ] **Neue Systemseite `page.system.integrations`** erstellen - [x] **Systemseite `page.system.integrations`** implementiert
- Route: `/integrations` (unter "Meine Sicht" / System-Block) - Route: `/integrations`, Navigation in `mainSystem.py`, Icon `FaProjectDiagram`
- Navigation-Eintrag in `mainSystem.py``NAVIGATION_SECTIONS` - [x] **`IntegrationsOverviewPage.tsx`** mit 3-Schichten-Layout (Daten, PORTA, Organisation)
- Page-Registry-Eintrag in `pageRegistry.tsx` → Icon: `FaProjectDiagram` oder `FaCubes` - [x] **API `GET /api/system/integrations-overview`** aggregiert alle Daten
- [ ] **Demo-Daten sicherstellen:** Mindestens 2 Connections, 2 System-Connectors, 3 Workflows, 2 Mandanten
- [ ] **React-Komponente `IntegrationsOverviewPage.tsx`** bauen
- **3-Schichten-Layout (vertikal, von unten nach oben):**
- **Schicht 1 (unten): Datenquellen**
- Box pro OAuth-Connection (Microsoft-Icon, Google-Icon) → persönliche Daten
- Box pro System-Connector (Abacus-Instanz, Bexio-Instanz, RMA, SharePoint, etc.)
- Daten kommen von `GET /api/connections` + Feature-Instanz-Configs
- **Schicht 2 (Mitte): PORTA (PowerON)**
- Zentrale Box mit PowerON-Logo
- Darin: Sub-Boxes für jeden aktiven Workflow (System-Templates + Custom-Workflows)
- Daten kommen von `GET /api/workflows` (Graph-Editor Workflows)
- **Schicht 3 (oben): Services / Mandanten**
- Box pro Mandant mit den aktivierten Features/Services darin
- Daten kommen von Navigation-API (`GET /api/navigation` → dynamic block)
- **Verbindungslinien** zwischen den Schichten (CSS/SVG, kein Canvas)
- **Rendering-Technologie:** Custom React mit CSS Grid + `framer-motion` Animationen
- Kein Mermaid (zu statisch, schwer zu stylen)
- Kein xyflow (Overkill, neue Dependency)
- Bestehende Libs nutzen: `react-icons` (Connector-Icons), `framer-motion` (Hover/Enter-Animationen)
- [ ] **API-Endpoint `GET /api/system/integrations-overview`** (optional)
- Aggregiert: Connections, Feature-Instanzen, Workflows, Mandanten
- Oder: Frontend aggregiert aus bestehenden APIs (einfacher, weniger Backend-Aufwand)
- [ ] **Demo-Daten sicherstellen:** Mindestens 2 Connections (Microsoft, Google), 2 System-Connectors (Abacus, Bexio), 3 Workflows, 2 Mandanten mit Features
#### UC4: Sprach-Deployment — Neue Sprache in 5 Minuten #### UC4: Sprach-Deployment — Neue Sprache in 5 Minuten
- [ ] **Sicherstellen:** i18n Admin-UI erreichbar unter `/admin/languages` - [ ] **Sicherstellen:** i18n Admin-UI erreichbar unter `/admin/languages`
- [ ] **Bestehende Sprachen prüfen:** DE, EN, FR vorhanden und vollständig - [ ] **Bestehende Sprachen pruefen:** DE, EN, FR vorhanden und vollstaendig
- [ ] **Demo-Sprache vorbereiten:** Italienisch (it) NICHT vorinstalliert lassen — wird live angelegt - [ ] **Demo-Sprache vorbereiten:** Spanisch (es) NICHT vorinstalliert lassen — wird live angelegt
- [ ] **AI-Übersetzungs-Pipeline testen:** `POST /api/i18n/sets` mit `code: "it"` → async Translation → Ergebnis in <5 Min - [ ] **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 "it" → UI komplett auf Italienisch - [ ] **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 - [ ] **Fallback:** Falls AI-Translation zu lang dauert → Sprache vorher anlegen, live nur den Wechsel zeigen
- [ ] **Billing sicherstellen:** Demo-Mandant hat genügend Credits für AI-Batch-Translation - [ ] **Billing sicherstellen:** Demo-Mandant hat genuegend Credits fuer AI-Batch-Translation
#### Querschnitt: Neutralisierung #### Querschnitt: Neutralisierung
@ -250,9 +229,11 @@
### Szene 0: Setup (vor der Demo, nicht sichtbar) ### Szene 0: Setup (vor der Demo, nicht sichtbar)
- Browser auf: PORTA Dashboard (Demo-Mandant eingeloggt als `demo@poweron.ch`) - 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, Graph-Editor, Trustee, Chatbot - Tabs vorbereitet: Dashboard, Workspace, Graph-Editor, Trustee, Chatbot
- SharePoint-Demo-Ordner mit Belegen befüllt - SharePoint-Demo-Ordner mit Belegen befuellt
- Neutralisierung aktiviert - Neutralisierung aktiviert
- Knowledge-Base indexiert - Knowledge-Base indexiert
@ -340,19 +321,19 @@
### Szene 6: UC4 — Sprach-Deployment live (17:00 20:00) ### Szene 6: UC4 — Sprach-Deployment live (17:00 20:00)
**Was zeigen:** Neue Sprache in Minuten — AI übersetzt das komplette UI automatisch **Was zeigen:** Neue Sprache in Minuten — AI uebersetzt das komplette UI automatisch
**Talking Points:** **Talking Points:**
- "Europäische Kunden brauchen Mehrsprachigkeit. Deutsch, Französisch, Englisch — und morgen vielleicht Italienisch oder Portugiesisch." - "European customers need multi-language support. German, French, English — and tomorrow maybe Spanish or Portuguese."
- "Bei PowerON legen Sie eine neue Sprache an, die AI übersetzt alle UI-Texte, und in 5 Minuten ist das System komplett in der neuen Sprache verfügbar. Ohne Code-Änderung, ohne Redeploy." - "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."
- "Das ist kein Google Translate. Die AI versteht den Kontext — 'Offen' als Status vs. 'Offen' als Zustand wird korrekt übersetzt." - "This is not Google Translate. The AI understands context — 'Open' as status vs. 'Open' as action is translated correctly."
**Klick-Sequenz:** **Klick-Sequenz:**
1. Administration → System → UI-Sprachen öffnen → bestehende Sprachen zeigen (DE, EN, FR) 1. Administration → System → UI-Sprachen oeffnen → bestehende Sprachen zeigen (DE, EN, FR)
2. "Neue Sprache anlegen" klicken → z.B. **Italienisch** (it) wählen 2. "Neue Sprache anlegen" klicken → **Spanisch** (es) waehlen
3. AI-Übersetzung startet → Fortschritt zeigen (Batch-Pipeline) 3. AI-Uebersetzung startet → Fortschritt zeigen (Batch-Pipeline)
4. Sprache wechseln → komplettes UI ist sofort auf Italienisch 4. Sprache wechseln → komplettes UI ist sofort auf Spanisch
5. "Das hat gerade 5 Minuten gedauert. Für eine komplette Enterprise-Plattform. Kein Entwickler nötig." 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, übersetzt automatisch 6. Optional: "Update All" zeigen — scannt die Codebase, synchronisiert neue Keys, uebersetzt automatisch
**Transition:** "Das war PowerON PORTA — zurück zu den Zahlen." **Transition:** "Das war PowerON PORTA — zurück zu den Zahlen."
@ -444,17 +425,17 @@ Then Antwort zeigt an, dass keine relevante Quelle gefunden wurde (kein Halluz
``` ```
Given Demo-Mandant mit i18n Admin-Zugriff und bestehenden Sprachen DE, EN, FR Given Demo-Mandant mit i18n Admin-Zugriff und bestehenden Sprachen DE, EN, FR
AND Sprache "it" (Italienisch) existiert NICHT AND Sprache "es" (Spanisch) existiert NICHT
When POST /api/i18n/sets mit code "it" ausgeführt wird When POST /api/i18n/sets mit code "es" ausgefuehrt wird
Then AI-Batch-Translation startet Then AI-Batch-Translation startet
AND nach Abschluss enthält das it-Set alle Keys aus dem de-Master-Set AND nach Abschluss enthaelt das es-Set alle Keys aus dem de-Master-Set
AND Übersetzungen sind kontextuell korrekt (Stichprobe: "Speichern" → "Salva", "Abbrechen" → "Annulla") AND Uebersetzungen sind kontextuell korrekt (Stichprobe: "Speichern" -> "Guardar", "Abbrechen" -> "Cancelar")
AND Gesamtdauer < 5 Minuten AND Gesamtdauer < 5 Minuten
Given Sprache "it" vollständig übersetzt Given Sprache "es" vollstaendig uebersetzt
When User die Sprache im UI auf "it" wechselt When User die Sprache im UI auf "es" wechselt
Then alle UI-Elemente zeigen italienische Texte Then alle UI-Elemente zeigen spanische Texte
AND kein Fallback auf deutsche Keys sichtbar (ausser bei fehlenden Übersetzungen) AND kein Fallback auf deutsche Keys sichtbar (ausser bei fehlenden Uebersetzungen)
``` ```
#### T-NEU: Neutralisierung #### T-NEU: Neutralisierung
@ -502,7 +483,7 @@ pytest tests/demo/ -v -m ""
| 3 | Given Workspace mit Agent, When Machbarkeitsstudie-Prompt, Then strukturierte Analyse mit Quellen in <2 Min | must | | 3 | Given Workspace mit Agent, When Machbarkeitsstudie-Prompt, Then strukturierte Analyse mit Quellen in <2 Min | must |
| 4 | Given Chatbot mit Knowledge-Base, When Frage gestellt, Then Antwort mit Quellenangabe in <15s | must | | 4 | Given Chatbot mit Knowledge-Base, When Frage 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 | | 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 "it" angelegt wird, Then AI übersetzt alle Keys in <5 Min und UI zeigt Italienisch nach Sprachwechsel | 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 | | 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 | | 8 | Given pytest-Suite, When `pytest tests/demo/` ausgeführt, Then alle Tests grün (ohne expensive: Bootstrap + Struktur; mit expensive: Live AI) | should |

View file

@ -1,4 +1,4 @@
<!-- status: build --> <!-- status: validate -->
<!-- started: 2026-04-12 --> <!-- started: 2026-04-12 -->
<!-- component: gateway | frontend-nyla --> <!-- component: gateway | frontend-nyla -->
@ -35,7 +35,7 @@ Die Seite "Automatisierung" in "Meine Sicht" zeigt aktuell nur ein Dashboard mit
## Betroffene Module ## Betroffene Module
- Gateway: `routeWorkflowDashboard.py` neuer Endpunkt `GET /api/system/workflows` - Gateway: `routeWorkflowDashboard.py` — Endpunkt `GET /api/system/workflow-runs/workflows`
- Frontend: `AutomationsDashboardPage.tsx` — Tabs, Backend-Paginierung, WorkflowsTab - Frontend: `AutomationsDashboardPage.tsx` — Tabs, Backend-Paginierung, WorkflowsTab
- DB-Migration: nein - DB-Migration: nein
- Andere Komponenten: keine - Andere Komponenten: keine
@ -51,14 +51,14 @@ Die Seite "Automatisierung" in "Meine Sicht" zeigt aktuell nur ein Dashboard mit
## Umsetzungs-Checkliste ## Umsetzungs-Checkliste
- [x] API-Endpunkt: `GET /api/system/workflow-runs/workflows` - [x] API-Endpunkt: `GET /api/system/workflow-runs/workflows`
- [ ] DB-Schema / Migration: nicht nötig - [x] DB-Schema / Migration: nicht nötig (keine Änderung)
- [x] Frontend: Tabs-Struktur in AutomationsDashboardPage - [x] Frontend: Tabs-Struktur in AutomationsDashboardPage
- [x] Frontend: Dashboard-Tab mit Backend-Paginierung - [x] Frontend: Dashboard-Tab mit Backend-Paginierung
- [x] Frontend: WorkflowsTab mit zentraler Workflow-Verwaltung - [x] Frontend: WorkflowsTab mit zentraler Workflow-Verwaltung
- [x] RBAC / Permissions: Scoping + per-row Permissions - [x] RBAC / Permissions: Scoping + per-row Permissions
- [ ] Neutralisierung betroffen? Nein - [x] Neutralisierung betroffen? Nein
- [ ] Navigation / Routing: keine Änderung (bestehende Route `/automations`) - [x] Navigation / Routing: keine Änderung (Route `/automations` unverändert)
- [ ] Billing-Impact? Nein - [x] Billing-Impact? Nein
## Akzeptanzkriterien ## Akzeptanzkriterien
@ -78,6 +78,6 @@ Die Seite "Automatisierung" in "Meine Sicht" zeigt aktuell nur ein Dashboard mit
## Abschluss ## Abschluss
- [ ] b-reference/ aktualisiert (welche Seite?) - [x] b-reference/ aktualisiert — [`b-reference/gateway/automation.md`](../../b-reference/gateway/automation.md) (Abschnitt System-Automatisierung)
- [ ] TOPICS.md aktualisiert (falls neues Thema) - [x] TOPICS.md — Verweis unter „Aktive Arbeiten“ ergänzt
- [ ] Dieses Dokument → z-archive/ verschoben - [ ] Dieses Dokument → `z-archive/` verschieben (nach Abnahme / wenn kein offenes Follow-up)