“资产本体建模”往下接,把盘点当成本体上的一次“账实快照比对 + 图推理闭环”,而不是 Excel 对账。
核心思路:
盘点 = 对某个时点
Asset的财务视图(账)、实物视图(物)、责任视图(卡)做三图交集,差异自动归因到关系边。
一、盘点场景在本体里新增哪些类/边
在原有Asset / AssetBook / CostCenter / AssetTransaction基础上,扩展盘点域:
新类(Class) | 含义 |
|---|---|
| 一次盘点任务(如2026年度全盘、CC-101抽盘) |
| 单资产盘点行(账面引用 + 实盘结果) |
| 扫码/RFID实盘事件(谁扫的、何时、GPS/工位) |
| 差异节点(盘亏/盘盈/信息不符/状态异常) |
| 保管责任人(人节点,不是部门字段) |
新增语义边:
StocktakeTask ─contains→ StocktakeLine StocktakeLine ─refersTo→ Asset StocktakeLine ─hasScan→ PhysicalScan Asset ─keptBy→ Custodian (带 validFrom/validTo) Asset ─physicallyAt→ Location (实物位置,带时间区间) Asset ─recordedAt→ CostCenter (账面归属,带时间区间) StocktakeLine ─produces→ AssetDiff AssetDiff ─resolvedBy→ AssetTransaction (盘亏走报废/盘盈走新增)关键分叉:账面位置(recordedAt) 和实物位置(physicallyAt) 拆成两条边,传统表混在一个字段里,所以永远对不齐。
二、具体示例:还是那台 CNC-2024-008
背景快照(盘点日 2026-06-30)
- 账面:
Asset.status=CAPITALIZED,集团账净值 102.1万,账面归属CC-205 - 本体边:
recordedAt(CC-205, validFrom=2025-07-01) - 实物边:
physicallyAt(试制线工位W-07) - 保管人:
keptBy(工号E1023, 张工)
现场扫码结果
项目 | 账面本体 | 实盘扫描 |
|---|---|---|
是否存在 | 存在 | 存在 ✅ |
位置 | CC-205 | 实际在 W-07(同车间,一致) |
状态 | CAPITALIZED(在用) | 设备停机,贴“待报废”标签 |
标签 | CNC-2024-008 | 扫码读到同编码 ✅ |
附属件 | 主轴1根 | 主轴已拆走送修 |
三、本体视角下盘点怎么跑
步骤1:生成盘点任务(图查询出清单)
MATCH (t:StocktakeTask {year:2026}) MATCH (a:Asset)-[:hasBook]->(b:AssetBook {bookType:"GROUP"}) WHERE a.status IN ["CAPITALIZED","IDLE"] AND a.allocatedTo有效区间包含 2026-06-30 CREATE (t)-[:contains]->(:StocktakeLine {refAsset:a.assetCode})→ 自动带出“账上所有未报废资产”,不靠手工导 Excel。
步骤2:实盘事件写入(边版本化)
手机/PDA扫码后落本体:
PhysicalScan(scanTime=2026-06-30T09:12, by=E1023, loc=W-07) → hasScan → StocktakeLine 同时触发: physicallyAt(W-07) 续期 状态观测节点:ObservedState(IDLE_PENDING_RETIRE)步骤3:三图对齐,自动出差异节点
系统做三类图遍历比对:
比对维度 | 遍历路径 | 本例结果 |
|---|---|---|
有账有物 |
| 命中 |
位置一致 |
| 同车间,通过 |
状态一致 |
| ❌ 账在用 / 实待报废 |
附属件一致 |
| ❌ 主轴缺失 |
自动生成:
AssetDiff{ diffType: [STATUS_MISMATCH, COMPONENT_MISSING], severity: HIGH, bookNetValue: 1021000 }步骤4:差异归因(本体推理,不是人肉判断)
写几条公理:
IF STATUS_MISMATCH AND ObservedState=待报废 AND 无RETIRE事务 THEN 建议动作 = 发起Retire预审 + 减值测试 IF COMPONENT_MISSING AND hasComponent存在 THEN 检查最近Maintenance工单,若无 → 标记盘亏子件 IF 有PhysicalScan无Asset节点 THEN 生成盘盈候选 → 走Addition流程 IF 有Asset节点无PhysicalScan(超时未扫) THEN 生成盘亏候选 → 走责任追溯本例推理结果:
- 不是“盘亏整台”,是整台状态错配 + 子件盘亏
- 系统建议:①发起资产减值评估 ②主轴按备件盘亏 ③更新状态为“待报废”
步骤5:差异闭环到事务 + 会计引擎
审批通过后:
AssetTransaction(txType=RETIRE, date=2026-06-30) // 整机报废 AssetTransaction(txType=COMPONENT_WRITE_OFF) // 主轴核销 └─ generates → GlEntry(借:资产处置损益, 借:累计折旧, 贷:固定资产) └─ updates → Asset.status = RETIRED └─ closes → AssetDiff.status = RESOLVED所有动作留边,审计可回溯:
“为什么2026年这台设备净值突然掉下来” → 图上一跳就能看到 盘点差异→报废事务→凭证。
四、本体建模让盘点多出的能力(对比传统FA盘点表)
传统做法 | MetaERP本体做法 |
|---|---|
导出FA台账,Excel打勾 |
|
位置对不上靠备注 |
|
盘亏整台处理 | 可拆到 |
差异靠人写原因 | 公理推理出“建议动作+责任链” |
盘点完只改台账 | 差异节点闭环到 |
问“张工管哪些异常资产”要写SQL | 图遍历 |
五、落地四步(可直接照抄)
- 扩本体类:加
StocktakeTask / StocktakeLine / PhysicalScan / AssetDiff / Custodian - 拆双边:把“账面位置”“实物位置”“保管人”全拆成带有效期的关系边
- 写盘点公理:状态错配、子件缺失、超时未扫、有物无账 → 各映射处理事务
- 接采集端:RFID/二维码扫描事件 → 封装为
PhysicalScan事件,不直接改表,走本体事务入口
六、一句话串起来
用本体做资产盘点,就是把“账、卡、物”拆成三张可带时间边的图,扫码事件灌进来后,让系统自己遍历出差异、推理出原因、闭环到报废/新增凭证,而不是年底拿Excel对编号。