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,260 @@
1
+ "use strict";
2
+ /**
3
+ * Traditional BaZi Analyzer
4
+ * Analyzes Yong Shen (用神) and Ge Ju (格局)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TraditionalAnalyzer = void 0;
8
+ const bazi_1 = require("../../../core/constants/bazi");
9
+ const StrengthAnalyzer_1 = require("./StrengthAnalyzer");
10
+ class TraditionalAnalyzer {
11
+ /**
12
+ * Perform traditional BaZi analysis
13
+ */
14
+ static analyze(chart, fiveElements, dayMasterElement) {
15
+ // Use StrengthAnalyzer for consistent strength calculation
16
+ const strengthAnalysis = StrengthAnalyzer_1.StrengthAnalyzer.analyzeDayMasterStrength(chart);
17
+ const strength = strengthAnalysis.strength;
18
+ // Analyze Yong Shen based on strength
19
+ const yongShen = this.analyzeYongShen(chart, fiveElements, dayMasterElement, strength);
20
+ // Analyze Ge Ju (pattern)
21
+ const geJu = this.analyzeGeJu(chart, dayMasterElement);
22
+ return {
23
+ yongShen,
24
+ geJu,
25
+ strength
26
+ };
27
+ }
28
+ /**
29
+ * Analyze day master strength based on five elements distribution
30
+ */
31
+ static analyzeDayMasterStrength(fiveElements, dayMasterElement) {
32
+ // Create element map using constants
33
+ const elementMap = {
34
+ [bazi_1.FIVE_ELEMENTS_ARRAY[0]]: fiveElements.木, // 木
35
+ [bazi_1.FIVE_ELEMENTS_ARRAY[1]]: fiveElements.火, // 火
36
+ [bazi_1.FIVE_ELEMENTS_ARRAY[2]]: fiveElements.土, // 土
37
+ [bazi_1.FIVE_ELEMENTS_ARRAY[3]]: fiveElements.金, // 金
38
+ [bazi_1.FIVE_ELEMENTS_ARRAY[4]]: fiveElements.水 // 水
39
+ };
40
+ const dayMasterCount = elementMap[dayMasterElement] || 0;
41
+ const total = fiveElements.total;
42
+ const percentage = (dayMasterCount / total) * 100;
43
+ // Consider supporting elements
44
+ const supportingElement = this.getGeneratingElement(dayMasterElement);
45
+ const supportCount = elementMap[supportingElement] || 0;
46
+ const totalSupport = dayMasterCount + supportCount * 0.7;
47
+ const supportPercentage = (totalSupport / total) * 100;
48
+ if (supportPercentage < 15)
49
+ return '衰极';
50
+ if (supportPercentage < 25)
51
+ return '偏弱';
52
+ if (supportPercentage < 35)
53
+ return '中和';
54
+ if (supportPercentage < 45)
55
+ return '身旺';
56
+ return '旺极';
57
+ }
58
+ /**
59
+ * Analyze Yong Shen (用神)
60
+ */
61
+ static analyzeYongShen(chart, fiveElements, dayMasterElement, strength) {
62
+ const yongShen = [];
63
+ const xiShen = [];
64
+ const jiShen = [];
65
+ const xianShen = [];
66
+ // Determine Yong Shen based on day master strength
67
+ if (strength === '衰极') {
68
+ // Too weak - use same element and generating element
69
+ yongShen.push(dayMasterElement);
70
+ const generating = this.getGeneratingElement(dayMasterElement);
71
+ yongShen.push(generating);
72
+ xiShen.push(generating);
73
+ // Ji Shen - controlling and draining elements
74
+ jiShen.push(this.getControllingElement(dayMasterElement));
75
+ jiShen.push(this.getDrainingElement(dayMasterElement));
76
+ jiShen.push(this.getControlledElement(dayMasterElement));
77
+ }
78
+ else if (strength === '偏弱' || strength === '身弱') {
79
+ // Weak - primarily use generating element
80
+ const generating = this.getGeneratingElement(dayMasterElement);
81
+ yongShen.push(generating);
82
+ xiShen.push(dayMasterElement);
83
+ // Ji Shen - controlling element
84
+ jiShen.push(this.getControllingElement(dayMasterElement));
85
+ // Xian Shen - neutral elements
86
+ xianShen.push(this.getDrainingElement(dayMasterElement));
87
+ xianShen.push(this.getControlledElement(dayMasterElement));
88
+ }
89
+ else if (strength === '中和') {
90
+ // Normal - need balance based on what's missing
91
+ if (fiveElements.balance.missing.length > 0) {
92
+ yongShen.push(...fiveElements.balance.missing);
93
+ }
94
+ else {
95
+ // Use elements that create circulation
96
+ const controlled = this.getControlledElement(dayMasterElement);
97
+ yongShen.push(controlled);
98
+ xiShen.push(this.getDrainingElement(dayMasterElement));
99
+ }
100
+ }
101
+ else if (strength === '偏强' || strength === '身旺') {
102
+ // Strong - use draining and controlled elements
103
+ yongShen.push(this.getDrainingElement(dayMasterElement));
104
+ xiShen.push(this.getControlledElement(dayMasterElement));
105
+ // Ji Shen - same and generating elements
106
+ jiShen.push(dayMasterElement);
107
+ jiShen.push(this.getGeneratingElement(dayMasterElement));
108
+ }
109
+ else {
110
+ // Too strong - follow the strength
111
+ yongShen.push(dayMasterElement);
112
+ xiShen.push(this.getGeneratingElement(dayMasterElement));
113
+ // Ji Shen - controlling element
114
+ jiShen.push(this.getControllingElement(dayMasterElement));
115
+ }
116
+ // Generate explanation
117
+ const explanation = this.generateYongShenExplanation(strength, dayMasterElement, yongShen);
118
+ return {
119
+ yongShen: [...new Set(yongShen)],
120
+ xiShen: [...new Set(xiShen)],
121
+ jiShen: [...new Set(jiShen)],
122
+ xianShen: [...new Set(xianShen)],
123
+ explanation
124
+ };
125
+ }
126
+ /**
127
+ * Analyze Ge Ju (格局)
128
+ */
129
+ static analyzeGeJu(chart, dayMasterElement) {
130
+ // Check for special patterns first
131
+ const specialPattern = this.checkSpecialPatterns(chart);
132
+ if (specialPattern) {
133
+ return specialPattern;
134
+ }
135
+ // Check regular patterns based on month branch
136
+ const monthBranch = chart.month.branch;
137
+ const monthElement = this.getBranchElement(monthBranch);
138
+ // Determine pattern based on relationship between day master and month branch
139
+ let pattern = '';
140
+ let type = '';
141
+ let quality = '一般';
142
+ if (monthElement === dayMasterElement) {
143
+ pattern = 'jianlu';
144
+ type = 'strong_body';
145
+ quality = '良好';
146
+ }
147
+ else if (this.isGenerating(monthElement, dayMasterElement)) {
148
+ pattern = 'seal';
149
+ type = 'seal';
150
+ quality = '良好';
151
+ }
152
+ else if (this.isControlling(dayMasterElement, monthElement)) {
153
+ pattern = 'wealth';
154
+ type = 'wealth';
155
+ quality = '良好';
156
+ }
157
+ else if (this.isControlling(monthElement, dayMasterElement)) {
158
+ pattern = 'officer';
159
+ type = 'officer';
160
+ quality = '良好';
161
+ }
162
+ else if (this.isGenerating(dayMasterElement, monthElement)) {
163
+ pattern = 'output';
164
+ type = 'output';
165
+ quality = '一般';
166
+ }
167
+ // Check pattern quality
168
+ if (this.hasGoodCombination(chart)) {
169
+ quality = quality === '良好' ? '优秀' : '良好';
170
+ }
171
+ const description = this.generateGeJuDescription(pattern, type, quality);
172
+ return {
173
+ pattern,
174
+ type,
175
+ quality,
176
+ description
177
+ };
178
+ }
179
+ /**
180
+ * Check for special patterns
181
+ */
182
+ static checkSpecialPatterns(chart) {
183
+ // Check for Cong Ge (從格) - following pattern
184
+ const stems = [chart.year.stem, chart.month.stem, chart.day.stem, chart.hour.stem];
185
+ const elements = stems.map(s => this.getStemElement(s));
186
+ const uniqueElements = new Set(elements);
187
+ if (uniqueElements.size === 2) {
188
+ // Possible Cong Ge
189
+ const dayElement = this.getStemElement(chart.day.stem);
190
+ const otherElements = elements.filter(e => e !== dayElement);
191
+ if (otherElements.length >= 3) {
192
+ const dominantElement = otherElements[0];
193
+ if (otherElements.every(e => e === dominantElement)) {
194
+ return {
195
+ pattern: `follow_${dominantElement}`,
196
+ type: '从格',
197
+ quality: '优秀',
198
+ description: `follow_pattern_${dominantElement}`
199
+ };
200
+ }
201
+ }
202
+ }
203
+ // Check for Zhuan Wang Ge (專旺格)
204
+ if (elements.filter(e => e === elements[2]).length >= 3) {
205
+ return {
206
+ pattern: 'specialized_strong',
207
+ type: 'specialized_strong',
208
+ quality: '优秀',
209
+ description: 'specialized_strong_pattern'
210
+ };
211
+ }
212
+ return null;
213
+ }
214
+ /**
215
+ * Check if chart has good combinations
216
+ */
217
+ static hasGoodCombination(chart) {
218
+ // Simplified check - in reality would check for specific combinations
219
+ const branches = [chart.year.branch, chart.month.branch, chart.day.branch, chart.hour.branch];
220
+ // Check for three harmony
221
+ return bazi_1.BRANCH_RELATIONS.threeHarmony.some((harmony) => harmony.filter(h => branches.includes(h)).length >= 2);
222
+ }
223
+ // Helper methods
224
+ static getStemElement(stem) {
225
+ const stemData = bazi_1.HEAVENLY_STEMS.find(s => s.name === stem);
226
+ return stemData?.element || '';
227
+ }
228
+ static getBranchElement(branch) {
229
+ const branchData = bazi_1.EARTHLY_BRANCHES.find(b => b.name === branch);
230
+ return branchData?.element || '';
231
+ }
232
+ static getGeneratingElement(element) {
233
+ return bazi_1.FIVE_ELEMENTS_RELATIONS.generateBy[element] || '';
234
+ }
235
+ static getControllingElement(element) {
236
+ return bazi_1.FIVE_ELEMENTS_RELATIONS.restrictBy[element] || '';
237
+ }
238
+ static getControlledElement(element) {
239
+ return bazi_1.FIVE_ELEMENTS_RELATIONS.controlling[element] || '';
240
+ }
241
+ static getDrainingElement(element) {
242
+ return bazi_1.FIVE_ELEMENTS_RELATIONS.generating[element] || '';
243
+ }
244
+ static isGenerating(from, to) {
245
+ return this.getGeneratingElement(to) === from;
246
+ }
247
+ static isControlling(from, to) {
248
+ return this.getControlledElement(from) === to;
249
+ }
250
+ static generateYongShenExplanation(strength, dayMasterElement, yongShen) {
251
+ // Return a key that can be translated at the display layer
252
+ return `yongshen_explanation:${strength}:${dayMasterElement}:${yongShen.join(',')}`;
253
+ }
254
+ static generateGeJuDescription(pattern, type, quality) {
255
+ // Return a key that can be translated at the display layer
256
+ return `geju_description:${pattern}:${type}:${quality}`;
257
+ }
258
+ }
259
+ exports.TraditionalAnalyzer = TraditionalAnalyzer;
260
+ //# sourceMappingURL=TraditionalAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraditionalAnalyzer.js","sourceRoot":"","sources":["../../../../src/services/bazi/analyzers/TraditionalAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * YongShen Analyzer (用神分析器)
3
+ * Implements taro-bazi's comprehensive YongShen (Useful God) analysis system
4
+ * Determines the most beneficial elements based on chart balance and patterns
5
+ * Returns language-agnostic data with translation keys
6
+ */
7
+ import { BaziChart, YongShenAnalysis, YongShenRecommendations } from '../types';
8
+ export declare class YongShenAnalyzer {
9
+ /**
10
+ * Main analysis method - determines useful and harmful gods
11
+ */
12
+ static analyze(chart: BaziChart, strengthAnalysis: any, patternAnalysis: any, climateAnalysis: any): YongShenAnalysis;
13
+ /**
14
+ * Analyze normal patterns (正格)
15
+ */
16
+ private static analyzeNormalPattern;
17
+ /**
18
+ * Analyze based on pattern recommendations from PatternAnalyzer
19
+ */
20
+ private static analyzeByPatternRecommendations;
21
+ /**
22
+ * Analyze special patterns (從格)
23
+ */
24
+ private static analyzeSpecialPattern;
25
+ /**
26
+ * Analyze when climate adjustment is urgent
27
+ */
28
+ private static analyzeClimateFirst;
29
+ /**
30
+ * Generate explanation for the YongShen analysis
31
+ */
32
+ private static generateExplanation;
33
+ /**
34
+ * Generate comprehensive actionable recommendations based on YongShen analysis
35
+ */
36
+ static generateRecommendations(analysis: YongShenAnalysis, dayMasterElement: string, strengthAnalysis: any, patternAnalysis: any, climateAnalysis: any): YongShenRecommendations;
37
+ /**
38
+ * Generate career recommendations based on favorable elements
39
+ */
40
+ private static generateCareerRecommendations;
41
+ /**
42
+ * Generate lifestyle recommendations
43
+ */
44
+ private static generateLifestyleRecommendations;
45
+ /**
46
+ * Generate relationship recommendations
47
+ */
48
+ private static generateRelationshipRecommendations;
49
+ /**
50
+ * Generate health recommendations
51
+ */
52
+ private static generateHealthRecommendations;
53
+ /**
54
+ * Generate luck enhancers
55
+ */
56
+ private static generateLuckEnhancers;
57
+ /**
58
+ * Generate Feng Shui suggestions
59
+ */
60
+ private static generateFengShuiSuggestions;
61
+ /**
62
+ * Helper: Get day master element
63
+ */
64
+ private static getDayMasterElement;
65
+ /**
66
+ * Helper: Count elements in the chart
67
+ */
68
+ private static count;
69
+ }
70
+ //# sourceMappingURL=YongShenAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YongShenAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/services/bazi/analyzers/YongShenAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EAOxB,MAAM,UAAU,CAAC;AAMlB,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,OAAO,CACZ,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,GAAG,EACrB,eAAe,EAAE,GAAG,EACpB,eAAe,EAAE,GAAG,GACnB,gBAAgB;IA4BnB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAmGnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAmE9C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IA6HpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAsElC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAiClC;;OAEG;IACH,MAAM,CAAC,uBAAuB,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,GAAG,EACrB,eAAe,EAAE,GAAG,EACpB,eAAe,EAAE,GAAG,GACnB,uBAAuB;IAa1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IAkI5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;IAgJ/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mCAAmC;IAoHlD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,6BAA6B;IA6I5C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqEpC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IA+J1C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAWlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,KAAK;CA2BrB"}