Przeglądaj źródła

docs: 家庭天盘传统文化+五维基础分设计文档

iwt 1 miesiąc temu
rodzic
commit
9273c39fb1

+ 7 - 6
docs/superpowers/specs/2026-09-09-tianpan-tradition-design.md

@@ -100,7 +100,7 @@
 | 8 | 商业/权力/物质 | 富 |
 | 9 | 博爱/理想 | 心 |
 
-灵数来源:现有 `NumSoulCalculator.calcLifePath(year, month, day)`(主数 11/22/33 保留,需化简为 1-9 用于映射:主数 11→映射 2、22→映射 4、33→映射 6)。
+灵数来源:现有 `NumSoulCalculator.calcLifePath(year, month, day)`(主数 11/22/33 保留)。`TianpanMemberVO.lifeNumber` 来自 `behaviorModifier` 中存储值,**服务内做防御性化简**:11→2、22→4、33→6(主数化简),其余 >9 值按 digit sum 递归化简至 1-9,null 则不命中。
 
 **无灵数数据兜底**:无 birthDatetime 时灵数层全部 0 贡献。
 
@@ -165,7 +165,7 @@ private static final Map<Integer, String> LIFE_NUMBER_DIM = ...;
 ```java
 // 1. 初始化五维 map,八字层: 各维度 = (wuxing 对应五行值 ?? 50) × 0.6
 // 2. 星座命中: elementToDim[westernSign元素] += 20
-// 3. 灵数命中: numberToDim[lifeNumber] += 20
+// 3. 灵数命中: numberToDim[reduceMaster(lifeNumber)] += 20  // 11->2, 22->4, 33->6, >9 digit sum
 // 4. round 取整返回
 ```
 
@@ -210,7 +210,7 @@ private Map<String, Integer> dimensionBaseScores;  // 五维基础分 {body,mind
 - 颜色:跟随 `getMemberColor(member.effectiveRole)`
 - 字体:9px,与节点名字体一致
 
-**注意**:`TianpanMemberVO` 目前只有 `zodiacName` 字段(生肖名)—— 验证前端现有弹窗用的是 `selectedMember.zodiac`(生肖代码)显示为 `-`,需确认后端返回 `zodiacName` 已正确填充。若后端 `enrichMembers` 未设置 `zodiacName`,需一并修复(见 4.2 数据依赖)。
+**注意**:`enrichMembers` 目前只设置了 `vo.setZodiac(m.getZodiac())`(生肖代码,如 rat),**未设置 `zodiacName`(生肖中文名)**。前端弹窗/节点展示生肖名必须补齐:在 `enrichMembers` 中通过生肖代码映射中文名(映射表参考 `ZodiacConfig`/`findZodiacName` 逻辑,rat→鼠/ox→牛/...)并 `vo.setZodiacName(...)`。
 
 ### 4.2 成员弹窗增强(`pages/tianpan/index.vue` `member-popup`)
 
@@ -236,7 +236,7 @@ private Map<String, Integer> dimensionBaseScores;  // 五维基础分 {body,mind
    - 八字四柱:年/月/日/时柱四格
    - 五行条形图:复用 `FamilyTianpanCard` wuxingData 样式
    - 星座 + 生肖 tag
-   - 灵数:生命数/天赋数/生日数/命运数(现有 `NumSoulDetailVO` 结构,需确认 dashboard 是否返回完整 numSoul —— 若 `TianpanMemberVO` 只有 lifeNumber 无完整灵数详情,则本页展示简化版:仅生命数)
+   - 灵数:**定稿为简化版** —— 仅展示生命数(`member.lifeNumber`)+ 灵数称号(`member.lifeNumberTitle`)。完整的天赋数/生日数/命运数(`NumSoulDetailVO`)不随 dashboard 返回,如需完整版走 `/api/tianpan/member/{id}` 详情扩展(本迭代不做,列入 out of scope)
    - **五维基础分**:条形图(五维标准色)+ 总分
 
 **页面注册**:`pages.json` 的 `pages/tianpan` 分包新增 `traditional`
@@ -247,7 +247,7 @@ private Map<String, Integer> dimensionBaseScores;  // 五维基础分 {body,mind
 
 | 前端展示项 | 后端字段 | 现状 | 动作 |
 |------|------|------|------|
-| 生肖名 | `zodiacName` | `enrichMembers` 需确认是否设置 | 若无则补齐 |
+| 生肖名 | `zodiacName` | ❌ `enrichMembers` 未设置(仅 zodiac 代码) | **补齐**:代码→中文名映射 + setZodiacName |
 | 星座 | `westernSign` | ✅ 已设置 | 无 |
 | 灵数 | `lifeNumber` | ✅ 已设置 | 无 |
 | 八字四柱 | `eightCharacters` | ✅ 已设置(含脱敏) | 无 |
@@ -281,13 +281,14 @@ cd cfc-backend && mvn clean compile
 
 **In scope**:
 - 五维基础分算法服务 + 单测
-- `TianpanMemberVO` 扩展 + `enrichMembers` 填充
+- `TianpanMemberVO` 扩展(dimensionBaseScores)+ `enrichMembers` 填充(含 zodiacName 补齐)
 - 天盘首页 canvas 节点标注 + 成员弹窗增强
 - 新增 `pages/tianpan/traditional.vue` + 入口卡片 + pages.json 注册
 
 **Out of scope**:
 - 姓名数理(五格剖象法)—— 需汉字笔画库,单独需求
 - 灵数九宫格连线(147/258/369 连线分析)—— 后续迭代
+- 灵数完整详情(天赋数/生日数/命运数)随 member 详情接口返回 —— 后续迭代
 - AI 天盘解读(LangGraph)—— 未确认前不做
 - 天盘周报 PDF 内容变更
 - 数据库迁移(无新表无新列)