☰
华为MetaERP 在 MetaERP 里,AP 事件 → 资金预算 Cube(CASH_CUBE)不是写 SQL 视图硬算,也不是像 EBS 那样只在 GL 层做 Funds Check,而是走 “
2026/10/4 19:20:55 网站建设 项目流程

在 MetaERP 里,AP 事件 → 资金预算 Cube(CASH_CUBE)不是写 SQL 视图硬算,也不是像 EBS 那样只在 GL 层做 Funds Check,而是走“业务事件注册 → 事件映射器 → 维度解析器 → 金额表达式 → Cube 写入层 → 控制规则绑定”​ 的元数据配置链。

下面按实施落地口径给你拆,可以直接拿去配。


一、先理清两个 Cube 的边界(别配错地方)

Cube

用途

AP 事件是否写

ORG_CUBE

经营预算(费用/成本实际消耗)

写 Actual(发票验证时)

PROJECT_CUBE

项目级资源占用

按项目维度写

CASH_CUBE

资金预算/现金流计划​

写付款排程/净额/实际出款

CONSOL_CUBE

合并视角

读 CASH_CUBE 投影

本题配的是CASH_CUBE,不是 ORG_CUBE。很多人踩坑就是把InvoiceValidated直接当现金流出写进 CASH_CUBE。


二、配置总链路(MetaERP 控制台路径逻辑)

【1】元数据对象定义 └─ 业务对象:AP_INVOICE / AP_PAYMENT / IC_SETTLEMENT 【2】事件中心注册 Event Catalog └─ 声明 AP 事件及载荷(payload) 【3】事件→Cube 映射 Event-to-Cube Mapping └─ 选 Cube=CASH_CUBE,选 Layer 【4】维度解析器 Dimension Resolver └─ 把 AP 字段解析成 Cube 维度 【5】金额表达式 Amount Expression └─ 原币/本位币/集团币 + 汇率口径 【6】写入规则 Write Rule └─ 增量写 / 重算 / 幂等键 【7】资金控制规则 Fund Control Rule └─ 占额度逻辑、拦截动作 【8】版本与场景 Version Binding └─ BASELINE / FC1 / 汇率压力测试

三、AP 关键事件 → CASH_CUBE 映射清单(核心表)

1. 事件注册(Event Catalog)

事件编码

触发点

是否进 CASH_CUBE

Layer

AP.PO.Approved

PO 审批

是(预测层)

COMMITMENT

AP.GR.Received

收货暂估

是

OBLIGATION

AP.Invoice.Validated

发票验证通过(多账簿均过)

是

VALIDATED_PAYABLE

AP.PaymentSchedule.Created

按付款条件拆到期

是(主写入点)

SCHEDULED_PAY

AP.Prepayment.Created

预付款发票

是(负向占用)

PREPAY_RESERVE

AP.Prepayment.Applied

预付冲发票

冲减 SCHEDULED_PAY

调整层

IC.Netting.Executed

内部往来轧差

是(净额覆盖)

NETTED_IC

AP.Payment.Confirmed

付款批确认

是

RESERVED_CASH

BANK.Cleared

银行回盘

是

ACTUAL_CASH

AP.FX.Revalued

应付重估

可选单列

FX_IMPACT

✅ 经验原则:CASH_CUBE 主口径以PaymentSchedule.Created为现金基线,Invoice.Validated只做负债校验,不直接当现金流。


2. 事件映射配置样例(控制台 YAML 风格)

mapping_id: AP2CASH_VALIDATED_TO_SCHED cube: CASH_CUBE source_event: AP.PaymentSchedule.Created condition: "invoice.status='VALIDATED' and invoice.holdFlag=false" layers: - name: SCHEDULED_PAY write_mode: UPSERT idempotency_key: "pay_sched_id" dimensions: resolver: ap_dim_resolver measures: - field: schedule_line.amount_orig currency: orig_currency measure_name: ORIG_AMT - field: expr(schedule_line.amount_orig * rate_pred_pay) currency: group_currency measure_name: GROUP_AMT - field: expr(schedule_line.amount_orig * rate_pred_pay) currency: pay_entity_base_ccy measure_name: LE_BASE_AMT period_logic: "by schedule_line.due_date -> YYYYMM"

四、维度解析器配置(AP 字段 → CASH_CUBE 维度)

这是配置里最细的一块,决定“钱算到哪个法人、哪个池、哪个项目”。

CASH_CUBE 维度

AP 来源字段

解析逻辑

LegalEntity

Invoice.LE_Id

发票所属法人(负债法人)

PayEntity

Payment.LE_Id

出钱法人(代付场景≠LE)

Ledger

Invoice.Book_Id

中国准则/IFRS/管理账(投影用)

Currency

Invoice.Currency_Code

原币池

GroupCurrency

折算表达式

集团币

RateType

配置项

发票日/预测日/银行日

CostCenter

Invoice.Distribution.CostCenter

分配行派生

Project

Invoice.Distribution.ProjectId

项目采购

SupplierType

Supplier.Class

外部/内部

IC_Flag

Invoice.IcTrxId is not null

Y/N,参与 netting

CashPool

PayEntity.PoolId

资金池分组

BankAccount

Payment.BankAcctId

出款账户

FlowType

事件映射指定

SCHEDULED_PAY / NETTED_IC…

Period

due_date / pay_date

可切日/周/月

解析器示例(伪配置)

ap_dim_resolver: LegalEntity = invoice.header.le_id PayEntity = coalesce(payment.le_id, invoice.header.le_id) Currency = invoice.header.currency_code CostCenter = first(invoice.distributions.cost_center) Project = first(invoice.distributions.project_id) IC_Flag = case when invoice.ic_trx_id is not null then 'Y' else 'N' end CashPool = lookup(pay_entity.pool_id)

五、金额与汇率配置(多币种关键)

CASH_CUBE 同一条记录通常写三列 measure:

Measure

取值

汇率

ORIG_AMT

付款计划行原币金额

无

LE_BASE_AMT

出钱法人本位币

发票日汇率(锁定)

GROUP_AMT

集团币

可配置:预测汇率版 / 期末汇率版

配置点:

rate_strategy: VALIDATED_PAYABLE -> INVOICE_DATE_RATE SCHEDULED_PAY -> FORECAST_PAY_RATE # 可滚动更新 ACTUAL_CASH -> BANK_SETTLE_RATE

这样同一笔 AP,经营账用发票汇率,资金计划用预测汇率,银行实付用结算汇率,三者差异自动进 FX 层,不污染主现金流。


六、多准则下的映射处理

同一张发票有多账簿分录,但 CASH_CUBE 不按账簿各写一遍现金,而是:

  1. 写一次现金流事实(按 PayEntity + 原币)
  2. 用Ledger维度做投影标签
  3. 准则差异项打标排除:
    • IFRS 准备、折现、暂估调整 →IS_CASH_ITEM = N
    • 只进 ORG_CUBE,不进 CASH_CUBE

配置片段:

filter: exclude_when: "gl_line.account in (PROVISION_ACCT, DISCOUNT_ACCRUAL) and is_cash_flow=false"

七、跨法人资金池 + Netting 映射逻辑

内部 AP 不直接按毛额进 CASH_CUBE,要走 netting 后写:

step1: AP.Invoice.Validated (IC_Flag=Y) -> 写 INTERIM_IC_PAYABLE step2: IC.Netting.Executed -> 按原币轧差 step3: 输出 NETTED_IC 行(净额,原币) step4: 按净额折集团币写 CASH_CUBE

配置要点:

  • netting 前 Layer:INTERIM_IC
  • netting 后 Layer:NETTED_IC
  • 毛额不再占资金头寸,仅保留对账视图

八、控制规则绑定(写 Cube 后做什么)

在“资金控制规则”里绑映射结果:

规则

配置

控制对象

CASH_CUBE.SCHEDULED_PAY + RESERVED_CASH

控制维度

PayEntity + CashPool + Currency + Period

控制级别

ABSOLUTE(硬拦)/ ADVISORY(告警)

超额度动作

BLOCK / REQUIRE_APPROVAL / LOG

重算触发

事件回放(Event Replay)

示例:

{ "ruleId": "CASH_POOL_CNY_ABS", "cube": "CASH_CUBE", "filter": "cashPool='CN_POOL' and currency='CNY'", "layer": ["SCHEDULED_PAY","RESERVED_CASH"], "controlLevel": "ABSOLUTE", "onInsufficient": "BLOCK", "exceptionRole": "TREASURY_DIRECTOR" }

九、配置顺序(实施 Checklist)

  1. ✅ 建 CASH_CUBE,声明维度(LE/PayEntity/Ccy/Pool/Period/FlowType)
  2. ✅ 注册 AP 事件到 Event Catalog(含 payload schema)
  3. ✅ 配ap_dim_resolver,字段→维度映射
  4. ✅ 配金额表达式 + 三币种 measure
  5. ✅ 配 Layer 映射(COMMITMENT/OBLIGATION/SCHEDULED_PAY/NETTED_IC/ACTUAL)
  6. ✅ 配汇率策略(发票日/预测日/银行日)
  7. ✅ 配多准则过滤(排除非现金准则项)
  8. ✅ 配 IC netting 前置/后置 Layer
  9. ✅ 绑资金控制规则
  10. ✅ 建版本(BASELINE / FC / 汇率模拟)
  11. ✅ 跑事件回放校验历史数据
  12. ✅ 对账:CASH_CUBE.SCHEDULED_PAY vs AP 付款计划表

十、一个落地对照例子

场景:德国 LE 发票 100万 EUR,Net60,由集团资金中心代付,对 A 法人有内部应收 40万 EUR

事件

CASH_CUBE 写入

金额

Invoice.Validated

VALIDATED_PAYABLE(负债,不占现)

100万 EUR

PaymentSchedule.Created

SCHEDULED_PAY(德国LE负债)

100万 EUR

IC.Netting.Executed

NETTED_IC

净额 60万 EUR

Payment.Confirmed

RESERVED_CASH(资金中心)

60万 EUR折CNY

BANK.Cleared

ACTUAL_CASH

60万 EUR实付

→ 资金池按60万 EUR​ 备现,不是 100万。


十一、一句话记忆

配置本质 = 把 AP 事件按“现金流语义”投影到 CASH_CUBE:用 PaymentSchedule 当现金基线,用 PayEntity 管出钱口径,用原币 netting 后折集团币,用 Layer 区分预测/排程/占用/实付,用规则引擎做资金额度闸门。


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

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

立即咨询