Skip to content

v0.2 M4 信息变更单 srm_supplier_change_request - #18

Merged
marchtian merged 4 commits into
mainfrom
claude/project-thread-dbvc06
Oct 23, 2026
Merged

marchtian merged 4 commits into
mainfrom
claude/project-thread-dbvc06

Conversation

@marchtian

Copy link
Copy Markdown
Collaborator

Requested by 田騏 · project thread

Closes #12(v0.2 最后一项,总览 #7)。

改了什么

  • 新对象 srm_supplier_change_request(第 10 个对象):按变更类型(基本信息 / 地址 / 银行账户 / 联系人)分组的新值字段;before_value / after_value json 快照(不含银行账号,BR-20);purchase_approver / finance_approver、reject_reason、applied_at、new_bank_account。新值只在新建时和退回修改期间可改。
  • srm_change_approval(新建即触发):快照当前档案 → 第 1 级 srm_buyer_lead → 银行账户变更加第 2 级 srm_ap_accountant → 子 flow 写回。第 1 级覆盖通过、驳回、退回;驳回不改主记录、写入驳回意见并通知发起人。
  • BR-11:每级通过后读 sys_approval_action 比对,发起人自审或两级同一人时这次通过不算数,通知后重开同级审批(平台无此开关,objectstack#25446)。
  • srm_change_apply:写回供应商 / 联系人;银行账户变更停用原账户(同时取消默认),建一个 active 新账户,核验人 = 财务复核人,继承默认标志。
  • 关键信息锁定:合格及以后状态的供应商,全称、国家、信用代码、注册号、法定代表人、注册资本、注册地址只能经变更单修改(校验规则 + 只读的 last_change_request;准入期间仍可直接改)。没用 readonlyWhen:它连系统身份写入也挡。
  • 银行账户 is_default 去掉 readonlyWhen,只靠已有的「只有有效账户能设默认」校验(停用原账户时要同时取消默认,readonlyWhen 会让 flow 写不进去)。
  • 权限:srm_buyer、srm_supplier_admin 可新建、改本人发起的变更单;srm_finance、srm_executive 只读。采购员没有完整账号能力,所以银行账户变更由品类经理 / 采购主管发起。
  • 视图(全部 / 审批中 / 退回修改)、导航、英文翻译;设计 02 / 03 / 04 与导入说明同步。

为什么有偏离设计的地方

  • 设计原写 srm_change_submit screen flow 发起:改为直接新建变更单(分类型字段带校验、退回后可直接改),screen flow 留给 v0.6 门户。
  • 临时:第 2 级(应付会计)只能通过或驳回、不能退回。18.0.0 的 plugin-approvals 把第 2 个节点的提交人记成第 1 级审批人,退回后发起人不能重新提交(objectstack#24817 主干已修、未发版,已评论请求补丁版)。发版后加回退回。

怎么验证的

  • pnpm verify 全过(validate、lint --strict、typecheck、i18n --strict、test 75/75、build)。
  • test/change-request.test.ts 15 个用例,数据全部在测试里生成:基本信息一级审批写回、驳回不改主记录、退回修改后重新提交、审批中不能改、地址 / 联系人写回、银行账户两级审批写回(旧账户停用、新账户有效且为默认、快照不含账号)、财务驳回保留原账户、财务不能退回(临时)、两级同一人与发起人自审不计入、跨供应商 / 非有效账户 / 户名不符 / 采购员填账号被拒、合格供应商不能直接改关键信息、准入中可直接改。
  • 权限快照更新(应付会计、采购主管可见变更单)。

Generated by Claude Code

…est)

- New object srm_supplier_change_request: typed new-value fields per change
  type (basic / address / bank_account / contact), before/after json
  snapshots (no bank account numbers), approvers, applied_at.
- srm_change_approval: snapshot on create, srm_buyer_lead approval, extra
  srm_ap_accountant level for bank changes; approve / reject / send back;
  BR-11 checks against approval records (submitter and both levels must be
  different people; objectstack#25446).
- srm_change_apply: writes back supplier, contact or bank account; bank
  change retires the old account and creates an active verified one that
  inherits the default flag.
- Qualified suppliers' key information can only change through a change
  request (validation keyed on read-only last_change_request).
- Level 2 cannot send back for now: plugin-approvals 18.0.0 records the
  level-1 decider as the level-2 submitter (objectstack#24817).
- Permissions, views, navigation, English translations, design docs 02/03/04
  and import guide updated; 15 new tests with generated sample data.

Closes #12

Claude-Session: https://claude.ai/code/session_01HbSfcxJNF6t1vf6zwGotgG
Co-authored-by: Claude <noreply@anthropic.com>
@marchtian marchtian self-assigned this Oct 23, 2026
@marchtian
marchtian merged commit 09dadfa into main Oct 23, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

v0.2 M4:信息变更单 srm_supplier_change_request

2 participants