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

vehicle — Xe tập lái MVP

Quản lý xe tập lái: đăng ký hành chính, giấy tờ + hạn (giấy phép xe tập, đăng kiểm, bảo hiểm), và gắn thiết bị DAT. Vận hành chi phí thuộc fleet (v1.5).

✅ Trạng thái code: đã scaffold bảng xe (port legacy) — cần thêm license-doc, hoàn thiện device-bind.
1

Feature / BO / Action

FeatureBO chínhAction
vehicleXe tập láiviewcreateeditdeleteexport
license-docGiấy phép xe tập, đăng kiểm, bảo hiểm (hạn)viewcreateeditconfigure
⚠️ Cập nhật 20/7 — bỏ feature device-bind. Gắn/tháo thiết bị DAT chuyển sang dat.binding; vehicle cũng bỏ hai cột seri_datdat_device_id trong vehicle_xe_tap_lai (mâu thuẫn đã ghi nợ ở review §2.3). Lý do: sửa đúng chiều phụ thuộc (vehicle không cần biết DAT tồn tại) · thiết bị chưa gắn xe nào thì mô hình phía vehicle không biểu diễn được · quy phiên học về xe là đường nóng của dat. Chi tiết: Kiến trúc quản lý thiết bị §6.
2

Dữ liệu chính

BOTrường chính
Xe tập lái
đã có
Mã xe ma_xe · biển số · chủ sở hữu · hạng GPLX · năm SX · loại xe · số đăng ký · số giấy phép + hạn · trạng thái. UNIQUE (ma_xe, ma_csdt)bỏ seri_datdat_device_id (20/7)
Giấy tờ xe
mới
Loại (giấy phép xe tập / đăng kiểm / bảo hiểm TNDS / phù hiệu) · số hiệu · nơi cấp · ngày cấp / ngày hết hạn (nguồn nhắc hạn) · file scan — tách bảng riêng: 1 xe nhiều loại giấy
Gắn thiết bị
→ chuyển sang dat
Xe × thiết bị DAT · ngày gắn/tháo · người thao tác — nay là dat_gan_xe thuộc dat.binding. Vehicle muốn hiển thị "thiết bị đang gắn" thì đọc dat_v_thiet_bi_theo_xe (P1), dat chưa cài thì ẩn cột
3

Quy tắc & liên kết

Quy tắc nghiệp vụ

  • Xe dạy thực hành: giấy phép xe tập còn hạn + đăng kiểm còn hạn + DAT hợp quy — thiếu 1 → chặn phân công
  • Xe khớp danh sách đã đăng ký Sở — lệch → cảnh báo
  • Điều kiện "DAT hợp quy" đọc từ dat (dat_v_thiet_bi_theo_xe, P1) — dat chưa cài thì bỏ qua điều kiện này, không chặn
  • Hết hạn giấy tờ → notify nhắc theo ngưỡng 30/15/7 ngày (config)

Liên kết chéo

  • coursema_xe (phân công theo khóa)
  • dat — chỉ đọc dat_v_thiet_bi_theo_xe; dat sở hữu binding (3 tầng §6)
  • notify — nhắc hạn giấy tờ xe
  • fleet (v1.5) — nhiên liệu, bảo dưỡng, chi phí

⚠ Câu hỏi mở

  • Danh mục giấy tờ xe đầy đủ theo quy định (phù hiệu? camera?)
  • Xe thuê ngoài/liên kết quản lý khác xe sở hữu?
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 đủ: vehicle.main.<feature>.<action>.

▸ permissions[] — manifest.json

[ { "group": "main", "feature": "vehicle", "label": "Xe tập lái", "actions": [ "view", "create", "edit", "delete", "export" ] }, { "group": "main", "feature": "license-doc", "label": "Giấy tờ xe", "actions": [ "view", "create", "edit", "configure" ] } ]

⚠️ device-bind đã gỡ khỏi manifest vehicle (20/7) — chuyển thành dat.main.binding.{view,assign,export}. Seed role: quyền assign của KY_THUAT chuyển sang key mới.

▸ Ma trận vai trò × feature

FeatureQTHTGIAM_DOCKY_THUATQL_DAO_TAOGIAO_VU
vehicleRRWRR
license-docRRW

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ù: không còn action đặc thù — assign (gắn/tháo DAT) đã chuyển sang dat.binding.