File

apps/recallassess/recallassess-api/src/api/shared/email/config/email-best-practices.config.ts

Index

Properties

Properties

aggregation
aggregation: boolean
Type : boolean
aggregationThreshold
aggregationThreshold: number
Type : number
batching
batching: boolean
Type : boolean
daily
daily: number
Type : number
digestEnabled
digestEnabled: boolean
Type : boolean
digestTime
digestTime: string
Type : string
hourly
hourly: number
Type : number
monthly
monthly: number
Type : number
weekly
weekly: number
Type : number
export interface ParticipantEmailLimits {
  daily: number; // Max emails per day
  weekly: number; // Max emails per week
  monthly: number; // Max emails per month
  hourly: number; // Max emails per hour
  batching: boolean; // Enable batching of related emails
  aggregation: boolean; // Enable aggregation (participants don't need this)
  quietHours?: {
    start: number; // Hour (0-23)
    end: number; // Hour (0-23)
  };
  weekendPolicy: 'send_all' | 'skip_non_critical' | 'skip_all';
}

export interface AdminEmailLimits {
  daily: number; // Max emails per day (aggregated)
  weekly: number; // Max emails per week
  monthly: number; // Max emails per month
  hourly: number; // Max emails per hour
  batching: boolean; // Enable batching
  aggregation: boolean; // Enable aggregation for admin emails
  aggregationThreshold: number; // Aggregate if participant count > threshold
  digestEnabled: boolean; // Enable daily digest
  digestTime: string; // Digest send time (HH:mm format)
}

export interface EmailBestPractices {
  participant: ParticipantEmailLimits;
  admin: AdminEmailLimits;
}

/**
 * Best Practices Configuration
 * 
 * Based on user comfort levels:
 * - Participants: 1-2 emails per day (comfortable)
 * - Admins: 3-5 emails per day (aggregated)
 */
export const EMAIL_BEST_PRACTICES: EmailBestPractices = {
  participant: {
    daily: 2, // Max 2 emails per day (comfortable limit)
    weekly: 10, // Max 10 emails per week
    monthly: 30, // Max 30 emails per month
    hourly: 1, // Max 1 email per hour
    batching: true, // Enable batching of related emails
    aggregation: false, // Participants don't need aggregation
    quietHours: {
      start: 22, // 10 PM
      end: 7, // 7 AM
    },
    weekendPolicy: 'skip_non_critical', // Skip non-critical emails on weekends
  },
  admin: {
    daily: 5, // Max 5 emails per day (aggregated)
    weekly: 25, // Max 25 emails per week
    monthly: 80, // Max 80 emails per month
    hourly: 2, // Max 2 emails per hour
    batching: false, // Admins don't need batching (they get aggregated)
    aggregation: true, // Enable aggregation for admin emails
    aggregationThreshold: 3, // Aggregate if >3 participants
    digestEnabled: true, // Enable daily digest
    digestTime: '09:00', // 9 AM daily digest
  },
};

/**
 * Absolute Maximum Limits (Safety Caps)
 * These are hard limits that cannot be exceeded even with overrides.
 */
export const ABSOLUTE_MAX_LIMITS: EmailBestPractices = {
  participant: {
    daily: 5, // Never exceed 5 per day
    weekly: 20, // Never exceed 20 per week
    monthly: 60, // Never exceed 60 per month
    hourly: 2, // Never exceed 2 per hour
    batching: true,
    aggregation: false,
    quietHours: {
      start: 22,
      end: 7,
    },
    weekendPolicy: 'skip_non_critical',
  },
  admin: {
    daily: 10, // Never exceed 10 per day
    weekly: 50, // Never exceed 50 per week
    monthly: 200, // Never exceed 200 per month
    hourly: 5, // Never exceed 5 per hour
    batching: false,
    aggregation: true,
    aggregationThreshold: 3,
    digestEnabled: true,
    digestTime: '09:00',
  },
};

results matching ""

    No results matching ""