# Email Notification Strategy - Quick Reference ## 🎯 **9 Email Scenarios (Priority Order)** ### **✅ CRITICAL (Always Send if Admin Enabled)** 1. **TAT Breached (100%)** → Approver + Management 2. **Request Rejected** → Initiator ### **✅ HIGH PRIORITY (Check Preferences)** 3. **Request Created** → Initiator 4. **Approval Request** → Approver (action required) 5. **Request Approved** → Initiator 6. **TAT Reminder (75%)** → Approver 7. **Workflow Resumed** → Approver + Initiator ### **✅ MEDIUM PRIORITY (Check Preferences)** 8. **TAT Reminder (50%)** → Approver ### **✅ LOW PRIORITY (Check Preferences)** 9. **Request Closed** → All Participants --- ## 🔐 **Preference Control Flow** ### **Before Sending ANY Email:** ```typescript import { shouldSendEmail, EmailNotificationType } from '@/emailtemplates/emailPreferences.helper'; // Check preferences const canSendEmail = await shouldSendEmail( userId, EmailNotificationType.APPROVAL_REQUEST ); if (!canSendEmail) { logger.info(`Email skipped for user ${userId} due to preferences`); return; // Don't send email } // Proceed with email await emailService.sendEmail(...); ``` ### **Preference Logic:** ``` Admin Enabled? ──NO──> ❌ Stop (Don't send) │ YES │ ▼ User Enabled? ──NO──> ❌ Stop (Don't send) │ YES │ ▼ ✅ Send Email ``` ### **Critical Email Override:** ```typescript // For CRITICAL emails (Rejection, TAT Breach) const canSend = await shouldSendEmailWithOverride( userId, EmailNotificationType.REQUEST_REJECTED ); // This checks admin only, ignores user preference ``` --- ## 📊 **TAT Email Schedule (3 Reminders)** | TAT Progress | Template | Priority | Subject | When | |--------------|----------|----------|---------|------| | **50%** | TATReminder | Medium | TAT Reminder - Early Warning | Half TAT elapsed | | **75%** | TATReminder | High | TAT Reminder - Action Needed | 3/4 TAT elapsed | | **100%** | TATBreached | Critical | TAT BREACHED - Urgent | Deadline passed | ### **TAT Reminder Template Customization:** ```typescript // 50% Reminder await emailNotificationService.sendTATReminder( workflow, approver, { threshold: 50, timeRemaining: '12 hours', urgency: 'early-warning' } ); // 75% Reminder await emailNotificationService.sendTATReminder( workflow, approver, { threshold: 75, timeRemaining: '6 hours', urgency: 'urgent' } ); // 100% Breach await emailNotificationService.sendTATBreached( workflow, approver, { timeOverdue: '2 hours overdue', notifyManagement: true } ); ``` --- ## 🚫 **Never Send Email For:** ### **In-App Only (Real-Time Collaboration):** | Notification Type | Why In-App Only | Frequency | |-------------------|-----------------|-----------| | @Mentions | Real-time chat | High (50-200/day) | | Comments | Active discussion | High (100-300/day) | | Documents Added | Minor update | Medium (20-50/day) | | Status Changes | Internal updates | Medium (30-80/day) | | AI Generated | Background process | Low (10-20/day) | | Summary Generated | Automatic | Low (10-20/day) | **Reason:** These would flood inboxes and cause email fatigue! --- ## 💾 **Important: Activity Logs** ### **ALWAYS Capture Activities:** ```typescript // Even if email/notification disabled, ALWAYS log activity await activityService.log({ requestId, type: 'approval', user: { userId, name }, timestamp: new Date().toISOString(), action: 'Request approved', details: 'Approved by John Doe' }); // This is independent of email/notification preferences // Activity logs are for audit trail and compliance ``` **Activities Logged Regardless of Preferences:** - ✅ Request created - ✅ Assignments - ✅ Approvals - ✅ Rejections - ✅ TAT events (50%, 75%, 100%) - ✅ Pauses/Resumes - ✅ Comments - ✅ Documents - ✅ Status changes --- ## 🔧 **Implementation Checklist** ### **Before Starting:** - [ ] Create `emailPreferences.helper.ts` ✅ Done - [ ] Add system config entries for email controls - [ ] Update user preferences schema - [ ] Test preference checking logic ### **For Each Email Type:** 1. [ ] Check admin preference 2. [ ] Check user preference 3. [ ] Send email only if both enabled 4. [ ] Log activity regardless 5. [ ] Handle errors gracefully 6. [ ] Track metrics (sent/failed/skipped) ### **Critical Emails (Special Handling):** - [ ] Request Rejected - Override user preference - [ ] TAT Breached - Override user preference - [ ] Still respect admin disable --- ## 📋 **User Preference UI (Frontend)** ### **Admin Settings Page:** ``` Email Notifications (Global Control) ├── [✓] Enable Email Notifications │ ├── Request Lifecycle │ ├── [✓] Request Created │ ├── [✓] Approval Requests │ ├── [✓] Request Approved │ └── [✓] Request Rejected (Critical - Recommended) │ ├── TAT Alerts │ ├── [✓] TAT 50% Reminder │ ├── [✓] TAT 75% Reminder │ └── [✓] TAT Breached (Critical - Recommended) │ └── Workflow Control ├── [✓] Workflow Resumed └── [✓] Request Closed ``` ### **User Preferences Page:** ``` My Email Preferences ├── [✓] Receive Email Notifications │ ├── Request Updates │ ├── [✓] When my request is created │ ├── [✓] When assigned to approve │ ├── [✓] When my request is approved │ ├── [⚠] When my request is rejected (Cannot disable - Critical) │ ├── TAT Alerts │ ├── [✓] TAT 50% reminder │ ├── [✓] TAT 75% reminder │ └── [⚠] TAT breached (Cannot disable - Critical) │ └── Other ├── [✓] Workflow resumed └── [ ] Request closed (Optional) ``` **Note:** Critical emails cannot be disabled by users! --- ## 📊 **Email Volume with Preferences** ### **Without Preferences (All Emails):** - ~75-205 emails/day ### **With Smart Defaults:** - Users who want all: ~75-205 emails/day - Users who opt for critical only: ~10-20 emails/day - Average user: ~30-50 emails/day ### **Email Savings:** - @Mentions: 50-200/day saved ✅ - Comments: 100-300/day saved ✅ - Documents: 20-50/day saved ✅ - Status changes: 30-80/day saved ✅ **Total saved: 200-630 potential emails/day!** --- ## ✅ **Summary** ### **Email Strategy:** 1. ✅ **9 email scenarios** (high-impact only) 2. ✅ **TAT reminders at 50%, 75%, 100%** 3. ✅ **Admin-level control** (can disable globally) 4. ✅ **User-level control** (individual preferences) 5. ✅ **Critical override** (rejection, breach always sent) 6. ✅ **Activity logs** always captured 7. ✅ **In-app only** for collaboration (@mentions, comments) ### **Implementation Order:** 1. Phase 0: Preference system ← **START HERE** 2. Phase 1: Email service 3. Phase 2: Critical emails (rejection, breach) 4. Phase 3: High priority emails 5. Phase 4: Medium/low priority emails 6. Phase 5: User preference UI --- **Ready to implement Phase 0 (Preference System)?** 🚀