# Salesforce / CM / BI Canonical Matrix

Date: `2026-07-07`

## 用法

这份文档是
`快速读版`
。

如果要：

- 2 分钟内看懂
  `Salesforce 还在做什么`
- 知道
  `CM 已经接住了什么`
- 区分
  `当前差异到底是 parity 还是 runtime`
- 迅速定位
  `先打哪张报表`

优先看这份。

如果要直接转发给团队看一页中文结论，
再看：

- [salesforce-cm-bi-team-brief-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-team-brief-2026-07-07.md)

如果要按
`单张报表`
详细读，
再看：

- [salesforce-cm-bi-report-trace-cards-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-report-trace-cards-2026-07-07.md)

如果要直接判断
`这张报表现在该停在 parity，还是已经该升 runtime`
，
再看：

- [salesforce-cm-bi-frontdoor-escalation-ladder-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-frontdoor-escalation-ladder-2026-07-07.md)

如果要先看
`这张报表背后的主模型地图`
，
再看：

- [salesforce-cm-bi-report-lineage-index-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-report-lineage-index-2026-07-07.md)

如果要先看
`哪些才算 CM 真能力边界`
，
再看：

- [salesforce-cm-bi-capability-boundary-map-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-capability-boundary-map-2026-07-07.md)

如果要只看
`可以单列成 runtime issue 的 shortlist`
，
再看：

- [salesforce-cm-bi-runtime-boundary-shortlist-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-runtime-boundary-shortlist-2026-07-07.md)

如果要直接看
`这条到底算不算 CM 真 gap`
，
再看：

- [salesforce-cm-bi-verdict-register-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-verdict-register-2026-07-07.md)

如果要按
`对象`
来读，
再看：

- [salesforce-cm-bi-object-matrix-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-object-matrix-2026-07-07.md)

如果要按
`机制`
来读，
再看：

- [salesforce-cm-bi-mechanism-matrix-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-mechanism-matrix-2026-07-07.md)

如果要按
`字段`
来读，
再看：

- [salesforce-cm-bi-field-matrix-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-field-matrix-2026-07-07.md)

如果要开票，
再看：

- [salesforce-cm-bi-issue-backlog-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-issue-backlog-2026-07-07.md)

如果要看完整证据链，
再看：

- [salesforce-cm-bi-final-conclusion-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-final-conclusion-2026-07-07.md)

## 总原则

| 读法 | 当前最稳结论 |
|---|---|
| 报告里的 `gap` 是不是都等于 `CM 没能力` | `不是` |
| 当前最常见的差异类型 | `L2 pack parity`、`activation-state mismatch`、`semantic mismatch` |
| 什么最接近 `CM 真未支持` | 仍只活在 live Salesforce `Apex trigger / runtime` 的残余逻辑 |
| 默认第一修复层 | 先补 `PingCAP L2 pack parity`，不要直接升级成 runtime 题 |

## 真边界入口

如果当前讨论的核心是：

- `这条到底能不能直接说成 CM 做不到`
- `是不是该开 runtime issue`

优先去看：

- [salesforce-cm-bi-capability-boundary-map-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-capability-boundary-map-2026-07-07.md)

那份文档会把
`L2 parity / semantic mismatch / intentional replacement`
和
`runtime boundary`
硬拆开，
避免把整份报告误读成
`CM 无能力清单`
。

## Canonical Matrix

| 报表面 | Salesforce 现网主要在做什么 | CM 目前已支持什么 | CM 当前主要差异 | 差异类型 | 最先该看什么 |
|---|---|---|---|---|---|
| `1733...` `pipeline data quality / cleanup monitor` | 维护 `Opportunity` stage / forecast / close-date / launch-date / owner-team；维护 `Quote` service-window / nonstandard-term / cleanup 语义 | `Std_OpportunityStageDerivedFields`、`Opportunity_Cloud_Order_Type_Set`、`Opportunity_Close_Date_Auto_Set` 已在；Quote 字段、公式、validation substrate 已在 | `Quote_update_nonstandard_conditions_checkbox`、`_2`、`OpportunityShareToPersalesOwner` / `OpportunityUpdateShareToPerSalOwner` 缺失；部分 validation 仍 inactive | `L2 exact-flow parity` + `activation-state mismatch`；后续才是 `OpportunityTrigger` / `QuoteTrigger` | 先修 `Opportunity/Quote` parity，不先开 runtime |
| `8c6f...` `campaign attribution / contact-opportunity touch` | 维护 `CampaignMember.first_responded_date`、response / involvement、lead-contact convert 后 relink、contact/opportunity attribution | `Lead/Contact first-last campaign` Flow 已在；`convertLead` attribution preview 已在 | `Campaign_Member_Key_Message_Update` 缺失；Contact live Flow peer 未见本地 peer | `L2 CampaignMember parity`；后续才是 `Trigger_CampaignMember` / Contact trigger | 先修 `Campaign_Member_Key_Message_Update` |
| `fd12...` `lead funnel / ICP path` | 维护 `lead_mql_timestamp`、`lead_iqm_timestamp`、status/lifecycle 时间戳、lead-account stitching、campaign path | `IQM_Completion_Flow`、`Lead_Status_Duration`、`Std_ConvertLeadCampaignPreview` 已在 | `Lead_StatusChangeTimestamp` 仍只是近似承接；Lead 长尾 assignment / reminder / notification parity 未清；`Campaign_Member_Key_Message_Update` 也会次级影响这里 | `semantic mismatch` + `L2 Lead lifecycle parity`；后续才是 `LeadTrigger` / `LeadAITrigger` | 先把 lifecycle timestamp 语义收窄 |
| `583...` `account + current/monthly order MRRARR composite` | 维护 account shared-key、tenant bridge、`account_current_order_type`、`order_product_family`、current-month ARR/MRR | `Org_Set_Account`、`Order_Default_RevRec_Entity`、`Cloud_Registration_Source_from_Org_to_Order` 已在 | `Account_Current_Order_Type`、`Order_Org_Auto_Set_Account_*`、`Order_Set_PLG_BD_Pool` 缺失；`Account_Partner_Sales_Owner_Set` 当前更适合作为 `#3707` 的次级回归项 | `L2 Account/Order parity`；后续才是 `AccountTrigger` / `OrderTrigger` / line-item trigger | 先修 shared-key + order carry-over |
| `837...` `ARR summary + regional/company forecast` | 维护 ARR/forecast、current-month order finance、revrec helper、`order_product_family` | `Order_Default_RevRec_Entity`、`Order` 对 `Revenue__c` 的 rollup、custom line-item 公式/rollup 已在 | `Order_Org_Auto_Set_Account_*`、`Order_Set_PLG_BD_Pool`、`RevRec_Set_PLG_BD_Pool` 缺失；`Revenue__c.Name` / line-item `Name` 仍未补 | `L2 finance carry-over + revrec parity`；后续才是 `OrderTrigger` / `RevenueTrigger` / custom line-item trigger | 先修 carry-over 和 revrec helper，不先碰 auto-number |
| `f9c4...` `activated-order / monthly revrec by account+tenant` | 维护 activated-order、monthly revrec、tenant/account bridge、collections helper、marketplace / org-to-collection bridge | `Invoice_Collection__c` helper 字段已在；`Order` 侧 collections rollup 已在；order finance snapshot substrate 已在，而且这轮 label-backed SQL 已直接打 `dws_salesforce_activated_order_account_basic_info_v3` / `dws_salesforce_activated_order_account_monthly_revrec_v3` | `Collection_Set_PLG_BD_Pool`、`Collection_Amount_and_Payable_Amount_exc_tax` / `_Update`、`Cloud_Registration_Source_from_Org_to_Collections` 缺失；同组 `Order_*` / `RevRec_*` 也会打这里 | `L2 Order/IC/Revenue carry-over parity`；后续才是 `OrderTrigger` / `RevenueTrigger` / line-item trigger | 先修 collections helper / marketplace bridge；collections helper 字段本身仍更多靠 `salesforce_order_daily_view` / `salesforce_org_monthly_revrec` 这组 direct-query surface 坐实 |
| `690...` `PLG signup / billing-capable cloud funnel` | 通过 tenant/account bridge 把 cloud signup、billing-capable user、tenant identity 串起来；当前 strongest front-door 还是 `tenant_*` + funnel metric | `Account_ID__c` auto-number、`Org_Set_Account`、`dws_cloud_tenants_basicinfo` 这条 substrate 已在 | account-side missing names 仍会回流污染这里，但这张当前更稳地读成 `583...` current-order-type 主票和 `673.../212...` owner/governance 主票清理后的 dependent consumer；order-side carry-over 也会回流污染这里 | `dependent consumer` + tenant-bridge 邻近漂移；后续才是 `AccountTrigger` | 不要先按 Lead 排，也不要先把它单开成 account 主票 |
| `673... / 212...` `account + forecast surfaces` | 维护 `account_number`、`fy26_icp`、`fy26_segmentation`、account/tenant/forecast snapshot、owner / sales-team 邻近治理语义 | `Account_ID__c` auto-number、`Org_Set_Account`、`salesforce_accounts` / `dim_org` / `dim_tenant` 链路已在 | `Account_Contract_Valid_Message`、`Account_Partner_Sales_Owner_Set` 缺失；`Account_Current_Order_Type` 当前不再作为这组 front-door 的主实现范围 | `L2 Account dimension / governance parity`；后续才是 `AccountTrigger` | 先修 owner / governance parity，再看 tenant bridge 邻近漂移 |

## 共享机制主票建议

| 共享机制 | 建议主票 | 次级回归面 |
|---|---|---|
| `Lead_StatusChangeTimestamp` | `fd12...` | `salesforce_leads -> dim_lead / dws_lead_timeline / dws_icp_summary` |
| `Campaign_Member_Key_Message_Update` | `8c6f...` | `fd12...` |
| `Account_Current_Order_Type` | `583...` | `690...`、次级 `f9c4...` |
| `Account_Partner_Sales_Owner_Set` | `673... / 212...` | `583...` |
| `Order_Org_Auto_Set_Account_*` | `583...` | `837...`、`f9c4...`、`690...` |
| `Order_Set_PLG_BD_Pool` | `837...` | `583...`、`f9c4...` |
| `RevRec_Set_PLG_BD_Pool` | `837...` | `f9c4...` |
| `Collection_*` + `Cloud_Registration_Source_from_Org_to_Collections` | `f9c4...` | `salesforce_order_daily_view` / `salesforce_org_monthly_revrec` / `690...` 邻近面 |
| `Account_Contract_Valid_Message` | `673... / 212...` | `690...` |

## 推荐顺序

1. `1733...`
2. `8c6f...`
3. `fd12...`
4. `583...`
5. `837...`
6. `f9c4...`
7. `673... / 212...`
8. `690...`
   仅在 `583...` 与 `673... / 212...` 清理后仍有残差时再单开

## 一句话收口

`当前最值得先做的，不是证明 CM 完全没能力，而是把已经有 substrate 的 L2 parity 缺口按 front-door 报表面补齐；真正只剩 trigger/runtime 的部分，再单列成 CM 真边界。`
