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

chip — Xe chip ôn luyện v2

Chấm điểm ôn luyện sa hình bằng xe gắn chip (GNSS-RTK + cảm biến): cấu hình 12 bài sa hình, nhận kết quả phiên ôn, đọc lỗi từng bài. Không cần thẩm định — bán được ngay; dữ liệu tích lũy là hồ sơ chứng minh khi đi thẩm định hệ sát hạch sau này.

⚠️ v2 — cần firmware/thiết bị đi kèm (xem tài liệu thiết bị phần cứng).
1

Feature / BO / Action

FeatureBO chínhAction
deviceThiết bị chip trên xe + trạm RTKviewcreateedit
lesson12 bài sa hình (config điểm trừ/vị trí)viewconfigure
sessionPhiên ôn + kết quả/lỗi từng bàiviewimportexportscore
2

Dữ liệu chính

BOTrường chính
Thiết bịSeri · xe gắn · phiên bản firmware · trạm base RTK của sân
Bài sa hình12 bài theo chuẩn thi · bản đồ số vị trí/vạch · lỗi + điểm trừ (config — đổi bài thi chỉ cập nhật bản đồ)
Phiên ônHọc viên (quẹt thẻ/khuôn mặt) × xe × thời gian · điểm tổng · lỗi từng bài · quỹ đạo
3

Quy tắc & liên kết

Quy tắc nghiệp vụ

  • Kết quả từng phiên đẩy về app học viên (portal): bài yếu, lỗi lặp lại
  • Dữ liệu ôn luyện → dự báo tỷ lệ đậu, tư vấn mua thêm phiên (bán thêm)
  • Chuẩn chấm bám quy định thi nhưng tự do công nghệ (không thẩm định)
  • Lưu quỹ đạo đầy đủ — bộ dữ liệu chứng minh độ chính xác khi trình thẩm định hệ sát hạch (v3)

Liên kết chéo

  • portal — kết quả về app
  • booking — phiên thuê xe chip
  • student — học viên ôn
  • bi — dự báo tỷ lệ đậu

⚠ Câu hỏi mở

  • Chuẩn 12 bài + điểm trừ theo TT 108/2026-BCA (cập nhật nhất)?
  • Sân Vĩnh An đủ thoáng cho RTK chưa (khảo sát che khuất)?
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 đủ: chip.main.<feature>.<action>.

▸ permissions[] — manifest.json

[ { "group": "main", "feature": "device", "label": "Thiết bị chip & RTK", "actions": [ "view", "create", "edit" ] }, { "group": "main", "feature": "lesson", "label": "12 bài sa hình", "actions": [ "view", "configure" ] }, { "group": "main", "feature": "session", "label": "Phiên ôn", "actions": [ "view", "import", "export", "score" ] } ]

⚠️ Action đặc thù (score) cần bổ sung vào validator manifest — xem plan data-scope P1.

▸ Ma trận vai trò × feature

FeatureQTHTGIAM_DOCKY_THUATGIAO_VUGIAO_VIENHOC_VIEN
deviceRRW
lessonRRW
sessionRRWR¹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ù: session +import (GIAO_VU) · score = hệ thống chấm tự động

▸ Quyền mức record (row-level)

(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):

[ { "group": "main", "feature": "session", "fields": [ "ma_dk", "ma_gv" ], "scopeVars": [ "current_ma_dk_list", "current_assigned_ma_dk_list" ] } ]

(b) Điều kiện record theo vai trò:

Vai tròFeature (action)Điều kiện record
GIAO_VIENsession (view)ma_dk ∈ ctx.current_assigned_ma_dk_list (học viên phụ trách)
HOC_VIENsession (view)ma_dk ∈ ctx.current_ma_dk_list

(c) Seed rt_role.grants (kind rule — nhiều rule cùng resource+action = OR):

[ { "kind": "rule", "module": "chip", "feature": "session", "actions": [ "view" ], "predicate": { "op": "in", "field": "ma_dk", "values": [ { "ctx": "current_assigned_ma_dk_list" } ] } }, { "kind": "rule", "module": "chip", "feature": "session", "actions": [ "view" ], "predicate": { "op": "in", "field": "ma_dk", "values": [ { "ctx": "current_ma_dk_list" } ] } } ]

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.