Hermes CI Fix
|
27b5b0da47
|
feat: 多租户隔离P2批1 — OKR域+kpi_values加entity_id列
- 模型: Objective/KR/ObjectiveKPI/KPIValue 加 entity_id
- DB: 4表加列; kpi_values 1610条按kpi_id回填(1269酣客/341博海)
- OKR域: 测试O删除重建; okr list/get/create + ontology trace/objectives 按token企业隔离(跨企业404)
- KPIValue写入: data/bot_bridge/bot_kpis 创建时带entity_id
- 验证: 酣客创建OKR博海不可见; 跨企业读404; pytest 451通过(expenses单跑37通过为既有排序flaky)
|
2026-08-23 17:53:37 +08:00 |
|
Hermes CI Fix
|
50c15ddbf6
|
fix: 多租户数据隔离P1a+P1b — 工作台/预警/行动计划/因果链按企业过滤
P1a(有entity表查询补齐):
- kpis get/update/delete/restore 跨企业404校验
- kpis create 强制entity=token企业, update禁止改归属
P1b(无entity表join隔离):
- alerts list/resolve join kpi_definitions 按企业过滤
- action_plans list join过滤 + create校验关联KPI归属
- kpi_causality full-network/list join过滤
- dashboard my_dashboard(用户发现) assigned/preset均按企业隔离
测试: 测试KPI种子entity对齐(2→1), pytest 451 passed
实证: 酣客token 6KPI(无博海id) vs 博海token 1KPI(414) 切换隔离正确
|
2026-08-23 17:43:39 +08:00 |
|
Hermes CI Fix
|
9c61b02d66
|
feat: 企业切换器按授权数动态显示 — 多企业用户(≥2)才显示
单企业用户隐藏顶栏切换器避免UI噪音(登录已选企业,无需切换)
前端判断 my-entities 列表长度, 零后端改动
admin(2企业)保留切换, 单企业用户(1企业)隐藏
|
2026-08-23 17:29:17 +08:00 |
|
Hermes CI Fix
|
412a302699
|
feat: OKR模板库P2治理 — owner字段/防重复/校准文档/缺口清单
- 模型+DB: okr_templates.owner (CMA标准库/行业包/用户自定义)
- API: create同名去重(409) + list/get返回owner + apply透传metric_kpi
- 前端: 模板卡片展示owner标签
- 文档: kpi-dictionary-gap-list.md(33条缺口+建议补KPI) + okr-template-calibration.md(酣客/博海校准表)
- 回归: 模板API验证通过
|
2026-08-21 16:49:11 +08:00 |
|
Hermes CI Fix
|
9ccdd0db63
|
docs: KPI设计规范补充OKR KR权重适配说明(主KR可至40%)
配合OKR模板库DAMA修复: 权重合规化(34/33/33→35/35/30, 40/30/30保持)
|
2026-08-21 16:37:14 +08:00 |
|
Hermes CI Fix
|
8103ee4788
|
feat: KPI治理规则2增加kpi_name必填校验 — 防空名KPI
- META_FIELDS 增加 kpi_name(KPI名称)
- 验证: 空名→规则2拦截; 有名称→通过; 审计仍95/95合规
- 背景: F_REVENUE曾空名未被发现
|
2026-08-21 16:28:23 +08:00 |
|
Hermes CI Fix
|
b787d22fdf
|
fix: KPI治理审计白名单 FB_/BH_前缀 + 补6个元数据 + BH_ZERO_TARGET单位
- 规则3: FB_(财务Bot, process维度) 加入 LEGACY_PREFIX_DIM; BH_(博海品牌) 加入 BRAND_PREFIXES 跨维度合法
- 规则2: 补6个KPI数据来源/责任人(客户调研/CRM/客服部, 人事培训系统/人事部等)
- 规则1: BH_ZERO_TARGET unit '-' → '%'
- 审计结果: 95/95 合规(原36个不合规清零)
- 回归: pytest 451 passed
|
2026-08-21 16:18:32 +08:00 |
|
Hermes CI Fix
|
b06821a426
|
feat: KPI多粒度目标智能派生 — 基准值+按类型派生+手动覆盖
- 后端: target_calc_type字段(accumulate累计/ratio比率) + infer_calc_type名称/单位推断
- 派生规则: 累计型 月×3=季×12=年(季×4=年); 比率型 季/年沿用基准不可乘
- 虚拟派生不落库: kpi_to_dict返回derived_targets+derived_flags(自动标记)
- DB: 302个KPI回填类型(226累计/76比率)
- 前端KPIList: 指标类型选择 + 季/年自动派生预览(↳自动=N)
- 前端KPIDetail: 元数据卡片自动标记 + 编辑表单指标类型
- 回归: pytest 451 passed
|
2026-08-21 10:59:43 +08:00 |
|
Hermes CI Fix
|
d5edcefb48
|
feat: KPI新建设计引导(五步法·五规则) — KPIList新建弹窗
- 新建KPI时显示设计引导折叠面板: 五步法逐步引导(职责/客户/需求/成果/五因素)
- 五规则实时校验清单: 名称/维度/单位/目标值/频率/负责人 + 本维度KPI数量≤6提示
- 提交门禁(仅新建): 名称+维度必填, 单位+至少一个目标值必填
- 对应 docs/kpi-design-rule.md 方法论落地
|
2026-08-20 15:56:56 +08:00 |
|
Hermes CI Fix
|
a9845eb2cf
|
docs: KPI设计规范(五步法/五规则/三路径) — CMA方法论层第2份规范
- 第2份方法论文档, 与科目≠KPI规范(第1份, 数据层)互引形成双层治理闭环
- 五步法: 职责→客户→需求→成果→五因素(时/量/质/成/险)
- 五规则: ≤6个/权重5%-30%取5%倍数/定量定性/SMART/部门差异化
- 三路径: 自上而下战略分解/自下而上职责提取/BSC四维平衡
- 四层链: 战略地图→O→KPI→科目(呼应本体三支柱)
|
2026-08-20 15:39:09 +08:00 |
|
Hermes CI Fix
|
a13a080381
|
test: CMA自动化测试补覆盖 226→452用例, 覆盖率36%→60%
- 新增8个测试文件(bot_bridge/kpi_causality/cash/predict/reports/tax_compliance/expenses/probe_cost)
- 增强 budget/auth/users + conftest账套模式适配
- 测试驱动修复: bot_bridge导入batch_id→source_batch; cash_forecast extra空dict
- 全量: 451 passed, 1 xfailed; 报告 docs/cma-test-coverage-report.md
|
2026-08-20 06:57:24 +08:00 |
|
Hermes CI Fix
|
dd53212bcc
|
feat: KPI多粒度目标值补提交 — dashboard API + 前端3视图(目标值月/季/年)
已上线未提交的历史功能(2026-08-17): kpi_target_by_frequency + target_monthly/quarterly/yearly 字段透传
|
2026-08-20 06:57:13 +08:00 |
|
Hermes CI Fix
|
bd9c70ea05
|
本体三支柱: 科目↔KPI↔OKR三层互联 + 追溯链API + OKR详情页签
- 新表 kpi_subject_map(89映射/24KPI) / objective_kpi(3O×5KPI) / krs(3O×3KR)
- GET /api/cma/ontology/trace?objective_id=N O→KPI→科目逐层追溯
- GET /api/cma/ontology/objectives 三层链路概览
- OkrDetail.vue 新增本体追溯链页签(KR目标/当前值 + KPI→科目标签流)
- 含并发已上线未提交的KPI多粒度列(target_monthly/quarterly/yearly)
- 回归: pytest 409 passed
|
2026-08-19 22:58:10 +08:00 |
|
Hermes CI Fix
|
0b305e3ab3
|
fix: 杜邦分析period格式兼容 — 2026H1/2026-H1变体匹配,酣客ROE正常返回-12.74%
- _get_dupont_kpi支持6字符(2026H1)和7字符(2026-H1)period格式
- 之前数据库存'2026-H1'但API查'2026H1'导致读不到数据,酣客ROE返回None
- 验证:酣客ROE=-12.74%(净利率-12.74%,亏损企业正确为负)
|
2026-08-18 09:54:56 +08:00 |
|
Hermes CI Fix
|
31080500f0
|
fix: 保存提示/确认框靠左重叠菜单 — el-message强制居中+移除el-message-box margin:0破坏
|
2026-08-17 16:21:07 +08:00 |
|
Hermes CI Fix
|
c952930dfb
|
ui: KPI详情页元数据卡片置顶展示(便于快速观察完整性)
|
2026-08-17 16:07:37 +08:00 |
|
Hermes CI Fix
|
5805ef34e7
|
fix: 保存消息位置 — ElMessage z-index提到弹窗之上+顶栏下方70px
|
2026-08-17 16:04:15 +08:00 |
|
Hermes CI Fix
|
58e8a9f5b3
|
fix: 空白地图创建失败 — dimensions默认四层空结构+review NULL容错
|
2026-08-17 09:49:21 +08:00 |
|
Hermes CI Fix
|
32fb8d9b06
|
fix: 战略地图创建保存防重 — 按钮loading防重复创建(修复一次保存9份)
|
2026-08-17 09:44:15 +08:00 |
|
Hermes CI Fix
|
bf0f0b3054
|
feat: 表单保存交互规范P1+P2+P3 — 保存按钮loading防重复(KPIList/UserManage/KPIDetail)+KPIList编辑弹窗化(详情跳页并存)+保存反馈全面核查
|
2026-08-16 12:04:22 +08:00 |
|
Hermes CI Fix
|
40d743fc96
|
feat: 表单保存交互规范P0 — 全局未保存离开守卫(useFormGuard)+MapCanvas接入
|
2026-08-16 11:39:26 +08:00 |
|
Hermes CI Fix
|
acf0665010
|
feat: 登录默认页改为我的工作台
|
2026-08-16 11:00:19 +08:00 |
|
Hermes CI Fix
|
7b5795bf07
|
fix(P0): 杜邦分析接口去除硬编码错误数据 — equity 114万→358.4万、ROE 12.38%→3.95%、新增hanke分支读DB(KPI 2026H1 verified)
- 新增 _get_dupont_kpi 辅助函数: 按 entity_id+kpi_code 查 kpi_definitions→kpi_values(period=2026H1, verified)
- bohai: 净权益修正为358.4万(来源 bohai_comprehensive_analysis_2026.md 试算平衡表),财务杠杆4.68x→1.49x,负债率78.6%→32.8%结构健康,ROE≈3.94%,删除误导性加杠杆建议
- hanke: 新增分支,从DB读 F_REVENUE=713.27/F_NET_PROFIT=-90.86,净利率-12.74%,资产/权益缺失时factor返回null标注数据待补充,prev_roe返回null(前端兼容显示无对比),接口返回200
|
2026-08-15 23:02:48 +08:00 |
|
Hermes CI Fix
|
603d6ae5cf
|
feat: 战略地图贝塞尔因果链+节点KPI可视化(P0+P1)
|
2026-08-15 22:08:09 +08:00 |
|
Hermes CI Fix
|
778a5d9c79
|
fix: 工作台KPI级别判断支持反向指标 — 费用率/渠补率/应收天数等'越低越好'指标不再误判green
- my_dashboard的level判断原为actual/target比例法(≥0.9=green)
- 反向指标(费用率24.9%/目标20%)被误判为green,实际应red
- 新增REVERSE_INDICATORS集合:F_COST_RATIO/C_REBATE_RATE/F_AR_DAYS/F_REBATE_RATE/F_FACTORY_REBATE_RATE/F_COST_CONTROL_RATE
- 反向指标逻辑:实际≤目标=绿,≤目标*1.1=黄,否则红
|
2026-08-15 21:44:09 +08:00 |
|
Hermes CI Fix
|
5a196dc105
|
fix: 数据治理P0 规则4前端level过滤+数据清洗
|
2026-08-15 21:26:27 +08:00 |
|
Hermes CI Fix
|
266277d121
|
feat: 应收款催收闭环 — 催收视图+博海230万录入+回款登记联动
|
2026-08-14 22:07:02 +08:00 |
|
Hermes CI Fix
|
a268c4e74d
|
fix: 智能导入列检测+名称防护 — 科目编码误当名称(EXT_069显示1001.0/EXT_071显示nan)根因修复
- kpi_code_patterns 名称类列优先(科目名称/指标名称/name),编码类列兜底
- 修复科目余额表表头(科目编码|科目名称)检测失败fallback cols[0]导致名称存成编码
- 导入循环增加防护: NaN/空/纯数字名称跳过,不再创建垃圾KPI
- 存量数据: 14个一级科目名称已按科目表修正,82个明细标记待财务核对,EXT_071标记未命名
|
2026-08-13 01:17:32 +08:00 |
|
Hermes CI Fix
|
1bdfd95fde
|
fix: 账套隔离 — register不再授予全部企业,仅授第一个active企业(防新用户越权)
|
2026-08-11 11:34:14 +08:00 |
|
Hermes CI Fix
|
2f2ada530d
|
fix: bot/kpis 500 — KPIDefinition无description字段改为formula_desc(存量bug,账套模式验证门禁4发现)
|
2026-08-11 11:34:05 +08:00 |
|
Hermes CI Fix
|
d7e97978c6
|
fix: 写接口entity_id token优先(resolve_entity_for_request)+ 登录页用顶层entity_id
|
2026-08-11 11:32:30 +08:00 |
|
Hermes CI Fix
|
52ec2c0f36
|
fix: 登录页entity_id存储取login响应顶层字段 — user对象无entity_id导致cma_entity_id恒为1
- login响应结构: {token, entity_id, entity_name, entity_short_name, user:{...}}
- 原代码读 res.user?.entity_id ?? 1 → 登录博海(2)却存1 → 页面显式传参1与token绑定2不一致 → get_entity_id返回403
- 改为 res.entity_id / res.entity_short_name(与MainLayout切换器存储逻辑一致)
|
2026-08-11 11:32:27 +08:00 |
|
Hermes CI Fix
|
d56ba24f31
|
feat: deps越权防护(query/header与token不一致403) + resolve_entity_for_request + 任务⑥开发规范沉淀
|
2026-08-11 11:30:08 +08:00 |
|
Hermes CI Fix
|
b59de7c476
|
feat: 账套模式API统一 — entity_id参数全部走get_entity_id + 登录页/切换器接口打通
- kpis/cash/bsc_layers/growth_quality/tax_compliance/data/predict: entity_id参数统一为Depends(get_entity_id),token优先隔离(原Query(1)/None会被前端显式传参覆盖,存在越权面)
- auth: 新增GET /auth/login-entities(公开,登录页按用户名查授权企业) + /auth/my-entities(切换器) + /me带当前账套
- 前端: 拦截器删除自动附加X-Entity-Id/entity_id; Login公司选择器; MainLayout/ReportCenter切换器改switch-entity重新签发token+整页刷新
|
2026-08-11 11:29:43 +08:00 |
|
Hermes CI Fix
|
9986f38faa
|
feat: 账套模式全量接入 — 12个API entity_id统一走token解析链 + 前端登录选公司/切换器重签token
- 后端: kpis/bsc_layers/cash/predict/growth_quality/tax_compliance/data 的 entity_id 参数统一改为 Depends(get_entity_id)
- 前端: 拦截器删除自动附加X-Entity-Id/entity_id; 登录页公司选择器(按用户名授权过滤); 切换器改POST /auth/switch-entity重新签发token+整页刷新; ReportCenter同步改造
- 修复前后端不匹配: login-entities路由→/auth/entities; login响应entity_id取user.entity_id
|
2026-08-11 11:29:39 +08:00 |
|
Hermes CI Fix
|
12f9ae520b
|
chore: 删除孤儿文件 auth.py — 实际生效的是 api/auth.py(含_ensure_default_grants存量兼容)
|
2026-08-11 11:26:17 +08:00 |
|
Hermes CI Fix
|
35839dd38e
|
feat: auth.py 账套模式 — login强制entity_id + my-entities授权查询 + switch-entity重签发token
|
2026-08-11 11:25:18 +08:00 |
|
Hermes CI Fix
|
b31f9b80c4
|
feat: 账套模式后端 — token绑定entity_id + user_entities授权表 + 解析链倒置
- auth_middleware: create_token存JSON{user_id,entity_id},旧int格式token强制下线
- models: 新增UserEntity授权表(user_id↔entity_id多对多,唯一约束)
- database: init_db自动建表+存量用户×active企业默认授权(平滑迁移)
- deps: get_entity_id解析链倒置 token优先 → Bot白名单(query/header校验entity active) → 默认1
- auth: login加entity_id+授权校验; 新增switch-entity/my-entities/登录页entities接口; register自动授权
|
2026-08-11 11:24:52 +08:00 |
|
Hermes CI Fix
|
9d0f070c14
|
fix: deploy.sh 依赖更新不阻断部署(PEP668兼容)+ hook退出码检查
|
2026-08-11 11:16:12 +08:00 |
|
Hermes CI Fix
|
d99577dc5c
|
fix: deploy.sh venv激活兼容 — 精简venv无activate时直接用venv/bin/pip3
|
2026-08-11 11:14:54 +08:00 |
|
Hermes CI Fix
|
eb5cca2372
|
chore: backend/logs/ 不入库(gitignore + 解除跟踪 uvicorn.log)
|
2026-08-11 11:12:56 +08:00 |
|
Hermes CI Fix
|
e959c40b1c
|
feat: 多租户实时切换 — 前端拦截器统一entity_id + 后端get_entity_id依赖 + dashboard 6端点支持租户过滤
- 前端: api/index.ts拦截器自动附加X-Entity-Id header + entity_id query参数
- 后端: 新增app/deps.py的get_entity_id公共依赖(query→header→默认1)
- dashboard.py: summary/kpis/finance-analysis/predict/my-kpis/my-dashboard全部支持entity_id
- 解决: 42个页面仅13个传entity_id导致切换企业后数据混乱
|
2026-08-11 11:11:17 +08:00 |
|
Hermes CI Fix
|
dcc7e2194d
|
feat: 新30号准则适配 — 三表完善+认证头修复+企业联动
|
2026-08-11 00:40:43 +08:00 |
|
Hermes CI Fix
|
4081361b05
|
fix: GrowthQuality import api默认导出
|
2026-08-11 00:22:54 +08:00 |
|
Hermes CI Fix
|
b1e8a55745
|
feat: 增长质量诊断模块 — 五维评分+雷达图+跨期对比+趋势
|
2026-08-11 00:21:10 +08:00 |
|
Hermes CI Fix
|
0b191d278e
|
feat: OKR模板库改造 — 弹窗模板库联动+时间分解落库+制造业包6个
|
2026-08-11 00:11:25 +08:00 |
|
Hermes CI Fix
|
32fe3e4d50
|
feat: bot-bridge数据通道 — POST /kpi-result回填KPI+触发预警+MPM自动回填脚本
- 新增 POST /api/cma/bot-bridge/kpi-result: (entity_id,kpi_code)查KPI,
写入KPIValue(source_type=bot, data_status=verified), 复用run_alert_check
触发预警(自动联动行动计划), 返回new_alerts; KPI不存在/缺字段返回错误
- 修复verify引擎_get_kpi_current_value排序: 按calculated_at取最新值,
bot回填值可被auto-verify读到 (修复2026H1字符串排序遮蔽月值问题)
- 新增scripts/bot_bridge_push.py: 财务Bot MPM结果自动回填(MPM字段→KPI
映射), 支持--mpm/--mpm-file/单KPI直推/--ping
|
2026-08-10 23:56:14 +08:00 |
|
Hermes CI Fix
|
f9e20bc9bc
|
fix: KPI历史数据治理批量修复 — 元数据补全321条+编码规范处理222条
- 规则2: 补全321条元数据 (formula 207 / data_source 57 / data_owner 57)
- EXT_科目KPI: formula按财务维度默认'财务指标计算'
- F_/C_/P_/L_经典KPI: 精确公式(6条) + 数据源按维度(财务系统/业务系统)
- data_owner优先取负责部门, 否则默认财务部
- 规则3: 审计规则白名单化EXT_前缀(科目余额表导入, 仅限finance维度),
EXT_编码与dimension保持一致不改动; FB_/BH_ 21条真实前缀冲突
输出人工确认清单 docs/kpi_governance_human_review.md
- 验证: GET /api/cma/kpi/governance/audit → rule_counts {1:0, 2:0, 3:21, 4:0}
未改动任何kpi_code及引用表, 评分/地图/KPI列表接口正常
|
2026-08-10 23:50:14 +08:00 |
|
Hermes CI Fix
|
37f26148fe
|
feat: 数据治理4条规则 — 入库必检+元数据+编码规范+战略分级
|
2026-08-10 23:40:31 +08:00 |
|
Hermes CI Fix
|
e1ea5cd14d
|
feat: Auto-Verify闭环 — verify API+定时验证+OKR联动+周报
|
2026-08-10 23:15:19 +08:00 |
|