California Data Breach Notification Deadline Calculator
ANA›Life Services Authority›National Calculator Authority›California Data Breach Notification Deadline Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
California Data Breach Notification Deadline Calculator
Calculate key notification deadlines under California Civil Code §§ 1798.29 and 1798.82. California requires notification to affected residents in the "most expedient time possible and without unreasonable delay," with a hard cap of 45 days for certain breaches involving government agencies. This tool calculates the 45-day statutory deadline, the 30-day AG notification threshold trigger, and recommended best-practice milestones.
Date Breach Was Discovered
The date your organization became aware of the breach.
Entity Type
Private Business / Person State Agency / Government Entity
Government agencies have a strict 45-day hard deadline; private entities must notify "without unreasonable delay."
Estimated Number of Affected California Residents
If more than 500 residents are affected, you must also notify the California Attorney General.
Law Enforcement Delay Requested?
No Yes – Law Enforcement Has Requested Delay
Notification may be delayed if a law enforcement agency determines it would impede a criminal investigation.
If Yes, Law Enforcement Delay Duration (Days)
Enter the number of days law enforcement has requested the delay. Leave 0 if not applicable.
Calculate Deadlines
function calCalculate() { const discoveryVal = document.getElementById('cal-discovery-date').value; const entityType = document.getElementById('cal-entity-type').value; const affectedCount = parseInt(document.getElementById('cal-affected-count').value) || 0; const lawEnforcement = document.getElementById('cal-law-enforcement').value; const lawEnforcementDays = parseInt(document.getElementById('cal-law-enforcement-days').value) || 0; const resultDiv = document.getElementById('cal-result');
// --- Input Validation --- if (!discoveryVal) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Please enter the date the breach was discovered.'; return; }
const discoveryDate = new Date(discoveryVal + 'T00:00:00'); const today = new Date(); today.setHours(0, 0, 0, 0);
if (isNaN(discoveryDate.getTime())) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Invalid discovery date. Please enter a valid date.'; return; }
if (discoveryDate > today) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Discovery date cannot be in the future.'; return; }
if (affectedCount ⚠ Number of affected residents cannot be negative.'; return; }
if (lawEnforcement === 'yes' && lawEnforcementDays ⚠ Law enforcement delay days cannot be negative.'; return; }
if (lawEnforcement === 'yes' && lawEnforcementDays > 365) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Law enforcement delay exceeds 365 days. Please verify this value.'; return; }
// --- Core Calculations ---
// Helper: add calendar days to a date function addDays(date, days) { const result = new Date(date); result.setDate(result.getDate() + days); return result; }
// Helper: format date as readable string function formatDate(date) { return date.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); }
// Helper: days elapsed since discovery function daysBetween(d1, d2) { return Math.floor((d2 - d1) / (1000 * 60 * 60 * 24)); }
const daysElapsed = daysBetween(discoveryDate, today);
- // Effective start date accounts for law enforcement delay
- const effectiveStartDate = lawEnforcement === 'yes' && lawEnforcementDays > 0
- ? addDays(discoveryDate, lawEnforcementDays)
- discoveryDate;
// --- Deadline 1: 45-Day Hard Deadline (Government Agencies) --- // Cal. Civ. Code § 1798.29(a): state agencies must notify within 45 days const hardDeadline45 = addDays(effectiveStartDate, 45); const daysUntil45 = daysBetween(today, hardDeadline45);
// --- Deadline 2: Best Practice 30-Day Notification Target (Private Entities) --- // Industry standard / FTC guidance: 30 days is considered "without unreasonable delay" const bestPractice30 = addDays(effectiveStartDate, 30); const daysUntil30 = daysBetween(today, bestPractice30);
// --- Deadline 3: 15-Day Internal Milestone (Investigation & Scope Confirmation) --- const internalMilestone15 = addDays(discoveryDate, 15); const daysUntil15 = daysBetween(today, internalMilestone15);
// --- AG Notification Threshold --- // Cal. Civ. Code § 1798.82(f): if breach affects more than 500 CA residents, // notify the CA AG at the same time as affected individuals const agNotificationRequired = affectedCount > 500;
// --- Status Flags --- const is45Overdue = daysUntil45 '; html += ''; html += 'Milestone'; html += 'Deadline Date'; html += 'Status'; html += '';
// Row 1: Internal Investigation Milestone (Day 15) html += ''; html += 'Internal Scope ConfirmationRecommended by Day 15 from discovery'; html += '' + formatDate(internalMilestone15) + ''; html += '' + urgencyLabel(daysUntil15, is15Overdue) + ''; html += '';
// Row 2: 30-Day Best Practice / Private Entity Target if (entityType === 'private') { html += ''; html += 'Resident Notification Deadline30-day best practice (Cal. Civ. Code § 1798.82 – "without unreasonable delay")'; html += '' + formatDate(bestPractice30) + ''; html += '' + urgencyLabel(daysUntil30, is30Overdue) + ''; html += ''; }
// Row 3: 45-Day Hard Deadline (Government Agencies) if (entityType === 'agency') { html += ''; html += 'Statutory Hard Deadline (45 Days)Cal. Civ. Code § 1798.29(a) – Government agencies'; html += '' + formatDate(hardDeadline45) + ''; html += '' + urgencyLabel(daysUntil45, is45Overdue) + ''; html += ''; }
// Row 4: AG Notification (concurrent with resident notification) if (agNotificationRequired) { const agDeadline = entityType === 'agency' ? hardDeadline45 : bestPractice30; const agDaysUntil = entityType === 'agency' ? daysUntil45 : daysUntil30; const agOverdue = entityType === 'agency' ? is45Overdue : is30Overdue; html += ''; html += 'CA Attorney General NotificationRequired (>500 residents affected) – Cal. Civ. Code § 1798.82(f). Must occur simultaneously with resident notification.'; html += '' + formatDate(agDeadline) + ''; html += '' + urgencyLabel(agDaysUntil, agOverdue) + ''; html += ''; }
html += '';
// --- Summary Panel --- html += ''; html += '📊 Summary'; html += '- Breach discovered: ' + formatDate(discoveryDate) + ''; html += '- Days elapsed since discovery: ' + daysElapsed + ' day(s)'; html += '- Entity type: ' + (entityType === 'agency' ? 'Government / State Agency' : 'Private Business or Person') + ''; html += '- Estimated affected CA residents: ' + affectedCount.toLocaleString() + '';
if (lawEnforcement === 'yes' && lawEnforcementDays > 0) { html += '- Law enforcement delay applied: ' + lawEnforcementDays + ' day(s) (effective start: ' + formatDate(effectiveStartDate) + ')'; }
if (agNotificationRequired) { html += '⚠ Attorney General notification required (>500 residents affected)'; } else if (affectedCount > 0) { html += '- AG notification: Not required (≤500 residents affected)'; }
html += '';
// --- Overdue Warning --- const primaryOverdue = entityType === 'agency' ? is45Overdue : is30Overdue; if (primaryOverdue) { html += ''; html += '🚨 DEADLINE EXCEEDED: The primary notification deadline has passed. Consult legal counsel immediately. Late notification may result in civil penalties and regulatory action by the California Attorney General.'; html += ''; }
resultDiv.style.display = 'block'; resultDiv.innerHTML = html; }
#### Formula & Calculation Logic
Effective Start Date = Discovery Date + Law Enforcement Delay Days (if applicable)
Internal Milestone = Discovery Date + 15 days (recommended scope confirmation)
Private Entity Notification Deadline = Effective Start Date + 30 days (best practice for "without unreasonable delay" under Cal. Civ. Code § 1798.82)
Government Agency Hard Deadline = Effective Start Date + 45 days (Cal. Civ. Code § 1798.29(a))
AG Notification Deadline = Same as resident notification deadline, triggered when affected residents > 500 (Cal. Civ. Code § 1798.82(f))
Days Remaining = Deadline Date − Today's Date
#### Assumptions & References
- Cal. Civ. Code § 1798.82: Requires private businesses to notify California residents of a breach of unencrypted personal information "in the most expedient time possible and without unreasonable delay." The 30-day figure is a widely accepted industry benchmark for "without unreasonable delay."
- Cal. Civ. Code § 1798.29: Applies to state agencies and imposes a strict 45-calendar-day hard deadline from discovery.
- Cal. Civ. Code § 1798.82(f): If a breach affects more than 500 California residents, the business must submit a sample copy of the notification to the California Attorney General simultaneously with notifying affected individuals.
- Law Enforcement Delay: Under § 1798.82(c), notification may be delayed if a law enforcement agency determines that notification would impede a criminal investigation. The delay lasts only as long as necessary.
- Covered Personal Information: Includes Social Security numbers, driver's license numbers, financial account numbers, medical information, health insurance information, login credentials, and biometric data.
- Substitute Notice: Allowed when the cost of direct notification exceeds $250,000, more than 500,000 residents are affected, or the business lacks sufficient contact information.
More Calculators
- SEER to EER Conversion Calculator — Efficiency Rating Comparison
- Furnace Efficiency Calculator — AFUE to Annual Fuel Cost
- HVAC Filter MERV Rating Selector and Airflow Restriction Estimator
- Static Pressure Drop Calculator for Duct Systems
- HVAC Equipment Rebate Savings Calculator
- HVAC Equipment Sizing Calculator — Manual J Load Estimate
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...