2026-10-04 15:04:16 +00:00
# İK › Eğitimler (`App.Hr.Trainings`)
Ş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ı mlar'da değil **Eğitimler** dalı nı n içindedir; 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
`İnsan Kaynakları › Eğitimler` (`App.Hr.Trainings`, ikon `FcGraduationCap` )
| Sı ra | Menü (TR / EN) | `ListFormCode` | Alt formlar | Görünümler | Widget'lar |
| --- | --- | --- | --- | --- | --- |
| 1 | Eğitim Tipleri / Training Types | `App.Hr.TrainingType` | — | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
| 2 | Eğitim Konuları / Training Subjects | `App.Hr.TrainingSubject` | — | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
| 3 | 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.Trainings` ara yetkisinin
altı nda üç ekranı n kökü + `.Create/.Update/.Delete/.Export/.Import/.Note` ; `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.Trainings` dalı nı n tamamı |
| 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ı |
2026-10-04 21:18:13 +00:00
| 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 (`HrPersonnel.md`) |
2026-10-04 15:04:16 +00:00
| `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) |
2026-10-04 21:18:13 +00:00
| 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. `HrPerformance.md` ) |
| 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 (`HrAttendance.md` §7.1) |
2026-10-04 15:04:16 +00:00
---
## 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/host/sql/object/Hr_T_{TrainingType,TrainingSubject,Training,TrainingParticipant,TrainingFile}.sql` | Tablolar |
| `configs/seeds/host/wizard/{TrainingType,TrainingSubject,Training,TrainingParticipant,TrainingFile}.json` | 5 wizard |
| `configs/seeds/host/data/App.Hr.{TrainingType,TrainingSubject}.json` | Tanı m verisi |
| `configs/seeds/host/data/App.Reports.ReportTemplates.json` | Katı lı m Belgesi şablonu |
| `configs/seeds/host/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: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.
### Eğitim Tipleri — `App.Hr.TrainingType`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/TrainingType.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Hr.Trainings` › `App.Hr.TrainingType` (sı ra 1) |
| 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/TrainingSubject.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Hr.Trainings` › `App.Hr.TrainingSubject` (sı ra 2) |
| 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 |
### Eğitimler — `App.Hr.Training`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Training.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Hr.Trainings` › `App.Hr.Training` (sı ra 3) |
| 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` |
2026-10-04 21:18:13 +00:00
| Komutlar | UpdateAfter: `Hr_S_TrainingSync` · DeleteAfter: `Hr_S_TrainingSync` |
2026-10-04 15:04:16 +00:00
| 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 | | ✓ | |
### Katı lı mcı lar — `App.Hr.TrainingParticipant`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/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ı |
2026-10-04 21:18:13 +00:00
| Komutlar | InsertAfter: `Hr_S_TrainingSync` · UpdateAfter: `Hr_S_TrainingSync` · DeleteAfter: `Hr_S_TrainingSync` |
2026-10-04 15:04:16 +00:00
| 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/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 | ✓ | ✓ | |
<!-- module - doc:auto:end -->