# Journal 2026-09-15

## Fisch: Mehrsprachige Startseiten-Texte

Admin → Startseite: Intro und Zusatzblock je Sprache (Tabs). Speicherung in
`landing_intro_i18n` / `info_text_i18n` (JSON). Optional DeepL-Button „Aus Deutsch übersetzen“
(`DEEPL_AUTH_KEY`). Öffentliche Landingseite wählt Text nach `lang`-Cookie/Query, Fallback DE.
Migration `Version20260915230000`.

## Fisch: Storno-Link + Soft-Archiv

- Confirm-/Verify-Mail: `ensureCancellationToken` vor Versand; Platzhalter-Aliase
  `{storno_link}`, `[[storno_link]]`, `{StornierungsLink}`, `[[StornierungsLink]]`;
  Admin-Vorschau mit Beispiel-URL.
- Soft-Archiv `archived_at` auf Kurs, Anmeldung, Sammelanmeldung
  (Migration `Version20260915220000`). Admin: Archivieren/Wiederherstellen, Filter `?archiv=1`.
  Archivierte zählen nicht für Kapazität/offene Bulk-Slots; archivierte Kurse nicht buchbar.

## Fisch: AGB-Link auf KSB-PDF

AGB-Links in Fisch-Buchung (Register, Warteliste, Claim, Elternlink, Footer) zeigen auf
`https://ksb-dueren.de/wp-content/uploads/2026/01/AGB_Jan2026.pdf` statt fit-fisch.de/agb.pdf.

## Fisch: Elternlinks ohne globale Anmeldephase

`registerByParent` ruft `register(..., allowWhenClosed: true)` auf. Maßgeblich bleiben
gültiger Schul-/Elternlink und die Bulk-Frist (`expiresAt`), nicht `isRegistrationOpen`.

`FISCH_PUBLIC_URL` fällt nicht mehr auf `APP_URL` zurück (sonst dp-smartsolutions).
Default/Env: `https://fit-fisch.de` — gilt für Mails, Admin-Sammelanmeldung und Twig-Global.

- Öffentlicher Storno: `/booking/fisch/stornieren?token=…`, Platzhalter `{storno_link}` in Verify-/Confirm-Fallback
- Pflicht-Checkboxen Datenschutz + AGB (Anmeldung, Warteliste, Claim, Sammel-Eltern); Timestamps auf `FischRegistration`
- Migration `Version20260915090000` (lokal ausgeführt)
- `app:fisch:e2e-test` grün; `waitlist-expire` / `expire-pending` mit `--dry-run` ohne Treffer
- Testmatrix um Fisch-Abschnitt ergänzt

## Schwimmkurse: Einfache Anmeldung (ohne E-Mail-Verifizierung)

Tag-der-Maus-Kurse (u. a.) bekamen fälschlich eine Bestätigungsmail ohne Verifizierungslink,
während die Erfolgsseite noch „Verifizierungsmail“ anzeigte und der Status auf `pending` (ausstehend) blieb.

- Neues Kurs-Flag **`simple_registration`** auf `Availability`
- Bei Aktivierung: keine `booking_validation`-Mail, sofort Status `verified` + `booking_confirmation`
- Erfolgsseite ohne Verifizierungshinweis
- Admin-Checkbox unter `/appointments/admin/courses/`
- Migration `Version20260915080000` (setzt Flag für IDs 264–266 und Namen mit „Tag der Maus“)

**E-Mail-Hinweis:** Normalflow braucht Template-Typ `booking_validation` mit `[[ValidierungsLink]]`.
`booking_confirmation` erst nach Klick auf den Link (außer bei einfacher Anmeldung).

## Migration + Daten-Umstellung (live)

- `Version20260915080000` ausgeführt
- Flag gesetzt für 19 Kurse (Mobi I–III + Tag der Maus Bonn 338–353)
- **200** Anmeldungen `pending` → `verified` (1× `cancelled` unverändert)
