Keep private email out of the Honestly export
All checks were successful
CI / Lint, Typen, Tests, Build (push) Successful in 11m30s
CI / Migrationen auf leerer Datenbank (push) Successful in 10m6s

The Email column exported employees.email, which is the person's
private address. That does not belong in a file sent to an outside
survey provider, least of all as the address invitations go to in the
employer's name.

The column now stays as a placeholder for the work email, which does
not exist in the schema yet and will be added later. It is empty until
then, but keeps its place so the column mapping set up in Honestly does
not have to change once the address arrives. The export no longer
reads employees.email at all, so it cannot end up in another column
by accident either.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-18 15:07:43 +02:00
parent 779d6116b2
commit 683e7cc2d7
3 changed files with 35 additions and 12 deletions

View File

@@ -14,12 +14,18 @@ import { ancestorsOf, type OrgMaps } from "./org";
// hängt, hat hinten leere Zellen — und die oberste Einheit steht deshalb
// nicht bei allen in derselben Spalte. So ist es bestellt.
// Die E-Mail-Spalte ist ein Platzhalter für die **Firmenadresse**, die es
// im Datenmodell noch nicht gibt. employees.email ist die private Adresse
// (Migration 20260811140000) und gehört nicht in eine Datei, die an einen
// fremden Anbieter geht — schon gar nicht als Adresse, an die Einladungen im
// Namen des Arbeitgebers gehen. Deshalb bleibt die Spalte leer, bis die
// Firmenadresse erfasst wird; die Spalte selbst bleibt stehen, damit die
// Zuordnung in Honestly nicht neu eingerichtet werden muss.
export const HONESTLY_SPRACHE = "de";
export const HONESTLY_ROLLE = "Respondee";
export type HonestlyZeile = {
personalnummer: number | string | null;
email: string | null;
vorname: string;
nachname: string;
standort: string;
@@ -58,7 +64,8 @@ export function honestlySpalten(tiefe: number): ExportColumn<HonestlyZeile>[] {
}));
return [
{ header: "Personalnummer", get: (z) => z.personalnummer },
{ header: "Email", get: (z) => z.email ?? "" },
// Platzhalter für die Firmenadresse — siehe oben.
{ header: "Email", get: () => "" },
{ header: "Firstname", get: (z) => z.vorname },
{ header: "Last Name", get: (z) => z.nachname },
{ header: "Language", get: () => HONESTLY_SPRACHE },
@@ -72,7 +79,6 @@ export function honestlySpalten(tiefe: number): ExportColumn<HonestlyZeile>[] {
export function baueHonestlyZeilen(
personen: {
personnel_number: number | string | null;
email: string | null;
first_name: string;
last_name: string;
location_id: string;
@@ -83,7 +89,6 @@ export function baueHonestlyZeilen(
): { zeilen: HonestlyZeile[]; tiefe: number } {
const zeilen = personen.map((p) => ({
personalnummer: p.personnel_number,
email: p.email,
vorname: p.first_name,
nachname: p.last_name,
standort: standortName.get(p.location_id) ?? "",