{ "ListFormCode": "Sas.DevRequests", "KeyFieldName": "Id", "GeneratedAt": "2026-10-01T07:16:56.9244132Z", "Order": 0, "Rows": [ { "Id": "ec7d68c2-2dae-466a-8f8b-f28f6042746a", "TenantId": null, "UserName": "system@sozsoft.com", "RequestDate": null, "Status": "Staging", "Title": "Human Resources -> Health Card", "Description": "
Human Resources menüsünün altına Health Card adında listesi ekle. Bu liste kullanıcı listesi gibi bir liste olmalı ve bu listenin sadece Detay butonu olmalı. Bu butona basınca açılan detay formu aynı aşağıdaki resimdeki gibi olmalı. Üst kısımda kullanıcı bilgileri alt kısımdaki tablarda aynı User Detaildeki Health Card gibi olmalı.
İK / işyeri hekimliği ekibi, kullanıcı yönetimi yetkisi (AbpIdentity.Users.Update) olmadan çalışanların sağlık kartını İnsan Kaynakları menüsünden açıp güncelleyebilsin. Liste kullanıcı listesine benzer, yalnızca Detay butonu taşır; detay formu üstte çalışan bilgisi, altta User Detail › Health Card ile aynı yedi sekmeyi gösterir.
[image-1] — Sekmeli düzenleme formu (User Detail › Health Card'ın kopyası). Sekmeler: Family / Personal History (açık), Laboratory - Physical Examination, Anamnesis, Result, Periodic Examinations, Patient Protocol Book, Sick Leaves. Sağ altta Save.
\nWizard List + Form alt formları. Sağlık kartı alanlarının tamamı AbpUsers'ta, çok kayıtlı bölümler mevcut Adm_T_User* tablolarında durur; yeni tablo gerekmez. Ana liste AbpUsers üzerinde salt okunur bir ListForm'dur ve hazır Detay butonuyla form görünümünü (/admin/form/Hr.HealthCard/{Id}) açar; formun üst kısmı çalışan bilgisi (salt okunur), sekmeler SubForms'tur: ilk dört sekme AbpUsers üzerinde TabType: Form (Id → Id, 1:1), son üç sekme Adm_T_User* üzerinde TabType: List (Id → UserId). Custom component gerekmez; User Detail React sayfasına dokunulmaz.
İnsan Kaynakları › Sağlık Kartı
| Seviye | Kod | Ad (TR / EN) | İkon | Durum |
|---|---|---|---|---|
| Kök | Hr | İnsan Kaynakları / Human Resources | FcConferenceCall | Var |
| Ekran | Hr.HealthCard | Sağlık Kartı / Health Card | FcInspection | Yeni |
ModuleId: Hr · izin grubu Hr · route /admin/list/Hr.HealthCard · MenuParentCode: Hr, MenuParentPath boş.
Yetki: Hr › Hr.HealthCard (Yeni; izin grubu Hr Var). Alt formlar: Hr › Hr.HealthCard › Hr.HealthCard{History|LabPhysical|Anamnesis|Result|PeriodicExamination|PatientProtocol|SickLeave} (hepsi Yeni).
Yeni tablo yok. Tanım tablosu: Hayır (yeni tablo açılmıyor).
\nAna ekran Hr.HealthCard — AbpUsers (var), SelectCommandType: 1, anahtar Id (Guid, KeyFieldDbSourceType: 9), IsTenant: true, IsBranch: false, DefaultFilter \"IsDeleted\" = 'false'. Salt okunur alanlar (grid + formun üst grubu): Name, Surname, IdentityNumber, BirthDate, Gender (Male/Female, Sas.StaticLookup.*), Email, PhoneNumber, DepartmentId (lookup Hr_T_Department), JobPositionId (lookup Hr_T_JobPosition), HireDate, SskNo, BloodType, IsActive. Başlıklar AbpIdentity.Users ekranındaki anahtarlar.
Form sekmeleri — tablo AbpUsers, anahtar Id, alan adı/tip/boy kolonla aynı:
| Ekran | Gruplar ve alanlar |
|---|---|
Hr.HealthCardHistory | FamilyHistory: {Mother|Father|Sibling|Child}HealthStatus nvarchar(16) dxSelectBox (Alive / Disease / Deceased) + …HealthNote nvarchar(512) dxTextBox. PersonalHistory: BloodType nvarchar(16) dxSelectBox (0 Rh+, 0 Rh-, A Rh+, A Rh-, B Rh+, B Rh-, AB Rh+, AB Rh-; anahtar = görünen metin), ChronicDisease nvarchar(512), Immunization: TetanusVaccination, HepatitisVaccination nvarchar(256), OtherVaccination nvarchar(512). |
Hr.HealthCardLabPhysical | LaboratoryFindings: LabBiologicalAnalysis, LabBlood, LabUrine, LabRadiological, LabRadiologicalPhysiological, LabAudiometry, LabPulmonaryFunction, LabPsychologicalTests, LabOther (nvarchar(256)). PhysicalExamResults: ExamSensoryOrgans, ExamEye, ExamEnt, ExamSkin, ExamCardiovascular, ExamRespiratory, ExamDigestive, ExamUrogenital, ExamMusculoskeletal, ExamNeurological, ExamPsychiatric, ExamOther (nvarchar(256)), ExamBloodPressure, ExamPulse (nvarchar(16)), ExamHeight, ExamWeight (decimal, dxNumberBox). |
Hr.HealthCardAnamnesis | ComplaintsQuestion: 7 × Complaint* bit dxCheckBox. DiagnosesQuestion: 10 × Diagnosis* bit dxCheckBox. Anamnesis (3–10. sorular): Hospitalized, HadSurgery, HadWorkAccident, OccupationalDiseaseExam, DisabilityPension, UnderTreatment bit dxCheckBox + her birinin …Note nvarchar(512); Smoking, Alcohol nvarchar(16) dxSelectBox (None / Occasionally / Normal / Quit) + SmokingNote, AlcoholNote. |
Hr.HealthCardResult | FitForWorkJob nvarchar(256), FitForWorkCondition nvarchar(512), FitnessDoctorId Guid, ShiftWorkFit, NightWorkFit bit dxCheckBox, ShiftNightDoctorId Guid. Doktor lookup'ı: SELECT \"Id\" AS \"Key\", \"FullName\" AS \"Name\" FROM \"Hr_T_Doctor\" WHERE \"IsDeleted\" = 'false' AND \"IsActive\" = 'true' AND \"TenantId\" = '@TENANTID' ORDER BY \"FullName\". |
Alan başlıkları var olan Abp.Identity.User.HealthCard.{FieldName} anahtarlarıdır; grup başlıkları Abp.Identity.User.HealthCard.{FamilyHistory|PersonalHistory|Immunization|LaboratoryFindings|PhysicalExamResults|ComplaintsQuestion|DiagnosesQuestion|Anamnesis}. Durum seçeneklerinin başlıkları var olan Sas.StaticLookup.{Alive|Disease|Deceased|None|Occasionally|Normal|Quit} anahtarları.
Liste sekmeleri — var olan tablolar, alanlar kolonla aynı:
\n| Ekran | Tablo | Alanlar |
|---|---|---|
Hr.HealthCardPeriodicExamination | Adm_T_UserPeriodicExamination | ExamDate (zorunlu), Examination nvarchar(256) zorunlu, Result nvarchar(512), DoctorId (Hr_T_Doctor), DoctorDiplomaNo nvarchar(50) salt okunur; UserId gizli, ilişki kolonu. |
Hr.HealthCardPatientProtocol | Adm_T_UserPatientProtocol | SequenceNo int, ProtocolDate zorunlu, ProtocolType nvarchar(32) zorunlu (Disease / WorkAccident / OccupationalDisease / Control / Other), ProtocolResult nvarchar(32) (TreatmentDischarged / Rest / Referral), RestDays int, ReferralPlace nvarchar(256), DoctorId; UserId gizli. |
Hr.HealthCardSickLeave | Adm_T_UserSickLeave | StartDate, EndDate zorunlu, Days int zorunlu, SickLeaveType nvarchar(32) zorunlu (Disease / WorkAccident / OccupationalDisease / Maternity), Institution, Clinic nvarchar(256), SickLeaveReason nvarchar(512); UserId gizli. |
Üç tabloda kiracı + audit + soft delete kolonları var (TenantId, Creation*, LastModification*, IsDeleted, Deleter*); silme soft delete.
| Sekme | Hedef ListFormCode | TabType | Menü | İlişki | Ekle / Düzenle / Sil | Yetki yolu |
|---|---|---|---|---|---|---|
| Family / Personal History | Hr.HealthCardHistory | Form | Menüsüz | Id → Id | ✓ / ✓ / – | Hr › Hr.HealthCard › Hr.HealthCardHistory |
| Laboratory - Physical Examination | Hr.HealthCardLabPhysical | Form | Menüsüz | Id → Id | ✓ / ✓ / – | … › Hr.HealthCard › Hr.HealthCardLabPhysical |
| Anamnesis | Hr.HealthCardAnamnesis | Form | Menüsüz | Id → Id | ✓ / ✓ / – | … › Hr.HealthCard › Hr.HealthCardAnamnesis |
| Result | Hr.HealthCardResult | Form | Menüsüz | Id → Id | ✓ / ✓ / – | … › Hr.HealthCard › Hr.HealthCardResult |
| Periodic Examinations | Hr.HealthCardPeriodicExamination | List | Menüsüz | Id → UserId | ✓ / ✓ / ✓ | … › Hr.HealthCard › Hr.HealthCardPeriodicExamination |
| Patient Protocol Book | Hr.HealthCardPatientProtocol | List | Menüsüz | Id → UserId | ✓ / ✓ / ✓ | … › Hr.HealthCard › Hr.HealthCardPatientProtocol |
| Sick Leaves | Hr.HealthCardSickLeave | List | Menüsüz | Id → UserId | ✓ / ✓ / ✓ | … › Hr.HealthCard › Hr.HealthCardSickLeave |
Sekme başlıkları var olan anahtarlar: Abp.Identity.User.HealthCard.{History|LabPhysical|Anamnesis|Result}, Adm.IdentityManagement.{UserPeriodicExamination|UserPatientProtocol|UserSickLeave}. IsRefresh: true, DbType: 11 (Guid). Alt formlarda widget yok; tek gruplu formlarda (Result ve liste sekmeleri) grup başlığı yazılmaz.
Hr.HealthCard (menülü) + 7 menüsüz alt form.Hr altına Hr.HealthCard.Hr.HealthCard (R) + .Create/.Update/.Delete/.Export/.Import; her alt form için aynı küme, ana ekranın altında.Hr.HealthCard, Hr.HealthCard.Title, Hr.HealthCard.Desc ve 7 alt form kodu/başlığı. Alan, grup, sekme ve lookup başlıkları var olan anahtarlardan.Adm.IdentityManagement.User* listeleri aynı veriyi okumaya/yazmaya devam eder; iki ekrandaki değişiklik birbirinde görünür.EditingOptionDto: AllowDetail: true, AllowAdding / AllowUpdating / AllowDeleting: false — satırda yalnızca hazır Detay butonu. SelectionDto.Mode: none, CommandColumnDto: [].ColSpan: 4): Sas.Widget.Total (blue, FaUsers), Sas.Widget.Active (\"IsActive\" = 'true', green, FaCheckCircle), Sas.Widget.Passive (\"IsActive\" = 'false', gray, FaTimesCircle); FROM \"AbpUsers\" WHERE \"TenantId\" = '@TENANTID', SubTitle = Hr.HealthCard.UpdateServiceAddress: list-form-data/update; UpdateFieldsDefaultValue = LastModificationTime @NOW, LastModifierId @USERID. Komutu ekranın alanlarını yazar, kullanıcı kaydının diğer kolonlarına dokunmaz.ColCount: 2 (durum + not yan yana); diğer gruplar ColCount: 2, not/metin alanları ColSpan: 2. Anamnez notları ilgili soru işaretli değilse EditorScript ile salt okunur (Hospitalized → HospitalizedNote, …; Smoking/Alcohol = None → not salt okunur).EditorScript — StartDate / EndDate değişince Days = (EndDate − StartDate) + 1, alan elle değiştirilebilir; EndDate >= StartDate doğrulaması.DoctorId seçilince DoctorDiplomaNo seçilen hekimin DiplomaNo'su ile doldurulur (lookup ek kolonu + EditorScript); ExamDate açılışta bugün.ProtocolDate açılışta bugün; RestDays yalnızca ProtocolResult = Rest, ReferralPlace yalnızca Referral iken düzenlenebilir.DeleteCommand soft delete (IsDeleted = 'true', DeleterId, DeletionTime).AbpUsers'ın sağlık kolonlarını günceller (list-form-data/update); kullanıcı servisi (user-update) kullanılmaz, çünkü parola/rol akışı bu ekranın işi değildir ve yalnızca sağlık kolonları yazılır.Adm.IdentityManagement.User* listelerinin yetkisi AbpIdentity.Users'tır; onları sekme yapmak İK kullanıcısına kullanıcı yönetimi yetkisi vermeyi gerektirirdi. Aynı tablolara Hr.HealthCard dalında yetkili yeni alt formlar açılır.AllowAdding: true: standart gereği; ilişki Id → Id ve kullanıcı kaydı her zaman var olduğundan \"Yeni\" düğmesi hiç görünmez, ikinci kayıt açılmaz.nvarchar(512) URL'dir, görsel alanı sözleşmesi (dxImageUpload, base64 nvarchar(MAX)) ile uyuşmaz; platform tablosunda kolon değişikliği çerçeve dışıdır.Sas.StaticLookup.*, User Detail ile aynı değerler yazılır.IsActive kolonu gösterir.deploy_wizard: HealthCardHistory.jsondeploy_wizard: HealthCardLabPhysical.jsondeploy_wizard: HealthCardAnamnesis.jsondeploy_wizard: HealthCardResult.jsondeploy_wizard: HealthCardPeriodicExamination.jsondeploy_wizard: HealthCardPatientProtocol.jsondeploy_wizard: HealthCardSickLeave.jsondeploy_wizard: HealthCard.jsonEvet
Üretilenler (8 wizard, yeni tablo yok): HealthCardHistory, HealthCardLabPhysical, HealthCardAnamnesis, HealthCardResult (AbpUsers, menüsüz, Form sekmesi, Ekle/Düzenle açık, Sil kapalı) · HealthCardPeriodicExamination, HealthCardPatientProtocol, HealthCardSickLeave (Adm_T_User*, menüsüz, List sekmesi, Ekle/Düzenle/Sil açık, soft delete) · HealthCard (AbpUsers, menülü, yalnızca Detay butonu, 7 alt form sekmesi, Toplam/Aktif/Pasif widget'ı).
Menü / yetki: İnsan Kaynakları › Sağlık Kartları (Hr.HealthCard, FcInspection, /admin/list/Hr.HealthCard). Alt form yetkileri Hr.HealthCard altına taşınır. Yetkiler hiçbir role otomatik atanmaz.
Analizden sapma / varsayımlar:
\nUpdateFieldsDefaultValue (LastModificationTime @NOW, LastModifierId @USERID) wizard cevabında karşılığı olmadığı için yazılamadı; UpdateServiceAddress varsayılan list-form-data/update. Gerekirse ListForm editöründen eklenmeli.UserId gizlenemedi (wizard'da Visible yok); formda yer almaz, gridde kullanıcı adını gösteren lookup ile çıkar. İstenirse ListForm editöründen gizlenebilir.EndDate >= StartDate kuralı ValidationRule olarak yazılamadı; EndDate script'i uyarı (notify) verir.readOnly; JobPosition lookup'ı salt okunur gösterim için cascade'siz yazıldı.DB Migrate bekleyen wizard'lar: HealthCardHistory, HealthCardLabPhysical, HealthCardAnamnesis, HealthCardResult, HealthCardPeriodicExamination, HealthCardPatientProtocol, HealthCardSickLeave, HealthCard. Demo veri yok.
" } ] }