[CLAUDE] Domain+App+Infra: Plan B G-H1 Mig 34 EmployeeProfile + seed 30 demo
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m38s
All checks were successful
Deploy SOLUTION_ERP / build-deploy (push) Successful in 3m38s
Phase 10.1 G-H1 Hồ sơ Nhân sự Foundation — port từ NamGroup CT_NHANSU
(1675 NV, 10 bảng TblNhanVien*) sau anh main chốt S32 4 quyết định
(scope FULL 11 module + DB single schema dbo + reuse Workflow V2 +
chunk per-module Plan riêng). G-H1 CRITICAL FIRST vì depend by 8/11
module Phase 10 sau (Đề xuất/Đơn từ/OT/Đặt xe/Ticket/Dashboard NS/
Chấm công đều cần EmployeeProfile data).
Investigator pre-flight (a103d20) audit NamGroup confirm:
- Main TblNhanVien 105 cols (drop 35 cols duplicate User/UX legacy)
- 5 satellite Phase 10.1 (defer 3 HĐLĐ Plan H2): WorkHistory + Education
+ FamilyRelation + Skill polymorphic Kind + Document
- 6 enum thay catalog FK (Gender/MaritalStatus/EmployeeStatus/...)
- DiaChi dual-write FK + freetext lesson Plan C NamGroup 1675 NV drift
Em main 4 decision chốt:
1. 5 satellite Phase 10.1 (defer 3 HĐLĐ Plan H2)
2. Skill polymorphic Kind enum (gộp 3 NamGroup table)
3. DiaChi 6 FK Province/District/Ward declare nullable + freetext dual-write
ngày đầu (FK constraint defer G-H2 khi catalog scaffold — Implementer
smart decision documented EmployeeProfile.cs comment line 14-17)
4. MaNhanVien format NV/{YYYY}/{Seq:D4} atomic Serializable reset/year
Implementer Case 2 (a8f4567) Pattern 12-bis cross-module mirror PE → Hrm
cookie-cutter scaffold 17 file mới + 4 modified + 3-file mig rule:
Domain (8 file SolutionErp.Domain.Hrm):
- EmployeeProfile.cs (main ~70 cols inherit AuditableEntity, 1-1 UNIQUE User)
- EmployeeWorkHistory.cs + EmployeeEducation.cs + EmployeeFamilyRelation.cs
- EmployeeSkill.cs (polymorphic Kind=Computer/Language/Other)
- EmployeeDocument.cs (IdCard/Passport/Degree/Certificate/LaborContract/Other)
- EmployeeCodeSequence.cs (PK string Prefix, NOT BaseEntity Id Guid)
- Enums.cs (10 enum gọn 1 file)
Application (1 file):
- IEmployeeCodeGenerator.cs interface (mirror IContractCodeGenerator)
Infrastructure (8 file):
- EmployeeCodeGenerator.cs impl IsolationLevel.Serializable transaction
- 7 EF Configuration file (HasIndex UNIQUE UserId/EmployeeCode/Phone +
HasMaxLength + HasColumnType decimal(18,2) + FK Cascade satellite)
- DependencyInjection.cs (M): register IEmployeeCodeGenerator → impl
Persistence (3 file modified + 2 new mig + 1 snapshot):
- IApplicationDbContext.cs (M): +7 DbSet<EmployeeProfile/...>
- ApplicationDbContext.cs (M): +7 DbSet impl
- ApplicationDbContextModelSnapshot.cs (M): EF auto-update
- 20260526110207_AddEmployeeProfiles.cs (NEW, EF auto-gen)
- 20260526110207_AddEmployeeProfiles.Designer.cs (NEW, EF auto-gen)
DbInitializer.cs (M, em main solo Task 3b ~90 LOC):
- using SolutionErp.Domain.Hrm import added
- SeedDemoEmployeeProfilesAsync method appended (end of class)
- Register call after SeedDemoUsersAsync line 88 (depend user exist first)
- NOT gated DemoSeed:Disabled flag (infrastructure data per gotcha #51 lesson)
- 30 demo profile mirror 30 user @solutions.com.vn + sequential code
NV/{YYYY}/0001..0030 + placeholder masked CMND/BHXH/Bank (bro UAT update
qua FE Page Task 5) + EmployeeCodeSequence row LastSeq=30 → production
gen tiếp 0031+
Verify:
- dotnet build: 0 err 2 unrelated warn DocxRenderer (2.49s + 7.86s rebuild)
- dotnet ef database update _Dev: Mig 34 applied (top of __EFMigrationsHistory)
- dotnet test: **120/120 PASS** baseline preserved (no test add Phase 10
test-after per §7 UAT mode — test bundle defer Task 4+5+6 done)
Stats target Phase 10 end: 33→42 mig (+9 Mig 34-42), 60→85 tables (+25),
~148→250 endpoint (+100), 38→60 FE pages (+22). Current after this commit:
33→34 mig + 60→66 tables + endpoint/FE unchanged (G-H1 Task 4+5 next).
Pattern reusable cross-project:
- Pattern 12-bis cross-module entity cookie-cutter mirror reinforced 3×
(S29 Plan B Contract V2 + S33 Plan B G-H1 EmployeeProfile)
- Infrastructure seed OUT of DemoSeed gate (gotcha #51 lesson, mirror Mig 32
SeedSampleContractWorkflowV2)
- DiaChi dual-write FK + freetext từ ngày đầu (NamGroup 1675 NV drift lesson)
Pending Plan B G-H1 Phase 2 (chờ anh main signal kick off):
- Task 4 — Implementer BE CQRS handler + 6 endpoint controller
- Task 5 — Implementer FE 2 app EmployeesPage 3-panel + 6 section tabs
- Task 6 — Em main Permission menu Hrm_HoSo* seed
- Task 7 — Reviewer pre-commit + CICD post-deploy verify
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
15
src/Backend/SolutionErp.Domain/Hrm/EmployeeCodeSequence.cs
Normal file
15
src/Backend/SolutionErp.Domain/Hrm/EmployeeCodeSequence.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Sequence generator cho MaNhanVien format "NV/{YYYY}/{Seq:D4}".
|
||||
// Prefix = "NV/2026" (per year), LastSeq tăng dần.
|
||||
// Reset per năm: prefix "NV/2027" sẽ start LastSeq=1 lại.
|
||||
// Update atomic qua transaction SERIALIZABLE (mirror ContractCodeSequence).
|
||||
//
|
||||
// PK là Prefix string NOT Id Guid (mirror Contract/PE pattern). KHÔNG inherit
|
||||
// BaseEntity vì không cần audit fields trên sequence table.
|
||||
public class EmployeeCodeSequence
|
||||
{
|
||||
public string Prefix { get; set; } = string.Empty;
|
||||
public int LastSeq { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
}
|
||||
26
src/Backend/SolutionErp.Domain/Hrm/EmployeeDocument.cs
Normal file
26
src/Backend/SolutionErp.Domain/Hrm/EmployeeDocument.cs
Normal file
@ -0,0 +1,26 @@
|
||||
using SolutionErp.Domain.Common;
|
||||
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Satellite — File scan CCCD/Bằng/Chứng chỉ/HĐLĐ (NamGroup `CT_TAILIEU`).
|
||||
// FK Cascade từ EmployeeProfile.
|
||||
//
|
||||
// File lưu local storage qua IFileStorage (mirror PurchaseEvaluationAttachment
|
||||
// + ContractAttachment pattern). FilePath relative root storage dir.
|
||||
public class EmployeeDocument : AuditableEntity
|
||||
{
|
||||
public Guid EmployeeProfileId { get; set; }
|
||||
|
||||
public EmployeeDocumentType DocumentType { get; set; }
|
||||
|
||||
public string FileName { get; set; } = string.Empty; // Tên file gốc khi upload
|
||||
public string FilePath { get; set; } = string.Empty; // Relative path trong storage
|
||||
public long FileSize { get; set; } // Byte
|
||||
public string ContentType { get; set; } = string.Empty; // MIME (vd "application/pdf")
|
||||
|
||||
public DateOnly? IssueDate { get; set; } // Ngày cấp
|
||||
public DateOnly? ExpiryDate { get; set; } // Ngày hết hạn
|
||||
public string? Notes { get; set; }
|
||||
|
||||
public EmployeeProfile? EmployeeProfile { get; set; }
|
||||
}
|
||||
25
src/Backend/SolutionErp.Domain/Hrm/EmployeeEducation.cs
Normal file
25
src/Backend/SolutionErp.Domain/Hrm/EmployeeEducation.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using SolutionErp.Domain.Common;
|
||||
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Satellite — Quá trình học vấn (NamGroup `CT_QUATRINHHOCVAN`).
|
||||
// FK Cascade từ EmployeeProfile.
|
||||
public class EmployeeEducation : AuditableEntity
|
||||
{
|
||||
public Guid EmployeeProfileId { get; set; }
|
||||
|
||||
public string SchoolName { get; set; } = string.Empty;
|
||||
public string? Major { get; set; } // Chuyên ngành
|
||||
|
||||
public DegreeLevel? DegreeLevel { get; set; } // Trình độ (CĐ/ĐH/Th.S/TS)
|
||||
public EducationMode? EducationMode { get; set; } // Hình thức (Chính quy/Tại chức/Từ xa)
|
||||
public GradeLevel? GradeLevel { get; set; } // Xếp loại (TB/Khá/Giỏi)
|
||||
|
||||
public DateOnly? FromDate { get; set; }
|
||||
public DateOnly? ToDate { get; set; }
|
||||
public DateOnly? CertificateIssueDate { get; set; } // Ngày cấp bằng
|
||||
|
||||
public string? Notes { get; set; }
|
||||
|
||||
public EmployeeProfile? EmployeeProfile { get; set; }
|
||||
}
|
||||
20
src/Backend/SolutionErp.Domain/Hrm/EmployeeFamilyRelation.cs
Normal file
20
src/Backend/SolutionErp.Domain/Hrm/EmployeeFamilyRelation.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using SolutionErp.Domain.Common;
|
||||
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Satellite — Quan hệ gia đình (NamGroup `CT_QUANHEGIADINH`).
|
||||
// FK Cascade từ EmployeeProfile.
|
||||
public class EmployeeFamilyRelation : AuditableEntity
|
||||
{
|
||||
public Guid EmployeeProfileId { get; set; }
|
||||
|
||||
public string FullName { get; set; } = string.Empty;
|
||||
public FamilyRelationKind Relationship { get; set; }
|
||||
public int? BirthYear { get; set; } // Năm sinh (chỉ year, không cần DateOnly đủ)
|
||||
|
||||
public string? Occupation { get; set; } // Nghề nghiệp
|
||||
public string? CurrentAddress { get; set; } // Địa chỉ hiện tại
|
||||
public string? Phone { get; set; }
|
||||
|
||||
public EmployeeProfile? EmployeeProfile { get; set; }
|
||||
}
|
||||
137
src/Backend/SolutionErp.Domain/Hrm/EmployeeProfile.cs
Normal file
137
src/Backend/SolutionErp.Domain/Hrm/EmployeeProfile.cs
Normal file
@ -0,0 +1,137 @@
|
||||
using SolutionErp.Domain.Common;
|
||||
using SolutionErp.Domain.Identity;
|
||||
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Phase 10.1 G-H1 — Hồ sơ Nhân sự main entity (Mig 34).
|
||||
// 1-1 với User qua UserId UNIQUE FK. AuditableEntity inherit cho soft delete.
|
||||
//
|
||||
// Port từ NamGroup CT_NHANSU (1675 NV) — Investigator field map đã verified với
|
||||
// 10 NamGroup table. 5 satellite entity Phase 10.1 (defer 3 HĐLĐ Plan H2 sau):
|
||||
// EmployeeWorkHistory + EmployeeEducation + EmployeeFamilyRelation +
|
||||
// EmployeeSkill (polymorphic Kind) + EmployeeDocument.
|
||||
//
|
||||
// DiaChi dual-write 6 FK + freetext: spec gốc declare FK Province/District/Ward
|
||||
// nhưng catalog chưa scaffold trong Mig 34 — DEFER FK constraint sang G-H2 khi
|
||||
// thêm catalog Province/District/Ward. Plain nullable Guid? lưu giá trị tham
|
||||
// chiếu tương lai + freetext snapshot song hành ngày đầu (lesson NamGroup drift).
|
||||
//
|
||||
// MaNhanVien format "NV/{YYYY}/{Seq:D4}" gen atomic SERIALIZABLE qua
|
||||
// IEmployeeCodeGenerator (mirror IContractCodeGenerator pattern).
|
||||
public class EmployeeProfile : AuditableEntity
|
||||
{
|
||||
// ===== Identity link =====
|
||||
// 1-1 với User.Id (UNIQUE index). NV phải có user account login system.
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
// Mã nhân viên format "NV/2026/0001" — gen atomic per-year reset sequence.
|
||||
public string EmployeeCode { get; set; } = string.Empty;
|
||||
|
||||
// ===== Trạng thái + phân loại =====
|
||||
public EmployeeStatus EmployeeStatus { get; set; } = EmployeeStatus.Active;
|
||||
public Gender? Gender { get; set; }
|
||||
public MaritalStatus? MaritalStatus { get; set; }
|
||||
public EmployeeType? EmployeeType { get; set; }
|
||||
|
||||
// ===== Thông tin cá nhân cơ bản =====
|
||||
public DateOnly? DateOfBirth { get; set; }
|
||||
public string? BirthPlace { get; set; } // Nơi sinh
|
||||
public string? Hometown { get; set; } // Nguyên quán
|
||||
|
||||
// ===== Liên hệ =====
|
||||
public string? Phone { get; set; } // SDT cá nhân (INDEX)
|
||||
public string? PersonalEmail { get; set; } // Email cá nhân (khác email login)
|
||||
public string? InternalPhone { get; set; } // SDT nội bộ
|
||||
|
||||
// ===== Dân tộc + tôn giáo + quốc tịch =====
|
||||
public string? Ethnicity { get; set; } // Dân tộc
|
||||
public string? Religion { get; set; } // Tôn giáo
|
||||
public string Nationality { get; set; } = "Việt Nam";
|
||||
|
||||
// ===== Giấy tờ tuỳ thân =====
|
||||
public string? IdCardNumber { get; set; } // CCCD/CMND
|
||||
public DateOnly? IdCardIssueDate { get; set; }
|
||||
public string? IdCardIssuePlace { get; set; }
|
||||
|
||||
public string? TaxCode { get; set; } // MST cá nhân
|
||||
public string? SocialInsuranceNumber { get; set; } // Số sổ BHXH
|
||||
public string? PassportNumber { get; set; }
|
||||
|
||||
// ===== Địa chỉ HKTT (Hộ khẩu thường trú) — dual-write FK + freetext =====
|
||||
// FK Province/District/Ward DEFER G-H2 khi catalog scaffold (plain Guid? ngày đầu).
|
||||
public string? PermanentAddressText { get; set; } // Freetext snapshot full (vd "123 Nguyễn Văn A, P. Bến Nghé, Q.1, TP.HCM")
|
||||
public Guid? PermanentProvinceId { get; set; } // FK→Provinces (defer)
|
||||
public Guid? PermanentDistrictId { get; set; } // FK→Districts (defer)
|
||||
public Guid? PermanentWardId { get; set; } // FK→Wards (defer)
|
||||
public string? StreetAddressPermanent { get; set; } // Số nhà + tên đường
|
||||
|
||||
// ===== Địa chỉ Tạm trú — dual-write FK + freetext =====
|
||||
public string? TemporaryAddressText { get; set; }
|
||||
public Guid? TemporaryProvinceId { get; set; }
|
||||
public Guid? TemporaryDistrictId { get; set; }
|
||||
public Guid? TemporaryWardId { get; set; }
|
||||
public string? StreetAddressTemporary { get; set; }
|
||||
|
||||
// ===== Tuyển dụng + nghỉ việc =====
|
||||
public DateOnly? HireDate { get; set; } // Ngày vào làm
|
||||
public DateOnly? ResignDate { get; set; } // Ngày nghỉ việc
|
||||
|
||||
// ===== Liên hệ khẩn cấp (inline NOT satellite — chỉ 1 contact) =====
|
||||
public string? EmergencyContactName { get; set; }
|
||||
public string? EmergencyContactPhone { get; set; }
|
||||
public string? EmergencyContactAddress { get; set; }
|
||||
|
||||
// ===== Trình độ + chức danh =====
|
||||
public string? Qualification { get; set; } // Trình độ chuyên môn cao nhất (vd "Thạc sĩ XD")
|
||||
public string? AcademicTitle { get; set; } // Học hàm/học vị (vd "PGS.TS.")
|
||||
|
||||
// ===== Vị trí công tác =====
|
||||
public string? WorkLocation { get; set; } // Nơi làm việc (công trường / VP)
|
||||
public string? TimekeepingCode { get; set; } // Mã chấm công (sync máy chấm)
|
||||
|
||||
// ===== Tài khoản ngân hàng =====
|
||||
public string? BankAccount { get; set; }
|
||||
public string? BankName { get; set; }
|
||||
public string? BankBranch { get; set; }
|
||||
|
||||
// ===== Sức khoẻ =====
|
||||
public int? HeightCm { get; set; }
|
||||
public int? WeightKg { get; set; }
|
||||
public string? BloodType { get; set; } // "A+", "O-", "AB" ...
|
||||
|
||||
// ===== Lương =====
|
||||
// decimal NOT double (tránh floating point error tài chính).
|
||||
public decimal? BaseSalary { get; set; } // Lương cơ bản
|
||||
public decimal? TotalSalary { get; set; } // Tổng lương (bao gồm phụ cấp)
|
||||
|
||||
// ===== Phép =====
|
||||
// decimal(5,2) — vd 12.5 ngày phép.
|
||||
public decimal? AnnualLeaveDays { get; set; } // Phép năm
|
||||
public decimal? RemainingLeaveDays { get; set; } // Phép còn lại
|
||||
public decimal? CompensatoryLeaveDays { get; set; } // Phép bù
|
||||
public decimal? SeniorityLeaveDays { get; set; } // Phép thâm niên
|
||||
|
||||
// ===== BHXH + BHYT =====
|
||||
public DateOnly? SocialInsuranceStartDate { get; set; } // Ngày bắt đầu đóng BHXH
|
||||
public string? MedicalRegistrationPlace { get; set; } // Nơi đăng ký KCB ban đầu BHYT
|
||||
|
||||
// ===== Đoàn thể =====
|
||||
public bool IsCommunistParty { get; set; }
|
||||
public DateOnly? CommunistPartyJoinDate { get; set; }
|
||||
public bool IsYouthUnion { get; set; }
|
||||
public DateOnly? YouthUnionJoinDate { get; set; }
|
||||
public bool IsTradeUnion { get; set; }
|
||||
public DateOnly? TradeUnionJoinDate { get; set; }
|
||||
|
||||
// ===== Khác =====
|
||||
public string? PhotoUrl { get; set; } // URL ảnh đại diện
|
||||
public string? Notes { get; set; } // Ghi chú free text
|
||||
|
||||
// ===== Navigation =====
|
||||
public User? User { get; set; }
|
||||
public ICollection<EmployeeWorkHistory> WorkHistories { get; set; } = new List<EmployeeWorkHistory>();
|
||||
public ICollection<EmployeeEducation> Educations { get; set; } = new List<EmployeeEducation>();
|
||||
public ICollection<EmployeeFamilyRelation> FamilyRelations { get; set; } = new List<EmployeeFamilyRelation>();
|
||||
public ICollection<EmployeeSkill> Skills { get; set; } = new List<EmployeeSkill>();
|
||||
public ICollection<EmployeeDocument> Documents { get; set; } = new List<EmployeeDocument>();
|
||||
}
|
||||
30
src/Backend/SolutionErp.Domain/Hrm/EmployeeSkill.cs
Normal file
30
src/Backend/SolutionErp.Domain/Hrm/EmployeeSkill.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using SolutionErp.Domain.Common;
|
||||
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Satellite POLYMORPHIC — gộp 3 NamGroup table:
|
||||
// CT_KYNANGVITINH (Kind=Computer)
|
||||
// CT_NGOAINGU (Kind=Language)
|
||||
// CT_KYNANGKHAC (Kind=Other)
|
||||
// Decision em main: 1 entity polymorphic discriminator Kind enum để tránh
|
||||
// 3 satellite riêng cho cùng pattern "skill".
|
||||
//
|
||||
// Field semantic mapping per Kind:
|
||||
// Computer: Name=TenPhanMem (vd "AutoCAD"), Level=TrinhDo (vd "Thành thạo")
|
||||
// Language: Name=TenNgoaiNgu (vd "Tiếng Anh"), LanguageId=ISO code "en"|"fr"|"zh"|"jp"|"vi",
|
||||
// Level=BangCapChungChi (vd "IELTS 7.0", "TOEIC 800")
|
||||
// Other: Name=TenKyNangKhac (vd "Lãnh đạo nhóm"), Level=free text
|
||||
//
|
||||
// FK Cascade từ EmployeeProfile.
|
||||
public class EmployeeSkill : AuditableEntity
|
||||
{
|
||||
public Guid EmployeeProfileId { get; set; }
|
||||
|
||||
public SkillKind Kind { get; set; }
|
||||
|
||||
public string Name { get; set; } = string.Empty; // Required (semantic theo Kind)
|
||||
public string? LanguageId { get; set; } // ISO code chỉ set khi Kind=Language ("en"/"fr"/...)
|
||||
public string? Level { get; set; } // TrinhDo / BangCapChungChi / free text
|
||||
|
||||
public EmployeeProfile? EmployeeProfile { get; set; }
|
||||
}
|
||||
23
src/Backend/SolutionErp.Domain/Hrm/EmployeeWorkHistory.cs
Normal file
23
src/Backend/SolutionErp.Domain/Hrm/EmployeeWorkHistory.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using SolutionErp.Domain.Common;
|
||||
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Satellite — Quá trình công tác (NamGroup `CT_QUATRINHCONGTAC`).
|
||||
// Cookie-cutter port. FK Cascade từ EmployeeProfile (xoá NV → xoá history).
|
||||
public class EmployeeWorkHistory : AuditableEntity
|
||||
{
|
||||
public Guid EmployeeProfileId { get; set; }
|
||||
|
||||
public string CompanyName { get; set; } = string.Empty;
|
||||
public string? CompanyAddress { get; set; }
|
||||
public string? Industry { get; set; } // Ngành nghề
|
||||
|
||||
public DateOnly? FromDate { get; set; }
|
||||
public DateOnly? ToDate { get; set; }
|
||||
|
||||
public string? JobTitle { get; set; } // Chức danh
|
||||
public string? JobDescription { get; set; } // Mô tả công việc
|
||||
public string? ResignReason { get; set; } // Lý do nghỉ
|
||||
|
||||
public EmployeeProfile? EmployeeProfile { get; set; }
|
||||
}
|
||||
84
src/Backend/SolutionErp.Domain/Hrm/Enums.cs
Normal file
84
src/Backend/SolutionErp.Domain/Hrm/Enums.cs
Normal file
@ -0,0 +1,84 @@
|
||||
namespace SolutionErp.Domain.Hrm;
|
||||
|
||||
// Phase 10.1 G-H1 — Hồ sơ Nhân sự enum set. 10 enum gọn 1 file.
|
||||
// Port từ NamGroup CT_NHANSU (1675 NV) catalog. Int storage (TS6 erasableSyntaxOnly
|
||||
// FE mirror dùng const-object pattern, NOT enum).
|
||||
|
||||
public enum EmployeeStatus
|
||||
{
|
||||
Active = 1, // Đang làm việc
|
||||
OnLeave = 2, // Nghỉ phép / Tạm hoãn HĐ
|
||||
Resigned = 3, // Đã nghỉ việc
|
||||
}
|
||||
|
||||
public enum Gender
|
||||
{
|
||||
Male = 1,
|
||||
Female = 2,
|
||||
Other = 3,
|
||||
}
|
||||
|
||||
public enum MaritalStatus
|
||||
{
|
||||
Single = 1, // Độc thân
|
||||
Married = 2, // Đã kết hôn
|
||||
Divorced = 3, // Đã ly hôn
|
||||
Widowed = 4, // Goá
|
||||
}
|
||||
|
||||
public enum EmployeeType
|
||||
{
|
||||
FullTime = 1, // Chính thức
|
||||
PartTime = 2, // Bán thời gian
|
||||
Intern = 3, // Thực tập
|
||||
Contractor = 4, // Khoán việc
|
||||
}
|
||||
|
||||
public enum DegreeLevel
|
||||
{
|
||||
College = 1, // Cao đẳng
|
||||
Bachelor = 2, // Đại học
|
||||
Master = 3, // Thạc sĩ
|
||||
PhD = 4, // Tiến sĩ
|
||||
}
|
||||
|
||||
public enum EducationMode
|
||||
{
|
||||
FullTime = 1, // Chính quy
|
||||
PartTime = 2, // Tại chức
|
||||
Distance = 3, // Từ xa
|
||||
}
|
||||
|
||||
public enum GradeLevel
|
||||
{
|
||||
Average = 1, // Trung bình
|
||||
Good = 2, // Khá
|
||||
Excellent = 3, // Giỏi
|
||||
}
|
||||
|
||||
public enum FamilyRelationKind
|
||||
{
|
||||
Father = 1,
|
||||
Mother = 2,
|
||||
Spouse = 3, // Vợ/Chồng
|
||||
Child = 4, // Con
|
||||
Sibling = 5, // Anh/Chị/Em ruột
|
||||
Other = 99, // Khác
|
||||
}
|
||||
|
||||
public enum SkillKind
|
||||
{
|
||||
Computer = 1, // Kỹ năng vi tính (TenPhanMem + TrinhDo)
|
||||
Language = 2, // Ngoại ngữ (LanguageId + BangCapChungChi)
|
||||
Other = 3, // Kỹ năng khác (TenKyNangKhac + Level free text)
|
||||
}
|
||||
|
||||
public enum EmployeeDocumentType
|
||||
{
|
||||
IdCard = 1, // CMND/CCCD scan
|
||||
Passport = 2, // Hộ chiếu
|
||||
Degree = 3, // Bằng cấp
|
||||
Certificate = 4, // Chứng chỉ
|
||||
LaborContract = 5, // HĐLĐ
|
||||
Other = 99,
|
||||
}
|
||||
Reference in New Issue
Block a user