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
1 change: 1 addition & 0 deletions docs/design/02-domain-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ upsert 写入,结构不变。
| `sqe` | user | 负责审核的 SQE |
| `supplier` | lookup → 供应商 | 内部登记和邀请注册的申请新建时就关联已登记的供应商(邀请注册的供应商由品类经理在邀请前登记,04 §3.3);公开表单的申请由品类经理推进到「资料审核」时新建(或 `reapply` 时关联旧档)供应商,`submitted` 阶段只有申请记录,不建主数据 |
| `reject_reason` | textarea | |
| `return_reason` | textarea | 退回意见:品类经理「退回补充」时必填(校验规则 `return_reason_required`),供应商在门户的申请上看得到要补什么(v0.6 出口验收) |
| `supplement_note` | textarea(只读) | 补充说明:「退回补充」后供应商在门户经「补充完成,重新提交」(`srm_application_resubmit`)写入(v0.6) |
| `cycle_days` | number | 从提交到批准的天数,批准时由 flow 写入(准入周期指标) |

Expand Down
6 changes: 3 additions & 3 deletions docs/design/03-processes-and-automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ sequenceDiagram
| 1 受理 | 申请创建(v0.1 内部登记;v0.6 受邀供应商在门户经 screen flow `srm_application_submit` 提交:供应商取自调用者自己的名册行,品类取自门户邀请,申请回填到邀请) | flow `srm_application_intake`(record_change,after-create):按身份标识查供应商(`country == 'cn'` 用 `credit_code`,其他国家 / 地区用 `country` + `registration_no`,BR-01);命中 `blacklisted` → 申请置 `rejected`、`duplicate_check = blacklisted`,通知申请人;命中 `eliminated` → `reapply`,申请的 `supplier` 指向旧档并允许继续(淘汰后重新准入的唯一路径,FR-208);命中 `qualified` / `qualifying` / `frozen` / `potential` → `duplicate`,通知品类经理人工判断;未命中 → `pass`。同一 flow 按申请品类找到品类经理和 SQE,写入 `reviewer` / `sqe`,把这些品类中最高的 `risk_class` 和 `material_class` 复制到申请 |
| 2 建档(公开表单,待平台) | 品类经理把申请推进到 `doc_review`(人工确认后,防止灌水污染主数据);内部登记与邀请注册的申请已预关联供应商,没有这一步 | flow `srm_application_accept`:`duplicate_check == 'pass'` 时新建 `potential` 供应商与主联系人并回填 `supplier`;`reapply` 时沿用旧档;供应商 `potential / eliminated → qualifying`;`submitted` 阶段只有申请记录,不建主数据 |
| 3 开通门户 | 品类经理、采购主管提出(门户邀请);组织管理员操作(v0.6) | 组织管理员按邀请邮箱在成员页邀请为 `external`,对方接受后运行「开通门户」(见 [04 §3.3](./04-security-and-portal.md#33-门户账号的开通与回收));准入邀请在开通后由供应商提交申请,所以这一步在步骤 1 之前;v0.1–v0.5 跳过 |
| 4 补充资料 | 供应商 | 门户内补齐公司资料(门户可改的字段见 [04 §4.2](./04-security-and-portal.md#42-字段级权限fls))、银行账户、证书;品类经理可「退回补充」(申请→`returned`,通知申请联系人,v0.6 U6)。供应商补齐后在申请上点「补充完成,重新提交」(screen flow `srm_application_resubmit`,v0.6):写补充说明 `supplement_note`,申请回到 `doc_review`,通知初审人;只有申请所属供应商的门户用户能提交(flow 按门户名册检查)。应付会计经「核验银行账户」、SQE 经「核验证书」两个 screen flow 完成核验 |
| 4 补充资料 | 供应商 | 门户内补齐公司资料(门户可改的字段见 [04 §4.2](./04-security-and-portal.md#42-字段级权限fls))、银行账户、证书;品类经理可「退回补充」(申请→`returned`,必须写退回意见 `return_reason`,通知申请联系人,v0.6 U6)。受邀申请由门户用户提交、属主是门户账号,品类经理和采购主管经共享规则「处理准入申请」(`srm_supplier_application` 的编辑规则,关联了供应商的申请)才能受理、退回;`srm_application_submit` 提交后通知发出邀请的人(门户邀请的 `created_by`)。供应商补齐后在申请上点「补充完成,重新提交」(screen flow `srm_application_resubmit`,v0.6):写补充说明 `supplement_note`,申请回到 `doc_review`,通知初审人(没有初审人时通知最后修改申请的人,即退回申请的人);只有申请所属供应商的门户用户能提交(flow 按门户名册检查)。应付会计经「核验银行账户」、SQE 经「核验证书」两个 screen flow 完成核验 |
| 5 现场审核 | `risk_class == 'high'` | SQE 建供应商审核记录(`audit_type = admission`,关联本次申请),审核后录入总分、最低审核块得分、结论与问题项(结论按 `audit_score_thresholds` 校验,02 §4.2)。审核完成或改了结论时,flow `srm_audit_admission_apply` 把结论写回申请:`audit_result` 记结论,通过或有条件通过时 `audit_passed = true`,否则为 false,并通知初审人;已批准或已驳回的申请不再写。校验规则 `audit_before_review`:`risk_class == 'high' && audit_passed != true` 时申请不得进入 `admission_review`(FR-204)。申请上的勾选框只由 flow 写,品类经理改不了 |
| 6 准入评审 | 申请→`admission_review` | flow `srm_admission_approval`:第 1 级 `field` 审批人 = `reviewer`(品类经理);第 2 级 `position` = `srm_procurement_director`;`material_class == 'class_a'` 或 `risk_class == 'high'` 时第 2 级改为采购总监、`srm_quality_manager` 并行会签(`per_group`:两个岗位各一人通过,同岗位多人时任一人即可;任一人驳回即驳回)。初审人就是申请的新建人或把申请推进到准入评审的人时,品类经理一级上提给采购总监、与第 2 级合并(标准申请由采购总监审批,A 类或高风险由采购总监 + 质量经理会签),申请上 `review_escalated` 记为 true;不要求另一位品类经理,免得只有一位品类经理的品类卡住(平台没有「不可自审」选项,objectstack#25446;同合同、处置单的做法)。驳回 → 申请回 `doc_review` 并通知 |
| 7 批准后 | 审批通过 | 申请→`approved`,写入 `cycle_days`;供应商 `qualifying → qualified`;按申请品类建 `srm_supplier_category`(申请的 `audit_result` 为有条件通过时为 `trial`,否则 `qualified`,WI-01 6.6.2);通知申请联系人(v0.6 U6)。ERP 建档与 `erp_vendor_code` 回写为预留集成点(06 §1) |
Expand Down Expand Up @@ -357,7 +357,7 @@ stateDiagram-v2
| 4 效果验证 | SQE 审核通过 | 状态→`verifying`;SQE 跟踪后续批次,确认有效后关闭(D8),或验证不通过退回 `action_submitted` 重新审核 |
| 5 逾期升级 | 追赶式扫描 `srm_scar_overdue_sweep`(每小时;外部心跳见 §2.3 R3) | 超过 `containment_due` 仍为 `open`、或超过 `final_due` 仍未到 `verifying`:`is_overdue = true`,通知负责 SQE 与质量经理(SQE 主管,FR-605);标志保留到关闭,供「SCAR 按期关闭率」统计;`srm_scar_supplier_notice` 同时提醒供应商 `quality` 联系人(v0.6 U6) |
| 5a 复发重开 | SQE 把已关闭的整改单改回 `open` | flow `srm_scar_reopen`:期限按重开时间重算,逾期标志清掉,通知负责 SQE;`srm_scar_supplier_notice` 把重算后的期限通知供应商 `quality` 联系人(v0.6 U6)。SQE 退回 D4–D7(`action_submitted → containment_submitted`)时也通知 |
| 6 索赔 | SQE 填写 `claim_amount`,`claim_status → proposed` | 供应商在门户的整改单上点「确认索赔」(screen flow `srm_claim_respond`)接受或提出异议,异议必须写意见(`claim_response`);没开通门户的线下确认后由 SQE 记录。接受(`supplier_accepted`)通知负责 SQE 与应付会计,由财务在 ERP 扣款,应付会计回来标记 `settled`;异议(`disputed`)通知负责 SQE 协商,调整金额后可重新提出。SRM 不生成扣款 |
| 6 索赔 | SQE 填写 `claim_amount`,`claim_status → proposed` | `srm_scar_supplier_notice` 通知供应商 `quality` 联系人有索赔待确认(只写单号,金额在门户的整改单上看,v0.6 出口验收补);供应商在门户的整改单上点「确认索赔」(screen flow `srm_claim_respond`)接受或提出异议,异议必须写意见(`claim_response`);没开通门户的线下确认后由 SQE 记录。接受(`supplier_accepted`)通知负责 SQE 与应付会计,由财务在 ERP 扣款,应付会计回来标记 `settled`;异议(`disputed`)通知负责 SQE 协商,调整金额后可重新提出。SRM 不生成扣款 |

**供应商审核与年度审核计划**(v0.4,FR-607;体系文件 WI-01):准入审核见 §3 第 5 步;年度审核与专项审核由 SQE
建审核记录,审核后录入结论与问题项,不符合项经「转整改单」进入上面的整改流程。年度计划由
Expand Down Expand Up @@ -539,7 +539,7 @@ flow 属于 ERP 集成后的门户镜像,现阶段不建。
| `srm_admission_rejection` | record_change:申请→`rejected` | 准入申请 → 供应商(v0.6 起 → 联系人 `portal_user` 清空、门户邀请撤销) | v0.1 |
| `srm_portal_opened_notice` | record_change:门户邀请 `sent`→`accepted` | 门户邀请 → 受邀联系人 | v0.6(U6) |
| `srm_application_supplier_notice` | record_change:有申请联系人的申请受理(`submitted`→`doc_review`)、退回补充、通过 | 准入申请 → 申请联系人 | v0.6(U6) |
| `srm_scar_supplier_notice` | record_change:整改单新建、D4–D7 退回、重开、标记逾期 | 整改单 → 供应商 `quality` 联系人 | v0.6(U6) |
| `srm_scar_supplier_notice` | record_change:整改单新建、D4–D7 退回、重开、标记逾期、提出索赔(`claim_status` → `proposed`,只写单号,不写金额) | 整改单 → 供应商 `quality` 联系人 | v0.6(U6) |
| `srm_review_supplier_notice` | record_change:考评单 `reviewing`→`published`、`appealed`→`published` | 考评单 → 供应商 `admin` 联系人 | v0.6(U6) |
| `srm_bank_supplier_notice` | record_change:银行账户 `pending_verify`→`active` | 银行账户 → 门户管理员 | v0.6(U6) |
| `srm_change_supplier_notice` | record_change:变更单生效、驳回、退回修改 | 变更单 → 门户管理员 | v0.6(U6) |
Expand Down
2 changes: 1 addition & 1 deletion docs/design/04-security-and-portal.md
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ flowchart LR
|---|---|---|---|
| 供应商 | 本公司 | 只能改资料字段(§4.2);名称、地址、银行账户等关键信息走变更单 | RLS 在供应商自身的 `id` 上;授予编辑权是为了让门户能维护证书等子记录;内部评估类字段(关联方、优选、风险事件数等)门户不可见 |
| 联系人、证书、银行账户、品类资格 | 跟随供应商 | 证书可增可改(U4):门户改了类型、编号、发证机构、有效期或扫描件时 `verified` 复位、通知 SQE,经「核验证书」才能解除资质异常(03 §11);联系人仅门户管理员可增可改;银行账户仅门户管理员可增,新建即「待核验」并通知应付会计,已有账户的修改走变更单 | `controlled_by_parent`;联系人的 `portal_user`、`active`,证书的 `status`、`is_mandatory`、`verified`、`verified_by`,银行账户的状态与核验人门户只读 |
| 准入申请 | 本公司 | 只经「补充完成,重新提交」screen flow(`returned` 状态,门户用户,U4):写补充说明,回到资料审核;申请本身的品类、初审人由内部维护 | `private`:读共享规则 + RLS;flow 以系统身份写,进门按门户名册检查启动人属于申请的供应商 |
| 准入申请 | 本公司 | 只经「补充完成,重新提交」screen flow(`returned` 状态,门户用户,U4):写补充说明,回到资料审核;申请本身的品类、初审人由内部维护 | `private`:读共享规则 + RLS;flow 以系统身份写,进门按门户名册检查启动人属于申请的供应商。门户提交的申请属主是门户账号,内部由编辑共享规则「处理准入申请」放行品类经理、采购主管受理和退回;退回意见 `return_reason` 门户可见 |
| 变更单 | 本公司 | 新建只经「提交变更申请」screen flow(门户管理员,U4);被退回修改的单由门户管理员改完重新提交(写策略:本公司且 `approval_status == 'returned'`) | `private`:读共享规则 + RLS;改只限自己发起(拥有)的单——`external` 成员对 `private` 对象只能改自己的行,写策略再限定本公司、被退回 |
| 寻源邀请 | 本公司 | 可改 `status`(接受 / 拒绝)与拒绝原因 | 邀请上有寻源单的快照,门户不读寻源单本身 |
| 报价单 | 本公司 | `status in ['draft','submitted'] && bid_opened == false` 的本公司报价 | 写策略 `using` 限定可改哪些行,`check` 限定改完仍属本公司;上一轮的 `superseded` 报价不可改 |
Expand Down
8 changes: 6 additions & 2 deletions docs/design/05-experience-and-analytics.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
同一份数据,两个外壳:内部员工用「采购协同工作台」,供应商用「供应商门户」。平台规定一个应用包只定义一个应用
(objectstack ADR-0019 D3),所以门户实现为应用 `srm_workbench` 里的「供应商门户」导航组,只对持门户能力
`srm_portal_access`(门户权限集授予)的用户显示(v0.6);门户用户即便点开内部菜单,RLS 仍然只放行他本公司的数据
(导航可见性是体验,RLS 才是边界)。
(导航可见性是体验,RLS 才是边界)。反过来,内部导航组(供应商、合同、质量、绩效与风险、分析、基础数据)和内部经办动作
(确认复核、提交 / 生效合同、开通门户、核验银行账户、提交评分、作废 / 处理申诉、改派评分人)要求内部能力
`srm_internal_access`(内部基础权限集和审计权限集授予),门户用户看不到;门户也要用的动作(如「提交申诉」)不设能力,
由 flow 自己按名册检查(v0.6 出口验收补)。

### 1.1 采购协同工作台 `srm_workbench`

Expand Down Expand Up @@ -177,13 +180,14 @@
| 证书即将到期(前 30 / 15 / 7 天)/ 已过期 | SQE(品类都没有 SQE 时质量经理);v0.6 U6 起加供应商主账号与质量联系人 | 邮件 + 站内 | v0.6(U6,v0.1 只对齐状态未提醒) |
| 银行账户变更待复核、变更已生效 | 应付会计 / 采购员 | 站内 | v0.2 |
| 合同待审批、合同即将到期 | 审批人、合同所有者、品类经理 | 站内 + 邮件 | v0.3 |
| 新整改单、整改退回、整改重开、整改逾期 | 负责 SQE(新整改单没有 SQE 时发质量经理);逾期加质量经理(SQE 主管);v0.6 U6 起加供应商 `quality` 联系人(任何来源的新整改单都发) | 邮件 + 站内 | v0.4(供应商侧 v0.6 U6) |
| 新整改单、整改退回、整改重开、整改逾期;提出索赔 | 负责 SQE(新整改单没有 SQE 时发质量经理);逾期加质量经理(SQE 主管);v0.6 U6 起加供应商 `quality` 联系人(任何来源的新整改单都发;提出索赔只发供应商,不写金额) | 邮件 + 站内 | v0.4(供应商侧 v0.6 U6) |
| 供应商在门户提交临时措施;供应商接受索赔 / 对索赔有异议 | 负责 SQE(提交临时措施时没有 SQE 发质量经理;SQE 本人代填的不发);接受索赔加应付会计 | 站内 | v0.6 |
| 待你评分、评分截止前 3 天仍未评、退回重评、绩效结果发布;绩效申诉待处理、申诉处理结果 | 评分人;采购总监;内部代录的申诉人;v0.6 U6 起绩效发布和申诉结果加供应商 `admin` 联系人(门户提交的申诉人只收这一条) | 站内 + 邮件 | v0.5(供应商侧 v0.6 U6) |
| 门户开通待办(新门户邀请);门户访问已收回(联系人停用、处置、准入未通过) | 组织管理员 | 站内 | v0.6(U3) |
| 银行账户核验生效;信息变更单已生效 / 已驳回 / 退回修改 | 供应商门户管理员(内部发起的变更单另发发起人) | 邮件 + 站内 | v0.6(U6) |
| 供货资格冻结 / 解冻、淘汰、列入黑名单 | 供应商 `admin` 联系人(只写范围,不写处置原因) | 邮件 + 站内 | v0.6(U6) |
| 门户已开通(门户邀请)、准入申请已受理 / 退回补充 / 已通过 / 未通过 | 受邀联系人;申请联系人(申请上的 `contact`,不发 `created_by`;内部登记的申请没有,不发) | 邮件 + 站内 | v0.6(U6) |
| 供应商在门户提交了准入申请;补充完成、重新提交 | 发出门户邀请的人;初审人(没有时发退回申请的人) | 站内 | v0.6 |
| 新的询价邀请、报价截止前 24 小时仍未提交、中标 / 未中标、待你审批的定标 | 受邀供应商 `sales` 联系人;审批人 | 邮件 + 门户待办 | v0.7 |
| 新订单待确认、订单变更、交期风险、订单 24 / 48 小时未确认、付款完成 | 供应商 / 采购员 / 采购主管 | 邮件 / 站内 | ERP 集成后 |

Expand Down
Loading
Loading