Wiederholungen bekommen eine eigene Tafel -- und nur den laufenden Monat

Filipe: "ich will da auch noch eine kategorie fuer automatische
wiederholungen. die sollen dann auch nur fuer den monat selbst
angezeigt werden und nicht monate im voraus."

DAS PROBLEM WAR ECHT UND GROSS, UND ES STAND SEIT TAGEN AUF SEINEM
BILDSCHIRM

Der Nachfueller haelt einen Horizont von 180 Tagen gefuellt (siehe
workspace-serien.js). Ein woechentlicher Community-Talk ergibt darin
sechsundzwanzig Zeilen -- und alle standen unter "Steht an". Auf dem
Bild waren es siebenundzwanzig Karten, fast alle derselbe Termin. Die
Liste war damit unbrauchbar fuer genau das, wofuer sie da ist: zu
sehen, was WIRKLICH ansteht.

Jetzt sind es zwei getrennte Fragen:

  STEHT AN            was einmalig bevorsteht
  LAEUFT AUTOMATISCH  was von allein wiederkommt -- und davon nur der
                      LAUFENDE MONAT

Der Monatsschnitt ist die eigentliche Antwort auf "nicht Monate im
Voraus": Eine Wiederholung im November sagt einem heute nichts, was man
nicht schon weiss. Wer weiter schauen will, hat den Kalender -- und
genau das steht als Satz in der Gruppe.

Gerechnet wird auf dem reinen Datumstext (`beginn` beginnt mit
JJJJ-MM), nicht mit `new Date`. Kein Zeitzonenfehler, kein Nachtfehler.
Die Trennung faellt im SERVER, nicht in der Oberflaeche: Eine zweite
Regel im Browser waere die sichere Zusage, dass beide auseinanderlaufen.

DREI AUSSAGEN STATT EINER

pruef-call-kategorien saet jetzt zwei Auspraegungen derselben Serie --
eine in vier, eine in sechzig Tagen -- und misst:

  1. die Wiederholung dieses Monats steht in "Laeuft automatisch"
  2. die des naechsten Monats NICHT
  3. und unter "Steht an" steht keine von beiden

Vorher wird geprueft, dass die beiden ueberhaupt in verschiedenen
Monaten liegen. Ohne diese Zeile waere Nummer 2 an einem 1. des Monats
trivial erfuellt -- gruen, ohne etwas gemessen zu haben.

Zwei Fehler beim Bau der Pruefung, beide von ihr selbst gemeldet:
`page.evaluate` lief in "Target page has been closed" (der Block davor
schliesst seinen Browserkontext -- diese Aussage braucht ohnehin keinen
Browser, sie betrifft die Schnittstelle), und eine Hilfsfunktion stand
nach ihrer ersten Benutzung.

pruef-call-kategorien von 17 auf 22. Neun Pruefungen gelaufen, alle
gruen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-07 23:26:38 +02:00
co-authored by Claude Opus 5
parent fc4616bb05
commit 63036fc33e
22 changed files with 295 additions and 195 deletions
+28 -2
View File
@@ -69,7 +69,7 @@ callRouter.use("/workspace/api/calls", angemeldet);
const SPALTEN = `
t.id, t.titel, t.beschreibung, t.art, t.beginn, t.dauer_min, t.ort,
t.creator_id, t.teilnehmer_id, t.erledigt,
t.creator_id, t.teilnehmer_id, t.erledigt, t.serie_id,
pc.name AS creator_name, pt.name AS teilnehmer_name,
pr.id AS protokoll_id, pr.punkte, pr.entscheidungen,
pr.erstellt AS protokoll_erstellt, pr.naechster_termin_id,
@@ -133,8 +133,34 @@ callRouter.get("/workspace/api/calls", (req, res) => {
call_link: einstellung("call_link", "") || "",
/* Die Reihenfolge der Gruppen ist die Dringlichkeit: Was fehlt,
steht oben -- nicht was als Naechstes kommt. */
/* WIEDERHOLUNGEN BEKOMMEN EINE EIGENE GRUPPE (07.09.2026).
Filipe: "ich will da auch noch eine kategorie fuer automatische
wiederholungen. die sollen dann auch nur fuer den monat selbst
angezeigt werden und nicht monate im voraus."
DAS PROBLEM WAR ECHT UND GROSS: Der Nachfueller haelt einen
Horizont von 180 Tagen gefuellt (siehe workspace-serien.js).
Ein woechentlicher Community-Talk ergibt darin sechsundzwanzig
Zeilen -- und alle standen unter "Steht an". Auf Filipes Bild
waren es siebenundzwanzig Karten, fast alle derselbe Termin.
Die Liste war damit unbrauchbar fuer das, wofuer sie da ist:
zu sehen, was WIRKLICH ansteht.
Jetzt zwei getrennte Fragen:
STEHT AN was einmalig bevorsteht
LAEUFT AUTOMATISCH was von allein wiederkommt, und davon
nur der LAUFENDE MONAT
Der Monatsschnitt ist die eigentliche Antwort auf "nicht Monate
im Voraus": Eine Wiederholung im November sagt einem heute
nichts, was man nicht schon weiss. Gerechnet wird auf dem
reinen Datumstext (`beginn` beginnt mit JJJJ-MM) -- kein
`new Date`, keine Zeitzone, kein Nachtfehler. */
offen: alle.filter((c) => c.beginn <= grenze && !c.protokoll_id).reverse(),
anstehend: alle.filter((c) => c.beginn > grenze).reverse(),
anstehend: alle.filter((c) => c.beginn > grenze && !c.serie_id).reverse(),
serien: alle.filter((c) => c.beginn > grenze && c.serie_id
&& String(c.beginn).slice(0, 7) === grenze.slice(0, 7)).reverse(),
erledigt: alle.filter((c) => c.beginn <= grenze && c.protokoll_id),
});
} catch (fehler) {