文件
hyb-oa/docs/domain-events.md
T

6.1 KiB
原始文件 Blame 文件历史

领域事件清单(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.im Outbox 异步派发。

通知类型 当前来源事实 默认 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.submitted
  • purchase_request.withdrawn
  • inventory_check.started

这些事件名称仍保留在长期蓝图中,但不属于 P19+IM-1 的首批协同覆盖范围。