- 表名: 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路径/权限/清理)
5.5 KiB
5.5 KiB
现金流量表结构分析 — 全栈验收记录(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)
- 单元测试:
pytest tests/test_cashflow_structure.py -q→ 7 passed - 判定逻辑直接验证:8 组合全部命中预期类型(1..8),None/0 边界正确
- 生产 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]
- 浏览器 E2E(headless Chrome + CDP,cma.sxbh.ltd,admin/酣客账套):
- 侧边栏出现分组「📊 财务报表分析」+ 菜单项「现金流量表分析」(管理报表/杜邦分析并列可见)
- /cashflow-structure 页 H2「💰 现金流量表结构分析」
- 判定横幅「类型7 🔴 输血生存型 · 健康度:🔴 高危 · 生命周期:挣扎期 · ✍️ 人工录入」
- 三净额卡片:经营 -11.00 出钱 ▼ / 投资 +3.50 进钱 ▲ / 筹资 +15.00 进钱 ▲
- 瀑布图 canvas 渲染、期初/期末关键词在页面
- 八类规则表 8 行全可见(成熟健康型…全面失血型),当前类型高亮行
- 录入弹窗 MyDialog 打开正常(标题/字段/来源/备注/取消/保存)
- 全页无「现金流肖像」字样
- 数据清理:验证临时行(remark 含【系统验证临时数据-验证后删除】)已 DELETE,表余 0 行;页面刷新恢复空态提示
- 部署后冒烟: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): 按项目任务单复核修正):
- 菜单分组改回「🟡 C 监控与评价」:排期任务单 DoD 要求菜单可见于 C 监控与评价组(与杜邦分析/管理报表平级)。原实现自建「📊 财务报表分析」新组 → 已移入 C 组(permission.ts MENU_ITEMS + MainLayout 按数组顺序分组渲染)。
- 角色收敛为 ceo/finance:排期任务单 roles: ['ceo','finance']。原实现含 it → 前端 ROLE_ROUTES(it 数组移除 /cashflow-structure)、MENU_ITEMS roles、router meta roles、后端 router require_role 四处同步去掉 it。
- 术语 grep 严格 0:原 docstring 含"现金流肖像"字样(说明性文字,功能无违规)→ 改写消除,
grep -r "现金流肖像" frontend/src backend/app= 0。 - 验收脚本入库:
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 用例执行通过。