Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions docs/design/02-domain-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,8 @@ flow 拒绝新建人核验自己建的账户(03 §13)。
| `legacy_imported` | boolean | 默认 false;存量导入的证书为 true,同供应商的同名字段(只在新建时可置为 true,只有 `srm_admin` 可写)(v0.2) |

**`srm_category` 采购品类**(OWD `public_read`):`code`、`name`、`parent`(`tree`,
上级品类)、`category_manager`(user)、`sqe`(user)、`is_direct`(boolean,直接
上级品类)、`category_manager`(user)、`sqe`(user)、`buyer`(user,采购员)、`evaluator`(user,需求部门
评分人,持 `srm_evaluator` 岗位;`buyer` 与 `evaluator` 随 v0.5 绩效评分加入,见 §4.7 `scorer_type`)、`is_direct`(boolean,直接
物料)、`material_class`(共享选项列表 `srm_material_class`:`class_a` 战略类 / `class_b` 重要类 /
`class_c` 一般类(选项值至少 2 个字符,所以不用单字母),与体系文件的物资 A / B / C 分类同源,决定准入审批是否会签质量经理、
审核频次和绩效周期)、`risk_class`(`high` / `medium` / `low`,决定准入是否需要现场
Expand Down Expand Up @@ -659,7 +660,9 @@ false,BR-13)、`received_quantity`(summary:`sum` 收货记录 `accepted_
`weight`(percent)、`active`(默认 true)、`scoring_rule`(textarea,评分规则说明,例如「OTD ≥ 98% 得满分,
每低 1% 扣 5 分」)、`full_score_value` / `zero_score_value`(number,自动指标必填:原始值达到满分值得 100 分、
达到零分值得 0 分,之间线性计分、越界取 0 或 100;满分值大于零分值时越高越好,反之越低越好〔PPM〕;比率按百分点填,
两者不能相同)。启用的指标权重必须大于 0。
两者不能相同)、`scorer_type`(评分人:`category_manager` 品类经理〔默认〕/ `buyer` 采购员 / `sqe` SQE /
`evaluator` 需求部门评分人;人工指标和没有数据的自动指标按它从供应商的品类上取评分人,03 §10 第 3 步)。
启用的指标权重必须大于 0。

现阶段一套全局方案:**启用指标的权重合计应为 100%**。跨记录合计写不成单条校验规则(改权重往往要连改几条),
所以由视图「启用指标」检查——按维度分组,权重列的合计即总权重、分组表头是各维度小计;考评生成 flow 再守一次
Expand All @@ -675,13 +678,20 @@ screen flow;删除只给 `srm_admin`,删掉后可补跑生成;开启字段
由汇总分级写入,供看板使用)、`grade`(`grade_a` / `grade_b` / `grade_c` / `grade_d`;平台的选项值至少两个字符)、
`status`(见 §5.7)、`otd_rate` / `lot_pass_rate`(percent)、`ppm`(number)、`ack_on_time_rate`(percent,
ERP 集成前为空)、`delivery_count`(number,本期交付行数)、`data_incomplete`(boolean,默认 false:本期没有交付记录或
某项启用的自动指标没有数据时为 true,该项不给零分,07 R7)、`reviewer`(user)、`appeal_reason`、`appeal_result`。
某项启用的自动指标没有数据时为 true,该项不给零分,07 R7)、`score_due`(date,评分截止日,转人工评分时为当天 +
`perf_score_days`)、`approval_status`(审批结论,审定发布的审批节点写入)、`reviewer`(user,审定人)、`review_comment`
(审定意见:通过或退回重评时采购总监的意见)、`published_date`(date)、`appeal_reason`、`appeal_date`(date,申诉登记日)、
`appeal_recorded_by`(user,代录人)、`appeal_result`、`appeal_outcome`(`maintained` 维持原结果 / `adjusted` 调整总分)、
`appeal_handled_by`(user,处理申诉的采购总监)、`void_reason`(v0.5 P3 加入后面这些字段)。
自动指标由交付记录按 `period` 汇总,比率字段存小数(0.985 即 98.5%);flow 写的字段一律只读。
维度得分是该维度各评分明细按权重的加权平均(0–100,没有该维度的指标时为空),总分是全部明细的 `Σ(score × weight)`
(启用指标权重合计 100%),都保留两位小数,等级按两位小数的总分判断。

**`srm_performance_score` 评分明细**(master_detail → 考评单,`controlled_by_parent`):`kpi`(lookup)、
`raw_value`(number,自动指标的原始值,与指标的满分值、零分值同一单位:比率按百分点,PPM 按 PPM)、`score`(number,0–100)、
`weight`(percent,生成时从指标快照)、`scorer`(user,人工指标的评分人)、`comment`、`scored`(boolean,默认 false;
自动指标算出得分时为 true,没有数据时为 false 并在 `comment` 写明)。
自动指标算出得分时为 true,没有数据时为 false 并在 `comment` 写明)、`defaulted`(boolean,默认 false,「未评」:评分截止时
还没有评分,由扫描任务按参数 `perf_missing_score` 取默认分,v0.5 P3)。

### 4.8 结算(不做,留在 ERP)

Expand Down Expand Up @@ -815,13 +825,15 @@ ERP 集成前为空)、`delivery_count`(number,本期交付行数)、`da
|---|---|---|---|
| `calculating` ★ | 自动算分 | open | `scoring`、`void` |
| `scoring` | 人工评分 | open | `reviewing`、`void` |
| `reviewing` | 审定中 | open | `published`、`void` |
| `reviewing` | 审定中 | open | `published`、`scoring`(采购总监退回重评)、`void` |
| `appealed` | 申诉中 | open | `published` |
| `published` | 已发布 | won | `appealed` |
| `void` | 已作废 | lost | — |

`calculating` 只存在于一次生成运行之内:生成 flow 建单、建评分明细、算完自动指标后在同一次运行里转 `scoring`;
中途失败留下的 `calculating` 考评单在下次运行时删掉重建(03 §10 第 1 步)。
中途失败留下的 `calculating` 考评单在下次运行时删掉重建(03 §10 第 1 步)。作废只在人工评分阶段,由采购总监经「作废」
screen flow 写明理由(例如供应商本期实际没有供货);作废的考评单仍占着 `supplier` + `period`,同期要重新考评时由系统管理员
删除后补跑生成。

### 5.8 对账单

Expand Down
22 changes: 15 additions & 7 deletions docs/design/03-processes-and-automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -383,11 +383,15 @@ stateDiagram-v2
|---|---|---|
| 1 生成 | `schedule`:每月 1–7 日每天 03:00(追赶式) | 活跃供应商(合格或冻结:冻结期间仍在交付在途订单,连续 D 级要能累计)按所供品类(不论品类资格状态)中最高的物资类别取周期参数 `perf_cycle`(示例 A 类每月、B 类每季、C 类每年),没有品类资格的不生成;每期的第一个月「到期」,建上一期的考评单(`calculating`,`cycle` / `period` / 起止日期写明),按指标库中启用的指标建评分明细并快照权重(FR-702)。启用指标的权重合计不是 100% 时本次不生成并通知采购总监。同一供应商同一期间已有考评单的跳过(`supplier` + `period` 唯一),1 日漏跑的后几天补上,跑两遍不重复建;上次中途失败留下的 `calculating` 考评单删掉重建。补跑更早的月份时传入运行日 `asOf` |
| 2 自动算分 | 同一次运行 | 按 [05 §4](./05-experience-and-analytics.md#4-仪表盘与指标口径) 的口径(同数据集 `srm_delivery_metrics`)从交付记录计算 OTD、批次合格率、PPM:flow 的查询节点按供应商和本期包含的月份(交付记录的 `period`)取交付记录,汇总 `on_time`、`inspection_result`、`defect_quantity`、`received_quantity`,写入考评单的比率字段与交付行数;每条自动指标的评分明细写入原始值与得分,得分按指标的满分值、零分值线性计算(02 §4.7),数字全在指标库里,flow 不写死。本期没有交付记录、某项指标没有数据(如没有已检批次)时该项不给分(`scored = false`,`comment` 写明),考评单标记「数据不全」,不给零分(07 R7),由人工评分环节处理。订单响应及时率在 ERP 集成前在指标库中不启用(不建评分明细),启用时由采购总监调整其余权重。算完转 `scoring`。不良数与实收数逐行累加:CEL 没有对列表求和、flow 没有汇总节点(07 §6.3 PF15)。性能(07 R9,2026-10-24 进程内 sqlite 实测):200 家供应商、每家 6 行交付记录一次生成约 7.4 秒,每家 30 行约 8.6 秒,重跑(全部跳过)约 0.6 秒 |
| 3 人工评分 | 状态→`scoring` | 按评分明细的 `scorer`(品类经理、SQE、需求部门评分人)通知,评分人经「提交评分」screen flow 只看到并填写分配给自己的评分项;截止 10 天,扫描任务提醒未评项;截止后未评项按「取 60 分并标记未评」处理(可配置) |
| 4 汇总分级 | 全部评分完成或截止 | `total_score = Σ(score × weight)`;等级线取参数 `perf_grade_min`(示例 A ≥ 90、B ≥ 80、C ≥ 70,其余 D);状态→`reviewing` |
| 5 审定发布 | 审批:采购总监(`position = srm_procurement_director`) | 通过后→`published`;回写供应商 `grade`、`latest_score`;供应商可在门户查看结果与扣分项(FR-704) |
| 3 人工评分 | 生成 flow 转 `scoring` 时 | 评分人在生成评分明细时写入:人工指标和没有数据的自动指标按指标的 `scorer_type` 从供应商的品类上取(品类经理 `category_manager`、采购员 `buyer`、SQE `sqe`、需求部门评分人 `evaluator`);供应商有多个品类时取物资类别最高的、设了这个人的品类,都没设时退回品类经理,仍没有则不指派(截止后按缺评处理)。转 `scoring` 时写评分截止日 `score_due`(当天 + `perf_score_days`,示例 10 天)并通知各评分人(「待你评分」)。评分人在考评单上点「提交评分」(screen flow `srm_score_submit`):flow 只列出指派给本人的评分项,逐项显示指标、评分规则和原始值,填 0–100 分和说明,已评的可以在截止前改;全部评分项都已评分时考评单转 `reviewing`。`srm_score_due_notice` 在截止前 3 天提醒还有未评项的评分人;扫描任务 `srm_score_overdue_sweep`(每日,追赶式)把已过截止日的考评单上未评项取参数 `perf_missing_score`(示例 60 分,客户可改)、标记「未评」(`defaulted`),转 `reviewing` |
| 4 汇总分级 | 状态→`reviewing`(`srm_performance_publish`) | `total_score = Σ(score × weight)`,各维度得分为维度内按权重的加权平均;等级线取参数 `perf_grade_min`(示例 A ≥ 90、B ≥ 80、C ≥ 70,其余 D),写入考评单 |
| 5 审定发布 | 同一 flow 的审批:采购总监(`position = srm_procurement_director`) | 通过后→`published`,写审定人、发布日期;回写供应商 `grade`、`latest_score`(同一供应商已有更晚期间的已发布考评单时不回写),通知评分人;供应商可在门户查看结果与扣分项(FR-704,v0.6)。采购总监驳回即「退回重评」:考评单回到 `scoring`,审定意见写入 `review_comment`,截止日重新起算,通知评分人改分。职责分离(同 BR-11):审定人不能是本考评单的评分人,撞人时这次通过不算数,通知后重新开一轮审定 |
| 6 结果应用 | 发布后的记录触发 | C 级:生成改善要求(整改单,`source = performance`);D 级:生成处置单草稿(冻结);连续 `perf_d_exit_periods` 期 D 级:生成淘汰处置单草稿交品类经理评审(BR-18);A 级:在名录中标记优选,供寻源邀请参考 |
| 7 申诉 | 供应商发布后 7 天内 | 状态→`appealed`,采购总监处理后回到 `published`,结果留痕(FR-706) |
| 7 申诉 | 供应商发布后 `perf_appeal_days`(示例 7)天内 | v0.6 前由采购员、采购主管或品类经理在考评单上代录(screen flow `srm_appeal_submit`,门户上线后供应商自己提交):只能申诉一次,写申诉理由 → `appealed`,通知采购总监。采购总监经「处理申诉」(`srm_appeal_resolve`)写处理结果,选择维持原结果或调整总分(等级按新总分重算并回写供应商)→ 回到 `published`,处理人和结果留在考评单上(FR-706)。处理人同样不能是本考评单的评分人。结果应用(第 6 步)只在审定发布时触发;申诉改变等级时,按原等级生成的草稿由品类经理作废或另行处理 |

> 评分人的回避(评分人、复核人与被评价供应商有关联关系的)系统判断不了,是制度要求(GL-05);系统能做到的是评分只能填
> 指派给本人的评分项、评分人不能审定或处理本考评单的申诉。人工评分环节的界面过滤之外,评分写入只经 screen flow(考评单与
> 评分明细对所有内部岗位只读),所以绕过界面也改不了别人的评分项。

## 11. P10 资质与风险监控(资质 v0.1,风险事件 v0.5)

Expand Down Expand Up @@ -475,7 +479,9 @@ flow 属于 ERP 集成后的门户镜像,现阶段不建。
| `srm_audit_admission_apply` | record_change:准入审核完成或改结论 | 供应商审核 → 准入申请 | v0.4 |
| `srm_audit_plan_generate` | schedule:每月 1 日 02:30(追赶式;年初那次生成全年计划) | 供应商审核 | v0.4 |
| `srm_performance_generate` | schedule:每月 1–7 日 03:00(追赶式,按类别周期) | 考评单、评分明细 | v0.5 |
| `srm_performance_publish` | record_change:状态→`reviewing` | 考评单 → 供应商 | v0.5 |
| `srm_performance_publish` | record_change:状态→`reviewing`(汇总分级 + 采购总监审定) | 考评单 → 供应商 | v0.5 |
| `srm_score_due_notice` | time_relative:考评单 `score_due` −3 天 | 考评单 → 评分人 | v0.5 |
| `srm_score_overdue_sweep` | schedule:每日 04:00(追赶式) | 考评单、评分明细 | v0.5 |
| `srm_performance_apply` | record_change:状态→`published` | 考评单 → 整改单、处置单 | v0.5 |
| `srm_risk_event_apply` | record_change:风险事件新建或改为高风险 | 风险事件 → 处置单(草稿) | v0.5 |
| `srm_blacklist_expiry_notice` | time_relative:供应商 `blacklist_until` −30 / 0 天 | 供应商(黑名单) | v0.5 |
Expand Down Expand Up @@ -503,8 +509,10 @@ flow 属于 ERP 集成后的门户镜像,现阶段不建。
| `srm_change_submit` 提交变更申请 | 门户:公司资料(v0.6 前内部在供应商档案下直接新建变更单) | 门户管理员 | v0.6 |
| `srm_audit_finding_to_scar` 转整改单 | 供应商审核(已完成) | SQE、质量经理 | v0.4 |
| `srm_disposition_submit` 提交审批 / `srm_disposition_cancel` 作废 | 处置单(草稿) | 品类经理、采购主管 | v0.5 |
| `srm_score_submit` 提交评分 | 考评单 | 评分人 | v0.5 |
| `srm_appeal_submit` 申诉 | 门户:绩效 | 门户管理员 | v0.6 |
| `srm_score_submit` 提交评分 | 考评单(人工评分) | 评分人 | v0.5 |
| `srm_performance_void` 作废 | 考评单(人工评分) | 采购总监 | v0.5 |
| `srm_appeal_submit` 申诉 | 考评单(已发布);v0.6 起门户:绩效 | 采购员、采购主管、品类经理代录(v0.5);门户管理员(v0.6) | v0.5 |
| `srm_appeal_resolve` 处理申诉 | 考评单(申诉中) | 采购总监 | v0.5 |
| `srm_portal_enable` 开通门户 | 供应商联系人 | `srm_supplier_admin` | v0.6 |
| `srm_invite_supplier` 邀请供应商 | 寻源单 | 寻源工程师 | v0.7 |
| `srm_event_submit` 发布 | 寻源单 | 寻源工程师 | v0.7 |
Expand Down
9 changes: 6 additions & 3 deletions docs/design/05-experience-and-analytics.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
│ └── 供应商审核 计划 / 问题项
├── 绩效与风险 (v0.5)
│ ├── 绩效指标 全部 / 启用指标(权重合计)/ 已停用
│ ├── 考评单 全部 / 待评分 / 数据不全(本期考评随 v0.5 P3)
│ ├── 考评单 全部 / 待评分 / 数据不全 / 审定中 / 申诉中 / 已发布(按等级)
│ ├── 待我评分 评分明细:指派给本人、还没评分的评分项
│ └── 风险事件 风险看板(按严重度)/ 未关闭 / 按类型;黑名单名录在供应商列表视图
├── 寻源 (v0.7)
│ ├── 寻源单 我的 / 报价中 / 待开标 / 评标中 / 定标审批中
Expand Down Expand Up @@ -82,7 +83,9 @@
| 绩效指标 | 启用指标 | 列表 | `active == true`,按 `dimension` 分组,权重列合计(应为 100%)与各维度小计 | 采购总监 |
| 考评单 | 待评分 | 列表 | `status == 'scoring'`,按期间倒序 | 采购总监 |
| 考评单 | 数据不全 | 列表 | `data_incomplete == true`:本期交付记录没导入或不全(07 R7) | 采购总监、SQE |
| 考评单 | 本期考评 | 列表 | 当前期间,按 `grade` 分组(随 v0.5 P3 汇总分级) | 采购总监 |
| 考评单 | 审定中 / 申诉中 | 列表 | `status == 'reviewing'` / `status == 'appealed'` | 采购总监 |
| 考评单 | 已发布 | 列表 | `status == 'published'`,按 `grade` 分组、期间倒序(列表视图不能按「当前期间」动态过滤,用期间倒序代替) | 采购总监、品类经理 |
| 评分明细 | 待我评分 | 列表 | `scorer` 是本人且 `scored == false`,从这里点进考评单「提交评分」 | 评分人 |
| 采购订单、订单行 | 待供应商确认、交期风险、交货排程 | 列表 / 甘特 | 预留(ERP 集成后的门户镜像) | 采购员、计划员 |

门户侧的视图是上述视图的子集,由 RLS 自动限定到本公司,**不需要**为门户单独写过滤
Expand Down Expand Up @@ -163,7 +166,7 @@
| 银行账户变更待复核、变更已生效 | 应付会计 / 采购员 | 站内 | v0.2 |
| 合同待审批、合同即将到期 | 审批人、合同所有者、品类经理 | 站内 + 邮件 | v0.3 |
| 新整改单、整改退回、整改重开、整改逾期 | 负责 SQE(新整改单没有 SQE 时发质量经理);逾期加质量经理(SQE 主管);v0.6 起加供应商 `quality` 联系人 | 邮件 + 站内 / 门户待办 | v0.4 |
| 待你评分、绩效结果发布 | 评分人;采购总监(v0.6 起加供应商 `admin` 联系人) | 站内 + 邮件 | v0.5 |
| 待你评分、评分截止前 3 天仍未评、退回重评、绩效结果发布;绩效申诉待处理、申诉处理结果 | 评分人;采购总监;申诉代录人(v0.6 起加供应商 `admin` 联系人) | 站内 + 邮件 | v0.5 |
| 门户邀请、准入申请已受理 / 已驳回 / 已通过 | 受邀联系人、申请联系人 | 邮件 | v0.6 |
| 新的询价邀请、报价截止前 24 小时仍未提交、中标 / 未中标、待你审批的定标 | 受邀供应商 `sales` 联系人;审批人 | 邮件 + 门户待办 | v0.7 |
| 新订单待确认、订单变更、交期风险、订单 24 / 48 小时未确认、付款完成 | 供应商 / 采购员 / 采购主管 | 邮件 / 站内 | ERP 集成后 |
Expand Down
Loading
Loading