Browse Source

新增EPIC 9:学业方向分析与人工方案,含平台佣金模型+lilishop预留

包含:
- US-9.1~9.6 完整需求(学业AI/需求单/介入会话/价格协商/付费交付/平台佣金)
- CommerceService 接口层 + StubCommerceService 桩实现
- 更新 US-6.6 productType 枚举 / US-8.1 配置项 / 附录B/C / 排期
- 版本 v20260531.1
liaoxg 3 months ago
parent
commit
a4f80c12fd
2 changed files with 426 additions and 20 deletions
  1. 377 19
      docs/phase1-user-stories.md
  2. 49 1
      docs/requirements-changelog.md

+ 377 - 19
docs/phase1-user-stories.md

@@ -868,13 +868,310 @@ isUpgrade = false → 全额发放:L1 = ¥500,L2 = ¥100
 11. `createOrder` 接口接收 `productType` 参数
 
 **后端适应:**
-12. Order 新增 `productType` 字段(`"annual"` | `"practitioner"`)
-13. User 新增 `vipType` 字段(`"annual"` | `"practitioner"` | `null`)
-14. `paySuccess()` 佣金结算按 `productType` 分支:`annual` → US-6.4;`practitioner` → US-6.3(含推荐人身份判断 + isUpgrade 补差),详见 US-6.3 验收标准
+12. Order `productType` 字段新增枚举值:`"annual"` | `"practitioner"` | `"practitioner_plan"`(人工方案)
+13. User `vipType` 字段(`"annual"` | `"practitioner"` | `null`)
+14. `paySuccess()` 佣金结算按 `productType` 分支:
+    - `annual` → US-6.4 C端年费佣金
+    - `practitioner` → US-6.3 B端佣金(含推荐人身份判断 + isUpgrade 补差)
+    - `practitioner_plan` → US-9.5/9.6 人工方案佣金(通过 CommerceService 结算,平台留存模型)
 
 ---
 
-## EPIC 7:批注与客户管理(P2)
+## EPIC 9:学业方向分析与人工方案(P1)
+
+> **场景**:家长为孩子选择学业方向,通过AI解读初步了解孩子的天赋倾向,如需深度方案可申请能量师出方案。
+> **佣金模型**:人工方案采用**平台佣金留存模型**(区别于年费的固定金额/比例模型),所有分销佣金从平台留存部分支出。
+> **商城底座**:引入 lilishop(`iwt/lilishop`)作为商城引擎,本期通过 `CommerceService` 接口层预留对接,暂不实现实际商城付费。
+
+---
+
+### US-9.1 学业方向AI深度解读
+
+**作为** 家长  
+**我希望** 输入孩子的生日后,看到针对学业方向的AI深度解读  
+**以便** 了解孩子的天赋倾向,为学业规划提供参考
+
+**验收标准:**
+
+**入口:**
+1. 命盘解读页底部增加"🎓 学业方向分析"按钮(位于通用解读下方第二行)
+2. 点击后调用新接口 `POST /api/chart/academic-orientation`
+
+**AI 解读内容:**
+3. 后端转发至 Dify **学业方向专用 Workflow**,命盘24个数字(A-X)作为 `inputs`
+4. 解读内容至少包含以下章节:
+   - **天赋倾向**:基于主性格数字+外部三组数的自然天赋分析
+   - **适合方向**:文科倾向/理科倾向/艺术特长/体育潜能等,用百分比表示匹配度
+   - **学习特征**:专注力、理解方式、学习节奏偏好(基于J/K/L位置分析)
+   - **亲子沟通建议**:针对该命盘类型的孩子,应采用的沟通和教育方式
+   - **关键期提醒**:V/W/X中年区对应的升学/职业选择重要节点
+5. 每个章节独立卡片展示,可折叠展开
+6. 页面底部显示"💡 以上分析由AI生成,如需人工深度方案,可申请能量师出方案"
+
+**付费控制:**
+7. 免费用户每日可查看 1 次学业方向解读(与 US-3.2 主性格概要**独立配额**,互不消耗)
+8. 已付费用户(C端/能量师)不限次
+9. 超出次数后显示引导卡片:"今日学业分析次数已用完,开通会员享无限次"
+
+**技术架构:**
+10. 在 Dify 平台新增学业方向 Workflow,Workflow 输入为 24 个命盘数字(A-X),输出为结构化 JSON
+11. 后端 `DifyService` 新增方法 `interpretAcademicOrientation(AcademicRequest request)`
+12. 解读结果缓存同 US-3.3(同一命盘+同一天内重复请求返回缓存内容)
+
+---
+
+### US-9.2 申请能量师出方案
+
+**作为** 家长  
+**我希望** 在AI学业解读后,申请能量师为孩子出具深度人工方案  
+**以便** 获得比AI更个性化的专业指导
+
+**验收标准:**
+
+**入口与表单:**
+1. AI学业解读页底部固定"申请能量师出方案"按钮
+2. 通用AI解读页底部也显示"💼 申请人工深度方案"按钮
+3. 点击后弹出半屏表单,包含:
+   - **需求类型**:学业方向 / 职业规划 / 亲子关系 / 其他(单选)
+   - **具体需求描述**:文本输入框,限300字
+   - **期望价格范围**:下拉选项(¥50-99 / ¥100-299 / ¥300-499 / ¥500-999 / 面议)
+4. 提交后生成一条"方案需求单"记录
+
+**需求分配:**
+5. 如果用户有 `invitedBy` 且上级是能量师(`vipType='practitioner'`)→ 自动把需求单分配给该能量师
+6. 如果没有上级能量师 → 显示"暂未开放系统分配,请通过推荐链接找到专属能量师"
+7. 分配后能量师收到通知(US-8.3 消息通知或在能量师工作台看到)
+
+**数据库新增:**
+8. `plan_requests` 表:`id, userId, chartId, requestType, description, budgetRange, assignedPractitionerId, status(pending/accepted/negotiating/paid/completed/cancelled), price, createdAt, updatedAt`
+
+---
+
+### US-9.3 能量师介入AI会话
+
+**作为** 能量师  
+**我希望** 看到向我咨询用户的AI会话,并可以发起介入  
+**以便** 在用户需要时主动提供专业建议,促成人工方案
+
+**验收标准:**
+
+**触发条件:**
+1. 仅 `invitedBy` 关系链中的能量师(B推荐A,A是B的上级)才能介入B的AI会话
+2. 能量师在"能量师工作台"看到下级用户的咨询记录列表(来自 `invitedBy` 关系链,仅显示有实际咨询的用户)
+3. 列表显示:用户头像/昵称/命盘日期/最后活跃时间
+
+**介入流程:**
+4. 能量师点击某个用户 → 进入"咨询监看"页面(只读模式查看AI聊天记录)
+5. 页面底部有"介入会话"按钮
+6. 点击后,用户侧聊天界面出现系统消息:**"🔔 能量师 张三 已进入本次咨询"**
+7. 能量师侧出现输入框,可发送文字消息
+8. 用户侧聊天流中,能量师消息显示为:**"👤 能量师张三:消息内容"**(绿色气泡,区别于AI的灰色气泡)
+9. AI继续正常回答,能量师和AI的回答在聊天中交替显示
+
+**权限边界:**
+10. 用户随时可"请出能量师"(在消息长按菜单中选择"结束能量师介入")
+11. 用户主动关闭后,能量师侧显示"用户已结束本次协同咨询"
+12. 每次介入在 `chat_interventions` 表记录
+
+**数据库新增:**
+13. `chat_interventions` 表:`id, sessionId, practitionerId, startTime, endTime, endedBy(user/practitioner)`
+14. `chat_messages` 表新增 `senderType` 枚举:`ai` / `user` / `practitioner` / `system` / `proposal`
+
+---
+
+### US-9.4 方案价格协商
+
+**作为** 能量师  
+**我希望** 在聊天中向用户发送方案提议,并可与用户协商价格  
+**以便** 双方达成一致后完成付费
+
+**验收标准:**
+
+**出方案提议:**
+1. 能量师在聊天输入框左侧有"📋 出方案"按钮
+2. 点击弹出结构化表单:
+   - 方案标题(限50字)
+   - 方案描述(限500字)
+   - 方案价格(手动输入,单位元,整数,范围受系统配置限制)
+3. 发送后在聊天中显示方案卡片(嵌入消息格式)
+
+**方案卡片交互:**
+4. 卡片包含:标题、描述、价格(¥XXX)、能量师名称
+5. 用户侧卡片有三个操作按钮:
+   - **"💰 接受并支付"** → 进入 US-9.5 支付流程
+   - **"💬 议价"** → 弹出输入框,用户输入期望价格
+   - **"❌ 不感兴趣"** → 卡片标记为已拒绝,通知能量师
+6. 用户议价后,能量师侧收到新消息:"用户希望价格改为 ¥XXX"
+7. 能量师可:
+   - 接受新价 → 发送更新后的方案卡片(价格更新)
+   - 坚持原价 → 回复文字说明
+   - 提出折中价 → 发送新的方案卡片
+
+**状态管理:**
+8. 一条 `plan_requests` 记录对应多轮协商历史
+9. 每次更新价格或状态在 `plan_request_logs` 表记录
+10. 最大协商轮次 5 轮(超限后只能接受或拒绝当前价格)
+
+**数据库新增:**
+11. `plan_request_logs` 表:`id, planRequestId, action(propose/counter/accept/reject), oldPrice, newPrice, message, operatorId, createdAt`
+
+---
+
+### US-9.5 方案付费与交付
+
+**作为** 家长  
+**我希望** 接受能量师方案报价后在线支付,并收到完整的方案报告  
+**以便** 获得专业的学业指导
+
+**验收标准:**
+
+**支付:**
+1. 用户点击"接受并支付" → 弹出半屏支付确认页
+2. 支付确认页显示:服务名称、能量师名称、协商价格、微信支付按钮
+3. 点击支付 → `createOrder(productType="practitioner_plan", planRequestId=xxx)`
+4. 订单 `productType = "practitioner_plan"`(新增类型)
+5. 支付回调 → 调用 `CommerceService.onPaymentSuccess()` 处理平台佣金计算
+
+**平台佣金计算(StubCommerceService):**
+6. 读取分类佣金率:`commerce.category.practitioner_plan.commission_rate`(默认 `3000` = 30%)
+7. 平台佣金 = 总价 × commission_rate / 10000(单位分)
+8. 能量师应结算 = 总价 - 平台佣金
+9. 如有上级推荐 → 从平台佣金中提取分销佣金:
+   - 直接上级提成 = 平台佣金 × `commission.practitioner_plan.referral_rate` / 10000(默认 `2000` = 20%)
+   - 上上级提成 = 平台佣金 × `commission.practitioner_plan.upstream_rate` / 10000(默认 `500` = 5%)
+
+**示例计算:**
+```
+方案价 ¥299,平台佣金率 30%
+平台佣金 = ¥299 × 30% = ¥89.70
+能量师结算 = ¥299 - ¥89.70 = ¥209.30
+有直接上级:分销佣金 = ¥89.70 × 20% = ¥17.94
+平台净留 = ¥89.70 - ¥17.94 = ¥71.76
+```
+
+**交付:**
+10. 能量师收到支付成功通知
+11. 能量师工作台出现"方案交付入口"
+12. 交付支持三种方式:
+    - **文字方案**:富文本编辑器输入,保存到 `plan_deliveries.text_content`
+    - **PDF方案**:上传PDF文件(与US-2.2共用PDF生成能力)
+    - **图文报告**:混合内容,包含命盘截图+文字解读
+13. 交付后用户收到通知 + 聊天显示"📄 您的学业方案已交付"
+14. 用户可查看/下载方案,平台不额外限制次数
+
+**评价与完成:**
+15. 用户确认接收方案 → 状态 `completed`
+16. 用户可对能量师服务进行评分(1-5星)+ 文字评价
+17. 评价写入 `practitioner_ratings` 表
+
+**数据库新增:**
+18. `plan_deliveries` 表:`id, planRequestId, deliveryType(text/pdf/mixed), textContent, fileUrl, createdAt`
+19. `practitioner_ratings` 表:`id, planRequestId, userId, practitionerId, score(1-5), comment, createdAt`
+
+---
+
+### US-9.6 人工方案分销佣金(平台留存口径)
+
+**作为** 平台  
+**我希望** 当用户购买人工方案时,从平台佣金中自动结算分销佣金  
+**以便** 激励推广者推荐用户给能量师
+
+**验收标准:**
+
+**触发条件:**
+1. 订单 `productType = "practitioner_plan"` 且支付成功 → 进入分佣流程
+2. 佣金来自平台留存部分(不是从能量师结算金额中扣除)
+
+**佣金参数:**
+| 参数 | 默认值 | 配置键 |
+|------|--------|--------|
+| 平台佣金率 | 30% | `commerce.category.practitioner_plan.commission_rate` |
+| 直接上级分销比例 | 20%(占平台佣金) | `commission.practitioner_plan.referral_rate` |
+| 上上级分销比例 | 5%(占平台佣金) | `commission.practitioner_plan.upstream_rate` |
+
+**计算逻辑:**
+3. `platformCommission = totalFee × commission_rate / 10000`
+4. `referralCommission = platformCommission × referral_rate / 10000`
+5. `upstreamCommission = platformCommission × upstream_rate / 10000`
+6. 收款人资格同 US-6.4(须已付费用户才可收款)
+
+**状态与幂等:**
+7. 佣金 `status` 写入 `"settled"`(即时到账)
+8. 同一 `outTradeNo` 重复回调 → 幂等处理
+
+**示例:**
+```
+方案价 ¥299(29,900分)
+平台佣金率 30%
+平台佣金 = 29,900 × 30% = 8,970分 = ¥89.70
+直接上级佣金 = 8,970 × 20% = 1,794分 = ¥17.94
+上上级佣金 = 8,970 × 5% = 448分 = ¥4.48
+能量师结算 = 29,900 - 8,970 = 20,930分 = ¥209.30
+平台净留 = 8,970 - 1,794 - 448 = 6,728分 = ¥67.28
+```
+
+---
+
+### CommerceService 接口层(商城预留)
+
+> 本期不实现 lilishop 对接,先定义接口 + 桩实现。
+
+**接口:**
+```java
+public interface CommerceService {
+    /** 创建商品(能量师上架服务) */
+    String createProduct(CommerceProductDTO product);
+    
+    /** 创建订单 */
+    String createOrder(CommerceOrderDTO order);
+    
+    /** 订单支付回调处理 */
+    void onPaymentSuccess(String orderSn, String payOrderNo);
+    
+    /** 查询订单 */
+    CommerceOrderDTO getOrder(String orderSn);
+    
+    /** 获取店铺结算信息 */
+    CommerceSettlementDTO getSettlement(String storeId);
+    
+    /** 记录分销订单 */
+    void recordDistribution(String orderSn);
+}
+```
+
+**Phase 1 桩实现(StubCommerceService):**
+| 方法 | 实现策略 |
+|------|---------|
+| `createProduct` | 写入本地 `commerce_goods` 映射表 |
+| `createOrder` | 走现有本地 `orders` 表 + 标记 `commerceReady=false` |
+| `onPaymentSuccess` | 执行本地佣金计算逻辑(US-9.5 验收标准6-9) |
+| `getSettlement` | 从本地佣金表聚合统计 |
+| `recordDistribution` | 走现有 `commissions` 表逻辑 |
+
+**Phase 2+ 对接 lilishop:**
+- `createProduct` → lilishop Goods API
+- `createOrder` → lilishop Order API
+- `onPaymentSuccess` → 创建 StoreFlow + DistributionOrder
+- `getSettlement` → lilishop Bill API
+- `recordDistribution` → lilishop Distribution API
+
+**数据库新增:**
+```sql
+-- lilishop 商品映射表(预留)
+CREATE TABLE `commerce_goods` (
+  `id` bigint PRIMARY KEY AUTO_INCREMENT,
+  `store_id` varchar(32) NOT NULL COMMENT '能量师storeId(= userId)',
+  `product_type` varchar(32) NOT NULL COMMENT '商品类型:practitioner_plan',
+  `lilishop_goods_id` varchar(32) DEFAULT NULL COMMENT 'lilishop商品ID(Phase 2 填充)',
+  `category_path` varchar(255) DEFAULT NULL COMMENT 'lilishop分类路径',
+  `price` bigint NOT NULL COMMENT '价格(分)',
+  `status` varchar(16) DEFAULT 'active' COMMENT '状态',
+  `created_at` datetime NOT NULL,
+  `updated_at` datetime DEFAULT NULL
+);
+```
+
+---
 
 ### US-7.1 命盘批注
 
@@ -1228,6 +1525,17 @@ settings/index.vue
     ├── el-form-item: 直接佣金比例 → el-input-number(min=0, max=10000, step=500)
     ├── el-form-item: 上级佣金比例 → el-input-number(min=0, max=5000, step=100)
     └── 实时分配预览
+├── el-card (人工方案配置 — EPIC 9)
+│   ├── el-form-item: 平台佣金率 → el-input-number(min=0, max=10000, step=500)
+│   │   └── 注记:方案价 × 佣金率 = 平台收入,剩余结算给能量师
+│   ├── el-form-item: 分销佣金占比(直接) → el-input-number(min=0, max=10000, step=500)
+│   │   └── 注记:从平台佣金中提取 × 此比例 = 直接上级佣金
+│   ├── el-form-item: 分销佣金占比(上级) → el-input-number(min=0, max=5000, step=100)
+│   │   └── 注记:从平台佣金中提取 × 此比例 = 上上级佣金
+│   ├── el-form-item: 方案最低价 → el-input-number(min=0, max=999999, step=100)
+│   ├── el-form-item: 方案最高价 → el-input-number(min=0, max=999999, step=100)
+│   │   └── 实时预览示例:方案价¥299→佣金¥89.70→能量师¥209.30→分销¥17.94
+│   └── el-form-item: 最大协商轮次 → el-input-number(min=1, max=20, step=1)
 ```
 
 **表单校验规则:**
@@ -1244,15 +1552,23 @@ settings/index.vue
 
 ```sql
 INSERT INTO `sys_config` (`config_key`, `config_value`, `description`, `value_type`) VALUES
-('pricing.practitioner.seed',       '131400', '能量师种子价(分)',   'price'),
-('pricing.practitioner.standard',   '198600', '能量师标准价(分)',   'price'),
-('pricing.practitioner.seed_limit', '300',    '种子价名额上限',       'int'),
-('pricing.annual',                  '13100',  'C端年费(分)',       'price'),
+('pricing.practitioner.seed',       '131400', '能量师种子价(分)',       'price'),
+('pricing.practitioner.standard',   '198600', '能量师标准价(分)',       'price'),
+('pricing.practitioner.seed_limit', '300',    '种子价名额上限',           'int'),
+('pricing.annual',                  '13100',  'C端年费(分)',           'price'),
 ('commission.practitioner.l1',      '50000',  'B端一级佣金-能量师推荐(分)', 'price'),
 ('commission.practitioner.l1_cend', '20000',  'B端一级佣金-C端推荐(分)',   'price'),
-('commission.practitioner.l2',      '10000',  'B端二级佣金(分)',    'price'),
-('commission.annual.direct_rate',   '4000',   'C端直接佣金比例(万分比)', 'percent'),
-('commission.annual.upstream_rate', '500',    'C端上级佣金比例(万分比)', 'percent');
+('commission.practitioner.l2',      '10000',  'B端二级佣金(分)',        'price'),
+('commission.annual.direct_rate',   '4000',   'C端直接佣金比例(万分比)',   'percent'),
+('commission.annual.upstream_rate', '500',    'C端上级佣金比例(万分比)',   'percent'),
+('commerce.category.practitioner_plan.commission_rate', '3000', '人工方案平台佣金率(万分比)', 'percent'),
+('commission.practitioner_plan.referral_rate',     '2000',  '人工方案分销佣金占比(万分比)', 'percent'),
+('commission.practitioner_plan.upstream_rate',     '500',   '人工方案上级佣金占比(万分比)', 'percent'),
+('plan_request.enabled',              'true',  '人工方案功能开关',            'bool'),
+('plan_request.max_negotiation_rounds', '5',   '最大协商轮次',               'int'),
+('plan_request.auto_cancel_hours',    '72',    '协商超时自动取消(小时)',      'int'),
+('plan_request.min_price',           '5000',   '方案最低价(分)',            'price'),
+('plan_request.max_price',           '999900', '方案最高价(分)',            'price');
 ```
 
 ---
@@ -1261,7 +1577,7 @@ INSERT INTO `sys_config` (`config_key`, `config_value`, `description`, `value_ty
 
 | # | 场景 | 步骤 | 预期 |
 |---|------|------|------|
-| 1 | 初始加载 | 打开系统配置页 | 9个字段显示正确的默认值 |
+| 1 | 初始加载 | 打开系统配置页 | 16个字段显示正确的默认值 |
 | 2 | 修改定价 | 种子价改为 ¥2,000 → 保存 | 下次 `POST /api/pricing/current` 返回 seedPrice=200000 |
 | 3 | 修改佣金 | L1 改为 ¥600 → 保存 | 新订单的佣金 amount=60000 |
 | 4 | 比例联动 | 直接佣金改为 50% | 下方显示"每笔¥131:直接¥65.50 / 上级¥6.55 / 平台¥58.95" |
@@ -1472,6 +1788,12 @@ INSERT INTO `sys_config` (`config_key`, `config_value`, `description`, `value_ty
 | US-8.1 系统配置管理 | **P0** | **2天** | **无(独立基础设施)** |
 | US-8.2 订单管理 | P1 | 1.5天 | US-4.1 + Order 新增字段 |
 | US-8.3 佣金查看 | P1 | 1天 | US-6.3 |
+| US-9.1 学业方向AI解读 | P1 | 2天 | US-1.1 + Dify学业Workflow |
+| US-9.2 申请能量师出方案 | P1 | 1.5天 | US-5.1 + US-9.1 |
+| US-9.3 能量师介入AI会话 | P1 | 2天 | US-5.1 + US-3.4 |
+| US-9.4 方案价格协商 | P1 | 1.5天 | US-9.3 |
+| US-9.5 方案付费与交付 | P1 | 2天 | US-9.4 + CommerceService 接口 |
+| US-9.6 人工方案分销佣金 | P1 | 1天 | US-9.5 + US-8.1 |
 
 ---
 
@@ -1518,6 +1840,33 @@ US-6.3 B端佣金结算 ◄──────────────┘(共
 US-6.5 分销面板(前端展示所有数据)
 ```
 
+## EPIC 9 依赖图(学业方向+人工方案)
+
+```
+US-8.1 系统配置(人工方案参数——独立基础设施)
+    │
+    ▼
+US-9.1 学业方向AI解读(Dify学业Workflow)
+    │
+    ▼
+US-9.2 申请能量师出方案
+    │
+    ├──(有上级能量师)──► US-9.3 能量师介入AI会话
+    │                              │
+    └──(无上级)→ 提示找推荐链接    │
+                                    ▼
+                              US-9.4 方案价格协商
+                                    │
+                                    ▼
+                              US-9.5 方案付费与交付
+                              │         │
+                              │         ▼
+                              │   US-9.6 人工方案分销佣金
+                              │
+                              ▼
+                        CommerceService 接口层(lilishop预留)
+```
+
 ## 排期建议
 
 | 周次 | 交付内容 |
@@ -1526,10 +1875,11 @@ US-6.5 分销面板(前端展示所有数据)
 | **Week 2** | US-1.1 咨询发起(依赖US-5.1登录) → US-1.2 三角可视化 → US-1.3 计算规则实现(附录A Step 1-6) |
 | **Week 3** | US-3.1 AI解读 + Dify Workflow配置(附录B) → US-3.3 缓存 → US-3.2 免费/付费控制 |
 | **Week 4** | US-3.4 AI问答 + Dify Chatflow配置(附录B) → US-2.1 分享图片 → US-2.2 PDF导出 |
-| **Week 5** | US-4.1 能量师付费 + US-4.2 种子价 + US-6.6 C端订阅入口 |
+| **Week 5** | US-4.1 能量师付费 + US-4.2 种子价 + US-6.6 C端订阅入口 → **US-9.1 学业Dify Workflow配置** |
 | **Week 6** | US-6.2 带参注册 → US-6.1 推广码 → US-6.3 B端佣金(含升级补差) |
-| **Week 7** | US-6.4 C端佣金 → US-6.5 分销面板 + US-8.2 订单管理 |
+| **Week 7** | US-6.4 C端佣金 → US-6.5 分销面板 + US-8.2 订单管理 → **US-9.2 需求单 + US-9.3 介入会话** |
 | **Week 8** | 联调测试 + US-8.3 佣金查看 + US-4.3 订阅状态/续费 + US-4.4 升级能量师 + BUG修复 |
+| **Week 9+** | **US-9.4 价格协商 + US-9.5 付费交付 + US-9.6 分佣 → CommerceService 接口层** |
 
 > **Phase 1 总预估:约 8 周(含联调测试)**
 > 排期原则:先做核心流程(登录→命盘→AI),再做支付分销。US-8.1(配置系统)作为基础设施优先完成,保障后续所有定价依赖。
@@ -1938,14 +2288,15 @@ dify:
 4. **Java 集成**:开发 `DifyService.java`,调通 Workflow 和 Chatflow 两个 API
 5. **联调验收**:前端通过后端调用 Dify,验证解读质量和问答效果
 
-### B.8 与现有 US 的对应关系
+### B.8 与 US 的对应关系
 
 | Dify 组件 | 对应 US | 备注 |
 |-----------|---------|------|
-| Workflow(命盘解读) | US-3.1 AI解读展示、US-3.2 付费控制 | Workflow 输出由 UC-3.2 决定是否全文展示 |
-| Chatflow(AI问答) | US-3.4 AI交互问答 | 配额控制在 Java 后端,不经过 Dify |
-| 知识库 | US-3.1、US-3.4 | 两个工作流共用同一套知识库 |
-| 无(纯后端) | US-3.3 解读内容缓存 | 缓存逻辑在 Java 后端,不涉及 Dify |
+| Workflow(命盘解读) | US-3.1 AI解读展示、US-3.2 付费控制 | Workflow 输出由 US-3.2 决定是否全文展示 |
+| **Workflow(学业方向)** | **US-9.1 学业方向AI解读** | **新增专用Workflow,输入24个A-X数字,输出学业方向分析JSON** |
+| Chatflow(AI问答) | US-3.4 AI交互问答 | 配额控制在 Java 后端,不经过 Dify;能量师介入消息不走Dify |
+| 知识库 | US-3.1、US-3.4、US-9.1 | 三个工作流共用同一套知识库 |
+| 无(纯后端) | US-3.3 解读内容缓存、US-9.5 CommerceService | 缓存逻辑在 Java 后端,不涉及 Dify |
 
 ---
 
@@ -1975,6 +2326,7 @@ dify:
 AI解读·主性格概要             1次/天         不限           不限
 AI解读·完整五区                ❌             ✅             ✅
 AI问答互动                    3轮/天         不限           不限
+学业方向AI解读               1次/天         不限           不限
 
 分享图片到微信                1次/天         不限           不限
 导出PDF报告                   ❌            不限           不限
@@ -1983,6 +2335,9 @@ AI问答互动                    3轮/天         不限           不限
 推广码+分销面板               ❌             ✅             ✅
 推广C端年费得佣金              ❌         40%+5%分成      40%+5%分成
 推广能量师年费得佣金            ❌             ❌        ¥500 + ¥100
+申请能量师出方案               ✅             ✅             ✅
+能量师介入AI会话              ❌(被动)     ❌(被动)      ✅(主动)
+接受人工方案付费               ✅             ✅             ✅
 命盘批注(P2)                ❌             ✅             ✅
 客户标签分组(P2)             ❌             ❌             ✅
 个人资料编辑                   ✅             ✅             ✅
@@ -2095,3 +2450,6 @@ profile_complete: true/false    true/false        true/false
 | C端佣金:上级须已付费才结算 | US-6.4 |
 | 批注:仅已付费用户 | US-7.1 |
 | 标签:仅能量师(practitioner)可用 | US-7.2 |
+| 学业方向AI解读:普通用户1次/天 | US-9.1 |
+| 能量师介入AI会话:仅上级能量师可介入 | US-9.3 |
+| 人工方案分佣:平台留存模型 | US-9.6 |

+ 49 - 1
docs/requirements-changelog.md

@@ -5,7 +5,45 @@
 
 ---
 
-## v20260529.2(当前版本)
+## v20260531.1(当前版本)
+
+**发布日期:** 2026-05-31  
+**变更类型:** 新增  
+**状态:** ✅ 已确认
+
+### 版本摘要
+
+新增 **EPIC 9:学业方向分析与人工方案**,覆盖"家长为孩子选学业方向"完整场景。引入 **平台佣金留存模型**(区别于年费的固定金额/比例模型),预留 lilishop 商城接口层。
+
+### 变更清单
+
+| # | 类型 | 变更 | 涉及位置 |
+|---|------|------|---------|
+| 1 | 🆕 新增 | US-9.1 学业方向AI深度解读(Dify专用Workflow) | EPIC 9 |
+| 2 | 🆕 新增 | US-9.2 申请能量师出方案(plan_requests表+自动派单) | EPIC 9 |
+| 3 | 🆕 新增 | US-9.3 能量师介入AI会话(chat_interventions表+senderType) | EPIC 9 |
+| 4 | 🆕 新增 | US-9.4 方案价格协商(plan_request_logs表+协商卡片) | EPIC 9 |
+| 5 | 🆕 新增 | US-9.5 方案付费与交付(平台佣金计算+plan_deliveries表) | EPIC 9 |
+| 6 | 🆕 新增 | US-9.6 人工方案分销佣金(平台留存口径) | EPIC 9 |
+| 7 | 🆕 新增 | CommerceService 接口层 + StubCommerceService 桩实现 | EPIC 9 |
+| 8 | 🔧 更新 | US-6.6 productType 新增 `practitioner_plan` 枚举 + 支付分支 | US-6.6 |
+| 9 | 🔧 更新 | US-8.1 系统配置新增7个参数(平台佣金率/分销比例/方案限价等) | US-8.1 |
+| 10 | 🔧 更新 | US-8.1 前端管理页面新增"人工方案配置"卡片 | US-8.1 |
+| 11 | 🔧 更新 | 附录B.8 新增学业方向 Workflow 映射 | 附录B |
+| 12 | 🔧 更新 | 附录C 权限表新增学业/方案/介入/付费 4项权限行 | 附录C |
+| 13 | 🔧 更新 | 排期扩充至9+周(原8周→Week 5学业Workflow→Week 9+方案) | 排期建议 |
+
+### 影响范围
+
+- 主要涉及文件:`docs/phase1-user-stories.md`(新增 EPIC 9 + 更新 US-6.6/8.1/附录B/附录C/排期)
+- 关联文件:`docs/requirements-changelog.md`(本版本记录)
+- 数据库新增6张表:`plan_requests`, `plan_request_logs`, `plan_deliveries`, `chat_interventions`, `practitioner_ratings`, `commerce_goods`
+- 开发新增:`CommerceService` 接口 + `StubCommerceService` 桩实现
+- 代码新增:`DifyService.interpretAcademicOrientation()`, 聊天消息 `senderType` 枚举
+
+---
+
+## v20260529.2(已归档)
 
 **发布日期:** 2026-05-29  
 **变更类型:** 修订完善  
@@ -154,3 +192,13 @@
 1. ...
 2. ...
 ```
+
+---
+
+## 锚定摘要(会话跟踪)
+
+> 每次会话结束时更新,记录 session 的进展/变更/决策。每次只追加,不修改旧内容。
+
+| 日期 | 内容 |
+|------|------|
+| 2026-05-30 | **本轮修复 (v20260530.1):** 基于 US-6.2~US-6.6/v20260529.2 需求变更文档,完成 16 项问题修复的代码落地。核心变更:(1) UserService — 推广码 6 位+过滤 O0I1 生成、自邀请检测、无效码静默降级;(2) Order/Commission/User 实体扩充字段(productType/isUpgrade/remark/vipType/计数器);(3) ConfigService 内存缓存 + @PostConstruct 自动种子数据 + PricingController 定价查询端点(含种子名额余量);(4) OrderService.paySuccess() 重写 — productType 分支判断(回执户/能量师)、推荐人全额/半额身份判断、升级补差逻辑、幂等性保护;(5) AdminController 配置更新支持批量模式;(6) 前端 Subscribe 页改用定价 API + 种子名额展示;(7) Commission 页权限拦截 + remark 来源展示 + 下拉刷新;(8) Index 页 date picker 限定 1900~至今 |