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
37 changes: 34 additions & 3 deletions docs/design/02-domain-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,9 @@ erDiagram
| `expired_certificate_count` | summary | `count` 资质证书,条件 `status == 'expired'` |
| `default_bank_account_count` | summary | `count` 银行账户,条件 `is_default == true`;「每家至多一个默认账户」的校验读它(v0.2) |
| `open_disposition_count` | summary | `count` 处置单,条件 `status == 'in_review'`;「同一家供应商同时只能有一张审批中的处置单」的校验读它(v0.3) |
| `blacklisted_on` / `blacklist_until` | date(只读) | 黑名单名录(v0.5):拉入黑名单的处置单执行时写入拉黑日期和禁入期满日(拉黑日期 + `blacklist_years` 年)。期满前 30 天和当天由 `srm_blacklist_expiry_notice` 提醒,只提醒,解除仍走「解除黑名单」处置单;解除后保留为最近一次拉黑的记录 |
| `blacklist_disposition` / `blacklist_reason` | lookup → 处置单 / textarea(只读) | 拉黑的处置单与处置原因,与上两项同时写入(v0.5) |
| `open_risk_event_count` | summary | `count` 风险事件,条件 `status in ['open', 'mitigating']`(v0.5) |

关键信息锁定(v0.2):`name`、`country`、`credit_code`、`registration_no`、`legal_representative`、
`registered_capital`、`address` 在 `potential` / `qualifying` 期间可以直接改;准入通过后(合格、冻结、
Expand Down Expand Up @@ -387,12 +390,18 @@ upsert 写入,结构不变。
`disposition_no`(自动编号 `DSP{YYYY}{00000}`)、`supplier`、`action`
(`freeze` / `unfreeze` / `eliminate` / `blacklist` / `remove_blacklist`)、
`scope`(`all` 全部品类 / `category` 指定品类,只有冻结和解冻可以指定品类)、`categories`(多值 lookup 品类,
指定品类时必填)、`reason`(必填)、`effective_date`(默认当天)、`status`(`in_review` 审批中 / `applied` 已执行 /
`rejected` 已驳回)、`approval_status`(审批节点写入)、只读的 `category_approver`(发起人不是品类经理时才有
指定品类时必填)、`reason`(必填)、`effective_date`(默认当天)、`status`(`draft` 草稿 / `in_review` 审批中 /
`applied` 已执行 / `rejected` 已驳回 / `cancelled` 已作废;草稿与作废随 v0.5)、`submitted_by`(user,只读:草稿的提交人,v0.5)、
`approval_status`(审批节点写入)、只读的 `category_approver`(发起人不是品类经理时才有
这一级,[03 §5](./03-processes-and-automation.md#5-p2-信息变更与供应商处置))/ `director_approver` / `gm_approver` /
`compliance_approver`、`reject_reason`、`applied_at`。

新建即进入审批,供应商、动作、范围和品类只在新建时填写,原因和生效日期在被退回修改期间可改。审批通过即执行,
新建即进入审批,供应商、动作、范围和品类只在新建时填写,原因和生效日期在被退回修改期间可改。
**草稿**(v0.5)只由 flow 生成(高风险事件,[03 §11](./03-processes-and-automation.md#11-p10-资质与风险监控资质-v01风险事件-v05);
绩效结果应用,03 §10),原因由 flow 写好;品类经理或采购主管经「提交审批」进入审批(提交人写入 `submitted_by` 并成为记录所有者,
审批以它为发起人),或经「作废」放弃(作废理由写入 `reject_reason`)。状态机:`draft` → `in_review` / `cancelled`,
`in_review` → `applied` / `rejected`;`initialStates` 为 `in_review`、`draft`。提交时再校验一次动作与供应商当前状态、
是否已有审批中的处置单(草稿期间供应商状态可能已变)。审批通过即执行,
`effective_date` 记录业务生效日,供采购员在 ERP 同步冻结标志时参照。新建时校验动作与供应商当前状态
([§5.1](#51-供应商-srm_supplierstatus)):

Expand Down Expand Up @@ -689,6 +698,27 @@ ERP 集成前为空)、`reviewer`(user)、`appeal_reason`、`appeal_result
`description`、`status`(`open` / `mitigating` / `closed`)、`mitigation_plan`、`owner_note`、
`disposition`(lookup,`high` 级事件生成的处置单草稿)。

实现(v0.5):OWD `public_read`;品类经理、采购主管、SQE、质量经理要能接手别人登记的和系统生成的事件,用按岗位授 `edit`
的共享规则 `srm_risk_event_edit_*`(可改不可删,[objectstack#25470](https://github.com/objectstack-ai/objectstack/issues/25470) 的裁定写法)。
开启字段历史,门户不可见。

| 字段 | 类型 | 说明 / 约束 |
|---|---|---|
| `event_no` | autonumber | `RSK{YYYY}{00000}` |
| `supplier` | lookup → 供应商 | 必填,新建后只读;供应商详情页的风险事件列表 |
| `risk_type` | select | 共享选项列表 `srm_risk_type`,必填 |
| `severity` | select | `high` / `medium` / `low`,默认 `medium`;`high` 触发 `srm_risk_event_apply` |
| `source` | select(只读) | 手工登记为 `manual`(默认值);`system` 只由 flow 写入;`external_api` 预留 |
| `certificate` | lookup → 资质证书(只读) | 资质类系统事件指回过期的必备证书;同一证书有未关闭的事件时不重复建 |
| `description` | textarea | 必填 |
| `status` | select(stageField) | `open` 未处理(open)→ `mitigating` 处理中(open)/ `closed` 已关闭(won);`mitigating` → `open` / `closed`;`closed` → `open`(关错或风险复现时重新打开) |
| `mitigation_plan` | textarea | 应对措施 |
| `owner_note` | textarea | 处理结论,`closed` 时必填(`requiredWhen`);资质恢复自动关闭时由 flow 写入 |
| `disposition` | lookup → 处置单(只读) | 高风险事件生成或并入的冻结处置单草稿 |
| `external_ref` | text(只读) | 外部服务的事件编号,外部拉取上线后按它去重 |

关闭后类型、严重度、描述、应对措施只读。

## 5. 状态机

每个状态字段都是所在对象的 `stageField`。表中「kind」列即选项的 `kind`;「允许
Expand Down Expand Up @@ -802,6 +832,7 @@ ERP 集成前为空)、`reviewer`(user)、`appeal_reason`、`appeal_result
| 整改单 | `SCAR{YYYY}{00000}` | SCAR202600007 | 按年 |
| 供应商审核 | `AUD{YYYY}{00000}` | AUD202600012 | 按年 |
| 考评单 | `PR{YYYY}{00000}` | PR202600210 | 按年 |
| 风险事件 | `RSK{YYYY}{00000}` | RSK202600009 | 按年 |
| 送货单(预留) | `ASN{YYYYMMDD}{0000}` | ASN202610220015 | 按日 |

物料、交付记录、工厂沿用 ERP 编号,不在 SRM 内另行编号。
Expand Down
20 changes: 18 additions & 2 deletions docs/design/03-processes-and-automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,13 @@ ERP 侧的银行账户由财务按 SRM 的审批记录维护(ERP 集成为预
- 执行以系统身份改供应商状态和品类资格(结果见 [02 §4.2](./02-domain-model.md#42-生命周期) 处置单),
处置单置为「已执行」,通知发起人并提醒在 ERP 同步冻结标志;驳回不改供应商,记下驳回意见。
- 通知供应商与门户账号回收随门户(v0.6);冻结后不能新建合同由合同的校验规则负责(v0.3 C1)。
- 处置单草稿(v0.5):高风险事件(§11)和绩效结果应用(§10 第 6 步)由 flow 生成草稿,不直接发起审批。品类经理或
采购主管在草稿上点「提交审批」(screen flow `srm_disposition_submit`),审批 flow 在草稿变为审批中时发起,发起人
是提交人(`submitted_by`;手工新建的处置单是新建人),品类经理一级的判断与 BR-11 比对都按发起人;不需要处置时点
「作废」(`srm_disposition_cancel`,写明理由)。提交时再校验一次动作与供应商当前状态、是否已有审批中的处置单。
- 黑名单名录(v0.5):拉入黑名单执行时把拉黑日期、禁入期满日(拉黑日期 + `blacklist_years` 年)、处置单和原因写到
供应商上,「黑名单名录」视图列出全部黑名单供应商。`srm_blacklist_expiry_notice` 在期满前 30 天和当天通知拉黑处置单
的发起人和供应商各品类的品类经理;期满不自动解除,解除仍发起「解除黑名单」处置单,按 §12 审批。

## 6. P4 合同审批、签署与到期(v0.3)

Expand Down Expand Up @@ -391,8 +398,15 @@ stateDiagram-v2
| 供应商修改证书 | 证书的编号、有效期或附件被门户修改 | flow 把 `verified` 重置为 false,通知 SQE 重新核验 |
| 资质恢复 | 证书或品类资格写入后的记录触发(`srm_supplier_qualification_recalc`) | 先按该供应商全部品类的 `mandatory_cert_types` 重算每张证书的 `is_mandatory`;再重新计算:每一种必备资质类型都有 `status == 'valid'` 且 `verified == true` 的证书时,`qualification_alert = false`(v0.5 起关闭对应风险事件)。只上传新证书而未经 SQE 核验,不会解除异常 |
| 风险事件处理 | 手工登记或系统生成(v0.5) | `high` 级事件通知品类经理并生成处置单草稿(冻结);关闭时填写处理结论 |
| 资质风险事件 | `srm_supplier_qualification_recalc`(证书状态或「必备」标志变化后) | 这张证书是必备证书且变为已过期时,新建 `qualification` 类、`source = system`、中风险的风险事件,`certificate` 指回证书;这张证书已有未关闭的事件时不再建。资质异常解除时关闭该供应商未关闭的系统资质事件,写处理结论;手工登记的事件不动 |
| 外部风险 | `schedule`:每周一 04:00(客户驱动主题) | flow 按批 `loop` 合格供应商,`http` 节点调用企业信息服务;新出现的经营异常、失信、重大诉讼、股权变更按 `external_ref` 去重后建风险事件(FR-903)。有客户要求时立项 |

> 风险事件处理(v0.5,`srm_risk_event_apply`):事件新建为 `high` 或改为 `high`、还没有处置单时触发。供应商为合格且没有
> 审批中的处置单时生成冻结(全部品类)草稿,原因写事件编号与描述;已有冻结草稿时不再建,事件指向那张草稿(多个高风险
> 事件合并到一张处置单);供应商不是合格状态或已有审批中的处置单时只通知。通知供应商各品类的品类经理,品类都没有品类
> 经理时通知全部品类经理。草稿由品类经理核实后提交或作废(§5)。风险事件由品类经理、SQE 登记和处理,内部其余岗位只读
> (04 §2.3)。

> v0.1 先实现其中的一部分:`srm_certificate_expire_sweep` 每日一次,把证书状态对齐到已过期 / 即将到期(30 天内)/
> 有效(有效期被延长时恢复);`srm_supplier_qualification_recalc` 在证书状态或「必备」标志变化后重算
> `qualification_alert`。到期提醒通知随 v0.1 收尾加入;`is_mandatory` 按品类必备资质自动写入随 v0.2;「经 SQE 核验才解除」
Expand Down Expand Up @@ -446,7 +460,7 @@ flow 属于 ERP 集成后的门户镜像,现阶段不建。
| `srm_admission_approval` | record_change:状态→`admission_review` | 准入申请 | v0.1 |
| `srm_certificate_expiry_notice` | time_relative:`valid_to` −30 / −15 / −7 天 | 资质证书 | v0.1 |
| `srm_certificate_expire_sweep` | schedule:每日 01:00(追赶式) | 资质证书 | v0.1 |
| `srm_supplier_qualification_recalc` | record_change:证书、品类资格写入 | 资质证书 → 供应商 | v0.1 |
| `srm_supplier_qualification_recalc` | record_change:证书、品类资格写入 | 资质证书 → 供应商(v0.5 起 → 风险事件) | v0.1 |
| `srm_change_approval` / `srm_change_apply` | record_change:变更单新建 / 子 flow | 变更单 → 供应商、银行账户、联系人 | v0.2 |
| `srm_contract_approval` | record_change:状态→`in_review` | 合同 | v0.3 |
| `srm_contract_recalled` | record_change:审批中的合同审批结论→`recalled` | 合同 | v0.3 |
Expand All @@ -463,7 +477,8 @@ flow 属于 ERP 集成后的门户镜像,现阶段不建。
| `srm_performance_generate` | schedule:每月 1 日(按类别周期) | 考评单 | v0.5 |
| `srm_performance_publish` | record_change:状态→`reviewing` | 考评单 → 供应商 | v0.5 |
| `srm_performance_apply` | record_change:状态→`published` | 考评单 → 整改单、处置单 | v0.5 |
| `srm_risk_event_apply` | record_change:风险事件新建 | 风险事件 → 处置单 | v0.5 |
| `srm_risk_event_apply` | record_change:风险事件新建或改为高风险 | 风险事件 → 处置单(草稿) | v0.5 |
| `srm_blacklist_expiry_notice` | time_relative:供应商 `blacklist_until` −30 / 0 天 | 供应商(黑名单) | v0.5 |
| `srm_invitation_send` / `srm_invitation_expire_sweep` | record_change / schedule | 门户邀请 | v0.6 |
| `srm_portal_position_backfill` | record_change:供应商 `portal_position` 写入 | 供应商 → 带 `portal_position` 的单据 | v0.6 |
| `srm_single_source_approval` | record_change:状态→`approval_pending` | 寻源单 | v0.7 |
Expand All @@ -487,6 +502,7 @@ flow 属于 ERP 集成后的门户镜像,现阶段不建。
| `srm_contract_activate` 确认生效 | 合同(签署中) | 采购员、采购主管、品类经理 | v0.3 |
| `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_portal_enable` 开通门户 | 供应商联系人 | `srm_supplier_admin` | v0.6 |
Expand Down
2 changes: 2 additions & 0 deletions docs/design/04-security-and-portal.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ R 读 · C 建 · E 改 · D 删 · F 仅经 flow / screen flow 写入 · —

表中未列的权限集:`srm_executive`、`srm_auditor` 对全部对象只读(报价同样受封标约束);
`srm_performance` 对绩效指标增改、`srm_admin` 对绩效指标增改删;`srm_legal` 对合同与明细读改(不新建);`srm_iqc` 对检验增改;绩效评分只经「提交评分」screen flow。
风险事件 OWD `public_read`,持 `srm_supplier_admin`、`srm_quality` 的岗位经共享规则改别人登记的和系统生成的事件(可改不可删);
来源、相关证书、处置单三个字段只经 F 写入(v0.5)。

**`controlled_by_parent` 的写入规则**:子记录(联系人、证书、银行账户、合同明细、报价
明细)的修改要求对父记录有编辑权。所以门户对供应商、报价单都授予编辑权,再用字段级
Expand Down
4 changes: 2 additions & 2 deletions docs/design/05-experience-and-analytics.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
├── 绩效与风险 (v0.5)
│ ├── 绩效指标 全部 / 启用指标(权重合计)/ 已停用
│ ├── 考评单 本期 / 待评分
│ └── 风险事件
│ └── 风险事件 风险看板(按严重度)/ 未关闭 / 按类型;黑名单名录在供应商列表视图
├── 寻源 (v0.7)
│ ├── 寻源单 我的 / 报价中 / 待开标 / 评标中 / 定标审批中
│ ├── 报价 (开标后可见)
Expand Down Expand Up @@ -134,7 +134,7 @@
|---|---|---|
| 采购总览 | 采购总监、总经理 | 本年支出(按品类)、Top 10 供应商支出、寻源节约额、供应商等级分布、资质异常数 |
| 寻源 | 品类经理、寻源工程师 | 进行中寻源单(按状态)、本月定标金额、平均有效报价家数、单一来源占比 |
| 供应商 | 品类经理、SQE | 供应商按生命周期分布、30 天内到期证书数、准入申请积压、风险事件(按严重度) |
| 供应商 | 品类经理、SQE | 供应商按生命周期分布、30 天内到期证书数、准入申请积压、风险事件(按严重度)——v0.5 先上生命周期分布、资质异常数、黑名单数和未关闭风险事件(按严重度、按类型、高风险数),到期证书与准入积压后续补上 |
| 交付 | 采购员、品类经理 | 按月准时 / 不准时交付行数(并列柱)、上月按供应商的 OTD(交付记录计数之比);考评单上线后加按供应商的 OTD 趋势;待确认订单数、交期风险行数在 ERP 集成后加 |
| 质量 | SQE、质量经理 | 不合格交付行、批次合格率、PPM、按供应商的 PPM 排名、不合格交付(按供应商、物料)——默认上月,可改区间(v0.4 Q1);未关闭整改单(按状态)、逾期整改单(v0.4 Q2,看当前积压、不受日期区间过滤);审核问题项关闭率随审核上线 |
| 门户首页 | 供应商 | 待办计数卡片、最新等级与总分、近 4 期得分趋势 |
Expand Down
4 changes: 4 additions & 0 deletions governance/templates/core/GL-08.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ e) 解除黑名单,适用于黑名单内的供应商。

6.2.5 处置原因和生效日期在处置单被退回修改期间可以修改;供应商、处置动作、范围和物资类别提交后不得修改,需要改变的,驳回后重新发起。

6.2.6 供应商出现高风险事件或绩效评价结果触发处置时,SRM 系统自动生成处置单草稿。{{org.position.category_manager}}(或{{org.position.buyer_lead}})应核实后提交审批,提交人即为发起人;核实后认为不需要处置的,作废草稿并写明理由。

## 6.3 审批

6.3.1 处置按附录 A 的权限审批:冻结、解冻由{{org.position.category_manager}}发起,{{org.position.procurement_director}}审批;处置单由{{org.position.buyer_lead}}发起的,先经{{org.position.category_manager}}审批,再按本款审批;淘汰、解除黑名单再经{{org.position.general_manager}}审批;列入黑名单经{{org.position.general_manager}}审批后,由{{org.position.procurement_compliance}}会签。
Expand Down Expand Up @@ -196,6 +198,7 @@ f) 解除黑名单:供应商状态转为「淘汰」,不恢复任何供货
| 控制要求 | 本办法条款 | SRM 系统中的控制方式 |
|------------------------|------------|--------------------------------|
| 处置经处置单办理 | 6.2.1 | 供应商状态和供货资格只能由处置单的执行流程修改;新建处置单即提交审批 |
| 系统生成的处置单草稿 | 6.2.6 | 高风险事件、绩效结果生成的草稿不自动审批;提交后以提交人为发起人进入审批,提交时再校验动作与供应商状态;作废须写明理由 |
| 处置动作与供应商状态相符 | 6.2.2、6.2.3 | 新建处置单时校验动作与供应商当前状态;只有冻结、解冻可以指定物资类别,指定时必须选择物资类别 |
| 同一供应商只有一张审批中的处置单 | 6.2.4 | 供应商已有审批中的处置单时,不能再新建 |
| 按处置动作分级审批、黑名单会签 | 6.3.1 | 处置审批流程:发起人不是{{org.position.category_manager}}的,先由{{org.position.category_manager}}审批;{{org.position.procurement_director}}审批;淘汰、列入和解除黑名单加{{org.position.general_manager}};列入黑名单再经{{org.position.procurement_compliance}}会签 |
Expand All @@ -206,6 +209,7 @@ f) 解除黑名单:供应商状态转为「淘汰」,不恢复任何供货
| 淘汰只能重新准入 | 6.5.2、6.6.3 | 供应商状态机不允许从「淘汰」直接回到「合格」,只能经新的准入申请转为「准入中」 |
| 黑名单不得准入 | 6.5.3 | 注册受理时按统一社会信用代码(境外供应商按注册号)比对,命中黑名单自动不予受理 |
| 解除黑名单单独审批 | 6.6.2 | 解除黑名单是单独的处置动作,按最高一级审批,执行后供应商转为「淘汰」 |
| 黑名单名录与期满提醒 | 6.5.3、6.6.2 | 列入黑名单执行时记录拉黑日期、禁入期满日({{param.blacklist_years}} 年)、处置单和原因,黑名单名录列出全部黑名单供应商;期满前 30 天和当天提醒发起人和{{org.position.category_manager}},不自动解除 |

# 8 记录

Expand Down
Loading
Loading