feat(db,docs): F1-5b MP-2 prep + 沙箱时光机模块 spec (W1)

MP-2 经 4 轮调研 + Neo 反馈,采纳方案 C(推迟到 F1-6 沙箱时光机阶段 B):
- 第 1 轮原方案 D(双口径) → 第 2 轮 D'(单口径)
- 第 3 轮 Neo 架构纠正:不读 DWD,走 Core/DWS/app
- 第 4 轮 DWS 视图靠谱性审计:dws_assistant_daily_detail 是计费明细
  (ledger_amount),不是助教工资(gross_salary 需等级时薪 + 抽成
  + 罚分),且缺 effective_hours / work_days
- 结论:MP-2 真正实施需要新建 dws_assistant_daily_salary 表(ETL
  改造),跟其他 14 个 P1 指标一起做更高效 → 推迟到 F1-6

本次 Wave B 只做 prep:DB schema + 模块 spec + tasks.md 状态调整。

DB 迁移(zqyy_app):
- db/zqyy_app/migrations/20260505__add_effective_date_for_excel_adjustments.sql
- 3 张 Excel 暂存表(全空,Neo 确认尚无 Excel 上传)ADD COLUMN
  effective_date DATE NOT NULL(无 DEFAULT,强制未来 Excel 上传必须带):
  * biz.salary_adjustments(助教薪资扣款/奖励)
  * biz.stg_finance_expense(月度支出)
  * biz.stg_platform_income(平台结算收入)
- 3 个复合索引 (site_id, effective_date) 支持后续 daily 截断查询
- biz.stg_recharge_commission 已有 recharge_date,无需改造

测试库执行 + 5/5 校验 PASS:
- 字段存在(NOT NULL DATE 无 default)
- 复合索引存在 + 列序正确
- 字段注释含 'F1-5b MP-2 prep'
- INSERT 不带 effective_date 触发 NotNullViolation

docs/database/ 同步:
- docs/database/changes/2026-05-05__add_effective_date_for_excel_adjustments.md
  完整变更说明 + 兼容性 + 回滚 + 5 条校验 SQL + 正式库执行说明

沙箱时光机模块 spec(主干任务排期登记):
- docs/_overview/sandbox-replay-engine-spec.md
- 22 个相关指标分 P1/P2/P3 优先级:
  * P1 14 项(daily 视图已有,后端切换)
  * P2 5 项(算法重算,含 MP-2 完整 daily salary)
  * P3 3 项(状态算法 + sandbox_audit_log 用户行为)
- 4 阶段实施路径:
  * 阶段 0(本次 prep)
  * 阶段 A(F1-5a/b 已完成)
  * 阶段 B(F1-6,2-3 周)— MP-2 真正实施在此
  * 阶段 C(F1-7+,1-2 周)
- sandbox_replay 模块结构 + runtime_aware decorator 接口契约
- 性能 + 测试 + 前置依赖清单

F1-5b-tasks.md 状态调整:
- §4.3 顺序 15:MP-2 从"待开始/C4" → "延期 F1-6"
- §6 进度表 MP-2 行同步标"延期 F1-6 + 改方向说明"
- 关联到 mp2_prep.md 审计

业务影响:
- board-coach sandbox 行为暂遗留(F1-6 解决)
- 旧 Excel 模板上传将因 NOT NULL 失败,需 F1-6 同期 ETL UI 改造 +
  操作员培训
- 跨页面已 audit:board-finance / customer-records / coach-service-records
  / customer-service-records 等已合规(F1-5b A1/A3 + MP-1/3/5 收益)

审计:docs/audit/changes/2026-05-05__wave1_f1_5b_mp2_prep.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Neo
2026-05-05 22:12:22 +08:00
parent 16c6fb0d3b
commit 1e803e23cd
5 changed files with 536 additions and 2 deletions

View File

@@ -230,7 +230,7 @@ D1 ──> D2 ──> D3 ──> D4 (本阶段全部完成后)
|---|---|---|---|---|---|
| 13 | UI-3 AIDashboard sandbox 提示条 + runtime 分组 | follow-up | M | A1 | C3 |
| 14 | UI-5 AITriggerJobs runtime 列 | follow-up | XS | 无 | C3 |
| 15 | MP-2 board-coach 月度面板双口径 | follow-up | L | A2 | C4 |
| 15 | MP-2 board-coach 月度面板双口径 | **延期 F1-6** | L | A2 + dws_assistant_daily_salary 视图(F1-6 内建) | F1-6 |
| 16 | MP-4 coach-detail data.coachId 修复 | follow-up | S | 无 | C4 |
| 17 | T3 unit dispatcher runtime | 测试 | M | A3 | C5 |
| 18 | BE-3 ai_run_logs runtime 写入回归 | follow-up | S | T2 | C5 |
@@ -334,7 +334,7 @@ def reset_runtime_context_to_live():
| — | **Wave A mid-wave checkpoint** | — | — | — | — | — | — | Neo 复审 |
| UI-3 | AIDashboard sandbox 提示+分组 | 待开始 | — | C3 | — | ▢ | ▢ | 双线分组显示 |
| UI-5 | AITriggerJobs runtime 列 | 待开始 | — | C3 | — | ▢ | ▢ | 列正确显示 |
| MP-2 | board-coach 月度面板双口径 | 待开始 | — | C4 | — | | | partial vs settled |
| MP-2 | board-coach 月度面板双口径 | **延期 F1-6** | 2026-05-05 | C10(prep) | mp2_prep.md | - | - | **改方向**:走 D 方案需新建 dws_assistant_daily_salary,本次只做 schema prep(3 stg 表加 effective_date)+ spec 文档,完整实施在 F1-6 沙箱时光机阶段 B |
| MP-4 | coach-detail data.coachId 修复 | 待开始 | — | C4 | — | ▢ | - | 预存 bug 与 sandbox 无关 |
| T3 | dispatcher unit | 待开始 | — | C5 | — | ▢ | - | mock |
| BE-3 | ai_run_logs runtime 回归 | 待开始 | — | C5 | — | ▢ | ▢ | runtime 字段写入 |