sozsoft-platform/configs/seeds/host/docs/modules/HrPersonnel.md
2026-10-04 18:04:16 +03:00

13 KiB
Raw Blame History

İK › Personel Kaydı (Kimlik › Kullanıcılar › detay)

Çalışanın özlük kaydı ayrı bir İK ekranında değil, kullanıcı detay sayfasındadır (/admin/users/detail/:userId): iletişim ve ek bilgiler, askerlik, engellilik, nüfus/kimlik, doğum ve aile, yabancı uyruklu belgeleri, organizasyon (departman/pozisyon/vardiya), sözleşme ve deneme süresi, işten çıkış, sürücü belgesi, eğitim geçmişi, yabancı diller, yetenekler, yeterlilik belgeleri, eş ve çocuklar, acil durum kişileri, banka ve ücret bilgileri, yan haklar, iş deneyimi. (Sağlık Kartı sekmesi için bkz. HrHealthCard.md.) Tek değerli alanlar AbpUsers genişletme kolonlarında, çok kayıtlılar Adm_T_User* tablolarındadır; diğer İK modüllerinin hepsi çalışanı buradan okur.

Bu doküman modülün tek "nasıl çalışır" kaynağıdır. Modülde yapılan her değişiklik aynı commit'te buraya yansır (lowcode.instructions.md §0.13).


1. Amaç ve kapsam

Persona Ne yapar Ekran
İK / özlük Personelin bütün özlük, sözleşme, eğitim, aile ve mali bilgisini girer Kimlik › Kullanıcılar › Detay
Sistem yöneticisi Kullanıcıyı açar; listede temel alanları (departman, pozisyon, cinsiyet, adres…) düzenler Kimlik › Kullanıcılar
Yönetici Deneme süresi bitimine 15 gün kala bildirim alır Bildirimler

Kapsam: kiracı. Rota yetkisi AbpIdentity.Users.Update.


2. Analiz ve kararlar

§0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar koddan (Details.tsx ve sekme bileşenleri, PlatformIdentityAppService, ListFormSeeder_Administration.cs, entity'ler) okunmuştur.

Konu Karar
Yer Ayrı "personel" tablosu yok; özlük = kullanıcı. Tek değerli alanlar ABP extra property olarak AbpUsers kolonları
Çok kayıtlı bilgiler Adm_T_User{WorkExperience,Education,Language,Skill,Certificate,FamilyMember,EmergencyContact,Benefit}; detay sekmelerinde gömülü liste (App.IdentityManagement.*), yeni satırın UserId'si sayfa filtresinden dolar
Kaydetme Her form sekmesi kendi formuyla bütün modeli PUT /api/app/platform-identity/user (UpdateUserAsync) ile gönderir; başka sekmede kaydedilmemiş değişiklik gitmez
Mali bilgiler Ayrı DTO ve uç (GetFinancialAsync / UpdateFinancialAsync, Users.Update yetkisi) — intranet listelerine akan UserInfoViewModel'de taşınmasın diye
Deneme süresi İşe giriş ile işe giriş + 4 ay arasında olmalı (4857 s. İK md. 15; toplu sözleşmeyle 4 ay) — hem formda hem sunucuda
Koşullu alanlar Tecil bitişi yalnız "Tecilli"de, sözleşme bitişi yalnız "Belirli Süreli"de, yabancı uyruklu bölümü yalnız TR dışı uyrukta, engellilik oranı/raporu yalnız "Engelli"de görünür; gizlenince değer silinmez
Ölçekler Dil seviyesi Hr_T_SkillLevel ile, diğer yetenekler sabit 1–5 ile (bkz. HrOrganization.md)
Saklama biçimleri Engellilik raporu ve avatar dışındaki dosyalar base64 kolonda; ehliyet sınıfları `

3. Ekranlar ve sekmeler

Sekme (TR) İçerik Kayıt
Genel İletişim (e-posta, ikinci e-posta, ad, soyad, telefon, ikinci telefon, kullanıcı tipi İç/Dış), ek bilgiler (ev adresi, uyruk, cinsiyet), askerlik (durum: Yapıldı/Muaf/Tecilli/Yapılmadı + tecil bitişi), avatar (kırpma, ≤ 2 MB), engellilik (engelli, oran %, rapor PDF/JPG/PNG ≤ 5 MB) UpdateUserAsync (+ avatar UpdateAvatarAsync)
Kimlik Bilgileri Nüfus cüzdanı (kimlik no, seri no, veriliş yeri/tarihi, il, ilçe, köy, cilt, aile sıra, sıra no), doğum ve aile (doğum yeri/tarihi, baba/anne adı, medeni durum Bekar/Evli/Boşanmış/Dul, evlenme tarihi), yabancı uyruklu (pasaport no/geçerlilik, çalışma izni no/bitiş) UpdateUserAsync
İş Organizasyon (departman → pozisyon, sicil no, SGK no, vardiya grubu, PDKS kart no), sözleşme (çalışma şekli Tam/Yarı Zamanlı, sözleşme türü Belirsiz/Belirli, işe başlama, sözleşme bitişi, deneme süresi bitişi, kıdem başlangıcı), işten çıkış (tarih, SGK çıkış kodu, açıklama), sürücü belgesi (sınıflar çoklu M…G, no, veriliş, geçerlilik), iletişim kanalları (Rocket, Telegram) + Daha Önce Çalıştığı Yerler listesi UpdateUserAsync + App.IdentityManagement.UserWorkExperience
Eğitim ve Yetenekler En yüksek eğitim seviyesi + Eğitim Geçmişi, Yabancı Diller, Yetenekler, Yeterlilik Belgeleri listeleri UpdateUserAsync + 4 liste
Aile / Acil Durum Eş ve Çocuklar, Acil Durum Kişileri listeleri 2 liste
Finansal Banka adı, IBAN; ücret tipi Aylık/Günlük/Saatlik, brüt ücret, para birimi + Yan Haklar listesi UpdateFinancialAsync + App.IdentityManagement.UserBenefit
Sağlık Kartı Bkz. HrHealthCard.md —

Gömülü listeler (hepsi menüsüz alt liste, Adm_T_*):

Liste Alanlar Kural
UserWorkExperience Firma*, iş kolu* (sektör), giriş*, çıkış, yaptığı iş (HTML) Giriş tarihine göre azalan
UserEducation Eğitim düzeyi* (İlkokul…Doktora), okul*, bölüm, başlangıç, mezuniyet, mezun (varsayılan evet) —
UserLanguage Dil* ("Languages" tipi yetenekler), seviye (dilin seviyeleri), not Kullanıcı × dil tekil
UserSkill Yetenek* (dil dışı tipler), seviye* 1–5 (Başlangıç…Uzman, varsayılan 3), not CHECK 1–5; kullanıcı × yetenek tekil
UserCertificate Belge* (Hr_T_Certificate), belge no, veren kurum, düzenleme, son kullanma, not Son kullanmaya göre artan
UserFamilyMember Yakınlık* (Eş/Çocuk), ad*, soyad, TC kimlik, doğum tarihi, çalışma durumu (Çalışıyor/Çalışmıyor/Öğrenci/Emekli), sigorta kapsamında, yan hak kapsamında —
UserEmergencyContact Ad soyad*, yakınlık* (Eş, Anne/Baba, Kardeş, Çocuk, Akraba, Arkadaş, Diğer), telefon* —
UserBenefit Yan hak türü* (Hr_T_BenefitType, kod saklanır), tutar, başlangıç, bitiş, not —

Kullanıcı listesi (AbpIdentity.Users) popup'ında düzenlenen İK alanları: departman*, pozisyon*, cinsiyet, ev adresi (+ avatar, e-posta, ad, soyad, tip, telefon, çalışma saati). Diğer özlük alanları listede gizli kolon olarak durur.


4. Veri modeli

Yer İçerik
AbpUsers genişletme kolonları Bütün form sekmesi alanları; sabitler PlatformConsts.AbpIdentity.User.*, erişim AbpIdentityUserExtensions, kolon tipleri PlatformEfCoreEntityExtensionMappings
Adm_T_UserWorkExperience CompanyName, SectorId (FK Sector), StartDate, EndDate, JobDescription
Adm_T_UserEducation EducationLevel, SchoolName, Department, StartDate, EndDate, IsGraduated
Adm_T_UserLanguage SkillId (FK Skill), SkillLevelId (FK SkillLevel), Note
Adm_T_UserSkill SkillId, Level (1–5), Note
Adm_T_UserCertificate CertificateId (Hr_T_Certificate, FK'siz), CertificateNo, IssuedBy, IssueDate, ExpiryDate, Note
Adm_T_UserFamilyMember Relationship, Name, Surname, IdentityNumber, BirthDate, EmploymentStatus, IsInsuranceCovered, IsBenefitCovered
Adm_T_UserEmergencyContact Name, Relationship, PhoneNumber
Adm_T_UserBenefit BenefitType (kod), Amount, StartDate, EndDate, Note

Entity'ler Entities/Tenant/Administration/User*.cs (FullAuditedEntity<Guid>, IMultiTenant), EF yapılandırması PlatformDbContext.cs.


5. İş kuralları

Yer Kural
Deneme süresi HireDate ≤ ProbationEndDate ≤ HireDate + 4 ay; formda gün bazında, sunucuda (UpdateUserAsync) tam zamanla
Departman değişimi Pozisyon temizlenir; pozisyon listesi departmana göre süzülür
IBAN Formda boşluk silinir, büyük harfe çevrilir, ^[A-Z]{2}\d{2}[A-Z0-9]{11,30}$ deseni; sunucu yalnız normalleştirir
Engellilik raporu ≤ 5 MB (yalnız formda), base64 olarak kolonda
Avatar {userId}.jpg avatar blob kabına yazılır; boş gönderim siler
Deneme süresi hatırlatması ProbationReminderWorker günlük çalışır; aktif, çıkışı olmayan ve deneme bitişi bugün + 15 gün olan kullanıcılar için DenemeSuresiBitiyor bildirimi üretir (tip yoksa atlar)
Doğum günü BirthDate intranet panosundaki "Bugün Doğanlar" kutusunu besler (bkz. HrIntranet.md)

6. Yetki ve görünürlük

İşlem Yetki
Detay sayfası (rota), liste "Detay" butonu AbpIdentity.Users.Update
Gömülü listeler okuma AbpIdentity.Users; ekle/güncelle/sil AbpIdentity.Users.Update (Yan Haklar alanlarında ekleme Users.Create)
Mali bilgiler, avatar AbpIdentity.Users.Update (sunucuda)
Kullanıcı listesi ekle/güncelle Users.Create / Users.Update

Özlük verisi kişisel veri, sağlık ve engellilik verisi özel nitelikli kişisel veridir (KVKK). Kullanıcı yönetimi yetkisi yalnız İK ve sistem yöneticilerinde olmalıdır.

Kontrol edilmeli — güvenlik (koddan tespit edildi):

  • PlatformIdentityAppService.GetByIdAsync ve UpdateUserAsync yalnız oturum ister ([Authorize]); Users.Update yalnız arayüz rotasında denetlenir. Oturum açmış herhangi bir kullanıcı API'yi doğrudan çağırarak başka birinin özlük kaydını (engellilik raporu dahil) okuyup güncelleyebilir.
  • Banka, IBAN ve ücret alanları AbpIdentity.Users listesinde gizli ama okunabilir/dışa aktarılabilir kolon olarak durur; liste okuma yetkisi olan kullanıcı kolon seçiciyle görebilir.
  • Intranet doğum günü listesine giden UserInfoViewModel kimlik no, SGK no ve sağlık kartı alanlarını da taşır.

7. Entegrasyonlar

Kullanan Okuduğu
Tüm İK modülleri Çalışan, departman, pozisyon
Organizasyon Şeması Pozisyondaki kullanıcılar
Vardiyalar / Olay Günlüğü ShiftId
Yeterlilik Belgeleri, Yan Hak Türleri, Sektörler, SGK çıkış kodları, Para Birimleri Lookup kaynakları
Performans Yönetimi Tamamlanan değerlendirme Adm_T_UserSkill'e yazar
İşe Alım İşe alınan adayın kaydı kullanıcıya UserId ile bağlanır
Intranet Doğum günleri, kullanıcı kartları
Bildirimler Deneme süresi hatırlatması (DenemeSuresiBitiyor)

8. Akış örneği

  1. BT kullanıcıyı listeden açar (ad, e-posta, departman, pozisyon). İK Detay'a girer.
  2. Kimlik Bilgileri: nüfus ve aile bilgileri; Genel: adres, uyruk, askerlik, avatar.
  3. İş: sicil/SGK no, vardiya, sözleşme türü Belirsiz, işe başlama 01.10, deneme süresi bitişi 01.12 (4 ayı aşarsa kayıt reddedilir); önceki iş yerleri listesi.
  4. Eğitim ve Yetenekler: lisans mezuniyeti, İngilizce B2, "Kaynak Uzmanı 4", forklift belgesi.
  5. Aile / Acil Durum: eş ve çocuk (sigorta kapsamında), acil durum kişisi.
  6. Finansal: banka/IBAN, aylık brüt ücret TRY; yemek kartı yan hakkı.
  7. 15 Kasım'da yöneticilere deneme süresinin bitmek üzere olduğu bildirimi gider.

9. Sık sorulanlar ve bilinen sınırlar

Detayda e-postayı değiştirdim, kaydolmadı. UpdateUserAsync e-postayı yazmaz; e-posta kullanıcı listesindeki düzenlemeden değişir.

Başka sekmede yaptığım değişiklik kayboldu. Her sekme ayrı kaydedilir; sekme değiştirmeden önce kaydedin.

Sözleşmeyi Belirsiz yaptım, bitiş tarihi hâlâ kayıtlı. Koşullu alanlar yalnız gizlenir, değer silinmez.

Pozisyon listede zorunlu, detayda değil. Doğru; kullanıcı listesi popup'ı zorunlu tutar.

Acil durum kişisinde ad kolonu "Doktor Adı Soyadı" görünüyor. Alan başlığı yanlış dil anahtarını (App.Listform.ListformField.FullName) kullanıyor; düzeltilmeli.

Aile üyelerindeki sigorta/yan hak işaretleri bir yere gidiyor mu? Şu an bunları okuyan bir ekran/rapor bulunmadı.


10. Dosyalar

Dosya İçerik
ui/src/views/admin/user-management/Details.tsx, EducationSkillsTab.tsx, FamilyEmergencyTab.tsx, FinancialTab.tsx, userFormFields.tsx, useUserFieldLookup.ts Detay sayfası ve sekmeler
api/src/Sozsoft.Platform.Application/Identity/PlatformIdentityAppService.cs GetByIdAsync, UpdateUserAsync, Get/UpdateFinancialAsync, UpdateAvatarAsync
api/src/Sozsoft.Platform.Domain/Extensions/AbpIdentityUserExtensions.cs, EntityFrameworkCore/PlatformEfCoreEntityExtensionMappings.cs Genişletme alanları
api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/User*.cs Çok kayıtlı entity'ler
api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs AbpIdentity.Users ve App.IdentityManagement.* listeleri
api/src/Sozsoft.Platform.Domain/BackgroundWorkers/ProbationReminderWorker.cs Deneme süresi hatırlatması