- 表名: 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路径/权限/清理)
58 lines
5.5 KiB
Markdown
58 lines
5.5 KiB
Markdown
# 现金流量表结构分析 — 全栈验收记录(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 用例执行通过。
|