frontend_nyla/docs/MONETARISIERUNG_FEATURES_INTERAKTIV.md
ValueOn AG 9b99020686 feat(billing): Nutzerhinweise bei leerem Budget + Mandats-Mail (402/SSE)
Gateway
- InsufficientBalanceException: billingModel, userAction (TOP_UP_SELF /
  CONTACT_MANDATE_ADMIN), DE/EN-Texte, toClientDict(), fromBalanceCheck()
- HTTP 402 + JSON detail für globale API-Fehlerbehandlung
- AI/Chatbot: vor Raise ggf. E-Mail an BillingSettings.notifyEmails
  (PREPAY_MANDATE, Throttle 1h/Mandat) via billingExhaustedNotify
- Agent-Loop & Workspace-Route: SSE-ERROR mit strukturiertem Billing-Payload
- datamodelBilling: notifyEmails-Doku für Pool-Alerts
frontend_nyla
- useWorkspace: SSE onError für INSUFFICIENT_BALANCE mit messageDe/En
  und Hinweis auf Billing-Pfad bei TOP_UP_SELF
2026-03-21 01:34:47 +01:00

227 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Monetarisierung der Features — interaktives Klärungs-Playbook
Dieses Dokument ist für **Live-Workshops** gedacht (Product, Sales, Tech). Du kannst es in Cursor/VS Code oder GitHub öffnen: **Checkboxen** (`- [ ]`) und **leere Tabellenzellen** werden direkt im Editor abgehakt bzw. ausgefüllt.
---
## 1. Ausgangslage aus `frontend_nyla` (gemeinsames Bild)
Die App denkt in **Mandanten → Features → Instanzen → Rechte (Views)**. Nutzer haben keinen direkten „Mandanten-Login“, sondern **Zugriff auf Feature-Instanzen** (`featureStore`).
| Baustein | Bedeutung für Pricing |
|----------|------------------------|
| **Feature-Code** (z.B. `chatbot`, `workspace`) | logische Produktlinie / Modul |
| **Instanz** | oft Kunde, Abteilung, Bot, “Organisation” — **horizontale Skalierung** (mehr Instanzen = mehr Wert oder mehr Kosten) |
| **Views / Berechtigungen** | micro-Segmente im Produkt (**Add-ons**, Rollenpakete, „Light vs Pro“) |
| **Feature Store** (`Store.tsx`) | Self-Service-Aktivierung (z.B. `automation`, `teamsbot`) — Kandidaten für **Freemium / Trial / Upsell** |
| **Billing im Frontend** (`billingApi.ts`) | Modelle `PREPAY_MANDATE`, `PREPAY_USER`, `UNLIMITED`; Transaktionen mit u.a. `featureCode`, `featureInstanceId`, Provider/Modell |
**Leitidee:** Preis = *was* (Feature/View) × *wie viel* (Instanz, Nutzer, Volumen) × *wie abgerechnet* (Pauschale, Credits, Nachzahlung).
---
## 2. Schnell-Check: Welches Geschäftsmodell passt grob?
Arbeite die Fragen der Reihe nach durch und hake ab.
- [ ] **Primärer Käufer:** zahlt der **Mandant** (Firma), der **Endnutzer**, oder ein **Partner**?
- [ ] **Value Metric:** was korreliert am ehesten mit Kundennutzen? (z.B. Mandanten, Instanzen, aktive Nutzer, gespeicherte Dokumente, API-Calls, AI-Tokens/CHF-Verbrauch)
- [ ] **Margen-Risiko:** wo sind **variable Kosten** (LLM, Storage, Third-Party) — müssen die **durchgereicht** oder **gepuffert** werden?
- [ ] **Go-to-Market:** brauchst du **Selbstbedienung** (Store) oder nur **Sales / Onboarding** (Admin legt Instanzen an)?
- [ ] **Fairness:** soll ein Power-User **pro Nutzer** limitiert sein oder **Kontingent pro Mandant**?
### Entscheidungsbaum (Diskussionsvorlage)
```mermaid
flowchart TD
A[Nutzerwert skaliert primär mit Volumen?] -->|Ja| B[Usage / Credits / Nachzahlung]
A -->|Nein| C[Festpreis / Seat / Instanz]
B --> D[Pro Feature oder globaler Credit-Pool?]
C --> E[Wer zählt als Seat: Login oder aktive Nutzung?]
D --> F[Sichtbar im Billing-Dashboard pro FeatureCode?]
E --> G[Wie viele Instanzen sind inkludiert?]
```
Trage Ergebnis hier ein (ein Satz):
> **Entscheidung Grobmodell:** …
---
## 3. Billing-Modelle (Anknüpfung an `billingApi.ts`)
Ordnet euer **Angebot** den technisch vorhandenen **BillingModel**-Werten zu (Namen aus dem Frontend):
| `BillingModel` | Typische Kundenstory | Wann sinnvoll? |
|----------------|---------------------|----------------|
| `PREPAY_MANDATE` | „Wir laden ein Konto auf, alle ziehen daraus.“ | Gemeinsamer Pool, ein Rechnungsempfänger |
| `PREPAY_USER` | „Jeder Nutzer hat ein Kontingent.“ | faire Verteilung bei heterogenem Nutzungsverhalten |
| `UNLIMITED` | „Flat rate / Enterprise-Vertrag.“ | Paketpreis deckt erwarteten Mix |
**Workshop-Aufgabe**
- [ ] Standard für **SMB**:
- [ ] Standard für **Enterprise**:
- [ ] Ausnahme / Piloten:
---
## 4. Feature-Inventar (aus `FEATURE_REGISTRY`)
Die folgende Tabelle ist die **Checkliste pro Modul**. Pro Zeile: **was** verkaufen wir, **woran** messen wir, **was** ist Inhalt eines Pakets?
| `featureCode` | Produktname (DE) | Hauptnutzen (1 Satz) | Typische „Einheit“ für Preis (*Seat / Instanz / Request / GB / CHF-Verbrauch*) | Im **Feature Store** relevant? | Variable Kosten? (ja/nein/klein) | Notizen |
|---------------|------------------|----------------------|----------------------------------------------------------------------------------|-------------------------------|-----------------------------------|---------|
| `trustee` | Treuhand | | | ☐ ja ☐ nein | | |
| `realestate` | Immobilien | | | ☐ ja ☐ nein | | |
| `chatbot` | Chatbot | | | ☐ ja ☐ nein | | |
| `chatworkflow` | Workflow | | | ☐ ja ☐ nein | | |
| `automation` | Automatisierung | | | ☐ ja ☐ nein | | |
| `teamsbot` | Teams Bot | | | ☐ ja ☐ nein | | |
| `neutralization` | Neutralisierung | | | ☐ ja ☐ nein | | |
| `commcoach` | Kommunikations-Coach | | | ☐ ja ☐ nein | | |
| `workspace` | AI Workspace | | | ☐ ja ☐ nein | | |
> **Hinweis Store:** In `Store.tsx` sind derzeit u.a. `automation` und `teamsbot` als Self-Service beschrieben — weitere Features können folgen, sobald Backend/Policy das erlaubt.
---
## 5. Views als Upsell-Stufen (fein granulare Monetarisierung)
Viele **Views** sind Kandidaten für „Basic / Pro“ oder Add-ons (technisch: Rechte pro View).
**Vorgehen pro Feature:** Liste die Views und markiere: **Base** (muss rein), **Upsell**, **Admin-only** (meist kein direkter Upsell).
### `trustee`
- [ ] `dashboard` — Base / Upsell / Admin-only
- [ ] `positions` — …
- [ ] `documents` — …
- [ ] `position-documents` — …
- [ ] `expense-import` — …
- [ ] `scan-upload` — …
- [ ] `instance-roles` (adminOnly) — …
- [ ] `settings` — …
### `chatbot`
- [ ] `conversations` — …
- [ ] `settings` — …
### `automation`
- [ ] `definitions` — …
- [ ] `templates` — …
- [ ] `logs` — …
### `teamsbot`
- [ ] `dashboard` — …
- [ ] `sessions` — …
- [ ] `settings` — …
### `neutralization`
- [ ] `playground` / `dashboard` — …
- [ ] `config` — …
- [ ] `attributes` — …
### `commcoach`
- [ ] `dashboard` — …
- [ ] `coaching` — …
- [ ] `dossier` — …
- [ ] `settings` — …
### `workspace`
- [ ] `dashboard` — …
- [ ] `editor` — …
- [ ] `settings` — …
### `realestate`
- [ ] `dashboard` — …
- [ ] `instance-roles` (adminOnly) — …
### `chatworkflow`
- [ ] `dashboard` — …
- [ ] `runs` — …
- [ ] `files` — …
**Paket-Entscheid (freies Feld):**
| Paketname | Enthaltene `featureCode`s | Enthaltene Views / Ausnahmen | Limits (Instanzen, Nutzer, Speicher, Credits) |
|-----------|---------------------------|------------------------------|-----------------------------------------------|
| Starter | | | |
| Business | | | |
| Enterprise | | | |
---
## 6. Nutzungsmessung vs. Produktversprechen
Transaktionen im Billing können unter anderem **`featureCode`**, **`featureInstanceId`**, **`aicoreProvider`**, **`aicoreModel`** tragen — gut für **trans-parente** oder **Feature-spezifische** Auswertung.
**Abgleich (interaktiv):**
- [ ] Welche Features sollen im Kunden-UI **getrennt** sichtbar sein (`costByFeature` im Usage-Report)?
- [ ] Welche Kosten werden **in einen Topf** gelegt (einfacheres Pricing, weniger Erklärungsbedarf)?
- [ ] Gibt es **überproportionale** Kostenfaktoren (z.B. Web-Recherche beim Chatbot), die ein **Aufsatz** oder **Limit** brauchen?
**Policy-Sätze (ausfüllen):**
1. Wenn Guthaben **`warningThreshold`** unterschreitet, dann: …
2. Wenn **`blockOnZeroBalance`** aktiv ist, dann welche Features blocken wir zuerst: …
3. **Trial:** welche Features sind zeitlich / volumenmäßig limitiert: …
---
## 7. Angebots-Builder (1 Seite für Sales)
_Kopiere diesen Block pro Lead._
- **Kunde / Segment:** …
- **Mandanten-Setup:** # Instanzen geplant pro Feature: …
- **Nutzer / Rollen:** …
- **Inkludierte Module (`featureCode`):** …
- **Add-ons (Views):** …
- **BillingModel:** `PREPAY_MANDATE` / `PREPAY_USER` / `UNLIMITED`
- **Kontingente:** CHF/Monat, Tokens, API-Calls, Speicher: …
- **Preisgestaltung:** Listenpreis, Rabatt %, Laufzeit: …
- **Risiken / Sonderkosten (LLM, Integrationen):** …
**Einwand-Notizen:**
| Einwand | Antwort / Kompromiss |
|---------|----------------------|
| „Wir wollen unbegrenzt.“ | |
| „Wir haben viele Abteilungen (Instanzen).“ | |
| „Wir brauchen nur eine View.“ | |
---
## 8. Definition of Done (Pricing ist „fertig“ besprochen)
- [ ] Jedes `featureCode` hat **Paket** + **Messgröße** + **Ausnahmen**
- [ ] Jede revenue-relevante View ist **Base/Upsell** zugeordnet
- [ ] Store-Features haben **Activation Policy** (wer darf, was passiert nach Trial)
- [ ] Billing-Model pro Segment ist festgelegt inkl. **Warn-/Block-Verhalten**
- [ ] Sales-Template (Abschnitt 7) ist befüllt für **Pilotkunde 1**
---
## 9. Referenz im Repo (für Technik-Abgleich)
| Thema | Datei |
|-------|--------|
| Feature-Definitionen (Codes, Views) | `src/types/mandate.ts` (`FEATURE_REGISTRY`) |
| Mandant → Instanzen → Rechte | `src/stores/featureStore.tsx` |
| Self-Service Store | `src/pages/Store.tsx`, `src/api/storeApi.ts` |
| Billing-Typen & Reports | `src/api/billingApi.ts` |
| UI-Komponenten / Routing-Helfer | `src/config/pageRegistry.tsx` |
---
*Version: 2026-03-20 — ausgerichtet auf den Stand von `frontend_nyla`; bei neuen Features die Tabellen in Abschnitt 45 ergänzen.*