fix(payroll): tách BHTNLĐ-BNN + cleanup Insurance Rate orphans #6

Merged
tant merged 1 commit from fix/TETRA-1326-vhrms-phase2-cleanup into develop 2026-04-22 23:33:39 +07:00
Owner

Refs: TETRA-1326

Summary

Phase 2 cleanup cho tab Bảo hiểm bắt buộc của /hrm/settings trong Tetra eOffice. Resolve 2 bugs còn lại từ QA audit (Bug 1 + Bug 2).

Bug 1 — capType undefined cho BHTNLĐ-BNN

Doctype vietnam_insurance_rate enum thiếu BHTNLDBNN → API Tetra gửi insurance_type=BHTNLDBNN bị Frappe reject → FE render hrSettings.insuranceRates.capTypes.undefined (12 console errors).

Fix: thêm BHTNLDBNN vào Select options (giữa BHTNTrade Union).

Bug 2 — Duplicate Insurance rows → tổng 23%/47%

Patch cleanup_insurance_rates_2025.py chỉ xóa records effective_from=2024-01-01, không đụng orphan với date khác (BHXH 17.5% cũ bundle TNLĐ-BNN, BHTNLDBNN lạc dòng manual insert, BHXH duplicate với rates sai, v.v.). Idempotent check ở bước seed chỉ skip insert, không cleanup orphan → duplicate sống sót.

Fix: patch cleanup_insurance_rates_orphans.py enforce canonical 5 rows @ 2025-07-01.

Thay đổi

File Note
vhrms/vhrms/doctype/vietnam_insurance_rate/vietnam_insurance_rate.json Enum thêm BHTNLDBNN
vhrms/vhrms/fixtures/__init__.py import_insurance_rates(): BHXH employer_rate 17.5→17 (tách 0.5% TNLĐ-BNN ra row riêng), thêm row BHTNLDBNN 0/0.5 @ 2025-07-01
vhrms/vhrms/patches/v0_5_0/cleanup_insurance_rates_orphans.py NEW — idempotent patch xóa mọi record không match canonical set + upsert 5 canonical rows
vhrms/patches.txt Đăng ký patch mới (sau cleanup_insurance_rates_2025)

Canonical Vietnam Insurance Rate (5 rows @ 2025-07-01)

insurance_type NLĐ DN cap_mult
BHXH 8.0 17.0 20
BHYT 1.5 3.0 20
BHTN 1.0 1.0 20
BHTNLDBNN 0.0 0.5 20
Trade Union 0.5 2.0 0

Tổng NLĐ 10.5% + DN 21.5% = 32% (bảo hiểm, Trade Union kèm ngoài).

Căn cứ pháp lý

  • Luật BHXH 2024 (41/2024/QH15) + NĐ 158/2025/NĐ-CP
  • Luật BHYT sửa đổi 51/2024/QH15
  • Luật Việc làm 74/2025/QH15 + NĐ 374/2025/NĐ-CP
  • Luật ATVSLĐ 84/2015/QH13 — TNLĐ-BNN 0.5%
  • QĐ 61/QĐ-TLĐ — đoàn phí công đoàn 0.5% từ 01/07/2025

Test plan

  • bench --site hrms.localhost migrate trên site có orphans → patch xóa + seed canonical
  • Rerun migrate → idempotent, không tạo duplicate
  • UI /hrm/settings tab Bảo hiểm → hiển thị 5 rows, không còn capTypes.undefined

Lưu ý merge

Branch này base từ develop, net-new only — KHÔNG overlap với commits 547223f (TD 2024 cleanup) và 9292cc8 (PC_AT 730k) hiện đang ở main nhưng chưa vào develop. Khi merge maindevelop (trước hoặc sau PR này đều OK), không có conflict.

Refs: TETRA-1326 ## Summary Phase 2 cleanup cho tab Bảo hiểm bắt buộc của `/hrm/settings` trong Tetra eOffice. Resolve 2 bugs còn lại từ QA audit (Bug 1 + Bug 2). ### Bug 1 — capType undefined cho BHTNLĐ-BNN Doctype `vietnam_insurance_rate` enum thiếu `BHTNLDBNN` → API Tetra gửi `insurance_type=BHTNLDBNN` bị Frappe reject → FE render `hrSettings.insuranceRates.capTypes.undefined` (12 console errors). **Fix**: thêm `BHTNLDBNN` vào Select options (giữa `BHTN` và `Trade Union`). ### Bug 2 — Duplicate Insurance rows → tổng 23%/47% Patch `cleanup_insurance_rates_2025.py` chỉ xóa records `effective_from=2024-01-01`, không đụng orphan với date khác (BHXH 17.5% cũ bundle TNLĐ-BNN, BHTNLDBNN lạc dòng manual insert, BHXH duplicate với rates sai, v.v.). Idempotent check ở bước seed chỉ skip insert, không cleanup orphan → duplicate sống sót. **Fix**: patch `cleanup_insurance_rates_orphans.py` enforce canonical 5 rows @ 2025-07-01. ## Thay đổi | File | Note | |------|------| | `vhrms/vhrms/doctype/vietnam_insurance_rate/vietnam_insurance_rate.json` | Enum thêm `BHTNLDBNN` | | `vhrms/vhrms/fixtures/__init__.py` | `import_insurance_rates()`: BHXH `employer_rate` 17.5→17 (tách 0.5% TNLĐ-BNN ra row riêng), thêm row BHTNLDBNN 0/0.5 @ 2025-07-01 | | `vhrms/vhrms/patches/v0_5_0/cleanup_insurance_rates_orphans.py` | **NEW** — idempotent patch xóa mọi record không match canonical set + upsert 5 canonical rows | | `vhrms/patches.txt` | Đăng ký patch mới (sau `cleanup_insurance_rates_2025`) | ## Canonical Vietnam Insurance Rate (5 rows @ 2025-07-01) | insurance_type | NLĐ | DN | cap_mult | |----------------|-----|-----|----------| | BHXH | 8.0 | 17.0 | 20 | | BHYT | 1.5 | 3.0 | 20 | | BHTN | 1.0 | 1.0 | 20 | | BHTNLDBNN | 0.0 | 0.5 | 20 | | Trade Union | 0.5 | 2.0 | 0 | Tổng NLĐ **10.5%** + DN **21.5%** = **32%** (bảo hiểm, Trade Union kèm ngoài). ## Căn cứ pháp lý - Luật BHXH 2024 (41/2024/QH15) + NĐ 158/2025/NĐ-CP - Luật BHYT sửa đổi 51/2024/QH15 - Luật Việc làm 74/2025/QH15 + NĐ 374/2025/NĐ-CP - Luật ATVSLĐ 84/2015/QH13 — TNLĐ-BNN 0.5% - QĐ 61/QĐ-TLĐ — đoàn phí công đoàn 0.5% từ 01/07/2025 ## Test plan - [ ] `bench --site hrms.localhost migrate` trên site có orphans → patch xóa + seed canonical - [ ] Rerun migrate → idempotent, không tạo duplicate - [ ] UI `/hrm/settings` tab Bảo hiểm → hiển thị 5 rows, không còn `capTypes.undefined` ## Lưu ý merge Branch này base từ `develop`, net-new only — **KHÔNG overlap** với commits `547223f` (TD 2024 cleanup) và `9292cc8` (PC_AT 730k) hiện đang ở `main` nhưng chưa vào `develop`. Khi merge `main` → `develop` (trước hoặc sau PR này đều OK), không có conflict.
Resolve 2 bugs trong tab Bảo hiểm bắt buộc của /hrm/settings (TETRA-1326):

Bug 1 — capType undefined cho BHTNLĐ-BNN:
  Doctype vietnam_insurance_rate enum thiếu "BHTNLDBNN" → API Tetra
  gửi insurance_type=BHTNLDBNN bị reject → FE render capTypes.undefined.
  Thêm BHTNLDBNN vào Select options.

Bug 2 — Duplicate Insurance rows → tổng 23%/47%:
  Patch cleanup_insurance_rates_2025 chỉ xóa records effective_from=2024-01-01,
  không đụng orphan với effective_from khác (BHXH 17.5% cũ bundle TNLĐ-BNN,
  manual BHTNLDBNN lạc dòng, v.v.). Thêm patch orphan cleanup enforce
  canonical set 5 dòng.

Thay đổi:
  - doctype/vietnam_insurance_rate.json: enum thêm BHTNLDBNN.
  - fixtures/__init__.py: BHXH employer_rate 17.5 → 17 (tách 0.5% TNLĐ-BNN
    ra row riêng), thêm row BHTNLDBNN 0/0.5 @ 2025-07-01.
  - patches/v0_5_0/cleanup_insurance_rates_orphans.py: idempotent patch
    xóa mọi record không match canonical set (BHXH 8/17, BHYT 1.5/3,
    BHTN 1/1, BHTNLDBNN 0/0.5, Trade Union 0.5/2 @ 2025-07-01) + upsert
    5 canonical rows.
  - patches.txt: đăng ký patch mới.

Sau apply:
  - Tab Bảo hiểm hiển thị 5 rows riêng (không còn capTypes.undefined).
  - Tổng NLĐ 10.5% + DN 21.5% = 32% (bảo hiểm, không gồm Trade Union).

Refs: TETRA-1326
tant merged commit eb3476f6a0 into develop 2026-04-22 23:33:39 +07:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
tant/vhrms!6
No description provided.