Manager-Ziele: mehr als das Ziel wird jetzt auch gezaehlt
Filipe: "soll jeder die möglichkeit auch mehr wie das ziel einzutragen.
die sollen auch gezählt werden. die zahl die die leute erreichen sollen
sollen aber während dems immer gleich bleiben. mit der möglichkeit die
grenzen zu übergehen."
ZUERST GEMESSEN, DANN GEBAUT -- und die Messung hat die Aufgabe
verschoben: Eintragen ueber dem Ziel ging schon immer. Fuenf von fuenf
Versuchen wurden angenommen, es gab nie eine Sperre. Was fehlte, war
das ZAEHLEN.
Gemessen am Beispiel eines Scouts: creator 2/3, meeting 1/2,
schulung 1/2, werbung 2/1. Er hatte sechs Dinge getan, die Seite sagte
"5 von 8". Das Werbe-Video ueber dem Ziel fiel aus der Summe heraus,
weil sie je Aufgabe bei Math.min(zahl, ziel) gedeckelt war -- ohne
Hinweis, und niemand konnte es sehen.
ZWEI ZAHLEN STATT EINER, weil es zwei Fragen sind:
erledigt Wie viel von der PFLICHT ist erfuellt? Je Aufgabe
hoechstens ihr Ziel. Daraus kommt der Ring.
getan Wie viel wurde WIRKLICH getan? Ohne Deckel.
`erledigt` wurde bewusst NICHT entdeckelt: Wer zehn Werbevideos und
sonst nichts macht, haette sonst 10 von 8 und einen vollen Ring bei
drei unberuehrten Aufgaben. Das waere keine Grosszuegigkeit, sondern
eine falsche Auskunft. Gemessen bleibt der Ring bei 75 %, und zwei
Aufgaben bleiben offen.
DAS ZIEL BLEIBT STEHEN -- die naheliegende falsche Loesung waere, es
mitwachsen zu lassen; dann haette nie jemand mehr als sein Ziel.
Nachgemessen: 2 -> 2, waehrend die Zahl von 1 auf 6 stieg.
AUF DEM BILDSCHIRM: "+N" als eigenes Zeichen neben der Zahl, nicht in
ihr ("5/2 +3" statt "5/2"), im Ton von "erledigt" statt in einem
Warnton -- mehr zu tun als verlangt ist nichts, wovor man warnt. Im
Ring ein kleines Plus unter der Pflichtzahl, im Kopf "4 von 8 erledigt
· 2 zusaetzlich". Der Balken waechst NICHT ueber seinen Kasten hinaus
(bei 10 von 1 waeren alle anderen Aufgaben optisch platt), sondern
bekommt eine hellere Kappe. Auch im Verlauf und in der Teamtabelle.
Die Ausgabedatei bekommt "Gesamt getan" NEBEN "Gesamt erledigt" --
eine Zahl, die nur auf dem Bildschirm steht, fehlt in der Liste, die
am Monatsende weitergereicht wird.
pruef-manager-ziele: 216 -> 229 Pruefungen, gruen. Gegenprobe gefahren
(getan wieder gedeckelt -> 2 rot, mit "6 = 11" als Beleg). Beim ersten
Anlauf der Messung lagen alle fuenf Testdaten in der Zukunft; "0 von 5
angenommen" sah nach einer Sperre aus und war der Kalender -- steht
jetzt als Warnung in der Pruefung.
Nebenbei: mess-manager-ziele schrieb seine Bilder in den Projektstamm
statt nach server/ (relativer Pfad). Korrigiert, Stamm aufgeraeumt.
Dazu gruen: xlsx, css-klassen, lesbarkeit, tippziele, fingermass,
haus-trennung, deutsche-texte.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -441,3 +441,74 @@
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.mz-ring, .mz-balken__fuell, .mz-zeile__pfeil { transition: none; }
|
||||
}
|
||||
|
||||
/* =====================================================================
|
||||
MEHR ALS GEFORDERT (07.10.2026)
|
||||
=====================================================================
|
||||
|
||||
Filipe: „soll jeder die möglichkeit auch mehr wie das ziel
|
||||
einzutragen. die sollen auch gezählt werden. die zahl die die leute
|
||||
erreichen sollen sollen aber immer gleich bleiben. mit der
|
||||
möglichkeit die grenzen zu übergehen."
|
||||
|
||||
GEMESSEN AM 07.10.2026, bevor etwas gebaut wurde: Eintragen ging
|
||||
schon immer -- fünf von fünf Versuchen wurden angenommen, es gab nie
|
||||
eine Sperre. Was fehlte, war das ZÄHLEN. Ein Scout mit creator 2/3,
|
||||
meeting 1/2, schulung 1/2 und werbung 2/1 hatte sechs Dinge getan,
|
||||
und die Seite sagte „5 von 8": Das Werbe-Video über dem Ziel fiel aus
|
||||
der Summe heraus, weil sie je Aufgabe bei `Math.min(zahl, ziel)`
|
||||
gedeckelt war. Unsichtbar, ohne Hinweis, und niemand konnte es sehen.
|
||||
|
||||
DAS PLUS IST EIN EIGENES ZEICHEN, nicht Teil der Zahl. Die geforderte
|
||||
Zahl bleibt dadurch stehen -- „5/2" allein liest sich wie ein Fehler
|
||||
im Ziel, „5/2 +3" liest sich als das, was es ist.
|
||||
|
||||
IM TON VON „ERLEDIGT" (--mz-gut), nicht in einem Warnton: Mehr zu tun
|
||||
als verlangt ist nichts, wovor jemand gewarnt werden müsste. Gedeckt
|
||||
gehalten wie alles im Haus. */
|
||||
.mz-zeile__plus,
|
||||
.mz-ring__plus {
|
||||
flex: 0 0 auto;
|
||||
font-variant-numeric: tabular-nums;
|
||||
font-weight: 800;
|
||||
color: var(--mz-gut);
|
||||
}
|
||||
.mz-zeile__plus {
|
||||
/* .78rem = 12,5px -- über der Hausgrenze von 11,5px. */
|
||||
font-size: .78rem;
|
||||
margin-left: 6px;
|
||||
padding: 1px 7px;
|
||||
border-radius: 999px;
|
||||
background: color-mix(in srgb, var(--mz-gut) 14%, transparent);
|
||||
border: 1px solid color-mix(in srgb, var(--mz-gut) 32%, transparent);
|
||||
}
|
||||
/* Im Ring steht das Plus unter „von 8" und bleibt klein -- die große
|
||||
Zahl dort ist und bleibt der Pflichtstand. */
|
||||
.mz-ring__plus {
|
||||
display: block;
|
||||
margin-top: 1px;
|
||||
font-size: .72rem;
|
||||
}
|
||||
|
||||
/* Der Balken wächst NICHT über seinen Kasten hinaus (bei 10 von 1 wären
|
||||
alle anderen Aufgaben optisch platt). Stattdessen eine hellere Kappe
|
||||
am Ende: Man sieht, dass dort noch etwas ist, und die Zahl steht
|
||||
oben in der Zeile.
|
||||
|
||||
`inset-inline-end` statt `right`: Die Kappe sitzt damit auch dann am
|
||||
Ende des Balkens, wenn die Seite einmal von rechts nach links läuft. */
|
||||
.mz-balken[data-ueber="ja"] {
|
||||
position: relative;
|
||||
background: color-mix(in srgb, var(--mz-gut) 22%, rgba(150, 186, 220, .13));
|
||||
}
|
||||
.mz-balken[data-ueber="ja"]::after {
|
||||
content: "";
|
||||
position: absolute; inset-block: 0; inset-inline-end: 0;
|
||||
width: 10px;
|
||||
background: var(--mz-gut);
|
||||
}
|
||||
|
||||
@media (forced-colors: active) {
|
||||
.mz-zeile__plus { border: 1px solid CanvasText; }
|
||||
.mz-balken[data-ueber="ja"]::after { background: CanvasText; }
|
||||
}
|
||||
|
||||
@@ -178,15 +178,32 @@
|
||||
const ring = $('ring');
|
||||
ring.dataset.stufe = s.stufe;
|
||||
ring.style.setProperty('--mz-anteil', String(s.gesamt.anteil));
|
||||
ring.setAttribute('aria-label',
|
||||
`${s.gesamt.erledigt} von ${s.gesamt.ziel} erledigt`);
|
||||
/* Die Beschriftung für die Sprachausgabe steht weiter unten, dort
|
||||
wo auch das Plus gesetzt wird -- sie stand hier schon einmal und
|
||||
wäre damit zweimal dagewesen, ohne das "zusätzlich". */
|
||||
$('ring-zahl').textContent = String(s.gesamt.erledigt);
|
||||
$('ring-von').textContent = `von ${s.gesamt.ziel}`;
|
||||
|
||||
/* MEHR ALS GEFORDERT -- gezählt und sichtbar (07.10.2026).
|
||||
|
||||
Die Zahl im Ring bleibt der Pflichtstand, das Plus steht daneben.
|
||||
Beides kommt fertig vom Server (`gesamt.extra`); hier wird nichts
|
||||
nachgerechnet, sonst gäbe es zwei Rechenwege für dieselbe Zahl. */
|
||||
const plus = $('ring-plus');
|
||||
plus.hidden = !s.gesamt.extra;
|
||||
if (s.gesamt.extra) {
|
||||
plus.textContent = `+${s.gesamt.extra}`;
|
||||
plus.title = `${s.gesamt.extra} mehr als gefordert – zählt mit.`;
|
||||
}
|
||||
ring.setAttribute('aria-label', s.gesamt.extra
|
||||
? `${s.gesamt.erledigt} von ${s.gesamt.ziel} erledigt, ${s.gesamt.extra} zusätzlich`
|
||||
: `${s.gesamt.erledigt} von ${s.gesamt.ziel} erledigt`);
|
||||
|
||||
$('kopf-monat').textContent = monatText(s.monat);
|
||||
$('kopf-stand').textContent = s.gesamt.ziel === 0
|
||||
? 'Für deine Rolle sind diesen Monat keine Ziele gesetzt.'
|
||||
: `${s.gesamt.erledigt} von ${s.gesamt.ziel} erledigt`;
|
||||
: `${s.gesamt.erledigt} von ${s.gesamt.ziel} erledigt`
|
||||
+ (s.gesamt.extra ? ` · ${s.gesamt.extra} zusätzlich` : '');
|
||||
|
||||
const rest = $('kopf-rest');
|
||||
if (s.monat !== s.jetztMonat) {
|
||||
@@ -257,6 +274,20 @@
|
||||
zahl.setAttribute('aria-label',
|
||||
`${a.zahl} von ${a.ziel} ${a.ziel === 1 ? a.einheit[0] : a.einheit[1]}`);
|
||||
kopf.append(zahl);
|
||||
/* DAS PLUS ÜBER DEM ZIEL (07.10.2026).
|
||||
|
||||
Als EIGENES Zeichen neben der Zahl, nicht in sie hinein: Die
|
||||
geforderte Zahl soll gleich bleiben, auch wenn jemand darüber
|
||||
hinausgeht ("die zahl die die leute erreichen sollen sollen aber
|
||||
immer gleich bleiben"). „5/2" allein liest sich wie ein Fehler
|
||||
im Ziel; „5/2 +3" liest sich als das, was es ist. */
|
||||
if (a.extra > 0) {
|
||||
const mehr = el('span', 'mz-zeile__plus', `+${a.extra}`);
|
||||
mehr.setAttribute('aria-label',
|
||||
`${a.extra} mehr als gefordert, zählt mit`);
|
||||
mehr.title = `${a.extra} mehr als gefordert – zählt mit.`;
|
||||
kopf.append(mehr);
|
||||
}
|
||||
kopf.append(el('span', 'mz-zeile__pfeil', '›'));
|
||||
|
||||
/* NUR DIESE ZEILE AUF- UND ZUKLAPPEN, nicht die ganze Liste neu
|
||||
@@ -290,6 +321,12 @@
|
||||
const fuell = el('span', 'mz-balken__fuell');
|
||||
fuell.style.setProperty('--mz-anteil',
|
||||
String(a.ziel ? Math.min(100, Math.round((a.zahl / a.ziel) * 100)) : 0));
|
||||
/* DER BALKEN BLEIBT BEI 100 % STEHEN -- und sagt trotzdem, dass es
|
||||
mehr war. Ein Balken, der über seinen Kasten hinauswächst, hat
|
||||
keine Skala mehr: Bei 10 von 1 wären alle anderen Aufgaben
|
||||
optisch platt. Stattdessen bekommt er eine zweite, hellere Kappe
|
||||
am Ende; die ZAHL steht als „+N" oben in der Zeile. */
|
||||
if (a.extra > 0) balken.dataset.ueber = 'ja';
|
||||
balken.append(fuell);
|
||||
li.append(balken);
|
||||
|
||||
@@ -953,9 +990,14 @@
|
||||
td.append(punkt);
|
||||
td.append(document.createTextNode(
|
||||
x.erreicht === null ? 'nicht gefordert' : `${x.zahl}/${x.ziel}`));
|
||||
/* Auch im Verlauf: Was über dem Ziel lag, bleibt sichtbar.
|
||||
Sonst sieht ein Monat mit Mehrarbeit später genauso aus wie
|
||||
einer, der gerade so gereicht hat. */
|
||||
if (x.extra > 0) td.append(el('span', 'mz-zeile__plus', `+${x.extra}`));
|
||||
tr.append(td);
|
||||
}
|
||||
const tg = el('td', 'mz-wert', `${m.gesamt.erledigt}/${m.gesamt.ziel}`);
|
||||
if (m.gesamt.extra > 0) tg.append(el('span', 'mz-zeile__plus', `+${m.gesamt.extra}`));
|
||||
tg.dataset.schild = 'Gesamt';
|
||||
tr.append(tg);
|
||||
koerper.append(tr);
|
||||
|
||||
Reference in New Issue
Block a user