Hay-Grade statt Verwendungsgruppe A--F
A--F stammte aus der Spezifikation, nicht vom Kunden: sechs erfundene Stufen mit erfundenen Beschreibungen. Der Kunde bewertet nach Hay und hat die Liste geschickt -- 13 Stufen plus einen Generic Grade. Dieselbe Spalte fuellt im Cornerstone-Extrakt die Grade ID. Solange dort A--F steht, ist die Datei in jeder Zeile falsch, ohne dass es beim Erzeugen auffaellt: das Zielsystem kennt diese Kennungen nicht. Der Typ heisst weiter paygrade_type, ist aber jetzt eine Domain ueber text mit CHECK statt eines Aufzaehlungstyps. Ein Enum laesst sich nicht umschreiben -- Werte entfernen geht gar nicht, und add value darf im selben Vorgang, der den neuen Wert schreibt, nicht benutzt werden. Wichtiger: die rund zehn SQL-Funktionen, die den Wert nach paygrade_type umwandeln, bleiben unveraendert gueltig. Jede von ihnen neu zu erzeugen hiesse, zehnmal die Gelegenheit zu haben, aus einer veralteten Vorlage zu kopieren. Zwei Funktionen muessen doch angefasst werden, beide per Punktaenderung an der laufenden Definition statt per Kopie aus einer Datei: der Vorgabewert B in hire_employee und die Beschriftung im Protokoll von promote_employee. Der Bestand bekommt den Generic Grade. Aus A--F liesse sich kein Hay-Grade ableiten: andere Einteilung, andere Anzahl. Geraten saehe im Extrakt genauso aus wie erhoben.
This commit is contained in:
@@ -7,21 +7,13 @@ import { Button } from "@/components/ui/Button";
|
||||
import { SelectField, TextField } from "@/components/ui/Field";
|
||||
import { SlideOver } from "@/components/ui/SlideOver";
|
||||
import { useToast } from "@/components/ui/Toast";
|
||||
import { HAY_GRADES } from "@/lib/hay-grade";
|
||||
import type { OpenPositionResolved } from "@/lib/positions";
|
||||
import type { Database, PaygradeType } from "@/lib/types";
|
||||
import { fmtName } from "@/lib/format";
|
||||
|
||||
type EmployeeRow = Database["public"]["Tables"]["employees"]["Row"];
|
||||
|
||||
const PAYGRADES: { value: PaygradeType; label: string }[] = [
|
||||
{ value: "A", label: "A – Einstieg" },
|
||||
{ value: "B", label: "B – Qualifiziert" },
|
||||
{ value: "C", label: "C – Erfahren" },
|
||||
{ value: "D", label: "D – Spezialist:in" },
|
||||
{ value: "E", label: "E – Teamleitung" },
|
||||
{ value: "F", label: "F – Bereichsleitung / GF" },
|
||||
];
|
||||
|
||||
// Eine Beförderung kann auf derselben Planstelle stattfinden oder auf eine
|
||||
// andere führen. Beides kommt vor: jemand wächst auf seiner Stelle, oder er
|
||||
// rückt auf eine höhere — und dann ist die Zielstelle dieselbe Auswahl wie
|
||||
@@ -173,10 +165,10 @@ export function PromotePanel({
|
||||
|
||||
<TextField label="Neue Position" required value={newTitle} onChange={setNewTitle} />
|
||||
<SelectField
|
||||
label="Verwendungsgruppe"
|
||||
label="Hay-Grade"
|
||||
value={paygrade}
|
||||
onChange={(v) => setPaygrade(v as PaygradeType)}
|
||||
options={PAYGRADES}
|
||||
options={HAY_GRADES}
|
||||
/>
|
||||
</div>
|
||||
</SlideOver>
|
||||
|
||||
@@ -1,18 +1,10 @@
|
||||
import { dienstwagenLabel } from "@/lib/dienstwagen";
|
||||
import { fmtDate } from "@/lib/format";
|
||||
import { hayGradeLabel } from "@/lib/hay-grade";
|
||||
import type { Database } from "@/lib/types";
|
||||
|
||||
type EmployeeRow = Database["public"]["Tables"]["employees"]["Row"];
|
||||
|
||||
const PAYGRADE_LABELS: Record<string, string> = {
|
||||
A: "A – Einstieg",
|
||||
B: "B – Qualifiziert",
|
||||
C: "C – Erfahren",
|
||||
D: "D – Spezialist:in",
|
||||
E: "E – Teamleitung",
|
||||
F: "F – Bereichsleitung / GF",
|
||||
};
|
||||
|
||||
export function VertragTab({ employee }: { employee: EmployeeRow }) {
|
||||
// Früher stand hier eine einzige Zeile „Merkmale" mit allem, was zutraf,
|
||||
// durch Kommas getrennt — und ein Gedankenstrich, wenn nichts zutraf. Damit
|
||||
@@ -26,7 +18,7 @@ export function VertragTab({ employee }: { employee: EmployeeRow }) {
|
||||
["Beschäftigungsausmaß", employee.employment_type],
|
||||
["Wochenstunden", `${employee.weekly_hours} h`],
|
||||
["Urlaubsanspruch", "25 Tage"],
|
||||
["Paygrade", PAYGRADE_LABELS[employee.paygrade] ?? employee.paygrade],
|
||||
["Hay-Grade", hayGradeLabel(employee.paygrade)],
|
||||
["Beschäftigtengruppe", employee.worker_type ?? "–"],
|
||||
["Arbeitstage", employee.work_days?.join(", ") || "–"],
|
||||
// Beim Dienstwagen steht die Antriebsart statt eines blossen „Ja" — das
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
import { dienstwagenLabel } from "@/lib/dienstwagen";
|
||||
import { fmtDate, fmtFullName } from "@/lib/format";
|
||||
import { hayGradeLabel } from "@/lib/hay-grade";
|
||||
import type { OpenPositionResolved } from "@/lib/positions";
|
||||
import type { HireDraftData } from "./types";
|
||||
|
||||
const PAYGRADE_LABELS: Record<string, string> = {
|
||||
A: "A – Einstieg",
|
||||
B: "B – Qualifiziert",
|
||||
C: "C – Erfahren",
|
||||
D: "D – Spezialist:in",
|
||||
E: "E – Teamleitung",
|
||||
F: "F – Bereichsleitung / GF",
|
||||
};
|
||||
|
||||
type StepSummaryProps = {
|
||||
draft: HireDraftData;
|
||||
selectedPosition: OpenPositionResolved | null;
|
||||
@@ -49,7 +41,7 @@ export function StepSummary({ draft, selectedPosition, locations }: StepSummaryP
|
||||
["Eintrittsdatum", fmtDate(draft.entryDate)],
|
||||
["Vertragsart", draft.contractType === "befristet" ? `befristet bis ${fmtDate(draft.contractEndDate)}` : "unbefristet"],
|
||||
["Beschäftigungsausmaß", `${draft.employmentType} (${draft.weeklyHours} h)`],
|
||||
["Paygrade", PAYGRADE_LABELS[draft.paygrade]],
|
||||
["Hay-Grade", hayGradeLabel(draft.paygrade)],
|
||||
["Beschäftigtengruppe", draft.workerType],
|
||||
["Kollektivvertrag", draft.collectiveAgreement],
|
||||
["Arbeitstage", draft.workDays.join(", ") || "–"],
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
import { RoleEmploymentFields } from "@/components/employees/RoleEmploymentFields";
|
||||
import { SelectField, TextField } from "@/components/ui/Field";
|
||||
import { HAY_GRADES } from "@/lib/hay-grade";
|
||||
import type { PaygradeType } from "@/lib/types";
|
||||
import type { HireDraftData } from "./types";
|
||||
|
||||
const PAYGRADES: { value: PaygradeType; label: string; description: string }[] = [
|
||||
{ value: "A", label: "A – Einstieg", description: "Berufseinsteiger:innen ohne einschlägige Erfahrung" },
|
||||
{ value: "B", label: "B – Qualifiziert", description: "Fachkräfte mit abgeschlossener Ausbildung" },
|
||||
{ value: "C", label: "C – Erfahren", description: "Mehrjährige einschlägige Berufserfahrung" },
|
||||
{ value: "D", label: "D – Spezialist:in", description: "Vertiefte Fachexpertise" },
|
||||
{ value: "E", label: "E – Teamleitung", description: "Fachliche und disziplinäre Führung eines Teams" },
|
||||
{ value: "F", label: "F – Bereichsleitung / GF", description: "Führung eines Bereichs bzw. Geschäftsführung" },
|
||||
];
|
||||
|
||||
export function StepVertrag({ draft, update }: { draft: HireDraftData; update: (patch: Partial<HireDraftData>) => void }) {
|
||||
function handleEmploymentTypeChange(value: HireDraftData["employmentType"]) {
|
||||
update({
|
||||
@@ -63,12 +55,11 @@ export function StepVertrag({ draft, update }: { draft: HireDraftData; update: (
|
||||
/>
|
||||
</div>
|
||||
<SelectField
|
||||
label="Paygrade"
|
||||
label="Hay-Grade"
|
||||
required
|
||||
value={draft.paygrade}
|
||||
onChange={(v) => update({ paygrade: v as PaygradeType })}
|
||||
options={PAYGRADES}
|
||||
hint={PAYGRADES.find((p) => p.value === draft.paygrade)?.description}
|
||||
options={HAY_GRADES}
|
||||
/>
|
||||
<p className="text-xs text-ink-muted">Es gilt eine Probezeit von 1 Monat gemäß Kollektivvertrag.</p>
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { HAY_GRADE_STANDARD } from "@/lib/hay-grade";
|
||||
import { MITARBEITERART_STANDARD } from "@/lib/mitarbeiterart";
|
||||
import type { CollectiveAgreement, ContractType, DienstwagenArt, EmploymentType, GenderType, Mitarbeiterart, PaygradeType, RelationshipType, Weekday, WorkerType } from "@/lib/types";
|
||||
|
||||
@@ -96,7 +97,7 @@ export const EMPTY_HIRE_DRAFT: HireDraftData = {
|
||||
contractEndDate: "",
|
||||
employmentType: "Vollzeit",
|
||||
weeklyHours: "38.5",
|
||||
paygrade: "B",
|
||||
paygrade: HAY_GRADE_STANDARD,
|
||||
workerType: "Angestellte:r",
|
||||
collectiveAgreement: "Handel",
|
||||
workDays: ["Mo", "Di", "Mi", "Do", "Fr"],
|
||||
|
||||
Reference in New Issue
Block a user