mingpan 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +118 -0
  3. package/dist/core/bazi/BaziCore.d.ts +112 -0
  4. package/dist/core/bazi/BaziCore.d.ts.map +1 -0
  5. package/dist/core/bazi/BaziCore.js +606 -0
  6. package/dist/core/bazi/BaziCore.js.map +1 -0
  7. package/dist/core/bazi/SolarTermCalculator.d.ts +46 -0
  8. package/dist/core/bazi/SolarTermCalculator.d.ts.map +1 -0
  9. package/dist/core/bazi/SolarTermCalculator.js +452 -0
  10. package/dist/core/bazi/SolarTermCalculator.js.map +1 -0
  11. package/dist/core/bazi/TrueSolarTime.d.ts +64 -0
  12. package/dist/core/bazi/TrueSolarTime.d.ts.map +1 -0
  13. package/dist/core/bazi/TrueSolarTime.js +210 -0
  14. package/dist/core/bazi/TrueSolarTime.js.map +1 -0
  15. package/dist/core/bazi/ephemerisData.d.ts +10 -0
  16. package/dist/core/bazi/ephemerisData.d.ts.map +1 -0
  17. package/dist/core/bazi/ephemerisData.js +88 -0
  18. package/dist/core/bazi/ephemerisData.js.map +1 -0
  19. package/dist/core/bazi/index.d.ts +8 -0
  20. package/dist/core/bazi/index.d.ts.map +1 -0
  21. package/dist/core/bazi/index.js +30 -0
  22. package/dist/core/bazi/index.js.map +1 -0
  23. package/dist/core/bazi/types.d.ts +116 -0
  24. package/dist/core/bazi/types.d.ts.map +1 -0
  25. package/dist/core/bazi/types.js +7 -0
  26. package/dist/core/bazi/types.js.map +1 -0
  27. package/dist/core/calendar/SolarTermsCalculator.d.ts +33 -0
  28. package/dist/core/calendar/SolarTermsCalculator.d.ts.map +1 -0
  29. package/dist/core/calendar/SolarTermsCalculator.js +111 -0
  30. package/dist/core/calendar/SolarTermsCalculator.js.map +1 -0
  31. package/dist/core/calendar/astronomicalCalendar.d.ts +74 -0
  32. package/dist/core/calendar/astronomicalCalendar.d.ts.map +1 -0
  33. package/dist/core/calendar/astronomicalCalendar.js +276 -0
  34. package/dist/core/calendar/astronomicalCalendar.js.map +1 -0
  35. package/dist/core/calendar/calendar.d.ts +81 -0
  36. package/dist/core/calendar/calendar.d.ts.map +1 -0
  37. package/dist/core/calendar/calendar.js +223 -0
  38. package/dist/core/calendar/calendar.js.map +1 -0
  39. package/dist/core/calendar/constants.d.ts +151 -0
  40. package/dist/core/calendar/constants.d.ts.map +1 -0
  41. package/dist/core/calendar/constants.js +97 -0
  42. package/dist/core/calendar/constants.js.map +1 -0
  43. package/dist/core/calendar/julian.d.ts +54 -0
  44. package/dist/core/calendar/julian.d.ts.map +1 -0
  45. package/dist/core/calendar/julian.js +142 -0
  46. package/dist/core/calendar/julian.js.map +1 -0
  47. package/dist/core/calendar/lunarCalendar.d.ts +79 -0
  48. package/dist/core/calendar/lunarCalendar.d.ts.map +1 -0
  49. package/dist/core/calendar/lunarCalendar.js +164 -0
  50. package/dist/core/calendar/lunarCalendar.js.map +1 -0
  51. package/dist/core/calendar/solarTerms.d.ts +105 -0
  52. package/dist/core/calendar/solarTerms.d.ts.map +1 -0
  53. package/dist/core/calendar/solarTerms.js +487 -0
  54. package/dist/core/calendar/solarTerms.js.map +1 -0
  55. package/dist/core/constants/bazi.d.ts +138 -0
  56. package/dist/core/constants/bazi.d.ts.map +1 -0
  57. package/dist/core/constants/bazi.js +332 -0
  58. package/dist/core/constants/bazi.js.map +1 -0
  59. package/dist/core/constants/index.d.ts +6 -0
  60. package/dist/core/constants/index.d.ts.map +1 -0
  61. package/dist/core/constants/index.js +37 -0
  62. package/dist/core/constants/index.js.map +1 -0
  63. package/dist/core/constants/positions.d.ts +27 -0
  64. package/dist/core/constants/positions.d.ts.map +1 -0
  65. package/dist/core/constants/positions.js +39 -0
  66. package/dist/core/constants/positions.js.map +1 -0
  67. package/dist/core/ziwei/BrightnessSystem.d.ts +53 -0
  68. package/dist/core/ziwei/BrightnessSystem.d.ts.map +1 -0
  69. package/dist/core/ziwei/BrightnessSystem.js +278 -0
  70. package/dist/core/ziwei/BrightnessSystem.js.map +1 -0
  71. package/dist/core/ziwei/IztroAdapter.d.ts +78 -0
  72. package/dist/core/ziwei/IztroAdapter.d.ts.map +1 -0
  73. package/dist/core/ziwei/IztroAdapter.js +314 -0
  74. package/dist/core/ziwei/IztroAdapter.js.map +1 -0
  75. package/dist/core/ziwei/MutagenCore.d.ts +81 -0
  76. package/dist/core/ziwei/MutagenCore.d.ts.map +1 -0
  77. package/dist/core/ziwei/MutagenCore.js +246 -0
  78. package/dist/core/ziwei/MutagenCore.js.map +1 -0
  79. package/dist/index.d.ts +13 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +1101 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/output/fortuneTextRenderer.d.ts +63 -0
  84. package/dist/output/fortuneTextRenderer.d.ts.map +1 -0
  85. package/dist/output/fortuneTextRenderer.js +384 -0
  86. package/dist/output/fortuneTextRenderer.js.map +1 -0
  87. package/dist/output/listTextRenderer.d.ts +298 -0
  88. package/dist/output/listTextRenderer.d.ts.map +1 -0
  89. package/dist/output/listTextRenderer.js +942 -0
  90. package/dist/output/listTextRenderer.js.map +1 -0
  91. package/dist/services/bazi/BaziService.d.ts +83 -0
  92. package/dist/services/bazi/BaziService.d.ts.map +1 -0
  93. package/dist/services/bazi/BaziService.js +635 -0
  94. package/dist/services/bazi/BaziService.js.map +1 -0
  95. package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts +31 -0
  96. package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts.map +1 -0
  97. package/dist/services/bazi/analyzers/ClimateAnalyzer.js +194 -0
  98. package/dist/services/bazi/analyzers/ClimateAnalyzer.js.map +1 -0
  99. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +16 -0
  100. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +1 -0
  101. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +60 -0
  102. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +1 -0
  103. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +33 -0
  104. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +1 -0
  105. package/dist/services/bazi/analyzers/NaYinAnalyzer.js +209 -0
  106. package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +1 -0
  107. package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts +159 -0
  108. package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts.map +1 -0
  109. package/dist/services/bazi/analyzers/PatternAnalyzer.js +1150 -0
  110. package/dist/services/bazi/analyzers/PatternAnalyzer.js.map +1 -0
  111. package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts +114 -0
  112. package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts.map +1 -0
  113. package/dist/services/bazi/analyzers/RelationsAnalyzer.js +704 -0
  114. package/dist/services/bazi/analyzers/RelationsAnalyzer.js.map +1 -0
  115. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +236 -0
  116. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +1 -0
  117. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +2079 -0
  118. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +1 -0
  119. package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts +181 -0
  120. package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts.map +1 -0
  121. package/dist/services/bazi/analyzers/StrengthAnalyzer.js +1119 -0
  122. package/dist/services/bazi/analyzers/StrengthAnalyzer.js.map +1 -0
  123. package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts +78 -0
  124. package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts.map +1 -0
  125. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +383 -0
  126. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -0
  127. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +46 -0
  128. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +1 -0
  129. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +260 -0
  130. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +1 -0
  131. package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts +70 -0
  132. package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts.map +1 -0
  133. package/dist/services/bazi/analyzers/YongShenAnalyzer.js +858 -0
  134. package/dist/services/bazi/analyzers/YongShenAnalyzer.js.map +1 -0
  135. package/dist/services/bazi/calculators/DaYunCalculator.d.ts +71 -0
  136. package/dist/services/bazi/calculators/DaYunCalculator.d.ts.map +1 -0
  137. package/dist/services/bazi/calculators/DaYunCalculator.js +496 -0
  138. package/dist/services/bazi/calculators/DaYunCalculator.js.map +1 -0
  139. package/dist/services/bazi/calculators/LiuNianCalculator.d.ts +88 -0
  140. package/dist/services/bazi/calculators/LiuNianCalculator.d.ts.map +1 -0
  141. package/dist/services/bazi/calculators/LiuNianCalculator.js +546 -0
  142. package/dist/services/bazi/calculators/LiuNianCalculator.js.map +1 -0
  143. package/dist/services/bazi/calculators/LiuRiCalculator.d.ts +66 -0
  144. package/dist/services/bazi/calculators/LiuRiCalculator.d.ts.map +1 -0
  145. package/dist/services/bazi/calculators/LiuRiCalculator.js +497 -0
  146. package/dist/services/bazi/calculators/LiuRiCalculator.js.map +1 -0
  147. package/dist/services/bazi/calculators/LiuYueCalculator.d.ts +50 -0
  148. package/dist/services/bazi/calculators/LiuYueCalculator.d.ts.map +1 -0
  149. package/dist/services/bazi/calculators/LiuYueCalculator.js +338 -0
  150. package/dist/services/bazi/calculators/LiuYueCalculator.js.map +1 -0
  151. package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts +123 -0
  152. package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts.map +1 -0
  153. package/dist/services/bazi/calculators/LuckCycleCalculator.js +414 -0
  154. package/dist/services/bazi/calculators/LuckCycleCalculator.js.map +1 -0
  155. package/dist/services/bazi/index.d.ts +21 -0
  156. package/dist/services/bazi/index.d.ts.map +1 -0
  157. package/dist/services/bazi/index.js +83 -0
  158. package/dist/services/bazi/index.js.map +1 -0
  159. package/dist/services/bazi/types.d.ts +597 -0
  160. package/dist/services/bazi/types.d.ts.map +1 -0
  161. package/dist/services/bazi/types.js +123 -0
  162. package/dist/services/bazi/types.js.map +1 -0
  163. package/dist/services/ziwei/ZiweiService.d.ts +86 -0
  164. package/dist/services/ziwei/ZiweiService.d.ts.map +1 -0
  165. package/dist/services/ziwei/ZiweiService.js +343 -0
  166. package/dist/services/ziwei/ZiweiService.js.map +1 -0
  167. package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts +38 -0
  168. package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts.map +1 -0
  169. package/dist/services/ziwei/calculators/BrightnessCalculator.js +142 -0
  170. package/dist/services/ziwei/calculators/BrightnessCalculator.js.map +1 -0
  171. package/dist/services/ziwei/calculators/DailyCalculator.d.ts +27 -0
  172. package/dist/services/ziwei/calculators/DailyCalculator.d.ts.map +1 -0
  173. package/dist/services/ziwei/calculators/DailyCalculator.js +55 -0
  174. package/dist/services/ziwei/calculators/DailyCalculator.js.map +1 -0
  175. package/dist/services/ziwei/calculators/DecadeCalculator.d.ts +46 -0
  176. package/dist/services/ziwei/calculators/DecadeCalculator.d.ts.map +1 -0
  177. package/dist/services/ziwei/calculators/DecadeCalculator.js +181 -0
  178. package/dist/services/ziwei/calculators/DecadeCalculator.js.map +1 -0
  179. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts +28 -0
  180. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts.map +1 -0
  181. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js +84 -0
  182. package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js.map +1 -0
  183. package/dist/services/ziwei/calculators/HourlyCalculator.d.ts +41 -0
  184. package/dist/services/ziwei/calculators/HourlyCalculator.d.ts.map +1 -0
  185. package/dist/services/ziwei/calculators/HourlyCalculator.js +139 -0
  186. package/dist/services/ziwei/calculators/HourlyCalculator.js.map +1 -0
  187. package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts +30 -0
  188. package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts.map +1 -0
  189. package/dist/services/ziwei/calculators/MinorLimitCalculator.js +90 -0
  190. package/dist/services/ziwei/calculators/MinorLimitCalculator.js.map +1 -0
  191. package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts +39 -0
  192. package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts.map +1 -0
  193. package/dist/services/ziwei/calculators/MonthlyCalculator.js +128 -0
  194. package/dist/services/ziwei/calculators/MonthlyCalculator.js.map +1 -0
  195. package/dist/services/ziwei/calculators/MutagenCalculator.d.ts +20 -0
  196. package/dist/services/ziwei/calculators/MutagenCalculator.d.ts.map +1 -0
  197. package/dist/services/ziwei/calculators/MutagenCalculator.js +121 -0
  198. package/dist/services/ziwei/calculators/MutagenCalculator.js.map +1 -0
  199. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts +35 -0
  200. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts.map +1 -0
  201. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js +55 -0
  202. package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js.map +1 -0
  203. package/dist/services/ziwei/calculators/YearlyCalculator.d.ts +35 -0
  204. package/dist/services/ziwei/calculators/YearlyCalculator.d.ts.map +1 -0
  205. package/dist/services/ziwei/calculators/YearlyCalculator.js +119 -0
  206. package/dist/services/ziwei/calculators/YearlyCalculator.js.map +1 -0
  207. package/dist/services/ziwei/index.d.ts +15 -0
  208. package/dist/services/ziwei/index.d.ts.map +1 -0
  209. package/dist/services/ziwei/index.js +48 -0
  210. package/dist/services/ziwei/index.js.map +1 -0
  211. package/dist/services/ziwei/transformers/PalaceTransformer.d.ts +62 -0
  212. package/dist/services/ziwei/transformers/PalaceTransformer.d.ts.map +1 -0
  213. package/dist/services/ziwei/transformers/PalaceTransformer.js +153 -0
  214. package/dist/services/ziwei/transformers/PalaceTransformer.js.map +1 -0
  215. package/dist/services/ziwei/types.d.ts +185 -0
  216. package/dist/services/ziwei/types.d.ts.map +1 -0
  217. package/dist/services/ziwei/types.js +54 -0
  218. package/dist/services/ziwei/types.js.map +1 -0
  219. package/dist/shared/logger.d.ts +51 -0
  220. package/dist/shared/logger.d.ts.map +1 -0
  221. package/dist/shared/logger.js +136 -0
  222. package/dist/shared/logger.js.map +1 -0
  223. package/dist/shared/types.d.ts +91 -0
  224. package/dist/shared/types.d.ts.map +1 -0
  225. package/dist/shared/types.js +7 -0
  226. package/dist/shared/types.js.map +1 -0
  227. package/dist/utils/ageCalculator.d.ts +30 -0
  228. package/dist/utils/ageCalculator.d.ts.map +1 -0
  229. package/dist/utils/ageCalculator.js +51 -0
  230. package/dist/utils/ageCalculator.js.map +1 -0
  231. package/package.json +54 -0
@@ -0,0 +1,2079 @@
1
+ "use strict";
2
+ /**
3
+ * Shen Sha Analyzer
4
+ * Analyzes auspicious and inauspicious spirits (神煞) in BaZi chart
5
+ * Implements 40-50 traditional ShenSha types following classical BaZi rules
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ShenShaAnalyzer = void 0;
9
+ const bazi_1 = require("../../../core/constants/bazi");
10
+ const positions_1 = require("../../../core/constants/positions");
11
+ class ShenShaAnalyzer {
12
+ /**
13
+ * Analyze Shen Sha in the BaZi chart
14
+ */
15
+ static analyze(chart, gender) {
16
+ const results = [];
17
+ // Get day master for reference
18
+ const dayMaster = chart.day.stem;
19
+ const dayBranch = chart.day.branch;
20
+ // Noble Persons (貴人) - 10 types
21
+ results.push(...this.checkTianYi(dayMaster, chart)); // 天乙貴人
22
+ results.push(...this.checkTaiJi(chart)); // 太極貴人
23
+ results.push(...this.checkWenChang(dayMaster, chart)); // 文昌貴人
24
+ results.push(...this.checkWenQu(dayMaster, chart)); // 文曲貴人
25
+ results.push(...this.checkGuoYin(dayMaster, chart)); // 國印貴人
26
+ results.push(...this.checkDeXiu(dayMaster, chart)); // 德秀貴人
27
+ results.push(...this.checkTianDe(chart)); // 天德貴人
28
+ results.push(...this.checkYueDe(chart)); // 月德貴人
29
+ results.push(...this.checkFuXing(dayMaster, chart)); // 福星貴人
30
+ results.push(...this.checkSanQi(dayMaster, chart)); // 三奇貴人
31
+ // Academic & Career Stars (學業事業) - 8 types
32
+ results.push(...this.checkXueTang(dayMaster, chart)); // 學堂
33
+ results.push(...this.checkCiGuan(dayMaster, chart)); // 詞館
34
+ results.push(...this.checkJinYu(dayMaster, chart)); // 金輿
35
+ results.push(...this.checkLuShen(dayMaster, chart)); // 祿神
36
+ results.push(...this.checkJiangXing(chart)); // 將星
37
+ results.push(...this.checkHuaGai(chart)); // 華蓋
38
+ results.push(...this.checkYiMa(chart)); // 驛馬
39
+ results.push(...this.checkTianYiDoctor(dayMaster, chart)); // 天醫
40
+ // Romance & Relationships (感情) - 6 types
41
+ results.push(...this.checkPeachBlossom(dayBranch, chart)); // 桃花
42
+ results.push(...this.checkHongLuan(chart)); // 紅鸞
43
+ results.push(...this.checkTianXi(chart)); // 天喜
44
+ results.push(...this.checkXianChi(dayBranch, chart)); // 咸池
45
+ results.push(...this.checkLonelyStars(chart, gender)); // 孤辰寡宿
46
+ results.push(...this.checkYuanChen(chart, gender)); // 元辰
47
+ // Wealth & Fortune (財富) - 5 types
48
+ results.push(...this.checkJinShen(dayMaster, chart)); // 金神
49
+ results.push(...this.checkTianCai(dayMaster, chart)); // 天財
50
+ results.push(...this.checkBaZhuan(chart)); // 八專
51
+ results.push(...this.checkShiGan(dayMaster, chart)); // 十干祿
52
+ results.push(...this.checkJianLu(dayMaster, chart)); // 建祿
53
+ // Inauspicious Spirits (凶煞) - 15 types
54
+ results.push(...this.checkYangRen(dayMaster, chart)); // 羊刃
55
+ results.push(...this.checkFeiRen(dayMaster, chart)); // 飛刃
56
+ results.push(...this.checkXueRen(chart)); // 血刃
57
+ results.push(...this.checkJieSha(chart)); // 劫煞
58
+ results.push(...this.checkZaiSha(chart)); // 災煞
59
+ results.push(...this.checkWangShen(chart)); // 亡神
60
+ results.push(...this.checkLiuE(chart)); // 六厄
61
+ results.push(...this.checkTianKu(chart)); // 天哭
62
+ results.push(...this.checkDiKu(chart)); // 地哭
63
+ results.push(...this.checkBaiHu(chart)); // 白虎
64
+ results.push(...this.checkPiMa(chart)); // 披麻
65
+ results.push(...this.checkDiaoKe(chart)); // 吊客
66
+ results.push(...this.checkTianLuo(chart)); // 天羅
67
+ results.push(...this.checkDiWang(chart)); // 地網
68
+ results.push(...this.checkLiuXia(chart)); // 流霞
69
+ // Special Formations (特殊格局) - 6 types
70
+ results.push(...this.checkKuiGang(chart)); // 魁罡
71
+ results.push(...this.checkJinShenGe(chart)); // 金神格
72
+ results.push(...this.checkRiDeGe(chart)); // 日德格
73
+ results.push(...this.checkKongWang(chart)); // 空亡
74
+ results.push(...this.checkSiDaKongWang(chart)); // 四大空亡
75
+ results.push(...this.checkShiEYunDao(chart)); // 十惡大敗
76
+ return results;
77
+ }
78
+ /**
79
+ * Check for Tian Yi Noble Person (天乙貴人)
80
+ */
81
+ static checkTianYi(dayMaster, chart) {
82
+ const results = [];
83
+ // Tian Yi mapping based on day master
84
+ const tianYiMap = {
85
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[1], bazi_1.EARTHLY_BRANCHES_ARRAY[7]], // 甲: 丑, 未
86
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[0], bazi_1.EARTHLY_BRANCHES_ARRAY[8]], // 乙: 子, 申
87
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[11], bazi_1.EARTHLY_BRANCHES_ARRAY[9]], // 丙: 亥, 酉
88
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[11], bazi_1.EARTHLY_BRANCHES_ARRAY[9]], // 丁: 亥, 酉
89
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[1], bazi_1.EARTHLY_BRANCHES_ARRAY[7]], // 戊: 丑, 未
90
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[0], bazi_1.EARTHLY_BRANCHES_ARRAY[8]], // 己: 子, 申
91
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[1], bazi_1.EARTHLY_BRANCHES_ARRAY[7]], // 庚: 丑, 未
92
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[2], bazi_1.EARTHLY_BRANCHES_ARRAY[6]], // 辛: 寅, 午
93
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[3], bazi_1.EARTHLY_BRANCHES_ARRAY[5]], // 壬: 卯, 巳
94
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: [bazi_1.EARTHLY_BRANCHES_ARRAY[3], bazi_1.EARTHLY_BRANCHES_ARRAY[5]] // 癸: 卯, 巳
95
+ };
96
+ const tianYiBranches = tianYiMap[dayMaster] || [];
97
+ const branches = [
98
+ { branch: chart.year.branch, position: '年支' },
99
+ { branch: chart.month.branch, position: '月支' },
100
+ { branch: chart.day.branch, position: '日支' },
101
+ { branch: chart.hour.branch, position: '時支' }
102
+ ];
103
+ branches.forEach(({ branch, position }) => {
104
+ if (tianYiBranches.includes(branch)) {
105
+ results.push({
106
+ name: '天乙貴人',
107
+ type: '吉星',
108
+ position,
109
+ description: '天乙貴人,主貴人相助,逢凶化吉。遇難得貴人扶持,宜從事公職或與人合作。'
110
+ });
111
+ }
112
+ });
113
+ return results;
114
+ }
115
+ /**
116
+ * Check for Tai Ji Noble Person (太極貴人)
117
+ */
118
+ static checkTaiJi(chart) {
119
+ const results = [];
120
+ // Simplified Tai Ji check - when stem and branch elements complement
121
+ const pillars = [
122
+ { pillar: chart.year, position: positions_1.POSITION_NAMES.year },
123
+ { pillar: chart.month, position: positions_1.POSITION_NAMES.month },
124
+ { pillar: chart.day, position: positions_1.POSITION_NAMES.day },
125
+ { pillar: chart.hour, position: positions_1.POSITION_NAMES.hour }
126
+ ];
127
+ // Check for specific combinations that form Tai Ji
128
+ const taiJiCombos = [
129
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[0] }, // 甲子
130
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[1], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[6] }, // 乙午
131
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[2], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[3] }, // 丙卯
132
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[3], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[9] }, // 丁酉
133
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[4], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 戊辰
134
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[5], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[1] }, // 己丑
135
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[2] }, // 庚寅
136
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[7], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[11] }, // 辛亥
137
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[8], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[8] }, // 壬申
138
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[9], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[5] } // 癸巳
139
+ ];
140
+ pillars.forEach(({ pillar, position }) => {
141
+ if (taiJiCombos.some(combo => combo.stem === pillar.stem && combo.branch === pillar.branch)) {
142
+ results.push({
143
+ name: '太極貴人',
144
+ type: '吉星',
145
+ position,
146
+ description: '太極貴人,主聰明好學,悟性高,有研究精神。易得上級賞識,適合學術研究。'
147
+ });
148
+ }
149
+ });
150
+ return results;
151
+ }
152
+ /**
153
+ * Check for Wen Chang (文昌貴人)
154
+ */
155
+ static checkWenChang(dayMaster, chart) {
156
+ const results = [];
157
+ // Wen Chang mapping
158
+ const wenChangMap = {
159
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 甲: 巳
160
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 乙: 午
161
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 丙: 申
162
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 丁: 酉
163
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 戊: 申
164
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 己: 酉
165
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 庚: 亥
166
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 辛: 子
167
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 壬: 寅
168
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3] // 癸: 卯
169
+ };
170
+ const wenChangBranch = wenChangMap[dayMaster];
171
+ if (!wenChangBranch)
172
+ return results;
173
+ const branches = [
174
+ { branch: chart.year.branch, position: '年支' },
175
+ { branch: chart.month.branch, position: '月支' },
176
+ { branch: chart.day.branch, position: '日支' },
177
+ { branch: chart.hour.branch, position: '時支' }
178
+ ];
179
+ branches.forEach(({ branch, position }) => {
180
+ if (branch === wenChangBranch) {
181
+ results.push({
182
+ name: '文昌貴人',
183
+ type: '吉星',
184
+ position,
185
+ description: '文昌貴人,主文采斐然,考試順利。利於讀書求學,文職工作,創作寫作。'
186
+ });
187
+ }
188
+ });
189
+ return results;
190
+ }
191
+ /**
192
+ * Check for Peach Blossom (桃花)
193
+ */
194
+ static checkPeachBlossom(dayBranch, chart) {
195
+ const results = [];
196
+ // Peach blossom mapping based on day branch
197
+ const peachBlossomMap = {
198
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 申: 酉
199
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 子: 酉
200
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辰: 酉
201
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 寅: 卯
202
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 午: 卯
203
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 戌: 卯
204
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 巳: 午
205
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 酉: 午
206
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丑: 午
207
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 亥: 子
208
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 卯: 子
209
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0] // 未: 子
210
+ };
211
+ const peachBranch = peachBlossomMap[dayBranch];
212
+ if (!peachBranch)
213
+ return results;
214
+ const branches = [
215
+ { branch: chart.year.branch, position: '年支' },
216
+ { branch: chart.month.branch, position: '月支' },
217
+ { branch: chart.day.branch, position: '日支' },
218
+ { branch: chart.hour.branch, position: '時支' }
219
+ ];
220
+ branches.forEach(({ branch, position }) => {
221
+ if (branch === peachBranch) {
222
+ results.push({
223
+ name: '桃花',
224
+ type: '中性',
225
+ position,
226
+ description: '桃花星,主異性緣佳,感情豐富。魅力十足,但需防爛桃花。'
227
+ });
228
+ }
229
+ });
230
+ return results;
231
+ }
232
+ /**
233
+ * Check for other noble persons
234
+ */
235
+ static checkNoblePersons(dayMaster, chart) {
236
+ const results = [];
237
+ // Check for Tian De (天德) - simplified
238
+ if (chart.month.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[2] && dayMaster === bazi_1.HEAVENLY_STEMS_ARRAY[3]) { // 寅, 丁
239
+ results.push({
240
+ name: '天德貴人',
241
+ type: '吉星',
242
+ position: positions_1.POSITION_NAMES.month,
243
+ description: '天德貴人,主逢凶化吉,遇難呈祥。能消災解厄,化險為夷。'
244
+ });
245
+ }
246
+ // Check for Yue De (月德) - simplified
247
+ if (chart.month.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[0] && dayMaster === bazi_1.HEAVENLY_STEMS_ARRAY[8]) { // 子, 壬
248
+ results.push({
249
+ name: '月德貴人',
250
+ type: '吉星',
251
+ position: positions_1.POSITION_NAMES.month,
252
+ description: '月德貴人,主慈祥和善,福澤深厚。人緣好,容易得到幫助。'
253
+ });
254
+ }
255
+ // Check for Fu Xing (福星) - simplified
256
+ const fuXingCombos = [
257
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[2] }, // 甲寅
258
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[1], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[3] }, // 乙卯
259
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[2], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[5] }, // 丙巳
260
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[3], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[6] } // 丁午
261
+ ];
262
+ if (fuXingCombos.some(combo => combo.stem === chart.year.stem && combo.branch === chart.year.branch)) {
263
+ results.push({
264
+ name: '福星貴人',
265
+ type: '吉星',
266
+ position: positions_1.POSITION_NAMES.year,
267
+ description: '福星貴人,主福祿雙全,一生順遂。財運亨通,事業有成。'
268
+ });
269
+ }
270
+ return results;
271
+ }
272
+ /**
273
+ * Check for evil spirits
274
+ */
275
+ static checkEvilSpirits(chart) {
276
+ const results = [];
277
+ // Check for Jie Sha (劫煞) - simplified
278
+ const jieMap = {
279
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 申: 巳
280
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 子: 巳
281
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 辰: 巳
282
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 寅: 亥
283
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 午: 亥
284
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 戌: 亥
285
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 巳: 寅
286
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 酉: 寅
287
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 丑: 寅
288
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 亥: 申
289
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 卯: 申
290
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8] // 未: 申
291
+ };
292
+ const jieBranch = jieMap[chart.day.branch];
293
+ if (jieBranch) {
294
+ if (chart.year.branch === jieBranch) {
295
+ results.push({
296
+ name: '劫煞',
297
+ type: '凶星',
298
+ position: '年支',
299
+ description: '劫煞,主破財損失,錢財被劫。理財需謹慎,防範小人。'
300
+ });
301
+ }
302
+ if (chart.month.branch === jieBranch) {
303
+ results.push({
304
+ name: '劫煞',
305
+ type: '凶星',
306
+ position: '月支',
307
+ description: '劫煞,主破財損失,錢財被劫。理財需謹慎,防範小人。'
308
+ });
309
+ }
310
+ if (chart.hour.branch === jieBranch) {
311
+ results.push({
312
+ name: '劫煞',
313
+ type: '凶星',
314
+ position: '時支',
315
+ description: '劫煞,主破財損失,錢財被劫。理財需謹慎,防範小人。'
316
+ });
317
+ }
318
+ }
319
+ // Check for Zai Sha (災煞) - simplified
320
+ const zaiMap = {
321
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 申: 午
322
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 子: 午
323
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 辰: 午
324
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 寅: 子
325
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 午: 子
326
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 戌: 子
327
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 巳: 卯
328
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 酉: 卯
329
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 丑: 卯
330
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 亥: 酉
331
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 卯: 酉
332
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9] // 未: 酉
333
+ };
334
+ const zaiBranch = zaiMap[chart.day.branch];
335
+ if (zaiBranch) {
336
+ if (chart.year.branch === zaiBranch) {
337
+ results.push({
338
+ name: '災煞',
339
+ type: '凶星',
340
+ position: '年支',
341
+ description: '災煞,主災禍橫生,意外頻發。需要多行善事,化解災厄。'
342
+ });
343
+ }
344
+ if (chart.month.branch === zaiBranch) {
345
+ results.push({
346
+ name: '災煞',
347
+ type: '凶星',
348
+ position: '月支',
349
+ description: '災煞,主災禍橫生,意外頻發。需要多行善事,化解災厄。'
350
+ });
351
+ }
352
+ if (chart.hour.branch === zaiBranch) {
353
+ results.push({
354
+ name: '災煞',
355
+ type: '凶星',
356
+ position: '時支',
357
+ description: '災煞,主災禍橫生,意外頻發。需要多行善事,化解災厄。'
358
+ });
359
+ }
360
+ }
361
+ return results;
362
+ }
363
+ /**
364
+ * Check for lonely stars
365
+ */
366
+ static checkLonelyStars(chart, gender) {
367
+ const results = [];
368
+ // Gu Chen (孤辰) and Gua Su (寡宿) mapping
369
+ const lonelyMap = {
370
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[2], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[10] }, // 子
371
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[2], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[10] }, // 丑
372
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[5], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[1] }, // 寅
373
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[5], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[1] }, // 卯
374
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[5], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[1] }, // 辰
375
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[8], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 巳
376
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[8], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 午
377
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[8], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 未
378
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[11], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[7] }, // 申
379
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[11], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[7] }, // 酉
380
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[11], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[7] }, // 戌
381
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: { guChen: bazi_1.EARTHLY_BRANCHES_ARRAY[2], guaSu: bazi_1.EARTHLY_BRANCHES_ARRAY[10] } // 亥
382
+ };
383
+ const lonely = lonelyMap[chart.year.branch];
384
+ if (!lonely)
385
+ return results;
386
+ const branches = [chart.year.branch, chart.month.branch, chart.day.branch, chart.hour.branch];
387
+ if (branches.includes(lonely.guChen) && gender === 'male') {
388
+ results.push({
389
+ name: '孤辰',
390
+ type: '凶星',
391
+ position: '命盤',
392
+ description: '孤辰星,男命主獨立自主,但親情淡薄。個性較孤僻,不喜熱鬧。'
393
+ });
394
+ }
395
+ if (branches.includes(lonely.guaSu) && gender === 'female') {
396
+ results.push({
397
+ name: '寡宿',
398
+ type: '凶星',
399
+ position: '命盤',
400
+ description: '寡宿星,女命主清心寡欲,感情淡泊。獨立性強,但婚姻較晚。'
401
+ });
402
+ }
403
+ return results;
404
+ }
405
+ /**
406
+ * Check for Yi Ma (驿马) - Travel Horse
407
+ * 申子辰见寅,寅午戌见申,巳酉丑见亥,亥卯未见巳
408
+ */
409
+ static checkYiMa(chart) {
410
+ const results = [];
411
+ // Yi Ma mapping based on branch groups
412
+ const yiMaMap = {
413
+ // 申子辰 -> 寅
414
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 申: 寅
415
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 子: 寅
416
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 辰: 寅
417
+ // 寅午戌 -> 申
418
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 寅: 申
419
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 午: 申
420
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 戌: 申
421
+ // 巳酉丑 -> 亥
422
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 巳: 亥
423
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 酉: 亥
424
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 丑: 亥
425
+ // 亥卯未 -> 巳
426
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 亥: 巳
427
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 卯: 巳
428
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5] // 未: 巳
429
+ };
430
+ // Check day branch for Yi Ma
431
+ const yiMaBranch = yiMaMap[chart.day.branch];
432
+ if (!yiMaBranch)
433
+ return results;
434
+ const branches = [
435
+ { branch: chart.year.branch, position: '年支' },
436
+ { branch: chart.month.branch, position: '月支' },
437
+ { branch: chart.day.branch, position: '日支' },
438
+ { branch: chart.hour.branch, position: '時支' }
439
+ ];
440
+ branches.forEach(({ branch, position }) => {
441
+ if (branch === yiMaBranch) {
442
+ results.push({
443
+ name: '驛馬',
444
+ type: '中性',
445
+ position,
446
+ description: '驛馬星,主奔波變動,遷移頻繁。適合經商貿易,出差旅行。'
447
+ });
448
+ }
449
+ });
450
+ return results;
451
+ }
452
+ /**
453
+ * Check for Jiang Xing (将星) - General Star
454
+ * 申子辰见子,寅午戌见午,巳酉丑见酉,亥卯未见卯
455
+ */
456
+ static checkJiangXing(chart) {
457
+ const results = [];
458
+ // Jiang Xing mapping based on branch groups
459
+ const jiangXingMap = {
460
+ // 申子辰 -> 子
461
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 申: 子
462
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 子: 子
463
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 辰: 子
464
+ // 寅午戌 -> 午
465
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 寅: 午
466
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 午: 午
467
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 戌: 午
468
+ // 巳酉丑 -> 酉
469
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 巳: 酉
470
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 酉: 酉
471
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 丑: 酉
472
+ // 亥卯未 -> 卯
473
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 亥: 卯
474
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 卯: 卯
475
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3] // 未: 卯
476
+ };
477
+ // Check day branch for Jiang Xing
478
+ const jiangXingBranch = jiangXingMap[chart.day.branch];
479
+ if (!jiangXingBranch)
480
+ return results;
481
+ const branches = [
482
+ { branch: chart.year.branch, position: '年支' },
483
+ { branch: chart.month.branch, position: '月支' },
484
+ { branch: chart.day.branch, position: '日支' },
485
+ { branch: chart.hour.branch, position: '時支' }
486
+ ];
487
+ branches.forEach(({ branch, position }) => {
488
+ if (branch === jiangXingBranch) {
489
+ results.push({
490
+ name: '將星',
491
+ type: '吉星',
492
+ position,
493
+ description: '將星,主領導才能,威權顯赫。有統御之才,適合擔任主管。'
494
+ });
495
+ }
496
+ });
497
+ return results;
498
+ }
499
+ /**
500
+ * Check for Hua Gai (华盖) - Canopy Star
501
+ * 申子辰见辰,寅午戌见戌,巳酉丑见丑,亥卯未见未
502
+ */
503
+ static checkHuaGai(chart) {
504
+ const results = [];
505
+ // Hua Gai mapping based on branch groups
506
+ const huaGaiMap = {
507
+ // 申子辰 -> 辰
508
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 申: 辰
509
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 子: 辰
510
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 辰: 辰
511
+ // 寅午戌 -> 戌
512
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 寅: 戌
513
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 午: 戌
514
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 戌: 戌
515
+ // 巳酉丑 -> 丑
516
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 巳: 丑
517
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 酉: 丑
518
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 丑: 丑
519
+ // 亥卯未 -> 未
520
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 亥: 未
521
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 卯: 未
522
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7] // 未: 未
523
+ };
524
+ // Check day branch for Hua Gai
525
+ const huaGaiBranch = huaGaiMap[chart.day.branch];
526
+ if (!huaGaiBranch)
527
+ return results;
528
+ const branches = [
529
+ { branch: chart.year.branch, position: '年支' },
530
+ { branch: chart.month.branch, position: '月支' },
531
+ { branch: chart.day.branch, position: '日支' },
532
+ { branch: chart.hour.branch, position: '時支' }
533
+ ];
534
+ branches.forEach(({ branch, position }) => {
535
+ if (branch === huaGaiBranch) {
536
+ results.push({
537
+ name: '華蓋',
538
+ type: '中性',
539
+ position,
540
+ description: '華蓋星,主聰明孤高,喜好玄學。有藝術天分,但性格較孤僻。'
541
+ });
542
+ }
543
+ });
544
+ return results;
545
+ }
546
+ /**
547
+ * Check for Yang Ren (羊刃) - Goat Blade
548
+ * 甲见卯,乙见寅,丙见午,丁见巳,戊见午,己见巳,庚见酉,辛见申,壬见子,癸见亥
549
+ */
550
+ static checkYangRen(dayMaster, chart) {
551
+ const results = [];
552
+ // Yang Ren mapping based on day master
553
+ const yangRenMap = {
554
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 甲: 卯
555
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 乙: 寅
556
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丙: 午
557
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 丁: 巳
558
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 戊: 午
559
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 己: 巳
560
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 庚: 酉
561
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 辛: 申
562
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 壬: 子
563
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11] // 癸: 亥
564
+ };
565
+ const yangRenBranch = yangRenMap[dayMaster];
566
+ if (!yangRenBranch)
567
+ return results;
568
+ const branches = [
569
+ { branch: chart.year.branch, position: '年支' },
570
+ { branch: chart.month.branch, position: '月支' },
571
+ { branch: chart.day.branch, position: '日支' },
572
+ { branch: chart.hour.branch, position: '時支' }
573
+ ];
574
+ branches.forEach(({ branch, position }) => {
575
+ if (branch === yangRenBranch) {
576
+ results.push({
577
+ name: '羊刃',
578
+ type: '凶星',
579
+ position,
580
+ description: '羊刃,主性格剛烈,易有血光。需注意安全,避免衝突。'
581
+ });
582
+ }
583
+ });
584
+ return results;
585
+ }
586
+ /**
587
+ * Check for Xue Ren (血刃) - Blood Blade
588
+ * 申子辰见戌,寅午戌见丑,巳酉丑见未,亥卯未见辰
589
+ */
590
+ static checkXueRen(chart) {
591
+ const results = [];
592
+ // Xue Ren mapping based on branch groups
593
+ const xueRenMap = {
594
+ // 申子辰 -> 戌
595
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 申: 戌
596
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 子: 戌
597
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 辰: 戌
598
+ // 寅午戌 -> 丑
599
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 寅: 丑
600
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 午: 丑
601
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 戌: 丑
602
+ // 巳酉丑 -> 未
603
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 巳: 未
604
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 酉: 未
605
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 丑: 未
606
+ // 亥卯未 -> 辰
607
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 亥: 辰
608
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 卯: 辰
609
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4] // 未: 辰
610
+ };
611
+ // Check day branch for Xue Ren
612
+ const xueRenBranch = xueRenMap[chart.day.branch];
613
+ if (!xueRenBranch)
614
+ return results;
615
+ const branches = [
616
+ { branch: chart.year.branch, position: '年支' },
617
+ { branch: chart.month.branch, position: '月支' },
618
+ { branch: chart.day.branch, position: '日支' },
619
+ { branch: chart.hour.branch, position: '時支' }
620
+ ];
621
+ branches.forEach(({ branch, position }) => {
622
+ if (branch === xueRenBranch) {
623
+ results.push({
624
+ name: '血刃',
625
+ type: '凶星',
626
+ position,
627
+ description: '血刃,主血光之災,手術開刀。注意健康,避免危險活動。'
628
+ });
629
+ }
630
+ });
631
+ return results;
632
+ }
633
+ /**
634
+ * Check for Jin Yu (金輿) - Golden Carriage
635
+ * 甲見辰,乙見巳,丙見未,丁見申,戊見未,己見申,庚見戌,辛見亥,壬見丑,癸見寅
636
+ */
637
+ static checkJinYu(dayMaster, chart) {
638
+ const results = [];
639
+ const jinYuMap = {
640
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 甲: 辰
641
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 乙: 巳
642
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 丙: 未
643
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 丁: 申
644
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 戊: 未
645
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 己: 申
646
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 庚: 戌
647
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 辛: 亥
648
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 壬: 丑
649
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2] // 癸: 寅
650
+ };
651
+ const jinYuBranch = jinYuMap[dayMaster];
652
+ if (!jinYuBranch)
653
+ return results;
654
+ const branches = [
655
+ { branch: chart.year.branch, position: '年支' },
656
+ { branch: chart.month.branch, position: '月支' },
657
+ { branch: chart.day.branch, position: '日支' },
658
+ { branch: chart.hour.branch, position: '時支' }
659
+ ];
660
+ branches.forEach(({ branch, position }) => {
661
+ if (branch === jinYuBranch) {
662
+ results.push({
663
+ name: '金輿',
664
+ type: '吉星',
665
+ position,
666
+ description: '金輿星,主車馬之福,出入平安。有交通工具之便,出行順利。'
667
+ });
668
+ }
669
+ });
670
+ return results;
671
+ }
672
+ /**
673
+ * Check for Lu Shen (祿神) - Salary God
674
+ * 甲祿在寅,乙祿在卯,丙戊祿在巳,丁己祿在午,庚祿在申,辛祿在酉,壬祿在亥,癸祿在子
675
+ */
676
+ static checkLuShen(dayMaster, chart) {
677
+ const results = [];
678
+ const luShenMap = {
679
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 甲: 寅
680
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 乙: 卯
681
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 丙: 巳
682
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丁: 午
683
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戊: 巳
684
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 己: 午
685
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 庚: 申
686
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辛: 酉
687
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 壬: 亥
688
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0] // 癸: 子
689
+ };
690
+ const luShenBranch = luShenMap[dayMaster];
691
+ if (!luShenBranch)
692
+ return results;
693
+ const branches = [
694
+ { branch: chart.year.branch, position: '年支' },
695
+ { branch: chart.month.branch, position: '月支' },
696
+ { branch: chart.day.branch, position: '日支' },
697
+ { branch: chart.hour.branch, position: '時支' }
698
+ ];
699
+ branches.forEach(({ branch, position }) => {
700
+ if (branch === luShenBranch) {
701
+ results.push({
702
+ name: '祿神',
703
+ type: '吉星',
704
+ position,
705
+ description: '祿神星,主財祿豐厚,衣食無憂。正財運佳,工作收入穩定。'
706
+ });
707
+ }
708
+ });
709
+ return results;
710
+ }
711
+ /**
712
+ * Check for Tian Ku (天哭) - Heaven Crying
713
+ * 申子辰見午,寅午戌見子,巳酉丑見卯,亥卯未見酉
714
+ */
715
+ static checkTianKu(chart) {
716
+ const results = [];
717
+ const tianKuMap = {
718
+ // 申子辰 -> 午
719
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 申: 午
720
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 子: 午
721
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 辰: 午
722
+ // 寅午戌 -> 子
723
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 寅: 子
724
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 午: 子
725
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 戌: 子
726
+ // 巳酉丑 -> 卯
727
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 巳: 卯
728
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 酉: 卯
729
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 丑: 卯
730
+ // 亥卯未 -> 酉
731
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 亥: 酉
732
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 卯: 酉
733
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9] // 未: 酉
734
+ };
735
+ const tianKuBranch = tianKuMap[chart.day.branch];
736
+ if (!tianKuBranch)
737
+ return results;
738
+ const branches = [
739
+ { branch: chart.year.branch, position: '年支' },
740
+ { branch: chart.month.branch, position: '月支' },
741
+ { branch: chart.day.branch, position: '日支' },
742
+ { branch: chart.hour.branch, position: '時支' }
743
+ ];
744
+ branches.forEach(({ branch, position }) => {
745
+ if (branch === tianKuBranch) {
746
+ results.push({
747
+ name: '天哭',
748
+ type: '凶星',
749
+ position,
750
+ description: '天哭星,主悲觀多愁,易感傷。需要調整心態,積極樂觀。'
751
+ });
752
+ }
753
+ });
754
+ return results;
755
+ }
756
+ /**
757
+ * Check for Di Ku (地哭) - Earth Crying
758
+ */
759
+ static checkDiKu(chart) {
760
+ const results = [];
761
+ // Similar pattern to Tian Ku but different mapping
762
+ const diKuMap = {
763
+ // 申子辰 -> 未
764
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 申: 未
765
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 子: 未
766
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 辰: 未
767
+ // 寅午戌 -> 丑
768
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 寅: 丑
769
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 午: 丑
770
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 戌: 丑
771
+ // 巳酉丑 -> 辰
772
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 巳: 辰
773
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 酉: 辰
774
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 丑: 辰
775
+ // 亥卯未 -> 戌
776
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 亥: 戌
777
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 卯: 戌
778
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10] // 未: 戌
779
+ };
780
+ const diKuBranch = diKuMap[chart.day.branch];
781
+ if (!diKuBranch)
782
+ return results;
783
+ const branches = [
784
+ { branch: chart.year.branch, position: '年支' },
785
+ { branch: chart.month.branch, position: '月支' },
786
+ { branch: chart.day.branch, position: '日支' },
787
+ { branch: chart.hour.branch, position: '時支' }
788
+ ];
789
+ branches.forEach(({ branch, position }) => {
790
+ if (branch === diKuBranch) {
791
+ results.push({
792
+ name: '地哭',
793
+ type: '凶星',
794
+ position,
795
+ description: '地哭星,主憂愁煩惱,心事重重。宜多運動,保持心情愉快。'
796
+ });
797
+ }
798
+ });
799
+ return results;
800
+ }
801
+ /**
802
+ * Check for Kui Gang (魁罡) - Chief Gang
803
+ * 庚辰,庚戌,壬辰,戊戌 日柱
804
+ */
805
+ static checkKuiGang(chart) {
806
+ const results = [];
807
+ const kuiGangCombos = [
808
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 庚辰
809
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[10] }, // 庚戌
810
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[8], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 壬辰
811
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[4], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[10] } // 戊戌
812
+ ];
813
+ if (kuiGangCombos.some(combo => combo.stem === chart.day.stem && combo.branch === chart.day.branch)) {
814
+ results.push({
815
+ name: '魁罡',
816
+ type: '中性',
817
+ position: positions_1.POSITION_NAMES.day,
818
+ description: '魁罡格,主剛毅果斷,不屈不撓。性格堅強,但婚姻較難順。'
819
+ });
820
+ }
821
+ return results;
822
+ }
823
+ /**
824
+ * Check for Liu Xia (流霞) - Flowing Cloud
825
+ * 甲見酉,乙見戌,丙見未,丁見申,戊見巳,己見午,庚見辰,辛見卯,壬見亥,癸見寅
826
+ */
827
+ static checkLiuXia(chart) {
828
+ const results = [];
829
+ const liuXiaMap = {
830
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 甲: 酉
831
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 乙: 戌
832
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 丙: 未
833
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 丁: 申
834
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戊: 巳
835
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 己: 午
836
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 庚: 辰
837
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 辛: 卯
838
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 壬: 亥
839
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2] // 癸: 寅
840
+ };
841
+ const liuXiaBranch = liuXiaMap[chart.day.stem];
842
+ if (!liuXiaBranch)
843
+ return results;
844
+ const branches = [
845
+ { branch: chart.year.branch, position: '年支' },
846
+ { branch: chart.month.branch, position: '月支' },
847
+ { branch: chart.day.branch, position: '日支' },
848
+ { branch: chart.hour.branch, position: '時支' }
849
+ ];
850
+ branches.forEach(({ branch, position }) => {
851
+ if (branch === liuXiaBranch) {
852
+ results.push({
853
+ name: '流霞',
854
+ type: '凶星',
855
+ position,
856
+ description: '流霞煞,主產厄血光,女性不利。女性需注意婦科健康。'
857
+ });
858
+ }
859
+ });
860
+ return results;
861
+ }
862
+ /**
863
+ * Check for Tian Luo (天羅) - Heaven Net
864
+ * 戌年生人見亥,亥年生人見戌
865
+ */
866
+ static checkTianLuo(chart) {
867
+ const results = [];
868
+ if (chart.year.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[10] && // 戌年
869
+ (chart.day.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[11] ||
870
+ chart.hour.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[11])) { // 見亥
871
+ results.push({
872
+ name: '天羅',
873
+ type: '凶星',
874
+ position: '命盤',
875
+ description: '天羅星,主困頓受制,進退兩難。需要耐心等待時機。'
876
+ });
877
+ }
878
+ if (chart.year.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[11] && // 亥年
879
+ (chart.day.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[10] ||
880
+ chart.hour.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[10])) { // 見戌
881
+ results.push({
882
+ name: '天羅',
883
+ type: '凶星',
884
+ position: '命盤',
885
+ description: '天羅星,主困頓受制,進退兩難。需要耐心等待時機。'
886
+ });
887
+ }
888
+ return results;
889
+ }
890
+ /**
891
+ * Check for Di Wang (地網) - Earth Net
892
+ * 辰年生人見巳,巳年生人見辰
893
+ */
894
+ static checkDiWang(chart) {
895
+ const results = [];
896
+ if (chart.year.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[4] && // 辰年
897
+ (chart.day.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[5] ||
898
+ chart.hour.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[5])) { // 見巳
899
+ results.push({
900
+ name: '地網',
901
+ type: '凶星',
902
+ position: '命盤',
903
+ description: '地網星,主束縛限制,行動不便。避免法律糾紛。'
904
+ });
905
+ }
906
+ if (chart.year.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[5] && // 巳年
907
+ (chart.day.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[4] ||
908
+ chart.hour.branch === bazi_1.EARTHLY_BRANCHES_ARRAY[4])) { // 見辰
909
+ results.push({
910
+ name: '地網',
911
+ type: '凶星',
912
+ position: '命盤',
913
+ description: '地網星,主束縛限制,行動不便。避免法律糾紛。'
914
+ });
915
+ }
916
+ return results;
917
+ }
918
+ /**
919
+ * Check for Wen Qu (文曲貴人) - Literary Curve Noble
920
+ * Based on day master
921
+ */
922
+ static checkWenQu(dayMaster, chart) {
923
+ const results = [];
924
+ const wenQuMap = {
925
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 甲: 巳
926
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 乙: 未
927
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 丙: 酉
928
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 丁: 亥
929
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 戊: 酉
930
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 己: 亥
931
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 庚: 子
932
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 辛: 寅
933
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 壬: 辰
934
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6] // 癸: 午
935
+ };
936
+ const wenQuBranch = wenQuMap[dayMaster];
937
+ if (!wenQuBranch)
938
+ return results;
939
+ const branches = [
940
+ { branch: chart.year.branch, position: '年支' },
941
+ { branch: chart.month.branch, position: '月支' },
942
+ { branch: chart.day.branch, position: '日支' },
943
+ { branch: chart.hour.branch, position: '時支' }
944
+ ];
945
+ branches.forEach(({ branch, position }) => {
946
+ if (branch === wenQuBranch) {
947
+ results.push({
948
+ name: '文曲貴人',
949
+ type: '吉星',
950
+ position,
951
+ description: '文曲貴人,主口才便給,能言善辯。適合教學、演講、銷售等需要表達能力的工作。'
952
+ });
953
+ }
954
+ });
955
+ return results;
956
+ }
957
+ /**
958
+ * Check for Guo Yin (國印貴人) - National Seal Noble
959
+ */
960
+ static checkGuoYin(dayMaster, chart) {
961
+ const results = [];
962
+ const guoYinMap = {
963
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 甲: 戌
964
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 乙: 戌
965
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 丙: 丑
966
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 丁: 丑
967
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 戊: 丑
968
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 己: 丑
969
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 庚: 辰
970
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 辛: 辰
971
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 壬: 未
972
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7] // 癸: 未
973
+ };
974
+ const guoYinBranch = guoYinMap[dayMaster];
975
+ if (!guoYinBranch)
976
+ return results;
977
+ const branches = [
978
+ { branch: chart.year.branch, position: '年支' },
979
+ { branch: chart.month.branch, position: '月支' },
980
+ { branch: chart.day.branch, position: '日支' },
981
+ { branch: chart.hour.branch, position: '時支' }
982
+ ];
983
+ branches.forEach(({ branch, position }) => {
984
+ if (branch === guoYinBranch) {
985
+ results.push({
986
+ name: '國印貴人',
987
+ type: '吉星',
988
+ position,
989
+ description: '國印貴人,主掌權得印,仕途亨通。易獲權位,適合從政或管理工作。'
990
+ });
991
+ }
992
+ });
993
+ return results;
994
+ }
995
+ /**
996
+ * Check for De Xiu (德秀貴人) - Virtue Excellence Noble
997
+ */
998
+ static checkDeXiu(dayMaster, chart) {
999
+ const results = [];
1000
+ // 德秀貴人查法:春月見丙丁,夏月見甲乙,秋月見庚辛,冬月見壬癸
1001
+ const monthBranch = chart.month.branch;
1002
+ let seasonStems = [];
1003
+ // Spring: 寅卯辰
1004
+ if ([bazi_1.EARTHLY_BRANCHES_ARRAY[2], bazi_1.EARTHLY_BRANCHES_ARRAY[3], bazi_1.EARTHLY_BRANCHES_ARRAY[4]].includes(monthBranch)) {
1005
+ seasonStems = [bazi_1.HEAVENLY_STEMS_ARRAY[2], bazi_1.HEAVENLY_STEMS_ARRAY[3]]; // 丙丁
1006
+ }
1007
+ // Summer: 巳午未
1008
+ else if ([bazi_1.EARTHLY_BRANCHES_ARRAY[5], bazi_1.EARTHLY_BRANCHES_ARRAY[6], bazi_1.EARTHLY_BRANCHES_ARRAY[7]].includes(monthBranch)) {
1009
+ seasonStems = [bazi_1.HEAVENLY_STEMS_ARRAY[0], bazi_1.HEAVENLY_STEMS_ARRAY[1]]; // 甲乙
1010
+ }
1011
+ // Autumn: 申酉戌
1012
+ else if ([bazi_1.EARTHLY_BRANCHES_ARRAY[8], bazi_1.EARTHLY_BRANCHES_ARRAY[9], bazi_1.EARTHLY_BRANCHES_ARRAY[10]].includes(monthBranch)) {
1013
+ seasonStems = [bazi_1.HEAVENLY_STEMS_ARRAY[6], bazi_1.HEAVENLY_STEMS_ARRAY[7]]; // 庚辛
1014
+ }
1015
+ // Winter: 亥子丑
1016
+ else if ([bazi_1.EARTHLY_BRANCHES_ARRAY[11], bazi_1.EARTHLY_BRANCHES_ARRAY[0], bazi_1.EARTHLY_BRANCHES_ARRAY[1]].includes(monthBranch)) {
1017
+ seasonStems = [bazi_1.HEAVENLY_STEMS_ARRAY[8], bazi_1.HEAVENLY_STEMS_ARRAY[9]]; // 壬癸
1018
+ }
1019
+ const stems = [
1020
+ { stem: chart.year.stem, position: '年干' },
1021
+ { stem: chart.month.stem, position: '月干' },
1022
+ { stem: chart.day.stem, position: '日干' },
1023
+ { stem: chart.hour.stem, position: '時干' }
1024
+ ];
1025
+ stems.forEach(({ stem, position }) => {
1026
+ if (seasonStems.includes(stem)) {
1027
+ results.push({
1028
+ name: '德秀貴人',
1029
+ type: '吉星',
1030
+ position,
1031
+ description: '德秀貴人,主品德高尚,受人尊敬。為人正直,易得他人信任和支持。'
1032
+ });
1033
+ }
1034
+ });
1035
+ return results;
1036
+ }
1037
+ /**
1038
+ * Check for Tian De (天德貴人) - Heavenly Virtue Noble
1039
+ * Complete implementation based on month branch
1040
+ */
1041
+ static checkTianDe(chart) {
1042
+ const results = [];
1043
+ // 天德貴人查法:正月生見丁,二月生見申...
1044
+ const tianDeMap = {
1045
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.HEAVENLY_STEMS_ARRAY[3], // 寅月: 丁
1046
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 卯月: 申
1047
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.HEAVENLY_STEMS_ARRAY[8], // 辰月: 壬
1048
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.HEAVENLY_STEMS_ARRAY[7], // 巳月: 辛
1049
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 午月: 亥
1050
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.HEAVENLY_STEMS_ARRAY[0], // 未月: 甲
1051
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.HEAVENLY_STEMS_ARRAY[9], // 申月: 癸
1052
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 酉月: 寅
1053
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.HEAVENLY_STEMS_ARRAY[3], // 戌月: 丙
1054
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.HEAVENLY_STEMS_ARRAY[1], // 亥月: 乙
1055
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 子月: 巳
1056
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.HEAVENLY_STEMS_ARRAY[6] // 丑月: 庚
1057
+ };
1058
+ const tianDeElement = tianDeMap[chart.month.branch];
1059
+ if (!tianDeElement)
1060
+ return results;
1061
+ // Check if it's a stem or branch
1062
+ if (bazi_1.HEAVENLY_STEMS_ARRAY.includes(tianDeElement)) {
1063
+ // Check stems
1064
+ const stems = [
1065
+ { stem: chart.year.stem, position: '年干' },
1066
+ { stem: chart.month.stem, position: '月干' },
1067
+ { stem: chart.day.stem, position: '日干' },
1068
+ { stem: chart.hour.stem, position: '時干' }
1069
+ ];
1070
+ stems.forEach(({ stem, position }) => {
1071
+ if (stem === tianDeElement) {
1072
+ results.push({
1073
+ name: '天德貴人',
1074
+ type: '吉星',
1075
+ position,
1076
+ description: '天德貴人,主逢凶化吉,遇難呈祥。能消災解厄,化險為夷。'
1077
+ });
1078
+ }
1079
+ });
1080
+ }
1081
+ else {
1082
+ // Check branches
1083
+ const branches = [
1084
+ { branch: chart.year.branch, position: '年支' },
1085
+ { branch: chart.day.branch, position: '日支' },
1086
+ { branch: chart.hour.branch, position: '時支' }
1087
+ ];
1088
+ branches.forEach(({ branch, position }) => {
1089
+ if (branch === tianDeElement) {
1090
+ results.push({
1091
+ name: '天德貴人',
1092
+ type: '吉星',
1093
+ position,
1094
+ description: '天德貴人,主逢凶化吉,遇難呈祥。能消災解厄,化險為夷。'
1095
+ });
1096
+ }
1097
+ });
1098
+ }
1099
+ return results;
1100
+ }
1101
+ /**
1102
+ * Check for Yue De (月德貴人) - Monthly Virtue Noble
1103
+ */
1104
+ static checkYueDe(chart) {
1105
+ const results = [];
1106
+ // 月德貴人查法
1107
+ const yueDeMap = {
1108
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.HEAVENLY_STEMS_ARRAY[2], // 寅月: 丙
1109
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.HEAVENLY_STEMS_ARRAY[0], // 卯月: 甲
1110
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.HEAVENLY_STEMS_ARRAY[8], // 辰月: 壬
1111
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.HEAVENLY_STEMS_ARRAY[6], // 巳月: 庚
1112
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.HEAVENLY_STEMS_ARRAY[2], // 午月: 丙
1113
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.HEAVENLY_STEMS_ARRAY[0], // 未月: 甲
1114
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.HEAVENLY_STEMS_ARRAY[8], // 申月: 壬
1115
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.HEAVENLY_STEMS_ARRAY[6], // 酉月: 庚
1116
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.HEAVENLY_STEMS_ARRAY[2], // 戌月: 丙
1117
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.HEAVENLY_STEMS_ARRAY[0], // 亥月: 甲
1118
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.HEAVENLY_STEMS_ARRAY[8], // 子月: 壬
1119
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.HEAVENLY_STEMS_ARRAY[6] // 丑月: 庚
1120
+ };
1121
+ const yueDeStem = yueDeMap[chart.month.branch];
1122
+ if (!yueDeStem)
1123
+ return results;
1124
+ const stems = [
1125
+ { stem: chart.year.stem, position: '年干' },
1126
+ { stem: chart.month.stem, position: '月干' },
1127
+ { stem: chart.day.stem, position: '日干' },
1128
+ { stem: chart.hour.stem, position: '時干' }
1129
+ ];
1130
+ stems.forEach(({ stem, position }) => {
1131
+ if (stem === yueDeStem) {
1132
+ results.push({
1133
+ name: '月德貴人',
1134
+ type: '吉星',
1135
+ position,
1136
+ description: '月德貴人,主慈祥和善,福澤深厚。人緣好,容易得到幫助。'
1137
+ });
1138
+ }
1139
+ });
1140
+ return results;
1141
+ }
1142
+ /**
1143
+ * Check for Fu Xing (福星貴人) - Fortune Star Noble
1144
+ */
1145
+ static checkFuXing(dayMaster, chart) {
1146
+ const results = [];
1147
+ // 福星貴人查法:甲寅日、乙卯日、丙巳日、丁午日等
1148
+ const fuXingCombos = [
1149
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[2] }, // 甲寅
1150
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[1], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[3] }, // 乙卯
1151
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[2], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[5] }, // 丙巳
1152
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[3], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[6] }, // 丁午
1153
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[4], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[7] }, // 戊未
1154
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[5], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[6] }, // 己午
1155
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[8] }, // 庚申
1156
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[7], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[9] }, // 辛酉
1157
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[8], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[11] }, // 壬亥
1158
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[9], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[0] } // 癸子
1159
+ ];
1160
+ const pillars = [
1161
+ { pillar: chart.year, position: positions_1.POSITION_NAMES.year },
1162
+ { pillar: chart.month, position: positions_1.POSITION_NAMES.month },
1163
+ { pillar: chart.day, position: positions_1.POSITION_NAMES.day },
1164
+ { pillar: chart.hour, position: positions_1.POSITION_NAMES.hour }
1165
+ ];
1166
+ pillars.forEach(({ pillar, position }) => {
1167
+ if (fuXingCombos.some(combo => combo.stem === pillar.stem && combo.branch === pillar.branch)) {
1168
+ results.push({
1169
+ name: '福星貴人',
1170
+ type: '吉星',
1171
+ position,
1172
+ description: '福星貴人,主福祿雙全,一生順遂。財運亨通,事業有成。'
1173
+ });
1174
+ }
1175
+ });
1176
+ return results;
1177
+ }
1178
+ /**
1179
+ * Check for San Qi (三奇貴人) - Three Wonders Noble
1180
+ * 乙丙丁、甲戊庚、辛壬癸
1181
+ */
1182
+ static checkSanQi(dayMaster, chart) {
1183
+ const results = [];
1184
+ const allStems = [chart.year.stem, chart.month.stem, chart.day.stem, chart.hour.stem];
1185
+ // Check for 天上三奇: 乙丙丁
1186
+ if (allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[1]) &&
1187
+ allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[2]) &&
1188
+ allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[3])) {
1189
+ results.push({
1190
+ name: '天上三奇',
1191
+ type: '吉星',
1192
+ position: '命盤',
1193
+ description: '天上三奇,主才華橫溢,智慧超群。有特殊才能,容易成就非凡。'
1194
+ });
1195
+ }
1196
+ // Check for 地上三奇: 甲戊庚
1197
+ if (allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[0]) &&
1198
+ allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[4]) &&
1199
+ allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[6])) {
1200
+ results.push({
1201
+ name: '地上三奇',
1202
+ type: '吉星',
1203
+ position: '命盤',
1204
+ description: '地上三奇,主腳踏實地,穩重務實。做事有條理,容易積累財富。'
1205
+ });
1206
+ }
1207
+ // Check for 人中三奇: 辛壬癸
1208
+ if (allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[7]) &&
1209
+ allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[8]) &&
1210
+ allStems.includes(bazi_1.HEAVENLY_STEMS_ARRAY[9])) {
1211
+ results.push({
1212
+ name: '人中三奇',
1213
+ type: '吉星',
1214
+ position: '命盤',
1215
+ description: '人中三奇,主人緣極佳,左右逢源。善於交際,貴人多助。'
1216
+ });
1217
+ }
1218
+ return results;
1219
+ }
1220
+ /**
1221
+ * Check for Xue Tang (學堂) - Academic Hall
1222
+ */
1223
+ static checkXueTang(dayMaster, chart) {
1224
+ const results = [];
1225
+ // 學堂查法:以日干的長生之位
1226
+ const xueTangMap = {
1227
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 甲: 亥
1228
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 乙: 午
1229
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 丙: 寅
1230
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 丁: 酉
1231
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 戊: 寅
1232
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 己: 酉
1233
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 庚: 巳
1234
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 辛: 子
1235
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 壬: 申
1236
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3] // 癸: 卯
1237
+ };
1238
+ const xueTangBranch = xueTangMap[dayMaster];
1239
+ if (!xueTangBranch)
1240
+ return results;
1241
+ const branches = [
1242
+ { branch: chart.year.branch, position: '年支' },
1243
+ { branch: chart.month.branch, position: '月支' },
1244
+ { branch: chart.day.branch, position: '日支' },
1245
+ { branch: chart.hour.branch, position: '時支' }
1246
+ ];
1247
+ branches.forEach(({ branch, position }) => {
1248
+ if (branch === xueTangBranch) {
1249
+ results.push({
1250
+ name: '學堂',
1251
+ type: '吉星',
1252
+ position,
1253
+ description: '學堂星,主好學上進,學業有成。利於求學深造,學術研究。'
1254
+ });
1255
+ }
1256
+ });
1257
+ return results;
1258
+ }
1259
+ /**
1260
+ * Check for Ci Guan (詞館) - Literary Hall
1261
+ */
1262
+ static checkCiGuan(dayMaster, chart) {
1263
+ const results = [];
1264
+ // 詞館查法:以日干的臨官之位
1265
+ const ciGuanMap = {
1266
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 甲: 寅
1267
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 乙: 卯
1268
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 丙: 巳
1269
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丁: 午
1270
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戊: 巳
1271
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 己: 午
1272
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 庚: 申
1273
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辛: 酉
1274
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 壬: 亥
1275
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0] // 癸: 子
1276
+ };
1277
+ const ciGuanBranch = ciGuanMap[dayMaster];
1278
+ if (!ciGuanBranch)
1279
+ return results;
1280
+ const branches = [
1281
+ { branch: chart.year.branch, position: '年支' },
1282
+ { branch: chart.month.branch, position: '月支' },
1283
+ { branch: chart.day.branch, position: '日支' },
1284
+ { branch: chart.hour.branch, position: '時支' }
1285
+ ];
1286
+ branches.forEach(({ branch, position }) => {
1287
+ if (branch === ciGuanBranch) {
1288
+ results.push({
1289
+ name: '詞館',
1290
+ type: '吉星',
1291
+ position,
1292
+ description: '詞館星,主文思敏捷,辯才無礙。適合文學創作,法律辯論。'
1293
+ });
1294
+ }
1295
+ });
1296
+ return results;
1297
+ }
1298
+ /**
1299
+ * Check for Hong Luan (紅鸞) - Red Phoenix
1300
+ */
1301
+ static checkHongLuan(chart) {
1302
+ const results = [];
1303
+ // 紅鸞查法:以年支查其他地支
1304
+ const hongLuanMap = {
1305
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 子年: 卯
1306
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 丑年: 寅
1307
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 寅年: 丑
1308
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 卯年: 子
1309
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 辰年: 亥
1310
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 巳年: 戌
1311
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 午年: 酉
1312
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 未年: 申
1313
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 申年: 未
1314
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 酉年: 午
1315
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戌年: 巳
1316
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4] // 亥年: 辰
1317
+ };
1318
+ const hongLuanBranch = hongLuanMap[chart.year.branch];
1319
+ if (!hongLuanBranch)
1320
+ return results;
1321
+ const branches = [
1322
+ { branch: chart.month.branch, position: '月支' },
1323
+ { branch: chart.day.branch, position: '日支' },
1324
+ { branch: chart.hour.branch, position: '時支' }
1325
+ ];
1326
+ branches.forEach(({ branch, position }) => {
1327
+ if (branch === hongLuanBranch) {
1328
+ results.push({
1329
+ name: '紅鸞',
1330
+ type: '中性',
1331
+ position,
1332
+ description: '紅鸞星,主婚姻喜慶,感情美滿。利於戀愛結婚,夫妻和諧。'
1333
+ });
1334
+ }
1335
+ });
1336
+ return results;
1337
+ }
1338
+ /**
1339
+ * Check for Tian Xi (天喜) - Heavenly Happiness
1340
+ */
1341
+ static checkTianXi(chart) {
1342
+ const results = [];
1343
+ // 天喜查法:紅鸞對宮
1344
+ const tianXiMap = {
1345
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 子年: 酉
1346
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 丑年: 申
1347
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 寅年: 未
1348
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 卯年: 午
1349
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 辰年: 巳
1350
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 巳年: 辰
1351
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 午年: 卯
1352
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 未年: 寅
1353
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 申年: 丑
1354
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 酉年: 子
1355
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 戌年: 亥
1356
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10] // 亥年: 戌
1357
+ };
1358
+ const tianXiBranch = tianXiMap[chart.year.branch];
1359
+ if (!tianXiBranch)
1360
+ return results;
1361
+ const branches = [
1362
+ { branch: chart.month.branch, position: '月支' },
1363
+ { branch: chart.day.branch, position: '日支' },
1364
+ { branch: chart.hour.branch, position: '時支' }
1365
+ ];
1366
+ branches.forEach(({ branch, position }) => {
1367
+ if (branch === tianXiBranch) {
1368
+ results.push({
1369
+ name: '天喜',
1370
+ type: '中性',
1371
+ position,
1372
+ description: '天喜星,主喜事臨門,添丁進財。有喜慶之事,人逢喜事精神爽。'
1373
+ });
1374
+ }
1375
+ });
1376
+ return results;
1377
+ }
1378
+ /**
1379
+ * Check for Xian Chi (咸池) - Salt Pool (Romance)
1380
+ */
1381
+ static checkXianChi(dayBranch, chart) {
1382
+ const results = [];
1383
+ // 咸池即桃花,但用於凶的情況
1384
+ const xianChiMap = {
1385
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 申: 酉
1386
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 子: 酉
1387
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辰: 酉
1388
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 寅: 卯
1389
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 午: 卯
1390
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 戌: 卯
1391
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 巳: 午
1392
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 酉: 午
1393
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丑: 午
1394
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 亥: 子
1395
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 卯: 子
1396
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0] // 未: 子
1397
+ };
1398
+ const xianChiBranch = xianChiMap[dayBranch];
1399
+ if (!xianChiBranch)
1400
+ return results;
1401
+ const branches = [
1402
+ { branch: chart.year.branch, position: '年支' },
1403
+ { branch: chart.month.branch, position: '月支' },
1404
+ { branch: chart.day.branch, position: '日支' },
1405
+ { branch: chart.hour.branch, position: '時支' }
1406
+ ];
1407
+ branches.forEach(({ branch, position }) => {
1408
+ if (branch === xianChiBranch) {
1409
+ results.push({
1410
+ name: '咸池',
1411
+ type: '凶星',
1412
+ position,
1413
+ description: '咸池星,主風流多情,異性緣重。感情豐富,但需注意節制。'
1414
+ });
1415
+ }
1416
+ });
1417
+ return results;
1418
+ }
1419
+ /**
1420
+ * Check for Yuan Chen (元辰) - Primary Inauspicious
1421
+ */
1422
+ static checkYuanChen(chart, gender) {
1423
+ const results = [];
1424
+ // 元辰查法:男女不同
1425
+ const maleYuanChenMap = {
1426
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 子: 未
1427
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 丑: 申
1428
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 寅: 酉
1429
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 卯: 戌
1430
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 辰: 亥
1431
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 巳: 子
1432
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 午: 丑
1433
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 未: 寅
1434
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 申: 卯
1435
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 酉: 辰
1436
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戌: 巳
1437
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6] // 亥: 午
1438
+ };
1439
+ const femaleYuanChenMap = {
1440
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 子: 巳
1441
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丑: 午
1442
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 寅: 未
1443
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 卯: 申
1444
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辰: 酉
1445
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 巳: 戌
1446
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 午: 亥
1447
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 未: 子
1448
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 申: 丑
1449
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 酉: 寅
1450
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 戌: 卯
1451
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4] // 亥: 辰
1452
+ };
1453
+ const yuanChenMap = gender === 'male' ? maleYuanChenMap : femaleYuanChenMap;
1454
+ const yuanChenBranch = yuanChenMap[chart.year.branch];
1455
+ if (!yuanChenBranch)
1456
+ return results;
1457
+ const branches = [
1458
+ { branch: chart.month.branch, position: '月支' },
1459
+ { branch: chart.day.branch, position: '日支' },
1460
+ { branch: chart.hour.branch, position: '時支' }
1461
+ ];
1462
+ branches.forEach(({ branch, position }) => {
1463
+ if (branch === yuanChenBranch) {
1464
+ results.push({
1465
+ name: '元辰',
1466
+ type: '凶星',
1467
+ position,
1468
+ description: '元辰星,主運勢反覆,起伏不定。需要更加努力,方能成功。'
1469
+ });
1470
+ }
1471
+ });
1472
+ return results;
1473
+ }
1474
+ /**
1475
+ * Check for Jin Shen (金神) - Gold God
1476
+ */
1477
+ static checkJinShen(dayMaster, chart) {
1478
+ const results = [];
1479
+ // 金神日:乙丑、己巳、癸酉
1480
+ const jinShenDays = [
1481
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[1], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[1] }, // 乙丑
1482
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[5], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[5] }, // 己巳
1483
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[9], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[9] } // 癸酉
1484
+ ];
1485
+ if (jinShenDays.some(combo => combo.stem === chart.day.stem && combo.branch === chart.day.branch)) {
1486
+ results.push({
1487
+ name: '金神',
1488
+ type: '中性',
1489
+ position: positions_1.POSITION_NAMES.day,
1490
+ description: '金神,主剛強果斷,殺伐決斷。性格強勢,適合軍警司法工作。'
1491
+ });
1492
+ }
1493
+ return results;
1494
+ }
1495
+ /**
1496
+ * Check for Tian Cai (天財) - Heavenly Wealth
1497
+ */
1498
+ static checkTianCai(dayMaster, chart) {
1499
+ const results = [];
1500
+ // 天財查法:以日干查
1501
+ const tianCaiMap = {
1502
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 甲: 丑
1503
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 乙: 辰
1504
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 丙: 未
1505
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 丁: 戌
1506
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 戊: 丑
1507
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 己: 辰
1508
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 庚: 未
1509
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 辛: 戌
1510
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 壬: 丑
1511
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4] // 癸: 辰
1512
+ };
1513
+ const tianCaiBranch = tianCaiMap[dayMaster];
1514
+ if (!tianCaiBranch)
1515
+ return results;
1516
+ const branches = [
1517
+ { branch: chart.year.branch, position: '年支' },
1518
+ { branch: chart.month.branch, position: '月支' },
1519
+ { branch: chart.day.branch, position: '日支' },
1520
+ { branch: chart.hour.branch, position: '時支' }
1521
+ ];
1522
+ branches.forEach(({ branch, position }) => {
1523
+ if (branch === tianCaiBranch) {
1524
+ results.push({
1525
+ name: '天財',
1526
+ type: '吉星',
1527
+ position,
1528
+ description: '天財星,主橫財運佳,意外之財。投資運好,但需謹慎理財。'
1529
+ });
1530
+ }
1531
+ });
1532
+ return results;
1533
+ }
1534
+ /**
1535
+ * Check for Ba Zhuan (八專) - Eight Specialists
1536
+ */
1537
+ static checkBaZhuan(chart) {
1538
+ const results = [];
1539
+ // 八專日:甲寅、乙卯、丁未、戊戌、己未、庚申、辛酉、癸丑
1540
+ const baZhuanDays = [
1541
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[2] }, // 甲寅
1542
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[1], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[3] }, // 乙卯
1543
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[3], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[7] }, // 丁未
1544
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[4], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[10] }, // 戊戌
1545
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[5], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[7] }, // 己未
1546
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[8] }, // 庚申
1547
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[7], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[9] }, // 辛酉
1548
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[9], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[1] } // 癸丑
1549
+ ];
1550
+ if (baZhuanDays.some(combo => combo.stem === chart.day.stem && combo.branch === chart.day.branch)) {
1551
+ results.push({
1552
+ name: '八專',
1553
+ type: '中性',
1554
+ position: positions_1.POSITION_NAMES.day,
1555
+ description: '八專,主專心致志,執著專注。做事認真,但較為固執。'
1556
+ });
1557
+ }
1558
+ return results;
1559
+ }
1560
+ /**
1561
+ * Check for Shi Gan (十乾祿) - Ten Stems Salary
1562
+ */
1563
+ static checkShiGan(dayMaster, chart) {
1564
+ // Already implemented as LuShen
1565
+ return [];
1566
+ }
1567
+ /**
1568
+ * Check for Jian Lu (建祿) - Establishing Salary
1569
+ */
1570
+ static checkJianLu(dayMaster, chart) {
1571
+ const results = [];
1572
+ // 建祿格:日干的祿神在月支
1573
+ const jianLuMap = {
1574
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 甲: 寅
1575
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 乙: 卯
1576
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 丙: 巳
1577
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丁: 午
1578
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戊: 巳
1579
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 己: 午
1580
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 庚: 申
1581
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辛: 酉
1582
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 壬: 亥
1583
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0] // 癸: 子
1584
+ };
1585
+ if (chart.month.branch === jianLuMap[dayMaster]) {
1586
+ results.push({
1587
+ name: '建祿',
1588
+ type: '吉星',
1589
+ position: '月支',
1590
+ description: '建祿,主自力更生,白手起家。憑自己努力獲得成就。'
1591
+ });
1592
+ }
1593
+ return results;
1594
+ }
1595
+ /**
1596
+ * Check for Fei Ren (飛刃) - Flying Blade
1597
+ */
1598
+ static checkFeiRen(dayMaster, chart) {
1599
+ const results = [];
1600
+ // 飛刃查法:羊刃的沖位
1601
+ const feiRenMap = {
1602
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 甲: 酉 (卯的沖)
1603
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 乙: 申 (寅的沖)
1604
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 丙: 子 (午的沖)
1605
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 丁: 亥 (巳的沖)
1606
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 戊: 子 (午的沖)
1607
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 己: 亥 (巳的沖)
1608
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 庚: 卯 (酉的沖)
1609
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 辛: 寅 (申的沖)
1610
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 壬: 午 (子的沖)
1611
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5] // 癸: 巳 (亥的沖)
1612
+ };
1613
+ const feiRenBranch = feiRenMap[dayMaster];
1614
+ if (!feiRenBranch)
1615
+ return results;
1616
+ const branches = [
1617
+ { branch: chart.year.branch, position: '年支' },
1618
+ { branch: chart.month.branch, position: '月支' },
1619
+ { branch: chart.day.branch, position: '日支' },
1620
+ { branch: chart.hour.branch, position: '時支' }
1621
+ ];
1622
+ branches.forEach(({ branch, position }) => {
1623
+ if (branch === feiRenBranch) {
1624
+ results.push({
1625
+ name: '飛刃',
1626
+ type: '凶星',
1627
+ position,
1628
+ description: '飛刃,主突發意外,飛來橫禍。外出需謹慎,注意交通安全。'
1629
+ });
1630
+ }
1631
+ });
1632
+ return results;
1633
+ }
1634
+ /**
1635
+ * Check for Jie Sha (劫煞) - Robbery Evil
1636
+ */
1637
+ static checkJieSha(chart) {
1638
+ const results = [];
1639
+ const jieMap = {
1640
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 申: 巳
1641
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 子: 巳
1642
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 辰: 巳
1643
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 寅: 亥
1644
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 午: 亥
1645
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 戌: 亥
1646
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 巳: 寅
1647
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 酉: 寅
1648
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 丑: 寅
1649
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 亥: 申
1650
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 卯: 申
1651
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8] // 未: 申
1652
+ };
1653
+ // 劫煞以年支查其他地支
1654
+ const jieBranch = jieMap[chart.year.branch];
1655
+ if (!jieBranch)
1656
+ return results;
1657
+ const branches = [
1658
+ { branch: chart.year.branch, position: '年支' },
1659
+ { branch: chart.month.branch, position: '月支' },
1660
+ { branch: chart.day.branch, position: '日支' },
1661
+ { branch: chart.hour.branch, position: '時支' }
1662
+ ];
1663
+ branches.forEach(({ branch, position }) => {
1664
+ if (branch === jieBranch) {
1665
+ results.push({
1666
+ name: '劫煞',
1667
+ type: '凶星',
1668
+ position,
1669
+ description: '劫煞,主破財損失,錢財被劫。理財需謹慎,防範小人。'
1670
+ });
1671
+ }
1672
+ });
1673
+ return results;
1674
+ }
1675
+ /**
1676
+ * Check for Zai Sha (災煞) - Disaster Evil
1677
+ */
1678
+ static checkZaiSha(chart) {
1679
+ const results = [];
1680
+ const zaiMap = {
1681
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 申: 午
1682
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 子: 午
1683
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 辰: 午
1684
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 寅: 子
1685
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 午: 子
1686
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 戌: 子
1687
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 巳: 卯
1688
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 酉: 卯
1689
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 丑: 卯
1690
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 亥: 酉
1691
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 卯: 酉
1692
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9] // 未: 酉
1693
+ };
1694
+ // 災煞以年支查其他地支
1695
+ const zaiBranch = zaiMap[chart.year.branch];
1696
+ if (!zaiBranch)
1697
+ return results;
1698
+ const branches = [
1699
+ { branch: chart.year.branch, position: '年支' },
1700
+ { branch: chart.month.branch, position: '月支' },
1701
+ { branch: chart.day.branch, position: '日支' },
1702
+ { branch: chart.hour.branch, position: '時支' }
1703
+ ];
1704
+ branches.forEach(({ branch, position }) => {
1705
+ if (branch === zaiBranch) {
1706
+ results.push({
1707
+ name: '災煞',
1708
+ type: '凶星',
1709
+ position,
1710
+ description: '災煞,主災禍橫生,意外頻發。需要多行善事,化解災厄。'
1711
+ });
1712
+ }
1713
+ });
1714
+ return results;
1715
+ }
1716
+ /**
1717
+ * Check for Wang Shen (亡神) - Death God
1718
+ */
1719
+ static checkWangShen(chart) {
1720
+ const results = [];
1721
+ // 亡神查法
1722
+ const wangShenMap = {
1723
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 申: 亥
1724
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 子: 亥
1725
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 辰: 亥
1726
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 寅: 巳
1727
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 午: 巳
1728
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 戌: 巳
1729
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 巳: 申
1730
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 酉: 申
1731
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 丑: 申
1732
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 亥: 寅
1733
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 卯: 寅
1734
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2] // 未: 寅
1735
+ };
1736
+ const wangShenBranch = wangShenMap[chart.day.branch];
1737
+ if (!wangShenBranch)
1738
+ return results;
1739
+ const branches = [
1740
+ { branch: chart.year.branch, position: '年支' },
1741
+ { branch: chart.month.branch, position: '月支' },
1742
+ { branch: chart.day.branch, position: '日支' },
1743
+ { branch: chart.hour.branch, position: '時支' }
1744
+ ];
1745
+ branches.forEach(({ branch, position }) => {
1746
+ if (branch === wangShenBranch) {
1747
+ results.push({
1748
+ name: '亡神',
1749
+ type: '凶星',
1750
+ position,
1751
+ description: '亡神,主精神恍惚,判斷失誤。做事需謹慎,避免重大決定。'
1752
+ });
1753
+ }
1754
+ });
1755
+ return results;
1756
+ }
1757
+ /**
1758
+ * Check for Liu E (六厄) - Six Adversities
1759
+ */
1760
+ static checkLiuE(chart) {
1761
+ const results = [];
1762
+ // 六厄查法
1763
+ const liuEMap = {
1764
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 子: 巳
1765
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 丑: 午
1766
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 寅: 未
1767
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[8], // 卯: 申
1768
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 辰: 酉
1769
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 巳: 戌
1770
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 午: 亥
1771
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 未: 子
1772
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 申: 丑
1773
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[2], // 酉: 寅
1774
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 戌: 卯
1775
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4] // 亥: 辰
1776
+ };
1777
+ const liuEBranch = liuEMap[chart.day.branch];
1778
+ if (!liuEBranch)
1779
+ return results;
1780
+ const branches = [
1781
+ { branch: chart.year.branch, position: '年支' },
1782
+ { branch: chart.month.branch, position: '月支' },
1783
+ { branch: chart.day.branch, position: '日支' },
1784
+ { branch: chart.hour.branch, position: '時支' }
1785
+ ];
1786
+ branches.forEach(({ branch, position }) => {
1787
+ if (branch === liuEBranch) {
1788
+ results.push({
1789
+ name: '六厄',
1790
+ type: '凶星',
1791
+ position,
1792
+ description: '六厄,主六親不睦,人際不順。需要改善人際關係。'
1793
+ });
1794
+ }
1795
+ });
1796
+ return results;
1797
+ }
1798
+ /**
1799
+ * Check for Bai Hu (白虎) - White Tiger
1800
+ */
1801
+ static checkBaiHu(chart) {
1802
+ const results = [];
1803
+ // 白虎查法
1804
+ const baiHuMap = {
1805
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 申: 戌
1806
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 子: 戌
1807
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 辰: 戌
1808
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 寅: 辰
1809
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 午: 辰
1810
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4], // 戌: 辰
1811
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 巳: 未
1812
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 酉: 未
1813
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 丑: 未
1814
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 亥: 丑
1815
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 卯: 丑
1816
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1] // 未: 丑
1817
+ };
1818
+ const baiHuBranch = baiHuMap[chart.day.branch];
1819
+ if (!baiHuBranch)
1820
+ return results;
1821
+ const branches = [
1822
+ { branch: chart.year.branch, position: '年支' },
1823
+ { branch: chart.month.branch, position: '月支' },
1824
+ { branch: chart.day.branch, position: '日支' },
1825
+ { branch: chart.hour.branch, position: '時支' }
1826
+ ];
1827
+ branches.forEach(({ branch, position }) => {
1828
+ if (branch === baiHuBranch) {
1829
+ results.push({
1830
+ name: '白虎',
1831
+ type: '凶星',
1832
+ position,
1833
+ description: '白虎煞,主凶險意外,血光之災。需要特別注意人身安全。'
1834
+ });
1835
+ }
1836
+ });
1837
+ return results;
1838
+ }
1839
+ /**
1840
+ * Check for Pi Ma (披麻) - Mourning Garment
1841
+ */
1842
+ static checkPiMa(chart) {
1843
+ const results = [];
1844
+ // 披麻查法:以年支查日時
1845
+ const piMaMap = {
1846
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 子: 酉
1847
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 丑: 酉
1848
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 寅: 子
1849
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 卯: 子
1850
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 辰: 子
1851
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 巳: 卯
1852
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 午: 卯
1853
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 未: 卯
1854
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 申: 午
1855
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 酉: 午
1856
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 戌: 午
1857
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9] // 亥: 酉
1858
+ };
1859
+ const piMaBranch = piMaMap[chart.year.branch];
1860
+ if (!piMaBranch)
1861
+ return results;
1862
+ const branches = [
1863
+ { branch: chart.day.branch, position: '日支' },
1864
+ { branch: chart.hour.branch, position: '時支' }
1865
+ ];
1866
+ branches.forEach(({ branch, position }) => {
1867
+ if (branch === piMaBranch) {
1868
+ results.push({
1869
+ name: '披麻',
1870
+ type: '凶星',
1871
+ position,
1872
+ description: '披麻煞,主孝服重重,親人離世。宜多關心家人健康。'
1873
+ });
1874
+ }
1875
+ });
1876
+ return results;
1877
+ }
1878
+ /**
1879
+ * Check for Diao Ke (吊客) - Mourning Guest
1880
+ */
1881
+ static checkDiaoKe(chart) {
1882
+ const results = [];
1883
+ // 吊客查法:以年支查日時
1884
+ const diaoKeMap = {
1885
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 子: 卯
1886
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3], // 丑: 卯
1887
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 寅: 午
1888
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 卯: 午
1889
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 辰: 午
1890
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 巳: 酉
1891
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 午: 酉
1892
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[9], // 未: 酉
1893
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 申: 子
1894
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 酉: 子
1895
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[10]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 戌: 子
1896
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[11]]: bazi_1.EARTHLY_BRANCHES_ARRAY[3] // 亥: 卯
1897
+ };
1898
+ const diaoKeBranch = diaoKeMap[chart.year.branch];
1899
+ if (!diaoKeBranch)
1900
+ return results;
1901
+ const branches = [
1902
+ { branch: chart.day.branch, position: '日支' },
1903
+ { branch: chart.hour.branch, position: '時支' }
1904
+ ];
1905
+ branches.forEach(({ branch, position }) => {
1906
+ if (branch === diaoKeBranch) {
1907
+ results.push({
1908
+ name: '吊客',
1909
+ type: '凶星',
1910
+ position,
1911
+ description: '吊客煞,主奔喪弔唁,白事纏身。注意家人健康,多行善事。'
1912
+ });
1913
+ }
1914
+ });
1915
+ return results;
1916
+ }
1917
+ /**
1918
+ * Check for Jin Shen Ge (金神格) - Gold God Formation
1919
+ */
1920
+ static checkJinShenGe(chart) {
1921
+ const results = [];
1922
+ // 金神格:時支見巳酉丑,且日干為庚辛
1923
+ if ([bazi_1.HEAVENLY_STEMS_ARRAY[6], bazi_1.HEAVENLY_STEMS_ARRAY[7]].includes(chart.day.stem) &&
1924
+ [bazi_1.EARTHLY_BRANCHES_ARRAY[5], bazi_1.EARTHLY_BRANCHES_ARRAY[9], bazi_1.EARTHLY_BRANCHES_ARRAY[1]].includes(chart.hour.branch)) {
1925
+ results.push({
1926
+ name: '金神格',
1927
+ type: '中性',
1928
+ position: '命盤',
1929
+ description: '金神格,主威權顯赫,富貴雙全。但需修身養性,避免剛愎。'
1930
+ });
1931
+ }
1932
+ return results;
1933
+ }
1934
+ /**
1935
+ * Check for Ri De Ge (日德格) - Daily Virtue Formation
1936
+ */
1937
+ static checkRiDeGe(chart) {
1938
+ const results = [];
1939
+ // 日德格:甲寅、丙辰、戊辰、庚辰、壬戌日
1940
+ const riDeGeDays = [
1941
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[2] }, // 甲寅
1942
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[2], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 丙辰
1943
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[4], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 戊辰
1944
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 庚辰
1945
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[8], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[10] } // 壬戌
1946
+ ];
1947
+ if (riDeGeDays.some(combo => combo.stem === chart.day.stem && combo.branch === chart.day.branch)) {
1948
+ results.push({
1949
+ name: '日德格',
1950
+ type: '吉星',
1951
+ position: positions_1.POSITION_NAMES.day,
1952
+ description: '日德格,主品德高尚,福澤深厚。一生平順,貴人多助。'
1953
+ });
1954
+ }
1955
+ return results;
1956
+ }
1957
+ /**
1958
+ * Check for Kong Wang (空亡) - Empty Death
1959
+ */
1960
+ static checkKongWang(chart) {
1961
+ const results = [];
1962
+ // 空亡查法:根據日柱查
1963
+ const ganIndex = bazi_1.HEAVENLY_STEMS_ARRAY.indexOf(chart.day.stem);
1964
+ const zhiIndex = bazi_1.EARTHLY_BRANCHES_ARRAY.indexOf(chart.day.branch);
1965
+ // 計算旬首
1966
+ const xunShou = (zhiIndex - ganIndex + 12) % 12;
1967
+ // 計算空亡的兩個地支
1968
+ const kongWang1 = bazi_1.EARTHLY_BRANCHES_ARRAY[(xunShou + 10) % 12];
1969
+ const kongWang2 = bazi_1.EARTHLY_BRANCHES_ARRAY[(xunShou + 11) % 12];
1970
+ const branches = [
1971
+ { branch: chart.year.branch, position: '年支' },
1972
+ { branch: chart.month.branch, position: '月支' },
1973
+ { branch: chart.day.branch, position: '日支' },
1974
+ { branch: chart.hour.branch, position: '時支' }
1975
+ ];
1976
+ branches.forEach(({ branch, position }) => {
1977
+ if (branch === kongWang1 || branch === kongWang2) {
1978
+ results.push({
1979
+ name: '空亡',
1980
+ type: '凶星',
1981
+ position,
1982
+ description: '空亡,主虛無飄渺,成敗皆空。需要腳踏實地,避免好高騖遠。'
1983
+ });
1984
+ }
1985
+ });
1986
+ return results;
1987
+ }
1988
+ /**
1989
+ * Check for Si Da Kong Wang (四大空亡) - Four Great Empty Deaths
1990
+ */
1991
+ static checkSiDaKongWang(chart) {
1992
+ const results = [];
1993
+ // 四大空亡:甲子、甲午、甲申、甲寅日
1994
+ const siDaKongWangDays = [
1995
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[0] }, // 甲子
1996
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[6] }, // 甲午
1997
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[8] }, // 甲申
1998
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[2] } // 甲寅
1999
+ ];
2000
+ if (siDaKongWangDays.some(combo => combo.stem === chart.day.stem && combo.branch === chart.day.branch)) {
2001
+ results.push({
2002
+ name: '四大空亡',
2003
+ type: '凶星',
2004
+ position: positions_1.POSITION_NAMES.day,
2005
+ description: '四大空亡,主大起大落,成敗無常。人生波折較多,需要堅持。'
2006
+ });
2007
+ }
2008
+ return results;
2009
+ }
2010
+ /**
2011
+ * Check for Shi E Yun Dao (十惡運倒) - Ten Evil Great Defeat
2012
+ */
2013
+ static checkShiEYunDao(chart) {
2014
+ const results = [];
2015
+ // 十惡大敗日:甲辰、乙巳、丙申、丁亥、戊戌、己丑、庚辰、辛巳、壬申、癸亥
2016
+ const shiEYunDaoDays = [
2017
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[0], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 甲辰
2018
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[1], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[5] }, // 乙巳
2019
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[2], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[8] }, // 丙申
2020
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[3], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[11] }, // 丁亥
2021
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[4], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[10] }, // 戊戌
2022
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[5], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[1] }, // 己丑
2023
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[6], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[4] }, // 庚辰
2024
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[7], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[5] }, // 辛巳
2025
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[8], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[8] }, // 壬申
2026
+ { stem: bazi_1.HEAVENLY_STEMS_ARRAY[9], branch: bazi_1.EARTHLY_BRANCHES_ARRAY[11] } // 癸亥
2027
+ ];
2028
+ if (shiEYunDaoDays.some(combo => combo.stem === chart.day.stem && combo.branch === chart.day.branch)) {
2029
+ results.push({
2030
+ name: '十惡大敗',
2031
+ type: '凶星',
2032
+ position: positions_1.POSITION_NAMES.day,
2033
+ description: '十惡大敗,主敗家破財,諸事不順。需要謹慎行事,多積德行善。'
2034
+ });
2035
+ }
2036
+ return results;
2037
+ }
2038
+ /**
2039
+ * Check for Tian Yi (天醫) - Heavenly Doctor
2040
+ */
2041
+ static checkTianYiDoctor(dayMaster, chart) {
2042
+ const results = [];
2043
+ // 天醫查法
2044
+ const tianYiMap = {
2045
+ [bazi_1.HEAVENLY_STEMS_ARRAY[0]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 甲: 丑
2046
+ [bazi_1.HEAVENLY_STEMS_ARRAY[1]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 乙: 子
2047
+ [bazi_1.HEAVENLY_STEMS_ARRAY[2]]: bazi_1.EARTHLY_BRANCHES_ARRAY[11], // 丙: 亥
2048
+ [bazi_1.HEAVENLY_STEMS_ARRAY[3]]: bazi_1.EARTHLY_BRANCHES_ARRAY[10], // 丁: 戌
2049
+ [bazi_1.HEAVENLY_STEMS_ARRAY[4]]: bazi_1.EARTHLY_BRANCHES_ARRAY[1], // 戊: 丑
2050
+ [bazi_1.HEAVENLY_STEMS_ARRAY[5]]: bazi_1.EARTHLY_BRANCHES_ARRAY[0], // 己: 子
2051
+ [bazi_1.HEAVENLY_STEMS_ARRAY[6]]: bazi_1.EARTHLY_BRANCHES_ARRAY[7], // 庚: 未
2052
+ [bazi_1.HEAVENLY_STEMS_ARRAY[7]]: bazi_1.EARTHLY_BRANCHES_ARRAY[6], // 辛: 午
2053
+ [bazi_1.HEAVENLY_STEMS_ARRAY[8]]: bazi_1.EARTHLY_BRANCHES_ARRAY[5], // 壬: 巳
2054
+ [bazi_1.HEAVENLY_STEMS_ARRAY[9]]: bazi_1.EARTHLY_BRANCHES_ARRAY[4] // 癸: 辰
2055
+ };
2056
+ const tianYiBranch = tianYiMap[dayMaster];
2057
+ if (!tianYiBranch)
2058
+ return results;
2059
+ const branches = [
2060
+ { branch: chart.year.branch, position: '年支' },
2061
+ { branch: chart.month.branch, position: '月支' },
2062
+ { branch: chart.day.branch, position: '日支' },
2063
+ { branch: chart.hour.branch, position: '時支' }
2064
+ ];
2065
+ branches.forEach(({ branch, position }) => {
2066
+ if (branch === tianYiBranch) {
2067
+ results.push({
2068
+ name: '天醫',
2069
+ type: '吉星',
2070
+ position,
2071
+ description: '天醫星,主健康長壽,少病少災。有醫療天分,適合從事醫護工作。'
2072
+ });
2073
+ }
2074
+ });
2075
+ return results;
2076
+ }
2077
+ }
2078
+ exports.ShenShaAnalyzer = ShenShaAnalyzer;
2079
+ //# sourceMappingURL=ShenShaAnalyzer.js.map