Module · WS đào tạo · 07/7/2026

catalog — Danh mục dùng chung MVP

Kho danh mục quy định (regulation-as-config) cho mọi module — km/giờ theo hạng, checklist giấy tờ, bộ mã. Mục tiêu: thông tư đổi → sửa danh mục trong vài ngày, không sửa code. Mọi module đều depends catalog.

✅ Trạng thái code: đã scaffold (4 danh mục, hạng GPLX đã seed theo quy định mới) — cần bổ sung: loại giấy tờ + checklist, quy tắc mã, cột km/giờ/tuổi.
1

Feature / BO / Action

FeatureBO chínhAction
licenseHạng GPLXviewcreateeditdeleteimport
training-categoryHạng đào tạoviewcreateeditdelete
doc-typeLoại giấy tờ + Checklist theo hạngviewcreateeditdeleteconfigure
edu-level · subjectTrình độ học vấn · Môn họcviewcreateeditdelete
code-ruleQuy tắc sinh mã (học viên/khóa/phiếu)viewconfigure
2

Dữ liệu chính

▸ Hạng GPLX — đã có, cần thêm cột quy định đào tạo (*)

TrườngKiểuBắt buộcGhi chú
Mã hạng · tên · mô tảtextB, C1, C, D1, D2, A1, A2… (đã seed theo quy định mới)
Hạn sử dụng (năm)number
Tuổi tối thiểu *numberValidate hồ sơ (student)
Km / giờ thực hành tối thiểu *numberChuẩn đối soát DAT
Hiệu lực từ *dateVersion theo thông tư
Trạng tháibool

▸ Loại giấy tờ + Checklist theo hạng — mới

TrườngKiểuBắt buộcGhi chú
Mã / tên loại giấy tờtextđơn ĐK, CCCD, khám SK, ảnh thẻ, GPLX cũ…
Có hạn sử dụngboolgiấy khám SK có hạn
Checklist: hạng × giấy tờref×refáp dụng (mới/nâng hạng/cả hai) + bắt buộc

▸ Quy tắc sinh mã — mới

Đối tượng (học viên/khóa/phiếu) + mẫu mã, vd HV-{ma_csdt}-{YYYY}-{seq5} — giữ tương thích mã cũ khi migrate.

3

Quy tắc nghiệp vụ & liên kết

Quy tắc

  • Danh mục có hiệu lực theo thời gian — bản mới không ghi đè bản cũ (hồ sơ cũ tham chiếu đúng quy định thời điểm của nó)
  • Không xóa cứng danh mục đã tham chiếu — chỉ ngừng hiệu lực
  • Checklist là nguồn duy nhất cho màn hình tiếp nhận hồ sơ

Liên kết chéo module

Mọi module tham chiếu bằng mã danh mục (ma_hang, mã giấy tờ…) — không FK cứng. Giáo vụ trưởng cấu hình; module khác chỉ đọc.

⚠ Câu hỏi mở

  • Quy tắc mã học viên/khóa Vĩnh An (việc #2)?
  • Bộ giấy tờ theo NĐ 94/2026 + TT 17/2026 → seed checklist
Quyền

Ma trận phân quyền — ốp vào manifest & seed role

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 đủ: catalog.main.<feature>.<action>.

▸ permissions[] — manifest.json

[ { "group": "main", "feature": "license", "label": "Hạng GPLX", "actions": [ "view", "create", "edit", "delete", "import" ] }, { "group": "main", "feature": "training-category", "label": "Hạng đào tạo", "actions": [ "view", "create", "edit", "delete" ] }, { "group": "main", "feature": "doc-type", "label": "Loại giấy tờ & checklist", "actions": [ "view", "create", "edit", "delete", "configure" ] }, { "group": "main", "feature": "edu-level", "label": "Trình độ học vấn", "actions": [ "view", "create", "edit", "delete" ] }, { "group": "main", "feature": "subject", "label": "Môn học", "actions": [ "view", "create", "edit", "delete" ] }, { "group": "main", "feature": "code-rule", "label": "Quy tắc sinh mã", "actions": [ "view", "configure" ] } ]

▸ Ma trận vai trò × feature

FeatureQTHTGIAM_DOCQL_DAO_TAOGIAO_VUTUYEN_SINH
licenseWRWRR
training-categoryWRWRR
doc-typeWRWRR
edu-levelWRRRR
subjectWRRRR
code-ruleWRR

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.

W của QTHT gồm cả delete·import·configure