Ausschlussfristen stehen dauerhaft als Warnung, auch wenn sie Jahre entfernt sind #40

Closed
opened 2026-09-01 13:41:37 +00:00 by florian.wilde · 1 comment
Owner

Was auffällt

Auf dem Dashboard stehen drei rote Warnkästen mit Warndreieck und Knopf „Frist jetzt bearbeiten":

  • Aufwandspauschale 2026 geltend machen — 06.05.2027
  • Aufwandspauschale 2027 geltend machen — 06.05.2028
  • Aufwandspauschale 2028 geltend machen — 06.05.2029

Alle drei sind ein bis drei Jahre entfernt. Sie stehen trotzdem in derselben Aufmachung da wie eine Frist, die nächste Woche abläuft.

Ursache

src/lib/dashboard/bewertung.ts:129

ausschlussfristen: eintraege.filter((e) => e.ausschlussfrist).slice(0, AUSSCHLUSSFRISTEN_MAX),

Alle übrigen Blöcke des Dashboards filtern nach Dringlichkeit (dieseWoche, diesenMonat, weitereOffen). Dieser fragt nur, ob es eine Ausschlussfrist ist, und nie, ob sie bald fällig wird. Eine Frist im Mai 2029 landet damit im selben roten Kasten wie eine, die morgen abläuft.

Die Daten selbst sind richtig: src/lib/fristen/pflichtfristen.ts legt Pflichtfristen bewusst drei Jahre im Voraus an (jahreVoraus = 3). Das soll so bleiben — in der Fristenliste gehören sie hin.

Warum das mehr ist als ein Schönheitsfehler

Eine Warnung, die dauerhaft dasteht und nichts bedeutet, stumpft ab. Stehen dort drei Kästen, die seit Monaten nichts von einem wollen, übersieht man den vierten, der etwas will. Bei einer Ausschlussfrist nach § 1878 BGB ist das die Jahrespauschale — sie erlischt ersatzlos, ohne Nachfrist.

Umsetzung

In den hervorgehobenen Block gehört nur, was in absehbarer Zeit fällig ist. Vorschlag: ein Horizont von 90 Tagen. Bei § 1878 BGB hat man sechs Monate Zeit; drei Monate Vorlauf sind reichlich und lassen den Kasten leer, solange nichts ansteht.

Alles Weitere bleibt in der regulären Fristenliste sichtbar — es verschwindet nicht, es schreit nur nicht mehr.

Abgelaufene Ausschlussfristen (tage < 0) müssen immer erscheinen, unabhängig vom Horizont.

Akzeptanzkriterien

  • Eine Ausschlussfrist, die weiter als der Horizont entfernt ist, erscheint nicht im hervorgehobenen Block, wohl aber in der Fristenliste.
  • Eine Ausschlussfrist innerhalb des Horizonts erscheint dort.
  • Eine bereits abgelaufene Ausschlussfrist erscheint dort, egal wie lange sie zurückliegt.
  • Der Horizont steht als benannte Konstante im Code, nicht als Zahl im Filterausdruck.
  • Unit-Test deckt die drei Fälle ab und wird rot, wenn der Filter wieder entfällt.
## Was auffällt Auf dem Dashboard stehen drei rote Warnkästen mit Warndreieck und Knopf „Frist jetzt bearbeiten": - Aufwandspauschale 2026 geltend machen — **06.05.2027** - Aufwandspauschale 2027 geltend machen — **06.05.2028** - Aufwandspauschale 2028 geltend machen — **06.05.2029** Alle drei sind ein bis drei Jahre entfernt. Sie stehen trotzdem in derselben Aufmachung da wie eine Frist, die nächste Woche abläuft. ## Ursache `src/lib/dashboard/bewertung.ts:129` ```ts ausschlussfristen: eintraege.filter((e) => e.ausschlussfrist).slice(0, AUSSCHLUSSFRISTEN_MAX), ``` Alle übrigen Blöcke des Dashboards filtern nach Dringlichkeit (`dieseWoche`, `diesenMonat`, `weitereOffen`). Dieser fragt **nur**, ob es eine Ausschlussfrist ist, und **nie**, ob sie bald fällig wird. Eine Frist im Mai 2029 landet damit im selben roten Kasten wie eine, die morgen abläuft. Die Daten selbst sind richtig: `src/lib/fristen/pflichtfristen.ts` legt Pflichtfristen bewusst drei Jahre im Voraus an (`jahreVoraus = 3`). Das soll so bleiben — in der Fristenliste gehören sie hin. ## Warum das mehr ist als ein Schönheitsfehler Eine Warnung, die dauerhaft dasteht und nichts bedeutet, stumpft ab. Stehen dort drei Kästen, die seit Monaten nichts von einem wollen, übersieht man den vierten, der etwas will. Bei einer Ausschlussfrist nach § 1878 BGB ist das die Jahrespauschale — sie erlischt ersatzlos, ohne Nachfrist. ## Umsetzung In den hervorgehobenen Block gehört nur, was in absehbarer Zeit fällig ist. Vorschlag: ein Horizont von 90 Tagen. Bei § 1878 BGB hat man sechs Monate Zeit; drei Monate Vorlauf sind reichlich und lassen den Kasten leer, solange nichts ansteht. Alles Weitere bleibt in der regulären Fristenliste sichtbar — es verschwindet nicht, es schreit nur nicht mehr. Abgelaufene Ausschlussfristen (`tage < 0`) müssen **immer** erscheinen, unabhängig vom Horizont. ## Akzeptanzkriterien - Eine Ausschlussfrist, die weiter als der Horizont entfernt ist, erscheint nicht im hervorgehobenen Block, wohl aber in der Fristenliste. - Eine Ausschlussfrist innerhalb des Horizonts erscheint dort. - Eine bereits abgelaufene Ausschlussfrist erscheint dort, egal wie lange sie zurückliegt. - Der Horizont steht als benannte Konstante im Code, nicht als Zahl im Filterausdruck. - Unit-Test deckt die drei Fälle ab und wird rot, wenn der Filter wieder entfällt.
florian.wilde added the in-arbeit label 2026-09-01 13:44:05 +00:00
florian.wilde started working 2026-09-01 13:44:17 +00:00
florian.wilde worked for 6 minutes 2026-09-01 13:50:38 +00:00
Author
Owner

🚀 Umgesetzt und nach main übernommen.

Vorgehen

  1. Ursache bestätigt: bewertung.ts:129 filterte nur auf ausschlussfrist, ohne Zeitbezug — anders als alle übrigen Blöcke des Dashboards.
  2. Horizont als benannte Konstante eingeführt (AUSSCHLUSSFRIST_HORIZONT_TAGE = 90) plus eine kleine Funktion warntJetzt(), damit die Regel einen Namen hat und nicht im Filterausdruck versteckt liegt.
  3. Abgelaufene Fristen ausdrücklich ausgenommen: Sie warnen weiter, egal wie lange sie zurückliegen.
  4. Tests ergänzt — ferne Fristen, Fristen genau am Horizont, einen Tag dahinter, abgelaufene, und eine gemischte Liste.
  5. Gegen drei Mutationen geprüft: alter Filter zurück · Abgelaufenes ausgeschlossen · Horizont um einen Tag verschoben. Jede wird rot.

Ein bestehender Test musste mit. hebt Ausschlussfristen unabhängig vom Fälligkeitstopf hervor belegte seine Aussage mit einer Frist 134 Tage in der Zukunft — die wäre jetzt außerhalb des Horizonts. Die Aussage stimmt weiterhin, das Beispiel liegt nun innerhalb des Horizonts, aber außerhalb aller Fälligkeitstöpfe.

Geprüft: 714 Unit-Tests · tsc sauber · Lint sauber

Was du nach dem nächsten Ausrollen siehst: Der rote Kasten ist leer. Die drei Aufwandspauschalen stehen weiterhin in der Fristenliste unter den weiteren offenen Fristen — sie sind nicht verschwunden, sie drängeln nur nicht mehr.

Aufwand: 0:06
Pull Request: #47 (gemergt)

🚀 **Umgesetzt und nach `main` übernommen.** <!-- claude-status pr: 47 zeit_sekunden: 381 --> **Vorgehen** 1. Ursache bestätigt: `bewertung.ts:129` filterte nur auf `ausschlussfrist`, ohne Zeitbezug — anders als alle übrigen Blöcke des Dashboards. 2. Horizont als benannte Konstante eingeführt (`AUSSCHLUSSFRIST_HORIZONT_TAGE = 90`) plus eine kleine Funktion `warntJetzt()`, damit die Regel einen Namen hat und nicht im Filterausdruck versteckt liegt. 3. Abgelaufene Fristen ausdrücklich ausgenommen: Sie warnen weiter, egal wie lange sie zurückliegen. 4. Tests ergänzt — ferne Fristen, Fristen genau am Horizont, einen Tag dahinter, abgelaufene, und eine gemischte Liste. 5. Gegen drei Mutationen geprüft: alter Filter zurück · Abgelaufenes ausgeschlossen · Horizont um einen Tag verschoben. Jede wird rot. **Ein bestehender Test musste mit.** `hebt Ausschlussfristen unabhängig vom Fälligkeitstopf hervor` belegte seine Aussage mit einer Frist 134 Tage in der Zukunft — die wäre jetzt außerhalb des Horizonts. Die Aussage stimmt weiterhin, das Beispiel liegt nun innerhalb des Horizonts, aber außerhalb aller Fälligkeitstöpfe. **Geprüft:** 714 Unit-Tests · `tsc` sauber · Lint sauber **Was du nach dem nächsten Ausrollen siehst:** Der rote Kasten ist leer. Die drei Aufwandspauschalen stehen weiterhin in der Fristenliste unter den weiteren offenen Fristen — sie sind nicht verschwunden, sie drängeln nur nicht mehr. **Aufwand:** 0:06 **Pull Request:** #47 (gemergt)
florian.wilde removed the in-arbeit label 2026-09-01 13:51:27 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Total Time Spent: 6 minutes
florian.wilde
6 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#40