Aufgaben: eine Bewerbung auf eine erledigte Aufgabe ist keine mehr

Beim Durchsehen der echten Daten am 30.09. gefunden, Filipe am
01.10.: „mach alles los."

GEMESSEN: Zwei Bewerbungen von Miss standen auf „beworben" -- an
Aufgaben, die laengst `erledigt` bzw. `review` waren. Bei ihr stand
weiter „wartet auf Antwort", und in der Liste der Leitung stand eine
Entscheidung an, die es nicht mehr gibt.

DAS MUSTER GIBT ES IM HAUS SCHON. `uebernahmeAbschliessen` raeumt
genau so die offenen Bewerbungen weg, wenn jemand anderes eine
Pool-Aufgabe bekommt -- samt dem Kommentar daneben: „Ohne diese Zeile
blieb eine Bewerbung auf ,beworben' stehen, nachdem jemand anders die
Aufgabe bekommen hat." Derselbe Fall, ein anderer Ausloeser, dieselbe
Behandlung.

ZWEI WEGE FUEHREN IN DEN ENDZUSTAND -- erledigen und abbrechen. Beide
rufen jetzt dieselbe Funktion; nur einen zu bedienen waere die
Haelfte, die man spaeter sucht. Der SATZ ist verschieden:
„abgebrochen" ist nicht „erledigt", und wer gewartet hat, soll den
Unterschied lesen koennen.

KEIN `entschieden_von`. Niemand hat entschieden, die Frage hat sich
erledigt. Dadurch faellt die Zeile auch aus der Absagen-Uebersicht
von gestern heraus (die fragt `entschieden_von IS NOT NULL`) --
richtig, es ist keine Absage an diesen Menschen.

KEINE BENACHRICHTIGUNG. „Deine Bewerbung: diesmal nicht" waere
falsch -- es hat niemand nein gesagt. Der Satz steht an der Zeile.
Wenn Filipe hier doch eine Meldung will, ist es eine eigene Art mit
eigenem Wortlaut, kein Anhaengsel an die bestehende.

GEPRUEFT -- pruef-bewerbung-aufgaben 163/0 (9 neue):

  bewirbt sich          -> „beworben"
  Aufgabe erledigt      -> faellt weg, mit Satz, ohne Entscheider
  Aufgabe abgebrochen   -> ebenso, mit anderem Satz
  Aufgabe noch offen    -> Bewerbung bleibt   <- die Gegenprobe

Ohne die letzte Zeile hiesse „faellt weg" womoeglich nur, dass jede
Bewerbung wegfaellt.

Ein eigener Messfehler unterwegs: Mein Lesehelfer fragte
`/api/aufgaben/:id` und bekam `undefined` -- die Antwort dort hat eine
andere Form. Vier Pruefungen waren rot, waehrend der Mechanismus im
Protokoll nachweislich lief. Jetzt ueber die Liste, die in dieser
Datei erprobt ist.

Die eine vorhandene Zeile wird nachgetragen; auf einer Kopie der
echten Datenbank durchgespielt (danach 0 offene Bewerbungen auf
durchgelaufenen Aufgaben, integrity_check ok).

pruef-zuteilung, pruef-aufgabenbrett, pruef-zwischenspeicher.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-10-01 00:59:27 +02:00
co-authored by Claude Opus 5
parent 09375047a7
commit 8e18c7bcf0
49 changed files with 861 additions and 671 deletions
+47
View File
@@ -4445,6 +4445,53 @@ function umstellungen(d) {
console.error("[workspace] Zuteilung nachtragen:", fehler?.message);
}
/* =====================================================================
BEWERBUNGEN AUF DURCHGELAUFENE AUFGABEN (01.10.2026)
=====================================================================
Beim Durchsehen der echten Daten am 30.09. gefunden: Zwei
Bewerbungen standen auf `beworben` an Aufgaben, die laengst
`erledigt` bzw. `review` waren. Bei der Person stand weiter
„wartet auf Antwort", und in der Liste der Leitung stand eine
Entscheidung an, die es nicht mehr gibt.
Die Ursache ist behoben (`bewerbungenSchliessen` laeuft jetzt an
beiden Wegen in den Endzustand). Dieser Block holt nach, was
schon dasteht.
OHNE `entschieden_von`: Niemand hat entschieden, die Frage hat
sich erledigt. Dadurch faellt die Zeile auch aus der
Absagen-Uebersicht heraus -- richtig, es ist keine Absage an
diesen Menschen.
WIEDERHOLBAR: Beim zweiten Start gibt es nichts mehr mit
`zustand = 'beworben'` an einer durchgelaufenen Aufgabe. */
try {
const vorher = d.prepare(`SELECT COUNT(*) AS n FROM aufgaben_zuteilung z
JOIN aufgaben a ON a.id = z.aufgabe_id
WHERE z.zustand = 'beworben'
AND a.status IN ('erledigt', 'abgebrochen', 'review')`).get().n;
if (vorher > 0) {
const nun = new Date().toISOString();
d.prepare(`UPDATE aufgaben_zuteilung
SET zustand = 'abgelehnt',
entscheid_text = (
SELECT CASE a.status WHEN 'abgebrochen'
THEN 'Die Aufgabe wurde abgebrochen.'
ELSE 'Die Aufgabe wurde inzwischen erledigt.' END
FROM aufgaben a WHERE a.id = aufgaben_zuteilung.aufgabe_id),
entschieden_am = ?, geantwortet_am = ?
WHERE zustand = 'beworben'
AND aufgabe_id IN (SELECT id FROM aufgaben
WHERE status IN ('erledigt', 'abgebrochen', 'review'))`)
.run(nun, nun);
console.log(`[workspace] ${vorher} Bewerbung(en) auf durchgelaufene `
+ "Aufgaben sind weggefallen.");
}
} catch (fehler) {
console.error("[workspace] Bewerbungen aufraeumen:", fehler?.message);
}
loeschspurenAufraeumen(d);
/* =====================================================================