Feature requests from live use:
- "Daten aendern" was missing a "Wirksam ab" field (unlike Versetzen/
Befoerdern/Karenz, which all have one) - every change was silently
logged with today's date. Added the field, threaded through
change_employee_data (defaults to today if omitted).
- Staatsbuergerschaft and Wohnland now use a searchable picker
(components/ui/CountryPicker) over the full 193-country UN member
state list (lib/countries.ts) instead of the original ~9/5-value
picklists. Dropped the now-too-narrow CHECK constraints
(supabase/schema_2.sql) since the app is the source of truth for
valid values, same approach used elsewhere for large open-ended
pickers.
Two more real bugs found via live testing of the above (both in
change_employee_data, supabase/functions.sql + functions_4.sql):
1. `text[] || 'literal'` is ambiguous in Postgres - it can resolve to
the array||array overload and try to parse the plain word as array
syntax ('{...}'), failing with "malformed array literal". Hit on
every single field-diff line the moment a user actually changed
something (Staatsbuergerschaft first, then Beschaeftigungsausmass
confirmed the same root cause). Fixed everywhere by switching to the
unambiguous array_append() function.
2. The contract_end_date diff-check cast an empty string straight to
date ("invalid input syntax for type date: ''") instead of using the
same nullif(...,'')::date guard the UPDATE line below it already had.
Verified live end-to-end after both fixes: changed Staatsbuergerschaft
to Brasilien with a backdated effective date, save succeeded, Stammdaten
tab reflects it, and employee_history got the correct event_date
("2026-07-01") and description ("Geänderte Felder: Staatsbürgerschaft,
wirksam ab 2026-07-01"). Reverted the test employee's data back
afterward; seed data is clean again.
200 lines
3.1 KiB
TypeScript
200 lines
3.1 KiB
TypeScript
// The 193 UN member states, German names, sorted alphabetically. Used for
|
|
// Staatsbürgerschaft and Wohnland — both are searchable pickers over this
|
|
// same list (see components/ui/Lookup + DatenAendernPanel).
|
|
export const UN_COUNTRIES: string[] = [
|
|
"Afghanistan",
|
|
"Ägypten",
|
|
"Albanien",
|
|
"Algerien",
|
|
"Andorra",
|
|
"Angola",
|
|
"Antigua und Barbuda",
|
|
"Äquatorialguinea",
|
|
"Argentinien",
|
|
"Armenien",
|
|
"Aserbaidschan",
|
|
"Äthiopien",
|
|
"Australien",
|
|
"Bahamas",
|
|
"Bahrain",
|
|
"Bangladesch",
|
|
"Barbados",
|
|
"Belgien",
|
|
"Belize",
|
|
"Benin",
|
|
"Bhutan",
|
|
"Bolivien",
|
|
"Bosnien und Herzegowina",
|
|
"Botsuana",
|
|
"Brasilien",
|
|
"Brunei",
|
|
"Bulgarien",
|
|
"Burkina Faso",
|
|
"Burundi",
|
|
"Chile",
|
|
"China",
|
|
"Costa Rica",
|
|
"Côte d'Ivoire",
|
|
"Dänemark",
|
|
"Deutschland",
|
|
"Dominica",
|
|
"Dominikanische Republik",
|
|
"Dschibuti",
|
|
"Ecuador",
|
|
"El Salvador",
|
|
"Eritrea",
|
|
"Estland",
|
|
"Eswatini",
|
|
"Fidschi",
|
|
"Finnland",
|
|
"Frankreich",
|
|
"Gabun",
|
|
"Gambia",
|
|
"Georgien",
|
|
"Ghana",
|
|
"Grenada",
|
|
"Griechenland",
|
|
"Guatemala",
|
|
"Guinea",
|
|
"Guinea-Bissau",
|
|
"Guyana",
|
|
"Haiti",
|
|
"Honduras",
|
|
"Indien",
|
|
"Indonesien",
|
|
"Irak",
|
|
"Iran",
|
|
"Irland",
|
|
"Island",
|
|
"Israel",
|
|
"Italien",
|
|
"Jamaika",
|
|
"Japan",
|
|
"Jemen",
|
|
"Jordanien",
|
|
"Kambodscha",
|
|
"Kamerun",
|
|
"Kanada",
|
|
"Kap Verde",
|
|
"Kasachstan",
|
|
"Katar",
|
|
"Kenia",
|
|
"Kirgisistan",
|
|
"Kiribati",
|
|
"Kolumbien",
|
|
"Komoren",
|
|
"Kongo, Demokratische Republik",
|
|
"Kongo, Republik",
|
|
"Kosovo",
|
|
"Kroatien",
|
|
"Kuba",
|
|
"Kuwait",
|
|
"Laos",
|
|
"Lesotho",
|
|
"Lettland",
|
|
"Libanon",
|
|
"Liberia",
|
|
"Libyen",
|
|
"Liechtenstein",
|
|
"Litauen",
|
|
"Luxemburg",
|
|
"Madagaskar",
|
|
"Malawi",
|
|
"Malaysia",
|
|
"Malediven",
|
|
"Mali",
|
|
"Malta",
|
|
"Marokko",
|
|
"Marshallinseln",
|
|
"Mauretanien",
|
|
"Mauritius",
|
|
"Mexiko",
|
|
"Mikronesien",
|
|
"Moldau",
|
|
"Monaco",
|
|
"Mongolei",
|
|
"Montenegro",
|
|
"Mosambik",
|
|
"Myanmar",
|
|
"Namibia",
|
|
"Nauru",
|
|
"Nepal",
|
|
"Neuseeland",
|
|
"Nicaragua",
|
|
"Niederlande",
|
|
"Niger",
|
|
"Nigeria",
|
|
"Nordkorea",
|
|
"Nordmazedonien",
|
|
"Norwegen",
|
|
"Oman",
|
|
"Österreich",
|
|
"Osttimor",
|
|
"Pakistan",
|
|
"Palau",
|
|
"Panama",
|
|
"Papua-Neuguinea",
|
|
"Paraguay",
|
|
"Peru",
|
|
"Philippinen",
|
|
"Polen",
|
|
"Portugal",
|
|
"Ruanda",
|
|
"Rumänien",
|
|
"Russland",
|
|
"Salomonen",
|
|
"Sambia",
|
|
"Samoa",
|
|
"San Marino",
|
|
"São Tomé und Príncipe",
|
|
"Saudi-Arabien",
|
|
"Schweden",
|
|
"Schweiz",
|
|
"Senegal",
|
|
"Serbien",
|
|
"Seychellen",
|
|
"Sierra Leone",
|
|
"Simbabwe",
|
|
"Singapur",
|
|
"Slowakei",
|
|
"Slowenien",
|
|
"Somalia",
|
|
"Spanien",
|
|
"Sri Lanka",
|
|
"St. Kitts und Nevis",
|
|
"St. Lucia",
|
|
"St. Vincent und die Grenadinen",
|
|
"Südafrika",
|
|
"Sudan",
|
|
"Südkorea",
|
|
"Südsudan",
|
|
"Suriname",
|
|
"Syrien",
|
|
"Tadschikistan",
|
|
"Tansania",
|
|
"Thailand",
|
|
"Togo",
|
|
"Tonga",
|
|
"Trinidad und Tobago",
|
|
"Tschad",
|
|
"Tschechien",
|
|
"Tunesien",
|
|
"Türkei",
|
|
"Turkmenistan",
|
|
"Tuvalu",
|
|
"Uganda",
|
|
"Ukraine",
|
|
"Ungarn",
|
|
"Uruguay",
|
|
"Usbekistan",
|
|
"Vanuatu",
|
|
"Venezuela",
|
|
"Vereinigte Arabische Emirate",
|
|
"Vereinigte Staaten",
|
|
"Vereinigtes Königreich",
|
|
"Vietnam",
|
|
"Weißrussland",
|
|
"Zentralafrikanische Republik",
|
|
"Zypern",
|
|
].sort((a, b) => a.localeCompare(b, "de"));
|