3. 决策日志定义:数据结构与元数据设计

决策日志(Decision Log)是供应链控制塔事件溯源架构中的核心记录单元,它完整捕获每一次业务决策的“谁、何时、何地、为何、如何”五要素。在跨系统集成场景下,决策日志必须同时满足审计追溯、回放重建和冲突检测三类需求。本节定义决策日志的标准化数据结构与元数据字段,确保不同系统(ERP、TMS、WMS、SCP)产生的决策事件能够统一接入控制塔。

3.1 决策日志核心数据结构

每一条决策日志记录对应一次原子决策事件。数据结构采用分层设计:元数据层(决策标识与上下文)、载荷层(决策输入与输出)、签名层(完整性校验)。

层级 字段组 说明
元数据层 决策ID、时间戳、决策者、决策上下文 唯一标识决策事件,记录决策主体与场景
载荷层 输入参数、输出结果、决策规则引用 记录决策的输入输出快照,支持回放验证
签名层 哈希值、签名算法、前序日志引用 保证日志链的防篡改与完整性
设计原则:元数据层必须独立于载荷层,即使载荷因业务版本升级而变更,元数据字段保持稳定,确保跨系统解析兼容。

3.2 元数据字段详细设计

元数据是决策日志的“身份证”,以下四个字段构成元数据核心:

3.2.1 决策ID(DecisionID)

  • 格式:DCS-{系统代码}-{日期}-{序列号},例如 DCS-TMS-20250321-0047
  • 生成规则:由决策发起系统本地生成,保证全局唯一性(结合系统代码+时间戳+随机数)
  • 作用:作为日志主键,支持跨系统关联查询

3.2.2 时间戳(Timestamp)

  • 格式:ISO 8601 标准,带时区偏移,例如 2025-03-21T14:30:00+08:00
  • 精度:毫秒级(供应链高频决策场景需要)
  • 特殊要求:必须记录决策实际发生时间,而非日志写入时间;两者差异超过阈值时需额外标记

3.2.3 决策者(DecisionMaker)

  • 类型:可以是用户ID、系统服务名或自动化规则ID
  • 格式:user:{userId} / system:{serviceName} / rule:{ruleId}
  • 示例:system:inventory-optimizer-v2 表示由库存优化引擎自动决策

3.2.4 决策上下文(DecisionContext)

  • 定义:描述决策发生的业务场景与触发条件
  • 包含子字段:
    • domain:业务域(采购/库存/物流/订单)
    • triggerEvent:触发决策的原始事件类型
    • tenantId:租户/组织标识(多租户场景)
    • correlationId:关联ID,用于串联同一业务流程的多个决策
实践建议:决策上下文的 correlationId 字段是实现事件溯源中“决策链”追踪的关键——通过该字段可以重建一次完整业务决策的因果路径。

3.3 决策日志元数据关系图

下图展示元数据四个核心字段之间的逻辑关系,以及它们如何共同构成决策日志的标识层:

决策日志元数据关系图 决策日志 决策ID 时间戳 决策者 决策上下文 四个元数据字段共同构成决策日志的“身份层”,是跨系统集成时解析和路由的基础

3.4 元数据字段规范对比

不同系统对元数据字段的实现存在差异,下表列出常见系统与标准字段的映射关系:

标准字段 ERP 系统映射 TMS 系统映射 WMS 系统映射
决策ID 采购订单审批ID 运输方案选择ID 库位分配决策ID
时间戳 审批完成时间 路由计算完成时间 上架策略执行时间
决策者 审批人用户ID 路由引擎服务名 自动化规则ID
决策上下文 采购单号+供应商ID 运单号+始发地/目的地 入库单号+SKU类别
集成风险提示:当不同系统的时间戳精度不一致(如ERP使用秒级、TMS使用毫秒级)时,控制塔必须统一转换为毫秒级时间戳,否则会导致事件排序错乱,影响溯源回放的正确性。

3.5 决策日志元数据序列化示例

以下展示一条完整的决策日志元数据序列化(JSON格式),用于跨系统传输:

{
  "decisionLog": {
    "metadata": {
      "decisionId": "DCS-TMS-20250321-0047",
      "timestamp": "2025-03-21T14:30:00.123+08:00",
      "decisionMaker": "system:route-optimizer-v3",
      "decisionContext": {
        "domain": "logistics",
        "triggerEvent": "shipment.created",
        "tenantId": "tenant_asia_pacific",
        "correlationId": "CORR-20250321-8901"
      }
    },
    "payload": {
      "input": { "shipmentId": "SHP-20250321-332", "origin": "SHA", "destination": "SIN" },
      "output": { "selectedRoute": "SHA-HKG-SIN", "estimatedTransitDays": 3 },
      "ruleRef": "rule:route-selection-v2.1"
    },
    "signature": {
      "hash": "a3f2b8c9d1e4...",
      "algorithm": "SHA-256",
      "previousLogRef": "DCS-TMS-20250321-0046"
    }
  }
}

3.6 元数据设计检查清单

在将决策日志适配到不同系统时,请逐项确认以下设计要点:

  1. 唯一性:决策ID是否保证全局唯一?是否包含系统代码前缀以避免冲突?
  2. 时区处理:时间戳是否统一使用UTC+时区偏移?是否避免使用本地时间无时区标记?
  3. 决策者溯源:自动化决策是否记录了规则版本号?人工决策是否记录了操作人身份?
  4. 上下文完备性:决策上下文是否包含足够信息用于后续审计?是否包含关联ID以支持决策链追踪?
  5. 向前兼容:元数据字段是否预留扩展位(如 extensions 对象)以应对未来业务需求?
关键结论:决策日志的元数据设计是跨系统集成的基础设施——它决定了控制塔能否正确识别、排序、关联和审计来自不同供应链系统的决策事件。元数据字段的标准化程度直接影响事件溯源的回放精度和冲突检测能力。