解决方案汇报
+KPI 考核管理系统
+把总公司各业务部门与分公司的考核,从 Excel 与聊天工具的来回传递,搬成一条口径唯一、全程留痕、发布即冻结的线上流程:指标库 → 方案配置 → 指标下达 → 数据填报 → 并行核对 → 审核审批 → 实时计分 → 数据调整 → 四维汇总 → 归档快照。
+ +01方案摘要
+一页纸看懂:这套系统解决什么、靠什么机制解决、现在到哪一步了。
+ +现状的三个痛点
+考核本身不复杂,难的是口径与留痕。用 Excel 做考核,三件事必然失控:
+-
+
- 口径不唯一——同一个「完成率」,各部门表里的公式写法不同;表一改,历史周期的分数跟着变,过去算过的账对不上。 +
- 过程不可追——谁在什么时候改了哪个数、为什么改、谁批准的,散落在聊天记录和邮件附件里,复核时拼不回来。 +
- 并行协作靠人盯——分公司核对、人力审核、领导审批的先后顺序靠人催,谁卡在哪一步没有统一视图。 +
系统给出的五个机制
+计分口径唯一真值
四种计分方式(线性 / 阶梯 / 区间插值 / 自定义公式)是数据不是代码。全系统任何一个得分都出自同一个计分引擎 src/lib/scoring.ts,视图和公式字段里不允许二次实现。
发布即冻结
方案一发布,目标值、权重、计分规则以副本形式落到每一行填报明细上。之后改指标库,历史周期分毫不动。
状态机带闸门
流转不靠人自觉。未填全不能提交、有争议不能推进、驳回必须写原因、归档后全表只读——规则全在服务端 hook,按钮只写「待执行动作」。
只增不改的留痕
每一次提交、核对、审核、驳回、调整、归档都写一条审核记录,只增不改;归档快照带 SHA-256 校验和,不可修改删除。
数据范围随方案生成
「本部门 / 本分公司 / 分管范围」由方案发布时按参与主体、分管领导、到人分工自动写入共享规则。组织调整或换分管领导,只改数据,不改元数据。
保留 Excel 的手感
填报是一屏网格、按行填数、保存即出分;列表支持 Excel 导出与批量导入。变的只有一件事:自由公式与跨表引用不进系统,由指标计分规则统一承担。
当前状态
+系统已按方案搭出并跑通全流程:发布生成填报单、线性 / 区间 / 阶梯计分结果与设计方案第 7 章示例逐位一致、提交冻结、并行核对、争议阻断、驳回原因必填、退回上一节点、通过后四维汇总、加减分与调整落地重算、归档快照不可改删,以及三类业务账号的数据范围隔离,均已验证。第 11 章的产品化补充设计(第 18~35 项)待客户确认档次后排期,详见第 12 节。
+02角色与职责
+六个岗位,六套权限集。谁能看到什么由数据范围决定,谁能按哪个按钮由当前流程节点决定——两条边界都在服务端。
+| 角色 | 在系统里做什么 | 能看到的范围 | 岗位机器名 |
|---|---|---|---|
| 系统管理员 | 维护组织、用户、岗位 | 全部 | kpi_admin |
| 人力审核 | 维护指标库与考核方案、指标下达、发布方案、人力节点审核、登记加减分、审批数据调整、归档、审计查询 | 全部 | kpi_hr_reviewer |
| 人力负责人 | 审批加减分、审批数据调整 | 全部 | kpi_hr_head |
| 部门填报人员 | 填报本部门数据并提交、发起数据调整申请 | 本部门 | kpi_dept_reporter |
| 分公司核对人员 | 核对与本分公司相关的数据,只能「确认无误」或「提出争议」,不能改数值 | 本分公司 | kpi_branch_checker |
| 分管领导 | 分管主体的最终审批、查看分管范围的结果与看板 | 分管范围 | kpi_exec_leader |
一条容易被忽略的设计约束
+核对人员不能改数值。发现数据对不上,只能提出争议,由填报部门经调整流程更正。这是客户 2026-09-02 在第 13 项上选定的口径(选项 A),目的是让「谁报的数谁负责」这条责任线不被核对环节冲淡。
+03端到端业务流程
+一个考核周期是一条从左到右的单行道:人力配方案 → 部门填数 → 分公司并行核对 → 人力审核 → 领导审批 → 归档。三张图分别回答:谁在做什么、系统自动做了什么、什么情况下走不动。
+每一步系统保证了什么
+| 步骤 | 谁 | 做什么 | 系统保证 |
|---|---|---|---|
| 1 | 人力审核 | 新建方案版本(可复制上一版)→ 选指标 → 分配权重与目标 → 配考核关系、分管领导、审核节点 → 到人分工 | 草稿期自由改;发布时逐条校验,不合格发不出去 |
| 2 | 人力审核 | 点「发布方案」 | 方案冻结;每个主体生成一张填报单,指标行带目标、权重、计分规则的冻结副本;历史周期不受后续指标库改动影响 |
| 3 | 部门填报人员 | 逐行填实际值(或 Excel 导入),点「提交填报」 | 保存即出分并写计算说明;有指标未填不能提交;提交后数据冻结 |
| 4 | 分公司核对人员 | 并行核对:「确认无误」或「提出争议」(必须写意见) | 全部确认才推进;有争议不能推进;方案里没有核对方时自动跳过本节点 |
| 5 | 人力审核 分管领导 | 「审核通过」或「驳回」 | 驳回必须填原因,退回上一节点;每一步谁、何时、从哪到哪、原因全部留痕 |
| 6 | 系统 | 每次保存实际值即计分 | 口径唯一、可重复计算;计算过程逐条可复核 |
| 7 | 系统 | 审批通过时生成四维结果与排名 | 加减分、数据调整落地后自动重算 |
| 8 | 人力审核 | 点「归档」 | 生成带校验和的快照;之后填报单、明细、加减分全部锁定 |
04方案配置与发布
+方案是一次考核的全部配置:考谁、考什么指标、各占多少权重、目标是多少、走几个审核环节、谁分管谁、分数怎么落到人头上。发布是整条流程唯一一次不可逆的动作——过了这道门,配置就冻结了。
+ +发布这道门为什么重要
+Excel 时代最难查的账是「这个数当时是按什么口径算的」。系统的答案是:发布时把口径复制一份,钉在每一行明细上。
+指标库:计分规则是数据,不是代码
+指标只建一次,以后各期方案都从库里选。指标编码全系统唯一,口径变了不改旧指标——新建一条新版本、把旧的停用、用「替代版本」串起版本链,历史周期照旧可查。
+


方案:四张明细表配齐一次考核
+方案详情页把一次考核要配的东西收在四张内嵌明细表里:审核流程节点(走几步、每步哪个岗位审)、参与主体与考核关系(考谁、谁分管、主体权重)、指标下达(指标 × 主体 × 权重 × 目标值)、到人分工(部门得分怎么落到人头上)。第二期开始,「复制自版本」可以把上一期整套配置搬过来再改数。
+



发布:先拦下,再放行
+发布不是一个「保存并推进」的按钮,而是一次全量体检。检查不通过时,系统不做部分发布——方案原地不动,把问题逐条摆出来。
+

05填报与实时计分
+填报保留 Excel 的手感:一屏网格、按行填数、保存即出分。变的是口径的来源——得分不再由每张表自己的公式算出,而是由全系统唯一的计分引擎算出,并把算式写下来备查。
+ +从实际值到最终得分
+整条计算链路只有五步,每一步的输入输出都落库,任何一个数都能倒推回它的上一步。
+四种计分方式画出来是什么形状
+同一个完成率,四种方式给出的得分率完全不同。选哪一种取决于指标想鼓励什么:线性鼓励多超额、区间插值容忍未达标但压缩超额收益、阶梯只认档位不认零头。
+一张填报单算出来是什么样
+| 指标 | 权重 | 目标 | 实际 | 完成率 | 计分方式 | 得分率 | 得分 |
|---|---|---|---|---|---|---|---|
| 营业收入完成率 | 50 | 1200 万元 | 1320 | 110% | 线性,封顶 120% | 110% | 55.0 |
| 利润完成率 | 30 | 180 万元 | 144 | 80% | 区间 60%~120% | 50% | 15.0 |
| 客户满意度 | 20 | 90 分 | 87.3 | 97% | 阶梯:95%~100% → 90% | 90% | 18.0 |
| 合计 | 100 | — | — | — | — | — | 88.0 |
填报动线:登录即处理
+工作台是六个岗位共用的落地页。区块不按岗位显隐,按数据范围显示——分公司核对人员在「待我核对」里只读得到本分公司的任务,部门填报人员的待填报区块里只有本部门的行。看得到不等于动得了:越权点动作会被服务端的岗位闸门拒绝。
+




06并行核对与逐级审核
+提交之后,单据不再属于填报部门。它先摊给所有相关分公司并行核对,全部确认才继续;再逐级过人力审核与分管领导。每一步只有两个动作:放行,或者写明原因退回。
+ +并行核对:全部确认才推进
+填报单一提交,系统按方案里参与的分公司各生成一条核对任务。这些任务互不排队、同时进行,但推进条件是「全部确认无误」——有一家提出争议,单据就停在核对节点,不会因为其他家都点了确认而溜过去。方案里没有配置需要核对的分公司时,本节点自动跳过。
+核对人员只能表态,不能改数。发现数据对不上,写清「哪一项、差多少、依据是什么」提出争议,由填报部门经数据调整流程更正,更正后回到队列点确认,流程继续。
+

逐级审核:放行或退回,没有第三种
+审核人从队列进入,不需要知道单据在哪个环节——队列本身就是环节。「待人力审核」「待领导审批」「待我核对」三个队列在左侧菜单有直达入口,点一次就到。
+驳回必须填原因,退回上一节点。退回到分公司核对节点时,全部分公司重新核对——这条口径是客户确认的第 8 项,目的是避免「改了一家的数,其他家的确认还算数」这种半有效状态。
+



按钮不是权限边界
+流程按钮只写「待执行动作」,是否允许推进由服务端 hook(src/hooks/sheet.hook.ts)按当前节点的审核岗位判定。绕过按钮直接写状态字段,同样会被拦下——这条曾经是一个真实缺陷(动作体以受信任身份写入被误当作系统写入而免检,任何岗位可越节点审批),已修复并由 29 条岗位闸门测试用例守住。
+07加减分与数据调整
+考核不可能一次填对。系统给出三条受控的改数通道,每条都要审批、都要留痕、都会触发重算——而不是让人回到表格里悄悄把数字改掉。
+ +三条通道各自改什么
+源数据调整
报错的是原始数据。批准后直接更正该行实际值,并重新计分——完成率、得分率、得分全部按新实际值重算。
计算结果调整
要更正的是得分本身。批准后只改该行得分,该行标记「已调整」,在填报单与汇总结果中都看得见,不悄悄改主体总分之外的数据。
加减分
指标之外的专项表彰或扣分。由人力审核按事项登记(分值、依据必填),人力负责人审批后计入最终得分,不封顶不保底。
共同的约束
发起人、审批人由系统按登录账号盖章,不能手工填;已批准并落地的调整不可撤销,要再改就重新提一份;归档后三条通道全部关闭。


08汇总与结果应用
+一张填报单只有一个最终得分,但这个分要落到四个不同的问题上:这个部门考得怎么样、这家分公司排第几、张三个人该拿多少、王总分管的这一摊整体如何。四个维度、四套口径,由同一个汇总引擎在审批通过的那一刻一次生成。
+结果之上还有三张报表与两个看板:组织单元 × 维度矩阵(可钻取)、到人得分、指标完成情况,以及结果看板与流程进度看板。看板回答的是「整体什么水平」,报表回答的是「具体哪一格」。
+

09归档与审计
+归档是一个周期的句号。快照生成之后,这一期的数据就不再是「当前数据」,而是一份带校验和的历史记录——想改也改不动。
+ +归档快照
+人力审核在「已通过」的填报单上点归档,系统把填报单、明细、加减分的当时状态序列化成一份 JSON 载荷,算出 SHA-256 校验和一并存下。此后填报单、明细、加减分全部转为只读,hook 拒绝任何改写与删除。校验和用于核验快照内容未被改动:任何时候都能把快照重新算一遍校验和,与存档值比对。
+归档之后发现错了怎么办?不回改,在下一周期修正——这是客户确认的第 11 项口径。一份能被追溯修改的历史记录,和没有历史记录差别不大。
+ +审计查询
+审核记录对象只增不改,按时间倒序列出每一次流程动作:记录编号、填报单、动作、节点、经办人、原因或意见、时间。加减分与数据调整的审批留痕也走同一张表。支持按填报单、动作、经办人、时间范围筛选并导出,另有「驳回记录」与「时间线」两个视图。
+经办人一律以登录账号为准:提交人、审批人、归档人、调整发起人这些字段由系统盖章,界面上不给手工填写的入口。
+

10权限与数据范围
+「本部门 / 本分公司 / 分管范围」这三个词,在系统里不是配置项,而是方案发布时算出来的结果。这决定了一件事:组织调整、换分管领导、增减参与主体,都只改数据,不改系统配置。
+ +为什么不做成「按组织层级授权」
+常见做法是按组织架构树给权限:某人属于哪个部门,就能看该部门及以下的数据。这套做法在考核场景下会立刻失效——分管领导分管的主体跨部门、逐期变化,到人分工也跨板块。所以数据范围的真值不在组织树上,而在方案里:方案说了谁参与、谁分管、谁承接,可见范围就照着生成。
+11系统架构与对象模型
+系统建在 ObjectStack 17.x 元数据平台上:组织、账号、权限、审计、导入导出、列表与表单这些通用能力直接复用平台;考核专属的六件事——计分、审核状态机、发布生成、调整落地、快照只读、结果汇总——由服务端代码点承担。
+ +自建了什么,复用了什么
+直接复用平台
组织单元与用户、岗位与权限集、共享规则、字段历史与审计日志、列表 / 表单 / 内联网格、Excel 导入导出、报表与看板、账号安全策略。这部分一行代码没写。
六个服务端代码点
计分引擎、审核状态机、方案发布生成、调整落地重算、归档快照与只读锁、结果汇总。它们都是平台 hook 与函数扩展,不改平台包。
纯函数 + 单元测试
计分、状态机、汇总、CEL 求值四件事写成不依赖运行时的纯函数,139 条单元测试逐条守住口径;其中 64 条守数据范围、29 条守岗位闸门。
平台问题只上报
遇到平台能力边界(导航项按岗位裁剪、视图页签溢出、多租户组织归属)一律向平台仓提 issue,应用侧只允许带环境闸门的临时夹具,并在夹具处注明对应 issue。
12交付状态与后续计划
+一期已确认口径(设计方案第 1~10 章共 17 项)已全部实现并跑通;第二批产品化补充(第 18~35 项共 18 项)待逐条确认档次后排期。
+ +已验证的内容
+用演示数据把完整流程真实跑了一遍,并逐条断言:
+-
+
- 发布生成填报单与指标明细;发布前完整性检查的每一条都能拦住对应的错误配置; +
- 线性、区间、阶梯三种计分结果与设计方案第 7 章示例逐位一致; +
- 提交冻结、并行核对、争议阻断推进、驳回原因必填、退回上一节点; +
- 审批通过后四维汇总,加减分与数据调整落地后自动重算; +
- 归档快照不可改、不可删; +
- 部门填报人员、分公司核对人员、分管领导三类账号的数据范围隔离,以及越节点操作被岗位闸门拒绝。 +
验证手段有三层:139 条单元测试守计分、状态机、汇总、数据范围与岗位闸门的口径;端到端脚本经 REST 走完整考核链路;两套演示种子档案(通用企业 / 软件公司,后者 24 个指标覆盖四种计分方式全部分支)支撑演示与验收。此外交付了一册分角色操作手册,六个业务角色分章成册,62 张截图全部取自真实界面。
+| 档次 | 含义 | 项数 | 状态 |
|---|---|---|---|
| 一期(已确认) | 设计方案第 1~10 章,客户 2026-09-02 逐条确认 | 17 | 已实现并跑通 |
| 一期补强 | 不改已确认口径,补齐上线即需要的能力:通知与待办、公式试算器、批量操作与 Excel 直接导入、结果等级、我的考核、统一争议、结果确认与申诉、非功能指标目标值、数据初始化与运维基线 | 9 | 待客户确认档次 |
| 二期 | 扩展考核能力:定性指标计分、否决项与不占权重指标、目标三档与派生指标、个人考核单、审批人来源扩展、跨周期汇总、取数配置与定时导入 | 7 | 待客户确认档次 |
| 产品化候选 | 面向多单位复用:外部接口与单点登录、指标库与方案模板库 | 2 | 单独立项 |
工作项与协作口径
+开发按工作项(GitHub Issue)推进,当前 20 个工作项中 15 项已开发完成待验收、3 项待细化、2 项已关闭。方案分级、需求符合度清单、测试报告一律挂在对应工作项评论上。
+遇到平台能力边界一律只上报、不修复:向平台仓提交现象、最小复现、期望能力与平台版本,不在平台仓开 PR。目前已上报四项(导航项按岗位裁剪不生效、视图页签溢出导致队列够不着、多租户下种子组织单元的归属对齐),应用侧只保留带环境闸门的临时夹具,并在夹具处注明对应 issue,平台修复后删除。
+ +下一步
+-
+
- 确认第二批 18 项的档次——这是当前唯一的阻塞项,决定本期验收范围。 +
- 界面走查评审与真实数据量性能验证——目前尚未完成,需要贵方参与走查。 +
- 现行 Excel 模板的口径翻译——把现有公式逐条翻译成四种计分方式之一,翻译不了的先提出来。这是实施阶段风险最集中的一步,建议配合公式试算器(第 19 项)一并推进。 +
- 主数据准备——组织单元、用户与岗位、指标库、首个方案的导入与清洗。 +
- 试运行——用一个真实考核周期跑一遍,值守并修复缺陷,出试运行报告。 +
需要贵方注意的一处口径变化
+本方案与现状最大的差别是:Excel 自由公式与跨表引用不进系统,公式的作用由「指标计分规则」统一承担。这是获得「口径唯一、可复核、可重算」的代价。实施阶段需要贵方业务口径的负责人配合,把现行考核表里的每一条公式对应到四种计分方式之一;对应不上的,请尽早提出来单独讨论。
+