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.
- package/LICENSE +201 -0
- package/README.md +118 -0
- package/dist/core/bazi/BaziCore.d.ts +112 -0
- package/dist/core/bazi/BaziCore.d.ts.map +1 -0
- package/dist/core/bazi/BaziCore.js +606 -0
- package/dist/core/bazi/BaziCore.js.map +1 -0
- package/dist/core/bazi/SolarTermCalculator.d.ts +46 -0
- package/dist/core/bazi/SolarTermCalculator.d.ts.map +1 -0
- package/dist/core/bazi/SolarTermCalculator.js +452 -0
- package/dist/core/bazi/SolarTermCalculator.js.map +1 -0
- package/dist/core/bazi/TrueSolarTime.d.ts +64 -0
- package/dist/core/bazi/TrueSolarTime.d.ts.map +1 -0
- package/dist/core/bazi/TrueSolarTime.js +210 -0
- package/dist/core/bazi/TrueSolarTime.js.map +1 -0
- package/dist/core/bazi/ephemerisData.d.ts +10 -0
- package/dist/core/bazi/ephemerisData.d.ts.map +1 -0
- package/dist/core/bazi/ephemerisData.js +88 -0
- package/dist/core/bazi/ephemerisData.js.map +1 -0
- package/dist/core/bazi/index.d.ts +8 -0
- package/dist/core/bazi/index.d.ts.map +1 -0
- package/dist/core/bazi/index.js +30 -0
- package/dist/core/bazi/index.js.map +1 -0
- package/dist/core/bazi/types.d.ts +116 -0
- package/dist/core/bazi/types.d.ts.map +1 -0
- package/dist/core/bazi/types.js +7 -0
- package/dist/core/bazi/types.js.map +1 -0
- package/dist/core/calendar/SolarTermsCalculator.d.ts +33 -0
- package/dist/core/calendar/SolarTermsCalculator.d.ts.map +1 -0
- package/dist/core/calendar/SolarTermsCalculator.js +111 -0
- package/dist/core/calendar/SolarTermsCalculator.js.map +1 -0
- package/dist/core/calendar/astronomicalCalendar.d.ts +74 -0
- package/dist/core/calendar/astronomicalCalendar.d.ts.map +1 -0
- package/dist/core/calendar/astronomicalCalendar.js +276 -0
- package/dist/core/calendar/astronomicalCalendar.js.map +1 -0
- package/dist/core/calendar/calendar.d.ts +81 -0
- package/dist/core/calendar/calendar.d.ts.map +1 -0
- package/dist/core/calendar/calendar.js +223 -0
- package/dist/core/calendar/calendar.js.map +1 -0
- package/dist/core/calendar/constants.d.ts +151 -0
- package/dist/core/calendar/constants.d.ts.map +1 -0
- package/dist/core/calendar/constants.js +97 -0
- package/dist/core/calendar/constants.js.map +1 -0
- package/dist/core/calendar/julian.d.ts +54 -0
- package/dist/core/calendar/julian.d.ts.map +1 -0
- package/dist/core/calendar/julian.js +142 -0
- package/dist/core/calendar/julian.js.map +1 -0
- package/dist/core/calendar/lunarCalendar.d.ts +79 -0
- package/dist/core/calendar/lunarCalendar.d.ts.map +1 -0
- package/dist/core/calendar/lunarCalendar.js +164 -0
- package/dist/core/calendar/lunarCalendar.js.map +1 -0
- package/dist/core/calendar/solarTerms.d.ts +105 -0
- package/dist/core/calendar/solarTerms.d.ts.map +1 -0
- package/dist/core/calendar/solarTerms.js +487 -0
- package/dist/core/calendar/solarTerms.js.map +1 -0
- package/dist/core/constants/bazi.d.ts +138 -0
- package/dist/core/constants/bazi.d.ts.map +1 -0
- package/dist/core/constants/bazi.js +332 -0
- package/dist/core/constants/bazi.js.map +1 -0
- package/dist/core/constants/index.d.ts +6 -0
- package/dist/core/constants/index.d.ts.map +1 -0
- package/dist/core/constants/index.js +37 -0
- package/dist/core/constants/index.js.map +1 -0
- package/dist/core/constants/positions.d.ts +27 -0
- package/dist/core/constants/positions.d.ts.map +1 -0
- package/dist/core/constants/positions.js +39 -0
- package/dist/core/constants/positions.js.map +1 -0
- package/dist/core/ziwei/BrightnessSystem.d.ts +53 -0
- package/dist/core/ziwei/BrightnessSystem.d.ts.map +1 -0
- package/dist/core/ziwei/BrightnessSystem.js +278 -0
- package/dist/core/ziwei/BrightnessSystem.js.map +1 -0
- package/dist/core/ziwei/IztroAdapter.d.ts +78 -0
- package/dist/core/ziwei/IztroAdapter.d.ts.map +1 -0
- package/dist/core/ziwei/IztroAdapter.js +314 -0
- package/dist/core/ziwei/IztroAdapter.js.map +1 -0
- package/dist/core/ziwei/MutagenCore.d.ts +81 -0
- package/dist/core/ziwei/MutagenCore.d.ts.map +1 -0
- package/dist/core/ziwei/MutagenCore.js +246 -0
- package/dist/core/ziwei/MutagenCore.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1101 -0
- package/dist/index.js.map +1 -0
- package/dist/output/fortuneTextRenderer.d.ts +63 -0
- package/dist/output/fortuneTextRenderer.d.ts.map +1 -0
- package/dist/output/fortuneTextRenderer.js +384 -0
- package/dist/output/fortuneTextRenderer.js.map +1 -0
- package/dist/output/listTextRenderer.d.ts +298 -0
- package/dist/output/listTextRenderer.d.ts.map +1 -0
- package/dist/output/listTextRenderer.js +942 -0
- package/dist/output/listTextRenderer.js.map +1 -0
- package/dist/services/bazi/BaziService.d.ts +83 -0
- package/dist/services/bazi/BaziService.d.ts.map +1 -0
- package/dist/services/bazi/BaziService.js +635 -0
- package/dist/services/bazi/BaziService.js.map +1 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts +31 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.js +194 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +16 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +60 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +33 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js +209 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts +159 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.js +1150 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts +114 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.js +704 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +236 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +2079 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts +181 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.js +1119 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts +78 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +383 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +46 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +260 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts +70 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.js +858 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.js.map +1 -0
- package/dist/services/bazi/calculators/DaYunCalculator.d.ts +71 -0
- package/dist/services/bazi/calculators/DaYunCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/DaYunCalculator.js +496 -0
- package/dist/services/bazi/calculators/DaYunCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.d.ts +88 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.js +546 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.d.ts +66 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.js +497 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.d.ts +50 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.js +338 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts +123 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.js +414 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.js.map +1 -0
- package/dist/services/bazi/index.d.ts +21 -0
- package/dist/services/bazi/index.d.ts.map +1 -0
- package/dist/services/bazi/index.js +83 -0
- package/dist/services/bazi/index.js.map +1 -0
- package/dist/services/bazi/types.d.ts +597 -0
- package/dist/services/bazi/types.d.ts.map +1 -0
- package/dist/services/bazi/types.js +123 -0
- package/dist/services/bazi/types.js.map +1 -0
- package/dist/services/ziwei/ZiweiService.d.ts +86 -0
- package/dist/services/ziwei/ZiweiService.d.ts.map +1 -0
- package/dist/services/ziwei/ZiweiService.js +343 -0
- package/dist/services/ziwei/ZiweiService.js.map +1 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts +38 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.js +142 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/DailyCalculator.d.ts +27 -0
- package/dist/services/ziwei/calculators/DailyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/DailyCalculator.js +55 -0
- package/dist/services/ziwei/calculators/DailyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.d.ts +46 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.js +181 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts +28 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js +84 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.d.ts +41 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.js +139 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts +30 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.js +90 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts +39 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.js +128 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.d.ts +20 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.js +121 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts +35 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js +55 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.d.ts +35 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.js +119 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.js.map +1 -0
- package/dist/services/ziwei/index.d.ts +15 -0
- package/dist/services/ziwei/index.d.ts.map +1 -0
- package/dist/services/ziwei/index.js +48 -0
- package/dist/services/ziwei/index.js.map +1 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.d.ts +62 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.d.ts.map +1 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.js +153 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.js.map +1 -0
- package/dist/services/ziwei/types.d.ts +185 -0
- package/dist/services/ziwei/types.d.ts.map +1 -0
- package/dist/services/ziwei/types.js +54 -0
- package/dist/services/ziwei/types.js.map +1 -0
- package/dist/shared/logger.d.ts +51 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +136 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/types.d.ts +91 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +7 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/utils/ageCalculator.d.ts +30 -0
- package/dist/utils/ageCalculator.d.ts.map +1 -0
- package/dist/utils/ageCalculator.js +51 -0
- package/dist/utils/ageCalculator.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LiuYueCalculator = void 0;
|
|
4
|
+
const bazi_1 = require("../../../core/constants/bazi");
|
|
5
|
+
const LuckCycleCalculator_1 = require("./LuckCycleCalculator");
|
|
6
|
+
const solarTerms_1 = require("../../../core/calendar/solarTerms");
|
|
7
|
+
// Extract simple arrays for easier usage
|
|
8
|
+
const STEMS = bazi_1.HEAVENLY_STEMS.map(s => s.name);
|
|
9
|
+
const BRANCHES = bazi_1.EARTHLY_BRANCHES.map(b => b.name);
|
|
10
|
+
// Create stem-element mapping
|
|
11
|
+
const STEM_ELEMENTS = bazi_1.HEAVENLY_STEMS.reduce((acc, stem) => {
|
|
12
|
+
acc[stem.name] = stem.element;
|
|
13
|
+
return acc;
|
|
14
|
+
}, {});
|
|
15
|
+
// Create branch-element mapping
|
|
16
|
+
const BRANCH_ELEMENTS = bazi_1.EARTHLY_BRANCHES.reduce((acc, branch) => {
|
|
17
|
+
acc[branch.name] = branch.element;
|
|
18
|
+
return acc;
|
|
19
|
+
}, {});
|
|
20
|
+
// Solar term months - each month starts from a specific solar term (節)
|
|
21
|
+
const MONTH_STARTING_SOLAR_TERMS = [
|
|
22
|
+
'立春', // 寅月
|
|
23
|
+
'惊蛰', // 卯月
|
|
24
|
+
'清明', // 辰月
|
|
25
|
+
'立夏', // 巳月
|
|
26
|
+
'芒种', // 午月
|
|
27
|
+
'小暑', // 未月
|
|
28
|
+
'立秋', // 申月
|
|
29
|
+
'白露', // 酉月
|
|
30
|
+
'寒露', // 戌月
|
|
31
|
+
'立冬', // 亥月
|
|
32
|
+
'大雪', // 子月
|
|
33
|
+
'小寒' // 丑月
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Calculator for Liu Yue (流月) - Monthly Fortune Cycles
|
|
37
|
+
* Provides month-by-month analysis within a Liu Nian year
|
|
38
|
+
*/
|
|
39
|
+
class LiuYueCalculator {
|
|
40
|
+
luckCalculator;
|
|
41
|
+
constructor() {
|
|
42
|
+
this.luckCalculator = new LuckCycleCalculator_1.LuckCycleCalculator();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculate all Liu Yue for a specific year
|
|
46
|
+
*/
|
|
47
|
+
calculateLiuYue(yearStem, yearBranch, dayMasterElement, yongShen, birthDate, currentYear) {
|
|
48
|
+
const months = [];
|
|
49
|
+
// Get all solar terms for the year
|
|
50
|
+
const yearSolarTerms = solarTerms_1.PreciseSolarTermCalculator.calculateYearSolarTerms(currentYear);
|
|
51
|
+
const nextYearSolarTerms = solarTerms_1.PreciseSolarTermCalculator.calculateYearSolarTerms(currentYear + 1);
|
|
52
|
+
// Calculate the stem for the first month (寅月)
|
|
53
|
+
const firstMonthStem = this.calculateFirstMonthStem(yearStem);
|
|
54
|
+
for (let i = 0; i < 12; i++) {
|
|
55
|
+
const monthBranch = BRANCHES[(i + 2) % 12]; // Start from 寅
|
|
56
|
+
const monthStemIndex = (STEMS.indexOf(firstMonthStem) + i) % 10;
|
|
57
|
+
const monthStem = STEMS[monthStemIndex];
|
|
58
|
+
// Calculate month dates based on solar terms
|
|
59
|
+
const { startDate, endDate, solarTermInfo } = this.getMonthDates(currentYear, i, yearSolarTerms, nextYearSolarTerms);
|
|
60
|
+
// Analyze month fortune
|
|
61
|
+
const analysis = this.analyzeMonth(monthStem, monthBranch, yearStem, yearBranch, dayMasterElement, yongShen);
|
|
62
|
+
months.push({
|
|
63
|
+
month: i + 1,
|
|
64
|
+
stem: monthStem,
|
|
65
|
+
branch: monthBranch,
|
|
66
|
+
startDate,
|
|
67
|
+
endDate,
|
|
68
|
+
fortune: analysis.fortune,
|
|
69
|
+
rating: analysis.rating,
|
|
70
|
+
mainInfluences: analysis.mainInfluences,
|
|
71
|
+
opportunities: analysis.opportunities,
|
|
72
|
+
challenges: analysis.challenges,
|
|
73
|
+
recommendations: analysis.recommendations,
|
|
74
|
+
healthFocus: analysis.healthFocus,
|
|
75
|
+
luckyDays: this.calculateLuckyDays(monthStem, monthBranch, dayMasterElement),
|
|
76
|
+
solarTerm: solarTermInfo // Store solar term info for display
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return months;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Calculate the stem for the first month based on year stem
|
|
83
|
+
*/
|
|
84
|
+
calculateFirstMonthStem(yearStem) {
|
|
85
|
+
const yearStemIndex = STEMS.indexOf(yearStem);
|
|
86
|
+
const rules = {
|
|
87
|
+
0: '丙', // 甲年
|
|
88
|
+
1: '戊', // 乙年
|
|
89
|
+
2: '庚', // 丙年
|
|
90
|
+
3: '壬', // 丁年
|
|
91
|
+
4: '甲', // 戊年
|
|
92
|
+
5: '丙', // 己年
|
|
93
|
+
6: '戊', // 庚年
|
|
94
|
+
7: '庚', // 辛年
|
|
95
|
+
8: '壬', // 壬年
|
|
96
|
+
9: '甲' // 癸年
|
|
97
|
+
};
|
|
98
|
+
return rules[yearStemIndex];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get solar calendar dates for a Chinese month based on solar terms
|
|
102
|
+
*/
|
|
103
|
+
getMonthDates(year, monthIndex, yearSolarTerms, nextYearSolarTerms) {
|
|
104
|
+
// Each Chinese month starts from a specific solar term (節)
|
|
105
|
+
const startingSolarTerm = MONTH_STARTING_SOLAR_TERMS[monthIndex];
|
|
106
|
+
const nextSolarTerm = MONTH_STARTING_SOLAR_TERMS[(monthIndex + 1) % 12];
|
|
107
|
+
// Find the starting solar term
|
|
108
|
+
// 注意:八字年从立春开始到次年立春前结束
|
|
109
|
+
// 丑月(monthIndex=11)的开始节气"小寒"在公历次年1月初,需要从下一年节气表查找
|
|
110
|
+
let startDate = null;
|
|
111
|
+
let solarTermInfo;
|
|
112
|
+
if (monthIndex === 11) {
|
|
113
|
+
// 丑月(小寒~立春)开始于公历次年1月
|
|
114
|
+
for (const term of nextYearSolarTerms) {
|
|
115
|
+
if (term.name === startingSolarTerm) {
|
|
116
|
+
startDate = term.date;
|
|
117
|
+
solarTermInfo = term;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
for (const term of yearSolarTerms) {
|
|
124
|
+
if (term.name === startingSolarTerm) {
|
|
125
|
+
startDate = term.date;
|
|
126
|
+
solarTermInfo = term;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// If not found in current year (e.g., 立春 might be in previous year)
|
|
131
|
+
if (!startDate && monthIndex === 0) {
|
|
132
|
+
const prevYearTerms = solarTerms_1.PreciseSolarTermCalculator.calculateYearSolarTerms(year - 1);
|
|
133
|
+
for (const term of prevYearTerms) {
|
|
134
|
+
if (term.name === startingSolarTerm) {
|
|
135
|
+
startDate = term.date;
|
|
136
|
+
solarTermInfo = term;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Find the ending solar term
|
|
143
|
+
let endDate = null;
|
|
144
|
+
// First check current year
|
|
145
|
+
for (const term of yearSolarTerms) {
|
|
146
|
+
if (term.name === nextSolarTerm) {
|
|
147
|
+
// End date should be the moment before the next solar term starts
|
|
148
|
+
endDate = new Date(term.date.getTime() - 1);
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// If not found, or if endDate is before startDate (cross-year case like 子月 or 丑月),
|
|
153
|
+
// check next year
|
|
154
|
+
// 例如:子月从大雪(12/7)到小寒(次年1/5),当年1月的小寒比大雪早,需要用次年的小寒
|
|
155
|
+
if (!endDate || (startDate && endDate.getTime() <= startDate.getTime())) {
|
|
156
|
+
for (const term of nextYearSolarTerms) {
|
|
157
|
+
if (term.name === nextSolarTerm) {
|
|
158
|
+
// End date should be the moment before the next solar term starts
|
|
159
|
+
endDate = new Date(term.date.getTime() - 1);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Fallback to approximate dates if solar terms not found
|
|
165
|
+
if (!startDate) {
|
|
166
|
+
startDate = new Date(year, monthIndex + 1, 1);
|
|
167
|
+
}
|
|
168
|
+
if (!endDate) {
|
|
169
|
+
endDate = new Date(year, monthIndex + 2, 0);
|
|
170
|
+
}
|
|
171
|
+
return { startDate, endDate, solarTermInfo };
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Analyze month fortune
|
|
175
|
+
*/
|
|
176
|
+
analyzeMonth(monthStem, monthBranch, yearStem, yearBranch, dayMasterElement, yongShen) {
|
|
177
|
+
const monthElement = STEM_ELEMENTS[monthStem];
|
|
178
|
+
const monthBranchElement = BRANCH_ELEMENTS[monthBranch];
|
|
179
|
+
// Calculate fortune rating based on element compatibility
|
|
180
|
+
let rating = 50; // Base rating
|
|
181
|
+
// YongShen bonus
|
|
182
|
+
if (yongShen.includes(monthElement)) {
|
|
183
|
+
rating += 30;
|
|
184
|
+
}
|
|
185
|
+
// Element cycle bonus/penalty
|
|
186
|
+
const elementCycle = {
|
|
187
|
+
'木': '火', // Wood generates Fire
|
|
188
|
+
'火': '土', // Fire generates Earth
|
|
189
|
+
'土': '金', // Earth generates Metal
|
|
190
|
+
'金': '水', // Metal generates Water
|
|
191
|
+
'水': '木' // Water generates Wood
|
|
192
|
+
};
|
|
193
|
+
const elementControl = {
|
|
194
|
+
'木': '土', // Wood controls Earth
|
|
195
|
+
'土': '水', // Earth controls Water
|
|
196
|
+
'水': '火', // Water controls Fire
|
|
197
|
+
'火': '金', // Fire controls Metal
|
|
198
|
+
'金': '木' // Metal controls Wood
|
|
199
|
+
};
|
|
200
|
+
if (elementCycle[dayMasterElement] === monthElement) {
|
|
201
|
+
rating += 10; // Month supports day master
|
|
202
|
+
}
|
|
203
|
+
else if (elementCycle[monthElement] === dayMasterElement) {
|
|
204
|
+
rating += 15; // Day master receives support
|
|
205
|
+
}
|
|
206
|
+
else if (elementControl[monthElement] === dayMasterElement) {
|
|
207
|
+
rating -= 20; // Day master is controlled
|
|
208
|
+
}
|
|
209
|
+
else if (elementControl[dayMasterElement] === monthElement) {
|
|
210
|
+
rating += 5; // Day master controls month
|
|
211
|
+
}
|
|
212
|
+
// Ensure rating is within bounds
|
|
213
|
+
rating = Math.max(0, Math.min(100, rating));
|
|
214
|
+
// Analyze influences
|
|
215
|
+
const mainInfluences = [];
|
|
216
|
+
const opportunities = [];
|
|
217
|
+
const challenges = [];
|
|
218
|
+
const recommendations = [];
|
|
219
|
+
const healthFocus = [];
|
|
220
|
+
// Month-Year interaction
|
|
221
|
+
if (this.isHarmony(monthStem, yearStem)) {
|
|
222
|
+
mainInfluences.push('month_year_harmony');
|
|
223
|
+
opportunities.push('smooth_progress');
|
|
224
|
+
}
|
|
225
|
+
if (this.isClash(monthBranch, yearBranch)) {
|
|
226
|
+
mainInfluences.push('month_year_clash');
|
|
227
|
+
challenges.push('potential_conflicts');
|
|
228
|
+
}
|
|
229
|
+
// YongShen support
|
|
230
|
+
if (yongShen.includes(monthElement)) {
|
|
231
|
+
opportunities.push('yongshen_support');
|
|
232
|
+
recommendations.push('seize_opportunities');
|
|
233
|
+
}
|
|
234
|
+
else if (this.isUnfavorable(monthElement, yongShen)) {
|
|
235
|
+
challenges.push('unfavorable_element');
|
|
236
|
+
recommendations.push('stay_cautious');
|
|
237
|
+
}
|
|
238
|
+
// Health focus based on element
|
|
239
|
+
healthFocus.push(...this.getHealthFocus(monthElement));
|
|
240
|
+
// Fortune description
|
|
241
|
+
const fortune = this.getFortuneDescription(rating);
|
|
242
|
+
return {
|
|
243
|
+
fortune,
|
|
244
|
+
rating,
|
|
245
|
+
mainInfluences,
|
|
246
|
+
opportunities,
|
|
247
|
+
challenges,
|
|
248
|
+
recommendations,
|
|
249
|
+
healthFocus
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Calculate lucky days within a month
|
|
254
|
+
*/
|
|
255
|
+
calculateLuckyDays(monthStem, monthBranch, dayMasterElement) {
|
|
256
|
+
const luckyDays = [];
|
|
257
|
+
const monthElement = STEM_ELEMENTS[monthStem];
|
|
258
|
+
// Simplified lucky day calculation
|
|
259
|
+
// In production, calculate based on daily stems and branches
|
|
260
|
+
for (let day = 1; day <= 30; day++) {
|
|
261
|
+
if ((day % 6) === (STEMS.indexOf(monthStem) % 6)) {
|
|
262
|
+
luckyDays.push(day);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return luckyDays.slice(0, 5); // Return top 5 lucky days
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Check if two stems are in harmony
|
|
269
|
+
*/
|
|
270
|
+
isHarmony(stem1, stem2) {
|
|
271
|
+
const harmonies = {
|
|
272
|
+
'甲': '己', '己': '甲',
|
|
273
|
+
'乙': '庚', '庚': '乙',
|
|
274
|
+
'丙': '辛', '辛': '丙',
|
|
275
|
+
'丁': '壬', '壬': '丁',
|
|
276
|
+
'戊': '癸', '癸': '戊'
|
|
277
|
+
};
|
|
278
|
+
return harmonies[stem1] === stem2;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Check if two branches clash
|
|
282
|
+
*/
|
|
283
|
+
isClash(branch1, branch2) {
|
|
284
|
+
const clashes = {
|
|
285
|
+
'子': '午', '午': '子',
|
|
286
|
+
'丑': '未', '未': '丑',
|
|
287
|
+
'寅': '申', '申': '寅',
|
|
288
|
+
'卯': '酉', '酉': '卯',
|
|
289
|
+
'辰': '戌', '戌': '辰',
|
|
290
|
+
'巳': '亥', '亥': '巳'
|
|
291
|
+
};
|
|
292
|
+
return clashes[branch1] === branch2;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Check if element is unfavorable
|
|
296
|
+
*/
|
|
297
|
+
isUnfavorable(element, yongShen) {
|
|
298
|
+
const unfavorableMap = {
|
|
299
|
+
'木': ['金'],
|
|
300
|
+
'火': ['水'],
|
|
301
|
+
'土': ['木'],
|
|
302
|
+
'金': ['火'],
|
|
303
|
+
'水': ['土']
|
|
304
|
+
};
|
|
305
|
+
return yongShen.some(ys => unfavorableMap[ys]?.includes(element));
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Get health focus areas based on element
|
|
309
|
+
*/
|
|
310
|
+
getHealthFocus(element) {
|
|
311
|
+
const healthMap = {
|
|
312
|
+
'木': ['liver_health', 'eye_care', 'emotional_balance'],
|
|
313
|
+
'火': ['heart_health', 'blood_circulation', 'sleep_quality'],
|
|
314
|
+
'土': ['digestive_health', 'immune_system', 'grounding'],
|
|
315
|
+
'金': ['respiratory_health', 'skin_care', 'detoxification'],
|
|
316
|
+
'水': ['kidney_health', 'bone_strength', 'hydration']
|
|
317
|
+
};
|
|
318
|
+
return healthMap[element] || [];
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Get fortune description based on rating
|
|
322
|
+
*/
|
|
323
|
+
getFortuneDescription(rating) {
|
|
324
|
+
if (rating >= 85)
|
|
325
|
+
return '优秀';
|
|
326
|
+
if (rating >= 70)
|
|
327
|
+
return 'very_good';
|
|
328
|
+
if (rating >= 55)
|
|
329
|
+
return '良好';
|
|
330
|
+
if (rating >= 40)
|
|
331
|
+
return '一般';
|
|
332
|
+
if (rating >= 25)
|
|
333
|
+
return '挑战';
|
|
334
|
+
return '困难';
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
exports.LiuYueCalculator = LiuYueCalculator;
|
|
338
|
+
//# sourceMappingURL=LiuYueCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiuYueCalculator.js","sourceRoot":"","sources":["../../../../src/services/bazi/calculators/LiuYueCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Luck Cycle Calculator
|
|
3
|
+
* Implements taro-bazi's complete luck cycle system
|
|
4
|
+
* Handles DaYun (大運), LiuNian (流年), LiuYue (流月), and LiuRi (流日)
|
|
5
|
+
*/
|
|
6
|
+
import { BaziChart, Gender } from '../types';
|
|
7
|
+
export interface LuckSequence {
|
|
8
|
+
direction: 'forward' | 'backward';
|
|
9
|
+
startAge: number;
|
|
10
|
+
startDate: Date;
|
|
11
|
+
detailedStartTime?: {
|
|
12
|
+
years: number;
|
|
13
|
+
months: number;
|
|
14
|
+
days: number;
|
|
15
|
+
hours: number;
|
|
16
|
+
};
|
|
17
|
+
deliveryYears?: string[];
|
|
18
|
+
deliveryTiming?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface DaYunPeriod {
|
|
21
|
+
index: number;
|
|
22
|
+
startAge: number;
|
|
23
|
+
endAge: number;
|
|
24
|
+
stemBranch: {
|
|
25
|
+
stem: string;
|
|
26
|
+
branch: string;
|
|
27
|
+
};
|
|
28
|
+
element: string;
|
|
29
|
+
yinYang: 'yin' | 'yang';
|
|
30
|
+
voidBranches?: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface LiuNianYear {
|
|
33
|
+
year: number;
|
|
34
|
+
age: number;
|
|
35
|
+
stemBranch: {
|
|
36
|
+
stem: string;
|
|
37
|
+
branch: string;
|
|
38
|
+
};
|
|
39
|
+
element: string;
|
|
40
|
+
yinYang: 'yin' | 'yang';
|
|
41
|
+
}
|
|
42
|
+
export interface LiuYueMonth {
|
|
43
|
+
year: number;
|
|
44
|
+
month: number;
|
|
45
|
+
stemBranch: {
|
|
46
|
+
stem: string;
|
|
47
|
+
branch: string;
|
|
48
|
+
};
|
|
49
|
+
element: string;
|
|
50
|
+
}
|
|
51
|
+
export interface LiuRiDay {
|
|
52
|
+
date: Date;
|
|
53
|
+
stemBranch: {
|
|
54
|
+
stem: string;
|
|
55
|
+
branch: string;
|
|
56
|
+
};
|
|
57
|
+
element: string;
|
|
58
|
+
}
|
|
59
|
+
export declare class LuckCycleCalculator {
|
|
60
|
+
/**
|
|
61
|
+
* Calculate delivery stems based on birth year stem
|
|
62
|
+
* Returns the stems of years when DaYun changes
|
|
63
|
+
*/
|
|
64
|
+
private static calculateDeliveryStems;
|
|
65
|
+
/**
|
|
66
|
+
* Calculate delivery timing based on solar term
|
|
67
|
+
* This should calculate the exact days after the solar term for delivery
|
|
68
|
+
*/
|
|
69
|
+
private static calculateDeliveryTiming;
|
|
70
|
+
/**
|
|
71
|
+
* Calculate void branches (空亡) for a stem-branch combination
|
|
72
|
+
*/
|
|
73
|
+
static calculateVoidBranches(stem: string, branch: string): string[];
|
|
74
|
+
/**
|
|
75
|
+
* Calculate luck sequence direction based on gender and year stem
|
|
76
|
+
* Male + Yang year OR Female + Yin year = Forward
|
|
77
|
+
* Male + Yin year OR Female + Yang year = Backward
|
|
78
|
+
*/
|
|
79
|
+
static calLuckySequence(gender: Gender, yearStem: string): 'forward' | 'backward';
|
|
80
|
+
/**
|
|
81
|
+
* Calculate the starting age and date for luck cycles
|
|
82
|
+
* Based on distance to nearest solar term (forward or backward)
|
|
83
|
+
*/
|
|
84
|
+
static calLuckyAge(birthDate: Date, gender: Gender, yearStem: string): LuckSequence;
|
|
85
|
+
/**
|
|
86
|
+
* Calculate complete list of 10-year luck pillars (大運)
|
|
87
|
+
* Usually calculates 8-10 periods covering 80-100 years
|
|
88
|
+
*/
|
|
89
|
+
static calLuckyList(chart: BaziChart, gender: Gender, birthDate: Date, numberOfPeriods?: number): DaYunPeriod[];
|
|
90
|
+
/**
|
|
91
|
+
* Calculate fleeting year list (流年)
|
|
92
|
+
* Returns yearly pillars for specified years
|
|
93
|
+
*/
|
|
94
|
+
static calFleetingYearList(birthYear: number, years: number[]): LiuNianYear[];
|
|
95
|
+
/**
|
|
96
|
+
* Calculate fleeting month list (流月)
|
|
97
|
+
* Returns monthly pillars for a specific year
|
|
98
|
+
*/
|
|
99
|
+
static calFleetingMonthList(year: number): LiuYueMonth[];
|
|
100
|
+
/**
|
|
101
|
+
* Calculate fleeting day list (流日)
|
|
102
|
+
* Returns daily pillars for a specific month
|
|
103
|
+
*/
|
|
104
|
+
static calFleetingDayList(year: number, month: number): LiuRiDay[];
|
|
105
|
+
/**
|
|
106
|
+
* Get current DaYun period for a specific age
|
|
107
|
+
*/
|
|
108
|
+
static getCurrentDaYun(daYunList: DaYunPeriod[], age: number): DaYunPeriod | null;
|
|
109
|
+
/**
|
|
110
|
+
* Get current LiuNian for a specific year
|
|
111
|
+
*/
|
|
112
|
+
static getCurrentLiuNian(birthYear: number, currentYear: number): LiuNianYear;
|
|
113
|
+
/**
|
|
114
|
+
* Calculate interaction between DaYun and LiuNian
|
|
115
|
+
* Returns analysis of their combined influence
|
|
116
|
+
*/
|
|
117
|
+
static analyzeDaYunLiuNian(daYun: DaYunPeriod, liuNian: LiuNianYear): {
|
|
118
|
+
stemRelation: string;
|
|
119
|
+
branchRelation: string;
|
|
120
|
+
elementalBalance: string;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=LuckCycleCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LuckCycleCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/bazi/calculators/LuckCycleCalculator.ts"],"names":[],"mappings":"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"}
|