Thu nhập nhân sự — lương & hoa hồng

Thu nhập nhân sự là lương hoặc hoa hồng mà phòng khám phải trả cho nhân viên (bác sĩ, phụ tá, vệ sinh viên, kỹ thuật viên, v.v.) dựa trên vị trí, công việc hoặc commission rule. Nó tách biệt hoàn toàn với tiền bệnh nhân thanh toán (payment) hay doanh số (revenue).

Giao diện thu nhập nhân viên
Sơ đồ: stage complete → earning recognized → adjustment (optional) → net earning

Vị trí nhân sự & hoa hồng theo vị trí

Mỗi nhân viên có một Vị trí (StaffPosition) xác định vai trò vận hành của họ. Vị trí kiểm soát hoa hồng tự động:

Vị tríÝ nghĩaVí dụ
DENTISTBác sĩBS Nguyễn, BS Trần
ASSISTANTPhụ tá / Trợ táPhụ tá Lan, Phụ tá Hùng
HYGIENISTVệ sinh viênVS Hồng
TECHNICIANKỹ thuật viên (lab)KTV Sơn
OTHERVị trí khácQuản lý, tư vấn

Khi thiết lập dịch vụ, bạn cấu hình tỉ lệ hoa hồng theo vị trí (ví dụ: dịch vụ "Trám sứ" = 20% cho DENTIST, 10% cho ASSISTANT). Khi một công đoạn hoàn thành, mỗi người thực hiện được hoa hồng dựa vào vị trí của họ.

Vị trí cũng quyết định dropdown chọn người thực hiện. Khi chọn người thực hiện cho một công đoạn, ô "Chọn bác sĩ" chỉ hiện nhân viên vị trí DENTIST; ô "Chọn phụ tá" hiện DENTIST + ASSISTANT + HYGIENIST + TECHNICIAN (bác sĩ có thể làm phụ tá; vị trí OTHER bị loại). Đặt đúng vị trí cho nhân viên là điều kiện để họ xuất hiện đúng chỗ trong dropdown.

Nhiều người thực hiện một công đoạn

Một công đoạn có thể được thực hiện bởi một người thực hiện chính (primary operator) + nhiều phụ tá tham gia (assistants). Mỗi người có một tỉ trọng (weightPercent) phân chia hoa hồng:

  • Người thực hiện chính: bác sĩ hoặc kỹ thuật viên chính (primary operator) — tỉ trọng = 100% hoặc cao (ví dụ 80%).
  • Phụ tá tham gia: vệ sinh viên, phụ tá khác hỗ trợ (assistants) — tỉ trọng = thấp (ví dụ 20%, 30%).

Ví dụ: Công đoạn "Mão sứ răng 11, 12" — doanh thu = 4,000 k.

  • BS Nguyễn (DENTIST, 80%) → earning = 4,000 × 20% (tỉ lệ DENTIST) × 80% (tỉ trọng) = 640 k
  • Phụ tá Lan (ASSISTANT, 20%) → earning = 4,000 × 10% (tỉ lệ ASSISTANT) × 20% (tỉ trọng) = 80 k

Bốn chế độ lương / hoa hồng

Chế độÝ nghĩaTính toánGhi chú
TRACKING_ONLYChỉ theo dõi, không tính lươngKhông tính (mặc định khi tạo BS mới)Ghi log earning để báo cáo, không phát lương; phù hợp với BS nhân viên hoặc lúc chưa quyết định chế độ
FIXED_SALARYLương cứng hàng thángCố định (không thay đổi theo case)Bác sĩ nhân viên; không tính earning/case
COMMISSIONHoa hồng % doanh số / service% theo dịch vụ hoặc per-case overrideBác sĩ freelance; earning = % × service fee
HYBRIDVừa lương cơ bản + hoa hồngBase salary + % commissionBác sĩ chủ; có threshold nhất định

TRACKING_ONLYmặc định khi tạo BS mới — không có earning row sinh ra cho lương, chỉ ghi nhận để hỗ trợ tổng kết / kế hoạch chuyển chế độ sau.

Quan trọng

FIXED_SALARY nhân viên không có earning ledger — không tính theo case, không trừ khi warranty, chỉ lương cứng. COMMISSION/HYBRID mới có earning row khi stage complete hoặc adjustment được tạo. TRACKING_ONLY ghi log nhưng không phát lương.

Khi nào earning được ghi nhận

Earning KHÔNG phát sinh từ payment. Nó chỉ được tạo khi:

  1. Stage completion — người thực hiện kết thúc công đoạn điều trị → earning được tạo cho mỗi người thực hiện dựa vào vị trí + tỉ trọng của họ.
  2. Explicit adjustment — kế toán/quản lý cộng/trừ thủ công (bonus, penalty, warranty adjustment).
  3. Warranty / quality correction — bảo hành bị claim hoặc quality issue → tạo adjustment record (âm) nếu cần.

Ví dụ

  • BS hoàn thành stage "Mão sứ" (niêm yết 2.000 k đã gồm VAT 5% → doanh thu thuần ≈ 1.905 k, DENTIST 20%) → earning ≈ 1.905 × 20% = 381 k.
  • Nhưng nếu phụ tá cũng tham gia (ASSISTANT 10%, tỉ trọng 20%) → phụ tá earning ≈ 1.905 × 10% × 20% = 38 k.
  • BN thanh toán ngay 2,000 k → payment = 2,000 k, nhưng earning của mỗi người vẫn tính khi stage complete (tách biệt, không chờ payment).
  • BN trả sau 1 tháng → payment delay, nhưng earning vẫn ghi ngay (không chờ).
  • Stage bị redo/warranty → adjustment (âm) được tạo cho mỗi người → net earning giảm.

Công thức tính earning

Hoa hồng tính trên doanh thu thuần (chưa thuế)

Kể từ khi DentIQ áp dụng tách thuế VAT, hoa hồng luôn tính trên doanh thu thuần (net revenue — chưa bao gồm VAT), không tính trên phần thuế. Ví dụ: dịch vụ niêm yết 2.000.000 ₫ đã gồm VAT 5% → doanh thu thuần = 1.904.762 ₫ → hoa hồng BS 20% = 380.952 ₫ (không phải 400.000 ₫ trên giá niêm yết). Với dịch vụ miễn thuế (KCT), giá niêm yết = doanh thu thuần → không đổi gì.

Setup lần đầu: tỉ lệ hoa hồng theo vị trí

Vào "Thiết lập → Dịch vụ" → chỉnh từng dịch vụ:

  • Mỗi dịch vụ có các field: `earningPercent_DENTIST`, `earningPercent_ASSISTANT`, `earningPercent_HYGIENIST`, v.v. (ví dụ: 20%, 10%, 0%, …).
  • Khi nhân viên (ví dụ: BS Nguyễn vị trí DENTIST) hoàn thành service đó → earning = doanh thu thuần × 20% (tỉ lệ DENTIST) × weight% của anh ta.

Override riêng theo nhân sự (tuỳ chọn)

Nếu cần hoa hồng đặc biệt cho một nhân viên cụ thể:

  • Vào "Tổ chức → Nhân sự" → chỉnh profile nhân viên.
  • Edit field "Compensation Mode" (COMMISSION / HYBRID / FIXED_SALARY).
  • Optional: setup override hoa hồng per-service (ví dụ: BS Nguyễn dịch vụ "Implant" = 25% thay vì 20%).
  • Save → apply từ lúc đó.
  • Precedence: (1) Override riêng nhân viên → (2) Tỉ lệ theo vị trí → (3) Không có.

Xem earning ledger

Quản lý xem earning của nhân viên khác

Vào menu "Thu nhập nhân sự" (Staff Compensation) → chọn nhân viên → xem ledger:

  • Gross Earning — tổng earning từ stage complete (read-only).
  • Adjustment — cộng/trừ từ warranty, quality, hoặc bonus (audit trail).
  • Net Earning — Gross + Adjustment = lương ròng.

Nhân viên xem earning của mình

Nếu bạn có quyền earnings.read, bạn chỉ thấy earning của chính mình (non-admin behavior). Quản lý/kế toán có quyền earnings.manage mới thấy toàn bộ nhân viên.

  • COMMISSION/HYBRID nhân viên → xem earnings ledger của mình.
  • FIXED_SALARY nhân viên → không thấy earning detail (chỉ lương cứng, không tracking stage-by-stage).
  • TRACKING_ONLY nhân viên → không thấy earning (log-only, không phát lương).
Quyền & hiding (CI-08, CI-02)

Nếu bạn thiếu earnings.read, earning amount hiển thị "Dữ liệu bị ẩn do thiếu quyền" (CI-02, không bao giờ là 0 ₫). FIXED_SALARY/TRACKING_ONLY không được nhìn thấy earning numbers ngay cả nếu có quyền.

Điều chỉnh earning

Bước 1: Tạo adjustment

Vào "Thu nhập nhân sự" → chọn nhân viên → nhấn "Thêm điều chỉnh":

  • Amount — số tiền cộng/trừ (+ hoặc −).
  • Reason — lý do (bonus, warranty, quality issue, etc.).
  • Source — liên kết (treatment stage ID, warranty ID, manual).
  • Note — ghi chú thêm (tuỳ chọn).

Bước 2: Approval (nếu vượt threshold)

Nếu adjustment vượt policy threshold (ví dụ > 500 k):

  • Status = PENDING_APPROVAL (chưa vào net earning).
  • Quản lý vào "/doctor-compensation-adjustments" → review → approve/reject.
  • Approve → status = ACTIVE → tính vào net earning.
  • Reject → status = REJECTED → không tính vào net.

Bước 3: Xem kết quả

Net earning = Gross earning + Σ(active adjustments).

Ảnh minh hoạ
Form điều chỉnh earning: amount (+ hoặc −), reason, source, note, submit

Warranty & quality correction

Nếu stage bị warranty claim hoặc redo do quality:

  • Kế toán/quản lý vào treatment plan → stage warranty section.
  • Click "Claim warranty" hoặc "Mark quality issue".
  • Optional: tạo adjustment âm cho mỗi người thực hiện → net earning giảm.
  • FIXED_SALARY nhân viên: không auto deduct — chỉ ghi record, không trừ lương.

Stage reopen & earning reversal

Nếu BS mở lại stage đã complete:

  • Earning gốc giữ nguyên (không xoá).
  • System tạo adjustment âm (correction record) → net earning giảm.
  • Khi stage complete lại → earning mới được tạo (append-only, không sửa gốc).

Monthly close & settlement

Vào cuối tháng:

  • Vào menu "Thu nhập nhân sự" → xem net earning summary mỗi nhân viên.
  • Export Excel: tên, vị trí, gross, adjustment, net earning.
  • Kế toán thực hiện thanh toán lương/commission cho nhân viên.
  • DentIQ ghi record "settlement" (tuỳ chọn) để tracking.

Tách biệt Earning, Payment, Revenue

Rất quan trọng không nhầm lẫn:

Khái niệmÝ nghĩaTính toán từ
PaymentTiền BN thanh toánGhi khi BN nộp tiền
Revenue / Doanh thu thuầnDoanh số (KPI) — chưa bao gồm VATSum payment collected (net of VAT). Hiển thị riêng dòng "Thuế GTGT" trong báo cáo.
Staff EarningLương/hoa hồng nhân viên phải nhậnStage completion — tính trên doanh thu thuần (net, chưa VAT) × tỉ lệ vị trí × weight%. Điều chỉnh, warranty/quality correction.
CashTiền mặt/ngân hàng phòng khám giữTừ payment inflow − outflow

Ví dụ: BN trả 1,000 k (payment) → BS earning = 200 k (20%), Phụ tá earning = 50 k (10% × 50% weight) → revenue = 1,000 k → cash = +1,000 k. Ba con số khác nhau!

Quyền cấp truy cập

Vai tròQuyền cầnCó thể làm
Kế toánearnings.read + earnings.manageXem earning tất cả, tạo/approve adjustment
Quản lý phòng khámearnings.read + earnings.manageCấu hình % earning, override, approval
Nhân viên COMMISSION/HYBRIDearnings.readXem earning ledger của chính mình (non-admin)
Nhân viên FIXED_SALARY/TRACKINGkhôngKhông thấy earning detail

Edge case: nhân viên không có rule

Nếu nhân viên chưa setup earning rule hoặc không có vị trí xác định:

  • Stage complete không tạo earning cho người đó.
  • Earning section hiển thị empty state: "Nhân viên không có earning rule" hoặc "FIXED_SALARY — không tracking earning".
  • Không fake earning rows.