sozsoft-platform/configs/seeds/host/docs/modules/HrRecruitment.md
2026-10-04 18:04:16 +03:00

34 KiB
Raw Blame History

İK › İşe Alım (App.Hr.Recruitment)

Kadro talebinden işe alıma kadar uçtan uca süreç: onaylı kadro talebi → iş ilanı → aday havuzu (CV, KVKK açık rızası) → başvuru (aşama panosu) → mülakat (takvim, kriter ağırlıklı puan) → teklif (iç onay, teklif mektubu). Tamamı konfigürasyondur (Wizard + SQL + rapor şablonu); entity, migration ya da React kodu yoktur.

Bu doküman modülün tek "nasıl çalışır" kaynağıdır. Modülde yapılan her değişiklik aynı commit'te buraya yansır (lowcode.instructions.md §0.13).


1. Amaç ve kapsam

Persona Ne yapar Ekran
Talep eden yönetici Kadro talebi açar, onaya gönderir Kadro Talepleri
Onaycı Kadro talebini ve teklifi onaylar / reddeder Kadro Talepleri · Teklifler (Grid Workflow butonları)
İK / işe alım uzmanı İlan açar, aday ve başvuruları yönetir, mülakat planlar, teklif hazırlar, aday kaydını personele bağlar İlanlar · Adaylar · Başvurular · Mülakatlar · Teklifler
Mülakatçı Kendisine atanan mülakatta kriter bazlı puan verir Mülakatlar (+ bildirim)
İK yöneticisi Aday kaynağı, ret sebebi, değerlendirme kriteri tanımlarını yönetir İK › Tanımlar

Kapsam: kiracı (IsTenant). Şube, kayıtta veri olarak tutulur (satır süzmesi yoktur).


2. Analiz ve kararlar

Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Aşağıdaki kararlar üretilen artefaktlardan (wizard, SQL, seed, commit 16fd5df0 "İşe Alım modülü") okunmuştur.

Konu Karar
Yol Her adım ayrı Wizard ekranı; ilan ve aday ekranlarında başvuru alt formu, başvuruda mülakat ve teklif alt formu
Kadro talebi ve teklif onayı Grid Workflow (WorkflowDto): Start → Approval (Onay Bekliyor) → Inform → End Onaylandı / Reddedildi. Onaycı düğümün Approver değeridir (seed'de platform admin e-postası); motor onaycıyı kayıttaki alandan okumaz — ListForm › Workflow sekmesinden değiştirilir
İlan kaynağı İlan yalnızca onaylı (ApprovalStatus = 'Onaylandı') kadro talebinden açılır; şube/departman/pozisyon/adet/çalışma şekli talepten copy ile dolar
Aday kimliği E-posta kiracı içinde tekildir (filtreli unique index)
KVKK Açık rıza zorunlu: formda zorunlu alan + tabloda CHECK (KvkkConsent = 1); rıza tarihi/yöntemi/imzalı belge saklanır; satır butonu KVKK Açık Rıza Formu raporunu açar
Başvuru Aday × ilan çifti tekildir; aşama Todo (kanban) panosunda yönetilir
Aşama ilerlemesi Mülakat eklenince Interview, teklif eklenince Offer, teklif Accepted olunca Hired — SQL ile, geri gitmez
Mülakat puanı Kriter başına 1–5; OverallScore = Σ(puan × kriter ağırlığı) / Σ ağırlık; başvurunun AverageScore'u mülakatların ortalaması
Mülakatçı bildirimi Mülakat eklenince mülakatçıya IseAlimMulakatAtandi bildirimi (kanallar UiActivity + Mail)
Belge numaraları KT-YYYY-00001 (talep), ILN-… (ilan), TKL-… (teklif) — insert sonrası SQL, kiracı + yıl bazında
Personele dönüşüm İşe alınan adayın kullanıcı (personel) kaydını BT elle açar; İK aday kaydını UserId ile o kullanıcıya bağlar (otomatik kullanıcı açılmaz)
Kanban başlığı CandidateName / PostingTitle başvuruya metin olarak kopyalanır (Todo başlığı metin kolon ister)

3. Menü ve ekranlar

İnsan Kaynakları › İşe Alım (App.Hr.Recruitment, ikon FcManager)

Sıra Menü (TR / EN) ListFormCode Alt formlar Görünümler Widget'lar
1 Kadro Talepleri / Staff Requests App.Hr.StaffRequest — Grid, Card, Pivot, Chart Toplam · Onay Bekliyor · Onaylanan · Onaylı kadro adedi (Σ Headcount)
2 İlanlar / Job Postings App.Hr.JobPosting JobApplication (Id → JobPostingId) Grid, Card, Pivot, Chart Toplam · Yayında · Taslak · Kapalı
3 Adaylar / Candidates App.Hr.Candidate JobApplication (Id → CandidateId) Grid, Card, Pivot, Chart Toplam · Aktif · Pasif · Personele Dönüşen
4 Başvurular / Applications App.Hr.JobApplication Interview, JobOffer (Id → ApplicationId) Grid, Card, Pivot, Chart, Todo — (alt form olarak da kullanıldığı için yok)
5 Mülakatlar / Interviews App.Hr.Interview InterviewScore (Id → InterviewId, menüsüz) Grid, Card, Pivot, Chart, Scheduler —
6 Teklifler / Job Offers App.Hr.JobOffer — Grid, Card, Pivot, Chart —

Tanımlar İnsan Kaynakları › Tanımlar (App.Hr.Definitions) altında, verileri seed dosyasıyla aynalı:

Menü ListFormCode Seed
Aday Kaynakları App.Hr.CandidateSource 7 kayıt: LinkedIn, Kariyer.net, Yenibiris, Şirket Web Sitesi, Referans, Kariyer Fuarı, Doğrudan Başvuru
Ret Sebepleri App.Hr.RejectionReason 8 kayıt; RejectedBy = Company / Candidate
Değerlendirme Kriterleri App.Hr.EvaluationCriterion 6 kayıt (ağırlıklı): İletişim 1, Teknik Yetkinlik 2, Problem Çözme 1.5, Takım Çalışması 1, Motivasyon 1, Kurum Kültürüne Uyum 1

Satır butonları (DynamicReport, Raporlar kategorisi):

Ekran Buton Rapor şablonu Görünürlük
Adaylar KVKK Açık Rıza Formu 475c1ab4-4600-5ef2-a43e-1366ed89b0ed Her satır
Teklifler Teklif Mektubu 80d38666-423d-5e1d-8766-01f2c46be768 ApprovalStatus === 'Onaylandı'

4. Veri modeli

Hr_T_StaffRequest ──< Hr_T_JobPosting ──< Hr_T_JobApplication >── Hr_T_Candidate ──> AbpUsers (UserId, personel)
                                               │
                                               ├──< Hr_T_Interview ──< Hr_T_InterviewScore >── Hr_T_EvaluationCriterion
                                               └──< Hr_T_JobOffer
Tablo Önemli kolonlar Kural
Hr_T_StaffRequest RequestNo, RequestDate, RequestedById, BranchId → DepartmentId → JobPositionId (cascade), Headcount, EmploymentType, ExpectedStartDate, Reason (NewPosition/Replacement), ReplacedUserId, ücret aralığı + CurrencyId, Qualifications (HTML), onay alanları Reason ≠ Replacement ise ReplacedUserId temizlenir (script)
Hr_T_JobPosting PostingNo, StaffRequestId, Title, Status (Draft/Published/Closed/Cancelled), şube/departman/pozisyon, Headcount, EmploymentType, WorkModel (Office/Hybrid/Remote), Location, PublishDate, ClosingDate, SourceIds (yayın kanalları, çok değerli), açıklama/nitelikler (HTML) Başlık boşsa pozisyon adı kopyalanır
Hr_T_Candidate Kişisel bilgiler, fotoğraf, ülke → şehir, eğitim (EducationLevel, okul, bölüm, mezuniyet), deneyim, ücret beklentisi, SourceId, SkillIds (Hr_T_Skill, çok değerli), CvDocument, UserId, KVKK alanları UX (TenantId, Email); CHECK (KvkkConsent = 1)
Hr_T_JobApplication CandidateId, JobPostingId, CandidateName, PostingTitle, ApplicationDate, SourceId, OwnerUserId, AverageScore, Stage, RejectionReasonId, RejectionNote, SortOrder UX (TenantId, CandidateId, JobPostingId); aşama Rejected değilse ret sebebi/notu temizlenir
Hr_T_Interview ApplicationId, Title, InterviewType (Phone/Video/FaceToFace/Technical/Hr), InterviewerUserId, StartDate, EndDate, Location, MeetingUrl, Status (Planned/Completed/Cancelled/NoShow), Recommendation (Hire/Hold/Reject), OverallScore Bitiş boşsa başlangıç + 1 saat (script)
Hr_T_InterviewScore InterviewId, CriterionId, Score, Comment CHECK (Score BETWEEN 1 AND 5); UX (InterviewId, CriterionId)
Hr_T_JobOffer OfferNo, ApplicationId, CandidateName, OfferDate, ValidUntil, StartDate, GrossSalary + CurrencyId, Status (Draft/Sent/Accepted/Declined/Expired), ResponseDate, pozisyon bilgileri, BenefitCodes (Hr_T_BenefitType), onay alanları CHECK (GrossSalary >= 0); durum Accepted/Declined olunca yanıt tarihi bugün (script)

5. İş kuralları ve hesaplar

5.1 Başvuru aşamaları

Applied → Screening → Interview → Offer → Hired
                                       └──→ Rejected (her aşamadan, elle)
Tetik Etki (after-command SQL)
Mülakat eklendi Başvuru Applied/Screening ise → Interview
Teklif eklendi Başvuru Applied/Screening/Interview ise → Offer; teklif zaten Accepted ise → Hired
Teklif güncellendi (Accepted) Başvuru henüz Hired değilse → Hired
Elle Panodan sürükleme ya da formdan her aşama seçilebilir

Otomatik ilerleme yalnızca ileri gider; geri almak elle yapılır.

5.2 Puanlar

  • Interview.OverallScore = Σ(Score × Criterion.Weight) / Σ Weight (silinmemiş puanlar).
  • JobApplication.AverageScore = AVG(Interview.OverallScore) (puanı olan mülakatlar).
  • Puan eklenince, güncellenince ya da silinince ikisi de yeniden hesaplanır.

5.3 Metin kopyaları

CandidateName, PostingTitle (başvuru), Title (mülakat = aday – ilan), CandidateName (teklif) after-command ile yazılır. Aday, ilan ya da başvuru güncellendiğinde tüm değişmiş kopyalar topluca düzeltilir (sorgu @Id ile değil fark koşuluyla çalışır).

5.4 Numaratörler

KT-, ILN-, TKL- + yıl + 5 hane; kiracı ve yıl bazında MAX + 1. Numara yalnızca boşsa yazılır.

5.5 Onay akışı (Kadro Talebi, Teklif)

Grid Workflow; durum ApprovalStatus, onaylayan ApprovalUser, tarih ApprovalDate, açıklama ApprovalDescription. Onay/Ret butonlarını akış kendisi çizer. Onaycı düğümde sabittir (system@sozsoft.com seed değeri) — gerçek onaycı ListForm › Workflow'dan girilmelidir.


6. Yetki ve görünürlük

İzin grubu App.Hr, modül Sas|Hr. Yetki ağacı menüyü izler: App.Hr.Recruitment ara yetkisinin altında her ekranın kökü + .Create/.Update/.Delete/.Export/.Import/.Note; App.Hr.InterviewScore mülakat yetkisinin altındadır. Tanımlar App.Hr.Definitions altındadır. Satır süzmesi yoktur — ekran yetkisi olan tüm kayıtları görür. Hiçbir yetki role otomatik atanmaz.

Önerilen dağıtım:

Rol Yetkiler
Talep eden yöneticiler App.Hr.StaffRequest (+ .Create/.Update)
Mülakatçılar App.Hr.Interview (+ .Update), App.Hr.InterviewScore (+ .Create/.Update/.Delete)
İşe alım uzmanı App.Hr.Recruitment dalının tamamı + üç tanım ekranı
Onaycı Onaylayacağı ekranın kökü + .Update

KVKK: aday verisi kişisel veridir; Adaylar ekranının yetkisi yalnızca işe alım ekibine verilmelidir.


7. Entegrasyonlar

Kaynak Kullanım
Sas_T_Branch, Hr_T_Department, Hr_T_JobPosition Şube → departman → pozisyon cascade (talep, ilan, teklif)
Sas_H_Currency Ücret para birimi (varsayılan TRY)
Sas_H_Country, Sas_H_City Aday adresi (ülke → şehir cascade)
Hr_T_Skill / Hr_T_SkillType Aday yetkinlikleri (SkillIds)
Hr_T_BenefitType Teklifteki yan haklar (BenefitCodes)
AbpUsers Talep eden, ayrılan personel, sorumlu, mülakatçı, personele dönüşen aday
Bildirimler Tip IseAlimMulakatAtandi; kurallar Custom + UiActivity/Mail; metin App.Hr.Interview.Notification.{Subject,Message}, yer tutucular [Candidate], [Posting], [Date]
Raporlar KVKK Açık Rıza Formu, Teklif Mektubu (DynamicReport)

8. Akış örneği

  1. Satış müdürü Kadro Talepleri'nde "Satış Temsilcisi, 2 kişi, yeni pozisyon" talebini açar → KT-2026-00001; onaya gönderir, onaycı onaylar → Onaylandı.
  2. İK İlanlar'da talebi seçer; şube/departman/pozisyon/adet dolar, başlık pozisyon adı olur; yayın kanallarını (LinkedIn, Kariyer.net) seçip durumu Published yapar → ILN-2026-00001.
  3. Gelen adaylar Adaylar'a CV ve KVKK rızasıyla girilir; KVKK formu satır butonundan basılır.
  4. İlanın Başvurular sekmesinden aday eklenir (Applied); kanban panosunda Screening'e çekilir.
  5. Başvurunun Mülakatlar sekmesinden teknik mülakat planlanır → başvuru Interview olur, mülakatçıya bildirim gider; mülakatçı kriterleri puanlar → genel ve ortalama puan hesaplanır.
  6. Teklifler'de teklif hazırlanır → başvuru Offer; teklif onaya gider, onaylanınca Teklif Mektubu basılır.
  7. Aday kabul eder, teklif Accepted yapılır → başvuru Hired. BT kullanıcıyı açar, İK aday kaydının Personel alanına bağlar ("Personele Dönüşen" kartı artar).

9. Sık sorulanlar

İlan açarken kadro talebi listede yok. Yalnızca onaylanmış (ApprovalStatus = 'Onaylandı') talepler listelenir.

Onay butonu kimde görünüyor? Akış düğümündeki Approver'da (seed'de admin). ListForm › Workflow'dan gerçek onaycıyı yazın.

Başvuru aşaması geri gitmedi. Otomatik ilerleme yalnız ileri gider; geri almayı panodan ya da formdan elle yapın.

Ret sebebi alanı temizlendi. Ret sebebi ve notu yalnızca Rejected aşamasında tutulur.

Aday kaydı kaydedilmiyor. KVKK rızası işaretli olmalı (tablo da zorlar) ve e-posta kiracıda tekil olmalı.

Aynı aday aynı ilana ikinci kez eklenemiyor. Aday × ilan tekildir.

Mülakat puanı nasıl hesaplanıyor? Kriter ağırlıklı ortalama (§5.2); ağırlıklar İK › Tanımlar › Değerlendirme Kriterleri'nden.

İşe alınan aday otomatik personel olmuyor mu? Hayır; kullanıcıyı BT açar, İK aday kaydına bağlar.


10. Dosyalar ve geri alma

Dosya İçerik
configs/seeds/host/sql/object/Hr_T_{StaffRequest,JobPosting,Candidate,JobApplication,Interview,InterviewScore,JobOffer,CandidateSource,RejectionReason,EvaluationCriterion}.sql Tablolar, CHECK ve tekil indeksler
configs/seeds/host/wizard/{StaffRequest,JobPosting,Candidate,JobApplication,Interview,InterviewScore,JobOffer,CandidateSource,RejectionReason,EvaluationCriterion}.json 10 wizard
configs/seeds/host/data/App.Hr.{CandidateSource,RejectionReason,EvaluationCriterion}.json Tanım verisi
configs/seeds/host/data/App.Reports.ReportTemplates.json KVKK formu ve teklif mektubu şablonları
configs/seeds/host/data/App.Notifications.Notification{Types,Rules}.json IseAlimMulakatAtandi tipi ve 2 kuralı
configs/seeds/host/data/App.Menus.Menu.json, Abp.Identity.Permissions.json, App.Languages.LanguageText.json Menü, yetki, dil satırları

Kurulum: DB Migrate. Geri alma: Wizard Manager'dan wizard'lar silinir (alt formlar önce: InterviewScore → Interview/JobOffer → JobApplication → diğerleri); tablolar yalnızca onayda seçilirse düşer. Rapor şablonları ve bildirim satırları elle kaldırılır.

Ek — Ekran envanteri (otomatik)

Wizard dosyalarından üretilir; deploy, silme, tasarımcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.

Kadro Talepleri — App.Hr.StaffRequest

Özellik Değer
Wizard wizard/StaffRequest.json
Yol Liste (Wizard)
Menü App.Hr.Recruitment › App.Hr.StaffRequest (sıra 1)
Yetki App.Hr.StaffRequest + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Kadro Talepleri — bir departmanın yeni ya da boşalan bir pozisyon için personel istemesi ve bu isteğin onay süreci. İşe alım sürecinin ilk adımıdır; ilan yalnızca onaylanmış talepten açılır.
Kaynak Hr_T_StaffRequest · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Widget'lar App.Widget.Total, App.Widget.Pending, App.Hr.StaffRequest.Widget.Approved, App.Hr.StaffRequest.Widget.Headcount
Komutlar InsertAfter: SQL
Form varsayılanları IsActive=true, RequestDate=@DATE, RequestedById=@USERID, Headcount=1, EmploymentType=FullTime, Reason=NewPosition, CurrencyId=TRY
Onay akışı Start 'Onaya Gönderildi' → Approval 'Onay Bekliyor' → Inform 'Onay Bilgisi' → Inform 'Ret Bilgisi' → End 'Onaylandı' → End 'Reddedildi'
Alan Başlık Editör Zorunlu Formda Kaynak
RequestNo Talep No dxTextBox ✓
RequestDate Talep Tarihi dxDateBox ✓ ✓
RequestedById Talep Eden dxSelectBox ✓ sorgu: AbpUsers
BranchId Şube Adı dxSelectBox ✓ ✓ sorgu: Sas_T_Branch
DepartmentId Departman dxSelectBox ✓ ✓ sorgu: Hr_T_Department (← BranchId)
JobPositionId İş Pozisyonu dxSelectBox ✓ ✓ sorgu: Hr_T_JobPosition (← DepartmentId)
Headcount Kadro Adedi dxNumberBox ✓ ✓
EmploymentType Çalışma Şekli dxSelectBox ✓ ✓ liste: FullTime, PartTime, Contract, Intern, Seasonal
ExpectedStartDate Beklenen Başlangıç dxDateBox ✓
Reason Talep Nedeni dxRadioGroup ✓ ✓ liste: NewPosition, Replacement · script
ReplacedUserId Ayrılan Personel dxSelectBox ✓ sorgu: AbpUsers
IsActive Aktif dxCheckBox ✓
MinSalary Asgari Ücret dxNumberBox ✓
MaxSalary Azami Ücret dxNumberBox ✓
CurrencyId Para Birimi dxSelectBox ✓ sorgu: Sas_H_Currency
Qualifications Aranan Nitelikler dxHtmlEditor ✓
Description Açıklama dxTextArea ✓
ApprovalStatus Onay Durumu dxTextBox ✓
ApprovalUser Onaylayan dxTextBox ✓
ApprovalDate Onay Tarihi dxDateBox ✓
ApprovalDescription Onay Açıklaması dxTextArea ✓

İlanlar — App.Hr.JobPosting

Özellik Değer
Wizard wizard/JobPosting.json
Yol Liste (Wizard)
Menü App.Hr.Recruitment › App.Hr.JobPosting (sıra 2)
Yetki App.Hr.JobPosting + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama İlanlar — onaylanmış kadro taleplerinden açılan iş ilanları ve ilana gelen başvurular.
Kaynak Hr_T_JobPosting · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Alt formlar App.Hr.JobApplication (Id → JobPostingId)
Widget'lar App.Widget.Total, App.Widget.Published, App.Widget.Draft, App.Hr.JobPosting.Widget.Closed
Komutlar InsertAfter: SQL · UpdateAfter: SQL
Form varsayılanları IsActive=true, Status=Draft, Headcount=1, EmploymentType=FullTime, WorkModel=Office, PublishDate=@DATE
Alan Başlık Editör Zorunlu Formda Kaynak
PostingNo İlan No dxTextBox ✓
StaffRequestId Kadro Talebi dxSelectBox ✓ sorgu: Hr_T_StaffRequest · script
Title İlan Başlığı dxTextBox ✓ ✓
Status Durum dxSelectBox ✓ ✓ liste: Draft, Published, Closed, Cancelled
BranchId Şube Adı dxSelectBox ✓ ✓ sorgu: Sas_T_Branch
DepartmentId Departman dxSelectBox ✓ ✓ sorgu: Hr_T_Department (← BranchId)
JobPositionId İş Pozisyonu dxSelectBox ✓ ✓ sorgu: Hr_T_JobPosition (← DepartmentId)
Headcount Kadro Adedi dxNumberBox ✓ ✓
EmploymentType Çalışma Şekli dxSelectBox ✓ ✓ liste: FullTime, PartTime, Contract, Intern, Seasonal
WorkModel Çalışma Modeli dxSelectBox ✓ ✓ liste: Office, Hybrid, Remote
Location Lokasyon dxTextBox ✓
PublishDate Yayın Tarihi dxDateBox ✓
ClosingDate Son Başvuru Tarihi dxDateBox ✓
SourceIds Yayın Kanalları dxTagBox ✓ sorgu: Hr_T_CandidateSource
IsActive Aktif dxCheckBox ✓
Description Açıklama dxHtmlEditor ✓
Requirements Aranan Nitelikler dxHtmlEditor ✓

Adaylar — App.Hr.Candidate

Özellik Değer
Wizard wizard/Candidate.json
Yol Liste (Wizard)
Menü App.Hr.Recruitment › App.Hr.Candidate (sıra 3)
Yetki App.Hr.Candidate + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Adaylar — CV ve KVKK açık rızası ile tutulan aday havuzu. Bir aday birden fazla ilana başvurabilir.
Kaynak Hr_T_Candidate · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Alt formlar App.Hr.JobApplication (Id → CandidateId)
Widget'lar App.Widget.Total, App.Widget.Active, App.Widget.Passive, App.Hr.Candidate.Widget.Converted
Komutlar UpdateAfter: SQL
Form varsayılanları IsActive=true, KvkkConsentDate=@NOW, KvkkConsentMethod=Written, CurrencyId=TRY
Butonlar App.Hr.Candidate.KvkkConsentForm
Alan Başlık Editör Zorunlu Formda Kaynak
Photo Fotoğraf dxImageUpload ✓
FirstName Adı dxTextBox ✓ ✓
LastName Soyadı dxTextBox ✓ ✓
Email E-posta dxTextBox ✓ ✓
PhoneNumber Telefon dxTextBox ✓
Gender Cinsiyet dxSelectBox ✓ liste: Male, Female
BirthDate Doğum Tarihi dxDateBox ✓
Country Ülke dxSelectBox ✓ sorgu: Sas_H_Country
City Şehir dxSelectBox ✓ sorgu: Sas_H_City (← Country)
Address Adres dxTextBox ✓
EducationLevel Eğitim Düzeyi dxSelectBox ✓ liste: Primary, HighSchool, Associate, Bachelor, Master, Doctorate
School Okul dxTextBox ✓
Major Bölüm dxTextBox ✓
GraduationYear Mezuniyet Yılı dxNumberBox ✓
ExperienceYears Deneyim (Yıl) dxNumberBox ✓
CurrentCompany Mevcut Firma dxTextBox ✓
CurrentTitle Mevcut Ünvan dxTextBox ✓
ExpectedSalary Ücret Beklentisi dxNumberBox ✓
CurrencyId Para Birimi dxSelectBox ✓ sorgu: Sas_H_Currency
SourceId Kaynak dxSelectBox ✓ sorgu: Hr_T_CandidateSource
LinkedInUrl LinkedIn dxTextBox ✓
UserId Personel dxSelectBox ✓ sorgu: AbpUsers
SkillIds Yetkinlikler dxTagBox ✓ sorgu: Hr_T_Skill
CvDocument CV dxImageUpload ✓
Notes Notlar dxTextBox ✓
IsActive Aktif dxCheckBox ✓
KvkkConsent Adayın KVKK kapsamında açık rızası alındı dxCheckBox ✓ ✓
KvkkConsentDate Rıza Tarihi dxDateBox ✓ ✓
KvkkConsentMethod Rıza Alma Yöntemi dxSelectBox ✓ ✓ liste: Written, Electronic, Email
KvkkConsentDocument İmzalı Rıza Belgesi dxImageUpload ✓

Başvurular — App.Hr.JobApplication

Özellik Değer
Wizard wizard/JobApplication.json
Yol Liste (Wizard)
Menü App.Hr.Recruitment › App.Hr.JobApplication (sıra 4)
Yetki App.Hr.JobApplication + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Başvurular — bir adayın bir ilana başvurusu ve başvurunun aşama takibi (kanban panosu).
Kaynak Hr_T_JobApplication · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart, Todo (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Alt formlar App.Hr.Interview (Id → ApplicationId), App.Hr.JobOffer (Id → ApplicationId)
Todo başlık CandidateName, durum Stage (Applied,Screening,Interview,Offer,Hired,Rejected)
Komutlar InsertAfter: SQL · UpdateAfter: SQL
Form varsayılanları IsActive=true, ApplicationDate=@DATE, Stage=Applied, OwnerUserId=@USERID
Alan Başlık Editör Zorunlu Formda Kaynak
CandidateId Aday dxSelectBox ✓ ✓ sorgu: Hr_T_Candidate · script
JobPostingId İlan dxSelectBox ✓ ✓ sorgu: Hr_T_JobPosting
CandidateName Aday dxTextBox
PostingTitle İlan dxTextBox
ApplicationDate Başvuru Tarihi dxDateBox ✓ ✓
SourceId Kaynak dxSelectBox ✓ sorgu: Hr_T_CandidateSource
OwnerUserId Sorumlu dxSelectBox ✓ sorgu: AbpUsers
AverageScore Ortalama Puan dxNumberBox ✓
Stage Aşama dxSelectBox ✓ ✓ liste: Applied, Screening, Interview, Offer, Hired, Rejected · script
RejectionReasonId Ret Sebebi dxSelectBox ✓ sorgu: Hr_T_RejectionReason
RejectionNote Ret Açıklaması dxTextArea ✓
SortOrder Sıralama dxNumberBox
IsActive Aktif dxCheckBox ✓
Notes Notlar dxTextArea ✓

Mülakatlar — App.Hr.Interview

Özellik Değer
Wizard wizard/Interview.json
Yol Liste (Wizard)
Menü App.Hr.Recruitment › App.Hr.Interview (sıra 5)
Yetki App.Hr.Interview + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Mülakatlar — başvuru için mülakat planlama, mülakatçı ataması ve kriter bazlı puanlama.
Kaynak Hr_T_Interview · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart, Scheduler (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Alt formlar App.Hr.InterviewScore (Id → InterviewId)
Komutlar InsertAfter: SQL · UpdateAfter: SQL · DeleteAfter: SQL
Form varsayılanları IsActive=true, InterviewType=FaceToFace, Status=Planned, InterviewerUserId=@USERID
Alan Başlık Editör Zorunlu Formda Kaynak
ApplicationId Başvuru dxSelectBox ✓ ✓ sorgu: Hr_T_JobApplication
Title Başlık dxTextBox
InterviewType Mülakat Türü dxSelectBox ✓ ✓ liste: Phone, Video, FaceToFace, Technical, Hr
InterviewerUserId Mülakatçı dxSelectBox ✓ ✓ sorgu: AbpUsers
StartDate Başlangıç dxDateBox ✓ ✓ script
EndDate Bitiş dxDateBox ✓ ✓
Location Yer dxTextBox ✓
MeetingUrl Toplantı Bağlantısı dxTextBox ✓
Status Durum dxSelectBox ✓ ✓ liste: Planned, Completed, Cancelled, NoShow
Recommendation Öneri dxSelectBox ✓ liste: Hire, Hold, Reject
OverallScore Genel Puan dxNumberBox ✓
IsActive Aktif dxCheckBox ✓
Notes Notlar dxTextArea ✓

Teklifler — App.Hr.JobOffer

Özellik Değer
Wizard wizard/JobOffer.json
Yol Liste (Wizard)
Menü App.Hr.Recruitment › App.Hr.JobOffer (sıra 6)
Yetki App.Hr.JobOffer + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Teklifler — işe alınması düşünülen adaya yapılan ücret ve şart teklifi, iç onayı ve teklif mektubu.
Kaynak Hr_T_JobOffer · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Komutlar InsertAfter: SQL · UpdateAfter: SQL
Form varsayılanları IsActive=true, OfferDate=@DATE, Status=Draft, CurrencyId=TRY, EmploymentType=FullTime, WorkModel=Office
Butonlar App.Hr.JobOffer.OfferLetter
Onay akışı Start 'Onaya Gönderildi' → Approval 'Onay Bekliyor' → Inform 'Onay Bilgisi' → Inform 'Ret Bilgisi' → End 'Onaylandı' → End 'Reddedildi'
Alan Başlık Editör Zorunlu Formda Kaynak
OfferNo Teklif No dxTextBox ✓
ApplicationId Başvuru dxSelectBox ✓ ✓ sorgu: Hr_T_JobApplication · script
CandidateName Aday dxTextBox
OfferDate Teklif Tarihi dxDateBox ✓ ✓
ValidUntil Geçerlilik Tarihi dxDateBox ✓
StartDate İşe Başlama Tarihi dxDateBox ✓
GrossSalary Brüt Maaş dxNumberBox ✓ ✓
CurrencyId Para Birimi dxSelectBox ✓ ✓ sorgu: Sas_H_Currency
Status Durum dxSelectBox ✓ ✓ liste: Draft, Sent, Accepted, Declined, Expired · script
ResponseDate Yanıt Tarihi dxDateBox ✓
BranchId Şube Adı dxSelectBox ✓ ✓ sorgu: Sas_T_Branch
DepartmentId Departman dxSelectBox ✓ ✓ sorgu: Hr_T_Department (← BranchId)
JobPositionId İş Pozisyonu dxSelectBox ✓ ✓ sorgu: Hr_T_JobPosition (← DepartmentId)
EmploymentType Çalışma Şekli dxSelectBox ✓ ✓ liste: FullTime, PartTime, Contract, Intern, Seasonal
WorkModel Çalışma Modeli dxSelectBox ✓ ✓ liste: Office, Hybrid, Remote
BenefitCodes Yan Haklar dxTagBox ✓ sorgu: Hr_T_BenefitType
Notes Notlar dxTextBox ✓
IsActive Aktif dxCheckBox ✓
ApprovalStatus Onay Durumu dxTextBox ✓
ApprovalUser Onaylayan dxTextBox ✓
ApprovalDate Onay Tarihi dxDateBox ✓
ApprovalDescription Onay Açıklaması dxTextBox ✓

Aday Kaynakları — App.Hr.CandidateSource

Özellik Değer
Wizard wizard/CandidateSource.json
Yol Liste (Wizard)
Menü App.Hr.Definitions › App.Hr.CandidateSource (sıra 13)
Yetki App.Hr.CandidateSource + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Aday Kaynakları — adayların ve ilanların hangi kanaldan geldiğini/yayınlandığını tanımlayan liste (LinkedIn, Kariyer.net, referans, kariyer fuarı…).
Kaynak Hr_T_CandidateSource · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Widget'lar App.Widget.Total, App.Widget.Active, App.Widget.Passive
Form varsayılanları IsActive=true
Veri aynası data/App.Hr.CandidateSource.json
Alan Başlık Editör Zorunlu Formda Kaynak
Name Adı dxTextBox ✓ ✓
Description Açıklama dxTextArea ✓
IsActive Aktif dxCheckBox ✓

Ret Sebepleri — App.Hr.RejectionReason

Özellik Değer
Wizard wizard/RejectionReason.json
Yol Liste (Wizard)
Menü App.Hr.Definitions › App.Hr.RejectionReason (sıra 14)
Yetki App.Hr.RejectionReason + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Ret Sebepleri — bir başvurunun şirket ya da aday tarafından neden kapatıldığını sınıflandıran liste.
Kaynak Hr_T_RejectionReason · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Widget'lar App.Widget.Total, App.Widget.Active, App.Widget.Passive
Form varsayılanları IsActive=true, RejectedBy=Company
Veri aynası data/App.Hr.RejectionReason.json
Alan Başlık Editör Zorunlu Formda Kaynak
Name Adı dxTextBox ✓ ✓
RejectedBy Reddeden dxRadioGroup ✓ ✓ liste: Company, Candidate
Description Açıklama dxTextArea ✓
IsActive Aktif dxCheckBox ✓

Değerlendirme Kriterleri — App.Hr.EvaluationCriterion

Özellik Değer
Wizard wizard/EvaluationCriterion.json
Yol Liste (Wizard)
Menü App.Hr.Definitions › App.Hr.EvaluationCriterion (sıra 15)
Yetki App.Hr.EvaluationCriterion + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Değerlendirme Kriterleri — mülakatlarda puanlanan kriterler ve ağırlıkları (iletişim, teknik yetkinlik, problem çözme…).
Kaynak Hr_T_EvaluationCriterion · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Widget'lar App.Widget.Total, App.Widget.Active, App.Widget.Passive
Form varsayılanları IsActive=true, Weight=1
Veri aynası data/App.Hr.EvaluationCriterion.json
Alan Başlık Editör Zorunlu Formda Kaynak
Name Adı dxTextBox ✓ ✓
Weight Ağırlık dxNumberBox ✓ ✓
Description Açıklama dxTextArea ✓
IsActive Aktif dxCheckBox ✓

Mülakat Puanları — App.Hr.InterviewScore

Özellik Değer
Wizard wizard/InterviewScore.json
Yol Liste (Wizard)
Menü Menüsüz (alt form)
Yetki App.Hr.InterviewScore + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Mülakat Puanları — mülakatta her değerlendirme kriterine verilen 1–5 puan.
Kaynak Hr_T_InterviewScore · filtre "IsDeleted" = 'false'
Görünümler Grid, Card, Pivot, Chart (açılış grid)
Düzenleme ekle ✓ · düzenle ✓ · sil ✓ · popup
Kapsam Kiracı
Komutlar InsertAfter: SQL · UpdateAfter: SQL · DeleteAfter: SQL
Form varsayılanları IsActive=true
Alan Başlık Editör Zorunlu Formda Kaynak
InterviewId Mülakat dxTextBox
CriterionId Kriter dxSelectBox ✓ ✓ sorgu: Hr_T_EvaluationCriterion
Score Puan dxSelectBox ✓ ✓ liste: 1, 2, 3, 4, 5
Comment Yorum dxTextArea ✓
IsActive Aktif dxCheckBox ✓