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

12 KiB
Raw Blame History

İK › Organizasyon ve Yetkinlik (Departman, Pozisyon, Organizasyon Şeması, Yetenek Tipleri)

Şirketin organizasyon iskeleti ve yetkinlik sözlüğü: şubeye bağlı departman ağacı, departmana bağlı pozisyon ağacı, bunların görsel organizasyon şeması ve yetenek tipi → yetenek → seviye sözlüğü. Çalışanın departman/pozisyon/işe giriş/vardiya bilgileri ve yetkinlikleri kullanıcı kaydında tutulur. Diğer bütün İK modülleri (İşe Alım, Eğitim, Performans, Disiplin, Sağlık Kartı…) bu tanımları lookup olarak kullanır. Bu bölüm entity + C# seeder ile kuruludur (wizard değil); Organizasyon Şeması özel bir React sayfasıdır.

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 Departman ve pozisyon ağacını, yetenek sözlüğünü yönetir İK › Tanımlamalar › Departmanlar · Pozisyonlar · Yetenek Tipleri
İK / sistem yöneticisi Çalışanın departman, pozisyon, işe giriş, vardiya, yetkinlik ve dil bilgilerini girer Kimlik › Kullanıcılar › detay (İş Bilgileri, Eğitim ve Yetkinlik sekmeleri)
Tüm kullanıcılar (yetkili) Organizasyonu departman ya da pozisyon bazında görür, JPG olarak dışa aktarır İK › Organizasyon Şeması

Kapsam: kiracı. Departman ve pozisyon şube bazlıdır (BranchId zorunlu); ekranlarda satır süzmesi yoktur.


2. Analiz ve kararlar

Bu bölüm §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar koddan (ListFormSeeder_Hr.cs, entity'ler, OrgChartAppService, OrgChart.tsx) okunmuştur.

Konu Karar
Yol Entity + ListFormSeeder_Hr.cs (migration'lı tablolar); şema için özel React sayfası + AppService
Departman Ağaç (ParentId), şubeye bağlı; varsayılan görünüm Tree; aynı şubede ad tekil
Pozisyon Ağaç (ParentId = üst pozisyon), departmana ve şubeye bağlı; varsayılan görünüm Tree; aynı departmanda ad tekil
Yönetici ilişkisi Departmanda yönetici alanı yoktur; hiyerarşi pozisyon ağacından okunur
Host şubesi Host varsayılan şubesi sabit kimlikle kurulur (PlatformConsts.Branches.BranchIdDefaultValue = 1c125bf3-…); seed departman/pozisyon satırları buna bağlıdır, kiracı şubeleri yeni GUID alır
Admin varsayılanı Admin kullanıcı departman Yönetim, pozisyon Genel Müdür ile kurulur
Yetkinlik sözlüğü Yetenek Tipi ekranının iki alt formu: Seviyeler (ad + Progress 0–100 kaydırıcı + varsayılan) ve Yetenekler
Çalışan yetkinliği İki ayrı ölçek: diller Hr_T_SkillLevel seviyesiyle (UserLanguage), diğer yetkinlikler sabit 1–5 ile (Adm_T_UserSkill)
Tip adı bağımlılığı Bazı lookup'lar tip adını sabit yazar ('Languages', 'Technical Skills') — bu tipler yeniden adlandırılmamalıdır

3. Menü ve ekranlar

Menü (TR) ListFormCode / rota Yer Görünüm Alt formlar
Yetenek Tipleri App.Hr.SkillType Tanımlamalar (1) Grid App.Hr.SkillLevel, App.Hr.Skill (Id → SkillTypeId)
Departmanlar App.Hr.Department Tanımlamalar (2) Tree (Id/ParentId, tümü açık) —
Pozisyonlar App.Hr.JobPosition Tanımlamalar (3) Tree —
Organizasyon Şeması /admin/organization (@/views/admin/hr/OrgChart) İnsan Kaynakları (4) Özel sayfa —

Bu ekranlarda widget yoktur ve veri seed dosyasına aynalanmaz (SeedSync* kapalı).

Organizasyon Şeması (ui/src/views/admin/hr/OrgChart.tsx):

  • Mod: Departman ya da Pozisyon.
  • Kullanıcıları göster: Açık/kapalı seçilebilir.
  • Yakınlaştırma: %30–300 arası, Ctrl + tekerlek ile de.
  • Dışa aktarma: JPG olarak.
  • Kartlar: Derinliğe göre renklenir, alt sayısı ve aç/kapa düğmesi taşır, sürüklenerek yeri değiştirilir (yer kaydedilmez).
  • Kullanıcı satırı: Avatar gösterir; üzerine gelince profil kartı açılır (unvan, departman, e-posta, telefon).

4. Veri modeli

Sas_T_Branch ──< Hr_T_Department (ParentId ağacı) ──< Hr_T_JobPosition (ParentId ağacı)
                                                          ▲
AbpUsers.DepartmentId / JobPositionId / HireDate / ShiftId ┘

Hr_T_SkillType ──< Hr_T_SkillLevel (Progress, IsDefault)
       └────────< Hr_T_Skill ──< Adm_T_UserSkill (Level 1–5)
                          └────< UserLanguage (SkillLevelId)
Tablo Kolonlar Kural
Hr_T_Department BranchId (zorunlu), Name (64), ParentId UX (TenantId, BranchId, Name)
Hr_T_JobPosition BranchId (zorunlu), DepartmentId (zorunlu, FK Restrict), Name (64), ParentId UX (TenantId, Name, DepartmentId)
Hr_T_SkillType Name (128) UX (TenantId, Name); silinince yetenek/seviye kademeli silinir
Hr_T_SkillLevel SkillTypeId, Name, Progress (int, 0), IsDefault UX (TenantId, SkillTypeId, Name)
Hr_T_Skill SkillTypeId, Name UX (TenantId, SkillTypeId, Name)
Adm_T_UserSkill UserId, SkillId, Level, Note (512) CHECK Level BETWEEN 1 AND 5; UX (TenantId, UserId, SkillId)
AbpUsers (genişletme) DepartmentId, JobPositionId, HireDate, ShiftId, sözleşme/fesih/ehliyet alanları PlatformModuleExtensionConfigurator, AbpIdentityUserExtensions

Entity'ler: Entities/Tenant/Hr/Definitions/{SkillType,Skill,SkillLevel,Department,JobPosition}.cs (FullAuditedEntity<Guid>, IMultiTenant); EF yapılandırması PlatformDbContext.cs.

Seed (configs/seeds/host/data/):

Dosya İçerik
App.Hr.Department.json Yönetim (kök) → Üretim, Satış, Finans (→ Muhasebe), Bilgi İşlem
App.Hr.JobPosition.json Genel Müdür (kök) → BT, İhracat, İç Piyasa, Üretim, Finans müdürleri; Finans Müdürü → Muhasebe Müdürü → Muhasebe Şefi
App.Hr.SkillType.json Languages, Soft Skills, Technical Skills
App.Hr.Skill.json 31 yetenek: 21 dil, 3 soft skill, 7 teknik
App.Hr.SkillLevel.json Diller C2 100 · C1 85 · B2 75 · B1 60 · A2 40 · A1 10 (varsayılan); Soft Skills Expert 100 · Advanced 80 · Intermediate 50 · Elementary 25 · Beginner 15 (varsayılan); Technical Skills için seviye yok

5. İş kuralları

Yer Kural
Departman formu Ad → üst departman → şube; şube değişince üst departman temizlenir; üst departman listesi şubeye göre süzülür
Pozisyon formu Ad → üst pozisyon → şube → departman; şube değişince departman ve üst pozisyon, departman değişince üst pozisyon temizlenir. Üst pozisyon listesi seçilen departmanın ve üst departmanlarının pozisyonları + tüm kök pozisyonlardır (JobPositionFullValues)
Seviye — yeni kayıt IsDefault = true (tek varsayılan zorlanmaz)
Kullanıcı — İş Bilgileri Departman değişince pozisyon temizlenir, pozisyon listesi departmana göre süzülür; deneme süresi sonu işe girişten önce ya da 4 aydan sonra olamaz (PlatformIdentityAppService)
Şema — Departman modu Her departman kartında o departmanın en üst pozisyonu ve yalnızca o pozisyondaki kullanıcılar gösterilir (üst pozisyonu olmayan ya da üstü başka departmanda olan; ada göre ilk)
Şema — Pozisyon modu Her pozisyon bir kart; o pozisyondaki tüm kullanıcılar

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

İzin grubu App.Hr, modül Sas|Hr:

Yetki Üst Alt yetkiler
App.Hr.SkillType App.Hr.Definitions Create, Update, Delete, Export, Import, Note
App.Hr.SkillLevel, App.Hr.Skill App.Hr.Definitions Create, Update, Delete, Export, Import
App.Hr.Department, App.Hr.JobPosition App.Hr.Definitions Create, Update, Delete, Export, Import
App.Hr.OrgChart grup kökü — (menü ve rota bu yetkiyi ister)

Çalışanın iş bilgileri ve yetkinlikleri kullanıcı ekranının yetkileriyle (AbpIdentity.Users.*) düzenlenir. Hiçbir yetki role otomatik atanmaz.


7. Entegrasyonlar (kim kullanıyor)

Tanım Kullanan modüller
Departman / Pozisyon İşe Alım (talep, ilan, teklif), Eğitim katılımcısı, Disiplin dosyası, Sağlık Kartı listesi, Performans değerlendirmesi, kullanıcı ekranı, Organizasyon Şeması
Yetenek / Seviye Aday yetkinlikleri, eğitimin kazandırdıkları, Performans yetkinlik değerlendirmesi (seviye Progress = puan), kullanıcı dil ve yetkinlik listeleri
Adm_T_UserSkill Performans Yönetimi tamamlanınca yönetici seviyesini buraya yazar (bkz. HrPerformance.md)
Vardiya (ShiftId) Bkz. HrWorkCalendar.md

8. Akış örneği

  1. İK Departmanlar'a "Kalite" departmanını şube Merkez, üst departman Üretim olarak ekler (ağaçta Üretim'in altında görünür).
  2. Pozisyonlar'a "Kalite Şefi"ni departman Kalite, üst pozisyon Üretim Müdürü olarak ekler.
  3. Kullanıcı detayının İş Bilgileri sekmesinde çalışanın departmanı Kalite, pozisyonu Kalite Şefi, işe giriş tarihi ve vardiyası girilir; Eğitim ve Yetkinlik sekmesine İngilizce B2 ve "Kaynak Uzmanı 4/5" eklenir.
  4. Organizasyon Şeması Pozisyon modunda Kalite Şefi kartı Üretim Müdürü'nün altında, çalışanla birlikte görünür; şema JPG olarak dışa aktarılır.

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

Departman yöneticisi nerede? Yok; hiyerarşi pozisyon ağacındadır. (Performans modülü bu yüzden yöneticiyi değerlendirme kaydında tutar.)

Şemada departman kartında neden tüm çalışanlar yok? Departman modunda yalnız en üst pozisyondakiler gösterilir; herkes için Pozisyon modunu kullanın.

Şemadaki kart yerleri kaydedilmiyor. Sürükleme yalnız görünümü değiştirir.

Teknik yetenekler için seviye seçilemiyor. Seed'de Technical Skills tipine seviye tanımlı değil; kullanıcı yetkinliği 1–5 ölçeğiyle girilir. Performans modülünde bu tipe seviye eklenmesi gerekir.

"Languages" tipinin adını değiştirdim, dil listesi boşaldı. Lookup'lar tip adını sabit kullanır (TenantLanguageSkillValues, TechnicalSkillsValues).

Kontrol edilmeli (koddan tespit edilen tutarsızlıklar):

  • Organizasyon Şeması API'si (api/app/org-chart) yalnız oturum ister, App.Hr.OrgChart yetkisini denetlemez; menü ve rota yetkiyle korunur.
  • BranchDepartmentValues ve JobPositionFullValues lookup'larında açık kiracı koşulu yoktur; JobPositionFullValues departmandan bağımsız tüm kök pozisyonları da listeler.
  • Yetenek alt formunun popup başlığı Seviye ekranının anahtarını kullanır (ListFormSeeder_Hr.cs).
  • Yetenek Tipi/Seviye/Yetenek yetkileri MultiTenancySide 2, Departman/Pozisyon 3'tür.
  • Bir tipte birden çok varsayılan seviye işaretlenebilir.

10. Dosyalar

Dosya İçerik
api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Hr.cs Beş ekranın ListForm tanımı
api/src/Sozsoft.Platform.Domain/Entities/Tenant/Hr/Definitions/*.cs Entity'ler
api/src/Sozsoft.Platform.Application/OrgChart/OrgChartAppService.cs, Application.Contracts/OrgChart/OrgChartDto.cs Şema API'si (GET departments, GET job-positions)
ui/src/views/admin/hr/OrgChart.tsx, ui/src/services/orgChart.service.ts Şema sayfası
ui/src/views/admin/user-management/Details.tsx, EducationSkillsTab.tsx Kullanıcı iş bilgileri ve yetkinlik sekmeleri
api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs Şube/departman/pozisyon/yetenek lookup'ları
configs/seeds/host/data/App.Hr.{Department,JobPosition,SkillType,Skill,SkillLevel}.json Seed
configs/seeds/host/data/App.Menus.Routes.json (admin.hr.organization) Şema rotası

Bu tablolar migration'lıdır; ekranlar seeder'dan kurulduğu için Wizard Manager'dan silinmez.