Problem: "shranjujemo za vedno" ni GDPR-skladno
GDPR (Splošna uredba o varstvu podatkov) zahteva, da osebne podatke obdelujemo le toliko časa, kolikor je potrebno za namen, za katerega so bili zbrani. "Shranjujemo za vedno" je v večini primerov kršitev. Po koncu obdobja moramo podatke izbrisati ali anonimizirati.
Štirje retention modeli
Model 1: Za vedno
Edino legitimno za zakonsko obvezne hrambe: računi (10 let), pogodbe (5–10 let), HR podatki zaposlenih (5 let po prekinitvi). Pri kontaktnih obrazcih in povpraševanjih NI primeren.
Model 2: X dni / mesecev
Najpogostejši za poslovne obrazce:
- Kontaktni obrazec: 6–12 mesecev (toliko, kot traja sales cycle)
- Newsletter signup: dokler ni unsubscribe
- Ankete: 24 mesecev (analiza trendov)
- Intake (zdravstvo, svetovanje): po pravu (običajno 10 let za zdravstvo)
Po preteku obdobja avtomatski izbris (cron job).
Model 3: Anonimizacija
Imena, e-mail, telefon zbrišemo. Ohranimo strukturne podatke (kategorija povpraševanja, datum, regija). Tako lahko delamo statistiko brez identifikacije posameznika.
Model 4: Takojšen izbris
Za zelo občutljive obrazce (whistleblower, anonimna pritožba): po obdelavi (npr. 30 dni) takojšen izbris. Brez backup-ov, brez anonimizacije.
Implementacija v PHP
Tabela `submissions`
CREATE TABLE submissions (
id INT AUTO_INCREMENT PRIMARY KEY,
form_id INT,
data JSON,
name VARCHAR(255),
email VARCHAR(255),
phone VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
retention_until DATE NULL,
is_anonymized TINYINT DEFAULT 0
);
Cron za retention
// Vsak dan ob 03:00
$pdo->query("
UPDATE submissions
SET name = 'anonimizirano',
email = NULL,
phone = NULL,
data = JSON_REMOVE(data, '$.contact_info'),
is_anonymized = 1
WHERE retention_until < CURDATE()
AND is_anonymized = 0
");
Audit log
Vsako dejanje (pregled podatka, urejanje, izbris) je zapisano:
CREATE TABLE audit_log (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
action ENUM('view', 'edit', 'delete', 'export'),
submission_id INT,
ip VARCHAR(45),
user_agent VARCHAR(500),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Audit log je obvezen pri občutljivih podatkih. Pri rednem kontaktnem obrazcu ni nujen, je pa best practice.
Politika privolitve (consent)
Vsaka oddaja obrazca z osebnimi podatki mora imeti eksplicitno privolitev:
- Ločen checkbox (ne pre-marked)
- Jasna razlaga, za kaj se uporablja
- Povezava na politiko zasebnosti
- Zapis časa privolitve (timestamp)
- Zapis verzije politike, ki je veljala v času privolitve
Pravica posameznika
Vsak uporabnik ima pravico do:
- Dostopa – kateri podatki o njem obstajajo
- Popravka – sprememba napačnih podatkov
- Izbrisa ("pravica do pozabe")
- Omejitve obdelave – pauziranje obdelave
- Prenosljivosti – izvoz lastnih podatkov v strojno berljivi obliki (JSON, CSV)
- Ugovora – proti določeni obdelavi
V admin-u za to potrebujemo gumbe: "Izvozi vse podatke o tej osebi", "Izbriši vse podatke o tej osebi". Pri Izpolni.si smo to implementirali kot "GDPR Tools".
Praktični nasveti
- Ne shranjujte več, kot rabite. Ne sprašujte za rojstni datum, če ga ne uporabljate.
- IP naslov je osebni podatek (po GDPR). Zapis IP-ja v `povpraševanja.jsonl` je legitimen le za varnost obrazca, ne za marketing.
- Backup-e tudi po GDPR-ju. Če podatek izbrišemo iz live baze, ga moramo izbrisati tudi iz backup-ov v razumnem roku (običajno 30–90 dni).
- Privolitev preverjajte, ko podatek prvič uporabite. Če uporabnik privoli leta 2024, ima pravico privolitev preklicati v 2026 – takrat ne smete več obdelovati.
