Article 14
GDPR Article 14: when personal data is collected from a source other than the data subject, the controller must notify the data subject within a reasonable period — and at the latest within one month of obtaining the data.
Source: docs/SYSTEM_OVERVIEW.md § GDPR; the Bisnode case context in GDPR Legitimate Interest.
What we collect that triggers it
Named contacts (full_name, role, email, phone) extracted by Crawlee Scraper / Firecrawl from third-party websites — i.e. from a source other than the individual.
Tracking table
CREATE TABLE "Article14_Notifications" (
id SERIAL PRIMARY KEY,
org_nr TEXT,
email TEXT,
collected_at TIMESTAMPTZ,
notification_sent_at TIMESTAMPTZ,
status TEXT,
retry_count INTEGER DEFAULT 0
);P0 — Trigger fires at the wrong event
Warning
src/api/export.tsfires Article 14 notifications when data is exported. The legal obligation is within one month of collection (when enrichment completes). Export and collection are not the same event. The trigger needs to move toUpdate_Jobso it runs immediately after enrichment.
If a contact is collected and never exported (e.g. low score, never queried), no notification is sent — direct GDPR breach. See Known Issues.
Required move
Move the notification queue insertion from src/api/export.ts to src/queues/workers.ts Update_Job, hooked off Enrich_Job completion.
See also
GDPR Legitimate Interest, Pipeline, Known Issues, RoPA Log.