# İ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. ## 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 | | ✓ | | | `Description` | Açıklama | dxTextBox | | ✓ | | ### 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 | | ✓ | |