From b099297e11b0fe08a4149229255afa9ae981cf65 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 11 Jul 2026 17:08:54 +0200 Subject: [PATCH] Cockpit: DEACTIVATED + CANCELLED skippt Fristen-Warnungen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: Ein DEACTIVATED-Vertrag (manuell archiviert) zeigte im Cockpit weiter "Vertragsende: Vertrag seit 79 Tagen abgelaufen!" – sinnlos, weil der Mitarbeiter den Vertrag ja aktiv beendet hatte. Fix: skipDeadlines-Guard, der bisher nur ONGOING abfing, greift jetzt auch bei DEACTIVATED und CANCELLED. Beide sind terminale Status – laufende Fristen ergeben da semantisch keinen Sinn. Bewusst weiterhin AKTIV: - Block 13a (Schlussrechnung fehlt): feuert wegen dieser Status, nicht trotzdem. - Block 8 (DSGVO/Consent): läuft pro Kunde, nicht pro Vertrag. Co-Authored-By: Claude Opus 4.7 --- .../src/services/contractCockpit.service.ts | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/backend/src/services/contractCockpit.service.ts b/backend/src/services/contractCockpit.service.ts index f88c084e..dc88b969 100644 --- a/backend/src/services/contractCockpit.service.ts +++ b/backend/src/services/contractCockpit.service.ts @@ -356,12 +356,23 @@ export async function getCockpitData(opts?: { customerIds?: number[] }): Promise // Prüfen ob aktiver Folgevertrag existiert - dann keine Kündigungswarnungen nötig const hasActiveFollowUp = contract.followUpContract?.status === 'ACTIVE'; - // ONGOING = "Läuft weiter auf unbestimmte Zeit": es gibt kein Ende, - // also alle Fristen-bezogenen Blöcke (Kündigung, Verlängerung, - // Lieferbestätigung) für diesen Vertrag komplett skippen. DSGVO-/ - // Consent-Checks laufen weiter, weil die pro Kunde greifen, nicht - // pro Vertrag. - const skipDeadlines = contract.status === 'ONGOING'; + // Fristen-Blöcke pro Vertrag skippen für Status, bei denen laufende + // Fristen semantisch keinen Sinn ergeben: + // - ONGOING : "Läuft weiter auf unbestimmte Zeit" → kein Ende + // - DEACTIVATED : manuell beendet/archiviert → nichts mehr zu erinnern + // - CANCELLED : Kündigung schon eingereicht → Vertragsende ist + // die Konsequenz der Kündigung, keine Frist mehr + // Die Schlussrechnung-Fehlt-Warnung (Block 13a) bleibt aktiv, weil + // sie WEGEN dieser Status feuert (kein separater Guard). DSGVO-/ + // Consent-Checks (Block 8) sind pro Kunde, nicht pro Vertrag, und + // laufen ebenfalls weiter. + // User-Wunsch 2026-07-13: DEACTIVATED-Vertrag zeigte im Cockpit + // "Vertrag seit 79 Tagen abgelaufen!" – sinnlos für einen Vertrag, + // der vom Mitarbeiter aktiv archiviert wurde. + const skipDeadlines = + contract.status === 'ONGOING' + || contract.status === 'DEACTIVATED' + || contract.status === 'CANCELLED'; // 1. KÜNDIGUNGSFRIST (nur wenn kein aktiver Folgevertrag UND Snooze nicht aktiv) // Snooze unterdrückt NUR Fristen-bezogene Warnungen!