Files
Neo-ZQYY/docs/prd/2026-04-08__board-finance-optimization.md
2026-04-10 06:24:13 +08:00

172 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 财务看板优化 PRD
> 日期2026-04-08
> 触发:财务看板数据评估,发现数据失真、展示缺陷、指标缺失
---
## 一、Bug 修复
### 1.1 [P2] 会员卡余额快照不变动
**问题**`dws_finance_recharge_summary` 表中 `cash_card_balance`62,674`total_card_balance`67,760连续多日完全相同。当前实际余额约 118KETL 快照值 67K数字严重失真。
**根因**(已调研确认):
`finance_recharge_task.py` 中:
1. `_extract_card_balances()` 只调用一次(传入 `end_date`),所有日期复用同一快照(第 64、89 行)
2. SQL 查询只取 `scd2_is_current = 1``stat_date` 参数传入但未使用(第 197-216 行)
3. 赠送卡余额同样受影响
**DWD 维度表验证**(已确认可用):
- `dim_member_card_account` SCD2 版本充足(主卡类 55,526 个版本,覆盖 53 天)
- 按日有明确余额变化4/6: ¥3,745 → 4/7: ¥9,291 → 4/8: ¥1,587
- 可通过 `scd2_start_time <= stat_date AND scd2_end_time > stat_date` 做 as-of 查询
**修复方案**
- `_extract_card_balances()` 改为按日遍历,每天查该日生效的 SCD2 版本
- `transform()` 中按 `stat_date` 查表,不再共用同一快照
**状态**:待实施
### 1.2 [P2] 充值首充/续费笔数全为 0
**问题**`dws_finance_daily_summary``first_recharge_count``renewal_count` 全为 0`recharge_count` 有值。
**DWD 验证**(已确认源数据正确):
- `dwd_recharge_order.is_first` 字段完好
- 3 月:首充 6 笔 ¥14,996 / 续费 43 笔 ¥204,998
- ETL 聚合时未读取 `is_first` 字段进行分类统计
**修复方案**`finance_recharge_task.py` 中按 `is_first` 分组统计,写入 `first_recharge_count` / `renewal_count`
**状态**:待实施
---
## 二、文案优化
### 2.1 "储值卡结算冲销" → "储值卡消费抵扣"
**位置**
- `board_service.py:984` — 空降级值
- `board_service.py:1023` — 正常取值
- `fdw_queries.py:2898` — 查询层
**状态**:待实施
---
## 三、新增指标
### 3.1 经营一览 — 补充效率指标
在经营一览板块"实收流水"数据下方新增一行3 个指标横向排列:
```
┌──────────┬──────────┬──────────┐
│ 开台数 │ 客单价 │ 日均额 │
│ 3,262 │ ¥128.7 │ ¥13,991 │
└──────────┴──────────┴──────────┘
```
#### 计算方案
> 注意:客单价和日均额的分子使用**确认收入**(发生额-优惠后的实际入账),与所在位置"实收流水"语境一致。
| 指标 | 公式 | 数据来源 | 说明 |
|---|---|---|---|
| 开台数 | `SUM(order_count)` | `dws_finance_daily_summary.order_count` | 日期范围内结算单总数 |
| 客单价 | `SUM(confirmed_income) / SUM(order_count)` | 同上 | 确认收入 / 开台数 |
| 日均额 | `SUM(confirmed_income) / COUNT(DISTINCT stat_date)` | 同上 | 确认收入 / 营业天数 |
3 月实测值:开台 3,262 | 客单价 ¥128.7 | 日均额 ¥13,991
#### 展示方案
- 位置:经营一览板块"实收流水"数据下方
- 样式3 列等宽卡片,灰色标签 + 黑色数值
- 环比支持compare=1 时显示环比变化)
- 区域过滤area!=all 时,从 `dws_finance_area_daily` 对应 area_code 取 `order_count` + `confirmed_income`
#### 实现影响
- **后端**`fdw_queries.get_finance_overview()` 追加返回 `order_count``board_service._build_overview()` 计算 `avg_per_order``avg_daily`
- **前端**`board-finance.wxml` 经营一览实收流水下方加一行三列
### 3.2 预收资产 — 补充充值笔数
在储值卡充值实收行追加笔数信息:
```
储值卡充值实收 ¥222,994 50笔
```
> 首充/续费区分待 Bug 1.2 修复后展开为 `50笔首充6 / 续费44`
#### 计算方案
| 指标 | 公式 | 数据来源 |
|---|---|---|
| 充值笔数 | `SUM(recharge_count)` | `dws_finance_recharge_summary.recharge_count` |
#### 展示方案
- 位置:储值卡充值实收金额右侧
- 格式:`50笔`
- 环比:暂不做
### 3.3 应计收入 — 优惠扣减增加占比
每个优惠项显示金额 + 占总优惠的百分比:
```
团购优惠 ¥48,231 23.6%
会员折扣 ¥89,102 43.6%
手动调整 ¥31,540 15.4%
赠送卡抵扣 ¥28,230 13.8%
其他优惠 ¥7,209 3.5%
────────────────────────
总优惠 ¥204,312 100%
```
#### 计算方案
| 指标 | 公式 |
|---|---|
| 各项占比 | `该项金额 / discount_total * 100` |
#### 展示方案
- 位置:每个优惠项金额右侧
- 格式:`23.6%`,灰色小字
- 仅在总优惠 > 0 时显示占比
### 3.4 团购展示优化
#### 背景
团购数据上传时已上传的是**结算金额**(扣除平台各种扣费后的实际回款),因此不需要额外展示手续费和面值拆分。
#### 方案
将现金流入板块中"团购平台"标签改为"团购结算",明确表达该金额是平台结算后到账金额,避免与核销面值混淆。
**位置**:后端 `board_service.py` / `fdw_queries.py` 中 cashflow 板块的团购项 label
**状态**:待实施
---
## 四、实施优先级
| 优先级 | 事项 | 工作量 |
|---|---|---|
| P1 | 文案优化(储值卡消费抵扣) | 小 |
| P1 | 经营一览补充效率指标(开台数/客单价/日均额) | 中 |
| P1 | 团购标签改为"团购结算" | 小 |
| P2 | 优惠占比展示 | 小 |
| P2 | 充值笔数展示 | 小 |
| P2 | 卡余额快照修复Bug 1.1 | 中 |
| P2 | 充值首充/续费识别修复Bug 1.2 | 小 |