mingpan 0.1.3 → 0.1.5

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 (199) hide show
  1. package/README.en.md +64 -0
  2. package/README.ja.md +64 -0
  3. package/README.md +80 -11
  4. package/dist/core/bazi/BaziCore.d.ts +7 -1
  5. package/dist/core/bazi/BaziCore.d.ts.map +1 -1
  6. package/dist/core/bazi/BaziCore.js +41 -15
  7. package/dist/core/bazi/BaziCore.js.map +1 -1
  8. package/dist/core/bazi/TrueSolarTime.js +8 -8
  9. package/dist/core/bazi/TrueSolarTime.js.map +1 -1
  10. package/dist/core/bazi/types.d.ts +4 -0
  11. package/dist/core/bazi/types.d.ts.map +1 -1
  12. package/dist/core/calendar/SolarTermsCalculator.js +2 -2
  13. package/dist/core/calendar/SolarTermsCalculator.js.map +1 -1
  14. package/dist/core/calendar/astronomicalCalendar.d.ts +0 -13
  15. package/dist/core/calendar/astronomicalCalendar.d.ts.map +1 -1
  16. package/dist/core/calendar/astronomicalCalendar.js +0 -56
  17. package/dist/core/calendar/astronomicalCalendar.js.map +1 -1
  18. package/dist/core/calendar/calendar.d.ts.map +1 -1
  19. package/dist/core/calendar/calendar.js +11 -11
  20. package/dist/core/calendar/calendar.js.map +1 -1
  21. package/dist/core/calendar/lunarCalendar.js +1 -1
  22. package/dist/core/calendar/lunarCalendar.js.map +1 -1
  23. package/dist/core/calendar/solarTerms.js +10 -10
  24. package/dist/core/calendar/solarTerms.js.map +1 -1
  25. package/dist/core/ziwei/IztroAdapter.d.ts.map +1 -1
  26. package/dist/core/ziwei/IztroAdapter.js +11 -4
  27. package/dist/core/ziwei/IztroAdapter.js.map +1 -1
  28. package/dist/index.d.ts +10 -5
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +13 -1582
  31. package/dist/index.js.map +1 -1
  32. package/dist/output/fortuneTextRenderer.d.ts +8 -7
  33. package/dist/output/fortuneTextRenderer.d.ts.map +1 -1
  34. package/dist/output/fortuneTextRenderer.js +89 -25
  35. package/dist/output/fortuneTextRenderer.js.map +1 -1
  36. package/dist/output/listTextRenderer.js +7 -7
  37. package/dist/output/listTextRenderer.js.map +1 -1
  38. package/dist/output/qimenTextRenderer.d.ts +2 -6
  39. package/dist/output/qimenTextRenderer.d.ts.map +1 -1
  40. package/dist/output/qimenTextRenderer.js +12 -145
  41. package/dist/output/qimenTextRenderer.js.map +1 -1
  42. package/dist/server.d.ts +11 -0
  43. package/dist/server.d.ts.map +1 -0
  44. package/dist/server.js +35 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/services/bazi/BaziService.d.ts +1 -17
  47. package/dist/services/bazi/BaziService.d.ts.map +1 -1
  48. package/dist/services/bazi/BaziService.js +11 -195
  49. package/dist/services/bazi/BaziService.js.map +1 -1
  50. package/dist/services/bazi/analyzers/StrengthAnalyzer.js +1 -1
  51. package/dist/services/bazi/analyzers/StrengthAnalyzer.js.map +1 -1
  52. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +12 -12
  53. package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -1
  54. package/dist/services/bazi/calculators/DaYunCalculator.js +1 -1
  55. package/dist/services/bazi/calculators/DaYunCalculator.js.map +1 -1
  56. package/dist/services/bazi/calculators/LiuRiCalculator.js +2 -2
  57. package/dist/services/bazi/calculators/LiuRiCalculator.js.map +1 -1
  58. package/dist/services/bazi/calculators/LiuYueCalculator.js +2 -2
  59. package/dist/services/bazi/calculators/LiuYueCalculator.js.map +1 -1
  60. package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts.map +1 -1
  61. package/dist/services/bazi/calculators/LuckCycleCalculator.js +55 -43
  62. package/dist/services/bazi/calculators/LuckCycleCalculator.js.map +1 -1
  63. package/dist/services/bazi/index.d.ts +0 -2
  64. package/dist/services/bazi/index.d.ts.map +1 -1
  65. package/dist/services/bazi/index.js +1 -5
  66. package/dist/services/bazi/index.js.map +1 -1
  67. package/dist/services/bazi/types.d.ts +4 -112
  68. package/dist/services/bazi/types.d.ts.map +1 -1
  69. package/dist/services/bazi/types.js +3 -102
  70. package/dist/services/bazi/types.js.map +1 -1
  71. package/dist/services/daliuren/DaliurenService.d.ts +11 -1
  72. package/dist/services/daliuren/DaliurenService.d.ts.map +1 -1
  73. package/dist/services/daliuren/DaliurenService.js +30 -0
  74. package/dist/services/daliuren/DaliurenService.js.map +1 -1
  75. package/dist/services/daliuren/calculators/TianDiPanCalculator.d.ts.map +1 -1
  76. package/dist/services/daliuren/calculators/TianDiPanCalculator.js +3 -4
  77. package/dist/services/daliuren/calculators/TianDiPanCalculator.js.map +1 -1
  78. package/dist/services/daliuren/data/constants.d.ts +7 -0
  79. package/dist/services/daliuren/data/constants.d.ts.map +1 -1
  80. package/dist/services/daliuren/data/constants.js +17 -1
  81. package/dist/services/daliuren/data/constants.js.map +1 -1
  82. package/dist/services/daliuren/types.d.ts +11 -2
  83. package/dist/services/daliuren/types.d.ts.map +1 -1
  84. package/dist/services/liuyao/LiuyaoService.d.ts.map +1 -1
  85. package/dist/services/liuyao/LiuyaoService.js +1 -0
  86. package/dist/services/liuyao/LiuyaoService.js.map +1 -1
  87. package/dist/services/meihua/MeihuaService.d.ts.map +1 -1
  88. package/dist/services/meihua/MeihuaService.js +4 -3
  89. package/dist/services/meihua/MeihuaService.js.map +1 -1
  90. package/dist/services/meihua/calculators/TiyongCalculator.d.ts.map +1 -1
  91. package/dist/services/meihua/calculators/TiyongCalculator.js +6 -5
  92. package/dist/services/meihua/calculators/TiyongCalculator.js.map +1 -1
  93. package/dist/services/qimen/QimenService.d.ts +1 -18
  94. package/dist/services/qimen/QimenService.d.ts.map +1 -1
  95. package/dist/services/qimen/QimenService.js +13 -45
  96. package/dist/services/qimen/QimenService.js.map +1 -1
  97. package/dist/services/qimen/calculators/BaMenCalculator.d.ts +14 -22
  98. package/dist/services/qimen/calculators/BaMenCalculator.d.ts.map +1 -1
  99. package/dist/services/qimen/calculators/BaMenCalculator.js +41 -59
  100. package/dist/services/qimen/calculators/BaMenCalculator.js.map +1 -1
  101. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts +6 -13
  102. package/dist/services/qimen/calculators/JiuGongCalculator.d.ts.map +1 -1
  103. package/dist/services/qimen/calculators/JiuGongCalculator.js +11 -41
  104. package/dist/services/qimen/calculators/JiuGongCalculator.js.map +1 -1
  105. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts +13 -23
  106. package/dist/services/qimen/calculators/JiuXingCalculator.d.ts.map +1 -1
  107. package/dist/services/qimen/calculators/JiuXingCalculator.js +23 -68
  108. package/dist/services/qimen/calculators/JiuXingCalculator.js.map +1 -1
  109. package/dist/services/qimen/calculators/JuShuCalculator.d.ts +8 -5
  110. package/dist/services/qimen/calculators/JuShuCalculator.d.ts.map +1 -1
  111. package/dist/services/qimen/calculators/JuShuCalculator.js +16 -21
  112. package/dist/services/qimen/calculators/JuShuCalculator.js.map +1 -1
  113. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts +19 -14
  114. package/dist/services/qimen/calculators/PanTypeCalculator.d.ts.map +1 -1
  115. package/dist/services/qimen/calculators/PanTypeCalculator.js +34 -36
  116. package/dist/services/qimen/calculators/PanTypeCalculator.js.map +1 -1
  117. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts +11 -20
  118. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.d.ts.map +1 -1
  119. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js +29 -42
  120. package/dist/services/qimen/calculators/SanQiLiuYiCalculator.js.map +1 -1
  121. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts +34 -41
  122. package/dist/services/qimen/calculators/ZhuanPanCalculator.d.ts.map +1 -1
  123. package/dist/services/qimen/calculators/ZhuanPanCalculator.js +102 -130
  124. package/dist/services/qimen/calculators/ZhuanPanCalculator.js.map +1 -1
  125. package/dist/services/qimen/types.d.ts +3 -77
  126. package/dist/services/qimen/types.d.ts.map +1 -1
  127. package/dist/services/qimen/types.js +3 -2
  128. package/dist/services/qimen/types.js.map +1 -1
  129. package/dist/services/ziwei/ZiweiService.d.ts.map +1 -1
  130. package/dist/services/ziwei/ZiweiService.js +4 -3
  131. package/dist/services/ziwei/ZiweiService.js.map +1 -1
  132. package/dist/services/ziwei/calculators/DecadeCalculator.d.ts.map +1 -1
  133. package/dist/services/ziwei/calculators/DecadeCalculator.js +2 -1
  134. package/dist/services/ziwei/calculators/DecadeCalculator.js.map +1 -1
  135. package/dist/shared/logger.d.ts +5 -0
  136. package/dist/shared/logger.d.ts.map +1 -1
  137. package/dist/shared/logger.js +16 -4
  138. package/dist/shared/logger.js.map +1 -1
  139. package/dist/tools/baziTools.d.ts +13 -0
  140. package/dist/tools/baziTools.d.ts.map +1 -0
  141. package/dist/tools/baziTools.js +331 -0
  142. package/dist/tools/baziTools.js.map +1 -0
  143. package/dist/tools/calendarTools.d.ts +12 -0
  144. package/dist/tools/calendarTools.d.ts.map +1 -0
  145. package/dist/tools/calendarTools.js +121 -0
  146. package/dist/tools/calendarTools.js.map +1 -0
  147. package/dist/tools/divinationTools.d.ts +9 -0
  148. package/dist/tools/divinationTools.d.ts.map +1 -0
  149. package/dist/tools/divinationTools.js +205 -0
  150. package/dist/tools/divinationTools.js.map +1 -0
  151. package/dist/tools/qimenTools.d.ts +10 -0
  152. package/dist/tools/qimenTools.d.ts.map +1 -0
  153. package/dist/tools/qimenTools.js +132 -0
  154. package/dist/tools/qimenTools.js.map +1 -0
  155. package/dist/tools/schemas.d.ts +99 -0
  156. package/dist/tools/schemas.d.ts.map +1 -0
  157. package/dist/tools/schemas.js +163 -0
  158. package/dist/tools/schemas.js.map +1 -0
  159. package/dist/tools/ziweiTools.d.ts +14 -0
  160. package/dist/tools/ziweiTools.d.ts.map +1 -0
  161. package/dist/tools/ziweiTools.js +484 -0
  162. package/dist/tools/ziweiTools.js.map +1 -0
  163. package/dist/utils/ageCalculator.d.ts +1 -1
  164. package/dist/utils/ageCalculator.d.ts.map +1 -1
  165. package/dist/utils/ageCalculator.js +10 -6
  166. package/dist/utils/ageCalculator.js.map +1 -1
  167. package/dist/utils/timeNormalization.d.ts +42 -17
  168. package/dist/utils/timeNormalization.d.ts.map +1 -1
  169. package/dist/utils/timeNormalization.js +99 -41
  170. package/dist/utils/timeNormalization.js.map +1 -1
  171. package/dist/utils/wallTime.d.ts +25 -0
  172. package/dist/utils/wallTime.d.ts.map +1 -0
  173. package/dist/utils/wallTime.js +33 -0
  174. package/dist/utils/wallTime.js.map +1 -0
  175. package/dist/worker.d.ts +23 -0
  176. package/dist/worker.d.ts.map +1 -0
  177. package/dist/worker.js +47 -0
  178. package/dist/worker.js.map +1 -0
  179. package/package.json +21 -11
  180. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +0 -16
  181. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +0 -1
  182. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +0 -60
  183. package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +0 -1
  184. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +0 -33
  185. package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +0 -1
  186. package/dist/services/bazi/analyzers/NaYinAnalyzer.js +0 -209
  187. package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +0 -1
  188. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +0 -236
  189. package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +0 -1
  190. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +0 -2079
  191. package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +0 -1
  192. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +0 -46
  193. package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +0 -1
  194. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +0 -260
  195. package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +0 -1
  196. package/dist/services/qimen/calculators/ZeRiCalculator.d.ts +0 -78
  197. package/dist/services/qimen/calculators/ZeRiCalculator.d.ts.map +0 -1
  198. package/dist/services/qimen/calculators/ZeRiCalculator.js +0 -431
  199. package/dist/services/qimen/calculators/ZeRiCalculator.js.map +0 -1
@@ -18,14 +18,14 @@ class JiuGongCalculator {
18
18
  * @returns 地盘各宫的干
19
19
  *
20
20
  * 原理:
21
- * - 阳遁:从局数对应的宫位开始,按洛书顺序顺布戊己庚辛壬癸丁丙乙
22
- * - 阴遁:从局数对应的宫位开始,按洛书逆序顺布戊己庚辛壬癸丁丙乙
21
+ * - 阳遁:从局数对应的宫位开始,按宫位数字顺序(1→2→…→9→1)顺布戊己庚辛壬癸丁丙乙
22
+ * - 阴遁:从局数对应的宫位开始,按宫位数字逆序(1→9→…→2→1)顺布戊己庚辛壬癸丁丙乙
23
+ * - 落入中五宫的干寄坤二宫(查询时换算,显示时仍在中宫)
23
24
  *
24
- * 例如阳遁一局:
25
- * - 从坎一宫开始,顺时针布:戊-坎1, 己-艮8, 庚-震3, 辛-巽4, 壬-离9, 癸-坤2, 丁-兑7, 丙-乾6, 乙-中5(寄坤2)
25
+ * 例如阳遁一局:戊-坎1, 己-坤2, 庚-震3, 辛-巽4, 壬-中5(寄坤2), 癸-乾6, 丁-兑7, 丙-艮8, 乙-离9
26
+ * 例如阴遁九局:戊-离9, 己-艮8, 庚-兑7, 辛-乾6, 壬-中5(寄坤2), 癸-巽4, 丁-震3, 丙-坤2, 乙-坎1
26
27
  *
27
- * 例如阴遁九局:
28
- * - 从离九宫开始,逆时针布:戊-离9, 己-巽4, 庚-震3, 辛-艮8, 壬-坎1, 癸-乾6, 丁-兑7, 丙-坤2, 乙-中5(寄坤2)
28
+ * 参照:《神奇之门》、kentang2017/kinqimen pan_earth(MIT)
29
29
  */
30
30
  static calculate(juShu, yinYangDun) {
31
31
  const isYang = yinYangDun === '阳遁';
@@ -33,46 +33,16 @@ class JiuGongCalculator {
33
33
  const ganGong = {};
34
34
  // 起始宫位就是局数
35
35
  const startGong = juShu;
36
- // 遍历九个干(三奇六仪),依次布入九宫
36
+ // 遍历九个干(三奇六仪),按宫位数字飞布
37
37
  for (let i = 0; i < 9; i++) {
38
38
  const gan = constants_1.SAN_QI_LIU_YI[i];
39
- let gong;
40
- if (i === 8) {
41
- // 第9个干(乙)布入中宫,但中宫寄坤二
42
- // 注意:实际上乙是布入"中五宫"的位置
43
- gong = 5;
44
- // 记录乙在中宫
45
- gongGan[5] = gan;
46
- ganGong[gan] = 5;
47
- }
48
- else {
49
- // 计算当前干应该布入的宫位
50
- gong = this.getGongByStep(startGong, i, isYang);
51
- gongGan[gong] = gan;
52
- ganGong[gan] = gong;
53
- }
39
+ const offset = isYang ? i : -i;
40
+ const gong = (((startGong - 1 + offset) % 9) + 9) % 9 + 1;
41
+ gongGan[gong] = gan;
42
+ ganGong[gan] = gong;
54
43
  }
55
44
  return { gongGan, ganGong };
56
45
  }
57
- /**
58
- * 根据起始宫位和步数计算目标宫位
59
- * @param startGong 起始宫位
60
- * @param steps 步数 (0-7)
61
- * @param isYang 是否阳遁(顺飞)
62
- */
63
- static getGongByStep(startGong, steps, isYang) {
64
- // 如果起始宫位是中宫,需要特殊处理
65
- let actualStart = startGong;
66
- if (actualStart === 5) {
67
- actualStart = constants_1.ZHONG_GONG_JI; // 中宫寄坤二
68
- }
69
- const startIdx = (0, constants_1.getLuoShuIndex)(actualStart);
70
- // 阳遁顺飞,阴遁逆飞
71
- const targetIdx = isYang
72
- ? (startIdx + steps) % 8
73
- : ((startIdx - steps) % 8 + 8) % 8;
74
- return (0, constants_1.getLuoShuGong)(targetIdx);
75
- }
76
46
  /**
77
47
  * 根据天干找落宫
78
48
  * @param diPan 地盘信息
@@ -1 +1 @@
1
- {"version":3,"file":"JiuGongCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JiuGongCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAM2B;AAS3B;;;GAGG;AACH,MAAa,iBAAiB;IAC5B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,SAAS,CAAC,KAAY,EAAE,UAAsB;QACnD,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;QACnC,MAAM,OAAO,GAA6B,EAA8B,CAAC;QACzE,MAAM,OAAO,GAA6B,EAA8B,CAAC;QAEzE,WAAW;QACX,MAAM,SAAS,GAAY,KAAgB,CAAC;QAE5C,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,yBAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,IAAa,CAAC;YAElB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,qBAAqB;gBACrB,qBAAqB;gBACrB,IAAI,GAAG,CAAC,CAAC;gBACT,SAAS;gBACT,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,eAAe;gBACf,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,aAAa,CAAC,SAAkB,EAAE,KAAa,EAAE,MAAe;QAC7E,mBAAmB;QACnB,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,WAAW,GAAG,yBAAa,CAAC,CAAC,QAAQ;QACvC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,0BAAc,EAAC,WAAW,CAAC,CAAC;QAE7C,YAAY;QACZ,MAAM,SAAS,GAAG,MAAM;YACtB,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;YACxB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,IAAA,yBAAa,EAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,OAAiC,EAAE,GAAY;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,aAAa;QACb,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,OAAiC,EAAE,IAAa;QACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AA5FD,8CA4FC"}
1
+ {"version":3,"file":"JiuGongCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JiuGongCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAG2B;AAS3B;;;GAGG;AACH,MAAa,iBAAiB;IAC5B;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,SAAS,CAAC,KAAY,EAAE,UAAsB;QACnD,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;QACnC,MAAM,OAAO,GAA6B,EAA8B,CAAC;QACzE,MAAM,OAAO,GAA6B,EAA8B,CAAC;QAEzE,WAAW;QACX,MAAM,SAAS,GAAW,KAAK,CAAC;QAEhC,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,yBAAa,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAe,CAAC,GAAG,GAAG,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAe,CAAC;QACjC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,OAAiC,EAAE,GAAY;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,aAAa;QACb,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,OAAiC,EAAE,IAAa;QACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AA1DD,8CA0DC"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * 九星计算器
3
- * 计算九星在九宫中的分布
2
+ * 九星计算器(飞盘式)
3
+ * 计算九星在九宫中的飞布
4
4
  */
5
- import type { DiZhi, GongWei, JiuXing, YinYangDun } from '../types';
5
+ import type { GongWei, JiuXing, YinYangDun } from '../types';
6
6
  export interface JiuXingResult {
7
7
  /** 各宫九星 (宫位 -> 星) */
8
8
  gongXing: Record<GongWei, JiuXing>;
@@ -14,38 +14,28 @@ export interface JiuXingResult {
14
14
  zhiFuLuoGong: GongWei;
15
15
  }
16
16
  /**
17
- * 九星计算器
17
+ * 九星计算器(飞盘式)
18
18
  * 负责计算九星的飞布
19
19
  */
20
20
  export declare class JiuXingCalculator {
21
21
  /**
22
- * 计算九星布局
23
- * @param xunShouGong 旬首遁干在地盘的宫位
24
- * @param hourZhi 时支
22
+ * 计算飞盘式九星布局
23
+ * @param xunShouGong 旬首遁干在地盘的宫位(值符星原始宫)
24
+ * @param shiGanLuoGong 参考干(时干等,甲用旬首仪)的地盘落宫
25
25
  * @param yinYangDun 阴阳遁
26
26
  * @returns 九星布局
27
27
  *
28
- * 原理:
29
- * 1. 确定值符星:旬首遁干落宫对应的星就是值符星
30
- * 2. 值符星随时干飞布,从地盘旬首落宫起,按时辰数飞布
31
- * 3. 阳遁顺飞,阴遁逆飞
32
- * 4. 天禽星(中五宫)随天芮星,或寄坤二
28
+ * 原理(飞盘式):
29
+ * 1. 值符星 = 旬首遁干原始宫对应的星(中五宫为天禽)
30
+ * 2. 值符星随时干:飞到参考干落宫
31
+ * 3. 其余诸星按九星原始序(蓬芮冲辅禽心柱任英,即原始宫数字序)
32
+ * 自值符星起,按宫位数字顺序飞布,阳遁顺飞、阴遁逆飞
33
33
  */
34
- static calculate(xunShouGong: GongWei, hourZhi: DiZhi, yinYangDun: YinYangDun): JiuXingResult;
34
+ static calculate(xunShouGong: GongWei, shiGanLuoGong: GongWei, yinYangDun: YinYangDun): JiuXingResult;
35
35
  /**
36
36
  * 根据宫位获取原始星
37
37
  */
38
38
  private static getXingByGong;
39
- /**
40
- * 飞星:从某宫开始飞布指定步数
41
- */
42
- private static flyXing;
43
- /**
44
- * 计算所有九星的落宫
45
- * 从值符星落宫开始,按洛书顺序排列其他八星
46
- * 天禽星随天芮星
47
- */
48
- private static calculateAllXing;
49
39
  /**
50
40
  * 根据宫位找星
51
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"JiuXingCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JiuXingCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAW,UAAU,EAAE,MAAM,UAAU,CAAC;AAW7E,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY;IACZ,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,WAAW,EAAE,OAAO,EACpB,OAAO,EAAE,KAAK,EACd,UAAU,EAAE,UAAU,GACrB,aAAa;IAyBhB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAe5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAetB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAuC/B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO;CAMlF"}
1
+ {"version":3,"file":"JiuXingCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JiuXingCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAM7D,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY;IACZ,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,WAAW,EAAE,OAAO,EACpB,aAAa,EAAE,OAAO,EACtB,UAAU,EAAE,UAAU,GACrB,aAAa;IA2BhB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAe5B;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO;CAGlF"}
@@ -1,46 +1,49 @@
1
1
  "use strict";
2
2
  /**
3
- * 九星计算器
4
- * 计算九星在九宫中的分布
3
+ * 九星计算器(飞盘式)
4
+ * 计算九星在九宫中的飞布
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.JiuXingCalculator = void 0;
8
8
  const constants_1 = require("../data/constants");
9
9
  /**
10
- * 九星计算器
10
+ * 九星计算器(飞盘式)
11
11
  * 负责计算九星的飞布
12
12
  */
13
13
  class JiuXingCalculator {
14
14
  /**
15
- * 计算九星布局
16
- * @param xunShouGong 旬首遁干在地盘的宫位
17
- * @param hourZhi 时支
15
+ * 计算飞盘式九星布局
16
+ * @param xunShouGong 旬首遁干在地盘的宫位(值符星原始宫)
17
+ * @param shiGanLuoGong 参考干(时干等,甲用旬首仪)的地盘落宫
18
18
  * @param yinYangDun 阴阳遁
19
19
  * @returns 九星布局
20
20
  *
21
- * 原理:
22
- * 1. 确定值符星:旬首遁干落宫对应的星就是值符星
23
- * 2. 值符星随时干飞布,从地盘旬首落宫起,按时辰数飞布
24
- * 3. 阳遁顺飞,阴遁逆飞
25
- * 4. 天禽星(中五宫)随天芮星,或寄坤二
21
+ * 原理(飞盘式):
22
+ * 1. 值符星 = 旬首遁干原始宫对应的星(中五宫为天禽)
23
+ * 2. 值符星随时干:飞到参考干落宫
24
+ * 3. 其余诸星按九星原始序(蓬芮冲辅禽心柱任英,即原始宫数字序)
25
+ * 自值符星起,按宫位数字顺序飞布,阳遁顺飞、阴遁逆飞
26
26
  */
27
- static calculate(xunShouGong, hourZhi, yinYangDun) {
27
+ static calculate(xunShouGong, shiGanLuoGong, yinYangDun) {
28
28
  const isYang = yinYangDun === '阳遁';
29
29
  // 1. 确定值符星(旬首落宫对应的星)
30
30
  const zhiFuXing = this.getXingByGong(xunShouGong);
31
31
  const zhiFuGong = constants_1.JIU_XING_GONG[zhiFuXing];
32
- // 2. 计算时辰数(子时为1)
33
- const hourNum = constants_1.DI_ZHI.indexOf(hourZhi) + 1;
34
- // 3. 计算值符星落宫
35
- // 值符星随时干,从旬首落宫起飞布
36
- const zhiFuLuoGong = this.flyXing(xunShouGong, hourNum - 1, isYang);
37
- // 4. 计算所有九星的落宫
38
- const gongXing = this.calculateAllXing(zhiFuXing, zhiFuLuoGong, isYang);
32
+ // 2. 飞布序列:自值符星起,按九星原始序循环
33
+ const zhiFuIdx = constants_1.JIU_XING_ORDER.indexOf(zhiFuXing);
34
+ const flyOrder = constants_1.JIU_XING_ORDER.slice(zhiFuIdx).concat(constants_1.JIU_XING_ORDER.slice(0, zhiFuIdx));
35
+ // 3. 从参考干落宫起飞布(阳顺阴逆,宫位数字序)
36
+ const gongXing = {};
37
+ for (let i = 0; i < 9; i++) {
38
+ const offset = isYang ? i : -i;
39
+ const gong = (((shiGanLuoGong - 1 + offset) % 9) + 9) % 9 + 1;
40
+ gongXing[gong] = flyOrder[i];
41
+ }
39
42
  return {
40
43
  gongXing,
41
44
  zhiFuXing,
42
45
  zhiFuGong,
43
- zhiFuLuoGong,
46
+ zhiFuLuoGong: shiGanLuoGong,
44
47
  };
45
48
  }
46
49
  /**
@@ -58,58 +61,10 @@ class JiuXingCalculator {
58
61
  }
59
62
  return '芮'; // 默认天芮
60
63
  }
61
- /**
62
- * 飞星:从某宫开始飞布指定步数
63
- */
64
- static flyXing(startGong, steps, isYang) {
65
- let actualStart = startGong;
66
- if (actualStart === 5) {
67
- actualStart = constants_1.ZHONG_GONG_JI; // 中宫寄坤二
68
- }
69
- const startIdx = (0, constants_1.getLuoShuIndex)(actualStart);
70
- const targetIdx = isYang
71
- ? (startIdx + steps) % 8
72
- : ((startIdx - steps) % 8 + 8) % 8;
73
- return (0, constants_1.getLuoShuGong)(targetIdx);
74
- }
75
- /**
76
- * 计算所有九星的落宫
77
- * 从值符星落宫开始,按洛书顺序排列其他八星
78
- * 天禽星随天芮星
79
- */
80
- static calculateAllXing(zhiFuXing, zhiFuLuoGong, isYang) {
81
- const gongXing = {};
82
- // 九星顺序(不含天禽,因为天禽随天芮)
83
- const xingOrderWithoutQin = ['蓬', '芮', '冲', '辅', '心', '柱', '任', '英'];
84
- // 找到值符星在顺序中的索引
85
- let zhiFuIdx = xingOrderWithoutQin.indexOf(zhiFuXing);
86
- if (zhiFuIdx === -1) {
87
- // 如果值符星是天禽,则以天芮为准
88
- zhiFuIdx = xingOrderWithoutQin.indexOf('芮');
89
- }
90
- // 获取值符星落宫在洛书中的索引
91
- let startIdx = (0, constants_1.getLuoShuIndex)(zhiFuLuoGong === 5 ? constants_1.ZHONG_GONG_JI : zhiFuLuoGong);
92
- // 依次排列八星(不含天禽)
93
- for (let i = 0; i < 8; i++) {
94
- const xingIdx = (zhiFuIdx + i) % 8;
95
- const xing = xingOrderWithoutQin[xingIdx];
96
- const gongIdx = isYang
97
- ? (startIdx + i) % 8
98
- : ((startIdx - i) % 8 + 8) % 8;
99
- const gong = (0, constants_1.getLuoShuGong)(gongIdx);
100
- gongXing[gong] = xing;
101
- }
102
- // 天禽星寄中宫,实际显示时随天芮
103
- gongXing[5] = '禽';
104
- return gongXing;
105
- }
106
64
  /**
107
65
  * 根据宫位找星
108
66
  */
109
67
  static findXingByGong(gongXing, gong) {
110
- if (gong === 5) {
111
- return '禽';
112
- }
113
68
  return gongXing[gong];
114
69
  }
115
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JiuXingCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JiuXingCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAQ2B;AAa3B;;;GAGG;AACH,MAAa,iBAAiB;IAC5B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,WAAoB,EACpB,OAAc,EACd,UAAsB;QAEtB,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;QAEnC,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,yBAAa,CAAC,SAAS,CAAC,CAAC;QAE3C,iBAAiB;QACjB,MAAM,OAAO,GAAG,kBAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE5C,aAAa;QACb,kBAAkB;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAEpE,eAAe;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAExE,OAAO;YACL,QAAQ;YACR,SAAS;YACT,SAAS;YACT,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAAC,IAAa;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAa,CAAC,EAAE,CAAC;YAC7D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,IAAe,CAAC;YACzB,CAAC;QACH,CAAC;QAED,QAAQ;QACR,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,GAAG,CAAC,CAAC,OAAO;IACrB,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,OAAO,CAAC,SAAkB,EAAE,KAAa,EAAE,MAAe;QACvE,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,WAAW,GAAG,yBAAa,CAAC,CAAC,QAAQ;QACvC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,0BAAc,EAAC,WAAW,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,MAAM;YACtB,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;YACxB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAErC,OAAO,IAAA,yBAAa,EAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,gBAAgB,CAC7B,SAAkB,EAClB,YAAqB,EACrB,MAAe;QAEf,MAAM,QAAQ,GAA6B,EAA8B,CAAC;QAE1E,qBAAqB;QACrB,MAAM,mBAAmB,GAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEhF,eAAe;QACf,IAAI,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,kBAAkB;YAClB,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9C,CAAC;QAED,iBAAiB;QACjB,IAAI,QAAQ,GAAG,IAAA,0BAAc,EAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,yBAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAEjF,eAAe;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,MAAM;gBACpB,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;gBACpB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAEjC,MAAM,IAAI,GAAG,IAAA,yBAAa,EAAC,OAAO,CAAC,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,kBAAkB;QAClB,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAElB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAkC,EAAE,IAAa;QACrE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF;AApID,8CAoIC"}
1
+ {"version":3,"file":"JiuXingCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JiuXingCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAG2B;AAa3B;;;GAGG;AACH,MAAa,iBAAiB;IAC5B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,SAAS,CACd,WAAoB,EACpB,aAAsB,EACtB,UAAsB;QAEtB,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC;QAEnC,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,yBAAa,CAAC,SAAS,CAAC,CAAC;QAE3C,yBAAyB;QACzB,MAAM,QAAQ,GAAG,0BAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,0BAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,0BAAc,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE1F,2BAA2B;QAC3B,MAAM,QAAQ,GAA6B,EAA8B,CAAC;QAC1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9D,QAAQ,CAAC,IAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO;YACL,QAAQ;YACR,SAAS;YACT,SAAS;YACT,YAAY,EAAE,aAAa;SAC5B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,aAAa,CAAC,IAAa;QACxC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAa,CAAC,EAAE,CAAC;YAC7D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,OAAO,IAAe,CAAC;YACzB,CAAC;QACH,CAAC;QAED,QAAQ;QACR,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,GAAG,CAAC,CAAC,OAAO;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAkC,EAAE,IAAa;QACrE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF;AArED,8CAqEC"}
@@ -26,13 +26,16 @@ export declare class JuShuCalculator {
26
26
  static calculate(jieQi: string, dayGanZhi: string, method: ZhiRunMethod, jieQiDate?: Date, currentDate?: Date): JuShuResult;
27
27
  /**
28
28
  * 拆补法计算上中下元
29
- * 根据日干支确定符头,从而确定上中下元
29
+ * 根据日干支的符头(五日一元,元首为甲日或己日)确定上中下元
30
30
  *
31
31
  * 原理:
32
- * - 每个节气 15 天分为三元,每元 5 天
33
- * - 上元:符头为甲子、甲午(甲子旬或甲午旬的开头)
34
- * - 中元:符头为甲戌、甲辰
35
- * - 下元:符头为甲申、甲寅
32
+ * - 六十甲子按五日一组,各组首日(甲/己日)为符头
33
+ * - 符头地支为四仲(子午卯酉)者为上元:甲子、甲午、己卯、己酉
34
+ * - 符头地支为四孟(寅申巳亥)者为中元:甲寅、甲申、己巳、己亥
35
+ * - 符头地支为四季(辰戌丑未)者为下元:甲辰、甲戌、己丑、己未
36
+ * - 节气内十五天被三元「拆开补齐」,故称拆补法
37
+ *
38
+ * 参照:kentang2017/kinqimen findyuen_dict(MIT)、《神奇之门》
36
39
  */
37
40
  private static calculateYuanChaibu;
38
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"JuShuCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JuShuCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,KAAK,EAAW,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQnG,MAAM,WAAW,WAAW;IAC1B,UAAU;IACV,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,SAAS,CAAC,EAAE,IAAI,EAChB,WAAW,CAAC,EAAE,IAAI,GACjB,WAAW;IA6Bd;;;;;;;;;OASG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmBlC;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAmBnC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;CAGlD"}
1
+ {"version":3,"file":"JuShuCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JuShuCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,KAAK,EAAW,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQnG,MAAM,WAAW,WAAW;IAC1B,UAAU;IACV,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW;IACX,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EACpB,SAAS,CAAC,EAAE,IAAI,EAChB,WAAW,CAAC,EAAE,IAAI,GACjB,WAAW;IA6Bd;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IASlC;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAmBnC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;CAGlD"}
@@ -6,6 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.JuShuCalculator = void 0;
8
8
  const constants_1 = require("../data/constants");
9
+ const PanTypeCalculator_1 = require("./PanTypeCalculator");
9
10
  /**
10
11
  * 局数计算器
11
12
  */
@@ -45,30 +46,24 @@ class JuShuCalculator {
45
46
  }
46
47
  /**
47
48
  * 拆补法计算上中下元
48
- * 根据日干支确定符头,从而确定上中下元
49
+ * 根据日干支的符头(五日一元,元首为甲日或己日)确定上中下元
49
50
  *
50
51
  * 原理:
51
- * - 每个节气 15 天分为三元,每元 5 天
52
- * - 上元:符头为甲子、甲午(甲子旬或甲午旬的开头)
53
- * - 中元:符头为甲戌、甲辰
54
- * - 下元:符头为甲申、甲寅
52
+ * - 六十甲子按五日一组,各组首日(甲/己日)为符头
53
+ * - 符头地支为四仲(子午卯酉)者为上元:甲子、甲午、己卯、己酉
54
+ * - 符头地支为四孟(寅申巳亥)者为中元:甲寅、甲申、己巳、己亥
55
+ * - 符头地支为四季(辰戌丑未)者为下元:甲辰、甲戌、己丑、己未
56
+ * - 节气内十五天被三元「拆开补齐」,故称拆补法
57
+ *
58
+ * 参照:kentang2017/kinqimen findyuen_dict(MIT)、《神奇之门》
55
59
  */
56
60
  static calculateYuanChaibu(dayGanZhi) {
57
- const xunShou = (0, constants_1.getXunShou)(dayGanZhi);
58
- // 根据旬首判断上中下元
59
- switch (xunShou) {
60
- case '甲子':
61
- case '甲午':
62
- return '上元';
63
- case '甲戌':
64
- case '甲辰':
65
- return '中元';
66
- case '甲申':
67
- case '甲寅':
68
- return '下元';
69
- default:
70
- return '上元';
61
+ const idx = constants_1.JIA_ZI_60.indexOf(dayGanZhi);
62
+ if (idx === -1) {
63
+ throw new Error(`无效的日干支: ${dayGanZhi}`);
71
64
  }
65
+ const fuTou = constants_1.JIA_ZI_60[idx - (idx % 5)];
66
+ return PanTypeCalculator_1.DI_ZHI_YUAN_MAP[fuTou.charAt(1)];
72
67
  }
73
68
  /**
74
69
  * 茅山法计算上中下元
@@ -81,8 +76,8 @@ class JuShuCalculator {
81
76
  */
82
77
  static calculateYuanMaoshan(jieQiDate, currentDate) {
83
78
  // 使用 UTC 日期避免时区和时间精度问题
84
- const jieQiDay = Date.UTC(jieQiDate.getFullYear(), jieQiDate.getMonth(), jieQiDate.getDate());
85
- const currentDay = Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
79
+ const jieQiDay = Date.UTC(jieQiDate.getUTCFullYear(), jieQiDate.getUTCMonth(), jieQiDate.getUTCDate());
80
+ const currentDay = Date.UTC(currentDate.getUTCFullYear(), currentDate.getUTCMonth(), currentDate.getUTCDate());
86
81
  const diffDays = Math.floor((currentDay - jieQiDay) / (1000 * 60 * 60 * 24)) + 1; // 交节当天算第1天
87
82
  // 处理边界情况
88
83
  if (diffDays < 1) {
@@ -1 +1 @@
1
- {"version":3,"file":"JuShuCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JuShuCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAK2B;AAW3B;;GAEG;AACH,MAAa,eAAe;IAC1B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,KAAa,EACb,SAAiB,EACjB,MAAoB,EACpB,SAAgB,EAChB,WAAkB;QAElB,iBAAiB;QACjB,MAAM,SAAS,GAAG,wBAAY,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;QAC9B,MAAM,UAAU,GAAe,GAAG,CAAC;QAEnC,YAAY;QACZ,IAAI,IAAc,CAAC;QACnB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAU,EAAE,WAAY,CAAC,CAAC;QAC7D,CAAC;QAED,YAAY;QACZ,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO;YACL,UAAU;YACV,KAAK;YACL,IAAI;SACL,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACK,MAAM,CAAC,mBAAmB,CAAC,SAAiB;QAClD,MAAM,OAAO,GAAG,IAAA,sBAAU,EAAC,SAAS,CAAC,CAAC;QAEtC,aAAa;QACb,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC;YACd,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC;YACd,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,OAAO,IAAI,CAAC;YACd;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,MAAM,CAAC,oBAAoB,CAAC,SAAe,EAAE,WAAiB;QACpE,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9F,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAEtG,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;QAE7F,SAAS;QACT,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,CAAC,cAAc;QAC7B,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAc;QAClC,OAAO,qBAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAsB;QACrC,OAAO,UAAU,KAAK,IAAI,CAAC;IAC7B,CAAC;CACF;AAlHD,0CAkHC"}
1
+ {"version":3,"file":"JuShuCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/JuShuCalculator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iDAI2B;AAC3B,2DAAsD;AAWtD;;GAEG;AACH,MAAa,eAAe;IAC1B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,KAAa,EACb,SAAiB,EACjB,MAAoB,EACpB,SAAgB,EAChB,WAAkB;QAElB,iBAAiB;QACjB,MAAM,SAAS,GAAG,wBAAY,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;QAC9B,MAAM,UAAU,GAAe,GAAG,CAAC;QAEnC,YAAY;QACZ,IAAI,IAAc,CAAC;QACnB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAU,EAAE,WAAY,CAAC,CAAC;QAC7D,CAAC;QAED,YAAY;QACZ,MAAM,OAAO,GAAG,IAAA,wBAAY,EAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO;YACL,UAAU;YACV,KAAK;YACL,IAAI;SACL,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACK,MAAM,CAAC,mBAAmB,CAAC,SAAiB;QAClD,MAAM,GAAG,GAAG,qBAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,KAAK,GAAG,qBAAS,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,mCAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAU,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACK,MAAM,CAAC,oBAAoB,CAAC,SAAe,EAAE,WAAiB;QACpE,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;QACvG,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;QAE/G,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;QAE7F,SAAS;QACT,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,CAAC,cAAc;QAC7B,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAc;QAClC,OAAO,qBAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAsB;QACrC,OAAO,UAAU,KAAK,IAAI,CAAC;IAC7B,CAAC;CACF;AA3GD,0CA2GC"}
@@ -31,26 +31,29 @@ export declare const MONTH_JIEQI_MAP: Record<DiZhi, string>;
31
31
  export declare const DI_ZHI_YUAN_MAP: Record<DiZhi, YuanType>;
32
32
  /**
33
33
  * 年盘阴阳遁判断
34
- * 冬至当天为阳遁起始,夏至当天为阴遁起始
35
- * @param currentJieQi 当前节气
36
- * @returns 阴阳遁
34
+ *
35
+ * 口径(2026-08-30 依典籍修正):《遁甲演义》《奇门遁甲統宗》年奇门起例——
36
+ * 年家奇门只用阴遁,无阳遁(上元阴一、中元阴四、下元阴七)。
37
+ * 此前按节气判阴阳遁,与传统口径不符。
37
38
  */
38
- export declare function getYearPanYinYangDun(currentJieQi: string): YinYangDun;
39
+ export declare function getYearPanYinYangDun(_currentJieQi: string): YinYangDun;
39
40
  /**
40
41
  * 年盘三元判断
41
- * 根据年支确定三元
42
- * @param yearZhi 年支
43
- * @returns 三元
42
+ *
43
+ * 口径(2026-08-30 依典籍修正):以一百八十年为一大周期,六十年一元——
44
+ * 上元甲子 1864-1923、中元甲子 1924-1983、下元甲子 1984-2043,循环往复。
45
+ * 此前按年支定元,与传统口径不符。
46
+ * @param year 公历年
44
47
  */
45
- export declare function getYearPanYuan(yearZhi: DiZhi): YuanType;
48
+ export declare function getYearPanYuanByYear(year: number): YuanType;
46
49
  /**
47
- * 年盘局数计算
48
- * 公式:(年干支在六十甲子中的序数 % 9) + 1
49
- * 注意:序数从0开始,所以甲子=0, 乙丑=1, ...
50
- * @param yearGanZhi 年干支(如 "甲辰")
51
- * @returns 局数 (1-9)
50
+ * 年盘局数
51
+ *
52
+ * 口径(2026-08-30 依典籍修正):上元六十年阴遁一局、中元阴遁四局、下元阴遁七局
53
+ * (《遁甲演义》「三元年遁」)。此前用 (年干支序数 % 9) + 1 的自造公式,无典籍出处。
54
+ * @param year 公历年
52
55
  */
53
- export declare function getYearPanJuShu(yearGanZhi: string): JuShu;
56
+ export declare function getYearPanJuShuByYear(year: number): JuShu;
54
57
  /**
55
58
  * 月盘阴阳遁判断
56
59
  * 根据月建对应的节气确定
@@ -87,6 +90,8 @@ export declare function isValidGanZhi(ganZhi: string): boolean;
87
90
  export interface YearPanParams {
88
91
  yearGanZhi: string;
89
92
  currentJieQi: string;
93
+ /** 公历年(三元按 180 年周期定位) */
94
+ year?: number;
90
95
  }
91
96
  export interface MonthPanParams {
92
97
  monthGanZhi: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PanTypeCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/PanTypeCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKnE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAajD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAanD,CAAC;AAoBF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CASrE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,GAAG,QAAQ,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAQzD;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,KAAK,GAAG,UAAU,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,CAWvD;AAeD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAID,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;IAgB7D;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa;CAehE"}
1
+ {"version":3,"file":"PanTypeCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/PanTypeCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKnE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAajD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAanD,CAAC;AAoBF;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAEtE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAK3D;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAGzD;AAID;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,KAAK,GAAG,UAAU,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,KAAK,GAAG,KAAK,CAWvD;AAeD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAID,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;IAiB7D;;;;OAIG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,aAAa;CAehE"}
@@ -20,8 +20,8 @@
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.PanTypeCalculator = exports.DI_ZHI_YUAN_MAP = exports.MONTH_JIEQI_MAP = void 0;
22
22
  exports.getYearPanYinYangDun = getYearPanYinYangDun;
23
- exports.getYearPanYuan = getYearPanYuan;
24
- exports.getYearPanJuShu = getYearPanJuShu;
23
+ exports.getYearPanYuanByYear = getYearPanYuanByYear;
24
+ exports.getYearPanJuShuByYear = getYearPanJuShuByYear;
25
25
  exports.getMonthPanYinYangDun = getMonthPanYinYangDun;
26
26
  exports.getMonthPanYuan = getMonthPanYuan;
27
27
  exports.getMonthPanJuShu = getMonthPanJuShu;
@@ -84,44 +84,40 @@ const YIN_DUN_JIEQI = [
84
84
  // ============= 年盘计算 =============
85
85
  /**
86
86
  * 年盘阴阳遁判断
87
- * 冬至当天为阳遁起始,夏至当天为阴遁起始
88
- * @param currentJieQi 当前节气
89
- * @returns 阴阳遁
87
+ *
88
+ * 口径(2026-08-30 依典籍修正):《遁甲演义》《奇门遁甲統宗》年奇门起例——
89
+ * 年家奇门只用阴遁,无阳遁(上元阴一、中元阴四、下元阴七)。
90
+ * 此前按节气判阴阳遁,与传统口径不符。
90
91
  */
91
- function getYearPanYinYangDun(currentJieQi) {
92
- if (YANG_DUN_JIEQI.includes(currentJieQi)) {
93
- return '阳遁';
94
- }
95
- if (YIN_DUN_JIEQI.includes(currentJieQi)) {
96
- return '阴遁';
97
- }
98
- // 默认返回阳遁(不应该发生)
99
- return '阳遁';
92
+ function getYearPanYinYangDun(_currentJieQi) {
93
+ return '阴遁';
100
94
  }
101
95
  /**
102
96
  * 年盘三元判断
103
- * 根据年支确定三元
104
- * @param yearZhi 年支
105
- * @returns 三元
97
+ *
98
+ * 口径(2026-08-30 依典籍修正):以一百八十年为一大周期,六十年一元——
99
+ * 上元甲子 1864-1923、中元甲子 1924-1983、下元甲子 1984-2043,循环往复。
100
+ * 此前按年支定元,与传统口径不符。
101
+ * @param year 公历年
106
102
  */
107
- function getYearPanYuan(yearZhi) {
108
- return exports.DI_ZHI_YUAN_MAP[yearZhi];
103
+ function getYearPanYuanByYear(year) {
104
+ const offset = ((year - 1864) % 180 + 180) % 180;
105
+ if (offset < 60)
106
+ return '上元';
107
+ if (offset < 120)
108
+ return '中元';
109
+ return '下元';
109
110
  }
110
111
  /**
111
- * 年盘局数计算
112
- * 公式:(年干支在六十甲子中的序数 % 9) + 1
113
- * 注意:序数从0开始,所以甲子=0, 乙丑=1, ...
114
- * @param yearGanZhi 年干支(如 "甲辰")
115
- * @returns 局数 (1-9)
112
+ * 年盘局数
113
+ *
114
+ * 口径(2026-08-30 依典籍修正):上元六十年阴遁一局、中元阴遁四局、下元阴遁七局
115
+ * (《遁甲演义》「三元年遁」)。此前用 (年干支序数 % 9) + 1 的自造公式,无典籍出处。
116
+ * @param year 公历年
116
117
  */
117
- function getYearPanJuShu(yearGanZhi) {
118
- const index = constants_1.JIA_ZI_60.indexOf(yearGanZhi);
119
- if (index === -1) {
120
- throw new Error(`无效的年干支: ${yearGanZhi}`);
121
- }
122
- // 公式: (index % 9) + 1,确保结果在 1-9 之间
123
- const ju = (index % 9) + 1;
124
- return ju;
118
+ function getYearPanJuShuByYear(year) {
119
+ const yuan = getYearPanYuanByYear(year);
120
+ return (yuan === '上元' ? 1 : yuan === '中元' ? 4 : 7);
125
121
  }
126
122
  // ============= 月盘计算 =============
127
123
  /**
@@ -204,15 +200,17 @@ class PanTypeCalculator {
204
200
  * @returns 阴阳遁、三元、局数
205
201
  */
206
202
  static calculateYearPan(params) {
207
- const { yearGanZhi, currentJieQi } = params;
203
+ const { yearGanZhi, currentJieQi, year } = params;
208
204
  if (!isValidGanZhi(yearGanZhi)) {
209
205
  throw new Error(`无效的年干支: ${yearGanZhi}`);
210
206
  }
211
- const yearZhi = extractZhi(yearGanZhi);
207
+ if (year === undefined) {
208
+ throw new Error('年盘计算需要公历年份(用于一百八十年三元定位)');
209
+ }
212
210
  return {
213
211
  yinYangDun: getYearPanYinYangDun(currentJieQi),
214
- yuan: getYearPanYuan(yearZhi),
215
- juShu: getYearPanJuShu(yearGanZhi),
212
+ yuan: getYearPanYuanByYear(year),
213
+ juShu: getYearPanJuShuByYear(year),
216
214
  };
217
215
  }
218
216
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"PanTypeCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/PanTypeCalculator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PanTypeCalculator.js","sourceRoot":"","sources":["../../../../src/services/qimen/calculators/PanTypeCalculator.ts"],"names":[],"mappings":"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"}