5797 lines
356 KiB
Markdown
5797 lines
356 KiB
Markdown
# İnsan Kaynakları (`App.Hr`)
|
||
|
||
> Menünün altındaki her dal bu dosyada bir bölümdür (`module-doc:section`); dosya ve bölümler ilk deploy'da otomatik açılır. `module-doc:todo` işaretli alt bölümleri modülü üreten kişi ya da AI doldurur (`lowcode.instructions.md` §0.13); MCP ile üretimde talep bu bölümler doldurulmadan Testing'e alınamaz. "Ek — Ekran envanteri" bölümü wizard dosyalarından üretilir, elle düzenlenmez.
|
||
|
||
<!-- module-doc:section App.Hr.Definitions -->
|
||
## Tanımlamalar (`App.Hr.Definitions`)
|
||
|
||
İK modüllerinin ortak sözlükleri. Bu doküman iki işi görür: (1) Tanımlamalar menüsünün **dizinidir**
|
||
— her tanımın hangi modüle ait olduğunu ve nerede kullanıldığını gösterir; (2) belirli bir modüle ait
|
||
olmayan genel tanımları (kurum doktoru, yeterlilik belgesi, hastane, hastane bölümü, evrak türü, izin
|
||
türü, masraf türü, yan hak türü) anlatı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. Dizin
|
||
|
||
`İnsan Kaynakları › Tanımlamalar` (`App.Hr.Definitions`, ikon `FcFilingCabinet`)
|
||
|
||
| Sıra | Menü | `ListFormCode` | Kaynak | Ayrıntı |
|
||
| --- | --- | --- | --- | --- |
|
||
| 1 | Departmanlar | `App.Hr.Department` | Entity + seeder | **Organizasyon ve Yetkinlik** bölümü |
|
||
| 2 | Pozisyonlar | `App.Hr.JobPosition` | Entity + seeder | **Organizasyon ve Yetkinlik** bölümü |
|
||
| 3 | Yetenek Tipleri | `App.Hr.SkillType` | Entity + seeder | **Organizasyon ve Yetkinlik** bölümü |
|
||
| 4 | Yeterlilik Belgeleri | `App.Hr.Certificate` | Wizard | bu doküman |
|
||
| 5 | Evrak Türleri | `App.Hr.DocumentType` | Wizard | bu doküman |
|
||
| 6 | Aday Kaynakları | `App.Hr.CandidateSource` | Wizard | **İşe Alım** bölümü |
|
||
| 7 | Ret Sebepleri | `App.Hr.RejectionReason` | Wizard | **İşe Alım** bölümü |
|
||
| 8 | Değerlendirme Kriterleri | `App.Hr.EvaluationCriterion` | Wizard | **İşe Alım** bölümü |
|
||
| 9 | Masraf Türleri | `App.Hr.ExpenseType` | Wizard | bu doküman |
|
||
| 10 | Yan Hak Türleri | `App.Hr.BenefitType` | Wizard | bu doküman |
|
||
| 11 | Vardiyalar | `App.Hr.Shift` | Wizard | **Çalışma Takvimi ve Vardiyalar** bölümü · **Puantaj ve Devam Takibi** bölümü |
|
||
| 12 | İzin Türleri | `App.Hr.LeaveType` | Wizard | bu doküman |
|
||
| 13 | Kurum Doktorları | `App.Hr.Doctor` | Wizard | bu bölüm · **Sağlık Kartları** bölümü |
|
||
| 14 | Hastaneler | `App.Hr.Hospital` | Wizard | bu bölüm · **Sağlık Kartları** bölümü |
|
||
| 15 | Hastane Bölümleri | `App.Hr.HospitalDepartment` | Wizard | bu bölüm · **Sağlık Kartları** bölümü |
|
||
| 16 | Performans Dereceleri | `App.Hr.PerformanceRating` | Wizard | **Performans Yönetimi** bölümü |
|
||
| 17 | Ceza Türleri | `App.Hr.DisciplinaryPenaltyType` | Wizard | **Disiplin Dosyaları** bölümü |
|
||
|
||
Tanımlamalar dışında duran tanımlar: Eğitim tipi/konusu → **Eğitimler** bölümü; araç
|
||
belgesi/masrafı/gidilecek yer → **Araçlar** bölümü (her alt menüde tanım ekranları en üstte);
|
||
çalışma takvimi → **Çalışma Takvimi ve Vardiyalar** bölümü.
|
||
|
||
Sıra modül akışını izler: organizasyon → işe alım → zaman (vardiya, izin) → sağlık → performans → disiplin.
|
||
İK menüsünün kök sırası: Tanımlamalar · Organizasyon Şeması · İşe Alım · Çalışma Takvimi · İzin Yönetimi ·
|
||
Puantaj ve Devam Takibi · Sağlık Kartları · Eğitim · Performans · Disiplin Dosyaları · Araçlar · Ziyaretçiler ·
|
||
Olay Günlüğü · Intranet. Yetki ağacı (`AbpPermissions.Order`) aynı sırayı izler; menüsüz çalışan/yönetici
|
||
yetkileri (`MyLeaveRequest`, `MyTimesheet`, `MyPerformanceReview` …) modüllerinin hemen ardındadır.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar (genel tanımlar)
|
||
|
||
> §0.13 kuralından önce üretildiler; keşif turu kaydı yoktur. Kararlar wizard ve seed dosyalarından okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Her tanım tek Wizard liste ekranı; veri seed dosyasına **aynalanır** (`SeedFilePath = data/App.Hr.{Kod}.json`, ekle/güncelle/sil senkron). Ekrandan yapılan değişiklik dosyaya yazılır, DB sıfırlanınca geri gelir |
|
||
| Aktif/Pasif | Hepsinde `IsActive` (varsayılan aktif); lookup'lar çoğunlukla yalnız aktifleri listeler |
|
||
| Kod alanı | İzin, masraf ve yan hak türlerinde iş kodu (`Code`, ör. `Annual`, `Meal`) ayrıca tutulur; yan hak kodu teklifte saklanan değerdir |
|
||
| Hazırlık tanımları | İzin türü ve masraf türü **henüz bir talep ekranına bağlı değildir** — ileride izin/masraf talep ekranlarının (onaylı talep kalıbı, `lowcode.instructions.md` §10.7) kaynağı olmak üzere tanımlanmıştır. Hastane ve hastane bölümü de şu an kullanılmıyor |
|
||
|
||
---
|
||
|
||
### 3. Ekranlar
|
||
|
||
Hepsi Grid, Card, Pivot, Chart görünümlüdür.
|
||
|
||
| Ekran | Alanlar | Widget'lar | Seed |
|
||
| --- | --- | --- | --- |
|
||
| Kurum Doktorları | Ad soyad*, diploma no/tarihi, işyeri hekimi belge no/tarihi, T.C. kimlik no, aktif | Toplam · Aktif · Pasif | 1 |
|
||
| Yeterlilik Belgeleri | Belge adı*, aktif | Toplam · Aktif · Pasif | 16 (operatör belgeleri, kaynakçı, SRC 4, forklift, mezuniyet belgeleri, çıraklık-ustalık…) |
|
||
| Hastaneler | Kurum adı*, aktif | Toplam · Aktif · Pasif | 45 |
|
||
| Hastane Bölümleri | Bölüm adı*, aktif | Toplam · Aktif · Pasif | 31 |
|
||
| Evrak Türleri | Dosya grubu* (Genel / Özlük Evrakları / Sağlık), dosya türü*, zorunlu, aktif | Toplam · Aktif · Pasif · Zorunlu | 48 |
|
||
| İzin Türleri | Kod*, ad*, cinsiyet* (All/Male/Female), yıllık en fazla gün, ücretli, yıllık izinden düşer, belge gerekir, yarım gün kullanılabilir, bakiye aşılırsa (Engelle/Uyar), aktif | Toplam · Ücretli · Ücretsiz | 9 (Yıllık, Mazeret, Ücretsiz, Hastalık, Doğum 112 gün, Babalık 5, Evlilik 3, Ölüm 3, Süt) |
|
||
| Masraf Türleri | Kod*, ad*, varsayılan tutar, para birimi, gelir vergisine tabi, SGK'ya tabi, fiş/belge gerekir, aktif | Toplam · Aktif · Pasif | 7 (yemek, yol, konaklama, akaryakıt, telefon, temsil, kırtasiye) |
|
||
| Yan Hak Türleri | Kod*, ad*, varsayılan tutar, para birimi, gelir vergisine tabi, SGK'ya tabi, aktif | Toplam · Aktif · Pasif | 10 (yemek kartı, ulaşım, özel sağlık sigortası, BES, konut, şirket aracı, telefon, çocuk, yakacak, diğer) |
|
||
|
||
`*` zorunlu. Varsayılanlar: izin türünde ücretli = evet, yıllık izinden düşer/belge/yarım gün = hayır,
|
||
cinsiyet = Tümü; masraf ve yan hakta para birimi TRY, vergi/SGK = hayır, masrafta fiş gerekir = evet.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
Tablolar `sql/object/Hr_T_{Doctor,Certificate,Hospital,HospitalDepartment,DocumentType,LeaveType,ExpenseType,BenefitType}.sql`
|
||
(entity yok); kiracı + audit + `IsActive`. Kolonlar §3'teki alanlarla aynıdır. Tablo düzeyinde tekil
|
||
kısıt yoktur.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları
|
||
|
||
Hesap yoktur; yalnız form varsayılanları (§3). Seed dosyası aynalandığı için tanımlar ekrandan
|
||
değiştirildiğinde `configs/seeds/data/App.Hr.*.json` dosyası da değişir — bu dosyalar commit'lenmelidir.
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Her tanımın kökü + `.Create/.Update/.Delete/.Export/.Import/.Note`,
|
||
hepsi `App.Hr.Definitions` ara yetkisinin altında. Tanım ekranlarının yazma yetkisi İK'da kalmalıdır;
|
||
lookup olarak okunmaları ekran yetkisi gerektirmez. Hiçbir yetki role otomatik atanmaz.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar (kim kullanıyor)
|
||
|
||
| Tanım | Kullanan |
|
||
| --- | --- |
|
||
| Kurum Doktorları | Sağlık Kartı (periyodik muayene, protokol, sonuç hekimleri) |
|
||
| Yeterlilik Belgeleri | Kullanıcı detayı › Eğitim ve Yetkinlik (`UserCertificate`), Performans gelişim planı (sertifika aksiyonu) |
|
||
| Evrak Türleri | Eğitim dosyaları, Disiplin belgeleri |
|
||
| Yan Hak Türleri | İşe Alım › Teklif (`BenefitCodes`, kod ile) |
|
||
| İzin Türleri | İzin Yönetimi'nin tür kuralları (cinsiyet, yarım gün, belge, yıllık sınır, yıllık izinden düşme, aşım davranışı); `Sick` kodlu tür Sağlık Kartı istirahatiyle eşlenir — İzin Yönetimi bölümü |
|
||
| Hastaneler, Hastane Bölümleri, Masraf Türleri | Henüz kullanan ekran yok |
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İK yeni bir yan hak tanımlar: kod `Gym`, ad "Spor Salonu Üyeliği", varsayılan tutar 1.500 TRY, gelir vergisine tabi.
|
||
2. Kayıt `data/App.Hr.BenefitType.json` dosyasına da yazılır.
|
||
3. İşe Alım › Teklif formundaki **Yan Haklar** listesinde yeni hak seçilebilir.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Pasif yaptığım tanım listelerden kayboldu.** Lookup'lar yalnız aktif kayıtları listeler; eski kayıtlarda değer korunur.
|
||
|
||
**İzin talebi nereden girilir?** Henüz izin/masraf talep ekranı yoktur; türler tanım olarak hazırdır.
|
||
|
||
**Evrak Türleri "özlük dosyası" diyor ama özlük dosyası ekranı yok.** Doğru; türler şu an eğitim ve disiplin belgelerinde kullanılır.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_{Doctor,Certificate,Hospital,HospitalDepartment,DocumentType,LeaveType,ExpenseType,BenefitType}.sql` | Tablolar |
|
||
| `configs/seeds/wizard/{Doctor,Certificate,Hospital,HospitalDepartment,DocumentType,LeaveType,ExpenseType,BenefitType}.json` | 8 wizard |
|
||
| `configs/seeds/data/App.Hr.{Doctor,Certificate,Hospital,HospitalDepartment,DocumentType,LeaveType,ExpenseType,BenefitType}.json` | Aynalanan tanım verisi |
|
||
|
||
<!-- module-doc:section App.Hr.OrgChart -->
|
||
## 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 |
|
||
| Şemada şube | Şema **şube kökünden** başlar (2026-10-14): her iki modda üstü olmayan departman/pozisyon kendi şubesinin (`BranchId`) düğümüne bağlanır; yalnızca altında kayıt olan şubeler düğüm olur (`OrgChartAppService.WithBranchRootsAsync`, `OrgChartNodeDto.NodeType`). Şube kartı kullanıcı listesi taşımaz |
|
||
| 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. İki modda da kök düğüm **şube**dir (`NodeType = Branch`, fabrika simgesi); departman/pozisyon ağacı şubesinin altında açılır.
|
||
- **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/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. Performans Yönetimi bölümü) |
|
||
| Vardiya (`ShiftId`) | Bkz. Çalışma Takvimi ve Vardiyalar bölümü |
|
||
|
||
---
|
||
|
||
### 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`, `TenantNonLanguageSkillValues`).
|
||
|
||
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/data/App.Hr.{Department,JobPosition,SkillType,Skill,SkillLevel}.json` | Seed |
|
||
| `configs/seeds/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.
|
||
|
||
<!-- module-doc:section App.Hr.Personnel -->
|
||
## 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. **Sağlık Kartları** bölümü.) 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. **Organizasyon ve Yetkinlik** bölümü) |
|
||
| 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 — sicil/kart no ve vardiya puantajın kişi eşlemesi ve vardiyasıdır, Puantaj ve Devam Takibi bölümü), 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. **Sağlık Kartları** bölümü | — |
|
||
| Puantaj | Yılın puantaj kartları + Aylık Puantaj, Günlük Puantaj, Günlük Hareketler listeleri; bkz. **Puantaj ve Devam Takibi** bölümü §3.4 | — |
|
||
| Eğitimler | Çalışanın eğitim katılımları (`App.Hr.TrainingParticipant`, `UserId` süzgeci); bkz. **Eğitimler** bölümü | — |
|
||
| Performans | Değerlendirmeler (`App.Hr.PerformanceReview`) ve gelişim planları (`App.Hr.DevelopmentPlan`), `EmployeeId` süzgeci; bkz. **Performans Yönetimi** bölümü | — |
|
||
| Disiplin | Disiplin dosyaları (`App.Hr.DisciplinaryCase`, `UserId` süzgeci); bkz. **Disiplin Dosyaları** bölümü | — |
|
||
|
||
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. **Intranet** bölümü) |
|
||
|
||
---
|
||
|
||
### 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 |
|
||
| `ui/src/views/admin/user-management/HrRecordsTab.tsx`, `hrRecordTabs.ts` | Eğitimler / Performans / Disiplin sekmeleri: İK ekranları çalışana süzülmüş açılır; sekme, ekranlarından birini görme yetkisi varsa çizilir. Yeni bir İK modülü sekmesi `HR_RECORD_TABS`'a satır eklemekle açılır |
|
||
| `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ı |
|
||
|
||
<!-- module-doc:section App.Hr.Recruitment claims=App.Hr.CandidateSource, App.Hr.RejectionReason, App.Hr.EvaluationCriterion -->
|
||
## İşe Alım (`App.Hr.Recruitment`)
|
||
|
||
Kadro talebinden işe alıma kadar uçtan uca süreç: onaylı kadro talebi → iş ilanı → aday havuzu
|
||
(CV, KVKK açık rızası) → başvuru (aşama panosu) → mülakat (takvim, kriter ağırlıklı puan) →
|
||
teklif (iç onay, teklif mektubu). Tamamı konfigürasyondur (Wizard + SQL + rapor şablonu); entity,
|
||
migration ya da React kodu yoktur.
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Talep eden yönetici | Kadro talebi açar, onaya gönderir | Kadro Talepleri |
|
||
| Onaycı | Kadro talebini ve teklifi onaylar / reddeder | Kadro Talepleri · Teklifler (Grid Workflow butonları) |
|
||
| İK / işe alım uzmanı | İlan açar, aday ve başvuruları yönetir, mülakat planlar, teklif hazırlar, aday kaydını personele bağlar | İlanlar · Adaylar · Başvurular · Mülakatlar · Teklifler |
|
||
| Mülakatçı | Kendisine atanan mülakatta kriter bazlı puan verir | Mülakatlar (+ bildirim) |
|
||
| İK yöneticisi | Aday kaynağı, ret sebebi, değerlendirme kriteri tanımlarını yönetir | İK › Tanımlar |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Şube, kayıtta veri olarak tutulur (satır süzmesi yoktur).
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Aşağıdaki kararlar üretilen
|
||
> artefaktlardan (wizard, SQL, seed, commit `16fd5df0` "İşe Alım modülü") okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Her adım ayrı Wizard ekranı; ilan ve aday ekranlarında başvuru alt formu, başvuruda mülakat ve teklif alt formu |
|
||
| Kadro talebi ve teklif onayı | **Grid Workflow** (`WorkflowDto`): Start → Approval (`Onay Bekliyor`) → Inform → End `Onaylandı` / `Reddedildi`. Onaycı **düğümün `Approver` değeridir** (seed'de platform admin e-postası); motor onaycıyı kayıttaki alandan okumaz — ListForm › Workflow sekmesinden değiştirilir |
|
||
| İlan kaynağı | İlan yalnızca **onaylı** (`ApprovalStatus = 'Onaylandı'`) kadro talebinden açılır; şube/departman/pozisyon/adet/çalışma şekli talepten `copy` ile dolar |
|
||
| Aday kimliği | E-posta kiracı içinde tekildir (filtreli unique index) |
|
||
| KVKK | Açık rıza **zorunlu**: formda zorunlu alan + tabloda `CHECK (KvkkConsent = 1)`; rıza tarihi/yöntemi/imzalı belge saklanır; satır butonu **KVKK Açık Rıza Formu** raporunu açar |
|
||
| Başvuru | Aday × ilan çifti tekildir; aşama **Todo (kanban)** panosunda yönetilir |
|
||
| Aşama ilerlemesi | Mülakat eklenince `Interview`, teklif eklenince `Offer`, teklif `Accepted` olunca `Hired` — SQL ile, **geri gitmez** |
|
||
| Mülakat puanı | Kriter başına 1–5; `OverallScore = Σ(puan × kriter ağırlığı) / Σ ağırlık`; başvurunun `AverageScore`'u mülakatların ortalaması |
|
||
| Mülakatçı bildirimi | Mülakat eklenince mülakatçıya `IseAlimMulakatAtandi` bildirimi (kanallar `UiActivity` + `Mail`) |
|
||
| Belge numaraları | `KT-YYYY-00001` (talep), `ILN-…` (ilan), `TKL-…` (teklif) — insert sonrası SQL, kiracı + yıl bazında |
|
||
| Personele dönüşüm | İşe alınan adayın kullanıcı (personel) kaydını **BT elle açar**; İK aday kaydını `UserId` ile o kullanıcıya bağlar (otomatik kullanıcı açılmaz) |
|
||
| Kanban başlığı | `CandidateName` / `PostingTitle` başvuruya metin olarak kopyalanır (Todo başlığı metin kolon ister) |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
`İnsan Kaynakları › İşe Alım` (`App.Hr.Recruitment`, ikon `FcManager`)
|
||
|
||
| Sıra | Menü (TR / EN) | `ListFormCode` | Alt formlar | Görünümler | Widget'lar |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 1 | Kadro Talepleri / Staff Requests | `App.Hr.StaffRequest` | — | Grid, Card, Pivot, Chart | Toplam · Onay Bekliyor · Onaylanan · Onaylı kadro adedi (Σ Headcount) |
|
||
| 2 | İlanlar / Job Postings | `App.Hr.JobPosting` | `JobApplication` (`Id → JobPostingId`) | Grid, Card, Pivot, Chart | Toplam · Yayında · Taslak · Kapalı |
|
||
| 3 | Adaylar / Candidates | `App.Hr.Candidate` | `JobApplication` (`Id → CandidateId`) | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif · Personele Dönüşen |
|
||
| 4 | Başvurular / Applications | `App.Hr.JobApplication` | `Interview`, `JobOffer` (`Id → ApplicationId`) | Grid, Card, Pivot, Chart, **Todo** | — (alt form olarak da kullanıldığı için yok) |
|
||
| 5 | Mülakatlar / Interviews | `App.Hr.Interview` | `InterviewScore` (`Id → InterviewId`, menüsüz) | Grid, Card, Pivot, Chart, **Scheduler** | — |
|
||
| 6 | Teklifler / Job Offers | `App.Hr.JobOffer` | — | Grid, Card, Pivot, Chart | — |
|
||
|
||
Tanımlar `İnsan Kaynakları › Tanımlar` (`App.Hr.Definitions`) altında, verileri seed dosyasıyla aynalı:
|
||
|
||
| Menü | `ListFormCode` | Seed |
|
||
| --- | --- | --- |
|
||
| Aday Kaynakları | `App.Hr.CandidateSource` | 7 kayıt: LinkedIn, Kariyer.net, Yenibiris, Şirket Web Sitesi, Referans, Kariyer Fuarı, Doğrudan Başvuru |
|
||
| Ret Sebepleri | `App.Hr.RejectionReason` | 8 kayıt; `RejectedBy` = Company / Candidate |
|
||
| Değerlendirme Kriterleri | `App.Hr.EvaluationCriterion` | 6 kayıt (ağırlıklı): İletişim 1, Teknik Yetkinlik 2, Problem Çözme 1.5, Takım Çalışması 1, Motivasyon 1, Kurum Kültürüne Uyum 1 |
|
||
|
||
Satır butonları (`DynamicReport`, `Raporlar` kategorisi):
|
||
|
||
| Ekran | Buton | Rapor şablonu | Görünürlük |
|
||
| --- | --- | --- | --- |
|
||
| Adaylar | KVKK Açık Rıza Formu | `475c1ab4-4600-5ef2-a43e-1366ed89b0ed` | Her satır |
|
||
| Teklifler | Teklif Mektubu | `80d38666-423d-5e1d-8766-01f2c46be768` | `ApprovalStatus === 'Onaylandı'` |
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
```
|
||
Hr_T_StaffRequest ──< Hr_T_JobPosting ──< Hr_T_JobApplication >── Hr_T_Candidate ──> AbpUsers (UserId, personel)
|
||
│
|
||
├──< Hr_T_Interview ──< Hr_T_InterviewScore >── Hr_T_EvaluationCriterion
|
||
└──< Hr_T_JobOffer
|
||
```
|
||
|
||
| Tablo | Önemli kolonlar | Kural |
|
||
| --- | --- | --- |
|
||
| `Hr_T_StaffRequest` | `RequestNo`, `RequestDate`, `RequestedById`, `BranchId` → `DepartmentId` → `JobPositionId` (cascade), `Headcount`, `EmploymentType`, `ExpectedStartDate`, `Reason` (NewPosition/Replacement), `ReplacedUserId`, ücret aralığı + `CurrencyId`, `Qualifications` (HTML), onay alanları | `Reason ≠ Replacement` ise `ReplacedUserId` temizlenir (script) |
|
||
| `Hr_T_JobPosting` | `PostingNo`, `StaffRequestId`, `Title`, `Status` (Draft/Published/Closed/Cancelled), şube/departman/pozisyon, `Headcount`, `EmploymentType`, `WorkModel` (Office/Hybrid/Remote), `Location`, `PublishDate`, `ClosingDate`, `SourceIds` (yayın kanalları, çok değerli), açıklama/nitelikler (HTML) | Başlık boşsa pozisyon adı kopyalanır |
|
||
| `Hr_T_Candidate` | Kişisel bilgiler, fotoğraf, ülke → şehir, eğitim (`EducationLevel`, okul, bölüm, mezuniyet), deneyim, ücret beklentisi, `SourceId`, `SkillIds` (`Hr_T_Skill`, çok değerli), `CvDocument`, `UserId`, KVKK alanları | `UX (TenantId, Email)`; `CHECK (KvkkConsent = 1)` |
|
||
| `Hr_T_JobApplication` | `CandidateId`, `JobPostingId`, `CandidateName`, `PostingTitle`, `ApplicationDate`, `SourceId`, `OwnerUserId`, `AverageScore`, `Stage`, `RejectionReasonId`, `RejectionNote`, `SortOrder` | `UX (TenantId, CandidateId, JobPostingId)`; aşama `Rejected` değilse ret sebebi/notu temizlenir |
|
||
| `Hr_T_Interview` | `ApplicationId`, `Title`, `InterviewType` (Phone/Video/FaceToFace/Technical/Hr), `InterviewerUserId`, `StartDate`, `EndDate`, `Location`, `MeetingUrl`, `Status` (Planned/Completed/Cancelled/NoShow), `Recommendation` (Hire/Hold/Reject), `OverallScore` | Bitiş boşsa başlangıç + 1 saat (script) |
|
||
| `Hr_T_InterviewScore` | `InterviewId`, `CriterionId`, `Score`, `Comment` | `CHECK (Score BETWEEN 1 AND 5)`; `UX (InterviewId, CriterionId)` |
|
||
| `Hr_T_JobOffer` | `OfferNo`, `ApplicationId`, `CandidateName`, `OfferDate`, `ValidUntil`, `StartDate`, `GrossSalary` + `CurrencyId`, `Status` (Draft/Sent/Accepted/Declined/Expired), `ResponseDate`, pozisyon bilgileri, `BenefitCodes` (`Hr_T_BenefitType`), onay alanları | `CHECK (GrossSalary >= 0)`; durum Accepted/Declined olunca yanıt tarihi bugün (script) |
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
#### 5.1 Başvuru aşamaları
|
||
|
||
```
|
||
Applied → Screening → Interview → Offer → Hired
|
||
└──→ Rejected (her aşamadan, elle)
|
||
```
|
||
|
||
| Tetik | Etki (after-command SQL) |
|
||
| --- | --- |
|
||
| Mülakat eklendi | Başvuru `Applied`/`Screening` ise → `Interview` |
|
||
| Teklif eklendi | Başvuru `Applied`/`Screening`/`Interview` ise → `Offer`; teklif zaten `Accepted` ise → `Hired` |
|
||
| Teklif güncellendi (`Accepted`) | Başvuru henüz `Hired` değilse → `Hired` |
|
||
| Elle | Panodan sürükleme ya da formdan her aşama seçilebilir |
|
||
|
||
Otomatik ilerleme yalnızca ileri gider; geri almak elle yapılır.
|
||
|
||
#### 5.2 Puanlar
|
||
|
||
- `Interview.OverallScore = Σ(Score × Criterion.Weight) / Σ Weight` (silinmemiş puanlar).
|
||
- `JobApplication.AverageScore = AVG(Interview.OverallScore)` (puanı olan mülakatlar).
|
||
- Puan eklenince, güncellenince ya da silinince ikisi de yeniden hesaplanır.
|
||
|
||
#### 5.3 Metin kopyaları
|
||
|
||
`CandidateName`, `PostingTitle` (başvuru), `Title` (mülakat = aday – ilan), `CandidateName`
|
||
(teklif) after-command ile yazılır. Aday, ilan ya da başvuru güncellendiğinde **tüm** değişmiş
|
||
kopyalar topluca düzeltilir (sorgu `@Id` ile değil fark koşuluyla çalışır).
|
||
|
||
#### 5.4 Numaratörler
|
||
|
||
`KT-`, `ILN-`, `TKL-` + yıl + 5 hane; kiracı ve yıl bazında `MAX + 1`. Numara yalnızca boşsa yazılır.
|
||
|
||
#### 5.5 Onay akışı (Kadro Talebi, Teklif)
|
||
|
||
Grid Workflow; durum `ApprovalStatus`, onaylayan `ApprovalUser`, tarih `ApprovalDate`, açıklama
|
||
`ApprovalDescription`. Onay/Ret butonlarını akış kendisi çizer. Onaycı düğümde sabittir
|
||
(`system@sozsoft.com` seed değeri) — gerçek onaycı ListForm › Workflow'dan girilmelidir.
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Yetki ağacı menüyü izler: `App.Hr.Recruitment` ara yetkisinin
|
||
altında her ekranın kökü + `.Create/.Update/.Delete/.Export/.Import/.Note`; `App.Hr.InterviewScore`
|
||
mülakat yetkisinin altındadır. Tanımlar `App.Hr.Definitions` altındadır. Satır süzmesi yoktur —
|
||
ekran yetkisi olan tüm kayıtları görür. Hiçbir yetki role otomatik atanmaz.
|
||
|
||
Önerilen dağıtım:
|
||
|
||
| Rol | Yetkiler |
|
||
| --- | --- |
|
||
| Talep eden yöneticiler | `App.Hr.StaffRequest` (+ `.Create/.Update`) |
|
||
| Mülakatçılar | `App.Hr.Interview` (+ `.Update`), `App.Hr.InterviewScore` (+ `.Create/.Update/.Delete`) |
|
||
| İşe alım uzmanı | `App.Hr.Recruitment` dalının tamamı + üç tanım ekranı |
|
||
| Onaycı | Onaylayacağı ekranın kökü + `.Update` |
|
||
|
||
KVKK: aday verisi kişisel veridir; Adaylar ekranının yetkisi yalnızca işe alım ekibine verilmelidir.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `Sas_T_Branch`, `Hr_T_Department`, `Hr_T_JobPosition` | Şube → departman → pozisyon cascade (talep, ilan, teklif) |
|
||
| `Sas_H_Currency` | Ücret para birimi (varsayılan TRY) |
|
||
| `Sas_H_Country`, `Sas_H_City` | Aday adresi (ülke → şehir cascade) |
|
||
| `Hr_T_Skill` / `Hr_T_SkillType` | Aday yetkinlikleri (`SkillIds`) |
|
||
| `Hr_T_BenefitType` | Teklifteki yan haklar (`BenefitCodes`) |
|
||
| `AbpUsers` | Talep eden, ayrılan personel, sorumlu, mülakatçı, personele dönüşen aday |
|
||
| Bildirimler | Tip `IseAlimMulakatAtandi`; kurallar `Custom` + `UiActivity`/`Mail`; metin `App.Hr.Interview.Notification.{Subject,Message}`, yer tutucular `[Candidate]`, `[Posting]`, `[Date]` |
|
||
| Raporlar | KVKK Açık Rıza Formu, Teklif Mektubu (`DynamicReport`) |
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Satış müdürü **Kadro Talepleri**'nde "Satış Temsilcisi, 2 kişi, yeni pozisyon" talebini açar →
|
||
`KT-2026-00001`; onaya gönderir, onaycı onaylar → `Onaylandı`.
|
||
2. İK **İlanlar**'da talebi seçer; şube/departman/pozisyon/adet dolar, başlık pozisyon adı olur;
|
||
yayın kanallarını (LinkedIn, Kariyer.net) seçip durumu **Published** yapar → `ILN-2026-00001`.
|
||
3. Gelen adaylar **Adaylar**'a CV ve KVKK rızasıyla girilir; KVKK formu satır butonundan basılır.
|
||
4. İlanın **Başvurular** sekmesinden aday eklenir (`Applied`); kanban panosunda **Screening**'e çekilir.
|
||
5. Başvurunun **Mülakatlar** sekmesinden teknik mülakat planlanır → başvuru `Interview` olur,
|
||
mülakatçıya bildirim gider; mülakatçı kriterleri puanlar → genel ve ortalama puan hesaplanır.
|
||
6. **Teklifler**'de teklif hazırlanır → başvuru `Offer`; teklif onaya gider, onaylanınca
|
||
**Teklif Mektubu** basılır.
|
||
7. Aday kabul eder, teklif **Accepted** yapılır → başvuru `Hired`. BT kullanıcıyı açar, İK aday
|
||
kaydının **Personel** alanına bağlar ("Personele Dönüşen" kartı artar).
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**İlan açarken kadro talebi listede yok.** Yalnızca onaylanmış (`ApprovalStatus = 'Onaylandı'`) talepler listelenir.
|
||
|
||
**Onay butonu kimde görünüyor?** Akış düğümündeki `Approver`'da (seed'de admin). ListForm › Workflow'dan gerçek onaycıyı yazın.
|
||
|
||
**Başvuru aşaması geri gitmedi.** Otomatik ilerleme yalnız ileri gider; geri almayı panodan ya da formdan elle yapın.
|
||
|
||
**Ret sebebi alanı temizlendi.** Ret sebebi ve notu yalnızca `Rejected` aşamasında tutulur.
|
||
|
||
**Aday kaydı kaydedilmiyor.** KVKK rızası işaretli olmalı (tablo da zorlar) ve e-posta kiracıda tekil olmalı.
|
||
|
||
**Aynı aday aynı ilana ikinci kez eklenemiyor.** Aday × ilan tekildir.
|
||
|
||
**Mülakat puanı nasıl hesaplanıyor?** Kriter ağırlıklı ortalama (§5.2); ağırlıklar İK › Tanımlar › Değerlendirme Kriterleri'nden.
|
||
|
||
**İşe alınan aday otomatik personel olmuyor mu?** Hayır; kullanıcıyı BT açar, İK aday kaydına bağlar.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_{StaffRequest,JobPosting,Candidate,JobApplication,Interview,InterviewScore,JobOffer,CandidateSource,RejectionReason,EvaluationCriterion}.sql` | Tablolar, CHECK ve tekil indeksler |
|
||
| `configs/seeds/wizard/{StaffRequest,JobPosting,Candidate,JobApplication,Interview,InterviewScore,JobOffer,CandidateSource,RejectionReason,EvaluationCriterion}.json` | 10 wizard |
|
||
| `configs/seeds/data/App.Hr.{CandidateSource,RejectionReason,EvaluationCriterion}.json` | Tanım verisi |
|
||
| `configs/seeds/data/App.Reports.ReportTemplates.json` | KVKK formu ve teklif mektubu şablonları |
|
||
| `configs/seeds/data/App.Notifications.Notification{Types,Rules}.json` | `IseAlimMulakatAtandi` tipi ve 2 kuralı |
|
||
| `configs/seeds/data/App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json` | Menü, yetki, dil satırları |
|
||
|
||
Kurulum: DB Migrate. Geri alma: Wizard Manager'dan wizard'lar silinir (alt formlar önce: `InterviewScore`
|
||
→ `Interview`/`JobOffer` → `JobApplication` → diğerleri); tablolar yalnızca onayda seçilirse düşer.
|
||
Rapor şablonları ve bildirim satırları elle kaldırılır.
|
||
|
||
<!-- module-doc:section App.Hr.WorkCalendar claims=App.Hr.Shift -->
|
||
## Çalışma Takvimi ve Vardiyalar (`App.Hr.WorkCalendar`, `App.Hr.Shift`)
|
||
|
||
Çalışma zamanının iki temel tanımı: resmi tatil / yarım gün takvimi (yıllık tekrarlı ya da tek
|
||
seferlik) ve vardiya tanımları (saat aralığı, mola, gece vardiyası). Diğer modüller bu tanımları
|
||
lookup olarak kullanır. Tamamı konfigürasyondur (Wizard + seed); vardiya ayrıca kullanıcı kaydına
|
||
bağlanı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 | Yılın tatil ve yarım günlerini girer, takvim görünümünden kontrol eder | Çalışma Takvimi |
|
||
| İK / üretim planlama | Vardiya tanımlarını yönetir, çalışanı vardiyaya bağlar | Vardiyalar · Kimlik › Kullanıcılar |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Şube kırılımı yoktur — takvim kiracının tamamı için geçerlidir.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modüller §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan
|
||
> (wizard, seed, commit `130e23bc` "Disiplin Dosyaları, Çalışma Takvimi") okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Tatil tekrarı | Sabit tarihli resmi tatiller `RecurrenceRule = FREQ=YEARLY` ile **bir kez** girilir, her yıl tekrarlar; dini bayramlar ay takvimine bağlı olduğu için **her yıl ayrı** satırdır (tekrar kuralı boş) |
|
||
| Gün türü | `Holiday` (tam gün tatil) / `HalfDay` (arife, yarım gün) |
|
||
| Görünüm | Liste görünümlerine ek olarak **Scheduler** (takvim) görünümü; `AllDay` her zaman `true` |
|
||
| Vardiya saatleri | `StartTime` / `EndTime` `SS:dd` metin; çalışma süresi elle girilir (otomatik hesap yok) |
|
||
| Gece vardiyası | Bayrak (`IsNightShift`) — sağlık kartındaki "gece çalışabilir" sonucuyla birlikte değerlendirilir, otomatik kontrol yoktur |
|
||
| Vardiya bağı | Kullanıcı kaydında `ShiftId` alanı (`LookupQueryValues.TenantShiftValues`: "Ad (başlangıç-bitiş)") |
|
||
| Menü yeri | Çalışma Takvimi `İnsan Kaynakları` kökünde; Vardiyalar bir tanım olduğu için `İnsan Kaynakları › Tanımlamalar` altında (yetkisi de `App.Hr.Definitions`'ın altındadır) |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
| Menü (TR / EN) | `ListFormCode` | Yer | Görünümler | Widget'lar |
|
||
| --- | --- | --- | --- | --- |
|
||
| Çalışma Takvimi / Work Calendar | `App.Hr.WorkCalendar` | `İnsan Kaynakları` (sıra 4, `FcCalendar`) | Grid, Card, Pivot, Chart, **Scheduler** | Toplam · Tatil · Yarım Gün |
|
||
| Vardiyalar / Shifts | `App.Hr.Shift` | `İnsan Kaynakları › Tanımlar` (sıra 11, `FcClock`) | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
|
||
|
||
Scheduler eşlemesi: metin `Name`, başlangıç `StartDate`, bitiş `EndDate`, tüm gün `AllDay`,
|
||
tekrar `RecurrenceRule`.
|
||
|
||
Seed verisi:
|
||
- Çalışma takvimi, 16 satır (`data/App.Hr.WorkCalendar.json`):
|
||
- Yıllık tekrarlı tatiller: Yılbaşı, 23 Nisan, 1 Mayıs, 19 Mayıs, 15 Temmuz, 30 Ağustos, 29 Ekim.
|
||
- Yıllık tekrarlı yarım gün: 28 Ekim arifesi.
|
||
- Yıla özel satırlar: 2026 ve 2027 Ramazan/Kurban bayramları ve arifeleri.
|
||
- Vardiyalar, 3 satır (`data/App.Hr.Shift.json`): Sabah 08:00–16:00, Akşam 16:00–00:00, Gece 00:00–08:00 (gece vardiyası).
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
| Tablo | Kolonlar |
|
||
| --- | --- |
|
||
| `Hr_T_WorkCalendar` | `Name`, `StartDate`, `EndDate`, `DayType` (Holiday/HalfDay), `RecurrenceRule` (boş / `FREQ=YEARLY`), `AllDay`, `IsActive` |
|
||
| `Hr_T_Shift` | `Name`, `StartTime`, `EndTime`, `BreakMinutes`, `LateToleranceMinutes`, `EarlyLeaveToleranceMinutes`, `WorkingHours`, `IsNightShift`, `IsActive` |
|
||
| `AbpUsers.ShiftId` | Çalışanın vardiyası (genişletme kolonu) |
|
||
|
||
Entity yoktur (wizard tabloları); `sql/object/Hr_T_{WorkCalendar,Shift}.sql`.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları
|
||
|
||
| Yer | Kural |
|
||
| --- | --- |
|
||
| Takvim — yeni kayıt | Gün türü `Holiday`, tekrar `FREQ=YEARLY`, tüm gün, aktif |
|
||
| Takvim — çok günlü tatil | Başlangıç–bitiş aralığı olarak tek satırda girilebilir |
|
||
| Vardiya — yeni kayıt | Gece vardiyası hayır, aktif |
|
||
|
||
| Vardiya — toleranslar | Geç kalma / erken çıkış toleransı (dk); boşsa Ayarlar › İnsan Kaynakları › Puantaj'daki genel değer |
|
||
|
||
Takvim İzin Yönetimi'nin gün sayısını (İzin Yönetimi bölümü), takvim ve vardiya Puantaj ve Devam Takibi'nin
|
||
gün tipini, vardiya saatini, molasını ve toleransını (Puantaj ve Devam Takibi bölümü) besler.
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Her ekranın kökü + `.Create/.Update/.Delete/.Export/.Import/.Note`.
|
||
Hiçbir yetki role otomatik atanmaz. Takvimin okunması tüm çalışanlara açılabilir; düzenleme İK'da kalmalıdır.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kullanan | Nasıl |
|
||
| --- | --- |
|
||
| Kimlik › Kullanıcılar | `ShiftId` alanı vardiya lookup'ı |
|
||
| Olay Günlüğü (`App.Hr.EventLog`) | Olay kaydında vardiya seçimi |
|
||
| Sağlık Kartları | Vardiyalı / gece çalışabilir sonucu (bilgi; vardiya tanımıyla otomatik eşleşmez) |
|
||
| İzin Yönetimi | Takvim tatilleri izin gününden düşülür (`Hr_F_LeaveWorkDays`). Takvim satırı eklenince/değişince/silinince denk gelen izinlerin gün sayısı yeniden hesaplanır (`Hr_S_WorkCalendarAfterSave`) |
|
||
| Puantaj ve Devam Takibi | Tatil → Resmî tatil, arife → yarım vardiya (`Hr_F_WorkCalendarDayType`); vardiya saat/mola/tolerans → `Hr_V_AttendanceShift`. Takvim kaydı ilgili günleri hemen yeniden hesaplar (kapalı ay hariç); vardiya değişikliği gece işinde ya da Puantaj Dönemleri kaydında yansır |
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Yıl başında İK **Çalışma Takvimi**'nde o yılın dini bayram satırlarını ekler (sabit tatiller zaten yıllık tekrarlıdır) ve Scheduler görünümünde yılı kontrol eder.
|
||
2. Üretim için **Vardiyalar**'a "Hafta Sonu 08:00–20:00, mola 60 dk, çalışma 11 saat" eklenir.
|
||
3. Kullanıcı ekranında çalışanların **Vardiya** alanı güncellenir; Olay Günlüğü kayıtlarında da bu vardiyalar seçilir.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar ve bilinen sınırlar
|
||
|
||
**Ramazan Bayramı gelecek yıl görünmüyor.** Dini bayramlar yıla özeldir; her yıl yeni satır girilir.
|
||
|
||
**Çalışma süresi neden hesaplanmıyor?** Vardiya saatleri metindir, süre elle girilir.
|
||
|
||
**Takvim izin/puantaj hesabını etkiliyor mu?** Evet: izin gün sayısından tatiller düşülür, puantajda tatil
|
||
günü Resmî tatil, arife yarım gün sayılır. Takvim satırı kaydedilince denk gelen günlerin izin gün sayısı ve
|
||
puantajı hemen yeniden hesaplanır (yıllık tekrarlı satırda bu yıl ve gelecek yıl; kapalı puantaj ayı yazılmaz).
|
||
Bir satırın tarihi değiştirildiğinde eski tarihlerin puantajı gece işinde ya da Puantaj Dönemleri kaydında düzelir.
|
||
|
||
**Vardiyalar nerede?** `İnsan Kaynakları › Tanımlamalar` altında (sıra 11); menü satırı, wizard dosyası ve
|
||
yetki ağacı aynı yeri gösterir.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_{WorkCalendar,Shift}.sql` | Tablolar |
|
||
| `configs/seeds/wizard/{WorkCalendar,Shift}.json` | 2 wizard |
|
||
| `configs/seeds/data/App.Hr.{WorkCalendar,Shift}.json` | Takvim ve vardiya verisi (ekran kayıtları dosyaya aynalanır) |
|
||
| `api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs` (`TenantShiftValues`) | Kullanıcı ekranındaki vardiya lookup'ı |
|
||
|
||
Geri alma: Wizard Manager'dan silinir; vardiya tablosu kullanıcı ekranının lookup'ı tarafından okunduğu için düşürülmemelidir.
|
||
|
||
<!-- module-doc:section App.Hr.Leave -->
|
||
## İzin Yönetimi (`App.Hr.Leave`)
|
||
|
||
İzin talebi, iki aşamalı onay (departman müdürü → İK), yıllık izin bakiyesi ve rapor (istirahat)
|
||
eşlemesi. **İnsan Kaynakları menüsü yalnız İK içindir**: tüm talepleri ve bakiyeleri İK izler.
|
||
Çalışan ve müdür izinle ilgili her şeyi **Intranet › Dashboard**'daki widget'lardan yapar. Wizard
|
||
ekranları, SQL nesneleri ve custom component widget'larıyla kuruludur. Çerçeve dışında iki ek
|
||
vardır (kullanıcı onayıyla): Grid Workflow'da kayıttan okunan onaycı (`@Kolon`) ve kullanıcı
|
||
detayındaki **İzinler** sekmesi.
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Çalışan | Bakiyesini izler, izin talebi açar, taleplerinin onay durumunu takip eder, henüz karar verilmemiş talebini düzeltir/siler | Intranet panosu: **İzinlerim** widget'ı → İzin Talebi Oluştur · Taleplerim · Bakiyem · Profil › İzinlerim (bakiye + talepler salt okunur, İzin Talebi Oluştur) |
|
||
| Departman müdürü | Departmanının taleplerini onaylar/reddeder | Intranet panosu: **Ekibimin İzinleri** widget'ı → Ekibimin İzin Talepleri |
|
||
| İK | Tüm talepleri izler, ikinci onayı verir, çalışan adına talep girer, bakiyeleri izler, açılış/devir düzeltmesi girer, çalışma günlerini ve kademeleri ayarlar | İK › İzin Yönetimi › İzin Talepleri · İzin Bakiyeleri · Ayarlar › İnsan Kaynakları › İzin · Kullanıcı detayı › İzinler |
|
||
| Sağlık birimi | Raporu Sağlık Kartı'na girer; kayıt izin listesine onaylı düşer | İK › Sağlık Kartları › İstirahat Raporları |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Şube kırılımı yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
#### 2.1 Talep
|
||
|
||
> İnsan Kaynakları › İzin Yönetimi. Kullanıcı Intranet Dashboard'dan kendi bakiye raporunu izler,
|
||
> izin talebi oluşturur, bir butonla taleplerini ve onay durumlarını takip eder (Performansım
|
||
> widget'ındaki Değerlendirmelerim gibi). İzin türüne göre gerekli alanlar doldurulur; bakiye
|
||
> yetmezse talep engellenir veya uyarı verilir; aynı tarihlerde çakışan talep oluşturulamaz.
|
||
> Sağlık Kartı › İstirahatler ile Rapor türündeki izin tek kayıttır. İzin bakiyesi kullanıcı
|
||
> kartında gösterilir. Alanlar: izin türü, başlangıç/bitiş tarihi ve saati, yarım gün, gün sayısı
|
||
> (otomatik), açıklama, ek belge, durum. Yıllık hak çalışma yılına göre hesaplanır. Onay önce
|
||
> departman müdürü (İş Pozisyonları'ndaki departman müdürü), sonra İK. Talep gelince yöneticiye
|
||
> bildirim gider. İK menüsü yalnız İK kullanır; widget'lar Aktif Anketler'in altına (sol kolon).
|
||
|
||
#### 2.2 Depodan okunanlar (sorulmadı)
|
||
|
||
- İzin türleri `Hr_T_LeaveType` (İK › Tanımlamalar): cinsiyet, yıllık en fazla gün, ücretli, yıllık izinden düşer, belge gerekir, yarım gün.
|
||
- Rapor kayıtları `Adm_T_UserSickLeave`; iki ekran kullanır: Sağlık Kartı (`App.Hr.HealthCardSickLeave`) ve kullanıcı detayı (`App.IdentityManagement.UserSickLeave`).
|
||
- Kıdem `AbpUsers.SeniorityStartDate` (boşsa `HireDate`), doğum `BirthDate`, cinsiyet `Gender`, departman/pozisyon `DepartmentId`/`JobPositionId`.
|
||
- Tatiller `Hr_T_WorkCalendar` (`Holiday` / `HalfDay`, `FREQ=YEARLY` tekrar).
|
||
- Pozisyon ağacı `Hr_T_JobPosition` (`DepartmentId` + `ParentId`); departmanda "müdür" alanı yoktur.
|
||
- Grid Workflow onaycıyı düğümde sabit tutuyordu — kayda göre değişen müdür için motor eki gerekti.
|
||
|
||
#### 2.3 Keşif turu cevapları
|
||
|
||
| # | Soru | Seçilen |
|
||
| --- | --- | --- |
|
||
| 1 | Onay akışı | Grid Workflow + motor eki: düğüm onaycısı `@Kolon` ise kayıttan okunur |
|
||
| 2 | Müdür nasıl bulunur | Departmanın en üst pozisyonu (üst pozisyonu başka departmanda ya da üstü olmayan); çalışan o pozisyondaysa bir üst pozisyonun sahibi; birden çok müdür varsa herhangi biri |
|
||
| 3 | Yıllık hak | İş Kanunu md.53 kademeleri + devir (kullanılmayan izin devreder) |
|
||
| 4 | Bakiye yetersiz | İzin türü bazında İK seçer: `BalanceExceedAction` = Engelle / Uyar ve kaydet |
|
||
| 5 | İK onaycısı | Düğümde sabit kullanıcı(lar) (İzin Talepleri akışının "İK Onayı" düğümü) |
|
||
| 6 | Gün sayısı | Ayarlar › İnsan Kaynakları › İzin'deki çalışma günleri + Çalışma Takvimi tatilleri (kullanıcı kararı: tüm İK ayarları bu grupta) |
|
||
| 7 | Rapor talebi | Onay akışından geçer; onaylanınca Sağlık Kartı'nda görünür (onay beklerken sağlık kartına ve puantaja düşmez), reddedilirse kalkar |
|
||
| 8 | Kullanıcı kartı | Kullanıcı detayına **İzinler** sekmesi (bakiye özeti + talepler + defter) |
|
||
| 9 | Üstü olmayan pozisyon (Genel Müdür) | Müdür adımı atlanır, talep doğrudan İK Onayı'na gider (üretim sırasında soruldu) |
|
||
|
||
#### 2.4 Üretimde verilen kararlar
|
||
|
||
| Konu | Karar | Neden |
|
||
| --- | --- | --- |
|
||
| Persona ekranında akış | **İzin Taleplerim** ekranında Workflow yoktur; ilk adımı (`Müdür Onayı` + müdür kullanıcı adları) kayıt sonrası prosedür yazar | Workflow alanlarını yazabilen persona ekranı, çalışanın durumu API ile "Onaylandı" yapmasına izin verirdi; alanlar İK yetkisine kilitli |
|
||
| Müdür ekranı | **Ekibimin İzin Talepleri** ayrı ekran, aynı akış başlıklarıyla; satır `ManagerIds` ile süzülür | Akış düğümleri ekrana bağlıdır, durum başlıkla eşleşir (`FindCurrentCriteria`) |
|
||
| İK onaycısının tek kaynağı | Kayıt sonrası prosedür İK adımına girerken onaycıyı **İzin Talepleri** akışının "İK Onayı" düğümünden okur | Ekibimin İzin Talepleri akışındaki İK düğümü ayrı düzenlenirse sapma olmasın |
|
||
| Yöneticinin geçişleri | Müdür yalnız Müdür Onayı → İK Onayı / Reddedildi yapabilir; başka geçiş geri alınır | Workflow alanları müdür ekranında yazılabilir olmak zorunda (motor ekranın kayıt yolunu kullanır) |
|
||
| Bakiye defteri | Hak ediş yılı başına satır; 0. yıl düzeltmeler ve ilk hak edişten önceki kullanım | Devirli kümülatif bakiyenin denetlenebilir dökümü |
|
||
| Açılış bakiyesi | **Bakiye Düzeltmeleri** (± gün) | Devirli hesapta sistem öncesi kullanım girilmezse geçmiş bütün yıllar kullanılmamış görünür |
|
||
| Bildirim | Uygulama içi + toast (`IzinTalebiOnayBekliyor`, `IzinTalebiSonuclandi`); Workflow `Inform` düğümü kullanılmadı | Inform yalnız e-posta gönderir ve onaycısı sabittir |
|
||
| Ek belge | `dxImageUpload` (base64, `nvarchar(MAX)`), listede gizli | Platform standardı |
|
||
| En üst pozisyon | Prosedür `RequiresManagerApproval`'ı yazar (1 = müdür onayı gerekir, 0 = atlanır); İzin Talepleri akışında Başlangıç ile Müdür Onayı arasında bu kolona bakan karşılaştırma düğümü vardır, çalışanın kendi talebinde prosedür durumu doğrudan İK Onayı yapar | Motorun karşılaştırma düğümü yalnız sayısal kolon okur (`EvaluateCondition`) ve satırı ekranın sorgusundan alır; kolon İzin Talepleri'nde gizli alandır |
|
||
| Form günü | Gün formda tarayıcıda önizlenir (hafta içi gün, yarım günde 0,5), kalıcı değer prosedürün hesabıdır; İzin Türü lookup'ı cascade değildir | Cascade ebeveyni çocuğu kilitler ve değiştiğinde temizler; ayrıntı §5.1 |
|
||
| Bildirim başlığı | Bildirim panelinde ve etkinlik kaydında tip adı yerine kaydın `Subject`'i gösterilir (bütün modüller) | Tip adı (`PerformansDurumDegisti`) koddur; konu çevrilmiş metindir |
|
||
|
||
#### 2.5 Varsayılan kalanlar
|
||
|
||
- Çalışma günleri Pzt–Cum; kademeler 14 / 20 / 26, genç/yaşlı en az 20 (ayarlarda değiştirilir).
|
||
- İzin türü varsayılanı: yıllık izinden düşen ya da yıllık sınırı olan türler **Engelle**, diğerleri **Uyar ve kaydet** (seed).
|
||
- Rapor kaydı `SickLeaveType = Disease`, gün sayısı takvim günü (Sağlık Kartı kuralı); izin talebindeki gün çalışma günüdür.
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
#### 3.1 İK menüsü
|
||
|
||
`İnsan Kaynakları › İzin Yönetimi` (`App.Hr.Leave`, sıra 14, `FcOvertime`) — yalnız İK.
|
||
|
||
| Sıra | Menü (TR / EN) | `ListFormCode` | Wizard | Kaynak | Alt formlar | Widget'lar |
|
||
| --- | --- | --- | --- | --- | --- | --- |
|
||
| 1 | İzin Talepleri / Leave Requests | `App.Hr.LeaveRequest` | `Hr_LeaveRequest.json` | `Hr_T_LeaveRequest` | — | Müdür Onayında · İK Onayında · Onaylanan (bu yıl) · Reddedilen (bu yıl) |
|
||
| 2 | İzin Bakiyeleri / Leave Balances | `App.Hr.LeaveBalance` | `Hr_LeaveBalance.json` | `Hr_V_LeaveSummary` (salt okunur) | `LeaveBalanceAdjustment`, `LeaveBalanceYear` (`Id → EmployeeId`) | Çalışan · Toplam Kalan Gün · Eksi Bakiye · Onay Bekleyen Gün |
|
||
|
||
Menüsüz alt formlar: **Bakiye Düzeltmeleri** (`App.Hr.LeaveBalanceAdjustment`, `Hr_T_LeaveBalanceAdjustment`),
|
||
**İzin Defteri** (`App.Hr.LeaveBalanceYear`, `Hr_V_LeaveBalanceYear`, salt okunur).
|
||
|
||
Görünümler: hepsi Grid, Card, Pivot, Chart.
|
||
|
||
#### 3.2 Çalışana ve müdüre ait ekranlar (menüsüz)
|
||
|
||
| Ekran | `ListFormCode` | Satır süzmesi | Yapılabilen |
|
||
| --- | --- | --- | --- |
|
||
| İzin Taleplerim | `App.Hr.MyLeaveRequest` | `EmployeeId = @USERID` | Ekle; karar verilmeden düzelt/sil. `EmployeeId` sunucuda `@USERID` ile yazılır |
|
||
| Bakiyem | `App.Hr.MyLeaveBalance` | `EmployeeId = @USERID` | Defteri görür |
|
||
| Ekibimin İzin Talepleri | `App.Hr.TeamLeaveRequest` | `ManagerIds` içinde kullanıcı | Müdür adımında Onayla / Reddet |
|
||
|
||
Talep formu doğrudan açılır: `/admin/form/App.Hr.MyLeaveRequest`.
|
||
|
||
#### 3.3 Intranet › Dashboard widget'ları
|
||
|
||
Sol kolon (`Column: 0`), Aktif Anketler'in (30) altında; kayıtlar `data/App.DeveloperKit.IntranetWidgets.json`.
|
||
|
||
| `Code` · sıra | Bileşen | `PermissionName` | Gösterir | Butonlar |
|
||
| --- | --- | --- | --- | --- |
|
||
| `my-leave` · 35 | `MyLeaveWidget` | `App.Hr.MyLeaveRequest` | Kalan / kullanılan / onay bekleyen gün, sonraki hak ediş, süren ilk 3 talep ve durumu | İzin Talebi Oluştur · Taleplerim · Bakiyem |
|
||
| `team-leave` · 36 | `TeamLeaveWidget` | `App.Hr.TeamLeaveRequest` | Onayımı bekleyen talep sayısı ve ilk 5'i, bugün izinde olanlar | Onay Bekleyenler |
|
||
|
||
Bileşenler code modunda, rotasızdır; veriyi ekranların kendi sorgusundan okur
|
||
(`GET /api/app/list-form-select/select`). Bakiye kartları `App.Hr.MyLeaveBalance` yetkisi yoksa gizlenir.
|
||
|
||
#### 3.4 Kullanıcı detayı › İzinler
|
||
|
||
`ui/src/views/admin/user-management/LeaveTab.tsx`: İzin Bakiyeleri satırından altı kart (hak edilen,
|
||
düzeltme, kullanılan, bekleyen, kalan, kullanılabilir), altında kullanıcıya süzülmüş **İzin Talepleri**
|
||
ve **İzin Defteri** listeleri. Her parça kendi ekran yetkisiyle görünür; İK buradan çalışan adına talep
|
||
ekleyebilir (yeni satırın `EmployeeId`'si süzgeçten dolar).
|
||
|
||
#### 3.5 Ayarlar
|
||
|
||
Ayarlar › İnsan Kaynakları › İzin (`App.HrSettings` › `App.HrSettings.Leave`, sağlayıcılar `T|G|D`):
|
||
|
||
| Kod | Varsayılan |
|
||
| --- | --- |
|
||
| `App.HrSettings.Leave.Work{Monday…Sunday}` | Pzt–Cum `True`, Cmt–Paz `False` |
|
||
| `App.HrSettings.Leave.AnnualDays1To5` / `AnnualDays5To15` / `AnnualDays15Plus` | 14 / 20 / 26 |
|
||
| `App.HrSettings.Leave.MinDaysYoungOld` | 20 |
|
||
|
||
SQL tarafı ayarı `dbo.Hr_F_HrSetting` ile ABP'nin sırasıyla okur (kiracı → genel → tanım varsayılanı).
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
```
|
||
AbpUsers ──< Hr_T_LeaveRequest >── Hr_T_LeaveType
|
||
│ └── Adm_T_UserSickLeave (SickLeaveId, Rapor türünde)
|
||
└──< Hr_T_LeaveBalanceAdjustment
|
||
Hr_V_LeaveBalanceYear (defter) ──▶ Hr_V_LeaveSummary (çalışan başına toplam)
|
||
```
|
||
|
||
| Nesne | Önemli kolonlar | Kural |
|
||
| --- | --- | --- |
|
||
| `Hr_T_LeaveRequest` | `BranchId` (şube, zorunlu — standart şube sözleşmesi, ekran `IsBranch`; `Hr_S_LeaveSickLeaveSync` raporu izne çevirirken çalışanın departman şubesini, yoksa çalışana / işlemi yapana atanmış ilk şubeyi yazar), `RequestNo`, `EmployeeId`/`EmployeeName`/`DepartmentId`/`JobPositionId`, `LeaveTypeId`, `StartDate`/`EndDate` (tarih+saat), `IsHalfDay`, `HalfDayPart` (Morning/Afternoon), `Days` (0,5 adımlı), `Description`, `DocumentFileName`/`DocumentContent`, `BalanceWarning`, `SickLeaveId`, `ManagerIds`/`ManagerUserNames`, `RequiresManagerApproval` (int, 1/0), `ApprovalStatus`/`ApprovalUser`/`ApprovalDate`/`ApprovalDescription`, `LastNotifiedStatus`, `IsActive` | `EndDate ≥ StartDate`; kiracı + tam audit |
|
||
| `Hr_T_LeaveBalanceAdjustment` | `EmployeeId`, `AdjustmentDate`, `Days` (≠ 0, ±), `Reason`, `IsActive` | — |
|
||
| `Hr_T_LeaveType` (+ kolon) | `BalanceExceedAction` (`Block`/`Warn`, varsayılan `Block`) | Kayıpsız `ALTER ADD` |
|
||
| `Hr_V_LeaveBalanceYear` | `Id` (`{EmployeeId}-{YearNo}`), `YearNo`, `AccrualDate`, `PeriodEndDate`, `EntitledDays`, `UsedDays`, `PendingDays`, `RemainingDays`, `CumulativeRemainingDays`, `NextAccrualDate`, `NextAccrualDays` | Görünüm |
|
||
| `Hr_V_LeaveSummary` | `Id` (= kullanıcı), `ServiceYears`, `EntitledDays`, `AdjustmentDays`, `UsedDays`, `PendingDays`, `RemainingDays`, `AvailableDays`, `NextAccrualDate/Days`, `IsActive` | Görünüm |
|
||
|
||
Durum değerleri (Workflow düğüm başlıkları): `Onaya Gönderildi` · `Müdür Onayı` · `İK Onayı` · `Onaylandı` · `Reddedildi`.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
#### 5.1 Gün sayısı (`Hr_F_LeaveWorkDays`)
|
||
|
||
Başlangıç–bitiş tarihleri (saat dikkate alınmaz) arasındaki her gün: ayarlarda çalışma günü değilse 0;
|
||
Çalışma Takvimi'nde `Holiday` ise 0, `HalfDay` ise 0,5; aksi 1. Yıllık tekrarlı satır başlangıç
|
||
yılından itibaren her yıl aynı gün/aya düşer. Yarım gün talepte sonuç en fazla 0,5'tir.
|
||
|
||
Formda gün veri girerken dolar (Başlangıç, Bitiş ve Yarım Gün alanlarının `EditorScript`'i, `custom` tarifi).
|
||
Bu bir önizlemedir: iki tarih arasındaki hafta içi günler sayılır, yarım günde 0,5 yazılır; Çalışma Günleri
|
||
ayarı ve Çalışma Takvimi tatilleri formda düşülmez. Kayıtta prosedür günü `Hr_F_LeaveWorkDays` ile yeniden
|
||
hesaplar ve kayıtlı değer odur.
|
||
|
||
| Olay | Formda |
|
||
| --- | --- |
|
||
| Başlangıç / Bitiş değişir | Gün yeniden hesaplanır; yarım gün açıkken Başlangıç değişirse Bitiş onu izler |
|
||
| Yarım Gün işaretlenir | Bitiş = Başlangıç, Gün 0,5, Yarım Gün Dilimi açılır |
|
||
| Yarım Gün kaldırılır | Dilim temizlenip kilitlenir, Gün tam gün olarak hesaplanır |
|
||
|
||
Notlar:
|
||
|
||
- **Dilim kilidi `custom` kuralıdır** (`readOnly` tarifi değil). Grid popup'ında editörler yeniden çizilince
|
||
kural açılış olayıyla (`isReady`) tekrar çalışır; o anda form verisi güncel değildir (`form.getEditor` popup
|
||
editörünü döndürmez) ve tarif Yarım Gün'ü eski hâliyle okuyup kilidi geri kapatırdı. Kural bu çalışmada
|
||
değeri grid'in düzenlenen satırından (`editor.component.cellValue`) okur; form sayfasında form verisinden.
|
||
- **Dilimin script'i yoktur.** Form sayfası script'li bir editör değişince `formData`'yı baştan yazar; bu sırada
|
||
açılır liste temizlenip yeniden dolar ve script'i olsaydı kendini tetikleyip sonsuz döngüye girerdi.
|
||
Tutarlılığı prosedür sağlar: yarım gün değilse dilim silinir, yarım günde boş dilim `Morning` olur.
|
||
- **İzin Türü düz bir lookup'tır**, cascade kullanılmaz: bool ebeveyn `false` iken çocuğu kilitler, tarih
|
||
değişince değeri silerdi.
|
||
|
||
#### 5.2 Yıllık hak ve bakiye (`Hr_V_LeaveBalanceYear`)
|
||
|
||
| Değer | Formül |
|
||
| --- | --- |
|
||
| Hak ediş tarihi | Kıdem başlangıcı + n yıl (n = 1, 2, …), bugün ve (varsa) işten çıkış tarihine kadar |
|
||
| Hak edilen | n ≤ 5 → `AnnualDays1To5`; 6 ≤ n ≤ 14 → `AnnualDays5To15`; n ≥ 15 → `AnnualDays15Plus`. Hak ediş tarihindeki yaş ≤ 18 ya da ≥ 50 ise en az `MinDaysYoungOld` |
|
||
| Kullanılan / bekleyen | Yıllık izinden düşen türdeki onaylı / onay bekleyen taleplerin günü; talep başlangıcının düştüğü hak ediş dönemine yazılır |
|
||
| 0. yıl | Düzeltmelerin toplamı ve ilk hak edişten önce başlayan talepler |
|
||
| Kalan | Σ(hak edilen + düzeltme) − Σ kullanılan (devirli) |
|
||
| Kullanılabilir | Kalan − onay bekleyen |
|
||
|
||
#### 5.3 Kayıt sonrası (`Hr_S_LeaveRequestAfterSave`)
|
||
|
||
Her ekleme/güncellemede (Workflow kararı dahil) çalışır; `THROW` kaydı geri alır.
|
||
|
||
1. Çalışan adı, departman, pozisyon kullanıcı kartından; talep no `IZN-YYYY-00001`. (İK formunda çalışan seçilince departman ve pozisyon formda da hemen dolar: Çalışan lookup'ı iki kolonu döndürür, `copy` tarifi yazar.)
|
||
2. Müdür (§2.3 karar 2) bulunur → `ManagerIds`, `ManagerUserNames`. Bulunamazsa: çalışanın pozisyonunun üst pozisyonu yoksa (Genel Müdür) `RequiresManagerApproval = 0` yazılır ve müdür adımı atlanır; değilse ve talep müdür adımına kadar ise `THROW 51110` (yapılandırma eksik).
|
||
3. Müdür ekranından izinsiz geçiş önceki duruma geri alınır.
|
||
4. Çalışanın yeni talebi `Müdür Onayı`'na (müdür adımı atlanıyorsa `İK Onayı`'na) alınır; adıma girerken onaycı yazılır (müdür adımı → `ManagerUserNames`, İK adımı → İzin Talepleri akışının "İK Onayı" düğümü).
|
||
5. Gün sayısı hesaplanır.
|
||
6. Talep sonuçlanmamışsa doğrulanır:
|
||
|
||
| Kod | Kural |
|
||
| --- | --- |
|
||
| 51111 | Tür cinsiyeti çalışana uymuyor |
|
||
| 51112 | Tür yarım güne izin vermiyor |
|
||
| 51113 | Yarım günde başlangıç ve bitiş aynı gün olmalı |
|
||
| 51114 | Tür belge istiyor, belge yok |
|
||
| 51115 | Aralıkta çalışma günü yok |
|
||
| 51116 | Reddedilmemiş başka bir talep ya da talebe bağlı olmayan istirahat aynı güne düşüyor (aynı günün iki ayrı yarısı serbest) |
|
||
| 51117 | Yıllık izinden düşen türde gün > kullanılabilir bakiye, ya da türün yıllık sınırı aşılıyor — tür `Block` ise; `Warn` ise kayıt yapılır, uyarı `BalanceWarning`'e yazılır |
|
||
| 51118 | Talebin (yeni ya da eski) tarihleri kapalı puantaj dönemine düşüyor — ekleme, düzeltme, karar ve silme reddedilir (`Hr_F_TimesheetPeriodClosed`; eski tarihleri `Hr_S_LeaveRequestGuard` denetler) |
|
||
| 51119 | Tarihler çalışanın işe giriş – işten çıkış aralığının dışında |
|
||
|
||
7. Rapor (`Code = Sick`) türünde talep **onaylandığında** istirahat satırı açılır/güncellenir; reddedilen, onay bekleyen ya da türü değişen talebin istirahati kalkar. Rapor türü dışındaki talebin gün sayısı rapora denk gelen günleri saymaz (`Hr_F_LeaveNetDays`); rapor değişince çalışanın diğer taleplerinin gün sayısı yenilenir (`Hr_S_LeaveDaysRefresh`).
|
||
8. Silinen talep (silme sonrası komut aynı prosedürü çağırır): bağlı istirahat kalkar, puantaj yeniden hesaplanır.
|
||
9. Durum bildirim taşıyan bir değere geçtiyse bir kez bildirim gider, `LastNotifiedStatus` güncellenir.
|
||
10. Puantaj: talebin günleri yeniden hesaplanır; tarihi değişen talebin eski günlerini hesap kendisi aralığa katar.
|
||
|
||
#### 5.4 Satır koruması (`Hr_S_LeaveRequestGuard`, before-command)
|
||
|
||
| Aktör | Kural |
|
||
| --- | --- |
|
||
| Çalışan | Yalnız kendi talebi (`51100`); durum `Onaya Gönderildi`/`Müdür Onayı` değilse düzeltme/silme yok (`51101`) |
|
||
| Müdür | Silemez (`51102`); `ManagerIds` içinde olmalı (`51103`); talep `Müdür Onayı`'nda olmalı (`51104`) |
|
||
| İK | Serbest |
|
||
| Hepsi | Talebin kayıttaki (eski) tarihleri kapalı puantaj dönemine düşüyorsa düzeltme/silme yok (`51118`) |
|
||
|
||
Alan kilidi: persona ekranlarında çalışanın/müdürün değiştirmemesi gereken alanların yazma yetkisi
|
||
`App.Hr.LeaveRequest.Create/.Update`'e bağlıdır; sunucu yetkisi olmayan alanı düşürür. Bu yüzden
|
||
çalışan/müdür rolüne İzin Talepleri'nin `.Create/.Update` yetkisi verilmez.
|
||
|
||
#### 5.5 Rapor ↔ izin (tek kayıt)
|
||
|
||
| Nereden | Ne olur |
|
||
| --- | --- |
|
||
| İzin talebi, tür Rapor | Onayda `Adm_T_UserSickLeave` satırı açılır (`SickLeaveId`); onaylı talep güncellenince güncellenir, silinince/reddedilince kalkar |
|
||
| Sağlık Kartı › İstirahat Raporları ya da kullanıcı detayı › İstirahatler | `Hr_S_LeaveSickLeaveSync`: onaylı Rapor talebi açılır (onay akışına girmez), güncellemede tarih/gün, silmede (silme sonrası komut aynı prosedürü çağırır) talep kalkar. Rapora denk gelen yıllık izin günleri bakiyeye döner. Kapalı puantaj ayına düşen rapor kaydedilmez (`51120`). Kiracıda `Sick` kodlu tür yoksa eşleme yapılmaz |
|
||
| Çalışma Takvimi | Takvim satırı kaydedilince denk gelen taleplerin gün sayısı yeniden hesaplanır (`Hr_S_WorkCalendarAfterSave`) |
|
||
|
||
#### 5.6 Onay akışı (Grid Workflow)
|
||
|
||
`Onaya Gönderildi` (Start) → `Müdür Onayı Gerekli mi?` (Compare, `RequiresManagerApproval = 1`) →
|
||
evet: `Müdür Onayı` (Approval, `@ManagerUserNames`) / hayır: doğrudan `İK Onayı` (Approval, seed'de
|
||
`system@sozsoft.com`) → `Onaylandı` (End); iki onay adımının reddi → `Reddedildi` (End).
|
||
Karşılaştırma düğümü yalnız İzin Talepleri akışındadır (akış İK grid'inden eklenen kayıtta orada başlar);
|
||
Ekibimin İzin Talepleri akışı başlatılmaz, yalnız müdür adımından ilerler. Akış iki ekranda aynı başlıklarla durur. İK onaycısı İzin
|
||
Talepleri › ListForm › Workflow › "İK Onayı" düğümünden değiştirilir (§2.4).
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Dal `App.Hr.Leave` → `App.Hr.LeaveRequest`, `App.Hr.LeaveBalance`
|
||
(altında `LeaveBalanceAdjustment`, `LeaveBalanceYear`). Kökte menüsüz `App.Hr.MyLeaveRequest`,
|
||
`App.Hr.MyLeaveBalance`, `App.Hr.TeamLeaveRequest`. Ayar: `App.HrSettings` › `App.HrSettings.Leave`
|
||
(Administration grubu, `App.Setting` altında). Her ekranda `.Create/.Update/.Delete/.Export/.Import/.Note`.
|
||
**Hiçbir yetki role otomatik atanmaz.**
|
||
|
||
| Rol | Verilecek yetkiler |
|
||
| --- | --- |
|
||
| Tüm çalışanlar | `App.Hr.MyLeaveRequest` (+ `.Create/.Update/.Delete`), `App.Hr.MyLeaveBalance` |
|
||
| Müdürler | Yukarıdakiler + `App.Hr.TeamLeaveRequest` (+ `.Update` — Workflow kararı güncelleme yetkisi ister) |
|
||
| İK | `App.Hr.Leave` dalının tamamı + `App.HrSettings.Leave` |
|
||
|
||
Widget'lar liste okuma yetkisiyle görünür (İzinlerim `App.Hr.MyLeaveRequest`, Ekibimin İzinleri `App.Hr.TeamLeaveRequest`).
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `AbpUsers` | Çalışan, kıdem, doğum tarihi, cinsiyet, departman/pozisyon; onaycı kullanıcı adları |
|
||
| `Hr_T_JobPosition` / `Hr_T_Department` | Departman müdürü çözümü |
|
||
| `Hr_T_LeaveType` | Tür kuralları (cinsiyet, yarım gün, belge, yıllık sınır, yıllık izinden düşme, aşım davranışı) |
|
||
| `Hr_T_WorkCalendar` | Tatil ve yarım günler |
|
||
| `AbpSettings` / `Sas_H_SettingDefinition` | Çalışma günleri ve kademeler |
|
||
| `Adm_T_UserSickLeave` | Rapor eşlemesi |
|
||
| Puantaj ve Devam Takibi | `Hr_S_LeaveRequestAfterSave` sonunda talebin günleri `Hr_S_TimesheetCalculate` ile yeniden hesaplanır: onaylı izin İzinli, rapor Raporlu gün olur; ücretli izne denk gelen tatil İzinli değil tatil, ücretsiz izin hafta sonu dahil İzinli yazılır. Tarihi değişen ya da silinen talebin eski günleri aynı işlemde düzelir (Puantaj ve Devam Takibi bölümü §7.1). Kapalı puantaj ayına düşen talep değiştirilemez; onay bekleyen talebi olan ay kapatılamaz. Çalışma günü ayarları puantajda hafta tatilini de belirler |
|
||
| Bildirimler | `IzinTalebiOnayBekliyor` (müdür / İK onaycısı), `IzinTalebiSonuclandi` (çalışan); kurallar `Custom` + `UiActivity`/`UiToast`. Metinler `App.Hr.Leave.Notification.{Approval,Result}.{Subject,Message}` (TR), yer tutucular `[Employee]`, `[LeaveType]`, `[StartDate]`, `[EndDate]`, `[Days]`, `[Status]`. Yazan: `Hr_S_LeaveNotify` |
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İK Ayarlar › İnsan Kaynakları › İzin'de Cumartesi'yi çalışma günü yapar (gerekirse); eski çalışanlar için İzin Bakiyeleri › Bakiye Düzeltmeleri'ne sistem öncesi kullanılan günleri eksi olarak girer.
|
||
2. Muhasebe Şefi panodaki **İzinlerim** widget'ında kalan 18 günü görür, **İzin Talebi Oluştur** ile 3 günlük yıllık izin açar.
|
||
3. Gün kayıtta 3 hesaplanır, talep `Müdür Onayı`'na düşer, Muhasebe Müdürü bildirim alır.
|
||
4. Müdür **Ekibimin İzinleri** → Onay Bekleyenler'den talebi seçip **Onayla** der → talep `İK Onayı`'na geçer, İK onaycısı bildirim alır.
|
||
5. İK İzin Talepleri'nde onaylar → `Onaylandı`; çalışan bildirim alır, bakiye 15'e iner.
|
||
6. Çalışan rapor alır, Rapor türünde talep açıp raporu ekler → Sağlık Kartı › İstirahat Raporları'nda görünür; aynı onay akışından geçer.
|
||
7. Sağlık birimi başka bir raporu doğrudan Sağlık Kartı'na girer → İzin Talepleri'nde onaylı Rapor talebi olarak görünür.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**"Departman müdürü bulunamadı" hatası.** Çalışanın kullanıcı kartında departman ve pozisyon dolu olmalı; departmanın en üst pozisyonunda (ya da üst pozisyonlarda) aktif bir kullanıcı bulunmalı (§5.3 adım 2). Üst pozisyonu olmayan çalışan (Genel Müdür) bu hatayı almaz; talebi doğrudan İK onayına gider.
|
||
|
||
**Genel Müdür'ün talebini kim onaylar?** Müdür adımı atlanır, yalnız İK onaylar (§2.3 karar 9).
|
||
|
||
**Gün sayısı beklenenden az.** Hafta sonu, ayarlarda kapalı gün ve Çalışma Takvimi tatilleri sayılmaz; arife 0,5 sayılır.
|
||
|
||
**Bakiye çok yüksek görünüyor.** Devirli hesap kıdem başlangıcından bugüne bütün yılları sayar; sistem öncesi kullanılan izin Bakiye Düzeltmeleri'ne eksi olarak girilmelidir.
|
||
|
||
**Bakiyem/İzinlerim'de kıdem uyarısı.** Kullanıcı kartında Kıdem Başlangıç ya da İşe Giriş tarihi yok.
|
||
|
||
**Talebimi değiştiremiyorum.** Müdür karar verdikten sonra çalışan değiştiremez/silemez (`51101`); İK ile görüşülür.
|
||
|
||
**Müdür Onayla butonunu görmüyor.** Rolünde `App.Hr.TeamLeaveRequest.Update` olmalı; talep `Müdür Onayı`'nda ve kullanıcı o departmanın müdürü olmalı.
|
||
|
||
**İK onaycısı nasıl değişir?** İzin Talepleri › ListForm › Workflow › "İK Onayı" düğümü. Ekibimin İzin Talepleri'ndeki aynı düğüm akışı ilerletir; onaycı kayda İzin Talepleri düğümünden yazılır.
|
||
|
||
**Bildirim gelmiyor.** Kiracıda `IzinTalebiOnayBekliyor` / `IzinTalebiSonuclandi` tipi ve `Custom` kuralları olmalı (yeni kiracıya kopyalanır, mevcut kiracıda Administration › Bildirimler'den eklenir).
|
||
|
||
**Kullanıcı detayındaki İstirahatler'den girilen rapor izinlere düşmüyor.** O ekranın kancaları C# seeder'dadır (`ListFormSeeder_Administration`); daha önce kurulmuş bir veritabanında ekran yeniden kurulmadıkça kanca yoktur. Sağlık Kartı ekranı wizard'dır ve migrate ile güncellenir.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_LeaveRequest.sql`, `Hr_T_LeaveBalanceAdjustment.sql`, `Hr_T_LeaveType.sql` (`BalanceExceedAction`) | Tablolar |
|
||
| `…/Hr_F_HrSetting.sql`, `Hr_F_LeaveWorkDays.sql` | Ayar okuma, gün sayısı |
|
||
| `…/Hr_V_LeaveBalanceYear.sql`, `Hr_V_LeaveSummary.sql` | Bakiye görünümleri |
|
||
| `…/Hr_S_LeaveRequestAfterSave.sql`, `Hr_S_LeaveRequestGuard.sql`, `Hr_S_LeaveNotify.sql`, `Hr_S_LeaveSickLeaveSync.sql` | Prosedürler |
|
||
| `configs/seeds/wizard/{LeaveRequest,MyLeaveRequest,TeamLeaveRequest,LeaveBalance,LeaveBalanceAdjustment,LeaveBalanceYear,MyLeaveBalance}.json` | 7 wizard; `Hr_LeaveType.json` (alan), `Hr_HealthCardSickLeave.json` (kancalar) |
|
||
| `configs/seeds/data/App.DeveloperKit.CustomComponents/{23744edc-eda9-512e-8079-fe2e8e5fd2a8,3b7b16c6-aa96-5765-8e19-fe5e727feb52}.json` | `MyLeaveWidget`, `TeamLeaveWidget` |
|
||
| `configs/seeds/data/App.DeveloperKit.IntranetWidgets.json`, `App.SettingDefinitions.json`, `App.Notifications.Notification{Types,Rules}.json`, `App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json`, `App.Hr.LeaveType.json` | Seed satırları |
|
||
| `api/src/Sozsoft.Platform.Application/ListForms/ListFormWorkflowAppService.cs` | `@Kolon` onaycı |
|
||
| `api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs` | Kullanıcı detayı istirahat kancaları |
|
||
| `ui/src/views/admin/listForm/workflow/WorkflowCriteria.tsx` | Tasarımcıda alan onaycısı seçeneği |
|
||
| `ui/src/views/admin/user-management/LeaveTab.tsx`, `Details.tsx` | İzinler sekmesi |
|
||
|
||
Kurulum: DB Migrate (SQL nesneleri, ekranlar `WizardDataSeeder`, satırlar `ListFormSeedDataApplier`),
|
||
ardından rollere yetki (§6). Ayar tanımları uygulama yeniden başlayınca ayar ekranında görünür.
|
||
|
||
Geri alma: Wizard Manager'dan 7 wizard silinir (alt formlar önce); tabloları düşürmek onayda seçilirse olur.
|
||
Widget bileşenleri ve pano kayıtları, bildirim tip/kural satırları, ayar tanımları, `Hr_F_*`/`Hr_V_*`/`Hr_S_Leave*`
|
||
nesneleri elle kaldırılır. `BalanceExceedAction` kolonu kalır (kayıpsız ekleme geri alınmaz).
|
||
|
||
<!-- module-doc:section App.Hr.Attendance -->
|
||
## Puantaj ve Devam Takibi (`App.Hr.Attendance`)
|
||
|
||
Günlük giriş/çıkış hareketlerinden (PDKS, Excel aktarımı, elle giriş) çalışan × gün puantajı;
|
||
personel bazlı aylık puantaj, dönem kapanışı ve PDKS'nin hareket gönderdiği uç. Kişi eşlemesi kullanıcı
|
||
kartındaki PDKS Kart No / Sicil No alanlarıyladır.
|
||
İzin Yönetimi (onaylı izin → İzinli), Sağlık Kartı (istirahat → Raporlu), Çalışma Takvimi (resmî
|
||
tatil / arife) ve Vardiyalar (saat, mola, tolerans) puantajın girdisidir. Çalışan kendi puantajını
|
||
**Intranet › Dashboard**'daki **Puantajım** widget'ından izler; İK menüsü İK içindir. Wizard ekranları,
|
||
SQL nesneleri, custom component widget'ı, Custom Endpoint ve zamanlanmış işle kuruludur. Çerçeve dışında
|
||
tek ek vardır (kullanıcı onayıyla): kullanıcı detayındaki **Puantaj** sekmesi.
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Çalışan | Seçtiği ayın net saatini, geç kalma/erken çıkış dakikasını, fazla mesaisini, devamsız/izinli/raporlu günlerini ve yıllık toplamı (270 saatlik fazla mesai sınırıyla) görür | Intranet panosu: **Puantajım** widget'ı → Puantajım (aylar) → ayın günleri · Profil › Puantajım (aylık puantaj salt okunur) |
|
||
| İK | Hareketleri izler/düzeltir, elle takip edilen çalışanın gelmediği günü işaretler, aylık puantajı izler, ayı yeniden hesaplar ve kapatır, çalışanın PDKS Kart No'sunu kullanıcı kartına (İş sekmesi) girer, toleransı ve fazla mesai kurallarını ayarlar | İK › Puantaj ve Devam Takibi · Ayarlar › İnsan Kaynakları › Puantaj · Kullanıcı detayı › Puantaj |
|
||
| PDKS (servis kullanıcısı) | Kart okutmalarını toplu gönderir | `POST /api/app/custom-endpoint/hr/attendance/` |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Şube kırılımı yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
#### 2.1 Talep
|
||
|
||
> Human Resources → Puantaj ve Devam Takibi modülü: günlük hareketler, personel bazlı aylık puantaj.
|
||
> Intranet › Dashboard'da aylık puantajıma ulaşabileceğim, ilgili ayın durumunu ve yıllık toplamı gösteren
|
||
> widget (sol kolon, anket tarafı). Kolonlar: ilk giriş, son çıkış, net çalışma süresi, mola düşümü, geç
|
||
> kalma (dk), erken çıkış (dk), fazla mesai (saat), gün tipi (çalışma, hafta tatili, resmî tatil, izinli,
|
||
> raporlu, devamsız). Tolerans vardiya bazında (ör. 10 dk), ayarlardan dinamik. Haftalık 45 saati aşan
|
||
> çalışma fazla mesaidir, ücreti %50 zamlıdır (4857 md. 41), yıllık üst sınır 270 saat; ayarlardan
|
||
> yönetilir. Veri elle yazılabilir ya da PDKS'den akabilir. Kullanıcı detayında İzinler gibi bir Puantaj
|
||
> sekmesi. Diğer modüllerle core koda dokunmadan entegre olmalı.
|
||
|
||
#### 2.2 Depodan okunanlar (sorulmadı)
|
||
|
||
- Vardiya `Hr_T_Shift` (`StartTime`/`EndTime` `SS:dd` metin, `BreakMinutes`, `WorkingHours`, gece vardiyası); çalışanın vardiyası `AbpUsers.ShiftId`.
|
||
- Tatiller `Hr_T_WorkCalendar` (`Holiday` / `HalfDay`, `FREQ=YEARLY`); hafta tatili İzin Yönetimi'nin `App.HrSettings.Leave.Work{Gün}` ayarları.
|
||
- Onaylı izin `Hr_T_LeaveRequest.ApprovalStatus = 'Onaylandı'`; rapor `Adm_T_UserSickLeave`.
|
||
- İstihdam `AbpUsers.HireDate` / `TerminationDate`; departman/pozisyon `DepartmentId` / `JobPositionId`.
|
||
- Kullanıcı kartında (İş sekmesi) PDKS Kart No (`AbpUsers.PdksCardNo`) ve Sicil No (`RegistrationNo`) alanları var; ayrı kart tablosu açılmadı.
|
||
- Zamanlanmış işin saklı yordamı parametresiz çağrılır (`PlatformBackgroundWorker`); Custom Endpoint gövdesindeki dizi ham JSON metni olarak bağlanır.
|
||
|
||
#### 2.3 Keşif turu cevapları
|
||
|
||
| # | Soru | Seçilen |
|
||
| --- | --- | --- |
|
||
| 1 | Veri modeli | Ham hareket (`Hr_T_AttendanceLog`) + hesaplanan gün (`Hr_T_Timesheet`); İK günü elle düzeltebilir, düzeltilen gün yeniden hesapta ezilmez |
|
||
| 2 | Tolerans yeri | Vardiyada (`LateToleranceMinutes`, `EarlyLeaveToleranceMinutes`), boşsa Ayarlar › Puantaj (10 dk) |
|
||
| 3 | Geç kalma dakikası | Tolerans aşılırsa dakikanın tamamı yazılır, aşılmazsa 0 |
|
||
| 4 | Fazla mesai | Haftalık (Pzt–Paz) birikim 45 saati aştığı günden itibaren aşan kısım o günlere; hafta tatili ve resmî tatildeki çalışmanın tamamı; yıllık 270 saati aşan satır işaretlenir (engellemez) |
|
||
| 5 | PDKS | Excel import + API ucu (Custom Endpoint); kişi eşlemesi kullanıcı kartındaki PDKS Kart No, Sicil No ya da kullanıcı adıyla |
|
||
| 6 | Mola | `MAX(vardiya molası, gün içi okutulan çıkış→giriş aralıkları)` |
|
||
| 7 | Hesap zamanı | Hareket kaydında (o hafta) + gece işi (okutmasız günler) + dönem kaydı (ay) |
|
||
| 8 | Kapanış | İK ayı kilitler, onay akışı yok; müdür ekranı/widget'ı yok |
|
||
| 9 | Kullanıcı detayı sekmesi | Core istisnası onaylandı (`Details.tsx` + `TimesheetTab.tsx`, İzinler sekmesi emsali) |
|
||
| 10 | Elle takip (üretim sırasında) | Elle takipte yalnız gelinmeyen gün yazılır; yazılmayan iş günü "geldi" kabul edilir |
|
||
|
||
#### 2.4 Üretimde verilen kararlar
|
||
|
||
| Konu | Karar | Neden |
|
||
| --- | --- | --- |
|
||
| Takip türü | Çalışan bazında otomatik: kullanıcı kartında PDKS Kart No'su olan çalışan **ilk PDKS/aktarım okutmasının gününden itibaren** okutmayla takip edilir (okutmasız iş günü Devamsız); diğerleri elle takip edilir (kayıtsız iş günü vardiya saatleriyle `IsAssumed`). Elle girilen hareket takip türünü değiştirmez | Ayrı bir ayar gerektirmez; kartın sonradan verilmesi geçmiş günleri devamsıza çevirmez |
|
||
| Gün sınırı | Hareketin iş günü vardiya bitişi ile bir sonraki başlangıç arasındaki boşluğun ortasından ayrılır (`Hr_V_AttendanceShift.DayOffset`) | Gece vardiyasının 23:50 okutması vardiyanın başladığı ertesi güne yazılır |
|
||
| Okutma yönü | `In` / `Out` / `Auto`; `Auto` sıraya göre giriş/çıkış sayılır | PDKS'lerin çoğu yön göndermez |
|
||
| Elle düzeltme | Günlük Puantaj'da kaydedilen gün `IsManual = 1` olur; otomatiğe dönmek için satır silinir (yeniden hesap aynı günü kurar) | Ekrandan "elle mi" bilgisini ayrıca istemeden yeniden hesabın düzeltmeyi ezmesini önler |
|
||
| Kapalı dönem | Hesap kapalı ayın günlerini yazmaz, yalnız haftalık birikime alır; ekrandan gelen hareket/gün değişikliği `THROW` ile geri alınır; PDKS/gece işi okutmayı `ClosedPeriod` hatasıyla işaretler | PDKS gönderimi tek bir eski okutma yüzünden durmasın |
|
||
| Kurulum sırası | Vardiya çözümü view'dadır (`Hr_V_AttendanceShift`) | SQL nesneleri dosya adına göre kurulur; `Hr_F_*` fonksiyonları `Hr_T_*` tablolarından önce oluşur |
|
||
| Gece işi kapsamı | `Scope = Host ve Kiracılar`; prosedür veritabanındaki bütün kiracıları işler ve aynı gün işlenen kiracıyı dönemin `NightlyAt` değeriyle atlar | Saklı yordam kiracı parametresi almaz |
|
||
| İzin entegrasyonu | `Hr_S_LeaveRequestAfterSave` ve `Hr_S_LeaveSickLeaveSync` sonunda talebin/raporun günleri yeniden hesaplanır | Onaylı izin ve rapor anında puantaja düşer; çekirdek koda dokunulmaz |
|
||
| Aylık özet anahtarı | `PeriodKey = {EmployeeId}-{YYYYMM}` hem view'ın `Id`'si hem günlük satırın kolonudur | Alt form ilişkisi tek alanla kurulur |
|
||
| Widget sınıfları | Bileşen sınıfları `className` literalleriyle yazılır, koşullu kısım dizge birleştirmeyle eklenir | Safelist üreteci şablon dizgisindeki ifadeyi sınıf sanır |
|
||
|
||
#### 2.5 Varsayılan kalanlar
|
||
|
||
- Varsayılan vardiya 08:00–18:00, mola 60 dk (vardiyası olmayan çalışan için, ayarlarda değişir).
|
||
- İzinli/raporlu gün haftalık 45 saat birikimine 0 katkı verir; o gün okutma varsa net süre birikime girer.
|
||
- Yarım gün izinli günde geç/erken yazılmaz; arifede (`HalfDay`) vardiya süresinin yarısında biter.
|
||
- Yalnız giriş okutması olan gün `IsIncomplete` (Eksik Okutma) işaretlenir, net süre 0'dır.
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
#### 3.1 İK menüsü
|
||
|
||
`İnsan Kaynakları › Puantaj ve Devam Takibi` (`App.Hr.Attendance`, sıra 15, `FcAlarmClock`) — yalnız İK.
|
||
|
||
| Sıra | Menü (TR / EN) | `ListFormCode` | Kaynak | Alt formlar | Widget'lar |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 1 | Günlük Hareketler / Attendance Events | `App.Hr.AttendanceLog` | `Hr_T_AttendanceLog` | — | Bugün · PDKS (bu ay) · Manuel (bu ay) · Hatalı |
|
||
| 2 | Günlük Puantaj / Daily Timesheet | `App.Hr.Timesheet` | `Hr_T_Timesheet` | — | Devamsız gün · Geç kalınan gün · Fazla mesai saati · Eksik okutma (bu ay) |
|
||
| 3 | Aylık Puantaj / Monthly Timesheet | `App.Hr.TimesheetMonthly` | `Hr_V_TimesheetMonthly` (salt okunur) | `App.Hr.Timesheet` (`Id → PeriodKey`) | Çalışan · Fazla mesai · Devamsız gün (bu ay) · Yıllık sınırı aşan |
|
||
| 4 | Puantaj Dönemleri / Timesheet Periods | `App.Hr.TimesheetPeriod` | `Hr_T_TimesheetPeriod` | — | Açık · Kapalı · Toplam |
|
||
|
||
Görünümler: hepsi Grid, Card, Pivot, Chart. Günlük Puantaj'da ekleme yoktur (günleri hesap kurar).
|
||
Koşullu biçim: gün tipi (Devamsız kırmızı, Raporlu mor, İzinli mavi, tatiller gri), geç/erken/fazla
|
||
mesai > 0, hareket hatası, aylık satırda yıllık sınırın aşılması (satır).
|
||
|
||
#### 3.2 Çalışana ait ekranlar (menüsüz)
|
||
|
||
| Ekran | `ListFormCode` | Satır süzmesi | Yapılabilen |
|
||
| --- | --- | --- | --- |
|
||
| Puantajım | `App.Hr.MyTimesheet` | `EmployeeId = @USERID` (`Hr_V_TimesheetMonthly`) | Ayları görür; detayda ayın günleri |
|
||
| Puantaj Günlerim | `App.Hr.MyTimesheetDay` | `EmployeeId = @USERID` (`Hr_T_Timesheet`) | Puantajım'ın sekmesi (`Id → PeriodKey`), salt okunur |
|
||
|
||
#### 3.3 Intranet › Dashboard widget'ı
|
||
|
||
Sol kolon (`Column: 0`), İzinlerim'in (35/36) altında; kayıt `data/App.DeveloperKit.IntranetWidgets.json`.
|
||
|
||
| `Code` · sıra | Bileşen | `PermissionName` | Gösterir | Buton |
|
||
| --- | --- | --- | --- | --- |
|
||
| `my-timesheet` · 37 | `MyTimesheetWidget` | `App.Hr.MyTimesheet` | Ay seçici (varsayılan içinde bulunulan ay); net saat, çalışılan gün, fazla mesai, geç kalma dk, erken çıkış dk, devamsız gün; izinli/raporlu/tatil günü; yıl toplamı (net saat, geç kalma, devamsız) ve fazla mesai / yıllık sınır çubuğu | Puantajım |
|
||
|
||
Bileşen code modunda, rotasızdır; veriyi Puantajım ekranının sorgusundan okur (`GET /api/app/list-form-select/select`).
|
||
|
||
#### 3.4 Kullanıcı detayı › Puantaj
|
||
|
||
`ui/src/views/admin/user-management/TimesheetTab.tsx`: içinde bulunulan yılın sekiz kartı (çalışma günü,
|
||
net saat, fazla mesai — yıllık sınırı aşınca kırmızı —, geç kalma, erken çıkış, devamsız, izinli, raporlu),
|
||
altında kullanıcıya süzülmüş **Aylık Puantaj**, **Günlük Puantaj** ve **Günlük Hareketler** listeleri. Her
|
||
parça kendi ekran yetkisiyle görünür; yeni hareket satırının `EmployeeId`'si süzgeçten dolar.
|
||
|
||
#### 3.5 Ayarlar
|
||
|
||
Ayarlar › İnsan Kaynakları › Puantaj (`App.HrSettings` › `App.HrSettings.Attendance`, sağlayıcılar `T|G|D`):
|
||
|
||
| Kod | Varsayılan | Kullanım |
|
||
| --- | --- | --- |
|
||
| `App.HrSettings.Attendance.LateToleranceMinutes` | 10 | Vardiyada tolerans yoksa |
|
||
| `App.HrSettings.Attendance.EarlyLeaveToleranceMinutes` | 10 | Vardiyada tolerans yoksa |
|
||
| `App.HrSettings.Attendance.WeeklyLimitHours` | 45 | Haftalık fazla mesai sınırı |
|
||
| `App.HrSettings.Attendance.OvertimeRate` | 1.5 | Zamlı fazla mesai saati çarpanı (Aylık Puantaj) |
|
||
| `App.HrSettings.Attendance.AnnualOvertimeLimitHours` | 270 | Yıllık sınır (işaret, widget çubuğu) |
|
||
| `App.HrSettings.Attendance.DefaultShiftStart` / `DefaultShiftEnd` | 08:00 / 18:00 | Vardiyası olmayan çalışan |
|
||
| `App.HrSettings.Attendance.DefaultBreakMinutes` | 60 | Vardiyası (ya da vardiya molası) olmayan çalışan |
|
||
|
||
Hafta tatili İzin Yönetimi'nin çalışma günü ayarlarından (`App.HrSettings.Leave.Work{Gün}`) okunur.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
| Tablo / nesne | Kolonlar | Not |
|
||
| --- | --- | --- |
|
||
| `AbpUsers` (mevcut) | `PdksCardNo`, `RegistrationNo`, `ShiftId`, `HireDate`, `TerminationDate` | Kişi eşlemesi, vardiya, istihdam aralığı |
|
||
| `Hr_T_AttendanceLog` | `EmployeeId` (boş olabilir), `CardNo`, `EventTime` (yerel saat), `Direction` (In/Out/Auto), `Source` (Manual/Pdks/Import), `DeviceCode`, `Note`, `WorkDate` (hesaplanır), `IsProcessed`, `ProcessError` (UnknownCard/ClosedPeriod) | `IsProcessed = 0` satırları işlenmeyi bekler |
|
||
| `Hr_T_Timesheet` | `EmployeeId`, `WorkDate`, `PeriodYear`, `PeriodMonth`, `PeriodKey`, `ShiftId`, `DayType` (Work/WeeklyOff/Holiday/Leave/Sick/Training/Absent), `LeaveTypeId` (izinli/raporlu günün türü), `TrainingId` (eğitim günü), `FirstIn`, `LastOut`, `BreakMinutes`, `NetMinutes`, `NetHours`, `LateMinutes`, `EarlyLeaveMinutes`, `OvertimeHours`, `IsManual`, `IsIncomplete`, `IsAssumed`, `Note`, `CalculatedAt` | Çalışan × gün tek etkin satır |
|
||
| `Hr_T_TimesheetPeriod` | `PeriodYear`, `PeriodMonth`, `Status` (Open/Closed), `CalculatedAt`, `ClosedAt`, `ClosedById`, `NightlyAt`, `Note` | Kiracıda yıl+ay tekil (prosedür denetler) |
|
||
| `Hr_T_Shift` (+) | `LateToleranceMinutes`, `EarlyLeaveToleranceMinutes` | Vardiyalar ekranında düzenlenir |
|
||
| `Hr_V_AttendanceShift` | Çalışanın dakika cinsinden vardiyası, mola, toleranslar, `DayOffset` | Varsayılanlar ayardan |
|
||
| `Hr_V_TimesheetMonthly` | Çalışan × ay toplamları, `UnpaidLeaveDays` (ücretsiz türdeki izinli gün — bordroda eksik gün), `TrainingDays`, `OvertimePaidHours`, `YearOvertimeHours`, `AnnualOvertimeLimit`, `IsOverAnnualLimit`, `PeriodStatus` | `Id = PeriodKey` |
|
||
|
||
Entity yoktur (wizard tabloları); `sql/object/`.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
#### 5.1 Prosedürler
|
||
|
||
| Nesne | Ne yapar | Çağıran |
|
||
| --- | --- | --- |
|
||
| `Hr_S_TimesheetCalculate @TenantId, @EmployeeId, @From, @To, @ActorId` | Aralığı tam haftalara genişletip (bugünle sınırlı) çalışan × gün satırlarını kurar/günceller; kapalı ayı yazmaz | Aşağıdakilerin hepsi, izin ve rapor prosedürleri |
|
||
| `Hr_S_AttendanceProcess @FailOnClosed` | İşlenmemiş hareketlerde kart → çalışan, iş günü, hata; etkilenen günleri (eski + yeni) yeniden hesaplar | Günlük Hareketler kayıt/silme, PDKS ucu, gece işi |
|
||
| `Hr_S_AttendanceImport @TenantId, @UserId, @Items` | PDKS gönderimini (`CardNo`, `RegistrationNo` ya da `UserName`; `EventTime`, `Direction`, `DeviceCode`) yazar, tekrarı atlar; `Received/Inserted/Skipped/Errors` döner | Custom Endpoint |
|
||
| `Hr_S_TimesheetPeriodAfterSave @PeriodId, @ActorId` | Yıl/ay doğrulama ve tekillik; açık dönemde ayı yeniden hesaplar; kapatmada son hesap + kilit | Puantaj Dönemleri kayıt |
|
||
| `Hr_S_TimesheetNightly` | Kart numarası sonradan girilen "Kart tanımsız" okutmaları yeniden kuyruğa alır ve işler; her kiracı için ayın dönemini açar, dünün ayını ve kapanmamışsa önceki ayı hesaplar | Zamanlanmış iş `Timesheet Nightly` (02:00) |
|
||
| `Hr_F_WorkCalendarDayType @TenantId, @Day` | Güne düşen `Holiday` / `HalfDay` | Hesap |
|
||
| `Hr_F_TimesheetPeriodClosed @TenantId, @From, @To` | Aralığın değdiği aylardan biri kapalı dönem mi | İzin, rapor ve izin guard prosedürleri |
|
||
| `Hr_S_TrainingSync @TrainingId, @UserId, @ActorId` | Katılımcının (boşsa bütün katılımcıların) eğitim günlerini yeniden hesaplar, bağlı gelişim aksiyonunu tamamlar | Eğitimler ve Katılımcılar kayıt/silme |
|
||
| `Hr_S_WorkCalendarAfterSave @CalendarId, @ActorId` | Takvim satırına denk gelen izinlerin gün sayısını ve puantajı yeniden hesaplar | Çalışma Takvimi kayıt/silme |
|
||
|
||
#### 5.2 Günün hesabı
|
||
|
||
1. **Gün tipi** (öncelik sırasıyla):
|
||
1. rapor (Sağlık Kartı istirahati; takvim günü, hafta sonu dahil) → `Sick`;
|
||
2. onaylı **ücretsiz** izin (`LeaveType.IsPaid = 0`: ücretsiz izin, doğum izni; takvim günü) → `Leave`;
|
||
3. takvim tatili → `Holiday`; ayarda çalışma günü değil → `WeeklyOff`;
|
||
4. onaylı **ücretli** izin → `Leave` (ücretli izne denk gelen tatil izin günü değildir, 4857 md. 56 — izin gün sayısıyla aynı kural); yarım gün izinde okutma varsa `Work`;
|
||
5. okutma var → `Work`;
|
||
6. eğitime "Katıldı" işaretli katılımcı → `Training` (vardiya saatleriyle, `IsAssumed`);
|
||
7. elle takip edilen çalışan → `Work` (`IsAssumed`, vardiya saatleri); geçmiş gün → `Absent`; kartlı çalışanın okutmasız bugünü yazılmaz.
|
||
|
||
İzinli/raporlu günde `LeaveTypeId`, eğitim gününde `TrainingId` yazılır. İstihdam dışındaki okutmasız gün yazılmaz.
|
||
2. **İlk giriş / son çıkış**: ilk `In` (yoksa ilk okutma) / son `Out` (ilk girişten sonraysa).
|
||
3. **Mola** = `MAX(vardiya molası, ilk giriş–son çıkış arasındaki çıkış→giriş aralıkları)`, brüt süreyi aşamaz; elle düzeltilen günde girilen mola.
|
||
4. **Net** = son çıkış − ilk giriş − mola.
|
||
5. **Geç kalma** = ilk giriş − vardiya başlangıcı, tolerans aşılırsa tamamı; **erken çıkış** = vardiya bitişi (arifede yarı süre) − son çıkış, tolerans aşılırsa tamamı. Yalnız `Work` gününde; eğitim günü haftalık birikime çalışma gibi girer.
|
||
6. **Fazla mesai** = `WeeklyOff`/`Holiday` gününde net sürenin tamamı; diğer günlerde haftanın kümülatif netinin sınırı aştığı kısım (`max(0, kümülatif − sınır) − max(0, önceki kümülatif − sınır)`).
|
||
7. Kaynağı kalkan gün: tek çalışanlık hesap, artık hiçbir izin/rapor/katılımla örtüşmeyen `Leave`/`Sick`/`Training` günlerini (talebin tarihi değişti, rapor ya da katılım silindi) aralığa katar; eski günler aynı işlemde düzelir.
|
||
8. Aylık view: `OvertimePaidHours = OvertimeHours × OvertimeRate`; `YearOvertimeHours` ocaktan o aya birikim; `IsOverAnnualLimit` sınır aşımı.
|
||
|
||
#### 5.3 Ekran komutları
|
||
|
||
| Ekran | Komut |
|
||
| --- | --- |
|
||
| Günlük Hareketler | Ekle/düzenle/sil sonrası satır işlenmemiş işaretlenir → `Hr_S_AttendanceProcess 1` (kapalı dönemde kayıt geri alınır) |
|
||
| Günlük Puantaj | Düzenle/sil öncesi kapalı dönem kontrolü; düzenleme sonrası `IsManual = 1, IsAssumed = 0` ve günün haftası yeniden hesaplanır; silme sonrası gün otomatik yeniden kurulur |
|
||
| Puantaj Dönemleri | Kayıt sonrası `Hr_S_TimesheetPeriodAfterSave`; kapalı dönem silinemez; ayda onay bekleyen izin varsa kapatılamaz |
|
||
|
||
Hata kodları: 51200 (kapalı döneme hareket), 51201 (kapalı dönemin günü), 51210 (PDKS gövdesi), 51220–51223
|
||
(dönem; 51223 onay bekleyen izin), 51118 (kapalı döneme izin), 51120 (kapalı döneme rapor).
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Kök `App.Hr.Attendance` (sıra 9); dört ekran altında, her biri
|
||
`.Create/.Update/.Delete/.Export/.Import/.Note` ile. `App.Hr.MyTimesheet` (sıra 10) kökte,
|
||
`App.Hr.MyTimesheetDay` onun altında. Ayar yetkisi `App.HrSettings.Attendance` (`App.Administration`
|
||
grubu, `App.HrSettings` altında). Hiçbir yetki role otomatik atanmaz.
|
||
|
||
| Rol | Yetkiler |
|
||
| --- | --- |
|
||
| Tüm çalışanlar | `App.Hr.MyTimesheet`, `App.Hr.MyTimesheetDay` (widget ve Puantajım) |
|
||
| İK | `App.Hr.Attendance` dalının tamamı, `App.HrSettings.Attendance` |
|
||
| PDKS servis kullanıcısı | `PDKS` rolü + `App.DeveloperKit.CustomEndpoints.Post` |
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Modül | Yön | Nasıl |
|
||
| --- | --- | --- |
|
||
| Kimlik › Kullanıcılar | → puantaj | PDKS Kart No / Sicil No kişi eşlemesi, vardiya, işe giriş/çıkış; kart numarası değişikliği gece işinde yansır |
|
||
| İzin Yönetimi | → puantaj | `Hr_S_LeaveRequestAfterSave` (kayıt, karar, silme) sonunda talebin günleri — tarihi değiştiyse eski günleri de — yeniden hesaplanır; onaylı izin `Leave` |
|
||
| Sağlık Kartı › İstirahatler | ↔ izin, → puantaj | `Hr_S_LeaveSickLeaveSync` (kayıt, silme) raporu onaylı Rapor talebine eşler, rapora denk gelen izin günlerini bakiyeye döndürür (`Hr_S_LeaveDaysRefresh`), günleri yeniden hesaplar; rapor `Sick` |
|
||
| Eğitimler | → puantaj | Katıldı işaretli katılımcının eğitim günleri `Training`; eğitim/katılımcı kaydı `Hr_S_TrainingSync` ile hemen yansır |
|
||
| Çalışma Takvimi | → izin, → puantaj | Tatil `Holiday`, arife `HalfDay` (yarım vardiya); takvim kaydı denk gelen izinlerin gün sayısını ve puantajı hemen yeniler (`Hr_S_WorkCalendarAfterSave`) |
|
||
| Vardiyalar / kullanıcı vardiyası | → puantaj | Saat, mola, tolerans; değişiklik gece işinde ya da dönem kaydında yansır |
|
||
| İzin ayarları | → puantaj | Hafta tatili günleri |
|
||
| PDKS | → hareket | Custom Endpoint `POST /api/app/custom-endpoint/hr/attendance/` (`data/App.DeveloperKit.CustomEndpoints/3c8b861f-abfa-5db3-8d93-8c1a08605ac5.json`, `PermissionsJson`: rol `PDKS`) |
|
||
| Excel | → hareket | Günlük Hareketler import'u aynı kayıt yolundan (`InsertAfterCommand`) geçer; `Source` boş gelir ve `Import` yazılır |
|
||
| Intranet | ← puantaj | `my-timesheet` widget'ı |
|
||
| Kullanıcı detayı | ← puantaj | Puantaj sekmesi |
|
||
|
||
#### 7.1 Çakışma kuralları (modüller birbirine zıt sonuç vermez)
|
||
|
||
| Durum | Kural | Nerede |
|
||
| --- | --- | --- |
|
||
| Raporlu gün | Devamsız yazılmaz; `Sick` her şeyin önündedir (okutma olsa da) | `Hr_S_TimesheetCalculate` |
|
||
| Yıllık izin sırasında rapor | Rapora denk gelen izin günü izinden sayılmaz, bakiyeye döner; puantajda `Sick` | `Hr_F_LeaveNetDays`, `Hr_S_LeaveDaysRefresh` |
|
||
| Rapor talebi onay beklerken | Sağlık kartına ve puantaja düşmez; onayla istirahat kaydı oluşur, redde kalkar | `Hr_S_LeaveRequestAfterSave` |
|
||
| Ücretli izne denk gelen tatil | Puantajda `Holiday`/`WeeklyOff`; izin gün sayısına girmez (4857 md. 56) | hesap + `Hr_F_LeaveWorkDays` |
|
||
| Ücretsiz izin / doğum izni | Hafta tatili ve genel tatil dahil `Leave` (ücret doğmaz); aylıkta `UnpaidLeaveDays` | hesap + aylık view |
|
||
| Eğitime katılan | Okutması yoksa devamsız değil `Training`; okutması varsa `Work` | hesap |
|
||
| Kapalı puantaj ayı | İzin talebi ve rapor eklenemez/değiştirilemez/silinemez (51118, 51120); onay bekleyen izni olan ay kapatılamaz (51223) | guard + kayıt prosedürleri + dönem kaydı |
|
||
| İstihdam dışı | İzin tarihleri işe giriş – işten çıkış arasında olmalı (51119); puantaj istihdam dışında gün yazmaz | `Hr_S_LeaveRequestAfterSave`, hesap |
|
||
| Takvime sonradan girilen bayram | Denk gelen izinlerin gün sayısı ve puantaj hemen yenilenir | `Hr_S_WorkCalendarAfterSave` |
|
||
|
||
PDKS gövdesi:
|
||
|
||
```json
|
||
{ "Items": [ { "CardNo": "000123", "EventTime": "2026-10-05T08:02:00", "Direction": "In", "DeviceCode": "GATE-1" } ] }
|
||
```
|
||
|
||
`Items` dizi ya da JSON metni olabilir; `CardNo` yerine `UserName` gönderilebilir. Endpoint kaydı
|
||
kiracıya aittir (`CustomEndpoint` `IMultiTenant`): seed satırı host'a kurulur, kiracıda Developer Kit ›
|
||
Custom Endpoints'ten aynı SQL ve parametrelerle eklenir.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İK üretim çalışanlarının kullanıcı kartına (İş sekmesi) PDKS Kart No girer; ofis çalışanlarında alan boştur (elle takip).
|
||
2. PDKS her 5 dakikada okutmaları uca gönderir; **Günlük Hareketler**'e düşer, Günlük Puantaj o hafta için güncellenir. Tanımsız kart "Kart tanımsız" görünür; numara kullanıcı kartına girilince gece işi okutmayı işler.
|
||
3. Gece 02:00'de iş dünü kurar: kartlı çalışanın okutmasız iş günü Devamsız, elle takip edilen çalışanın günü vardiya saatleriyle Varsayılan çalışma.
|
||
4. Ofis çalışanı bir gün gelmez; İK **Günlük Puantaj**'da o günü Devamsız yapar (gün Elle olur).
|
||
5. Ay sonunda İK **Aylık Puantaj**'ı kontrol eder, yıllık sınırı aşanları görür; **Puantaj Dönemleri**'nde ayı Kapalı yapar.
|
||
6. Çalışan panodaki **Puantajım**'da ayını ve yıl toplamını görür, butonla aylarına ve günlerine iner.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar ve bilinen sınırlar
|
||
|
||
**Okutması olmayan çalışan neden hep "geldi" görünüyor?** Kullanıcı kartında PDKS Kart No yoksa (ya da henüz PDKS okutması gelmediyse) elle takip edilir; gelinmeyen gün Günlük Puantaj'da işaretlenir. İlk PDKS okutmasından itibaren okutmayla takip edilir.
|
||
|
||
**Düzelttiğim gün neden yeniden hesapta değişmiyor?** Elle düzeltilen gün korunur. Otomatiğe döndürmek için satırı silin.
|
||
|
||
**Vardiya/takvim/ayar değişti, puantaj eski.** Gece işi dünün ve önceki ayın günlerini yeniler; hemen yansıtmak için Puantaj Dönemleri'nde ilgili ayı kaydedin.
|
||
|
||
**Kapalı aya PDKS okutması geldi.** Okutma `Kapalı dönem` hatasıyla kalır; dönem açılıp kaydedilirse hareket ekranından düzenlenerek işlenir.
|
||
|
||
**Fazla mesai hafta tatilinde neden tamamı?** Talepte istenen kural (hafta tatili ve resmî tatilde çalışma fazla mesaidir); haftalık 45 saat birikimine bu günler katılmaz.
|
||
|
||
**İzin talebinin tarihi değişti, eski günler ne olur?** Aynı kayıtta düzelir: tek çalışanlık hesap kaynağı kalmayan izinli/raporlu/eğitim günlerini aralığa katar.
|
||
|
||
**Hasta raporu alan çalışan devamsız mı yazılır?** Hayır. Rapor günleri (hafta sonu dahil) `Raporlu`dur; aynı güne izin ya da okutma düşse bile rapor önce gelir. Yıllık izindeyken rapor alındıysa o günler izinden düşmez, bakiyeye döner.
|
||
|
||
**Eğitimdeki çalışan devamsız görünüyor.** Katılımcı satırında durum "Katıldı" olmalıdır; "Katılmadı/Mazeretli" günler normal hesaplanır.
|
||
|
||
**Çalışma Takvimi kaydı sonrası hangi günler yenilenir?** Satırın tarihleri (yıllık tekrarlıda bu yıl ve gelecek yıl). Tarihi değiştirilen satırın eski günleri gece işinde ya da dönem kaydında düzelir.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_{AttendanceLog,Timesheet,TimesheetPeriod}.sql` | Tablolar |
|
||
| `configs/seeds/sql/object/Hr_T_Shift.sql` | Vardiya toleransı kolonları |
|
||
| `configs/seeds/sql/object/Hr_V_{AttendanceShift,TimesheetMonthly}.sql` | View'lar |
|
||
| `configs/seeds/sql/object/Hr_F_{WorkCalendarDayType,TimesheetPeriodClosed,LeaveNetDays}.sql` | Takvim günü türü, kapalı dönem, rapordan arınmış izin günü |
|
||
| `configs/seeds/sql/object/Hr_S_{TimesheetCalculate,AttendanceProcess,AttendanceImport,TimesheetPeriodAfterSave,TimesheetNightly}.sql` | Hesap ve tetikler |
|
||
| `configs/seeds/sql/object/Hr_S_{LeaveRequestAfterSave,LeaveRequestGuard,LeaveSickLeaveSync,LeaveDaysRefresh}.sql` | İzin/rapor → puantaj tetiği, kapalı dönem guard'ı, rapor → izin günü |
|
||
| `configs/seeds/sql/object/Hr_S_{TrainingSync,WorkCalendarAfterSave}.sql` | Eğitim ve takvim → puantaj tetiği |
|
||
| `configs/seeds/wizard/{LeaveRequest,MyLeaveRequest,HealthCardSickLeave,Training,TrainingParticipant,WorkCalendar}.json` | Tetik komutları (silme dahil) |
|
||
| `api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Administration.cs` (`UserSickLeave`) | Kullanıcı detayındaki istirahat listesinin silme tetiği |
|
||
| `configs/seeds/wizard/{AttendanceLog,Timesheet,TimesheetMonthly,TimesheetPeriod,MyTimesheet,MyTimesheetDay}.json` | 6 wizard |
|
||
| `configs/seeds/wizard/Hr_Shift.json` | Tolerans alanları |
|
||
| `configs/seeds/data/App.DeveloperKit.CustomComponents/1bca19aa-e144-5e4c-b23b-9eddd4dafd19.json` | `MyTimesheetWidget` |
|
||
| `configs/seeds/data/App.DeveloperKit.IntranetWidgets.json` | `my-timesheet` |
|
||
| `configs/seeds/data/App.DeveloperKit.CustomEndpoints/3c8b861f-abfa-5db3-8d93-8c1a08605ac5.json` | PDKS ucu |
|
||
| `configs/seeds/data/App.BackgroundWorkers.RecurringJobs.json` | `Timesheet Nightly` |
|
||
| `configs/seeds/data/App.SettingDefinitions.json` | `App.HrSettings.Attendance.*` |
|
||
| `configs/seeds/data/{App.Menus.Menu,Abp.Identity.Permissions,App.Languages.LanguageText}.json` | Menü, yetki, dil |
|
||
| `ui/src/views/admin/user-management/{TimesheetTab,Details}.tsx` | Kullanıcı detayı › Puantaj |
|
||
|
||
Geri alma: Wizard Manager'dan altı ekran silinir; widget, endpoint, iş ve ayar satırları kendi
|
||
ekranlarından kaldırılır. İzin/rapor prosedürlerindeki `Hr_S_TimesheetCalculate` çağrısı kaldırılmadan
|
||
prosedür silinmemelidir. Tablolar düşürülmez.
|
||
|
||
<!-- module-doc:section App.Hr.HealthCard -->
|
||
## Sağlık Kartları (`App.Hr.HealthCard`)
|
||
|
||
İşyeri hekimliği için çalışan sağlık kartı: soy/özgeçmiş, anamnez, laboratuvar ve fizik muayene
|
||
bulguları, çalışmaya elverişlilik sonucu (vardiya/gece çalışması dahil), periyodik muayeneler,
|
||
revir (hasta protokol defteri) başvuruları ve istirahat raporları. Kart ayrı bir tablo değildir:
|
||
tek kayıtlık bölümler doğrudan çalışanın kullanıcı satırında (`AbpUsers` genişletme kolonları),
|
||
çok kayıtlı bölümler `Adm_T_User*` tablolarındadır. Tamamı konfigürasyon + platformun kullanıcı
|
||
detay ekranı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 |
|
||
| --- | --- | --- |
|
||
| İşyeri hekimi / sağlık personeli | Kartı doldurur, periyodik muayene ve revir başvurusu girer, elverişlilik sonucunu yazar | Sağlık Kartları (detay sekmeleri) |
|
||
| İK | Kart durumunu izler, istirahat raporlarını girer; hekim, hastane ve bölüm tanımlarını yönetir | Sağlık Kartları · İK › Tanımlar |
|
||
| Sistem yöneticisi | Aynı veriyi kullanıcı detayında görür | Kimlik › Kullanıcılar › detay › Sağlık Kartı sekmesi |
|
||
|
||
Kapsam: kiracı. Liste, kiracının **tüm kullanıcılarıdır** (aktif/pasif); satır süzmesi yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan (wizard,
|
||
> entity, `HealthCardTab.tsx`) okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Veri yeri | Kart başına tek değer taşıyan alanlar (kan grubu, anamnez, muayene bulguları, sonuç) **`AbpUsers` genişletme kolonlarıdır** — ayrı kart tablosu yok |
|
||
| Liste | Sağlık Kartları ekranı `AbpUsers` üzerinde salt okunur listedir (ekle/düzenle/sil kapalı); kart bilgileri detaydaki sekmelerden düzenlenir |
|
||
| Tek kayıtlık sekmeler | Soy/Özgeçmiş, Laboratuvar–Fizik Muayene, Anamnez, Sonuç: aynı kullanıcı satırını düzenleyen alt formlar (`Id → Id`, yalnız güncelleme) |
|
||
| Çok kayıtlı sekmeler | Periyodik Muayeneler, Hasta Protokol Defteri, İstirahat Raporları: `Adm_T_UserPeriodicExamination`, `Adm_T_UserPatientProtocol`, `Adm_T_UserSickLeave` (`Id → UserId`) |
|
||
| İkinci giriş | Kullanıcı detayındaki **Sağlık Kartı** sekmesi (`HealthCardTab.tsx`) aynı kolonları ve aynı üç tabloyu (`App.IdentityManagement.User{PeriodicExamination,PatientProtocol,SickLeave}` listeleriyle) düzenler |
|
||
| Hekim | Kurum doktoru tanımı (`Hr_T_Doctor`); periyodik muayenede seçilince diploma no kopyalanır |
|
||
| Koşullu alanlar | Anamnezde "evet" denmeyen sorunun not alanı, protokolde sonuç "Sevk" değilse sevk yeri kilitlidir (`readOnly` script) |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
| Menü (TR / EN) | `ListFormCode` | Yer | Kaynak | Alt formlar |
|
||
| --- | --- | --- | --- | --- |
|
||
| Sağlık Kartları / Health Cards | `App.Hr.HealthCard` | `İnsan Kaynakları` (sıra 7, `FcInspection`) | `AbpUsers` | aşağıdaki 7 sekme |
|
||
|
||
| Sekme | `ListFormCode` (menüsüz) | Kaynak | İlişki | Düzenleme |
|
||
| --- | --- | --- | --- | --- |
|
||
| Soy / Özgeçmiş | `App.Hr.HealthCardHistory` | `AbpUsers` | `Id → Id` | Yalnız güncelleme |
|
||
| Laboratuvar – Fizik Muayene | `App.Hr.HealthCardLabPhysical` | `AbpUsers` | `Id → Id` | Yalnız güncelleme |
|
||
| Anamnez | `App.Hr.HealthCardAnamnesis` | `AbpUsers` | `Id → Id` | Yalnız güncelleme |
|
||
| Sonuç | `App.Hr.HealthCardResult` | `AbpUsers` | `Id → Id` | Yalnız güncelleme |
|
||
| Periyodik Muayeneler | `App.Hr.HealthCardPeriodicExamination` | `Adm_T_UserPeriodicExamination` | `Id → UserId` | Ekle/düzenle/sil |
|
||
| Hasta Protokol Defteri | `App.Hr.HealthCardPatientProtocol` | `Adm_T_UserPatientProtocol` | `Id → UserId` | Ekle/düzenle/sil |
|
||
| İstirahat Raporları | `App.Hr.HealthCardSickLeave` | `Adm_T_UserSickLeave` | `Id → UserId` | Ekle/düzenle/sil; kayıt sonrası İzin Yönetimi'ne eşlenir (İzin Yönetimi bölümü §5.5) |
|
||
|
||
Widget'lar (liste): Toplam · Aktif · Pasif kullanıcı.
|
||
|
||
Tanımlar (`İnsan Kaynakları › Tanımlamalar`):
|
||
|
||
| Menü | `ListFormCode` | Seed |
|
||
| --- | --- | --- |
|
||
| Kurum Doktorları | `App.Hr.Doctor` | 1 kayıt (diploma, işyeri hekimi belge no/tarihi, T.C. kimlik) |
|
||
| Hastaneler | `App.Hr.Hospital` | 45 kurum (devlet/özel hastaneler, sağlık ocağı, işyeri hekimliği…) |
|
||
| Hastane Bölümleri | `App.Hr.HospitalDepartment` | 31 bölüm |
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
| Yer | Alanlar |
|
||
| --- | --- |
|
||
| `AbpUsers` — kimlik (liste) | `Name`, `Surname`, `IdentityNumber`, `BirthDate`, `Gender`, `BloodType`, `Email`, `PhoneNumber`, `DepartmentId`, `JobPositionId`, `HireDate`, `SskNo`, `IsActive` |
|
||
| `AbpUsers` — soy/özgeçmiş | Anne/baba/kardeş/çocuk sağlık durumu (Alive/Disease/Deceased) + not, `BloodType` (8 grup), `ChronicDisease`, tetanoz/hepatit/diğer aşı |
|
||
| `AbpUsers` — anamnez | Şikâyetler (`Complaint*`: göğüs ağrısı, balgamlı öksürük, nefes darlığı, çarpıntı, eklem/bel ağrısı, ishal/kabızlık), tanılar (`Diagnosis*`: diyabet, kalp, böbrek, sarılık, ülser, işitme, görme, sinir sistemi, deri, besin zehirlenmesi), evet/hayır + not soruları (hastanede yatış, ameliyat, iş kazası, meslek hastalığı muayenesi, malulen emeklilik, süren tedavi), sigara/alkol (None/Occasionally/Normal/Quit + not) |
|
||
| `AbpUsers` — lab/fizik | `Lab*` (biyolojik, kan, idrar, radyolojik, odyometri, SFT, psikolojik, diğer), `Exam*` (duyu, göz, KBB, deri, kalp-damar, solunum, sindirim, ürogenital, kas-iskelet, nörolojik, psikiyatrik, diğer, tansiyon, nabız, boy, kilo) |
|
||
| `AbpUsers` — sonuç | `FitForWorkJob`, `FitForWorkCondition`, `FitnessDoctorId`, `ShiftWorkFit`, `NightWorkFit`, `ShiftNightDoctorId` |
|
||
| `Adm_T_UserPeriodicExamination` | `UserId`, `ExamDate`, `Examination`, `Result`, `DoctorId`, `DoctorDiplomaNo` |
|
||
| `Adm_T_UserPatientProtocol` | `UserId`, `SequenceNo`, `ProtocolDate`, `ProtocolType` (Disease/WorkAccident/OccupationalDisease/Control/Other), `ProtocolResult` (TreatmentDischarged/Rest/Referral), `RestDays`, `ReferralPlace`, `DoctorId` |
|
||
| `Adm_T_UserSickLeave` | `UserId`, `StartDate`, `EndDate`, `Days`, `SickLeaveType` (Disease/WorkAccident/OccupationalDisease/Maternity), `Institution`, `Clinic`, `SickLeaveReason` |
|
||
| `Hr_T_Doctor` / `Hr_T_Hospital` / `Hr_T_HospitalDepartment` | Tanımlar |
|
||
|
||
Entity'ler: `Entities/Tenant/Administration/User{PeriodicExamination,PatientProtocol,SickLeave}.cs`;
|
||
genişletme kolonları `AbpIdentityUserExtensions` ve EF genişletme eşlemeleri.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları
|
||
|
||
| Yer | Kural |
|
||
| --- | --- |
|
||
| Anamnez | Evet/hayır sorusu işaretli değilse not alanı salt okunur; sigara/alkol "Kullanmıyor" ise not kilitli |
|
||
| Periyodik muayene | Yeni satırda tarih bugün; hekim seçilince diploma no kopyalanır |
|
||
| Protokol | Yeni satırda tarih bugün; sonuç "Sevk" değilse sevk yeri kilitli |
|
||
| İstirahat | `Days = days(Başlangıç, Bitiş)` (bitiş dahil); bitiş başlangıçtan önceyse uyarı |
|
||
| Liste | Kayıt eklenemez/silinemez — kartın sahibi kullanıcı kaydıdır |
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. `App.Hr.HealthCard` kökü; yedi sekme onun altındadır. Tanımlar
|
||
`App.Hr.Definitions` altındadır. Kullanıcı detayındaki sekme, kullanıcı ekranının yetkileriyle
|
||
(`AbpIdentity.Users` / `.Update`) çalışır. Hiçbir yetki role otomatik atanmaz.
|
||
|
||
Sağlık verisi **özel nitelikli kişisel veridir** (KVKK md. 6): Sağlık Kartları ve alt sekmelerinin
|
||
yetkisi yalnız işyeri hekimi ve yetkili sağlık personeline verilmelidir. Kullanıcı detayına erişen
|
||
yöneticiler de bu sekmeyi görebileceği için kullanıcı yönetimi yetkisi de buna göre sınırlanmalıdır.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `AbpUsers` (+ `Hr_T_Department`, `Hr_T_JobPosition`) | Kartın sahibi ve kimlik bilgisi |
|
||
| Kullanıcı detayı (`views/admin/user-management/HealthCardTab.tsx`) | Aynı verinin ikinci düzenleme yeri |
|
||
| `Hr_T_Doctor` | Periyodik muayene, protokol, sonuç hekimleri |
|
||
|
||
Hastane ve hastane bölümü tanımları **henüz hiçbir sekmeye bağlı değildir** (istirahatte kurum/klinik
|
||
serbest metindir). Bildirim, periyodik muayene hatırlatması ya da rapor şablonu yoktur.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İşe giren çalışanın kartı listede hazırdır (kullanıcı açıldığı anda). Hekim **Soy/Özgeçmiş** ve
|
||
**Anamnez** sekmelerini doldurur.
|
||
2. İşe giriş muayenesi bulguları **Laboratuvar – Fizik Muayene**'ye, kararı **Sonuç**'a yazılır
|
||
(vardiyalı/gece çalışabilir + hekimler).
|
||
3. Yıllık kontrol **Periyodik Muayeneler**'e eklenir.
|
||
4. Çalışan revire gelince **Hasta Protokol Defteri**'ne kayıt açılır (tür Hastalık, sonuç İstirahat, 1 gün).
|
||
5. Dışarıdan alınan rapor **İstirahat Raporları**'na girilir; gün sayısı hesaplanır.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Listeye neden kayıt eklenemiyor?** Kart kullanıcı kaydıdır; yeni çalışan Kimlik › Kullanıcılar'dan açılır.
|
||
|
||
**Sağlık kartı verisi nerede tutuluyor?** Tek değerli alanlar `AbpUsers` kolonlarında, muayene/protokol/istirahat ayrı tablolarda (§4).
|
||
|
||
**Kullanıcı detayındaki Sağlık Kartı sekmesiyle bu ekran aynı mı?** Evet; aynı veriyi iki yerden düzenlerler.
|
||
|
||
**Hastane tanımı nerede kullanılıyor?** Şu an hiçbir yerde; ileride istirahat/sevk alanlarına lookup olarak bağlanmak üzere duruyor.
|
||
|
||
**İstirahat raporu izinlere yansıyor mu?** Evet, tek kayıttır: buradan (ya da kullanıcı detayındaki İstirahatler'den) girilen rapor İK › İzin Yönetimi'nde onaylı Rapor (`Sick`) talebi olur; çalışanın Intranet'ten açtığı Rapor talebi de bu sekmeye düşer (`Hr_S_LeaveSickLeaveSync`, ayrıntı İzin Yönetimi bölümü §5.5). Rapor yıllık izin bakiyesinden düşmez; yıllık izindeyken alınan raporun günleri izinden sayılmaz, bakiyeye döner. Çalışanın rapor talebi sağlık kartına onaylanınca düşer. Raporun günleri (hafta sonu dahil) puantajda Raporlu olur, devamsız yazılmaz (`Hr_S_LeaveSickLeaveSync` sonunda yeniden hesap, Puantaj ve Devam Takibi bölümü §7.1). Kapalı puantaj ayına düşen rapor kaydedilemez/silinemez; önce İK dönemi açar.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/wizard/HealthCard{,History,LabPhysical,Anamnesis,Result,PeriodicExamination,PatientProtocol,SickLeave}.json` | 8 wizard |
|
||
| `configs/seeds/wizard/{Doctor,Hospital,HospitalDepartment}.json`, `data/App.Hr.{Doctor,Hospital,HospitalDepartment}.json` | Tanım ekranları ve verisi |
|
||
| `api/src/Sozsoft.Platform.Domain/Entities/Tenant/Administration/User{PeriodicExamination,PatientProtocol,SickLeave}.cs` | Çok kayıtlı sekmelerin entity'leri (migration'lı) |
|
||
| `ui/src/views/admin/user-management/HealthCardTab.tsx` | Kullanıcı detayındaki sekme |
|
||
|
||
Kart sekmelerini kaldırmak wizard'ları siler; `AbpUsers` kolonları ve `Adm_T_User*` tabloları
|
||
entity/migration'a bağlı olduğu için kalır.
|
||
|
||
<!-- module-doc:section App.Hr.Training claims=App.Hr.TrainingType, App.Hr.TrainingSubject -->
|
||
## Eğitimler (`App.Hr.Training`)
|
||
|
||
Şirket içi ve dışı eğitimlerin kaydı: eğitim tipi → konu tanımları, eğitim oturumu (tarih/saat,
|
||
süre, yer, eğitmen, maliyet, kazandırdığı yetkinlikler), katılımcılar (katılım durumu, puan,
|
||
katılım belgesi) ve eğitim dosyaları. Tamamı konfigürasyondur (Wizard + rapor şablonu); entity,
|
||
migration ya da React kodu yoktur.
|
||
|
||
> 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 / eğitim sorumlusu | Tip ve konu tanımlar, eğitim açar, katılımcı ekler, katılım/puan girer, dosya yükler, katılım belgesi basar | Eğitim Tipleri · Eğitim Konuları · Eğitimler |
|
||
| Yönetim | Eğitim adedi, açık/kapalı durum ve toplam maliyeti izler (widget, Pivot, Chart) | Eğitimler |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Eğitim bir şubeye bağlıdır (`BranchId` zorunlu); satır süzmesi yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan
|
||
> (wizard, SQL, seed, commit `36546d0c` "Human Resources -> Eğitim bilgileri") okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Wizard ekranları; eğitim kaydının altında Katılımcılar ve Dosyalar sekmeleri (menüsüz alt formlar) |
|
||
| Tanımlar | Tip ve konu tanımları **İK › Tanımlamalar** altındadır (önceden `App.Hr.Trainings` ara menüsündeydi; ara menü kaldırıldı, Eğitimler doğrudan `App.Hr` altına alındı); konu bir tipe bağlıdır ve tip seçimine göre süzülür |
|
||
| Süre | `Toplam Süre (saat) = gün sayısı (bitiş dahil) × günlük saat (bitiş – başlangıç saati)` — formda hesaplanır |
|
||
| Maliyet | Altı kalem (yer, eğitmen, konaklama, ulaşım, ikram, diğer) toplanarak `CostTotal` formda hesaplanır |
|
||
| Yetkinlik | Eğitimin kazandırdığı yetkinlikler `SkillIds` (çok değerli, `Hr_T_Skill`) olarak saklanır; çalışan profiline (`Adm_T_UserSkill`) **yazılmaz** |
|
||
| Katılımcı | Personel seçilince işe giriş tarihi, departman ve pozisyon kullanıcı kaydından kopyalanır (eğitim anındaki hâli saklanır) |
|
||
| Katılım durumu | Attended / NotAttended / Excused; varsayılan **Attended** |
|
||
| Katılım belgesi | Yalnızca `Attended` satırda görünen satır butonu → **Katılım Belgesi** raporu (`DynamicReport`) |
|
||
| Dosyalar | Belge türü `Hr_T_DocumentType` (ortak İK tanımı); dosya içeriği base64 (`dxImageUpload`) |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
Eğitimler doğrudan `İnsan Kaynakları` altındadır (`App.Hr.Training`, sıra 8, ikon `FcGraduationCap`);
|
||
tip ve konu tanımları `İnsan Kaynakları › Tanımlamalar` altındadır.
|
||
|
||
| Menü yeri | Menü (TR / EN) | `ListFormCode` | Alt formlar | Görünümler | Widget'lar |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| Tanımlamalar (sıra 19) | Eğitim Tipleri / Training Types | `App.Hr.TrainingType` | — | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
|
||
| Tanımlamalar (sıra 20) | Eğitim Konuları / Training Subjects | `App.Hr.TrainingSubject` | — | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
|
||
| İnsan Kaynakları (sıra 8) | Eğitimler / Trainings | `App.Hr.Training` | `TrainingParticipant`, `TrainingFile` (`Id → TrainingId`, menüsüz) | Grid, Card, Pivot, Chart | Toplam · Açık · Kapalı · Toplam Maliyet |
|
||
|
||
Seed verisi: 8 eğitim tipi (Oryantasyon, İş Başı, Teknik Oryantasyon, Grup, Firma Dışı, Eğitim
|
||
İçerikli Sosyal Faaliyet, Akademi, Rotasyon) ve 18 eğitim konusu (`data/App.Hr.{TrainingType,TrainingSubject}.json`).
|
||
|
||
Satır butonu: Katılımcılar › **Katılım Belgesi** — rapor `3840a20d-3233-4d17-bc06-ccfd8d87b32a`,
|
||
görünürlük `AttendanceStatus === 'Attended'`.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
```
|
||
Hr_T_TrainingType ──< Hr_T_TrainingSubject
|
||
│ │
|
||
└──────< Hr_T_Training >──── Sas_T_Branch
|
||
├──< Hr_T_TrainingParticipant >── AbpUsers (+ Department, JobPosition)
|
||
└──< Hr_T_TrainingFile >── Hr_T_DocumentType
|
||
```
|
||
|
||
| Tablo | Önemli kolonlar | Kural |
|
||
| --- | --- | --- |
|
||
| `Hr_T_TrainingType` | `Name`, `IsActive` | — |
|
||
| `Hr_T_TrainingSubject` | `TrainingTypeId`, `Name`, `IsEvaluated` (değerlendirilsin mi), `IsActive` | — |
|
||
| `Hr_T_Training` | `TrainingTypeId`, `TrainingSubjectId` (tipe göre cascade), `EntryDate`, `BranchId`, `StartDate`, `EndDate`, `StartTime`, `EndTime`, `TotalHours`, `Status` (Open/Closed), `TrainerName`, `TrainingPlace`, `TrainingInstitution`, `Description`, `SkillIds`, `CostPlace`, `CostTrainer`, `CostAccommodation`, `CostTransport`, `CostCatering`, `CostOther`, `CostTotal` | Bitiş başlangıçtan önce olamaz (form) |
|
||
| `Hr_T_TrainingParticipant` | `TrainingId`, `UserId`, `HireDate`, `DepartmentId`, `JobPositionId`, `AttendanceStatus`, `EvaluationScore`, `ExamScore`, `LeaveDate`, `Note` | — |
|
||
| `Hr_T_TrainingFile` | `TrainingId`, `DocumentTypeId`, `FileDate`, `FileName`, `FileContent` | Dosya zorunlu |
|
||
|
||
Tablo düzeyinde CHECK ya da tekil indeks yoktur; kurallar formdadır.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
Hesapların tamamı `EditorScript`'tir (sunucu tarafında after-command yoktur):
|
||
|
||
| Alan | Kural |
|
||
| --- | --- |
|
||
| `EntryDate` | Yeni kayıtta bugün |
|
||
| `Status` | Yeni kayıtta `Open` |
|
||
| `TotalHours` | Başlangıç/bitiş tarihi ya da saatlerinden biri değişince `round(days(StartDate, EndDate) × hours(StartTime, EndTime), 2)`; dört alan dolu olmalı |
|
||
| `EndDate` | Başlangıçtan önceyse uyarı + değişiklik geri alınır |
|
||
| `CostTotal` | Altı maliyet kaleminden biri değişince toplam |
|
||
| Katılımcı `UserId` | Seçilince `HireDate`, `DepartmentId`, `JobPositionId` kopyalanır |
|
||
| `AttendanceStatus` | Yeni satırda `Attended` |
|
||
| Dosya `FileDate` | Yeni satırda bugün |
|
||
| Tip/Konu `IsActive`, `IsEvaluated` | Yeni kayıtta `true` |
|
||
|
||
Saat hesabı aynı günlük saat aralığının her gün tekrarlandığını varsayar; gün sayısına bitiş günü dahildir.
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Yetki ağacı menüyü izler: `App.Hr.TrainingType` ve
|
||
`App.Hr.TrainingSubject` `App.Hr.Definitions` altında, `App.Hr.Training` grubun kökündedir; her biri
|
||
`.Create/.Update/.Delete/.Export/.Import/.Note` taşır. `TrainingParticipant` ve `TrainingFile`
|
||
`App.Hr.Training` altındadır. Satır süzmesi yoktur. Hiçbir yetki role otomatik atanmaz.
|
||
|
||
| Rol | Yetkiler |
|
||
| --- | --- |
|
||
| Eğitim sorumlusu | `App.Hr.Training` dalının tamamı + `App.Hr.TrainingType`, `App.Hr.TrainingSubject` |
|
||
| Bölüm yöneticisi (izleme) | `App.Hr.Training` + `App.Hr.TrainingParticipant` (salt okuma) |
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `Sas_T_Branch` | Eğitimin şubesi |
|
||
| `AbpUsers` | Katılımcı; işe giriş tarihi, departman, pozisyon kopyası |
|
||
| Kullanıcı detayı › Eğitimler | Katılımcılar ekranı çalışana süzülmüş açılır; satır eklemek çalışanı eğitime katılımcı yapar (Personel Kaydı bölümü) |
|
||
| `Hr_T_Department`, `Hr_T_JobPosition` | Katılımcının o anki birimi (Pivot kırılımı) |
|
||
| `Hr_T_Skill` / `Hr_T_SkillType` | Eğitimin kazandırdığı yetkinlikler |
|
||
| `Hr_T_DocumentType` | Eğitim dosyası türü |
|
||
| Raporlar | Katılım Belgesi (`DynamicReport`, `Raporlar` kategorisi) |
|
||
| Performans Yönetimi | Gelişim planı aksiyonu bir eğitime bağlanabilir (`Hr_T_DevelopmentPlan.TrainingId`); çalışan o eğitimde **Attended** ise aksiyon kendiliğinden tamamlanır: plan kaydında ve katılımcı kaydında (`Hr_S_DevelopmentPlanSync`, `Hr_S_TrainingSync`; bkz. Performans Yönetimi bölümü) |
|
||
| Puantaj ve Devam Takibi | **Katıldı** işaretli katılımcının başlangıç–bitiş arasındaki iş günleri puantajda `Eğitimde` (vardiya saatleriyle) yazılır, okutması olmadığı için devamsız sayılmaz. Eğitim ya da katılımcı eklenince, değişince, silinince `Hr_S_TrainingSync` günleri hemen yeniden hesaplar (Puantaj ve Devam Takibi bölümü §7.1) |
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İK **Eğitimler**'de "İş Sağlığı ve Güvenliği" kaydını açar: tip Grup Eğitimi, konu İSG, şube
|
||
Merkez, 3–4 Kasım 09:00–17:00 → toplam süre 16 saat; eğitmen ve yer maliyetini girer → toplam
|
||
maliyet hesaplanır; kazandırdığı yetkinliği (İSG) seçer.
|
||
2. **Katılımcılar** sekmesine personeli ekler; departman/pozisyon kopyalanır, durum Katıldı.
|
||
3. Gelmeyen personeli **Katılmadı**, raporlu olanı **Mazeretli** yapar; sınav/değerlendirme puanlarını girer.
|
||
4. Katılanların satırından **Katılım Belgesi** basılır; imzalı liste **Dosyalar** sekmesine yüklenir.
|
||
5. Eğitim **Kapalı** yapılır; widget'taki toplam maliyete eklenir.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Toplam süre hesaplanmıyor.** Başlangıç/bitiş tarihi ve başlangıç/bitiş saatinin dördü de dolu olmalı.
|
||
|
||
**Katılım belgesi butonu görünmüyor.** Yalnızca katılım durumu "Katıldı" olan satırda çıkar.
|
||
|
||
**Eğitim konusu listesi boş.** Konu, seçilen eğitim tipine göre süzülür; önce tip seçin.
|
||
|
||
**Eğitimdeki yetkinlik çalışan profiline yazılıyor mu?** Hayır; `SkillIds` eğitimin bilgisidir. Profil, Performans Yönetimi'nde tamamlanan değerlendirmeden güncellenir.
|
||
|
||
**Katılımcının departmanı sonradan değişti, eğitimde eski görünüyor.** Bilinçli: eğitim anındaki birim saklanır.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_{TrainingType,TrainingSubject,Training,TrainingParticipant,TrainingFile}.sql` | Tablolar |
|
||
| `configs/seeds/wizard/{TrainingType,TrainingSubject,Training,TrainingParticipant,TrainingFile}.json` | 5 wizard |
|
||
| `configs/seeds/data/App.Hr.{TrainingType,TrainingSubject}.json` | Tanım verisi |
|
||
| `configs/seeds/data/App.Reports.ReportTemplates.json` | Katılım Belgesi şablonu |
|
||
| `configs/seeds/data/App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json` | Menü, yetki, dil satırları |
|
||
|
||
Kurulum: DB Migrate. Geri alma: Wizard Manager'dan alt formlar (`TrainingParticipant`, `TrainingFile`)
|
||
önce, sonra `Training`, `TrainingSubject`, `TrainingType` silinir; tablolar yalnızca onayda seçilirse
|
||
düşer. Gelişim planlarındaki `TrainingId` bağları silinmez, boşa düşer.
|
||
|
||
<!-- module-doc:section App.Hr.Performance claims=App.Hr.PerformanceRating -->
|
||
## Performans Yönetimi (`App.Hr.Performance`)
|
||
|
||
Dönem bazlı performans süreci: İK dönemi açar, çalışan hedeflerini ve öz değerlendirmesini yapar,
|
||
yönetici değerlendirir, isteğe bağlı 360 derece geri bildirim toplanır, İK kalibre eder, sonuç
|
||
gelişim planına ve çalışanın yetkinlik profiline yansır. **İnsan Kaynakları menüsü İK
|
||
departmanınındır** (şartları belirler, değerlendirmeleri takip eder ve girer); çalışan ve yönetici
|
||
kendisiyle ilgili her şeyi **Intranet › Dashboard**'daki widget'lardan takip eder. Tamamı konfigürasyondur (Wizard + Custom
|
||
Component + SQL nesneleri); yeni entity, migration ya da React kodu yoktur.
|
||
|
||
> 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 | Dönem ve yetkinlik seti tanımlar, tüm değerlendirmeleri izler, 360 değerlendiricisi atar, kalibre eder, gelişim planlarını izler | Dönemler · Tüm Değerlendirmeler · Kalibrasyon · Gelişim Planları · Performans Dereceleri |
|
||
| Çalışan | Hedeflerini girer, gerçekleşeni ve öz değerlendirmesini yazar, yöneticiye gönderir, gelişim aksiyonlarının ilerlemesini günceller | Intranet panosu: **Performansım** widget'ı → Değerlendirmelerim · Gelişim Planım · Profil › Performansım (Değerlendirmelerim · Hedeflerim · Gelişim Planım · 360 Taleplerim salt okunur) |
|
||
| Yönetici | Hedefleri onaylar, yetkinlik seviyesini ve yorumunu verir, kalibrasyona gönderir, gelişim aksiyonu planlar | Intranet panosu: **Ekibimin Performansı** widget'ı → Ekibimin Değerlendirmeleri |
|
||
| 360 değerlendiricisi | Kendisine atanan çalışanın yetkinliklerini puanlar ve gönderir | Intranet panosu: **360 Taleplerim** widget'ı → 360 Taleplerim |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Şube/birim kırılımı yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
#### 2.1 Talep
|
||
|
||
> İnsan Kaynakları › Performans Yönetimi: değerlendirme dönemi tanımı, hedefler (KPI/OKR, ağırlık %,
|
||
> gerçekleşme), yetkinlik değerlendirmesi (Skill Types üzerinden), öz değerlendirme + yönetici
|
||
> değerlendirmesi, isteğe bağlı 360 derece, kalibrasyon ekranı, gelişim planı; uygulamanın diğer
|
||
> özellikleriyle entegre.
|
||
|
||
#### 2.2 Depodan okunanlar (sorulmadı)
|
||
|
||
- Çalışan = `AbpUsers` (`DepartmentId`, `JobPositionId` taşır).
|
||
- Yetkinlik zinciri `Hr_T_SkillType → Hr_T_Skill → Hr_T_SkillLevel` (`Progress` 0–100); çalışan profili `Adm_T_UserSkill` (`Level` 1–5).
|
||
- Kök menü `App.Hr`, izin grubu `App.Hr`, modül `Hr`; tanımlar `App.Hr.Definitions` altında.
|
||
- **Yönetici ilişkisi ne `AbpUsers`'ta ne `Hr_T_Department`'ta vardır** — bu yüzden sorudur.
|
||
|
||
#### 2.3 Keşif turu cevapları
|
||
|
||
| # | Soru | Seçilen | Gerekçe |
|
||
| --- | --- | --- | --- |
|
||
| 1 | Ekran yapısı | Wizard ekranları + çalışana ait özet (Custom Component) | Liste/form kalıbına sığan her şey Wizard; özet ilk sürümde İK menüsünde "Performansım" panosuydu, §2.4'teki kararla Intranet widget'larına taşındı |
|
||
| 2 | Yönetici nereden gelir | Değerlendirme kaydında seçilir (`ManagerId`, `AbpUsers` lookup) | Platform tablosu şeması değişmez (çerçeve içi) |
|
||
| 3 | Genel puan formülü | Dönemde ağırlık tanımlı: Genel = Hedef puanı × a + Yetkinlik puanı × b | Dönem bazında değiştirilebilir (varsayılan 60/40) |
|
||
| 4 | Akış | Durum alanıyla, onaysız (WorkflowDto yok) | Geçiş kuralları prosedürde |
|
||
| 5 | Yetkinlik ölçeği | `SkillLevel` + `Progress %`; tamamlanınca `UserSkill`'e yazılır | Skill Types'ın kendi seviyeleri kullanılır, profil güncel kalır |
|
||
| 6 | Hedef gerçekleşme | Yönlü, %150 tavanlı | Artan/Azalan hedef ayrımı, aşım ödüllendirilir ama sınırlıdır |
|
||
| 7 | 360 | Dönem bayrağı, bilgi amaçlı | Ortalama gösterilir, genel puana girmez |
|
||
| 8 | Görünürlük | Rol + kullanıcı süzmesi | İK hepsini, diğerleri kendi/ekibinin kaydını görür |
|
||
|
||
#### 2.4 Onaylanan tariften sapmalar (üretimde verilen kararlar)
|
||
|
||
| Tarifte | Üretilen | Neden |
|
||
| --- | --- | --- |
|
||
| Gelişim planında Gantt | **Scheduler** (takvim) + Todo | Gantt `ParentIdExpr` ister; aksiyonlar arasında hiyerarşi yok |
|
||
| Derece ölçeği "Performans › Tanımlar" | **İK › Tanımlar** (`App.Hr.Definitions`) | İK tanımlarının (aday kaynağı, değerlendirme kriteri…) mevcut yeri |
|
||
| Dönem ekranında "Değerlendirmeler" sekmesi | Yalnız **Yetkinlik Seti** sekmesi | Widget'lı menü ekranı alt form olamaz (standing default 13); değerlendirmeler Tüm Değerlendirmeler'de döneme göre süzülür |
|
||
| Persona alt formları | Hedef/yetkinlik/gelişim için İK, çalışan, yönetici olmak üzere **üçer ayrı menüsüz ekran** | Alan kilidi ve satır süzmesi ekran bazındadır |
|
||
| Todo kart başlığı | `EmployeeName` kolonu eklendi (prosedür doldurur) | Todo başlığı metin kolon ister (İşe Alım'daki `CandidateName` kalıbı) |
|
||
| Eğitim entegrasyonu | Plan eğitime katılımcı **yazmaz**; çalışan eğitime "Katıldı" işlenmişse plan kendiliğinden tamamlanır | `Hr_T_TrainingParticipant.AttendanceStatus` "planlandı" değeri taşımıyor |
|
||
| "Performansım" panosu ve persona listeleri İK › Performans Yönetimi menüsünde | Persona listeleri **menüsüz**; özetleri Intranet › Dashboard'da üç ayrı widget (Performansım, Ekibimin Performansı, 360 Taleplerim), widget'taki bağlantı listeyi açar | İK menüsü İK departmanınındır; çalışan kendisiyle ilgili bilgiyi Intranet'ten takip eder (kullanıcı kararı, 2026-10-04). Widget içeriği özet + bağlantıdır; pano kolonları dar olduğu için liste gömülmez |
|
||
|
||
#### 2.5 Varsayılan kalanlar
|
||
|
||
- Derece ölçeği (host seed'i): 1 Beklentinin Çok Altında 0–50 (%5) · 2 Geliştirilmeli 50–70 (%15) · 3 Beklenen Düzeyde 70–90 (%60) · 4 Beklentinin Üstünde 90–110 (%15) · 5 Olağanüstü 110+ (%5). Alt sınır dahil, üst sınır hariç.
|
||
- Ağırlık toplamı 100 değilse kayıt engellenmez; yalnızca hedef belirleme aşamasından çıkış engellenir.
|
||
- Bildirim kanalları: `UiActivity` + `UiToast`.
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
#### 3.1 İK menüsü
|
||
|
||
`İnsan Kaynakları › Performans Yönetimi` (`App.Hr.Performance`, ikon `FcBullish`) — yalnız İK.
|
||
|
||
| Sıra | Menü (TR / EN) | `ListFormCode` | Wizard dosyası | Alt formlar | Görünümler |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 1 | Değerlendirme Dönemleri / Review Periods | `App.Hr.PerformancePeriod` | `Hr_PerformancePeriod.json` | `PerformancePeriodSkill` | Grid, Card, Pivot, Chart |
|
||
| 2 | Tüm Değerlendirmeler / All Reviews | `App.Hr.PerformanceReview` | `Hr_PerformanceReview.json` | `PerformanceGoal`, `PerformanceCompetency`, `PerformanceFeedback` (→ `PerformanceFeedbackScore`), `ReviewDevelopmentPlan` | Grid, Card, Pivot, Chart, Todo |
|
||
| 3 | Kalibrasyon / Calibration | `App.Hr.PerformanceCalibration` | `Hr_PerformanceCalibration.json` | — | Grid, Card, Pivot, Chart |
|
||
| 4 | Gelişim Planları / Development Plans | `App.Hr.DevelopmentPlan` | `Hr_DevelopmentPlan.json` | — | Grid, Card, Pivot, Chart, Todo, Scheduler |
|
||
| — | Performans Dereceleri (İK › Tanımlar) | `App.Hr.PerformanceRating` | `Hr_PerformanceRating.json` | — | Grid, Card, Pivot, Chart; veri `data/App.Hr.PerformanceRating.json` ile aynalı |
|
||
|
||
Widget şeritleri:
|
||
|
||
| Ekran | Kartlar |
|
||
| --- | --- |
|
||
| Dönemler | Toplam · Aktif · Kalibrasyonda · Kapanan |
|
||
| Tüm Değerlendirmeler | Toplam · Hedef/Öz Değerlendirme · Yönetici Değerlendirmesinde · Kalibrasyonda · Tamamlanan |
|
||
| Kalibrasyon | Kalibrasyonda · Tamamlanan · Ortalama Puan · Ortalama Kalibre Puan |
|
||
| Gelişim Planları | Toplam · Açık Aksiyon · Geciken · Tamamlanan |
|
||
|
||
#### 3.2 Çalışana ait ekranlar (menüsüz)
|
||
|
||
Menüde yer almazlar; Intranet panosundaki widget'tan `/admin/list/{ListFormCode}` adresiyle açılırlar.
|
||
Menüsüz wizard olduklarından widget şeritleri yoktur (deploy menüsüz ekranın `Widgets`'ını düşürür);
|
||
özetleri panodaki widget'tadır.
|
||
|
||
| Ekran (TR / EN) | `ListFormCode` | Wizard dosyası | Satır süzmesi | Alt formlar | Görünümler |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| Değerlendirmelerim / My Reviews | `App.Hr.MyPerformanceReview` | `Hr_MyPerformanceReview.json` | `EmployeeId = @USERID` | `MyPerformanceGoal`, `MyPerformanceCompetency`, `MyDevelopmentPlan` | Grid, Card, Pivot, Chart, Todo |
|
||
| Ekibimin Değerlendirmeleri / Team Reviews | `App.Hr.TeamPerformanceReview` | `Hr_TeamPerformanceReview.json` | `ManagerId = @USERID` | `TeamPerformanceGoal`, `TeamPerformanceCompetency`, `TeamDevelopmentPlan` | Grid, Card, Pivot, Chart, Todo |
|
||
| 360 Taleplerim / My 360 Requests | `App.Hr.My360Feedback` | `Hr_My360Feedback.json` | `ReviewerId = @USERID` | `My360FeedbackScore` | Grid, Card, Pivot, Chart |
|
||
| Gelişim Planım / My Development Plan | `App.Hr.MyDevelopmentPlan` | `Hr_MyDevelopmentPlan.json` | `EmployeeId = @USERID` | — (Değerlendirmelerim'in sekmesi; widget'tan tek liste olarak da açılır) | Grid |
|
||
|
||
#### 3.3 Intranet › Dashboard widget'ları
|
||
|
||
`Sas_T_IntranetWidget` kayıtları (`data/App.DeveloperKit.IntranetWidgets.json`, `SourceType: 1` =
|
||
Custom) üç custom component'i sağ kolona (`Column: 2`) yerleştirir. Widget'ı yalnız `PermissionName`
|
||
yetkisi olan kullanıcı alır (sunucu süzer, `IntranetAppService.GetWidgetsAsync`); kullanıcı panoda
|
||
yerini değiştirebilir, gizleyebilir.
|
||
|
||
| `Code` · sıra | Bileşen | `PermissionName` | Gösterir | Açtığı liste |
|
||
| --- | --- | --- | --- | --- |
|
||
| `my-performance` · 70 | `MyPerformanceWidget` | `App.Hr.MyPerformanceReview` | Aktif (tamamlanmamış) değerlendirmenin aşaması ve hedef/yetkinlik/genel puanı; tamamlanan sayısı ve ortalama puanı; `App.Hr.MyDevelopmentPlan` yetkisi varsa açık ve geciken gelişim aksiyonu | Değerlendirmelerim, Gelişim Planım |
|
||
| `team-performance` · 80 | `TeamPerformanceWidget` | `App.Hr.TeamPerformanceReview` | Değerlendirmemi bekleyen (`ManagerReview`), hedef/öz değerlendirmede, tamamlanan, toplam; bekleyen ilk 5 çalışanın adı | Ekibimin Değerlendirmeleri |
|
||
| `my-360-feedback` · 90 | `My360FeedbackWidget` | `App.Hr.My360Feedback` | Bekleyen ve gönderilen 360 talebi | 360 Taleplerim |
|
||
|
||
Bileşenler code modundadır ve rotasızdır (`RoutePath: null`). Veriyi ekranın kendi sorgusundan okur
|
||
(`GET /api/app/list-form-select/select?listFormCode=…`): satır süzmesi (`DefaultFilter`), kiracı ve
|
||
liste yetkisi ListForm'da kalır, bileşen yalnızca sayar — ayrı endpoint ya da SQL yoktur. Başlıklar
|
||
`App.DashboardWidget.{MyPerformance,TeamPerformance,My360Feedback}`, boş durum ve aktif değerlendirme
|
||
metinleri `App.DashboardWidget.Performance.*`; kart etiketleri İK şeritlerindeki
|
||
`App.Hr.Performance.Widget.*` anahtarlarıdır.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
Hepsi `sql/object/Hr_T_*.sql`; kiracı + tam audit + `IsActive`, `Guid` anahtar.
|
||
|
||
```
|
||
Hr_T_PerformancePeriod ──< Hr_T_PerformancePeriodSkill >── Hr_T_Skill
|
||
│
|
||
└──< Hr_T_PerformanceReview >── AbpUsers (EmployeeId, ManagerId)
|
||
│ └── Hr_T_PerformanceRating (RatingId)
|
||
├──< Hr_T_PerformanceGoal
|
||
├──< Hr_T_PerformanceCompetency >── Hr_T_Skill / Hr_T_SkillLevel ×3
|
||
├──< Hr_T_PerformanceFeedback ──< Hr_T_PerformanceFeedbackScore >── Hr_T_SkillLevel
|
||
└──< Hr_T_DevelopmentPlan >── Hr_T_Skill / Hr_T_Training / Hr_T_Certificate / AbpUsers (Mentor)
|
||
```
|
||
|
||
| Tablo | Önemli kolonlar | Tekillik / kural |
|
||
| --- | --- | --- |
|
||
| `Hr_T_PerformanceRating` | `Level`, `Name`, `MinScore`, `MaxScore`, `Color`, `TargetDistribution` | `(TenantId, Level)` tekil; `MinScore < MaxScore` |
|
||
| `Hr_T_PerformancePeriod` | `StartDate`, `EndDate`, `SelfReviewDueDate`, `ManagerReviewDueDate`, `GoalWeight`, `CompetencyWeight`, `Is360Enabled`, `Status` | Ağırlık toplamı = 100 (CHECK); `Status` ∈ Planned, Active, Calibration, Closed |
|
||
| `Hr_T_PerformancePeriodSkill` | `PeriodId`, `SkillId`, `ExpectedLevelId` | `(PeriodId, SkillId)` tekil |
|
||
| `Hr_T_PerformanceReview` | `BranchId` (şube, zorunlu — standart şube sözleşmesi, ekran `IsBranch`; `Hr_S_PerformancePeriodActivate` dönemi açarken çalışanın departman şubesini, yoksa çalışana / işlemi yapana atanmış ilk şubeyi yazar), `PeriodId`, `EmployeeId`, `EmployeeName`, `ManagerId`, `DepartmentId`, `JobPositionId`, `Status`, `LastStatus`, `GoalScore`, `CompetencyScore`, `Feedback360Score`, `OverallScore`, `CalibratedScore`, `RatingId`, yorumlar, gönderim tarihleri | `(PeriodId, EmployeeId)` tekil; `Status` ∈ GoalSetting, SelfReview, ManagerReview, Calibration, Completed; `CalibratedScore` 0–150 |
|
||
| `Hr_T_PerformanceGoal` | `GoalType` (KPI/OKR), `Title`, `Direction` (Increasing/Decreasing), `Unit`, `TargetValue`, `ActualValue`, `Weight`, `AchievementRate` | `TargetValue > 0`, `0 < Weight ≤ 100` |
|
||
| `Hr_T_PerformanceCompetency` | `SkillId`, `ExpectedLevelId`, `SelfLevelId`, `ManagerLevelId`, `Score` | `(ReviewId, SkillId)` tekil |
|
||
| `Hr_T_PerformanceFeedback` | `ReviewerId`, `Relation` (Peer/Subordinate/Superior/InternalCustomer), `Status` (Pending/Submitted), `Score`, `Comment`, `SubmittedDate` | `(ReviewId, ReviewerId)` tekil |
|
||
| `Hr_T_PerformanceFeedbackScore` | `FeedbackId`, `SkillId`, `LevelId`, `Comment` | `(FeedbackId, SkillId)` tekil |
|
||
| `Hr_T_DevelopmentPlan` | `EmployeeId`, `ReviewId`, `SkillId`, `Title`, `ActionType`, `TrainingId`, `CertificateId`, `MentorId`, `StartDate`, `DueDate`, `Status`, `Progress` | `ActionType` ∈ Training, Mentoring, Project, Reading, Certificate, Other; `Status` ∈ Planned, InProgress, Completed, Cancelled; `Progress` 0–100 |
|
||
|
||
Seviye listeleri (`ExpectedLevelId`, `SelfLevelId`, `ManagerLevelId`, `LevelId`) seçilen yetkinliğin
|
||
`SkillTypeId`'sine göre süzülür (lookup cascade `SkillId` → `@param0`).
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
#### 5.1 Formüller (`Hr_S_PerformanceReviewRecalc`)
|
||
|
||
| Değer | Formül |
|
||
| --- | --- |
|
||
| Hedef gerçekleşme % | Artan: `Gerçekleşen / Hedef × 100` · Azalan: `Hedef / Gerçekleşen × 100` (gerçekleşen ≤ 0 ise 150) · sonuç **0–150** aralığına kırpılır · gerçekleşen boşsa boş |
|
||
| Hedef puanı | `Σ(Gerçekleşme% × Ağırlık) / 100` (gerçekleşmesi boş hedef 0 sayılır; hedef yoksa boş) |
|
||
| Yetkinlik satır puanı | Yönetici seviyesinin `Hr_T_SkillLevel.Progress` değeri |
|
||
| Yetkinlik puanı | Puanı dolu yetkinlik satırlarının ortalaması |
|
||
| 360 satır puanı | Değerlendiricinin verdiği seviyelerin `Progress` ortalaması |
|
||
| 360 ortalaması | `Status = Submitted` geri bildirimlerin ortalaması — **genel puana girmez** |
|
||
| Genel puan | `(Hedef puanı × GoalWeight + Yetkinlik puanı × CompetencyWeight) / 100` (eksik bileşen 0; ikisi de boşsa boş) |
|
||
| Derece | `COALESCE(KalibrePuan, GenelPuan)` değerinin düştüğü aralık (`MinScore ≤ x < MaxScore`, aynı kiracının aktif dereceleri) |
|
||
|
||
Formda gerçekleşme % anlık önizlenir (`ActualValue`/`TargetValue`/`Direction` alanlarının
|
||
`EditorScript`'i); kalıcı değer her kayıtta prosedürle yeniden hesaplanır. Dönemde ağırlık
|
||
alanlarından biri değişince diğeri `100 - x` olur (`EditorScript`).
|
||
|
||
#### 5.2 Durum akışı (`Hr_S_PerformanceReviewAfterSave`)
|
||
|
||
```
|
||
GoalSetting ──(Yönetici)──▶ SelfReview ──(Çalışan)──▶ ManagerReview ──(Yönetici)──▶ Calibration ──(İK)──▶ Completed
|
||
▲ ◀──(Yönetici iade)──┘ ◀──(Yönetici iade)──┘
|
||
```
|
||
|
||
| Aktör (ekran) | İzinli geçişler |
|
||
| --- | --- |
|
||
| İK (Tüm Değerlendirmeler, Kalibrasyon) | Her geçiş |
|
||
| Çalışan (Değerlendirmelerim) | SelfReview → ManagerReview |
|
||
| Yönetici (Ekibimin Değerlendirmeleri) | GoalSetting → SelfReview · SelfReview → GoalSetting · ManagerReview → SelfReview · ManagerReview → Calibration |
|
||
|
||
- **GoalSetting'ten çıkış** için en az bir hedef olmalı ve ağırlık toplamı tam **100** olmalıdır (her aktör için).
|
||
- İzinsiz geçiş hata vermez, **kayıt sonrası durum `LastStatus`'a geri alınır** (kayıt yenilenince eski aşama görünür).
|
||
- Geçiş damgaları: → ManagerReview `SelfSubmittedDate`, → Calibration `ManagerSubmittedDate`, → Completed `CompletedDate`.
|
||
- → **Completed**: yönetici seviyeleri `Adm_T_UserSkill`'e yazılır (`Level = ⌈Progress / 20⌉`, 1–5; var olan kayıt güncellenir, `Note = "Performans: {Dönem}"`).
|
||
- Her kayıtta: `EmployeeName`/`DepartmentId`/`JobPositionId` çalışandan tamamlanır, dönemin eksik yetkinlikleri eklenir, puanlar yeniden hesaplanır.
|
||
- Todo panosunda kartı sürüklemek de aynı kuraldan geçer.
|
||
|
||
#### 5.3 Satır ve aşama güvenliği (`Hr_S_PerformanceGuard`, before-command)
|
||
|
||
Persona ekranları satırı `DefaultFilter` ile süzer; kayıt uçları satırı yalnızca `Id` ile
|
||
güncellediği için aynı kural yazma tarafında prosedürle uygulanır. Kural dışı istek
|
||
`THROW 51000–51005` ile reddedilir.
|
||
|
||
| Aktör | Sahiplik | Değerlendirme kaydı | Hedef / Yetkinlik | Gelişim planı | 360 |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| Çalışan | `EmployeeId = kullanıcı` | GoalSetting, SelfReview | GoalSetting, SelfReview | Her aşama (yalnız ilerleme/not) | — |
|
||
| Yönetici | `ManagerId = kullanıcı` | GoalSetting, SelfReview, ManagerReview | aynı | Her aşama | — |
|
||
| Değerlendirici | `Feedback.ReviewerId = kullanıcı` | — | — | — | GoalSetting → ManagerReview arası |
|
||
| İK | — | Serbest | Serbest | Serbest | Serbest |
|
||
|
||
Dönem `Closed` ise İK dışındaki her yazma reddedilir. "Gelişim Planım" guard prosedüründen değil,
|
||
yalnızca satırın `EmployeeId`'sini denetleyen komuttan geçer (`THROW 51020`); aksiyon dönemden
|
||
bağımsız olabildiği için kapalı dönemde de ilerleme güncellenebilir.
|
||
|
||
**Alan kilidi:** persona ekranında çalışanın/yöneticinin değiştirmemesi gereken alanlar salt
|
||
okunur çizilir **ve** yazma yetkisi İK ekranının `.Create`/`.Update` yetkisine bağlanır;
|
||
sunucu, kullanıcının yetkisi olmayan alanı güncelleme isteğinden düşürür (`ListFormFieldManager.CanUpdate`).
|
||
|
||
| Ekran | Düzenlenebilir alanlar |
|
||
| --- | --- |
|
||
| Değerlendirmelerim | `Status`, `SelfComment` |
|
||
| Hedeflerim | Yönetici yorumu ve gerçekleşme % dışında hepsi |
|
||
| Yetkinliklerim | `SelfLevelId`, `SelfComment` (ekleme/silme yok) |
|
||
| Gelişim Planım | `Status`, `Progress`, `EmployeeNote` (ekleme/silme yok) |
|
||
| Ekibimin Değerlendirmeleri | `Status`, `ManagerComment` |
|
||
| Ekip Hedefleri | Öz yorum ve gerçekleşme % dışında hepsi |
|
||
| Ekip Yetkinlikleri | Öz seviye ve öz yorum dışında hepsi (ekleme/silme var) |
|
||
| Ekip Gelişim Planı | Çalışan notu dışında hepsi |
|
||
| 360 Taleplerim | `Status`, `Comment`; puan satırlarında `LevelId`, `Comment` |
|
||
| Kalibrasyon | `Status`, `CalibratedScore`, `CalibrationNote` |
|
||
|
||
#### 5.4 Kancalar
|
||
|
||
| Ekran | Komut | Ne çalışır |
|
||
| --- | --- | --- |
|
||
| Dönemler | Insert/UpdateAfter | `Hr_S_PerformancePeriodActivate` — dönem **Active** ise kiracının aktif her kullanıcısına değerlendirme açar (var olana dokunmaz), dönemin yetkinlik setini eksik değerlendirmelere kopyalar, yeni açılanlara bildirim gönderir |
|
||
| Yetkinlik Seti | Insert/UpdateAfter | Aynı prosedür (sonradan eklenen yetkinlik açık değerlendirmelere eklenir) |
|
||
| Değerlendirme ekranları | InsertAfter / UpdateAfter | `Hr_S_PerformanceReviewAfterSave @rid, @kullanıcı, N'Hr' \| 'Employee' \| 'Manager'` |
|
||
| Persona ekranları | Insert/Update/DeleteBefore | `Hr_S_PerformanceGuard` |
|
||
| Hedef / Yetkinlik / 360 ekranları | After | `Hr_S_PerformanceReviewRecalc` |
|
||
| 360 (İK) | InsertBefore | Dönemde 360 kapalıysa ya da değerlendirici çalışanın kendisiyse reddeder |
|
||
| 360 (İK) | InsertAfter | `Hr_S_PerformanceFeedbackOpen` — değerlendirmenin yetkinlikleri için puan satırlarını açar, değerlendiriciye bildirim gönderir |
|
||
| 360 ekranları | UpdateAfter | `Status = Submitted` iken `SubmittedDate` damgalanır, puan yeniden hesaplanır |
|
||
| Gelişim planı ekranları | Insert/UpdateAfter | `Hr_S_DevelopmentPlanSync` — eğitime "Katıldı" işlenen ya da `Completed` aksiyonu %100 ve Tamamlandı yapar |
|
||
|
||
Güncelleme komutunda `@Id` bir dizidir (`IN @Id` ile açılır); aktör `UpdateFieldsDefaultValue`
|
||
ile yazılan `@LastModifierId`'den okunur. Ekleme komutunda `@Id` tekildir, aktör `@CreatorId`'dir.
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Her ekranın kök yetkisi + `.Create/.Update/.Delete/.Export/.Import/.Note`
|
||
Menüsüz alt formların yetkisi ana ekranın altındadır; menüsüz persona ekranlarının
|
||
(Değerlendirmelerim, Ekibimin Değerlendirmeleri, 360 Taleplerim) yetkisi menü dalı olmadığından
|
||
`App.Hr` grubunun kökündedir (deploy menüsüz ekranı böyle yazar).
|
||
**Hiçbir yetki role otomatik atanmaz** — rol ekranından verilir.
|
||
|
||
Önerilen dağıtım:
|
||
|
||
| Rol | Verilecek yetkiler |
|
||
| --- | --- |
|
||
| Tüm çalışanlar | `App.Hr.MyPerformanceReview` (+ `.Update`), `App.Hr.MyPerformanceGoal` (+ `.Create/.Update/.Delete`), `App.Hr.MyPerformanceCompetency` (+ `.Update`), `App.Hr.MyDevelopmentPlan` (+ `.Update`), `App.Hr.My360Feedback` (+ `.Update`), `App.Hr.My360FeedbackScore` (+ `.Update`) |
|
||
| Yöneticiler | Yukarıdakiler + `App.Hr.TeamPerformanceReview` (+ `.Update`), `App.Hr.TeamPerformanceGoal`, `App.Hr.TeamPerformanceCompetency`, `App.Hr.TeamDevelopmentPlan` (+ `.Create/.Update/.Delete`) |
|
||
| İK | `App.Hr.Performance` dalının tamamı + `App.Hr.PerformanceRating` |
|
||
|
||
Persona ekranlarındaki kilitli alanlar İK ekranının yetkisine bağlı olduğundan, çalışan/yönetici
|
||
rolüne **İK ekranlarının `.Update`/`.Create` yetkisi verilmez**; verilirse persona ekranlarında
|
||
kilitli alanlar o kullanıcı için yazılabilir hâle gelir.
|
||
|
||
Intranet widget'ı listenin okuma yetkisiyle görünür: Performansım `App.Hr.MyPerformanceReview`,
|
||
Ekibimin Performansı `App.Hr.TeamPerformanceReview`, 360 Taleplerim `App.Hr.My360Feedback`. Ayrı
|
||
widget yetkisi yoktur — listeyi açamayan kullanıcıya özet de gösterilmez.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `AbpUsers` | Çalışan, yönetici, değerlendirici, mentor; departman/pozisyon kopyası |
|
||
| Kullanıcı detayı › Performans | Değerlendirmeler ve Gelişim Planları ekranları çalışana süzülmüş açılır (Personel Kaydı bölümü) |
|
||
| `Hr_T_Department`, `Hr_T_JobPosition` | Değerlendirmenin organizasyon kırılımı (Pivot/Chart) |
|
||
| `Hr_T_SkillType` / `Hr_T_Skill` / `Hr_T_SkillLevel` | Dönem yetkinlik seti, beklenen/öz/yönetici/360 seviyeleri, puan (`Progress`) |
|
||
| `Adm_T_UserSkill` | Tamamlanan değerlendirmenin yönetici seviyeleri kullanıcı profiline yazılır |
|
||
| `Hr_T_Training` / `Hr_T_TrainingParticipant` | Gelişim aksiyonu bir eğitime bağlanır; katılım "Katıldı" ise aksiyon tamamlanır |
|
||
| `Hr_T_Certificate` | Sertifika aksiyonları |
|
||
| Bildirimler | Tipler `PerformansDurumDegisti`, `Performans360Talebi`; kurallar `Custom` + `UiActivity`/`UiToast` (yalnız kanalı belirler). Metinler `App.Hr.Performance.Notification.{Status,Feedback}.{Subject,Message}` (TR), yer tutucular `[Employee]`, `[Period]`, `[Status]`. Yazan: `Hr_S_PerformanceNotify` |
|
||
|
||
Bildirim alıcıları: → GoalSetting / SelfReview / Completed çalışana; → ManagerReview / Completed
|
||
yöneticiye; dönem aktivasyonunda yeni açılan her değerlendirmenin çalışanına; 360 eklenince
|
||
değerlendiriciye.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İK **Yetkinlik Seti**'ni hazırlar (ör. İletişim → beklenen B2), **Dönemler**'de "2026 Yıl Sonu"nu
|
||
60/40 ağırlık ve 360 açık olarak girer, durumu **Aktif** yapar → tüm aktif çalışanlara
|
||
değerlendirme açılır, yetkinlikler kopyalanır, çalışanlar bildirim alır.
|
||
2. İK **Tüm Değerlendirmeler**'de her kaydın **Yönetici**'sini seçer.
|
||
3. Çalışan Intranet panosundaki **Performansım** widget'ından **Değerlendirmelerim**'i açar,
|
||
**Hedeflerim**'de hedeflerini girer (ağırlık toplamı 100).
|
||
4. Yönetici **Ekibimin Performansı** widget'ından **Ekibimin Değerlendirmeleri**'ni açar, hedefleri gözden geçirir, durumu **Öz Değerlendirme**
|
||
yapar → çalışan bildirim alır.
|
||
5. Çalışan gerçekleşenleri, öz seviyelerini ve yorumunu girer, durumu **Yönetici Değerlendirmesi**
|
||
yapar → yönetici bildirim alır.
|
||
6. İK 360 sekmesinde değerlendirici ekler → değerlendiriciler panodaki **360 Taleplerim** widget'ından talebi açıp puanlayıp gönderir.
|
||
7. Yönetici seviyeleri ve yorumu girer, gelişim aksiyonu planlar (ör. "İleri Excel" eğitimi),
|
||
durumu **Kalibrasyon** yapar.
|
||
8. İK **Kalibrasyon**'da dağılımı (Chart/Pivot, derece × departman) hedef dağılımla karşılaştırır,
|
||
gerekenlerin **Kalibre Puan**ını girer, durumu **Tamamlandı** yapar → derece kesinleşir,
|
||
yetkinlikler `UserSkill`'e yazılır, çalışan ve yönetici bildirim alır.
|
||
9. Çalışan eğitime "Katıldı" işlendiğinde gelişim aksiyonu bir sonraki kayıtta kendiliğinden tamamlanır.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Durumu değiştirdim ama kayıt eski aşamaya döndü.** O geçiş sizin rolünüze açık değil (§5.2) ya da
|
||
hedef belirlemeden çıkarken ağırlık toplamı 100 değil. Geçersiz geçiş hata vermez, geri alınır.
|
||
|
||
**"Değerlendirme bu aşamada bu işlem için açık değil" hatası.** Guard tablosu (§5.3): çalışan
|
||
yönetici değerlendirmesi başladıktan sonra hedef/yetkinlik değiştiremez; kalibrasyon ve sonrası
|
||
yalnız İK'dadır; dönem kapalıysa yalnız İK yazar.
|
||
|
||
**Genel puan neden hedef puanından düşük/yüksek?** Genel = (Hedef × GoalWeight + Yetkinlik ×
|
||
CompetencyWeight) / 100. Yetkinlik puanı yalnızca yönetici seviyesinden gelir; öz seviye ve 360
|
||
puana girmez.
|
||
|
||
**Gerçekleşme %150'de kalıyor.** Tavan bilinçlidir (§2.3, karar 6).
|
||
|
||
**Derece boş.** Kiracıda derece ölçeği tanımlı değil. Host seed'i (`data/App.Hr.PerformanceRating.json`)
|
||
host içindir; her kiracı İK › Tanımlar › Performans Dereceleri'ni kendisi girer.
|
||
|
||
**Teknik yetkinlikte seviye listesi boş.** Seed'de "Technical Skills" tipine seviye tanımlı değildir
|
||
(Organizasyon ve Yetkinlik bölümü §9). İK › Tanımlamalar › Yetenek Tipleri › Teknik Yetenekler › Seviyeler'e
|
||
`Progress` değerli seviyeler eklenmeden bu yetkinlikler puanlanamaz.
|
||
|
||
**Yöneticiyi kim belirliyor?** İK, değerlendirme kaydındaki `ManagerId` alanından. Platformda
|
||
kullanıcı/departman üzerinde yönetici ilişkisi yoktur (§2.2).
|
||
|
||
**Yeni işe giren çalışana değerlendirme nasıl açılır?** Aktif dönem kaydını yeniden kaydetmek
|
||
eksik değerlendirmeleri açar; ya da İK Tüm Değerlendirmeler'den elle ekler.
|
||
|
||
**360 puanı neden genel puanda yok?** Karar 7: bilgi amaçlıdır; `Feedback360Score` olarak gösterilir.
|
||
|
||
**Bildirim gelmiyor.** Kiracıda `PerformansDurumDegisti` / `Performans360Talebi` tipi ve `Custom`
|
||
kuralları olmalı; yeni kiracıya host seed'inden kopyalanır, mevcut kiracıda Administration ›
|
||
Bildirimler'den eklenir.
|
||
|
||
**Değerlendirmelerim / Ekibimin Değerlendirmeleri menüde yok.** Bilinçli: İK menüsü İK içindir (§2.4).
|
||
Çalışan ve yönetici Intranet › Dashboard'daki widget'tan açar. Widget görünmüyorsa rolüne liste
|
||
yetkisi verilmemiştir (§6) ya da kullanıcı widget'ı panoda gizlemiştir (tasarım modundan geri açılır).
|
||
|
||
**Çalışan kendi gelişim aksiyonunu ekleyemiyor.** "Gelişim Planım" ekleme kapalıdır; aksiyonu
|
||
yönetici (Ekip Gelişim Planı) ya da İK açar.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_Performance{Rating,Period,PeriodSkill,Review,Goal,Competency,Feedback,FeedbackScore}.sql`, `Hr_T_DevelopmentPlan.sql` | Tablolar, CHECK ve tekil indeksler |
|
||
| `configs/seeds/sql/object/Hr_S_Performance{Notify,ReviewRecalc,PeriodActivate,Guard,ReviewAfterSave,FeedbackOpen}.sql`, `Hr_S_DevelopmentPlanSync.sql` | Prosedürler |
|
||
| `configs/seeds/wizard/{PerformanceRating,PerformancePeriodSkill,PerformancePeriod,PerformanceGoal,PerformanceCompetency,PerformanceFeedbackScore,PerformanceFeedback,ReviewDevelopmentPlan,PerformanceReview,MyPerformanceGoal,MyPerformanceCompetency,MyDevelopmentPlan,MyPerformanceReview,TeamPerformanceGoal,TeamPerformanceCompetency,TeamDevelopmentPlan,TeamPerformanceReview,My360FeedbackScore,My360Feedback,PerformanceCalibration,DevelopmentPlan}.json` | 21 wizard (List) |
|
||
| `configs/seeds/data/App.DeveloperKit.CustomComponents/{b2d9fa60-b052-5039-a0fc-146f4e5b2e8c,98a5c0b9-c8d6-5e83-ae76-d9ccb5b70cba,d669129d-52fe-56e1-972d-d20fe1b3360e}.json` | `MyPerformanceWidget`, `TeamPerformanceWidget`, `My360FeedbackWidget` (code modu, rotasız) |
|
||
| `configs/seeds/data/App.DeveloperKit.IntranetWidgets.json` | `my-performance`, `team-performance`, `my-360-feedback` pano kayıtları |
|
||
| `configs/seeds/data/App.Hr.PerformanceRating.json` | 5 kademeli derece ölçeği |
|
||
| `configs/seeds/data/App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json` | Menü, yetki, dil satırları (wizard'lara ait) |
|
||
| `configs/seeds/data/App.Notifications.Notification{Types,Rules}.json` | 2 tip, 4 kural |
|
||
| `ui/safelist.txt` | Widget bileşenlerinin Tailwind sınıfları (`twSafelistGenerator` derlemede yeniler) |
|
||
|
||
Kurulum: DB Migrate (tablolar/prosedürler `sql/object`, ekranlar `WizardDataSeeder`, satırlar
|
||
`ListFormSeedDataApplier`). Ardından rollere yetki verilir (§6).
|
||
|
||
Geri alma: Wizard Manager'dan talebin wizard'ları silinir (alt formlar önce); tabloyu düşürmek
|
||
yalnızca onayda seçilirse olur. Widget bileşenleri ve pano kayıtları, bildirim tip/kural satırları, derece seed'i ve
|
||
`Hr_S_*` prosedürleri elle kaldırılır. `Adm_T_UserSkill`'e yazılmış seviyeler kullanıcı verisidir,
|
||
geri alınmaz.
|
||
|
||
<!-- module-doc:section App.Hr.DisciplinaryCase claims=App.Hr.DisciplinaryPenaltyType -->
|
||
## Disiplin Dosyaları (`App.Hr.DisciplinaryCase`)
|
||
|
||
Personel disiplin süreci: olay tutanağı (personel, tarih/saat/yer, tanıklar, tutanağı tutan) →
|
||
savunma talebi ve savunma → karar (ceza türü, yürürlük/tebliğ, ücret kesintisi) → belgeler. Tamamı
|
||
konfigürasyondur (Wizard + SQL); entity, migration ya da React kodu yoktur.
|
||
|
||
> 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 / disiplin kurulu sekreteryası | Dosya açar, tutanağı yazar, savunma ister, savunmayı ve kararı işler, belgeleri yükler, dosyayı kapatır | Disiplin Dosyaları |
|
||
| Yönetici (tutanağı tutan) | Olayı kaydeder | Disiplin Dosyaları |
|
||
| İK yöneticisi | Ceza türü tanımlarını yönetir | İK › Tanımlar › Ceza Türleri |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Satır süzmesi yoktur; disiplin kaydı hassas veridir, görünürlük yalnızca yetkiyle sınırlanır.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan (wizard,
|
||
> SQL, seed, commit `130e23bc` "Disiplin Dosyaları, Çalışma Takvimi") okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Tek menü ekranı (dosya) + üç menüsüz alt form: Savunmalar, Kararlar, Belgeler |
|
||
| Menü yeri | Dosya ekranı doğrudan `İnsan Kaynakları` kökünde; ceza türü İK › Tanımlar'da |
|
||
| Dosya durumu | Open → AwaitingDefense → Decided → Closed; **elle** değiştirilir (Todo panosunda sürükleyerek ya da formdan). Savunma/karar girilmesi durumu otomatik değiştirmez |
|
||
| Savunma süresi | Son savunma tarihi = talep tarihi + **2 gün** (formda önerilir, değiştirilebilir); talep tarihinden önce olamaz |
|
||
| Ceza türü | Ağırlık (`Severity` 1–5) sırasıyla listelenir; karar ekranında yalnız aktif türler |
|
||
| Ücret kesintisi | Kararda tutar olarak saklanır; bordroya aktarım yoktur |
|
||
| Tanıklar | Çok değerli kullanıcı seçimi (`WitnessUserIds`, `dxTagBox`) |
|
||
| Dosya numarası | `DSP-YYYY-00001` (kiracı + yıl bazında, insert sonrası SQL) |
|
||
| Onay akışı, bildirim, rapor | Yok |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
| Menü (TR / EN) | `ListFormCode` | Yer | Alt formlar | Görünümler | Widget'lar |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| Disiplin Dosyaları / Disciplinary Cases | `App.Hr.DisciplinaryCase` | `İnsan Kaynakları` (sıra 10, `FcHighPriority`) | `DisciplinaryDefense`, `DisciplinaryDecision`, `DisciplinaryFile` (`Id → CaseId`) | Grid, Card, Pivot, Chart, **Todo** | Toplam · Açık · Savunma Bekleniyor · Kapanan (Karara Bağlandı + Kapandı) |
|
||
| Ceza Türleri / Penalty Types | `App.Hr.DisciplinaryPenaltyType` | `İnsan Kaynakları › Tanımlar` | — | Grid, Card, Pivot, Chart | — (tanım listesi) |
|
||
|
||
Todo panosu: başlık `Subject`, açıklama `IncidentDescription`, tarih `IncidentDate`, sütun sırası
|
||
`Open, AwaitingDefense, Decided, Closed`.
|
||
|
||
Seed verisi (`data/App.Hr.DisciplinaryPenaltyType.json`): Sözlü Uyarı (1), Yazılı Uyarı (2), İhtar (3),
|
||
Kınama (3), Ücret Kesintisi (4), Fesih (5).
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
```
|
||
AbpUsers ──< Hr_T_DisciplinaryCase ──< Hr_T_DisciplinaryDefense
|
||
(UserId, ReportedById, ├──< Hr_T_DisciplinaryDecision >── Hr_T_DisciplinaryPenaltyType
|
||
WitnessUserIds) └──< Hr_T_DisciplinaryFile >── Hr_T_DocumentType
|
||
```
|
||
|
||
| Tablo | Önemli kolonlar |
|
||
| --- | --- |
|
||
| `Hr_T_DisciplinaryPenaltyType` | `Name`, `Severity`, `Description`, `IsActive` |
|
||
| `Hr_T_DisciplinaryCase` | `BranchId` (şube, zorunlu — standart şube sözleşmesi, ekran `IsBranch`), `CaseNo`, `UserId`, `DepartmentId`, `JobPositionId`, `IncidentDate`, `IncidentTime`, `IncidentPlace`, `ReportedById`, `Status`, `Subject`, `IncidentDescription` (HTML tutanak), `WitnessUserIds` |
|
||
| `Hr_T_DisciplinaryDefense` | `CaseId`, `RequestDate`, `DueDate`, `ResponseDate`, `Status` (Requested/Submitted/NotSubmitted), `DefenseText` (HTML) |
|
||
| `Hr_T_DisciplinaryDecision` | `CaseId`, `DecisionDate`, `PenaltyTypeId`, `EffectiveDate`, `NotificationDate`, `DeductionAmount`, `Status` (Draft/Final), `DecisionText` (HTML) |
|
||
| `Hr_T_DisciplinaryFile` | `CaseId`, `DocumentTypeId`, `FileDate`, `FileName`, `FileContent` |
|
||
|
||
Tablo düzeyinde CHECK ya da tekil indeks yoktur; kurallar formdadır.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
| Yer | Kural |
|
||
| --- | --- |
|
||
| Dosya — yeni kayıt | Olay tarihi bugün, tutanağı tutan oturumdaki kullanıcı, durum `Open` |
|
||
| Dosya — personel seçimi | Departman ve pozisyon kullanıcı kaydından kopyalanır (olay anındaki hâli saklanır) |
|
||
| Dosya — insert sonrası | `CaseNo = 'DSP-' + yıl + '-' + 5 hane` (kiracı + yıl içinde `MAX + 1`, yalnız boşsa) |
|
||
| Savunma — yeni kayıt | Talep tarihi bugün, durum `Requested`, son tarih talep + 2 gün |
|
||
| Savunma — tarih kontrolü | Son tarih talep tarihinden önceyse uyarı + değişiklik geri alınır |
|
||
| Karar — yeni kayıt | Karar tarihi bugün, durum `Draft` |
|
||
| Belge — yeni kayıt | Tarih bugün |
|
||
|
||
Tavsiye edilen kullanım sırası: dosya `Open` → savunma istenince `AwaitingDefense` → karar
|
||
`Final` olunca `Decided` → tebliğ ve belgeler tamamlanınca `Closed`. Bu sıra sistemce zorlanmaz.
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. `App.Hr.DisciplinaryCase` kökü + `.Create/.Update/.Delete/.Export/.Import/.Note`;
|
||
`DisciplinaryDefense`, `DisciplinaryDecision`, `DisciplinaryFile` onun altındadır. Ceza türü
|
||
`App.Hr.Definitions` altındadır. Satır süzmesi yoktur. Hiçbir yetki role otomatik atanmaz.
|
||
|
||
| Rol | Yetkiler |
|
||
| --- | --- |
|
||
| İK disiplin sorumlusu | Dosya + üç alt form (tam) + ceza türü |
|
||
| Tutanak tutan yönetici | `App.Hr.DisciplinaryCase` (+ `.Create`) — ancak bu yetki tüm dosyaları gösterir |
|
||
|
||
Disiplin verisi kişisel ve hassas veridir; okuma yetkisi dar tutulmalıdır.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `AbpUsers` | Personel, tutanağı tutan, tanıklar |
|
||
| Kullanıcı detayı › Disiplin | Disiplin Dosyaları ekranı çalışana süzülmüş açılır (Personel Kaydı bölümü) |
|
||
| `Hr_T_Department`, `Hr_T_JobPosition` | Olay anındaki birim (Pivot kırılımı) |
|
||
| `Hr_T_DocumentType` | Belge türü (ortak İK tanımı) |
|
||
|
||
Bildirim, onay akışı, rapor şablonu ya da bordro bağlantısı yoktur.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Vardiya amiri **Disiplin Dosyaları**'nda yeni dosya açar: personel seçilir (departman/pozisyon
|
||
dolar), olay tarihi/saati/yeri, konu, tutanak metni ve tanıklar girilir → `DSP-2026-00001`, durum Açık.
|
||
2. İK **Savunmalar** sekmesine savunma talebi ekler; son tarih 2 gün sonrası önerilir; dosya panoda
|
||
**Savunma Bekleniyor**'a çekilir.
|
||
3. Personel savunmasını verince talep **Savunma Verildi** yapılır, metin ve tarih girilir; verilmezse **Savunma Verilmedi**.
|
||
4. Kurul kararı **Kararlar** sekmesine girilir: ceza türü Yazılı Uyarı, yürürlük ve tebliğ tarihi, durum **Kesinleşti**; dosya **Karara Bağlandı**.
|
||
5. İmzalı tutanak, savunma ve tebliğ belgesi **Belgeler** sekmesine yüklenir; dosya **Kapandı** yapılır.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Savunma/karar girdim, dosya durumu değişmedi.** Durum elle yönetilir; panoda sürükleyin ya da formdan seçin.
|
||
|
||
**Son savunma tarihi neden 2 gün sonrası?** Formdaki varsayılan öneridir; değiştirilebilir, yalnızca talep tarihinden önce olamaz.
|
||
|
||
**Ücret kesintisi bordroya yansıyor mu?** Hayır; karar kaydında bilgi olarak durur.
|
||
|
||
**Tutanak metni listede görünmüyor.** HTML alan listede gizlidir; detayda ve Todo kartında görünür.
|
||
|
||
**Bir yöneticinin yalnız kendi tuttuğu dosyaları görmesi mümkün mü?** Şu an değil (satır süzmesi yok). Gerekirse ayrı bir persona ekranı `DefaultFilter` (`"ReportedById" = '@USERID'`) ile açılır (Performans modülündeki kalıp).
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_Disciplinary{PenaltyType,Case,Defense,Decision,File}.sql` | Tablolar |
|
||
| `configs/seeds/wizard/Disciplinary{PenaltyType,Case,Defense,Decision,File}.json` | 5 wizard |
|
||
| `configs/seeds/data/App.Hr.DisciplinaryPenaltyType.json` | Ceza türleri |
|
||
| `configs/seeds/data/App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json` | Menü, yetki, dil satırları |
|
||
|
||
Kurulum: DB Migrate. Geri alma: Wizard Manager'dan alt formlar (`DisciplinaryDefense`, `DisciplinaryDecision`,
|
||
`DisciplinaryFile`) önce, sonra `DisciplinaryCase` ve `DisciplinaryPenaltyType` silinir; tablolar
|
||
yalnızca onayda seçilirse düşer.
|
||
|
||
<!-- module-doc:section App.Hr.Vehicles -->
|
||
## Araçlar (`App.Hr.Vehicles`)
|
||
|
||
Şirket araç filosu yönetimi: araç ve şoför kayıtları, araç/şoför belgeleri (ruhsat, sigorta,
|
||
muayene, ehliyet, psikoteknik), trafik cezaları ve kazalar, fatura bazlı araç masrafları ve
|
||
güvenlik kulübesinden araç giriş–çıkış takibi (km, süre, gidilen yer). Tamamı konfigürasyondur
|
||
(Wizard + SQL); entity, migration ya da React kodu yoktur.
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Filo / idari işler sorumlusu | Araç, şoför, belge ve masraf tanımlarını yönetir; araç belgelerini ve masraf faturalarını girer | Araç Belgeleri · Araçlar · Gidilecek Yerler · Şoför Tanımlama · Masraf Tanımlama · Masraf Girişleri |
|
||
| Güvenlik personeli | Aracın çıkışını ve dönüşünü (km, saat, kullanan personel) kaydeder | Araç Giriş-Çıkış Takip |
|
||
| Yönetim | Dışarıdaki araç sayısı, toplam km ve masrafı izler | Widget'lar, Pivot, Chart |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Araç bir şubeye (tesis) bağlıdır; satır süzmesi yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan (wizard,
|
||
> SQL, seed, commit'ler `7be0b4ed` "Human Resources -> Araçlar" ve `021a8a34` "Araçlar düzenlemesi")
|
||
> okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Wizard ekranları; aracın altında Belgeler, şoförün altında Belgeler / Cezalar / Kazalar, masraf girişinin altında Kalemler (menüsüz alt formlar) |
|
||
| Belge tanımı | Tek tanım tablosu (`Hr_T_VehicleDocument`) iki eksenle ayrılır: **grup** (Vehicle / Driver) ve **tip** (Insurance, Document, Tax, Toll, Inspection, Maintenance, Penalty, Accident). Her alt form kendi kümesini süzer |
|
||
| Araç durumu | `Arrived` (Geldi — şirkette) / `Left` (Gitti — dışarıda); giriş–çıkış kaydından güncellenir |
|
||
| Araç km'si | `CurrentKm` giriş–çıkış kaydının giriş km'sinden güncellenir; yeni çıkışta önerilen çıkış km'si budur |
|
||
| Zimmet | Şoföre en fazla **5 araç** zimmetlenir (`Vehicle1Id`…`Vehicle5Id` sabit kolonlar) |
|
||
| Şoför km'si | Şoförün `TotalKm`'si, kullandığı tüm hareketlerin yapılan km toplamıdır (SQL) |
|
||
| Masraf | Fatura başlığı + kalemler; `Net Tutar = Miktar × Tutar × (1 − İskonto% / 100)` formda hesaplanır |
|
||
| Muayene/sigorta tarihleri | Araç kaydında başlangıç–bitiş tarihleri olarak tutulur; **hatırlatma/bildirim yoktur** |
|
||
| Hareket numarası | `MovementNo` kiracı bazında `MAX + 1` (insert sonrası SQL) |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
`İnsan Kaynakları › Araçlar` (`App.Hr.Vehicles`, ikon `FcAutomotive`)
|
||
|
||
| Sıra | Menü (TR / EN) | `ListFormCode` | Alt formlar | Widget'lar |
|
||
| --- | --- | --- | --- | --- |
|
||
| 1 | Araç Belgeleri / Vehicle Documents | `App.Hr.VehicleDocument` | — | Toplam · Aktif · Pasif |
|
||
| 2 | Masraf Tanımlama / Expense Definitions | `App.Hr.VehicleExpenseDefinition` | — | Toplam · Aktif · Pasif |
|
||
| 3 | Gidilecek Yerler / Destinations | `App.Hr.VehicleDestination` | — | Toplam · Aktif · Pasif |
|
||
| 4 | Araçlar / Vehicles | `App.Hr.Vehicle` | `VehicleFile` (`Id → VehicleId`) | Toplam · Geldi · Gitti · Pasif |
|
||
| 5 | Şoför Tanımlama / Drivers | `App.Hr.Driver` | `DriverDocument`, `DriverPenalty`, `DriverAccident` (`Id → DriverId`) | Toplam · Zimmetli Araçlı · Toplam Km |
|
||
| 6 | Araç Giriş-Çıkış Takip / Vehicle Gate Log | `App.Hr.VehicleMovement` | — | Toplam · Gitti · Bugün |
|
||
| 7 | Masraf Girişleri / Vehicle Expenses | `App.Hr.VehicleExpense` | `VehicleExpenseLine` (`Id → VehicleExpenseId`) | Toplam · Bugün · Toplam Tutar (net kalemler) |
|
||
|
||
Tüm ekranlar Grid, Card, Pivot, Chart görünümleriyle gelir; özel görünüm (Todo, Scheduler) yoktur.
|
||
|
||
Seed verisi:
|
||
- 17 belge tanımı (`data/App.Hr.VehicleDocument.json`). Örnekler: trafik sigortası, ruhsat, K2, MTV, OGS/HGS, egzoz/genel muayene, takograf (araç); sürücü belgesi, psikoteknik, SRC 4, kırmızı ışık ve hız cezası (şoför).
|
||
- 9 masraf tanımı (`data/App.Hr.VehicleExpenseDefinition.json`): sigorta, vergi, bakım, muayene ×2, geçiş ×2, ceza, yakıt.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
```
|
||
Sas_T_Branch ──< Hr_T_Vehicle ──< Hr_T_VehicleFile >── Hr_T_VehicleDocument (grup Vehicle)
|
||
│ ▲
|
||
│ └── Hr_T_Driver.Vehicle1..5Id ── AbpUsers (UserId)
|
||
│ ├──< Hr_T_DriverDocument >── VehicleDocument (grup Driver, ceza/kaza hariç)
|
||
│ ├──< Hr_T_DriverPenalty >── VehicleDocument (tip Penalty)
|
||
│ └──< Hr_T_DriverAccident >── VehicleDocument (tip Accident)
|
||
├──< Hr_T_VehicleExpense ──< Hr_T_VehicleExpenseLine >── Hr_T_VehicleExpenseDefinition
|
||
│ └── Hr_T_VehicleDestination (firma)
|
||
└──< Hr_T_VehicleMovement >── AbpUsers (gönderen, güvenlik, kullanan), Hr_T_VehicleDestination
|
||
```
|
||
|
||
| Tablo | Önemli kolonlar |
|
||
| --- | --- |
|
||
| `Hr_T_VehicleDocument` | `DocumentGroup` (Vehicle/Driver), `DocumentType` (8 tip), `Name`, `IsActive` |
|
||
| `Hr_T_Vehicle` | `BranchId` (tesis), `Name`, `Brand`, `Model`, `BodyType`, `UsagePlace`, `RegistrationDate`, `PlateNumber`, `Status` (Arrived/Left), `CurrentKm`, muayene / sigorta / egzoz / takograf başlangıç–bitiş tarihleri, `IsActive` |
|
||
| `Hr_T_VehicleFile` | `VehicleId`, `VehicleDocumentId`, `FileName`, `FileContent` |
|
||
| `Hr_T_VehicleDestination` | `Name`, `Distance` (km), `IsActive` |
|
||
| `Hr_T_Driver` | `UserId`, `Vehicle1Id`…`Vehicle5Id`, `TotalKm` |
|
||
| `Hr_T_DriverDocument` | `DriverId`, `VehicleDocumentId`, `FileName`, `FileContent` |
|
||
| `Hr_T_DriverPenalty` | `DriverId`, `PenaltyDate`, `Amount`, `Description`, `VehicleDocumentId`, dosya |
|
||
| `Hr_T_DriverAccident` | `DriverId`, `AccidentDate`, `VehicleDocumentId`, `Description`, dosya |
|
||
| `Hr_T_VehicleExpenseDefinition` | `ExpenseType`, `Name`, `IsActive` |
|
||
| `Hr_T_VehicleExpense` | `VehicleId`, `InvoiceNo`, `InvoiceDate`, `DestinationId` (firma), `VehicleDocumentId`, dosya |
|
||
| `Hr_T_VehicleExpenseLine` | `VehicleExpenseId`, `ExpenseDefinitionId`, `DetailName`, `Quantity`, `Amount`, `DiscountRate`, `NetAmount`, `Description` |
|
||
| `Hr_T_VehicleMovement` | `MovementNo`, `ExitDate`, `ExitTime` (SS:dd metin), `BranchId`, `ExitKm`, `SenderUserId`, `SecurityUserId`, `DriverUserId`, `VehicleId`, `DestinationId`, `Reason`, `Location`, `EntrySecurityUserId`, `EntryDate`, `EntryBranchId`, `EntryTime`, `EntryKm`, `TravelledKm`, `Status`, `DurationMinutes`, `ExpectedKm` |
|
||
|
||
Tablo düzeyinde CHECK ya da tekil indeks yoktur (plaka tekilliği zorlanmaz); kurallar form ve SQL'dedir.
|
||
|
||
---
|
||
|
||
### 5. İş kuralları ve hesaplar
|
||
|
||
#### 5.1 Giriş–çıkış (`App.Hr.VehicleMovement`)
|
||
|
||
Form script'leri:
|
||
|
||
| Olay | Kural |
|
||
| --- | --- |
|
||
| Form açılışı | Çıkış tarihi bugün, çıkış saati şimdi, durum `Left` |
|
||
| Araç seçimi | `ExpectedKm` = aracın `CurrentKm`'si; çıkış km boşsa aynı değer yazılır |
|
||
| Çıkış km | `ExpectedKm`'den küçükse uyarı + `ExpectedKm` yazılır; giriş km varsa yapılan km yeniden hesaplanır |
|
||
| Giriş km | Çıkış km'den küçükse uyarı + geri alınır. Doluysa durum `Arrived`, `TravelledKm = EntryKm − ExitKm`, giriş tarihi/saati boşsa şimdi. Boşsa durum `Left`, yapılan km boş |
|
||
| Tarih/saat değişimi | `DurationMinutes` = giriş − çıkış (dakika; saat `SS:dd` biçiminde olmalı) |
|
||
|
||
Sunucu komutları:
|
||
|
||
| Komut | Etki |
|
||
| --- | --- |
|
||
| Insert sonrası | `MovementNo` atanır; aracın `Status`'u ve (giriş km varsa) `CurrentKm`'si hareketten yazılır; kullanan personelin şoför kaydındaki `TotalKm` yeniden toplanır |
|
||
| Delete sonrası | Şoför `TotalKm` yeniden toplanır; aracın `CurrentKm`'si son girişin km'sine, `Status`'u son hareketin durumuna döner (hareket yoksa `Arrived`) |
|
||
| Update sonrası | **Yok** — bkz. §9 |
|
||
|
||
#### 5.2 Masraf
|
||
|
||
`NetAmount = round(Quantity × Amount × (1 − DiscountRate / 100), 2)`; miktar, tutar ya da iskonto
|
||
değişince formda hesaplanır. Fatura tarihi yeni kayıtta bugündür. "Toplam Tutar" widget'ı
|
||
silinmemiş tüm kalemlerin toplamıdır.
|
||
|
||
#### 5.3 Belge süzmesi
|
||
|
||
| Ekran | Listelenen belge tanımları |
|
||
| --- | --- |
|
||
| Araç › Belgeler, Masraf Girişi | `DocumentGroup = 'Vehicle'` |
|
||
| Şoför › Belgeler | `DocumentGroup = 'Driver'` ve tip `Penalty`/`Accident` dışı |
|
||
| Şoför › Cezalar | `DocumentType = 'Penalty'` |
|
||
| Şoför › Kazalar | `DocumentType = 'Accident'` |
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Yetki ağacı menüyü izler: `App.Hr.Vehicles` ara yetkisinin
|
||
altında yedi ekranın kökü + `.Create/.Update/.Delete/.Export/.Import/.Note`; alt formlar (`VehicleFile`,
|
||
`DriverDocument`, `DriverPenalty`, `DriverAccident`, `VehicleExpenseLine`) ana ekranlarının altındadır.
|
||
Satır süzmesi yoktur. Hiçbir yetki role otomatik atanmaz.
|
||
|
||
| Rol | Yetkiler |
|
||
| --- | --- |
|
||
| Filo sorumlusu | `App.Hr.Vehicles` dalının tamamı |
|
||
| Güvenlik | `App.Hr.VehicleMovement` (+ `.Create/.Update`) |
|
||
| Muhasebe (masraf) | `App.Hr.VehicleExpense`, `App.Hr.VehicleExpenseLine` |
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `Sas_T_Branch` | Aracın tesisi; hareketin çıkış/giriş şubesi |
|
||
| `AbpUsers` | Şoför, gönderen personel, güvenlik personeli, kullanan personel |
|
||
|
||
Bildirim, zamanlanmış iş ya da rapor şablonu yoktur.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Filo sorumlusu **Araçlar**'a "34 ABC 123"ü girer (şube Merkez, km 45.000, muayene/sigorta bitiş
|
||
tarihleri); **Belgeler** sekmesine ruhsat ve trafik sigortasını yükler.
|
||
2. **Şoför Tanımlama**'da personeli şoför yapar, aracı zimmet 1'e bağlar; sürücü belgesini yükler.
|
||
3. Güvenlik **Araç Giriş-Çıkış Takip**'te yeni kayıt açar: tarih/saat dolar, araç seçilince çıkış
|
||
km 45.000 olur; kullanan personel ve gidilen yer seçilir → araç **Dışarıda**.
|
||
4. Dönüşte giriş km'si (45.180) girilir → durum Şirkette, yapılan km 180, süre dakika olarak hesaplanır.
|
||
5. Yakıt faturası **Masraf Girişleri**'ne başlık + kalem (yakıt, 40 lt × 45 ₺) olarak girilir.
|
||
6. Gelen hız cezası şoförün **Cezalar** sekmesine tutar ve belgeyle eklenir.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar ve bilinen sınırlar
|
||
|
||
**Plakası aynı iki araç girilebiliyor mu?** Evet; tabloda tekil kısıt yoktur.
|
||
|
||
**Muayene/sigorta bitişi yaklaşınca uyarı geliyor mu?** Hayır; tarihler yalnızca kayıttadır.
|
||
Hatırlatma için zamanlanmış iş + bildirim tipi eklenmelidir (yok).
|
||
|
||
**Bir şoföre 5'ten fazla araç zimmetlenebilir mi?** Hayır; kolonlar sabittir.
|
||
|
||
**Masraf girişindeki "Firma Adı" neden Gidilecek Yerler'den geliyor?** Masraf firması ayrı bir
|
||
tanım olarak açılmamış, gidilecek yer tanımı kullanılmıştır.
|
||
|
||
**Kontrol edilmeli — dönüş güncellemeyle girildiğinde araç/şoför güncellenmiyor.** Giriş–çıkış
|
||
ekranında yalnızca insert ve delete sonrası komut vardır. Çıkış kaydı açılıp dönüş **aynı kaydı
|
||
düzenleyerek** girildiğinde aracın `Status`/`CurrentKm`'si ve şoförün `TotalKm`'si güncellenmez
|
||
(bir sonraki ekleme ya da silmeye kadar).
|
||
|
||
**Kontrol edilmeli — yalnız çıkış girilen kayıtta aracın km'si.** Formda `EntryKm` varsayılanı
|
||
`0`'dır. Insert sonrası komut `@EntryKm` boş değilse aracın `CurrentKm`'sini ona eşitler. Giriş km
|
||
temizlenmeden kaydedilen bir çıkış kaydı aracın km'sini 0'a çekebilir.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_{VehicleDocument,Vehicle,VehicleFile,VehicleDestination,Driver,DriverDocument,DriverPenalty,DriverAccident,VehicleExpenseDefinition,VehicleExpense,VehicleExpenseLine,VehicleMovement}.sql` | Tablolar |
|
||
| `configs/seeds/wizard/{VehicleDocument,Vehicle,VehicleFile,VehicleDestination,Driver,DriverDocument,DriverPenalty,DriverAccident,VehicleExpenseDefinition,VehicleExpense,VehicleExpenseLine,VehicleMovement}.json` | 12 wizard |
|
||
| `configs/seeds/data/App.Hr.{VehicleDocument,VehicleExpenseDefinition}.json` | Tanım verisi |
|
||
| `configs/seeds/data/App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json` | Menü, yetki, dil satırları |
|
||
|
||
Kurulum: DB Migrate. Geri alma: Wizard Manager'dan alt formlar önce, ana ekranlar sonra silinir;
|
||
tablolar yalnızca onayda seçilirse düşer.
|
||
|
||
<!-- module-doc:section App.Hr.Visitor -->
|
||
## Ziyaretçiler (`App.Hr.Visitor`)
|
||
|
||
Güvenlik/resepsiyon için ziyaretçi giriş–çıkış defteri: kim, hangi firmadan, kimi ziyarete, ne
|
||
zaman geldi, hangi kartı aldı, ne zaman çıktı. Tamamı konfigürasyondur (tek Wizard ekranı).
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Güvenlik / resepsiyon | Ziyaretçiyi girişte kaydeder, kart verir, çıkışta çıkış saatini işler | Ziyaretçiler |
|
||
| İK / idari işler | Günlük ziyaretçi sayısını, içeride kalanları ve geçmişi izler | Ziyaretçiler (widget, Pivot) |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Her kayıt bir şubeye bağlıdır; satır süzmesi yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar wizard ve SQL'den okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Tek Wizard liste ekranı |
|
||
| Ziyaretçi kimliği | Ziyaretçi ayrı bir kişi kartı değildir; her ziyaret satırında ad soyad serbest metindir (tekrar gelen ziyaretçi yeniden yazılır) |
|
||
| Firma | Serbest metin + **otomatik tamamlama** (daha önce girilen firma adlarından) |
|
||
| Ziyaretçi tipi | Sabit liste: Ziyaretçi, Müşteri, Tedarikçi, Taşeron, Kurye (değerler Türkçe anahtardır) |
|
||
| İçeride mi? | `ExitTime` boşsa ziyaretçi içeride sayılır |
|
||
| Bildirim | Ziyaret edilen personele bildirim **gönderilmez** |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekran
|
||
|
||
| Menü (TR / EN) | `ListFormCode` | Yer | Görünümler | Widget'lar (bugün) |
|
||
| --- | --- | --- | --- | --- |
|
||
| Ziyaretçiler / Visitors | `App.Hr.Visitor` | `İnsan Kaynakları` (sıra 12, `FcBusinessman`) | Grid, Card, Pivot, Chart | Bugün Gelen · İçeride · Çıkış Yapan |
|
||
|
||
Widget'lar yalnız **bugünün** (`VisitDate = bugün`) kayıtlarını sayar.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
`Hr_T_Visitor` (`sql/object/Hr_T_Visitor.sql`, entity yok):
|
||
|
||
| Kolon | Açıklama |
|
||
| --- | --- |
|
||
| `BranchId` | Şube (zorunlu) |
|
||
| `VisitorType` | Ziyaretçi tipi (varsayılan "Ziyaretçi") |
|
||
| `VisitDate` | Ziyaret tarihi |
|
||
| `EntryTime` / `ExitTime` | Giriş / çıkış zamanı (`datetime`) |
|
||
| `CardNo` | Verilen ziyaretçi kartı |
|
||
| `VisitorFullName` | Ziyaretçi adı soyadı (zorunlu) |
|
||
| `VisitedUserId` | Ziyaret edilen personel (`AbpUsers`, zorunlu) |
|
||
| `CompanyName` | Firma |
|
||
| `VisitReason` | Ziyaret sebebi |
|
||
|
||
---
|
||
|
||
### 5. İş kuralları
|
||
|
||
| Yer | Kural |
|
||
| --- | --- |
|
||
| Yeni kayıt | Ziyaret tarihi bugün, giriş saati şimdi, tip "Ziyaretçi" |
|
||
| Çıkış | Kayıt düzenlenip çıkış saati girilir; otomatik çıkış yoktur |
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`; `App.Hr.Visitor` + `.Create/.Update/.Delete/.Export/.Import/.Note`.
|
||
Güvenliğe kök + `.Create/.Update` yeter. Hiçbir yetki role otomatik atanmaz. Ziyaretçi adı kişisel
|
||
veridir; saklama süresi için periyodik temizlik yoktur.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
`Sas_T_Branch` (şube), `AbpUsers` (ziyaret edilen personel). Bildirim, rapor ya da zamanlanmış iş yoktur.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Tedarikçi temsilcisi gelir; güvenlik yeni kayıt açar (tarih/saat dolu), tip Tedarikçi, ad soyad,
|
||
firma (otomatik tamamlamadan), ziyaret edilen satın alma uzmanı, kart no 12.
|
||
2. "İçeride" kartı 1 artar.
|
||
3. Çıkışta kayıt açılıp çıkış saati girilir; "Çıkış Yapan" kartı artar.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Tekrar gelen ziyaretçinin bilgileri neden dolmuyor?** Ziyaretçi kartı yoktur; yalnız firma adı otomatik tamamlanır.
|
||
|
||
**Gün sonunda içeride kalanlar nasıl görülür?** Bugünün "İçeride" kartı ya da `ExitTime` boş filtresi.
|
||
|
||
**Ziyaret edilen kişiye haber gidiyor mu?** Hayır.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_Visitor.sql` | Tablo |
|
||
| `configs/seeds/wizard/Hr_Visitor.json` | Wizard |
|
||
|
||
Geri alma: Wizard Manager'dan silinir; tablo yalnızca onayda seçilirse düşer.
|
||
|
||
<!-- module-doc:section App.Hr.EventLog -->
|
||
## Olay Günlüğü (`App.Hr.EventLog`)
|
||
|
||
Vardiya amiri, güvenlik odası ve gözlem odasının tuttuğu vardiya defteri: tarih–saat, kaynak,
|
||
olayı yaşayan/kaydeden personel, vardiya, önem derecesi (1–5) ve açıklama. Tamamı konfigürasyondur
|
||
(tek Wizard ekranı).
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Vardiya amiri / güvenlik / gözlem odası | Vardiyada yaşanan önemli olayları kaydeder | Olay Günlüğü |
|
||
| Yönetim / İK | Günün olaylarını ve önemli/kritik kayıtları izler; gerekirse disiplin dosyası açar | Olay Günlüğü (widget, Pivot) |
|
||
|
||
Kapsam: kiracı (`IsTenant`). Şube isteğe bağlıdır; satır süzmesi yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar wizard ve SQL'den okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Tek Wizard liste ekranı |
|
||
| Kaynak | Sabit liste: Vardiya Amiri (`ShiftSupervisor`), Güvenlik Odası (`SecurityRoom`), Gözlem Odası (`ObservationRoom`) |
|
||
| Önem | 1–5 yıldız: Rutin, Düşük, Önemli, Çok Önemli, Kritik; **4 ve üstü** "önemli" kartında sayılır |
|
||
| Saat | `EventTime` `SS:dd` metin; yeni kayıtta şimdiki saat |
|
||
| Vardiya | Vardiya tanımından seçilir (`Hr_T_Shift`) |
|
||
| Disiplin bağı | Olaydan disiplin dosyasına otomatik geçiş **yoktur**; dosya elle açılır |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekran
|
||
|
||
| Menü (TR / EN) | `ListFormCode` | Yer | Görünümler | Widget'lar |
|
||
| --- | --- | --- | --- | --- |
|
||
| Olay Günlüğü / Event Log | `App.Hr.EventLog` | `İnsan Kaynakları` (sıra 13, `FcViewDetails`) | Grid, Card, Pivot, Chart | Toplam · Bugün · Önemli (önem ≥ 4) |
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
`Hr_T_EventLog` (`sql/object/Hr_T_EventLog.sql`, entity yok):
|
||
|
||
| Kolon | Açıklama |
|
||
| --- | --- |
|
||
| `LogSource` | Kayıt kaynağı (zorunlu) |
|
||
| `BranchId` | Şube |
|
||
| `UserId` | Vardiya amiri / olayı yaşayan personel (zorunlu) |
|
||
| `EventDate`, `EventTime` | Olay tarihi ve saati (zorunlu) |
|
||
| `Importance` | 1–5 (varsayılan 1) |
|
||
| `ShiftId` | Vardiya |
|
||
| `Description` | Açıklama |
|
||
|
||
---
|
||
|
||
### 5. İş kuralları
|
||
|
||
| Yer | Kural |
|
||
| --- | --- |
|
||
| Yeni kayıt | Olay saati boşsa şimdiki saat yazılır |
|
||
| Önem kartı | `Importance >= 4` |
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`; `App.Hr.EventLog` + `.Create/.Update/.Delete/.Export/.Import/.Note`.
|
||
Kayıt tutanlara kök + `.Create` (ve gerekiyorsa `.Update`) yeter; silme yalnız yöneticide kalmalıdır.
|
||
Hiçbir yetki role otomatik atanmaz.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
`Sas_T_Branch`, `AbpUsers`, `Hr_T_Shift` (bkz. Çalışma Takvimi ve Vardiyalar bölümü). Kritik olay için bildirim yoktur.
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. Gece vardiyasında güvenlik odası "B kapısı alarmı" olayını kaynak Güvenlik Odası, önem 3, vardiya Gece ile kaydeder.
|
||
2. Vardiya amiri bir iş kazasını önem 5 ile girer → "Önemli" kartı artar.
|
||
3. Sabah İK önemli kayıtları süzer; gerekiyorsa Disiplin Dosyaları'nda elle dosya açar.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar
|
||
|
||
**Kritik olayda yöneticiye bildirim gidiyor mu?** Hayır; widget ve filtre ile izlenir.
|
||
|
||
**Olay disiplin dosyasına bağlanabiliyor mu?** Hayır; iki kayıt arasında bağ yoktur.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar ve geri alma
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `configs/seeds/sql/object/Hr_T_EventLog.sql` | Tablo |
|
||
| `configs/seeds/wizard/Hr_EventLog.json` | Wizard |
|
||
|
||
Geri alma: Wizard Manager'dan silinir; tablo yalnızca onayda seçilirse düşer.
|
||
|
||
<!-- module-doc:section App.Hr.Intranet -->
|
||
## Intranet (`App.Hr.Intranet`)
|
||
|
||
Kurum içi iletişim: ana sayfa panosu (bugün doğanlar, dokümanlar, aktif anketler, sosyal duvar,
|
||
duyurular, yaklaşan etkinlikler), bunların yönetim ekranları (duyuru, anket, sosyal paylaşım,
|
||
etkinlik), doküman kütüphanesi ve kullanıcılar arası mesajlaşma. Bu modül **entity + C# seeder +
|
||
özel React sayfalarıyla** kuruludur (wizard değil); pano kutuları Developer Kit › Intranet Widgets
|
||
kaydıyla yönetilir.
|
||
|
||
> 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 |
|
||
| --- | --- | --- |
|
||
| Tüm çalışanlar | Panoyu görür; duyuru okur/beğenir/yorumlar, anket doldurur, paylaşım yapar, beğenir, yorumlar, ankete oy verir, etkinliği beğenir/yorumlar, doküman indirir, mesajlaşır | `/admin/dashboard` · mesajlaşma penceresi |
|
||
| İK / iç iletişim | Duyuru, anket (soru/seçenek), etkinlik ve tanımlarını yönetir; yanıtları ve etkileşimleri izler | İK › Intranet › Duyurular · Anketler · Sosyal Paylaşımlar · Etkinlik Türleri/Kategorileri · Etkinlikler |
|
||
| İK / doküman sorumlusu | Doküman yükler, yayına alır/kaldırır | İK › Intranet › Dokümanlar (`/admin/intranet-documents`) |
|
||
| Sistem yöneticisi | Pano kutularını (hazır ya da custom component) tanımlar, sırasını ve yetkisini belirler | Developer Kit › Intranet Widgets |
|
||
|
||
Kapsam: kiracı. Bütün tablolar `IMultiTenant`; satır süzmesi yoktur.
|
||
|
||
---
|
||
|
||
### 2. Analiz ve kararlar
|
||
|
||
> Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar koddan
|
||
> (`ListFormSeeder_Hr.cs`, `Entities/Tenant/Hr/Intranet`, `IntranetAppService`, `views/intranet`) okunmuştur.
|
||
|
||
| Konu | Karar |
|
||
| --- | --- |
|
||
| Yol | Yönetim ekranları entity + seeder ListForm'u; pano ve etkileşimler özel React + `IntranetAppService` |
|
||
| Modül yeri | Intranet İK'dadır: menü `App.Hr.Intranet`, yetkiler `App.Hr.Intranet.*`, tablolar `Hr_T_*`; pano kutusu kaydı (`Sas_T_IntranetWidget`) Saas › Developer Kit'te kalır |
|
||
| Pano kutuları | Veritabanı kaydıdır (kod, kolon, sıra, yetki, aktiflik). **Builtin** kutu koda kayıtlı React bileşenidir (`id` = kayıt `Code`); **Custom** kutu Developer Kit custom component'idir (Props JSON ile) |
|
||
| Kullanıcı yerleşimi | Pano tasarım modunda sürükle-bırak, gizle/göster, kolon oranı hazır ayarları; tercih **tarayıcıda (localStorage)** saklanır, sunucuya yazılmaz |
|
||
| Doğum günleri | Her pano isteğinde kullanıcıların `BirthDate` genişletme alanından canlı hesaplanır (gün + ay) |
|
||
| Duyuru panoda | Kutu yalnız **sabitlenmiş** (`IsPinned`) duyuruları, en fazla 3 tane gösterir |
|
||
| Anket | `Status = active` anketler; kullanıcı yanıtını sonradan **güncelleyebilir**; anonim ankette yanıt `UserId` taşımaz |
|
||
| Sosyal medya | Bir paylaşımda tek medya kaydı (resim(ler), video ya da anket); yüklenen dosya **base64 data URL** olarak `SocialMedia.Urls`'e yazılır |
|
||
| Doküman yayını | Fiziksel CDN klasörleri: `intranet` (yayında) ve `intranet/_passive` (yayında değil); yayına alma = klasörler arası taşıma |
|
||
| Mesajlaşma | Yalnız tablo öneki ile İK'dadır (`Hr_T_Messenger*`); menüsü/yetkisi yoktur, kabuk düzenine gömülü pencere + SignalR |
|
||
| Bildirim / zamanlanmış iş | Yok |
|
||
|
||
---
|
||
|
||
### 3. Menü ve ekranlar
|
||
|
||
`İnsan Kaynakları › Intranet` (`App.Hr.Intranet`, sıra 14)
|
||
|
||
| Sıra | Menü | `ListFormCode` / rota | Alt formlar | Widget'lar |
|
||
| --- | --- | --- | --- | --- |
|
||
| 1 | Etkinlik Türleri | `App.Hr.Intranet.Events.EventType` | — | — |
|
||
| 2 | Etkinlik Kategorisi | `App.Hr.Intranet.Events.EventCategory` | — | — |
|
||
| 3 | Duyurular | `App.Hr.Intranet.Announcement` | `…Announcement.AnnouncementLike`, `…Announcement.AnnouncementComment` (`Id → AnnouncementId`) | Aktif · Sabitlenmiş · Süresi dolan · Toplam görüntülenme |
|
||
| 4 | Anketler | `App.Hr.Intranet.Survey` | `SurveyQuestion` (→ `SurveyQuestionOption`), `SurveyResponse` (→ `SurveyAnswer`) — iki seviyeli | Aktif · Pasif · Toplam yanıt |
|
||
| 5 | Sosyal Paylaşımlar | `App.Hr.Intranet.SocialPost` | `SocialComment`, `SocialMedia` (→ `SocialPollOption`), `SocialLike` (`Id → SocialPostId`) | Toplam · Bugün · Toplam beğeni |
|
||
| 6 | Etkinlikler | `App.Hr.Intranet.Events.Event` | `EventLike`, `EventComment` (`Id → EventId`) | Yaklaşan · Yayında · Taslak · İptal |
|
||
| 7 | Dokümanlar | `/admin/intranet-documents` (özel sayfa) | — | — |
|
||
|
||
Diğer giriş noktaları:
|
||
|
||
| Ne | Nerede |
|
||
| --- | --- |
|
||
| Pano | `/admin/dashboard` (`views/Dashboard.tsx` → `views/intranet/Dashboard.tsx`); rota yetkisizdir, menüde ayrı kaydı yoktur |
|
||
| Pano kutusu tanımı | Developer Kit › Intranet Widgets (`App.DeveloperKit.IntranetWidgets`, `Sas_T_IntranetWidget`); veri `data/App.DeveloperKit.IntranetWidgets.json`'a aynalanır |
|
||
| Mesajlaşma | Uygulama kabuğundaki `MessengerWidget` |
|
||
|
||
Pano kutuları (seed):
|
||
|
||
| Kod | Kolon / sıra | Yetki | Ne gösterir |
|
||
| --- | --- | --- | --- |
|
||
| `today-birthdays` | Sol / 10 | `AbpIdentity.Users.Widget` | Bugün doğanlar: avatar, ad, yaş, departman |
|
||
| `documents` | Sol / 20 | `App.Files.Widget` | Yayındaki ilk 3 doküman (tür, boyut, tarih, indir) |
|
||
| `active-surveys` | Sol / 30 | `App.Hr.Intranet.Survey.Widget` | Aktif anketler (kalan gün, soru/yanıt sayısı, doldurdum/doldur) |
|
||
| `my-leave` | Sol / 35 | `App.Hr.MyLeaveRequest` | Custom `MyLeaveWidget`: izin bakiyesi, süren talepler → İzin Talebi Oluştur · Taleplerim · Bakiyem |
|
||
| `team-leave` | Sol / 36 | `App.Hr.TeamLeaveRequest` | Custom `TeamLeaveWidget`: müdürün onayını bekleyen izin talepleri, bugün izinde olanlar → Onay Bekleyenler |
|
||
| `my-timesheet` | Sol / 37 | `App.Hr.MyTimesheet` | Custom `MyTimesheetWidget`: seçilen ayın puantajı (net saat, geç/erken dk, fazla mesai, devamsız/izinli/raporlu) ve yıl toplamı, 270 saatlik fazla mesai çubuğu → Puantajım |
|
||
| `diary` | Sol / 38 | `App.Prj.Diary.Widget` | Builtin (`widgets/Diary.tsx`) Güncem: bugün / bu hafta saat, bugünkü kayıt, son 5 günce (son 30 gün); Günce Yaz butonu çekirdek `DiaryEntry` diyaloğunu açar, kapanınca özet yenilenir; kayıt Günce Listesi'ne (`App.Prj.Diary`) yazılır, kaydetmek için ayrıca `App.Prj.Diary` + `.Create` gerekir |
|
||
| `social-wall` | Orta / 40 | `App.Hr.Intranet.SocialPost.Widget` | Sosyal duvar (Tümü / Paylaşımlarım, sonsuz kaydırma 10'arlı) |
|
||
| `announcements` | Sağ / 50 | `App.Hr.Intranet.Announcement.Widget` | Sabitlenmiş duyurular (en fazla 3) |
|
||
| `upcoming-events` | Sağ / 60 | `App.Hr.Intranet.Events.Event.Widget` | Bugünden sonraki yayınlanmış ilk 3 etkinlik |
|
||
| `my-performance` | Sağ / 70 | `App.Hr.MyPerformanceReview` | Custom `MyPerformanceWidget`: aktif performans değerlendirmesi, puanlar, gelişim aksiyonları → Değerlendirmelerim |
|
||
| `team-performance` | Sağ / 80 | `App.Hr.TeamPerformanceReview` | Custom `TeamPerformanceWidget`: yöneticinin ekip değerlendirmeleri → Ekibimin Değerlendirmeleri |
|
||
| `my-360-feedback` | Sağ / 90 | `App.Hr.My360Feedback` | Custom `My360FeedbackWidget`: kullanıcıya atanan 360 talepleri → 360 Taleplerim |
|
||
|
||
İlk altı kutu ve `diary` Builtin'dir (koddaki `Code`). `my-leave` / `team-leave` İzin Yönetimi'nin (İzin Yönetimi bölümü §3.3), `my-timesheet` Puantaj ve Devam Takibi'nin (Puantaj ve Devam Takibi bölümü §3.3), son üçü Performans Yönetimi'nin çalışana ait özetleridir:
|
||
İK menüsü İK departmanınındır, çalışan kendi değerlendirmesini buradan takip eder; listeler menüsüzdür ve
|
||
kutudaki bağlantıyla açılır. Ayrıntı: Performans Yönetimi bölümü §3.3.
|
||
|
||
---
|
||
|
||
### 4. Veri modeli
|
||
|
||
Entity'ler `Entities/Tenant/Hr/Intranet` (`FullAuditedEntity<Guid>, IMultiTenant`); tablolar migration'lıdır.
|
||
|
||
| Tablo | Önemli kolonlar | Kural |
|
||
| --- | --- | --- |
|
||
| `Hr_T_Announcement` | `Title`, `Excerpt`, `Content` (HTML), `ImageUrl`, `Category` (general/event/urgent/announcement), `UserId`, `PublishDate`, `ExpiryDate`, `IsPinned`, `ViewCount`, `Likes`, `Attachments` | Başlık kiracıda tekil |
|
||
| `Hr_T_AnnouncementComment` / `Hr_T_AnnouncementLike` | `AnnouncementId`, `UserId`, (`Content`) | Beğeni kullanıcı başına tekil |
|
||
| `Hr_T_Survey` | `Title`, `Description`, `Deadline`, `Responses`, `Status`, `IsAnonymous` | Başlık kiracıda tekil |
|
||
| `Hr_T_SurveyQuestion` | `SurveyId`, `QuestionText`, `Type` (rating/multiple-choice/text/textarea/yes-no), `Order`, `IsRequired` | — |
|
||
| `Hr_T_SurveyQuestionOption` | `QuestionId`, `Text`, `Order` | — |
|
||
| `Hr_T_SurveyResponse` / `Hr_T_SurveyAnswer` | `SurveyId`, `UserId`, `SubmissionTime` / `ResponseId`, `QuestionId`, `QuestionType`, `Value` | — |
|
||
| `Hr_T_SocialPost` | `UserId`, `Content`, `LikeCount`, `IsLiked`, `IsOwnPost` | — |
|
||
| `Hr_T_SocialMedia` | `SocialPostId` (1:1), `Type` (image/video/poll), `Urls`, `PollQuestion`, `PollTotalVotes`, `PollEndsAt`, `PollUserVoteId` | — |
|
||
| `Hr_T_SocialPollOption` | `SocialMediaId`, `Text`, `Votes` | — |
|
||
| `Hr_T_SocialComment` / `Hr_T_SocialLike` | `SocialPostId`, `UserId`, (`Content`) | Beğeni kullanıcı başına tekil |
|
||
| `Hr_T_SocialLocation` | Konum bilgisi | Kullanan ekran/servis yok |
|
||
| `Hr_T_EventType` / `Hr_T_EventCategory` | `Name` | Kiracıda tekil |
|
||
| `Hr_T_Event` | `CategoryId`, `TypeId`, `Date`, `Name`, `Description`, `Place`, `Status` (published/draft/cancelled), `UserId`, `ParticipantsCount`, `Likes`, `isPublished`, `Photos` | `(CategoryId, TypeId, Name)` tekil |
|
||
| `Hr_T_EventComment` / `Hr_T_EventLike` | `EventId`, `UserId`, (`Content`) | Beğeni tekil |
|
||
| `Sas_T_IntranetWidget` | `Code`, `Name`, `LabelKey`, `SourceType` (0 Builtin / 1 Custom), `ComponentName`, `PermissionName`, `Column` (0 sol / 1 orta / 2 sağ), `Order`, `Props`, `IsActive` | Kod kiracıda tekil |
|
||
| `Hr_T_MessengerConversation` / `Hr_T_MessengerConversationMessage` | Konuşma (katılımcılar, son mesaj) / mesaj (gönderen, alıcılar, metin, ekler, zaman) | — |
|
||
|
||
---
|
||
|
||
### 5. İş kuralları (`IntranetAppService`)
|
||
|
||
| İşlem | Kural |
|
||
| --- | --- |
|
||
| Pano verisi | Doğum günleri (bugün), `intranet` klasöründeki dosyalar (`_passive` hariç), son 50 duyuru, `active` anketler + kullanıcının yanıtı, `isPublished` son 50 etkinlik, aktif ve yetkisi verilmiş pano kutuları. Duyuru için tarih/sabitleme süzmesi, anket için son tarih süzmesi **sunucuda yoktur** |
|
||
| Duyuru aç | Her açılışta `ViewCount + 1` |
|
||
| Beğeni (duyuru, paylaşım, etkinlik) | Aç/kapa: beğeni satırı eklenir/silinir, sayaç ±1 |
|
||
| Yorum | Satır eklenir; listelenirken yazar bilgisi doldurulur |
|
||
| Anket yanıtı | Kullanıcının önceki yanıtı varsa cevaplar güncellenir; yoksa yeni yanıt + `Responses + 1`; anonimde `UserId` boş |
|
||
| Paylaşım | İsteğe bağlı tek medya ya da 2–6 seçenekli anket; yalnız sahibi silebilir |
|
||
| Ankete oy | Seçenek ve toplam oy +1, `PollUserVoteId` = seçenek; tekrar oy UI'da engellenir |
|
||
| Doküman | Yüklemede görünen ad zorunlu (uzantı korunur); yayına al/kaldır = klasör taşıma; silme toplu |
|
||
| Mesaj | Aynı kiracıdaki aktif kullanıcılara (en fazla 100 kişi listelenir); en fazla 10 ek; çevrimiçi durumu SignalR (`/messengerhub`) |
|
||
|
||
---
|
||
|
||
### 6. Yetki ve görünürlük
|
||
|
||
İzin grubu `App.Hr`, modül `Sas|Hr`. Kök `App.Hr.Intranet`; her yönetim ekranının kökü + standart alt
|
||
yetkiler (`.Create/.Update/.Delete/.Export/.Import`, ana ekranlarda `.Note`). Duyuru, Anket, Sosyal
|
||
Paylaşım ve Etkinlik ayrıca **`.Widget`** taşır — pano kutusunu görme yetkisidir. Dokümanlar:
|
||
`App.Hr.Intranet.Document` + `.Create` (yükle) / `.Update` (yayına al/kaldır) / `.Delete`.
|
||
Intranet Widgets: `App.DeveloperKit.IntranetWidgets` (+ CRUD). Hiçbir yetki role otomatik atanmaz.
|
||
|
||
Önerilen dağıtım:
|
||
|
||
| Rol | Yetkiler |
|
||
| --- | --- |
|
||
| Tüm çalışanlar | `AbpIdentity.Users.Widget`, `App.Files.Widget`, dört `.Widget` yetkisi, `App.Hr.Intranet.Document` (okuma); performans kutuları için Performans Yönetimi bölümü §6 |
|
||
| İç iletişim | `App.Hr.Intranet` dalının tamamı |
|
||
| Sistem yöneticisi | `App.DeveloperKit.IntranetWidgets` |
|
||
|
||
**Kontrol edilmeli — güvenlik:** `IntranetAppService`, `MessengerAppService` ve dosya yöneticisi servisi
|
||
yalnız oturum ister (`[Authorize]`); `App.Hr.Intranet.*` yetkilerini sunucuda denetlemez. Pano
|
||
kutularının yetkisi (`PermissionName`) sunucuda süzülür, doküman yetkileri ise **yalnız arayüzde**
|
||
uygulanır.
|
||
|
||
---
|
||
|
||
### 7. Entegrasyonlar
|
||
|
||
| Kaynak | Kullanım |
|
||
| --- | --- |
|
||
| `AbpUsers` (+ departman, pozisyon) | Doğum günleri, yazar/kullanıcı kartları, mesajlaşma rehberi |
|
||
| Dosya yöneticisi / CDN (`intranet`, `intranet/_passive`) | Doküman kütüphanesi ve pano doküman kutusu |
|
||
| Developer Kit › Custom Components | Custom pano kutuları |
|
||
| SignalR (`/messengerhub`) | Mesajlaşma ve çevrimiçi durumu |
|
||
| Organizasyon Şeması | Kullanıcı satırlarında sosyal duvarın `UserProfileCard` bileşenini kullanır |
|
||
|
||
---
|
||
|
||
### 8. Akış örneği
|
||
|
||
1. İç iletişim **Duyurular**'a "Yeni ofis açılışı"nı görsel ve HTML içerikle ekler, **sabitler** → panonun sağ kolonunda görünür.
|
||
2. **Anketler**'de "Çalışan Memnuniyet Anketi"ni anonim ve aktif açar; **Sorular** sekmesine puanlama, çoktan seçmeli (seçenekleriyle) ve metin soruları ekler.
|
||
3. Çalışan panoda anketi doldurur, sonradan yanıtını günceller; İK **Yanıtlar** sekmesinden sonuçları görür (anonimde kişi boş).
|
||
4. **Etkinlikler**'de "Jazz Akşamı" tarih, yer ve fotoğraflarla yayınlanır → "Yaklaşan Etkinlikler" kutusunda çıkar; çalışanlar beğenir/yorumlar.
|
||
5. Çalışan sosyal duvarda iki seçenekli bir anket paylaşır; diğerleri oy verir.
|
||
6. Doküman sorumlusu "İzin Prosedürü.pdf"i yükler ve yayına alır → pano doküman kutusunda indirilebilir olur.
|
||
7. Sistem yöneticisi Intranet Widgets'a bir custom component'i (ör. kurum KPI kartı) orta kolona ekler.
|
||
|
||
---
|
||
|
||
### 9. Sık sorulanlar ve bilinen sınırlar
|
||
|
||
**Duyuru panoda görünmüyor.** Kutu yalnız sabitlenmiş duyuruları (en fazla 3) gösterir; listelenmek için **Sabitle** işaretli olmalı.
|
||
|
||
**Süresi dolmuş duyuru/anket hâlâ görünüyor.** Sunucuda son tarih süzmesi yoktur; duyuru sabitlemesi kaldırılmalı, anket `passive` yapılmalıdır.
|
||
|
||
**Pano yerleşimim başka bilgisayarda yok.** Yerleşim tarayıcıda saklanır.
|
||
|
||
**Pano kutusu görünmüyor.** Kayıt aktif olmalı ve kullanıcıda `PermissionName` yetkisi bulunmalı; Custom kutuda bileşen aktif olmalı.
|
||
|
||
**Yanıtlarımı değiştirebilir miyim?** Evet; anketi tekrar açıp kaydetmek önceki yanıtı günceller.
|
||
|
||
Kontrol edilmeli (koddan tespit edilenler):
|
||
- Ankete oy sunucuda kullanıcı bazında tutulmaz (`PollUserVoteId` tek kolon); aynı kullanıcı API'yi doğrudan çağırarak tekrar oy verebilir.
|
||
- `SocialPost.IsLiked` beğenen son kullanıcıya göre veritabanına yazılır; listelerken sunucu kullanıcıya göre yeniden hesaplar.
|
||
- Duyuru modalındaki ekler bölümü dizi bekler, `Attachments` metindir; ekler görünmeyebilir.
|
||
- Anket entity açıklaması `draft|active|closed` der, ekran `active|passive` sunar.
|
||
- Sosyal paylaşımda yüklenen medya base64 olarak veritabanına yazılır; büyük dosyalar tabloyu büyütür.
|
||
- `Hr_T_EventPhoto` tablosu ve `sql/object/Hr_T_EventPhoto.sql` yoktur (referans dokümanda geçer); etkinlik fotoğrafları `Hr_T_Event.Photos` kolonundadır.
|
||
|
||
---
|
||
|
||
### 10. Dosyalar
|
||
|
||
| Dosya | İçerik |
|
||
| --- | --- |
|
||
| `api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Hr.cs` | Yönetim ekranları |
|
||
| `api/src/Sozsoft.Platform.DbMigrator/Migrations/ListFormSeeder_Saas.cs` | Intranet Widgets ekranı |
|
||
| `api/src/Sozsoft.Platform.Domain/Entities/Tenant/Hr/Intranet/*.cs`, `Entities/Tenant/Administration/IntranetWidget.cs`, `Entities/Tenant/Messenger*.cs` | Entity'ler |
|
||
| `api/src/Sozsoft.Platform.Application/Intranet/IntranetAppService.cs`, `Messenger/MessengerAppService.cs` | Servisler |
|
||
| `ui/src/views/intranet/Dashboard.tsx`, `widgets/*`, `SocialWall/*`, `documents/IntranetDocuments.tsx` | Pano, kutular, sosyal duvar, doküman sayfası |
|
||
| `ui/src/components/template/MessengerWidget.tsx` | Mesajlaşma penceresi |
|
||
| `configs/seeds/data/App.Hr.Intranet.*.json`, `App.DeveloperKit.IntranetWidgets.json` | Örnek veri ve pano kutuları |
|
||
|
||
Örnek veri:
|
||
- 5 duyuru (3'ü sabitlenmiş).
|
||
- 3 anket, 10 soru ve 13 seçenek.
|
||
- 6 paylaşım: 4 medya (2 resim, 1 video, 1 anket), 8 yorum.
|
||
- 50 etkinlik türü, 5 kategori, 3 etkinlik ve 9 yorum.
|
||
|
||
<!-- module-doc:auto:begin -->
|
||
## Ek — Ekran envanteri (otomatik)
|
||
|
||
> Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.
|
||
|
||
### Tanımlamalar (`App.Hr.Definitions`)
|
||
|
||
#### Yeterlilik Belgeleri — `App.Hr.Certificate`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Certificate.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.Certificate` (sıra 4) |
|
||
| Yetki | `App.Hr.Certificate` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Yeterlilik Belgeleri — personelin sahip olabileceği mesleki yeterlilik ve mezuniyet belgeleri. |
|
||
| Geliştirme talebi | Human Resources -> Definitions |
|
||
| Kaynak | `Hr_T_Certificate` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Hr.Certificate.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Belge Adı | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Evrak Türleri — `App.Hr.DocumentType`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DocumentType.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.DocumentType` (sıra 5) |
|
||
| Yetki | `App.Hr.DocumentType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Evrak Türleri — personel ve süreç belgelerinin türleri (CV, dilekçe, ibraname, sağlık raporu…), gruplarıyla. |
|
||
| Geliştirme talebi | Human Resources -> Definitions |
|
||
| Kaynak | `Hr_T_DocumentType` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive`, `App.Listform.ListformField.IsRequired` |
|
||
| Veri aynası | `data/App.Hr.DocumentType.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `GroupName` | Dosya Grubu | dxSelectBox | ✓ | ✓ | liste: Genel, Özlük Evrakları, Sağlık |
|
||
| `Name` | Dosya Türü | dxTextBox | ✓ | ✓ | |
|
||
| `IsRequired` | Zorunlu | dxCheckBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Masraf Türleri — `App.Hr.ExpenseType`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_ExpenseType.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.ExpenseType` (sıra 9) |
|
||
| Yetki | `App.Hr.ExpenseType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Masraf Türleri — personel masraf kalemleri (yemek, yol, konaklama, akaryakıt, telefon, temsil, kırtasiye) ve vergi/SGK özellikleri. |
|
||
| Kaynak | `Hr_T_ExpenseType` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | CurrencyId=TRY, IsTaxable=false, IsSgkSubject=false, RequiresReceipt=true, IsActive=true |
|
||
| Veri aynası | `data/App.Hr.ExpenseType.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `DefaultAmount` | Varsayılan Tutar | dxNumberBox | | ✓ | |
|
||
| `CurrencyId` | Para Birimi | dxSelectBox | | ✓ | sorgu: Sas_H_Currency |
|
||
| `IsTaxable` | Gelir Vergisine Tabi | dxCheckBox | ✓ | ✓ | |
|
||
| `IsSgkSubject` | SGK'ya Tabi | dxCheckBox | ✓ | ✓ | |
|
||
| `RequiresReceipt` | Fiş / Belge Gerekir | dxCheckBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Yan Hak Türleri — `App.Hr.BenefitType`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_BenefitType.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.BenefitType` (sıra 10) |
|
||
| Yetki | `App.Hr.BenefitType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Yan Hak Türleri — çalışanlara sağlanan yan haklar (yemek kartı, ulaşım, özel sağlık sigortası, BES, konut, şirket aracı, telefon, çocuk ve yakacak yardımı…). |
|
||
| Kaynak | `Hr_T_BenefitType` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | CurrencyId=TRY, IsTaxable=false, IsSgkSubject=false, IsActive=true |
|
||
| Veri aynası | `data/App.Hr.BenefitType.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `DefaultAmount` | Varsayılan Tutar | dxNumberBox | | ✓ | |
|
||
| `CurrencyId` | Para Birimi | dxSelectBox | | ✓ | sorgu: Sas_H_Currency |
|
||
| `IsTaxable` | Gelir Vergisine Tabi | dxCheckBox | ✓ | ✓ | |
|
||
| `IsSgkSubject` | SGK'ya Tabi | dxCheckBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### İzin Türleri — `App.Hr.LeaveType`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_LeaveType.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.LeaveType` (sıra 12) |
|
||
| Yetki | `App.Hr.LeaveType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İzin Türleri — izin çeşitleri ve kuralları (yıllık, mazeret, ücretsiz, hastalık, doğum, babalık, evlilik, ölüm, süt izni). |
|
||
| Kaynak | `Hr_T_LeaveType` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Paid`, `App.Widget.Unpaid` |
|
||
| Form varsayılanları | IsPaid=true, DeductsFromAnnualLeave=false, RequiresDocument=false, AllowHalfDay=false, Gender=All, IsActive=true, BalanceExceedAction=Block |
|
||
| Veri aynası | `data/App.Hr.LeaveType.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Code` | Kod | dxTextBox | ✓ | ✓ | |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `Gender` | Cinsiyet | dxSelectBox | ✓ | ✓ | liste: All, Male, Female |
|
||
| `MaxDaysPerYear` | Yıllık En Fazla Gün | dxNumberBox | | ✓ | |
|
||
| `IsPaid` | Ücretli | dxCheckBox | ✓ | ✓ | |
|
||
| `DeductsFromAnnualLeave` | Yıllık İzinden Düşer | dxCheckBox | ✓ | ✓ | |
|
||
| `RequiresDocument` | Belge Gerekir | dxCheckBox | ✓ | ✓ | |
|
||
| `AllowHalfDay` | Yarım Gün Kullanılabilir | dxCheckBox | ✓ | ✓ | |
|
||
| `BalanceExceedAction` | Bakiye Aşılırsa | dxRadioGroup | ✓ | ✓ | liste: Block, Warn |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Kurum Doktorları — `App.Hr.Doctor`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Doctor.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.Doctor` (sıra 13) |
|
||
| Yetki | `App.Hr.Doctor` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Kurum Doktorları — işyeri hekimleri ve belge bilgileri. |
|
||
| Geliştirme talebi | Human Resources -> Definitions |
|
||
| Kaynak | `Hr_T_Doctor` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Hr.Doctor.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `FullName` | Doktor Adı Soyadı | dxTextBox | ✓ | ✓ | |
|
||
| `DiplomaNo` | Diploma No | dxTextBox | | ✓ | |
|
||
| `DiplomaDate` | Diploma Tarihi | dxDateBox | | ✓ | |
|
||
| `OhsCertificateNo` | İşyeri Hekimi Belge No | dxTextBox | | ✓ | |
|
||
| `OhsCertificateDate` | İşyeri Hekimi Belge Tarihi | dxDateBox | | ✓ | |
|
||
| `IdentityNo` | T.C. Kimlik No | dxTextBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Hastaneler — `App.Hr.Hospital`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Hospital.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.Hospital` (sıra 14) |
|
||
| Yetki | `App.Hr.Hospital` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Hastaneler — hastane ve sağlık kurumu tanımları. |
|
||
| Geliştirme talebi | Human Resources -> Definitions |
|
||
| Kaynak | `Hr_T_Hospital` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Hr.Hospital.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Kurum Adı | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Hastane Bölümleri — `App.Hr.HospitalDepartment`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HospitalDepartment.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.HospitalDepartment` (sıra 15) |
|
||
| Yetki | `App.Hr.HospitalDepartment` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Hastane Bölümleri — hastane klinik/bölüm tanımları (acil, dahiliye, kardiyoloji…). |
|
||
| Geliştirme talebi | Human Resources -> Definitions |
|
||
| Kaynak | `Hr_T_HospitalDepartment` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Hr.HospitalDepartment.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Bölüm Adı | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
### İşe Alım (`App.Hr.Recruitment`)
|
||
|
||
#### Kadro Talepleri — `App.Hr.StaffRequest`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_StaffRequest.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Recruitment` › `App.Hr.StaffRequest` (sıra 1) |
|
||
| Yetki | `App.Hr.StaffRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Kadro Talepleri — bir departmanın yeni ya da boşalan bir pozisyon için personel istemesi ve bu isteğin onay süreci. İşe alım sürecinin ilk adımıdır; ilan yalnızca onaylanmış talepten açılır. |
|
||
| Kaynak | `Hr_T_StaffRequest` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Pending`, `App.Hr.StaffRequest.Widget.Approved`, `App.Hr.StaffRequest.Widget.Headcount` |
|
||
| Komutlar | InsertAfter: SQL |
|
||
| Form varsayılanları | IsActive=true, RequestDate=@DATE, RequestedById=@USERID, Headcount=1, EmploymentType=FullTime, Reason=NewPosition, CurrencyId=TRY, BranchId= |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Onay Bekliyor' → Inform 'Onay Bilgisi' → Inform 'Ret Bilgisi' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `RequestedById` | Talep Eden | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department (← BranchId) |
|
||
| `JobPositionId` | İş Pozisyonu | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_JobPosition (← DepartmentId) |
|
||
| `Headcount` | Kadro Adedi | dxNumberBox | ✓ | ✓ | |
|
||
| `EmploymentType` | Çalışma Şekli | dxSelectBox | ✓ | ✓ | liste: FullTime, PartTime, Contract, Intern, Seasonal |
|
||
| `ExpectedStartDate` | Beklenen Başlangıç | dxDateBox | | ✓ | |
|
||
| `Reason` | Talep Nedeni | dxRadioGroup | ✓ | ✓ | liste: NewPosition, Replacement · script |
|
||
| `ReplacedUserId` | Ayrılan Personel | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `MinSalary` | Asgari Ücret | dxNumberBox | | ✓ | |
|
||
| `MaxSalary` | Azami Ücret | dxNumberBox | | ✓ | |
|
||
| `CurrencyId` | Para Birimi | dxSelectBox | | ✓ | sorgu: Sas_H_Currency |
|
||
| `Qualifications` | Aranan Nitelikler | dxHtmlEditor | | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | ✓ | |
|
||
| `ApprovalUser` | Onaylayan | dxTextBox | | ✓ | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | ✓ | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextArea | | ✓ | |
|
||
|
||
#### İlanlar — `App.Hr.JobPosting`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_JobPosting.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Recruitment` › `App.Hr.JobPosting` (sıra 2) |
|
||
| Yetki | `App.Hr.JobPosting` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İlanlar — onaylanmış kadro taleplerinden açılan iş ilanları ve ilana gelen başvurular. |
|
||
| Kaynak | `Hr_T_JobPosting` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.JobApplication` (Id → JobPostingId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Published`, `App.Widget.Draft`, `App.Hr.JobPosting.Widget.Closed` |
|
||
| Komutlar | InsertAfter: SQL · UpdateAfter: SQL |
|
||
| Form varsayılanları | IsActive=true, Status=Draft, Headcount=1, EmploymentType=FullTime, WorkModel=Office, PublishDate=@DATE, BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `PostingNo` | İlan No | dxTextBox | | ✓ | |
|
||
| `StaffRequestId` | Kadro Talebi | dxSelectBox | | ✓ | sorgu: Hr_T_StaffRequest · script |
|
||
| `Title` | İlan Başlığı | dxTextBox | ✓ | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Published, Closed, Cancelled |
|
||
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department (← BranchId) |
|
||
| `JobPositionId` | İş Pozisyonu | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_JobPosition (← DepartmentId) |
|
||
| `Headcount` | Kadro Adedi | dxNumberBox | ✓ | ✓ | |
|
||
| `EmploymentType` | Çalışma Şekli | dxSelectBox | ✓ | ✓ | liste: FullTime, PartTime, Contract, Intern, Seasonal |
|
||
| `WorkModel` | Çalışma Modeli | dxSelectBox | ✓ | ✓ | liste: Office, Hybrid, Remote |
|
||
| `Location` | Lokasyon | dxTextBox | | ✓ | |
|
||
| `PublishDate` | Yayın Tarihi | dxDateBox | | ✓ | |
|
||
| `ClosingDate` | Son Başvuru Tarihi | dxDateBox | | ✓ | |
|
||
| `SourceIds` | Yayın Kanalları | dxTagBox | | ✓ | sorgu: Hr_T_CandidateSource |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `Description` | Açıklama | dxHtmlEditor | | ✓ | |
|
||
| `Requirements` | Aranan Nitelikler | dxHtmlEditor | | ✓ | |
|
||
|
||
#### Adaylar — `App.Hr.Candidate`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Candidate.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Recruitment` › `App.Hr.Candidate` (sıra 3) |
|
||
| Yetki | `App.Hr.Candidate` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Adaylar — CV ve KVKK açık rızası ile tutulan aday havuzu. Bir aday birden fazla ilana başvurabilir. |
|
||
| Kaynak | `Hr_T_Candidate` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.JobApplication` (Id → CandidateId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive`, `App.Hr.Candidate.Widget.Converted` |
|
||
| Komutlar | UpdateAfter: SQL |
|
||
| Form varsayılanları | Country=Türkiye, IsActive=true, KvkkConsentDate=@NOW, KvkkConsentMethod=Written, CurrencyId=TRY |
|
||
| Butonlar | `App.Hr.Candidate.KvkkConsentForm` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Photo` | Fotoğraf | dxImageUpload | | ✓ | |
|
||
| `FirstName` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `LastName` | Soyadı | dxTextBox | ✓ | ✓ | |
|
||
| `Email` | E-posta | dxTextBox | ✓ | ✓ | |
|
||
| `PhoneNumber` | Telefon | dxTextBox | | ✓ | |
|
||
| `Gender` | Cinsiyet | dxSelectBox | | ✓ | liste: Male, Female |
|
||
| `BirthDate` | Doğum Tarihi | dxDateBox | | ✓ | |
|
||
| `Country` | Ülke | dxSelectBox | | ✓ | sorgu: Sas_H_Country |
|
||
| `City` | Şehir | dxSelectBox | | ✓ | sorgu: Sas_H_City (← Country) |
|
||
| `Address` | Adres | dxTextBox | | ✓ | |
|
||
| `EducationLevel` | Eğitim Düzeyi | dxSelectBox | | ✓ | liste: Primary, HighSchool, Associate, Bachelor, Master, Doctorate |
|
||
| `School` | Okul | dxTextBox | | ✓ | |
|
||
| `Major` | Bölüm | dxTextBox | | ✓ | |
|
||
| `GraduationYear` | Mezuniyet Yılı | dxNumberBox | | ✓ | |
|
||
| `ExperienceYears` | Deneyim (Yıl) | dxNumberBox | | ✓ | |
|
||
| `CurrentCompany` | Mevcut Firma | dxTextBox | | ✓ | |
|
||
| `CurrentTitle` | Mevcut Ünvan | dxTextBox | | ✓ | |
|
||
| `ExpectedSalary` | Ücret Beklentisi | dxNumberBox | | ✓ | |
|
||
| `CurrencyId` | Para Birimi | dxSelectBox | | ✓ | sorgu: Sas_H_Currency |
|
||
| `SourceId` | Kaynak | dxSelectBox | | ✓ | sorgu: Hr_T_CandidateSource |
|
||
| `LinkedInUrl` | LinkedIn | dxTextBox | | ✓ | |
|
||
| `UserId` | Personel | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `SkillIds` | Yetkinlikler | dxTagBox | | ✓ | sorgu: Hr_T_Skill |
|
||
| `CvDocument` | CV | dxImageUpload | | ✓ | |
|
||
| `Notes` | Notlar | dxTextBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `KvkkConsent` | Adayın KVKK kapsamında açık rızası alındı | dxCheckBox | ✓ | ✓ | |
|
||
| `KvkkConsentDate` | Rıza Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `KvkkConsentMethod` | Rıza Alma Yöntemi | dxSelectBox | ✓ | ✓ | liste: Written, Electronic, Email |
|
||
| `KvkkConsentDocument` | İmzalı Rıza Belgesi | dxImageUpload | | ✓ | |
|
||
|
||
#### Başvurular — `App.Hr.JobApplication`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_JobApplication.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Recruitment` › `App.Hr.JobApplication` (sıra 4) |
|
||
| Yetki | `App.Hr.JobApplication` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Başvurular — bir adayın bir ilana başvurusu ve başvurunun aşama takibi (kanban panosu). |
|
||
| Kaynak | `Hr_T_JobApplication` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Todo (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.Interview` (Id → ApplicationId), `App.Hr.JobOffer` (Id → ApplicationId) |
|
||
| Todo | başlık `CandidateName`, durum `Stage` (Applied,Screening,Interview,Offer,Hired,Rejected) |
|
||
| Komutlar | InsertAfter: SQL · UpdateAfter: SQL |
|
||
| Form varsayılanları | IsActive=true, ApplicationDate=@DATE, Stage=Applied, OwnerUserId=@USERID |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `CandidateId` | Aday | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Candidate · script |
|
||
| `JobPostingId` | İlan | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_JobPosting |
|
||
| `CandidateName` | Aday | dxTextBox | | | |
|
||
| `PostingTitle` | İlan | dxTextBox | | | |
|
||
| `ApplicationDate` | Başvuru Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `SourceId` | Kaynak | dxSelectBox | | ✓ | sorgu: Hr_T_CandidateSource |
|
||
| `OwnerUserId` | Sorumlu | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `AverageScore` | Ortalama Puan | dxNumberBox | | ✓ | |
|
||
| `Stage` | Aşama | dxSelectBox | ✓ | ✓ | liste: Applied, Screening, Interview, Offer, Hired, Rejected · script |
|
||
| `RejectionReasonId` | Ret Sebebi | dxSelectBox | | ✓ | sorgu: Hr_T_RejectionReason |
|
||
| `RejectionNote` | Ret Açıklaması | dxTextArea | | ✓ | |
|
||
| `SortOrder` | Sıralama | dxNumberBox | | | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `Notes` | Notlar | dxTextArea | | ✓ | |
|
||
|
||
#### Mülakatlar — `App.Hr.Interview`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Interview.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Recruitment` › `App.Hr.Interview` (sıra 5) |
|
||
| Yetki | `App.Hr.Interview` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Mülakatlar — başvuru için mülakat planlama, mülakatçı ataması ve kriter bazlı puanlama. |
|
||
| Kaynak | `Hr_T_Interview` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Scheduler (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.InterviewScore` (Id → InterviewId) |
|
||
| Komutlar | InsertAfter: SQL · UpdateAfter: SQL · DeleteAfter: SQL |
|
||
| Form varsayılanları | IsActive=true, InterviewType=FaceToFace, Status=Planned, InterviewerUserId=@USERID |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ApplicationId` | Başvuru | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_JobApplication |
|
||
| `Title` | Başlık | dxTextBox | | | |
|
||
| `InterviewType` | Mülakat Türü | dxSelectBox | ✓ | ✓ | liste: Phone, Video, FaceToFace, Technical, Hr |
|
||
| `InterviewerUserId` | Mülakatçı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `StartDate` | Başlangıç | dxDateBox | ✓ | ✓ | script |
|
||
| `EndDate` | Bitiş | dxDateBox | ✓ | ✓ | |
|
||
| `Location` | Yer | dxTextBox | | ✓ | |
|
||
| `MeetingUrl` | Toplantı Bağlantısı | dxTextBox | | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Planned, Completed, Cancelled, NoShow |
|
||
| `Recommendation` | Öneri | dxSelectBox | | ✓ | liste: Hire, Hold, Reject |
|
||
| `OverallScore` | Genel Puan | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `Notes` | Notlar | dxTextArea | | ✓ | |
|
||
|
||
#### Aday Kaynakları — `App.Hr.CandidateSource`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_CandidateSource.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.CandidateSource` (sıra 6) |
|
||
| Yetki | `App.Hr.CandidateSource` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Aday Kaynakları — adayların ve ilanların hangi kanaldan geldiğini/yayınlandığını tanımlayan liste (LinkedIn, Kariyer.net, referans, kariyer fuarı…). |
|
||
| Kaynak | `Hr_T_CandidateSource` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true |
|
||
| Veri aynası | `data/App.Hr.CandidateSource.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Teklifler — `App.Hr.JobOffer`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_JobOffer.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Recruitment` › `App.Hr.JobOffer` (sıra 6) |
|
||
| Yetki | `App.Hr.JobOffer` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Teklifler — işe alınması düşünülen adaya yapılan ücret ve şart teklifi, iç onayı ve teklif mektubu. |
|
||
| Kaynak | `Hr_T_JobOffer` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: SQL · UpdateAfter: SQL |
|
||
| Form varsayılanları | IsActive=true, OfferDate=@DATE, Status=Draft, CurrencyId=TRY, EmploymentType=FullTime, WorkModel=Office, BranchId= |
|
||
| Butonlar | `App.Hr.JobOffer.OfferLetter` |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Onay Bekliyor' → Inform 'Onay Bilgisi' → Inform 'Ret Bilgisi' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `OfferNo` | Teklif No | dxTextBox | | ✓ | |
|
||
| `ApplicationId` | Başvuru | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_JobApplication · script |
|
||
| `CandidateName` | Aday | dxTextBox | | | |
|
||
| `OfferDate` | Teklif Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `ValidUntil` | Geçerlilik Tarihi | dxDateBox | | ✓ | |
|
||
| `StartDate` | İşe Başlama Tarihi | dxDateBox | | ✓ | |
|
||
| `GrossSalary` | Brüt Maaş | dxNumberBox | ✓ | ✓ | |
|
||
| `CurrencyId` | Para Birimi | dxSelectBox | ✓ | ✓ | sorgu: Sas_H_Currency |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Draft, Sent, Accepted, Declined, Expired · script |
|
||
| `ResponseDate` | Yanıt Tarihi | dxDateBox | | ✓ | |
|
||
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `DepartmentId` | Departman | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Department (← BranchId) |
|
||
| `JobPositionId` | İş Pozisyonu | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_JobPosition (← DepartmentId) |
|
||
| `EmploymentType` | Çalışma Şekli | dxSelectBox | ✓ | ✓ | liste: FullTime, PartTime, Contract, Intern, Seasonal |
|
||
| `WorkModel` | Çalışma Modeli | dxSelectBox | ✓ | ✓ | liste: Office, Hybrid, Remote |
|
||
| `BenefitCodes` | Yan Haklar | dxTagBox | | ✓ | sorgu: Hr_T_BenefitType |
|
||
| `Notes` | Notlar | dxTextBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | ✓ | |
|
||
| `ApprovalUser` | Onaylayan | dxTextBox | | ✓ | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | ✓ | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | ✓ | |
|
||
|
||
#### Ret Sebepleri — `App.Hr.RejectionReason`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_RejectionReason.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.RejectionReason` (sıra 7) |
|
||
| Yetki | `App.Hr.RejectionReason` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ret Sebepleri — bir başvurunun şirket ya da aday tarafından neden kapatıldığını sınıflandıran liste. |
|
||
| Kaynak | `Hr_T_RejectionReason` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true, RejectedBy=Company |
|
||
| Veri aynası | `data/App.Hr.RejectionReason.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `RejectedBy` | Reddeden | dxRadioGroup | ✓ | ✓ | liste: Company, Candidate |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Değerlendirme Kriterleri — `App.Hr.EvaluationCriterion`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_EvaluationCriterion.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.EvaluationCriterion` (sıra 8) |
|
||
| Yetki | `App.Hr.EvaluationCriterion` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Değerlendirme Kriterleri — mülakatlarda puanlanan kriterler ve ağırlıkları (iletişim, teknik yetkinlik, problem çözme…). |
|
||
| Kaynak | `Hr_T_EvaluationCriterion` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true, Weight=1 |
|
||
| Veri aynası | `data/App.Hr.EvaluationCriterion.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `Weight` | Ağırlık | dxNumberBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Mülakat Puanları — `App.Hr.InterviewScore`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_InterviewScore.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.InterviewScore` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Mülakat Puanları — mülakatta her değerlendirme kriterine verilen 1–5 puan. |
|
||
| Kaynak | `Hr_T_InterviewScore` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: SQL · UpdateAfter: SQL · DeleteAfter: SQL |
|
||
| Form varsayılanları | IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `InterviewId` | Mülakat | dxTextBox | | | |
|
||
| `CriterionId` | Kriter | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_EvaluationCriterion |
|
||
| `Score` | Puan | dxSelectBox | ✓ | ✓ | liste: 1, 2, 3, 4, 5 |
|
||
| `Comment` | Yorum | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
### Çalışma Takvimi ve Vardiyalar (`App.Hr.WorkCalendar`, `App.Hr.Shift`)
|
||
|
||
#### Çalışma Takvimi — `App.Hr.WorkCalendar`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_WorkCalendar.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr` › `App.Hr.WorkCalendar` (sıra 4) |
|
||
| Yetki | `App.Hr.WorkCalendar` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Çalışma Takvimi — resmi tatiller, arife (yarım gün) ve çalışılmayan günler. |
|
||
| Kaynak | `Hr_T_WorkCalendar` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Scheduler (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.WorkCalendar.DayType.Holiday`, `App.Hr.WorkCalendar.DayType.HalfDay` |
|
||
| Komutlar | InsertAfter: `Hr_S_WorkCalendarAfterSave` · UpdateAfter: `Hr_S_WorkCalendarAfterSave` · DeleteAfter: `Hr_S_WorkCalendarAfterSave` |
|
||
| Form varsayılanları | DayType=Holiday, RecurrenceRule=FREQ=YEARLY, AllDay=true, IsActive=true |
|
||
| Veri aynası | `data/App.Hr.WorkCalendar.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `EndDate` | Bitiş Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `DayType` | Gün Türü | dxSelectBox | ✓ | ✓ | liste: Holiday, HalfDay |
|
||
| `RecurrenceRule` | Tekrarlama Kuralı | dxSelectBox | | ✓ | liste: FREQ=YEARLY |
|
||
| `AllDay` | Tüm Gün | dxCheckBox | | | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Vardiyalar — `App.Hr.Shift`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Shift.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.Shift` (sıra 11) |
|
||
| Yetki | `App.Hr.Shift` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Vardiyalar — çalışma vardiyalarının tanımı (sabah, akşam, gece…). |
|
||
| Geliştirme talebi | Human Resources -> Olay Günlüğü |
|
||
| Kaynak | `Hr_T_Shift` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsNightShift=false, IsActive=true |
|
||
| Veri aynası | `data/App.Hr.Shift.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Vardiya Adı | dxTextBox | ✓ | ✓ | |
|
||
| `StartTime` | Başlangıç Saati | dxTextBox | | ✓ | |
|
||
| `EndTime` | Bitiş Saati | dxTextBox | | ✓ | |
|
||
| `BreakMinutes` | Mola (dk) | dxNumberBox | | ✓ | |
|
||
| `LateToleranceMinutes` | Geç Kalma Toleransı (dk) | dxNumberBox | | ✓ | |
|
||
| `EarlyLeaveToleranceMinutes` | Erken Çıkış Toleransı (dk) | dxNumberBox | | ✓ | |
|
||
| `WorkingHours` | Çalışma Süresi (Saat) | dxNumberBox | | ✓ | |
|
||
| `IsNightShift` | Gece Vardiyası | dxCheckBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
### İzin Yönetimi (`App.Hr.Leave`)
|
||
|
||
#### İzin Talepleri — `App.Hr.LeaveRequest`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_LeaveRequest.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Leave` › `App.Hr.LeaveRequest` (sıra 1) |
|
||
| Yetki | `App.Hr.LeaveRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İzin Talepleri — kurumdaki bütün izin talepleri ve onay durumları. Yalnız İnsan Kaynakları kullanır. |
|
||
| Kaynak | `Hr_T_LeaveRequest` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Hr.Leave.Widget.ManagerApproval`, `App.Hr.Leave.Widget.HrApproval`, `App.Hr.Leave.Widget.Approved`, `App.Hr.Leave.Widget.Rejected` |
|
||
| Komutlar | InsertAfter: `Hr_S_LeaveRequestAfterSave` · UpdateBefore: `Hr_S_LeaveRequestGuard` · UpdateAfter: `Hr_S_LeaveRequestAfterSave` · DeleteBefore: `Hr_S_LeaveRequestGuard` · DeleteAfter: `Hr_S_LeaveRequestAfterSave` |
|
||
| Form varsayılanları | IsHalfDay=false, StartDate=@DATE, EndDate=@DATE, BranchId= |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Compare 'Müdür Onayı Gerekli mi?' → Approval 'Müdür Onayı' → Approval 'İK Onayı' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `BranchId` | Tesis Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | İş Pozisyonu | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `LeaveTypeId` | İzin Türü | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_LeaveType |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `EndDate` | Bitiş Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `IsHalfDay` | Yarım Gün | dxCheckBox | | ✓ | script |
|
||
| `HalfDayPart` | Yarım Gün Dilimi | dxSelectBox | | ✓ | liste: Morning, Afternoon |
|
||
| `Days` | Gün | dxNumberBox | | ✓ | |
|
||
| `BalanceWarning` | Bakiye Uyarısı | dxTextBox | | ✓ | |
|
||
| `ManagerUserNames` | Departman Müdürleri | dxTextBox | | | |
|
||
| `RequiresManagerApproval` | Müdür Onayı Gerekli | dxNumberBox | | | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `DocumentFileName` | Belge Adı | dxTextBox | | ✓ | |
|
||
| `DocumentContent` | Belge (rapor vb.) | dxImageUpload | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | ✓ | |
|
||
| `ApprovalUser` | Onaylayan | dxTextBox | | ✓ | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | ✓ | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | ✓ | |
|
||
|
||
#### İzin Bakiyeleri — `App.Hr.LeaveBalance`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_LeaveBalance.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Leave` › `App.Hr.LeaveBalance` (sıra 2) |
|
||
| Yetki | `App.Hr.LeaveBalance` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İzin Bakiyeleri — her çalışanın yıllık izin bakiyesi. |
|
||
| Kaynak | `Hr_V_LeaveSummary` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.LeaveBalanceAdjustment` (Id → EmployeeId), `App.Hr.LeaveBalanceYear` (Id → EmployeeId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Leave.Widget.RemainingDays`, `App.Hr.Leave.Widget.NegativeBalance`, `App.Hr.Leave.Widget.PendingDays` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeName` | Çalışan Adı | dxTextBox | | ✓ | |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | İş Pozisyonu | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `SeniorityStartDate` | Kıdem Başlangıcı | dxDateBox | | ✓ | |
|
||
| `ServiceYears` | Kıdem Yılı | dxNumberBox | | ✓ | |
|
||
| `EntitledDays` | Hak Edilen Gün | dxNumberBox | | ✓ | |
|
||
| `AdjustmentDays` | Düzeltme Günü | dxNumberBox | | ✓ | |
|
||
| `UsedDays` | Kullanılan Gün | dxNumberBox | | ✓ | |
|
||
| `PendingDays` | Onay Bekleyen Gün | dxNumberBox | | ✓ | |
|
||
| `RemainingDays` | Kalan Gün | dxNumberBox | | ✓ | |
|
||
| `AvailableDays` | Kullanılabilir Gün | dxNumberBox | | ✓ | |
|
||
| `NextAccrualDate` | Sonraki Hak Ediş | dxDateBox | | ✓ | |
|
||
| `NextAccrualDays` | Sonraki Hak Ediş Günü | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Bakiye Düzeltmeleri — `App.Hr.LeaveBalanceAdjustment`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_LeaveBalanceAdjustment.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.LeaveBalanceAdjustment` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Bakiye Düzeltmeleri — çalışanın yıllık izin bakiyesine elle yapılan ekleme ve düşümler. |
|
||
| Kaynak | `Hr_T_LeaveBalanceAdjustment` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Form varsayılanları | IsActive=true, AdjustmentDate=@DATE |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `AdjustmentDate` | Düzeltme Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `Days` | Gün | dxNumberBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `Reason` | Neden | dxTextArea | ✓ | ✓ | |
|
||
|
||
#### İzin Defteri — `App.Hr.LeaveBalanceYear`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_LeaveBalanceYear.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.LeaveBalanceYear` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İzin Defteri — çalışanın yıllık izninin yıl yıl dökümü. |
|
||
| Kaynak | `Hr_V_LeaveBalanceYear` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `YearNo` | Hizmet Yılı | dxNumberBox | | ✓ | |
|
||
| `AccrualDate` | Hak Ediş Tarihi | dxDateBox | | ✓ | |
|
||
| `PeriodEndDate` | Dönem Sonu | dxDateBox | | ✓ | |
|
||
| `EntitledDays` | Hak Edilen Gün | dxNumberBox | | ✓ | |
|
||
| `UsedDays` | Kullanılan Gün | dxNumberBox | | ✓ | |
|
||
| `PendingDays` | Onay Bekleyen Gün | dxNumberBox | | ✓ | |
|
||
| `RemainingDays` | Kalan Gün | dxNumberBox | | ✓ | |
|
||
| `CumulativeRemainingDays` | Kümülatif Bakiye | dxNumberBox | | ✓ | |
|
||
| `NextAccrualDate` | Sonraki Hak Ediş | dxDateBox | | ✓ | |
|
||
| `NextAccrualDays` | Sonraki Hak Ediş Günü | dxNumberBox | | ✓ | |
|
||
|
||
#### İzin Taleplerim — `App.Hr.MyLeaveRequest`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyLeaveRequest.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyLeaveRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İzin Taleplerim — oturum açan çalışanın kendi izin talepleri ve onay durumları. |
|
||
| Kaynak | `Hr_T_LeaveRequest` · filtre `"IsDeleted" = 'false' AND "EmployeeId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_LeaveRequestAfterSave` · UpdateBefore: `Hr_S_LeaveRequestGuard` · UpdateAfter: `Hr_S_LeaveRequestAfterSave` · DeleteBefore: `Hr_S_LeaveRequestGuard` · DeleteAfter: `Hr_S_LeaveRequestAfterSave` |
|
||
| Form varsayılanları | IsHalfDay=false, StartDate=@DATE, EndDate=@DATE |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `LeaveTypeId` | İzin Türü | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_LeaveType |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `EndDate` | Bitiş Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `IsHalfDay` | Yarım Gün | dxCheckBox | | ✓ | script |
|
||
| `HalfDayPart` | Yarım Gün Dilimi | dxSelectBox | | ✓ | liste: Morning, Afternoon |
|
||
| `Days` | Gün | dxNumberBox | | ✓ | |
|
||
| `BalanceWarning` | Bakiye Uyarısı | dxTextBox | | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `DocumentFileName` | Belge Adı | dxTextBox | | ✓ | |
|
||
| `DocumentContent` | Belge (rapor vb.) | dxImageUpload | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | ✓ | |
|
||
| `ApprovalUser` | Onaylayan | dxTextBox | | ✓ | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | ✓ | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextBox | | ✓ | |
|
||
|
||
#### Ekibimin İzin Talepleri — `App.Hr.TeamLeaveRequest`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TeamLeaveRequest.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TeamLeaveRequest` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ekibimin İzin Talepleri — müdürü olduğunuz departmandaki çalışanların izin talepleri. |
|
||
| Kaynak | `Hr_T_LeaveRequest` · filtre `"IsDeleted" = 'false' AND '\|' + "ManagerIds" + '\|' LIKE '%\|@USERID\|%'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | UpdateBefore: `Hr_S_LeaveRequestGuard` · UpdateAfter: `Hr_S_LeaveRequestAfterSave` |
|
||
| Onay akışı | Start 'Onaya Gönderildi' → Approval 'Müdür Onayı' → Approval 'İK Onayı' → End 'Onaylandı' → End 'Reddedildi' |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `RequestNo` | Talep No | dxTextBox | | ✓ | |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | İş Pozisyonu | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `LeaveTypeId` | İzin Türü | dxSelectBox | | ✓ | sorgu: Hr_T_LeaveType |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | | ✓ | |
|
||
| `EndDate` | Bitiş Tarihi | dxDateBox | | ✓ | |
|
||
| `IsHalfDay` | Yarım Gün | dxCheckBox | | ✓ | |
|
||
| `HalfDayPart` | Yarım Gün Dilimi | dxSelectBox | | ✓ | liste: Morning, Afternoon |
|
||
| `Days` | Gün | dxNumberBox | | ✓ | |
|
||
| `BalanceWarning` | Bakiye Uyarısı | dxTextBox | | ✓ | |
|
||
| `ManagerUserNames` | Departman Müdürleri | dxTextBox | | | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `DocumentFileName` | Belge Adı | dxTextBox | | ✓ | |
|
||
| `DocumentContent` | Belge (rapor vb.) | dxImageUpload | | ✓ | |
|
||
| `ApprovalStatus` | Onay Durumu | dxTextBox | | ✓ | |
|
||
| `ApprovalUser` | Onaylayan | dxTextBox | | ✓ | |
|
||
| `ApprovalDate` | Onay Tarihi | dxDateBox | | ✓ | |
|
||
| `ApprovalDescription` | Onay Açıklaması | dxTextArea | | ✓ | |
|
||
|
||
#### Bakiyem — `App.Hr.MyLeaveBalance`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyLeaveBalance.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyLeaveBalance` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Bakiyem — yıllık izin hakkınızın ve kullanımınızın yıl yıl dökümü. |
|
||
| Kaynak | `Hr_V_LeaveBalanceYear` · filtre `"EmployeeId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `YearNo` | Hizmet Yılı | dxNumberBox | | ✓ | |
|
||
| `AccrualDate` | Hak Ediş Tarihi | dxDateBox | | ✓ | |
|
||
| `PeriodEndDate` | Dönem Sonu | dxDateBox | | ✓ | |
|
||
| `EntitledDays` | Hak Edilen Gün | dxNumberBox | | ✓ | |
|
||
| `UsedDays` | Kullanılan Gün | dxNumberBox | | ✓ | |
|
||
| `PendingDays` | Onay Bekleyen Gün | dxNumberBox | | ✓ | |
|
||
| `RemainingDays` | Kalan Gün | dxNumberBox | | ✓ | |
|
||
| `CumulativeRemainingDays` | Kümülatif Bakiye | dxNumberBox | | ✓ | |
|
||
| `NextAccrualDate` | Sonraki Hak Ediş | dxDateBox | | ✓ | |
|
||
| `NextAccrualDays` | Sonraki Hak Ediş Günü | dxNumberBox | | ✓ | |
|
||
|
||
### Puantaj ve Devam Takibi (`App.Hr.Attendance`)
|
||
|
||
#### Günlük Hareketler — `App.Hr.AttendanceLog`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_AttendanceLog.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Attendance` › `App.Hr.AttendanceLog` (sıra 1) |
|
||
| Yetki | `App.Hr.AttendanceLog` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Günlük Hareketler — PDKS'den (kart okuyucu), Excel aktarımından gelen ya da elle girilen ham giriş/çıkış okutmaları. |
|
||
| Kaynak | `Hr_T_AttendanceLog` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Hr.Attendance.Widget.Today`, `App.Hr.Attendance.Widget.Pdks`, `App.Hr.Attendance.Widget.Manual`, `App.Hr.Attendance.Widget.Error` |
|
||
| Komutlar | InsertAfter: `Hr_S_AttendanceProcess` · UpdateAfter: `Hr_S_AttendanceProcess` · DeleteAfter: `Hr_S_AttendanceProcess` |
|
||
| Form varsayılanları | Direction=Auto, Source=Manual |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `CardNo` | Kart No | dxTextBox | | ✓ | |
|
||
| `EventTime` | Zaman | dxDateBox | ✓ | ✓ | |
|
||
| `Direction` | Yön | dxSelectBox | ✓ | ✓ | liste: In, Out, Auto |
|
||
| `Source` | Kaynak | dxSelectBox | | ✓ | liste: Manual, Pdks, Import |
|
||
| `DeviceCode` | Cihaz | dxTextBox | | ✓ | |
|
||
| `WorkDate` | İş Günü | dxDateBox | | | |
|
||
| `ProcessError` | Hata | dxSelectBox | | | liste: UnknownCard, ClosedPeriod |
|
||
| `Note` | Not | dxTextArea | | ✓ | |
|
||
|
||
#### Günlük Puantaj — `App.Hr.Timesheet`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Timesheet.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Attendance` › `App.Hr.Timesheet` (sıra 2) |
|
||
| Yetki | `App.Hr.Timesheet` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Günlük Puantaj — çalışan × gün satırı: ilk giriş, son çıkış, net çalışma süresi, mola düşümü, geç kalma (dk), erken çıkış (dk), fazla mesai (saat) ve gün tipi (çalışma, hafta tatili, resmî tatil, izinli, raporlu, eğitimde, devamsız). |
|
||
| Kaynak | `Hr_T_Timesheet` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Hr.Attendance.Widget.Absent`, `App.Hr.Attendance.Widget.Late`, `App.Hr.Attendance.Widget.Overtime`, `App.Hr.Attendance.Widget.Incomplete` |
|
||
| Komutlar | UpdateBefore: SQL · UpdateAfter: `Hr_S_TimesheetCalculate` · DeleteBefore: SQL · DeleteAfter: `Hr_S_TimesheetCalculate` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `WorkDate` | İş Günü | dxDateBox | | ✓ | |
|
||
| `DayType` | Gün Tipi | dxSelectBox | ✓ | ✓ | liste: Work, WeeklyOff, Holiday, Training, Leave, Sick, Absent |
|
||
| `LeaveTypeId` | İzin Türü | dxSelectBox | | ✓ | sorgu: Hr_T_LeaveType |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | | sorgu: Hr_T_Training |
|
||
| `ShiftId` | Vardiya | dxSelectBox | | | sorgu: Hr_T_Shift |
|
||
| `FirstIn` | İlk Giriş | dxDateBox | | ✓ | |
|
||
| `LastOut` | Son Çıkış | dxDateBox | | ✓ | |
|
||
| `NetHours` | Net Çalışma (saat) | dxNumberBox | | | |
|
||
| `BreakMinutes` | Mola Düşümü (dk) | dxNumberBox | | ✓ | |
|
||
| `LateMinutes` | Geç Kalma (dk) | dxNumberBox | | | |
|
||
| `EarlyLeaveMinutes` | Erken Çıkış (dk) | dxNumberBox | | | |
|
||
| `OvertimeHours` | Fazla Mesai (saat) | dxNumberBox | | | |
|
||
| `IsAssumed` | Varsayılan | dxCheckBox | | | |
|
||
| `IsManual` | Elle | dxCheckBox | | | |
|
||
| `IsIncomplete` | Eksik Okutma | dxCheckBox | | | |
|
||
| `Note` | Not | dxTextArea | | ✓ | |
|
||
| `PeriodYear` | Yıl | dxNumberBox | | | |
|
||
| `PeriodMonth` | Ay | dxNumberBox | | | |
|
||
| `PeriodKey` | Dönem Anahtarı | dxTextBox | | | |
|
||
|
||
#### Aylık Puantaj — `App.Hr.TimesheetMonthly`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TimesheetMonthly.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Attendance` › `App.Hr.TimesheetMonthly` (sıra 3) |
|
||
| Yetki | `App.Hr.TimesheetMonthly` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Aylık Puantaj — Günlük Puantaj'ın personel bazlı aylık toplamı (salt okunur). |
|
||
| Kaynak | `Hr_V_TimesheetMonthly` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.Timesheet` (Id → PeriodKey) |
|
||
| Widget'lar | `App.Hr.Attendance.Widget.Employees`, `App.Hr.Attendance.Widget.Overtime`, `App.Hr.Attendance.Widget.Absent`, `App.Hr.Attendance.Widget.OverLimit` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `PeriodYear` | Yıl | dxNumberBox | | ✓ | |
|
||
| `PeriodMonth` | Ay | dxNumberBox | | ✓ | |
|
||
| `PeriodStatus` | Dönem Durumu | dxSelectBox | | ✓ | liste: Open, Closed |
|
||
| `WorkDays` | Çalışma Günü | dxNumberBox | | ✓ | |
|
||
| `NetHours` | Net Çalışma (saat) | dxNumberBox | | ✓ | |
|
||
| `LateMinutes` | Geç Kalma (dk) | dxNumberBox | | ✓ | |
|
||
| `LateDays` | Geç Kalınan Gün | dxNumberBox | | ✓ | |
|
||
| `EarlyLeaveMinutes` | Erken Çıkış (dk) | dxNumberBox | | ✓ | |
|
||
| `EarlyLeaveDays` | Erken Çıkılan Gün | dxNumberBox | | ✓ | |
|
||
| `OvertimeHours` | Fazla Mesai (saat) | dxNumberBox | | ✓ | |
|
||
| `OvertimePaidHours` | Zamlı Fazla Mesai (saat) | dxNumberBox | | ✓ | |
|
||
| `WeeklyOffDays` | Hafta Tatili | dxNumberBox | | ✓ | |
|
||
| `HolidayDays` | Resmî Tatil | dxNumberBox | | ✓ | |
|
||
| `LeaveDays` | İzinli Gün | dxNumberBox | | ✓ | |
|
||
| `UnpaidLeaveDays` | Ücretsiz İzinli Gün | dxNumberBox | | ✓ | |
|
||
| `TrainingDays` | Eğitim Günü | dxNumberBox | | ✓ | |
|
||
| `SickDays` | Raporlu Gün | dxNumberBox | | ✓ | |
|
||
| `AbsentDays` | Devamsız Gün | dxNumberBox | | ✓ | |
|
||
| `IncompleteDays` | Eksik Okutmalı Gün | dxNumberBox | | ✓ | |
|
||
| `AssumedDays` | Varsayılan Gün | dxNumberBox | | ✓ | |
|
||
| `YearOvertimeHours` | Yıllık Fazla Mesai (saat) | dxNumberBox | | ✓ | |
|
||
| `AnnualOvertimeLimit` | Yıllık Fazla Mesai Sınırı | dxNumberBox | | ✓ | |
|
||
| `IsOverAnnualLimit` | Yıllık Sınır Aşıldı | dxNumberBox | | | |
|
||
|
||
#### Puantaj Dönemleri — `App.Hr.TimesheetPeriod`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TimesheetPeriod.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Attendance` › `App.Hr.TimesheetPeriod` (sıra 4) |
|
||
| Yetki | `App.Hr.TimesheetPeriod` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Puantaj Dönemleri — aylık puantaj dönemleri: yeniden hesaplama ve kapanış. |
|
||
| Kaynak | `Hr_T_TimesheetPeriod` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Hr.Attendance.Widget.Open`, `App.Hr.Attendance.Widget.Closed`, `App.Widget.Total` |
|
||
| Komutlar | InsertAfter: `Hr_S_TimesheetPeriodAfterSave` · UpdateAfter: `Hr_S_TimesheetPeriodAfterSave` · DeleteBefore: SQL |
|
||
| Form varsayılanları | PeriodYear=@YEAR, PeriodMonth=@MONTH, Status=Open |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `PeriodYear` | Yıl | dxNumberBox | ✓ | ✓ | |
|
||
| `PeriodMonth` | Ay | dxNumberBox | ✓ | ✓ | |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Open, Closed |
|
||
| `CalculatedAt` | Hesaplanma | dxDateBox | | | |
|
||
| `ClosedAt` | Kapanış | dxDateBox | | | |
|
||
| `ClosedById` | Kapatan | dxSelectBox | | | sorgu: AbpUsers |
|
||
| `NightlyAt` | Gece İşi | dxDateBox | | | |
|
||
| `Note` | Not | dxTextArea | | ✓ | |
|
||
|
||
#### Puantajım — `App.Hr.MyTimesheet`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyTimesheet.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyTimesheet` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Puantajım — kendi aylık puantajınız: ay ay çalışma günü, net saat, geç kalma, erken çıkış, fazla mesai ve izinli/raporlu/devamsız günler. |
|
||
| Kaynak | `Hr_V_TimesheetMonthly` · filtre `"EmployeeId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.MyTimesheetDay` (Id → PeriodKey) |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `PeriodYear` | Yıl | dxNumberBox | | ✓ | |
|
||
| `PeriodMonth` | Ay | dxNumberBox | | ✓ | |
|
||
| `PeriodStatus` | Dönem Durumu | dxSelectBox | | ✓ | liste: Open, Closed |
|
||
| `WorkDays` | Çalışma Günü | dxNumberBox | | ✓ | |
|
||
| `NetHours` | Net Çalışma (saat) | dxNumberBox | | ✓ | |
|
||
| `LateMinutes` | Geç Kalma (dk) | dxNumberBox | | ✓ | |
|
||
| `LateDays` | Geç Kalınan Gün | dxNumberBox | | ✓ | |
|
||
| `EarlyLeaveMinutes` | Erken Çıkış (dk) | dxNumberBox | | ✓ | |
|
||
| `EarlyLeaveDays` | Erken Çıkılan Gün | dxNumberBox | | ✓ | |
|
||
| `OvertimeHours` | Fazla Mesai (saat) | dxNumberBox | | ✓ | |
|
||
| `OvertimePaidHours` | Zamlı Fazla Mesai (saat) | dxNumberBox | | ✓ | |
|
||
| `WeeklyOffDays` | Hafta Tatili | dxNumberBox | | ✓ | |
|
||
| `HolidayDays` | Resmî Tatil | dxNumberBox | | ✓ | |
|
||
| `LeaveDays` | İzinli Gün | dxNumberBox | | ✓ | |
|
||
| `UnpaidLeaveDays` | Ücretsiz İzinli Gün | dxNumberBox | | ✓ | |
|
||
| `TrainingDays` | Eğitim Günü | dxNumberBox | | ✓ | |
|
||
| `SickDays` | Raporlu Gün | dxNumberBox | | ✓ | |
|
||
| `AbsentDays` | Devamsız Gün | dxNumberBox | | ✓ | |
|
||
| `IncompleteDays` | Eksik Okutmalı Gün | dxNumberBox | | ✓ | |
|
||
| `AssumedDays` | Varsayılan Gün | dxNumberBox | | ✓ | |
|
||
| `YearOvertimeHours` | Yıllık Fazla Mesai (saat) | dxNumberBox | | ✓ | |
|
||
| `AnnualOvertimeLimit` | Yıllık Fazla Mesai Sınırı | dxNumberBox | | ✓ | |
|
||
| `IsOverAnnualLimit` | Yıllık Sınır Aşıldı | dxNumberBox | | | |
|
||
|
||
#### Puantaj Günlerim — `App.Hr.MyTimesheetDay`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyTimesheetDay.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyTimesheetDay` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Puantaj Günlerim — puantajınızın günleri: ilk giriş, son çıkış, net çalışma, mola, geç kalma, erken çıkış, fazla mesai ve gün tipi. |
|
||
| Kaynak | `Hr_T_Timesheet` · filtre `"IsDeleted" = 'false' AND "EmployeeId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `WorkDate` | İş Günü | dxDateBox | | | |
|
||
| `DayType` | Gün Tipi | dxSelectBox | | | liste: Work, WeeklyOff, Holiday, Training, Leave, Sick, Absent |
|
||
| `LeaveTypeId` | İzin Türü | dxSelectBox | | | sorgu: Hr_T_LeaveType |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | | sorgu: Hr_T_Training |
|
||
| `FirstIn` | İlk Giriş | dxDateBox | | | |
|
||
| `LastOut` | Son Çıkış | dxDateBox | | | |
|
||
| `NetHours` | Net Çalışma (saat) | dxNumberBox | | | |
|
||
| `BreakMinutes` | Mola Düşümü (dk) | dxNumberBox | | | |
|
||
| `LateMinutes` | Geç Kalma (dk) | dxNumberBox | | | |
|
||
| `EarlyLeaveMinutes` | Erken Çıkış (dk) | dxNumberBox | | | |
|
||
| `OvertimeHours` | Fazla Mesai (saat) | dxNumberBox | | | |
|
||
| `IsAssumed` | Varsayılan | dxCheckBox | | | |
|
||
| `IsManual` | Elle | dxCheckBox | | | |
|
||
| `IsIncomplete` | Eksik Okutma | dxCheckBox | | | |
|
||
| `Note` | Not | dxTextBox | | | |
|
||
| `PeriodKey` | Dönem Anahtarı | dxTextBox | | | |
|
||
|
||
### Sağlık Kartları (`App.Hr.HealthCard`)
|
||
|
||
#### Sağlık Kartları — `App.Hr.HealthCard`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCard.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr` › `App.Hr.HealthCard` (sıra 7) |
|
||
| Yetki | `App.Hr.HealthCard` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Sağlık Kartları — işyeri hekimliği için her çalışanın sağlık kartı. Liste kiracının bütün kullanıcılarıdır; kart bilgileri detay sekmelerinden girilir. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `AbpUsers` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✗ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.HealthCardHistory` (Id → Id), `App.Hr.HealthCardLabPhysical` (Id → Id), `App.Hr.HealthCardAnamnesis` (Id → Id), `App.Hr.HealthCardResult` (Id → Id), `App.Hr.HealthCardPeriodicExamination` (Id → UserId), `App.Hr.HealthCardPatientProtocol` (Id → UserId), `App.Hr.HealthCardSickLeave` (Id → UserId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Ad | dxTextBox | | ✓ | |
|
||
| `Surname` | Soyad | dxTextBox | | ✓ | |
|
||
| `IdentityNumber` | T.C. Kimlik No | dxTextBox | | ✓ | |
|
||
| `BirthDate` | Doğum Tarihi | dxDateBox | | ✓ | |
|
||
| `Gender` | Cinsiyet | dxSelectBox | | ✓ | liste: Male, Female |
|
||
| `BloodType` | Kan Grubu | dxTextBox | | ✓ | |
|
||
| `Email` | E-posta | dxTextBox | | ✓ | |
|
||
| `PhoneNumber` | Telefon | dxTextBox | | ✓ | |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `HireDate` | İşe Giriş Tarihi | dxDateBox | | ✓ | |
|
||
| `SskNo` | SSK No | dxTextBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Soy / Özgeçmiş — `App.Hr.HealthCardHistory`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardHistory.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardHistory` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Soy / Özgeçmiş — çalışanın aile sağlık geçmişi, kan grubu, kronik hastalıkları ve aşıları. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `AbpUsers` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `MotherHealthStatus` | Anne | dxSelectBox | | ✓ | liste: Alive, Disease, Deceased |
|
||
| `MotherHealthNote` | Anne Notu | dxTextBox | | ✓ | |
|
||
| `FatherHealthStatus` | Baba | dxSelectBox | | ✓ | liste: Alive, Disease, Deceased |
|
||
| `FatherHealthNote` | Baba Notu | dxTextBox | | ✓ | |
|
||
| `SiblingHealthStatus` | Kardeş | dxSelectBox | | ✓ | liste: Alive, Disease, Deceased |
|
||
| `SiblingHealthNote` | Kardeş Notu | dxTextBox | | ✓ | |
|
||
| `ChildHealthStatus` | Çocuk | dxSelectBox | | ✓ | liste: Alive, Disease, Deceased |
|
||
| `ChildHealthNote` | Çocuk Notu | dxTextBox | | ✓ | |
|
||
| `BloodType` | Kan Grubu | dxSelectBox | | ✓ | liste: 0 Rh+, 0 Rh-, A Rh+, A Rh-, B Rh+, B Rh-, AB Rh+, AB Rh- |
|
||
| `ChronicDisease` | Doğuştan / Kronik Hastalık | dxTextBox | | ✓ | |
|
||
| `TetanusVaccination` | Tetanoz | dxTextBox | | ✓ | |
|
||
| `HepatitisVaccination` | Hepatit | dxTextBox | | ✓ | |
|
||
| `OtherVaccination` | Diğer | dxTextBox | | ✓ | |
|
||
|
||
#### Laboratuvar - Fizik Muayene — `App.Hr.HealthCardLabPhysical`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardLabPhysical.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardLabPhysical` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Laboratuvar – Fizik Muayene — işe giriş ya da periyodik muayenedeki tahlil ve fizik muayene bulguları. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `AbpUsers` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `LabBiologicalAnalysis` | Biyolojik Analizler | dxTextBox | | ✓ | |
|
||
| `LabBlood` | Kan | dxTextBox | | ✓ | |
|
||
| `LabUrine` | İdrar | dxTextBox | | ✓ | |
|
||
| `LabRadiological` | Radyolojik Analizler | dxTextBox | | ✓ | |
|
||
| `LabRadiologicalPhysiological` | Radyolojik Fizyolojik | dxTextBox | | ✓ | |
|
||
| `LabAudiometry` | Odyometri | dxTextBox | | ✓ | |
|
||
| `LabPulmonaryFunction` | Solunum Fonksiyon Testi | dxTextBox | | ✓ | |
|
||
| `LabPsychologicalTests` | Psikolojik Testler | dxTextBox | | ✓ | |
|
||
| `LabOther` | Diğer Laboratuvar Bulguları | dxTextBox | | ✓ | |
|
||
| `ExamSensoryOrgans` | Duyu Organları | dxTextBox | | ✓ | |
|
||
| `ExamEye` | Göz | dxTextBox | | ✓ | |
|
||
| `ExamEnt` | Kulak-Burun-Boğaz | dxTextBox | | ✓ | |
|
||
| `ExamSkin` | Deri | dxTextBox | | ✓ | |
|
||
| `ExamCardiovascular` | Kalp-Damar Sistemi Muayenesi | dxTextBox | | ✓ | |
|
||
| `ExamRespiratory` | Solunum Sistemi Muayenesi | dxTextBox | | ✓ | |
|
||
| `ExamDigestive` | Sindirim Sistemi Muayenesi | dxTextBox | | ✓ | |
|
||
| `ExamUrogenital` | Ürogenital Sistem Muayenesi | dxTextBox | | ✓ | |
|
||
| `ExamMusculoskeletal` | Kas-İskelet Sistemi Muayenesi | dxTextBox | | ✓ | |
|
||
| `ExamNeurological` | Nörolojik Muayene | dxTextBox | | ✓ | |
|
||
| `ExamPsychiatric` | Psikiyatrik Muayene | dxTextBox | | ✓ | |
|
||
| `ExamOther` | Diğer Muayene Bulguları | dxTextBox | | ✓ | |
|
||
| `ExamBloodPressure` | Tansiyon | dxTextBox | | ✓ | |
|
||
| `ExamPulse` | Nabız / dk | dxTextBox | | ✓ | |
|
||
| `ExamHeight` | Boy (cm) | dxNumberBox | | ✓ | |
|
||
| `ExamWeight` | Kilo (kg) | dxNumberBox | | ✓ | |
|
||
|
||
#### Anamnez — `App.Hr.HealthCardAnamnesis`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardAnamnesis.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardAnamnesis` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Anamnez — çalışanın sağlık geçmişine dair soru formu. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `AbpUsers` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ComplaintChestPain` | Göğüs Ağrısı | dxCheckBox | | ✓ | |
|
||
| `ComplaintProductiveCough` | Balgamlı Öksürük | dxCheckBox | | ✓ | |
|
||
| `ComplaintDyspnea` | Nefes Darlığı | dxCheckBox | | ✓ | |
|
||
| `ComplaintPalpitation` | Çarpıntı | dxCheckBox | | ✓ | |
|
||
| `ComplaintJointPain` | Eklem Ağrısı | dxCheckBox | | ✓ | |
|
||
| `ComplaintBackPain` | Bel Ağrısı | dxCheckBox | | ✓ | |
|
||
| `ComplaintDiarrheaConstipation` | İshal veya Kabızlık | dxCheckBox | | ✓ | |
|
||
| `DiagnosisDiabetes` | Şeker Hastalığı | dxCheckBox | | ✓ | |
|
||
| `DiagnosisHeartDisease` | Kalp Hastalığı | dxCheckBox | | ✓ | |
|
||
| `DiagnosisKidneyDisease` | Böbrek Hastalığı | dxCheckBox | | ✓ | |
|
||
| `DiagnosisJaundice` | Sarılık | dxCheckBox | | ✓ | |
|
||
| `DiagnosisPepticUlcer` | Mide / Oniki Parmak Ülseri | dxCheckBox | | ✓ | |
|
||
| `DiagnosisHearingLoss` | İşitme Kaybı | dxCheckBox | | ✓ | |
|
||
| `DiagnosisVisionImpairment` | Görme Bozukluğu | dxCheckBox | | ✓ | |
|
||
| `DiagnosisNervousSystemDisease` | Sinir Sistemi Hastalığı | dxCheckBox | | ✓ | |
|
||
| `DiagnosisSkinDisease` | Deri Hastalığı | dxCheckBox | | ✓ | |
|
||
| `DiagnosisFoodPoisoning` | Besin Zehirlenmesi | dxCheckBox | | ✓ | |
|
||
| `Hospitalized` | 3. Hastanede yattınız mı? | dxCheckBox | | ✓ | script |
|
||
| `HospitalizedNote` | Hastanede Yatış Notu | dxTextBox | | ✓ | |
|
||
| `HadSurgery` | 4. Ameliyat oldunuz mu? | dxCheckBox | | ✓ | script |
|
||
| `HadSurgeryNote` | Ameliyat Notu | dxTextBox | | ✓ | |
|
||
| `HadWorkAccident` | 5. İş kazası geçirdiniz mi? | dxCheckBox | | ✓ | script |
|
||
| `HadWorkAccidentNote` | İş Kazası Notu | dxTextBox | | ✓ | |
|
||
| `OccupationalDiseaseExam` | 6. Meslek hastalığı şüphesiyle tetkik veya muayene oldunuz mu? | dxCheckBox | | ✓ | script |
|
||
| `OccupationalDiseaseExamNote` | Meslek Hastalığı Muayene Notu | dxTextBox | | ✓ | |
|
||
| `DisabilityPension` | 7. Malulen emeklilik aldınız mı? | dxCheckBox | | ✓ | script |
|
||
| `DisabilityPensionNote` | Malulen Emeklilik Notu | dxTextBox | | ✓ | |
|
||
| `UnderTreatment` | 8. Şu anda bir tedavi görüyor musunuz? | dxCheckBox | | ✓ | script |
|
||
| `UnderTreatmentNote` | Tedavi Notu | dxTextBox | | ✓ | |
|
||
| `Smoking` | 9. Sigara kullanıyor musunuz? | dxSelectBox | | ✓ | liste: None, Occasionally, Normal, Quit · script |
|
||
| `SmokingNote` | Sigara Notu | dxTextBox | | ✓ | |
|
||
| `Alcohol` | 10. Alkol kullanıyor musunuz? | dxSelectBox | | ✓ | liste: None, Occasionally, Normal, Quit · script |
|
||
| `AlcoholNote` | Alkol Notu | dxTextBox | | ✓ | |
|
||
|
||
#### Sonuç — `App.Hr.HealthCardResult`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardResult.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardResult` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Sonuç — işyeri hekiminin çalışmaya elverişlilik kararı. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `AbpUsers` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `FitForWorkJob` | Çalışmaya Elverişli - İş | dxTextBox | | ✓ | |
|
||
| `FitForWorkCondition` | Çalışmaya Elverişli - Koşul | dxTextBox | | ✓ | |
|
||
| `FitnessDoctorId` | Doktor | dxSelectBox | | ✓ | sorgu: Hr_T_Doctor |
|
||
| `ShiftWorkFit` | Vardiyalı Çalışabilir | dxCheckBox | | ✓ | |
|
||
| `NightWorkFit` | Gece Çalışabilir | dxCheckBox | | ✓ | |
|
||
| `ShiftNightDoctorId` | Vardiya / Gece Çalışması Doktoru | dxSelectBox | | ✓ | sorgu: Hr_T_Doctor |
|
||
|
||
#### Periyodik Muayeneler — `App.Hr.HealthCardPeriodicExamination`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardPeriodicExamination.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardPeriodicExamination` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Periyodik Muayeneler — çalışanın yasal periyodik sağlık muayeneleri. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `Adm_T_UserPeriodicExamination` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `UserId` | Kullanıcı | dxSelectBox | | | sorgu: AbpUsers |
|
||
| `ExamDate` | Tarih | dxDateBox | ✓ | ✓ | script |
|
||
| `Examination` | Muayene | dxTextBox | ✓ | ✓ | |
|
||
| `Result` | Sonuç | dxTextBox | | ✓ | |
|
||
| `DoctorId` | Doktor | dxSelectBox | | ✓ | sorgu: Hr_T_Doctor · script |
|
||
| `DoctorDiplomaNo` | Diploma No | dxTextBox | | ✓ | |
|
||
|
||
#### Hasta Protokol Defteri — `App.Hr.HealthCardPatientProtocol`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardPatientProtocol.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardPatientProtocol` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Hasta Protokol Defteri — çalışanın revir başvuruları. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `Adm_T_UserPatientProtocol` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `UserId` | Kullanıcı | dxSelectBox | | | sorgu: AbpUsers |
|
||
| `SequenceNo` | Sıra No | dxNumberBox | | ✓ | |
|
||
| `ProtocolDate` | Tarih | dxDateBox | ✓ | ✓ | script |
|
||
| `ProtocolType` | Protokol Türü | dxSelectBox | ✓ | ✓ | liste: Disease, WorkAccident, OccupationalDisease, Control, Other |
|
||
| `ProtocolResult` | Sonuç | dxSelectBox | | ✓ | liste: TreatmentDischarged, Rest, Referral · script |
|
||
| `RestDays` | İstirahat Günü | dxNumberBox | | ✓ | |
|
||
| `ReferralPlace` | Sevk Yeri | dxTextBox | | ✓ | |
|
||
| `DoctorId` | Doktor | dxSelectBox | | ✓ | sorgu: Hr_T_Doctor |
|
||
|
||
#### İstirahat Raporları — `App.Hr.HealthCardSickLeave`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_HealthCardSickLeave.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.HealthCardSickLeave` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | İstirahat Raporları — çalışanın aldığı istirahat (rapor) kayıtları. |
|
||
| Geliştirme talebi | Human Resources -> Health Card |
|
||
| Kaynak | `Adm_T_UserSickLeave` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_LeaveSickLeaveSync` · UpdateAfter: `Hr_S_LeaveSickLeaveSync` · DeleteAfter: `Hr_S_LeaveSickLeaveSync` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `UserId` | Kullanıcı | dxSelectBox | | | sorgu: AbpUsers |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `EndDate` | Bitiş Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `Days` | Gün | dxNumberBox | ✓ | ✓ | |
|
||
| `SickLeaveType` | İstirahat Türü | dxSelectBox | ✓ | ✓ | liste: Disease, WorkAccident, OccupationalDisease, Maternity |
|
||
| `Institution` | Kurum | dxTextBox | | ✓ | |
|
||
| `Clinic` | Klinik | dxTextBox | | ✓ | |
|
||
| `SickLeaveReason` | İstirahat Nedeni | dxTextBox | | ✓ | |
|
||
|
||
### Eğitimler (`App.Hr.Training`)
|
||
|
||
#### Eğitimler — `App.Hr.Training`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Training.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr` › `App.Hr.Training` (sıra 8) |
|
||
| Yetki | `App.Hr.Training` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Eğitimler — düzenlenen her eğitim oturumu: tarih/saat, süre, yer, eğitmen, maliyet, kazandırdığı yetkinlikler, katılımcılar ve dosyalar. |
|
||
| Geliştirme talebi | Human Resources -> Eğitim |
|
||
| Kaynak | `Hr_T_Training` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.TrainingParticipant` (Id → TrainingId), `App.Hr.TrainingFile` (Id → TrainingId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Training.Widget.Open`, `App.Hr.Training.Widget.Closed`, `App.Hr.Training.Widget.Cost` |
|
||
| Komutlar | UpdateAfter: `Hr_S_TrainingSync` · DeleteAfter: `Hr_S_TrainingSync` |
|
||
| Form varsayılanları | BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `TrainingTypeId` | Eğitim Tipi | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_TrainingType |
|
||
| `TrainingSubjectId` | Eğitim Konusu | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_TrainingSubject (← TrainingTypeId) |
|
||
| `EntryDate` | Giriş Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `StartDate` | Eğitim Baş. Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `EndDate` | Bit. Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `StartTime` | Eğitim Baş. Saati | dxDateBox | | ✓ | script |
|
||
| `EndTime` | Bit. Saati | dxDateBox | | ✓ | script |
|
||
| `TotalHours` | Top. Eğitim Süresi (Saat) | dxNumberBox | | ✓ | |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Open, Closed · script |
|
||
| `TrainerName` | Eğitim Veren Kişi | dxTextBox | | ✓ | |
|
||
| `TrainingPlace` | Eğitim Yeri | dxTextBox | | ✓ | |
|
||
| `TrainingInstitution` | Eğitim Veren Kurum | dxTextBox | | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `SkillIds` | Yetkinlikler | dxTagBox | | ✓ | sorgu: Hr_T_Skill |
|
||
| `CostPlace` | Eğitim Yeri Maliyeti | dxNumberBox | | ✓ | script |
|
||
| `CostTrainer` | Eğitmen Maliyeti | dxNumberBox | | ✓ | script |
|
||
| `CostAccommodation` | Konaklama | dxNumberBox | | ✓ | script |
|
||
| `CostTransport` | Ulaşım | dxNumberBox | | ✓ | script |
|
||
| `CostCatering` | İkram | dxNumberBox | | ✓ | script |
|
||
| `CostOther` | Diğer | dxNumberBox | | ✓ | script |
|
||
| `CostTotal` | Toplam Maliyet | dxNumberBox | | ✓ | |
|
||
|
||
#### Eğitim Tipleri — `App.Hr.TrainingType`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TrainingType.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.TrainingType` (sıra 19) |
|
||
| Yetki | `App.Hr.TrainingType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Eğitim Tipleri — eğitimlerin türü (oryantasyon, iş başı, grup, firma dışı, akademi, rotasyon…). |
|
||
| Geliştirme talebi | Human Resources -> Eğitim |
|
||
| Kaynak | `Hr_T_TrainingType` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Hr.TrainingType.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | script |
|
||
|
||
#### Eğitim Konuları — `App.Hr.TrainingSubject`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TrainingSubject.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.TrainingSubject` (sıra 20) |
|
||
| Yetki | `App.Hr.TrainingSubject` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Eğitim Konuları — bir eğitim tipine bağlı konu başlıkları (İSG, siber güvenlik, iş başı eğitimi…). |
|
||
| Geliştirme talebi | Human Resources -> Eğitim |
|
||
| Kaynak | `Hr_T_TrainingSubject` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Veri aynası | `data/App.Hr.TrainingSubject.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `TrainingTypeId` | Eğitim Tipi | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_TrainingType |
|
||
| `Name` | Eğitim Konusu | dxTextBox | ✓ | ✓ | |
|
||
| `IsEvaluated` | Değerlendirilsin mi? | dxCheckBox | ✓ | ✓ | script |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | script |
|
||
|
||
#### Katılımcılar — `App.Hr.TrainingParticipant`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TrainingParticipant.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TrainingParticipant` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Katılımcılar — eğitime katılan personel ve katılım sonucu. |
|
||
| Geliştirme talebi | Human Resources -> Eğitim |
|
||
| Kaynak | `Hr_T_TrainingParticipant` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_TrainingSync` · UpdateAfter: `Hr_S_TrainingSync` · DeleteAfter: `Hr_S_TrainingSync` |
|
||
| Butonlar | `App.Hr.TrainingParticipant.Certificate` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | | sorgu: Hr_T_Training |
|
||
| `UserId` | Adı Soyadı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `HireDate` | İşe Giriş Tarihi | dxDateBox | | ✓ | |
|
||
| `DepartmentId` | Bölüm | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Görevi | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `AttendanceStatus` | Katılım Durumu | dxSelectBox | ✓ | ✓ | liste: Attended, NotAttended, Excused · script |
|
||
| `EvaluationScore` | Değerlendirme Puanı | dxNumberBox | | ✓ | |
|
||
| `ExamScore` | Sınav Notu | dxNumberBox | | ✓ | |
|
||
| `LeaveDate` | Ayrılma Tarihi | dxDateBox | | ✓ | |
|
||
| `Note` | Not | dxTextArea | | ✓ | |
|
||
|
||
#### Dosyalar — `App.Hr.TrainingFile`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TrainingFile.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TrainingFile` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Eğitim Dosyaları — eğitime ait doküman ve dijital kaynaklar (sunum, imzalı katılım listesi, sertifika örneği…). |
|
||
| Geliştirme talebi | Human Resources -> Eğitim |
|
||
| Kaynak | `Hr_T_TrainingFile` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `TrainingId` | Eğitim | dxTextBox | | | |
|
||
| `DocumentTypeId` | Dosya Türü | dxSelectBox | | ✓ | sorgu: Hr_T_DocumentType |
|
||
| `FileDate` | Tarih | dxDateBox | ✓ | ✓ | script |
|
||
| `FileName` | Dosya Adı | dxTextBox | ✓ | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | ✓ | ✓ | |
|
||
|
||
### Performans Yönetimi (`App.Hr.Performance`)
|
||
|
||
#### Değerlendirme Dönemleri — `App.Hr.PerformancePeriod`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformancePeriod.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Performance` › `App.Hr.PerformancePeriod` (sıra 1) |
|
||
| Yetki | `App.Hr.PerformancePeriod` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Değerlendirme Dönemleri — performans değerlendirmesinin yapıldığı dönem (ör. 2026 Yıl Sonu), puan ağırlıkları ve 360 derece ayarı. |
|
||
| Kaynak | `Hr_T_PerformancePeriod` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.PerformancePeriodSkill` (Id → PeriodId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Performance.Widget.ActivePeriod`, `App.Hr.Performance.Widget.Calibration`, `App.Hr.Performance.Widget.ClosedPeriod` |
|
||
| Komutlar | InsertAfter: `Hr_S_PerformancePeriodActivate` · UpdateAfter: `Hr_S_PerformancePeriodActivate` |
|
||
| Form varsayılanları | Status=Planned, GoalWeight=60, CompetencyWeight=40, Is360Enabled=false, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Planned, Active, Calibration, Closed |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `EndDate` | Bitiş Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `SelfReviewDueDate` | Öz Değerlendirme Son Tarihi | dxDateBox | | ✓ | |
|
||
| `ManagerReviewDueDate` | Yönetici Değerlendirmesi Son Tarihi | dxDateBox | | ✓ | |
|
||
| `GoalWeight` | Hedef Ağırlığı % | dxNumberBox | ✓ | ✓ | script |
|
||
| `CompetencyWeight` | Yetkinlik Ağırlığı % | dxNumberBox | ✓ | ✓ | script |
|
||
| `Is360Enabled` | 360 Derece Açık | dxCheckBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `Description` | Açıklama | dxTextBox | | ✓ | |
|
||
|
||
#### Tüm Değerlendirmeler — `App.Hr.PerformanceReview`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceReview.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Performance` › `App.Hr.PerformanceReview` (sıra 2) |
|
||
| Yetki | `App.Hr.PerformanceReview` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Tüm Değerlendirmeler — bütün dönemlerin bütün çalışan değerlendirmeleri; İK süreci uçtan uca buradan izler ve yönetir. |
|
||
| Kaynak | `Hr_T_PerformanceReview` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Todo (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.PerformanceGoal` (Id → ReviewId), `App.Hr.PerformanceCompetency` (Id → ReviewId), `App.Hr.PerformanceFeedback` (Id → ReviewId), `App.Hr.ReviewDevelopmentPlan` (Id → ReviewId, EmployeeId → EmployeeId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Performance.Widget.InGoalOrSelf`, `App.Hr.Performance.Widget.ManagerReview`, `App.Hr.Performance.Widget.Calibration`, `App.Hr.Performance.Widget.Completed` |
|
||
| Todo | başlık `EmployeeName`, durum `Status` (GoalSetting,SelfReview,ManagerReview,Calibration,Completed) |
|
||
| Komutlar | InsertAfter: `Hr_S_PerformanceReviewAfterSave` · UpdateAfter: `Hr_S_PerformanceReviewAfterSave` |
|
||
| Form varsayılanları | Status=GoalSetting, IsActive=true, BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `BranchId` | Tesis Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `EmployeeName` | Çalışan Adı | dxTextBox | | | |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `PeriodId` | Dönem | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_PerformancePeriod |
|
||
| `ManagerId` | Yönetici | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: GoalSetting, SelfReview, ManagerReview, Calibration, Completed |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `GoalScore` | Hedef Puanı | dxNumberBox | | ✓ | |
|
||
| `CompetencyScore` | Yetkinlik Puanı | dxNumberBox | | ✓ | |
|
||
| `Feedback360Score` | 360 Ortalaması | dxNumberBox | | ✓ | |
|
||
| `OverallScore` | Genel Puan | dxNumberBox | | ✓ | |
|
||
| `CalibratedScore` | Kalibre Puan | dxNumberBox | | ✓ | |
|
||
| `RatingId` | Derece | dxSelectBox | | ✓ | sorgu: Hr_T_PerformanceRating |
|
||
| `SelfComment` | Öz Değerlendirme Yorumu | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `CalibrationNote` | Kalibrasyon Notu | dxTextArea | | ✓ | |
|
||
| `SelfSubmittedDate` | Öz Değerlendirme Gönderimi | dxDateBox | | ✓ | |
|
||
| `ManagerSubmittedDate` | Yönetici Değerlendirmesi Gönderimi | dxDateBox | | ✓ | |
|
||
| `CompletedDate` | Tamamlanma | dxDateBox | | ✓ | |
|
||
|
||
#### Kalibrasyon — `App.Hr.PerformanceCalibration`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceCalibration.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Performance` › `App.Hr.PerformanceCalibration` (sıra 3) |
|
||
| Yetki | `App.Hr.PerformanceCalibration` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Kalibrasyon — yöneticilerin gönderdiği değerlendirmelerin İK tarafından birlikte gözden geçirilip puanların dengelenmesi. |
|
||
| Kaynak | `Hr_T_PerformanceReview` · filtre `"IsDeleted" = 'false' AND "Status" IN ('Calibration', 'Completed')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Hr.Performance.Widget.Calibration`, `App.Hr.Performance.Widget.Completed`, `App.Hr.Performance.Widget.AverageScore`, `App.Hr.Performance.Widget.AverageCalibrated` |
|
||
| Komutlar | UpdateAfter: `Hr_S_PerformanceReviewAfterSave` |
|
||
| Form varsayılanları | Status=GoalSetting, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `PeriodId` | Dönem | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_PerformancePeriod |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `EmployeeName` | Çalışan Adı | dxTextBox | | | |
|
||
| `ManagerId` | Yönetici | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: GoalSetting, SelfReview, ManagerReview, Calibration, Completed |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `GoalScore` | Hedef Puanı | dxNumberBox | | ✓ | |
|
||
| `CompetencyScore` | Yetkinlik Puanı | dxNumberBox | | ✓ | |
|
||
| `Feedback360Score` | 360 Ortalaması | dxNumberBox | | ✓ | |
|
||
| `OverallScore` | Genel Puan | dxNumberBox | | ✓ | |
|
||
| `CalibratedScore` | Kalibre Puan | dxNumberBox | | ✓ | |
|
||
| `RatingId` | Derece | dxSelectBox | | ✓ | sorgu: Hr_T_PerformanceRating |
|
||
| `SelfComment` | Öz Değerlendirme Yorumu | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `CalibrationNote` | Kalibrasyon Notu | dxTextArea | | ✓ | |
|
||
| `SelfSubmittedDate` | Öz Değerlendirme Gönderimi | dxDateBox | | ✓ | |
|
||
| `ManagerSubmittedDate` | Yönetici Değerlendirmesi Gönderimi | dxDateBox | | ✓ | |
|
||
| `CompletedDate` | Tamamlanma | dxDateBox | | ✓ | |
|
||
|
||
#### Gelişim Planları — `App.Hr.DevelopmentPlan`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DevelopmentPlan.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Performance` › `App.Hr.DevelopmentPlan` (sıra 4) |
|
||
| Yetki | `App.Hr.DevelopmentPlan` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Gelişim Planları — bütün çalışanların gelişim aksiyonları; yetkinlik, eğitim ve sertifikalarla bağlantılı. |
|
||
| Kaynak | `Hr_T_DevelopmentPlan` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Scheduler, Todo (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Performance.Widget.Open`, `App.Hr.Performance.Widget.Overdue`, `App.Hr.Performance.Widget.Completed` |
|
||
| Todo | başlık `Title`, durum `Status` (Planned,InProgress,Completed,Cancelled) |
|
||
| Komutlar | InsertAfter: `Hr_S_DevelopmentPlanSync` · UpdateAfter: `Hr_S_DevelopmentPlanSync` |
|
||
| Form varsayılanları | ActionType=Training, Status=Planned, Progress=0, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `ReviewId` | Değerlendirme | dxSelectBox | | ✓ | sorgu: Hr_T_PerformanceReview |
|
||
| `Title` | Aksiyon | dxTextBox | ✓ | ✓ | |
|
||
| `ActionType` | Aksiyon Türü | dxSelectBox | ✓ | ✓ | liste: Training, Mentoring, Project, Reading, Certificate, Other |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | | ✓ | sorgu: Hr_T_Skill |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | ✓ | sorgu: Hr_T_Training |
|
||
| `CertificateId` | Sertifika | dxSelectBox | | ✓ | sorgu: Hr_T_Certificate |
|
||
| `MentorId` | Mentor | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | | ✓ | |
|
||
| `DueDate` | Bitiş Tarihi | dxDateBox | | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Planned, InProgress, Completed, Cancelled |
|
||
| `Progress` | İlerleme % | dxNumberBox | | ✓ | |
|
||
| `EmployeeNote` | Çalışan Notu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Performans Dereceleri — `App.Hr.PerformanceRating`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceRating.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.PerformanceRating` (sıra 16) |
|
||
| Yetki | `App.Hr.PerformanceRating` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Performans Dereceleri — genel performans puanının hangi dereceye karşılık geldiğini ve kalibrasyonda hedeflenen dağılımı tanımlayan ölçek. |
|
||
| Kaynak | `Hr_T_PerformanceRating` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Form varsayılanları | IsActive=true |
|
||
| Veri aynası | `data/App.Hr.PerformanceRating.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Level` | Seviye | dxNumberBox | ✓ | ✓ | |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `MinScore` | Alt Puan | dxNumberBox | ✓ | ✓ | |
|
||
| `MaxScore` | Üst Puan (hariç) | dxNumberBox | ✓ | ✓ | |
|
||
| `TargetDistribution` | Hedef Dağılım % | dxNumberBox | | ✓ | |
|
||
| `Color` | Renk | dxColorBox | | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Yetkinlik Seti — `App.Hr.PerformancePeriodSkill`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformancePeriodSkill.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.PerformancePeriodSkill` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Yetkinlik Seti — dönemde her çalışanın değerlendirileceği yetkinlikler ve beklenen seviyeleri. |
|
||
| Kaynak | `Hr_T_PerformancePeriodSkill` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_PerformancePeriodActivate` · UpdateAfter: `Hr_S_PerformancePeriodActivate` |
|
||
| Form varsayılanları | IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `PeriodId` | Dönem | dxTextBox | | | |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Skill |
|
||
| `ExpectedLevelId` | Beklenen Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Hedefler — `App.Hr.PerformanceGoal`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceGoal.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.PerformanceGoal` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Hedefler — değerlendirmenin ağırlıklı KPI / OKR hedefleri ve gerçekleşmeleri (İK görünümü). |
|
||
| Kaynak | `Hr_T_PerformanceGoal` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_PerformanceReviewRecalc` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | GoalType=KPI, Direction=Increasing, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `GoalType` | Tür | dxRadioGroup | ✓ | ✓ | liste: KPI, OKR |
|
||
| `Title` | Hedef | dxTextBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `Direction` | Yön | dxSelectBox | ✓ | ✓ | liste: Increasing, Decreasing · script |
|
||
| `Unit` | Birim | dxTextBox | | ✓ | |
|
||
| `TargetValue` | Hedef Değer | dxNumberBox | ✓ | ✓ | script |
|
||
| `Weight` | Ağırlık % | dxNumberBox | ✓ | ✓ | |
|
||
| `ActualValue` | Gerçekleşen | dxNumberBox | | ✓ | script |
|
||
| `AchievementRate` | Gerçekleşme % | dxNumberBox | | ✓ | |
|
||
| `SelfComment` | Öz Yorum | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Yetkinlikler — `App.Hr.PerformanceCompetency`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceCompetency.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.PerformanceCompetency` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Yetkinlikler — değerlendirmede yetkinliklerin beklenen, öz ve yönetici seviyeleri (İK görünümü). |
|
||
| Kaynak | `Hr_T_PerformanceCompetency` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_PerformanceReviewRecalc` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Skill |
|
||
| `ExpectedLevelId` | Beklenen Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `SelfLevelId` | Öz Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `ManagerLevelId` | Yönetici Seviyesi | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `Score` | Puan | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `SelfComment` | Öz Yorum | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
|
||
#### 360 Puanları — `App.Hr.PerformanceFeedbackScore`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceFeedbackScore.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.PerformanceFeedbackScore` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | 360 Puanları — 360 derece değerlendiricisinin yetkinlik bazında verdiği seviyeler (İK görünümü). |
|
||
| Kaynak | `Hr_T_PerformanceFeedbackScore` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_PerformanceReviewRecalc` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `FeedbackId` | Geri Bildirim | dxTextBox | | | |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Skill |
|
||
| `LevelId` | Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `Comment` | Yorum | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### 360 Derece — `App.Hr.PerformanceFeedback`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_PerformanceFeedback.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.PerformanceFeedback` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | 360 Derece — değerlendirmeye atanan 360 derece değerlendiriciler (akran, ast, üst, iç müşteri). |
|
||
| Kaynak | `Hr_T_PerformanceFeedback` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.PerformanceFeedbackScore` (Id → FeedbackId) |
|
||
| Komutlar | InsertBefore: SQL · InsertAfter: `Hr_S_PerformanceFeedbackOpen`, `Hr_S_PerformanceReviewRecalc` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | Relation=Peer, Status=Pending, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxSelectBox | | | sorgu: Hr_T_PerformanceReview |
|
||
| `ReviewerId` | Değerlendirici | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `Relation` | İlişki | dxSelectBox | ✓ | ✓ | liste: Peer, Subordinate, Superior, InternalCustomer |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Pending, Submitted |
|
||
| `Score` | Puan | dxNumberBox | | ✓ | |
|
||
| `SubmittedDate` | Gönderim Tarihi | dxDateBox | | ✓ | |
|
||
| `Comment` | Yorum | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Gelişim Planı — `App.Hr.ReviewDevelopmentPlan`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_ReviewDevelopmentPlan.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.ReviewDevelopmentPlan` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Gelişim Planı — değerlendirmeden çıkan gelişim aksiyonları (İK görünümü). |
|
||
| Kaynak | `Hr_T_DevelopmentPlan` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertAfter: `Hr_S_DevelopmentPlanSync` · UpdateAfter: `Hr_S_DevelopmentPlanSync` |
|
||
| Form varsayılanları | ActionType=Training, Status=Planned, Progress=0, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxTextBox | | | |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `Title` | Aksiyon | dxTextBox | ✓ | ✓ | |
|
||
| `ActionType` | Aksiyon Türü | dxSelectBox | ✓ | ✓ | liste: Training, Mentoring, Project, Reading, Certificate, Other |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | | ✓ | sorgu: Hr_T_Skill |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | ✓ | sorgu: Hr_T_Training |
|
||
| `CertificateId` | Sertifika | dxSelectBox | | ✓ | sorgu: Hr_T_Certificate |
|
||
| `MentorId` | Mentor | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | | ✓ | |
|
||
| `DueDate` | Bitiş Tarihi | dxDateBox | | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Planned, InProgress, Completed, Cancelled |
|
||
| `Progress` | İlerleme % | dxNumberBox | | ✓ | |
|
||
| `EmployeeNote` | Çalışan Notu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Hedeflerim — `App.Hr.MyPerformanceGoal`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyPerformanceGoal.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyPerformanceGoal` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Hedeflerim — çalışanın kendi değerlendirmesindeki hedefler. |
|
||
| Kaynak | `Hr_T_PerformanceGoal` · filtre `"IsDeleted" = 'false' AND "ReviewId" IN (SELECT "Id" FROM "Hr_T_PerformanceReview" WHERE "EmployeeId" = '@USERID')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertBefore: `Hr_S_PerformanceGuard` · InsertAfter: `Hr_S_PerformanceReviewRecalc` · UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteBefore: `Hr_S_PerformanceGuard` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | GoalType=KPI, Direction=Increasing, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `GoalType` | Tür | dxRadioGroup | ✓ | ✓ | liste: KPI, OKR |
|
||
| `Title` | Hedef | dxTextBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `Direction` | Yön | dxSelectBox | ✓ | ✓ | liste: Increasing, Decreasing · script |
|
||
| `Unit` | Birim | dxTextBox | | ✓ | |
|
||
| `TargetValue` | Hedef Değer | dxNumberBox | ✓ | ✓ | script |
|
||
| `Weight` | Ağırlık % | dxNumberBox | ✓ | ✓ | |
|
||
| `ActualValue` | Gerçekleşen | dxNumberBox | | ✓ | script |
|
||
| `AchievementRate` | Gerçekleşme % | dxNumberBox | | ✓ | |
|
||
| `SelfComment` | Öz Yorum | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Yetkinliklerim — `App.Hr.MyPerformanceCompetency`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyPerformanceCompetency.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyPerformanceCompetency` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Yetkinliklerim — çalışanın yetkinlik öz değerlendirmesi. |
|
||
| Kaynak | `Hr_T_PerformanceCompetency` · filtre `"IsDeleted" = 'false' AND "ReviewId" IN (SELECT "Id" FROM "Hr_T_PerformanceReview" WHERE "EmployeeId" = '@USERID')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Skill |
|
||
| `ExpectedLevelId` | Beklenen Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `SelfLevelId` | Öz Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `ManagerLevelId` | Yönetici Seviyesi | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `Score` | Puan | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `SelfComment` | Öz Yorum | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
|
||
#### Gelişim Planım — `App.Hr.MyDevelopmentPlan`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyDevelopmentPlan.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyDevelopmentPlan` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Gelişim Planım — çalışanın kendi gelişim aksiyonları. |
|
||
| Kaynak | `Hr_T_DevelopmentPlan` · filtre `"IsDeleted" = 'false' AND "EmployeeId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | UpdateBefore: SQL · UpdateAfter: `Hr_S_DevelopmentPlanSync` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxTextBox | | | |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `Title` | Aksiyon | dxTextBox | ✓ | ✓ | |
|
||
| `ActionType` | Aksiyon Türü | dxSelectBox | ✓ | ✓ | liste: Training, Mentoring, Project, Reading, Certificate, Other |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | | ✓ | sorgu: Hr_T_Skill |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | ✓ | sorgu: Hr_T_Training |
|
||
| `CertificateId` | Sertifika | dxSelectBox | | ✓ | sorgu: Hr_T_Certificate |
|
||
| `MentorId` | Mentor | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | | ✓ | |
|
||
| `DueDate` | Bitiş Tarihi | dxDateBox | | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Planned, InProgress, Completed, Cancelled |
|
||
| `Progress` | İlerleme % | dxNumberBox | | ✓ | |
|
||
| `EmployeeNote` | Çalışan Notu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Değerlendirmelerim — `App.Hr.MyPerformanceReview`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_MyPerformanceReview.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.MyPerformanceReview` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Değerlendirmelerim — oturum açan çalışanın kendi performans değerlendirmeleri. |
|
||
| Kaynak | `Hr_T_PerformanceReview` · filtre `"IsDeleted" = 'false' AND "EmployeeId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Todo (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.MyPerformanceGoal` (Id → ReviewId), `App.Hr.MyPerformanceCompetency` (Id → ReviewId), `App.Hr.MyDevelopmentPlan` (Id → ReviewId, EmployeeId → EmployeeId) |
|
||
| Todo | başlık `EmployeeName`, durum `Status` (GoalSetting,SelfReview,ManagerReview,Calibration,Completed) |
|
||
| Komutlar | UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewAfterSave` |
|
||
| Form varsayılanları | Status=GoalSetting, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `PeriodId` | Dönem | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_PerformancePeriod |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `EmployeeName` | Çalışan Adı | dxTextBox | | | |
|
||
| `ManagerId` | Yönetici | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: GoalSetting, SelfReview, ManagerReview, Calibration, Completed |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `GoalScore` | Hedef Puanı | dxNumberBox | | ✓ | |
|
||
| `CompetencyScore` | Yetkinlik Puanı | dxNumberBox | | ✓ | |
|
||
| `Feedback360Score` | 360 Ortalaması | dxNumberBox | | ✓ | |
|
||
| `OverallScore` | Genel Puan | dxNumberBox | | ✓ | |
|
||
| `CalibratedScore` | Kalibre Puan | dxNumberBox | | ✓ | |
|
||
| `RatingId` | Derece | dxSelectBox | | ✓ | sorgu: Hr_T_PerformanceRating |
|
||
| `SelfComment` | Öz Değerlendirme Yorumu | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `CalibrationNote` | Kalibrasyon Notu | dxTextArea | | ✓ | |
|
||
| `SelfSubmittedDate` | Öz Değerlendirme Gönderimi | dxDateBox | | ✓ | |
|
||
| `ManagerSubmittedDate` | Yönetici Değerlendirmesi Gönderimi | dxDateBox | | ✓ | |
|
||
| `CompletedDate` | Tamamlanma | dxDateBox | | ✓ | |
|
||
|
||
#### Ekip Hedefleri — `App.Hr.TeamPerformanceGoal`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TeamPerformanceGoal.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TeamPerformanceGoal` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ekip Hedefleri — yöneticinin, ekibindeki çalışanın hedefleri üzerindeki görünümü. |
|
||
| Kaynak | `Hr_T_PerformanceGoal` · filtre `"IsDeleted" = 'false' AND "ReviewId" IN (SELECT "Id" FROM "Hr_T_PerformanceReview" WHERE "ManagerId" = '@USERID')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertBefore: `Hr_S_PerformanceGuard` · InsertAfter: `Hr_S_PerformanceReviewRecalc` · UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteBefore: `Hr_S_PerformanceGuard` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | GoalType=KPI, Direction=Increasing, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `GoalType` | Tür | dxRadioGroup | ✓ | ✓ | liste: KPI, OKR |
|
||
| `Title` | Hedef | dxTextBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `Direction` | Yön | dxSelectBox | ✓ | ✓ | liste: Increasing, Decreasing · script |
|
||
| `Unit` | Birim | dxTextBox | | ✓ | |
|
||
| `TargetValue` | Hedef Değer | dxNumberBox | ✓ | ✓ | script |
|
||
| `Weight` | Ağırlık % | dxNumberBox | ✓ | ✓ | |
|
||
| `ActualValue` | Gerçekleşen | dxNumberBox | | ✓ | script |
|
||
| `AchievementRate` | Gerçekleşme % | dxNumberBox | | ✓ | |
|
||
| `SelfComment` | Öz Yorum | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Ekip Yetkinlikleri — `App.Hr.TeamPerformanceCompetency`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TeamPerformanceCompetency.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TeamPerformanceCompetency` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ekip Yetkinlikleri — yöneticinin yetkinlik değerlendirmesi; yönetici seviyesi yetkinlik puanını belirler. |
|
||
| Kaynak | `Hr_T_PerformanceCompetency` · filtre `"IsDeleted" = 'false' AND "ReviewId" IN (SELECT "Id" FROM "Hr_T_PerformanceReview" WHERE "ManagerId" = '@USERID')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertBefore: `Hr_S_PerformanceGuard` · InsertAfter: `Hr_S_PerformanceReviewRecalc` · UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` · DeleteBefore: `Hr_S_PerformanceGuard` · DeleteAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
| Form varsayılanları | IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Skill |
|
||
| `ExpectedLevelId` | Beklenen Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `SelfLevelId` | Öz Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `ManagerLevelId` | Yönetici Seviyesi | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `Score` | Puan | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `SelfComment` | Öz Yorum | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
|
||
#### Ekip Gelişim Planı — `App.Hr.TeamDevelopmentPlan`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TeamDevelopmentPlan.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TeamDevelopmentPlan` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ekip Gelişim Planı — yöneticinin ekibindeki çalışan için planladığı gelişim aksiyonları. |
|
||
| Kaynak | `Hr_T_DevelopmentPlan` · filtre `"IsDeleted" = 'false' AND "ReviewId" IN (SELECT "Id" FROM "Hr_T_PerformanceReview" WHERE "ManagerId" = '@USERID')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | InsertBefore: `Hr_S_PerformanceGuard` · InsertAfter: `Hr_S_DevelopmentPlanSync` · UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_DevelopmentPlanSync` · DeleteBefore: `Hr_S_PerformanceGuard` |
|
||
| Form varsayılanları | ActionType=Training, Status=Planned, Progress=0, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `EmployeeId` | Çalışan | dxTextBox | | | |
|
||
| `ReviewId` | Değerlendirme | dxTextBox | | | |
|
||
| `Title` | Aksiyon | dxTextBox | ✓ | ✓ | |
|
||
| `ActionType` | Aksiyon Türü | dxSelectBox | ✓ | ✓ | liste: Training, Mentoring, Project, Reading, Certificate, Other |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | | ✓ | sorgu: Hr_T_Skill |
|
||
| `TrainingId` | Eğitim | dxSelectBox | | ✓ | sorgu: Hr_T_Training |
|
||
| `CertificateId` | Sertifika | dxSelectBox | | ✓ | sorgu: Hr_T_Certificate |
|
||
| `MentorId` | Mentor | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `StartDate` | Başlangıç Tarihi | dxDateBox | | ✓ | |
|
||
| `DueDate` | Bitiş Tarihi | dxDateBox | | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: Planned, InProgress, Completed, Cancelled |
|
||
| `Progress` | İlerleme % | dxNumberBox | | ✓ | |
|
||
| `EmployeeNote` | Çalışan Notu | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### Ekibimin Değerlendirmeleri — `App.Hr.TeamPerformanceReview`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_TeamPerformanceReview.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.TeamPerformanceReview` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ekibimin Değerlendirmeleri — kullanıcının yönetici olarak atandığı çalışanların değerlendirmeleri. |
|
||
| Kaynak | `Hr_T_PerformanceReview` · filtre `"IsDeleted" = 'false' AND "ManagerId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Todo (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.TeamPerformanceGoal` (Id → ReviewId), `App.Hr.TeamPerformanceCompetency` (Id → ReviewId), `App.Hr.TeamDevelopmentPlan` (Id → ReviewId, EmployeeId → EmployeeId) |
|
||
| Todo | başlık `EmployeeName`, durum `Status` (GoalSetting,SelfReview,ManagerReview,Calibration,Completed) |
|
||
| Komutlar | UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewAfterSave` |
|
||
| Form varsayılanları | Status=GoalSetting, IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `PeriodId` | Dönem | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_PerformancePeriod |
|
||
| `EmployeeId` | Çalışan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `EmployeeName` | Çalışan Adı | dxTextBox | | | |
|
||
| `ManagerId` | Yönetici | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `Status` | Durum | dxSelectBox | ✓ | ✓ | liste: GoalSetting, SelfReview, ManagerReview, Calibration, Completed |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
| `GoalScore` | Hedef Puanı | dxNumberBox | | ✓ | |
|
||
| `CompetencyScore` | Yetkinlik Puanı | dxNumberBox | | ✓ | |
|
||
| `Feedback360Score` | 360 Ortalaması | dxNumberBox | | ✓ | |
|
||
| `OverallScore` | Genel Puan | dxNumberBox | | ✓ | |
|
||
| `CalibratedScore` | Kalibre Puan | dxNumberBox | | ✓ | |
|
||
| `RatingId` | Derece | dxSelectBox | | ✓ | sorgu: Hr_T_PerformanceRating |
|
||
| `SelfComment` | Öz Değerlendirme Yorumu | dxTextArea | | ✓ | |
|
||
| `ManagerComment` | Yönetici Yorumu | dxTextArea | | ✓ | |
|
||
| `CalibrationNote` | Kalibrasyon Notu | dxTextArea | | ✓ | |
|
||
| `SelfSubmittedDate` | Öz Değerlendirme Gönderimi | dxDateBox | | ✓ | |
|
||
| `ManagerSubmittedDate` | Yönetici Değerlendirmesi Gönderimi | dxDateBox | | ✓ | |
|
||
| `CompletedDate` | Tamamlanma | dxDateBox | | ✓ | |
|
||
|
||
#### Yetkinlik Puanları — `App.Hr.My360FeedbackScore`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_My360FeedbackScore.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.My360FeedbackScore` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Yetkinlik Puanları — 360 değerlendiricisinin kendi talebinde her yetkinliğe verdiği seviye. |
|
||
| Kaynak | `Hr_T_PerformanceFeedbackScore` · filtre `"IsDeleted" = 'false' AND "FeedbackId" IN (SELECT "Id" FROM "Hr_T_PerformanceFeedback" WHERE "ReviewerId" = '@USERID')` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Komutlar | UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `FeedbackId` | Geri Bildirim | dxTextBox | | | |
|
||
| `SkillId` | Yetkinlik | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Skill |
|
||
| `LevelId` | Seviye | dxSelectBox | | ✓ | sorgu: Hr_T_SkillLevel (← SkillId) |
|
||
| `Comment` | Yorum | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
#### 360 Taleplerim — `App.Hr.My360Feedback`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_My360Feedback.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.My360Feedback` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | 360 Taleplerim — kullanıcıya değerlendirici olarak atanan 360 derece değerlendirme talepleri. |
|
||
| Kaynak | `Hr_T_PerformanceFeedback` · filtre `"IsDeleted" = 'false' AND "ReviewerId" = '@USERID'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✗ · düzenle ✓ · sil ✗ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.My360FeedbackScore` (Id → FeedbackId) |
|
||
| Komutlar | UpdateBefore: `Hr_S_PerformanceGuard` · UpdateAfter: `Hr_S_PerformanceReviewRecalc` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ReviewId` | Değerlendirme | dxSelectBox | | | sorgu: Hr_T_PerformanceReview |
|
||
| `ReviewerId` | Değerlendirici | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `Relation` | İlişki | dxSelectBox | ✓ | ✓ | liste: Peer, Subordinate, Superior, InternalCustomer |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Pending, Submitted |
|
||
| `Score` | Puan | dxNumberBox | | ✓ | |
|
||
| `SubmittedDate` | Gönderim Tarihi | dxDateBox | | ✓ | |
|
||
| `Comment` | Yorum | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
|
||
|
||
### Disiplin Dosyaları (`App.Hr.DisciplinaryCase`)
|
||
|
||
#### Disiplin Dosyaları — `App.Hr.DisciplinaryCase`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DisciplinaryCase.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr` › `App.Hr.DisciplinaryCase` (sıra 10) |
|
||
| Yetki | `App.Hr.DisciplinaryCase` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Disiplin Dosyaları — bir personel hakkındaki olay tutanağı ile başlayan disiplin süreci: savunma, karar ve belgeler tek dosyada. |
|
||
| Kaynak | `Hr_T_DisciplinaryCase` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart, Todo (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.DisciplinaryDefense` (Id → CaseId), `App.Hr.DisciplinaryDecision` (Id → CaseId), `App.Hr.DisciplinaryFile` (Id → CaseId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.DisciplinaryCase.Widget.Open`, `App.Hr.DisciplinaryCase.Widget.AwaitingDefense`, `App.Hr.DisciplinaryCase.Widget.Closed` |
|
||
| Todo | başlık `Subject`, durum `Status` (Open,AwaitingDefense,Decided,Closed) |
|
||
| Komutlar | InsertAfter: SQL |
|
||
| Form varsayılanları | IncidentDate=@DATE, ReportedById=@USERID, Status=Open, BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `CaseNo` | Dosya No | dxTextBox | | | |
|
||
| `BranchId` | Tesis Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `UserId` | Personel | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers · script |
|
||
| `DepartmentId` | Departman | dxSelectBox | | ✓ | sorgu: Hr_T_Department |
|
||
| `JobPositionId` | Pozisyon | dxSelectBox | | ✓ | sorgu: Hr_T_JobPosition |
|
||
| `IncidentDate` | Olay Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `IncidentTime` | Olay Saati | dxDateBox | | ✓ | |
|
||
| `IncidentPlace` | Olay Yeri | dxTextBox | | ✓ | |
|
||
| `ReportedById` | Tutanağı Tutan | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Open, AwaitingDefense, Decided, Closed |
|
||
| `Subject` | Konu | dxTextBox | ✓ | ✓ | |
|
||
| `IncidentDescription` | Olay Tutanağı | dxHtmlEditor | ✓ | ✓ | |
|
||
| `WitnessUserIds` | Tanıklar | dxTagBox | | ✓ | sorgu: AbpUsers |
|
||
|
||
#### Ceza Türleri — `App.Hr.DisciplinaryPenaltyType`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DisciplinaryPenaltyType.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Definitions` › `App.Hr.DisciplinaryPenaltyType` (sıra 17) |
|
||
| Yetki | `App.Hr.DisciplinaryPenaltyType` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ceza Türleri — disiplin kararlarında verilebilecek cezalar ve ağırlıkları (sözlü uyarı, yazılı uyarı, ihtar, kınama, ücret kesintisi, fesih). |
|
||
| Kaynak | `Hr_T_DisciplinaryPenaltyType` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Form varsayılanları | Severity=1, IsActive=true |
|
||
| Veri aynası | `data/App.Hr.DisciplinaryPenaltyType.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Ad | dxTextBox | ✓ | ✓ | |
|
||
| `Severity` | Ağırlık | dxNumberBox | ✓ | ✓ | |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Savunmalar — `App.Hr.DisciplinaryDefense`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DisciplinaryDefense.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.DisciplinaryDefense` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Savunmalar — disiplin dosyası için personelden istenen savunma ve verilen cevap. |
|
||
| Kaynak | `Hr_T_DisciplinaryDefense` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Form varsayılanları | RequestDate=@DATE, Status=Requested |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `CaseId` | Disiplin Dosyası | dxTextBox | | | |
|
||
| `RequestDate` | Talep Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `DueDate` | Son Savunma Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `ResponseDate` | Savunma Tarihi | dxDateBox | | ✓ | |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Requested, Submitted, NotSubmitted |
|
||
| `DefenseText` | Savunma Metni | dxHtmlEditor | | ✓ | |
|
||
|
||
#### Kararlar — `App.Hr.DisciplinaryDecision`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DisciplinaryDecision.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.DisciplinaryDecision` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Kararlar — disiplin dosyası için verilen karar ve ceza. |
|
||
| Kaynak | `Hr_T_DisciplinaryDecision` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Form varsayılanları | DecisionDate=@DATE, Status=Draft |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `CaseId` | Disiplin Dosyası | dxTextBox | | | |
|
||
| `DecisionDate` | Karar Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `PenaltyTypeId` | Ceza Türü | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_DisciplinaryPenaltyType |
|
||
| `EffectiveDate` | Yürürlük Tarihi | dxDateBox | | ✓ | |
|
||
| `NotificationDate` | Tebliğ Tarihi | dxDateBox | | ✓ | |
|
||
| `DeductionAmount` | Kesinti Tutarı | dxNumberBox | | ✓ | |
|
||
| `Status` | Durum | dxRadioGroup | ✓ | ✓ | liste: Draft, Final |
|
||
| `DecisionText` | Karar Metni | dxHtmlEditor | | ✓ | |
|
||
|
||
#### Belgeler — `App.Hr.DisciplinaryFile`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DisciplinaryFile.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.DisciplinaryFile` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Disiplin Belgeleri — dosyaya ait imzalı tutanak, savunma, tebliğ gibi belgeler. |
|
||
| Kaynak | `Hr_T_DisciplinaryFile` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Form varsayılanları | FileDate=@DATE |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `CaseId` | Disiplin Dosyası | dxTextBox | | | |
|
||
| `DocumentTypeId` | Dosya Türü | dxSelectBox | | ✓ | sorgu: Hr_T_DocumentType |
|
||
| `FileDate` | Tarih | dxDateBox | ✓ | ✓ | |
|
||
| `FileName` | Dosya Adı | dxTextBox | ✓ | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | ✓ | ✓ | |
|
||
|
||
### Araçlar (`App.Hr.Vehicles`)
|
||
|
||
#### Araç Belgeleri — `App.Hr.VehicleDocument`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleDocument.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.VehicleDocument` (sıra 1) |
|
||
| Yetki | `App.Hr.VehicleDocument` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Araç Belgeleri — araç ve şoför kayıtlarında kullanılan belge tanımları (ruhsat, sigorta, muayene, MTV, OGS/HGS, ehliyet, psikoteknik, ceza ve kaza belgeleri). |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleDocument` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true |
|
||
| Veri aynası | `data/App.Hr.VehicleDocument.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `DocumentGroup` | Belge Grubu | dxSelectBox | ✓ | ✓ | liste: Vehicle, Driver |
|
||
| `DocumentType` | Belge Tipi | dxSelectBox | ✓ | ✓ | liste: Insurance, Document, Tax, Toll, Inspection, Maintenance, Penalty, Accident |
|
||
| `Name` | Belge Adı | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Masraf Tanımlama — `App.Hr.VehicleExpenseDefinition`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleExpenseDefinition.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.VehicleExpenseDefinition` (sıra 2) |
|
||
| Yetki | `App.Hr.VehicleExpenseDefinition` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Masraf Tanımlama — araç masraf kalemleri (sigorta, vergi, bakım, muayene, geçiş, ceza, yakıt…). |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleExpenseDefinition` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true |
|
||
| Veri aynası | `data/App.Hr.VehicleExpenseDefinition.json` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `ExpenseType` | Masraf Tipi | dxTextBox | ✓ | ✓ | |
|
||
| `Name` | Masraf Adı | dxTextBox | ✓ | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Gidilecek Yerler — `App.Hr.VehicleDestination`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleDestination.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.VehicleDestination` (sıra 3) |
|
||
| Yetki | `App.Hr.VehicleDestination` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Gidilecek Yerler — araçlarla gidilen tanımlı yerler ve uzaklıkları. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleDestination` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Active`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `Name` | Gidilecek Yerin Adı | dxTextBox | ✓ | ✓ | |
|
||
| `Distance` | Uzaklığı (km) | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
|
||
#### Araçlar — `App.Hr.Vehicle`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Vehicle.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.Vehicle` (sıra 4) |
|
||
| Yetki | `App.Hr.Vehicle` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Araçlar — şubeye ait şirket araçları, anlık durumu (şirkette/dışarıda), güncel km'si ve muayene/sigorta tarihleri. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_Vehicle` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.VehicleFile` (Id → VehicleId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Vehicle.Widget.Arrived`, `App.Hr.Vehicle.Widget.Left`, `App.Widget.Passive` |
|
||
| Form varsayılanları | IsActive=true, BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `BranchId` | Tesis Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
| `Name` | Araç Adı | dxTextBox | ✓ | ✓ | |
|
||
| `Brand` | Markası | dxTextBox | | ✓ | |
|
||
| `Model` | Modeli | dxTextBox | | ✓ | |
|
||
| `BodyType` | Cinsi | dxTextBox | | ✓ | |
|
||
| `UsagePlace` | Kullanıldığı Yer | dxTextBox | | ✓ | |
|
||
| `RegistrationDate` | Tescil Tarihi | dxDateBox | | ✓ | |
|
||
| `PlateNumber` | Plakası | dxTextBox | ✓ | ✓ | |
|
||
| `Status` | Durumu | dxSelectBox | | ✓ | liste: Arrived, Left |
|
||
| `CurrentKm` | Araç Km'si | dxNumberBox | | ✓ | |
|
||
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
|
||
| `InspectionStart` | Muayene Başlangıç | dxDateBox | | ✓ | |
|
||
| `InspectionEnd` | Muayene Bitiş | dxDateBox | | ✓ | |
|
||
| `InsuranceStart` | Sigorta Başlangıç | dxDateBox | | ✓ | |
|
||
| `InsuranceEnd` | Sigorta Bitiş | dxDateBox | | ✓ | |
|
||
| `EmissionStart` | Egzoz Muayene Başlangıç | dxDateBox | | ✓ | |
|
||
| `EmissionEnd` | Egzoz Muayene Bitiş | dxDateBox | | ✓ | |
|
||
| `TachographStart` | Takograf Kalib. Başlangıç | dxDateBox | | ✓ | |
|
||
| `TachographEnd` | Takograf Kalib. Bitiş | dxDateBox | | ✓ | |
|
||
|
||
#### Şoför Tanımlama — `App.Hr.Driver`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Driver.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.Driver` (sıra 5) |
|
||
| Yetki | `App.Hr.Driver` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Şoför Tanımlama — şirket araçlarını kullanan personel, zimmetli araçları ve sürüş geçmişi. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_Driver` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.DriverDocument` (Id → DriverId), `App.Hr.DriverPenalty` (Id → DriverId), `App.Hr.DriverAccident` (Id → DriverId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Driver.Widget.WithVehicle`, `App.Hr.Driver.Widget.TotalKm` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `UserId` | Sicil No / Adı Soyadı | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `Vehicle1Id` | Zimmetli Araç 1 | dxSelectBox | | ✓ | sorgu: Hr_T_Vehicle |
|
||
| `Vehicle2Id` | Zimmetli Araç 2 | dxSelectBox | | ✓ | sorgu: Hr_T_Vehicle |
|
||
| `Vehicle3Id` | Zimmetli Araç 3 | dxSelectBox | | ✓ | sorgu: Hr_T_Vehicle |
|
||
| `Vehicle4Id` | Zimmetli Araç 4 | dxSelectBox | | ✓ | sorgu: Hr_T_Vehicle |
|
||
| `Vehicle5Id` | Zimmetli Araç 5 | dxSelectBox | | ✓ | sorgu: Hr_T_Vehicle |
|
||
| `TotalKm` | Yapılan KM | dxNumberBox | | ✓ | |
|
||
|
||
#### Araç Giriş-Çıkış Takip — `App.Hr.VehicleMovement`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleMovement.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.VehicleMovement` (sıra 6) |
|
||
| Yetki | `App.Hr.VehicleMovement` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Araç Giriş-Çıkış Takip — güvenliğin tuttuğu araç hareket defteri: araç şirketten ne zaman, kimle, hangi km ile çıktı, ne zaman döndü. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleMovement` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Hr.Vehicle.Widget.Left`, `App.Widget.Today` |
|
||
| Komutlar | InsertAfter: SQL · DeleteAfter: SQL |
|
||
| Form varsayılanları | EntryKm=0, BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `MovementNo` | Hareket No | dxNumberBox | | | |
|
||
| `ExitDate` | Çıkış Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `BranchId` | Çıkış Şube | dxSelectBox | | ✓ | sorgu: Sas_T_Branch |
|
||
| `ExitTime` | Çıkış Saati | dxTextBox | ✓ | ✓ | script |
|
||
| `ExitKm` | Çıkış Km | dxNumberBox | ✓ | ✓ | script |
|
||
| `SenderUserId` | Gönderen Personel | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `SecurityUserId` | Güvenlik Personeli | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `DriverUserId` | Kullanan Personel | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `VehicleId` | Araç Adı / Plaka | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Vehicle · script |
|
||
| `DestinationId` | Gidilen Yer | dxSelectBox | | ✓ | sorgu: Hr_T_VehicleDestination |
|
||
| `Reason` | Gidiş Sebebi | dxTextBox | | ✓ | |
|
||
| `Location` | Konum | dxTextBox | | ✓ | |
|
||
| `EntrySecurityUserId` | Giriş Yapan Güvenlik Per. | dxSelectBox | | ✓ | sorgu: AbpUsers |
|
||
| `EntryDate` | Giriş Tarihi | dxDateBox | | ✓ | script |
|
||
| `EntryBranchId` | Giriş Şube | dxSelectBox | | ✓ | sorgu: Sas_T_Branch |
|
||
| `EntryTime` | Giriş Saati | dxTextBox | | ✓ | script |
|
||
| `EntryKm` | Giriş Km | dxNumberBox | | ✓ | script |
|
||
| `TravelledKm` | Yapılan Km | dxNumberBox | | ✓ | |
|
||
| `Status` | Durum | dxSelectBox | | ✓ | liste: Arrived, Left |
|
||
| `DurationMinutes` | Gezinti Süresi / Dk | dxNumberBox | | ✓ | |
|
||
| `ExpectedKm` | Olması Gereken Km | dxNumberBox | | ✓ | |
|
||
|
||
#### Masraf Girişleri — `App.Hr.VehicleExpense`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleExpense.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr.Vehicles` › `App.Hr.VehicleExpense` (sıra 7) |
|
||
| Yetki | `App.Hr.VehicleExpense` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Masraf Girişleri — araç için gelen her fatura/fiş: başlık bilgileri ve kalemleri. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleExpense` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Alt formlar | `App.Hr.VehicleExpenseLine` (Id → VehicleExpenseId) |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Today`, `App.Widget.TotalRevenue` |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `VehicleId` | Araç Adı | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_Vehicle |
|
||
| `InvoiceNo` | Fatura No | dxTextBox | ✓ | ✓ | |
|
||
| `InvoiceDate` | Fatura Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `DestinationId` | Firma Adı | dxSelectBox | | ✓ | sorgu: Hr_T_VehicleDestination |
|
||
| `VehicleDocumentId` | Belge Adı | dxSelectBox | | ✓ | sorgu: Hr_T_VehicleDocument |
|
||
| `FileName` | Dosya Adı | dxTextBox | | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | | ✓ | |
|
||
|
||
#### Araç Belgeleri — `App.Hr.VehicleFile`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleFile.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.VehicleFile` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Araç Dosyaları — araca yüklenen belgeler (ruhsat, poliçe, muayene raporu…). |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleFile` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `VehicleId` | Araç | dxSelectBox | | | sorgu: Hr_T_Vehicle |
|
||
| `VehicleDocumentId` | Belge Adı | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_VehicleDocument |
|
||
| `FileName` | Dosya Adı | dxTextBox | ✓ | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | ✓ | ✓ | |
|
||
|
||
#### Şoför Belgeleri — `App.Hr.DriverDocument`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DriverDocument.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.DriverDocument` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Şoför Belgeleri — şoföre ait belgeler (sürücü belgesi, psikoteknik, SRC…). |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_DriverDocument` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `DriverId` | Şoför | dxSelectBox | | | sorgu: Hr_T_Driver |
|
||
| `VehicleDocumentId` | Belge Adı | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_VehicleDocument |
|
||
| `FileName` | Dosya Adı | dxTextBox | ✓ | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | ✓ | ✓ | |
|
||
|
||
#### Ceza Belgeleri — `App.Hr.DriverPenalty`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DriverPenalty.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.DriverPenalty` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Şoför Cezaları — şoföre kesilen trafik cezaları. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_DriverPenalty` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `DriverId` | Şoför | dxSelectBox | | | sorgu: Hr_T_Driver |
|
||
| `PenaltyDate` | Ceza Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `Amount` | Tutarı | dxNumberBox | | ✓ | |
|
||
| `Description` | Ceza Açıklama | dxTextBox | | ✓ | |
|
||
| `VehicleDocumentId` | Belge Adı | dxSelectBox | | ✓ | sorgu: Hr_T_VehicleDocument |
|
||
| `FileName` | Dosya Adı | dxTextBox | | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | | ✓ | |
|
||
|
||
#### Kaza Belgeleri — `App.Hr.DriverAccident`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_DriverAccident.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.DriverAccident` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Şoför Kazaları — şoförün karıştığı trafik kazaları ve belgeleri. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_DriverAccident` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `DriverId` | Şoför | dxSelectBox | | | sorgu: Hr_T_Driver |
|
||
| `AccidentDate` | Kaza Tarihi | dxDateBox | ✓ | ✓ | |
|
||
| `VehicleDocumentId` | Belge Adı | dxSelectBox | | ✓ | sorgu: Hr_T_VehicleDocument |
|
||
| `Description` | Kaza Açıklama | dxTextBox | | ✓ | |
|
||
| `FileName` | Dosya Adı | dxTextBox | | ✓ | |
|
||
| `FileContent` | Dosya | dxImageUpload | | ✓ | |
|
||
|
||
#### Masraf Kalemleri — `App.Hr.VehicleExpenseLine`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_VehicleExpenseLine.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | Menüsüz (alt form) |
|
||
| Yetki | `App.Hr.VehicleExpenseLine` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Masraf Kalemleri — bir masraf faturasının satırları. |
|
||
| Geliştirme talebi | Human Resources -> Araçlar |
|
||
| Kaynak | `Hr_T_VehicleExpenseLine` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `VehicleExpenseId` | Masraf Girişi | dxTextBox | | | |
|
||
| `ExpenseDefinitionId` | Masraf Adı | dxSelectBox | ✓ | ✓ | sorgu: Hr_T_VehicleExpenseDefinition |
|
||
| `DetailName` | Masraf Detay Adı | dxTextBox | | ✓ | |
|
||
| `Quantity` | Miktar | dxNumberBox | ✓ | ✓ | script |
|
||
| `Amount` | Tutarı | dxNumberBox | ✓ | ✓ | script |
|
||
| `DiscountRate` | İskonto Oranı (%) | dxNumberBox | ✓ | ✓ | script |
|
||
| `NetAmount` | Net Tutar | dxNumberBox | ✓ | ✓ | |
|
||
| `Description` | Masraf Açıklama | dxTextBox | | ✓ | |
|
||
|
||
### Ziyaretçiler (`App.Hr.Visitor`)
|
||
|
||
#### Ziyaretçiler — `App.Hr.Visitor`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_Visitor.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr` › `App.Hr.Visitor` (sıra 12) |
|
||
| Yetki | `App.Hr.Visitor` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Ziyaretçiler — güvenlik/resepsiyonun tuttuğu ziyaretçi giriş-çıkış defteri. |
|
||
| Geliştirme talebi | Human Resources -> Ziyaretçi Takip Listesi |
|
||
| Kaynak | `Hr_T_Visitor` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Hr.Visitor.Widget.Today`, `App.Hr.Visitor.Widget.Inside`, `App.Hr.Visitor.Widget.Exited` |
|
||
| Form varsayılanları | BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `VisitDate` | Ziyaret Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `VisitorType` | Ziyaretçi Tipi | dxSelectBox | ✓ | ✓ | liste: Ziyaretçi, Müşteri, Tedarikçi, Taşeron, Kurye · script |
|
||
| `EntryTime` | Giriş Saati | dxDateBox | ✓ | ✓ | script |
|
||
| `ExitTime` | Çıkış Saati | dxDateBox | | ✓ | |
|
||
| `CardNo` | Kart No | dxTextBox | | ✓ | |
|
||
| `VisitedUserId` | Ziyaret Edilen Personel | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `VisitorFullName` | Ziyaretçi Adı Soyadı | dxTextBox | ✓ | ✓ | |
|
||
| `CompanyName` | Firma Adı | dxAutocomplete | | ✓ | sorgu: Hr_T_Visitor |
|
||
| `VisitReason` | Ziyaret Sebebi | dxTextArea | | ✓ | |
|
||
| `BranchId` | Şube Adı | dxSelectBox | ✓ | ✓ | sorgu: Sas_T_Branch |
|
||
|
||
### Olay Günlüğü (`App.Hr.EventLog`)
|
||
|
||
#### Olay Günlüğü — `App.Hr.EventLog`
|
||
|
||
| Özellik | Değer |
|
||
| --- | --- |
|
||
| Wizard | `wizard/Hr_EventLog.json` |
|
||
| Yol | Liste (Wizard) |
|
||
| Menü | `App.Hr` › `App.Hr.EventLog` (sıra 13) |
|
||
| Yetki | `App.Hr.EventLog` + `.Create`, `.Update`, `.Delete`, `.Export`, `.Import`, `.Note` |
|
||
| Açıklama | Olay Günlüğü — vardiya amiri, güvenlik odası ve gözlem odasının vardiya sırasında kaydettiği önemli olaylar. |
|
||
| Geliştirme talebi | Human Resources -> Olay Günlüğü |
|
||
| Kaynak | `Hr_T_EventLog` · filtre `"IsDeleted" = 'false'` |
|
||
| Görünümler | Grid, Card, Pivot, Chart (açılış grid) |
|
||
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
|
||
| Kapsam | Kiracı |
|
||
| Widget'lar | `App.Widget.Total`, `App.Widget.Today`, `App.Hr.EventLog.Widget.Important` |
|
||
| Form varsayılanları | BranchId= |
|
||
|
||
| Alan | Başlık | Editör | Zorunlu | Formda | Kaynak |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `LogSource` | Kaynak | dxSelectBox | ✓ | ✓ | liste: ShiftSupervisor, SecurityRoom, ObservationRoom |
|
||
| `BranchId` | Şube Adı | dxSelectBox | | ✓ | sorgu: Sas_T_Branch |
|
||
| `UserId` | Vardiya Amiri / Olayı Yaşayan | dxSelectBox | ✓ | ✓ | sorgu: AbpUsers |
|
||
| `EventDate` | Olay Tarihi | dxDateBox | ✓ | ✓ | script |
|
||
| `EventTime` | Olay Saati | dxTextBox | ✓ | ✓ | |
|
||
| `Importance` | Önem Durumu | dxSelectBox | ✓ | ✓ | liste: 1, 2, 3, 4, 5 |
|
||
| `ShiftId` | Vardiya | dxSelectBox | | ✓ | sorgu: Hr_T_Shift |
|
||
| `Description` | Açıklama | dxTextArea | | ✓ | |
|
||
|
||
<!-- module-doc:auto:end -->
|