# GDPR: nástřel pro nový web tootevru.cz

Pracovní podklad pro implementaci a pro text stránky *Ochrana osobních údajů* (`partials/gdpr-content.html`). Není to právní posudek. Před spuštěním nechat zkontrolovat.

---

## 0. Akutní nález na současném webu

Stránka **/o-me/** veřejně zobrazuje skeny dokumentů s **rodným číslem, datem narození a adresou bydliště** majitele (výpis z živnostenského rejstříku, osvědčení o profesní kvalifikaci). Obrázky jsou v plném rozlišení v `wp-content/uploads/2025/02/`.

**Doporučení (ihned, nezávisle na redesignu):**
1. Nahradit obrázky verzemi se začerněnými údaji (připraveno: `assets/img/doc-*.jpg`).
2. Smazat originály z knihovny médií včetně všech vygenerovaných velikostí (`-225x300`, `-768x1024`, `-1152x1536`).
3. Požádat Google o odstranění z cache (Search Console → Odstranění) a zkontrolovat Obrázky Google.

---

## 1. Inventář osobních údajů

### 1.1 Poptávkový formulář (`/poptavka`)
| Pole | Povinné | Proč | Poznámka |
|---|---|---|---|
| Služba | ano | typ práce, odhad ceny | výběr z číselníku |
| Datum (+ preferovaný čas) | ano (čas ne) | naplánování | |
| Jméno | ano | oslovení, doklad | |
| Příjmení | ano | identifikace zakázky | |
| E-mail | ano | potvrzení, odpověď | |
| Telefon | ano | domluva, příjezd | hlavní kanál |
| Adresa úkonu (ulice, obec) | ne | odhad dojezdu a ceny výjezdu | data minimalizace: nepovinné |
| Poznámka | ne | popis problému | upozornit „nepište sem hesla ani čísla dokladů“ |
| `website` (honeypot) | skryté | anti-spam | neukládat |
| IP adresa, user agent, čas | automaticky | bezpečnost, prevence zneužití | log max. 90 dní |

**Právní základ:** čl. 6 odst. 1 písm. b) GDPR (opatření před uzavřením smlouvy na žádost subjektu). **Souhlas není potřeba**, proto žádný zaškrtávací checkbox, jen informační věta s odkazem na zásady. Nepoužívat předzaškrtnutá pole.

**Nesbírat:** rodné číslo, číslo OP, datum narození. Pokud je u otevírání nutné ověřit oprávnění k objektu, doklad jen **zkontrolovat na místě**, nekopírovat a neukládat (doplnit do zásad po potvrzení majitelem).

### 1.2 Telefon, SMS, e-mail
Mimo web, ale patří do zásad: telefonní číslo, jméno, adresa zásahu. Základ: plnění smlouvy.

### 1.3 Zakázky a doklady
Jméno/firma, adresa, IČ, cena, datum. Základ: právní povinnost (daňová evidence OSVČ). Uchovávat po dobu stanovenou daňovými předpisy.

### 1.4 Administrace
Účty administrátorů (jméno, e-mail, hash hesla, 2FA secret, logy přihlášení). Základ: oprávněný zájem (bezpečnost).

### 1.5 Recenze
Zobrazené recenze obsahují jméno autora a text, které autor zveřejnil na Google / Seznamu. Zobrazovat ve formě, v jaké je autor zveřejnil (nebo zkráceně „Jan N.“). Základ: oprávněný zájem. U ručně přepsaných recenzí na požádání autora smazat.

### 1.6 Analytika a marketing
- **Google Analytics 4**: jen po souhlasu (cookie lišta, kategorie *Analytické*), Consent Mode v2 výchozí `denied`.
- **Google Ads** (současný web má tag `AW-11523592230`): pokud zůstane měření konverzí, přidat kategorii *Marketingové* (`ad_storage`, `ad_user_data`, `ad_personalization`) a text do lišty i zásad. Pokud se nebude používat, tag odstranit.

---

## 2. Doba uchování (návrh)

| Data | Doba | Implementace |
|---|---|---|
| Poptávky bez zakázky | 12 měsíců | `php artisan model:prune` (Prunable na modelu `Inquiry`), scheduler denně |
| Poptávky převedené na zakázku | dle daňových předpisů | příznak `converted_at`, prune je vynechá |
| Logy (IP, formuláře) | 90 dní | rotace logů |
| Záznam souhlasu s cookies | 3 roky od udělení | tabulka `consents` |
| GA4 | 14 měsíců | nastavení Data retention v GA4 |
| Recenze z Google (API) | max. 30 dní od syncu | denní sync přepisuje snapshot |

---

## 3. Cookies a souhlas (orestbida/cookieconsent v3)

- Kategorie: **Nezbytné** (vždy), **Analytické** (GA4), volitelně **Marketingové** (Google Ads).
- Obě tlačítka „Přijmout vše“ a „Jen nezbytné“ stejně výrazná (`equalWeightButtons: true`), žádné „dark patterns“.
- Odkaz/tlačítko **Nastavení cookies** v patičce každé stránky (`data-cc="show-preferencesModal"`).
- `revision` v configu zvýšit při každé změně kategorií (lišta se znovu zobrazí).
- **Logování souhlasu:** v `onFirstConsent` / `onChange` poslat `POST /consent` s `consentId`, `acceptedCategories`, `revision`, timestamp (bez IP nebo s IP zkrácenou). Slouží jako doklad souhlasu.
- Skripty třetích stran (GA, Ads) načítat **až po souhlasu** (`type="text/plain" data-category="analytics"` nebo přes callback, viz `cookieconsent-config.js`).
- Laravel session a XSRF cookies jsou nezbytné, uvést v tabulce.

---

## 4. Třetí strany a přenosy dat

| Služba | Data | Kdy | Řešení |
|---|---|---|---|
| Hosting + e-mail | vše z formuláře | vždy | zpracovatelská smlouva (DPA), servery v EU |
| Google Analytics | cookies, IP (zkrácená) | po souhlasu | DPA v Google Analytics, EU-US DPF, Google signals vypnout |
| Mapové dlaždice | IP adresa návštěvníka | při zobrazení mapy | Mapy.com (EU) místo Google Maps; mapu lazy-load |
| Google Fonts | IP adresa | při načtení stránky | **v produkci self-host fonty** (rozsudek LG München 2022) |
| CDN knihoven (jsDelivr) | IP adresa | při načtení stránky | v produkci bundlovat přes Vite, žádné CDN |
| Google recenze | žádná (server-side) | | načítat na serveru, ne v prohlížeči |
| Widget Firmy.cz | IP, případně cookies Seznamu | při zobrazení | preferovat ruční import; při použití widgetu prověřit cookies |
| Anti-spam | IP, chování | při odeslání | honeypot + časová kontrola + rate limit; pokud captcha, pak Cloudflare Turnstile (bez cookies) místo reCAPTCHA |

---

## 5. Technická a organizační opatření (checklist pro vývoj)

- [ ] HTTPS všude, HSTS.
- [ ] Formulář: CSRF, validace na serveru, rate limit (`throttle:5,1`), honeypot, minimální čas vyplnění.
- [ ] Notifikační e-mail majiteli obsahuje jen nutné údaje; odpověď zákazníkovi bez citace celé poznámky.
- [ ] Administrace: silná hesla, **2FA**, omezení přístupu, logy přihlášení, odkaz „Přihlášení“ v patičce vede na `/admin` (nepoužívat předvídatelné `/wp-admin`).
- [ ] Šifrované zálohy, retence záloh v souladu s tabulkou výše.
- [ ] Prune job pro staré poptávky + test.
- [ ] Export / výmaz údajů konkrétní osoby z administrace (vyhledání podle e-mailu / telefonu).
- [ ] Záznamy o činnostech zpracování (čl. 30): OSVČ pod 250 zaměstnanců je zpravidla nemusí vést, pokud zpracování není pravidelné. Poptávky jsou pravidelné, proto doporučuji vést jednoduchý záznam (1 strana).
- [ ] Stránka *Ochrana osobních údajů* dostupná z patičky a z formuláře, datum účinnosti.
- [ ] Obrázky dokumentů jen se začerněnými osobními údaji.

---

## 6. Otázky na majitele

1. Ověřujete oprávnění k objektu (doklad totožnosti, techničák)? Děláte si kopii?
2. Kdo má přístup k poptávkám (jen vy, účetní)?
3. Jaký e-mail a hosting se bude používat?
4. Zůstává Google Ads (měření konverzí)?
5. Chcete dostávat poptávky i jako SMS / WhatsApp notifikace (další zpracovatel)?
