diff --git a/docs/superpowers/specs/2026-09-27-vertraege-hosting-abo-design.md b/docs/superpowers/specs/2026-09-27-vertraege-hosting-abo-design.md new file mode 100644 index 0000000..1fa0f59 --- /dev/null +++ b/docs/superpowers/specs/2026-09-27-vertraege-hosting-abo-design.md @@ -0,0 +1,519 @@ +# Verträge, Hosting-Abo und E-Mail-Zusatzspeicher – Konzept + +Stand 27.09.2026 · Entwurf zur Durchsicht · umgesetzt ist noch nichts + +Betrifft das Kundenportal (project.webklar.com), die Website (webklar.com), das Ticketsystem (ticket.webklar.com), Stripe, Hetzner konsoleH und die Rechtstexte. + +## 1. Ziel + +1. Der Bereich „Wartung“ im Kundenportal heißt künftig **Verträge**. Dort liegt das Abo des Kunden. +2. Neues **Hosting-Abo** für 15 € im Monat: Wir hosten die Website, dazu kommen 1 Domain und 1 E-Mail-Postfach. +3. **Wartungs-Abo** (50 €): Statt einem Postfach gibt es beliebig viele, zusammen 5 GB. +4. Hosting-Kunden können **jederzeit ins Wartungs-Abo wechseln**, auch in den ersten 12 Monaten. +5. **E-Mail-Zusatzspeicher**: je 5 GB für 1 € im Monat, per Plus und Minus im eigenen Bereich, abgerechnet im laufenden Abo über Stripe. + +Nicht Teil dieses Konzepts: + +- mehrere Abos pro Kunde, etwa für zwei Websites. Pro Kunde gibt es weiterhin höchstens ein laufendes Abo. +- Postfächer selbst im Portal anlegen oder löschen. Hetzner bietet dafür keine Schnittstelle, deshalb läuft das per Anfrage im Chat. +- jährliche Zahlung. +- Rückwechsel von Wartung zu Hosting per Knopf. Das geht nur auf Anfrage (3.6). + +## 2. Entscheidungen + +| Thema | Entscheidung | Herkunft | +|---|---|---| +| Name des Bereichs | „Verträge“ | Vorgabe | +| Preis Hosting-Abo | 15,00 € pro Monat | Vorgabe | +| Umfang Hosting-Abo | siehe 3.1: ohne Arbeitsstunde, ohne Pflege der Website | Vorschlag, bestätigt | +| Hosting-Abo nur für | statische Websites (3.2) | Vorschlag, bestätigt | +| Domain im Hosting-Abo | ja, 1 Domain | Vorschlag, bestätigt | +| Mindestlaufzeit | beide Abos 12 Monate ab Leistungsbeginn, danach monatlich kündbar | Vorschlag, bestätigt | +| Postfächer | Hosting: 1 Postfach, 5 GB. Wartung: beliebig viele, zusammen 5 GB | Vorgabe | +| Wechsel Hosting → Wartung | jederzeit, als neuer Vertrag. Mit dem Wechsel beginnen 12 neue Monate Mindestlaufzeit (Variante A) | Vorgabe | +| Zusatzspeicher | 5 GB je Paket für 1,00 € pro Monat, in beiden Abos, als zweite Position im selben Stripe-Abo | Vorgabe | +| Aufbau der Rechtstexte | eine gemeinsame Fassung für beide Abos (8.1) | Vorschlag | +| Offene Einzelpunkte | vorbelegt, siehe 13 | Vorschlag, bitte prüfen | + +Alle Preise sind Endpreise. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet. + +## 3. Produkte + +### 3.1 Leistungen im Vergleich + +| | Hosting-Abo | Wartungs-Abo | +|---|---|---| +| Preis | 15,00 € pro Monat | 50,00 € pro Monat | +| Website auf unserem Server in Deutschland (Hetzner, Falkenstein) | ✓ | ✓ | +| SSL-Zertifikat, tägliche Datensicherung, Überwachung der Erreichbarkeit | ✓ | ✓ | +| Updates von Betriebssystem und Server-Software | ✓ | ✓ | +| Updates und Pflege der Website selbst | – | ✓ | +| Geeignet für | statische Websites | alle Websites und Web-Anwendungen, die wir erstellt oder zur Betreuung übernommen haben | +| Domain (.de, .com, .eu, .net, .org) | 1 | 1 | +| E-Mail | 1 Postfach, 5 GB | beliebig viele Postfächer, zusammen 5 GB | +| Zusatzspeicher | je 5 GB für 1,00 € pro Monat | je 5 GB für 1,00 € pro Monat | +| Arbeitszeit | nur nach Freigabe, 100 € pro Stunde in 15-Minuten-Schritten | 1 Stunde pro Monat inklusive, darüber 100 € pro Stunde | +| Servicezeiten und Reaktion | wie heute im Wartungs-Abo (Mo–Fr 9–17 Uhr, Antwort bis Ende des nächsten Werktags) | wie heute | +| Mindestlaufzeit | 12 Monate | 12 Monate, auch nach einem Wechsel | + +### 3.2 Hosting-Abo: nur statische Websites + +- Statisch heißt: Der Webserver liefert die Dateien (HTML, CSS, JavaScript, Bilder) unverändert aus. Dazu gehören auch unsere React- und Vite-Seiten. +- Nicht erlaubt sind ein CMS, ein Login, eine Datenbank und eigener serverseitiger Code wie PHP. +- Der Grund: Eine dynamische Website ohne laufende Updates läge ungepflegt auf demselben Server wie Kundenportal, Datenbank und Rechnungen. +- Kontaktformulare sind nur über einen Dienst möglich, den wir zentral betreiben und pflegen (siehe 13, Punkt 7). +- Braucht eine Website später dynamische Teile, bieten wir den Wechsel ins Wartungs-Abo an. +- Änderungen an der Website gibt es nur nach Freigabe und gegen 100 € pro Stunde, Anfrage im Chat. Die Behebung von Störungen an Server, Domain und Postfach ist inklusive, wie im Wartungs-Abo. + +### 3.3 Postfächer (beide Abos) + +- Die Postfächer liegen bei Hetzner Webhosting, Rechenzentrum Nürnberg. Das Hosting-Abo hat 1 Postfach, das Wartungs-Abo beliebig viele. +- Hetzner setzt die Speichergrenze je Postfach. „Zusammen 5 GB“ heißt: Die Grenzen aller Postfächer eines Kunden ergeben zusammen höchstens 5 GB plus Zusatzspeicher. + - Wie der Speicher verteilt wird, bestimmt der Kunde. Ohne Vorgabe teilen wir gleichmäßig auf. +- Ist die Grenze eines Postfachs erreicht, nimmt es keine neuen Mails mehr an. Darauf weisen Portal und Bedingungen hin. +- Anlegen, Löschen, neues Passwort oder andere Aufteilung fragt der Kunde im Chat an. Der Knopf „Postfach anfragen“ füllt die Nachricht vor. + - Wir setzen es in konsoleH um, in der Regel innerhalb eines Werktags. + - Zugangsdaten geben wir nur dem Kunden oder den Personen, die er in Textform benennt. +- Faire Nutzung: + - Postfächer nur für den Kunden, seine Beschäftigten und seine Organisation + - kein Weiterverkauf + - kein Newsletter- oder Massenversand + - Es gelten die Versandgrenzen des Anbieters. +- Kapazität: Alle Kundenpostfächer liegen in unserem Hetzner-Paket und teilen sich dessen Speicher (S 10 GB, M 50 GB, L 100 GB, XL 300 GB). + - Das Admin-Panel zeigt die Summe der vergebenen Kontingente: 5 GB je laufendem Abo plus alle Pakete Zusatzspeicher. + - Bevor der belegte Speicher in konsoleH 80 % erreicht, wechseln wir ins nächstgrößere Paket. + +### 3.4 E-Mail-Zusatzspeicher + +Ein Paket hat 5 GB und kostet 1,00 € pro Monat. Jeder Kunde kann 0 bis 10 Pakete buchen, in beiden Abos, auch Bestandskunden mit Version 3. + +**Plus (Bestellung)** + +- Direkt über dem Knopf steht eine Übersicht mit: + - neuer Gesamtgröße + - Mehrpreis pro Monat + - anteiligem Betrag für den Rest des laufenden Monats (aus der Stripe-Vorschau) + - Datum der nächsten Abbuchung + - Link auf Bedingungen und Widerrufsbelehrung +- Der Knopf heißt „Zahlungspflichtig bestellen“ (§ 312j Abs. 3 BGB). Der Vertrag kommt mit dem Klick zustande. Bezahlt wird mit der hinterlegten Zahlungsart. +- Abrechnung: + - Den Rest des laufenden Monats berechnet Stripe anteilig mit der nächsten Abbuchung, danach 1,00 € je Paket und Monat. + - Pakete, die für den laufenden Monat schon bezahlt sind (etwa nach einem Minus im selben Monat), werden nicht noch einmal berechnet. +- Bereitstellung: Wir stellen die Grenzen in konsoleH um, in der Regel innerhalb eines Werktags. Bis dahin zeigt das Portal „wird eingerichtet“. +- Der Kunde bekommt eine Bestätigungsmail mit Zusammenfassung und den Vertragsbedingungen als PDF. + +**Minus** + +- Der Knopf heißt „Speichern“. Die Änderung wirkt zum Ende des laufenden Abrechnungsmonats, ohne anteilige Erstattung. +- Das Portal zeigt „ab TT.MM. X GB“. +- Der Dialog weist darauf hin: Passen die gespeicherten Mails dann nicht mehr hinein, nimmt das betroffene Postfach keine neuen Mails an, bis wieder Platz ist. +- Der Kunde bekommt eine Bestätigungsmail. + +**Widerruf** + +- Jede Bestellung hat 14 Tage Widerrufsfrist. +- Wir verlangen keinen ausdrücklichen Sofortbeginn und stellen trotzdem sofort bereit. +- Bei Widerruf nehmen wir das Paket zurück und erstatten alles, was dafür gezahlt wurde. Wertersatz verlangen wir nicht. + +**Kündigung** + +- Jederzeit per Minus oder über „Verträge hier kündigen“ mit der Auswahl „Nur den E-Mail-Zusatzspeicher“. +- Der Zusatzspeicher endet automatisch mit dem Abo. Bei einem Wechsel ins Wartungs-Abo bleibt er unverändert. + +### 3.5 Wechsel vom Hosting- ins Wartungs-Abo + +- **Wer:** Kunden mit laufendem, bezahltem Hosting-Abo (Stripe-Status `active`). Nicht möglich ist es in der Wartezeit bis zum Leistungsbeginn und bei offener Zahlung. +- **Wann:** jederzeit, auch während der Mindestlaufzeit des Hosting-Abos. +- **Rechtlich:** Es ist ein neuer Vertrag über das Wartungs-Abo. Das Hosting-Abo endet mit dem Wechsel im gegenseitigen Einvernehmen. +- **Bestellung:** + - Direkt über dem Knopf steht eine Übersicht mit: + - Wartungs-Abo 50,00 € pro Monat + - Zusatzspeicher, falls gebucht + - Gutschrift für die ungenutzten Hosting-Tage + - heute fälliger Betrag (aus der Stripe-Vorschau) + - neuer Abbuchungstag + - Ende der neuen Mindestlaufzeit + - Der Kunde stimmt den Vertragsbedingungen (Version 4) einschließlich der Auftragsverarbeitung zu. + - Pflicht-Häkchen: Der Kunde verlangt ausdrücklich, dass wir sofort beginnen, und nimmt die Folge für den Wertersatz zur Kenntnis (§ 357a Abs. 2 BGB). Einen späteren Beginn bietet der Wechsel nicht an. + - Knopf „Zahlungspflichtig bestellen“. +- **Abrechnung:** + - Es bleibt dasselbe Stripe-Abo, der Preis wechselt von Hosting auf Wartung. + - Der Abbuchungstag wird der Wechseltag. + - Die ungenutzten Hosting-Tage werden auf der sofort fälligen Rechnung gutgeschrieben. +- **Leistung:** Sie beginnt sofort. Die erste Stunde Arbeitszeit wird gutgeschrieben, sobald die Wechsel-Rechnung bezahlt ist, danach monatlich. +- **Mindestlaufzeit:** 12 Monate ab dem Wechseltag. +- **Widerruf des Wechsels:** + - Das Hosting-Abo läuft zu den bisherigen Bedingungen weiter, als hätte es den Wechsel nicht gegeben, einschließlich seiner ursprünglichen Mindestlaufzeit. + - Wir erstatten den Mehrbetrag, abzüglich Wertersatz nach § 357a Abs. 2 BGB (anteiliger Mehrpreis bis zum Widerruf). + - Den Preis in Stripe stellen wir von Hand zurück, wie heute bei Widerrufen. +- **Rabatte und Guthaben:** Ein laufender Angebotsrabatt läuft bis zu seinem Ende weiter. Guthaben aus einer Übernahmegutschrift wird weiter verrechnet. + +### 3.6 Wechsel vom Wartungs- ins Hosting-Abo + +- Möglich erst nach Ablauf der Mindestlaufzeit des Wartungs-Abos, zum Ende eines Abrechnungsmonats. Der Kunde meldet den Wunsch in Textform (Chat oder E-Mail), einen Knopf im Portal gibt es dafür nicht. +- Voraussetzung ist eine statische Website (3.2). Vorher legt der Kunde fest, welches Postfach bleibt. Die anderen exportieren wir auf Wunsch. +- Es beginnt keine neue Mindestlaufzeit, das Hosting-Abo ist danach monatlich kündbar. +- Nicht genutzte Arbeitszeit verfällt mit dem Wechsel, wie bei Vertragsende. +- Umsetzung von Hand: In Stripe wechselt der Preis zum Ende des Abrechnungsmonats auf Hosting, ohne anteilige Verrechnung. Der Kunde bekommt eine Bestätigungsmail. + +## 4. Kundenportal + +### 4.1 Navigation + +- **Menüpunkt „Verträge“:** Er steht am Desktop in der Seitenleiste und in der App-Ansicht in der Tab-Leiste und ersetzt den Tab „Wartung“. + - Hash `#vertraege`. Alte Links mit `#wartung` und `#abo` führen dorthin, `#abo` steht etwa in den Angebots-Mails. +- **Seitenleisten-Karte:** „Ihre Wartung“ heißt künftig „Ihr Vertrag“. Sie zeigt: + - den Produktnamen + - die verfügbare Arbeitszeit, nur beim Wartungs-Abo + - die nächste Abbuchung + - die Hinweise wie heute (Zahlungsproblem, Widerrufsfrist, Übernahmegutschrift) +- **Konto-Menü, Gruppe „Verträge“:** + - Neuer erster Eintrag „Mein Vertrag“, er führt zu `#vertraege`. + - „Vertragsbedingungen“ öffnet die Fassung, der der Kunde zugestimmt hat. + - Die übrigen Einträge bleiben: „Abo verwalten & Rechnungen“, „Verträge hier kündigen“, „Vertrag widerrufen“. + +### 4.2 Ansicht „Verträge“ + +Oben steht **Mein Vertrag**, wenn ein Abo läuft oder beendet ist: + +- Produkt, Monatspreis einschließlich Zusatzspeicher und Status (gekündigt, Zahlungsproblem) +- nächste Abbuchung mit Betrag und Hinweis zur Laufzeit („Mindestlaufzeit bis …“) +- nur beim Wartungs-Abo: das Stundenkonto als Unterseite wie heute +- E-Mail-Speicher mit Plus und Minus (4.3) und dem Knopf „Postfach anfragen“ +- Unterlagen: Vertragsbedingungen in der zugestimmten Fassung (PDF) und Rechnungen (Stripe-Kundenportal) +- „Übernahmegutschrift beantragen“ +- während einer laufenden Widerrufsfrist hervorgehoben „Vertrag widerrufen · bis TT.MM.“ (§ 356a BGB). Das gilt auch für Wechsel und Zusatzspeicher innerhalb ihrer Frist. +- bei einem Zahlungsproblem „Zahlungsart aktualisieren“ + +Darunter: + +- **Hosting-Kunden:** eine Karte „Zum Wartungs-Abo wechseln“ mit den zusätzlichen Leistungen und dem Knopf. +- **Ohne laufendes Abo:** beide Abos nebeneinander, jeweils mit „Abo abschließen“ und eigener Bestellseite (`#bestellen-hosting`, `#bestellen-wartung`). Persönliche Angebote erscheinen bei dem Abo, für das sie gelten. + +### 4.3 Zusatzspeicher bedienen + +``` +E-Mail-Speicher 5 GB inklusive +Zusatzspeicher [ − ] 2 [ + ] × 5 GB = 15 GB gesamt + + 2,00 € im Monat + [ Zahlungspflichtig bestellen ] +``` + +- Der Knopf erscheint erst nach einer Änderung. + - Mehr als bisher: Es folgt die Übersicht aus 3.4 und der Knopf „Zahlungspflichtig bestellen“. + - Weniger als bisher: Es folgt der Hinweis auf das Monatsende und der Knopf „Speichern“. +- Solange eine Erhöhung noch nicht eingerichtet ist, steht dort „wird eingerichtet“. Bei einer geplanten Reduzierung steht dort „ab TT.MM. X GB“. +- Plus und Minus gehen nur bei Status `active`, also nicht in der Wartezeit bis zum Leistungsbeginn und nicht bei einem Zahlungsproblem. + +### 4.4 Bestellseiten + +- **Neuabschluss:** + - Der Ablauf bleibt wie heute: + - Übersicht direkt über dem Knopf + - Zustimmung einschließlich Auftragsverarbeitung + - Wahl zwischen sofortigem Beginn und Beginn nach der Widerrufsfrist + - „Zahlungspflichtig bestellen“, danach Stripe Checkout + - Neu ist, dass jedes Produkt seine eigene Übersicht, seinen Preis und seinen Stripe-Hinweistext bekommt. +- **Wechsel:** + - Eigene Seite `#wechsel` nach 3.5, ohne Stripe Checkout. Belastet wird die hinterlegte Zahlungsart. + - Verlangt die Bank eine Bestätigung (3-D Secure), leitet das Portal auf die Stripe-Zahlungsseite dieser Rechnung weiter. + +### 4.5 Öffentliche Formulare ohne Login + +- **`kuendigen.html`:** Statt des festen „WEBklar Wartungs-Abo“ wählt der Kunde zwischen zwei Möglichkeiten (§ 312k Abs. 3 BGB verlangt eine eindeutige Bezeichnung des Vertrags): + - „Mein Abo (Hosting- oder Wartungs-Abo, mit Zusatzspeicher)“ + - „Nur den E-Mail-Zusatzspeicher“ + + Die Bestätigung nennt das tatsächliche Abo. +- **`widerrufen.html`:** Der Kunde wählt die Bestellung aus (§ 356a BGB): + - „Abschluss meines Abos“ + - „Wechsel ins Wartungs-Abo“ + - „E-Mail-Zusatzspeicher“ +- **Server:** Er ordnet die Erklärung wie heute über die E-Mail-Adresse zu. Die Auswahl bestimmt, was gekündigt oder widerrufen wird. + +## 5. Stripe + +Produkte und Preise (monatlich, EUR, `tax_behavior: inclusive` wie heute): + +| Produkt | Preis | lookup_key | +|---|---|---| +| WEBklar Wartungs-Abo (besteht) | 50,00 € | `webklar_wartung_monatlich_5000` | +| WEBklar Hosting-Abo (neu) | 15,00 € | `webklar_hosting_monatlich_1500` | +| WEBklar E-Mail-Zusatzspeicher 5 GB (neu) | 1,00 € je Stück | `webklar_mailspeicher_5gb_monatlich_100` | + +- **Beschreibung des Wartungs-Produkts:** Sie wird in Stripe auf Version 4 geändert („beliebig viele Postfächer, zusammen 5 GB“). Der Code legt Produkte nur einmal an, deshalb geht das per Skript oder im Stripe-Dashboard. +- **Aufbau:** ein Stripe-Abo je Kunde mit zwei Positionen, dem Abo-Preis (Hosting oder Wartung) und optional dem Zusatzspeicher mit Stückzahl. +- **Aufrufe:** + - Plus: `subscriptions.update` mit der neuen Stückzahl und `proration_behavior: create_prorations`. Bis zur schon bezahlten Stückzahl gilt `none`, notfalls in zwei Schritten. + - Minus: `proration_behavior: none`. + - Wechsel: Preis der Abo-Position tauschen mit `billing_cycle_anchor: now` und `proration_behavior: create_prorations`, dabei dasselbe `proration_date` wie in der Vorschau. + - Den Betrag zeigen wir vorher jeweils mit `invoices.createPreview` an. +- **Stripe-Kundenportal:** Die Überschrift wird „WEBklar – Abo verwalten“. Tarif- und Mengenänderungen bleiben dort aus, weil Stripe unsere Mindestlaufzeiten und Bestellschritte nicht kennt. Die Kündigung dort bleibt ebenfalls aus. +- **Checkout-Hinweistext** (`custom_text`): je Produkt mit Preis und Mindestlaufzeit, statt fest „50,00 € … 12 Monate“. + +## 6. Daten (Appwrite, woms-database) + +**`subscriptions`** (ein Dokument je Stripe-Abo) bekommt neue Felder: + +- `productKey`: `hosting` oder `wartung`. Alte Dokumente ohne Wert gelten als `wartung`. +- `termStartAt`: Beginn der laufenden Mindestlaufzeit. Bei einem Neuabschluss ist das der Leistungsbeginn, bei einem Wechsel der Wechseltag. +- `storageUnits`: gebuchte Pakete Zusatzspeicher. +- `storagePaidUnits` und `storagePaidPeriodEnd`: Pakete, die für den laufenden Monat schon bezahlt sind. +- `planKey` enthält künftig den lookup_key des tatsächlichen Abo-Preises. + +**Neue Collection `contractEvents`.** Sie weist jede Bestellung und jede Änderung nach: + +- Felder: + - `customerId`, `subscriptionId` + - `type`: `abschluss`, `wechsel`, `speicher`, `kuendigung` oder `widerruf` + - `productKey` + - `details`: JSON mit Stückzahl alt und neu, Beträgen und Wirksamkeitsdatum + - `termsVersion`, `consentAt`, `consentIp`, `consentUserAgent`, `earlyStartConsentAt` + - `status`: `offen`, `erledigt` oder `widerrufen` + - `dueAt`, `doneAt`, `doneBy`, `confirmationSentAt` +- Die offenen `speicher`-Ereignisse sind die Aufgabenliste für konsoleH. +- Aus diesen Ereignissen ergibt sich die Widerrufsfrist je Bestellung. Heute zählt nur `startedAt`. +- Aufbewahrt werden sie wie die bisherigen Zustimmungsdaten: drei Jahre nach Vertragsende (Datenschutzerklärung, Abschnitt 7). + +**`aboOffers`** bekommt ein Feld `productKey`. Alte Angebote gelten als `wartung`. Der Normalpreis kommt aus dem Produktkatalog statt fest 50 €. + +Einrichtung: `scripts/setup-abo-collections.mjs` wird erweitert. + +## 7. Server (Kundenportal) + +**`server/config.js`** + +- Neuer Produktkatalog mit `products.hosting` und `products.wartung`. Jeder Eintrag enthält: + - Name, Preis und lookup_key + - Stripe-Beschreibung + - Leistungsliste für die Oberfläche + - Mindestlaufzeit und Minuten pro Monat (0 bzw. 60) +- Neu ist auch `mailStorage` mit lookup_key, 100 Cent, 5 GB und höchstens 10 Paketen. +- `abo.termsVersion` bleibt ein einziger Wert, weil es eine gemeinsame Fassung gibt (8.1). + +**`server/services/stripeBilling.js`** + +- Preise werden je Produkt angelegt oder gefunden. +- `syncSubscription` liest Abo-Preis und Zusatzspeicher aus den Positionen. +- Arbeitszeit gibt es nur, wenn die bezahlte Rechnung eine Wartungs-Position enthält, die keine anteilige Verrechnung ist und mehr als 0 € kostet. Heute bekommt jede bezahlte Abo-Rechnung eine Stunde. +- Checkout je Produkt. Die Sperre „höchstens ein laufendes Abo je Kunde“ bleibt. +- Neu kommen Wechsel, Zusatzspeicher und die Vorschauen dazu. +- Die Mindestlaufzeit zählt ab `termStartAt`. + +**`server/routes/abo.js`** + +- `GET /api/abo` liefert: + - den Produktkatalog + - `productKey` und Speicherstand + - ob ein Wechsel möglich ist + - das Stundenkonto, aber nur beim Wartungs-Abo +- Neue Aufrufe: + - `POST /api/abo/checkout` mit `productKey` + - `POST /api/abo/switch/preview` und `POST /api/abo/switch` + - `POST /api/abo/storage/preview` und `POST /api/abo/storage` +- Öffentliche Kündigung und öffentlicher Widerruf bekommen das Feld `contract`. + +**Mails** (`server/services/mailer.js`): produktneutral, siehe 9. + +**Admin** (`public/admin.html`, `public/admin.js`, Routen in `server/routes/portalAdmin.js`) + +- Die Abo-Anzeige nennt Produkt und Speicher. +- Neuer Reiter „E-Mail-Speicher“ mit: + - offenen Aufgaben (einrichten, reduzieren zum Datum) + - Knopf „Erledigt“ + - Summe der vergebenen Kontingente +- Abo-Angebote bekommen eine Produktauswahl. + +**Ticketsystem (WOMS):** Der Schalter „aufs Stundenkonto“ im Arbeitsnachweis erscheint nur bei Kunden mit laufendem Wartungs-Abo. + +## 8. Rechtstexte + +### 8.1 Aufbau + +Eine gemeinsame Fassung „Vertragsbedingungen für die WEBklar-Abos“ in Version 4: + +- allgemeiner Teil: Anbieter, Geltungsbereich, Vertragsschluss, Preise und Zahlung, Laufzeit und Kündigung, Wechsel, Zusatzspeicher, Vertragsende, Mängel, Haftung, Datenschutz, Änderungen, Schlussbestimmungen +- Leistungsbeschreibung A (Hosting-Abo) und Leistungsbeschreibung B (Wartungs-Abo) +- Widerrufsbelehrung nach dem gesetzlichen Muster (Wortlaut unverändert) mit Muster-Widerrufsformular +- Anlage 1 Auftragsverarbeitungsvertrag, Anlage 2 TOM, Anlage 3 Unterauftragsverarbeiter, jeweils für beide Abos + +Weitere Festlegungen: + +- **Adresse:** Sie bleibt `project.webklar.com/abo-bedingungen.html`, weil sie in Mails, auf der Website und im Stripe-Kundenportal steht. +- **PDF:** Das neue heißt `WEBklar-Abo-Vertragsunterlagen.pdf`. +- **Version 3:** Sie wird archiviert (HTML und PDF unter `vertragsunterlagen/v3/`). `WEBklar-Wartungs-Abo-Vertragsunterlagen.pdf` bleibt als Fassung 3 abrufbar, denn § 2 sagt zu, dass wir den Vertragstext speichern. +- **Zustimmung:** Gespeichert werden Version und Produkt. +- **Versionsdatum:** Es ist der Tag der Freigabe in der Rechtsrunde. + +### 8.2 Änderungen gegenüber Version 3 + +- **„Das Wichtigste auf einen Blick“:** beide Abos mit Preisen und Zusatzspeicher. +- **Geltungsbereich:** beide Abos, mit Vorrang vor den AGB einschließlich Leistungsmodul C (jährliches Hosting). +- **Vertragsschluss:** + - Der Bestellweg führt über „Verträge“. + - Wechsel und Zusatzspeicher sind eigene Bestellungen: Knopf, Vertragsschluss mit dem Klick, hinterlegte Zahlungsart, Bestätigungsmail. +- **Leistungen:** + - Aufteilung in A und B. + - Postfächer: 1 bzw. beliebig viele, zusammen 5 GB, Aufteilung, Einrichtung auf Anfrage, volle Postfächer, faire Nutzung, Zugangsdaten nur an den Kunden. + - Das Hosting-Abo gilt nur für statische Websites. +- **Stundenkontingent:** nur im Wartungs-Abo. Die erste Stunde gibt es beim Wechsel. +- **Pflichten des Kunden:** + - Zugangsdaten aller Postfächer geheim halten. + - Weitergabe an Beschäftigte in eigener Verantwortung. + - Im Hosting-Abo keine dynamischen Inhalte ohne Wechsel. +- **Preise und Zahlung:** + - 15 €, 50 € und Zusatzspeicher. + - Anteilige Berechnung beim Plus. + - Abrechnung beim Wechsel. + - Eine Sperre ist ab Verzug mit zwei Monatsgebühren möglich, statt wie bisher ab „100 €“. +- **Laufzeit und Kündigung:** + - Mindestlaufzeiten wie oben. Ein Wechsel startet 12 neue Monate. + - Rückwechsel nach 3.6. Der Zusatzspeicher ist monatlich kündbar. + - „Verträge hier kündigen“ bekommt die Auswahl. +- **Widerruf:** Die Hinweise stehen außerhalb der Musterbelehrung: + - Das Widerrufsrecht gilt je Bestellung. + - Folgen beim Widerruf eines Wechsels. + - Beim Zusatzspeicher kein Wertersatz. +- **Vertragsende:** Export aller Postfächer. +- **Auftragsverarbeitung:** + - Gegenstand sind beide Abos, Datenart „Inhalte der Postfächer“. + - Die Nutzer der Postfächer zählen zu den Betroffenen. + - Bei Widerspruch gegen einen Unterauftragsverarbeiter wird „das Abo“ kündbar. +- **TOM:** „Automatische Überwachung der Erreichbarkeit“ darf nur drinstehen, wenn sie läuft (10). + +### 8.3 Weitere Texte + +| Text | Änderung | +|---|---| +| Datenschutzerklärung (`public/datenschutz.html` + PDF) | Abschnitt 2 „unsere Abos“. Abschnitt 7 heißt „Abos und Zahlung über Stripe“, Nachweisdaten auch bei Wechsel und Zusatzspeicher. Abschnitt 8: Postfächer „im Rahmen unserer Abos“. Abschnitt 9: „für die Abos über Stripe“. Neues Stand-Datum | +| Kündigungs- und Widerrufsseite | Auswahl nach 4.5, Bestätigungsseite (`legal-form.js`) | +| Bedingungen der Übernahmegutschrift | gelten für beide Abos, `takeover.conditionsVersion` erhöhen | +| AGB webklar.com, Leistungsmodul C | Hosting gibt es als Hosting-Abo nach den Abo-Bedingungen. Bestehende Jahresverträge behalten ihre Fassung. Nr. 9 („jährlich im Voraus“) anpassen | +| Website | `/wartungs-abo` aktualisieren, neue Seite `/hosting-abo`, Link im Footer | +| Leitfaden Empfehlungsgeber (+ PDF) | beide Abos | +| Stripe | Produktbeschreibungen, Checkout-Hinweise | + +## 9. Mails + +Diese Änderungen gehören in die laufende Überarbeitung aller Portal-Mails. Alle Texte werden produktneutral, Produktname und Leistungen kommen aus dem Katalog. + +| Mail | Änderung | +|---|---| +| K01 Vertragsbestätigung | je Produkt, mit PDF der zugestimmten Fassung | +| K02 Kündigungsbestätigung (Stripe) | Produktname. Der Hinweis auf „Abo verwalten“ ist falsch, weil die Kündigung dort aus ist | +| K03 Eingangsbestätigung Kündigung | nennt den gekündigten Vertrag (Abo oder Zusatzspeicher) | +| K04 Eingangsbestätigung Widerruf | nennt die widerrufene Bestellung | +| K05, K06 Angebote | Produkt des Angebots, Normalpreis aus dem Katalog | +| K07–K10 Übernahmegutschrift | „Ihr Abo“ statt „Wartungs-Abo“ | +| neu: Wechsel ins Wartungs-Abo bestätigt | mit PDF, Widerrufsbelehrung und neuer Mindestlaufzeit | +| neu: Zusatzspeicher bestellt oder geändert | Zusammenfassung und Wirksamkeitsdatum, beim Plus mit PDF | +| T02, T05–T09 | Produktname | +| neu intern: Wechsel | Kunde und Beträge | +| neu intern: Speicher-Aufgabe | Kunde, Postfächer, neue Größe, Fälligkeit | + +## 10. Voraussetzungen vor dem Start + +- Die Überwachung der Erreichbarkeit läuft. Beide Abos und die TOM sagen sie zu, auf dem Server ist sie heute nicht zu finden. +- Unser Hetzner-Paket ist groß genug. Welches Paket wir haben, ist noch zu prüfen. +- Die Rechtsrunde ist abgeschlossen: Version 4, Datenschutz, AGB, Formulare. +- Die produktneutralen Mails sind fertig. +- Die Stripe-Produkte sind angelegt. Ein Live-Check läuft nur mit ausdrücklicher Freigabe. + +## 11. Reihenfolge + +Die Umsetzung wird in zwei Pläne geteilt. + +1. **Rechtstexte als Entwurf für die Rechtsrunde.** Das läuft parallel zu Plan 1. +2. **Plan 1, unsichtbare Vorarbeiten.** Sie können vorher live gehen, ohne sichtbare Änderung und ohne neuen Text: + - Produktkatalog + - `planKey` und `productKey` aus Stripe + - Stunde nur fürs Wartungs-Abo + - Tests +3. **Plan 2, sichtbarer Teil.** Er geht gemeinsam mit Version 4 live und umfasst: + - Ansicht „Verträge“, Bestellseiten, Wechsel und Zusatzspeicher + - Formulare, Admin und Mails + - Website, AGB, Leitfaden und WOMS + + Die Ansicht „Verträge“ kann nicht früher live gehen, weil § 2 der Version 3 den heutigen Bestellweg beschreibt. +4. **Start:** + - Stripe-Produkte anlegen + - `termsVersion` auf Version 4 setzen, PDFs erzeugen + - Portal und Website ausliefern und live prüfen + +## 12. Tests + +- **Unit-Tests** (`npm test`): + - Produktkatalog + - Stundengutschrift: Hosting-Rechnung ergibt keine Stunde, Wartungs-Rechnung 60 Minuten, Wechsel-Rechnung 60 Minuten, reine Speicheränderung keine + - Speicher-Abrechnung: Plus, Minus, erneutes Plus im selben Monat + - Mindestlaufzeit nach einem Wechsel + - Widerrufsfrist je Bestellung + - Zuordnung von Kündigung und Widerruf +- **Server-Ablauf** mit Appwrite-Mock, SMTP-Sink und Fake-Stripe (Aufbau wie bei den bisherigen Tests): + - Neuabschluss je Produkt + - Wechsel mit Vorschau + - Plus und Minus + - Webhooks mit mehreren Positionen + - öffentliche Kündigung und öffentlicher Widerruf + - alle Mails +- **Oberfläche** mit Playwright und Fixtures: + - „Verträge“ in allen Zuständen: kein Abo, Hosting, Wartung, gekündigt, Zahlungsproblem, Widerrufsfrist, Speicher in Einrichtung, Reduzierung geplant + - jeweils auf Handy und Desktop + - Pixelvergleich der übrigen Ansichten +- **Textprüfung:** Alle Dateien im Anhang nach „1 E-Mail-Postfach“ und nach festem „Wartungs-Abo“ durchsuchen. + +## 13. Offene Punkte zur Durchsicht + +Vorbelegt mit meinem Vorschlag, bitte bestätigen oder ändern: + +1. Die Übernahmegutschrift gibt es auch fürs Hosting-Abo. +2. Den Wechsel gibt es nur mit sofortigem Beginn (Pflicht-Häkchen). +3. Zusatzspeicher ohne Häkchen für den Sofortbeginn. Bei Widerruf erstatten wir alles. +4. Laufende Angebotsrabatte laufen beim Wechsel weiter. +5. Rückwechsel von Wartung zu Hosting nur auf Anfrage nach der Mindestlaufzeit. Nicht genutzte Stunden verfallen. +6. Höchstens 10 Pakete Zusatzspeicher je Kunde. +7. Kontaktformulare auf statischen Seiten nur über einen Dienst, den wir zentral betreiben. Zu klären: Wie laufen Formulare heute auf Kundenseiten? +8. Bestandskunden mit Version 3 behalten ihre Fassung. + - Beliebig viele Postfächer bieten wir ihnen kostenlos per Mail an. + - Zusatzspeicher können sie buchen, wenn sie dabei den Regeln zum Zusatzspeicher zustimmen. +9. Abo-Start mit Version 3 jetzt oder erst mit Version 4: Das hängt nicht von diesem Konzept ab. + +Außerdem brauche ich Angaben zu: + +- unserem Hetzner-Paket +- dem Werkzeug für die Überwachung der Erreichbarkeit, falls schon eins läuft + +## Anhang: Dateiliste + +**Kundenportal** (`knso/Webklar-Kundenbereich`) + +- Rechtstexte: + - `public/abo-bedingungen.html` und `public/WEBklar-Wartungs-Abo-Vertragsunterlagen.pdf` + - `scripts/build-legal-pdfs.sh` + - `public/datenschutz.html` und `docs/WEBklar-Datenschutzerklaerung.pdf` +- Formulare: `public/kuendigen.html`, `public/widerrufen.html`, `public/legal-form.js` +- Oberfläche: `public/dashboard.html`, `public/app.js`, `public/kundenbereich.css` +- Admin: `public/admin.html`, `public/admin.js` +- Server: + - `server/config.js` + - `server/services/stripeBilling.js`, `server/services/offers.js`, `server/services/takeoverCredits.js`, `server/services/mailer.js`, `server/services/hourLedger.js` + - `server/routes/abo.js`, `server/routes/offers.js`, `server/routes/portalAdmin.js` +- Einrichtung: `scripts/setup-abo-collections.mjs` +- Leitfaden: `docs/leitfaden-empfehlungsgeber.html` (+ PDF) +- Tests: neue Dateien unter `test/` + +**Website** (`JUSN/Webklar`) + +- `src/pages/WartungsAbo.tsx` +- neu: `src/pages/HostingAbo.tsx` +- `src/App.tsx`, `src/components/Footer.tsx`, `src/pages/AGB.tsx` + +**Ticketsystem** (`JUSN/tickte-system`) + +- `src/components/CreateWorksheetModal.jsx`, `src/components/WorksheetList.jsx`, `src/components/TicketRow.jsx` + +**Außerhalb von Git** + +- Stripe: Produkte, Preise, Beschreibung, Konfiguration des Kundenportals +- Hetzner konsoleH: Paket, Postfach-Grenzen +- Überwachung der Erreichbarkeit