Lý do trung tâm trả tiền: tự sinh báo cáo theo mẫu gửi Sở Xây dựng (kế hoạch đào tạo, DS học viên, tốt nghiệp), đọc chéo student/course/dat. Mẫu là dữ liệu cấu hình — thông tư đổi mẫu thì cập nhật config, không sửa code.
| Feature | BO chính | Action |
|---|---|---|
| template | Mẫu báo cáo (version theo thông tư) | viewconfigure |
| so-xd | Báo cáo đã lập | viewgenerateeditapprovedownload |
| registry | Sổ theo dõi đã nộp (immutable) | viewexport |
| BO | Trường chính |
|---|---|
| Mẫu báo cáo report_mau | Mã/tên (KH đào tạo · DS học viên · tốt nghiệp · đăng ký sát hạch…) · cấu hình jsonb (cột, nguồn dữ liệu, định dạng xuất) · hiệu lực từ (version khi thông tư đổi — mẫu cũ giữ cho báo cáo cũ) |
| Báo cáo đã lập report_da_lap | Mẫu · khóa/kỳ · file đã sinh (immutable) · trạng thái (nháp → chờ duyệt → đã duyệt → đã gửi) · người lập/duyệt · ngày lập/gửi |
| Sổ đã nộp | View tổng hợp các bản da_gui — phục vụ thanh tra |
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 đủ: report.main.<feature>.<action>.
⚠️ Action đặc thù (generate) cần bổ sung vào validator manifest — xem plan data-scope P1.
| Feature | QTHT | GIAM_DOC | QL_DAO_TAO | GIAO_VU |
|---|---|---|---|---|
| template | W | R | R | — |
| so-xd | R | RA | W | W |
| registry | 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ù: so-xd +generate (QL_DAO_TAO, GIAO_VU) · +download (QL_DAO_TAO) · gửi Sở = bước workflow sau approve