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.
123 lines
3.7 KiB
TypeScript
123 lines
3.7 KiB
TypeScript
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";
|
|
|
|
// The spec's hire wizard field list (§4.4) omits Geschlecht and Standort even
|
|
// though both are NOT NULL on employees — added here (defaults keep them
|
|
// effectively "free" for the user, same treatment as the karenz-start gap).
|
|
/**
|
|
* Angehörige:r, wie sie im Assistenten gesammelt wird.
|
|
*
|
|
* Eigener Typ statt der Zeile aus der Datenbank: es gibt weder eine Kennung
|
|
* noch eine Person, an der sie hängt — beides entsteht erst mit dem Anlegen.
|
|
*/
|
|
export type HireDraftAngehoerige = {
|
|
firstName: string;
|
|
lastName: string;
|
|
relationship: RelationshipType;
|
|
birthDate: string;
|
|
svNummer: string;
|
|
};
|
|
|
|
export type HireDraftData = {
|
|
/**
|
|
* Eingabe, nicht Vergabe.
|
|
*
|
|
* Muss mit Loga und Interflex übereinstimmen — als Zeichenkette geführt,
|
|
* weil ein leeres Zahlenfeld sonst als 0 im Entwurf landet.
|
|
*/
|
|
personnelNumber: string;
|
|
firstName: string;
|
|
lastName: string;
|
|
titlePrefix: string[];
|
|
titleSuffix: string[];
|
|
gender: GenderType;
|
|
birthDate: string;
|
|
svNummer: string;
|
|
email: string;
|
|
companyEmail: string;
|
|
/** Kennung im Lernsystem Cornerstone. Freiwillig. */
|
|
cornerstoneId: string;
|
|
phone: string;
|
|
locationId: string;
|
|
positionId: string;
|
|
besetzung: "Intern" | "Extern" | "";
|
|
entryDate: string;
|
|
contractType: ContractType;
|
|
contractEndDate: string;
|
|
employmentType: EmploymentType;
|
|
weeklyHours: string;
|
|
paygrade: PaygradeType;
|
|
workerType: WorkerType;
|
|
collectiveAgreement: CollectiveAgreement;
|
|
workDays: Weekday[];
|
|
isBetriebsrat: boolean;
|
|
hasDienstwagen: boolean;
|
|
/** Nur ausgewertet, wenn hasDienstwagen gesetzt ist — so will es der CHECK. */
|
|
dienstwagenArt: DienstwagenArt;
|
|
emergencyContactName: string;
|
|
emergencyContactPhone: string;
|
|
emergencyContactRelation: string;
|
|
angehoerige: HireDraftAngehoerige[];
|
|
isLateraleFuehrung: boolean;
|
|
isCLevel: boolean;
|
|
/** Form der Beschäftigung — zweite Achse neben der Beschäftigtengruppe. */
|
|
mitarbeiterart: Mitarbeiterart;
|
|
hasKuendigungsschutz: boolean;
|
|
/** Freiwillig — leer heisst „bis auf Weiteres". */
|
|
kuendigungsschutzBis: string;
|
|
/** Personenkreis nach dem besonderen Kündigungsschutz; leer heisst „nicht erfasst". */
|
|
kuendigungsschutzGrund: string;
|
|
kuendigungsschutzAb: string;
|
|
istBeguenstigtBehindert: boolean;
|
|
/** Grad in Prozent als Text — ein leeres Zahlenfeld wäre sonst 0. */
|
|
behinderungGrad: string;
|
|
behinderungAb: string;
|
|
behinderungBis: string;
|
|
};
|
|
|
|
export const EMPTY_HIRE_DRAFT: HireDraftData = {
|
|
personnelNumber: "",
|
|
firstName: "",
|
|
lastName: "",
|
|
titlePrefix: [],
|
|
titleSuffix: [],
|
|
gender: "m",
|
|
birthDate: "",
|
|
svNummer: "",
|
|
email: "",
|
|
companyEmail: "",
|
|
cornerstoneId: "",
|
|
phone: "",
|
|
locationId: "",
|
|
positionId: "",
|
|
besetzung: "",
|
|
entryDate: "",
|
|
contractType: "unbefristet",
|
|
contractEndDate: "",
|
|
employmentType: "Vollzeit",
|
|
weeklyHours: "38.5",
|
|
paygrade: HAY_GRADE_STANDARD,
|
|
workerType: "Angestellte:r",
|
|
collectiveAgreement: "Handel",
|
|
workDays: ["Mo", "Di", "Mi", "Do", "Fr"],
|
|
isBetriebsrat: false,
|
|
hasDienstwagen: false,
|
|
dienstwagenArt: "Verbrenner",
|
|
emergencyContactName: "",
|
|
emergencyContactPhone: "",
|
|
emergencyContactRelation: "",
|
|
angehoerige: [],
|
|
isLateraleFuehrung: false,
|
|
isCLevel: false,
|
|
mitarbeiterart: MITARBEITERART_STANDARD,
|
|
hasKuendigungsschutz: false,
|
|
kuendigungsschutzBis: "",
|
|
kuendigungsschutzGrund: "",
|
|
kuendigungsschutzAb: "",
|
|
istBeguenstigtBehindert: false,
|
|
behinderungGrad: "",
|
|
behinderungAb: "",
|
|
behinderungBis: "",
|
|
};
|