补齐审批退回结果通知 [09-04-approval-return-notification-gap]

这个提交包含在:
2026-09-04 16:22:27 +08:00
父节点 a6ffb7fc3c
当前提交 2e69fe4edb
共修改 19 个文件,包含 857 行新增和 14 行删除
+5 -2
查看文件
@@ -96,8 +96,9 @@
### 3.2 一期明确覆盖范围
- 待办类:`workflow.task_assigned`
- 报销结果:`reimbursement.approved / rejected / returned / paid`
- 请假结果:`leave.approved / rejected`
- 采购结果:`purchase_request.approved / rejected`
- 请假结果:`leave.approved / rejected / returned`
- 采购结果:`purchase_request.approved / rejected / returned`
- 差旅结果:`travel_request.approved / rejected / returned`
- 资产流转:`asset.assigned / returned / transferred`
- 盘点结果:`inventory_check.completed`
@@ -227,6 +228,8 @@
### 6.3 当前 IM 一期实现说明
- 运行时仍以通知类型驱动 IM 入队,而不是直接暴露新的领域事件名。
- 请假、采购和差旅退回分别使用 `leave.returned`、`purchase_request.returned`、`travel_request.returned`;正文明确单据已退回且可修改后重新提交。这三项是运行时通知类型,不新增领域 Outbox 事件名。
- 支持 return 的业务对象在业务状态、审批历史和额度/预算释放完成后投影站内、邮件任务与 IM 派发任务;通知构造或派发失败只记录脱敏错误,不回滚已经完成的退回结果。
- `notification.im` 的 `dedupeKey` 固定为:
- `${notificationType}:${targetType}:${targetId || targetPath}:${channelId}`
- IM 失败仅影响 Outbox 状态,不回滚业务事务。
+5
查看文件
@@ -89,10 +89,13 @@
| `payment_batch.execution_requested` | 付款复核通过,责任转回实际付款人 | `payment_batch` | `/payment-batches?id=<id>` | 待办通知;优先通知仍可付款的制单人 |
| `leave.approved` | 请假审批通过 | `leave_request` | `/leave-requests` | 结果通知 |
| `leave.rejected` | 请假驳回 | `leave_request` | `/leave-requests` | 结果通知 |
| `leave.returned` | 请假退回修改 | `leave_request` | `/leave-requests` | 结果通知;单据回到草稿,可修改后重新提交 |
| `purchase_request.approved` | 采购审批通过 | `purchase_request` | `/purchase-requests` | 结果通知 |
| `purchase_request.rejected` | 采购驳回 | `purchase_request` | `/purchase-requests` | 结果通知 |
| `purchase_request.returned` | 采购退回修改 | `purchase_request` | `/purchase-requests` | 结果通知;单据回到草稿,可修改后重新提交 |
| `travel_request.approved` | 差旅审批通过 | `travel_request` | `/travel-requests?id=<id>` | 结果通知 |
| `travel_request.rejected` | 差旅审批驳回 | `travel_request` | `/travel-requests?id=<id>` | 结果通知 |
| `travel_request.returned` | 差旅退回修改 | `travel_request` | `/travel-requests?id=<id>` | 结果通知;单据回到草稿,可修改后重新提交 |
| `asset.assigned` | 资产领用成功 | `asset_card` | `/assets` | 通知新领用人 |
| `asset.returned` | 资产归还成功 | `asset_card` | `/assets` | 通知原持有人 |
| `asset.transferred` | 资产调拨成功 | `asset_card` | `/assets` | 通知归属变更涉及人员 |
@@ -107,6 +110,8 @@
这些事件名称仍保留在长期蓝图中,但不属于 `P19+IM-1` 的首批协同覆盖范围。
请假、采购和差旅的 `*.returned` 是运行时通知类型,不是新增的领域 Outbox 事件名;它们与既有审批结果通知共用 `notification.im` 投影和派发链。
## 10. P19+ERP-1 / ERP-3 已实现消费映射
- `P19+ERP-1` 没有新增新的领域事件名;ERP 一期真正落地消费的既有业务事实是 `reimbursement.paid`,运行时会先构建标准化 `ReimbursementJournalSlice`,再通过 `erp.journal.export` 写入 `IntegrationOutbox` 异步派发。
- `ReimbursementJournalSlice.sourceEventName` 固定为 `reimbursement.paid`,用于标记该凭证切片来源于“报销付款完成”这一既有业务事实;历史 `erp.reimbursement.paid` outbox 仍继续兼容。