Cấu trúc Dữ liệu: Module HRM
Tài liệu này chi tiết về cấu trúc cơ sở dữ liệu cho module HRM, bao gồm các thực thể cốt lõi, mối quan hệ và kiểu dữ liệu.
1. Tổng quan
Module HRM sử dụng cơ sở dữ liệu PostgreSQL với Drizzle ORM. Nó tuân theo kiến trúc đa thuê bao nơi dữ liệu được cô lập nghiêm ngặt bởi orgId (ID Tổ chức), được đồng bộ với sổ đăng ký tổ chức của Shell.
Mô hình Tên miền Cốt lõi
2. Định nghĩa các Bảng
organizations
Được đồng bộ từ Shell; lưu trữ các cài đặt cụ thể của HRM như hạn mức chuyển tiếp nghỉ phép.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | uuid | PK. Khớp với organization_id của Shell. |
name | text | Tên tổ chức. |
carry_forward_limit | integer | Số ngày tối đa được phép chuyển sang năm sau (mặc định: 5). |
departments
Các đơn vị tổ chức trong công ty.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | uuid | PK. |
org_id | uuid | FK đến organizations.id. |
name | text | Tên bộ phận. |
parent_department_id | uuid | Tham chiếu chính nó cho phân cấp. |
employees
Bản ghi cốt lõi cho mọi nhân viên.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | uuid | PK. ID nội bộ của HRM. |
org_id | uuid | FK đến organizations.id. |
user_id | uuid | Shell User ID (dùng cho đồng bộ Auth). |
job_title | text | Chức danh chính thức. |
department_id | uuid | FK đến departments.id. |
manager_id | uuid | FK đến employees.id. |
status | enum | active, on_leave, inactive, new. |
phone | text | Số điện thoại công việc. |
emergency_contact | jsonb | Dữ liệu liên hệ khẩn cấp có cấu trúc. |
leave_balances
Theo dõi thời gian nghỉ phép có sẵn cho mỗi nhân viên.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | uuid | PK. |
employee_id | uuid | FK đến employees.id. |
leave_type | enum | annual, sick, unpaid, public_holiday_top_up. |
total_days | decimal | Tổng số ngày được cấp trong năm. |
used_days | decimal | Số ngày đã sử dụng. |
carry_forward | decimal | Số ngày được chuyển từ năm trước. |
leave_requests
Các yêu cầu vắng mặt cụ thể.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | uuid | PK. |
org_id | uuid | FK đến organizations.id. |
employee_id | uuid | FK đến employees.id. |
leave_type | enum | Giống như leave_balances. |
start_date | date | Ngày bắt đầu vắng mặt. |
end_date | date | Ngày kết thúc vắng mặt. |
status | enum | pending, approved, rejected, cancelled. |
working_days | integer | Thời lượng tính toán (ngày làm việc). |
approved_by | uuid | FK đến employees.id. |
3. Các Kiểu Liệt kê (Enums)
employee_status
active: Đang làm việc toàn thời gian.on_leave: Đang nghỉ phép dài hạn.inactive: Đã nghỉ việc hoặc bị chấm dứt.new: Đang trong giai đoạn onboarding.
leave_type
annual: Nghỉ phép năm tiêu chuẩn.sick: Nghỉ ốm.unpaid: Nghỉ không lương.public_holiday_top_up: Tuân thủ quy định cụ thể của luật lao động VN.
4. Cô lập Đa thuê bao
Tất cả các truy vấn PHẢI bao gồm bộ lọc orgId. Trong HRM API, điều này được thực thi bởi EmployeeService và LeaveService bằng cách trích xuất organizationId từ Platform JWT.
typescript
// Mẫu Cô lập Ví dụ
const results = await db.select()
.from(employees)
.where(eq(employees.orgId, orgId));