华为MetaERP 1什么是“本体”(以及为什么没有“本体轮”)在信息科学中,本体(Ontology)是对某个领域中“事物是什么、有什么属性、彼此什么关系、遵守什么约束”的显式、共享、形式化说明。

发布时间:2026/10/7 14:39:43
华为MetaERP 1什么是“本体”(以及为什么没有“本体轮”)在信息科学中,本体(Ontology)是对某个领域中“事物是什么、有什么属性、彼此什么关系、遵守什么约束”的显式、共享、形式化说明。 1什么是“本体”以及为什么没有“本体轮”在信息科学中本体Ontology是对某个领域中“事物是什么、有什么属性、彼此什么关系、遵守什么约束”的显式、共享、形式化说明。W3C 的 OWL 2 标准提供了类、属性、个体、基数、交集、等价与互斥等表达能力是构建本体的主流语言。术语纠偏“本体轮”多见于技术博客的个人表述如“基于本体论 AI 的 ERP 流程方案”并非计算机科学、信息科学或 Oracle 产品中的标准术语。若勉强解释只能是“本体语义模型 生命周期/循环cycle”但“轮”不是术语的一部分。本文统一使用“采购到付款本体PTP Ontology”。本体回答“意味着什么”PO 是对供应商的采购承诺Invoice 是供应商提出的付款主张Payment 清偿的是债务不是“发票图片”。PTP 流程回答“按什么顺序发生”申请→审批→下单→收货→入库→开票→匹配→付款是状态与事件的生命周期。关系模型 ≠ 本体外键能连表却不天然说明“接收事件使库存增加”“发票分配承担该事件的部分应付账款”。本体的价值把三单匹配、付款资格、责任追踪、审计解释变成机器可判断、可查询、可测试的规则。一句话示例“这张发票为什么不能付款”——本体给出的不是“状态是 Hold”而是证据链发票分配 → 匹配采购分配 → 有效接收量 70 EA → 发票计费量 80 EA → 超出容差 → 三单匹配挂起。2本体建模的九类要素PTP 语境要素含义本体表达Oracle 落点概念/类业务对象及其角色PurchaseOrder ⊂ ProcurementDocumentPO、发票、付款、库存组织、供应商属性状态与度量orderedQuantity : decimal表字段、UOM、币种关系对象间业务关联fulfills、matchesAgainst外键、分配、匹配、付款关联实例已发生的真实对象po:12345各表主键对应的行公理/规则不可违反的条件数量不等式、状态迁移校验、审批、付款资格规则事件/状态变化的历史DeliverEvent使状态变为 Deliveredrcv_transactions、SLA 事件标识符稳定主键/业务键hasNaturalKeyPO_HEADER_ID、INVOICE_NUM主数据长期复用的参照Supplier、Item供应商、地点、物料、组织、科目时间语义交易/状态/有效期validTime、transactionTimecreation_date、due_date# Turtle 片段定义“类—属性—关系”骨架 prefix ptp: https://example.org/ptp/ontology/ . prefix xsd: http://www.w3.org/2001/XMLSchema# . ptp:ProcurementDocument a owl:Class . ptp:PurchaseOrder a owl:Class ; rdfs:subClassOf ptp:ProcurementDocument . ptp:Invoice a owl:Class ; rdfs:subClassOf ptp:ProcurementDocument . ptp:Payment a owl:Class . ptp:referencesSupplier rdf:type owl:ObjectProperty ; rdfs:domain ptp:ProcurementDocument ; rdfs:range ptp:Supplier . ptp:orderedQuantity a owl:DatatypeProperty ; rdfs:range xsd:decimal . ptp:hasStatus rdfs:domain ptp:Event ; rdfs:range ptp:DocumentStatus .命名约定下文沿用ptp:本体词汇sys:Oracle 实例xsd:数据类型。EBS 表名常带_ALL后缀并按业务实体分片Fusion 虽保留相似业务对象但不可用 EBS 表名直接替代 Fusion 表名。3步骤一PR 采购申请 —— 建立“需求身份”Requester 申请人成本中心 / 费用归属→PurchaseRequisition采购申请头需求身份→RequisitionLine物料/服务、需求数量、需要日期→ReqDistribution费用账户 / 比例本体要点申请表达的是“谁、为什么、需要什么、费用由谁承担”它不是对供应商的债务承诺。因此必须建模raisedBy申请人、forCostCenter费用责任、neededByDate需要日期、sourceRequisitionLine来源关系而不能只留一个“PR 号”。本体对象/关系EBS 典型实体Fusion 落地提示PurchaseRequisition、raisedByPO_REQUISITION_HEADERS_ALL采购申请任务以业务单元为边界RequisitionLine、forItemPO_REQUISITION_LINES_ALL目录项 / 非目录项、需要日期RequisitionDistribution、费用责任PO_REQ_DISTRIBUTIONS_ALL成本中心、费用科目、项目/任务sys:pr:9001 a ptp:PurchaseRequisition ; ptp:raisedBy sys:person:U100 ; # 申请人 ptp:requestedFor sys:costcenter:CC-5100 ; # 费用责任 ptp:hasLine sys:prline:9001-1 . sys:prline:9001-1 a ptp:RequisitionLine ; ptp:intendedItem sys:item:LAPTOP-14 ; # 14寸笔记本 ptp:requestedQuantity 100.00^^xsd:decimal ; ptp:unitOfMeasure EA^^xsd:string ; ptp:neededByDate 2026-09-10^^xsd:date .规则示例RequisitionLine的需求数量必须 0费用分配比例之和必须为 100%需要日期不得早于申请日期。这些是“申请层”的约束与后续 PO 的“承诺数量”是两个不同度量。4步骤二PO 采购订单 —— 把需求承诺为供应商债务Buyer 采购员审批 / 谈判→PurchaseOrder供应商、币种、付款条款→Line / Shipment单价、发运地点、数量→PODistribution会计分配 / 责任本体要点PO 才是组织与供应商之间的承诺。它继承了 PR 的“要什么”但新增了供应商、价格、条款、发运地点与会计分配。Oracle 的匹配发生在采购发运行及其分配层一个发运行可匹配多张发票一张发票也可匹配多个发运行——因此绝不能只建“PO 号 ↔ 发票号”的一对一关系。本体关系EBS 典型实体控制含义sourceRequisitionLinePR行→PO行PO_LINES_ALL.SOURCE_REQUISITION_LINE_ID需求可追溯申请数量 vs 承诺数量hasShipment行→发运PO_LINE_LOCATIONS_ALL单价、地点、未结/接收数量hasDistribution发运→分配PO_DISTRIBUTIONS_ALL匹配的真正落点、入账科目authorizedBy审批历史 /PO_HEADERS_ALL状态未批准 PO 不可收货、不可匹配sys:po:12345 a ptp:PurchaseOrder ; ptp:referencesSupplier sys:supplier:ACME ; # 供应商 ptp:atSupplierSite sys:site:ACME-SH ; # 供应商地点策略载体 ptp:hasAgreedCurrency CNY^^xsd:string ; ptp:paymentTerms sys:term:NET30 ; ptp:approvedAt 2026-09-02T08:00:0008:00^^xsd:dateTime ; ptp:authorizedBy sys:buyer:U205 ; ptp:sourceRequisitionLine sys:prline:9001-1 . # 来源申请行 sys:poloc:12345-1-1 a ptp:Shipment ; # 发运行 ptp:belongsTo sys:po:12345 ; ptp:orderedQuantity 100.00^^xsd:decimal ; ptp:unitPrice 950.00^^xsd:decimal ; ptp:shippedTo sys:org:WH-01 ; ptp:hasDistribution sys:podist:12345-1-1-1 . sys:podist:12345-1-1-1 a ptp:PurchaseOrderDistribution ; ptp:chargeAccount sys:account:6001-5100 ; ptp:distributionRatio 100.0^^xsd:decimal .Fusion 提示供应商地点Supplier Site不是“地址”而是 PTP 交易策略的载体——付款条件、付款币种、数量/金额容差、匹配控制都挂在这里。所以匹配规则要校验PO.SupplierSite ≡ Invoice.SupplierSite而不只是“供应商名称相同”。5步骤三采购接收 —— “供应商交付了什么”Shipment 收货单承运方交付→ReceiptEvent接收数量可正可负→InspectionEvent检验 / 验收→有效接收量代数和含退货本体要点接收是事件不是一列状态。必须区分原始接收、有效接收扣减退货、已验收、可开票接收。一次收货可能部分拒收、退回供应商若直接覆盖原记录因果链与审计证据就断了。接收对象本体表达EBS 事实来源规则含义收货单ShipmentRCV_SHIPMENT_HEADERS / LINES对采购发运行负责接收事务ReceiptEventRCV_TRANSACTIONS.TRANSACTION_TYPE、数量三单匹配取可计费口径检验/验收InspectionEvent / AcceptEventRCV_TRANSACTIONS 质量结果四单匹配取已验收量退供应商ReturnToVendorEvent数量为负的接收事务有效接收量 Σ 接收 − Σ 退回sys:rcvtxn:70001 a ptp:ReceiptEvent ; # 到货 70 EA ptp:againstShipment sys:shipment:SHP100 ; ptp:matchesShipment sys:poloc:12345-1-1 ; # 关联发运行 ptp:receivedQuantity 70.00^^xsd:decimal ; ptp:transactionType ptp:Receive ; ptp:occurredAt 2026-09-20T10:15:0008:00^^xsd:dateTime . sys:rcvtxn:70002 a ptp:ReturnToVendorEvent ; # 退货 5 EA不良 ptp:reverses sys:rcvtxn:70001 ; ptp:receivedQuantity -5.00^^xsd:decimal ; ptp:reason 质量不良^^xsd:string . # 派生事实规则计算不覆盖原事件 sys:poloc:12345-1-1 ptp:netReceivedQuantity 65.00^^xsd:decimal . # 70 - 5关键区分三向匹配PO–Receipt–Invoice通常以有效接收量为上限若企业启用检验则升级为四向匹配PO–Receipt–Inspection–Invoice上限变为已验收量。Oracle 验证失败会对发票挂起Hold待解决或人工放行后才可继续验证。6步骤四接收入库 —— “企业把哪些数量放到哪里”ReceiptEvent接收→DeliveryEvent 入库子库存 / 货位→OnHandBalance可用量变化→MaterialTransaction事务类型 / 主数量本体要点“接收 ≠ 入库”。接收解决“货到了没有”入库解决“进到哪个子库存/货位、库存责任归谁”。二者必须分事件建模否则无法表达在途、检验中、拒收、跨子库存转移、以及“已收未入”或“直发Direct Delivery”。入库对象本体表达EBS 事实来源控制含义库存事务MaterialTransactionMTL_MATERIAL_TRANSACTIONS项目、组织、数量、主数量、日期、类型落点intoSubinventory、atLocator子库存/货位字段库存责任与可用量追溯键sourceRcvTransactionMTL_MATERIAL_TRANSACTIONS.RCV_TRANSACTION_ID接收↔入库的最直接证据链sys:mtltxn:55123 a ptp:DeliveryEvent ; # 入库 65 EA ptp:follows sys:rcvtxn:70001 ; ptp:sourceRcvTransaction sys:rcvtxn:70001 ; # 关键追溯键 ptp:intoSubinventory sys:sub:STORE01 ; ptp:atLocator sys:loc:A-12-03 ; ptp:deliveredQuantity 65.00^^xsd:decimal ; ptp:primaryQuantity 65.00^^xsd:decimal ; ptp:transactionType ptp:DeliverToStore . sys:onhand:STORE01-LAPTOP-14 ptp:increasedBy sys:mtltxn:55123 ; ptp:balanceQuantity 65.00^^xsd:decimal .数量四维本体必须把数量拆成 原始接收量有效接收量已验收量已开票量。只保留“接收数量”一列会在退货、容差、重复开票场景下失真。7步骤五发票与三单匹配 —— 把“付款主张”拆到分配层发票不是 PO 的附件而是供应商提出的付款主张。匹配Matching是把这一主张按数量与金额拆回具体的采购分配 / 接收事务。Invoice 发票头供应商、币种、税、总额→InvoiceLine行金额→InvoiceDistribution匹配 PO 分配 / 接收→Hold / Validated匹配结果与挂起匹配类型验证内容EBS/Fusion 事实来源本体规则两向 PO–发票供应商、币种、单价/总额、数量PO 行/发运行、发票行发票量 ≤ 采购量单价偏差在容差内三向 PO–接收–发票以上 接收数量RCV_TRANSACTIONS、有效接收量计费量 ≤ 有效接收量四向 验收以上 检验状态接收检验/验收事件计费量 ≤ 已验收量EBS 落点AP_INVOICES_ALL发票头匹配或录入生成AP_INVOICE_LINES_ALL与AP_INVOICE_DISTRIBUTIONS_ALL。后者含DIST_MATCH_TYPE匹配 PO 还是接收与RCV_TRANSACTION_ID指向接收记录——这就是三单匹配的精确落点。sys:inv:INV-2026-001 a ptp:Invoice ; ptp:referencesSupplier sys:supplier:ACME ; ptp:atSupplierSite sys:site:ACME-SH ; ptp:invoiceCurrency CNY^^xsd:string ; ptp:exchangeRate 1.0^^xsd:decimal ; ptp:netAmount 65000.00^^xsd:decimal ; # 65 EA × 1000 元含价差异例 ptp:taxAmount 3250.00^^xsd:decimal ; ptp:grossAmount 68250.00^^xsd:decimal ; ptp:validationStatus ptp:Validated . sys:invdist:501 a ptp:InvoiceDistribution ; # 发票分配匹配落点 ptp:belongsTo sys:inv:INV-2026-001 ; ptp:matchesPurchaseOrderDistribution sys:podist:12345-1-1-1 ; ptp:matchesReceiptEvent sys:rcvtxn:70001 ; # 三单匹配 ptp:billedQuantity 65.00^^xsd:decimal ; ptp:unitPrice 1000.00^^xsd:decimal ; ptp:distributionMatchType ptp:MatchToReceipt .可计算的三单匹配规则SPARQL找出“供应商/币种一致、已验证、但计费量超过有效接收量”的违规分配PREFIX ptp: https://example.org/ptp/ontology/ PREFIX xsd: http://www.w3.org/2001/XMLSchema# SELECT ?invoice ?distribution ?billedQty ?netReceivedQty ?difference WHERE { ?distribution a ptp:InvoiceDistribution ; ptp:belongsTo ?invoice ; ptp:billedQuantity ?billedQty ; ptp:matchesPurchaseOrderDistribution ?poDist ; ptp:matchesReceiptEvent ?receipt . ?invoice ptp:validationStatus ptp:Validated ; ptp:referencesSupplier ?supplier ; ptp:invoiceCurrency ?cur . ?poDist ptp:belongsTo ?po ; ptp:orderedQuantity ?orderedQty . ?po ptp:referencesSupplier ?supplier ; # 供应商必须一致 ptp:hasAgreedCurrency ?cur . # 币种必须一致 ?receipt ptp:netReceivedQuantity ?netReceivedQty . # 有效接收量含退货 FILTER (?billedQty ?netReceivedQty) # 三单匹配违规 BIND (?billedQty - ?netReceivedQty AS ?difference) }为什么必须“按分配累计”Oracle 在匹配发运行时会按该发运行上的每个采购分配生成发票分配。若只以“订单总额”做控制局部超额会被总额掩盖例如 A 分配多开、B 分配少开总额刚好付款控制即失效。8步骤六发票付款 —— 清偿的是“净债务”付款前要判断的不是“发票还没付”而是“净债务是否仍然存在且可用于支付”。发票可能分期、部分付款、存在贷项、被撤销或发生汇差“已全额付款”必须由原始金额、支付金额、贷项、折扣、汇率差异、剩余应付共同决定。Invoice应付总额 / 验证状态→PaymentSchedule到期日、剩余额、挂起→Payment / Check单次执行→InvoicePayment清偿关系 会计事件付款对象本体表达EBS/Fusion 典型字段控制措施发票应付状态payableStatusAP_INVOICES_ALL.PAYMENT_STATUS_FLAG有效、未完全支付、未取消付款计划PaymentScheduleAP_PAYMENT_SCHEDULES_ALLHOLD_FLAGY必须阻止付款单次支付PaymentAP_INVOICE_PAYMENTS_ALL、AP_CHECKS_ALL金额 0、币种可结算、付款工具合法支付后果PaymentEvent减少债务付款 SLA 会计事件保留原支付、撤销、重发关系sys:pay:88001 a ptp:Payment ; ptp:paidAmount 68250.00^^xsd:decimal ; ptp:paidAt 2026-10-01T09:30:0008:00^^xsd:dateTime ; ptp:paymentMethod ptp:BankTransfer ; ptp:dischargedInvoice sys:inv:INV-2026-001 ; # 清偿的是债务 ptp:executedVia sys:check:CHK100 . sys:inv:INV-2026-001 ptp:originalAmount 68250.00^^xsd:decimal ; ptp:creditMemoAmount 0.00^^xsd:decimal ; ptp:discountTaken 0.00^^xsd:decimal ; ptp:paidAmount 68250.00^^xsd:decimal ; ptp:remainingPayable 0.00^^xsd:decimal ; # 剩余应付 ptp:payableStatus ptp:FullyPaid .付款资格规则伪代码rule PaymentEligibility(invoice, payment): require invoice.validationStatus VALIDATED require not exists MatchingHold on invoice.distributions require for each schedule in invoice.schedules: schedule.holdFlag N # 未挂起 require invoice.remainingPayable payment.requestedAmount require payment.paymentCurrency invoice.paymentCurrency require payment.method allowed by invoice.supplierSite.paymentMethod require payment.effectiveDate within openAccountingPeriod create PaymentEvent: amount payment.requestedAmount dischargedInvoice invoice at payment.effectiveDate撤销也要建模EBS 撤销付款时会插入一条金额相反的AP_INVOICE_PAYMENTS_ALL行。本体应表达reverses关系使“已付”状态可回溯而不是把原付款行删掉。9端到端语义链一条可追溯的“事实链”完整链条是申请被转化 → 订单承诺 → 发运被分配 → 实物被接收 → 债务被主张 → 债务被清偿。每一步都是对上一步的继承、转化或限制。sys:prline:9001-1 ptp:sourcedInto sys:po:12345 . # PR 行 → PO需求转为承诺 sys:po:12345 ptp:commitsTo sys:poloc:12345-1-1 ; # PO → 发运 ptp:authorizedBy sys:buyer:U205 . sys:poloc:12345-1-1 ptp:hasDistribution sys:podist:12345-1-1-1 ; # 发运 → 会计分配 ptp:shippedTo sys:org:WH-01 . sys:podist:12345-1-1-1 ptp:receivedVia sys:rcvtxn:70001 ; # 分配 → 接收事件 ptp:matchedBy sys:invdist:501 . # 分配 ← 发票分配 sys:rcvtxn:70001 ptp:deliveredAs sys:mtltxn:55123 . # 接收 → 入库 sys:invdist:501 ptp:claimedPaymentFor sys:inv:INV-2026-001 . # 分配主张付款 sys:pay:88001 ptp:dischargedInvoice sys:inv:INV-2026-001 ; # 付款清偿债务 ptp:executedVia sys:check:CHK100 .起点 → 终点核心连接键主要控制物理映射EBSPR → POSOURCE_REQUISITION_LINE_ID申请人、物料、数量、费用归属po_requisition_lines_all→po_lines_allPO → 发运/分配PO_LINE_ID、PO_HEADER_ID价格、地点、账户、审批po_lines_all→po_line_locations_all→po_distributions_all发运 → 接收PO_LINE_LOCATION_ID、PO_DISTRIBUTION_ID接收量与退回调整rcv_shipment_lines→rcv_transactions接收 → 入库RCV_TRANSACTION_ID事务类型、库存组织、主数量mtl_material_transactions.rcv_transaction_id接收/PO → 发票PO_DISTRIBUTION_ID、RCV_TRANSACTION_ID两向/三向/四向匹配ap_invoice_distributions_all发票 → 付款INVOICE_ID、付款计划编号到期、分期、币种、挂起ap_payment_schedules_all、ap_invoice_payments_all付款 → 凭证付款事件 / 会计事件借贷、会计期、过账SLA / XLA 付款会计事件两大工程原则① 同时保存来源关系从何而来用于审计/根因与当期快照现在可用什么用于运行控制② 汇总量未结量、可用量、剩余应付由事务层维护语义层只保存计算规则与证据链。10架构本体层 vs 事务数据层以及落地路线① 主数据层供应商、地点、物料、组织、人员、账户、币种。负责身份唯一、版本与生效期。② 事务数据层事实源EBS/Fusion 关系库PO、RCV、MTL、AP 表与 SLA。负责高并发、精确余额、凭证与事务一致性。③ 本体/语义层类、关系、统一 ID、约束、推理规则OWL/SHACL/规则引擎/RDF 图。负责“为什么合规”、可追溯、可解释。④ API / 规则服务层映射、校验、查询、规则结果。三单匹配服务、付款资格服务、审计问答服务。Oracle EBS / FusionPO·RCV·MTL·AP↓CDC / 批量抽取 语义映射身份映射、关系连接、事实标准化↓语义事实库RDF / 图 / 规则缓存↓规则查询三单匹配 · 付款资格 · 审计证据推荐策略只读语义映射 规则服务。不要让 OWL/图数据库“替换”ERP 账本会破坏性能与余额一致性也不要只把表名搬进 RDF那只是换格式。规则服务只做事前拦截与异常排序不直接改原始凭证ERP 仍负责事务、余额与会计一致性。六步落地路线1 · 统一词汇表为每个类写定义、首选标签、示例、互斥关系如 Receipt ≠ Delivery。2 · EBS 字段级映射清单核验 R12 / Fusion 版本、自定义字段、视图权限记录来源表/字段/抽取时间/映射质量。3 · 选高风险场景切入三向匹配违规、退货后重复开票、分期超额、供应商地点变更、取消发票仍付款。4 · 规则测试集OWL/SHACL/规则引擎 正向/负向/边界样本尤其覆盖退货、撤销、容差边界。5 · 补偿机制规则命中 → 证据路径 差异值 建议处置误报回流规则版本与测试集。6 · AI 问答底座LLM 只做自然语言解释关键结论必须由本体查询与 ERP 事实支撑禁止“模型自创规则”。附录本体词汇 ↔ Oracle 实体速查表本体类 / 关系业务含义EBS 典型实体供参考Fusion 对应思路PurchaseRequisition采购申请PO_REQUISITION_HEADERS_ALL采购申请RequisitionRequisitionLine申请行PO_REQUISITION_LINES_ALL申请行PurchaseOrder采购订单PO_HEADERS_ALL采购订单Purchase OrderShipment采购发运/到货地点PO_LINE_LOCATIONS_ALL采购行发运Line ShipmentPurchaseOrderDistribution采购会计分配PO_DISTRIBUTIONS_ALL分配DistributionReceiptEvent接收事件RCV_TRANSACTIONS接收事务DeliveryEvent入库/交付事件MTL_MATERIAL_TRANSACTIONS库存事务Invoice应付发票AP_INVOICES_ALL发票InvoiceInvoiceDistribution发票分配匹配落点AP_INVOICE_DISTRIBUTIONS_ALL发票分配PaymentSchedule付款计划AP_PAYMENT_SCHEDULES_ALL付款计划Payment付款执行AP_INVOICE_PAYMENTS_ALL、AP_CHECKS_ALL付款PaymentmatchesReceiptEvent三单匹配关系AIDA.RCV_TRANSACTION_ID匹配到接收dischargedInvoice付款清偿债务AIP.INVOICE_ID发票付款关系五条铁律统一业务标识不用ORG_ID主键当全局 ID 映射可追溯每个连接键带来源表/字段/抽取时间 数量四视图原始量 / 有效量 / 可开票量 / 已开票量 金额六分量原额 / 税 / 折扣 / 贷项 / 已付 / 剩余应付 状态机与权限分离前者保事件合法后者答谁可执行小结本体的价值不是“再画一遍采购表”而是把 EBS/Fusion 跨模块的隐式控制变成可推理、可查询、可解释、可测试的显式规则。当有人问“这张发票为什么不能付款”系统能回答出一条带数字的证据链而不是一个 Hold 状态码。