# 变更审计记录：财务看板 Phase 2 对齐 Demo（T1-T6）

| 字段 | 值 |
|------|-----|
| 日期 | 2026-03-27 23:41:47 |
| Prompt-ID | P20260327-233226 |
| Session-ID | fd0c357e |
| Session 路径 | docs/audit/session_logs/2026-03/27/19_2ce2a118_230836 |

## 操作摘要
统筹完成 board-finance-phase2.md 中的 6 个任务（T1-T6），对齐 Demo 原型：收入结构按物理区域分类、优惠减扣 4 项重组、优惠总计行展示、现金流入/流出项名对齐、费用分组空值填充、助教分析从订单级实际金额计算。

## 涉及文件

| 文件 | 变更类型 | 关联任务 |
|------|----------|----------|
| `apps/backend/app/services/fdw_queries.py` | 修改 | T1/T2/T4/T5/T6 |
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.wxml` | 修改 | T3 |
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts` | 修改 | T3/T4 |
| `apps/miniprogram/miniprogram/utils/format.wxs` | 修改 | T3 |
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.wxss` | 修改 | T3 |
| `docs/guides/FRONTEND-BACKEND-INTEGRATION.md` | 修改 | T6 |
| `.kiro/steering/frontend-backend-integration.md` | 修改 | T6 |
| `docs/prd/specs/board-finance-phase2.md` | 修改 | 状态更新 |

## 本次对话文件变更

### 新增文件
- `docs/audit/prompt_logs/prompt_log_20260327_233226.md`
- `docs/audit/session_logs/2026-03/27/15_39869986_175210/main_01_ec3464b5.md`
- `docs/audit/session_logs/2026-03/27/19_2ce2a118_230836/main_01_fd0c357e.md`
- `docs/audit/session_logs/2026-03/27/19_2ce2a118_230836/sub_01_ec3464b5.md`

### 删除文件
- `docs/audit/session_logs/2026-03/27/15_39869986_175210/main_01_58aad65c.md`

## 改动注解

### `apps/backend/app/services/fdw_queries.py`
- 变更类型：修改
- 原始原因：财务看板 Phase 2 要求对齐 Demo 原型的数据结构和展示口径，涉及收入结构、优惠减扣、现金流、费用、助教分析 5 个查询函数的重写
- 思路分析：
  - T1+T2 `get_finance_revenue()`：收入结构改为从 `dwd_settlement_head` 按物理区域聚合（CASE WHEN 映射 7 个区域），优惠减扣改为从 `v_dws_finance_daily_summary` 的 `discount_*` 字段聚合为 Demo 的 4 项（会员折扣、优惠券、团购优惠、其他优惠），渠道分布 label 对齐 Demo，新增 `discount_total` 返回字段
  - T4 `get_finance_cashflow()`：label 改名（扫码收款→线上收款，团购平台回款→团购平台），所有项添加 `desc` 字段用于前端 tooltip
  - T5 `get_finance_expense()`：4 个分组为空时填充固定项名对齐 Demo，避免空数据时前端展示不一致
  - T6 `get_finance_coach_analysis()`：客户支付改为 DWD `ledger_amount`（实际结算金额），球房分成 = 客户支付 - 助教到手（DWS `base_income`/`bonus_income`），遵循助教财务三列口径规范
- 修改结果：5 个查询函数返回结构与 Demo 原型完全对齐，数据口径从估算改为实际结算金额

### `apps/miniprogram/miniprogram/pages/board-finance/board-finance.wxml`
- 变更类型：修改
- 原始原因：T3 要求在发生额行下方添加优惠总计行，展示红色负数金额
- 思路分析：在经营一览卡片的发生额/正价行下方新增优惠总计行，使用 `fmt.negativeMoney()` WXS 函数格式化为负数红色显示，右侧对齐。同时将所有金额字段从 TS 预格式化改为 WXS 实时格式化（`fmt.money()`/`fmt.safe()`），修复双重格式化 NaN 问题。移除旧的加载态 toast（改用其他方案），看板 tab 改为动态渲染
- 修改结果：优惠总计行正确展示，金额格式化统一由 WXS 处理，避免 TS 与 WXS 格式化互斥问题

### `apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts`
- 变更类型：修改
- 原始原因：T3 需要映射后端新增的 `discountTotal` 字段，T4 需要映射 `desc` 字段
- 思路分析：在 `setData` 中新增 `discountTotal` 字段映射（`?? 0` 防空），现金流各项新增 `desc` 字段传递。金额字段传原始数字，格式化交给 WXS
- 修改结果：前端正确接收并展示后端新增字段

### `apps/miniprogram/miniprogram/utils/format.wxs`
- 变更类型：修改
- 原始原因：T3 优惠总计需要以负数红色格式展示
- 思路分析：新增 `negativeMoney` 函数，接收数值参数，先 `parseFloat` 转数字（防止字符串类型），输出带负号和千分位的金额字符串（如 `-¥1,234`）
- 修改结果：WXS 层新增负数金额格式化能力，供 WXML 直接调用

### `apps/miniprogram/miniprogram/pages/board-finance/board-finance.wxss`
- 变更类型：修改
- 原始原因：T3 优惠总计行需要红色样式
- 思路分析：添加优惠总计行的 CSS 类，红色字体，右侧对齐，与发生额行视觉层级区分
- 修改结果：优惠总计行样式与 Demo 原型一致

### `docs/guides/FRONTEND-BACKEND-INTEGRATION.md`
- 变更类型：修改
- 原始原因：T6 改变了助教财务三列口径，文档需同步
- 思路分析：更新助教财务三列口径说明：对客收费从 `hours × course_price` 改为 DWD `ledger_amount`（API 实际结算），明确 DWS `base_income`/`bonus_income` 是助教到手而非对客收费
- 修改结果：文档与代码口径一致，避免后续开发误用旧口径

### `.kiro/steering/frontend-backend-integration.md`
- 变更类型：修改
- 原始原因：steering 规则需与主文档同步
- 思路分析：同步更新助教口径速查条目
- 修改结果：AI steering 规则与实际口径一致

### `docs/prd/specs/board-finance-phase2.md`
- 变更类型：修改
- 原始原因：标记 SPEC 执行进度
- 思路分析：状态从"待执行"改为"执行中"
- 修改结果：SPEC 状态反映实际进度

## 合规检查

| 检查项 | 状态 |
|--------|------|
| 文档同步 | ✅ 无缺失（code_without_docs 为空） |
| 迁移 SQL | ✅ 无新增迁移 |
| DDL 基线 | ⚠️ has_ddl_baseline=false（无新迁移，不影响） |
| API 变更 | ✅ 无接口变更 |
| OpenAPI Spec | ✅ 无需同步 |
