afv-library/skills/external-diagram-mermaid-generate/assets/datamodel/scheduler-erd.md

277 lines
11 KiB
Markdown
Raw Normal View History

# Salesforce Scheduler Data Model Template
Pre-built data model for Salesforce Scheduler (Lightning Scheduler) using `flowchart LR` format with color coding and relationship indicators.
## Objects Included
| Object | Type | Description |
|--------|------|-------------|
| ServiceAppointment | STD | Scheduled appointments |
| ServiceResource | STD | People/equipment |
| ServiceTerritory | STD | Service locations |
| ServiceTerritoryMember | STD | Resource assignments |
| WorkType | STD | Service types |
| WorkTypeGroup | STD | Grouped work types |
| AssignedResource | STD | Appointment assignments |
| ResourceAbsence | STD | Time off/unavailability |
| TimeSlot | STD | Available time slots |
---
## Query Org Metadata (Recommended)
Enrich diagram with live org data:
```bash
python3 ../../scripts/query-org-metadata.py \
--objects ServiceAppointment,ServiceResource,ServiceTerritory,WorkType \
--target-org myorg
```
---
## Mermaid Template (Preferred)
Left-to-right flowchart with color coding.
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
%% ═══════════════════════════════════════════════════════════════
%% SALESFORCE SCHEDULER DATA MODEL
%% LEGEND: LK = Lookup (-->), MD = Master-Detail (==>)
%% Colors: Blue = Standard, Orange = Custom, Green = External
%% ═══════════════════════════════════════════════════════════════
%% Core Scheduling Objects
SA["ServiceAppointment<br/>(count)"]
SR["ServiceResource<br/>(count)"]
ST["ServiceTerritory<br/>(count)"]
%% Resource Assignments
STM["ServiceTerritoryMember<br/>(count)"]
AR["AssignedResource<br/>(count)"]
%% Work Types
WT["WorkType<br/>(count)"]
WTG["WorkTypeGroup<br/>(count)"]
WTGM["WorkTypeGroupMember<br/>(count)"]
%% Availability
RA["ResourceAbsence<br/>(count)"]
TS["TimeSlot<br/>(count)"]
%% Related Objects
Account["Account<br/>(count)"]
Contact["Contact<br/>(count)"]
User["User<br/>(count)"]
%% Service Appointment
Account -->|"LK"| SA
Contact -->|"LK"| SA
ST -->|"LK"| SA
WT -->|"LK"| SA
%% Resource Structure
User -->|"LK"| SR
SR ==>|"MD"| STM
ST -->|"LK"| STM
%% Appointment Assignment
SA ==>|"MD"| AR
SR -->|"LK"| AR
%% Work Type Groups
WTG ==>|"MD"| WTGM
WT -->|"LK"| WTGM
%% Availability
SR ==>|"MD"| RA
%% Operating Hours
ST -->|"LK"| TS
%% Standard Objects - Sky Blue
style SA fill:#bae6fd,stroke:#0369a1,color:#1f2937
style SR fill:#bae6fd,stroke:#0369a1,color:#1f2937
style ST fill:#bae6fd,stroke:#0369a1,color:#1f2937
style STM fill:#bae6fd,stroke:#0369a1,color:#1f2937
style AR fill:#bae6fd,stroke:#0369a1,color:#1f2937
style WT fill:#bae6fd,stroke:#0369a1,color:#1f2937
style WTG fill:#bae6fd,stroke:#0369a1,color:#1f2937
style WTGM fill:#bae6fd,stroke:#0369a1,color:#1f2937
style RA fill:#bae6fd,stroke:#0369a1,color:#1f2937
style TS fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
style Contact fill:#bae6fd,stroke:#0369a1,color:#1f2937
style User fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## Key Concepts
### Scheduling Flow
```text
Customer (Contact) → WorkType → ServiceAppointment ← ServiceResource
ServiceTerritory
```
### Resource Availability
| Object | Purpose |
|--------|---------|
| OperatingHours | Business hours definition |
| TimeSlot | Available booking slots |
| ResourceAbsence | Time off, breaks |
| ServiceTerritoryMember | Territory assignment + hours |
### ServiceResource Types
| Type | Description |
|------|-------------|
| Technician | Field service worker |
| Dispatcher | Scheduling coordinator |
| Crew | Group of resources |
| Asset | Equipment, vehicles |
---
## Simplified Version (Core Objects Only)
For presentations focusing on core scheduling flow:
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
Contact["Contact"]
SA["ServiceAppointment"]
SR["ServiceResource"]
ST["ServiceTerritory"]
Contact -->|"LK"| SA
ST -->|"LK"| SA
SA ==>|"MD assigned"| SR
style Contact fill:#bae6fd,stroke:#0369a1,color:#1f2937
style SA fill:#bae6fd,stroke:#0369a1,color:#1f2937
style SR fill:#bae6fd,stroke:#0369a1,color:#1f2937
style ST fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## Territory & Resource Model
```mermaid
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
ST["ServiceTerritory"]
SR["ServiceResource"]
STM["ServiceTerritoryMember"]
OpHrs["OperatingHours"]
ST ==>|"MD"| STM
SR -->|"LK"| STM
ST -->|"LK"| OpHrs
style ST fill:#bae6fd,stroke:#0369a1,color:#1f2937
style SR fill:#bae6fd,stroke:#0369a1,color:#1f2937
style STM fill:#bae6fd,stroke:#0369a1,color:#1f2937
style OpHrs fill:#bae6fd,stroke:#0369a1,color:#1f2937
```
---
## ASCII Fallback
```text
┌─────────────────────────────────────────────────────────────────────────────┐
│ SALESFORCE SCHEDULER DATA MODEL (L→R) │
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────────┐ ┌──────────────────────┐
│ ACCOUNT │──────────── LK ─────────────>│ SERVICE_APPOINTMENT │
│ (count) │ │ (count) │
└──────────────┘ └──────────┬───────────┘
┌──────────────┐ │ MD
│ CONTACT │──────────── LK ─────────────────────────┤
│ (count) │ ▼
└──────────────┘ ┌──────────────────────┐
│ ASSIGNED_RESOURCE │
┌──────────────┐ │ (count) │
│ WORK_TYPE │──────────── LK ──────────────│ │
│ (count) │ └──────────┬───────────┘
└──────────────┘ │ LK
┌───────────────────┐ ┌────────────────────────────────────────┐
│ SERVICE_TERRITORY │═══ MD ═>│ SERVICE_TERRITORY_MEMBER │
│ (count) │ │ (count) │
└───────────────────┘ └────────────────────┬───────────────────┘
│ │ LK
│ LK ▼
└───────────────────────────────>┌──────────────────────┐
│ SERVICE_RESOURCE │
│ (count) │
└──────────┬───────────┘
│ MD
┌──────────────────────┐
│ RESOURCE_ABSENCE │
│ (count) │
└──────────────────────┘
```
---
## Key Relationships Summary
| Parent | Child | Type | Behavior |
|--------|-------|------|----------|
| ServiceTerritory | ServiceTerritoryMember | MD | Cascade delete |
| ServiceResource | ServiceTerritoryMember | LK | Resource reference |
| ServiceAppointment | AssignedResource | MD | Cascade delete |
| ServiceResource | AssignedResource | LK | Resource reference |
| ServiceResource | ResourceAbsence | MD | Cascade delete |
| WorkTypeGroup | WorkTypeGroupMember | MD | Cascade delete |
| WorkType | WorkTypeGroupMember | LK | Work type reference |
| Account | ServiceAppointment | LK | Customer |
| Contact | ServiceAppointment | LK | Contact person |
| ServiceTerritory | ServiceAppointment | LK | Service location |
| WorkType | ServiceAppointment | LK | Appointment type |
---
## Limits & Considerations
| Limit | Value |
|-------|-------|
| Resources per territory | Unlimited |
| Territories per resource | Unlimited |
| Appointments per day | Performance consideration |
| Operating hours slots | 24 per day max |
| Time slot duration | Configurable (minutes) |
---
## Scheduler vs Field Service
| Feature | Scheduler | Field Service |
|---------|-----------|---------------|
| Focus | Appointments | Work orders |
| Optimization | Basic | Advanced (FSL) |
| Gantt | No | Yes |
| Dispatch | Manual | Automated |
| Mobile | Standard app | FSL Mobile |
---
## 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