Ask for a residence permit only where one is needed
Employees from outside the EU, the EEA and Switzerland need a residence permit, and HR needs to know when it expires — about eighty people in the current data, across Türkei, Serbien and Bosnien. Two columns, the same shape as the dismissal protection: a flag and a date that only means anything with it. The date is optional, because an open-ended permit has none and a mandatory field would force an invented one. The nationality coupling deliberately stays out of the database. Putting it there would mean keeping the country list in two places — SQL and lib/countries.ts, where the picker needs it anyway — so an EU accession would become a migration instead of a line in a list. Worse, correcting somebody's nationality would fail the constraint while the old permit was still attached, which is exactly the moment someone is fixing a mistake. The UI decides whether the fields appear, and clears them when the nationality moves into the free-movement area. So the list is the load-bearing part, and it is tested: 31 entries, all of them values the picker can actually produce, no duplicates, no third countries. A missing nationality reads as "no permit required" — an unanswered question is a reason to record it, not to demand papers. The permit shows on the Stammdaten tab only for the nationalities it applies to. A line reading "Aufenthaltstitel: Nein" under an Austrian citizenship would look like information rather than a question that does not arise. Filter by it and by when it expires — the question behind that being "whose permit runs out next quarter" — plus columns in the export. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { AngehoerigeSection } from "@/components/employees/AngehoerigeSection";
|
||||
import { brauchtAufenthaltstitel } from "@/lib/countries";
|
||||
import { fmtAge, fmtDate } from "@/lib/format";
|
||||
import type { Database } from "@/lib/supabase/types";
|
||||
|
||||
@@ -31,6 +32,21 @@ export function StammdatenTab({ employee, location, dependents }: { employee: Em
|
||||
["Geburtsdatum", `${fmtDate(employee.birth_date)} (${fmtAge(employee.birth_date)} Jahre)`],
|
||||
["SV-Nummer", employee.sv_nummer ?? "–"],
|
||||
["Staatsbürgerschaft", employee.nationality],
|
||||
// Nur, wo er verlangt ist. Bei einer österreichischen Staatsbürger-
|
||||
// schaft wäre die Zeile „Aufenthaltstitel: Nein" keine Auskunft,
|
||||
// sondern eine Frage, die sich nicht stellt.
|
||||
...(brauchtAufenthaltstitel(employee.nationality)
|
||||
? ([
|
||||
[
|
||||
"Aufenthaltstitel",
|
||||
employee.hat_aufenthaltstitel
|
||||
? employee.aufenthaltstitel_bis
|
||||
? `Ja, bis ${fmtDate(employee.aufenthaltstitel_bis)}`
|
||||
: "Ja (unbefristet oder nicht erfasst)"
|
||||
: "Nein",
|
||||
],
|
||||
] as [string, string][])
|
||||
: []),
|
||||
["Adresse", employee.address ?? "–"],
|
||||
["Postleitzahl", employee.postal_code ?? "–"],
|
||||
["Ort", employee.city ?? "–"],
|
||||
|
||||
Reference in New Issue
Block a user