From d03b7094e3ed11e122a1be1a2e4f61225055d9dc Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Tue, 14 Apr 2026 22:56:16 +0200 Subject: [PATCH] fixes from demo1: compliance ui fgtable issues, nodes vertical, nodes editting logic to edit in all editors of a mmandate based on highest level of role --- ...6-04-demo2-merged-customer-trustee-plan.md | 318 ++++++++++++++++++ d-guides/deployment/poweron-sec.kdbx | Bin 21102 -> 21086 bytes 2 files changed, 318 insertions(+) create mode 100644 c-work/1-plan/2026-04-demo2-merged-customer-trustee-plan.md diff --git a/c-work/1-plan/2026-04-demo2-merged-customer-trustee-plan.md b/c-work/1-plan/2026-04-demo2-merged-customer-trustee-plan.md new file mode 100644 index 0000000..aea315b --- /dev/null +++ b/c-work/1-plan/2026-04-demo2-merged-customer-trustee-plan.md @@ -0,0 +1,318 @@ + + + + + +# Demo2 — Merged Plan: Customer Demo Enablement + Trustee Tooling + +## Beschreibung und Kontext + +Zusammenführung der beiden Pläne: +- **Customer Demo Enablement** (Bling, PWG, Quid/ServiceHunter) — Analyse-Use-Cases, Prompt-Templates, CommCoach, Neutralisierung +- **Trustee Tooling Overhaul & PWG Demo Preparation** — Agent-Tools, Graph-Editor Nodes, Performance, Workflow + +Drei potenzielle Kunden haben konkrete Use Cases formuliert. Parallel wurde das Trustee-Tooling grundlegend überarbeitet. Dieses Dokument konsolidiert beide Pläne und zeigt den aktuellen Umsetzungsstand gegen die Codebase. + +**Kunden:** + +| Kunde | Branche | Hauptinteresse | Status | +|-------|---------|----------------|--------| +| **Bling** (Kevin, Julian, Silvan) | Treuhandbüro | Belegverarbeitung, Budget, Dashboards, Mandantenmanagement | Trial geplant | +| **PWG** (Markus Brütsch) | Stiftung (Immobilien/Wohnen, 200+ Liegenschaften) | Belegverarbeitung Abacus, KI-Arbeitsplatz, Coaching, Neutralisierung | Workshop 16.04.2026 | +| **Quid/ServiceHunter** (David Christen) | SaaS/Dienstleistung | KPI-Dashboard, Zeiterfassung, Prognosen, Konsolidierung | Follow-up geplant | + +**Abhängigkeiten:** +- UI-Enhancements: `c-work/1-plan/2026-04-porta-ui-enhancements-team-meeting.md` +- INT-Stabilität: `c-work/1-plan/2026-04-gateway-int-stability-and-bugfixes.md` +- Automation Unification (done): `c-work/3-validate/2026-04-automation-unification.md` + +--- + +## Codebase-Abgleich: Was ist bereits umgesetzt? + +### Legende + +| Symbol | Bedeutung | +|--------|-----------| +| ✅ done | Im Code vorhanden und funktional | +| 🔧 teilweise | Grundstruktur vorhanden, Anpassung/Ergänzung nötig | +| ❌ offen | Noch nicht umgesetzt | + +--- + +### A. Trustee Tooling (aus tooling-plan) + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| A1 | `refreshTrusteeData` / `trustee.refreshAccountingData` Action | ✅ done | `workflows/methods/methodTrustee/actions/refreshAccountingData.py` — async Action, prüft `lastSyncAt`, triggert `AccountingDataSync`, cleart Feature-Query-Cache | +| A2 | `aggregateTable` Tool im Sub-Agent | ✅ done | `serviceAgent/featureDataAgent.py` (Zeilen ~186–231) + `featureDataProvider.py` — SUM/COUNT/AVG/MIN/MAX mit GROUP BY | +| A3 | Kategorie `trustee` in `nodeRegistry.py` | ✅ done | `graphicalEditor/nodeRegistry.py` — `{"id": "trustee", "label": "Treuhand"}` in categories-Liste | +| A4 | Node `trustee.refreshAccountingData` | ✅ done | `graphicalEditor/nodeDefinitions/trustee.py` — erster Node in `TRUSTEE_NODES`, Ports + Parameter korrekt | +| A5 | Toolbox `trustee` in `toolboxRegistry.py` | ✅ done | `serviceAgent/toolboxRegistry.py` — `id="trustee"`, Label "Trustee / Accounting", Tool `trustee_refreshAccountingData` | +| A6 | DB-Connection-Pooling | ✅ done | `serviceAgent/coreTools/_featureSubAgentTools.py` — `_featureDbConnPool` Dict, `_getOrCreateFeatureDbConnector()` | +| A7 | Sub-Agent Result-Caching | ✅ done | `coreTools/_featureSubAgentTools.py` — `_featureQueryCache`, TTL 300s, MD5-Key, `clearFeatureQueryCache()` nach Sync | +| A8 | Output-Chaining Fix (processDocuments) | ✅ done | `methodTrustee/actions/processDocuments.py` — `_resolveDocumentList()` erkennt Graph-Editor-Dicts + Chat-Fallback | +| A9 | Output-Chaining Fix (syncToAccounting) | ✅ done | `methodTrustee/actions/syncToAccounting.py` — `_resolveFirstDocument()` mit Dual-Path-Logik | +| A10 | Node `trustee.importAndProcess` (Convenience) | ✅ übersprungen | Bewusst übersprungen — bestehende 3 Nodes funktionieren dank Output-Chaining-Fix | + +### B. Prompt-Templates & Analyse-Flows + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| B1 | Quick Actions (Budget, KPI, Cashflow, Prognose, Jahresabschluss) | ✅ done | `features/trustee/mainTrustee.py` Zeilen 260–319 — 5 Quick Actions als Dashboard-Links mit `actionType: "link"` | +| B2 | Template Workflows (Graph-basiert) | ✅ done | `mainTrustee.py` — `TEMPLATE_WORKFLOWS` mit `_buildAnalysisWorkflowGraph()`, eingebettete deutsche Prompt-Strings für alle 5 Analyse-Typen | +| B3 | Budget-Vergleich Prompt | ✅ done | Im Code als Python-String in `mainTrustee.py` (Graph: trigger → refreshAccountingData → ai.prompt) | +| B4 | KPI-Dashboard Prompt | ✅ done | Analog zu B3 | +| B5 | Cashflow-Rechnung Prompt | ✅ done | Analog zu B3 | +| B6 | Prognose/Trend-Analyse Prompt | ✅ done | Analog zu B3 | +| B7 | Jahresabschluss-Checks Prompt | ✅ done | Analog zu B3 | + +### C. Graph-Editor Workflow & Templates + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| C1 | System-Template "Treuhand: PDF-Klassifizierung & Trustee-Import" | ✅ done | `interfaces/interfaceBootstrap.py` — `_buildSystemTemplates()` seedet bei Bootstrap: sharepoint.listFiles → loop → readFile → ai.prompt (classify) → extractFromFiles → processDocuments | +| C2 | SharePoint-Nodes | ✅ done | `nodeDefinitions/sharepoint.py` — 6 Nodes (findFile, readFile, uploadFile, listFiles, downloadFile, copyFile) | +| C3 | Flow-Nodes (Loop etc.) | ✅ done | `nodeDefinitions/flow.py` — ifElse, switch, loop, merge, delay | +| C4 | Demo-Workflow (SharePoint → Trustee Pipeline) manuell im Editor bauen | ❌ offen | System-Template existiert (C1), aber kein dedizierter Demo-Workflow mit trigger.manual + syncToAccounting am Ende | + +### D. Demo-Infrastruktur + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| D1 | Demo-Config Infrastruktur (Base + Admin API) | ✅ done | `demoConfigs/_baseDemoConfig.py`, `routes/routeAdminDemoConfig.py` — load/remove via Admin-API | +| D2 | `investorDemo2026.py` (Referenz-Template) | ✅ done | Mandanten, User, Features, Accounting-Config, Neutralisierung, Billing — vollständiges Muster | +| D3 | Demo-Mandant "Bling Demo" | ❌ offen | Kein `blingDemo2026.py` oder ähnliches | +| D4 | Demo-Mandant "PWG Demo" | ❌ offen | Kein `pwgDemo2026.py` oder ähnliches | +| D5 | Demo-Mandant "Quid Demo" | ❌ offen | Kein `quidDemo2026.py` oder ähnliches | + +### E. Testdaten + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| E1 | Fiktives Mieterdossier (PDF) für Neutralisierung | ✅ done | `gateway/demoData/neutralizer/tenant-dossier.pdf` + Generator `_generateTenantDossierPdf.py` | +| E2 | Knowledge-Base Demo-Dateien | ✅ done | `gateway/demoData/knowledge-base/` — 4 Dateien (investor-orientiert) | +| E3 | Budget-Excel (Soll-Werte) | ❌ offen | Kein `.xlsx` im gesamten Repo | +| E4 | Musterbelege (Rechnung, Spesen, Bank, Versicherung) | ❌ offen | `demoData/invoices/`, `demoData/expenses/`, `demoData/trustee/` fehlen (Tests erwarten sie) | +| E5 | Quid-Testdaten (CSV: Umsatz, Kunden, Support) | ❌ offen | Keine kundenspezifischen CSV/Excel-Testdaten | +| E6 | Bling-Testdaten (Bexio-kompatibel) | ❌ offen | Keine Bexio-spezifischen Testdaten | +| E7 | PWG-Testdaten (Abacus-kompatibel) | ❌ offen | Keine Abacus-spezifischen Testdaten | + +### F. CommCoach Immobilien-Personas + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| F1 | CommCoach Feature (Grundstruktur) | ✅ done | `features/commcoach/` — Routes, Services, AI, Personas, Gamification, Scheduler, Export, Indexer | +| F2 | Builtin-Personas (generisch) | ✅ done | `serviceCommcoachPersonas.py` — 10 Personas (Coach, CFO, Mitarbeiter, Vorstand, Kunde, etc.) | +| F3 | Persona: Mieter mit Zahlungsrückstand | ✅ done | `tenant_payment_arrears_m` in `BUILTIN_PERSONAS` | +| F4 | Persona: Mieter mit Nebenkostenfragen | ✅ done | `tenant_utility_costs_f` in `BUILTIN_PERSONAS` | +| F5 | Persona: Neuer Mieter (Einzugsfragen) | ✅ done | `new_tenant_move_in_m` in `BUILTIN_PERSONAS` | +| F6 | Persona: Schwieriger Nachbar (Lärmbeschwerde) | ✅ done | `difficult_neighbor_noise_m` in `BUILTIN_PERSONAS` | +| F7 | Persona-Seeding Mechanismus | ✅ done | `seedBuiltinPersonas()` synct `BUILTIN_PERSONAS` mit `userId: "system"` in DB | + +### G. Neutralisierung + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| G1 | Neutralisierung Feature (komplett) | ✅ done | `features/neutralization/` — Routes, Services, Playground, PII-Masking, Private-LLM | +| G2 | Fiktives Mieterdossier | ✅ done | `demoData/neutralizer/tenant-dossier.pdf` | +| G3 | Demo-Flow dokumentiert | ❌ offen | Kein Schritt-für-Schritt Demo-Skript | +| G4 | Neutralisierungs-Config auf Demo-Instanz | 🔧 teilweise | `investorDemo2026.py` konfiguriert Neutralisierung für Alpina — analog für PWG nötig | + +### H. Demo-Skripte & Dokumentation + +| # | Item | Status | Evidenz in Codebase | +|---|------|--------|---------------------| +| H1 | Use-Case-Inputs Kunden | ✅ done | `local/notes/demo-tue-use-cases-inputs-customers.md` | +| H2 | Demo-Skript Bling | ❌ offen | | +| H3 | Demo-Skript PWG | ❌ offen | | +| H4 | Demo-Skript Quid | ❌ offen | | +| H5 | Mail-Update 12.04 | ✅ done | `local/notes/demo-tue-mail-update-2026-04-12.md` | + +--- + +## Zusammenfassung: Was ist erledigt, was fehlt? + +### Erledigt (aus beiden Plänen) + +| Bereich | Items | Kommentar | +|---------|-------|-----------| +| **Trustee Agent-Tools** | A1–A2 | `refreshTrusteeData` + `aggregateTable` vollständig | +| **Graph-Editor Nodes** | A3–A5, A8–A10 | Kategorie, Nodes, Toolbox, Output-Chaining — alles done | +| **Performance** | A6–A7 | Connection-Pooling + Result-Caching implementiert | +| **Prompt-Templates** | B1–B7 | Alle 5 Analyse-Typen als Quick Actions + Template Workflows in `mainTrustee.py` | +| **System-Template** | C1–C3 | Bootstrap-Template für PDF-Import-Pipeline vorhanden | +| **Neutralisierung** | G1–G2 | Feature komplett, Mieterdossier-PDF vorhanden | +| **CommCoach Grundstruktur** | F1–F2, F7 | Feature + generische Personas + Seeding-Mechanismus | + +### Offen (priorisiert nach Demo-Relevanz) + +#### P0 — Blocker für PWG-Demo (16.04.2026) + +| # | Item | Aufwand | Beschreibung | +|---|------|---------|-------------| +| F3–F6 | CommCoach Immobilien-Personas | Klein | 4 neue Persona-Definitionen in `BUILTIN_PERSONAS` (Mieter Zahlungsrückstand, Nebenkosten, Einzug, Lärmbeschwerde) | +| D4 | Demo-Mandant "PWG Demo" | Mittel | Neues `pwgDemo2026.py` analog zu `investorDemo2026.py` — Trustee (Abacus), CommCoach, Neutralisierung, Workspace | +| G3 | Neutralisierungs-Demo-Flow | Klein | Schritt-für-Schritt Dokumentation: PDF → Neutralisierung → AI-Analyse → Re-Personalisierung | + +#### P1 — Wichtig für alle Kunden-Demos + +| # | Item | Aufwand | Beschreibung | +|---|------|---------|-------------| +| D3 | Demo-Mandant "Bling Demo" | Mittel | `blingDemo2026.py` — Trustee (Bexio), Workspace, Graph-Editor | +| D5 | Demo-Mandant "Quid Demo" | Klein | `quidDemo2026.py` — Workspace, Graph-Editor (kein Trustee-Connector) | +| E3 | Budget-Excel | Klein | Soll-Werte 2026 pro Konto (10–15 Konten), passend zu Demo-Buchhaltungsdaten | +| E4 | Musterbelege | Klein | 3–5 PDFs: Handwerkerrechnung, Nebenkostenabrechnung, Bankbeleg, Versicherungsbeleg, Spesenbeleg | +| C4 | Demo-Workflow im Graph-Editor | Mittel | Dedizierter Workflow: trigger.manual → sharepoint.listFiles → loop → download → extract → process → sync | + +#### P2 — Nice-to-have für erste Demos + +| # | Item | Aufwand | Beschreibung | +|---|------|---------|-------------| +| E5 | Quid-Testdaten (CSV) | Klein | Umsatzdaten 6 Monate, Kundenliste mit Margen, Support-Zeiterfassung | +| E6 | Bling-Testdaten (Bexio) | Mittel | Journal, Kontoplan, Bilanz/ER im Bexio-Format | +| E7 | PWG-Testdaten (Abacus) | Mittel | Abacus-kompatible Daten (oder Sandbox-Zugang) | +| H2–H4 | Demo-Skripte | Klein | Schritt-für-Schritt pro Kunde mit Notizen | +| G4 | Neutralisierungs-Config PWG | Klein | Analog zu investorDemo — in pwgDemo2026.py integrieren | + +#### P4 — Explizit nicht im Scope + +| Item | Grund | +|------|-------| +| Zendesk-Connector (Quid 3.2) | Zu gross, CSV-Upload-Workaround reicht | +| Gastro-Echtzeit-Integration (Bling 1.6) | Wartet auf Kevin-Input | +| Regelbasierte Konsolidierung (Quid 3.4) | Wartet auf Lars-Meeting | +| Neue Frontend-Features | Separater Plan | +| Abacus-Produktivzugang | Demo mit Sandbox/Mockdaten | + +--- + +## Umsetzungs-Checkliste (konsolidiert, nur offene Items) + +### Phase 1: PWG-Demo Vorbereitung (URGENT — Workshop 16.04) + +- [x] **F3–F6: CommCoach Immobilien-Personas** in `serviceCommcoachPersonas.py` → `BUILTIN_PERSONAS` + - Persona `tenant_payment_arrears_m`: René Bachmann, 3 Monate Rückstand, defensiv, Ratenzahlung möglich + - Persona `tenant_utility_costs_f`: Fatima El-Amin, Nebenkostenabrechnung unklar, emotional, braucht geduldige Erklärung + - Persona `new_tenant_move_in_m`: Luca Steiner, Erstbezug, viele Fragen, kooperativ + - Persona `difficult_neighbor_noise_m`: Kurt Zürcher, Lärmprotokoll, droht mit Mietminderung, Deeskalation nötig + +- [ ] **D4: Demo-Config `pwgDemo2026.py`** in `gateway/modules/demoConfigs/` + - Mandant "PWG Demo" mit Features: Trustee (Abacus), CommCoach, Neutralisierung, Workspace, Graph-Editor + - Demo-User mit passenden Rollen + - Neutralisierungs-Config analog zu investorDemo + - Billing/Trial-Modus + +- [ ] **G3: Neutralisierungs-Demo-Flow** dokumentieren (Markdown in `local/notes/`) + - Schritt 1: Mieterdossier-PDF hochladen + - Schritt 2: Neutralisierung zeigen (Namen → Platzhalter) + - Schritt 3: Neutralisierten Text an AI → Analyse + - Schritt 4: Re-Personalisierung demonstrieren + +### Phase 2: Bling & Quid Demo-Configs + +- [ ] **D3: Demo-Config `blingDemo2026.py`** + - Mandant "Bling Demo" mit Features: Trustee (Bexio), Workspace, Graph-Editor + - 2–3 Demo-User (Admin, Buchhalter, Mandant) + +- [ ] **D5: Demo-Config `quidDemo2026.py`** + - Mandant "Quid Demo" mit Features: Workspace, Graph-Editor + - Kein Trustee-Connector (Daten via CSV/Excel-Upload) + +### Phase 3: Testdaten & Musterbelege + +- [ ] **E3: Budget-Excel** erstellen + - Soll-Werte 2026, 10–15 Konten, passend zu Demo-Buchhaltungsdaten + - Ablage: `gateway/demoData/trustee/budget-2026.xlsx` + +- [ ] **E4: Musterbelege** (PDFs) erstellen + - Handwerkerrechnung, Nebenkostenabrechnung, Bankbeleg, Versicherungsbeleg, Spesenbeleg + - Ablage: `gateway/demoData/invoices/`, `gateway/demoData/expenses/` + +- [ ] **E5: Quid-Testdaten** (CSV) + - Umsatzdaten 6 Monate, Kundenliste mit Margen, Support-Zeiterfassung + - Ablage: `gateway/demoData/quid/` + +### Phase 4: Demo-Workflow & Skripte + +- [ ] **C4: Demo-Workflow** im Graph-Editor bauen + - trigger.manual → sharepoint.listFiles → flow.loop → sharepoint.downloadFile → trustee.extractFromFiles → trustee.processDocuments → trustee.syncToAccounting + - Als System-Template speichern (`templateScope: system`) + - Testen mit Musterbelegen aus E4 + +- [ ] **H2: Demo-Skript Bling** — Schritt-für-Schritt +- [ ] **H3: Demo-Skript PWG** — Schritt-für-Schritt +- [ ] **H4: Demo-Skript Quid** — Schritt-für-Schritt + +### Querschnitt-Checks + +- [ ] API-Endpunkte: keine neuen nötig +- [ ] DB-Schema / Migration: nein +- [ ] Frontend-Komponenten: nein (separater Plan) +- [ ] RBAC / Permissions: Demo-User mit passenden Rollen +- [ ] Billing-Impact: Demo-Mandanten brauchen Trial-Modus / Guthaben + +--- + +## Akzeptanzkriterien (konsolidiert) + +| # | Kriterium (Given-When-Then) | Prio | Quelle | Status | +|---|---------------------------|------|--------|--------| +| 1 | Given Trustee-Instanz mit Abacus-Config, When Agent `refreshTrusteeData` aufruft, Then werden Daten importiert und Summary zurückgegeben | must | Tooling A1 | ✅ implementiert | +| 2 | Given gecachte Daten (lastSyncAt < 1h), When Agent `refreshTrusteeData` ohne `forceRefresh` aufruft, Then kein externer Sync | must | Tooling A2 | ✅ implementiert | +| 3 | Given Trustee-Daten, When Sub-Agent `aggregateTable` mit SUM/GROUP BY aufruft, Then korrekte Aggregationen | must | Tooling A2 | ✅ implementiert | +| 4 | Given identische Query innerhalb 5 Min, When `queryFeatureInstance` erneut, Then gecachtes Ergebnis | should | Tooling A7 | ✅ implementiert | +| 5 | Given Graphical Editor, When Node-Palette geladen, Then Kategorie "Treuhand" mit allen Trustee-Nodes | must | Tooling A3 | ✅ implementiert | +| 6 | Given Workflow mit SharePoint → Trustee Pipeline, When manuell gestartet, Then PDFs extrahiert und synced | must | Tooling C4 | ❌ Workflow noch nicht gebaut | +| 7 | Given Trustee-Pipeline im Flow, When Output-Chaining, Then documentList korrekt aufgelöst | must | Tooling A8–A9 | ✅ implementiert | +| 8 | Given Budget-Excel + Trustee-Daten, When Budgetkontrolle-Prompt, Then Soll/Ist-Vergleich mit Charts | must | Demo B3 | 🔧 Prompt done, Budget-Excel fehlt | +| 9 | Given Bling-Demo-Mandant, When KPI-Dashboard-Prompt, Then 3+ Kennzahlen-Charts | must | Demo B4 | 🔧 Prompt done, Demo-Mandant fehlt | +| 10 | Given PWG-Demo mit CommCoach, When Session mit "Mieter Zahlungsrückstand", Then realistischer Immobilien-Dialog | must | Demo F3 | ✅ Persona implementiert | +| 11 | Given PWG-Demo mit Neutralisierung, When Mieterdossier hochgeladen, Then PII neutralisiert + re-personalisiert | must | Demo G1–G2 | 🔧 Feature done, Demo-Config fehlt | +| 12 | Given Quid-Demo mit CSV-Upload, When KPI-Analyse, Then Margen- und Support-Charts | should | Demo E5 | ❌ Testdaten fehlen | +| 13 | Given Demo-Mandant mit 2+ Mandaten, When Admin wechselt, Then nur Daten des aktiven Mandanten | must | Demo D1 | ✅ Plattform-Kernfunktion | + +--- + +## Entscheidungen (konsolidiert) + +| Datum | Entscheidung | Begründung | +|-------|-------------|------------| +| 2026-04-07 | `refreshTrusteeData` als separate Action (nicht Erweiterung von `queryFeatureInstance`) | Separation of Concerns: Sync = schreibend, Query = lesend | +| 2026-04-07 | `aggregateTable` im Sub-Agent statt SQL in `queryTable` | Saubere Trennung row-level vs. aggregate, SQL-Injection-Schutz | +| 2026-04-07 | DB-Connection-Pooling statt Connection-per-Call | Grösster Performance-Hebel (~200ms pro Connection) | +| 2026-04-07 | Result-Cache auf WorkflowMemory-Ebene | Agent kann gecachte Ergebnisse wiederverwenden | +| 2026-04-09 | Prompt-Templates als Code statt externe Dateien | In `mainTrustee.py` als Template Workflows — wartbar und versioniert | +| 2026-04-09 | Quid-Demo ohne Zendesk-Connector — CSV/Excel-Upload | Gleicher Analyse-Mehrwert, viel weniger Aufwand | +| 2026-04-09 | Gastro-UC und Konsolidierung auf P4 | Warten auf Kunden-Input (Kevin) bzw. Lars-Meeting | +| 2026-04-09 | CommCoach-Personas als schnellster Wow-Effekt für PWG | Feature ist gebaut; nur Persona-Definitionen nötig | + +--- + +## Betroffene Module + +- **Gateway:** `features/commcoach/` (Persona-Seeding), `features/trustee/` (done + Demo-Daten), `features/neutralization/` (Demo-Config), `features/graphicalEditor/` (done), `serviceCenter/serviceAgent/` (done), `demoConfigs/` (neue Demo-Configs), `workflows/methods/methodTrustee/` (done) +- **Frontend:** keine Änderungen +- **DB-Migration:** nein +- **Andere:** Testdaten (Excel, PDF, CSV), Demo-Skripte (Markdown) + +## Links + +- Kundenwünsche: `local/notes/demo-tue-use-cases-inputs-customers.md` +- Automation Unification (done): `wiki/c-work/3-validate/2026-04-automation-unification.md` +- UI-Enhancements (parallel): `wiki/c-work/1-plan/2026-04-porta-ui-enhancements-team-meeting.md` +- INT-Stabilität (parallel): `wiki/c-work/1-plan/2026-04-gateway-int-stability-and-bugfixes.md` +- Original-Plan 1: `wiki/c-work/1-plan/2026-04-customer-trustee-demo-enablement.md` +- Original-Plan 2: `wiki/c-work/1-plan/2026-04-customer-trustee-tooling-and-demo-prep.md` +- Investor-Demo (Referenz): `gateway/modules/demoConfigs/investorDemo2026.py` +- CommCoach Personas: `gateway/modules/features/commcoach/serviceCommcoachPersonas.py` +- Trustee Main (Prompts + Quick Actions): `gateway/modules/features/trustee/mainTrustee.py` +- Neutralisierung: `gateway/modules/features/neutralization/` +- Demo-Daten: `gateway/demoData/` + +## Abschluss + +- [ ] Original-Pläne als "merged" markieren (Verweis auf dieses Dokument) +- [ ] b-reference/ aktualisiert (ggf. neue Feature-Docs) +- [ ] TOPICS.md aktualisiert (falls neues Thema) +- [ ] Dieses Dokument → z-archive/ verschoben diff --git a/d-guides/deployment/poweron-sec.kdbx b/d-guides/deployment/poweron-sec.kdbx index f48e84c19a45f5f3b6bb63e4f23eb3c445dfa1e5..5860d1fec1d8cf05f71ec6ccf519107b22a8e801 100644 GIT binary patch literal 21086 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 literal 21102 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 F0