Cornerstone fuehrt jede Person unter einer eigenen Kennung. Der Export dorthin trug in "User ID" und "Username" bisher die Alpenwerk-UUID -- richtig, solange es nichts Besseres gab, aber nicht die Kennung, unter der Cornerstone die Person kennt. Jetzt steht dort diese Spalte. Freiwillig, weil die Zuordnungstabelle des Kunden fuer 434 der 784 Personen keine Kennung liefert. Eindeutig, weil eine Kennung genau einer Person gehoert. Als Text, weil fuehrende Nullen in einer numerischen Spalte verlorengingen. Ohne hinterlegte Kennung bleiben User ID und Username **leer**. Ein Rueckfall auf die UUID braechte zwei Kennungsarten in eine Datei, ohne dass es auffiele, und legte in Cornerstone eine zweite Person neben der bestehenden an. Eine fehlende Angabe soll fehlen; dafuer gibt es einen eigenen Test. Fuenf Funktionen mussten mit -- dieselbe Liste und derselbe Grund wie bei der Firmen-E-Mail: hire_employee und rehire_employee teilen sich den Schritt "Person", change_employee_data macht das Feld aenderbar, apply_due_pending_changes sorgt dafuer, dass eine datierte Aenderung nicht verfaellt, app_feld_karte haelt den Eintrag in der Historie richtigstellbar. Die Migration ist wieder erzeugt, nicht abgeschrieben, und prueft jede der fuenf einzeln. Erfasst wird das Feld in der Akte, in "Daten aendern", bei Einstellung und Wiedereintritt sowie ueber den Massenimport; es steht im Mitarbeiterexport und fuellt im Cornerstone-Export User ID und Username.
122 lines
3.7 KiB
TypeScript
122 lines
3.7 KiB
TypeScript
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: "B",
|
|
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: "",
|
|
};
|