mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-07-30 03:09:50 +08:00
344 lines
13 KiB
Markdown
344 lines
13 KiB
Markdown
# Revenue Cloud Data Model Template
|
|
|
|
Pre-built data model for Salesforce Revenue Cloud (CPQ, Billing, Subscription Management) using `flowchart LR` format with color coding and relationship indicators.
|
|
|
|
## Objects Included
|
|
|
|
| Object | Type | Description |
|
|
|--------|------|-------------|
|
|
| ProductCatalog | STD | Product catalogs |
|
|
| ProductCategory | STD | Category hierarchy |
|
|
| ProductSellingModel | STD | Selling configurations |
|
|
| ProductSellingModelOption | STD | Model options |
|
|
| PriceAdjustmentSchedule | STD | Discount schedules |
|
|
| PriceAdjustmentTier | STD | Discount tiers |
|
|
| ProductAttribute | STD | Product attributes |
|
|
| ProductAttributeSet | STD | Attribute groupings |
|
|
|
|
---
|
|
|
|
## Query Org Metadata (Recommended)
|
|
|
|
Enrich diagram with live org data:
|
|
|
|
```bash
|
|
python3 ../../scripts/query-org-metadata.py \
|
|
--objects ProductCatalog,ProductCategory,ProductSellingModel,PriceAdjustmentSchedule \
|
|
--target-org myorg
|
|
```
|
|
|
|
---
|
|
|
|
## Mermaid Template (Preferred)
|
|
|
|
Left-to-right flowchart with color coding.
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
%% ═══════════════════════════════════════════════════════════════
|
|
%% REVENUE CLOUD DATA MODEL
|
|
%% LEGEND: LK = Lookup (-->), MD = Master-Detail (==>)
|
|
%% Colors: Blue = Standard, Orange = Custom, Green = External
|
|
%% ═══════════════════════════════════════════════════════════════
|
|
|
|
%% Product Catalog
|
|
Catalog["ProductCatalog<br/>(count)"]
|
|
Category["ProductCategory<br/>(count)"]
|
|
Product2["Product2<br/>(count)"]
|
|
|
|
%% Selling Models
|
|
PSM["ProductSellingModel<br/>(count)"]
|
|
PSMO["ProductSellingModelOption<br/>(count)"]
|
|
|
|
%% Pricing
|
|
PAS["PriceAdjustmentSchedule<br/>(count)"]
|
|
PAT["PriceAdjustmentTier<br/>(count)"]
|
|
Pricebook2["Pricebook2<br/>(count)"]
|
|
PBE["PricebookEntry<br/>(count)"]
|
|
|
|
%% Attributes
|
|
AttrSet["ProductAttributeSet<br/>(count)"]
|
|
Attr["ProductAttribute<br/>(count)"]
|
|
AttrSetItem["ProductAttributeSetItem<br/>(count)"]
|
|
|
|
%% Catalog Structure
|
|
Catalog ==>|"MD"| Category
|
|
Category -.->|"Parent"| Category
|
|
Category -->|"LK"| Product2
|
|
|
|
%% Selling Models
|
|
Product2 -->|"LK"| PSM
|
|
PSM ==>|"MD"| PSMO
|
|
|
|
%% Pricing
|
|
PAS ==>|"MD"| PAT
|
|
Pricebook2 ==>|"MD"| PBE
|
|
Product2 -->|"LK"| PBE
|
|
|
|
%% Attributes
|
|
AttrSet ==>|"MD"| AttrSetItem
|
|
Attr -->|"LK"| AttrSetItem
|
|
Product2 -->|"LK"| AttrSet
|
|
|
|
%% Standard Objects - Sky Blue
|
|
style Catalog fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Category fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Product2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PSM fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PSMO fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PAS fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PAT fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Pricebook2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PBE fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style AttrSet fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Attr fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style AttrSetItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Key Concepts
|
|
|
|
### Revenue Cloud Components
|
|
| Component | Purpose |
|
|
|-----------|---------|
|
|
| **Industries CPQ** | Configure-Price-Quote |
|
|
| **Subscription Management** | Recurring billing |
|
|
| **Revenue Lifecycle** | Rev rec, forecasting |
|
|
| **Dynamic Revenue Orchestration** | Guided selling |
|
|
|
|
### Product Hierarchy
|
|
```text
|
|
ProductCatalog
|
|
└── ProductCategory (Hierarchy)
|
|
└── Product2
|
|
├── ProductSellingModel
|
|
├── ProductAttribute
|
|
└── PricebookEntry
|
|
```
|
|
|
|
### Selling Model Types
|
|
| Type | Description |
|
|
|------|-------------|
|
|
| One-Time | Single purchase |
|
|
| Subscription | Recurring billing |
|
|
| Usage-Based | Consumption pricing |
|
|
| Evergreen | Auto-renewing |
|
|
| Term | Fixed duration |
|
|
|
|
### Price Adjustment Schedules
|
|
| Schedule Type | Use Case |
|
|
|---------------|----------|
|
|
| Volume Discount | Quantity-based tiers |
|
|
| Contract Discount | Agreement discounts |
|
|
| Promotional | Time-limited offers |
|
|
| Bundled | Package pricing |
|
|
|
|
---
|
|
|
|
## Simplified Version (Core Objects Only)
|
|
|
|
For presentations focusing on core revenue structure:
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
Catalog["ProductCatalog"]
|
|
Category["ProductCategory"]
|
|
Product2["Product2"]
|
|
PSM["ProductSellingModel"]
|
|
|
|
Catalog ==>|"MD"| Category
|
|
Category -->|"LK"| Product2
|
|
Product2 -->|"LK"| PSM
|
|
|
|
style Catalog fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Category fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Product2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PSM fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Subscription Management Model
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
Account["Account"]
|
|
Quote["Quote"]
|
|
QLI["QuoteLineItem"]
|
|
Order["Order"]
|
|
OrderItem["OrderItem"]
|
|
Asset["Asset"]
|
|
BillingSchedule["BillingSchedule"]
|
|
|
|
Account -->|"LK"| Quote
|
|
Quote ==>|"MD"| QLI
|
|
Quote -.->|"converts"| Order
|
|
Order ==>|"MD"| OrderItem
|
|
OrderItem -.->|"creates"| Asset
|
|
Asset -->|"LK"| BillingSchedule
|
|
|
|
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Quote fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style QLI fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Order fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style OrderItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Asset fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style BillingSchedule fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Pricing Model Detail
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
Product2["Product2"]
|
|
Pricebook2["Pricebook2"]
|
|
PBE["PricebookEntry"]
|
|
PAS["PriceAdjustmentSchedule"]
|
|
PAT["PriceAdjustmentTier"]
|
|
|
|
Pricebook2 ==>|"MD"| PBE
|
|
Product2 -->|"LK"| PBE
|
|
PAS ==>|"MD"| PAT
|
|
Product2 -->|"LK"| PAS
|
|
|
|
style Product2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Pricebook2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PBE fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PAS fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PAT fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Industries CPQ Objects
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
Quote["Quote"]
|
|
QLI["QuoteLineItem"]
|
|
ProposalDoc["ProposalDocument"]
|
|
ProposalTerm["ProposalTerm"]
|
|
DocTemplate["DocumentTemplate"]
|
|
|
|
Quote ==>|"MD"| QLI
|
|
Quote -->|"LK"| ProposalDoc
|
|
ProposalDoc ==>|"MD"| ProposalTerm
|
|
DocTemplate -->|"LK"| ProposalDoc
|
|
|
|
style Quote fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style QLI fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style ProposalDoc fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style ProposalTerm fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style DocTemplate fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## ASCII Fallback
|
|
|
|
```text
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ REVENUE CLOUD DATA MODEL (L→R) │
|
|
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
PRODUCT CATALOG
|
|
┌──────────────────┐ ┌──────────────────┐
|
|
│ PRODUCT_CATALOG │═══ MD ═>│ PRODUCT_CATEGORY │◄──── Parent (self)
|
|
│ (count) │ │ (count) │
|
|
└──────────────────┘ └────────┬─────────┘
|
|
│ LK
|
|
▼
|
|
┌──────────────────┐
|
|
│ PRODUCT2 │
|
|
│ (count) │
|
|
└────────┬─────────┘
|
|
│
|
|
┌─────────────────┼─────────────────┐
|
|
│ LK │ LK │ LK
|
|
▼ ▼ ▼
|
|
┌──────────────────┐ ┌─────────────┐ ┌──────────────────┐
|
|
│PRODUCT_SELLING_ │ │PRICEBOOK_ │ │PRODUCT_ATTRIBUTE │
|
|
│MODEL (count) │ │ENTRY(count) │ │_SET (count) │
|
|
└────────┬─────────┘ └─────────────┘ └────────┬─────────┘
|
|
│ MD │ MD
|
|
▼ ▼
|
|
┌──────────────────┐ ┌──────────────────┐
|
|
│PRODUCT_SELLING_ │ │PRODUCT_ATTRIBUTE_│
|
|
│MODEL_OPTION │ │SET_ITEM (count) │
|
|
│ (count) │ └────────┬─────────┘
|
|
└──────────────────┘ │ LK
|
|
▼
|
|
┌──────────────────┐
|
|
│PRODUCT_ATTRIBUTE │
|
|
│ (count) │
|
|
└──────────────────┘
|
|
|
|
PRICE ADJUSTMENTS
|
|
┌────────────────────────┐ ┌──────────────────────────┐
|
|
│PRICE_ADJUSTMENT_ │═══ MD ═>│PRICE_ADJUSTMENT_TIER │
|
|
│SCHEDULE (count) │ │ (count) │
|
|
└────────────────────────┘ └──────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Key Relationships Summary
|
|
|
|
| Parent | Child | Type | Behavior |
|
|
|--------|-------|------|----------|
|
|
| ProductCatalog | ProductCategory | MD | Cascade delete |
|
|
| ProductCategory | ProductCategory | LK | Parent (hierarchy) |
|
|
| ProductCategory | Product2 | LK | Product classification |
|
|
| Product2 | ProductSellingModel | LK | Selling configuration |
|
|
| ProductSellingModel | ProductSellingModelOption | MD | Model options |
|
|
| PriceAdjustmentSchedule | PriceAdjustmentTier | MD | Discount tiers |
|
|
| Pricebook2 | PricebookEntry | MD | Product prices |
|
|
| Product2 | PricebookEntry | LK | Product reference |
|
|
| ProductAttributeSet | ProductAttributeSetItem | MD | Attribute membership |
|
|
| ProductAttribute | ProductAttributeSetItem | LK | Attribute reference |
|
|
|
|
---
|
|
|
|
## Limits & Considerations
|
|
|
|
| Limit | Value |
|
|
|-------|-------|
|
|
| Product categories depth | 10 levels |
|
|
| Products per catalog | Unlimited (LDV) |
|
|
| Selling models per product | Multiple |
|
|
| Discount tiers per schedule | Unlimited |
|
|
| Attributes per product | Unlimited |
|
|
| Pricebooks per org | Unlimited |
|
|
|
|
---
|
|
|
|
## Revenue Cloud vs Salesforce CPQ
|
|
|
|
| Feature | Revenue Cloud | Salesforce CPQ |
|
|
|---------|---------------|----------------|
|
|
| Platform | Industries | Core |
|
|
| Bundles | Dynamic | Static |
|
|
| Attributes | Dynamic | Limited |
|
|
| Selling Models | Native | Custom |
|
|
| Subscription | Native | Requires add-on |
|
|
| Target | Industry-specific | General |
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
1. **Use `flowchart LR`** - Left-to-right flow for readability
|
|
2. **Keep objects simple** - Name + record count only
|
|
3. **Replace `(count)` placeholders** - With actual counts from query
|
|
4. **Add LDV indicator** - For objects >2M records: `LDV[~4M]`
|
|
5. **Color code object types** - Blue=Standard, Orange=Custom, Green=External
|