sozsoft-platform/configs/seeds/host/docs/modules/HrPerformance.md

1061 lines
68 KiB
Markdown
Raw Normal View History

2026-10-04 15:04:16 +00:00
<!-- module-doc: claims=App.Hr.PerformanceRating -->
# İK › 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 |
| 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` | `PerformancePeriod.json` | `PerformancePeriodSkill` | Grid, Card, Pivot, Chart |
| 2 | Tüm Değerlendirmeler / All Reviews | `App.Hr.PerformanceReview` | `PerformanceReview.json` | `PerformanceGoal`, `PerformanceCompetency`, `PerformanceFeedback` (→ `PerformanceFeedbackScore`), `ReviewDevelopmentPlan` | Grid, Card, Pivot, Chart, Todo |
| 3 | Kalibrasyon / Calibration | `App.Hr.PerformanceCalibration` | `PerformanceCalibration.json` | — | Grid, Card, Pivot, Chart |
| 4 | Gelişim Planları / Development Plans | `App.Hr.DevelopmentPlan` | `DevelopmentPlan.json` | — | Grid, Card, Pivot, Chart, Todo, Scheduler |
| — | Performans Dereceleri (İK › Tanımlar) | `App.Hr.PerformanceRating` | `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` | `MyPerformanceReview.json` | `EmployeeId = @USERID` | `MyPerformanceGoal`, `MyPerformanceCompetency`, `MyDevelopmentPlan` | Grid, Card, Pivot, Chart, Todo |
| Ekibimin Değerlendirmeleri / Team Reviews | `App.Hr.TeamPerformanceReview` | `TeamPerformanceReview.json` | `ManagerId = @USERID` | `TeamPerformanceGoal`, `TeamPerformanceCompetency`, `TeamDevelopmentPlan` | Grid, Card, Pivot, Chart, Todo |
| 360 Taleplerim / My 360 Requests | `App.Hr.My360Feedback` | `My360Feedback.json` | `ReviewerId = @USERID` | `My360FeedbackScore` | Grid, Card, Pivot, Chart |
| Gelişim Planım / My Development Plan | `App.Hr.MyDevelopmentPlan` | `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` | `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ı |
| `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
(`HrOrganization.md` §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/host/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/host/sql/object/Hr_S_Performance{Notify,ReviewRecalc,PeriodActivate,Guard,ReviewAfterSave,FeedbackOpen}.sql`, `Hr_S_DevelopmentPlanSync.sql` | Prosedürler |
| `configs/seeds/host/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/host/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/host/data/App.DeveloperKit.IntranetWidgets.json` | `my-performance`, `team-performance`, `my-360-feedback` pano kayıtları |
| `configs/seeds/host/data/App.Hr.PerformanceRating.json` | 5 kademeli derece ölçeği |
| `configs/seeds/host/data/App.Menus.Menu.json`, `Abp.Identity.Permissions.json`, `App.Languages.LanguageText.json` | Menü, yetki, dil satırları (wizard'lara ait) |
| `configs/seeds/host/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: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.
### Değerlendirme Dönemleri — `App.Hr.PerformancePeriod`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/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 | | ✓ | |
2026-10-04 19:17:16 +00:00
| `Description` | Açıklama | dxTextBox | | ✓ | |
2026-10-04 15:04:16 +00:00
### Tüm Değerlendirmeler — `App.Hr.PerformanceReview`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/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 |
| 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 | | ✓ | |
### Kalibrasyon — `App.Hr.PerformanceCalibration`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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 | | ✓ | |
<!-- module-doc:auto:end -->