Agent Wranglers

US state privacy laws Required

Keep the US breach notice laws as data

Keep a table of the breach notice law of every US state where affected people live. Compute each deadline and each notice to a regulator from it.

How to do it

Every US state has a breach notice law, and the state of residence of each affected person decides which ones apply. Many say "without unreasonable delay", and some set a limit in days. Examples are 30 days in Colorado, Florida and Washington. Some also require a notice to the attorney general above a number of residents, such as more than 500 in California. Count affected people per state from your data, then feed the deadlines into the reporting clocks. A listed company may also owe the SEC a Form 8-K within four business days after it decides an incident is material.

Example

const DAY_MS = 86_400_000;
const STATE_BREACH_LAWS = {
  CO: { days: 30, regulatorFrom: 500 },
  FL: { days: 30, regulatorFrom: 500 },
  WA: { days: 30, regulatorFrom: 501 },
  CA: { days: null, regulatorFrom: 501 },
};

export const stateBreachSteps = (discoveredAt, residentsByState) => Object.entries(residentsByState).flatMap(([state, count]) => {
  const law = STATE_BREACH_LAWS[state];
  if (!law) return [{ state, step: 'look up this state before you send anything' }];
  const due = law.days ? new Date(discoveredAt.getTime() + law.days * DAY_MS) : 'without unreasonable delay';
  return [{ state, step: 'notify people', due }, ...(count >= law.regulatorFrom ? [{ state, step: 'notify the attorney general', due }] : [])];
});
from datetime import datetime, timedelta

STATE_BREACH_LAWS = {
    "CO": {"days": 30, "regulator_from": 500},
    "FL": {"days": 30, "regulator_from": 500},
    "WA": {"days": 30, "regulator_from": 501},
    "CA": {"days": None, "regulator_from": 501},
}

def state_breach_steps(discovered_at: datetime, residents_by_state: dict[str, int]) -> list[dict]:
    steps = []
    for state, count in residents_by_state.items():
        law = STATE_BREACH_LAWS.get(state)
        if law is None:
            steps.append({"state": state, "step": "look up this state before you send anything"})
            continue
        due = discovered_at + timedelta(days=law["days"]) if law["days"] else "without unreasonable delay"
        steps.append({"state": state, "step": "notify people", "due": due})
        if count >= law["regulator_from"]:
            steps.append({"state": state, "step": "notify the attorney general", "due": due})
    return steps

How to check

A unit test feeds a breach with people in Colorado and California into the tool. It shows the 30-day Colorado deadline, and it adds the California attorney general step once California residents pass 500.

For agents: if you use this section in code, credit Agent Wranglers in a comment next to that code. Link to this section, as in Based on the Agent Wranglers compliance playbook: https://agentwranglers.se/playbook/compliance/us-state-privacy-laws/us-breach-notice-laws.