Chứng chỉ + hạn giấy tờ, đăng ký danh sách GV với Sở XD, phân công dạy. Nhân thân đọc từ HRM qua employee_id — màn hình tạo GV = "chọn nhân viên (phòng đào tạo) → bổ sung hồ sơ nghiệp vụ", KHÔNG nhập lại thông tin người (join pattern P2).
| Feature | BO chính | Action |
|---|---|---|
| teacher | Giáo viên (hồ sơ nghiệp vụ) | viewcreateeditdeleteexport |
| cert | Chứng chỉ GV + hạn | viewcreateeditconfigure |
| assignment | Phân công dạy | viewassignreport |
| BO | Trường chính |
|---|---|
| Giáo viên đã có · sửa 15/7 | employee_id (FK mềm → hrm.employees, nullable cho GV thỉnh giảng) — nguồn nhân thân duy nhất, họ tên/CCCD/SĐT/ảnh đọc từ HRM không nhập lại (cột legacy trùng chỉ là mirror import FPT, UI không cho sửa) · mã GV ma_gv/ma_csdt (khóa đăng ký Sở, UNIQUE) · hạng GPLX được dạy · trình độ (ref catalog) · thẻ RFID/vân tay · trạng thái đăng ký Sở. Import FPT (go-live): port bảng giao_vien → khớp employee bằng CCCD; không khớp → thỉnh giảng (NULL) hoặc báo thiếu hồ sơ HRM. |
| Chứng chỉ mới | Loại (GPLX / sư phạm / tập huấn / khám SK) · số hiệu · nơi cấp · ngày cấp / ngày hết hạn (nguồn nhắc hạn notify) · file scan |
| Phân công mới | GV × khóa × xe · loại dạy (LT/TH) · trạng thái khớp đăng ký Sở — dùng chung dữ liệu enrollment của course |
Khối permissions[] dán vào manifest.json; bảng dưới là gán quyền theo vai trò (seed rt_role). Permission key đầy đủ: teacher.main.<feature>.<action>.
| Feature | QTHT | GIAM_DOC | NHAN_SU | QL_DAO_TAO | GIAO_VU | GIAO_VIEN |
|---|---|---|---|---|---|---|
| teacher | R | R | R | W | R | R² |
| cert | R | R | R | W | — | R² |
| assignment | R | R | — | W | R | — |
R xem · W tạo/sửa · A duyệt · — không có quyền · ¹ dữ liệu phân công · ² của chính mình · ³ theo trạng thái hồ sơ. Vai trò không liệt kê = không có quyền.
Đặc thù: assignment +assign,report (QL_DAO_TAO). Đổi 15/7: W của teacher/cert chuyển NHAN_SU → QL_DAO_TAO — hồ sơ nghiệp vụ GV thuộc phòng đào tạo (nhân thân đã ở HRM do nhân sự quản); role NHAN_SU ở Vĩnh An hiện không gán ai (WS0 §8.2).
(a) Manifest bổ sung fields + scopeVars cho feature bị scope (mở rộng schema — plan data-scope P1; manifest chỉ khai "cái gì scope được", không chứa rule):
(b) Điều kiện record theo vai trò:
| Vai trò | Feature (action) | Điều kiện record |
|---|---|---|
| GIAO_VIEN | teacher, cert (view) | giao_vien_id = ctx.current_giao_vien_id (hồ sơ của mình) |
(c) Seed rt_role.grants (kind rule — nhiều rule cùng resource+action = OR):
Biến ngữ cảnh: current_user_id — engine có sẵn · current_giao_vien_id/current_ma_gv — module teacher tra từ user đăng nhập (ctxVars, plan P3) · current_nguoi_lxid/current_ma_dk_list — module student tra (1 người nhiều lượt đăng ký) · current_assigned_* — danh sách phụ trách/được phân công.