Headcount heisst ueberall dasselbe
All checks were successful
CI / Lint, Typen, Tests, Build (push) Successful in 11m36s
CI / Migrationen auf leerer Datenbank (push) Successful in 10m12s

"Headcount" stand auf der Uebersicht fuer die Aktiven und im Bericht fuer eine
andere Zahl -- 785 gegen 788, dasselbe Wort fuer Verschiedenes (N.02). Max hat
die Begriffe festgelegt: Headcount Aktiv fuer die Aktiven, Headcount Aktives
Dienstverhaeltnis fuer Aktive plus Langzeitabwesende.

Die beiden Kacheln auf der Uebersicht tragen jetzt genau diese Namen. Beide
Zahlen gab es dort schon, nur hiess die eine "Aktives Dienstverhaeltnis" und
die andere "Aktive Mitarbeiter:innen (HC)".

Im Bericht ginge ein fester Name nicht: die Kennzahl zaehlt, was gerade
ausgewaehlt ist, auch Geplante oder Ausgetretene. Trifft die Auswahl eine der
beiden Groessen, steht ihr Name in der Ueberschrift; sonst steht dabei, welche
Status gezaehlt wurden -- mit den Anzeigenamen, also "Langzeitabwesenheit" und
nicht "Karenz".
This commit is contained in:
2026-09-29 20:36:22 +02:00
parent 38f8c99968
commit 0039ce5069
4 changed files with 65 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
import { ABSENCE_TYPES } from "./absence";
import { ABSENCE_TYPES, statusLabel } from "./absence";
import { BEENDIGUNGSART_WERTE } from "./beendigung";
import { fmtName, todayIso, yearsBetweenIso } from "./format";
import { HAY_GRADE_WERTE } from "./hay-grade";
@@ -32,6 +32,33 @@ export type GroupDimension =
| "teilzeit_art"
| "weekday";
/**
* Die Kennzahl mit dem, was sie tatsächlich zählt.
*
* „Headcount" stand auf der Übersicht für die Aktiven und im Bericht für eine
* andere Zahl — dasselbe Wort für Verschiedenes, gemeldet als N.02. Der Kunde
* führt zwei Grössen mit festen Namen (Max, 30.09.): **Headcount Aktiv** für
* die Aktiven und **Headcount Aktives Dienstverhältnis** für Aktive plus
* Langzeitabwesende.
*
* Die Kennzahl im Bericht zählt aber, was gerade ausgewählt ist — auch
* Geplante oder Ausgetretene. Ein fester Name wäre dort also schlicht falsch.
* Deshalb: trifft die Auswahl eine der beiden Grössen, steht ihr Name da;
* sonst steht dabei, welche Status gezählt wurden.
*/
export function messgroesseLabel(measure: Measure, statuses: readonly string[]): string {
const basis = MEASURE_LABELS[measure];
if (measure !== "headcount") return basis;
const gewaehlt = new Set(statuses);
if (gewaehlt.size === 1 && gewaehlt.has("Aktiv")) return "Headcount Aktiv";
if (gewaehlt.size === 2 && gewaehlt.has("Aktiv") && gewaehlt.has("Karenz")) {
return "Headcount Aktives Dienstverhältnis";
}
if (gewaehlt.size === 0) return basis;
return `${basis} (${statuses.map((s) => statusLabel(s as EmploymentStatus)).join(", ")})`;
}
export const MEASURE_LABELS: Record<Measure, string> = {
headcount: "Headcount",
fte: "FTE",