Audit services/bazi đã phát hiện và vá các lỗi thuật toán dưới đây. Can Chi trụ qua tiết khí / JDN vẫn là phần vững; lệch chủ yếu ở lớp Thập Thần (bảng tra), quan hệ, vài thần sát, giờ thực và khởi vận.
1. Thập Thần — TEN_GODS_MAPPING đảo Thực / Thương nghiêm trọng
Triệu chứng
getTenGodDirect / bảng mapping lệch so với getTenGod() (công thức âm dương).
Nguyên nhân
Với mỗi Nhật Chủ, cặp Can «ta sinh» gán ngược Thực Thần ↔ Thương Quan (ví dụ Giáp–Bính ghi Thực thay vì Thương).
Patch
Đồng bộ mapping: cùng âm dương = Thương Quan, khác = Thực Thần. Tài / Quan / Ấn giữ nguyên.
2. Hợp / Xung / Hại — lookup cặp hỏng vì .sort()
Triệu chứng
Nhiều Lục Hợp, Lục Xung, Lục Hại, Thiên Can Hợp không hiện.
Nguyên nhân
[a,b].sort().join('-') rồi «reverse» cũng đã sort — cùng một chuỗi; khóa bảng là thứ tự cố định (Tý-Sửu), không phải thứ tự từ điển.
Patch
lookupUnorderedPair(table, a, b) thử cả a-b và b-a. Áp dụng trụ, Lưu Niên, chi tiết Đại Vận.
3. Thần Sát — Kiếp Sát / Vong Thần / Cô Thần / Quả Tú
Kiếp Sát và Vong Thần từng giống nhau và lệch tam hợp. Cô Thần / Quả Tú lệch mùa.
Patch: KS 申子辰→巳 / 寅午戌→亥 / …; VT đối xung. Cô/Quả theo mùa cổ điển (寅卯辰→巳/丑, …).
4. True Solar Time cộng hai lần
calculateFourPillars đã chỉnh giờ bằng getTrueSolarTimeForBazi, rồi còn truyền longitude vào getHourCanChi.
Patch: Chỉ truyền giờ/phút đã chỉnh; không truyền longitude lần hai.
5. Đại Vận khởi vận — đếm cả Trung khí
Khoảng cách lấy mọi tiết khí (isStart), gồm cả khí → tuổi khởi vận thấp hơn lý thuyết. Tử Bình chỉ đếm tiết (trong engine: type: 'minor').
Patch: isStart && type === 'minor'; timezone lá số; tuổi tối thiểu 1.
6. Lưu Niên / luận Đại Vận chi tiết
- Trụ năm Lưu Niên lấy
solarYear(mẫu 15/3), không dùng năm dương thuần. generateDetailedReadingtruyền đủ stem object vàogetTenGod(trước đó luôn rơi về Tỷ Kiên).
Tổng kết
Sáu nhóm lỗi trên đã vá. Rủi ro còn lại: Dụng Thần heuristic, một số thần sát chưa gắn vào analyzeShenSha, chính sách ngày khi giờ Tý / TST qua nửa đêm.