Đề xuất tổng thể dựa trên nghiệp vụ trường lái xe phổ biến — không bám theo code hiện có. Bản chi tiết: markdown.
| Tầng | Ranh giới | Quy tắc quyết định |
|---|---|---|
| Workspace | Pháp nhân + cơ sở dữ liệu | Mỗi WS = 1 chủ thể chịu trách nhiệm pháp lý, 1 DB riêng. Chi nhánh (ma_csdt) là thuộc tính trong WS — không tách WS |
| Module | Đơn vị đóng gói – cài – bán/license | Tách khi: bán riêng theo gói · vòng đời nâng cấp riêng · người dùng chính khác · cài/gỡ độc lập |
| Feature | Nhóm quyền + mục menu | Mỗi feature ôm 1 nghiệp vụ con — là đơn vị gán quyền |
| Business Object | Chứng từ / đối tượng dữ liệu | Mỗi feature có 1 BO chính (+ BO phụ theo vòng đời) |
| Action | Thao tác trên BO | Bộ chuẩn view create edit delete import export approve assign configure report + action đặc thù khai qua customActions (chip vàng bên dưới) |
| Feature | Business Object | |
|---|---|---|
| Trả lời câu hỏi | "Ai được làm gì, ở mục menu nào?" | "Dữ liệu là cái gì, bản ghi gì?" |
| Là đơn vị của | quyền + menu (đơn vị gán quyền) | dữ liệu (bảng, form, vòng đời, trạng thái) |
| Xuất hiện ở | permission key module.feature.action · sidebar | tên bảng, grid, màn hình chi tiết |
| Bản chất / đặt tên | nghiệp vụ con — gọi bằng việc ("thu học phí", "đối soát") | chứng từ/đối tượng — gọi bằng tờ/bản ghi ("Phiếu thu", "Kết quả đối soát") |
| Tương đương thế giới | Tab/App + permission set (Salesforce) · menu+group (Odoo) | DocType (ERPNext) · Object (Salesforce) · Model (Odoo) · Table (Dataverse) |
| Lỗ hổng | Quy tắc vá |
|---|---|
| ① Tiêu chí "BO phụ" mơ hồ chính sơ đồ đã "vi phạm": giayto/lichsu đi kèm vòng đời hồ sơ nhưng tách feature |
BO phụ được thăng cấp thành feature khi và chỉ khi nó cần bộ quyền khác BO chính (giấy tờ cần verify riêng, lịch sử cần view-only audit riêng). "Đi kèm vòng đời" chỉ là điều kiện cần — phép thử quyết định là nhu cầu quyền riêng. |
| ② Enrich chéo đi vòng qua quyền xem list học viên kèm tên khóa không cần course.course.view |
Chấp nhận cho cột nhãn, nhưng chặn rò rỉ bằng quy tắc: contract view chỉ chứa cột định danh + nhãn hiển thị (mã, tên, trạng thái); dữ liệu nhạy cảm (tiền, lương, scan giấy tờ) không bao giờ vào contract view — đọc phải qua service API check quyền feature nguồn. → đã ghi thành quy tắc cứng trong Quan hệ module §4. |
| ③ Quyền theo transition chưa có chỗ ai được duyệt ≠ ai được hủy ≠ ai được bàn giao — gate chung bằng edit/approve không phân biệt được |
Khi một BO có >2 transition cần quyền khác nhau → khai transition đó như custom action của feature (hoso.huy, hoso.transfer — transfer đã đi đúng hướng này), không đẻ feature mới, không nhét chung vào edit. Tham khảo: ERPNext workflow gán role theo từng transition. |
| license | Hạng GPLX (km/giờ, tuổi, hạn) viewcreateeditimport |
| doc-type | Loại giấy tờ + checklist theo hạng vieweditconfigure |
| khác | Hạng đào tạo · Trình độ · Môn học · Quy tắc sinh mã vieweditconfigure |
| student | Học viên (danh bạ người) viewcreateeditexport |
| hoso | Hồ sơ ghi danh theo khóa (state machine) viewcreateeditapprovetransfer |
| giayto | Giấy tờ hồ sơ (scan, hạn) viewcreateverify |
| lichsu | Lịch sử trạng thái (audit) viewexport |
| course | Khóa học viewcreateeditclose |
| enrollment | Ghi danh + phân công GV–xe viewcreateassign |
| plan | Kế hoạch đào tạo (trình Sở) viewcreateapprovereport |
| teacher | Giáo viên (hồ sơ nghiệp vụ) viewcreateeditexport |
| cert | Chứng chỉ GV + hạn vieweditconfigure |
| assignment | Phân công dạy (khớp đăng ký Sở) viewassignreport |
| vehicle | Xe tập lái viewcreateeditexport |
| license-doc | Giấy phép xe, đăng kiểm, bảo hiểm (hạn) vieweditconfigure |
| device-bind | → chuyển sang dat.binding (20/7); vehicle chỉ đọc dat_v_thiet_bi_theo_xe |
| device | Thiết bị DAT (seri, sim, hạn) viewcreateedit |
| binding | Gắn/tháo thiết bị vào xe (lịch sử theo thời điểm) — từ vehicle viewassignexport |
| session | Phiên học DAT (km/giờ) viewimportexcludeexport |
| reconcile | Kết quả đối soát theo học viên/hạng viewreconcilereport |
| alert | Cảnh báo thiếu km/giờ, lệch GV/xe viewconfiguresend |
| log | Nhật ký truyền view |
| pricelist | Bảng học phí theo hạng/khóa vieweditapprove |
| installment | Công nợ theo đợt viewcreateeditexport |
| receipt | Phiếu thu viewcollectrefundreprint |
| discount | Miễn giảm viewcreateapprove |
| template | Mẫu báo cáo (version theo thông tư) viewconfigure |
| so-xd | Báo cáo đã lập (KH đào tạo, DS học viên, tốt nghiệp) viewgenerateapprovedownload |
| registry | Sổ đã nộp (immutable) viewexport |
| rule | Quy tắc nhắc hạn (giấy tờ GV/xe/HV) viewconfigure |
| message | Thông báo đã gửi (Zalo OA/SMS/app) viewsendexport |
| class | Lớp/buổi lý thuyết viewcreateedit |
| attendance | Điểm danh khuôn mặt viewcheckinexport |
| question-bank | Ngân hàng 600 câu (config) viewimportconfigure |
| mock-exam | Thi thử + kết quả viewscore |
| result | Kết quả lý thuyết (xét điều kiện) viewapprovereport |
| lead | Lead (Zalo/FB/web) viewcreateassignconvert |
| campaign | Nguồn/chiến dịch vieweditreport |
| commission | Hoa hồng CTV viewapproveexport |
| invoice | Hóa đơn điện tử viewissuevoidexport |
| ledger | Sổ thu–chi, doanh thu viewreport |
| reconcile | Đối soát doanh thu viewreconcile |
| timesheet | Bảng công từ giờ DAT/chip viewgenerateedit |
| salary | Bảng lương viewgenerateapproveexport |
| employee | Nhân viên (phòng, chức danh) viewcreateedit |
| org | Phòng ban · chức danh (cây) viewconfigure |
| contract | Hợp đồng, chứng chỉ tập huấn vieweditconfigure |
| fuel / maintenance | Nhiên liệu theo km DAT · Bảo dưỡng viewcreateapprove |
| cost / asset | Chi phí đầu xe · Tài sản, khấu hao, kho viewreportexport |
| account | Tài khoản app viewcreatereset |
| progress | Tra cứu tiến độ km/giờ view |
| booking | Đặt lịch bổ túc viewbookapprove |
| practice | Ôn 600 câu, thi thử view |
| device / lesson | Thiết bị chip · 12 bài sa hình (config) viewconfigure |
| session | Phiên ôn + kết quả/lỗi từng bài viewimportscoreexport |
| calendar / rent | Lịch sân/xe · Phiên thuê · Bảng giá viewbookcollectreport |
| exam / roster | Kỳ thi · DS thí sinh · Điều phối xe/sân · Doanh thu thuê viewcreateassignreport |
| transaction | Giao dịch cổng · Đối soát cổng viewrefundreconcile |
| program / issue | Chương trình nghề (config) · Chứng chỉ cấp (tái dùng student+lms) viewcreateapprovedownload |
| dashboard | Tỷ lệ đậu theo GV/xe/khóa · hiệu suất sân · chi phí/học viên viewreportexport |
WS riêng cho mỗi trung tâm sát hạch — phần mềm thẩm định BCA, release theo phiên bản kiểm chuẩn (không cập nhật kiểu SaaS).
| Module | Feature / BO chính | Action đặc thù |
|---|---|---|
| schedule | Kỳ sát hạch · hội đồng · ca thi · DS thí sinh | viewcreateassignlock |
| kiosk | Check-in thí sinh · đối chiếu khuôn mặt · số báo danh | viewcheckinverify |
| theory | Phòng máy · đề thi (trộn 600 câu, điểm liệt) · bài thi · biên bản | generatescoredownload |
| yard | Xe sát hạch · bài sa hình · kết quả chấm tự động · log niêm phong | scoresealexport |
| road | Lộ trình đường trường · kết quả chấm · bảng nút SH viên | scoreexport |
| moto | Sát hạch A1/A2 (sân mô tô) | scoreexport |
| monitor | Camera xe/sân/phòng thi · màn hình công khai điểm · lưu vết | viewbroadcastexport |
| gateway | Gói tin truyền Cục CSGT · nhật ký truyền/bù | transmitretryreport |
| Đề xuất | Hiện có trong ws_suns | Ghi chú |
|---|---|---|
| catalog, student, course, teacher, vehicle, dat | ✅ đã scaffold (.ogapp) | student cần thêm feature hoso/giayto; dat cần thêm session/reconcile/alert |
| tuition, report, notify | ❌ chưa có | GĐ1 phải scaffold (tuition/report đã có schema đề xuất) |
| hr, payroll, crm (v1.5) | ✅ built-in hrm, crm phủ sẵn (18 model HRM) | Không scaffold mới — built-in + phần đặc thù mỏng (GV↔Employee, timesheet-DAT, convert lead→hồ sơ, hoa hồng CTV) |
| phòng ban / chức danh | ✅ built-in org (OrganizationalUnit + Position) | Seed danh sách Vĩnh An vào org từ MVP — không tạo danh mục riêng |
| lms, finance, fleet, portal | ❌ chưa có | v1.5 — còn 4 module mới (thay vì 7) |
| chip, booking, examops, payment, cert, bi | ❌ chưa có | v2–v3 |
| rfcard (hiện có) | — | giữ như module hạ tầng nhỏ, phục vụ điểm danh/DAT |
| workflow, workplace, system, iam (built-in) | ✅ có sẵn lúc boot | workflow để dành (duyệt/connector); workplace disable ở Vĩnh An; system = quyền hạ tầng; iam chờ RT-16 |
| account, base (hiện có) | — | demo, không cài |