2026-10-04 15:04:16 +00:00
<!-- module - doc: claims=App.Hr.Shift -->
# İK › Çalı şma Takvimi ve Vardiyalar (`App.Hr.WorkCalendar`, `App.Hr.Shift`)
Çalı şma zamanı nı n iki temel tanı mı : resmi tatil / yarı m gün takvimi (yı llı k tekrarlı ya da tek
seferlik) ve vardiya tanı mları (saat aralı ğı , mola, gece vardiyası ). Diğer modüller bu tanı mları
lookup olarak kullanı r. Tamamı konfigürasyondur (Wizard + seed); vardiya ayrı ca kullanı cı kaydı na
bağlanı r.
> 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 | Yı lı n tatil ve yarı m günlerini girer, takvim görünümünden kontrol eder | Çalı şma Takvimi |
| İK / üretim planlama | Vardiya tanı mları nı yönetir, çalı şanı vardiyaya bağlar | Vardiyalar · Kimlik › Kullanı cı lar |
Kapsam: kiracı (`IsTenant`). Şube kı rı lı mı yoktur — takvim kiracı nı n tamamı için geçerlidir.
---
## 2. Analiz ve kararlar
> Modüller §0.13 kuralı ndan önce üretildi; keşif turu kaydı yoktur. Kararlar artefaktlardan
> (wizard, seed, commit `130e23bc` "Disiplin Dosyaları , Çalı şma Takvimi") okunmuştur.
| Konu | Karar |
| --- | --- |
| Tatil tekrarı | Sabit tarihli resmi tatiller `RecurrenceRule = FREQ=YEARLY` ile **bir kez** girilir, her yı l tekrarlar; dini bayramlar ay takvimine bağlı olduğu için **her yı l ayrı ** satı rdı r (tekrar kuralı boş) |
| Gün türü | `Holiday` (tam gün tatil) / `HalfDay` (arife, yarı m gün) |
| Görünüm | Liste görünümlerine ek olarak **Scheduler** (takvim) görünümü; `AllDay` her zaman `true` |
| Vardiya saatleri | `StartTime` / `EndTime` `SS:dd` metin; çalı şma süresi elle girilir (otomatik hesap yok) |
| Gece vardiyası | Bayrak (`IsNightShift`) — sağlı k kartı ndaki "gece çalı şabilir" sonucuyla birlikte değerlendirilir, otomatik kontrol yoktur |
| Vardiya bağı | Kullanı cı kaydı nda `ShiftId` alanı (`LookupQueryValues.TenantShiftValues`: "Ad (başlangı ç-bitiş)") |
2026-10-04 21:18:13 +00:00
| Menü yeri | Çalı şma Takvimi `İnsan Kaynakları ` kökünde; Vardiyalar bir tanı m olduğu için `İnsan Kaynakları › Tanı mlamalar` altı nda (yetkisi de `App.Hr.Definitions` 'ı n altı ndadı r) |
2026-10-04 15:04:16 +00:00
---
## 3. Menü ve ekranlar
| Menü (TR / EN) | `ListFormCode` | Yer | Görünümler | Widget'lar |
| --- | --- | --- | --- | --- |
2026-10-04 21:18:13 +00:00
| Çalı şma Takvimi / Work Calendar | `App.Hr.WorkCalendar` | `İnsan Kaynakları ` (sı ra 4, `FcCalendar` ) | Grid, Card, Pivot, Chart, **Scheduler** | Toplam · Tatil · Yarı m Gün |
| Vardiyalar / Shifts | `App.Hr.Shift` | `İnsan Kaynakları › Tanı mlar` (sı ra 11, `FcClock` ) | Grid, Card, Pivot, Chart | Toplam · Aktif · Pasif |
2026-10-04 15:04:16 +00:00
Scheduler eşlemesi: metin `Name` , başlangı ç `StartDate` , bitiş `EndDate` , tüm gün `AllDay` ,
tekrar `RecurrenceRule` .
Seed verisi:
- Çalı şma takvimi, 16 satı r (`data/App.Hr.WorkCalendar.json`):
- Yı llı k tekrarlı tatiller: Yı lbaşı , 23 Nisan, 1 Mayı s, 19 Mayı s, 15 Temmuz, 30 Ağustos, 29 Ekim.
- Yı llı k tekrarlı yarı m gün: 28 Ekim arifesi.
- Yı la özel satı rlar: 2026 ve 2027 Ramazan/Kurban bayramları ve arifeleri.
- Vardiyalar, 3 satı r (`data/App.Hr.Shift.json`): Sabah 08:00– 16:00, Akşam 16:00– 00:00, Gece 00:00– 08:00 (gece vardiyası ).
---
## 4. Veri modeli
| Tablo | Kolonlar |
| --- | --- |
| `Hr_T_WorkCalendar` | `Name` , `StartDate` , `EndDate` , `DayType` (Holiday/HalfDay), `RecurrenceRule` (boş / `FREQ=YEARLY` ), `AllDay` , `IsActive` |
2026-10-04 21:18:13 +00:00
| `Hr_T_Shift` | `Name` , `StartTime` , `EndTime` , `BreakMinutes` , `LateToleranceMinutes` , `EarlyLeaveToleranceMinutes` , `WorkingHours` , `IsNightShift` , `IsActive` |
2026-10-04 15:04:16 +00:00
| `AbpUsers.ShiftId` | Çalı şanı n vardiyası (genişletme kolonu) |
Entity yoktur (wizard tabloları ); `sql/object/Hr_T_{WorkCalendar,Shift}.sql` .
---
## 5. İş kuralları
| Yer | Kural |
| --- | --- |
| Takvim — yeni kayı t | Gün türü `Holiday` , tekrar `FREQ=YEARLY` , tüm gün, aktif |
| Takvim — çok günlü tatil | Başlangı ç– bitiş aralı ğı olarak tek satı rda girilebilir |
| Vardiya — yeni kayı t | Gece vardiyası hayı r, aktif |
2026-10-04 21:18:13 +00:00
| Vardiya — toleranslar | Geç kalma / erken çı kı ş toleransı (dk); boşsa Ayarlar › İnsan Kaynakları › Puantaj'daki genel değer |
Takvim İzin Yönetimi'nin gün sayı sı nı (`HrLeave.md`), takvim ve vardiya Puantaj ve Devam Takibi'nin
gün tipini, vardiya saatini, molası nı ve toleransı nı (`HrAttendance.md`) besler.
2026-10-04 15:04:16 +00:00
---
## 6. Yetki ve görünürlük
İzin grubu `App.Hr` , modül `Sas|Hr` . Her ekranı n kökü + `.Create/.Update/.Delete/.Export/.Import/.Note` .
Hiçbir yetki role otomatik atanmaz. Takvimin okunması tüm çalı şanlara açı labilir; düzenleme İK'da kalmalı dı r.
---
## 7. Entegrasyonlar
| Kullanan | Nası l |
| --- | --- |
| Kimlik › Kullanı cı lar | `ShiftId` alanı vardiya lookup'ı |
| Olay Günlüğü (`App.Hr.EventLog`) | Olay kaydı nda vardiya seçimi |
| Sağlı k Kartları | Vardiyalı / gece çalı şabilir sonucu (bilgi; vardiya tanı mı yla otomatik eşleşmez) |
2026-10-04 21:18:13 +00:00
| İzin Yönetimi | Takvim tatilleri izin gününden düşülür (`Hr_F_LeaveWorkDays`). Takvim satı rı eklenince/değişince/silinince denk gelen izinlerin gün sayı sı yeniden hesaplanı r (`Hr_S_WorkCalendarAfterSave`) |
| Puantaj ve Devam Takibi | Tatil → Resmî tatil, arife → yarı m vardiya (`Hr_F_WorkCalendarDayType`); vardiya saat/mola/tolerans → `Hr_V_AttendanceShift` . Takvim kaydı ilgili günleri hemen yeniden hesaplar (kapalı ay hariç); vardiya değişikliği gece işinde ya da Puantaj Dönemleri kaydı nda yansı r |
2026-10-04 15:04:16 +00:00
---
## 8. Akı ş örneği
1. Yı l başı nda İK **Çalı şma Takvimi** 'nde o yı lı n dini bayram satı rları nı ekler (sabit tatiller zaten yı llı k tekrarlı dı r) ve Scheduler görünümünde yı lı kontrol eder.
2. Üretim için **Vardiyalar** 'a "Hafta Sonu 08:00– 20:00, mola 60 dk, çalı şma 11 saat" eklenir.
3. Kullanı cı ekranı nda çalı şanları n **Vardiya** alanı güncellenir; Olay Günlüğü kayı tları nda da bu vardiyalar seçilir.
---
## 9. Sı k sorulanlar ve bilinen sı nı rlar
**Ramazan Bayramı gelecek yı l görünmüyor.** Dini bayramlar yı la özeldir; her yı l yeni satı r girilir.
**Çalı şma süresi neden hesaplanmı yor?** Vardiya saatleri metindir, süre elle girilir.
2026-10-04 21:18:13 +00:00
**Takvim izin/puantaj hesabı nı etkiliyor mu?** Evet: izin gün sayı sı ndan tatiller düşülür, puantajda tatil
günü Resmî tatil, arife yarı m gün sayı lı r. Takvim satı rı kaydedilince denk gelen günlerin izin gün sayı sı ve
puantajı hemen yeniden hesaplanı r (yı llı k tekrarlı satı rda bu yı l ve gelecek yı l; kapalı puantaj ayı yazı lmaz).
Bir satı rı n tarihi değiştirildiğinde eski tarihlerin puantajı gece işinde ya da Puantaj Dönemleri kaydı nda düzelir.
2026-10-04 15:04:16 +00:00
2026-10-04 21:18:13 +00:00
**Vardiyalar nerede?** `İnsan Kaynakları › Tanı mlamalar` altı nda (sı ra 11); menü satı rı , wizard dosyası ve
yetki ağacı aynı yeri gösterir.
2026-10-04 15:04:16 +00:00
---
## 10. Dosyalar ve geri alma
| Dosya | İçerik |
| --- | --- |
2026-10-05 12:58:59 +00:00
| `configs/seeds/sql/object/Hr_T_{WorkCalendar,Shift}.sql` | Tablolar |
| `configs/seeds/wizard/{WorkCalendar,Shift}.json` | 2 wizard |
| `configs/seeds/data/App.Hr.{WorkCalendar,Shift}.json` | Takvim ve vardiya verisi (ekran kayı tları dosyaya aynalanı r) |
2026-10-04 15:04:16 +00:00
| `api/src/Sozsoft.Platform.Application.Contracts/LookUpQueryValues.cs` (`TenantShiftValues`) | Kullanı cı ekranı ndaki vardiya lookup'ı |
Geri alma: Wizard Manager'dan silinir; vardiya tablosu kullanı cı ekranı nı n lookup'ı tarafı ndan okunduğu için düşürülmemelidir.
<!-- 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.
### Çalı şma Takvimi — `App.Hr.WorkCalendar`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/WorkCalendar.json` |
| Yol | Liste (Wizard) |
2026-10-04 21:18:13 +00:00
| Menü | `App.Hr` › `App.Hr.WorkCalendar` (sı ra 4) |
2026-10-04 15:04:16 +00:00
| Yetki | `App.Hr.WorkCalendar` + `.Create` , `.Update` , `.Delete` , `.Export` , `.Import` , `.Note` |
| Açı klama | Çalı şma Takvimi — resmi tatiller, arife (yarı m gün) ve çalı şı lmayan günler. |
| Kaynak | `Hr_T_WorkCalendar` · filtre `"IsDeleted" = 'false'` |
| Görünümler | Grid, Card, Pivot, Chart, Scheduler (açı lı ş grid) |
| Düzenleme | ekle ✓ · düzenle ✓ · sil ✓ · popup |
| Kapsam | Kiracı |
| Widget'lar | `App.Widget.Total` , `App.Hr.WorkCalendar.DayType.Holiday` , `App.Hr.WorkCalendar.DayType.HalfDay` |
2026-10-04 21:18:13 +00:00
| Komutlar | InsertAfter: `Hr_S_WorkCalendarAfterSave` · UpdateAfter: `Hr_S_WorkCalendarAfterSave` · DeleteAfter: `Hr_S_WorkCalendarAfterSave` |
2026-10-04 15:04:16 +00:00
| Form varsayı lanları | DayType=Holiday, RecurrenceRule=FREQ=YEARLY, AllDay=true, IsActive=true |
| Veri aynası | `data/App.Hr.WorkCalendar.json` |
| Alan | Başlı k | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Name` | Adı | dxTextBox | ✓ | ✓ | |
| `StartDate` | Başlangı ç Tarihi | dxDateBox | ✓ | ✓ | |
| `EndDate` | Bitiş Tarihi | dxDateBox | ✓ | ✓ | |
| `DayType` | Gün Türü | dxSelectBox | ✓ | ✓ | liste: Holiday, HalfDay |
| `RecurrenceRule` | Tekrarlama Kuralı | dxSelectBox | | ✓ | liste: FREQ=YEARLY |
| `AllDay` | Tüm Gün | dxCheckBox | | | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
### Vardiyalar — `App.Hr.Shift`
| Özellik | Değer |
| --- | --- |
| Wizard | `wizard/Shift.json` |
| Yol | Liste (Wizard) |
2026-10-04 21:18:13 +00:00
| Menü | `App.Hr.Definitions` › `App.Hr.Shift` (sı ra 11) |
2026-10-04 15:04:16 +00:00
| Yetki | `App.Hr.Shift` + `.Create` , `.Update` , `.Delete` , `.Export` , `.Import` , `.Note` |
| Açı klama | Vardiyalar — çalı şma vardiyaları nı n tanı mı (sabah, akşam, gece…). |
| Geliştirme talebi | Human Resources -> Olay Günlüğü |
| Kaynak | `Hr_T_Shift` · 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ı | IsNightShift=false, IsActive=true |
| Veri aynası | `data/App.Hr.Shift.json` |
| Alan | Başlı k | Editör | Zorunlu | Formda | Kaynak |
| --- | --- | --- | --- | --- | --- |
| `Name` | Vardiya Adı | dxTextBox | ✓ | ✓ | |
| `StartTime` | Başlangı ç Saati | dxTextBox | | ✓ | |
| `EndTime` | Bitiş Saati | dxTextBox | | ✓ | |
| `BreakMinutes` | Mola (dk) | dxNumberBox | | ✓ | |
2026-10-04 21:18:13 +00:00
| `LateToleranceMinutes` | Geç Kalma Toleransı (dk) | dxNumberBox | | ✓ | |
| `EarlyLeaveToleranceMinutes` | Erken Çı kı ş Toleransı (dk) | dxNumberBox | | ✓ | |
2026-10-04 15:04:16 +00:00
| `WorkingHours` | Çalı şma Süresi (Saat) | dxNumberBox | | ✓ | |
| `IsNightShift` | Gece Vardiyası | dxCheckBox | ✓ | ✓ | |
| `IsActive` | Aktif | dxCheckBox | ✓ | ✓ | |
<!-- module - doc:auto:end -->