# Data Dictionary for HRM Database
## MODULE 1: QUẢN LÝ TỔ CHỨC VÀ NHÂN SỰ
### 1. CongTy
**Mục đích**: Lưu trữ thông tin công ty.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| MaCongTy | character varying | Mã công ty. |
| TenCongTy(vi) | character varying | Tên công ty (tiếng Việt). |
| MaSoThue | character varying | Mã số thuế. |
| DiaChi(vi) | text | Địa chỉ (tiếng Việt). |
| TenCongTy(en) | character varying | Tên công ty (tiếng Anh). |
| DiaChi(en) | text | Địa chỉ (tiếng Anh). |
| TenVietTat | character varying | Tên viết tắt. |
| Fax | character varying | Số fax. |
| SoDienThoai | character varying | Số điện thoại. |
| NguoiDaiDien | character varying | Người đại diện. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
---
### 2. PhongBan
**Mục đích**: Quản lý phòng ban/bộ phận.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `congty_id` → `CongTy(id)`
- `phongbancha_id` → `PhongBan(id)` (tự tham chiếu)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| MaPhongBan | character varying | Mã phòng ban. |
| TenPhongBan | character varying | Tên phòng ban. |
| Level | integer | Cấp độ phòng ban. |
| GhiChu | text | Ghi chú. |
| TrangThai | character varying | Trạng thái (Hoạt động, Tạm dừng, Đã giải thể). |
| create_at | timestamp with time zone | Thời điểm tạo (trùng lặp với created_at). |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| congty_id | bigint | Khóa ngoại tới bảng CongTy. |
| phongbancha_id | bigint | ID phòng ban cha (cấu trúc cây)-setup quan hệ cho các phòng ban cha-con. |
---
### 3. ChucVu
**Mục đích**: Quản lý chức vụ/vị trí công việc trong công ty.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaChucVu | character varying | Mã chức vụ. |
| TenViTriCongViec | character varying | Tên chức vụ. |
| GhiChu | text | Ghi chú. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
---
### 4. NhanVien
**Mục đích**: Quản lý thông tin nhân viên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `user_id` → `public.auth_user(id)`
- `loaivn` → `Loainhanvien(id)`
- `nganhang` → `Nganhang(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaNhanVien | character varying | Mã nhân viên. |
| HoVaTen | character varying | Họ và tên. |
| Email | character varying | Email. |
| SoDienThoai | character varying | Số điện thoại. |
| DiaChi | text | Địa chỉ. |
| GioiTinh | character varying | Giới tính. |
| NgaySinh | date | Ngày sinh. |
| SoCCCD | character varying | Số CCCD. |
| NgayVaoLam | date | Ngày vào làm. |
| LoaiNV | character varying | Loại nhân viên (Cộng tác viên, Nhân viên, Thời vụ,...). |
| TrangThaiNV | character varying | Trạng thái nhân viên (Chính thức, Hợp đồng, Thử việc, Sa thải,...). |
| Ngân hàng | integer | Khóa ngoại tới bảng Nganhang. |
| TenNganHang | character varying | Tên ngân hàng. |
| SoTKNganHang | character varying | Số tài khoản ngân hàng. |
| TenTKNganHang | character varying | Tên tài khoản ngân hàng (Mỗi NV có 1 tk ngân hàng). |
| MaSoThue | character varying | Mã số thuế. |
| TrangThai | character varying | Trạng thái tổng quát (active of inactive). |
| user_id | integer | Khóa ngoại tới bảng auth_user. |
**Chi tiết trường dữ liệu**:
- `TrangThaiNV`: Trạng thái nhân viên
- **Đang làm**: Nhân viên đang làm việc bình thường
- **Thử việc**: Đang trong thời gian thử việc
- **Đã nghỉ**: Đã nghỉ việc
- **Nghỉ thai sản**: Đang nghỉ thai sản
- **Nghỉ không lương**: Đang nghỉ không lương
- `TrangThai`: Trạng thái bản ghi
- **Active**: Bản ghi đang hoạt động
- **Inactive**: Bản ghi đã xóa (soft delete)
---
### 5. LichSuCongTac
**Mục đích**: Lưu trữ lịch sử công tác của nhân viên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `nhanvien_id` → `NhanVien(id)`
- `phongban_id` → `PhongBan(id)`
- `chucvu_id` → `ChucVu(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| BatDau | date | Ngày bắt đầu công tác. |
| KetThuc | date | Ngày kết thúc công tác. |
| NoiCongTac | character varying | Nơi công tác. |
| TrangThai | character varying | Trạng thái (Đang công tác, Đã kết thúc). |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| phongban_id | bigint | Khóa ngoại tới bảng PhongBan. |
| chucvu_id | bigint | Khóa ngoại tới bảng ChucVu. |
---
## MODULE 2: HỢP ĐỒNG LAO ĐỘNG
### 6. HopDong
**Mục đích**: Quản lý loại hợp đồng lao động.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaHopDong | character varying | Mã hợp đồng. |
| TenHopDong | character varying | Tên hợp đồng. |
| FileHopDong | character varying | Đường dẫn file hợp đồng. |
| LoaiHopDong | character varying | Loại hợp đồng (e.g., 'full-time'). |
| GhiChu | text | Ghi chú. |
**Chi tiết trường dữ liệu**:
- `LoaiHopDong`: Loại hợp đồng
- **Hợp đồng thử việc**: 1-2 tháng
- **Hợp đồng xác định thời hạn**: 1-3 năm
- **Hợp đồng không xác định thời hạn**: Vô thời hạn
- **Hợp đồng thời vụ**: Theo dự án
---
### 7. LichSuHopDong
**Mục đích**: Lưu trữ lịch sử hợp đồng của nhân viên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `hopdong_id` → `HopDong(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| SoHopDong | character varying | Số hợp đồng. |
| FileHopDong | character varying | Đường dẫn file hợp đồng. |
| NgayHetHan | date | Ngày hết hạn. |
| NgayBatDau | date | Ngày bắt đầu. |
| NgayKyHopDong | date | Ngày ký hợp đồng. |
| LuongCoBan | double precision | Lương cơ bản. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'expired'). |
| hopdong_id | bigint | Khóa ngoại tới bảng HopDong. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
**Chi tiết trường dữ liệu**:
- `TrangThai`: Trạng thái hợp đồng
- **Đang hiệu lực**: Hợp đồng đang có hiệu lực
- **Hết hạn**: Hợp đồng đã hết hạn
- **Đã thanh lý**: Thanh lý trước hạn
---
## MODULE 3: QUẢN LÝ CA LÀM VIỆC VÀ LỊCH LÀM VIỆC
### 8. CaLamViec
**Mục đích**: Quản lý thông tin ca làm việc.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaCaLamViec | character varying | Mã ca làm việc. |
| TenCaLamViec | character varying | Tên ca làm việc. |
| LoaiChamCong | character varying | Loại chấm công (e.g., 'Cố định', 'Linh động', 'Tự do'). |
| SoKhungGioTrongCa | smallint | Số khung giờ trong ca. |
| SoLanChamCongTrongNgay | smallint | Số lần chấm công trong ngày. |
| CoNghiTrua | boolean | Có nghỉ trưa trong ca hay không. |
| CongCuaCaLamViec | smallint | Công của ca (số ngày công). |
| CoCanCheckout | boolean | Yêu cầu checkout hay không. |
| TongThoiGianLamViecCuaCa | real | Tổng thời gian làm việc của ca (giờ). |
| TrangThai | character varying | Trạng thái ca (e.g., 'active', 'inactive'). |
**Chi tiết trường dữ liệu**:
- `LoaiChamCong`: Loại chấm công
- **Cố định**
- **Linh động**
- **Tự do**
---
### 9. KhungGioLamViec
**Mục đích**: Quản lý khung giờ làm việc của ca.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `calamviec_id` → `CaLamViec(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| ThoiGianBatDau | time with time zone | Giờ bắt đầu. |
| ThoiGianKetThuc | time with time zone | Giờ kết thúc. |
| CongCuaKhungGio | smallint | Công của khung giờ. |
| ThoiGianChoPhepDenMuon | real | Thời gian cho phép đến muộn. |
| ThoiGianDiMuonKhongTinhChamCong | real | Thời gian đi muộn không tính chấm công. |
| ThoiGianChoPhepChamCongSomNhat | time with time zone | Giờ sớm nhất cho phép chấm công. |
| ThoiGianChoPhepVeSomNhat | real | Thời gian sớm nhất cho phép về sớm. |
| ThoiGianVeSomKhongTinhChamCong | real | Thời gian về sớm không tính chấm công. |
| ThoiGianChoPhepVeMuonNhat | time with time zone | Giờ muộn nhất cho phép về muộn. |
| YeuCauChamCong | boolean | Yêu cầu chấm công hay không. |
| ThoiGianLamViecToiThieu | real | Thời gian làm việc tối thiểu. |
| GhiChu | text | Ghi chú. |
| calamviec_id | bigint | Khóa ngoại tới bảng CaLamViec. |
---
### 10. KhungGioNghiTrua (KhungGioNghi)
**Mục đích**: Quản lý khung giờ nghỉ trưa của ca làm việc.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `calamviec_id` → `CaLamViec(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| GioBatDau | time with time zone | Giờ bắt đầu nghỉ trưa. |
| GioKetThuc | time with time zone | Giờ kết thúc nghỉ trưa. |
| GhiChu | text | Ghi chú. |
| calamviec_id | bigint | Khóa ngoại tới bảng CaLamViec. |
---
### 11. LichNghi
**Mục đích**: Quản lý lịch nghỉ lễ, tết.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaLichNghi | character varying | Mã lịch nghỉ. |
| TenLichNghi | character varying | Tên lịch nghỉ. |
| LoaiLichNghi | character varying | Loại lịch nghỉ (e.g., 'holiday', 'weekend'). |
| Ngay | date | Ngày nghỉ. |
| LoaiNghi | character varying | Loại nghỉ (e.g., 'Nghỉ cả ngày', 'Nghỉ nửa ngày'). |
| HeSoLamViec | real | Hệ số làm việc. |
| ApDungTinhLuong | boolean | Có áp dụng tính lương. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
**Chi tiết trường dữ liệu**:
- `LoaiNghi`: Loại nghỉ
- **Nghỉ cả ngày**
- **Nghỉ nửa ngày**
- `LoaiLichNghi`: Loại lịch nghỉ
- **Nghỉ cuối tuần**
- **Nghỉ lễ**
- `HeSoLamViec`: Khi thêm Lịch Nghỉ có `LoaiLichNghi` là 'holiday' thì sẽ là Hệ số công so với ngày thường
---
### 12. LichLamViec
**Mục đích**: Quản lý lịch làm việc tổng quát.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `lichnghi_id` → `LichNghi(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaLichLamViec | character varying | Mã lịch làm việc. |
| TenLichLamViec | character varying | Tên lịch làm việc. |
| LoaiKichBanLamViec | character varying | Loại kịch bản làm việc (e.g., 'fixed', 'rotating'). |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| lichnghi_id | bigint | Khóa ngoại tới bảng LichNghi. |
**Chi tiết trường dữ liệu**:
- `LoaiKichBanLamViec`: Loại kịch bản
- **Cố định**: Lịch cố định theo tuần (Thứ 2-CN)
- **Lịch trình**: Lịch theo chu kỳ lặp lại
---
### 13. LichLamViec_CoDinh
**Mục đích**: Quản lý lịch làm việc cố định theo ngày trong tuần.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `calamviec_id` → `CaLamViec(id)`
- `lichlamviec_id` → `LichLamViec(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| NgayTrongTuan | integer | Ngày trong tuần (1-7). |
| CaiDatCa | character varying | Cài đặt ca làm việc. |
| GhiChu | text | Ghi chú. |
| calamviec_id | bigint | Khóa ngoại tới bảng CaLamViec. |
| lichlamviec_id | bigint | Khóa ngoại tới bảng LichLamViec. |
---
### 14. LichLamViec_LichTrinh
**Mục đích**: Quản lý lịch trình làm việc theo chu kỳ.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `lichlamviec_id` → `LichLamViec(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenChuKy | character varying | Tên chu kỳ lịch trình. |
| MaChuKy | character varying | Mã chu kỳ. |
| SoNgayLap | integer | Số ngày lặp chu kỳ. |
| NgayBatDauChuKy | date | Ngày bắt đầu chu kỳ. |
| GhiChu | text | Ghi chú. |
| lichlamviec_id | bigint | Khóa ngoại tới bảng LichLamViec. |
---
### 15. CTLichLamViec_LichTrinh
**Mục đích**: Liên kết lịch làm việc với lịch trình chi tiết.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `calamviec_id` → `CaLamViec(id)`
- `lichlamviec_lichtrinh_id` → `LichLamViec_LichTrinh(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| CaLamViecTungNgay | character varying | Ca làm việc theo ngày trong lịch trình. |
| calamviec_id | bigint | Khóa ngoại tới bảng CaLamViec. |
| lichlamviec_lichtrinh_id | bigint | Khóa ngoại tới bảng LichLamViec_LichTrinh. |
---
### 16. LichLamViec_NhanVien
**Mục đích**: Liên kết nhân viên với lịch làm việc.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `lichlamviec_id` → `LichLamViec(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| NgayApDung | timestamp without time zone | Ngày áp dụng lịch. |
| NgayKetThuc | timestamp without time zone | Ngày kết thúc lịch. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| lichlamviec_id | bigint | Khóa ngoại tới bảng LichLamViec. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
---
### 17. LichLamViec_PhongBan (Bỏ qua)
**Mục đích**: Liên kết phòng ban với lịch làm việc.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `lichlamviec_id` → `LichLamViec(id)`
- `phongban_id` → `PhongBan(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| NgayApDung | timestamp without time zone | Ngày áp dụng lịch. |
| NgayKetThuc | timestamp without time zone | Ngày kết thúc lịch. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| lichlamviec_id | bigint | Khóa ngoại tới bảng LichLamViec. |
| phongban_id | bigint | Khóa ngoại tới bảng PhongBan. |
---
### 18. LichLamViecThucTe
**Mục đích**: Lưu trữ lịch làm việc thực tế của nhân viên sau điều chỉnh.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `calamviec_id` → `CaLamViec(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| NgayLamViec | date | Ngày làm việc. |
| CoPhaiNgayNghi | boolean | Có phải ngày nghỉ hay không. |
| ChoPhepGhiDe | boolean | Cho phép ghi đè lịch. |
| GhiChu | text | Ghi chú. |
| calamviec_id | bigint | Khóa ngoại tới bảng CaLamViec. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
---
## MODULE 4: CHẤM CÔNG
### 19. CongViec
**Mục đích**: Quản lý công việc trong công ty.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaCongViec | character varying | Mã công việc. |
| TenCongViec | character varying | Tên công việc. |
| LoaiCongViec | character varying | Loại công việc. ('Nhóm', 'Cá nhân')|
| GhiChu | text | Ghi chú. |
| BieuThucTinhToan | character varying | Công thức tính toán liên quan. |
| TrangThaiCongThuc | character varying | Trạng thái công thức. |
| TrangThaiCV | character varying | Trạng thái công việc. |
| DanhSachThamSo | json | Danh sách tham số (JSON). |
**Chi tiết trường dữ liệu**:
- `LoaiCongViec`: Loại công việc
- **Nhóm**
- **Cá nhân**
- `TrangThaiCV`: Trạng thái công việc
- **Hoạt động**: Đang hoạt động
- **Không hoạt động**: Ngưng hoạt động
- `TrangThaiCongThuc`: Tháng thái công việc có sử dụng công thức hay không
- Bật: Lúc chấm công công việc sẽ hiển thị các trường dữ liệu tương ứng với `DanhSachThamSo`
- Tắt: Không hiển thị các trường dữ liệu trong `DanhSachThamSo`
- `DanhSachThamSo`: Json chứa các trường dữ liệu cần thiết để tính ra tiền công của công việc dựa theo `BieuThucTinhToan`
---
### 20. BangChamCong
**Mục đích**: Lưu trữ thông tin chấm công hàng ngày của nhân viên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `congviec_id` → `CongViec(id)`
- `nhanvien_id` → `NhanVien(id)`
- `lichlamviec_id` → `LichLamViec(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| ThoiGianChamCongVao | time with time zone | Giờ vào làm. |
| ThoiGianChamCongRa | time with time zone | Giờ ra về. |
| ThoiGianLamViec | real | Tổng thời gian làm việc (giờ). |
| NgayLamViec | date | Ngày chấm công. |
| ThoiGianLamThem | real | Thời gian làm thêm (giờ). |
| CoTinhLamThem | boolean | Có tính giờ làm thêm hay không. |
| CoAnTrua | boolean | Có ăn trưa tại công ty hay không. |
| ThoiGianDiMuon | integer | Thời gian đi muộn (phút). |
| ThoiGianVeSom | integer | Thời gian về sớm (phút). |
| ThoiGianDiSom | integer | Thời gian đi sớm (phút). |
| ThoiGianVeMuon | integer | Thời gian về muộn (phút). |
| LoaiChamCong | character varying | Loại chấm công (e.g., 'VP', 'SX'). |
| TenCongViec | character varying | Tên công việc. |
| CoPhaiNgayNghi | boolean | Có phải ngày nghỉ hay không. |
| ThamSoTinhLuong | json | Tham số tính lương (dữ liệu động). |
| ThanhTien | double precision | Số tiền tính được từ chấm công/Công, ca chấm công. |
| GhiChu | text | Ghi chú bổ sung. |
| congviec_id | bigint | Khóa ngoại tới bảng CongViec. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| lichlamviec_id | bigint | Khóa ngoại tới bảng LichLamViec. |
**Chi tiết trường dữ liệu**:
- `LoaiChamCong`: Loại chấm công
- **VP**: Chấm công theo loại văn phòng
- **SX**: Chấm công theo loại sản xuất
- `CoTinhLamThem`:
- `Có`: sẽ tự động tính thêm lương giờ khi giờ chấm công > Giờ setup trong lịch làm việc
- `Không` : Se không được tính thêm giờ kể cả giờ chấm công > Giờ setup
- `ThoiGianDiMuon (minutes late)`
- Mô tả: Số phút nhân viên đến sau giờ bắt đầu ca (actual_checkin - scheduled_start).
- Giá trị lưu: thường >= 0; nếu nhân viên đúng giờ hoặc đến sớm thì lưu 0.
- Ứng dụng: dùng để phạt/trừ công, báo cáo đi muộn.
- `ThoiGianDiSom (minutes arrived early)`
- Mô tả: Số phút nhân viên đến sớm hơn giờ bắt đầu ca (scheduled_start - actual_checkin).
- Giá trị lưu: thường >= 0; nếu đến đúng giờ hoặc muộn thì lưu 0.
- Ứng dụng: ít khi dùng để phạt; có thể dùng để cộng giờ làm thêm nếu chính sách quy định tính làm thêm cho thời gian đến sớm.
- `ThoiGianVeSom (minutes left early)`
- Mô tả: Số phút nhân viên rời khỏi trước giờ kết thúc ca (scheduled_end - actual_checkout).
- Giá trị lưu: >= 0; nếu về đúng hoặc muộn thì lưu 0.
- Ứng dụng: trừ công, cảnh báo, báo cáo.
- `ThoiGianVeMuon (minutes left late / overtime end)`
- Mô tả: Số phút nhân viên ở lại sau giờ kết thúc ca (actual_checkout - scheduled_end).
- Giá trị lưu: >= 0; nếu về trước hoặc đúng giờ thì lưu 0.
- Ứng dụng: căn cứ tính làm thêm (OT) nếu chính sách cho phép.
---
## MODULE 5: LÀM THÊM GIỜ
### 21. ThietKeLamThem
**Mục đích**: Quản lý thiết kế chế độ làm thêm giờ.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| CoGioiHanThoiGian | boolean | Có giới hạn thời gian. |
| GioiHanGioNgay | integer | Giới hạn giờ ngày. |
| GioiHanGioTuan | integer | Giới hạn giờ tuần. |
| GioiHanGioThang | integer | Giới hạn giờ tháng. |
| GioiHanGioNam | integer | Giới hạn giờ năm. |
| CoGioiHanNgay | boolean | Có giới hạn ngày. |
| CoGioiHanTuan | boolean | Có giới hạn tuần. |
| CoGioiHanThang | boolean | Có giới hạn tháng. |
| CoGioiHanNam | boolean | Có giới hạn năm. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaThietKe | character varying | Mã thiết kế. |
| TenThietKe | character varying | Tên thiết kế. |
---
### 22. LoaiNgayApDung_LamThem
**Mục đích**: Quản lý quy định làm thêm theo loại ngày.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `thietkelamthem_id` → `ThietKeLamThem(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| LoaiNgayApDung | character varying | Loại ngày áp dụng (e.g., 'weekday', 'holiday'). |
| ChoPhepLamThemGio | boolean | Cho phép làm thêm giờ. |
| CachThucTinh | character varying | Cách thức tính. |
| NguongKhongTinhOT | real | Ngưỡng không tính OT. |
| KhongTinhNeuDuoiPhut | real | Không tính nếu dưới phút này. |
| ApDungNghiGiuaCa | boolean | Áp dụng nghỉ giữa ca. |
| BatDauNghiGiuaCa | time without time zone | Bắt đầu nghỉ giữa ca. |
| KetThucNghiGiuaCa | time without time zone | Kết thúc nghỉ giữa ca. |
| CoQuyDoiLuongThem | boolean | Có quy đổi lương thêm. |
| PhanTramLuongLamThem | real | Phần trăm lương làm thêm. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| thietkelamthem_id | bigint | Khóa ngoại tới bảng ThietKeLamThem. |
| ApDungCheckinCheckout | boolean | Áp dụng check-in/check-out. |

**Chi tiết trường dữ liệu**:
- `LoaiNgayApDung`: Loại ngày
- **Ngày thường**: Làm thêm ngày thường
- **Ngày nghỉ**: Làm thêm ngày nghỉ
- **Ngày lễ**: Làm thêm ngày lễ
- `CachThucTinh`: Cách tính
- **Hết ca sẽ tính là làm thêm:** check out sau giờ hết ca thì khoảng thời gian dôi ra sẽ được tính là làm thêm (phải đủ công đối ca làm việc thời gian linh động)
- **Nhân viên gửi đơn:** nhân viên phải gửi đơn thì mới được ghi nhận làm thêm.
- Khi chọn lựa chọn này, nhân viên gửi đơn bao nhiêu tiếng thì sẽ được tính bấy nhiêu giờ làm thêm khi đơn được duyệt
- Tuy nhiên, admin có thể kiểm soát giờ làm thêm bằng cách bật yêu cầu check out khi hết giờ làm thêm. Từ đó kết hợp cả đơn và check in check out thực tế để tính giờ làm thêm
---
### 23. LamThem_NhanVien
**Mục đích**: Liên kết nhân viên với thiết kế làm thêm giờ.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `nhanvien_id` → `NhanVien(id)`
- `thietkelamthem_id` → `ThietKeLamThem(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| thietkelamthem_id | bigint | Khóa ngoại tới bảng ThietKeLamThem. |
---
## MODULE 6: QUẢN LÝ NGHỈ PHÉP
### 24. QuyNghi
**Mục đích**: Quản lý quỹ nghỉ phép, có những ngày nghỉ như thế nào.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaQuyNghi | character varying | Mã quy nghỉ. |
| TenQuyNghi | character varying | Tên quy nghỉ. |
| TinhCongChoNgayNghi | boolean | Tính công cho ngày nghỉ. |
| NgayPhatHanhQuyNghi | date | Ngày phát hành quy nghỉ. |
| DonViNgayPhatHanh | character varying | Đơn vị ngày phát hành. |
| GioiHanNVTheoThamNien | boolean | Giới hạn nhân viên theo thâm niên. |
| ThoiGianGioiHanTheoThamNien | real | Thời gian giới hạn theo thâm niên. |
| GioiHanNgayNghi | boolean | Giới hạn ngày nghỉ. |
| DonViQuyNghi | character varying | Đơn vị quy nghỉ. |
| PhanBoNgayNghiTyLeThuanThamNien | boolean | Phân bố ngày nghỉ tỷ lệ thâm niên. |
| KyApDung | character varying | Kỳ áp dụng. |
| LoaiQuyDinhNgayNghi | character varying | Loại quy định ngày nghỉ. |
| CongDonNgayNghiQuaNam | boolean | Cộng dồn ngày nghỉ qua năm. |
| SoNgayToiDaCongDonQuaNamSau | real | Số ngày tối đa cộng dồn qua năm sau. |
| ThoiGianApDungSoDu | real | Thời gian áp dụng số dư. |
| QuyDoiNgayNghiThanhTien | boolean | Quy đổi ngày nghỉ thành tiền. |
| SoNgayToiDaDuocQuyDoi | real | Số ngày tối đa được quy đổi. |
| LoaiQuyDoiNgayNghi | character varying | Loại quy đổi ngày nghỉ. |
**Chi tiết trường dữ liệu**:
- `KyApDung`: Kỳ áp dụng
- **Theo năm**
- **Theo tháng**
- **Làm thêm**
- `PhanBoNgayNghiTyLeThuanThamNien`: ý nghĩa là nếu tích thì những nhân viên mới vào làm sau ngày cấp phát nghỉ phép ( ví dụ cấp phát là 1/1 hằng năm) nhưng nhân viên đi làm từ tháng 5 thì sẽ tính ngày nghỉ từ tháng 5 đến tháng 12 cho nhân viên đó. Nếu không tích thì sẽ áp dụng theo quy tắc của quỹ nghỉ đó
- Cách tính ngày nghỉ còn lại trong năm:
- Quy tắc: là được nghỉ bao nhiêu ngày trong năm của quỹ nghỉ đó, ví dụ được nghỉ 24 ngày và nhân viên bắt đầu đi làm từ 12/9 => nếu tích phân bổ ngày nghỉ tỷ lệ thuận với thâm niên thì ngày nghỉ của nhân viên mới sẽ là = 24/365 * (số ngày còn lại của năm tính từ ngày bắt đầu làm việc)
- `LoaiQuyDinhNgayNghi`: Chính là phần Quy định tích lũy trong Acheckin
- 'Tăng cố định theo thâm niên': sau x năm thâm niên thì được nhận y ngày nghỉ mỗi năm. Có thể thêm/xóa các khoảng thâm niên
- 'Tăng tịnh tiến theo thâm niên': cứ sau x năm thì được cộng thêm y ngày vào tổng số ngày nghỉ mỗi năm hiện có
- 'Cố định theo năm': mỗi năm nhận được y ngày nghỉ, con số cố định không thay đổi

---
### 25. QuyNghi_TheoThamNien
**Mục đích**: Quản lý quy nghỉ theo thâm niên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `quynghi_id` → `QuyNghi(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| NamThamNien | real | Năm thâm niên. |
| SoNgayNghiDuocCap | real | Số ngày nghỉ được cấp. |
| SoNamThamNienTinhTien | real | Số năm thâm niên tính tiền. |
| SoNgayNghiTuongUngCongThem | real | Số ngày nghỉ tương ứng cộng thêm. |
| quynghi_id | bigint | Khóa ngoại tới bảng QuyNghi. |
---
### 26. QuyNghi_NhanVien
**Mục đích**: Liên kết nhân viên với quy định nghỉ phép.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `nhanvien_id` → `NhanVien(id)`
- `quynghi_id` → `QuyNghi(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| quynghi_id | bigint | Khóa ngoại tới bảng QuyNghi. |
---
### 27. SoDuNgayNghiPhep
**Mục đích**: Quản lý số dư ngày nghỉ phép của nhân viên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `quynghi_id` → `QuyNghi(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| SoNgayDuocCap | real | Số ngày được cấp. |
| SoNgayDaSuDung | real | Số ngày đã sử dụng. |
| SoNgayDuocChuyenTuNamTruoc | real | Số ngày chuyển từ năm trước. |
| SoNgayDieuChinh | real | Số ngày điều chỉnh. |
| NamApDung | real | Năm áp dụng. |
| ThoiGianTinhToanCuoiCung | real | Thời gian tính toán cuối cùng. |
| quynghi_id | bigint | Khóa ngoại tới bảng QuyNghi. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
---
## MODULE 7: QUẢN LÝ ĐƠN BÁO
### 28. DonBao_LuongDuyet
**Mục đích**: Quản lý luồng duyệt đơn báo.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenLuongDuyet | character varying | Tên luồng duyệt. |
| MaLuongDuyet | character varying | Mã luồng duyệt. |
| GhiChu | text | Ghi chú. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
---
### 29. DonBao_BuocQuyTrinhDuyet
**Mục đích**: Quản lý các bước trong quy trình duyệt đơn.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `luongduyet_id` → `DonBao_LuongDuyet(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| LoaiNut | character varying | Loại nút (e.g., 'approval', 'condition'). |
| TenNut | character varying | Tên nút. |
| VaiTroNguoiDuyet | character varying | Vai trò người duyệt (e.g., 'manager'). |
| GhiChu | text | Ghi chú. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| luongduyet_id | bigint | Khóa ngoại tới bảng DonBao_LuongDuyet. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| ThoiGianXuLyToiDa | real | Thời gian xử lý tối đa (giờ). |
| HanhDongKhiQuaHan | character varying | Hành động khi quá hạn (e.g., 'auto_approve'). |
**Chi tiết trường dữ liệu**:
- `VaiTroNguoiDuyet`: Vai trò
- **Trưởng phòng**: Trưởng phòng duyệt
- **Giám đốc**: Giám đốc duyệt
- **Nhân sự**: Phòng nhân sự duyệt
- **Người quản lý trực tiếp**: Quản lý trực tiếp duyệt
---
### 30. DonBao_BuocChuyenQuyTrinh
**Mục đích**: Quản lý các bước chuyển quy trình duyệt đơn.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `luongduyet_id` → `DonBao_LuongDuyet(id)`
- `NutBatDau` → `DonBao_BuocQuyTrinhDuyet(id)`
- `NutKeTiep` → `DonBao_BuocQuyTrinhDuyet(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| NutBatDau | bigint | Khóa ngoại tới nút bắt đầu. |
| NutKeTiep | bigint | Khóa ngoại tới nút tiếp theo. |
| luongduyet_id | bigint | Khóa ngoại tới bảng DonBao_LuongDuyet. |
---
### 31. DonBao_DieuKienCuaBuocDuyet
**Mục đích**: Lưu trữ điều kiện cho các bước duyệt.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `cacbuocduyet_id` → `DonBao_BuocChuyenQuyTrinh(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| cacbuocduyet_id | bigint | Khóa ngoại tới bảng DonBao_BuocChuyenQuyTrinh. |
| NguonDuLieu | character varying | Nguồn dữ liệu kiểm tra (e.g, 'REQUEST_DETAILS', 'REQUESTER_INFO). |
| TruongDuLieuCanKiemTra | character varying | Trường dữ liệu cần kiểm tra. (e.g, 'department_id', 'so_ngay_nghi_tinh_cong') |
| ToanTuSoSanh | character varying | Toán tử so sánh (e.g., '=', '>'). |
| GiaTriSoSanh | character varying | Giá trị so sánh. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
**Giải thích chi tiết**:
- **`NguonDuLieu` (Nguồn dữ liệu)**: Là một danh sách các "ngữ cảnh" (contexts) mà bạn định nghĩa trước trong code.
- `'REQUEST_DETAILS'`: Chỉ cho hệ thống tìm trong cột **JSON `details`** của chính đơn báo đó.
- `'REQUESTER_INFO'`: Chỉ cho hệ thống tìm trong thông tin của người làm đơn (tức là bảng **`employees`**).
- **`TruongDuLieuCanKiemTra` (Tên trường)**: Là tên của một trường dữ liệu hoặc một "key" trong JSON tương ứng với nguồn đã chọn.
---
### 32. DonBao_LoaiDonBao
**Mục đích**: Quản lý loại đơn báo.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `luongduyet_id` → `DonBao_LuongDuyet(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenLoaiDonBao | character varying | Tên loại đơn báo. |
| MaLoaiDonBao | character varying | Mã loại đơn báo. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| GhiChu | text | Ghi chú. |
| luongduyet_id | bigint | Khóa ngoại tới bảng DonBao_LuongDuyet. |
---
### 33. DonBao_LoaiDonBao_TruongDuLieu
**Mục đích**: Quản lý trường dữ liệu cho từng loại đơn báo.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `loaidonbao_id` → `DonBao_LoaiDonBao(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| TenTruong | character varying | Tên trường dữ liệu. |
| MaTruong | character varying | Mã trường dữ liệu. |
| KieuDuLieu | character varying | Kiểu dữ liệu (e.g., 'text', 'date'). |
| CoBatBuoc | boolean | Có bắt buộc hay không. |
| CauHinh | json | Cấu hình trường (JSON) (e.g, {"options":["PHEP_NAM","KHONG_LUONG"]}). |
| MoTa | text | Mô tả trường. |
| ThuTuHienThi | integer | Thứ tự hiển thị. |
| ThamChieuBang | character varying | Tham chiếu tới bảng khác (e.g., hrm.QuyNghi). |
| loaidonbao_id | bigint | Khóa ngoại tới bảng DonBao_LoaiDonBao. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
---
### 34. DonBao
**Mục đích**: Quản lý các đơn báo (nghỉ phép, làm thêm, v.v.).
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `loaidonbao_id` → `DonBao_LoaiDonBao(id)`
- `nhanvien_id` → `NhanVien(id)`
- `BuocDuyetHienTai` → `DonBao_BuocQuyTrinhDuyet(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| TenDonBao | character varying | Tên đơn báo. |
| MaDonBao | character varying | Mã đơn báo. |
| BuocDuyetHienTai | bigint | Khóa ngoại tới bước duyệt hiện tại. |
| TrangThai | character varying | Trạng thái đơn (e.g., 'pending', 'approved'). |
| LyDo | text | Lý do đơn báo. |
| loaidonbao_id | bigint | Khóa ngoại tới bảng DonBao_LoaiDonBao. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| DuLieuChiTietTungLoaiDon | json | Dữ liệu chi tiết từng loại đơn (JSON). |
**Chi tiết trường dữ liệu**:
- `TrangThai`: Trạng thái đơn
- **Nháp**: Mới tạo, chưa gửi
- **Chờ duyệt**: Đang chờ xét duyệt
- **Đã duyệt**: Đã được phê duyệt
- **Từ chối**: Bị từ chối
- **Hủy**: Đã hủy
---
### 35. DonBao_NhatKyPheDuyet
**Mục đích**: Lưu trữ lịch sử phê duyệt đơn báo.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `donbao_id` → `DonBao(id)`
- `nguoiduyet_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| TenThuTuThucHien | character varying | Tên thứ tự thực hiện. |
| LoaiHanhDongDuyet | character varying | Loại hành động duyệt (e.g., 'SUBMITTED', 'APPROVED'). |
| nguoiduyet_id | bigint | Khóa ngoại tới người duyệt. |
| TrangThaiCuaDonTruocHanhDong | character varying | Trạng thái đơn trước hành động. |
| TrangThaiCuaDonSauHanhDong | character varying | Trạng thái đơn sau hành động. |
| GhiChu | text | Ghi chú. |
| ThoiDiemThucHien | timestamp without time zone | Thời điểm thực hiện. |
| donbao_id | bigint | Khóa ngoại tới bảng DonBao. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
**Giải thích chi tiết**:
- **`LoaiHanhDongDuyet` (Hành động)**: Mô tả **hành động (verb)** mà người dùng đã thực hiện. Nó trả lời câu hỏi: "Người dùng đã **làm gì**?".
- Ví dụ: `APPROVED` (Đã duyệt), `REJECTED` (Đã từ chối), `COMMENTED` (Đã bình luận), `SUBMITTED` (Đã gửi).
- **`TrangThaiCuaDonTruocHanhDong` / `TrangThaiCuaDonSauHanhDong` (Trạng thái)**: Mô tả **trạng thái (state)** của đơn báo **trước và sau** khi hành động diễn ra. Nó trả lời câu hỏi: "Kết quả của hành động đó là gì?".
**Ví dụ trong luồng duyệt nhiều cấp**: Hãy xem một đơn xin nghỉ có 2 cấp duyệt: Quản lý trực tiếp (QLTT) → Trưởng phòng (TP).
| Ai làm? | `Hành động` | `Trạng thái trước` | `Trạng thái sau` | Diễn giải |
|:---|:---|:---|:---|:---|
| Nhân viên | `SUBMITTED` | `DRAFT` | `PENDING_MANAGER` | Nhân viên **gửi** đơn. Trạng thái chuyển từ "Nháp" sang "Chờ QLTT duyệt". |
| QLTT | `APPROVED` | `PENDING_MANAGER` | `PENDING_DEPT_HEAD` | QLTT **duyệt**. Trạng thái chuyển từ "Chờ QLTT" sang "Chờ TP duyệt". |
| TP | `REJECTED` | `PENDING_DEPT_HEAD` | `REJECTED` | TP **từ chối**. Trạng thái chuyển từ "Chờ TP" sang "Bị từ chối". |
---
## MODULE 8: QUẢN LÝ LƯƠNG
### 36. NhomPhanTuLuong
**Mục đích**: Quản lý nhóm thành phần lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenNhom | character varying | Tên nhóm. |
| MaNhom | character varying | Mã nhóm. |
---
### 37. PhanTuLuong
**Mục đích**: Quản lý thành phần lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `nhomphantu_id` → `NhomPhanTuLuong(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenPhanTu | character varying | Tên thành phần. |
| MaPhanTu | character varying | Mã thành phần. |
| LoaiPhanTu | character varying | Loại thành phần (e.g., 'income'). |
| MoTa | text | Mô tả. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| nhomphantu_id | bigint | Khóa ngoại tới bảng NhomPhanTuLuong. |
**Chi tiết trường dữ liệu**:
- `LoaiPhanTu`: Loại phần tử
- **Thu nhập**: Lương cơ bản, phụ cấp, thưởng, hoa hồng...
- **Khấu trừ**: BHXH, BHYT, BHTN, thuế TNCN...
---
### 38. CheDoLuong
**Mục đích**: Quản lý chế độ lương của công ty.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaCheDo | character varying | Mã chế độ lương. |
| TenCheDo | character varying | Tên chế độ lương. |
| GhiChu | text | Ghi chú. |
| NgayApDung | date | Ngày áp dụng chế độ lương. |
| NgayHetHan | date | Ngày hết hạn chế độ lương. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
---
### 39. QuyTacCheDoLuong
**Mục đích**: Quản lý quy tắc chế độ lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `chedoluong_id` → `CheDoLuong(id)`
- `phantuluong_id` → `PhanTuLuong(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenQuyTac | character varying | Tên quy tắc. |
| MaQuyTac | character varying | Mã quy tắc. |
| BieuThucTinhToan | character varying | Biểu thức tính toán. |
| MoTa | text | Mô tả. |
| NguonDuLieu | character varying | Nguồn dữ liệu. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| chedoluong_id | bigint | Khóa ngoại tới bảng CheDoLuong. |
| phantuluong_id | bigint | Khóa ngoại tới bảng PhanTuLuong. |
**Chi tiết trường dữ liệu**:
- `NguonDuLieu`: Nguồn dữ liệu
- **Nhập tay**: Nhập thủ công
- **Công thức**: Tự động tính theo công thức
- **Hệ thống**: Lấy từ dữ liệu hệ thống , chấm công, Bảng `ThietLapSoLieuCoDinh`
---
### 40. ThietLapSoLieuCoDinh
**Mục đích**: Quản lý số liệu cố định cho nhân viên.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `nhanvien_id` → `NhanVien(id)`
- `phantuluong_id` → `PhanTuLuong(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| phantuluong_id | bigint | Khóa ngoại tới bảng PhanTuLuong. |
| GiaTriMacDinh | double precision | Giá trị mặc định. |
| GhiChu | text | Ghi chú. |
---
### 41. NhanVien_CheDoLuong
**Mục đích**: Liên kết nhân viên với chế độ lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `chedoluong_id` → `CheDoLuong(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| chedoluong_id | bigint | Khóa ngoại tới bảng CheDoLuong. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
---
### 42. PhongBan_CheDoLuong (Bỏ đi)
**Mục đích**: Liên kết phòng ban với chế độ lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `chedoluong_id` → `CheDoLuong(id)`
- `phongban_id` → `PhongBan(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TrangThai | character varying | Trạng thái (e.g., 'active', 'inactive'). |
| chedoluong_id | bigint | Khóa ngoại tới bảng CheDoLuong. |
| phongban_id | bigint | Khóa ngoại tới bảng PhongBan. |
---
### 43. KyLuong
**Mục đích**: Quản lý kỳ lương của công ty.
**Primary Key**: `id` (bigint, IDENTITY)
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| Thang | smallint | Tháng của kỳ lương. |
| NgayBatDau | date | Ngày bắt đầu kỳ lương. |
| NgayKetThuc | date | Ngày kết thúc kỳ lương. |
| NgayChotLuong | date | Ngày chốt lương. |
---
### 44. BangLuong
**Mục đích**: Quản lý bảng lương tổng hợp của kỳ lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `kyluong_id` → `KyLuong(id)`
- `chedoluong_id` → `CheDoLuong(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaBangLuong | character varying | Mã bảng lương. |
| TenBangLuong | character varying | Tên bảng lương. |
| TongSoLuongNhanVien | integer | Tổng số nhân viên trong bảng lương. |
| TongTienLuong | double precision | Tổng tiền lương. |
| GhiChu | text | Ghi chú. |
| NgayTao | date | Ngày tạo bảng lương. |
| NguoiTao | character varying | Người tạo bảng lương. |
| TrangThai | character varying | Trạng thái (e.g., 'draft', 'final'). |
| kyluong_id | bigint | Khóa ngoại tới bảng KyLuong. |
| chedoluong_id | bigint | Khóa ngoại tới bảng CheDoLuong. |
**Chi tiết trường dữ liệu**:
- `TrangThai`: Trạng thái bảng lương
- **Nháp**: Đang soạn thảo
- **Chờ duyệt**: Chờ phê duyệt
- **Đã duyệt**: Đã được duyệt
- **Đã chi trả**: Đã chuyển khoản
---
### 45. PhieuLuong
**Mục đích**: Quản lý phiếu lương của nhân viên, các phiếu lương sẽ nằm trong bảng lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `bangluong_id` → `BangLuong(id)`
- `nhanvien_id` → `NhanVien(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| TenPhieuLuong | character varying | Tên phiếu lương. |
| MaPhieuLuong | character varying | Mã phiếu lương. |
| NgayPhatHanh | date | Ngày phát hành. |
| TenNhanVien | character varying | Tên nhân viên (denormalized). |
| TenPhongBan | character varying | Tên phòng ban (denormalized). |
| TenChucVu | character varying | Tên chức vụ (denormalized). |
| TongThuNhap | double precision | Tổng thu nhập. |
| TongKhauTru | double precision | Tổng khấu trừ. |
| TongThuNhapChiuThue | double precision | Tổng thu nhập chịu thuế. |
| TongTienDongBaoHiem | double precision | Tổng tiền đóng bảo hiểm. |
| SoTienThueTNCN | double precision | Số tiền thuế TNCN. |
| NgayChamCong | json | Dữ liệu chấm công (JSON). |
| LuongThucLinh | double precision | Lương thực lĩnh. |
| TrangThai | character varying | Trạng thái (e.g., 'draft', 'final'). |
| GhiChu | text | Ghi chú. |
| nhanvien_id | bigint | Khóa ngoại tới bảng NhanVien. |
| bangluong_id | bigint | Khóa ngoại tới bảng BangLuong. |
---
### 46. CTPhieuLuong
**Mục đích**: Chi tiết các thành phần lương trong phiếu lương.
**Primary Key**: `id` (bigint, IDENTITY)
**Foreign Keys**:
- `phieuluong_id` → `PhieuLuong(id)`
**Cột**:
| Tên Cột | Kiểu Dữ Liệu | Mô Tả |
|----------|--------------|-------|
| id | bigint | Khóa chính, tự động tăng. |
| created_at | timestamp with time zone | Thời điểm tạo bản ghi. |
| updated_at | timestamp with time zone | Thời điểm cập nhật bản ghi. |
| MaPhanTuLuong | character varying | Mã thành phần lương. |
| TenPhanTuLuong | character varying | Tên thành phần lương. |
| LoaiPhanTu | character varying | Loại thành phần (e.g., 'income', 'deduction'). |
| NguonDuLieu | text | Nguồn dữ liệu tính toán. |
| BieuThucTinhToan | character varying | Công thức tính toán. |
| GiaTriDauVao | json | Dữ liệu đầu vào (JSON). |
| GiaTriTinhDuoc | double precision | Giá trị tính toán được. |
| ThuTuHienThi | smallint | Thứ tự hiển thị trên phiếu lương. |
| phieuluong_id | bigint | Khóa ngoại tới bảng PhieuLuong. |
---
# NOTE CÁC LUỒNG THỰC HIỆN
## 1. Luồng duyệt trong đơn báo
Hãy xem hệ thống xử lý ví dụ của bạn như thế nào:
* **Yêu cầu:** Bước 1: HR duyệt. Bước 2: Phân nhánh theo phòng ban (A, B). Bước 3: Gộp lại cho Giám đốc duyệt.
**Cấu hình luồng duyệt:**
1. **`DonBao_BuocQuyTrinhDuyet`**: Tạo 5 nút: START, HR_APPROVAL, DEPT_A_APPROVAL, DEPT_B_APPROVAL, DIRECTOR_APPROVAL, END.
2. **`DonBao_BuocChuyenQuyTrinh` & `DonBao_DieuKienCuaBuocDuyet`**:
* **Cạnh 1 (Không điều kiện):** `NutBatDau`: START -> `NutKeTiep`: HR_APPROVAL.
* **Cạnh 2 (Có điều kiện):** `NutBatDau`: HR_APPROVAL -> `NutKeTiep`: DEPT_A_APPROVAL.
* `DonBao_DieuKienCuaBuocDuyet`: `NguonDuLieu`='REQUESTER_INFO', `TruongDuLieuCanKiemTra`='department_id', `ToanTuSoSanh`='=', `GiaTriSoSanh`='ID_PHONG_A'.
* **Cạnh 3 (Có điều kiện):** `NutBatDau`: HR_APPROVAL -> `NutKeTiep`: DEPT_B_APPROVAL.
* `transition_conditions`: `NguonDuLieu`='REQUESTER_INFO', `TruongDuLieuCanKiemTra`='department_id', `ToanTuSoSanh`='=', `GiaTriSoSanh`='ID_PHONG_B'.
* **Cạnh 4 (Không điều kiện - Gộp nhánh):** `NutBatDau`: DEPT_A_APPROVAL -> `NutKeTiep`: DIRECTOR_APPROVAL.
* **Cạnh 5 (Không điều kiện - Gộp nhánh):** `NutBatDau`: DEPT_B_APPROVAL -> `NutKeTiep`: DIRECTOR_APPROVAL.
* **Cạnh 6 (Không điều kiện):** `NutBatDau`: DIRECTOR_APPROVAL -> `NutKeTiep`: END.
**Luồng xử lý khi nhân viên Phòng A tạo đơn:**
1. **Tạo đơn:** Đơn được tạo với `current_step_id` là START.
2. **Chuyển đến Bước 1:** Hệ thống tìm cạnh nối từ START -> HR_APPROVAL. Đơn được chuyển cho HR duyệt.
3. **HR Duyệt -> Phân nhánh:** HR duyệt đơn. Hệ thống tìm các cạnh nối đi ra từ HR_APPROVAL.
* Nó thấy có 2 cạnh (đến DEPT_A và DEPT_B).
* Nó kiểm tra điều kiện của từng cạnh. Điều kiện `department_id` = 'ID_PHONG_A' đúng. Điều kiện kia sai.
* Hệ thống cập nhật `current_step_id` thành DEPT_A_APPROVAL và thông báo cho Trưởng phòng A.
4. **Trưởng phòng A Duyệt -> Gộp nhánh:** TP.A duyệt đơn. Hệ thống tìm cạnh nối đi ra từ DEPT_A_APPROVAL.
* Chỉ có một cạnh duy nhất không điều kiện đến DIRECTOR_APPROVAL.
* Hệ thống cập nhật `current_step_id` thành DIRECTOR_APPROVAL và thông báo cho Giám đốc.
5. **Giám đốc Duyệt -> Kết thúc:** Giám đốc duyệt. Hệ thống tìm cạnh nối từ DIRECTOR_APPROVAL -> END. Đơn được cập nhật `status` thành 'APPROVED' và kích hoạt các hành động sau phê duyệt (cập nhật chấm công).
## 2. Luồng hoạt động Module 3 QUẢN LÝ CA LÀM VIỆC VÀ LỊCH LÀM VIỆC
1. **Thiết lập ca làm việc:**
- Quản trị viên tạo ca làm việc (Ca sáng, ca chiều, ca tối, ca đêm)
- Định nghĩa khung giờ: Giờ vào - giờ ra
- Thiết lập khung giờ nghỉ trưa (nếu có)
- Cấu hình quy tắc: Cho phép đến muộn bao nhiêu phút, về sớm bao nhiêu phút
2. **Tạo lịch làm việc:**
- **Lịch cố định**: Thiết lập ca cho từng ngày trong tuần
- **Lịch lịch trình**: Tạo chu kỳ (ví dụ: 15 ngày), thiết lập ca cho từng ngày trong chu kỳ
3. **Gán lịch làm việc:**
- Gán lịch cho toàn bộ phòng ban hoặc từng nhân viên cụ thể
- Thiết lập ngày áp dụng và ngày kết thúc
4. **Thiết lập lịch nghỉ:**
- Tạo danh sách ngày lễ, tết trong năm
- Định nghĩa hệ số làm việc nếu làm vào ngày nghỉ (150%, 200%, 300%)
5. **Điều chỉnh lịch thực tế:**
- Quản trị viên có thể điều chỉnh lịch cho từng nhân viên theo nhu cầu
- Đánh dấu cho phép ghi đè để nhân viên có thể yêu cầu thay đổi
## 3. Luồng hoạt động Module 1: QUẢN LÝ TỔ CHỨC VÀ NHÂN SỰ + Module 2: HỢP ĐỒNG LAO ĐỘNG
1. **Đăng ký - Developer sẽ đăng ký tài khoản với quyền admin cho phần mềm HRM, sau đó sẽ setup thông tin đầu vào cho công ty**
2. **Setup thông tin danh mục hệ thống**
- Setup thông tin Loại nhân viên
- Tiếp đến là thông tin ngân hàng
- Tiếp đến là thông tin bảo hiểm
- Tiếp đến là setup thông tin hợp đồng lao động
- Tiếp đến sẽ tạo danh sách các chức danh (trưởng phòng, phó phòng, giám đốc, phó giám đốc,...)
- Tiếp đến là sẽ setup thông tin công ty (thông tin chi tiết)
3. **Thiết lập cơ cấu tổ chức và cây nhân sự:**
- Sau đó Admin sẽ thiết lập cấu trúc Công ty - Phòng ban - Bộ phận, và phân cấp quản lý + người quản lý
- Tìm kiếm nhân viên và tìm kiếm bộ phận (có thể chia rạch ròi)
- Nhập bộ phận (để sau)
- Bộ lọc danh sách nhân viên theo trạng thái nhân viên (đang làm, đã nghỉ, chưa kích hoạt) + giới tính
- Chi tiết thông tin nhân sự + Sửa thông tin nhân sự
+ Thông tin cơ bản sẽ giống như trong thiết kế database
+ Thông tin nâng cao:
+ Quá trình công tác
+ Hợp đồng lao động: chọn hợp đồng lao động, công ty ký hợp đồng từ phần danh mục, và điền các thông tin #
+ TK Ngân hàng: lấy từ dữ liệu danh mục
+ Thuế thu nhập cá nhân: mã số thuế
+ BHXH + BHYT + BH khác: đây là các thông tin về bảo hiểm (số sổ, ngày đóng,..) của nhân viên đó - Thêm trường dữ liệu vào bảng NhanVien
- Nhập/ xuất danh sách: để phát triển sau
- Thêm nhân sự: loại nhân viên sẽ dropdown với dữ liệu setup sẵn (cộng tác viên, nhân viên, thử việc,...)
- Xóa nhân sự + cho nghỉ việc
- Phân trang danh sách nhân viên
4. **Quản lý thông tin:**
- Quản lý hợp đồng: Tổng hợp các hợp đồng của các nhân viên + bộ lọc theo các tiêu chí (bộ phận, trạng thái - chưa có hiệu lực, có hiệu lực, đã hết hạn), ... (các tiêu chí như acheckin)
- Quản lý tạm ứng + quản lý bồi thường (phát triển sau)
5. **Báo cáo:**
- Báo cáo thống kê nhân sự: theo các tiêu chí như Loại nhân viên, giới tính, chức danh, thâm niên, độ tuổi,...
- Báo cáo biến động nhân sự: theo các tiêu chí như loại thời gian, bộ phận, chức danh,... (như acheckin)