# QP-CAL-001: Kiến trúc hệ thống tính toán lịch pháp âm dương và mô hình quy chiếu thiên văn Quizzman

<!--
  Document ID: QP-CAL-001
  Version: 1.0.0
  Profile: QPS-ISO 1.0
  Classification: system
  Language: vi (Canonical)
-->

## Tóm tắt (Abstract)

**Background / Context:** Lịch âm dương phương Đông (Lunisolar Calendar) và các hệ thống tri thức lịch pháp dân sự, thuật số cổ truyền đặt ra yêu cầu tính toán kết hợp giữa cơ học thiên văn hiện đại và các quy ước văn hóa, lịch sử phức tạp. Trong các hệ thống tính toán phân tán, sự thiếu đồng nhất giữa ranh giới ngày dân sự địa phương, phép chiếu thời gian động học và các mô hình hành tinh thường dẫn đến những sai số nghiêm trọng như lệch ngày sóc, sai lệch tiết khí và tính sai Can Chi.  
**Methodology:** Công trình này giới thiệu toàn diện kiến trúc hệ thống tính toán lịch pháp `@quizzman/qm-calendar` phiên bản 1.2.0. Hệ thống tích hợp chuỗi tính toán thiên văn chính xác cao: quy đổi Julian Date liên tục theo chuẩn quốc tế, xấp xỉ kinh độ hoàng đạo Mặt Trời qua lý thuyết hành tinh VSOP87 (129 số hạng theo Jean Meeus), giải nghiệm điểm Sóc thiên văn theo Meeus (Chương 49), mô hình nội suy liên tục 5 năm cho hiệu số $\Delta T$, và giải thuật xác định 24 Tiết Khí dựa trên thời điểm chuyển tiếp UTC thực tế. Đồng thời, hệ thống chuẩn hóa giải thuật Giờ Thái Dương Thực (True Solar Time) với phương trình thời gian (Equation of Time), phân định ranh giới Dạ Tý / Chính Tý, chu kỳ 60 Hoa Giáp, Thập Nhị Trực theo chi tháng tiết khí, Nhị Thập Bát Tú neo theo mốc JDN cố định, và bảng tra cứu 8 giai đoạn múi giờ lịch sử Việt Nam.  
**Results:** Báo cáo kiểm định và hồ sơ audit thuật toán đã xác định và khắc phục triệt để 9 khiếm khuyết cơ bản (A01 đến A09). Hệ thống đã vượt qua 100% (139/139) ca kiểm chuẩn biên và hồi quy trong bộ benchmark độc lập, 834 phép kiểm tra ranh giới, cùng 146 462 ngày kiểm thử đối ứng hai chiều liên tục từ năm 1800 đến 2200 với 0 lỗi sai biệt. Kết quả so chuẩn phân chí năm 2024 với dữ liệu của Đài quan sát Hải quân Hoa Kỳ (USNO) đạt sai số kinh độ $|\Delta\lambda_\odot| < 0.0005^\circ$, và thời điểm Sóc khớp với NASA trong giới hạn 0.1 phút.  
**Conclusion:** Hệ thống `@quizzman/qm-calendar` thiết lập một khung quy chuẩn toán học khả kiểm, có tính tái lập cao và đóng vai trò nguồn chân lý thực thi (executable source of truth) chuẩn mực cho nghiên cứu lịch pháp và các dịch vụ tính toán liên quan.

---

## 1 Phạm vi áp dụng (Scope)

Tài liệu này công bố đặc tả kiến trúc, mô hình toán học và các quy tắc chuẩn hóa của hệ thống tính toán lịch pháp âm dương Quizzman (`@quizzman/qm-calendar`), bao gồm:
1. Quy chuẩn biểu diễn thang đo thời gian và chuyển đổi liên tục sang Julian Day Number (JDN) và Julian Date (JD).
2. Chuỗi tính toán cơ học thiên văn: lý thuyết chuyển động hành tinh VSOP87, thời điểm Sóc thiên văn, phương trình thời gian (Equation of Time), và mô hình thời gian động học ($\Delta T$).
3. Thuật toán phân định tháng âm lịch, tháng nhuận (vô trung khí), và phân tích nguyên nhân phân kỳ mồng 1 Tết giữa múi giờ Việt Nam (UTC+07:00) và Trung Quốc (UTC+08:00).
4. Mô hình số hóa các chu kỳ lịch pháp truyền thống: Lục Thập Hoa Giáp (Can Chi năm, tháng, ngày, giờ), quy ước Dạ Tý và Chính Tý, Thập Nhị Trực, và Nhị Thập Bát Tú.
5. Mô hình quy chiếu Giờ Thái Dương Thực (True Solar Time) và hiệu ứng chuyển giao ngày hiệu lực (`effectiveJdn`) trong việc lập lá số Bát Tự.
6. Mô hình phân vùng và chuyển dịch 8 giai đoạn múi giờ lịch sử Việt Nam từ trước năm 1906 đến sau năm 1975.
7. Hồ sơ kiểm định thuật toán, phân tích nguyên nhân và giải pháp khắc phục 9 lỗi ranh giới hệ thống (A01 đến A09).

Phạm vi áp dụng bao gồm toàn bộ các dịch vụ tra cứu lịch, công cụ thiên văn, và hệ thống xử lý dữ liệu niên đại của hệ sinh thái Quizzman.

## 2 Tài liệu viện dẫn (Normative references)

Các tài liệu viện dẫn sau đây là cơ sở bắt buộc áp dụng trong toàn bộ hệ thống:

- **ISO 8601-1:2019** [@REF-ISO-8601], *Date and time — Representations for information interchange — Part 1: Basic rules*.
- **ISO 2145:1978** [@REF-ISO-2145], *Documentation — Numbering of divisions and subdivisions in written documents*.
- **ISO 690:2021** [@REF-ISO-690], *Information and documentation — Guidelines for bibliographic references and citations to information resources*.
- **Jean Meeus (1998)** [@REF-MEEUS-1998], *Astronomical Algorithms*, 2nd Edition, Willmann-Bell, Richmond, Virginia.
- **P. Bretagnon, G. Francou (1988)** [@REF-VSOP87], *Planetary theories in rectangular and spherical variables. VSOP87 solutions*, Astronomy and Astrophysics, Vol. 202, pp. 309–315.
- **E. M. Standish (1998)** [@REF-STANDISH-1998], *JPL Planetary and Lunar Ephemerides, DE405/LE405*, JPL Interoffice Memorandum 312.F.
- **R. S. Park et al. (2021)** [@REF-PARK-2021], *The JPL Planetary and Lunar Ephemerides DE440 and DE441*, The Astronomical Journal, Vol. 161, No. 3.
- **J. Chapront, G. Francou (2003)** [@REF-CHAPRONT-2003], *The lunar theory ELP/MPP02*, Astronomy and Astrophysics, Vol. 404, pp. 735–742.
- **F. Espenak, J. Meeus (2006)** [@REF-ESPENAK-2006], *Five Millennium Catalog of Solar Eclipses: -1999 to +3000*, NASA TP-2006-214141.
- **Hồ Ngọc Đức (2000)** [@REF-HO-2000], *Lunisolar Calendar Calculations and Vietnamese Standard Meridian*, Leipzig University.
- **IANA Time Zone Database (2026a)** [@REF-TZDB-2026], *Time Zone Database*, Internet Assigned Numbers Authority.
- **USNO & HMNAO (2023)** [@REF-USNO-ALMANAC], *The Astronomical Almanac for the Year 2024*, Washington: US Government Publishing Office.
- **Hong Kong Observatory (2024)** [@REF-HKO-CALENDAR], *Gregorian-Lunar Calendar Conversion Tables of the Hong Kong Observatory (1901–2100)*.
- **Doãn Lộc, Mai Giác Thành (1741)** [@REF-HIEPKY-1741], *Khâm Định Hiệp Kỷ Biện Phương Thư (欽定協紀辨方書)*, Tứ Khố Toàn Thư đệ 807 sách.
- **Quách Thủ Kính, Vương Tuần (1281)** [@REF-SHOUSHILI-1281], *Thọ Thời Lịch (授時曆)*, Nguyên Sử Quyển 52–55.
- **Lê Quý Đôn (1777)** [@REF-LEQUYDON-1777], *Vân Đài Loại Ngữ (芸臺類語)*, Quyển 1: Ngôn tạo khảo.
- **Quizzman Technical Reference (2026)** [@REF-QM-CAL-2026], *Quizzman Lunisolar Calendar Engine Technical Reference and Architecture v2.1*.
- **Quizzman Quality Group (2026)** [@REF-QM-AUDIT-2026], *Quizzman Calendar Engine Algorithm Audit and Fix Verification Report*, Technical Dossier AUD-2026-CAL-02.

## 3 Thuật ngữ và định nghĩa (Terms and definitions)

Trong tài liệu này, các thuật ngữ sau đây được định nghĩa thống nhất:

### 3.1 Ngày dân sự (Civil day)
Khoảng thời gian liên tục kéo dài 86 400 giây theo thang đo thời gian địa phương, tính từ 00:00:00 đến 24:00:00.

### 3.2 Sóc thiên văn (Astronomical new moon)
Thời điểm thiên văn khi tâm của Mặt Trăng và tâm của Mặt Trời có cùng kinh độ hoàng đạo biểu kiến nhìn từ tâm Trái Đất (kinh độ tương đối bằng $0^\circ$), trong thuật ngữ lịch pháp Đông Á gọi là thời điểm Sóc.

### 3.3 Trung khí (Major solar term)
Tiết khí trung tâm (Trung khí), tương ứng với các thời điểm kinh độ hoàng đạo của Mặt Trời đạt các bội số nguyên của $30^\circ$ ($\lambda_\odot = 0^\circ, 30^\circ, 60^\circ, \dots, 330^\circ$).

### 3.4 Tiết khí (Minor solar term)
Tiết khí phụ (Tiết khí thông thường), tương ứng với các thời điểm kinh độ hoàng đạo của Mặt Trời đạt các góc lẻ của $15^\circ$ ($\lambda_\odot = 15^\circ, 45^\circ, 75^\circ, \dots, 345^\circ$).

### 3.5 Giờ Thái Dương Thực (True solar time)
Thời gian đo trực tiếp theo góc giờ của tâm Mặt Trời thực tế tại kinh độ địa phương, bằng thời gian mặt trời trung bình địa phương cộng với phương trình thời gian (Equation of Time).

### 3.6 Dạ Tý và Chính Tý (Early rat and late rat)
Quy ước xử lý giờ Tý (23:00 đến 01:00). Giờ Dạ Tý (Early Rat, 23:00–23:59) giữ nguyên ngày hiện tại; giờ Chính Tý (Late Rat, 00:00–00:59) chuyển sang ngày kế tiếp.

## 4 Ký hiệu và thuật ngữ viết tắt (Symbols and abbreviated terms)

- **$Y, M, D$**: Năm, tháng, ngày theo lịch Gregory dân sự.
- **$\text{JDN}$**: Julian Day Number, số nguyên đếm ngày liên tục bắt đầu từ buổi trưa Greenwich ngày 01/01/-4712 (theo lịch Julius thiên văn).
- **$\text{JD}$**: Julian Date liên tục dưới dạng số thực biểu diễn cả phân số ngày.
- **$\text{UT}$ / $\text{UTC}$**: Universal Time / Coordinated Universal Time (Thời gian Phối hợp Quốc tế).
- **$\text{TT}$**: Terrestrial Time (Thời gian Nhiệt động lực học Trái Đất), thỏa mãn $\text{TT} = \text{UT} + \Delta T$.
- **$\Delta T$**: Hiệu số hiệu chỉnh chuyển động tự quay bất thường của Trái Đất giữa TT và UT1.
- **$\tau$**: Thời gian đo bằng thiên niên kỷ Julian ($10\,000$ năm Julian) tính từ kỷ nguyên J2000.0.
- **$T$**: Thời gian đo bằng thế kỷ Julian ($36\,525$ ngày) tính từ kỷ nguyên J2000.0.
- **$\lambda_\odot$**: Kinh độ hoàng đạo biểu kiến của Mặt Trời.
- **$\text{EoT}$**: Equation of Time (Phương trình thời gian), chênh lệch giữa giờ mặt trời thực và giờ mặt trời trung bình.
- **$\text{LMT}$**: Local Mean Time (Thời gian Mặt Trời Trung bình Địa phương).
- **$\text{TST}$**: True Solar Time (Giờ Thái Dương Thực).

## 5 Quy ước và giả định nền tảng (Conventions and assumptions)

1. **Trục thời gian nội bộ:** Toàn bộ các mốc thời gian giao dịch và lưu trữ ở tầng lõi Quizzman SHALL được biểu diễn bằng UTC.
2. **Kinh tuyến quy chuẩn Việt Nam:** Lịch âm dương dân tộc Việt Nam quy chuẩn theo kinh tuyến $105^\circ$ Đông, tương ứng với múi giờ cố định UTC+07:00 (trừ các thời kỳ lịch sử đặc thù được quy định tại Section 10).
3. **Mốc Kỷ nguyên J2000.0:** Thời điểm 12:00:00 TT ngày 01/01/2000 ứng với giá trị chuẩn $\text{JDN} = 2451545$ và $\text{JD} = 2451545.0$.
4. **Quy ước chuyển đổi liên tục:** Thời điểm nửa đêm 00:00:00 UTC của ngày có chỉ số $\text{JDN}$ mang giá trị $\text{JD} = \text{JDN} - 0.5$.

## 6 Khung kiến trúc hệ thống tính toán lịch pháp (Architectural framework)

Hệ thống tính toán lịch pháp `@quizzman/qm-calendar` được tổ chức theo kiến trúc phân tầng 4 lớp độc lập:

```text
┌────────────────────────────────────────────────────────────────────────┐
│                        API & Application Layer                         │
│   solarToLunar, lunarToSolar, getHourCanChi, getDayCanChi, Almanac     │
├────────────────────────────────────────────────────────────────────────┤
│                       Calendar & Domain Layer                          │
│   Sóc (New Moon), Tiết Khí (Solar Terms), Nhuận, Can Chi, Trực, Tú     │
├────────────────────────────────────────────────────────────────────────┤
│                       Astronomy & Ephemeris Layer                      │
│   VSOP87 Sun Longitude, Meeus Ch.49 New Moon, Delta T Blend, EoT       │
├────────────────────────────────────────────────────────────────────────┤
│                       Time Base & Coordinate Layer                     │
│   Continuous Julian Date, Timezone Reductions, Geodetic Coordinates    │
└────────────────────────────────────────────────────────────────────────┘
```

Luồng tính toán chính xử lý từ một ngày dân sự đầu vào:
1. Tiếp nhận $(Y, M, D)$ và giờ địa phương, xác định độ lệch múi giờ pháp định theo vị trí và niên đại.
2. Quy đổi sang $\text{JDN}$ số nguyên và $\text{JD}$ liên tục trên thang UTC.
3. Chuyển đổi sang thang thời gian Terrestrial Time ($\text{TT} = \text{UT} + \Delta T$).
4. Tính tọa độ Mặt Trời qua lý thuyết VSOP87 và giải nghiệm các thời điểm Sóc qua chuỗi Meeus Chương 49.
5. Xác định ranh giới tháng âm lịch dựa trên thời điểm Sóc nằm trong khoảng ngày dân sự địa phương $[00:00:00, 24:00:00)$.
6. Quét 24 tiết khí trong năm thiên văn (Đông chí đến Đông chí kế tiếp) để xác định tháng nhuận (tháng không chứa Trung khí đầu tiên).
7. Xuất kết quả tổ hợp: ngày, tháng, năm âm lịch, can chi các trụ, nạp âm, trực, tú và trạng thái cát hung.

## 7 Nền tảng thiên văn học và quy chuẩn tọa độ (Astronomical foundation)

### 7.1 Chuyển đổi liên tục sang Julian Date (Continuous Julian Date conversion)

Hệ thống chuyển đổi từ ngày dân sự lịch Gregory sang Julian Day Number theo công thức thiên văn chuẩn:

$$
\text{JDN} = 367Y - \left\lfloor \frac{7(Y + \lfloor (M+9)/12 \rfloor)}{4} \right\rfloor + \left\lfloor \frac{275M}{9} \right\rfloor + D + 1\,721\,013.5
$$

Do $\text{JDN}$ là số nguyên neo tại buổi trưa (12:00:00 UTC), phép chuyển đổi thời gian tức thời liên tục sang $\text{JD}$ bắt buộc phải áp dụng độ dời nửa ngày:

$$
\text{JD} = \text{JDN} + \frac{\text{hour} + \frac{\text{minute}}{60} + \frac{\text{second}}{3600}}{24} - 0.5
$$

Tại 00:00:00 UTC, $\text{JD} = \text{JDN} - 0.5$; tại 12:00:00 UTC, $\text{JD} = \text{JDN}$. Đây là điều kiện tiên quyết giải quyết dứt điểm sai lệch trong các phép kiểm chuẩn thiên văn (xem Section 11.4).

### 7.2 Quy giảm chuyển động hành tinh theo lý thuyết VSOP87 (Planetary reduction via VSOP87)

Engine sử dụng lý thuyết hành tinh VSOP87 (bản rút gọn 129 số hạng của Meeus) để xác định kinh độ hoàng đạo nhật tâm của Trái Đất, từ đó suy ra tọa độ địa tâm của Mặt Trời. Biến thời gian $\tau$ biểu thị thiên niên kỷ Julian kể từ J2000.0:

$$
\tau = \frac{\text{JD} - 2451545.0}{365250}
$$

Kinh độ hoàng đạo $L$ (radians) được biểu diễn bằng chuỗi lũy thừa:

$$
L = \frac{L_0 + L_1\tau + L_2\tau^2 + L_3\tau^3 + L_4\tau^4 + L_5\tau^5}{10^8}
$$

Trong đó mỗi thành phần $L_k$ là tổng điều hòa của các số hạng lượng giác:

$$
L_k = \sum_{i=1}^{N_k} A_i \cos(B_i + C_i \tau)
$$

Số lượng phần tử trong các lớp được phân bổ tối ưu theo độ lớn đóng góp:
- $L_0$: 64 số hạng (chuyển động quỹ đạo elip cơ sở của hệ Trái Đất – Mặt Trời).
- $L_1$: 34 số hạng (nhiễu loạn chu kỳ năm).
- $L_2$: 20 số hạng (biến thiên thế kỷ).
- $L_3$: 7 số hạng (vi hiệu chỉnh thiên niên kỷ).
- $L_4$: 3 số hạng (hiệu chỉnh chu kỳ dài).
- $L_5$: 1 số hạng (hệ số tuyến tính bậc cao).

Kinh độ biểu kiến của Mặt Trời $\lambda_\odot$ được thiết lập sau khi cộng $180^\circ$ và áp dụng các hiệu chỉnh quang sai và chương trình nutation:

$$
\lambda_\odot = L_{\text{heliocentric}} + 180^\circ - 0.00569^\circ - 0.00478^\circ \sin(\Omega)
$$

Trong đó $\Omega = 125.04^\circ - 1934.136^\circ T$ là kinh độ nút thăng của quỹ đạo Mặt Trăng.

### 7.3 Quy giảm thời gian động học và mô hình nội suy liên tục Delta T (Delta T blending)

Để chuyển đổi giữa thang thời gian đo đạc UT và thang thời gian động học TT, hệ thống áp dụng bảng dữ liệu thực nghiệm cho giai đoạn 1620–2025. Nhằm khắc phục hiện tượng bước nhảy gián đoạn $4.467\text{ s}$ giữa điểm cuối của bảng tra cứu ($70.000\text{ s}$ tại năm 2025.0) và đa thức xấp xỉ tương lai ($74.467\text{ s}$ tại năm 2025.000001), Quizzman thiết lập mô hình hòa trộn tuyến tính (5-year continuous blend) trên đoạn $[2025, 2030]$:

$$
w = \frac{y - 2025}{5}, \quad y \in [2025, 2030]
$$

$$
\Delta T(y) = (1 - w) \times 70.0 + w \times P(y)
$$

Trong đó $P(y)$ là đa thức Stephenson–Morrison. Mô hình này đảm bảo tính khả vi từng đoạn và liên tục tuyệt đối của trục thời gian, loại bỏ hoàn toàn hiện tượng lệch bước nhảy ở các sự kiện thiên văn sát biên năm 2025.

### 7.4 Xác định thời điểm Sóc thiên văn (Astronomical New Moon determination)

Thời điểm Sóc được tính toán dựa trên thuật toán Jean Meeus (Chương 49). Chỉ số tháng synodic $k$ tính từ mốc 1900.0:

$$
k = \lfloor (Y - 1900) \times 12.3685 \rfloor
$$

Thời điểm Sóc trung bình:

$$
\text{JD}_{\text{mean}} = 2415020.75933 + 29.53058868k + 0.0001178T^2 - 0.000000155T^3 + 0.00033 \sin(166.56^\circ + 132.87^\circ T - 0.009173^\circ T^2)
$$

Sau đó, 14 số hạng hiệu chỉnh chu kỳ tuần hoàn chính $C_1$ (bao gồm góc dị thường của Mặt Trời $M$, góc dị thường Mặt Trăng $M'$, và thông số vĩ độ $F$) được tổng hợp để đạt thời điểm Sóc thực tế:

$$
\text{JD}_{\text{soc}} = \text{JD}_{\text{mean}} + C_1 - \frac{\Delta T}{86400}
$$

## 8 Thuật toán tính toán lịch pháp âm dương (Lunisolar calendar calculation algorithms)

### 8.1 Phân bổ tháng âm lịch và quy chiếu ngày dân sự (Civil folding)

Một ngày dân sự tại vùng có độ lệch múi giờ $Z$ bắt đầu tại thời điểm chuyển giao nửa đêm cục bộ. Để xác định ngày mồng 1 của một tháng âm lịch, hệ thống tìm thời điểm Sóc $\text{JD}_{\text{soc}}$ và tính ngày dân sự địa phương tương ứng:

$$
D_{\text{soc}} = \left\lfloor \text{JD}_{\text{soc}} + 0.5 + \frac{Z}{24} \right\rfloor
$$

Mọi ngày dân sự $D$ nằm trong khoảng $[D_{\text{soc}, i}, D_{\text{soc}, i+1})$ thuộc về tháng âm lịch $i$, với ngày âm lịch thứ $d = D - D_{\text{soc}, i} + 1$.

### 8.2 Cơ chế phân kỳ mồng 1 Tết giữa lịch Việt Nam và Trung Quốc (Divergence mechanism)

Việt Nam áp dụng múi giờ UTC+07:00 ($Z=7$), trong khi Trung Quốc áp dụng UTC+08:00 ($Z=8$). Khi một điểm Sóc xảy ra trong khoảng thời gian $[16:00, 17:00)$ UTC:
- Tại Việt Nam: Giờ địa phương là $23:\text{xx}$ của ngày $D$. Ngày Sóc được ghi nhận là ngày $D$.
- Tại Trung Quốc: Giờ địa phương là $00:\text{xx}$ của ngày $D+1$. Ngày Sóc được ghi nhận là ngày $D+1$.

Hệ quả là ngày mồng 1 Tết hoặc ngày bắt đầu tháng âm lịch tại Việt Nam sớm hơn Trung Quốc một ngày dân sự. Các hiện tượng phân kỳ lịch sử điển hình bao gồm:
- **Tết Mậu Thân 1968:** Sóc xảy ra lúc 16:29 UTC ngày 29/01/1968 $\rightarrow$ Việt Nam đón Tết ngày 29/01 (1/1 Mậu Thân), Trung Quốc đón Tết ngày 30/01 (30/12 Đinh Mùi).
- **Phân kỳ năm 1984–1985:** Điểm Sóc tháng 11/1984 rơi sát ranh giới múi giờ làm Việt Nam xếp tháng 11 bình thường vào 23/11/1984, trong khi Trung Quốc xếp tháng 10 nhuận. Hiệu ứng lệch một tháng này kéo dài sang tận đầu năm 1985.

### 8.3 Quy tắc xác định tháng nhuận (Leap month determination rule)

Hệ thống tuân thủ nghiêm ngặt quy tắc thiên văn truyền thống đã được ghi nhận trong Thọ Thời Lịch [@REF-SHOUSHILI-1281]:
1. Năm âm lịch có 13 tháng giữa hai điểm Đông chí liên tiếp là năm nhuận.
2. Tháng âm lịch đầu tiên sau Đông chí không chứa bất kỳ Trung khí (Major Solar Term) nào SHALL được xác định là tháng nhuận.

Do vị trí Trung khí được tính chính xác bằng kinh độ Mặt Trời đạt bội số của $30^\circ$, độ chính xác của mô hình VSOP87 đóng vai trò quyết định trong việc phân định các trường hợp Trung khí xảy ra sát thời điểm chuyển giao tháng Sóc.

## 9 Mô hình toán học các chu kỳ lịch pháp truyền thống (Metaphysical models)

### 9.1 Hệ đồng dư chu kỳ 60 Hoa Giáp (Sexagenary cycle congruences)

Chu kỳ 60 Hoa Giáp là cấu trúc toán học đẳng cấu với vành $\mathbb{Z}_{10} \times \mathbb{Z}_{12}$.
1. **Can Chi Ngày (Day Pillar):**
   Với $\text{JDN}$ là chỉ số ngày Julius nguyên liên tục:
   $$
   I_{\text{can}} = (\text{JDN} + 9) \pmod{10}
   $$
   $$
   I_{\text{chi}} = (\text{JDN} + 1) \pmod{12}
   $$
   *Kiểm chứng mốc J2000.0:* $\text{JDN} = 2451545 \rightarrow I_{\text{can}} = 4$ (Mậu), $I_{\text{chi}} = 6$ (Ngọ) $\rightarrow$ ngày **Mậu Ngọ** chuẩn xác.

2. **Can Chi Giờ (Hour Pillar) & Dạ Tý / Chính Tý:**
   Can của giờ Tý được suy xuất từ Can của ngày thông qua thuật toán "Ngũ Thử Độn":
   $$
   I_{\text{rat\_stem}} = (2 \times I_{\text{can}} + 1) \pmod{10}
   $$
   - Khi `earlyRat = true` (Dạ Tý, 23:00–23:59): Giờ Tý sử dụng Can của ngày hiện tại.
   - Khi `earlyRat = false` (Chính Tý, hoặc sau 00:00): Giờ Tý sử dụng Can của ngày tiếp theo.

### 9.2 Giờ Thái Dương Thực và hiệu ứng chuyển giao ngày hiệu lực (True Solar Time)

Giờ Thái Dương Thực ($\text{TST}$) hiệu chỉnh độ lệch kinh độ địa phương và độ lệch elip của quỹ đạo Trái Đất:

$$
\text{TST} = \text{Clock Time} + (\lambda_{\text{local}} - \lambda_{\text{std}}) \times 4\text{ min/deg} + \text{EoT}
$$

Trong đó kinh tuyến quy chuẩn của Việt Nam bắt buộc là $\lambda_{\text{std}} = 105^\circ\text{E}$ ($7 \times 15^\circ$). Việc sử dụng sai kinh tuyến chuẩn (ví dụ $110^\circ\text{E}$) sẽ tạo ra sai số hệ thống $20\text{ phút}$, làm biến đổi hoàn toàn chi của giờ.

Khi hiệu chỉnh $\text{TST}$ làm thời gian dịch chuyển qua ngưỡng nửa đêm ($< 00:00$ hoặc $\ge 24:00$), hệ thống thiết lập `effectiveLocalDateTime` và `effectiveJdn`. Toàn bộ các phép tính ngày âm, nhật trụ, giờ trụ, và tiết khí của lá số Bát Tự bắt buộc phải chuyển dịch đồng bộ theo `effectiveJdn` này.

### 9.3 Thập Nhị Trực (Twelve Day Officers)

Chuỗi 12 Trực (Kiến, Trừ, Mãn, Bình, Định, Chấp, Phá, Nguy, Thành, Thu, Khai, Bế) vận hành tuần hoàn theo chi của ngày đối chiếu với chi của tháng tiết khí [@REF-HIEPKY-1741]:

$$
I_{\text{officer}} = (I_{\text{chi}} - I_{\text{term\_branch}} + 12) \pmod{12}
$$

Quy tắc bắt buộc: Tháng tiết khí khởi từ Lập Xuân mang chi Dần ($I=2$), Lập Thu mang chi Thân ($I=8$). Tuyệt đối không sử dụng số tháng âm lịch hoặc tháng dương lịch làm tham số đầu vào.

### 9.4 Nhị Thập Bát Tú (Twenty-Eight Mansions)

Chu kỳ 28 sao của lịch dân sự là một chu kỳ tuần hoàn độc lập trên trục $\text{JDN}$. Hệ thống chuẩn hóa mốc epoch tại ngày 01/01/1995 (Chủ Nhật, sao Hư, $I=10$), tương ứng $\text{JDN} = 2449719$:

$$
I_{\text{mansion}} = (\text{JDN} - 2449719 + 10) \pmod{28}
$$

Nếu kết quả âm, cộng thêm 28 để đảm bảo chỉ số trong khoảng $[0, 27]$.

## 10 Mô hình múi giờ lịch sử Việt Nam và ranh giới dân sự (Historical timezone reduction)

Quizzman số hóa trọn vẹn 8 thời kỳ múi giờ pháp định của Việt Nam theo chuẩn dữ liệu IANA Time Zone Database (`Asia/Ho_Chi_Minh`) [@REF-TZDB-2026]:

| Giai đoạn | Khoảng thời gian áp dụng | Múi giờ pháp định | Bối cảnh lịch sử và cơ sở pháp lý |
|---|---|---|---|
| **0** | Trước 01/07/1906 | LMT ($\lambda / 15^\circ$) | Giờ Mặt Trời Trung Bình cục bộ (chưa chuẩn hóa). |
| **1** | 01/07/1906 – 31/12/1942 | UTC+07:00 | Nghị định Toàn quyền Đông Dương áp dụng múi giờ 105°E. |
| **2** | 01/01/1943 – 14/03/1945 | UTC+08:00 | Chính quyền Vichy điều chỉnh phục vụ chiến tranh. |
| **3** | 15/03/1945 – 01/09/1945 | UTC+09:00 | Quân đội Nhật Bản áp dụng giờ Tokyo tại Đông Dương. |
| **4** | 02/09/1945 – 31/03/1947 | UTC+07:00 | Việt Nam Dân chủ Cộng hòa tái lập giờ độc lập. |
| **5** | 01/04/1947 – 09/10/1954 | UTC+08:00 | Khu vực Pháp kiểm soát đổi sang múi giờ 8. |
| **6** | 10/10/1954 – 12/06/1975 | **Phân chia Bắc–Nam** | Miền Bắc: UTC+08:00 practical (1954–67), UTC+07:00 (1968+). Miền Nam: UTC+07:00 (1955–59), UTC+08:00 (1960–75). |
| **7** | Từ 13/06/1975 trở đi | UTC+07:00 | Chính phủ Cách mạng Lâm thời ban hành chuẩn thống nhất. |

*Hệ quả nghiên cứu lịch sử:* Trong giai đoạn 1960–1975, miền Nam áp dụng UTC+08:00 trong khi miền Bắc từ năm 1968 dùng UTC+07:00. Toàn bộ 270 ngày có sự phân kỳ âm lịch giữa hai miền đã được engine quét và xác thực đầy đủ. Điển hình là Tết Ất Tỵ 1965: ngày 01/02/1965 tại miền Bắc là mồng 1 Tết, trong khi tại miền Nam là 30 tháng Chạp năm Giáp Thìn.

## 11 Hồ sơ audit thuật toán và giải pháp khắc phục (Audit findings and formal resolution)

Hồ sơ kiểm định thuật toán năm 2026 [@REF-QM-AUDIT-2026] đã phát hiện và xử lý dứt điểm 9 khiếm khuyết cấu trúc hệ thống:

### 11.1 A01: Ranh giới ngày dân sự của 24 Tiết Khí
- *Khiếm khuyết:* Hàm tính tiết khí cũ so sánh kinh độ tại buổi trưa hôm nay với buổi trưa hôm qua, tạo ra cửa sổ đo từ trưa đến trưa (noon-to-noon). Hệ quả là các tiết khí diễn ra vào buổi chiều (sau 12:00 địa phương) bị đẩy sang ngày hôm sau (12/24 tiết khí năm 2024 bị lệch 1 ngày).
- *Khắc phục:* Thiết lập bộ giải nghiệm `getSolarTermTransitionsForYear` tìm thời điểm chuyển tiếp chính xác dạng UTC instant, sau đó chiếu lên khoảng ngày dân sự địa phương $[00:00:00, 24:00:00)$.

### 11.2 A02: Bất đồng giữa Can Chi tháng tiết khí và Tiết Khí hiển thị
- *Khiếm khuyết:* Tháng Can Chi tính dựa trên kinh độ lúc 12:00 UTC của ngày JDN, trong khi Tiết Khí hiển thị dùng quy tắc cũ.
- *Khắc phục:* Thống nhất một nguồn chân lý chung `getSolarTermTransitionsForYear` cho Tiết Khí, Tháng Can Chi và Thập Nhị Trực.

### 11.3 A03: Lan truyền ngày hiệu lực Giờ Thái Dương Thực
- *Khiếm khuyết:* Khi $\text{TST}$ làm dịch ngày qua nửa đêm, hàm chỉ báo cờ mà không cập nhật `jdn`, dẫn đến trụ ngày và giờ của Bát Tự vẫn lấy theo ngày cũ.
- *Khắc phục:* Lan truyền `effectiveLocalDateTime` và `effectiveJdn` xuyên suốt các module Bát Tự.

### 11.4 A04: Sai lệch điểm gốc Julian Date trong phép so chuẩn NASA
- *Khiếm khuyết:* Phép thử nghiệm cũ cộng phân số giờ UTC vào `jdFromDate(Y, M, D)` vốn đã neo tại 12:00 mà không trừ $0.5$ ngày, tạo ra sai lệch giả tạo xấp xỉ $0.5^\circ$.
- *Khắc phục:* Áp dụng hàm quy chuẩn `utcDateTimeToJulianDate()`. Sai số kinh độ Mặt Trời thực tế so với USNO giảm xuống dưới $0.0005^\circ$.

### 11.5 A05: Hợp đồng phân định chức năng chọn ngày tốt
- *Khiếm khuyết:* Tài liệu thiết kế ghi nhận bộ chấm điểm đa nhân tố Thần Sát, nhưng API public thực tế dùng bộ giải quy tắc suy diễn nguyên nhân (purpose-rule resolver).
- *Khắc phục:* Cập nhật hợp đồng kỹ thuật khẳng định API public là bộ giải quy tắc có truy vết, dữ liệu Thần Sát mang tính chất thông tin tham khảo.

### 11.6 A06: Bước nhảy gián đoạn Delta T tại mốc 2025
- *Khiếm khuyết:* Bảng thực nghiệm kết thúc ở 2025 tại $70\text{ s}$, đa thức Stephenson–Morrison bắt đầu ở $74.467\text{ s}$, tạo ra bước nhảy $4.467\text{ s}$.
- *Khắc phục:* Triển khai hàm hòa trộn tuyến tính 5 năm trên đoạn $[2025, 2030]$.

### 11.7 A07: Kiểm tra biên độ dài tháng âm lịch
- *Khiếm khuyết:* Chuyển đổi từ âm sang dương chấp nhận ngày 30 trong tháng thiếu 29 ngày, dẫn đến ngày dương lịch bị tràn sang tháng âm kế tiếp.
- *Khắc phục:* Bổ sung điều kiện kiểm tra $1 \le d \le (D_{\text{soc}, i+1} - D_{\text{soc}, i})$.

### 11.8 A08: Chuẩn hóa kỳ vọng kiểm thử múi giờ miền Nam 1975
- *Khiếm khuyết:* Bộ kiểm thử cũ kỳ vọng miền Nam chuyển sang UTC+07:00 từ 01/05/1975, mâu thuẫn với sắc lệnh ngày 13/06/1975 của Chính phủ Cách mạng Lâm thời và chuẩn IANA.
- *Khắc phục:* Hiệu chỉnh oracle kiểm thử, xác nhận ranh giới chính xác là 00:00 ngày 13/06/1975.

### 11.9 A09: Ngăn ngừa ước tính sai chu kỳ Sóc dẫn đến ngày âm bằng 0
- *Khiếm khuyết:* Công thức ước tính Sóc trung bình trong một số trường hợp biên chọn nhầm điểm Sóc tương lai, làm ngày âm trả về giá trị 0.
- *Khắc phục:* Thuật toán luôn chọn điểm Sóc gần nhất không vượt quá ngày dân sự hiện tại.

## 12 Kiểm chứng thực nghiệm và kết quả benchmark (Empirical validation and benchmark results)

Hệ thống được kiểm định nghiêm ngặt qua 4 tầng kiểm thử:

### 12.1 Đối soát phân chí với dữ liệu USNO 2024 (USNO 2024 Cardinal Points Parity)

So sánh kinh độ hoàng đạo Mặt Trời tính bởi VSOP87 rút gọn của engine tại 4 thời khắc phân và chí năm 2024 theo công bố chính thức của USNO [@REF-USNO-ALMANAC]:

| Hiện tượng | Thời điểm UTC | $\lambda_\odot$ Kỳ vọng | $\lambda_\odot$ Engine | Sai số tuyệt đối $|\Delta\lambda_\odot|$ |
|---|---|---|---|---|
| **Xuân Phân 2024** | 2024-03-20 03:06:00Z | $0.0^\circ$ | $359.999602^\circ$ | $0.000398^\circ$ |
| **Hạ Chí 2024** | 2024-06-20 20:51:00Z | $90.0^\circ$ | $90.000051^\circ$ | $0.000051^\circ$ |
| **Thu Phân 2024** | 2024-09-22 12:43:00Z | $180.0^\circ$ | $179.999585^\circ$ | $0.000415^\circ$ |
| **Đông Chí 2024** | 2024-12-21 09:20:00Z | $270.0^\circ$ | $269.999788^\circ$ | $0.000212^\circ$ |

Tất cả các điểm kiểm tra đều thỏa mãn ngưỡng khắt khe $|\Delta\lambda_\odot| < 0.0005^\circ$ ($1.8''$).

### 12.2 Đối soát thời điểm Sóc với danh mục NASA (NASA New Moon Parity)

Tại thời điểm Sóc ngày 11/01/2024 (kỷ nguyên hiện đại), NASA ghi nhận thời điểm cực tiểu tại 11:57 UTC. Engine Quizzman tính toán ra 11:56:56 UTC, đạt độ lệch chỉ $0.07\text{ phút}$ (nhỏ hơn rất nhiều so với ngưỡng cho phép $2.0\text{ phút}$).

### 12.3 Kiểm chuẩn ngày vàng: 01/09/2026 (Golden Date Verification)

Đối chiếu toàn diện ngày vàng kiểm chuẩn 01/09/2026 (Giờ Việt Nam UTC+07:00):

| Tham số | Trước khi vá lỗi | Sau khi vá lỗi / Chuẩn độc lập | Trạng thái |
|---|---|---|---|
| **Dương lịch** | 01/09/2026 | 01/09/2026 | Khớp |
| **Âm lịch** | 20 tháng 7 năm Bính Ngọ | 20 tháng 7 năm Bính Ngọ | Khớp |
| **Can Chi ngày** | Mậu Dần | Mậu Dần | Khớp |
| **Nạp âm** | Thành Đầu Thổ | Thành Đầu Thổ | Khớp |
| **Tiết khí** | Xử Thử | Xử Thử | Khớp |
| **Tháng tiết khí** | Thân (sau Lập Thu) | Thân (sau Lập Thu) | Khớp |
| **Thập Nhị Trực** | Nguy (Lệch +1) | **Phá** | Khớp chuẩn Hiệp Kỷ |
| **Nhị Thập Bát Tú** | Bích (Lệch +1) | **Thất (Thất Hỏa Trư)** | Khớp chuẩn JDN |
| **Hoàng / Hắc đạo**| Thiên Hình Hắc Đạo | Thiên Hình Hắc Đạo | Khớp |

### 12.4 Kiểm thử đối ứng hai chiều liên tục 1800–2200 (Exhaustive Bi-directional Roundtrip)

Quy trình kiểm thử hồi quy toàn diện quét qua từng ngày liên tục từ ngày 01/01/1800 đến ngày 31/12/2200 (tổng cộng 146 462 ngày dân sự). Phép thử thực hiện chuyển đổi xuôi từ Dương sang Âm (`solarToLunar`), sau đó chuyển ngược từ Âm sang Dương (`lunarToSolar`). Kết quả ghi nhận:
- Tổng số ngày đánh giá: 146 462 ngày.
- Số ngày khớp hoàn toàn: 146 462 ngày (đạt tỉ lệ $100\%$).
- Số lỗi sai lệch: 0.

### 12.5 Phân tích hiện tượng ảo giác mô hình AI (AI Hallucination in Benchmarks)

Trong quá trình xây dựng bộ kiểm chuẩn ban đầu, một mô hình ngôn ngữ lớn (Google Gemini) đã được sử dụng để sinh 12 trường hợp kiểm thử biên. Kết quả ban đầu ghi nhận 7/12 trường hợp thất bại. Qua điều tra toán học và đối chiếu sử liệu độc lập, toàn bộ 7 thất bại đều bắt nguồn từ việc mô hình AI sinh sai dữ liệu kỳ vọng:
1. Gán sai ngày dương lịch của Tết Mậu Thân 1968 (sinh ngày 16/02 thay vì 29/01).
2. Tự tạo phân kỳ âm lịch không tồn tại trong suốt năm 1972.
3. Nhầm lẫn ngày Tết 1984 với thời điểm bắt đầu phân kỳ tháng 11/1984.
4. Đưa ra phán đoán sai lệch về phân kỳ năm tranh cãi 2033.
5. Sử dụng kinh tuyến giả định $110^\circ\text{E}$ thay vì kinh tuyến chuẩn $105^\circ\text{E}$ khi tính giờ TP.HCM.
6. Tính sai Địa Chi ngày cho ngày 24/03/2026 (đoán Đinh Tỵ thay vì Đinh Dậu) và 25/03/2026 (đoán Mậu Ngọ thay vì Mậu Tuất).

Bài học cốt lõi: Tính toán lịch pháp và thiên văn đòi hỏi mô hình giải tích và số học xác định, không thể dựa vào suy diễn thống kê xác suất.

## 13 Giới hạn kỹ thuật (Limitations)

Hệ thống `@quizzman/qm-calendar` phiên bản hiện tại có các giới hạn kỹ thuật được xác định rõ:
1. **Phạm vi niên đại tối ưu:** Mô hình VSOP87 rút gọn và bảng tra cứu $\Delta T$ đạt độ chính xác tối ưu trong khoảng năm 1800 đến 2200. Ngoài phạm vi này, sai số tích lũy của $\Delta T$ có thể ảnh hưởng đến các điểm Sóc xảy ra sát thời khắc nửa đêm.
2. **Mô hình Mặt Trăng giải tích:** Thuật toán hiện tại sử dụng chuỗi Meeus Chương 49. Kế hoạch nâng cấp tiếp theo (xem kế hoạch Pha 0–7) sẽ tích hợp giải pháp giải tích ELP/MPP02 và hạt nhân số học vi phân JPL DE440 để đạt độ chính xác dưới giây trên toàn dải thiên niên kỷ.
3. **Quy ước lịch pháp miền Bắc trước năm 1967:** Việc áp dụng múi giờ UTC+08:00 thực tế (practical calendar) theo bảng thiên văn Đài Tử Kim Sơn là một quy ước sản phẩm dựa trên tập quán in lịch thời kỳ đó, không phải là một xác nhận về múi giờ dân sự pháp định chính thức.

## 14 Kết luận (Conclusion)

Công trình này đã hệ thống hóa và xuất bản toàn diện đặc tả kỹ thuật của hệ thống tính toán lịch pháp `@quizzman/qm-calendar` theo chuẩn mực Quizzman Paper Standard (QPS-ISO 1.0). Thông qua việc giải quyết triệt để 9 lỗi ranh giới cốt lõi, chuẩn hóa quy đổi thời gian liên tục, và vượt qua toàn bộ 146 462 ngày kiểm thử đối ứng cùng các đối chuẩn khắt khe từ USNO và NASA, hệ thống khẳng định tính tin cậy toán học tuyệt đối và sẵn sàng phục vụ như một nguồn chân lý tiêu chuẩn cho các ứng dụng tính toán lịch pháp đương đại.

## Tài liệu tham khảo (Bibliography)

[1] International Organization for Standardization. ISO 8601-1:2019 Date and time — Representations for information interchange — Part 1: Basic rules. Geneva: ISO, 2019.  
[2] International Organization for Standardization. ISO 2145:1978 Documentation — Numbering of divisions and subdivisions in written documents. Geneva: ISO, 1978.  
[3] International Organization for Standardization. ISO 690:2021 Information and documentation — Guidelines for bibliographic references and citations to information resources. Geneva: ISO, 2021.  
[4] Jean Meeus. Astronomical Algorithms. 2nd edition. Richmond: Willmann-Bell, Inc., 1998.  
[5] Pierre Bretagnon, Gérard Francou. Planetary theories in rectangular and spherical variables. VSOP87 solutions. Astronomy and Astrophysics, 1988, vol. 202, pp. 309–315.  
[6] E. Myles Standish. JPL Planetary and Lunar Ephemerides, DE405/LE405. JPL Interoffice Memorandum 312.F, 1998.  
[7] Ryan S. Park, William M. Folkner, James G. Williams, Dale H. Boggs. The JPL Planetary and Lunar Ephemerides DE440 and DE441. The Astronomical Journal, 2021, vol. 161, no. 3, p. 105.  
[8] Jean Chapront, Gérard Francou. The lunar theory ELP/MPP02. Astronomy and Astrophysics, 2003, vol. 404, no. 2, pp. 735–742.  
[9] Fred Espenak, Jean Meeus. Five Millennium Catalog of Solar Eclipses: -1999 to +3000. NASA Technical Publication TP-2006-214141, 2006.  
[10] Hồ Ngọc Đức. Lunisolar Calendar Calculations and Vietnamese Standard Meridian. Leipzig University Technical Report, 2000.  
[11] Internet Assigned Numbers Authority. Time Zone Database (tzdb), version 2026a, 2026.  
[12] United States Naval Observatory, Her Majesty's Nautical Almanac Office. The Astronomical Almanac for the Year 2024. Washington: U.S. Government Publishing Office, 2023.  
[13] Hong Kong Observatory. Gregorian-Lunar Calendar Conversion Tables of the Hong Kong Observatory (1901–2100). Hong Kong SAR Government, 2024.  
[14] Doãn Lộc, Mai Giác Thành. Khâm Định Hiệp Kỷ Biện Phương Thư (欽定協紀辨方書). Bắc Kinh: Càn Long lục niên, 1741.  
[15] Quách Thủ Kính, Vương Tuần. Thọ Thời Lịch (授時曆). Đại Đô: Nhà Nguyên, 1281.  
[16] Lê Quý Đôn. Vân Đài Loại Ngữ (芸臺類語) — Quyển 1: Ngôn tạo khảo. Thăng Long, 1777.  
[17] Quizzman Research & Engineering Team. Quizzman Lunisolar Calendar Engine Technical Reference and Architecture v2.1. Quizzman Engineering Reports, 2026.  
[18] Quizzman Research & Quality Assurance Group. Quizzman Calendar Engine Algorithm Audit and Fix Verification Report. Technical Audit Dossier AUD-2026-CAL-02, 2026.  

## Phụ lục A (Quy chuẩn) Đặc tả thuật toán và các hàm cốt lõi (Annex A)

Phần này đặc tả cài đặt quy chuẩn của các hàm tính toán cốt lõi trong hệ thống `@quizzman/qm-calendar`:

### A.1 Chuyển đổi thời gian liên tục sang Julian Date

```typescript
export function utcDateTimeToJulianDate(
  year: number,
  month: number,
  day: number,
  hour: number = 0,
  minute: number = 0,
  second: number = 0
): number {
  const a = Math.floor((14 - month) / 12);
  const y = year + 4800 - a;
  const m = month + 12 * a - 3;
  const jdn =
    day +
    Math.floor((153 * m + 2) / 5) +
    365 * y +
    Math.floor(y / 4) -
    Math.floor(y / 100) +
    Math.floor(y / 400) -
    32045;
  const dayFraction = (hour + minute / 60 + second / 3600) / 24;
  return jdn + dayFraction - 0.5;
}
```

### A.2 Giải thuật Thập Nhị Trực chuẩn hóa

```typescript
export function getDayOfficer(
  dayBranchIndex: number,
  solarMonthBranchIndex: number
): { index: number; name: string } {
  const OFFICERS = [
    'Kiến', 'Trừ', 'Mãn', 'Bình', 'Định', 'Chấp',
    'Phá', 'Nguy', 'Thành', 'Thu', 'Khai', 'Bế'
  ];
  const index = (dayBranchIndex - solarMonthBranchIndex + 12) % 12;
  return {
    index,
    name: OFFICERS[index]
  };
}
```

### A.3 Giải thuật Nhị Thập Bát Tú neo mốc JDN

```typescript
export function getMansion(jdn: number): { index: number; name: string } {
  const MANSHIONS_EPOCH_JDN = 2449719; // 1995-01-01 (Chủ Nhật) = Sao Hư (index 10)
  const MANSION_NAMES = [
    'Giác', 'Cang', 'Đê', 'Phòng', 'Tâm', 'Vĩ', 'Cơ',
    'Đẩu', 'Ngưu', 'Nữ', 'Hư', 'Nguy', 'Thất', 'Bích',
    'Khuê', 'Lâu', 'Vị', 'Mão', 'Tất', 'Chủy', 'Sâm',
    'Tỉnh', 'Quỷ', 'Liễu', 'Tinh', 'Trương', 'Dực', 'Chẩn'
  ];
  let index = (jdn - MANSHIONS_EPOCH_JDN + 10) % 28;
  if (index < 0) index += 28;
  return {
    index,
    name: MANSION_NAMES[index]
  };
}
```

## Phụ lục B (Tham khảo) Các nghị định múi giờ lịch sử Việt Nam (Annex B)

Bảng tổng hợp văn bản quy chuẩn phân định thời gian dân sự tại Việt Nam qua các thời kỳ:

1. **Nghị định ngày 18/05/1906** của Toàn quyền Đông Dương: Áp dụng giờ của kinh tuyến $105^\circ$ Đông (UTC+07:00) cho toàn cõi Liên bang Đông Dương từ 00:00 ngày 01/07/1906.
2. **Nghị định ngày 23/12/1942**: Điều chỉnh giờ Đông Dương tiến thêm 60 phút sang UTC+08:00, có hiệu lực từ 23:00 ngày 31/12/1942.
3. **Lệnh của Bộ Chỉ huy Quân sự Nhật Bản ngày 14/03/1945**: Buộc toàn cõi Đông Dương sử dụng múi giờ Tokyo (UTC+09:00) từ ngày 15/03/1945.
4. **Sắc lệnh số 46-SL ngày 12/10/1945** của Chủ tịch Chính phủ Lâm thời Việt Nam Dân chủ Cộng hòa: Quy định giờ chính thức của nước Việt Nam độc lập là giờ thiên văn kinh tuyến $105^\circ$ Đông (UTC+07:00).
5. **Nghị định số 362-CAB/MI ngày 04/09/1959** của Phủ Tổng thống Việt Nam Cộng hòa: Điều chỉnh múi giờ miền Nam từ UTC+07:00 sang UTC+08:00 kể từ 23:00 ngày 31/12/1959.
6. **Quyết định số 121-CP ngày 08/08/1967** của Hội đồng Chính phủ Việt Nam Dân chủ Cộng hòa: Ban hành cách tính lịch và áp dụng thống nhất múi giờ thứ 7 (UTC+07:00) kể từ ngày 01/01/1968.
7. **Thông cáo của Ủy ban Quân quản Thành phố Sài Gòn – Gia Định**: Điều chỉnh giờ miền Nam lùi lại 60 phút từ UTC+08:00 về UTC+07:00 từ 00:00 ngày 13/06/1975, hoàn tất thống nhất thời gian dân sự trên phạm vi toàn quốc.
