☰
华为 MetaERP 里说的“本体建模”,不是画 E-R 图,而是用业务本体(OWL 类 + 关系 + 公理 + 规则)把库存域的“概念语义”固化下来,作为库存/成本/财务打通的知识底
2026/10/3 6:52:54 网站建设 项目流程

华为 MetaERP 里说的“本体建模”,不是画 E-R 图,而是用业务本体(OWL 类 + 关系 + 公理 + 规则)把库存域的“概念语义”固化下来,作为库存/成本/财务打通的知识底座。

你问的“本体轮建模”,我按“本体驱动建模的一轮完整闭环”来理解:

概念定义 → 关系编织 → 状态公理 → 事件联动 → 推理校验

下面用“芯片物料采购入库→生产领用→销售出库”​ 这个具体例子走一遍。


一、库存域本体分层(先定边界)

MetaERP 库存域遵循“量/值/证分离”:

层

本体归属

管什么

实物层

Inventory 本体

数量、库位、批次、序列号、状态

价值层

Cost 本体

标准价、移动加权价、成本层

凭证层

Accounting 本体

科目、分录、暂估

本体建模只定义“语义”,不写 SQL。


二、定义本体类(Class)

InventoryItem 库存实物项 Material 物料(主数据) InventoryOrg 库存组织 Subinventory 子库 Locator 货位 Lot 批次 Serial 序列号 OnHandQty 在手量 ReservedQty 预留量 InventoryTxn 库存事务 StockStatus 库存状态枚举

示例实例:

  • Material: MAT-IC-001(5G基带芯片)
  • InventoryOrg: 深圳中央仓
  • Subinventory: 原料合格区
  • Lot: L20260601
  • OnHandQty: 1000pcs

三、定义关系(Object Property)

这是“本体轮”区别于普通表模型的关键:

belongsToItem OnHandQty → Material locatedIn OnHandQty → Locator underOrg Locator → InventoryOrg hasLot OnHandQty → Lot hasStatus OnHandQty → StockStatus generatedBy InventoryTxn → BusinessDoc(采购收货单) changesQty InventoryTxn → OnHandQty reserves ReservedQty → OnHandQty costedBy OnHandQty → CostLayer postsTo InventoryTxn → AccountingEntry

关系图示意:

采购收货单 ──generatedBy──> 入库事务 入库事务 ──changesQty──> OnHandQty OnHandQty ──belongsToItem──> 基带芯片 OnHandQty ──locatedIn──> 货位A1 OnHandQty ──hasLot──> L20260601 OnHandQty ──costedBy──> 标准成本层(100元)

四、定义公理与约束(本体规则)

用类 OWL + 业务规则表达,不让脏数据进模型:

  1. 唯一性公理

    同一个(Material, InventoryOrg, Subinventory, Locator, Lot)最多存在一个OnHandQty实例

  2. 数量守恒公理

    ∀ OnHandQty: availableQty = onHandQty − reservedQty − frozenQty

  3. 状态约束

    StockStatus=冻结时,不能参与销售出库

  4. 跨域联动公理

    入库事务生成后,必须触发 Cost 本体的成本层更新,并生成暂估凭证

  5. 可追溯公理

    任意 OnHandQty 变更,必须存在至少一条InventoryTxn作为证据


五、用一个完整业务流跑一轮“本体轮”

场景:采购 1000 片芯片入库,后领用 200 片做生产

① 采购入库(PTP → 库存本体)
  • 业务动作:采购订单收货 1000pcs,单价 105 元,标准价 100 元
  • 本体变化:
    • 新建OnHandQty(芯片, 深圳仓, 原料区, A1, L20260601) = 1000
    • 新建InventoryTxn(type=接收入库)
    • costedBy挂标准成本层 100 元
    • 生成AccountingEntry:借 库存 100,000,借 PPV 5,000,贷 应付暂估 105,000
② 生产领用
  • 业务动作:车间领 200pcs
  • 本体推理:
    • changesQty扣减 OnHandQty → 800
    • 生成领用事务,关联成本层
    • 自动生成:借 生产成本 20,000,贷 原材料 20,000
    • 可用量重算:available = 800 − 0
③ 销售出库(OTC 反向取数)
  • 销售订单锁 300pcs → 生成ReservedQty=300
  • 发货后:OnHandQty 变 500,预留释放
  • 成本按本体成本层结转 COGS,不再回查采购单
④ 反向追溯(本体优势)

财务问“这 200 片成本怎么来的”

→ 从生产成本凭证反查领用事务→ 反查OnHandQty实例→ 反查入库事务→ 反查采购订单+发票

全链路靠本体关系回溯,不用拼 SQL。


六、本体建模 vs 传统表建模对照

维度

传统 INV 表模型

MetaERP 本体建模

物料+库位

MTL_ONHAND_QUANTITIES_DETAIL行记录

OnHandQty类 + 关系网

出入库

插事务表

InventoryTxn作为语义事件,驱动下游本体

可用量

视图算出来

公理推导availableQty

跨域打通

ETL 跑批

本体关系直接挂 Cost/GL

AI 使用

大模型易幻觉

盘古基于本体约束推理


七、给你一个可抄的建模模板(库存模块)

# 类 Class: OnHandQty dataProperty: quantity, uom, updateTime objectProperty: belongsToItem, locatedIn, hasLot, costedBy # 规则(DSL伪代码) rule AvailableQty: onHandQty.available = onHandQty.qty - sum(reservedQty) - sum(frozenQty) where onHandQty.hasStatus != "报废" rule TxnMustHaveSource: InventoryTxn ⊑ ∃ generatedBy.BusinessDoc rule InvToCostSync: InventoryTxn(type=入库) → createOrUpdate CostLayer

八、实操建议(落地时别踩坑)

  1. 先建“库存本体”再写微服务,Inventory 服务只消费本体实例
  2. 实物量归 Inventory 域,别把单价塞进 OnHandQty 表里
  3. 批次/序列号做成独立类,方便溯源(芯片、设备类必做)
  4. 状态机(合格/冻结/待检/报废)用枚举类+公理约束,别用字符串字段
  5. 所有扣减必须走InventoryTxn,禁止直接 UPDATE 数量

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询