{ "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": "Testing", "Title": "Human Resources -> Sağlık", "Description": "
Bu eklenecekler Human Resources -> Sağlık alt menüsünün içerisine eklenecektir.
İ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.
Sağlık Kartları: Her çalışanın detaylı şekilde sağlık bilgilerinin yer aldığı ekrandır. bu liste Kullanıcı listesinin bir benzeri olabilir. Detay formuna geçince aşağıdaki resimlere ait detay formu açılmalı. Bu ekranın içerisinde 9 farklı tab içerisinde ayrı bilgiler içermektedir. Aşağıda bu tabların resimlerini gönderiyorum. Genel, Fiziki Muayeene, Anamnez1, Anamnez2,Anamnez3, Sonuç komponentlerine AllowAdding true olamayacağı için bu komponentlerdeki değerleri AbpUsers tablosuna extension olarak tanımlanabilir. Ayrıca Anamnez1, Anamnez2, Anamnez3 tek bir komponent olabilir
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.
İş sağlığı biriminin (işyeri hekimi / İK) İK › Sağlık menüsünde şu kayıtları tutması:
\nSağlık Kartları ekranı, Kullanıcı listesine benzer biçimde aktif kullanıcıların tamamını listeler. Detaya geçilince sekmeli kart açılır ve sağlık bilgileri orada girilip düzenlenir. Kart kaydı silinmez.
\n\nWizard List — tüm ekranlar ListForm'dur; çerçeve dışı değişiklik yoktur.
\nSelectCommandType: 4).\n AbpUsers üzerinden aktif kullanıcıları listeler; karttan özet kolonlar LEFT JOIN ile gelir./admin/form/App.Hr.HealthCard/{UserId}): 8 sekmeyi alt form olarak açar (Id → UserId).\n İnsan Kaynakları › Sağlık › {İstirahat Listesi · Muayene Listesi · Hasta Kayıt Defteri · Sağlık Kartları}
\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 Leave List | FcOvertime | Yeni |
| Ekran | App.Hr.Examination | Muayene Listesi / Examination List | FcInspection | Yeni |
| Ekran | App.Hr.PatientRecord | Hasta Kayıt Defteri / Patient Register | FcViewDetails | Yeni |
| Ekran | App.Hr.HealthCard | Sağlık Kartları / Health Cards | FcBusinessContact | Yeni |
Hr · İzin grubu App.Hr (Var) · Route /admin/list/{ListFormCode} · MenuParentPath = [App.Hr], MenuParentCode = App.Hr.Health.App.Hr › App.Hr.Health › {App.Hr.SickLeave | App.Hr.Examination | App.Hr.PatientRecord | App.Hr.HealthCard}. App.Hr.Health yeni.CreateMenu: false, aynı dalda): App.Hr.HealthCardGeneral, .HealthCardWorkHistory, .HealthCardLab, .HealthCardAnamnesis, .HealthCardResult, .HealthCardFile.IsTenant = true, IsBranch = false.IsActive yoktur.Hr_T_Hospital, Hr_T_HospitalDepartment, Hr_T_Doctor, Hr_T_DocumentType, Hr_T_Department, Hr_T_JobPosition, Sas_T_Branch, AbpUsers (salt okunur).Sağlık Kartları liste sorgusu (SelectCommand, anahtar Id = kullanıcı Id'si):
SELECT u.Id, u.TenantId, u.IsDeleted, u.Name + ' ' + u.Surname AS FullName, u.Email, u.PhoneNumber, d.Name AS DepartmentName, jp.Name AS JobPositionName, hc.IdentityNo, hc.BirthDate, hc.BloodType, ISNULL(hc.ShiftWorkFit, CAST(0 AS bit)) AS ShiftWorkFit, ISNULL(hc.NightWorkFit, CAST(0 AS bit)) AS NightWorkFit, CASE WHEN hc.Id IS NULL THEN CAST(0 AS bit) ELSE CAST(1 AS bit) END AS HasCard FROM AbpUsers u LEFT JOIN Hr_T_HealthCard hc ON hc.UserId = u.Id AND hc.IsDeleted = 'false' LEFT JOIN Hr_T_Department d ON d.Id = u.DepartmentId LEFT JOIN Hr_T_JobPosition jp ON jp.Id = u.JobPositionId WHERE u.IsActive = 'true'
Q-User — ortak personel lookup'ı (İstirahat, Muayene, Hasta Kayıt):
\nSELECT u.Id AS [Key], u.Name + ' ' + u.Surname AS [Name], hc.IdentityNo, hc.BirthDate, hc.Gender, hc.EducationStatus, hc.HomeAddress, DATEDIFF(YEAR, hc.BirthDate, GETDATE()) AS Age, d.Name AS DepartmentName, jp.Name AS JobPositionName FROM AbpUsers u LEFT JOIN Hr_T_HealthCard hc ON hc.UserId = u.Id AND hc.IsDeleted = 'false' LEFT JOIN Hr_T_Department d ON d.Id = u.DepartmentId LEFT JOIN Hr_T_JobPosition jp ON jp.Id = u.JobPositionId WHERE u.IsDeleted = 'false' AND u.IsActive = 'true' AND u.TenantId = '@TENANTID' ORDER BY u.Name, u.Surname
Q-Doctor — doktor lookup'ı:
\nSELECT Id AS [Key], FullName AS [Name], DiplomaNo, DiplomaDate, OhsCertificateNo, OhsCertificateDate, ISNULL(CONVERT(varchar(10), DiplomaDate, 104), '') + ' / ' + ISNULL(DiplomaNo, '') AS DiplomaInfo, ISNULL(CONVERT(varchar(10), OhsCertificateDate, 104), '') + ' / ' + ISNULL(OhsCertificateNo, '') AS OhsInfo FROM Hr_T_Doctor WHERE IsDeleted = 'false' AND IsActive = 'true' AND TenantId = '@TENANTID' ORDER BY FullName
Hr_T_SickLeave (İstirahat)
\nHr_T_Examination (Muayene)
\nHr_T_PatientRecord (Hasta Kayıt Defteri)
\nHr_T_HealthCard (Sağlık Kartı — kullanıcı başına bir satır)
\n| Sekme | Kolonlar (tip) |
|---|---|
| Kimlik | UserId (uniqueidentifier, NOT NULL — ilişkiden gelir) |
| Genel (List) | \n
|
| Laboratuvar – Fizik (Form) | 9 laboratuvar alanı (Lab…), 12 fizik muayene alanı (Phys…), BloodPressure, Pulse, Height, Weight, Bmi (decimal; Bmi hesaplanır) |
| Tıbbi Anamnez (Form, 3 grup) | \n
|
| Sonuç (Form) | FitnessNote1, FitnessNote2; ResultDoctorId + ResultDoctorDiploma, ResultDoctorOhsCert; ShiftWorkFit, NightWorkFit (bit); ShiftDoctorId + ShiftDoctorDiploma, ShiftDoctorOhsCert |
Hr_T_HealthCardWorkHistory (Önceki İş Yerleri)
\nHr_T_HealthCardFile (Dosyalar)
\nApp.Hr.Health ve ara yetkisi.App.Hr.Health.Widget.*). Var olan App.Listform.ListformField.* metinleri ezilmez.Id → UserId, DbType 9), sırayla:\n App.Hr.Examination)App.Hr.PatientRecord)AbpUsers ve diğer platform tabloları (yalnız okunur), var olan ekranlar, React sayfaları, iş akışı, bildirim, public yol.UserId ilişkiden dolar.copy, değişimde):\n days(StartDate, EndDate) − 1.dxSwitch, zorunlu işaretlenmez.dxSelectBox.dxTextArea.dxImageUpload (görsel + PDF).UserId alanları zorunlu değildir.AbpUsers'a extension olarak eklenmesi öneriliyor.AbpUsers) doğrudan yazan ekran üretilmesini yasaklar (reference §12.8); platform tablosuna kolon eklemek de çerçeve dışıdır (§0.8).App.Hr.HealthCardAnamnesis) üç grup olarak birleştirilir. Sekme sayısı 8 olur.CREATE UNIQUE INDEX UX_Hr_T_HealthCard_User ON Hr_T_HealthCard (TenantId, UserId) WHERE IsDeleted = 0 (onay).create_table: Hr_T_HealthCardcreate_table: Hr_T_HealthCardWorkHistorycreate_table: Hr_T_HealthCardFilecreate_table: Hr_T_SickLeavecreate_table: Hr_T_Examinationcreate_table: Hr_T_PatientRecorddeploy_wizard: SickLeave.jsondeploy_wizard: Examination.jsondeploy_wizard: PatientRecord.jsondeploy_wizard: HealthCardGeneral.jsondeploy_wizard: HealthCardWorkHistory.jsondeploy_wizard: HealthCardLab.jsondeploy_wizard: HealthCardAnamnesis.jsondeploy_wizard: HealthCardResult.jsondeploy_wizard: HealthCardFile.jsondeploy_wizard: HealthCard.jsonEvet
Hr_T_HealthCard, Hr_T_HealthCardWorkHistory, Hr_T_HealthCardFile, Hr_T_SickLeave, Hr_T_Examination, Hr_T_PatientRecord. Hepsi tenant ve tam audit alanlı; seed dosyaları host/sql/object/ altında.App.Hr.SickLeaveApp.Hr.ExaminationApp.Hr.PatientRecordApp.Hr.HealthCard — sorgu kaynaklı, aktif kullanıcılar; Yeni/Düzenle/Sil kapalı, Detay açık.Id → UserId ilişkisiyle bağlı.\n App.Hr.HealthCardGeneral — List; ekleme ve güncelleme açık, silme kapalı; kart satırı burada oluşur..HealthCardWorkHistory — List..HealthCardLab, .HealthCardAnamnesis (Anamnez 1–3 dört grupta), .HealthCardResult — Form; yalnız güncelleme.App.Hr.Examination, App.Hr.PatientRecord, .HealthCardFile — List.CREATE UNIQUE INDEX UX_Hr_T_HealthCard_User ON Hr_T_HealthCard (TenantId, UserId) WHERE IsDeleted = 0UserId kolonu görünür kalabilir; ListForm editöründen gizlenebilir.App.Listform.ListformField.* başlıkları ezilmez.