mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-07-30 03:09:50 +08:00
10 KiB
10 KiB
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:
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.
%%{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<br/>(count)"]
Contact["Contact<br/>(count)"]
Lead["Lead<br/>(count)"]
%% Contact Points
CPEmail["ContactPointEmail<br/>(count)"]
CPPhone["ContactPointPhone<br/>(count)"]
CPAddress["ContactPointAddress<br/>(count)"]
%% Consent Objects
DataUsePurpose["DataUsePurpose<br/>(count)"]
CPConsent["ContactPointConsent<br/>(count)"]
%% Subscriptions
CommSub["CommSubscription<br/>(count)"]
CommSubConsent["CommSubscriptionConsent<br/>(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
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:
%%{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:
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
flowchart LR
Contact["Contact"]
CommSub["CommSubscription<br/>(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
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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
- Use
flowchart LR- Left-to-right flow for readability - Keep objects simple - Name + record count only
- Replace
(count)placeholders - With actual counts from query - Add LDV indicator - For objects >2M records:
LDV[~4M] - Color code object types - Blue=Standard, Orange=Custom, Green=External