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`. -->
-
-
+
+
-
+