['required', 'string', 'max:255', 'regex:/^[\pL\s]+$/u'], 'email' => ['nullable', 'email:rfc,dns', 'max:255', 'unique:employees,email'], // ── Kepegawaian ────────────────────────────────────────────── 'nip' => ['required', 'digits:6', 'unique:employees,nip'], // ── Data Pribadi ───────────────────────────────────────────── 'gender' => ['required', 'in:L,P'], 'place_of_birth'=> ['nullable', 'string', 'max:100'], 'birth_date' => ['required', 'date', 'before:today'], 'address' => ['nullable', 'string', 'max:500'], 'phone_number' => ['nullable', 'digits_between:8,15'], // ── Jabatan & Departemen ───────────────────────────────────── 'department_id' => ['required', 'exists:departments,id'], 'position_id' => ['required', 'exists:positions,id'], // ── Status & Tanggal ───────────────────────────────────────── 'status' => ['required', 'in:PKWT,PKWTT,Magang'], 'join_date' => ['required', 'date'], ]; } public function messages(): array { return [ // Nama 'name.required' => 'Nama lengkap wajib diisi.', 'name.max' => 'Nama lengkap maksimal 255 karakter.', 'name.regex' => 'Nama lengkap hanya boleh berisi huruf dan spasi.', // Email 'email.email' => 'Format email tidak valid.', 'email.unique' => 'Email sudah digunakan oleh karyawan lain.', 'email.max' => 'Email maksimal 255 karakter.', // NIP 'nip.required' => 'NIP wajib diisi.', 'nip.digits' => 'NIP harus tepat 6 digit angka.', 'nip.unique' => 'NIP sudah terdaftar pada karyawan lain.', // Data Pribadi 'gender.required' => 'Jenis kelamin wajib dipilih.', 'gender.in' => 'Jenis kelamin tidak valid.', 'place_of_birth.max' => 'Tempat lahir maksimal 100 karakter.', 'birth_date.required' => 'Tanggal lahir wajib diisi.', 'birth_date.date' => 'Format tanggal lahir tidak valid.', 'birth_date.before' => 'Tanggal lahir harus sebelum hari ini.', 'address.max' => 'Alamat maksimal 500 karakter.', 'phone_number.digits_between' => 'Nomor HP harus berupa angka, minimal 8 dan maksimal 15 digit.', // Jabatan & Departemen 'department_id.required'=> 'Departemen wajib dipilih.', 'department_id.exists' => 'Departemen tidak ditemukan.', 'position_id.required' => 'Jabatan wajib dipilih.', 'position_id.exists' => 'Jabatan tidak ditemukan.', // Status & Tanggal 'status.required' => 'Status kepegawaian wajib dipilih.', 'status.in' => 'Status hanya boleh PKWT, PKWTT, atau Magang.', 'join_date.required' => 'Tanggal masuk wajib diisi.', 'join_date.date' => 'Format tanggal masuk tidak valid.', ]; } }