182 lines
13 KiB
Markdown
182 lines
13 KiB
Markdown
|
|
# İ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](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](HrOrganization.md)) |
|
|||
|
|
| Saklama biçimleri | Engellilik raporu ve avatar dışındaki dosyalar base64 kolonda; ehliyet sınıfları `|` ile birleştirilmiş metin; medeni durum ve eğitim düzeyi Türkçe anahtar |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 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](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](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ı |
|