Skip to content

[P3] approvals: OOO auto-skip + self-service delegation (community core) #1322

Description

@xuyushun441-sys

来源:docs/PLATFORM_GAPS_FROM_TEMPLATES.md 第 20 条(与 #5 强关联)。

范围调整(2026-07): 原 issue 混装了 delegation / OOO / proxy。经代码盘点(见下),委派的权威原语已在开源核心(ADR-0091 职务代理 + ApprovalService.reassign),而治理 / 合规 / 代办访问(act-as)属企业版,已拆分至 objectstack-ai/cloud#855。本 issue 收敛为社区版必备的“审批不冻结”连续性底线。

现象

审批人是具体的人,休假 / 出差 / 离岗会让流程冻结、客户 SLA 跳水。

平台现状(已在 OSS 核心)

  • 审批人解析中枢 ApprovalService.expandApprovers()(plugin-approvals/src/approval-service.ts:300)
  • 任务级转交 reassign()(plugin-approvals/src/approval-service.ts:1036),已带审计 + 通知
  • 职位限时委派(ADR-0091 职务代理):delegatable 职位 + sys_user_position.{delegated_from, valid_from, valid_until, reason},isGrantActive() 解析时过滤;explain-engine 已能显示 “via delegation from A until Y”
  • 审计(sys_approval_action)+ 通知(service-messaging)基础设施

建议范围(社区版)

M1 · OOO 自动跳过 + 候补

  • 新增自助 OOO / 委派状态对象(仿 sys_user_position,独立对象,valid_from / valid_until + delegate_to + reason + trackHistory),挂在锁定的 sys_user 标量上
  • expandApprovers 解析出具体 user 后,命中生效中 OOO → 替换 / 追加候补人;覆盖 type: user / manager / field(职位路径 ADR-0091 已覆盖)
  • 复用 core/src/security/grant-validity.tsisGrantActive() 做时间窗判定

M2 · 临时委派(单任务)

  • 引擎能力已在(reassign);补“委派人自助声明”语义 + 前端按钮(objectui)

M4 · 审计 + 通知(布线)

  • 替换 / 委派发生时写 sys_approval_action(如 action=ooo_substitute,记 A → B + reason),保证社区版“谁替了谁、为什么”可追溯;通知双方

语义注记:expandApprovers请求开启时快照具体 user id,故“请求开启后才生效的 OOO”不追溯(职位 / tier 路径实时重算)——需显式决定。

不在本 issue 范围(→ 企业版 objectstack-ai/cloud#855)

代办访问 / act-as 收件箱 · 委派治理 / SoD · 组织级 OOO/代理管理控制台(代管他人) · 委派合规报表 / 导出 / 认证复核

验收

  • OOO 自动跳过对 type: user / manager / field 生效,窗口外恢复
  • 自助临时委派单任务可用,保留审计
  • procurement / compliance 审批流:审批人休假不再冻结
  • 替换 / 委派事件入审计 + 通知双方
  • 缺陷库 gap chore(ci)(deps): bump actions/configure-pages from 4 to 5 #20 标记为已解决(社区版部分)

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestpriority:p3Low: nice-to-have, backlog

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions