微信小程序页面迁移校验之前 P5任务处理之前

This commit is contained in:
Neo
2026-03-09 01:19:21 +08:00
parent 263bf96035
commit 6e20987d2f
1112 changed files with 153824 additions and 219694 deletions

View File

@@ -3,6 +3,9 @@
> 生成日期2026-02-23
> 基于 PRD 审阅 Q&A 两轮结果 + 真实数据库现状
> **金额口径说明**:本矩阵中涉及"消费金额"的字段,统一使用 `items_sum`= table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money
> 不使用 `consume_money`(存在三种历史口径混合)。详见 [DWD-DOC 校准文档](../reports/DWD-DOC/README.md)。
---
## 图例
@@ -45,10 +48,12 @@
| 客户-助教亲密度 | `dws.dws_member_assistant_intimacy` | ✅ FDW |
| 近期服务记录 | `dwd.dwd_assistant_service_log` | ✅ FDW |
| 备注列表 | `zqyy_app.biz.notes` | 📱 新建 |
| AI 消费习惯分析 | 应用 3 返回结果缓存 | 📱🤖⏰ |
| 备注星星评分(再次服务意愿+再来店可能性) | `zqyy_app.biz.notes``rating_service_willingness``rating_revisit_likelihood`,各 1-5 | 📱 新建 |
| AI 维客线索 | 应用 3 返回结果缓存 | 📱🤖⏰ |
| 维客线索列表 | `zqyy_app.public.member_retention_clue`应用3+应用6+人工写入) | 📱 已建 |
| AI 关系分析/任务建议 | 应用 4 返回结果缓存 | 📱🤖⏰ |
| AI 话术参考 | 应用 5 返回结果缓存 | 📱🤖⏰ |
| AI 备注星级 | 应用 6 返回结果 | 📱🤖 |
| AI 备注分析 | 应用 6 返回结果(每个备注提交时触发) | 📱🤖 |
| 客户喜好标签(🎱斯🀅🎤) | `dwd.dwd_table_fee_log`(按房间类型统计) | ✅ FDW |
### performance.html我的绩效
@@ -90,7 +95,7 @@
| 最大消费潜力SPI 排序) | `dws.dws_member_spending_power_index` | 🆕 新建 |
| 最高余额 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 最近充值 | `dwd.dwd_recharge_order` | ✅ FDW |
| 最高消费 60 天 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 最高消费 60 天 | `dws.dws_member_consumption_summary`(基于 `items_sum`,非 `consume_money` | ✅ FDW |
| 最频繁 60 天 | `dws.dws_member_consumption_summary` | ✅ FDW |
| 最近到店 | `dws.dws_member_visit_detail` | ✅ FDW |
| 最专一RS 最大值) | `dws.dws_member_assistant_relation_index` | ✅ FDW |
@@ -117,8 +122,9 @@
| 消费记录(充值) | `dwd.dwd_recharge_order` | ✅ FDW |
| 指数总览WBI/NCI/SPI | 各指数表 | ✅🆕 FDW |
| 备注列表 | `zqyy_app.biz.notes` | 📱 新建 |
| AI 消费习惯分析 | 应用 3 缓存 | 📱🤖⏰ |
| 生日信息 | `zqyy_app.biz.notes`type=birthday | 📱 新建 |
| 备注星星评分(再次服务意愿+再来店可能性) | `zqyy_app.biz.notes``rating_service_willingness``rating_revisit_likelihood`,各 1-5 | 📱 新建 |
| AI 维客线索 | 应用 3 缓存 | 📱🤖⏰ |
| 维客线索(含生日等) | `zqyy_app.public.member_retention_clue` | 📱 已建 |
### coach-detail.html助教详情
@@ -166,6 +172,7 @@
| 用户审核列表 | `zqyy_app.auth.user_applications` + `zqyy_app.auth.users` | 📱 新建 |
| 用户-助教关联建议 | `dwd.dim_assistant`通过球房ID+手机号匹配)+ `dwd.dim_staff` / `dwd.dim_staff_ex`(员工信息表匹配) | ✅ FDW |
| 球房ID映射 | `zqyy_app.auth.site_code_mapping` | 📱 新建 |
| 维客线索管理 | `zqyy_app.public.member_retention_clue` + `dwd.dim_member`FDW 客户信息) | 📱 已建 / ✅ FDW |
| Excel 上传-财务支出 | `dws.dws_finance_expense_summary`(或新建 staging 表) | 🔧/📱 |
| Excel 上传-团购收入 | `dws.dws_platform_settlement`(或新建 staging 表) | 🔧/📱 |
| Excel 上传-助教奖罚 | `zqyy_app.biz.salary_adjustments` | 📱 新建 |
@@ -180,12 +187,12 @@
| 任务生成器 | 每日 4:00 后首次运行 | 全部指数表 + `coach_tasks` | 📱⏰ |
| 任务状态轮询 | 每小时 | `coach_tasks` + 有效期检查 | 📱⏰ |
| 召回完成检测 | ETL 数据更新后 | `dwd.dwd_assistant_service_log` + `coach_tasks` | ⏰ |
| 数据回溯(备注重分类) | 召回完成时 | `notes` + `coach_tasks` | 📱⏰ |
| 数据回溯(备注重分类) | 召回完成时 | `notes`(含星星评分) + `coach_tasks` | 📱⏰ |
| AI 应用 2 财务洞察 | 每日 | 财务 DWS 表 | 🤖⏰ |
| AI 应用 3 消费习惯 | 客户新增消费时 | DWD 订单明细 | 🤖⏰ |
| AI 应用 3 维客线索 | 客户新增消费时 | DWD 订单明细 | 🤖⏰ |
| AI 应用 4 关系分析 | 助教参与新结算时 | DWD 订单明细 | 🤖⏰ |
| AI 应用 5 话术 | 应用 4 调用时 | 应用 4 输入+输出 | 🤖⏰ |
| AI 应用 6 备注分 | 回访任务完成时 | 备注 + 客户信息 | 🤖 |
| AI 应用 6 备注分 | 每个备注提交时 | 备注 + 客户信息 | 🤖 |
---
@@ -216,7 +223,7 @@
| `user_assistant_bindng` | auth | 用户-助教绑定关系 |
| `coach_tasks` | biz | 助教任务(类型、优先级、状态、有效期等) |
| `coach_task_history` | biz | 任务变更历史(关闭/新建追溯) |
| `notes` | biz | 统一备注表type 区分) |
| `notes` | biz | 统一备注表type 区分),含星星评分字段(`rating_service_willingness``rating_revisit_likelihood`,各 1-5可空 |
| `ai_conversations` | biz | AI 对话记录 |
| `ai_messages` | biz | AI 对话消息明细 |
| `ai_cache` | biz | AI 应用 2-6 结果缓存 |

View File

@@ -3,6 +3,13 @@
> 生成日期2026-02-23
> 按依赖优先级排序,按 SPEC 边界分组,面向 Kiro SPEC 工作流
> **数据字段权威参考**:各 SPEC 涉及的 DWD/DWS 层字段来源、金额口径、业务逻辑,
> 以 `docs/reports/DWD-DOC/` 校准文档为准(数据快照 2026-03-06
> 核心规则:
> - `consume_money` 存在三种历史口径混合,不可直接使用;应使用 `items_sum`= table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money
> - 收入结构拆分为台桌费、陪打费、超休费、商品费、电费五项,不使用笼统的 `service_fee`
> - 详见 [consume_money 口径说明](../reports/DWD-DOC/consume/consume-money-caliber.md)、[财务全景](../reports/DWD-DOC/03-financial-panorama.md)
---
## 执行顺序总览
@@ -124,13 +131,13 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
4. 任务状态机:有效/无效 + 有效期机制
5. 48 小时回访滞留逻辑
6. 召回完成检测ETL 数据到达后自动标记)
7. 数据回溯机制(召回完成后回溯备注分类)
7. 数据回溯机制(召回完成后回溯备注分类 + 触发 AI 备注分析
8. 任务置顶/放弃 API
#### 备注系统
9. 新建表:`biz.notes`type 区分:普通/回访/生日/放弃原因)
10. 备注 CRUD API
11. 生日信息隔离存储(不被 ETL 数据覆盖)
9. 新建表:`biz.notes`type 区分:普通/回访/放弃原因,含星星评分字段 `rating_service_willingness``rating_revisit_likelihood` 各 1-5 可空
10. 备注 CRUD API(含星星评分的存储与读取)
11. 生日信息已迁移至维客线索系统(`member_retention_clue`),不再作为 notes type
#### 触发器机制
12. 新建表:`biz.trigger_jobs`(触发器配置与执行日志)
@@ -148,7 +155,9 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
- 48 小时滞留机制正常工作
- 召回完成后自动标记任务完成
- 数据回溯正确将普通备注重分类为回访备注
- 备注 CRUD 正常,生日信息独立存储
- 备注 CRUD 正常,维客线索独立于 ETL 数据
- 备注星星评分正确存储(不参与完成判定,不参与应用 6 分析,仅辅助数据)
- 回访任务默认展开评分区域,其他任务类型默认隐藏可手动展开
---
@@ -156,20 +165,29 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
### SPEC 名称建议:`miniapp-ai-integration`
### ⚠️ 两阶段交付策略2026-03-07 评审决定)
应用 3/4/5/6/7 的首条 Prompt JSON 结构包含占位符字段(`consumption_records``service_history``objective_data` 等),这些字段的具体结构取决于对应页面 API 的数据格式。因此 P5 拆分为两个阶段:
- P5-A当前阶段建表、百炼封装、缓存 API、SSE 框架 + Prompt 已确定的应用(应用 2、应用 8+ 应用 3/4/5/6/7 的触发机制和调用骨架
- P5-BPrompt 细化):分散到对应页面 spec 中同步完成P6-T4 细化应用 4/5P9-T1 细化应用 3/6/7
### 需求概述
对接阿里云百炼 6 个 AI 应用,实现对话系统、后台轮询缓存、备注含金量评分。
对接阿里云百炼 8 个 AI 应用,实现对话系统、后台轮询缓存、备注分
### 关键交付物
1. 新建表:`biz.ai_conversations``biz.ai_messages``biz.ai_cache`
2. 百炼 API 封装:统一调用层(支持流式/非流式)
3. 应用 1通用对话 APISSE 流式返回)
4. 应用 2财务洞察轮询任务每日更新多时间维度交叉
5. 应用 3客户消费习惯分析轮询(客户新增消费时触发)
6. 应用 4客户-助教关系分析轮询(助教参与新结算时触发)
7. 应用 5话术参考应用 4 调用时联动)
8. 应用 6备注含金量评分(回访任务完成时触发)
9. AI 结果缓存读写 API
10. 页面内容文本化工具(将页面数据转为 AI 可读文本)
4. 应用 2财务洞察轮询任务每日更新多时间维度交叉【P5-APrompt 已确定】
5. 应用 3客户维客线索分析轮询(客户新增消费时触发)【P5-A 骨架 + P9-T1 细化 Prompt】
6. 应用 4客户-助教关系分析轮询(助教参与新结算时触发)【P5-A 骨架 + P6-T4 细化 Prompt】
7. 应用 5话术参考应用 4 调用时联动)【P5-A 骨架 + P6-T4 细化 Prompt】
8. 应用 6备注分析每个备注提交时触发【P5-A 骨架 + P9-T1 细化 Prompt】
9. 应用 7客户分析结账单触发【P5-A 骨架 + P9-T1 细化 Prompt】
10. 应用 8维客线索整理应用 3/6 产出后触发【P5-APrompt 已确定】
11. AI 结果缓存读写 API
12. 页面内容文本化工具(随 P6-P9 各页面逐步实现)
### 依赖
- P3用户身份AI 信息隔离需要传入身份参数)
@@ -178,8 +196,32 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
### 验收标准
- 应用 1 流式对话正常
- 应用 2-5 轮询任务按条件触发并缓存结果
- 应用 6 在回访备注提交后自动评分6 分以上标记完成
- 应用 6 在每个备注提交后自动分析,返回评分+维客线索
- 应用 7 在客户结账单出现后触发,生成运营策略
- 应用 8 在应用 3/6 产出后触发,整合去重维客线索
- 所有 AI 对话记录持久化(含系统调用)
- P5-A 验收:应用 2/8 完整可用,应用 3/4/5/6/7 触发机制和调用框架就绪Prompt 拼接为 TODO 接口)
- P5-B 验收:随 P6-T4、P9-T1 完成后,对应应用的 Prompt 拼接函数实现并联调通过
---
## P5.1MCP Server AI 扩展 — 查库手册 + 业务库接入
### SPEC 名称建议:`mcp-server-ai-extension`
### 分批执行2026-03-07 评审决定)
- 批次 A立即可执行重写 ETL 库查库手册DWD-DOC 已完成)
- 批次 BP5-A 之后MCP Server 新增 `zqyy_app` 连接 + 业务库手册
- 批次 C批次 B 后):手册上传百炼验证
### 需求概述
扩展 MCP Server 支持 `zqyy_app` 业务库查询,重写查库手册供百炼平台 AI 应用作为知识库。
### 依赖
- 批次 ADWD-DOC 已完成)
- 批次 BP1 + P4 + P5-Abiz 表已建)
- 批次 C批次 B
---
@@ -192,14 +234,16 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
### 关键交付物
1. task-list.html → 小程序页面:任务列表(按优先级分组)、长按操作(置顶/放弃/AI、绩效计算展示、跳档激励
2. task-detail.html → 小程序页面任务详情、近期服务记录、备注入口、AI 分析展示(消费习惯/关系分析/话术/备注星级
2. task-detail.html → 小程序页面:任务详情、近期服务记录、备注入口(含星星评分)、AI 分析展示(维客线索/关系分析/话术/备注分析评分
3. notes.html → 小程序页面:备注列表、删除(二次确认)
4. 通用组件:爱心 icon💖🧡💛💙、喜好标签🎱斯🀅🎤、跟/弃 icon、预估标记
### 依赖
- P3登录态
- P4任务/备注 API
- P5AI 缓存数据展示)
- P5-AAI 缓存数据展示 + 应用 4/5 调用骨架
> P6-T4 同时承担 P5-B 的应用 4/5 Prompt 细化任务(服务记录结构确定后实现拼接函数)
---
@@ -259,9 +303,11 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
### 依赖
- P3登录态
- P5AI 对话系统)
- P5-AAI 对话系统 + 应用 3/6/7 调用骨架
- P4备注系统
> P9-T1 同时承担 P5-B 的应用 3/6/7 Prompt 细化任务(消费记录结构确定后实现拼接函数)
---
## P10租户管理后台
@@ -273,7 +319,7 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
### 关键交付物
1. 独立 Web 应用React + Vite + Ant Design类似 `apps/admin-web/` 技术栈)
2. 租户管理员登录(独立凭据体系)
2. 租户管理员登录(独立凭据体系,账号由系统管理后台 `apps/admin-web/` 创建,不可自行注册
3. 用户审核页面申请列表、状态筛选、关联建议球房ID+手机号匹配助教)、审核操作
4. 用户管理页面:用户列表、身份编辑、店铺归属编辑
5. Excel 上传页面4 种模板(财务支出/团购收入/助教奖罚/充值业绩归属)
@@ -281,15 +327,19 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
7. 冲突处理:前端 diff 交互(逐条确认替换/保留)
8. 后端 APIExcel 解析、校验、冲突检测、确认写入
9. 新建表:`biz.salary_adjustments``biz.excel_upload_log`
10. 维客线索管理页面:按客户列出全部线索(标签/摘要/提供人/备注原文),支持修改、删除、隐藏操作
### 依赖
- P1数据库基础
- P3用户体系共享 `auth` Schema
- admin-web-console 需求 11租户管理员账号管理功能提供账号创建入口
### 验收标准
- 租户管理员只能看到自己租户下的店铺数据
- 租户管理员账号由系统管理后台创建,租户管理员不可自行注册
- 租户管理员只能看到自己租户下的店铺数据(由 Operator 分配的 `site_id` 列表决定)
- Excel 上传校验正确,冲突 diff 交互可用
- 用户审核流程完整(申请→审核→分配身份→关联助教)
- 维客线索管理:按客户查看全部线索,修改/删除/隐藏操作正常
---
@@ -320,14 +370,19 @@ P11 部署与上线(环境配置 + 监控 + 灰度)
```
P1 ─────┬──→ P2 ──→ P7
│ ↘
├──→ P3 ──→ P4 ──→ P5 ──→ P6
│ │
│ └──→ P10 P8 ←── P9
├──→ P3 ──→ P4 ──→ P5-A ──→ P6(含 P5-B 应用4/5 Prompt 细化)
│ │ ↘
│ └──→ P10 P8
│ ↘
│ P9含 P5-B 应用3/6/7 Prompt 细化)
└──→ P11全部完成后
```
> P5-A 交付管道和骨架后P6/P8/P9 即可启动。
> P5-B 的 Prompt 细化任务嵌入 P6-T4应用4/5和 P9-T1应用3/6/7不作为独立阶段。
可并行的 SPEC 组合:
- P2 和 P3 可并行(无互相依赖)
- P6、P7、P8、P9 在后端 API 就绪后可部分并行
- P6、P7、P8、P9 在 P5-A 完成后可部分并行
- P10 在 P1+P3 完成后即可启动,与 P4-P9 并行

View File

@@ -14,15 +14,19 @@
3. 作为租户管理员,我需要上传 Excel 数据(财务支出/团购收入/助教奖罚/充值业绩归属)。
4. 作为租户管理员,上传 Excel 时如果发现主键冲突,我需要逐条确认替换或保留(类似 diff 交互)。
5. 作为系统,租户管理员只能看到自己租户下的店铺数据。
6. 作为租户管理员,我需要查看每个客户的所有维客线索,并对线索进行修改、删除、隐藏操作。
### 验收标准
- AC1租户管理后台是独立 Web 应用,独立登录入口
- AC2:租户管理员只能看到自己租户下的店铺和用户
- AC1.1:租户管理员账号由系统管理后台(`apps/admin-web/`)创建,租户管理员不可自行注册
- AC2租户管理员只能看到自己租户下的店铺和用户由 Operator 分配的 `site_id` 列表决定)
- AC3用户审核页面申请列表、状态筛选、球房ID+手机号关联建议(同时匹配助教表+员工信息表)、审核操作
- AC4Excel 上传校验:必填、金额精度、表头格式、类型合法
- AC5主键冲突时前端展示 diff 交互,逐条确认后保存
- AC6助教奖罚支持同一助教同月多笔
- AC7维客线索管理页面按客户列出全部线索展示标签大类、摘要、提供人、备注原文等字段
- AC8维客线索支持修改编辑摘要/详情/标签)、删除(二次确认)、隐藏(不在小程序端展示但保留数据)操作
---
@@ -37,9 +41,11 @@
### 登录体系
- 独立凭据:每个租户有若干管理员账号(用户名+密码)
- 租户级管理员:可管理租户下所有店铺
- 店铺级管理员:只能管理指定店铺
- 与系统管理后台(`apps/admin-web/`)完全隔离
- 账号由系统管理后台(`apps/admin-web/`)的 Operator 创建和管理(见 admin-web-console 需求 11租户管理员不可自行注册
- Operator 创建账号时指定:用户名、初始密码、所属租户、管辖球房 ID 列表(`site_id` 数组)
- 租户级管理员:管辖该租户下所有店铺
- 店铺级管理员:只能管理指定店铺(由 Operator 分配的 `site_id` 列表决定)
- 与系统管理后台(`apps/admin-web/`)完全隔离,登录入口独立
### Excel 4 种模板
@@ -101,6 +107,33 @@
→ 提交确认 → 后端按选择写入
```
### 维客线索管理
#### 页面功能
- 客户搜索/筛选:按客户姓名、手机号搜索,按门店筛选
- 线索列表:展示该客户的全部维客线索,字段包括:
- 标签(大类枚举:客户基础/消费习惯/玩法偏好/促销接受/社交关系/重要反馈,与 P5 应用 8 输出一致)
- 摘要
- 详情
- 提供人recorded_by_name
- 来源(人工录入 `manual` / AI消费分析 `ai_consumption`(应用 3/ AI备注分析 `ai_note`(应用 6实际写入 `member_retention_clue` 的线索由应用 8 整合后统一落库)
- 记录时间
- 操作:
- 修改:编辑标签、摘要、详情
- 删除:二次确认后物理删除
- 隐藏:设置 `is_hidden = true`,小程序端不展示但管理后台保留(需新增 `is_hidden` 字段,待后续 DB 变更时一并实现)
#### 数据源
- `zqyy_app.public.member_retention_clue`(已建)
- 客户信息通过 FDW 读取 `dwd.dim_member`
#### 待实现的 DB 变更SPEC 记录,暂不执行)
- `member_retention_clue` 新增 `is_hidden BOOLEAN DEFAULT false`:控制小程序端是否展示
- `member_retention_clue` 新增 `source VARCHAR(20) DEFAULT 'manual'`:区分线索来源(`manual` 人工录入 / `ai_consumption` 应用 3 消费分析 / `ai_note` 应用 6 备注分析;应用 8 整合时保留原始 source
### 新建表
```
@@ -131,3 +164,5 @@ biz.excel_upload_log
- [ ] T7实现 Excel 上传前端(模板下载 + 上传 + diff 交互 + 确认)
- [ ] T8实现 4 种 Excel 模板的校验规则
- [ ] T9实现人员姓名+编号匹配校验(同时对照 `dim_assistant` 助教表和 `dim_staff` + `dim_staff_ex` 员工信息表)
- [ ] T10实现维客线索管理页面客户搜索 + 线索列表 + 标签/摘要/提供人/备注原文展示)
- [ ] T11实现维客线索操作 API修改/删除/隐藏)+ 后端路由扩展

View File

@@ -34,8 +34,13 @@
### 助教订单流水四项统计
- 新建 ETL 任务 `AssistantOrderContributionTask`
- 粒度:`(site_id, assistant_id, stat_date)`
- 计算逻辑见 PRD "新增统计"节
- 粒度:`(site_id, assistant_id, stat_date)``stat_date` 为营业日(以 08:00 为日切点08:00 前的记录归属前一天)
- 完整算法与表结构见 `docs/database/BD_Manual_dws_assistant_order_contribution.md`
- 数据来源已校准数据源DWD-DOC 01-业务全景 + 02-账务全景):
- `dwd.dwd_settlement_head`:结算单信息,筛选 `settle_type IN (1, 3)`
- `dwd.dwd_table_fee_log`:台桌使用时长、台费金额
- `dwd.dwd_assistant_service_log`:助教服务时长、服务流水、分成
- 消费金额口径:使用 `items_sum` 相关字段table_charge_money + goods_money + assistant_pd_money + assistant_cx_money不使用 `consume_money`
### 命名方案

View File

@@ -89,6 +89,19 @@ auth.user_assistant_binding
---
## 小程序前端开发强制规范
> 以下规范适用于本 SPEC 中所有小程序页面实现,具有强制约束力。
1. **原型图是唯一视觉真相**`docs/h5_ui/pages/*.html` 中的结构、层次、元素、配色、间距、交互行为是小程序页面实现的唯一参考标准。任何偏离原型图的实现都需要明确的产品确认。
2. **WXML ≠ HTML**:严禁在小程序中使用 HTML 标签div/span/p/a/img 等必须使用小程序原生标签view/text/image/navigator 等)。
3. **WXSS ≠ CSS**:使用 rpx 单位、仅支持有限选择器、无 DOM/BOM API、样式隔离机制不同。Tailwind CSS 类名必须手动转换为 WXSS。
4. **TDesign 优先**:凡 TDesign 组件库能覆盖的 UI 元素,必须使用 TDesign 组件;自定义实现仅限 TDesign 无法覆盖的场景。
5. **Power 文档优先**:实现前必须加载 `wechat-miniprogram` Power 的相关 steering 文件(`view-layer.md``tdesign.md``builtin-components.md`),确保语法和组件用法正确。
6. **项目踩坑指南必读**:实现前必须阅读 `docs/prd/MIGRATION-PLAYBOOK.md` 第六章,该文档是基于本项目实际转换经验的避坑手册,涵盖 WXML/WXSS 差异、事件系统、TDesign 用法、rpx 换算规则及新页面开发 Checklist。
---
## 任务清单
- [ ] T1创建 `auth` Schema 下全部表users, user_applications, site_code_mapping, user_site_roles, user_assistant_binding

View File

@@ -12,9 +12,10 @@
1. 作为助教,我每天打开小程序能看到系统为我分配的任务列表,按优先级排序。
2. 作为助教,我可以置顶/放弃任务,放弃时必须填写原因。
3. 作为助教,我完成召回任务后(客户到店被服务),系统自动标记任务完成。
4. 作为助教,我给客户添加回访备注后,系统自动评估备注含金量(≥6 分算完成
5. 作为系统,回访任务至少保留 48 小时,到期后自动失效
6. 作为系统,当 ETL 数据延迟导致召回完成晚于备注提交时,需要回溯重分类备注
4. 作为助教,我给客户添加备注后,系统自动通过 AI 分析备注内容(应用 6提取维客线索并评分。回访备注评分 ≥6 分算回访完成。
5. 作为助教,我在添加备注时可以对客户进行星星评分(再次服务意愿、再来店可能性,各 1-5 星),回访任务默认展开评分区域,其他任务类型通过"展开评价"按钮手动打开
6. 作为系统,回访任务至少保留 48 小时,到期后自动失效
7. 作为系统,当 ETL 数据延迟导致召回完成晚于备注提交时,需要回溯重分类备注。
### 验收标准
@@ -23,9 +24,11 @@
- AC3回访任务 48 小时滞留机制正常(生成时间算起)
- AC4任务有效/无效状态 + 有效期字段正确流转
- AC5召回完成检测在 ETL 数据到达后自动触发
- AC6数据回溯将普通备注重分类为回访备注并触发 AI 评分
- AC6数据回溯将普通备注重分类为回访备注并触发 AI 备注分析
- AC7备注 CRUD 正常type 字段正确区分
- AC8生日信息独立于 ETL 数据,不被覆盖
- AC8生日信息作为维客线索(客户基础信息类别)存储于 `member_retention_clue`独立于 ETL 数据
- AC9备注星星评分再次服务意愿、再来店可能性正确存储不参与完成判定不参与应用 6 分析,仅作辅助数据
- AC10回访任务页面默认展开评分区域其他任务类型默认隐藏通过"展开评价"按钮手动打开(数据迟到场景:助教在召回任务中提前写备注+评分)
---
@@ -37,7 +40,7 @@
|--------|------|---------|---------|
| 0 | 高优先召回 | max(WBI,NCI) > 7 | 助教为该客户服务ETL 检测) |
| 0 | 优先召回 | max(WBI,NCI) > 5 | 同上 |
| 1 | 客户回访 | 完成召回后未备注 | 提交备注且 AI 评分 ≥ 6 |
| 1 | 客户回访 | 完成召回后未备注 | 提交备注且应用 6 备注分析评分 ≥ 6 |
| 2 | 关系构建 | RS < 6 | 无自动完成条件(手动标记或指数变化) |
### 任务状态机
@@ -68,6 +71,25 @@ biz.coach_tasks
- created_at, updated_at
```
### notes 表核心字段
```
biz.notes
- id, site_id, user_id, target_type, target_id
- type (normal / follow_up / abandon_reason)
- content (TEXT)
- rating_service_willingness (SMALLINT 1-5, 可空,再次服务此客户意愿)
- rating_revisit_likelihood (SMALLINT 1-5, 可空,再来店可能性)
- task_id (关联任务 ID, 可空)
- created_at, updated_at
```
> 星星评分说明:
> - 回访任务follow_up_visit备注弹窗默认展开评分区域
> - 其他任务类型:评分区域默认隐藏,通过"展开评价"按钮手动打开
> - 数据迟到场景:助教在召回任务中完成服务后顺手写备注,此时 ETL 数据未到,任务仍为召回类型,评分区域隐藏但可手动展开;当 ETL 数据到达、召回完成检测触发后,回溯机制将该备注重分类为回访备注,星星评分数据一并保留
> - 星星评分不参与回访完成判定(完成判定仅看应用 6 评分 ≥6不参与应用 6 分析,仅作辅助数据存储,后期功能扩展使用
### 触发器机制
```
@@ -91,12 +113,12 @@ biz.trigger_jobs
## 任务清单
- [ ] T1创建 `biz.coach_tasks` + `biz.coach_task_history`
- [ ] T2创建 `biz.notes`type: normal/follow_up/birthday/abandon_reason
- [ ] T2创建 `biz.notes`type: normal/follow_up/abandon_reason,含 `rating_service_willingness` SMALLINT 1-5 可空、`rating_revisit_likelihood` SMALLINT 1-5 可空
- [ ] T3创建 `biz.trigger_jobs` 表 + 轮询调度框架
- [ ] T4实现任务生成器读取指数 → 分配任务 → 跳过/更新逻辑)
- [ ] T5实现 48 小时滞留机制 + 有效期轮询
- [ ] T6实现召回完成检测ETL 数据到达后匹配 service_log
- [ ] T7实现数据回溯机制普通备注 → 回访备注 + 触发 AI 评分
- [ ] T7实现数据回溯机制普通备注 → 回访备注 + 触发 AI 备注分析
- [ ] T8实现任务 CRUD API列表/详情/置顶/放弃/取消置顶/取消放弃)
- [ ] T9实现备注 CRUD API创建/列表/删除)
- [ ] T10实现生日信息隔离存储逻辑
- [ ] T9实现备注 CRUD API创建/列表/删除,含星星评分字段的存储与读取
- [ ] T10生日信息已迁移至维客线索系统(`member_retention_clue`),无需单独处理

View File

@@ -2,6 +2,26 @@
> 优先级P5依赖 P3 + P4
> 预估工作量:大
> 详细应用需求:#[[file:docs/prd/AI需求2.md]]
---
## ⚠️ 两阶段交付策略2026-03-07 评审决定)
P5 的 8 个 AI 应用中,应用 3/4/5/6/7 的首条 Prompt JSON 结构包含占位符字段(`consumption_records``service_history``objective_data` 等),这些字段的具体结构取决于对应页面 API 的数据格式。在页面 API 未开发前Prompt 结构无法确定,强行实现会导致"先猜后改"的浪费。
因此 P5 拆分为两个阶段:
### P5-A当前阶段P4 之后立即执行)
交付"管道":建表、百炼封装、缓存 API、SSE 框架,以及 Prompt 已完全确定的应用(应用 2、应用 8
应用 3/4/5/6/7 只实现触发机制和调用骨架Prompt 拼接函数留接口,用 TODO 标记)。
### P5-BPrompt 细化,随页面 API 同步完成)
各应用的 Prompt JSON 细化和拼接实现,分散到对应页面的开发任务中:
- P6task-detail→ 细化应用 4/5 的 Prompt服务记录结构确定后
- P9customer-detail→ 细化应用 3/6/7 的 Prompt消费记录结构确定后
详见各 spec 的对应任务。
---
@@ -10,34 +30,70 @@
### 用户故事
1. 作为助教,我可以在任意页面点击 AI 按钮,跳转到对话页面与 AI 交流AI 了解当前页面上下文。
2. 作为助教,我在任务详情页能看到 AI 生成的消费习惯分析、关系分析、话术参考。
3. 作为助教,我提交回访备注后,系统自动通过 AI 评估备注含金量
2. 作为助教,我在任务详情页能看到 AI 生成的维客线索分析、关系分析、话术参考、客户分析
3. 作为助教,我提交备注后,系统自动通过 AI 分析备注内容,提取维客线索并评分
4. 作为管理者,我在财务看板能看到 AI 生成的财务洞察分析。
5. 作为系统,所有 AI 对话(含系统调用)都要持久化记录。
6. 作为系统,客户结账单出现后自动生成客户全量分析与运营建议。
7. 作为系统,应用 3/应用 6 产出新线索后,自动整合去重生成统一维客线索。
### 验收标准
- AC1应用 1 通用对话支持流式返回SSE前端逐字展示
- AC2应用 2 财务洞察每日自动更新,覆盖 8 个时间维度
- AC3应用 3 消费习惯在客户新增消费时自动更新
- AC4应用 4+5 在助教参与新结算时联动更新
- AC5应用 6 在回访备注提交后自动评分,返回 1-10 分 + 评价文本
- AC6所有 AI 调用记录持久化conversation_id, message_id, app_id, user_id/系统, role, content, tokens_used, nickname, created_at, site_id
- AC2应用 2 财务洞察每日自动更新,覆盖 8 个时间维度,返回结构化 JSON序号+标题+正文)
- AC3应用 3 维客线索在客户新增消费时自动更新,返回 JSON 维客线索(分类标签限 3 个枚举:客户基础/消费习惯/玩法偏好),提供者统一为"系统"
- AC4应用 4 在助教参与新结算/优先召回任务分配/高优先召回任务分配时触发,读取应用 8 最新缓存
- AC5应用 5 联动应用 4提供沟通话术
- AC6应用 6 在每个备注提交后自动分析,返回 JSON评分 1-10 + 维客线索 0-N 条,分类标签 6 个枚举:客户基础/消费习惯/玩法偏好/促销偏好/社交关系/重要反馈),提供者为当前备注提供人
- AC7应用 7 在消费事件链中应用 8 完成后触发(串行),基于客户全量信息生成运营策略
- AC8应用 8 在应用 3 或应用 6 有新内容产生后立即触发,整合去重维客线索
- AC9所有 AI 调用记录持久化conversation_id, message_id, app_id, user_id/系统, role, content, tokens_used, nickname, created_at, site_id
---
## 设计要点
### 6 个 AI 应用
### 8 个 AI 应用
| 应用 | 用途 | 调用方式 | 触发条件 |
|------|------|---------|---------|
| 应用 1 | 通用对话 | 用户主动(流式) | 点击 AI 入口 |
| 应用 2 | 财务洞察 | 后台轮询 | 每日 |
| 应用 3 | 消费习惯分析 | 后台轮询 | 客户新增消费 |
| 应用 4 | 关系分析/任务建议 | 后台轮询 | 助教参与新结算 |
| 应用 5 | 话术参考 | 后台联动 | 应用 4 调用时 |
| 应用 6 | 备注含金量 | 后台事件 | 回访任务完成时 |
| 应用 | 用途 | 调用方式 | 触发条件 | 返回格式 |
|------|------|---------|---------|---------|
| 应用 1 | 通用对话 | 用户主动(流式) | 点击 AI 入口 | SSE 流式文本 |
| 应用 2 | 财务洞察 | 后台轮询 | 每日 | JSON序号+标题+正文数组) |
| 应用 3 | 客户数据维客线索分析 | 后台事件 | 客户新增消费 | JSON线索数组详情+标签+摘要+Emoji |
| 应用 4 | 关系分析/任务建议 | 后台事件 | 助教参与新结算 / 优先召回任务分配 / 高优先召回任务分配 | JSON任务描述+行动建议数组+一句话总结) |
| 应用 5 | 话术参考 | 后台联动 | 应用 4 调用时 | JSON话术内容数组 |
| 应用 6 | 备注分析 | 后台事件 | 每个备注提交时 | JSON线索数组+评分) |
| 应用 7 | 客户分析 | 后台事件 | 消费事件链:应用 8 完成后 | JSON策略数组标题+正文 + 总结) |
| 应用 8 | 维客线索整理 | 后台联动 | 应用 3 或应用 6 有新内容时 | JSON整合后线索数组详情+标签+摘要+Emoji+提供者) |
### 调用链与时序
```
消费事件(结账单):
└→ 应用 3维客线索分析→ 应用 8线索整理→ 应用 7客户分析
(串行执行:应用 7 等待应用 8 完成后再启动,确保读到本次消费触发的最新线索)
如果该结算单有助教参与:
└→ 应用 4关系分析等待应用 8 完成后执行)→ 应用 5话术参考
备注提交事件:
└→ 应用 6备注分析→ 应用 8线索整理
任务分配事件(优先召回/高优先召回):
└→ 应用 4关系分析读取应用 8 最新缓存)→ 应用 5话术参考
```
- 消费事件链为严格串行:应用 3 → 应用 8 → 应用 7保证应用 7 的 reference 中包含本次消费产生的最新线索
- 应用 4 触发条件分两种场景:
- 消费事件(有助教参与的新结算单):等待应用 3 → 应用 8 完成后再执行,确保读到本次消费的最新线索
- 任务分配事件(优先召回/高优先召回):直接执行,读取应用 8 已有缓存
- 应用 8 在应用 3 或应用 6 每次产出后立即触发
- 应用 4 读取应用 8 缓存时若缓存不存在如新客户首次结算reference 传空对象Prompt 中标注"暂无历史线索"
### 应用分工说明
- 应用 3 vs 应用 6应用 3 侧重客观数据分析(消费、到店频率等),应用 6 侧重主观备注分析(备注内容价值挖掘)
- 应用 3 vs 应用 7应用 3 侧重单次消费触发的线索提取,应用 7 侧重客户全量信息的全局运营策略
- 应用 8整合应用 3 + 应用 6 的线索,合并相似内容,保持最小改动原则
### 信息隔离
@@ -72,25 +128,389 @@ biz.ai_messages
- created_at
biz.ai_cache
- id, cache_type (app2_finance/app3_habit/app4_analysis/app5_tactics/app6_score)
- id, cache_type (app2_finance / app3_clue / app4_analysis / app5_tactics / app6_note_analysis / app7_customer_analysis / app8_clue_consolidated)
- site_id, target_id (member_id 或 assistant_id 或 pair)
- result_json, score (应用6专用)
- triggered_by (trigger_job_id)
- created_at, expires_at
```
### 应用 3 返回格式
应用 3 侧重客观数据,分类标签限 3 个枚举,提供者统一为"系统"
```json
{
"clues": [
{
"category": "消费习惯",
"summary": "偏好周末下午时段消费",
"detail": "近3个月周末消费占比72%,分析过程...",
"emoji": "📅"
}
]
}
```
- 分类标签枚举:客户基础 / 消费习惯 / 玩法偏好
- 输入:客户近 3 个月消费数据DWD+DWS 订单明细全维度)、会员卡明细、余额合计、应到店日期、到店间隔
- 消费金额口径(已校准):使用 `items_sum`= table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money不得使用 `consume_money`(三种历史口径混合,详见 DWD-DOC consume/consume-money-caliber.md
- 参考信息:应用 6 的线索结果 + 最近 2 套应用 8 的历史信息(附生成时间)
### 应用 6 返回格式
应用 6 侧重主观备注分析,分类标签 6 个枚举,提供者为当前备注提供人:
```json
{
"score": 7,
"clues": [
{
"category": "社交关系",
"summary": "常带朋友来消费",
"detail": "备注提到经常约朋友周末来打球...",
"emoji": "👥"
}
]
}
```
- 分类标签枚举:客户基础 / 消费习惯 / 玩法偏好 / 促销偏好 / 社交关系 / 重要反馈
- 评分规则6 分为标准分,重复信息/低价值/时效性低酌情扣分,高价值信息酌情加分
- 输入:当前备注内容 + 客户消费数据 + 所有助教对该客户的全部备注
- 参考信息:应用 3 的线索结果 + 最近 2 套应用 8 的历史信息(附生成时间)
### 应用 7 返回格式
```json
{
"strategies": [
{
"title": "高频消费但余额不足",
"content": "客户近3个月消费12次但储值卡余额仅剩200元..."
}
],
"summary": "该客户为高频活跃用户,建议重点维护储值续费..."
}
```
- 输入:客户全量客观数据 + 所有备注(标注创建者)
- 消费金额口径(已校准):同应用 3使用 `items_sum` 而非 `consume_money`
- 参考信息:最新 + 最近 2 套应用 8 的历史信息(附生成时间)
- 主观信息需标注【来源XXX请甄别信息真实性】
### 应用 8 返回格式
```json
{
"clues": [
{
"category": "消费习惯",
"summary": "偏好周末下午时段消费",
"detail": "近3个月周末消费占比72%...",
"emoji": "📅",
"providers": "系统,张助教"
}
]
}
```
- 分类标签枚举:客户基础 / 消费习惯 / 玩法偏好 / 促销偏好 / 社交关系 / 重要反馈
- 输入:当前最新应用 3 + 应用 6 的全部线索内容
- 原则:合并相似线索(多提供者逗号分隔),其余原文返回,最小改动
### 首条 Prompt 数据结构(后端调用时拼接)
> 以下定义每个应用调用百炼 API 时后端需要拼接的首条用户消息user messageJSON 结构。
> System Prompt 见 `docs/prd/ai-app-prompts.md`。
> ⚠️ 占位标记(两阶段策略):各应用的 `consumption_records`、`assistant_info`、`service_history` 等字段当前为字符串占位符。
> P5-A 阶段只实现调用骨架Prompt 拼接函数留接口。具体 JSON 子结构在以下阶段细化:
> - 应用 4/5 的 `service_history`、`assistant_info` → P6-T4task-detail 页面 API 开发时)
> - 应用 3/6/7 的 `consumption_records`、`objective_data` → P9-T1customer-detail 页面 API 开发时)
**通用规则(所有应用生效):**
- 所有首条 Prompt JSON 中统一加入 `"current_time": "2026-03-08 14:30:25"` 字段(精确到秒),让 AI 知道当前时间上下文
- 所有 reference 中的参考资料必须标注生成时间(`generated_at` 字段),让 AI 判断信息时效性
#### 应用 1通用对话
由前端发起,首条消息为页面上下文:
```json
{
"current_time": "2026-03-08 14:30:25",
"source_page": "来源页面标识(如 task-detail、board-finance",
"page_context": "页面上下文摘要(客户信息、任务信息等结构化文本)",
"screen_content": "用户当前屏幕可见内容的文本化描述"
}
```
#### 应用 2财务洞察
```json
{
"current_time": "2026-03-08 08:05:00",
"site_id": 12345,
"time_dimension": "本月",
"date_range": {"start": "2026-03-01 08:00:00", "end": "2026-04-01 08:00:00"},
"current_period": {
"income_structure": {"table_fee": 0, "assistant_pd": 0, "assistant_cx": 0, "goods": 0, "recharge": 0},
"prepaid_assets": {"total_balance": 0, "recharge_amount": 0, "consumption_deduction": 0},
"expense_summary": {"rent": 0, "utilities": 0, "supplies": 0, "salary": 0, "other": 0},
"platform_settlement": {"groupbuy_income": 0, "platform_fee": 0, "net_income": 0}
},
"previous_period": {
"time_dimension": "上月",
"date_range": {"start": "2026-02-01 08:00:00", "end": "2026-03-01 08:00:00"},
"income_structure": {},
"prepaid_assets": {},
"expense_summary": {},
"platform_settlement": {}
}
}
```
- 8 个时间维度:本月/上月/本周/上周/前3月不含本月/本季/上季/近6月不含本月
- 营业日分界点 08:00
- 收入结构字段映射已校准数据源DWD-DOC 03-财务全景):`table_fee` = `table_charge_money`56.6%)、`assistant_pd` = `assistant_pd_money`30.6%)、`assistant_cx` = `assistant_cx_money`0.9%)、`goods` = `goods_money`10.1%)、`recharge` = 充值 pay_amountsettle_type=5
- `electricity_money` 全为 0门店未启用灯控不纳入收入结构
#### 应用 3客户数据维客线索分析
```json
{
"current_time": "2026-03-08 14:30:25",
"member_nickname": "客户昵称",
"main_data": {
"consumption_records": "近3个月消费数据DWD+DWS 订单明细:台费、充值、助教消费等全维度)",
"member_cards": "名下会员卡明细",
"card_balance_total": 0,
"stored_value_balance_total": 0,
"expected_visit_date": "2026-03-10",
"days_since_last_visit": 15
},
"reference": {
"app6_clues": "应用6的线索结果如有",
"app8_history": [
{"generated_at": "2026-03-01", "clues": "最近第1套应用8结果"},
{"generated_at": "2026-02-15", "clues": "最近第2套应用8结果"}
]
}
}
```
#### 应用 4关系分析 / 任务建议
```json
{
"current_time": "2026-03-08 14:30:25",
"assistant_info": "助教基本信息(花名、级别、工龄等)",
"service_history": "助教服务该客户的历史记录",
"task_assignment_basis": "任务分配的依据(新结算/优先召回/高优先召回)",
"customer_data": {
"system_data": "客户近3个月消费数据同应用3的 main_data 结构)",
"notes": [
{"recorded_by": "备注创建者", "content": "备注全文", "created_at": "时间"}
]
},
"reference": {
"app8_current": "当前最新维客线索应用8结果",
"app8_history": [
{"generated_at": "2026-03-01", "clues": "最近第1套应用8结果"},
{"generated_at": "2026-02-15", "clues": "最近第2套应用8结果"}
]
}
}
```
#### 应用 5话术参考
```json
{
"current_time": "2026-03-08 14:30:25",
"assistant_info": "助教基本信息",
"service_history": "助教服务该客户的历史记录",
"task_assignment_basis": "任务分配的依据",
"customer_data": {
"system_data": "客户近3个月消费数据同应用3的 main_data 结构)",
"notes": [
{"recorded_by": "备注创建者", "content": "备注全文", "created_at": "时间"}
]
},
"task_suggestion": "本次任务建议应用4返回的完整结果",
"reference": {
"app8_history": [
{"generated_at": "2026-03-01", "clues": "最近第1套应用8结果"},
{"generated_at": "2026-02-15", "clues": "最近第2套应用8结果"}
]
}
}
```
#### 应用 6备注分析
```json
{
"current_time": "2026-03-08 14:30:25",
"current_note": {
"content": "本次提交的备注内容",
"recorded_by": "备注创建者",
"created_at": "提交时间"
},
"reference": {
"member_nickname": "客户昵称",
"consumption_data": "客户近3个月消费数据同应用3的 main_data 结构)",
"all_notes": [
{"recorded_by": "创建者", "content": "备注全文", "created_at": "时间"}
],
"app3_clues": "应用3的线索结果如有",
"app8_history": [
{"generated_at": "2026-03-01", "clues": "最近第1套应用8结果"},
{"generated_at": "2026-02-15", "clues": "最近第2套应用8结果"}
]
}
}
```
#### 应用 7客户分析
```json
{
"current_time": "2026-03-08 14:30:25",
"member_id": 12345,
"member_nickname": "客户昵称",
"objective_data": "客户近3个月消费数据同应用3的 main_data 结构)",
"subjective_data": {
"notes": [
{"recorded_by": "创建者", "content": "备注全文", "created_at": "时间"}
]
},
"reference": {
"app8_current": "最新维客线索应用8结果",
"app8_history": [
{"generated_at": "2026-03-01", "clues": "最近第1套应用8结果"},
{"generated_at": "2026-02-15", "clues": "最近第2套应用8结果"}
]
}
}
```
#### 应用 8维客线索整理
```json
{
"current_time": "2026-03-08 14:30:25",
"app3_clues": {
"generated_at": "2026-03-05 14:30:00",
"clues": [
{"detail": "...", "category": "消费习惯", "summary": "...", "emoji": "📅"}
]
},
"app6_clues": {
"generated_at": "2026-03-05 14:25:00",
"clues": [
{"category": "社交关系", "emoji": "👥", "detail": "...", "summary": "..."}
]
}
}
```
### 数据写入规则
- 应用 1流式返回完成后将完整的 assistant 回复写入 `ai_messages`role=assistant用户消息在发送时即写入role=user
- 应用 3/6 的线索产出后,先写入 `ai_cache`,再触发应用 8
- 应用 8 整合后的线索**全量替换**该客户在 `member_retention_clue` 中的所有 AI 来源线索(`source IN ('ai_consumption', 'ai_note')`),人工线索(`source='manual'`)不受影响。全量替换合理性:应用 8 输入包含应用 3 + 应用 6 的全部线索AI 整合时会保留重要内容,输出即为该客户的完整 AI 线索集
- 应用 2/4/5/7 的结果写入 `ai_cache`,供前端读取
- 所有 AI 调用记录写入 `ai_conversations` + `ai_messages`(含 tokens_used 统计)
### 应用 8 → member_retention_clue 字段映射
应用 8 返回的每条线索写入 `member_retention_clue` 时,字段映射如下:
| 应用 8 返回字段 | member_retention_clue 列 | 说明 |
|----------------|-------------------------|------|
| `category` | `category` | 直接映射,枚举值必须与 DDL CHECK 约束一致6 个值) |
| `emoji` + `summary` | `summary` | emoji 拼接在 summary 前面存储,如 `📅 偏好周末下午时段消费`,前端直接读取展示 |
| `detail` | `detail` | 直接映射 |
| `providers` | `recorded_by_name` | 多提供者逗号分隔,如 `系统,张助教` |
| — | `recorded_by_assistant_id` | 系统触发时填 NULL |
| — | `source` | 根据线索来源判断:纯应用 3 产出 → `ai_consumption`,纯应用 6 产出 → `ai_note`,混合来源 → `ai_consumption`(以客观数据为主) |
| — | `member_id` | 从触发上下文获取 |
| — | `site_id` | 从触发上下文获取 |
| — | `recorded_at` | 写入时间 NOW() |
### ai_cache 数据保留策略
- 应用 1通用对话对话记录保留在 `ai_conversations` + `ai_messages` 中,无条数限制(按需清理)
- 应用 2-8每个 `(cache_type, site_id, target_id)` 组合保留最近 500 条记录,超过时删除最旧的
- 清理时机:每次写入新记录后,异步检查并清理超限记录
### ai_cache target_id 约定
| 应用 | cache_type | target_id 含义 | 示例 |
|------|-----------|---------------|------|
| 应用 2 | app2_finance | 时间维度编码 | `this_month``last_week``last_3_months` 等 |
| 应用 3 | app3_clue | member_id | `12345` |
| 应用 4 | app4_analysis | `{assistant_id}_{member_id}` | `100_12345` |
| 应用 5 | app5_tactics | `{assistant_id}_{member_id}` | `100_12345` |
| 应用 6 | app6_note_analysis | member_id | `12345` |
| 应用 7 | app7_customer_analysis | member_id | `12345` |
| 应用 8 | app8_clue_consolidated | member_id | `12345` |
应用 2 的 8 个时间维度编码:`this_month` / `last_month` / `this_week` / `last_week` / `last_3_months` / `this_quarter` / `last_quarter` / `last_6_months`
### 应用 2 调度机制
- 调度方式ETL 调度器中的调度任务,在每日 08:00营业日切点后的首次任务执行时触发
- 执行逻辑DWS 日更数据更新完成后,依次对 8 个时间维度发起独立调用(共 8 次百炼 API 调用)
- 每次调用生成一条 `ai_cache` 记录,`target_id` 为时间维度编码
- 如果 ETL 调度器中尚无此调度逻辑,需在 P5-A 阶段补充
### 应用 1 对话历史管理
- 每次从任意页面进入 chat 页面时,始终新建对话(`ai_conversations` 新增一行),不复用已有对话
- 历史对话列表按时间倒序展示20 条/页懒加载
- 暂不支持删除对话
### 前端消费方式
| 应用 | 前端展示位置 | 数据来源 | 展示说明 |
|------|-------------|---------|---------|
| 应用 1 | chat 页面 | SSE 流式 + `ai_messages` | 实时对话,历史记录从 ai_messages 读取 |
| 应用 2 | board-finance 财务看板 | `ai_cache`cache_type=app2_finance | JSON 数组渲染为洞察卡片(序号+标题+正文) |
| 应用 3 | 不直接展示 | `ai_cache`cache_type=app3_clue | 作为基础资料供应用 8 整合,不在页面显示 |
| 应用 4 | task-detail 任务详情页 | `ai_cache`cache_type=app4_analysis | 展示任务描述+行动建议+一句话总结;`summary` 摘要同时在 task-list 任务卡片中显示 |
| 应用 5 | task-detail 任务详情页 | `ai_cache`cache_type=app5_tactics | 展示话术参考列表 |
| 应用 6 | task-detail 备注卡片 | `ai_cache`cache_type=app6_note_analysis | `score` 以打星方式呈现在备注卡片上;线索部分不直接展示,作为基础资料供应用 8 整合 |
| 应用 7 | customer-detail 客户详情页 | `ai_cache`cache_type=app7_customer_analysis | 展示运营策略数组+总结 |
| 应用 8 | customer-detail + task-detail | `member_retention_clue` 表 | 展示整合后的维客线索Emoji+标签+摘要+详情task-detail 中提供者显示为"By:系统"或"By:备注"(不显示具体人名) |
---
## 任务清单
- [ ] T1创建 `biz.ai_conversations` + `biz.ai_messages` + `biz.ai_cache`
- [ ] T2实现百炼 API 统一封装层(流式/非流式、重试、日志)
- [ ] T3实现应用 1 通用对话 APISSE 流式返回
- [ ] T4:实现页面内容文本化工具(各页面数据 → AI 可读文本
- [ ] T5:实现应用 2 财务洞察轮询任务
- [ ] T6:实现应用 3 消费习惯分析轮询任务
- [ ] T7:实现应用 4 关系分析轮询任务
- [ ] T8:实现应用 5 话术参考联动任务
- [ ] T9:实现应用 6 备注含金量评分(集成到回访完成事件
- [ ] T10实现 AI 缓存读写 API前端读取缓存结果
- [ ] T11查阅百炼文档确认流式返回技术方案SSE vs WebSocket
### P5-A 阶段当前执行Prompt 已确定 + 调用骨架)
- [ ] T1创建 `biz.ai_conversations` + `biz.ai_messages` + `biz.ai_cache`cache_type 扩展 app7/app8
- [ ] T2:实现百炼 API 统一封装层(流式/非流式、重试、日志、JSON 输出模式
- [ ] T3:实现应用 1 通用对话 APISSE 流式返回,上下文注入框架先搭建,页面文本化工具留接口)
- [ ] T5:实现应用 2 财务洞察轮询任务Prompt 已完全确定JSON 输出:序号+标题+正文)
- [ ] T6-骨架:实现应用 3 触发机制 + 调用框架Prompt 拼接函数留接口,`consumption_records` 等字段待 P9-T1 细化)
- [ ] T7-骨架:实现应用 4 触发机制 + 调用框架Prompt 拼接函数留接口,`service_history` 等字段待 P6-T4 细化)
- [ ] T8-骨架:实现应用 5 联动框架Prompt 拼接函数留接口,随应用 4 同步细化
- [ ] T9-骨架:实现应用 6 触发机制 + 调用框架Prompt 拼接函数留接口,`consumption_data` 等字段待 P9-T1 细化
- [ ] T10-骨架:实现应用 7 触发机制 + 调用框架Prompt 拼接函数留接口,`objective_data` 等字段待 P9-T1 细化
- [ ] T11实现应用 8 维客线索整理Prompt 已完全确定,应用 3/6 产出后触发,合并去重→写入 member_retention_clue
- [ ] T12实现 AI 缓存读写 API前端读取缓存结果
- [ ] T13查阅百炼文档确认流式返回技术方案SSE vs WebSocket及 JSON 输出最佳实践
### P5-B 阶段Prompt 细化,分散到对应页面 spec
以下任务不在 P5 中独立执行,而是嵌入对应页面的开发任务:
- [ ] T4实现页面内容文本化工具各页面数据 → AI 可读文本)→ 随 P6-P9 各页面逐步实现
- [ ] T6-完整:应用 3 Prompt JSON 细化 + 拼接实现 → 在 P9-T1customer-detail API中完成
- [ ] T7-完整:应用 4 Prompt JSON 细化 + 拼接实现 → 在 P6-T4task-detail API中完成
- [ ] T8-完整:应用 5 Prompt JSON 细化 + 拼接实现 → 在 P6-T4task-detail API中完成
- [ ] T9-完整:应用 6 Prompt JSON 细化 + 拼接实现 → 在 P9-T1customer-detail API中完成
- [ ] T10-完整:应用 7 Prompt JSON 细化 + 拼接实现 → 在 P9-T1customer-detail API中完成

View File

@@ -0,0 +1,100 @@
# P5.1MCP Server AI 扩展 — mcp-server-ai-extension
> 优先级P5.1(分批执行,见下方阶段说明)
> 预估工作量:中等
> 前置条件ETL 数据全景文档 ✅ 已完成(`docs/reports/DWD-DOC/`2026-03-06、P5 AI 集成层 spec 确定
---
## 分批执行策略2026-03-07 评审决定)
P5.1 的任务按依赖成熟度分三批:
### 批次 A立即可执行无前置依赖
- T4重写 MCP 查库手册 — ETL 库部分DWD-DOC 已完成DWS 34 张表全字段)
### 批次 BP5-A 之后(需 biz 表存在)
- T1MCP Server 新增 `zqyy_app` 数据库连接池
- T2扩展 MCP 工具支持多数据库路由
- T3实现 `zqyy_app` 敏感字段脱敏策略
- T5重写 MCP 查库手册 — 业务库部分auth/biz/public 全字段)
- T6补充常用查询模式
### 批次 C批次 B 完成后
- T7手册上传百炼平台并验证 AI 应用引用效果
---
## 需求Requirements
### 用户故事
1. 作为 AI 应用(应用 1 通用对话),我需要通过 MCP 工具查询 `etl_feiqiu` 数据仓库,获取会员、订单、助教、财务等运营数据。
2. 作为 AI 应用(应用 1 通用对话),我需要通过 MCP 工具查询 `zqyy_app` 业务库获取备注、任务、维客线索、AI 缓存等业务数据。
3. 作为系统MCP Server 需要提供完整的数据库查询手册,供百炼平台 AI 应用作为知识库引用。
### 验收标准
- AC1MCP Server 支持同时连接 `etl_feiqiu`ETL 六层 Schema`zqyy_app`auth/biz/public Schema
- AC2`zqyy_app` 连接仅允许只读查询SELECT`etl_feiqiu` 相同的安全限制
- AC3MCP 查库手册覆盖所有可查询表的完整字段说明(每张表列出全部字段)
- AC4手册上传百炼平台后AI 应用可直接参考手册进行查询,无需频繁调用 describe_table
---
## 设计要点
### MCP Server 扩展
当前 MCP Server`apps/mcp-server/`)仅连接 `etl_feiqiu` 库。需要扩展:
1. **新增 `zqyy_app` 数据库连接**
- 使用 `APP_DB_DSN` 环境变量(已在根 `.env` 定义)
- 只读连接,与 `etl_feiqiu` 相同的安全策略
- 可访问 Schema`auth``biz``public`
2. **工具扩展**
- 现有 4 个工具list_tables、describe_table、describe_schemas、query_sql需支持指定目标数据库
- 新增参数 `database`(可选,默认 `etl_feiqiu`,可选 `zqyy_app`
- 或通过 schema 名称自动路由(`ods/dwd/dws/core/meta/app` → etl_feiqiu`auth/biz/public` → zqyy_app
3. **权限控制**
- `zqyy_app``auth` schema 中敏感字段(如 `wx_openid``phone`)需要在查询结果中脱敏或限制访问
- `biz` schema 的 `ai_messages.content` 字段包含对话内容,需考虑隐私保护
### MCP 查库手册重写
当前手册:`docs/mcp/AI-DATABASE-QUERY-MANUAL.md`
> **数据字段权威参考**:手册中涉及的 DWD/DWS 层字段来源、金额口径、业务逻辑,
> 以 `docs/reports/DWD-DOC/` 校准文档为准(数据快照 2026-03-06
> 核心规则:
> - `consume_money` 存在三种历史口径混合,不可直接使用;应使用 `items_sum`= table_charge_money + goods_money + assistant_pd_money + assistant_cx_money + electricity_money
> - 收入结构拆分为台桌费、陪打费、超休费、商品费、电费五项,不使用笼统的 `service_fee`
> - settle_type 映射1=台桌结账(78.6%)、3=商城订单(21.4%)、5=充值、7=充值退款、6=结算退款
> - 详见 [consume_money 口径说明](../reports/DWD-DOC/consume/consume-money-caliber.md)、[财务全景](../reports/DWD-DOC/03-financial-panorama.md)、[业务全景](../reports/DWD-DOC/01-business-panorama.md)
重写范围:
- **保留**:架构流程、六层 Schema 概览、4 个 MCP 工具详解
- **补充**DWS 层完整表清单34 张表按业务域分组,每表全部字段)
- **新增**`zqyy_app` 业务库表结构biz.notes、biz.coach_tasks、biz.member_retention_clue、biz.ai_cache 等)
- **新增**常用查询模式维客线索、任务系统、备注、AI 缓存)
- **新增**金额口径说明章节consume_money 不可用、items_sum 定义、settle_type 映射表)
- **优化**:补充表的最新数据量统计、查询性能建议
---
## 任务清单
### 批次 A — 立即可执行
- [ ] T4重写 MCP 查库手册 — ETL 库部分DWD/DWS 全字段,基于 DWD-DOC 标杆文档)
### 批次 B — P5-A 之后(依赖 P1 + P4 + P5-Abiz 表已建)
- [ ] T1MCP Server 新增 `zqyy_app` 数据库连接池(使用 `APP_DB_DSN`
- [ ] T2扩展 MCP 工具支持多数据库路由(按 schema 名称自动选择连接)
- [ ] T3实现 `zqyy_app` 敏感字段脱敏策略
- [ ] T5重写 MCP 查库手册 — 业务库部分auth/biz/public 全字段)
- [ ] T6补充常用查询模式维客线索、任务、备注、AI 缓存)
### 批次 C — 批次 B 完成后
- [ ] T7手册上传百炼平台并验证 AI 应用引用效果

View File

@@ -1,7 +1,8 @@
# P6小程序前端 — 任务模块 — miniapp-fe-tasks
> 优先级P6依赖 P3 + P4 + P5
> 优先级P6依赖 P3 + P4 + P5-A
> 预估工作量:大
> P5-B 承接T4 同时细化 P5 应用 4/5 的 Prompt JSON 结构
---
@@ -24,6 +25,9 @@
- AC5跟/弃 icon 正确展示
- AC6当月数据显示"预估"标记
- AC7跳档激励"到达XXX即得YYY"计算正确
- AC8任务卡片展示应用 4 的一句话总结ai_cache 缓存读取)
- AC9备注卡片以打星方式展示应用 6 评分1-10 分,映射公式:`星数 = score ÷ 2`5 颗星,支持半星;如 score=7 → 3.5 星)
- AC10维客线索提供者按 source 字段显示"By:系统"或"By:备注",不显示具体人名
---
@@ -31,14 +35,22 @@
### task-list任务列表 + 绩效)
- 任务列表:优先级分组、长按操作
- 任务卡片:展示应用 4 的 `summary`(一句话总结)作为 AI 摘要(从 `ai_cache` cache_type=app4_analysis 读取)
- 绩效区域:当月业绩/档位/工资/跳档激励
- 通用组件:爱心 icon、喜好标签、跟/弃 icon
### task-detail任务详情
- 客户信息卡片
- 近期服务记录(时间+时长)
- AI 区域:消费习惯应用3缓存、关系分析+任务建议+一句话总结应用4缓存、话术参考应用5缓存、备注星级应用6
- 备注入口(提交后触发回访完成判定
- AI 区域:
- 维客线索(应用 8 整合线索 + 人工,读取 `member_retention_clue`Emoji 作为二级标签、提供者逗号分隔展示
- 客户分析(应用 7 缓存:运营策略数组 + 总结)
- 关系分析 + 任务建议 + 一句话总结(应用 4 缓存,读取应用 8 最新线索)
- 话术参考(应用 5 缓存)
- 备注分析评分(应用 6 缓存1-10 分)
- 备注入口(提交后触发回访完成判定);备注弹窗含星星评分(再次服务意愿+再来店可能性,各 1-5 星):回访任务默认展开评分区域,其他任务类型默认隐藏通过"展开评价"按钮手动打开
- 备注卡片展示应用 6 的 `score`1-10 分),以打星方式呈现(`星数 = score ÷ 2`5 颗星,支持半星;从 `ai_cache` cache_type=app6_note_analysis 读取)
- 维客线索(应用 8提供者显示规则`source=ai_consumption` 显示"By:系统"`source=ai_note` 显示"By:备注",不显示具体人名
- "问问助手"按钮 → chat.html
### notes备注管理
@@ -47,12 +59,27 @@
---
## 小程序前端开发强制规范
> 以下规范适用于本 SPEC 中所有小程序页面实现,具有强制约束力。
1. **原型图是唯一视觉真相**`docs/h5_ui/pages/*.html` 中的结构、层次、元素、配色、间距、交互行为是小程序页面实现的唯一参考标准。任何偏离原型图的实现都需要明确的产品确认。
2. **WXML ≠ HTML**:严禁在小程序中使用 HTML 标签div/span/p/a/img 等必须使用小程序原生标签view/text/image/navigator 等)。
3. **WXSS ≠ CSS**:使用 rpx 单位、仅支持有限选择器、无 DOM/BOM API、样式隔离机制不同。Tailwind CSS 类名必须手动转换为 WXSS。
4. **TDesign 优先**:凡 TDesign 组件库能覆盖的 UI 元素,必须使用 TDesign 组件;自定义实现仅限 TDesign 无法覆盖的场景。
5. **Power 文档优先**:实现前必须加载 `wechat-miniprogram` Power 的相关 steering 文件(`view-layer.md``tdesign.md``builtin-components.md`),确保语法和组件用法正确。
6. **项目踩坑指南必读**:实现前必须阅读 `docs/prd/MIGRATION-PLAYBOOK.md` 第六章,该文档是基于本项目实际转换经验的避坑手册,涵盖 WXML/WXSS 差异、事件系统、TDesign 用法、rpx 换算规则及新页面开发 Checklist。
---
## 任务清单
- [ ] T1实现 task-list 页面(任务列表 + 分组 + 排序)
- [ ] T2实现长按操作置顶/放弃/AI
- [ ] T3实现绩效展示区域业绩/档位/工资/跳档激励)
- [ ] T4实现 task-detail 页面(客户信息 + 服务记录 + AI 区域)
- [ ] T5实现备注提交功能集成回访完成判定
- T4-a细化 P5 应用 4关系分析Prompt JSON 结构,实现 `service_history``assistant_info` 等字段的拼接函数(对应 P5-T7-完整
- T4-b细化 P5 应用 5话术参考Prompt JSON 结构,实现拼接函数(对应 P5-T8-完整)
- [ ] T5实现备注提交功能集成回访完成判定 + 星星评分:回访任务默认展开,其他任务类型通过"展开评价"按钮手动打开)
- [ ] T6实现 notes 页面(列表 + 删除)
- [ ] T7实现通用组件爱心 icon、喜好标签、跟/弃 icon、预估标记

View File

@@ -10,14 +10,14 @@
### 用户故事
1. 作为助教,我在绩效页面能看到当月收入、业绩档位、工资预估。
2. 作为助教,我能看到本月/上月的服务记录明细,按天归总。
2. 作为助教,我能看到本月/上月的服务记录明细,按天归总。(营业日以 08:00 为分割点,如"本月"= 当月1日 08:00 ~ 次月1日 08:00
3. 作为助教,我能看到"我的新客"(首次服务且 2 月内服务 ≤2 次的客户)和"我的常客"2 月内服务次数最多的客户)。
4. 作为助教,我在业绩明细页能看到每条服务的详情,包括定档折算惩罚展示。
### 验收标准
- AC1收入与业绩档位数据从 `dws_assistant_salary_calc` 正确读取
- AC2服务记录按天归总展示支持本月/上月切换
- AC2服务记录按天归总展示支持本月/上月切换(营业日以 08:00 为分割点)
- AC3"我的新客"筛选逻辑正确(该助教首次服务 + 2 月内 + 服务次数 ≤2
- AC4"我的常客"按服务次数降序,展示次数、小时数、工资合计
- AC5业绩明细每条展示结账时间、课程类型、台桌/房间、会员昵称、开始/结束时间、业绩分钟
@@ -31,14 +31,14 @@
### performance我的绩效
- 收入与业绩档位卡片
- 服务记录明细(按天归总,本月/上月切换)
- 服务记录明细(按天归总,本月/上月切换;营业日以 08:00 为分割点
- 我的新客列表(按最后服务时间排列)
- 我的常客列表(按服务次数降序)
- 服务明细:按天/月归总整合数据
### performance-records业绩明细
- 口径选择(本月/上月/本周/上周等)
- 口径选择(本月/上月/本周/上周等;营业日以 08:00 为分割点,如"本月"= 当月1日 08:00 ~ 次月1日 08:00
- 业绩列表(每条含:结账时间、课程类型、台桌/房间、会员昵称、开始/结束时间、业绩分钟+折算展示)
- 按天/月归总整合
@@ -56,6 +56,19 @@
---
## 小程序前端开发强制规范
> 以下规范适用于本 SPEC 中所有小程序页面实现,具有强制约束力。
1. **原型图是唯一视觉真相**`docs/h5_ui/pages/*.html` 中的结构、层次、元素、配色、间距、交互行为是小程序页面实现的唯一参考标准。任何偏离原型图的实现都需要明确的产品确认。
2. **WXML ≠ HTML**:严禁在小程序中使用 HTML 标签div/span/p/a/img 等必须使用小程序原生标签view/text/image/navigator 等)。
3. **WXSS ≠ CSS**:使用 rpx 单位、仅支持有限选择器、无 DOM/BOM API、样式隔离机制不同。Tailwind CSS 类名必须手动转换为 WXSS。
4. **TDesign 优先**:凡 TDesign 组件库能覆盖的 UI 元素,必须使用 TDesign 组件;自定义实现仅限 TDesign 无法覆盖的场景。
5. **Power 文档优先**:实现前必须加载 `wechat-miniprogram` Power 的相关 steering 文件(`view-layer.md``tdesign.md``builtin-components.md`),确保语法和组件用法正确。
6. **项目踩坑指南必读**:实现前必须阅读 `docs/prd/MIGRATION-PLAYBOOK.md` 第六章,该文档是基于本项目实际转换经验的避坑手册,涵盖 WXML/WXSS 差异、事件系统、TDesign 用法、rpx 换算规则及新页面开发 Checklist。
---
## 任务清单
- [ ] T1实现绩效汇总 API含定档、工资、档位
@@ -64,4 +77,4 @@
- [ ] T4实现业绩明细 API含定档折算惩罚字段
- [ ] T5实现 performance 小程序页面
- [ ] T6实现 performance-records 小程序页面
- [ ] T7实现"预估"标记组件(当月/本周数据自动标记)
- [ ] T7实现"预估"标记组件(当月/本周数据自动标记;营业日以 08:00 为分割点

View File

@@ -1,6 +1,6 @@
# P8小程序前端 — 看板模块 — miniapp-fe-boards
> 优先级P8依赖 P2 + P3 + P5
> 优先级P8依赖 P2 + P3 + P5-A
> 预估工作量:大
---
@@ -18,7 +18,7 @@
- AC1财务看板支持 2 组筛选交叉(区域 × 时间),选择非"全部区域"时预收资产板块消失
- AC2财务看板环比数据正确计算
- AC3财务看板 AI 洞察从缓存读取(应用 2 每日更新)
- AC3财务看板 AI 洞察从缓存读取(应用 2 每日更新JSON 格式:序号+标题+正文数组
- AC4客户看板 8 个维度筛选正确(最应召回/最大消费潜力/最高余额/最近充值/最高消费60天/最频繁60天/最近到店/最专一)
- AC5客户看板"最专一"维度下类型筛选锁定为"不限"
- AC6助教看板维度×项目×日期三重筛选交叉正确
@@ -30,16 +30,16 @@
### board-finance财务看板
- 筛选器:区域筛选 + 时间筛选(本月/上月/本周/上周/前3月/本季/上季/近6月
- 筛选器:区域筛选 + 时间筛选(本月/上月/本周/上周/前3月/本季/上季/近6月;营业日以 08:00 为分割点,如"本月"= 当月1日 08:00 ~ 次月1日 08:00
- 数据板块:收入结构、预收资产(条件隐藏)、支出汇总、平台结算
- 环比展示
- AI 智能洞察(应用 2 缓存结果)
- AI 智能洞察(应用 2 缓存结果JSON 结构化输出:数组,每条含序号+标题+正文详情UI 布局参考 `docs/h5_ui/` 财务看板 AI 智能洞察
- "问问助手"入口 → chat.html
### board-customer客户看板
- 维度筛选8 个维度,默认"最应召回"
- 类型筛选(全部/台球/斯诺克/麻将/团建 + 台费包厢流水过滤)
- 类型筛选(全部/🎱 中式/追分/斯诺克/🀄 麻将/棋牌/🎤 团建/K歌 + 台费包厢流水过滤)
- 筛选互斥规则:"最专一"锁定类型为"不限"
- 客户列表(前 100 名)
- 每个客户卡片:昵称、爱心 icon、喜好标签、关键指标值
@@ -48,8 +48,8 @@
### board-coach助教看板
- 维度筛选:定档业绩最高/最低、工资最高/最低、高客源储值额最高、任务完成最多
- 项目筛选:全部/🎱/斯诺克/麻将/团建
- 日期维度筛选:本月/上月/本周/上周/前3月/本季/上季/近6月
- 项目筛选:全部/🎱 中式/追分/斯诺克/🀄 麻将/棋牌/🎤 团建/K歌
- 日期维度筛选:本月/上月/本周/上周/前3月/本季/上季/近6月(营业日以 08:00 为分割点,如"本月"= 当月1日 08:00 ~ 次月1日 08:00
- 助教列表
- 右下角 AI 按钮 → chat.html
@@ -64,12 +64,50 @@
| `GET /api/board/customers` | 客户看板(维度+类型筛选) | 是 |
| `GET /api/board/coaches` | 助教看板(维度×项目×日期) | 是 |
### 财务看板数据字段映射已校准数据源DWD-DOC 03-财务全景)
收入结构settle_type=1台桌结账
| 收入来源 | DWS 字段 | 占比 | 说明 |
|----------|----------|-----:|------|
| 台费 | `table_charge_money` | 56.6% | 按秒计时,台区单价固定 |
| 助教陪打 | `assistant_pd_money` | 30.6% | 按秒计时,单价按等级 |
| 商品 | `goods_money` | 10.1% | 酒水食品 |
| 助教超休 | `assistant_cx_money` | 0.9% | 按课时190 元/课时 |
| 灯控电费 | `electricity_money` | 0% | 门店未启用,全为 0 |
> ⚠️ 消费金额口径:使用 `items_sum`= tc + goods + pd + cx + electricity不得使用 `consume_money`(三种历史口径混合)。
充值收入settle_type=5`dws_finance_recharge_summary` 读取充值退款settle_type=7需扣除。
支付渠道分布settle_type=1
- 纯团购券 60.6%、纯线上支付 14.0%、纯储值卡 10.6%、线上+团购券 9.7%
### 客户看板金额口径说明
- "最高消费60天":基于 `dws_member_consumption_summary` 中的消费汇总字段,底层应基于 `items_sum` 聚合
- "最高余额":基于 `dws_member_consumption_summary` 中的余额字段(= 储值卡余额,独立于消费金额)
- "最近充值":基于 `dwd_recharge_order`settle_type=5
### 缓存策略
- 看板数据缓存层Redis 或内存缓存
- 缓存粒度:`site_id` + 筛选条件组合
- 缓存过期ETL 数据更新后失效(约 1 小时)
- AI 洞察缓存:从 `biz.ai_cache` 读取(应用 2 每日更新)
- AI 洞察缓存:从 `biz.ai_cache` 读取(应用 2 每日更新`cache_type = app2_finance``result_json` 为 JSON 数组:序号+标题+正文详情
---
## 小程序前端开发强制规范
> 以下规范适用于本 SPEC 中所有小程序页面实现,具有强制约束力。
1. **原型图是唯一视觉真相**`docs/h5_ui/pages/*.html` 中的结构、层次、元素、配色、间距、交互行为是小程序页面实现的唯一参考标准。任何偏离原型图的实现都需要明确的产品确认。
2. **WXML ≠ HTML**:严禁在小程序中使用 HTML 标签div/span/p/a/img 等必须使用小程序原生标签view/text/image/navigator 等)。
3. **WXSS ≠ CSS**:使用 rpx 单位、仅支持有限选择器、无 DOM/BOM API、样式隔离机制不同。Tailwind CSS 类名必须手动转换为 WXSS。
4. **TDesign 优先**:凡 TDesign 组件库能覆盖的 UI 元素,必须使用 TDesign 组件;自定义实现仅限 TDesign 无法覆盖的场景。
5. **Power 文档优先**:实现前必须加载 `wechat-miniprogram` Power 的相关 steering 文件(`view-layer.md``tdesign.md``builtin-components.md`),确保语法和组件用法正确。
6. **项目踩坑指南必读**:实现前必须阅读 `docs/prd/MIGRATION-PLAYBOOK.md` 第六章,该文档是基于本项目实际转换经验的避坑手册,涵盖 WXML/WXSS 差异、事件系统、TDesign 用法、rpx 换算规则及新页面开发 Checklist。
---

View File

@@ -1,7 +1,8 @@
# P9小程序前端 — 详情与对话模块 — miniapp-fe-details
> 优先级P9依赖 P3 + P4 + P5
> 优先级P9依赖 P3 + P4 + P5-A
> 预估工作量:大
> P5-B 承接T1 同时细化 P5 应用 3/6/7 的 Prompt JSON 结构
---
@@ -37,7 +38,8 @@
- 商城订单:助教列表(花名+级别+课程类型+服务时长+定档绩效)、支付金额、食品酒水总金额
- 充值:充值金额、支付方式
- 备注列表
- AI 消费习惯分析(应用 3 缓存
- AI 维客线索(应用 8 整合线索 + 人工,读取 `member_retention_clue`Emoji 作为二级标签、提供者逗号分隔展示
- AI 客户分析(应用 7 缓存:运营策略数组 + 总结,结账单出现后自动生成;从 `ai_cache` cache_type=app7_customer_analysis 读取)
- "问问助手"入口 → chat.html
### coach-detail助教详情
@@ -81,22 +83,68 @@
### 消费记录 settle_type 区分
需要查库确认的字段(待 P1 完成后验证):
- 台桌结账:`settle_type` 对应值(需查 `dwd_settlement_head`
- 商城订单:`settle_type` 对应值
- 充值:从 `dwd_recharge_order` 单独查询
### settle_type 与消费记录类型映射已校准数据源DWD-DOC 01-业务全景)
### 正价金额字段(待用户复核)
| settle_type | 含义 | 数量占比 | 消费记录样式 |
|:-----------:|------|---------|-------------|
| 1 | 台桌结账 | 78.6% | 下沉到 `dwd_table_fee_log` 台费明细 |
| 3 | 商城订单 | 21.4% | 助教列表 + 支付金额 + 食品酒水 |
| 5 | 正常充值 | — | 从 `dwd_recharge_order` 单独查询 |
| 7 | 充值退款 | 极少10 笔) | 不在消费记录中展示 |
| 6 | 结算退款 | 极少1 笔) | 不在消费记录中展示 |
需要在 `dwd_settlement_head` 或相关 DWS 表中确认:
- `original_amount` vs `total_amount` vs 其他字段
- 此项标记为"需用户复核"
### 金额字段说明已校准数据源DWD-DOC 02-账务全景 + consume 口径文档)
⚠️ 不得直接使用 `consume_money`(三种历史口径混合,不稳定)。
正价金额(消费项目合计,全时期一致):
```sql
items_sum = table_charge_money + goods_money + assistant_pd_money
+ assistant_cx_money + electricity_money
```
实付金额需按支付渠道拆分展示:
| 支付渠道 | 字段 | 说明 |
|----------|------|------|
| 线上支付 | `pay_amount` | 不含 balance= `point_amount` + `cash_amount` |
| 储值卡 | `balance_amount` | 独立渠道,= `recharge_card_amount` + `gift_card_amount` |
| 团购券抵扣 | `coupon_amount` | 门店实际抵扣额 |
| 会员折扣 | `member_discount_amount` | 仅 settle_type=1 |
| 台费调整 | `adjust_amount` | 手动调价 |
| 抹零 | `rounding_amount` | 收支平衡减项 |
团购券三层价格体系(展示时注意区分):
- 顾客支付价 → `PCR.sale_price`
- 平台结算价 → `SH.pl_coupon_sale_amount`= SUM(GR.ledger_unit_price)
- 门店抵扣价 → `SH.coupon_amount`= SUM(GR.ledger_amount)
已知限制:
- `online_pay_channel` 全为 0无法区分微信/支付宝(聚合支付接入)
- `settlement_head_ex``payment_method``is_use_coupon``is_activity` 等字段全为 0不可用
- 团购券与会员折扣不叠加
- 2025-11-09 前台费明细 `is_delete=1`,历史数据不完整
---
## 小程序前端开发强制规范
> 以下规范适用于本 SPEC 中所有小程序页面实现,具有强制约束力。
1. **原型图是唯一视觉真相**`docs/h5_ui/pages/*.html` 中的结构、层次、元素、配色、间距、交互行为是小程序页面实现的唯一参考标准。任何偏离原型图的实现都需要明确的产品确认。
2. **WXML ≠ HTML**:严禁在小程序中使用 HTML 标签div/span/p/a/img 等必须使用小程序原生标签view/text/image/navigator 等)。
3. **WXSS ≠ CSS**:使用 rpx 单位、仅支持有限选择器、无 DOM/BOM API、样式隔离机制不同。Tailwind CSS 类名必须手动转换为 WXSS。
4. **TDesign 优先**:凡 TDesign 组件库能覆盖的 UI 元素,必须使用 TDesign 组件;自定义实现仅限 TDesign 无法覆盖的场景。
5. **Power 文档优先**:实现前必须加载 `wechat-miniprogram` Power 的相关 steering 文件(`view-layer.md``tdesign.md``builtin-components.md`),确保语法和组件用法正确。
6. **项目踩坑指南必读**:实现前必须阅读 `docs/prd/MIGRATION-PLAYBOOK.md` 第六章,该文档是基于本项目实际转换经验的避坑手册,涵盖 WXML/WXSS 差异、事件系统、TDesign 用法、rpx 换算规则及新页面开发 Checklist。
---
## 任务清单
- [ ] T1实现客户详情 API
- T1-a细化 P5 应用 3维客线索Prompt JSON 结构,实现 `consumption_records``member_cards` 等字段的拼接函数(对应 P5-T6-完整)
- T1-b细化 P5 应用 6备注分析Prompt JSON 结构,实现 `consumption_data` 字段的拼接函数(对应 P5-T9-完整)
- T1-c细化 P5 应用 7客户分析Prompt JSON 结构,实现 `objective_data` 字段的拼接函数(对应 P5-T10-完整)
- [ ] T2实现消费记录分页 API三种样式区分 + 懒加载)
- [ ] T3实现客户指数总览 API
- [ ] T4实现助教详情 API