wiki/c-work/0-ideas/2026-06-CustomerCases-step3-solutions-plan.md

18 KiB
Raw Blame History

Plan: Solutions — kundeneigene Workflows als Konfiguration (kein Code)

Baut auf: 2026-06-CustomerCases-step1-architecture.md (Schichten L1L4, Feature-vs-Solution-Grenze). Schwester-Plan: 2026-06-CustomerCases-step3-features-plan.md (der Code dahinter: Solution-Schicht, generische Bausteine, Connectors, vertikale Features). Konsolidiert/ersetzt: Umsystem-Integration-Plan + die Solution-tauglichen Use Cases aus dem konsolidierten Kundenwünsche-Plan.

Beschreibung und Kontext

Eine Solution ist ein konfigurierter Workflow (Daten = Graph + Settings + Trigger + Output-Bindung), der ein wiederkehrendes Kundenbedürfnis erfüllt — ohne kundenspezifischen Code. Sie konsumiert die vorhandenen Plattform-Bausteine (L1 Toolbox, L2 Graph) und wird über die neue Solution-Schicht (L3/L4) angelegt, eingestellt, getestet, ausgeführt und angesehen.

Dieser Plan listet die konkreten Kunden-Use-Cases, die als Solutions umgesetzt werden. Der Code, den diese Solutions voraussetzen (Solution-Schicht selbst, generische Workflow-Bausteine, Connectors), steht im features-plan — eine Solution schreibt nie eigenen Code.

Business-Treiber: jeder Use Case wird zu Konfiguration statt Engineering → Time-to-value in Tagen, Onboarding ohne Entwicklungs-Backlog, Grenzkosten pro Use Case nahe null.

Fokus und kritische Details

  • Solution = Daten, nie Code. Konten-Mappings, Empfänger, Perioden, Ordnerpfade, Cron-Zeiten, Instanz-Auswahl = Settings. Tauchen Kundennamen oder if kunde == X im Code auf, ist die Solution falsch geschnitten. Settings werden zur Laufzeit injiziert (features-plan A0.3), nie in den Graph geschrieben.
  • Owner-Achse = Mandant + Run-as-Principal (features-plan A0.1): eine Solution gehört dem Mandanten und läuft im Namen eines Principals (interaktiv: User; geplant: definierte Automations-Identität). «Im Trustee angezeigt» ist nur UI-Platzierung. Datenzugriff richtet sich nach der RBAC des Principals, über Feature-Grenzen hinweg.
  • Multi-Feature/Multi-Instanz ist nativ (features-plan A0.2): per-Node FeatureInstanceRef; eine Solution kann mandatsintern über mehrere Feature-Instanzen (Pling: 5 Trustee-Instanzen einer Holding) und sogar mehrere Features laufen. Echte Schranke = der Mandant (kein Cross-Mandate). Kosten werden per-Node der berührten Instanz zugeordnet.
  • Voraussetzung sind generische Bausteine, keine kundenspezifischen. Wo ein Baustein fehlt (z. B. rbac.queryUsersByRole, email.sendEmail, data.writeToTable, ein SelectLine-Connector), wird er generisch im features-plan gebaut und hier nur referenziert.
  • Neutralisierung für jeden LLM-Pfad (Belege/Berichte mit Personendaten) — selektiv über FeatureDataSource-Flags (neutralizeFields), feature-admin-gated konfiguriert (Namen/Beschreibungen pseudonymisiert, Zahlen/Konten lesbar).
  • Testlauf real, ohne Versand: Solutions laufen im Test echt, nur Seiteneffekt-Nodes (email.sendEmail/sharepoint.upload/integration.pushToTarget) unterdrücken via run-level testMode.

Ziel und Nicht-Ziele

  • Ziel: Die häufigsten Kundenbedürfnisse als kuratierte Solution-Templates + pro Mandant/Instanz konfigurierte Solutions abbilden.
  • Ziel: SelectLine→RMA und Pling-Reporting als erste produktive Solutions (Leit-Cases).
  • Ziel: Nachweis, dass dasselbe Muster Beleg-Import, Dokumentenverarbeitung und Finanz-Analysen trägt.
  • Explizit NICHT: kundenspezifischer Code pro Solution (→ features-plan baut nur Generisches).
  • Explizit NICHT: den Graphical Editor ersetzen — Solutions kapseln ihn; «Im Editor öffnen» bleibt Escape-Hatch.
  • Explizit NICHT: Use Cases, die ein eigenes Datenmodell / tiefe opinionated UI brauchen (→ das sind Features, siehe features-plan; z. B. lawyer).

Klassifikation: was wird Solution, was Feature

Use-Case-Quelle Umsetzung Begründung
SelectLine → RMA (Umsystem) Solution «Systeme synchronisieren» Komponierbar aus Connectors + Integration-Nodes; Kundenspezifika = Mapping/Settings
Pling Kaffee-Klatsch (Monatsreporting) Solution «Periodisches Reporting» Fan-out + Konsolidierung + AI-Report + rollenbasierte Verteilung, alles Bausteine
PWG Jahresmietzinsbestätigungen (1.9c) Solution «Dokumente verarbeiten» SharePoint→Extract→AI→Tabelle→Mail, 1 AI-Schritt
Beleg-/Spesen-Import periodisch (1.1, 1.10.5) Solution «Beleg-Import» SharePoint/Drive→Trustee-Pipeline, Zeitplan
Budget/Soll-Ist, KPI, Cashflow, Prognose, Jahresabschluss-Check, Liquidität (1.21.7, 4.x) Solution «Finanz-Analyse & Reporting» queryDataai.generate→Output (Tabelle/Report); heute Prompt-Templates
KPI-/Notification-Verteilung (1.9.12, 4.5.8) Solution «Benachrichtigung/Report» Trigger→Daten→Report→rollenbasierte Verteilung
Lawyer (Mandatsvorbereitung + Dashboards) Feature Eigene Modelle (LawyerMatter…) + opinionated UI
CommCoach, Neutralisierung, Trustee-Core Feature (bestehend) Domänenlogik/eigene UI/Engine
Connectors (SelectLine, Xero, FileMaker, Lohn, Kassensystem) Feature/Plattform-Baustein Generischer Code (L1), kein Kunden-Code → features-plan
Solution-Schicht, generische Nodes, testMode Feature/Plattform-Enabler Code, der Solutions erst möglich macht → features-plan

Solution-Katalog

Jede Solution = Template (kuratiert) → pro Instanz konfiguriert. Bausteine sind vorhanden, sofern nicht als «(neu → features-plan)» markiert.

S1 — «Systeme synchronisieren» (Pilot: SelectLine → RMA)

Bedürfnis Rechnungen aus externem System (SelectLine) periodisch ins RMA buchen
Trigger trigger.schedule (z. B. täglich 06:00) oder trigger.manual
Bausteine (Graph) integration.fetchFromSource (SelectLine) → integration.mapAccountsintegration.pushToTarget (RMA, inkl. Beleg-Upload) (Nodes + SelectLine-Connector neu → features-plan)
Settings (L3) Quell-Connector + Credentials, Ziel-Connector, Konten-/Steuer-Mapping, Filter (nur Ausgangsrechnungen, «seit letztem Sync»), Zeitplan
Output (L4) summary — Sync-Log/Status (gebucht/übersprungen/Duplikate)
Dedup über bestehende AccountingBridge-Dedup-Logik
Kunden konkreter SelectLine-Kunde; Muster für jedes weitere Umsystem
Voraussetzungen (features-plan) SelectLine-Connector, source/target-Rolle auf Config, Integration-Nodes, ggf. kanonisches Invoice-Modell

Zwei Kunden mit unterschiedlichem Kontenplan-Mapping = zwei Solutions/Configs, ein Code.

S2 — «Periodisches Reporting» (Leit-Case: Pling Kaffee-Klatsch)

Bedürfnis Am 15./Monat aus 5 RMA-Buchhaltungen konsolidieren, 6 PDFs erzeugen, rollenbasiert mailen
Trigger trigger.schedule 0 6 15 * * (Europe/Zurich) + trigger.manual (rollen-beschränkt)
Bausteine (Graph) flow.loop(Instanz-Auswahl, mandatsintern) → trustee.refreshAccountingDatatrustee.queryData (Salden akt.+Vorjahr) → data.consolidate (sumByKey) → ai.generateDocument×6 (1 Holding + 5 Store) → rbac.queryUsersByRole (pro Instanz) → email.sendEmailfile.create (Archiv)
Settings (L3) Instanz-Auswahl (5 Trustee-Instanzen derselben Holding/Mandant — bestätigt), Konten-Ranges (Umsatz 30003999, Warenkosten 60006299, Personal 50005099), Cron, Empfänger-Rollen (Holding→trustee-accountant/trustee-viewer, Store→trustee-client, Protokoll→trustee-admin — alle verifiziert vorhanden), stopOnIncomplete
Owner/Billing Owner = Mandant; Run-as-Principal = definierte Automations-Identität (geplanter Lauf). Per-Node-Billing: jede Store-refresh/query bucht die berührte Store-Instanz, Konsolidierung/Report/Versand die Holding-Instanz (A0.1/A0.2)
Output (L4) file — 6 PDFs, archiviert als TrusteeDocument; + summary Lauf-Protokoll
Sonderfall Buchhaltung am 15. nicht abgeschlossen → durchlaufen mit Markierung (flow.ifElse nach refresh), steuerbar via stopOnIncomplete
Neutralisierung selektiv via FeatureDataSource-Flags (Namen/Beschreibungen ja; Zahlen/Konten nein)
Voraussetzungen (features-plan) rbac.queryUsersByRole, email.sendEmail-Node (neu, Blocker), Trigger-accessControl.requiredRoles, testMode; data.consolidate vorhanden ✓

Vollständig spezifiziert (High-Level + Anhang); ~2 Wochen Build → bester End-to-End-Beleg der Solution-Schicht.

S3 — «Dokumente verarbeiten + Antwort» (PWG Jahresmietzinsbestätigungen, 1.9c)

Bedürfnis Gescannte Rücklauf-Bestätigungen (≈3'200/Jahr) prüfen, Status klassifizieren, Antwortvorschläge
Trigger trigger.schedule (täglich) oder trigger.manual
Bausteine (Graph) sharepoint.listFilesflow.loopsharepoint.readFile + trustee.extractFromFiles (OCR) → ai.prompt (Scan vs. Abacus-Originaldaten, Status, Antwortvorschlag) → input.humanTask (Review der Antwortvorschläge vor Versand, optional) → data.writeToTableemail.sendEmail
Settings (L3) Scan-Ordner (SharePoint), Abacus-Mandant + Mietzins-Stammdaten-Abfrage, Empfänger (Sachbearbeiter), Prompt-Variante, Review-Pflicht ja/nein
Output (L4) table — Übersicht verarbeiteter Bestätigungen (bestätigt / Abweichung / fehlende Unterschrift / unleserlich) + Mail-Zusammenfassung
Kunden PWG (Pilot, Versand Sommer 2026, Deadline-gebunden)
Voraussetzungen (features-plan) Prompt-Template «Mietzinsbestätigung prüfen», Abacus-Stammdaten-Abfrage konfigurieren, data.writeToTable-Node (neu), email.sendEmail-Node (neu); sharepoint.readFile/input.humanTask vorhanden ✓

S4 — «Beleg-Import» (periodische Spesen-/Belegverarbeitung; 1.1, 1.10.5)

Bedürfnis Belege/Spesen aus SharePoint/Drive periodisch klassifizieren, kontieren, verbuchen
Trigger trigger.schedule (z. B. täglich 22:00)
Bausteine (Graph) sharepoint.listFilesflow.looptrustee.extractFromFilestrustee.processDocuments (Klassifikation + Kontierung) → trustee.syncToAccounting
Settings (L3) Quelle (Ordner), Ziel-Buchhaltung (RMA/Bexio/Abacus), Klassifikations-/Kontierungsoptionen, Zeitplan
Output (L4) table verarbeitete Belege + summary
Kunden Bling, PWG, Quid
Voraussetzungen bestehende Pipeline + System-Template existiert bereits; als Solution kapseln

S5 — «Finanz-Analyse & Reporting» (1.21.7, 4.x — heute Prompt-Templates)

Bedürfnis Budget/Soll-Ist, KPI-Dashboard, Cashflow, Prognose, Jahresabschluss-Checks, Liquidität
Trigger trigger.manual / trigger.form oder trigger.schedule (periodischer Report)
Bausteine (Graph) trustee.refreshAccountingDatatrustee.queryData/aggregateTableai.generateDocument/ai.prompt → Output
Settings (L3) Periode(n), Vergleichsbasis (Vorjahr/Budget), optionaler Budget-Upload, KPI-Auswahl, Empfänger
Output (L4) table (KPIs), file (Report-PDF) oder summary
Kunden Bling, Quid, allgemein Treuhand
Voraussetzungen bereits vorhandene System-Templates (trustee-budget-comparison/-kpi-dashboard/-cashflow/-forecast/-year-end-check) nur als customerFacing Solutions exponieren (kein Neubau) — features-plan B3

S6 — «Benachrichtigung / Report-Verteilung» (1.9.12, 4.5.8)

Bedürfnis Bei Ereignis/Zeitplan Bericht erzeugen und rollenbasiert verteilen; KPI-Alerts
Trigger trigger.schedule / trigger.event (DB-Change → features-plan)
Bausteine (Graph) Daten lesen → ai.generateDocument (optional) → rbac.queryUsersByRoleemail.sendEmail
Settings (L3) Auslöser/Schwellwerte, Empfänger-Rollen, Vorlage
Output (L4) summary + Mail
Voraussetzungen (features-plan) rbac.queryUsersByRole, email.sendEmail-Node (neu), optional trigger.event/DB-Change-Detection

Gemeinsames Settings-Muster (alle Solutions)

  • settingsSchema automatisch aus trigger.form + exposed Node-Params abgeleitet; kundensichtbare Labels als TextMultilingual (i18n, features-plan A5).
  • settingsValues (Daten, Secrets verschlüsselt) inkl. Instanz-Auswahl (mandatsintern, mehrere Feature-Instanzen/Features möglich, A0.2); zur Laufzeit als runEnvelope injiziert (A0.3) — kein Graph-Schreiben.
  • triggerPolicy manuell/Zeitplan/Event/Form + accessControl.requiredRoles (bestehende Feature-Rollen).
  • outputBinding.kind = file | table | summary (Dashboard später).
  • Lebenszyklus in der «Lösungen»-Seite (UX-Muster wie TrusteeDataTablesView: Tabs + ?tab=/?solutionId=-Deep-Links, FormGenerator, useConfirm/usePrompt, alle Texte t()): Liste · Katalog/Neu (Vorlage oder AI) · Detail mit Tabs (Einstellungen · Testlauf · Läufe · Ausgabe).

Betroffene Module

  • Daten/Config (kein Code pro Solution): Solution-Definition + Settings-Record pro Feature-Instanz (Modell → features-plan), Workflow-Graph als Template/Version.
  • Kuratierte System-Templates: interfaces/interfaceBootstrap.py — «Systeme synchronisieren», «Periodisches Reporting», «Dokumente verarbeiten», «Beleg-Import», «Finanz-Analyse».
  • Voraussetzungen (Code): vollständig im features-plan (Solution-Schicht, generische Nodes, Connectors, testMode, rbac.queryUsersByRole).
  • Demo: je Solution ein Demo-Setup (Pling-/PWG-/Bling-Mandant) — verweist auf Demo-Items aus dem alten Kundenplan.

Entscheidungen

Datum Entscheidung Begründung
2026-06-04 Kunden-Use-Cases primär als Solutions (Config) statt Code step1-architecture Solution-first; skaliert ohne Engineering pro Kunde
2026-06-04 SelectLine→RMA und Pling als erste produktive Solutions konkrete Geld-Cases, decken Sync- und Reporting-Muster ab
2026-06-04 Analyse-Prompt-Templates (Budget/KPI/Cashflow/…) werden Solution-Templates bisher Trustee-interne Quick Actions → kundentauglich als Solutions
2026-06-04 Fehlende Bausteine werden generisch im features-plan gebaut, nie kundenspezifisch «keine Kundenlogik im Code»

Umsetzungs-Checkliste

  • Solution-Schicht + generische Bausteine verfügbar (→ features-plan: A1A3)
  • System-Template «Systeme synchronisieren» + Demo SelectLine→RMA (S1)
  • System-Template «Periodisches Reporting» + Pling-Solution konfiguriert (S2)
  • System-Template «Dokumente verarbeiten» + PWG-Mietzins-Solution (S3) — Deadline Sommer 2026
  • «Beleg-Import» als Solution kapseln (S4)
  • Analyse-Templates → Solution-Templates migrieren (S5)
  • «Benachrichtigung/Report» (S6) inkl. rollenbasierte Verteilung
  • Pro Solution: Testlauf (testMode) grün, dann Aktivierung

Akzeptanzkriterien

# Kriterium (Given-When-Then) Prio
1 Given konfigurierte S1, When der Sync läuft, Then erscheinen SelectLine-Rechnungen als Buchungen in RMA (kein Kunden-Code; zweiter Kunde = nur andere Settings) must
2 Given konfigurierte S2 (Pling), When der Monatslauf läuft, Then 6 PDFs erzeugt + rollenbasiert versendet + archiviert; manueller Start nur für trustee-admin must
3 Given S2 im Testlauf, When ausgeführt, Then Reports werden erzeugt aber keine Mails versendet (testMode) must
4 Given konfigurierte S3, When Scans eintreffen, Then Übersichtstabelle mit Status + Antwortvorschlägen + Mail must
5 Given eine Solution, When der Kunde Settings ändert, Then ohne Re-Publish/Code-Deploy beim nächsten Run wirksam (Injektion, A0.3) must
6 Given ein neuer ähnlicher Use Case, When aus Template instanziiert, Then nur Settings nötig, kein Code should
7 Given S2 über 5 Trustee-Instanzen einer Holding, When der Lauf läuft, Then keine Cross-Mandate-Daten; per-Node-Billing bucht Store-Kosten je Store, Holding-Kosten auf Holding (A0.1/A0.2) must
8 Given die «Lösungen»-Seite, When sie gerendert wird, Then alle UI-Texte via t(), Solution-Name/-Beschreibung lokalisiert (TextMultilingual) must

Offene Fragen

  1. S1 Erreichbarkeit: SelectLine on-prem → Zugriffsweg (VPN/Tunnel/Agent)? Zielart RMA (AR-Rechnung vs. GL-Buchung)?
  2. S2 Pling-Topologie: bestätigt — 5 Trustee-Instanzen eines Mandanten (Holding); native Multi-Instanz-Verarbeitung (A0.2).
  3. S5 Umfang: Welche der vorhandenen Analyse-Templates werden 1:1 als Solution exponiert vs. konsolidiert?
  4. S2/S3 Output: outputBinding-Detail (Artefakt-Referenz, table-Spalten aus Node-Output ableiten) — siehe step1-architecture «Output-Bindung».
  5. Demo-Daten: welche Mandanten/Testdaten zuerst (Pling, PWG, Bling)?
  • Architektur: c-work/0-ideas/2026-06-CustomerCases-step1-architecture.md
  • Product Summary: c-work/0-ideas/2026-06-CustomerCases-step2-communication-product-summary.md (+ .pdf)
  • Mockup: c-work/0-ideas/2026-06-CustomerCases-step2-communication-mockup.html
  • Features/Code: c-work/0-ideas/2026-06-CustomerCases-step3-features-plan.md
  • Pling-Spec: pamocreate/projects/poweron/customer-pling/20-spezifikation/20260522-workflow-spec-kaffee-klatsch.md (+ -anhang.md)
  • Bausteine: b-reference/platform-core/workflow.md, b-reference/platform-core/automation.md, b-reference/platform-core/features/trustee.md

Abschluss

  • Bei Annahme → Solution-Templates + erste Konfigurationen in c-work/2-build/
  • b-reference/ Kanon-Seite «Solutions» nach Umsetzung
  • _CHANGELOG.md-Eintrag pro Solution