2026-10-04 15:04:16 +00:00
<!-- module - doc: claims=App.Hr.CandidateSource, App.Hr.RejectionReason, App.Hr.EvaluationCriterion -->
# İ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.
<!-- module - doc:auto:begin -->
## Ek — Ekran envanteri (otomatik)
> Wizard dosyaları ndan üretilir; deploy, silme, tasarı mcı kaydı ve import'ta yenilenir. Elle düzenleme bir sonraki yenilemede kaybolur.
### 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 | | ✓ | |
2026-10-04 21:18:13 +00:00
### Aday Kaynakları — `App.Hr.CandidateSource`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/CandidateSource.json` |
| Yol | Liste (Wizard) |
| Menü | `App.Hr.Definitions` › `App.Hr.CandidateSource` (sı ra 6) |
| Yetki | `App.Hr.CandidateSource` + `.Create` , `.Update` , `.Delete` , `.Export` , `.Import` , `.Note` |
| Açı klama | Aday Kaynakları — adayları n ve ilanları n hangi kanaldan geldiğini/yayı nlandı ğı nı tanı mlayan liste (LinkedIn, Kariyer.net, referans, kariyer fuarı …). |
| Kaynak | `Hr_T_CandidateSource` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart (açı lı ş grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total` , `App.Widget.Active` , `App.Widget.Passive` |
| Form varsayı lanları | IsActive=true |
| Veri aynası | `data/App.Hr.CandidateSource.json` |
| Alan | Başlı k | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
| `Description` | Açı klama | dxTextArea | | ✓ | |
| `IsActive` | Aktif | dxCheckBox | | ✓ | |
2026-10-04 15:04:16 +00:00
### 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 | | ✓ | |
### Ret Sebepleri — `App.Hr.RejectionReason`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/RejectionReason.json` |
| Yol | Liste (Wizard) |
2026-10-04 21:18:13 +00:00
| Menü | `App.Hr.Definitions` › `App.Hr.RejectionReason` (sı ra 7) |
2026-10-04 15:04:16 +00:00
| 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) |
2026-10-04 21:18:13 +00:00
| Menü | `App.Hr.Definitions` › `App.Hr.EvaluationCriterion` (sı ra 8) |
2026-10-04 15:04:16 +00:00
| 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 | | ✓ | |
<!-- module - doc:auto:end -->