# Salesforce / CM / BI Object Lens

Date: `2026-07-07`

## 用法

这份文档不是替代
`front-door report surface`
矩阵。

它的用途是：

- 当问题是
  `Lead / Account / Order 这个对象到底在干什么`
- 当需要快速区分
  `对象本身已有 substrate`
  还是
  `只是本地 parity 没补齐`
- 当需要知道
  `这个对象先会把哪张报表打歪`

优先看这份。

如果要先从报表面入手，
看：

- [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)

如果要直接看
`对象 -> 主 front-door / 次级 front-door / 证据强度`
，
看：

- [salesforce-cm-bi-object-frontdoor-impact-index-2026-07-07.md](/Users/amber/ai/nexuscrm-pingcap-pack/docs/salesforce-cm-bi-object-frontdoor-impact-index-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-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`，再收窄 residual runtime |

## Object Matrix

| 对象 | Salesforce 现网主要自动维护什么 | CM 目前已支持什么 | CM 当前未支持 / 疑似未支持什么 | 差异类型 | 最先影响哪组报表 / consumer |
|---|---|---|---|---|---|
| `Lead` | lifecycle stage、`lead_mql_timestamp`、`lead_iqm_timestamp`、status-change 时间戳、lead-account stitching、convert 后 campaign/child relink | `Lead.json` 已有 `Lead_Lifecycle_Stage__c`、`IQM_Completed_Date__c`、`ConvertedAccountId`；本地已有 `IQM_Completion_Flow`、`Lead_Status_Duration`、`Lead_Auto_Create_Org`、`BN_Lead_Relate_to_Account_by_Email_Domain_Flow`、`Std_ConvertLeadCampaignPreview` | `Lead_StatusChangeTimestamp` 仍只是近似承接；Lead 长尾 assignment / reminder / notification parity 仍未清；后续才是 `LeadTrigger` / `LeadAITrigger` 残余 | `semantic mismatch` + `L2 Lead parity`，然后才是 `runtime residue` | `fd12...`，以及 `salesforce_leads` / `dim_lead` / `dws_lead_timeline` / `dws_icp_summary` |
| `Opportunity` | `StageName -> ForecastCategory/Probability`、`Cloud_Order_Type__c`、close-date / launch-date helper、pricebook default、owner-team 邻近语义 | 本地已有 `Std_OpportunityStageDerivedFields`、`Opportunity_Cloud_Order_Type_Set`、`Opportunity_Close_Date_Auto_Set`、`Opportunity_Pricebook_Default`；`Opportunity.json` 已有 `ForecastCategory`、`ForecastCategoryName`、`Cloud_Order_Type__c`、`Launch_Date__c`、`Pricebook2Id` | `OpportunityShareToPersalesOwner` / `OpportunityUpdateShareToPerSalOwner` 当前在 `packs/Salesforce-PingCAP-L2` 与 final merged pack 里都是 `0 hits`；后续才是 `OpportunityTrigger` | `L2 exact-flow parity`，然后才是 `runtime residue` | `1733...`、`837...`，以及 `salesforce_opportunities` / `dim_opportunity` / `dws_data_quality_alerting` |
| `Quote` | service-window、nonstandard terms、submit 时 validation 生效、quote-account-opportunity 对齐 | 本地已有 `QuoteNumber`、`Service_Start_Date__c`、`Service_End_Date__c`、`Product_Family__c`、governing service-window 字段；已有 `Quote_Reset_IsConvert_On_Submit` 与 `Quote_Account_Opportunity_field` | `Quote_update_nonstandard_conditions_checkbox` / `_2` 当前在本地 pack 与 final merged pack 里 `0 hits`；另有一组 quote 邻近 validation 仍是 local inactive | `L2 Quote parity` + `activation-state mismatch` | `1733...`，次级 `salesforce_opportunities` / quote enrichment 邻近链 |
| `CampaignMember` | `first_responded_date`、response / involvement、lead-contact convert 后 relink、first/last touch | `CampaignMember.json` 已有 `HasResponded` 等标准字段；本地已有 `Lead_Set_First_And_Last_CampaignMember`、`Contact_Set_First_And_Last_CampaignMember`、`Std_ConvertLeadCampaignPreview` | `Campaign_Member_Key_Message_Update` 当前在本地 pack 与 final merged pack 里 `0 hits`；清完 parity 后才看 `Trigger_CampaignMember` | `L2 CampaignMember parity` | `8c6f...`，次级 `fd12...` 与 `dws_campaign_attribution` |
| `Account` | `Account_ID`、ICP / segmentation、current-order-type、partner-sales-owner、contract-valid health / message、account/tenant shared dimension | `Account.json` 已有 `Account_ID__c`、`Current_Order_Type__c`、`Contract_Valid_Date__c`、`Contract_Valid_Days__c`、`Contract_Valid__c`；本地已有 `Org_Set_Account` 这条邻近桥件 | `Account_Current_Order_Type`、`Account_Partner_Sales_Owner_Set`、`Account_Contract_Valid_Message` 当前在本地 pack 与 final merged pack 里 `0 hits`；后续才是 `AccountTrigger` | `L2 Account dimension parity` | `583...`、`690...`、`673... / 212...`，以及 `salesforce_accounts` / `dim_account` / `dim_tenant` |
| `Org__c` | tenant/account bridge、`Accumulate_revenue_to_Org__c`、cloud registration source 的上游 org identity | `Org__c.json` 已有 `Account__c`、`Accumulate_revenue_to_Org__c`；本地已有 `Org_Set_Account`，并已有 `Cloud_Registration_Source_from_Org_to_Order` 把 org 侧 source 带到 `Order` | 当前更缺的不是 `Org__c` 对象本身，而是 `Order_Org_Auto_Set_Account_*` 与 `Cloud_Registration_Source_from_Org_to_Collections` 这类下游 carry-over peer | `shared bridge parity` | `583...`、`690...`、`837...`、`f9c4...` |
| `Order` | `OrderNumber`、quote/payment 继承、order-org-account-tenant carry-over、cloud-registration-source、revrec entity、PLG pool、激活语义 | 本地已有 `OrderNumber`、`Accumulate_revenue_to_Org__c`、`Cloud_Registration_Source__c`、`Accumulated_Revenue_Before_Adjust__c`、`Recognized_Revenue_Amount__c`；已有 `Order_Quote_Payment_Field_Inheritance`、`Cloud_Registration_Source_from_Org_to_Order`、`Order_Default_RevRec_Entity`、`Std_OrderActivateStamp` | `Order_Org_Auto_Set_Account_Create` / `_Update`、`Order_Set_PLG_BD_Pool` 当前在本地 pack 与 final merged pack 里 `0 hits`；清完后才看 `OrderTrigger` 残余 | `L2 finance carry-over parity`，然后才是 `runtime residue` | `583...`、`837...`、`f9c4...`，以及 `salesforce_orders` / `salesforce_order_daily_view` / `cp_order_monthly_revrec` |
| `Revenue__c` | revrec 明细、`Amount_Before_Adjust`、`Credit_Amount`、exchange-rate、PLG pool、`Name` identity | `Revenue__c.json` 已有 `Amount_Before_Adjust__c`、`Credit_Amount__c`、`PLG_BD_Pool__c`、`Order_Number__c`、`Status__c` 等 revrec 字段；本地还有 `RevRec_Account` 及 order 侧 revenue rollup substrate | `RevRec_Set_PLG_BD_Pool` 当前在本地 pack 与 final merged pack 里 `0 hits`；`Revenue__c.Name` auto-number 仍未补；再往后才是 `RevenueTrigger` | `L2 revrec parity` + `auto-number parity`，然后才是 `runtime residue` | `837...`、`f9c4...`，以及 `salesforce_revrec` / `salesforce_orders.revenues` / `salesforce_org_monthly_revrec` |
| `Invoice_Collection__c` | collections helper、`CollectionsStatus`、payable / collected / exc-tax 金额、invoice status、marketplace / org-to-collection bridge、PLG pool、`Name` identity | `Invoice_Collection__c.json` 已有 `CollectionsStatus__c`、`Collections_Amount_exc_tax__c`、`Invoice_Status__c`、`PLG_BD_Pool__c`、`Payable_Amount__c`、`Uncollected_Amount__c` 等 helper 字段 | `Collection_Set_PLG_BD_Pool`、`Collection_Amount_and_Payable_Amount_exc_tax` / `_Update`、`Cloud_Registration_Source_from_Org_to_Collections` 当前在本地 pack 与 final merged pack 里 `0 hits`；`Invoice_Collection__c.Name` auto-number 也仍未补 | `L2 collections parity` + `auto-number parity` | `f9c4...`，以及 `salesforce_order_daily_view` / `salesforce_org_monthly_revrec` |
| `Contract` | `ContractNumber`、business status -> standard status、activated/effective 时间、过期与 account contract-valid 更新 | 本地已有 `ContractNumber`；`Std_ContractActivateStamp` 会同步 `StatusCode` 并写 `ActivatedDate`；`Contract_Archived_Status_Autopromote` 也已在；同时 `Account` 上已有 `Contract_Valid_*` 基础字段 | `Auto_Expire_Contract`、`Contract_Update_Account_Contract_Valid` 当前仍未在本地 pack 看到；contract trigger 仍是 residual runtime；但 `Order_Activate_Contract_*` 本身不该再默认当普通 gap，因为本地已改成 `Account-level governing-contract policy` | `intentional replacement` + `L2 contract governance parity` + residual runtime | `salesforce_orders` / `salesforce_order_daily_view` / `dws_salesforce_arr_summary`，次级 `673... / 212...` |
| `Order_Product__c` | `order_product_family`、`product_name`、`list_price_subtotal`、`manday`、`surplus`、`net_fees`、service-window | `Order_Product__c.json` 已有 `Product_Family__c`、`Product_Name__c`、`List_Price_Subtotal__c`、`Manday__c`、`Surplus__c`、`Net_fees__c` 等 line-item substrate | `Order_Product__c.Name` auto-number 仍未补；再往后是 custom line-item trigger / finance carry-over residue | `auto-number parity` + `line-item runtime residue` | `583...`、`837...`、`f9c4...`，以及 `salesforce_order_daily_view` / `cp_order_monthly_revrec` |
| `Opportunity_Product__c` | legacy opp-product product-family / service-window / net-fee 读取面，继续喂给部分 opportunity-stage / validation 逻辑 | `Opportunity_Product__c.json` 已有 `Product_Family__c`、`Product_Name__c`、`NetFees__c`、`Valid_days__c`；当前本地 active 流程里仍能看到 `Opportunity_Auto_To_Launch_Stage`、`Opportunity_Launch_Stage_Validation`、`Technical_Validation_Is_Request_Products` 直接读取 `Opportunity_Product__c` | `Opportunity_Product__c.Name` auto-number 仍未补；并且这条线更像还带着 legacy custom-object residue，不只是字段 parity | `auto-number parity` + `legacy bridge residue` | 邻近 `0f2...` 的 opportunity-stage / product-family 面，次级 `1733...` / `837...` |

## 当前最值得先盯的对象组

1. `Lead`
   因为它直接决定 `fd12...` 这条 lead funnel / ICP front door。
2. `Account + Org__c + Order`
   因为这是 `583...`、`690...`、`673...`、`837...`、`f9c4...` 共用的 shared-key / tenant-bridge 主链。
3. `Revenue__c + Invoice_Collection__c + Order_Product__c`
   因为 finance 类 front door 的 drift 往往先从 helper/carry-over/line-item 明细漏出来。
4. `CampaignMember`
   因为 attribution 面的最短板现在仍然是一个很清楚的 exact-name parity 缺口。

## 一句话收口

`对象层最常见的问题不是 CM 没有对象能力，而是对象上的关键业务语义还没在 PingCAP L2 pack 里补齐；真正更像 CM 真边界的，主要还是各对象后面剩下的 live trigger/runtime 残余。`
