feat: 梅花易数证据链架构 + 64卦爻辞
This commit is contained in:
1 parent
0a7858bc98
commit
cea8e012b5
4 files changed
+1364
-1
No files matched your search
@@ -1,5 +1,6 @@
|
||||
import { getTrigramByNumber, getRelation, WUXING_SHENG, WUXING_KE, TRIGRAMS } from './trigrams.js';
|
||||
import { getHexagram, getChangedHexagram, getMutualHexagram } from './hexagrams.js';
|
||||
import { buildEvidence, type MeihuaEvidenceAnalysis } from './evidence.js';
|
||||
|
||||
// 排盘输入
|
||||
export interface HuaInput {
|
||||
@@ -44,6 +45,8 @@ export interface HuaResult {
|
||||
question?: string;
|
||||
timestamp: string;
|
||||
};
|
||||
// 证据链(增强层,可选)
|
||||
evidence?: MeihuaEvidenceAnalysis;
|
||||
}
|
||||
|
||||
// 获取当前节气(用于判断旺衰)
|
||||
@@ -136,7 +139,7 @@ export function calculateHua(input: HuaInput): HuaResult {
|
||||
const yongWang = isElementWang(yongTrigram.element, season);
|
||||
const wangAnalysis = `当令${season}。体卦${tiTrigram.element}${tiWang ? '旺' : '衰'},用卦${yongTrigram.element}${yongWang ? '旺' : '衰'}。`;
|
||||
|
||||
return {
|
||||
const result: HuaResult = {
|
||||
mainHexagram: { upper: upperTrigram, lower: lowerTrigram, hexagram: mainHex },
|
||||
tiGua: { trigram: tiTrigram, position: tiPosition },
|
||||
yongGua: { trigram: yongTrigram, position: yongPosition },
|
||||
@@ -152,4 +155,9 @@ export function calculateHua(input: HuaInput): HuaResult {
|
||||
timestamp: new Date().toISOString(),
|
||||
},
|
||||
};
|
||||
|
||||
// 生成证据链
|
||||
result.evidence = buildEvidence(result);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,625 @@
|
||||
/**
|
||||
* 梅花易数证据链架构
|
||||
* 参考 mingyu 项目的 evidence 模式,为排盘结果增加结构化证据链
|
||||
*
|
||||
* 核心原则:
|
||||
* - 每个 fact 必须有具体的 limitation(不能是泛泛免责)
|
||||
* - 证据链是增强层,不破坏现有排盘流程
|
||||
* - 支持/约束/反证三位一体
|
||||
*/
|
||||
|
||||
import { WUXING_SHENG, WUXING_KE, getTrigramByNumber } from './trigrams.js';
|
||||
import type { HuaResult } from './analysis.js';
|
||||
import { getTraditionalText } from './tradition.js';
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// 类型定义
|
||||
// ═══════════════════════════════════════════
|
||||
|
||||
/** 证据阶段键 */
|
||||
export type MeihuaStageKey = 'origin' | 'process' | 'result';
|
||||
|
||||
/** MeihuaFact 基础接口 — 所有 fact 的公共字段 */
|
||||
export interface MeihuaFact {
|
||||
key: string;
|
||||
status: string;
|
||||
promptText: string;
|
||||
sources: string[];
|
||||
limitation: string;
|
||||
}
|
||||
|
||||
/** 卦象结构事实 */
|
||||
export interface HexagramStructureFact extends MeihuaFact {
|
||||
stage: MeihuaStageKey;
|
||||
label: '主卦' | '互卦' | '变卦';
|
||||
hexagramName: string;
|
||||
symbol: string;
|
||||
upperTrigram: string;
|
||||
lowerTrigram: string;
|
||||
nature: string;
|
||||
judgment: string;
|
||||
}
|
||||
|
||||
/** 阶段体用事实 */
|
||||
export interface StageEvidence extends MeihuaFact {
|
||||
stage: MeihuaStageKey;
|
||||
label: string;
|
||||
hexagramName: string;
|
||||
ti: { name: string; element: string; seasonState: string };
|
||||
yong: { name: string; element: string; seasonState: string };
|
||||
relation: string;
|
||||
support: string[];
|
||||
constraints: string[];
|
||||
basis: string;
|
||||
}
|
||||
|
||||
/** 阶段推进事实(主→互→变的体用关系变化) */
|
||||
export interface TransitionFact extends MeihuaFact {
|
||||
fromStageKey: string;
|
||||
toStageKey: string;
|
||||
fromStage: MeihuaStageKey;
|
||||
toStage: MeihuaStageKey;
|
||||
fromRelation: string;
|
||||
toRelation: string;
|
||||
}
|
||||
|
||||
/** 反证事实 */
|
||||
export interface CounterEvidenceFact extends MeihuaFact {
|
||||
ownerStageKey: string;
|
||||
stage: MeihuaStageKey;
|
||||
type: '体用关系限制' | '体卦月令限制' | '用卦月令限制' | '现实复核限制';
|
||||
detail: string;
|
||||
}
|
||||
|
||||
/** 应期事实 */
|
||||
export interface TimingFact extends MeihuaFact {
|
||||
order: number;
|
||||
type: '动爻层位' | '月建旺衰' | '体卦状态' | '原应期条件';
|
||||
rawText?: string;
|
||||
}
|
||||
|
||||
/** 传统文本事实(卦辞/爻辞) */
|
||||
export interface TraditionalTextFact extends MeihuaFact {
|
||||
stage: '主卦' | '互卦' | '变卦';
|
||||
hexagram: string;
|
||||
kind: '卦辞' | '爻辞' | '用辞';
|
||||
yaoPosition?: number;
|
||||
applicability: '当前卦辞辅助' | '当前动爻辅助' | '未发动背景' | '特殊用辞背景';
|
||||
originalText: string;
|
||||
traditionalSignals: string[];
|
||||
topicTags: string[];
|
||||
}
|
||||
|
||||
/** 完整的证据链分析结果 */
|
||||
export interface MeihuaEvidenceAnalysis {
|
||||
key: 'meihua:evidence';
|
||||
status: '已计算';
|
||||
// 卦象结构
|
||||
hexagramFacts: HexagramStructureFact[];
|
||||
// 阶段体用
|
||||
stages: StageEvidence[];
|
||||
// 阶段推进
|
||||
transitionFacts: TransitionFact[];
|
||||
// 反证
|
||||
counterEvidenceFacts: CounterEvidenceFact[];
|
||||
counterSummary: { status: '有明确反证' | '未见明确反证'; detail: string };
|
||||
// 应期
|
||||
timingFacts: TimingFact[];
|
||||
// 传统文本
|
||||
traditionalFacts: TraditionalTextFact[];
|
||||
// 汇总
|
||||
summary: {
|
||||
factCount: number;
|
||||
stageCount: number;
|
||||
transitionCount: number;
|
||||
counterCount: number;
|
||||
traditionalCount: number;
|
||||
timingCount: number;
|
||||
};
|
||||
// 全局限制
|
||||
limitations: string[];
|
||||
// 原始 prompt 文本
|
||||
promptText: string;
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// 限制声明常量(每个类型的具体约束)
|
||||
// ═══════════════════════════════════════════
|
||||
|
||||
const STAGE_FACT_LIMITATION =
|
||||
'阶段体用事实只描述主卦、互卦或变卦中的体用五行关系与月令旺衰;阶段标签、支持或限制不得直接解释为现实起因、过程、结果、吉凶或成功率' as const;
|
||||
|
||||
const HEXAGRAM_FACT_LIMITATION =
|
||||
'主互变卦象事实只记录当前上下经卦、卦名与卦符;不得由卦名或阶段位置直接推断现实事件、人物、吉凶、成败或应期' as const;
|
||||
|
||||
const TRANSITION_FACT_LIMITATION =
|
||||
'阶段推进事实只比较相邻已记录阶段的体用关系变化;不得把卦内先后直接写成现实事件必然按同样顺序发生,跨阶段缺口时更不得补造中间过程' as const;
|
||||
|
||||
const COUNTER_FACT_LIMITATION =
|
||||
'反证事实只表示某一阶段存在泄耗、受克、休囚死或待现实复核等限制;不得把单项反证直接写成现实失败、灾祸、伤病、损失或必然结果' as const;
|
||||
|
||||
const COUNTER_SUMMARY_LIMITATION =
|
||||
'反证汇总只说明当前阶段核验是否发现明确限制;未见明确反证不代表现实风险为零,也不得按反证数量换算吉凶总分或成功率' as const;
|
||||
|
||||
const TIMING_FACT_LIMITATION =
|
||||
'应期事实只提供动爻层位、体用生克、月令旺衰与现实条件的相对触发;不得把爻位、卦数、阶段数量或旺衰换算唯一日期,也不证明事件必然发生' as const;
|
||||
|
||||
const TRADITIONAL_FACT_LIMITATION =
|
||||
'卦辞与爻辞是《周易》传统取象原文,只用于当前主互变结构和动爻层位的辅助解释,不证明现实吉凶、婚育、疾病、伤亡、诉讼、财物得失、人物意图或固定时间结果' as const;
|
||||
|
||||
const SUMMARY_FACT_LIMITATION =
|
||||
'梅花证据汇总只统计起卦、主互变卦象、体用、推进、传统文本、反证与应期事实的覆盖情况;不得按数量生成吉凶总分、成功率、人物意图或唯一日期' as const;
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// 辅助函数
|
||||
// ═══════════════════════════════════════════
|
||||
|
||||
function unique(values: string[]): string[] {
|
||||
return Array.from(new Set(values.filter(Boolean)));
|
||||
}
|
||||
|
||||
/** 判断旺相休囚死 */
|
||||
function getSeasonState(element: string, season: string): string {
|
||||
const s = season;
|
||||
// 旺
|
||||
if ((s.includes('春') && element === '木') ||
|
||||
(s.includes('夏') && element === '火') ||
|
||||
(s.includes('秋') && element === '金') ||
|
||||
(s.includes('冬') && element === '水') ||
|
||||
(s.includes('末') && element === '土')) return '旺';
|
||||
// 相(被旺者所生)
|
||||
if ((s.includes('春') && element === '火') ||
|
||||
(s.includes('夏') && element === '土') ||
|
||||
(s.includes('秋') && element === '水') ||
|
||||
(s.includes('冬') && element === '木') ||
|
||||
(s.includes('末') && element === '金')) return '相';
|
||||
// 休(生旺者)
|
||||
if ((s.includes('春') && element === '水') ||
|
||||
(s.includes('夏') && element === '木') ||
|
||||
(s.includes('秋') && element === '土') ||
|
||||
(s.includes('冬') && element === '金') ||
|
||||
(s.includes('末') && element === '火')) return '休';
|
||||
// 囚(克旺者)
|
||||
if ((s.includes('春') && element === '金') ||
|
||||
(s.includes('夏') && element === '水') ||
|
||||
(s.includes('秋') && element === '木') ||
|
||||
(s.includes('冬') && element === '土') ||
|
||||
(s.includes('末') && element === '火')) return '囚';
|
||||
// 死(被旺者所克,或被克者)
|
||||
return '死';
|
||||
}
|
||||
|
||||
/** 体用关系 → 支持/约束 */
|
||||
function relationEvidence(relation: string): { support: string[]; constraints: string[] } {
|
||||
switch (relation) {
|
||||
case '用生体': return { support: ['外来助力生扶体卦'], constraints: [] };
|
||||
case '比和': return { support: ['体用同五行,关系同气'], constraints: ['仍须结合旺衰与现实条件'] };
|
||||
case '体克用': return { support: ['体卦对用卦具有制约能力'], constraints: ['主动推进可能伴随消耗'] };
|
||||
case '体生用': return { support: ['体卦向事项一方投入'], constraints: ['体卦存在泄耗'] };
|
||||
case '用克体': return { support: [], constraints: ['外部事项对体卦形成压力'] };
|
||||
default: return { support: [], constraints: ['现有资料不足以确定五行关系'] };
|
||||
}
|
||||
}
|
||||
|
||||
/** 旺衰 → 支持/约束 */
|
||||
function stateEvidence(role: '体' | '用', state: string): { support: string[]; constraints: string[] } {
|
||||
if (state === '旺' || state === '相') return { support: [`${role}卦得月令${state}`], constraints: [] };
|
||||
if (state === '休' || state === '囚' || state === '死') return { support: [], constraints: [`${role}卦月令${state}`] };
|
||||
return { support: [], constraints: [] };
|
||||
}
|
||||
|
||||
/** 判断五行关系(返回简化标签) */
|
||||
function getRelationLabel(tiElement: string, yongElement: string): string {
|
||||
if (tiElement === yongElement) return '比和';
|
||||
if (WUXING_SHENG[yongElement] === tiElement) return '用生体';
|
||||
if (WUXING_SHENG[tiElement] === yongElement) return '体生用';
|
||||
if (WUXING_KE[yongElement] === tiElement) return '用克体';
|
||||
if (WUXING_KE[tiElement] === yongElement) return '体克用';
|
||||
return '关系未定';
|
||||
}
|
||||
|
||||
/** 传统文本信号分类 */
|
||||
function classifyTraditionalSignals(text: string): string[] {
|
||||
const riskText = text.replace(/无咎|无悔|悔亡|无不利/g, '');
|
||||
return unique([
|
||||
/吉|亨|利|无咎|悔亡|无悔|无不利/.test(text) ? '传统有利或通达标签' : '',
|
||||
/凶|厉|吝|悔|咎|灾|不利|无攸利/.test(riskText) ? '传统风险或受限标签' : '',
|
||||
/贞|永贞/.test(text) ? '守正与持续条件标签' : '',
|
||||
/往|征|涉|行|进|退|出|入/.test(text) ? '行动与进退标签' : '',
|
||||
]);
|
||||
}
|
||||
|
||||
/** 传统文本主题分类 */
|
||||
function classifyTraditionalTopics(text: string): string[] {
|
||||
return unique([
|
||||
/女|妇|婚|归妹|孕|夫|妻/.test(text) ? '关系与婚育类象' : '',
|
||||
/死|疾|病|灾|伤|血|丧|亡/.test(text) ? '健康伤亡与损失类象' : '',
|
||||
/讼|狱|刑|伐|师|寇|攻/.test(text) ? '争议、刑罚与攻守类象' : '',
|
||||
/财|资|获|得|食|畜|货/.test(text) ? '资源与得失类象' : '',
|
||||
/年|月|日|岁|旬|三年|八月/.test(text) ? '传统时间措辞' : '',
|
||||
/王|君子|大人|小人|侯/.test(text) ? '身份与角色类象' : '',
|
||||
]);
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// 证据链生成函数
|
||||
// ═══════════════════════════════════════════
|
||||
|
||||
/**
|
||||
* 为排盘结果生成完整证据链
|
||||
* @param result calculateHua() 的返回值
|
||||
* @param input 原始输入(用于获取起卦参数)
|
||||
*/
|
||||
export function buildEvidence(result: HuaResult): MeihuaEvidenceAnalysis {
|
||||
const season = result.wangShuai.season;
|
||||
const dongYao = result.dongYao;
|
||||
const tiElement = result.wuxingAnalysis.tiElement;
|
||||
const yongElement = result.wuxingAnalysis.yongElement;
|
||||
|
||||
// ── 1. 卦象结构事实 ──
|
||||
const hexagramFacts = buildHexagramFacts(result);
|
||||
|
||||
// ── 2. 阶段体用事实 ──
|
||||
const stages = buildStageEvidence(result, season);
|
||||
|
||||
// ── 3. 阶段推进事实 ──
|
||||
const transitionFacts = buildTransitionFacts(stages);
|
||||
|
||||
// ── 4. 反证 ──
|
||||
const counterEvidenceFacts = buildCounterEvidence(stages);
|
||||
const counterSummary = {
|
||||
status: counterEvidenceFacts.length > 0 ? '有明确反证' as const : '未见明确反证' as const,
|
||||
detail: counterEvidenceFacts.length > 0
|
||||
? `发现${counterEvidenceFacts.length}条反证:${counterEvidenceFacts.map(f => f.detail).join(';')}`
|
||||
: '当前盘面未见明确反证',
|
||||
limitation: COUNTER_SUMMARY_LIMITATION,
|
||||
};
|
||||
|
||||
// ── 5. 应期 ──
|
||||
const timingFacts = buildTimingFacts(result, season);
|
||||
|
||||
// ── 6. 传统文本 ──
|
||||
const traditionalFacts = buildTraditionalFacts(result, dongYao);
|
||||
|
||||
// ── 7. 汇总 ──
|
||||
const factCount = hexagramFacts.length + stages.length + transitionFacts.length
|
||||
+ counterEvidenceFacts.length + timingFacts.length + traditionalFacts.length;
|
||||
const summary = {
|
||||
factCount,
|
||||
stageCount: stages.length,
|
||||
transitionCount: transitionFacts.length,
|
||||
counterCount: counterEvidenceFacts.length,
|
||||
traditionalCount: traditionalFacts.length,
|
||||
timingCount: timingFacts.length,
|
||||
limitation: SUMMARY_FACT_LIMITATION,
|
||||
};
|
||||
|
||||
// ── 全局限制 ──
|
||||
const limitations = [
|
||||
'梅花易数证据链仅描述卦象结构、体用五行关系与月令旺衰,不证明现实吉凶、成败、概率或固定应期',
|
||||
'传统卦辞爻辞是《周易》原文辅助,不直接对应现实事件、人物、婚育、疾病、伤亡或诉讼',
|
||||
'反证与支持仅反映盘面五行生克状态,不代表现实中的必然结果或风险为零',
|
||||
'应期分析只提供相对触发条件,不得换算为绝对日期或时间节点',
|
||||
];
|
||||
|
||||
// ── promptText ──
|
||||
const promptText = [
|
||||
...hexagramFacts.map(f => f.promptText),
|
||||
...stages.map(f => f.promptText),
|
||||
...transitionFacts.map(f => f.promptText),
|
||||
...counterEvidenceFacts.map(f => f.promptText),
|
||||
counterSummary.detail,
|
||||
...timingFacts.map(f => f.promptText),
|
||||
...traditionalFacts.map(f => f.promptText),
|
||||
].join('\n');
|
||||
|
||||
return {
|
||||
key: 'meihua:evidence',
|
||||
status: '已计算',
|
||||
hexagramFacts,
|
||||
stages,
|
||||
transitionFacts,
|
||||
counterEvidenceFacts,
|
||||
counterSummary,
|
||||
timingFacts,
|
||||
traditionalFacts,
|
||||
summary,
|
||||
limitations,
|
||||
promptText,
|
||||
};
|
||||
}
|
||||
|
||||
// ── 子生成器 ──
|
||||
|
||||
function buildHexagramFacts(result: HuaResult): HexagramStructureFact[] {
|
||||
const defs = [
|
||||
{ stage: 'origin' as MeihuaStageKey, label: '主卦' as const, hex: result.mainHexagram.hexagram, upperName: result.mainHexagram.upper.name, lowerName: result.mainHexagram.lower.name },
|
||||
{ stage: 'process' as MeihuaStageKey, label: '互卦' as const, hex: result.mutualHexagram, upperName: result.mutualHexagram.upper.name, lowerName: result.mutualHexagram.lower.name },
|
||||
{ stage: 'result' as MeihuaStageKey, label: '变卦' as const, hex: result.changedHexagram, upperName: result.changedHexagram.upper.name, lowerName: result.changedHexagram.lower.name },
|
||||
];
|
||||
return defs.map(({ stage, label, hex, upperName, lowerName }) => ({
|
||||
key: `meihua:hexagram:${stage}`,
|
||||
status: '已记录',
|
||||
stage,
|
||||
label,
|
||||
hexagramName: hex.name,
|
||||
symbol: hex.symbol,
|
||||
upperTrigram: upperName,
|
||||
lowerTrigram: lowerName,
|
||||
nature: hex.nature,
|
||||
judgment: hex.judgment,
|
||||
promptText: `${label}${hex.name}${hex.symbol},上${upperName}下${lowerName},${hex.judgment}`,
|
||||
sources: ['先天八卦取数', '六十四卦结构'],
|
||||
limitation: HEXAGRAM_FACT_LIMITATION,
|
||||
}));
|
||||
}
|
||||
|
||||
function buildStageEvidence(result: HuaResult, season: string): StageEvidence[] {
|
||||
const tiPos = result.tiGua.position;
|
||||
const yongPos = result.yongGua.position;
|
||||
|
||||
// 主卦体用
|
||||
const mainTiName = result.tiGua.trigram.name;
|
||||
const mainYongName = result.yongGua.trigram.name;
|
||||
const mainRelation = getRelationLabel(result.tiGua.trigram.element, result.yongGua.trigram.element);
|
||||
|
||||
// 互卦体用:体卦位置不变,互卦对应位置
|
||||
const mutualTiNum = tiPos === 'upper' ? result.mutualHexagram.upper : result.mutualHexagram.lower;
|
||||
const mutualYongNum = yongPos === 'upper' ? result.mutualHexagram.upper : result.mutualHexagram.lower;
|
||||
const mutualTi = getTrigramByNumber(mutualTiNum);
|
||||
const mutualYong = getTrigramByNumber(mutualYongNum);
|
||||
const mutualRelation = getRelationLabel(mutualTi.element, mutualYong.element);
|
||||
|
||||
// 变卦体用
|
||||
const changedTiNum = tiPos === 'upper' ? result.changedHexagram.upper : result.changedHexagram.lower;
|
||||
const changedYongNum = yongPos === 'upper' ? result.changedHexagram.upper : result.changedHexagram.lower;
|
||||
const changedTi = getTrigramByNumber(changedTiNum);
|
||||
const changedYong = getTrigramByNumber(changedYongNum);
|
||||
const changedRelation = getRelationLabel(changedTi.element, changedYong.element);
|
||||
|
||||
const defs = [
|
||||
{
|
||||
stage: 'origin' as MeihuaStageKey, label: '主卦', hexName: result.mainHexagram.hexagram.name,
|
||||
ti: { name: mainTiName, element: result.tiGua.trigram.element },
|
||||
yong: { name: mainYongName, element: result.yongGua.trigram.element },
|
||||
relation: mainRelation,
|
||||
basis: `动爻第${result.dongYao}爻在${result.dongYao <= 3 ? '下卦' : '上卦'},${result.dongYao <= 3 ? '上卦' : '下卦'}为体`,
|
||||
},
|
||||
{
|
||||
stage: 'process' as MeihuaStageKey, label: '互卦', hexName: result.mutualHexagram.name,
|
||||
ti: { name: mutualTi.name, element: mutualTi.element },
|
||||
yong: { name: mutualYong.name, element: mutualYong.element },
|
||||
relation: mutualRelation,
|
||||
basis: '体卦位置与主卦一致,互卦取主卦2/3/4爻为下卦、3/4/5爻为上卦',
|
||||
},
|
||||
{
|
||||
stage: 'result' as MeihuaStageKey, label: '变卦', hexName: result.changedHexagram.name,
|
||||
ti: { name: changedTi.name, element: changedTi.element },
|
||||
yong: { name: changedYong.name, element: changedYong.element },
|
||||
relation: changedRelation,
|
||||
basis: '体卦位置与主卦一致,变卦由动爻阴阳互换所得',
|
||||
},
|
||||
];
|
||||
|
||||
return defs.map(({ stage, label, hexName, ti, yong, relation, basis }) => {
|
||||
const relEv = relationEvidence(relation);
|
||||
const tiState = getSeasonState(ti.element, season);
|
||||
const yongState = getSeasonState(yong.element, season);
|
||||
const tiEv = stateEvidence('体', tiState);
|
||||
const yongEv = stateEvidence('用', yongState);
|
||||
const support = [...relEv.support, ...tiEv.support, ...yongEv.support];
|
||||
const constraints = [...relEv.constraints, ...tiEv.constraints, ...yongEv.constraints];
|
||||
const promptText = `${label}${hexName}:体卦${ti.name}${ti.element}(月令${tiState}),用卦${yong.name}${yong.element}(月令${yongState}),关系${relation};依据:${basis};支持:${support.join('、') || '未见额外增强'};限制:${constraints.join('、') || '未见明确盘内限制'}`;
|
||||
return {
|
||||
key: `meihua:stage:${stage}`,
|
||||
status: '已计算',
|
||||
stage,
|
||||
label,
|
||||
hexagramName: hexName,
|
||||
ti: { ...ti, seasonState: tiState },
|
||||
yong: { ...yong, seasonState: yongState },
|
||||
relation,
|
||||
support,
|
||||
constraints,
|
||||
basis,
|
||||
promptText,
|
||||
sources: ['动爻所在经卦定体用规则', '主卦、互卦、变卦上下经卦五行', `月建${season}与五行旺相休囚死关系`],
|
||||
limitation: STAGE_FACT_LIMITATION,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function buildTransitionFacts(stages: StageEvidence[]): TransitionFact[] {
|
||||
const transitions: TransitionFact[] = [];
|
||||
for (let i = 0; i < stages.length - 1; i++) {
|
||||
const from = stages[i];
|
||||
const to = stages[i + 1];
|
||||
const changed = from.relation !== to.relation;
|
||||
transitions.push({
|
||||
key: `meihua:transition:${from.stage}-${to.stage}`,
|
||||
status: '连续',
|
||||
fromStageKey: from.key,
|
||||
toStageKey: to.key,
|
||||
fromStage: from.stage,
|
||||
toStage: to.stage,
|
||||
fromRelation: from.relation,
|
||||
toRelation: to.relation,
|
||||
promptText: `${from.label}→${to.label}:体用关系由「${from.relation}」${changed ? '变为' : '保持'}「${to.relation}」${changed ? ',存在变化' : ',关系稳定'}`,
|
||||
sources: ['阶段体用关系比较'],
|
||||
limitation: TRANSITION_FACT_LIMITATION,
|
||||
});
|
||||
}
|
||||
return transitions;
|
||||
}
|
||||
|
||||
function buildCounterEvidence(stages: StageEvidence[]): CounterEvidenceFact[] {
|
||||
const counters: CounterEvidenceFact[] = [];
|
||||
for (const stage of stages) {
|
||||
// 体卦受克
|
||||
if (stage.relation === '用克体') {
|
||||
counters.push({
|
||||
key: `meihua:counter:${stage.stage}:用克体`,
|
||||
ownerStageKey: stage.key,
|
||||
stage: stage.stage,
|
||||
type: '体用关系限制',
|
||||
status: '已触发',
|
||||
detail: `${stage.label}体卦${stage.ti.name}${stage.ti.element}受用卦${stage.yong.name}${stage.yong.element}克制`,
|
||||
promptText: `反证:${stage.label}体卦${stage.ti.name}受用卦${stage.yong.name}克制,存在外来压力`,
|
||||
sources: ['五行克关系'],
|
||||
limitation: COUNTER_FACT_LIMITATION,
|
||||
});
|
||||
}
|
||||
// 体生用(泄耗)
|
||||
if (stage.relation === '体生用') {
|
||||
counters.push({
|
||||
key: `meihua:counter:${stage.stage}:体生用`,
|
||||
ownerStageKey: stage.key,
|
||||
stage: stage.stage,
|
||||
type: '体用关系限制',
|
||||
status: '已触发',
|
||||
detail: `${stage.label}体卦${stage.ti.name}${stage.ti.element}生用卦${stage.yong.name}${stage.yong.element},体卦泄耗`,
|
||||
promptText: `反证:${stage.label}体卦${stage.ti.name}生用卦${stage.yong.name},体卦存在泄耗`,
|
||||
sources: ['五行生关系'],
|
||||
limitation: COUNTER_FACT_LIMITATION,
|
||||
});
|
||||
}
|
||||
// 体卦休囚死
|
||||
if (['休', '囚', '死'].includes(stage.ti.seasonState)) {
|
||||
counters.push({
|
||||
key: `meihua:counter:${stage.stage}:体卦${stage.ti.seasonState}`,
|
||||
ownerStageKey: stage.key,
|
||||
stage: stage.stage,
|
||||
type: '体卦月令限制',
|
||||
status: '已触发',
|
||||
detail: `${stage.label}体卦${stage.ti.name}${stage.ti.element}月令${stage.ti.seasonState},不得时`,
|
||||
promptText: `反证:${stage.label}体卦${stage.ti.name}月令${stage.ti.seasonState},体卦不得时`,
|
||||
sources: ['月令旺衰'],
|
||||
limitation: COUNTER_FACT_LIMITATION,
|
||||
});
|
||||
}
|
||||
}
|
||||
return counters;
|
||||
}
|
||||
|
||||
function buildTimingFacts(result: HuaResult, season: string): TimingFact[] {
|
||||
const facts: TimingFact[] = [];
|
||||
const tiElement = result.tiGua.trigram.element;
|
||||
|
||||
// 动爻层位
|
||||
facts.push({
|
||||
key: 'meihua:timing:dongYao',
|
||||
order: 1,
|
||||
type: '动爻层位',
|
||||
status: '已计算',
|
||||
rawText: `动爻第${result.dongYao}爻`,
|
||||
promptText: `应期参考:动爻第${result.dongYao}爻(${result.dongYao <= 3 ? '下卦' : '上卦'}),动爻所在经卦为用卦`,
|
||||
sources: ['动爻位置'],
|
||||
limitation: TIMING_FACT_LIMITATION,
|
||||
});
|
||||
|
||||
// 月建旺衰
|
||||
facts.push({
|
||||
key: 'meihua:timing:season',
|
||||
order: 2,
|
||||
type: '月建旺衰',
|
||||
status: '已计算',
|
||||
rawText: season,
|
||||
promptText: `应期参考:当令${season},体卦${tiElement}${result.wangShuai.tiWang ? '旺' : '衰'}`,
|
||||
sources: ['月令旺衰'],
|
||||
limitation: TIMING_FACT_LIMITATION,
|
||||
});
|
||||
|
||||
// 体卦状态
|
||||
const tiState = getSeasonState(tiElement, season);
|
||||
facts.push({
|
||||
key: 'meihua:timing:tiState',
|
||||
order: 3,
|
||||
type: '体卦状态',
|
||||
status: '已计算',
|
||||
rawText: `体卦${result.tiGua.trigram.name}${tiElement}月令${tiState}`,
|
||||
promptText: `应期参考:体卦${result.tiGua.trigram.name}${tiElement}月令${tiState},${tiState === '旺' || tiState === '相' ? '体旺则应期近' : '体衰则应期远或需待旺时'}`,
|
||||
sources: ['体卦月令状态'],
|
||||
limitation: TIMING_FACT_LIMITATION,
|
||||
});
|
||||
|
||||
return facts;
|
||||
}
|
||||
|
||||
function buildTraditionalFacts(result: HuaResult, dongYao: number): TraditionalTextFact[] {
|
||||
const stages = [
|
||||
{ stage: '主卦' as const, upperNum: result.mainHexagram.upper.number, lowerNum: result.mainHexagram.lower.number, hexName: result.mainHexagram.hexagram.name, judgment: result.mainHexagram.hexagram.judgment },
|
||||
{ stage: '互卦' as const, upperNum: result.mutualHexagram.upper as number, lowerNum: result.mutualHexagram.lower as number, hexName: result.mutualHexagram.name, judgment: result.mutualHexagram.judgment },
|
||||
{ stage: '变卦' as const, upperNum: result.changedHexagram.upper as number, lowerNum: result.changedHexagram.lower as number, hexName: result.changedHexagram.name, judgment: result.changedHexagram.judgment },
|
||||
];
|
||||
|
||||
const facts: TraditionalTextFact[] = [];
|
||||
|
||||
for (const { stage, upperNum, lowerNum, hexName, judgment } of stages) {
|
||||
const text = getTraditionalText(upperNum, lowerNum);
|
||||
if (!text) continue;
|
||||
|
||||
// 卦辞
|
||||
const judgmentSignals = classifyTraditionalSignals(judgment);
|
||||
const judgmentTopics = classifyTraditionalTopics(judgment);
|
||||
facts.push({
|
||||
key: `${stage}:${hexName}:卦辞`,
|
||||
status: '已映射',
|
||||
stage,
|
||||
hexagram: hexName,
|
||||
kind: '卦辞',
|
||||
applicability: '当前卦辞辅助',
|
||||
originalText: judgment,
|
||||
promptText: `${stage}${hexName}卦辞「${judgment}」包含${judgmentSignals.join('、') || '未见明确标签'},涉及${judgmentTopics.join('、') || '通用处境类象'};只作为该阶段卦象的传统分类辅助`,
|
||||
traditionalSignals: judgmentSignals,
|
||||
topicTags: judgmentTopics,
|
||||
sources: ['《周易》卦辞', '六十四卦原文资料'],
|
||||
limitation: TRADITIONAL_FACT_LIMITATION,
|
||||
});
|
||||
|
||||
// 爻辞
|
||||
for (let i = 0; i < text.yaoCi.length; i++) {
|
||||
const yaoPosition = i + 1;
|
||||
const isMoving = stage === '主卦' && yaoPosition === dongYao;
|
||||
const yaoText = text.yaoCi[i];
|
||||
const yaoSignals = classifyTraditionalSignals(yaoText);
|
||||
const yaoTopics = classifyTraditionalTopics(yaoText);
|
||||
facts.push({
|
||||
key: `${stage}:${hexName}:爻辞:${yaoPosition}`,
|
||||
status: '已映射',
|
||||
stage,
|
||||
hexagram: hexName,
|
||||
kind: '爻辞',
|
||||
yaoPosition,
|
||||
applicability: isMoving ? '当前动爻辅助' : '未发动背景',
|
||||
originalText: yaoText,
|
||||
promptText: `${stage}${hexName}第${yaoPosition}爻「${yaoText}」包含${yaoSignals.join('、') || '未见明确标签'},涉及${yaoTopics.join('、') || '通用处境类象'};${isMoving ? '当前爻位已发动,可作为动爻层位的传统辅助' : '当前爻位未发动,不作为独立判断依据'}`,
|
||||
traditionalSignals: yaoSignals,
|
||||
topicTags: yaoTopics,
|
||||
sources: ['《周易》爻辞', '六十四卦逐爻原文资料'],
|
||||
limitation: TRADITIONAL_FACT_LIMITATION,
|
||||
});
|
||||
}
|
||||
|
||||
// 用辞(乾坤)
|
||||
if (text.yongCi) {
|
||||
const yongSignals = classifyTraditionalSignals(text.yongCi);
|
||||
const yongTopics = classifyTraditionalTopics(text.yongCi);
|
||||
facts.push({
|
||||
key: `${stage}:${hexName}:用辞`,
|
||||
status: '已映射',
|
||||
stage,
|
||||
hexagram: hexName,
|
||||
kind: '用辞',
|
||||
applicability: '特殊用辞背景',
|
||||
originalText: text.yongCi,
|
||||
promptText: `${stage}${hexName}用辞「${text.yongCi}」包含${yongSignals.join('、') || '未见明确标签'},涉及${yongTopics.join('、') || '通用处境类象'};本次采用单动爻起卦,不满足六爻皆变的特殊用辞条件`,
|
||||
traditionalSignals: yongSignals,
|
||||
topicTags: yongTopics,
|
||||
sources: ['《周易》乾坤用九用六', '六十四卦特殊用辞资料'],
|
||||
limitation: TRADITIONAL_FACT_LIMITATION,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return facts;
|
||||
}
|
||||
@@ -91,5 +91,55 @@ ${mutual.fullName} (${mutual.symbol})
|
||||
卦辞:${mutual.judgment}
|
||||
`;
|
||||
|
||||
// 证据链摘要
|
||||
if (r.evidence) {
|
||||
const ev = r.evidence;
|
||||
text += `
|
||||
───────────────────────────────────
|
||||
证 据 链
|
||||
───────────────────────────────────
|
||||
`;
|
||||
// 阶段体用
|
||||
for (const s of ev.stages) {
|
||||
text += `【${s.label}】${s.hexagramName}:体${s.ti.name}${s.ti.element}(${s.ti.seasonState})vs 用${s.yong.name}${s.yong.element}(${s.yong.seasonState})→ ${s.relation}
|
||||
`;
|
||||
}
|
||||
// 推进
|
||||
if (ev.transitionFacts.length > 0) {
|
||||
text += `
|
||||
【阶段推进】
|
||||
`;
|
||||
for (const t of ev.transitionFacts) {
|
||||
text += ` ${t.promptText}
|
||||
`;
|
||||
}
|
||||
}
|
||||
// 反证
|
||||
text += `
|
||||
【反证】${ev.counterSummary.detail}
|
||||
`;
|
||||
// 应期
|
||||
if (ev.timingFacts.length > 0) {
|
||||
text += `
|
||||
【应期参考】
|
||||
`;
|
||||
for (const t of ev.timingFacts) {
|
||||
text += ` ${t.promptText}
|
||||
`;
|
||||
}
|
||||
}
|
||||
// 传统文本(仅动爻爻辞)
|
||||
const movingYaoFacts = ev.traditionalFacts.filter(f => f.applicability === '当前动爻辅助');
|
||||
if (movingYaoFacts.length > 0) {
|
||||
text += `
|
||||
【动爻爻辞】
|
||||
`;
|
||||
for (const f of movingYaoFacts) {
|
||||
text += ` ${f.originalText}
|
||||
`;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
@@ -0,0 +1,680 @@
|
||||
/**
|
||||
* 64卦传统文本数据 — 爻辞、用辞
|
||||
* 来源:《周易》原文
|
||||
* 数据结构:上卦×下卦 → { yaoCi[6], yongCi? }
|
||||
*/
|
||||
|
||||
export interface TraditionalText {
|
||||
yaoCi: string[]; // 六爻爻辞(初爻→上爻)
|
||||
yongCi?: string; // 用九/用辞(仅乾、坤等特殊卦)
|
||||
}
|
||||
|
||||
// 上卦×下卦 → 传统文本
|
||||
const TEXTS: Record<string, TraditionalText> = {
|
||||
// ── 乾宫 ──
|
||||
'1,1': { // 乾为天
|
||||
yaoCi: [
|
||||
'初九:潜龙勿用。',
|
||||
'九二:见龙在田,利见大人。',
|
||||
'九三:君子终日乾乾,夕惕若厉,无咎。',
|
||||
'九四:或跃在渊,无咎。',
|
||||
'九五:飞龙在天,利见大人。',
|
||||
'上九:亢龙有悔。',
|
||||
],
|
||||
yongCi: '用九:见群龙无首,吉。',
|
||||
},
|
||||
'1,2': { // 天泽履
|
||||
yaoCi: [
|
||||
'初九:素履,往无咎。',
|
||||
'九二:履道坦坦,幽人贞吉。',
|
||||
'六三:眇能视,跛能履,履虎尾,咥人凶。武人为于大君。',
|
||||
'九四:履虎尾,愬愬终吉。',
|
||||
'九五:夬履,贞厉。',
|
||||
'上九:视履考祥,其旋元吉。',
|
||||
],
|
||||
},
|
||||
'1,3': { // 天火同人
|
||||
yaoCi: [
|
||||
'初九:同人于门,无咎。',
|
||||
'六二:同人于宗,吝。',
|
||||
'九三:伏戎于莽,升其高陵,三岁不兴。',
|
||||
'九四:乘其墉,弗克攻,吉。',
|
||||
'九五:同人先号咷而后笑,大师克相遇。',
|
||||
'上九:同人于郊,无悔。',
|
||||
],
|
||||
},
|
||||
'1,4': { // 天雷无妄
|
||||
yaoCi: [
|
||||
'初九:无妄,往吉。',
|
||||
'六二:不耕获,不菑畲,则利有攸往。',
|
||||
'六三:无妄之灾,或系之牛,行人之得,邑人之灾。',
|
||||
'九四:可贞,无咎。',
|
||||
'九五:无妄之疾,勿药有喜。',
|
||||
'上九:无妄,行有眚,无攸利。',
|
||||
],
|
||||
},
|
||||
'1,5': { // 天风姤
|
||||
yaoCi: [
|
||||
'初六:系于金柅,贞吉。有攸往,见凶。羸豕孚蹢躅。',
|
||||
'九二:包有鱼,无咎,不利宾。',
|
||||
'九三:臀无肤,其行次且,厉,无大咎。',
|
||||
'九四:包无鱼,起凶。',
|
||||
'九五:以杞包瓜,含章,有陨自天。',
|
||||
'上九:姤其角,吝,无咎。',
|
||||
],
|
||||
},
|
||||
'1,6': { // 天水讼
|
||||
yaoCi: [
|
||||
'初六:不永所事,小有言,终吉。',
|
||||
'九二:不克讼,归而逋,其邑人三百户无眚。',
|
||||
'六三:食旧德,贞厉,终吉。或从王事,无成。',
|
||||
'九四:不克讼,复即命渝,安贞吉。',
|
||||
'九五:讼,元吉。',
|
||||
'上九:或锡之鞶带,终朝三褫之。',
|
||||
],
|
||||
},
|
||||
'1,7': { // 天山遁
|
||||
yaoCi: [
|
||||
'初六:遁尾,厉,勿用有攸往。',
|
||||
'六二:执之用黄牛之革,莫之胜说。',
|
||||
'九三:系遁,有疾厉。畜臣妾吉。',
|
||||
'九四:好遁,君子吉,小人否。',
|
||||
'九五:嘉遁,贞吉。',
|
||||
'上九:肥遁,无不利。',
|
||||
],
|
||||
},
|
||||
'1,8': { // 天地否
|
||||
yaoCi: [
|
||||
'初六:拔茅茹以其汇,贞吉亨。',
|
||||
'六二:包承,小人吉,大人否亨。',
|
||||
'六三:包羞。',
|
||||
'九四:有命无咎,畴离祉。',
|
||||
'九五:休否,大人吉。其亡其亡,系于苞桑。',
|
||||
'上九:倾否,先否后喜。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 兑宫 ──
|
||||
'2,1': { // 泽天夬
|
||||
yaoCi: [
|
||||
'初九:壮于前趾,往不胜为咎。',
|
||||
'九二:惕号,莫夜有戎,勿恤。',
|
||||
'九三:壮于頄,有凶。君子夬夬独行,遇雨若濡,有愠无咎。',
|
||||
'九四:臀无肤,其行次且。牵羊悔亡,闻言不信。',
|
||||
'九五:苋陆夬夬,中行无咎。',
|
||||
'上六:无号,终有凶。',
|
||||
],
|
||||
},
|
||||
'2,2': { // 兑为泽
|
||||
yaoCi: [
|
||||
'初九:和兑,吉。',
|
||||
'九二:孚兑,吉,悔亡。',
|
||||
'六三:来兑,凶。',
|
||||
'九四:商兑未宁,介疾有喜。',
|
||||
'九五:孚于剥,有厉。',
|
||||
'上六:引兑。',
|
||||
],
|
||||
},
|
||||
'2,3': { // 泽火革
|
||||
yaoCi: [
|
||||
'初九:巩用黄牛之革。',
|
||||
'六二:己日乃革之,征吉,无咎。',
|
||||
'九三:征凶,贞厉。革言三就,有孚。',
|
||||
'九四:悔亡,有孚改命,吉。',
|
||||
'九五:大人虎变,未占有孚。',
|
||||
'上六:君子豹变,小人革面。征凶,居贞吉。',
|
||||
],
|
||||
},
|
||||
'2,4': { // 泽雷随
|
||||
yaoCi: [
|
||||
'初九:官有渝,贞吉。出门交有功。',
|
||||
'六二:系小子,失丈夫。',
|
||||
'六三:系丈夫,失小子。随有求得,利居贞。',
|
||||
'九四:随有获,贞凶。有孚在道,以明,何咎。',
|
||||
'九五:孚于嘉,吉。',
|
||||
'上六:拘系之,乃从维之。王用亨于西山。',
|
||||
],
|
||||
},
|
||||
'2,5': { // 泽风大过
|
||||
yaoCi: [
|
||||
'初六:藉用白茅,无咎。',
|
||||
'九二:枯杨生稊,老夫得其女妻,无不利。',
|
||||
'九三:栋桡,凶。',
|
||||
'九四:栋隆,吉。有它吝。',
|
||||
'九五:枯杨生华,老妇得其士夫,无咎无誉。',
|
||||
'上六:过涉灭顶,凶,无咎。',
|
||||
],
|
||||
},
|
||||
'2,6': { // 泽水困
|
||||
yaoCi: [
|
||||
'初六:臀困于株木,入于幽谷,三岁不觌。',
|
||||
'九二:困于酒食,朱绂方来,利用享祀。征凶,无咎。',
|
||||
'六三:困于石,据于蒺藜,入其宫不见其妻,凶。',
|
||||
'九四:来徐徐,困于金车,吝,有终。',
|
||||
'九五:劓刖,困于赤绂,乃徐有说,利用祭祀。',
|
||||
'上六:困于葛藟,于臲卼,曰动悔。有悔,征吉。',
|
||||
],
|
||||
},
|
||||
'2,7': { // 泽山咸
|
||||
yaoCi: [
|
||||
'初六:咸其拇。',
|
||||
'六二:咸其腓,凶,居吉。',
|
||||
'九三:咸其股,执其随,往吝。',
|
||||
'九四:贞吉悔亡,憧憧往来,朋从尔思。',
|
||||
'九五:咸其脢,无悔。',
|
||||
'上六:咸其辅颊舌。',
|
||||
],
|
||||
},
|
||||
'2,8': { // 泽地萃
|
||||
yaoCi: [
|
||||
'初六:有孚不终,乃乱乃萃,若号一握为笑,勿恤,往无咎。',
|
||||
'六二:引吉,无咎。孚乃利用禴。',
|
||||
'六三:萃如嗟如,无攸利,往无咎,小吝。',
|
||||
'九四:大吉,无咎。',
|
||||
'九五:萃有位,无咎。匪孚,元永贞,悔亡。',
|
||||
'上六:赍咨涕洟,无咎。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 离宫 ──
|
||||
'3,1': { // 火天大有
|
||||
yaoCi: [
|
||||
'初九:无交害,匪咎,艰则无咎。',
|
||||
'九二:大车以载,有攸往,无咎。',
|
||||
'九三:公用亨于天子,小人弗克。',
|
||||
'九四:匪其彭,无咎。',
|
||||
'六五:厥孚交如威如,吉。',
|
||||
'上九:自天祐之,吉无不利。',
|
||||
],
|
||||
},
|
||||
'3,2': { // 火泽睽
|
||||
yaoCi: [
|
||||
'初九:悔亡。丧马勿逐,自复。见恶人,无咎。',
|
||||
'九二:遇主于巷,无咎。',
|
||||
'六三:见舆曳,其牛掣,其人天且劓,无初有终。',
|
||||
'九四:睽孤,遇元夫,交孚,厉无咎。',
|
||||
'六五:悔亡。厥宗噬肤,往何咎。',
|
||||
'上九:睽孤,见豕负涂,载鬼一车,先张之弧,后说之弧,匪寇婚媾,往遇雨则吉。',
|
||||
],
|
||||
},
|
||||
'3,3': { // 离为火
|
||||
yaoCi: [
|
||||
'初九:履错然,敬之无咎。',
|
||||
'六二:黄离,元吉。',
|
||||
'九三:日昃之离,不鼓缶而歌,则大耋之嗟,凶。',
|
||||
'九四:突如其来如,焚如,死如,弃如。',
|
||||
'六五:出涕沱若,戚嗟若,吉。',
|
||||
'上九:王用出征,有嘉折首,获匪其丑,无咎。',
|
||||
],
|
||||
},
|
||||
'3,4': { // 火雷噬嗑
|
||||
yaoCi: [
|
||||
'初九:屦校灭趾,无咎。',
|
||||
'六二:噬肤灭鼻,无咎。',
|
||||
'六三:噬腊肉,遇毒。小吝,无咎。',
|
||||
'九四:噬干胏,得金矢。利艰贞,吉。',
|
||||
'六五:噬干肉,得黄金。贞厉,无咎。',
|
||||
'上九:何校灭耳,凶。',
|
||||
],
|
||||
},
|
||||
'3,5': { // 火风鼎
|
||||
yaoCi: [
|
||||
'初六:鼎颠趾,利出否。得妾以其子,无咎。',
|
||||
'九二:鼎有实,我仇有疾,不我能即,吉。',
|
||||
'九三:鼎耳革,其行塞,雉膏不食,方雨亏悔,终吉。',
|
||||
'九四:鼎折足,覆公餗,其形渥,凶。',
|
||||
'六五:鼎黄耳金铉,利贞。',
|
||||
'上九:鼎玉铉,大吉,无不利。',
|
||||
],
|
||||
},
|
||||
'3,6': { // 火水未济
|
||||
yaoCi: [
|
||||
'初六:濡其尾,吝。',
|
||||
'九二:曳其轮,贞吉。',
|
||||
'六三:未济,征凶。利涉大川。',
|
||||
'九四:贞吉,悔亡。震用伐鬼方,三年有赏于大国。',
|
||||
'六五:贞吉,无悔。君子之光,有孚,吉。',
|
||||
'上九:有孚于饮酒,无咎。濡其首,有孚失是。',
|
||||
],
|
||||
},
|
||||
'3,7': { // 火山旅
|
||||
yaoCi: [
|
||||
'初六:旅琐琐,斯其所取灾。',
|
||||
'六二:旅即次,怀其资,得童仆贞。',
|
||||
'九三:旅焚其次,丧其童仆,贞厉。',
|
||||
'九四:旅于处,得其资斧,我心不快。',
|
||||
'六五:射雉一矢亡,终以誉命。',
|
||||
'上九:鸟焚其巢,旅人先笑后号咷。丧牛于易,凶。',
|
||||
],
|
||||
},
|
||||
'3,8': { // 火地晋
|
||||
yaoCi: [
|
||||
'初六:晋如摧如,贞吉。罔孚裕无咎。',
|
||||
'六二:晋如愁如,贞吉。受兹介福于其王母。',
|
||||
'六三:众允,悔亡。',
|
||||
'九四:晋如鼫鼠,贞厉。',
|
||||
'六五:悔亡。失得勿恤。往吉,无不利。',
|
||||
'上九:晋其角,维用伐邑。厉吉无咎,贞吝。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 震宫 ──
|
||||
'4,1': { // 雷天大壮
|
||||
yaoCi: [
|
||||
'初九:壮于趾,征凶,有孚。',
|
||||
'九二:贞吉。',
|
||||
'九三:小人用壮,君子用罔。贞厉。羝羊触藩,羸其角。',
|
||||
'九四:贞吉悔亡。藩决不羸,壮于大舆之輹。',
|
||||
'六五:丧羊于易,无悔。',
|
||||
'上六:羝羊触藩,不能退,不能遂,无攸利。艰则吉。',
|
||||
],
|
||||
},
|
||||
'4,2': { // 雷泽归妹
|
||||
yaoCi: [
|
||||
'初九:归妹以娣,跛能履,征吉。',
|
||||
'九二:眇能视,利幽人之贞。',
|
||||
'六三:归妹以须,反归以娣。',
|
||||
'九四:归妹愆期,迟归有时。',
|
||||
'六五:帝乙归妹,其君之袂不如其娣之袂良。月几望,吉。',
|
||||
'上六:女承筐无实,士刲羊无血,无攸利。',
|
||||
],
|
||||
},
|
||||
'4,3': { // 雷火丰
|
||||
yaoCi: [
|
||||
'初九:遇其配主,虽旬无咎,往有尚。',
|
||||
'六二:丰其蔀,日中见斗,往得疑疾。有孚发若,吉。',
|
||||
'九三:丰其沛,日中见沬,折其右肱,无咎。',
|
||||
'九四:丰其蔀,日中见斗,遇其夷主,吉。',
|
||||
'六五:来章,有庆誉,吉。',
|
||||
'上六:丰其屋,蔀其家,窥其户,阒其无人,三岁不觌,凶。',
|
||||
],
|
||||
},
|
||||
'4,4': { // 震为雷
|
||||
yaoCi: [
|
||||
'初九:震来虩虩,后笑言哑哑,吉。',
|
||||
'六二:震来厉,亿丧贝。跻于九陵,勿逐,七日得。',
|
||||
'六三:震苏苏,震行无眚。',
|
||||
'九四:震遂泥。',
|
||||
'六五:震往来厉,亿无丧,有事。',
|
||||
'上六:震索索,视矍矍,征凶。震不于其躬,于其邻,无咎。婚媾有言。',
|
||||
],
|
||||
},
|
||||
'4,5': { // 雷风恒
|
||||
yaoCi: [
|
||||
'初六:浚恒,贞凶,无攸利。',
|
||||
'九二:悔亡。',
|
||||
'九三:不恒其德,或承之羞,贞吝。',
|
||||
'九四:田无禽。',
|
||||
'六五:恒其德,贞,妇人吉,夫子凶。',
|
||||
'上六:振恒,凶。',
|
||||
],
|
||||
},
|
||||
'4,6': { // 雷水解
|
||||
yaoCi: [
|
||||
'初六:无咎。',
|
||||
'九二:田获三狐,得黄矢,贞吉。',
|
||||
'六三:负且乘,致寇至,贞吝。',
|
||||
'九四:解而拇,朋至斯孚。',
|
||||
'六五:君子维有解,吉。有孚于小人。',
|
||||
'上六:公用射隼于高墉之上,获之,无不利。',
|
||||
],
|
||||
},
|
||||
'4,7': { // 雷山小过
|
||||
yaoCi: [
|
||||
'初六:飞鸟以凶。',
|
||||
'六二:过其祖,遇其妣,不及其君,遇其臣,无咎。',
|
||||
'九三:弗过防之,从或戕之,凶。',
|
||||
'九四:无咎。弗过遇之,往厉必戒,勿用永贞。',
|
||||
'六五:密云不雨,自我西郊。公弋取彼在穴。',
|
||||
'上六:弗遇过之,飞鸟离之,凶,是谓灾眚。',
|
||||
],
|
||||
},
|
||||
'4,8': { // 雷地豫
|
||||
yaoCi: [
|
||||
'初六:鸣豫,凶。',
|
||||
'六二:介于石,不终日,贞吉。',
|
||||
'六三:盱豫悔,迟有悔。',
|
||||
'九四:由豫,大有得。勿疑,朋盍簪。',
|
||||
'六五:贞疾,恒不死。',
|
||||
'上六:冥豫,成有渝,无咎。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 巽宫 ──
|
||||
'5,1': { // 风天小畜
|
||||
yaoCi: [
|
||||
'初九:复自道,何其咎,吉。',
|
||||
'九二:牵复,吉。',
|
||||
'九三:舆说辐,夫妻反目。',
|
||||
'六四:有孚,血去惕出,无咎。',
|
||||
'九五:有孚挛如,富以其邻。',
|
||||
'上九:既雨既处,尚德载。妇贞厉。月几望,君子征凶。',
|
||||
],
|
||||
},
|
||||
'5,2': { // 风泽中孚
|
||||
yaoCi: [
|
||||
'初九:虞吉,有它不燕。',
|
||||
'九二:鹤鸣在阴,其子和之。我有好爵,吾与尔靡之。',
|
||||
'六三:得敌,或鼓或罢,或泣或歌。',
|
||||
'六四:月几望,马匹亡,无咎。',
|
||||
'九五:有孚挛如,无咎。',
|
||||
'上九:翰音登于天,贞凶。',
|
||||
],
|
||||
},
|
||||
'5,3': { // 风火家人
|
||||
yaoCi: [
|
||||
'初九:闲有家,悔亡。',
|
||||
'六二:无攸遂,在中馈,贞吉。',
|
||||
'九三:家人嗃嗃,悔厉吉。妇子嘻嘻,终吝。',
|
||||
'六四:富家,大吉。',
|
||||
'九五:王假有家,勿恤,吉。',
|
||||
'上九:有孚威如,终吉。',
|
||||
],
|
||||
},
|
||||
'5,4': { // 风雷益
|
||||
yaoCi: [
|
||||
'初九:利用为大作,元吉,无咎。',
|
||||
'六二:或益之十朋之龟,弗克违,永贞吉。王用享于帝,吉。',
|
||||
'六三:益之用凶事,无咎。有孚中行,告公用圭。',
|
||||
'六四:中行告公从,利用为依迁国。',
|
||||
'九五:有孚惠心,勿问元吉。有孚惠我德。',
|
||||
'上九:莫益之,或击之,立心勿恒,凶。',
|
||||
],
|
||||
},
|
||||
'5,5': { // 巽为风
|
||||
yaoCi: [
|
||||
'初六:进退,利武人之贞。',
|
||||
'九二:巽在床下,用史巫纷若,吉,无咎。',
|
||||
'九三:频巽,吝。',
|
||||
'六四:悔亡,田获三品。',
|
||||
'九五:贞吉悔亡,无不利。无初有终。先庚三日,后庚三日,吉。',
|
||||
'上九:巽在床下,丧其资斧,贞凶。',
|
||||
],
|
||||
},
|
||||
'5,6': { // 风水涣
|
||||
yaoCi: [
|
||||
'初六:用拯马壮,吉。',
|
||||
'九二:涣奔其机,悔亡。',
|
||||
'六三:涣其躬,无悔。',
|
||||
'六四:涣其群,元吉。涣有丘,匪夷所思。',
|
||||
'九五:涣汗其大号,涣王居,无咎。',
|
||||
'上九:涣其血去逖出,无咎。',
|
||||
],
|
||||
},
|
||||
'5,7': { // 风山渐
|
||||
yaoCi: [
|
||||
'初六:鸿渐于干,小子厉,有言,无咎。',
|
||||
'六二:鸿渐于磐,饮食衎衎,吉。',
|
||||
'九三:鸿渐于陆,夫征不复,妇孕不育,凶。利御寇。',
|
||||
'六四:鸿渐于木,或得其桷,无咎。',
|
||||
'九五:鸿渐于陵,妇三岁不孕,终莫之胜,吉。',
|
||||
'上九:鸿渐于逵,其羽可用为仪,吉。',
|
||||
],
|
||||
},
|
||||
'5,8': { // 风地观
|
||||
yaoCi: [
|
||||
'初六:童观,小人无咎,君子吝。',
|
||||
'六二:窥观,利女贞。',
|
||||
'六三:观我生,进退。',
|
||||
'六四:观国之光,利用宾于王。',
|
||||
'九五:观我生,君子无咎。',
|
||||
'上九:观其生,君子无咎。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 坎宫 ──
|
||||
'6,1': { // 水天需
|
||||
yaoCi: [
|
||||
'初九:需于郊,利用恒,无咎。',
|
||||
'九二:需于沙,小有言,终吉。',
|
||||
'九三:需于泥,致寇至。',
|
||||
'六四:需于血,出自穴。',
|
||||
'九五:需于酒食,贞吉。',
|
||||
'上六:入于穴,有不速之客三人来,敬之终吉。',
|
||||
],
|
||||
},
|
||||
'6,2': { // 水泽节
|
||||
yaoCi: [
|
||||
'初九:不出户庭,无咎。',
|
||||
'九二:不出门庭,凶。',
|
||||
'六三:不节若,则嗟若,无咎。',
|
||||
'六四:安节,亨。',
|
||||
'九五:甘节,吉,往有尚。',
|
||||
'上六:苦节,贞凶,悔亡。',
|
||||
],
|
||||
},
|
||||
'6,3': { // 水火既济
|
||||
yaoCi: [
|
||||
'初九:曳其轮,濡其尾,无咎。',
|
||||
'六二:妇丧其茀,勿逐,七日得。',
|
||||
'九三:高宗伐鬼方,三年克之,小人勿用。',
|
||||
'六四:繻有衣袽,终日戒。',
|
||||
'九五:东邻杀牛,不如西邻之禴祭,实受其福。',
|
||||
'上六:濡其首,厉。',
|
||||
],
|
||||
},
|
||||
'6,4': { // 水雷屯
|
||||
yaoCi: [
|
||||
'初九:磐桓,利居贞,利建侯。',
|
||||
'六二:屯如邅如,乘马班如。匪寇,婚媾。女子贞不字,十年乃字。',
|
||||
'六三:即鹿无虞,惟入于林中,君子几不如舍,往吝。',
|
||||
'六四:乘马班如,求婚媾,往吉,无不利。',
|
||||
'九五:屯其膏,小贞吉,大贞凶。',
|
||||
'上六:乘马班如,泣血涟如。',
|
||||
],
|
||||
},
|
||||
'6,5': { // 水风井
|
||||
yaoCi: [
|
||||
'初六:井泥不食,旧井无禽。',
|
||||
'九二:井谷射鲋,瓮敝漏。',
|
||||
'九三:井渫不食,为我心恻,可用汲。王明,并受其福。',
|
||||
'六四:井甃,无咎。',
|
||||
'九五:井冽寒泉,食。',
|
||||
'上六:井收勿幕,有孚元吉。',
|
||||
],
|
||||
},
|
||||
'6,6': { // 坎为水
|
||||
yaoCi: [
|
||||
'初六:习坎,入于坎窞,凶。',
|
||||
'九二:坎有险,求小得。',
|
||||
'六三:来之坎坎,险且枕,入于坎窞,勿用。',
|
||||
'六四:樽酒簋贰,用缶,纳约自牖,终无咎。',
|
||||
'九五:坎不盈,祗既平,无咎。',
|
||||
'上六:系用徽纆,寘于丛棘,三岁不得,凶。',
|
||||
],
|
||||
},
|
||||
'6,7': { // 水山蹇
|
||||
yaoCi: [
|
||||
'初六:往蹇来誉。',
|
||||
'六二:王臣蹇蹇,匪躬之故。',
|
||||
'九三:往蹇来反。',
|
||||
'六四:往蹇来连。',
|
||||
'九五:大蹇朋来。',
|
||||
'上六:往蹇来硕,吉。利见大人。',
|
||||
],
|
||||
},
|
||||
'6,8': { // 水地比
|
||||
yaoCi: [
|
||||
'初六:有孚比之,无咎。有孚盈缶,终来有它,吉。',
|
||||
'六二:比之自内,贞吉。',
|
||||
'六三:比之匪人。',
|
||||
'六四:外比之,贞吉。',
|
||||
'九五:显比。王用三驱,失前禽。邑人不诫,吉。',
|
||||
'上六:比之无首,凶。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 艮宫 ──
|
||||
'7,1': { // 山天大畜
|
||||
yaoCi: [
|
||||
'初九:有厉,利已。',
|
||||
'九二:舆说輹。',
|
||||
'九三:良马逐,利艰贞。曰闲舆卫,利有攸往。',
|
||||
'六四:童牛之牿,元吉。',
|
||||
'六五:豶豕之牙,吉。',
|
||||
'上九:何天之衢,亨。',
|
||||
],
|
||||
},
|
||||
'7,2': { // 山泽损
|
||||
yaoCi: [
|
||||
'初九:已事遄往,无咎。酌损之。',
|
||||
'九二:利贞,征凶。弗损益之。',
|
||||
'六三:三人行则损一人,一人行则得其友。',
|
||||
'六四:损其疾,使遄有喜,无咎。',
|
||||
'六五:或益之十朋之龟,弗克违,元吉。',
|
||||
'上九:弗损益之,无咎,贞吉。利有攸往,得臣无家。',
|
||||
],
|
||||
},
|
||||
'7,3': { // 山火贲
|
||||
yaoCi: [
|
||||
'初九:贲其趾,舍车而徒。',
|
||||
'六二:贲其须。',
|
||||
'九三:贲如濡如,永贞吉。',
|
||||
'六四:贲如皤如,白马翰如,匪寇婚媾。',
|
||||
'六五:贲于丘园,束帛戋戋,吝,终吉。',
|
||||
'上九:白贲,无咎。',
|
||||
],
|
||||
},
|
||||
'7,4': { // 山雷颐
|
||||
yaoCi: [
|
||||
'初九:舍尔灵龟,观我朵颐,凶。',
|
||||
'六二:颠颐,拂经于丘颐,征凶。',
|
||||
'六三:拂颐,贞凶,十年勿用,无攸利。',
|
||||
'六四:颠颐,吉。虎视眈眈,其欲逐逐,无咎。',
|
||||
'六五:拂经,居贞吉,不可涉大川。',
|
||||
'上九:由颐,厉吉,利涉大川。',
|
||||
],
|
||||
},
|
||||
'7,5': { // 山风蛊
|
||||
yaoCi: [
|
||||
'初六:干父之蛊,有子,考无咎,厉终吉。',
|
||||
'九二:干母之蛊,不可贞。',
|
||||
'九三:干父之蛊,小有悔,无大咎。',
|
||||
'六四:裕父之蛊,往见吝。',
|
||||
'六五:干父之蛊,用誉。',
|
||||
'上九:不事王侯,高尚其事。',
|
||||
],
|
||||
},
|
||||
'7,6': { // 山水蒙
|
||||
yaoCi: [
|
||||
'初六:发蒙,利用刑人,用说桎梏,以往吝。',
|
||||
'九二:包蒙吉。纳妇吉。子克家。',
|
||||
'六三:勿用取女,见金夫,不有躬,无攸利。',
|
||||
'六四:困蒙,吝。',
|
||||
'六五:童蒙,吉。',
|
||||
'上九:击蒙,不利为寇,利御寇。',
|
||||
],
|
||||
},
|
||||
'7,7': { // 艮为山
|
||||
yaoCi: [
|
||||
'初六:艮其趾,无咎,利永贞。',
|
||||
'六二:艮其腓,不拯其随,其心不快。',
|
||||
'九三:艮其限,列其夤,厉薰心。',
|
||||
'六四:艮其身,无咎。',
|
||||
'六五:艮其辅,言有序,悔亡。',
|
||||
'上九:敦艮,吉。',
|
||||
],
|
||||
},
|
||||
'7,8': { // 山地剥
|
||||
yaoCi: [
|
||||
'初六:剥床以足,蔑贞凶。',
|
||||
'六二:剥床以辨,蔑贞凶。',
|
||||
'六三:剥之,无咎。',
|
||||
'六四:剥床以肤,凶。',
|
||||
'六五:贯鱼以宫人宠,无不利。',
|
||||
'上九:硕果不食,君子得舆,小人剥庐。',
|
||||
],
|
||||
},
|
||||
|
||||
// ── 坤宫 ──
|
||||
'8,1': { // 地天泰
|
||||
yaoCi: [
|
||||
'初九:拔茅茹以其汇,征吉。',
|
||||
'九二:包荒,用冯河,不遐遗,朋亡,得尚于中行。',
|
||||
'九三:无平不陂,无往不复。艰贞无咎,勿恤其孚,于食有福。',
|
||||
'六四:翩翩,不富以其邻,不戒以孚。',
|
||||
'六五:帝乙归妹,以祉元吉。',
|
||||
'上六:城复于隍,勿用师。自邑告命,贞吝。',
|
||||
],
|
||||
},
|
||||
'8,2': { // 地泽临
|
||||
yaoCi: [
|
||||
'初九:咸临,贞吉。',
|
||||
'九二:咸临,吉,无不利。',
|
||||
'六三:甘临,无攸利。既忧之,无咎。',
|
||||
'六四:至临,无咎。',
|
||||
'六五:知临,大君之宜,吉。',
|
||||
'上六:敦临,吉,无咎。',
|
||||
],
|
||||
},
|
||||
'8,3': { // 地火明夷
|
||||
yaoCi: [
|
||||
'初九:明夷于飞,垂其翼。君子于行,三日不食,有攸往,主人有言。',
|
||||
'六二:明夷,夷于左股,用拯马壮,吉。',
|
||||
'九三:明夷于南狩,得其大首,不可疾贞。',
|
||||
'六四:入于左腹,获明夷之心,出于门庭。',
|
||||
'六五:箕子之明夷,利贞。',
|
||||
'上六:不明晦,初登于天,后入于地。',
|
||||
],
|
||||
},
|
||||
'8,4': { // 地雷复
|
||||
yaoCi: [
|
||||
'初九:不远复,无祗悔,元吉。',
|
||||
'六二:休复,吉。',
|
||||
'六三:频复,厉,无咎。',
|
||||
'六四:中行独复。',
|
||||
'六五:敦复,无悔。',
|
||||
'上六:迷复,凶,有灾眚。用行师,终有大败。以其国君凶,至于十年不克征。',
|
||||
],
|
||||
},
|
||||
'8,5': { // 地风升
|
||||
yaoCi: [
|
||||
'初六:允升,大吉。',
|
||||
'九二:孚乃利用禴,无咎。',
|
||||
'九三:升虚邑。',
|
||||
'六四:王用亨于岐山,吉,无咎。',
|
||||
'六五:贞吉,升阶。',
|
||||
'上六:冥升,利于不息之贞。',
|
||||
],
|
||||
},
|
||||
'8,6': { // 地水师
|
||||
yaoCi: [
|
||||
'初六:师出以律,否臧凶。',
|
||||
'九二:在师中吉,无咎,王三锡命。',
|
||||
'六三:师或舆尸,凶。',
|
||||
'六四:师左次,无咎。',
|
||||
'六五:田有禽,利执言,无咎。长子帅师,弟子舆尸,贞凶。',
|
||||
'上六:大君有命,开国承家,小人勿用。',
|
||||
],
|
||||
},
|
||||
'8,7': { // 地山谦
|
||||
yaoCi: [
|
||||
'初六:谦谦君子,用涉大川,吉。',
|
||||
'六二:鸣谦,贞吉。',
|
||||
'九三:劳谦,君子有终,吉。',
|
||||
'六四:无不利,撝谦。',
|
||||
'六五:不富以其邻,利用侵伐,无不利。',
|
||||
'上六:鸣谦,利用行师征邑国。',
|
||||
],
|
||||
},
|
||||
'8,8': { // 坤为地
|
||||
yaoCi: [
|
||||
'初六:履霜,坚冰至。',
|
||||
'六二:直方大,不习无不利。',
|
||||
'六三:含章可贞,或从王事,无成有终。',
|
||||
'六四:括囊,无咎无誉。',
|
||||
'六五:黄裳,元吉。',
|
||||
'上六:龙战于野,其血玄黄。',
|
||||
],
|
||||
yongCi: '用六:利永贞。',
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取64卦的传统文本(爻辞 + 用辞)
|
||||
* @param upperNum 上卦先天数 1-8
|
||||
* @param lowerNum 下卦先天数 1-8
|
||||
*/
|
||||
export function getTraditionalText(upperNum: number, lowerNum: number): TraditionalText | null {
|
||||
return TEXTS[`${upperNum},${lowerNum}`] ?? null;
|
||||
}
|
||||
Reference in new issue
Block a user