Mitarbeiterart als zweite Achse neben der Beschaeftigtengruppe
Anforderung 9 aus dem Workshop. Migration 20260915140000.
Im Dokument standen die beiden untereinander:
Arbeiter, Angestellte, Lehrlinge
Standard / Praktikant / Geringfuegige Beschaeftigung / Altersteilzeit
Die erste Zeile gibt es schon als worker_type, Lehrling seit 20260910140000.
Die zweite ist eine andere Frage: nicht *als was* jemand angestellt ist,
sondern *in welcher Form*. Beide gelten gleichzeitig — ein Praktikant ist
Arbeiter oder Angestellter, nicht statt dessen. In eine Liste gepresst
muesste man sich fuer eine der Antworten entscheiden und verloere die andere.
NOT NULL mit Vorgabe "Standard": jede Person ist in irgendeiner Form
beschaeftigt, und "nicht erfasst" waere keine Aussage, sondern eine Luecke,
die sich durch jede Auswertung zieht. Der Bestand bekommt damit einen
sichtbaren, korrigierbaren Ausgangswert statt eines leeren Feldes.
Die vier Funktionen wurden vollstaendig neu geschrieben. Die Selbstpruefung
haelt deshalb auch die Felder der vorigen Migration fest: eines beim
Uebertragen zu verlieren waere ein Fehler, der nirgends auffiele — die
Oberflaeche schickte den Wert weiter, und die Funktion ignorierte ihn.
This commit is contained in:
35
lib/mitarbeiterart.ts
Normal file
35
lib/mitarbeiterart.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import type { Mitarbeiterart } from "./types";
|
||||
|
||||
// Die Form der Beschäftigung — die zweite Achse neben der
|
||||
// Beschäftigtengruppe (`worker_type`: Angestellte:r / Arbeiter:in / Lehrling).
|
||||
//
|
||||
// Aus dem Workshop kam beides in einer Liste. Es sind aber zwei Fragen an
|
||||
// dieselbe Person, und sie schliessen einander nicht aus: ein Praktikant kann
|
||||
// Arbeiter oder Angestellter sein, Altersteilzeit gibt es in beiden Gruppen.
|
||||
// In eine Liste gepresst müsste man sich für eine der beiden Antworten
|
||||
// entscheiden und verlöre die andere — siehe die Begründung in Migration
|
||||
// 20260915140000.
|
||||
//
|
||||
// Die Liste steht auch dort als CHECK. tests/unit/mitarbeiterart.test.ts hält
|
||||
// beide gegeneinander, damit die begründete Doppelung keine stille wird.
|
||||
|
||||
export const MITARBEITERARTEN: readonly Mitarbeiterart[] = [
|
||||
"Standard",
|
||||
"Praktikant:in",
|
||||
"Geringfügige Beschäftigung",
|
||||
"Altersteilzeit",
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* Die Vorgabe — und zugleich der Wert, den der Bestand bei der Einführung
|
||||
* bekommen hat.
|
||||
*
|
||||
* „Nicht erfasst" gibt es bewusst nicht: jede Person ist in irgendeiner Form
|
||||
* beschäftigt, und eine leere Angabe wäre keine Aussage, sondern eine Lücke,
|
||||
* die sich durch jede Auswertung zieht.
|
||||
*/
|
||||
export const MITARBEITERART_STANDARD: Mitarbeiterart = "Standard";
|
||||
|
||||
export function istMitarbeiterart(wert: string | null | undefined): wert is Mitarbeiterart {
|
||||
return MITARBEITERARTEN.includes(wert as Mitarbeiterart);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ABSENCE_TYPES } from "./absence";
|
||||
import { AUSTRITTSART_LABELS, BEENDIGUNGSART_WERTE, type Austrittsart } from "./beendigung";
|
||||
import { KUENDIGUNGSSCHUTZ_GRUENDE } from "./kuendigungsschutz";
|
||||
import { MITARBEITERARTEN } from "./mitarbeiterart";
|
||||
import { parseIsoDateParam } from "./reports";
|
||||
import type { Weekday } from "./types";
|
||||
|
||||
@@ -46,6 +47,7 @@ export const AUSWAHL_KRITERIEN: readonly AuswahlKriterium[] = [
|
||||
{ key: "employment", label: "Beschäftigungsart", alle: "Alle Beschäftigungsarten", optionen: werte("Vollzeit", "Teilzeit") },
|
||||
{ key: "contract", label: "Vertragsart", alle: "Alle Vertragsarten", optionen: werte("unbefristet", "befristet") },
|
||||
{ key: "worker", label: "Beschäftigtengruppe", alle: "Alle", optionen: werte("Angestellte:r", "Arbeiter:in", "Lehrling") },
|
||||
{ key: "mitarbeiterart", label: "Mitarbeiterart", alle: "Alle Mitarbeiterarten", optionen: werte(...MITARBEITERARTEN) },
|
||||
{ key: "kv", label: "Kollektivvertrag", alle: "Alle Kollektivverträge", optionen: werte("Handel", "Süßwaren") },
|
||||
{ key: "paygrade", label: "Paygrade", alle: "Alle Paygrades", optionen: werte("A", "B", "C", "D", "E", "F") },
|
||||
{ key: "source", label: "Intern/Extern", alle: "Alle", optionen: werte("Intern", "Extern") },
|
||||
|
||||
@@ -24,6 +24,7 @@ import type {
|
||||
GenderType,
|
||||
HistoryEventType,
|
||||
KuendigungsschutzGrund,
|
||||
Mitarbeiterart,
|
||||
PaygradeType,
|
||||
SourceType,
|
||||
TeilzeitArt,
|
||||
@@ -62,6 +63,7 @@ export function applyCriteria<O>(
|
||||
if (a.employment) q = q.where("employment_type", "=", a.employment as EmploymentType);
|
||||
if (a.contract) q = q.where("contract_type", "=", a.contract as ContractType);
|
||||
if (a.worker) q = q.where("worker_type", "=", a.worker as WorkerType);
|
||||
if (a.mitarbeiterart) q = q.where("mitarbeiterart", "=", a.mitarbeiterart as Mitarbeiterart);
|
||||
if (a.kv) q = q.where("collective_agreement", "=", a.kv as CollectiveAgreement);
|
||||
if (a.paygrade) q = q.where("paygrade", "=", a.paygrade as PaygradeType);
|
||||
if (a.source) q = q.where("source", "=", a.source as SourceType);
|
||||
|
||||
11
lib/types.ts
11
lib/types.ts
@@ -39,6 +39,14 @@ export type DienstwagenArt = "Verbrenner" | "Elektro";
|
||||
*/
|
||||
export type TeilzeitArt = "Bildungsteilzeit" | "Elternteilzeit" | "Pflegeteilzeit" | "Wiedereingliederungsteilzeit";
|
||||
|
||||
/**
|
||||
* Form der Beschäftigung — zweite Achse neben `worker_type`.
|
||||
*
|
||||
* Kein Aufzählungstyp in der Datenbank, sondern ein CHECK auf text
|
||||
* (chk_mitarbeiterart). Die Beschriftungen stehen in lib/mitarbeiterart.ts.
|
||||
*/
|
||||
export type Mitarbeiterart = "Standard" | "Praktikant:in" | "Geringfügige Beschäftigung" | "Altersteilzeit";
|
||||
|
||||
/**
|
||||
* Personenkreise des besonderen Kündigungsschutzes.
|
||||
*
|
||||
@@ -205,6 +213,8 @@ export type Database = {
|
||||
absence_type: string | null;
|
||||
avatar_color: string | null;
|
||||
worker_type: WorkerType;
|
||||
/** Form der Beschäftigung, NOT NULL mit Vorgabe „Standard" — chk_mitarbeiterart. */
|
||||
mitarbeiterart: Mitarbeiterart;
|
||||
collective_agreement: CollectiveAgreement;
|
||||
work_days: Weekday[];
|
||||
is_betriebsrat: boolean;
|
||||
@@ -278,6 +288,7 @@ export type Database = {
|
||||
absence_type?: string | null;
|
||||
avatar_color?: string | null;
|
||||
worker_type?: WorkerType;
|
||||
mitarbeiterart?: Mitarbeiterart;
|
||||
collective_agreement?: CollectiveAgreement;
|
||||
work_days?: Weekday[];
|
||||
is_betriebsrat?: boolean;
|
||||
|
||||
Reference in New Issue
Block a user