Files
Neo-ZQYY/docs/audit/changes/2026-03-20__rns13-board-apis-e2e-fix.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

8.5 KiB
Raw Blame History

变更审计记录RNS1.3 三看板 FDW 查询层数据口径修复

字段
日期 2026-03-19 16:23:59
Prompt-ID P20260319-160132
Session-ID 088656c4
Session 路径 docs/audit/session_logs/2026-03/19/41_54e4189f_160131

操作摘要

根据 feiqiu-data-rules 审计 rns1-board-apis SPEC 实现,修复 fdw_queries.py 中 6 个函数的数据口径和功能缺陷。审计发现 9 个问题3 P0 + 3 P1 + 3 P2本次修复可修复的 6 个P0 全部 + P1-4/5 + P2-7。同时完成 E2E 测试修正、board_service 环比逻辑修正、文档同步更新。


1. 变更原因

原始原因Prompt

CONTEXT TRANSFER继续 rns1-board-apis spec Tasks 17-20全量验证、E2E 测试、文档更新、审计)。用户要求"先查库,然后对比 dws-doc-authority.md若吻合则修改代码"。

直接原因

feiqiu-data-rules 审计发现 fdw_queries.py 中 6 个函数存在数据口径错误或功能缺失:

  • P0-1: 储值金额数据源错误
  • P0-2: 消费潜力指数未实际查询
  • P0-3: 财务收入层级映射错误
  • P1-4: 助教技能筛选未实现
  • P1-5: 项目筛选未实现
  • P2-7: ideal_days 硬编码为 0

2. 改动方案

2.1 fdw_queries.py — 6 个函数修复

编号 函数 修复内容
P0-1 get_coach_sv_data() 数据源从 v_dws_assistant_monthly_summary 改为 v_dws_assistant_recharge_commission,修正储值金额口径
P0-2 get_customer_board_potential() 从空列表降级改为实际查询 v_dws_member_spending_power_index,支持消费潜力指数排行
P0-3 get_finance_revenue() 修复 structure_type 层级映射AREA→is_sub=True填充 price_itemschannel_items
P1-4 get_all_assistants() 通过 LEFT JOIN v_dws_assistant_project_tag 实现 skill_filter 筛选
P1-5 _project_filter_clause() 通过 v_dws_member_project_tag 子查询实现项目筛选
P2-7 get_customer_board_recent() ideal_daysv_dws_member_winback_index.ideal_interval_days 获取,不再硬编码为 0

新增辅助函数 _derive_potential_tags()

2.2 FDW 列名修正17 处)

视图 修正数量 关键映射
v_dws_finance_daily_summary 6 occurrence→gross_amount, discount→discount_total, confirmed_revenue→confirmed_income, cash_in→cash_inflow_total, cash_out→cash_outflow_total, cash_balance→cash_balance_change
v_dws_finance_recharge_summary 4 actual_income→recharge_cash, first_charge→first_recharge_cash, renew_charge→renewal_cash, card_balance→cash_card_balance
v_dws_member_winback_index 2 ideal_days→ideal_interval_days, wbi_score→display_score
v_dws_member_consumption_summary 1 items_sum_60d→consume_amount_60d
v_dim_member_card_account 1 balance_amount→balance
v_dws_finance_expense_summary + v_dws_platform_settlement 3 expense_group→expense_category, stat_date→expense_month/settlement_date

2.3 board_service.py 修正

  • _build_recharge 环比比较逻辑修正compare 参数正确传递)
  • _empty_revenue 新增完整空默认值工厂(含 price_items, channel_items 等必需字段)
  • skills 字段暂返回空列表

2.4 gift_rows GiftCell 修正

赠送卡 3×4 矩阵每个 cell 从裸 float 改为 {"value": float} dict匹配 Pydantic GiftCell schema。

2.5 E2E 测试test_e2e_board.py

22 个集成测试覆盖四端点基本请求、环比开关、参数互斥、分页、区域约束、权限校验、camelCase 序列化。

2.6 文档更新

  • docs/contracts/openapi/backend-api.json:新增 4 端点 + 5 schema
  • docs/database/BD_Manual_biz_tables.md:补充 coach_tasks 看板场景引用说明

3. 未修复项(已知限制)

编号 问题 原因
P1-6 礼品卡矩阵无细分数据 ETL 层无 liquor/table_fee/voucher 细分列,需 ETL 侧先补数据
P2-8 expense 日期粒度差异 低风险,显示层可接受
P2-9 level 映射硬编码 显示层低风险,后续可迁移至配置表

4. 本次对话文件变更

新增文件

  • docs/audit/changes/2026-03-20__rns13-board-apis-e2e-fix.md(本文件)
  • docs/audit/prompt_logs/prompt_log_20260319_160132.md
  • docs/audit/session_logs/2026-03/19/38_d68afacc_154946/main_01_a7041a46.md
  • docs/audit/session_logs/2026-03/19/40_fd008ef9_155123/main_01_c4a82443.md
  • docs/audit/session_logs/2026-03/19/40_fd008ef9_155123/sub_01_c4a82443.md
  • docs/audit/session_logs/2026-03/19/40_fd008ef9_155123/sub_02_c4a82443.md

删除文件

  • docs/audit/session_logs/2026-03/19/38_d68afacc_154946/main_01_d94c682a.md(被 main_01_a7041a46.md 替代)

5. 文件清单

文件 变更类型 说明
apps/backend/app/services/fdw_queries.py 修改 6 函数修复 + 17 处列名修正 + gift_rows GiftCell + 新增 _derive_potential_tags()
apps/backend/app/services/board_service.py 修改 _build_recharge 环比 + _empty_revenue + skills 空列表
apps/backend/tests/integration/test_e2e_board.py 修改 22 个 E2E 集成测试修正
docs/contracts/openapi/backend-api.json 修改 4 端点 + 5 schema
docs/database/BD_Manual_biz_tables.md 修改 RNS1.3 看板引用说明
.kiro/specs/rns1-board-apis/tasks.md 修改 Tasks 17-20 标记完成

6. 数据库变更

无 DDL 变更。 本次实现全部基于已有的 app.v_* RLS 视图执行 SELECT 查询。IMPORT FOREIGN SCHEMA appsetup_fdw.sql 中已自动导入所有视图,无需新增 FDW 映射。

⚠️ DDL 基线待合并(compliance.has_ddl_baseline = false


7. 改动注解

apps/backend/app/services/fdw_queries.py

  • 变更类型:修改
  • 原始原因feiqiu-data-rules 审计发现 6 个函数的数据口径与 DWS 权威规范不一致,部分功能未实现(空列表降级、硬编码 0
  • 思路分析:逐函数对照 dws-doc-authority.md 和实际视图结构修正。P0-1 改用正确的储值佣金视图P0-2 从降级空列表改为实际查询消费潜力指数视图P0-3 修正 AREA 层级映射并填充 price_items/channel_itemsP1-4/5 通过 LEFT JOIN 和子查询实现筛选功能P2-7 从视图获取 ideal_interval_days 替代硬编码。新增 _derive_potential_tags() 辅助函数用于消费潜力标签推导
  • 修改结果6 个函数数据口径与 DWS 规范对齐skill_filter 和 project_filter 功能可用。影响 board_service.py 的三看板数据展示。17 处 FDW 列名映射同步修正

apps/backend/app/services/board_service.py

  • 变更类型:修改
  • 原始原因fdw_queries.py 修复后board_service 的环比逻辑和空默认值需要同步适配
  • 思路分析:_build_recharge 的 compare 参数传递链路修正;_empty_revenue 补全 price_items、channel_items 等必需字段避免前端渲染报错skills 字段暂返回空列表(待 ETL 补数据后启用)
  • 修改结果:三看板接口在数据为空时不再抛异常,返回结构完整的空响应

apps/backend/tests/integration/test_e2e_board.py

  • 变更类型:修改
  • 原始原因fdw_queries.py 列名修正后E2E 测试中的 mock 数据和断言需同步更新
  • 思路分析:更新 22 个测试用例中涉及的列名引用,确保 mock 数据结构与修正后的查询一致
  • 修改结果22 个 E2E 集成测试全部通过

docs/database/BD_Manual_biz_tables.md

  • 变更类型:修改(简要)
  • 补充 coach_tasks 在 RNS1.3 看板场景中的引用说明

docs/contracts/openapi/backend-api.json

  • 变更类型:修改(简要)
  • 新增 BOARD-1/2/3 + CONFIG-1 共 4 个端点定义和 5 个 schema

.kiro/specs/rns1-board-apis/tasks.md

  • 变更类型:修改(简要)
  • Tasks 17-20 子任务标记为已完成

8. 风险与回滚

风险

  • 列名映射依赖当前 ETL 视图定义ETL 视图变更时需同步更新 fdw_queries.py
  • 降级处理(空列表/返回 0在 ETL 数据补全后需移除
  • P1-6礼品卡矩阵细分依赖 ETL 侧补数据,当前返回 0

回滚

代码层面 revert fdw_queries.py + board_service.py 即可,无数据库回滚需求。


9. 验证

  • 17 个属性测试全部通过(pytest tests/test_board_properties.py -v
  • 22 个 E2E 集成测试全部通过(pytest apps/backend/tests/integration/test_e2e_board.py -v
  • OpenAPI JSON 语法验证通过