# Consent Data Model Template Pre-built data model for Salesforce Consent Management (GDPR/Privacy) using `flowchart LR` format with color coding and relationship indicators. ## Objects Included | Object | Type | Description | |--------|------|-------------| | Individual | STD | Privacy identity | | Contact | STD | Contact record | | Lead | STD | Lead record | | ContactPointEmail | STD | Email contact points | | ContactPointPhone | STD | Phone contact points | | ContactPointAddress | STD | Address contact points | | DataUsePurpose | STD | Purpose definitions | | ContactPointConsent | STD | Consent per contact point | | CommSubscription | STD | Communication subscriptions | | CommSubscriptionConsent | STD | Subscription consent | --- ## Query Org Metadata (Recommended) Enrich diagram with live org data: ```bash python3 ../../scripts/query-org-metadata.py \ --objects Individual,ContactPointEmail,ContactPointPhone,DataUsePurpose,ContactPointConsent \ --target-org myorg ``` --- ## Mermaid Template (Preferred) Left-to-right flowchart with color coding. ```mermaid %%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%% flowchart LR %% ═══════════════════════════════════════════════════════════════ %% CONSENT DATA MODEL (GDPR/PRIVACY) %% LEGEND: LK = Lookup (-->), MD = Master-Detail (==>) %% Colors: Blue = Standard, Orange = Custom, Green = External %% ═══════════════════════════════════════════════════════════════ %% Party Objects Individual["Individual
(count)"] Contact["Contact
(count)"] Lead["Lead
(count)"] %% Contact Points CPEmail["ContactPointEmail
(count)"] CPPhone["ContactPointPhone
(count)"] CPAddress["ContactPointAddress
(count)"] %% Consent Objects DataUsePurpose["DataUsePurpose
(count)"] CPConsent["ContactPointConsent
(count)"] %% Subscriptions CommSub["CommSubscription
(count)"] CommSubConsent["CommSubscriptionConsent
(count)"] %% Individual Links Individual -->|"LK"| Contact Individual -->|"LK"| Lead %% Contact Points to Party Individual ==>|"MD"| CPEmail Individual ==>|"MD"| CPPhone Individual ==>|"MD"| CPAddress %% Consent CPEmail -->|"LK"| CPConsent CPPhone -->|"LK"| CPConsent DataUsePurpose -->|"LK"| CPConsent %% Subscriptions CommSub ==>|"MD"| CommSubConsent Contact -->|"LK"| CommSubConsent %% Standard Objects - Sky Blue style Individual fill:#bae6fd,stroke:#0369a1,color:#1f2937 style Contact fill:#bae6fd,stroke:#0369a1,color:#1f2937 style Lead fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CPEmail fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CPPhone fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CPAddress fill:#bae6fd,stroke:#0369a1,color:#1f2937 style DataUsePurpose fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CPConsent fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CommSub fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CommSubConsent fill:#bae6fd,stroke:#0369a1,color:#1f2937 ``` --- ## Key Concepts ### Individual Object - **Privacy identity** that links to Contact/Lead/User - Required for consent tracking - Can be auto-created when Contact/Lead created - Stores global privacy preferences ### Contact Points | Object | Purpose | |--------|---------| | ContactPointEmail | Email addresses | | ContactPointPhone | Phone numbers | | ContactPointAddress | Physical addresses | | ContactPointSocialHandle | Social media IDs | Each contact point links to an Individual. ### Consent Model ```text DataUsePurpose → ContactPointConsent ← ContactPoint (e.g., Marketing) (Opt-In/Out) (Email/Phone) ``` ### Consent Values | Value | Meaning | |-------|---------| | **OptIn** | Consent given | | **OptOut** | Consent withdrawn | | **Seen** | Notice displayed | | **NotSeen** | Notice not yet shown | --- ## Simplified Version (Core Objects Only) For presentations focusing on core consent flow: ```mermaid %%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%% flowchart LR Individual["Individual"] CPEmail["ContactPointEmail"] DataUsePurpose["DataUsePurpose"] CPConsent["ContactPointConsent"] Individual ==>|"MD"| CPEmail CPEmail -->|"LK"| CPConsent DataUsePurpose -->|"LK"| CPConsent style Individual fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CPEmail fill:#bae6fd,stroke:#0369a1,color:#1f2937 style DataUsePurpose fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CPConsent fill:#bae6fd,stroke:#0369a1,color:#1f2937 ``` --- ## Communication Subscriptions Model For email preference centers: ```mermaid %%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%% flowchart LR Contact["Contact"] CommSub["CommSubscription
(Newsletter)"] CommSubConsent["CommSubscriptionConsent"] CommChannel["CommSubscriptionChannel"] CommSub ==>|"MD"| CommSubConsent Contact -->|"LK"| CommSubConsent CommSub ==>|"MD"| CommChannel style Contact fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CommSub fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CommSubConsent fill:#bae6fd,stroke:#0369a1,color:#1f2937 style CommChannel fill:#bae6fd,stroke:#0369a1,color:#1f2937 ``` --- ## ASCII Fallback ```text ┌─────────────────────────────────────────────────────────────────────────────┐ │ CONSENT DATA MODEL (GDPR/PRIVACY) (L→R) │ │ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │ └─────────────────────────────────────────────────────────────────────────────┘ ┌──────────────┐ │ INDIVIDUAL │─────── LK ──────┬──────────────────────────────────┐ │ (count) │ │ │ └──────┬───────┘ ▼ ▼ │ ┌──────────────┐ ┌──────────────┐ │ │ CONTACT │ │ LEAD │ │ │ (count) │ │ (count) │ │ └──────────────┘ └──────────────┘ │ ├═══ MD ═══>┌────────────────────┐ │ │ CONTACT_POINT_EMAIL│─── LK ──>┌────────────────────┐ │ │ (count) │ │CONTACT_POINT_ │ │ └────────────────────┘ │ CONSENT │ │ │ (count) │ ├═══ MD ═══>┌────────────────────┐ └─────────┬──────────┘ │ │ CONTACT_POINT_PHONE│─── LK ───────────>│ │ │ (count) │ │ │ └────────────────────┘ │ │ │ LK └═══ MD ═══>┌────────────────────┐ │ │CONTACT_POINT_ADDR │ ┌────────┴───────────┐ │ (count) │ │ DATA_USE_PURPOSE │ └────────────────────┘ │ (count) │ └────────────────────┘ ``` --- ## Key Relationships Summary | Parent | Child | Type | Behavior | |--------|-------|------|----------| | Individual | Contact | LK | Privacy identity | | Individual | Lead | LK | Privacy identity | | Individual | ContactPointEmail | MD | Cascade delete | | Individual | ContactPointPhone | MD | Cascade delete | | Individual | ContactPointAddress | MD | Cascade delete | | ContactPointEmail | ContactPointConsent | LK | Email consent | | ContactPointPhone | ContactPointConsent | LK | Phone consent | | DataUsePurpose | ContactPointConsent | LK | Purpose reference | | CommSubscription | CommSubscriptionConsent | MD | Cascade delete | | Contact | CommSubscriptionConsent | LK | Subscriber | --- ## GDPR Compliance Considerations | Right | Implementation | |-------|----------------| | **Right to Access** | Query Individual + Contact Points | | **Right to Rectification** | Update Contact Points | | **Right to Erasure** | Delete Individual (cascades) | | **Right to Restrict** | Set ConsentCaptureSource | | **Right to Object** | ContactPointConsent = OptOut | --- ## Limits & Considerations | Limit | Value | |-------|-------| | Contact Points per Individual | Unlimited | | Data Use Purposes | Unlimited | | Consent records | LDV consideration | | Audit trail retention | Configurable | --- ## 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