12 KiB
İ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
- İK Departmanlar'a "Kalite" departmanını şube Merkez, üst departman Üretim olarak ekler (ağaçta Üretim'in altında görünür).
- Pozisyonlar'a "Kalite Şefi"ni departman Kalite, üst pozisyon Üretim Müdürü olarak ekler.
- 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.
- 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.OrgChartyetkisini denetlemez; menü ve rota yetkiyle korunur. BranchDepartmentValuesveJobPositionFullValueslookup'larında açık kiracı koşulu yoktur;JobPositionFullValuesdepartmandan 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/Pozisyon3'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.