Quản lý khóa học theo hạng, ghi danh + phân công GV–xe, và kế hoạch đào tạo trình Sở — mắt xích giữa hồ sơ (student) và báo cáo tuân thủ (report).
| Feature | BO chính | Action |
|---|---|---|
| course | Khóa học | viewcreateeditcloseexport |
| enrollment | Ghi danh + phân công GV–xe | viewcreateeditassign |
| plan | Kế hoạch đào tạo (trình Sở) | viewcreateapprovereport |
| BO | Trường chính |
|---|---|
| Khóa học đã có | Mã khóa ma_kh (theo quy tắc mã catalog) · tên · hạng đào tạo · ngày khai giảng/bế giảng · ngày đào tạo · ngày sát hạch dự kiến · đào tạo nội bộ · trạng thái (mở / đã báo Sở / đang học / đã đóng) |
| Ghi danh mới | Hồ sơ ma_dk (1 hồ sơ 1 khóa) · giáo viên ma_gv · xe tập ma_xe — phải khớp đăng ký với Sở |
| Kế hoạch mới | Khóa · nội dung theo mẫu Sở (jsonb/file) · trạng thái: nháp → trình duyệt → đã báo Sở (reported_at) |
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 đủ: course.main.<feature>.<action>.
⚠️ Action đặc thù (close) cần bổ sung vào validator manifest — xem plan data-scope P1.
| Feature | QTHT | GIAM_DOC | QL_DAO_TAO | GIAO_VU | TUYEN_SINH | GIAO_VIEN | HOC_VIEN |
|---|---|---|---|---|---|---|---|
| course | R | R | W | W | R | R¹ | R² |
| enrollment | R | R | W | W | — | R¹ | — |
| plan | R | R | WA | W | — | — | — |
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ù: course +close · enrollment +assign (QL_DAO_TAO)
(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 | enrollment (view) | ma_gv = ctx.current_ma_gv |
| GIAO_VIEN | course (view) | khoa_hoc_id ∈ ctx.current_assigned_khoa_ids (khóa mình dạy) |
| HOC_VIEN | course (view) | khoa_hoc_id ∈ ctx.current_khoa_ids (khóa 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.