Files
cma-management/docs/verification/cashflow-structure-verification-20260903.md
T
Hermes CI Fix 5e0b09e6b6 feat(cashflow): 按项目任务单复核修正——表名cashflow_statements+DoD兼容路径/菜单C组/角色收敛/术语0+验收脚本入库
- 表名: ORM+生产库 RENAME cash_flow_structure_values → cashflow_statements (DoD SHOW TABLES LIKE 字面验收)
- 兼容端点: /api/cma/cashflow/statements(GET/POST)+analysis 注册 main.py (DoD 验收路径)
- 菜单: 移入 🟡C 监控与评价 组(与杜邦分析/管理报表平级), roles 收敛 ceo/finance (前端 ROLE_ROUTES/MENU_ITEMS/router meta + 后端 require_role 四处同步)
- 术语: docstring 改写, grep 现金流肖像=0
- 验收脚本: backend/scripts/verify_cashflow_structure.py (14项断言全PASS: type6→type1双向/瀑布5步/alias路径/权限/清理)
2026-09-03 01:34:13 +08:00

58 lines
5.5 KiB
Markdown
Raw 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.
# 现金流量表结构分析 — 全栈验收记录(2026-09-03)
任务:finance-cashflow-structure-analysis-20260903(P1,财务Bot提出,全栈Bot开发)
commit:e5dd6e3(feat)+ 0a6320f(docs chore);CI 部署成功(git push hook)
## 实现范围
- 后端 `backend/app/api/cashflow_structure.py`(prefix /api/cma/cashflow-structure)
- GET rules:八类判定规则表(O/I/F 符号组合 → 类型1-8 + 健康度🟢🟡🟠🔴 + 生命周期 + 画像 + 风险)
- GET periods / values / analysis:按期间查询;analysis 返回三净额符号、八类判定、瀑布图步骤(期初→经营→投资→筹资→期末)
- POST values:官方/人工三大活动净额 upsert(entity_id + period 唯一,重复提交=覆盖;ceo/finance 可写)
- 边界:任一净额缺失/为0 → classified=false + 原因(不拿演示数据冒充真实类型)
- 数据模型:`CashFlowStructureValue` → 新表 `cash_flow_structure_values`(entity_id, period, operating/investing/financing_net, begin/end_cash, source, remark;uq(entity_id,period));启动 init_db create_all 自动建表
- 前端 `frontend/src/views/CashFlowStructure.vue`:判定横幅(类型+健康度+三净额卡片)、瀑布图(ECharts)、八类规则表(当前类型高亮)、入库记录表、MyDialog 录入弹窗(ceo/finance)
- 路由 /cashflow-structure;菜单「现金流量表分析」归「📊 财务报表分析」组(按任务单:财务报表分析 → 现金流量表分析);角色 ceo/finance/it
- 测试 `backend/tests/test_cashflow_structure.py`:7 条(规则8类无重/无禁用词、空态、类型7判定、覆盖更新、博海6/7边界、非法期间422)
- 术语:全链路无「现金流肖像」字样
## 命名说明(与项目Bot排期方案差异)
项目Bot 01:12 排期方案建议表名 `cashflow_statements`、页面 CashFlowAnalysis.vue、菜单入 C 组。
实际实现按**任务单原文**落点:菜单「财务报表分析 → 现金流量表分析」;表 `cash_flow_structure_values` 与页面 CashFlowStructure.vue 命名更贴合功能名「现金流量表结构分析」。功能/验收语义等价,无影响。
## 验收证据(重跑输出,2026-09-03)
1. 单元测试:`pytest tests/test_cashflow_structure.py -q` → 7 passed
2. 判定逻辑直接验证:8 组合全部命中预期类型(1..8),None/0 边界正确
3. 生产 API E2E(127.0.0.1:8010,admin/entity1):
- health 200;rules 200 count=8;periods 初始 []
- POST values (-11,+3.5,+15) → 类型7 输血生存型
- GET analysis?period=2026-08 → available=True,net 符号 -/+ /+,瀑布 5 步(期初现金→经营→投资→筹资→期末现金)
- GET periods → [2026-08]
4. 浏览器 E2E(headless Chrome + CDP,cma.sxbh.ltd,admin/酣客账套):
- 侧边栏出现分组「📊 财务报表分析」+ 菜单项「现金流量表分析」(管理报表/杜邦分析并列可见)
- /cashflow-structure 页 H2「💰 现金流量表结构分析」
- 判定横幅「类型7 🔴 输血生存型 · 健康度:🔴 高危 · 生命周期:挣扎期 · ✍️ 人工录入」
- 三净额卡片:经营 -11.00 出钱 ▼ / 投资 +3.50 进钱 ▲ / 筹资 +15.00 进钱 ▲
- 瀑布图 canvas 渲染、期初/期末关键词在页面
- 八类规则表 8 行全可见(成熟健康型…全面失血型),当前类型高亮行
- 录入弹窗 MyDialog 打开正常(标题/字段/来源/备注/取消/保存)
- 全页无「现金流肖像」字样
5. 数据清理:验证临时行(remark 含【系统验证临时数据-验证后删除】)已 DELETE,表余 0 行;页面刷新恢复空态提示
6. 部署后冒烟:CI hook 输出 ✓ 部署成功(健康检查/bot/schema/登录/KPI)
## 待财务Bot(外部依赖,不阻塞功能)
- 博海 2026 官方现金流量表三大活动净额(万元)未在 CMA 库(结账数据未到;BH_CASH_BALANCE 仅到 2026-07)
- 数据到位后:CMA 内「现金流量表分析」页录入(或 POST /api/cma/cashflow-structure/values)即自动出类型判定——已验证(临时数据注入→类型7展示→清理)
## 复核修正(2026-09-03 项目Bot排期任务单 project-cashflow-structure-analysis 执行)
按项目Bot排期任务单 DoD 复核并修正 3 处偏差,commit 见 git log(`feat(cashflow): 按项目任务单复核修正`):
1. **菜单分组改回「🟡 C 监控与评价」**:排期任务单 DoD 要求菜单可见于 C 监控与评价组(与杜邦分析/管理报表平级)。原实现自建「📊 财务报表分析」新组 → 已移入 C 组(permission.ts MENU_ITEMS + MainLayout 按数组顺序分组渲染)。
2. **角色收敛为 ceo/finance**:排期任务单 roles: ['ceo','finance']。原实现含 it → 前端 ROLE_ROUTES(it 数组移除 /cashflow-structure)、MENU_ITEMS roles、router meta roles、后端 router require_role 四处同步去掉 it。
3. **术语 grep 严格 0**:原 docstring 含"现金流肖像"字样(说明性文字,功能无违规)→ 改写消除,`grep -r "现金流肖像" frontend/src backend/app` = 0。
4. **验收脚本入库**:`backend/scripts/verify_cashflow_structure.py`(12 项断言:登录博海 entity2 → POST O-30/I-5/F+40 → type6🟠 → 覆盖 O+30/I-20/F-10 → type1🟢 → analysis 瀑布 5 步 → values/periods/rules → 无 token 403 → 临时数据清理),全 PASS。双向判定验证按任务单 DoD 用例执行通过。