# Báo cáo Audit & Vá Lỗi Engine Bát Tự (Tứ Trụ)

**URL:** https://lab.quizzman.com/tool/about-bazi-audit  
**Công cụ:** https://lab.quizzman.com/tool/bazi-reading  
**Ngày:** T8/2026

Audit `services/bazi` (Thập Thần, quan hệ Chi/Can, Thần Sát, giờ Thái Dương thực, Đại Vận, Lưu Niên). Các lỗi dưới đây đã được vá trong engine.

---

## 1. Thập Thần — bảng `TEN_GODS_MAPPING` đảo Thực/Thương

- **Triệu chứng:** Tra trực tiếp `getTenGodDirect` / mapping lệch 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 với quy tắc cổ điển: cùng âm dương = Thương Quan, khác = Thực Thần. Tài / Quan / Ấn vốn đúng nên giữ nguyên.

---

## 2. Hợp / Xung / Hại — lookup cặp bị 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 (Tý–Sửu, Ất–Canh, …).
- **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 cho quan hệ 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ú sai bảng

- **Kiếp Sát / Vong Thần:** Hai bảng từng giống nhau và lệch tam hợp (thủy/hỏa nhóm nhầm vị trí).
- **Patch:** KS `申子辰→巳 / 寅午戌→亥 / 巳酉丑→寅 / 亥卯未→申`; VT đối xung. Cô Thần / Quả Tú theo mùa: `寅卯辰→巳/丑`, v.v.

---

## 4. Giờ trụ — True Solar Time bị cộng hai lần

- **Triệu chứng:** Khi có kinh độ / thành phố, giờ trụ lệch thêm ~vài phút.
- **Nguyên nhân:** `calculateFourPillars` đã gọi `getTrueSolarTimeForBazi`, rồi còn truyền `longitude` vào `getHourCanChi` (áp TST lần nữa).
- **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í

- **Triệu chứng:** Tuổi khởi vận thường thấp hơn lý thuyết.
- **Nguyên nhân:** Khoảng cách lấy mọi tiết khí (`isStart`), gồm cả khí; Đẩu Số / Tử Bình chỉ đếm **tiết** (tháng bound). Trong calendar-engine, tiết = `type: 'minor'`.
- **Patch:** Chỉ nhận `isStart && type === 'minor'`; dùng timezone lá số; clamp tuổi tối thiểu 1.

---

## 6. Lưu Niên / luận Đại Vận chi tiết

- **Lưu Niên:** Trụ năm lấy theo năm dương thuần; sửa lấy `solarYear` sau Lập Xuân (mẫu 15/3).
- **`generateDetailedReading`:** `getTenGod` nhận object thiếu → luôn rơi về Tỷ Kiên; sửa truyền đủ stem object.

---

## Tổng kết

Can Chi trụ (tiết khí / JDN) vẫn là phần vững nhất. Các lớp Thập Thần (mapping), quan hệ, vài thần sát, TST và khởi vận đã được chỉnh. Rủi ro còn lại: Dụng Thần heuristic (chưa đủ Nguyệt Lệnh), 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.
