# Salesforce / CM / BI Capability Boundary Map

Date: `2026-07-07`

## 用法

这份文档专门回答一个容易被误读的问题：

- `报告里列到的 gap，是不是都等于 CM 没能力`
- `哪些只是 PingCAP L2 parity / 语义差异 / 策略替换`
- `哪些才更接近 CM 真能力边界`
- `最先会打哪张报表`

如果只想快速判断
`这条能不能直接说成 CM 做不到`
，
优先看这份。

如果要看完整判词表，
再看：

- [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-canonical-matrix-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-canonical-matrix-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)

如果要只看
`真 runtime 边界 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)

## 快速规则

| 问题 | 当前最稳判断 |
|---|---|
| 报告里的 `gap` 能不能默认读成 `CM 没能力` | `不能` |
| 当前最多的差异是什么 | `L2 exact-flow parity`、`semantic mismatch`、`activation-state mismatch`、`intentional replacement` |
| 什么才最接近 `CM 真 gap` | parity 清完后仍只能靠 live Salesforce `Apex trigger / runtime` 才能维持的残余逻辑 |
| 默认动作 | 先补 `PingCAP L2 parity`，再把 residual runtime 单列出来 |

## A. 不应直接说成 `CM 目前做不到`

| 典型项 / 机制族 | Salesforce 现网主要在做什么 | CM 目前已支持什么 | 当前更准确的读法 | 最先影响哪张报表 | 更稳表述 |
|---|---|---|---|---|---|
| `Lead_Assignment_Rule_modification_for_NA_EMEA` | 按公司 / 区域 / 账户状态分配 lead owner / SDR | staging regression 已有通过 evidence | `已支持 / 已回归覆盖` | 间接 lead owner / SDR consumer；当前不是 BI 主轴 | `不要再叫 CM gap` |
| `Lead_StatusChangeTimestamp` | 在特定 lifecycle 语义下写 lead 时间戳 | 本地已有 `Lead_Status_Duration`、`IQM_Completion_Flow`、lead lifecycle substrate | `semantic mismatch`，不是能力空白 | `fd12...` | `CM 已有承接件，但语义需要收窄` |
| `Campaign_Member_Key_Message_Update` | 维护 response / involvement / attribution 输入 | 本地已有 `Lead/Contact Set First And Last CampaignMember` 与 `Std_ConvertLeadCampaignPreview` | `L2 exact-flow parity` | `8c6f...`，次级 `fd12...` | `CM 有 substrate，L2 还没补 exact-name Flow` |
| `Quote_update_nonstandard_conditions_checkbox` / `_2` | 维护 quote nonstandard-term / cleanup 商业语义 | Quote 字段、validation、commercial helper substrate 已在 | `L2 exact-flow parity` + `activation-state mismatch` | `1733...` | `先补 Quote parity，不先说 runtime` |
| `OpportunityShareToPersalesOwner` / `OpportunityUpdateShareToPerSalOwner` | 维护 owner-team / presales-share 邻近语义 | `Std_OpportunityStageDerivedFields`、`Opportunity_Cloud_Order_Type_Set`、`Opportunity_Close_Date_Auto_Set` 已在 | `L2 exact-flow parity` | `1733...` | `CM 已支持 Opportunity 主链，缺的是 L2 owner-team 补齐` |
| `Account_Current_Order_Type` | 维护 account current-order-type 统一口径 | `Account.Current_Order_Type__c`、`Org_Set_Account`、下游字段消费都已在 | `L2 exact-flow parity` + dispatch/accessibility risk | `583...`、`690...`、`673... / 212...` | `共享维度 parity 缺口，不是对象能力空白` |
| `Account_Partner_Sales_Owner_Set` | 维护 account owner / shared dimension 邻近语义 | account dimension substrate、`Account_ID__c`、`Org_Set_Account` 已在 | `L2 exact-flow parity` | `583...`、`673... / 212...` | `先按 account parity 处理` |
| `Order_Org_Auto_Set_Account_*` | 维护 order、org、account、tenant carry-over | `Org_Set_Account`、`Cloud_Registration_Source_from_Org_to_Order`、`Order_Default_RevRec_Entity` 已在 | `L2 finance carry-over parity` | `583...`、`837...`、`f9c4...` | `CM 有 bridge substrate，缺的是下游 carry-over 补齐` |
| `Order_Set_PLG_BD_Pool` / `RevRec_Set_PLG_BD_Pool` / `Collection_Set_PLG_BD_Pool` | 维护 finance segmentation / pool 一致性 | `Order`、`Revenue__c`、`Invoice_Collection__c` 的 pool 字段和 finance substrate 已在 | `L2 finance carry-over parity` / `L2 revrec parity` / `L2 collections parity` | `837...`、`f9c4...`、次级 `583...` | `更多是 finance chain parity，不是平台不会做` |
| `Collection_Amount_and_Payable_Amount_exc_tax` / `_Update` | 维护 collections exc-tax / payable helper | `Invoice_Collection__c` helper 字段已在，Order 侧 collections rollup 已在 | `L2 collections parity` | `f9c4...` | `helper-field parity 缺口，不是对象不存在` |
| `Cloud_Registration_Source_from_Org_to_Collections` | 把 org source / marketplace carry-over 到 collections | 本地已有 order 侧 peer flow 和 org/order substrate | `L2 finance carry-over parity` | `f9c4...`，次级 `690...` | `order peer 已在，缺的是 collections 腿` |
| `Revenue__c.Name` / `Invoice_Collection__c.Name` / custom line-item `Name` | 维护编号 identity / auto-number 连续性 | 对象、业务字段、下游模型都在 | `auto-number parity missing` | `837...`、`f9c4...`、`583...` | `这是 metadata parity，不等于 CM 不支持该对象` |
| `Order_Activate_Contract_*` / `Order_Create_Requires_Effective_CSA_MA_Contract` | 以 Salesforce 时代 `Order.ContractId` 为激活 authority | 本地已改成 `Account-level governing-contract policy` | `intentional replacement` | `salesforce_orders`、`dws_salesforce_arr_summary` | `不要按漏做读，先按策略替换读` |
| `Auto_Expire_Contract` / `Contract_Update_Account_Contract_Valid` / `Account_Contract_Valid_Message` | 维护 contract governance / account contract-valid 提示链 | contract activation stamp、account `Contract_Valid_*` 基础字段都在 | `L2 governance parity` | `673... / 212...`，次级 `690...` | `是治理链 parity，不是 contract substrate 空白` |

## B. 更接近 `CM 真能力边界`

| 典型项 / 残余面 | Salesforce 现网主要在做什么 | CM 目前已支持什么 | 为什么更接近真边界 | 最先影响哪张报表 | 当前最稳表述 |
|---|---|---|---|---|---|
| `LeadTrigger` / `LeadAITrigger` | live Apex-only lead runtime 行为 | Lead lifecycle、IQM、convert、campaign preview 这组 L2 parity 已有主体承接件 | 当 lifecycle narrowing 和长尾 parity 清完后，仍会剩 live trigger residue | `fd12...`，次级 `dws_lead_timeline` / `dws_icp_summary` | `可以接近说成 CM runtime boundary` |
| `OpportunityTrigger` / `QuoteTrigger` | live Apex-only opportunity / quote runtime 行为 | opportunity stage/forecast/close-date/cloud-order-type 与 quote substrate 已在 | `1733...` 当前仍先被 parity 打到，但 parity 清完后剩下的就是 runtime residue | `1733...`、`837...`、`0f2...` | `先补 parity，再单列 runtime issue` |
| `OrderTrigger` / `RevenueTrigger` / custom line-item trigger surfaces | live finance / revrec / line-item runtime 行为 | order/revenue/collection bridge、rollup、helper、custom line-item substrate 已在 | finance 线 exact-name carry-over 清完以后仍依赖 live trigger 的部分，才是真边界 | `837...`、`f9c4...`、次级 `583...` | `这是最值得单列的 finance runtime boundary` |
| `Trigger_CampaignMember` / residual Contact trigger surfaces | live attribution / contact stitching trigger 行为 | first/last-touch、convertLead attribution preview 已在 | 当前还要先清 `Campaign_Member_Key_Message_Update` 和 Contact peer parity，所以先只算 `candidate` | `8c6f...`，次级 `fd12...` | `谨慎叫 runtime boundary candidate` |
| `AccountTrigger` residual surfaces | live account-side trigger-only shared-dimension 行为 | account/org shared-key、`Account_ID__c`、部分 dimension substrate 已在 | `Account_Current_Order_Type`、`Account_Partner_Sales_Owner_Set` 这组 parity 清完后才能看残差是否真来自 runtime | `583...`、`690...`、`673... / 212...` | `先不要直接说 CM 做不到` |

## C. 按报表面的默认读法

| front-door 报表面 | 当前默认先读成什么 | 升级成 `CM 真边界` 的条件 |
|---|---|---|
| `1733...` `pipeline data quality / cleanup monitor` | `Opportunity/Quote L2 parity` + `activation-state mismatch` | Quote nonstandard-term 和 owner-team parity 清完后，仍稳定存在 trigger-only 漂移 |
| `8c6f...` `campaign attribution / contact-opportunity touch` | `CampaignMember parity` + `Contact stitching parity` | `Campaign_Member_Key_Message_Update` 和 contact peer parity 清完后，仍只剩 trigger residue |
| `fd12...` `lead funnel / ICP path` | `Lead semantic mismatch` + `Lead parity` | `Lead_StatusChangeTimestamp` 收窄、Lead 长尾 parity 清完后，仍只剩 `LeadTrigger / LeadAITrigger` |
| `583...` `account + current/monthly order MRRARR composite` | `Account current-order-type + Order carry-over parity` | shared-key / carry-over parity 清完后，仍稳定剩 `AccountTrigger` / `OrderTrigger` / line-item trigger drift |
| `837...` `ARR summary + regional/company forecast` | `Order carry-over + RevRec + line-item parity` | carry-over、revrec、auto-number 收敛后仍只剩 finance runtime residue |
| `f9c4...` `activated-order / monthly revrec by account+tenant` | `Order + Invoice_Collection carry-over parity` | collections helper / marketplace bridge 补齐后，仍稳定剩 finance trigger residue |
| `690...` `PLG signup / billing-capable cloud funnel` | `Account/Org shared-key parity` + `order-side contamination` | account shared-key parity 清完后，仍出现 account-side trigger-only 差异 |
| `673... / 212...` `account + forecast surfaces` | `Account dimension / governance parity` | account-governance parity 清完后，仍只剩 `AccountTrigger` residue |

## 一句话收口

`当前这批 front-door 报表里的大多数差异，都更该读成 PingCAP L2 parity / 语义差异 / 策略替换；真正更接近 CM 真能力边界的，主要还是同面 parity 清完以后残留的 Apex trigger / runtime 逻辑。`
