{ "ListFormCode": "App.DevRequests", "KeyFieldName": "Id", "GeneratedAt": "2026-09-30T13:46:58.3804382Z", "Order": 0, "Rows": [ { "Id": "ce4269ad-8d08-487a-9e36-c002dd482a3c", "TenantId": null, "UserName": "system@sozsoft.com", "RequestDate": null, "Status": "Backlog", "Title": "Human Resources -> Sağlık", "Description": "
Bu eklenecekler Human Resources -> Sağlık alt menüsünün içerisine eklenecektir. Çalışan (Kullanıcı) ile ilgili tüm bilgileri AbpUsers tablosundan alınabilir. Örneğin Idendity Number, Gender, EducationStatus, BirthDate vs. tüm bilgiler bu tablodan alınabilir. Branch bilgisi eğer kullanıcı birden fazla Branch yetkisi varsa seçmeli, eğer bir branch yetkisi varsa o branch kullanıcı seçildikten sonra otomatik gelmeli. Lİstelerde Avatar (Kullanıcı Resmi) olmasına gerek yok, eklenmeyecek.
İstirahat Listesi : Çalışanların istirahat listesi ekranıdır. İstirahat Tipi: Hastalık, İş Kazası, Analık, Meslek Hastalığı gibi seçilebilmelidir.
Muayene Listesi : Çalışanların Muayene Listesidir. Her kullanıcının periyodik veya plansız şekilde yapılan muayene sonuçlarının listesidir.Kullanıcı seçilince Eğitim Durumu, Tc Kimlik No, Doğum Tarihi, Departman gibi bilgiler otomatik gelir.
Hasta Kayıt Defteri: Kullanıcıların hasta olduklarında doldurdukları listedir. Tip sütununda Hastalık, İş Kazası Dönüş, İstirahat Dönüş, Sonuç kısmında Tedavi (Taburcu), Sevk ve İstirahat seçenekleri olmalı. Sevk olaunca Sevk Yeri açılıyor. Kullanıcı seçilince Adres, yaş, cinsiyet gibi bilgiler otomatik gelir. Sıra No sütunu eklenmeyecek.
İK / işyeri hekimliği ekibinin çalışanların sağlık süreçlerini tek menüde takip etmesi: istirahat raporları, periyodik/plansız muayene sonuçları ve revire başvuran çalışanların hasta kayıt defteri. Çalışan bilgileri (TC, cinsiyet, doğum tarihi, eğitim, adres, departman, görev) kullanıcı seçilince AbpUsers'tan, şube ise kullanıcının şube yetkilerinden (Sas_T_BranchUsers) otomatik gelir.
Görsellerdeki fotoğraf alanı talep metni gereği (\"Listelerde Avatar olmasına gerek yok, eklenmeyecek\") üretilmez.
\n\nÜç ekran da Wizard List (ComponentKind 0) ile, her biri kendi yeni tablosu üzerinde üretilir: kayıt listesi + popup ekle/düzenle/sil, filtre ve arama. Otomatik dolan çalışan/şube/doktor bilgileri lookup'ların seçili kaydından EditorScript (copy, selected) ile taşınır; hesaplar (Gün, Yaş), şube doğrulaması ve koşullu kilitler de EditorScript ile yapılır.
İnsan Kaynakları › Sağlık › {Ekran}
\n| Seviye | Kod | Ad (TR / EN) | İkon | Durum |
|---|---|---|---|---|
| Kök | App.Hr | İnsan Kaynakları / Human Resources | FcConferenceCall | Var |
| Ara | App.Hr.Health | Sağlık / Health | FcLike | Yeni |
| Ekran | App.Hr.SickLeave | İstirahat Listesi / Sick Leaves | FcPlanner | Yeni |
| Ekran | App.Hr.MedicalExamination | Muayene Listesi / Medical Examinations | FcInspection | Yeni |
| Ekran | App.Hr.PatientRegister | Hasta Kayıt Defteri / Patient Register | FcViewDetails | Yeni |
ModuleId: Hr · İzin grubu: App.Hr (var) · MenuParentCode: App.Hr.Health · MenuParentPath: App.Hr · Route: /admin/list/{ListFormCode}.
Yetki: App.Hr › App.Hr.Health (Yeni) › App.Hr.SickLeave / App.Hr.MedicalExamination / App.Hr.PatientRegister.
Ekranlar arasında lookup bağımlılığı yok (hepsi var olan tanım ekranlarını kullanır); menüde talepteki sırayla yer alırlar.
\n\nÜç tablo da yenidir (önceki üretimin tabloları, wizard'ları ve menüleri kaldırılmış; veritabanında yoklar). Her tabloda Multi-Tenant + Full Audited kolon seti. Kapsam IsTenant = true, IsBranch = false. Kullanıcıdan kopyalanan kolonlar AbpUsers ile aynı ad/tip/boyla açılır: IdentityNumber nvarchar(15), Gender nvarchar(16) (Male/Female), EducationLevel nvarchar(128), HomeAddress nvarchar(512), BirthDate datetime2, DepartmentId/JobPositionId uniqueidentifier. Avatar kolonu hiçbir tabloda açılmaz.
Şube kuralı (üç ekranda ortak): BranchId kullanıcının şube yetkilerinden (Sas_T_BranchUsers, yalnızca aktif ve silinmemiş Sas_T_Branch) belirlenir.
SELECT u.Id AS [Key], u.Name + ' ' + u.Surname AS [Name], {ekranın kopya kolonları}, bc.BranchCount, bc.SingleBranchId FROM AbpUsers u OUTER APPLY (SELECT COUNT(*) AS BranchCount, CASE WHEN COUNT(*) = 1 THEN LOWER(MAX(CAST(bu.BranchId AS nvarchar(36)))) END AS SingleBranchId FROM Sas_T_BranchUsers bu JOIN Sas_T_Branch b ON b.Id = bu.BranchId AND b.IsDeleted = 'false' AND b.IsActive = 'true' WHERE bu.UserId = u.Id) bc WHERE u.IsDeleted = 'false' AND u.IsActive = 'true' AND u.TenantId = '@TENANTID' ORDER BY u.Name, u.SurnameBranchCount = 1 ise BranchId tek şubeyle dolar ve kilitlenir; birden fazlaysa ya da hiç yoksa BranchId boşaltılır ve seçime açılır.SELECT b.Id AS [Key], b.Name AS [Name], (SELECT LOWER(STRING_AGG(CAST(bu.UserId AS nvarchar(36)), ',')) FROM Sas_T_BranchUsers bu WHERE bu.BranchId = b.Id) AS [UserIds] FROM Sas_T_Branch b WHERE b.IsDeleted = 'false' AND b.IsActive = 'true' AND b.TenantId = '@TENANTID' ORDER BY b.NameUserIds listesinde çalışan yoksa \"Seçilen şube bu çalışana tanımlı değil\" uyarısı verilir ve alan boşaltılır. BranchId formda zorunludur.Gösterim lookup'ları: DepartmentId → Hr_T_Department, JobPositionId → Hr_T_JobPosition, DoctorId → Hr_T_Doctor (IsActive), HospitalId/ReferralHospitalId → Hr_T_Hospital (IsActive), HospitalDepartmentId → Hr_T_HospitalDepartment (IsActive); hepsinde IsDeleted = 'false' ve TenantId = '@TENANTID'.
Hr_T_SickLeave — Tanım tablosu: Hayır (çalışan bazlı hareket kaydı).
\n| Kolon | Tip | Zorunlu | Başlık | Not |
|---|---|---|---|---|
| UserId | uniqueidentifier | Evet | Adı Soyadı | kullanıcı lookup'ı |
| BranchId | uniqueidentifier NULL | Evet (form) | Şube Adı | şube kuralı |
| IdentityNumber | nvarchar(15) | Hayır | TC Kimlik No | kopya, salt okunur |
| DepartmentId | uniqueidentifier | Hayır | Departman | kopya, salt okunur |
| StartDate | date | Evet | Başlangıç Tarihi | |
| EndDate | date | Evet | Bitiş Tarihi | |
| DayCount | int | Hayır | Gün | hesap, salt okunur |
| LeaveType | nvarchar(32) | Evet | İstirahat Tipi | sabit liste: Hastalık · İş Kazası · Analık · Meslek Hastalığı; varsayılan Hastalık |
| HospitalId | uniqueidentifier | Hayır | Kurum | Hr_T_Hospital |
| HospitalDepartmentId | uniqueidentifier | Hayır | Bölüm | Hr_T_HospitalDepartment |
| Reason | nvarchar(MAX) | Hayır | İstirahat Sebebi | dxTextArea |
Hr_T_MedicalExamination — Tanım tablosu: Hayır (çalışan bazlı muayene kaydı).
\n| Kolon | Tip | Zorunlu | Başlık | Not |
|---|---|---|---|---|
| UserId | uniqueidentifier | Evet | Adı Soyadı | kullanıcı lookup'ı |
| IdentityNumber | nvarchar(15) | Hayır | TC Kimlik No | kopya, salt okunur |
| ExaminationDate | date | Evet | Muayene Tarihi | açılışta bugün |
| ExaminationType | nvarchar(32) | Evet | Muayene Tipi | sabit liste: Periyodik · Plansız; varsayılan Periyodik |
| EducationLevel | nvarchar(128) | Hayır | Eğitim Durumu | kopya, salt okunur |
| BirthDate | datetime2 | Hayır | Doğum Tarihi | kopya, salt okunur |
| JobPositionId | uniqueidentifier | Hayır | Görevi | kopya, salt okunur |
| DepartmentId | uniqueidentifier | Hayır | Departman | kopya, salt okunur |
| BranchId | uniqueidentifier NULL | Evet (form) | Şube Adı | şube kuralı |
| Examination | nvarchar(MAX) | Hayır | Muayene | dxTextArea |
| Result | nvarchar(MAX) | Hayır | Sonuç | dxTextArea |
| DoctorId | uniqueidentifier | Evet | Doktor | Hr_T_Doctor |
| DiplomaNo | nvarchar(50) | Hayır | Diploma No | doktordan kopya, salt okunur |
| DiplomaDate | date | Hayır | Diploma Tarihi | doktordan kopya, salt okunur |
| OhsCertificateNo | nvarchar(50) | Hayır | İşyeri Hekimi Belge No | doktordan kopya, salt okunur |
| OhsCertificateDate | date | Hayır | İşyeri Hekimi Belge Tarihi | doktordan kopya, salt okunur |
Hr_T_PatientRegister — Tanım tablosu: Hayır (revir başvuru kaydı).
\n| Kolon | Tip | Zorunlu | Başlık | Not |
|---|---|---|---|---|
| UserId | uniqueidentifier | Evet | Adı Soyadı | kullanıcı lookup'ı |
| RegisterDate | date | Evet | Tarih | açılışta bugün |
| HomeAddress | nvarchar(512) | Hayır | Adres | kopya, salt okunur |
| BirthDate | datetime2 | Hayır | Doğum Tarihi | kopya, salt okunur (Yaş hesabının kaynağı) |
| Age | int | Hayır | Yaş | hesap, salt okunur |
| Gender | nvarchar(16) | Hayır | Cinsiyet | kopya, salt okunur; Male/Female, App.StaticLookup.Male/Female |
| BranchId | uniqueidentifier NULL | Evet (form) | Şube Adı | şube kuralı |
| DoctorId | uniqueidentifier | Hayır | Doktor | Hr_T_Doctor |
| RegisterType | nvarchar(32) | Evet | Tip | sabit liste: Hastalık · İş Kazası Dönüş · İstirahat Dönüş; varsayılan Hastalık |
| Result | nvarchar(32) | Evet | Sonuç | sabit liste: Tedavi (Taburcu) · Sevk · İstirahat; varsayılan Tedavi (Taburcu) |
| LeaveDayCount | int | Hayır | İstirahat Günü | yalnızca Sonuç = İstirahat iken açık |
| ReferralHospitalId | uniqueidentifier | Hayır | Sevk Yeri | Hr_T_Hospital; yalnızca Sonuç = Sevk iken açık |
| Description | nvarchar(MAX) | Hayır | Açıklama | dxTextArea |
App.Hr.Health (Sağlık) ve aynı kodlu ara yetki; altında üç yeni liste ekranı ve menü kaydı.{ListFormCode} + .Create/.Update/.Delete/.Export/.Import/.Note, App.Hr grubunda.App.Listform.ListformField. + UserId, StartDate, EndDate, DayCount, LeaveType, HospitalId, HospitalDepartmentId, Reason, ExaminationDate, ExaminationType, Examination, Result, DoctorId, RegisterDate, Age, RegisterType, LeaveDayCount, ReferralHospitalId — var olanlar yeniden açılmaz).copy ile doldurur (İstirahat: IdentityNumber, DepartmentId · Muayene: IdentityNumber, EducationLevel, BirthDate, JobPositionId, DepartmentId · Hasta Kayıt: HomeAddress, BirthDate, Gender) ve şube kuralını uygular (snum(\"BranchCount\") = 1 → set(BranchId) + readOnly(BranchId, true); aksi → clear(BranchId) + readOnly(BranchId, false)). Kopya alanlar EditorOptions.readOnly ile kilitlidir.UserIds listesinde UserId yoksa notify + clear(BranchId).DayCount = EndDate − StartDate (gün, bitiş hariç); iki tarih de doluysa yazılır. EndDate < StartDate ise uyarı verilir, EndDate ve DayCount boşaltılır.copy ile dolar. ExaminationDate açılışta bugün, ExaminationType açılışta Periyodik.readOnly(LeaveDayCount, Result ≠ İstirahat), readOnly(ReferralHospitalId, Result ≠ Sevk) (açılışta ve değişimde); değişimde koşulu kalkan alan boşaltılır. RegisterDate açılışta bugün, RegisterType açılışta Hastalık, Result açılışta Tedavi (Taburcu).\"TenantId\" = '@TENANTID' ve \"IsDeleted\" = 'false'): İstirahat — Bu Ay Başlayan · Şu An İstirahatte · Bu Ay Toplam Gün; Muayene — Toplam · Bu Ay · Plansız; Hasta Kayıt — Bugün · Bu Ay Sevk · Bu Ay İstirahat.d9f5fe73-d18e-cd9d-7666-3a2406936c9f), tek şube yetkisi Branch1 (1c125bf3-3ffd-4445-a270-1bc43ac3f61c), departman 8f14e45f-ea2d-4d9f-9f1d-1a2b3c4d5e6f, TC boş (kullanıcı kaydında yok), 17.02.2026 – 19.02.2026, 2 gün, Hastalık, Baltalimanı Kemik Hastalıkları Hastanesi (ccc391fa-7813-628e-38f2-3a240383beb3), Beyin ve Sinir Cerrahisi (d6271053-2d73-9ada-7de4-3a2403842c90). Muayene ve Hasta Kayıt görsellerinde satır olmadığından demo veri yazılmaz.Evet
Üretilenler (menü: İnsan Kaynakları › Sağlık — App.Hr.Health yeni ara menü/ara yetki, ikon FcLike; izin grubu App.Hr; IsTenant = true, IsBranch = false; görünümler Grid/Card/Pivot/Chart, açılış Grid; form popup, tek grup 2 kolon):
App.Hr.SickLeave (SickLeave.json): UserId, BranchId, IdentityNumber, DepartmentId, StartDate, EndDate, DayCount, LeaveType, HospitalId, HospitalDepartmentId, Reason. Demo: 1 satır (Sedat ÖZTÜRK · Branch1 · 17.02–19.02.2026 · 2 gün · Hastalık · Baltalimanı Kemik Hastalıkları Hastanesi · Beyin ve Sinir Cerrahisi). Widget: Bu Ay Başlayan · Şu An İstirahatte · Bu Ay Toplam Gün.App.Hr.MedicalExamination (MedicalExamination.json): UserId, IdentityNumber, ExaminationDate, ExaminationType, EducationLevel, BirthDate, JobPositionId, DepartmentId, BranchId, Examination, Result, DoctorId, DiplomaNo, DiplomaDate, OhsCertificateNo, OhsCertificateDate. Demo yok. Widget: Toplam · Bu Ay · Plansız.App.Hr.PatientRegister (PatientRegister.json): UserId, RegisterDate, HomeAddress, BirthDate, Age, Gender, BranchId, DoctorId, RegisterType, Result, LeaveDayCount, ReferralHospitalId, Description. Demo yok. Widget: Bugün · Bu Ay Sevk · Bu Ay İstirahat.Avatar talep gereği hiçbir ekrana ve tabloya eklenmedi. Şube kuralı üç ekranda da uygulandı (tek şubede otomatik dolup kilitlenir, birden fazla ya da hiç şube yoksa seçime açılır, çalışana tanımlı olmayan şube uyarıyla reddedilir; BranchId formda zorunlu).
\nYetkiler her ekranda {ListFormCode} + .Create/.Update/.Delete/.Export/.Import/.Note; hiçbir role atanmadı. Yeni dil anahtarları: ara menü, üç ekran başlığı/açıklaması, dokuz widget başlığı ve yeni alan başlıkları.
\nVarsayılanlar: script'ler kod olarak yazıldı (Script Builder kod görünümünde açılır); kopya alanlar EditorOptions.readOnly ile kilitli; departman ve görev gösterim lookup'larında IsActive filtresi yok (eski satırlarda adları görünsün diye); menü sırası deploy sırasıyla (İstirahat · Muayene · Hasta Kayıt).
DB Migrate bekleyen wizard'lar: SickLeave.json, MedicalExamination.json, PatientRegister.json.
" } ] }