# 财务看板优化 PRD > 日期:2026-04-08 > 触发:财务看板数据评估,发现数据失真、展示缺陷、指标缺失 --- ## 一、Bug 修复 ### 1.1 [P2] 会员卡余额快照不变动 **问题**:`dws_finance_recharge_summary` 表中 `cash_card_balance`(62,674)和 `total_card_balance`(67,760)连续多日完全相同。当前实际余额约 118K,ETL 快照值 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) | 小 |