Die Wochenzahlen erklaeren sich -- und die Zeitraum-Karte bekommt eine Rangfolge

Zwei Bildschirmfotos, zwei Sachen.

1) "wieso werden die zahlen oben nicht ausgefuellt von der excel datei?"

Weil kein einziger Tag erfasst ist -- die Backstage-Ausgabe enthielt
einen Zeitraum, und aus einer Summe ueber dreizehn Tage laesst sich
nicht ablesen, wie ein einzelner Tag lief.

Das stand nirgends. Stattdessen standen dort sieben Karten mit "0" und
"wie in der Vorwoche": Das sieht aus wie ein Fehler, und die Frage
entsteht genau an dieser Stelle. Also steht die Antwort jetzt auch
dort -- nicht in einer Notiz, nicht in einem Hilfetext.

UND SIE NENNT DEN WEG, nicht nur den Grund: "In Backstage den Zeitraum
auf EINEN Tag stellen, herunterladen, hier einlesen -- je Tag einmal."
Ein Hinweis ohne Ausweg ist eine Sackgasse mit Erklaerung.

Sobald EIN Tag da ist, verschwindet der Kasten und die Karten kommen
zurueck. Genau das ist die Gegenprobe; ohne sie hiesse alles andere
nur, dass die Karten jetzt immer weg sind.

2) "das muss viel geiler aussehen und viel klarer."

Er hatte recht: Die erste Fassung war eine Liste ohne Rangfolge --
Spanne, Diamanten, LIVE, Follower, alles gleich gross, nichts sprang
heraus. Wer draufschaut, will ZWEI Dinge in einer halben Sekunde
wissen: WELCHER Zeitraum und WIE VIELE Diamanten.

Jetzt: die Spanne als Ueberschrift, die Zahl der Tage als Marke
daneben, die Diamanten gross mit dem Schnitt direkt darunter, alles
Uebrige unter einem Strich. Links eine Kante in der Hausfarbe -- sie
sagt "andere Sorte Zahl", ohne dass ein Wort dafuer noetig waere. Das
ist wichtig: Wer einen Zeitraum fuer einen Tageswert haelt, rechnet mit
ihm weiter.

GEMESSEN IN PIXELN, NICHT NACH GEFUEHL: Die Hauptzahl muss mindestens
1,6-mal so gross sein wie ein Nebenwert (gemessen: 30 px zu 15 px),
sonst ist es wieder eine Liste. Eine Pruefung, die "sieht gut aus"
sagt, sagt nichts.

pruef-backstage-import 118 -> 127. Der leere Zustand wird HERGESTELLT
und nicht abgewartet -- eine Pruefung, die auf einen Zustand hofft,
prueft irgendwann gar nichts mehr.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-14 20:05:06 +02:00
co-authored by Claude Opus 5
parent 0d3a4b78cd
commit 4571b15494
32 changed files with 656 additions and 430 deletions
+94 -1
View File
@@ -742,7 +742,7 @@ console.log("\n=== Die Seite ===");
const spannenBild = await seite.evaluate(() => ({
sichtbar: document.getElementById("spannen-block")?.hidden === false,
karten: document.querySelectorAll(".spanne").length,
zeit: document.querySelector(".spanne__zeit")?.textContent || "",
zeit: document.querySelector(".spanne__spanne")?.textContent || "",
tage: document.querySelector(".spanne__tage")?.textContent || "",
schnitt: document.querySelector(".spanne__schnitt")?.textContent || "",
satz: document.querySelector(".spannen__satz")?.textContent || "",
@@ -758,6 +758,99 @@ console.log("\n=== Die Seite ===");
ok(/nicht für einen Tag/.test(spannenBild.satz),
"und darueber steht, dass es kein Tageswert ist");
/* ---- DIE HAUPTZAHL IST GROSS (14.09.2026) -----------------------
Filipe zur ersten Fassung: "das muss viel geiler aussehen und viel
klarer." Sie war eine Liste ohne Rangfolge -- alles gleich gross,
nichts sprang heraus.
GEMESSEN IN PIXELN, NICHT NACH GEFUEHL: Die Diamantenzahl muss
deutlich groesser sein als die Nebenwerte, sonst ist es wieder
eine Liste. */
const groessen = await seite.evaluate(() => {
const g = (s) => {
const e = document.querySelector(s);
return e ? Math.round(parseFloat(getComputedStyle(e).fontSize)) : 0;
};
return { haupt: g(".spanne__haupt-zahl"), neben: g(".spanne__zahl"),
spanne: g(".spanne__spanne"),
text: document.querySelector(".spanne__haupt-zahl")?.textContent || "" };
});
ok(groessen.haupt >= groessen.neben * 1.6,
`die Hauptzahl ist deutlich groesser als die Nebenwerte `
+ `(${groessen.haupt} px zu ${groessen.neben} px)`);
ok(groessen.spanne > groessen.neben,
`und die Spanne groesser als ein Nebenwert (${groessen.spanne} px)`);
ok(/\d/.test(groessen.text), `die Hauptzahl traegt Diamanten ("${groessen.text}")`);
/* ---- EINE WOCHE OHNE EINEN EINZIGEN TAG (14.09.2026) ------------
Filipe: "wieso werden die zahlen oben nicht ausgefuellt von der
excel datei?"
Genau sein Fall: ein Zeitraum ist da, Tageszahlen gibt es keine.
Vorher standen dort sieben Karten mit "0" und "wie in der
Vorwoche" -- das sieht aus wie ein Fehler und beantwortet die
Frage nicht.
HERGESTELLT WIRD DER FALL, nicht abgewartet: Kiros Tageszeilen
fallen weg, ein Zeitraum kommt hin. Eine Pruefung, die auf einen
Zustand hofft, prueft irgendwann gar nichts mehr. */
{
const d4 = new DatabaseSync(DB);
d4.prepare("DELETE FROM leistung WHERE creator_id = ?").run(idKiro);
d4.prepare(`INSERT OR REPLACE INTO leistung_zeitraum
(creator_id, von, bis, tage, diamanten, dauer_min, follower_neu, erfasst, erfasst_von)
VALUES (?,?,?,?,?,?,?,?,?)`)
.run(idKiro, "2026-09-01", "2026-09-13", 13, 13210, 384, 97,
new Date().toISOString(), 1);
d4.close();
}
await seite.goto(BASIS + `/workspace/leistung.html?creator=${idKiro}`,
{ waitUntil: "networkidle" });
await seite.waitForTimeout(1800);
const ohneTage = await seite.evaluate(() => ({
leerDa: document.getElementById("woche-leer")?.hidden === false,
kartenWeg: document.getElementById("zahlkarten")?.hidden === true,
nullen: [...document.querySelectorAll(".zahlkarte__wert")]
.filter((e) => e.offsetParent !== null && e.textContent.trim() === "0").length,
satz: document.getElementById("woche-leer")?.textContent || "",
}));
ok(ohneTage.leerDa, "statt der Nullen steht die Erklaerung da");
ok(ohneTage.kartenWeg && ohneTage.nullen === 0,
`keine einzige sichtbare Null mehr (${ohneTage.nullen})`);
ok(/kein einziger Tag erfasst/.test(ohneTage.satz),
`sie sagt, WAS los ist ("${ohneTage.satz.slice(0, 46)}…")`);
ok(/01\.09\./.test(ohneTage.satz) && /13 Tage/.test(ohneTage.satz),
"und nennt den Zeitraum, der stattdessen da ist");
ok(/EINEN Tag/.test(ohneTage.satz),
"und den Weg, wie man die Wochenzahlen doch fuellt");
if (process.env.SCHIRM) {
await seite.locator("#woche").screenshot(
{ path: join(HIER, "pruef-woche-leer.png") });
}
/* GEGENPROBE: Sobald EIN Tag da ist, verschwindet die Erklaerung und
die Karten kommen zurueck. Ohne sie hiesse alles oben nur, dass
die Karten jetzt immer weg sind. */
{
const d5 = new DatabaseSync(DB);
d5.prepare(`INSERT OR REPLACE INTO leistung
(creator_id, tag, diamanten, gueltiger_tag, erfasst, erfasst_von, quelle)
VALUES (?,?,?,1,?,?, 'hand')`)
.run(idKiro, gestern, 500, new Date().toISOString(), 1);
d5.close();
}
await seite.reload({ waitUntil: "networkidle" });
await seite.waitForTimeout(1600);
const mitTag = await seite.evaluate(() => ({
leerDa: document.getElementById("woche-leer")?.hidden === false,
kartenDa: document.getElementById("zahlkarten")?.hidden === false,
}));
ok(!mitTag.leerDa && mitTag.kartenDa,
"mit einem einzigen Tag sind die Karten wieder da");
if (process.env.SCHIRM) {
await seite.locator("#spannen-block").screenshot(
{ path: join(HIER, "pruef-spannen.png") });