# Forecasting Data Model Template
Pre-built data model for Salesforce Collaborative Forecasts using `flowchart LR` format with color coding and relationship indicators.
## Objects Included
| Object | Type | Description |
|--------|------|-------------|
| ForecastingType | STD | Forecast configuration |
| ForecastingItem | STD | Individual forecasts |
| ForecastingQuota | STD | User quotas |
| ForecastingAdjustment | STD | Manager adjustments |
| Opportunity | STD | Source opportunities |
| OpportunitySplit | STD | Revenue splits |
| User | STD | Forecast owners |
---
## Query Org Metadata (Recommended)
Enrich diagram with live org data:
```bash
python3 ../../scripts/query-org-metadata.py \
--objects ForecastingItem,ForecastingQuota,Opportunity,OpportunitySplit \
--target-org myorg
```
---
## Mermaid Template (Preferred)
Left-to-right flowchart with color coding.
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
%% ═══════════════════════════════════════════════════════════════
%% COLLABORATIVE FORECASTS DATA MODEL
%% LEGEND: LK = Lookup (-->), MD = Master-Detail (==>)
%% Colors: Blue = Standard, Orange = Custom, Green = External
%% ═══════════════════════════════════════════════════════════════
%% Forecast Configuration
FType["ForecastingType
(count)"]
%% Forecast Data
FItem["ForecastingItem
(count)"]
FQuota["ForecastingQuota
(count)"]
FAdjust["ForecastingAdjustment
(count)"]
%% Source Objects
Opportunity["Opportunity
(count)"]
OppSplit["OpportunitySplit
(count)"]
%% Users
User["User
(count)"]
%% Period
Period["Period
(count)"]
%% Forecast Type Configuration
FType -->|"LK"| FItem
FType -->|"LK"| FQuota
%% Forecast Items
User -->|"LK"| FItem
Period -->|"LK"| FItem
Opportunity -->|"LK"| FItem
%% Quotas
User -->|"LK"| FQuota
Period -->|"LK"| FQuota
%% Adjustments
FItem -->|"LK"| FAdjust
User -->|"adjusts"| FAdjust
%% Opportunity Splits
Opportunity ==>|"MD"| OppSplit
User -->|"LK"| OppSplit
%% Standard Objects - Sky Blue
style FType fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FQuota fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FAdjust fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Opportunity fill:#bae6fd,stroke:#0369a1,color:#1f2937
style OppSplit fill:#bae6fd,stroke:#0369a1,color:#1f2937
style User fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Period fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## Key Concepts
### Forecasting Types
| Type | Source Field | Description |
|------|--------------|-------------|
| **Opportunity Revenue** | Amount | Standard opportunity forecasting |
| **Opportunity Quantity** | Quantity | Unit-based forecasting |
| **Product Family** | Product2.Family | By product category |
| **Opportunity Splits** | Split Amount | Team selling |
| **Custom Measure** | Custom field | Custom currency/number |
### Forecast Categories
| Category | Stage Mapping |
|----------|---------------|
| Pipeline | Early stages |
| Best Case | High probability |
| Commit | Committed deals |
| Closed | Won deals |
| Omitted | Excluded from forecast |
### Forecast Rollup Hierarchy
```
CEO
└── VP Sales
├── Regional Manager 1
│ ├── Sales Rep A
│ └── Sales Rep B
└── Regional Manager 2
└── Sales Rep C
```
Forecasts roll up through **Role Hierarchy** or **Forecast Hierarchy**.
---
## Simplified Version (Core Objects Only)
For presentations focusing on core forecast flow:
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
User["User"]
Opportunity["Opportunity"]
FItem["ForecastingItem"]
FQuota["ForecastingQuota"]
User -->|"owns"| Opportunity
Opportunity -->|"contributes"| FItem
User -->|"has"| FQuota
User -->|"owns"| FItem
style User fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Opportunity fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FQuota fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## Opportunity Splits Model
For team selling with revenue splits:
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
Opportunity["Opportunity
($100K)"]
Split1["OpportunitySplit
(Rep A: 60%)"]
Split2["OpportunitySplit
(Rep B: 40%)"]
FItem1["ForecastingItem
(Rep A: $60K)"]
FItem2["ForecastingItem
(Rep B: $40K)"]
Opportunity ==>|"MD"| Split1
Opportunity ==>|"MD"| Split2
Split1 -->|"contributes"| FItem1
Split2 -->|"contributes"| FItem2
style Opportunity fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Split1 fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Split2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FItem1 fill:#bae6fd,stroke:#0369a1,color:#1f2937
style FItem2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## ASCII Fallback
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ COLLABORATIVE FORECASTS DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────────────┐
│ FORECASTING_TYPE │─────── LK ──────┬──────────────────────────────────┐
│ (count) │ │ │
└──────────────────┘ ▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ FORECASTING_ITEM │ │FORECASTING_QUOTA │
│ (count) │ │ (count) │
└────────┬─────────┘ └────────┬─────────┘
│ │
│ LK │ LK
▼ ▼
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ OPPORTUNITY │── LK ──>│ │ │ USER │
│ (count) │ │ │<──── LK ─────│ (count) │
└──────┬───────┘ └──────────────────┘ └──────────────────┘
│
│ MD
▼
┌──────────────────┐
│ OPPORTUNITY_SPLIT│
│ (count) │
└──────────────────┘
```
---
## Key Relationships Summary
| Parent | Child | Type | Behavior |
|--------|-------|------|----------|
| ForecastingType | ForecastingItem | LK | Type configuration |
| ForecastingType | ForecastingQuota | LK | Type configuration |
| User | ForecastingItem | LK | Forecast owner |
| User | ForecastingQuota | LK | Quota owner |
| Period | ForecastingItem | LK | Time period |
| Period | ForecastingQuota | LK | Time period |
| Opportunity | ForecastingItem | LK | Source opportunity |
| Opportunity | OpportunitySplit | MD | Cascade delete |
| User | OpportunitySplit | LK | Split owner |
---
## Limits & Considerations
| Limit | Value |
|-------|-------|
| Forecasting types | 4 (standard) + 4 (custom) |
| Forecast hierarchy levels | Role hierarchy depth |
| Splits per opportunity | Unlimited |
| Quota periods | Fiscal periods |
| Adjustment history | 12 months |
---
## Forecast Hierarchy vs Role Hierarchy
| Option | Use Case |
|--------|----------|
| **Role Hierarchy** | Forecasts follow org chart |
| **Forecast Hierarchy** | Custom forecast rollup path |
| **Territory Hierarchy** | Territory-based forecasting |
---
## 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