sozsoft-platform/configs/seeds/docs/modules/HrDisciplinaryCase.md
2026-10-05 15:58:59 +03:00

15 KiB
Raw Blame History

İK › Disiplin Dosyaları (App.Hr.DisciplinaryCase)

Personel disiplin süreci: olay tutanağı (personel, tarih/saat/yer, tanıklar, tutanağı tutan) → savunma talebi ve savunma → karar (ceza türü, yürürlük/tebliğ, ücret kesintisi) → belgeler. Tamamı konfigürasyondur (Wizard + SQL); 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 / disiplin kurulu sekreteryası Dosya açar, tutanağı yazar, savunma ister, savunmayı ve kararı işler, belgeleri yükler, dosyayı kapatır Disiplin Dosyaları
Yönetici (tutanağı tutan) Olayı kaydeder Disiplin Dosyaları
İK yöneticisi Ceza türü tanımlarını yönetir İK › Tanımlar › Ceza Türleri

Kapsam: kiracı (IsTenant). Satır süzmesi yoktur; disiplin kaydı hassas veridir, görünürlük yalnızca yetkiyle sınırlanır.


2. Analiz ve kararlar

Modül §0.13 kuralından önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan (wizard, SQL, seed, commit 130e23bc "Disiplin Dosyaları, Çalışma Takvimi") okunmuştur.

Konu Karar
Yol Tek menü ekranı (dosya) + üç menüsüz alt form: Savunmalar, Kararlar, Belgeler
Menü yeri Dosya ekranı doğrudan İnsan Kaynakları kökünde; ceza türü İK › Tanımlar'da
Dosya durumu Open → AwaitingDefense → Decided → Closed; elle değiştirilir (Todo panosunda sürükleyerek ya da formdan). Savunma/karar girilmesi durumu otomatik değiştirmez
Savunma süresi Son savunma tarihi = talep tarihi + 2 gün (formda önerilir, değiştirilebilir); talep tarihinden önce olamaz
Ceza türü Ağırlık (Severity 1–5) sırasıyla listelenir; karar ekranında yalnız aktif türler
Ücret kesintisi Kararda tutar olarak saklanır; bordroya aktarım yoktur
Tanıklar Çok değerli kullanıcı seçimi (WitnessUserIds, dxTagBox)
Dosya numarası DSP-YYYY-00001 (kiracı + yıl bazında, insert sonrası SQL)
Onay akışı, bildirim, rapor Yok

3. Menü ve ekranlar

Menü (TR / EN) ListFormCode Yer Alt formlar Görünümler Widget'lar
Disiplin Dosyaları / Disciplinary Cases App.Hr.DisciplinaryCase İnsan Kaynakları (sıra 10, FcHighPriority) DisciplinaryDefense, DisciplinaryDecision, DisciplinaryFile (Id → CaseId) Grid, Card, Pivot, Chart, Todo Toplam · Açık · Savunma Bekleniyor · Kapanan (Karara Bağlandı + Kapandı)
Ceza Türleri / Penalty Types App.Hr.DisciplinaryPenaltyType İnsan Kaynakları › Tanımlar — Grid, Card, Pivot, Chart — (tanım listesi)

Todo panosu: başlık Subject, açıklama IncidentDescription, tarih IncidentDate, sütun sırası Open, AwaitingDefense, Decided, Closed.

Seed verisi (data/App.Hr.DisciplinaryPenaltyType.json): Sözlü Uyarı (1), Yazılı Uyarı (2), İhtar (3), Kınama (3), Ücret Kesintisi (4), Fesih (5).


4. Veri modeli

AbpUsers ──< Hr_T_DisciplinaryCase ──< Hr_T_DisciplinaryDefense
 (UserId, ReportedById,       ├──< Hr_T_DisciplinaryDecision >── Hr_T_DisciplinaryPenaltyType
  WitnessUserIds)             └──< Hr_T_DisciplinaryFile >── Hr_T_DocumentType
Tablo Önemli kolonlar
Hr_T_DisciplinaryPenaltyType Name, Severity, Description, IsActive
Hr_T_DisciplinaryCase CaseNo, UserId, DepartmentId, JobPositionId, IncidentDate, IncidentTime, IncidentPlace, ReportedById, Status, Subject, IncidentDescription (HTML tutanak), WitnessUserIds
Hr_T_DisciplinaryDefense CaseId, RequestDate, DueDate, ResponseDate, Status (Requested/Submitted/NotSubmitted), DefenseText (HTML)
Hr_T_DisciplinaryDecision CaseId, DecisionDate, PenaltyTypeId, EffectiveDate, NotificationDate, DeductionAmount, Status (Draft/Final), DecisionText (HTML)
Hr_T_DisciplinaryFile CaseId, DocumentTypeId, FileDate, FileName, FileContent

Tablo düzeyinde CHECK ya da tekil indeks yoktur; kurallar formdadır.


5. İş kuralları ve hesaplar

Yer Kural
Dosya — yeni kayıt Olay tarihi bugün, tutanağı tutan oturumdaki kullanıcı, durum Open
Dosya — personel seçimi Departman ve pozisyon kullanıcı kaydından kopyalanır (olay anındaki hâli saklanır)
Dosya — insert sonrası CaseNo = 'DSP-' + yıl + '-' + 5 hane (kiracı + yıl içinde MAX + 1, yalnız boşsa)
Savunma — yeni kayıt Talep tarihi bugün, durum Requested, son tarih talep + 2 gün
Savunma — tarih kontrolü Son tarih talep tarihinden önceyse uyarı + değişiklik geri alınır
Karar — yeni kayıt Karar tarihi bugün, durum Draft
Belge — yeni kayıt Tarih bugün

Tavsiye edilen kullanım sırası: dosya Open → savunma istenince AwaitingDefense → karar Final olunca Decided → tebliğ ve belgeler tamamlanınca Closed. Bu sıra sistemce zorlanmaz.


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

İzin grubu App.Hr, modül Sas|Hr. App.Hr.DisciplinaryCase kökü + .Create/.Update/.Delete/.Export/.Import/.Note; DisciplinaryDefense, DisciplinaryDecision, DisciplinaryFile onun altındadır. Ceza türü App.Hr.Definitions altındadır. Satır süzmesi yoktur. Hiçbir yetki role otomatik atanmaz.

Rol Yetkiler
İK disiplin sorumlusu Dosya + üç alt form (tam) + ceza türü
Tutanak tutan yönetici App.Hr.DisciplinaryCase (+ .Create) — ancak bu yetki tüm dosyaları gösterir

Disiplin verisi kişisel ve hassas veridir; okuma yetkisi dar tutulmalıdır.


7. Entegrasyonlar

Kaynak Kullanım
AbpUsers Personel, tutanağı tutan, tanıklar
Kullanıcı detayı › Disiplin Disiplin Dosyaları ekranı çalışana süzülmüş açılır (HrPersonnel.md)
Hr_T_Department, Hr_T_JobPosition Olay anındaki birim (Pivot kırılımı)
Hr_T_DocumentType Belge türü (ortak İK tanımı)

Bildirim, onay akışı, rapor şablonu ya da bordro bağlantısı yoktur.


8. Akış örneği

  1. Vardiya amiri Disiplin Dosyaları'nda yeni dosya açar: personel seçilir (departman/pozisyon dolar), olay tarihi/saati/yeri, konu, tutanak metni ve tanıklar girilir → DSP-2026-00001, durum Açık.
  2. İK Savunmalar sekmesine savunma talebi ekler; son tarih 2 gün sonrası önerilir; dosya panoda Savunma Bekleniyor'a çekilir.
  3. Personel savunmasını verince talep Savunma Verildi yapılır, metin ve tarih girilir; verilmezse Savunma Verilmedi.
  4. Kurul kararı Kararlar sekmesine girilir: ceza türü Yazılı Uyarı, yürürlük ve tebliğ tarihi, durum Kesinleşti; dosya Karara Bağlandı.
  5. İmzalı tutanak, savunma ve tebliğ belgesi Belgeler sekmesine yüklenir; dosya Kapandı yapılır.

9. Sık sorulanlar

Savunma/karar girdim, dosya durumu değişmedi. Durum elle yönetilir; panoda sürükleyin ya da formdan seçin.

Son savunma tarihi neden 2 gün sonrası? Formdaki varsayılan öneridir; değiştirilebilir, yalnızca talep tarihinden önce olamaz.

Ücret kesintisi bordroya yansıyor mu? Hayır; karar kaydında bilgi olarak durur.

Tutanak metni listede görünmüyor. HTML alan listede gizlidir; detayda ve Todo kartında görünür.

Bir yöneticinin yalnız kendi tuttuğu dosyaları görmesi mümkün mü? Şu an değil (satır süzmesi yok). Gerekirse ayrı bir persona ekranı DefaultFilter ("ReportedById" = '@USERID') ile açılır (Performans modülündeki kalıp).


10. Dosyalar ve geri alma

Dosya İçerik
configs/seeds/sql/object/Hr_T_Disciplinary{PenaltyType,Case,Defense,Decision,File}.sql Tablolar
configs/seeds/wizard/Disciplinary{PenaltyType,Case,Defense,Decision,File}.json 5 wizard
configs/seeds/data/App.Hr.DisciplinaryPenaltyType.json Ceza türleri
configs/seeds/data/App.Menus.Menu.json, Abp.Identity.Permissions.json, App.Languages.LanguageText.json Menü, yetki, dil satırları

Kurulum: DB Migrate. Geri alma: Wizard Manager'dan alt formlar (DisciplinaryDefense, DisciplinaryDecision, DisciplinaryFile) önce, sonra DisciplinaryCase ve DisciplinaryPenaltyType silinir; tablolar yalnızca onayda seçilirse düşer.

Ek — Ekran envanteri (otomatik)

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

Disiplin Dosyaları — App.Hr.DisciplinaryCase

Özellik Değer
Wizard wizard/DisciplinaryCase.json
Yol Liste (Wizard)
Menü App.Hr › App.Hr.DisciplinaryCase (sıra 10)
Yetki App.Hr.DisciplinaryCase + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Disiplin Dosyaları — bir personel hakkındaki olay tutanağı ile başlayan disiplin süreci: savunma, karar ve belgeler tek dosyada.
Kaynak Hr_T_DisciplinaryCase · 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.DisciplinaryDefense (Id → CaseId), App.Hr.DisciplinaryDecision (Id → CaseId), App.Hr.DisciplinaryFile (Id → CaseId)
Widget'lar App.Widget.Total, App.Hr.DisciplinaryCase.Widget.Open, App.Hr.DisciplinaryCase.Widget.AwaitingDefense, App.Hr.DisciplinaryCase.Widget.Closed
Todo başlık Subject, durum Status (Open,AwaitingDefense,Decided,Closed)
Komutlar InsertAfter: SQL
Form varsayılanları IncidentDate=@DATE, ReportedById=@USERID, Status=Open
Alan Başlık Editör Zorunlu Formda Kaynak
CaseNo Dosya No dxTextBox
UserId Personel dxSelectBox ✓ ✓ sorgu: AbpUsers · script
DepartmentId Departman dxSelectBox ✓ sorgu: Hr_T_Department
JobPositionId Pozisyon dxSelectBox ✓ sorgu: Hr_T_JobPosition
IncidentDate Olay Tarihi dxDateBox ✓ ✓
IncidentTime Olay Saati dxDateBox ✓
IncidentPlace Olay Yeri dxTextBox ✓
ReportedById Tutanağı Tutan dxSelectBox ✓ sorgu: AbpUsers
Status Durum dxRadioGroup ✓ ✓ liste: Open, AwaitingDefense, Decided, Closed
Subject Konu dxTextBox ✓ ✓
IncidentDescription Olay Tutanağı dxHtmlEditor ✓ ✓
WitnessUserIds Tanıklar dxTagBox ✓ sorgu: AbpUsers

Ceza Türleri — App.Hr.DisciplinaryPenaltyType

Özellik Değer
Wizard wizard/DisciplinaryPenaltyType.json
Yol Liste (Wizard)
Menü App.Hr.Definitions › App.Hr.DisciplinaryPenaltyType (sıra 17)
Yetki App.Hr.DisciplinaryPenaltyType + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Ceza Türleri — disiplin kararlarında verilebilecek cezalar ve ağırlıkları (sözlü uyarı, yazılı uyarı, ihtar, kınama, ücret kesintisi, fesih).
Kaynak Hr_T_DisciplinaryPenaltyType · 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ı Severity=1, IsActive=true
Veri aynası data/App.Hr.DisciplinaryPenaltyType.json
Alan Başlık Editör Zorunlu Formda Kaynak
Name Ad dxTextBox ✓ ✓
Severity Ağırlık dxNumberBox ✓ ✓
Description Açıklama dxTextArea ✓
IsActive Aktif dxCheckBox ✓ ✓

Savunmalar — App.Hr.DisciplinaryDefense

Özellik Değer
Wizard wizard/DisciplinaryDefense.json
Yol Liste (Wizard)
Menü Menüsüz (alt form)
Yetki App.Hr.DisciplinaryDefense + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Savunmalar — disiplin dosyası için personelden istenen savunma ve verilen cevap.
Kaynak Hr_T_DisciplinaryDefense · 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ı RequestDate=@DATE, Status=Requested
Alan Başlık Editör Zorunlu Formda Kaynak
CaseId Disiplin Dosyası dxTextBox
RequestDate Talep Tarihi dxDateBox ✓ ✓ script
DueDate Son Savunma Tarihi dxDateBox ✓ ✓ script
ResponseDate Savunma Tarihi dxDateBox ✓
Status Durum dxRadioGroup ✓ ✓ liste: Requested, Submitted, NotSubmitted
DefenseText Savunma Metni dxHtmlEditor ✓

Kararlar — App.Hr.DisciplinaryDecision

Özellik Değer
Wizard wizard/DisciplinaryDecision.json
Yol Liste (Wizard)
Menü Menüsüz (alt form)
Yetki App.Hr.DisciplinaryDecision + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Kararlar — disiplin dosyası için verilen karar ve ceza.
Kaynak Hr_T_DisciplinaryDecision · 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ı DecisionDate=@DATE, Status=Draft
Alan Başlık Editör Zorunlu Formda Kaynak
CaseId Disiplin Dosyası dxTextBox
DecisionDate Karar Tarihi dxDateBox ✓ ✓
PenaltyTypeId Ceza Türü dxSelectBox ✓ ✓ sorgu: Hr_T_DisciplinaryPenaltyType
EffectiveDate Yürürlük Tarihi dxDateBox ✓
NotificationDate Tebliğ Tarihi dxDateBox ✓
DeductionAmount Kesinti Tutarı dxNumberBox ✓
Status Durum dxRadioGroup ✓ ✓ liste: Draft, Final
DecisionText Karar Metni dxHtmlEditor ✓

Belgeler — App.Hr.DisciplinaryFile

Özellik Değer
Wizard wizard/DisciplinaryFile.json
Yol Liste (Wizard)
Menü Menüsüz (alt form)
Yetki App.Hr.DisciplinaryFile + .Create, .Update, .Delete, .Export, .Import, .Note
Açıklama Disiplin Belgeleri — dosyaya ait imzalı tutanak, savunma, tebliğ gibi belgeler.
Kaynak Hr_T_DisciplinaryFile · 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ı FileDate=@DATE
Alan Başlık Editör Zorunlu Formda Kaynak
CaseId Disiplin Dosyası dxTextBox
DocumentTypeId Dosya Türü dxSelectBox ✓ sorgu: Hr_T_DocumentType
FileDate Tarih dxDateBox ✓ ✓
FileName Dosya Adı dxTextBox ✓ ✓
FileContent Dosya dxImageUpload ✓ ✓