diff --git a/server/pruef-entwicklung.mjs b/server/pruef-entwicklung.mjs index 262ec0d2..440f7014 100644 --- a/server/pruef-entwicklung.mjs +++ b/server/pruef-entwicklung.mjs @@ -405,10 +405,25 @@ console.log("\n=== Punkte je Person aussuchen ==="); `/workspace/api/entwicklung/person/${idModi}`, { host: CREW, keks })).daten; const vorher = await karte(dogi.keks); + const allePunkte = (b) => (b?.bloecke || []).flatMap((x) => x.punkte); + /* DIE SICHT DER LEITUNG AENDERT SICH NICHT (berichtigt 25.09.2026). + + Der erste Anlauf hat die Karte auf das Zugetragene eingegrenzt. + Filipe: „falsch, dogfather und die rechte hand sollen immer noch + die 68 sachen sehen wie vorher … aber unsere sicht von dogfather + und rechte hand soll sich nicht aendern." + + Die Pruefung haelt das jetzt ausdruecklich fest -- sonst waere die + naechste Eingrenzung wieder eine Zeile Arbeit und niemandem + aufgefallen. */ + ok(allePunkte(vorher).length === vorher?.gesamt_katalog + && (vorher?.gesamt_katalog || 0) >= 60, + `die Leitung sieht den ganzen Katalog (${allePunkte(vorher).length} Punkte)`); ok(vorher && vorher.gesamt === 0, - `ohne Zuteilung steht auf der Karte nichts (${vorher?.gesamt} Punkte)`); - ok((vorher?.gesamt_katalog || 0) >= 60, - `der Katalog hat trotzdem alle Punkte (${vorher?.gesamt_katalog})`); + `ohne Zutragung zaehlt die Karte trotzdem nichts (${vorher?.gesamt})`); + ok(allePunkte(vorher).every((pt) => pt.zugetragen === false), + `und kein Punkt ist als Aufgabe markiert ` + + `(${allePunkte(vorher).filter((pt) => pt.zugetragen).length})`); /* DIE LISTE ZUM AUSSUCHEN zeigt ALLES, mit einem Haken an dem, was gilt. Zeigte sie nur das Zugeteilte, koennte man nie etwas @@ -430,10 +445,14 @@ console.log("\n=== Punkte je Person aussuchen ==="); `DogFather sucht zwoelf aus (HTTP ${gesetzt.status}, ${gesetzt.daten?.zugeteilt})`); const nachher = await karte(dogi.keks); - const drin = (nachher?.bloecke || []).flatMap((b) => b.punkte).map((x) => x.schluessel); - ok(nachher?.gesamt === 12 && drin.length === 12, - `und danach stehen genau die zwoelf auf der Karte (${nachher?.gesamt})`); - ok(zwoelf.every((s) => drin.includes(s)), + const markiert = allePunkte(nachher).filter((pt) => pt.zugetragen).map((x) => x.schluessel); + /* DIE LISTE BLEIBT VOLL, die Marke wandert. Das ist der ganze + Unterschied zwischen „eingrenzen" und „zutragen". */ + ok(allePunkte(nachher).length === vorher?.gesamt_katalog, + `die Liste bleibt vollstaendig (${allePunkte(nachher).length})`); + ok(nachher?.gesamt === 12 && markiert.length === 12, + `und genau zwoelf sind als Aufgabe markiert (${markiert.length})`); + ok(zwoelf.every((s) => markiert.includes(s)), " und zwar dieselben, nicht irgendwelche zwoelf"); /* DIE RECHTE HAND SIEHT DASSELBE -- sie beurteilt denselben diff --git a/server/workspace-entwicklung.js b/server/workspace-entwicklung.js index 767f0e49..b108fac5 100644 --- a/server/workspace-entwicklung.js +++ b/server/workspace-entwicklung.js @@ -607,8 +607,18 @@ entwicklungRouter.get("/workspace/api/entwicklung/lage", (req, res) => { davon verblasst sind, und wie viele wir beide verschieden sehen. Die Abweichung ist das Ergebnis -- deshalb steht sie schon in der Uebersicht und nicht erst in der Karte. */ + /* NUR, WAS ZUGETRAGEN IST (25.09.2026). Der Verbund mit der + Zuteilung ist der ganze Unterschied: Ohne ihn zaehlt die + Uebersicht Einschaetzungen zu Punkten mit, die dieser Mensch nie + bekommen hat -- und in der Karte daneben stuende eine kleinere + Zahl. Zwei Zahlen fuer dieselbe Sache, und die Uebersicht ist + die, die man zuerst sieht. */ const gesetzt = db().prepare( - "SELECT person_id, COUNT(*) AS n FROM entwicklung_stand WHERE von_id = ? GROUP BY person_id") + `SELECT s.person_id, COUNT(*) AS n + FROM entwicklung_stand s + JOIN entwicklung_zuteilung z + ON z.person_id = s.person_id AND z.schluessel = s.schluessel + WHERE s.von_id = ? GROUP BY s.person_id`) .all(req.person.id); const meineZahl = new Map(gesetzt.map((z) => [z.person_id, z.n])); @@ -641,6 +651,9 @@ entwicklungRouter.get("/workspace/api/entwicklung/lage", (req, res) => { stufen: ENTWICKLUNG_STUFEN, erwartung: ENTWICKLUNG_ERWARTUNG, verblasst_nach: VERBLASST_NACH_TAGEN, + /* Wie viele es im Katalog GIBT -- fuer die Auswahl, nicht fuer + die Zaehlung an der Kachel. Die steht seit heute auf dem, was + zugetragen ist (`zugeteilt` je Person). */ gesamt_fremd: ENTWICKLUNG_FREMD.length, personen: personen.map((p) => ({ id: p.id, name: p.name, @@ -657,9 +670,13 @@ entwicklungRouter.get("/workspace/api/entwicklung/lage", (req, res) => { gesetzt: meineZahl.get(p.id) || 0, veraltet: alteZahl.get(p.id) || 0, abweichungen: andersZahl.get(p.id) || 0, - /* Wie viele Punkte fuer sie ausgesucht sind. `0` heisst - ausdruecklich „noch keine" und nicht „keine Angabe" -- die - Oberflaeche sagt dann „Punkte auswaehlen", nicht „0 von 68". */ + /* WIE VIELE PUNKTE IHM ZUGETRAGEN SIND (25.09.2026). + + Filipe: „es sollen nur die menge angezeigt werden die wir + zutragen." Diese Zahl ist ab jetzt das GANZE der Kachel -- + „3 von 12", nicht „3 von 68". `0` heisst ausdruecklich „noch + nichts zugetragen" und nicht „keine Angabe"; die Oberflaeche + sagt dann einen Satz statt einer Null. */ zugeteilt: zuteilZahl.get(p.id) || 0, })), /* Die eigene Karte -- fuer jeden, der im Team ist. */ @@ -693,9 +710,28 @@ entwicklungRouter.get("/workspace/api/entwicklung/person/:id", nurLeitung, (req, const grenze = Date.now() - VERBLASST_NACH_TAGEN * TAG; const schritte = schritteVon(p.id); - /* NUR, WAS FUER IHN GILT (25.09.2026). Vorher stand hier - `katalogFuer` -- alle 68 fuer jeden. */ - const bloecke = katalogFuerPerson(req.person, id, false).map((b) => ({ + /* ==== KORRIGIERT NOCH AM SELBEN TAG (25.09.2026) ============== + + Der erste Anlauf hat die Karte auf das Zugetragene eingegrenzt. + Filipe: „falsch, dogfather und die rechte hand sollen immer noch + die 68 sachen sehen wie vorher … aber unsere sicht von dogfather + und rechte hand soll sich nicht aendern." + + ER HAT RECHT, und der Unterschied ist wichtig: Die 68 sind das, + woran IHR euch entlanghangelt, wenn ihr jemanden anseht -- eine + Liste, die sich je Person verkuerzt, waere eine andere Liste bei + jedem Menschen, und dann faellt kein Vergleich mehr auf. + + ZUGETRAGEN WIRD ETWAS ANDERES: eine AUFGABE fuer diesen + Menschen. Das ist eine Auswahl AUS der Liste, nicht eine + Beschneidung der Liste. Deshalb steht hier wieder der ganze + Katalog -- und an jedem Punkt, ob er zugetragen ist. + + GEZAEHLT WIRD TROTZDEM DAS ZUGETRAGENE (siehe unten bei + `gesetzt`/`gesamt`): „0 von 68" war die Zahl, die ihn gestoert + hat, und sie sagt bei jemandem mit drei Aufgaben nichts. */ + const zugeteilt = zugeteiltFuer(id); + const bloecke = katalogFuer(req.person, false).map((b) => ({ ...b, punkte: b.punkte.map((pt) => { const m = meine.get(pt.schluessel) || null; @@ -717,6 +753,10 @@ entwicklungRouter.get("/workspace/api/entwicklung/person/:id", nurLeitung, (req, nicht auf einer eigenen Liste: Wer die Beobachtung sieht, soll im selben Blick sehen, ob daraus etwas geworden ist. */ schritt: schritte.get(pt.schluessel) || null, + /* IST ER DIESEM MENSCHEN ZUGETRAGEN? (25.09.2026) Der Punkt + bleibt sichtbar -- die Marke sagt, dass er ihm als Aufgabe + gegeben wurde. */ + zugetragen: zugeteilt.has(pt.schluessel), }; }), })); @@ -781,20 +821,25 @@ entwicklungRouter.get("/workspace/api/entwicklung/person/:id", nurLeitung, (req, erwartung: ENTWICKLUNG_ERWARTUNG, bloecke, abweichungen, - /* „X VON Y" ZAEHLT AB HEUTE DAS ZUGETEILTE (25.09.2026). + /* „X VON Y" ZAEHLT DAS ZUGETRAGENE (25.09.2026). - `ENTWICKLUNG_FREMD.length` sind alle 68 -- die Zahl war damit - fuer jeden gleich, egal wie viele Punkte ihn ueberhaupt - betreffen. „0 von 68" bei jemandem, fuer den zwoelf gelten, - ist keine Auskunft, sondern eine Entmutigung. + Filipe: „es sollen nur die menge angezeigt werden die wir + zutragen und erledigte dan auch nur die die erledigt wurden + von den zugetragenen." - `meine.size` musste ebenfalls nachgezogen werden: Wer frueher - zu einem Punkt gesetzt hat, der ihm inzwischen nicht mehr - zugeteilt ist, haette sonst „13 von 12" bekommen. Gezaehlt - wird deshalb nur, was auch in der Liste steht. */ + Vorher stand hier `ENTWICKLUNG_FREMD.length` -- alle 68, fuer + jeden dieselbe Zahl, egal wie viel ihm ueberhaupt aufgetragen + wurde. „0 von 68" sagt bei jemandem mit drei Aufgaben nichts + und entmutigt bei jedem. + + UND DIE LINKE ZAHL EBENSO: Gezaehlt wird, was von den + ZUGETRAGENEN erledigt ist. Wer frueher zu einem Punkt gesetzt + hat, der ihm nie zugetragen wurde, haette sonst „13 von 3" + bekommen -- eine Zahl, die groesser ist als ihr Ganzes, und + die niemand mehr erklaeren kann. */ gesetzt: bloecke.reduce((n, b) => n - + b.punkte.filter((pt) => pt.meins).length, 0), - gesamt: bloecke.reduce((n, b) => n + b.punkte.length, 0), + + b.punkte.filter((pt) => pt.zugetragen && pt.meins).length, 0), + gesamt: zugeteilt.size, /* Wie viele es insgesamt GAEBE -- die Oberflaeche sagt damit „12 von 68 ausgewaehlt", ohne die Liste selbst zu kennen. */ gesamt_katalog: ENTWICKLUNG_FREMD.length, diff --git a/workspace/anruf-probe.html b/workspace/anruf-probe.html index 3fa64cab..4e603c81 100644 --- a/workspace/anruf-probe.html +++ b/workspace/anruf-probe.html @@ -16,15 +16,15 @@ verdeckt. Gefunden hat es pruef-struktur. Richtig sind `gate.css` (die Farbwerte des Hauses) und `haus.css`. --> - - + + - +