6.1 KiB
6.1 KiB
领域事件清单(P19 / P19+IM-1)
快照日期:2026-03-08
目标:冻结 hyb-oa 当前采购与资产域的标准领域事件名,并补充 P19+IM-1 已实际消费的 IM 通知类型清单,作为后续 ERP / IM / AI 适配的事实源。
1. 使用原则
- 本文档同时维护两类事实:
- 领域事件名(长期稳定边界)
- IM 一期已消费的通知类型(当前运行时实现)
- 未来若继续扩展 Outbox / webhook / MQ,领域事件名与最小载荷必须保持向后兼容。
- 领域事件只表达“已经发生的业务事实”,不表达待办命令。
2. 标准领域事件清单
| 事件名 | 触发时机 | 领域对象 | 最小载荷字段 | 推荐消费者 | 备注 |
|---|---|---|---|---|---|
purchase_request.submitted |
采购申请提交成功后 | purchase_request |
purchaseRequestId, requestNo, applicantId, departmentId, legalEntityId, costCenterId, supplierId, budgetPoolId, totalAmount, status |
IM、ERP、AI | 表示进入 reviewing |
purchase_request.approved |
采购申请审批通过后 | purchase_request |
purchaseRequestId, requestNo, approvedBy, legalEntityId, costCenterId, supplierId, budgetPoolId, totalAmount, status |
ERP、IM、AI | 对应预算 confirm 已完成 |
purchase_request.rejected |
采购申请审批驳回后 | purchase_request |
purchaseRequestId, requestNo, actorId, reason, status |
IM、AI | 若存在预算预留,应已释放 |
purchase_request.withdrawn |
申请人撤回采购申请后 | purchase_request |
purchaseRequestId, requestNo, actorId, status |
IM、AI、ERP 补偿 | 表示由 reviewing 回到 draft |
asset.card.created |
资产卡片创建成功后 | asset_card |
assetId, assetNo, name, categoryId, legalEntityId, costCenterId, purchaseRequestId, status |
ERP、IM、AI | 资产域不接 workflow |
asset.assigned |
资产领用成功后 | asset_card |
assetId, assetNo, employeeId, assignedAt, location, status |
IM、AI | 对应新增 open assignment |
asset.returned |
资产归还成功后 | asset_card |
assetId, assetNo, employeeId, returnedAt, location, status |
IM、AI | 对应关闭 open assignment |
asset.transferred |
资产调拨成功后 | asset_card |
assetId, assetNo, fromEmployeeId, toEmployeeId, fromLocation, toLocation, transferredAt, status |
ERP、IM、AI | 可只改位置,不一定改归属人 |
inventory_check.completed |
盘点任务完成后 | inventory_check |
inventoryCheckId, checkNo, scopeType, scopeRefId, completedAt, itemCount, summary |
ERP、IM、AI | summary 建议包含 matched / missing / extra / damaged 计数 |
3. 事件名与运行时对象映射
| entityType | 推荐事件前缀 | 当前事实源 |
|---|---|---|
purchase_request |
purchase_request.* |
P17A / P17B |
asset_card |
asset.* |
P18A / P18B |
inventory_check |
inventory_check.* |
P18B |
4. 最小 Envelope 建议
未来若继续扩展事件投递,建议统一使用如下 envelope:
{
"eventName": "purchase_request.submitted",
"eventId": "uuid",
"occurredAt": "2026-03-08T12:18:10+08:00",
"actorId": "user-id",
"entityType": "purchase_request",
"entityId": "entity-id",
"payloadVersion": 1,
"payload": {}
}
5. 兼容性规则
- 事件一旦对外承诺,名称不得随意修改。
- 新增字段必须保持向后兼容;删除字段需要单独版本升级。
- 载荷字段命名应与 HTTP camelCase 输出保持一致,不直接暴露数据库 snake_case 列名。
6. 明确不纳入当前事件主表的事项
purchase_request.archived:待未来采购归档通知专项再冻结inventory_check.started:当前不是对外关键事实源asset.repaired/asset.retired:待未来维修 / 报废专项后再定义
7. 推荐消费场景
- IM:采购审批结果、报销结果、资产领用归还、盘点完成提醒
- ERP:采购审批通过摘要、资产卡片新增摘要、盘点完成摘要
- AI:审批摘要、异常提示、主数据重复建议、盘点结果总结
8. P19+IM-1 已消费通知类型
说明:IM 一期运行时并未新增新的领域事件名,而是基于现有业务事实统一沉淀为通知类型,再通过
notification.imOutbox 异步派发。
| 通知类型 | 当前来源事实 | 默认 targetType | 默认 targetPath | 说明 |
|---|---|---|---|---|
workflow.task_assigned |
workflow 新待办 / 转审待办 | workflow_task |
/workflow/tasks/:taskId |
当前唯一待办类通知 |
reimbursement.approved |
报销审批通过 | reimbursement_form |
/reimbursements/:id |
结果通知 |
reimbursement.rejected |
报销驳回 | reimbursement_form |
/reimbursements/:id |
结果通知 |
reimbursement.returned |
报销退回 | reimbursement_form |
/reimbursements/:id |
结果通知 |
reimbursement.paid |
报销付款完成 | reimbursement_form |
/reimbursements/:id |
财务结果通知 |
leave.approved |
请假审批通过 | leave_request |
/leave-requests |
结果通知 |
leave.rejected |
请假驳回 | leave_request |
/leave-requests |
结果通知 |
purchase_request.approved |
采购审批通过 | purchase_request |
/purchase-requests |
结果通知 |
purchase_request.rejected |
采购驳回 | purchase_request |
/purchase-requests |
结果通知 |
asset.assigned |
资产领用成功 | asset_card |
/assets |
通知新领用人 |
asset.returned |
资产归还成功 | asset_card |
/assets |
通知原持有人 |
asset.transferred |
资产调拨成功 | asset_card |
/assets |
通知归属变更涉及人员 |
inventory_check.completed |
盘点完成 | inventory_check |
/inventory-checks |
通知创建人与 finance_mgr 角色 |
9. 当前仍未接入 IM 的冻结事件
purchase_request.submittedpurchase_request.withdrawninventory_check.started
这些事件名称仍保留在长期蓝图中,但不属于 P19+IM-1 的首批协同覆盖范围。