Module trung tâm của MVP — quản lý học viên và vòng đời hồ sơ theo khóa (tiếp nhận → báo Sở → đang học). Đây là màn hình đầu tiên được dựng. Chi tiết quy trình: WS1 quy trình hồ sơ.
| Feature | BO chính | Action |
|---|---|---|
| student | Học viên (danh bạ người) | viewcreateeditdeleteexport |
| hoso | Hồ sơ ghi danh theo khóa (state machine) | viewcreateeditapprovetransfer |
| giayto | Giấy tờ hồ sơ (scan, hạn) | viewcreateverifydelete |
| lichsu | Lịch sử trạng thái (audit) | viewexport |
Mã đăng ký ma_dk, họ tên, ngày sinh, giới tính, CCCD + ngày cấp, SĐT, thường trú/cư trú, hạng đào tạo, hạng GPLX, khóa ma_kh, GV, xe tập, thẻ RFID, ảnh, cờ đào tạo/kết quả lý thuyết. UNIQUE (ma_dk, ma_kh, ma_csdt).
| Trường | Kiểu | Ghi chú |
|---|---|---|
| Trạng thái hồ sơ | enum | theo vòng đời mục 2 |
| Loại hồ sơ | enum | mới / nâng hạng — quyết định checklist |
| Phòng phụ trách | ref | khi dùng bàn giao liên phòng |
| Học phí thỏa thuận | money | nền cho công nợ đợt (tuition) |
Giấy tờ: loại (ref catalog) · file scan · trạng thái (đã nộp/duyệt/thiếu) · hạn · người duyệt. Lịch sử: trạng thái cũ→mới, phòng từ→đến, người thao tác, lý do, thời gian — append-only, thay audit chung ở MVP.
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 đủ: student.main.<feature>.<action>.
⚠️ Action đặc thù (transfer, verify) cần bổ sung vào validator manifest — xem plan data-scope P1.
| Feature | QTHT | GIAM_DOC | QL_DAO_TAO | TUYEN_SINH | GIAO_VU | GIAO_VIEN | KE_TOAN | HOC_VIEN |
|---|---|---|---|---|---|---|---|---|
| student | R | R | W | W | W | R¹ | R³ | R² |
| hoso | R | R | WA | W³ | W | R¹ | R³ | R² |
| giayto | — | — | RA | WA | WA | — | — | R² |
| lichsu | R | R | R | — | 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ù: hoso +transfer (QL_DAO_TAO, TUYEN_SINH, GIAO_VU) · hủy hồ sơ = bước workflow (không phải action quyền) · A ở giayto = verify (duyệt giấy tờ)
(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 |
|---|---|---|
| TUYEN_SINH | hoso (view, edit) | trạng thái ∈ {tu_van, tiep_nhan, cho_bo_sung, hop_le} |
| KE_TOAN | student, hoso (view) | trạng thái ∈ {hop_le, da_thu_dot1, xep_khoa, da_bao_so, dang_hoc} |
| GIAO_VIEN | student, hoso (view) | trang_thai_ho_so = 'dang_hoc' và giao_vien_id = ctx.current_giao_vien_id |
| HOC_VIEN | student, hoso, giayto (view) | nguoi_lxid = ctx.current_nguoi_lxid |
(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.
Rule trên viết cho feature hoso — lặp tương tự cho student/giayto. QL_DAO_TAO/GIAO_VU/GIAM_DOC/QTHT không rule = thấy toàn bộ.