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

11 KiB

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

Enrich diagram with live org data:

python3 ../../scripts/query-org-metadata.py \
    --objects ServiceAppointment,ServiceResource,ServiceTerritory,WorkType \
    --target-org myorg

Mermaid Template (Preferred)

Left-to-right flowchart with color coding.

%%{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

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:

%%{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

%%{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

┌─────────────────────────────────────────────────────────────────────────────┐
│  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