T05 — Odoo 19 Payroll: default rules tự tạo → payslip tính GẤP ĐÔI
Vấn đề
Khi tạo custom Salary Structure trên Odoo 19, Odoo tự động thêm 8 default rules (BASIC, GROSS, NET, v.v.) vào mỗi structure. Nếu script cũng tạo custom rules cùng code → payslip tính 2 lần cho mỗi dòng.
Lỗi rất tinh vi: không báo lỗi, payslip hiển thị bình thường, chỉ phát hiện khi so sánh số liệu (BASIC gấp đôi, NET sai).
Ví dụ thực tế
5 custom structures × 8 default rules = 40 rules trùng lặp cần archive.
Structure "Regular Pay — NOTE":
✅ Custom BASIC (id=130, seq=1) ← script tạo
❌ Default BASIC (id=200, seq=0) ← Odoo tự tạo → TÍNH 2 LẦN
✅ Custom GROSS (id=140, seq=10)
❌ Default GROSS (id=201, seq=0) ← TÍNH 2 LẦN
...
Giải pháp
Archive (KHÔNG xóa) default rules khỏi custom structures:
Archive 8 default rules per structure (5 structures = 40 rules)
client.write('hr.salary.rule', [default_rule_ids], {'active': False})
active=False) → rules không active nhưng data nguyên vẹnHR/scripts/05_cleanup_default_rules.pyCách phát hiện
1. Tạo Pay Run → tạo payslip → check BASIC line
2. Nếu BASIC = wage × 2 → có default rule trùng
3. Hoặc: search_read('hr.salary.rule', [('struct_id','=',X),('code','=','BASIC')], ['id','name','active'])
4. Nếu trả về 2+ records → archive cái có sequence=0 (default)
Áp dụng khi
📚 Published from Company Knowledge Base — T05
Last updated: 2026-03-11
Review by: 2026-06-09