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

tuition — Học phí & công nợ MVP NEW

Quản lý học phí theo đợt (thực tế đóng nhiều lần): bảng giá, công nợ, phiếu thu, miễn giảm. v1.5 mở rộng kế toán + HĐĐT ở module finance — tuition giữ phần gắn hồ sơ học viên.

⚠️ Chưa có trong code — scaffold mới. Đã chốt tách module riêng ngay từ đầu (quy tắc prefix bảng — xem review module).
1

Feature / BO / Action

FeatureBO chínhAction
pricelistBảng học phí theo hạng/khóaviewcreateeditapprove
installmentCông nợ theo đợtviewcreateeditexport
receiptPhiếu thuviewcreatecollectrefundreprint
discountMiễn giảmviewcreateapprove
2

Dữ liệu chính

BOTrường chính
Bảng học phíHạng/khóa áp dụng · mức phí chuẩn · cơ cấu đợt mặc định (vd 50–30–20%, mốc theo trạng thái hồ sơ) · hiệu lực từ (version giá)
Công nợ đợt tuition_hoc_phi_dotHọc viên (ma_dk, ma_kh, ma_csdt) — không FK cứng · đợt (UNIQUE học viên+đợt) · phải đóng/đã đóng · hạn/ngày đóng · trạng thái (chưa/một phần/đã đóng) · số hóa đơn (→ finance v1.5)
Phiếu thuSố phiếu (quy tắc mã catalog) · học viên · đợt · số tiền · hình thức (TM/CK) · người thu · ngày · trạng thái (thu/hoàn)
Miễn giảmHọc viên · lý do · số tiền/% · người duyệt — điều chỉnh vào công nợ đợt
3

Quy tắc & liên kết

Quy tắc nghiệp vụ

  • Tạo hồ sơ → sinh kế hoạch đợt từ cơ cấu mặc định (sửa theo thỏa thuận)
  • Thu đủ đợt 1 → callback sang student: hồ sơ da_thu_dot1
  • Phiếu thu đã in không sửa — sai thì hoàn + lập mới (audit)
  • Miễn giảm bắt buộc duyệt — không trừ tay vào công nợ
  • Data scope: kế toán từ hop_le trở đi · học viên thấy công nợ của mình

Liên kết chéo

  • student(ma_dk, ma_kh, ma_csdt) + callback trạng thái
  • catalog — quy tắc mã phiếu, hạng
  • finance (v1.5) — HĐĐT, sổ thu chi
  • payment (v2) — thanh toán online · portal (v1.5) — tra cứu app

⚠ Câu hỏi mở

  • Vĩnh An thu mấy đợt, mốc gắn trạng thái nào?
  • Có thu hộ lệ phí sát hạch/khám SK → thêm loại khoản thu?
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 đủ: tuition.main.<feature>.<action>.

▸ permissions[] — manifest.json

[ { "group": "main", "feature": "pricelist", "label": "Bảng học phí", "actions": [ "view", "create", "edit", "approve" ] }, { "group": "main", "feature": "installment", "label": "Công nợ đợt", "actions": [ "view", "create", "edit", "export" ] }, { "group": "main", "feature": "receipt", "label": "Phiếu thu", "actions": [ "view", "create", "collect", "refund", "reprint" ] }, { "group": "main", "feature": "discount", "label": "Miễn giảm", "actions": [ "view", "create", "approve" ] } ]

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

▸ Ma trận vai trò × feature

FeatureQTHTGIAM_DOCKE_TOANQL_DAO_TAOTUYEN_SINHHOC_VIEN
pricelistRRAWRR
installmentRRWRRR²
receiptRRW
discountRRAW

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ù: receipt +collect,refund,reprint (KE_TOAN — in lại phiếu có log)

▸ 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": "installment", "fields": [ "ma_dk", "ma_kh", "ma_csdt" ], "scopeVars": [ "current_ma_dk_list" ] } ]

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

Vai tròFeature (action)Điều kiện record
HOC_VIENinstallment (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": "tuition", "feature": "installment", "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.

Scope ³ của KE_TOAN (từ trạng thái hợp lệ) enforce ở student.hoso — tuition đọc công nợ theo hồ sơ đã lọc.