Berater faellt aus (B2): pausieren nach 2 Tagen, Rueckgabe bei Zahlung, harter Cut am 28. Tag

Entwicklungsplan September, B2 (Protokoll 08.09., Rueckmeldung 14.09., R3):
- Ablauftag + 2 Kalendertage (Nachtlauf): Team, Kunden, Kundenabos und
  Portal-Logins gehen umkehrbar an den naechsten aktiven Sponsor, jede
  Umhaengung in consultant_suspension_transfers protokolliert. Kurzinfo
  an den Sponsor ohne Listen, keine Mail an das Firmenkonto.
- Zahlung bis Tag 27: Berater aktiv, Team und Kundendaten zurueck (nur
  was noch beim Sponsor liegt); Umsaetze der Zwischenzeit bleiben dort.
- Tag 28: was noch am Berater haengt geht endgueltig an den Sponsor,
  Berater wird dessen Kunde (ohne Duplikat) und geloescht; Listen-Mail
  mit Vorname, Nachname, Telefon, E-Mail an jeden haltenden Sponsor.
- Cron, Zahlungseingang und Admin-Ablaufdatum laufen ueber
  ConsultantSuspensionService; user:cleanup --dry-run listet beide Stufen.
- Mail 35 und Dashboard nennen Pausentag und Frist; Fristen in
  config/mivita.php (cleanup_suspend_days, cleanup_delete_days).
- Nebenbefunde: Kernel referenziert UserCleanUp, user:restore aus der
  User-Bereinigung laeuft nur noch einmal.
- Testschema: shopping_users.auth_user_id nullable wie auf Produktion
  (Migration aendert nur, wo die Spalte noch NOT NULL ist).
- Uebersicht fuer die Kundin: dev/_tickets/2026-09-23-mitgliedschaft-
  ablauf-uebersicht.md.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kevin 2026-09-23 15:44:45 +00:00
parent 6cd00a60ec
commit 0b8f8abeeb
29 changed files with 1528 additions and 193 deletions

View file

@ -6,6 +6,12 @@ return [
'remind_first_days' => env('MIVITA_REMIND_FIRST_DAYS', '21'),
'remind_sec_days' => env('MIVITA_REMIND_SEC_DAYS', '14'),
'remind_last_days' => env('MIVITA_REMIND_LAST_DAYS', '2'),
// Ablauf der Mitgliedschaft (Entwicklungsplan B2): nach so vielen Tagen wird der
// Berater pausiert, Team und Kunden gehen vorübergehend an den Sponsor; zahlt er
// bis zum Ablauf der zweiten Frist, bekommt er alles zurück, sonst harter Cut.
'cleanup_suspend_days' => (int) env('MIVITA_CLEANUP_SUSPEND_DAYS', 2),
'cleanup_delete_days' => (int) env('MIVITA_CLEANUP_DELETE_DAYS', 28),
'edit_data_pass' => env('MIVITA_EDIT_DATA_PASS', 'iq1OeUUpTUaXwNUdh8xHmx7RXTif4='),
'add_number_id' => env('MIVITA_ADD_NUMBER_ID', '946'),