# GDPR — zpracování osobních údajů v Aleatorii Vlastník dokumentu: **EU‑INFRA**. Jazyk: čeština (primární), anglická shrnutí jsou v `docs/legal/*.en.md`. Verze: 2026‑09‑10. Vztahuje se na produkční nasazení v projektu `aleatoria-prod` (GCP, organizace `172118093978`). > **Právní status dokumentu.** Toto je *technicko‑organizační* dokumentace pro provoz a pro přílohy smluv. > Položky označené **(k právní revizi)** musí před spuštěním placeného provozu potvrdit advokát se specializací na > ochranu osobních údajů a spotřebitelské právo. **Správce:** Cloudpeakify s.r.o., IČO 21041342, DIČ CZ21041342, se sídlem Jičínská 226/17, Žižkov, 130 00 Praha 3, Česká republika, zapsaná v obchodním rejstříku vedeném Městským soudem v Praze, oddíl C, vložka 396064. Kontakt ve všech věcech ochrany údajů i bezpečnostních hlášení: **support@aleatoria.io**. Zdroje: [Nařízení (EU) 2016/679 (GDPR)](https://eur-lex.europa.eu/eli/reg/2016/679/oj) · [Úřad pro ochranu osobních údajů (ÚOOÚ)](https://uoou.gov.cz/) · [Google Cloud Data Processing Addendum](https://cloud.google.com/terms/data-processing-addendum) · [Google Cloud subprocessors](https://cloud.google.com/terms/subprocessors) · [Stripe DPA](https://stripe.com/legal/dpa) · [Stripe Privacy Center](https://stripe.com/privacy). --- ## 1. Role: správce a zpracovatel | situace | role Aleatorie | protistrana | |---|---|---| | Uživatel (spotřebitel nebo OSVČ) si založí účet a generuje skladby pro sebe | **správce** (čl. 4 odst. 7) | subjekt údajů = uživatel | | Zákazník (podnikatel) používá API pro své vlastní zákazníky / zaměstnance | **zpracovatel** (čl. 4 odst. 8) pro údaje jeho uživatelů | zákazník = správce; uzavírá se DPA (`docs/legal/DPA.md`) | | Google Cloud EMEA provozuje infrastrukturu | — | **zpracovatel** Aleatorie | | Poskytovatel plateb (Stripe) zpracovává platbu | — | **samostatný správce** pro účely prevence podvodů a plnění regulace plateb, jinak zpracovatel (viz `docs/legal/SUBPROCESSORS.md`) | | Anthropic (API jazykového modelu) napíše text písně — **jen když je zapnutý přepínač `lyrics_ai`** | — | **zpracovatel** Aleatorie; sídlo USA, tedy předání do třetí země (§5) — **k právní kontrole** | Pověřenec pro ochranu osobních údajů (DPO) podle čl. 37 **není** jmenován: hlavní činnost Aleatorie není rozsáhlé systematické monitorování ani zpracování zvláštních kategorií údajů. Posouzení je nutné zopakovat při růstu (k právní revizi). Kontaktní místo pro dotazy k ochraně údajů: **support@aleatoria.io**. Zástupce v EU podle čl. 27 se nevyžaduje — správce je usazen v ČR (k právní revizi). --- ## 2. Kategorie subjektů údajů a údajů | kategorie | konkrétní údaje | zdroj | kde je uloženo | |---|---|---|---| | Identita účtu | `users.id`, `users.email` (volitelný), `users.plan`, `users.credits`, `users.created_at` | uživatel | Cloud SQL (Postgres 16, `europe-west4`) | | Autentizace | `users.api_key_hash` (HMAC‑SHA256 API klíče klíčem `API_SIGNING_KEY`), `users.password_hash` (scrypt N = 2¹⁵), `users.email_verified_at` | uživatel + systém | Cloud SQL | | Relace | `sessions` — id relace, `method` (password/google/magic_link), časy vzniku, posledního použití a expirace, `ip_prefix` (**anonymizovaná IP**), `user_agent`, `token_hash` (SHA‑256 tajemství) | systém | Cloud SQL | | Federovaná identita | `identities` — `provider`, `subject` (`sub` u Googlu), e‑mail, čas posledního přihlášení | **Google** | Cloud SQL | | Jednorázové e‑mailové tokeny | `email_tokens` — účel (magic link / ověření / reset), otisk tajemství, adresa, expirace, počet pokusů | systém | Cloud SQL | | Ochrana proti zneužití | `auth_throttle` — klíč `::`, kde hodnotou je **anonymizovaná IP** nebo **zkrácený SHA‑256 e‑mailu**, počet a okno | systém | Cloud SQL | | Předplatné a kredity | `subscriptions` (plán, stav, období), `credit_ledger` (každý pohyb kreditů: druh, částka, zůstatek po, důvod, idempotenční klíč) | systém + poskytovatel plateb | Cloud SQL | | Objednávky a doklady | `checkout_orders` (co bylo koupeno, částka, měna, přijatá verze podmínek), `invoices` (číslo, částky, DPH, země, DIČ, odkazy na doklady u poskytovatele) | uživatel + poskytovatel plateb | Cloud SQL | | Záznamy událostí poskytovatele plateb | `stripe_events` — id, typ, `livemode`, stav zpracování a **původní payload** (90 dní) | poskytovatel plateb | Cloud SQL | | Hodnocení zákazníka (`docs/REVIEWS.md`) | `reviews` — hvězdičky 1–5, text ≤ 400 znaků, **zobrazované jméno v podobě, kterou si uživatel zvolil** (celé jméno, křestní jméno nebo iniciály — ukládá se jen zvolená podoba), druh volby, souhlas se zveřejněním, příznak „ověřený nákup“ (z tabulek plateb), plán v době napsání, stav moderace, poznámka vlastníka, časy | uživatel (+ rozhodnutí vlastníka o zveřejnění) | Cloud SQL | | Souhlasy podle spotřebitelského práva | `consents` — druh (podmínky, zahájení plnění, poučení o odstoupení, odstoupení), verze dokumentu, čas | uživatel | Cloud SQL | | Obsah zadání | `jobs.spec`, `tracks.spec` — prompt, text písně (lyrics), název, struktura, přírodní vrstvy, seed | uživatel | Cloud SQL | | Vygenerovaný obsah | audio (`mix.wav/.flac/.mp3`), stemy, DJ verze (`dj/*.flac`), `score.json`, `score.mid`, immersive mastery, `peaks` | systém | GCS bucket `…-aleatoria-audio` (`europe-west4`) | | Odvozené metriky | `fingerprints.vector` (log‑mel / chroma / rytmické statistiky vygenerovaného audia), `novelty_score`, `repetition_score`, `energy_curve` | systém | Cloud SQL | | Provozní záznamy (naše) | strukturované JSON logy, které píše aplikace (čas, cesta bez dotazu, stav, doba trvání, id jobu/uživatele, **anonymizovaná IP** — `logsetup.anonymize_ip`, `app.py`); u pokusu o odeslání transakční zprávy navíc **adresa příjemce**, předmět a značky zprávy, tělo nikoli (`mailer.LogEmailSender`, Z12 v §3) | systém | Cloud Logging: koš `aleatoria-eu-logs` (`europe-west4`) a — **dokud je zapnutý sink `_Default`** (dnes ano) — **zároveň kopie** v Googlem spravovaném koši `_Default` (**`global`**); po jeho vypnutí jen EU koš — viz §5 | | Záznamy hostingové platformy | request logy, které o každém požadavku vytváří sám Google (Cloud Run `run.googleapis.com/requests`, log load balanceru): čas, metoda, **úplná adresa požadavku včetně dotazu**, stav, doba trvání a **úplná IP adresa klienta**. Nevytváříme je my, IP v nich nelze zkrátit a vypnout je nelze — lze je jen vyloučit filtrem (§11) | poskytovatel infrastruktury | Cloud Logging: `aleatoria-eu-logs` (`europe-west4`) a — **dokud je zapnutý sink `_Default`** (dnes ano) — také `_Default` (**`global`**); po jeho vypnutí jen EU koš — viz §5 | | Fakturace | u placených plánů: identifikátor zákazníka u poskytovatele plateb, fakturační údaje, historie plateb, daňové doklady | uživatel + poskytovatel plateb | poskytovatel plateb (EU) + účetnictví správce | **Nezpracováváme:** zvláštní kategorie údajů podle čl. 9, údaje o dětech mladších 16 let (služba není určena osobám mladším 16 let), platební karty (číslo karty se k nám nikdy nedostane — zadává se přímo u poskytovatele plateb), biometrické údaje (viz §8 DPIA), sledovací cookies ani reklamní identifikátory. **Prompt a text písně mohou obsahovat osobní údaje**, pokud je tam uživatel sám napíše (jméno v textu skladby). Zpracováváme je jako součást obsahu zadání na základě plnění smlouvy a mažeme spolu se skladbou. --- ## 3. Záznamy o činnostech zpracování (čl. 30) | # | činnost | účel | právní základ | kategorie údajů | subjekty | příjemci | lhůta výmazu | |---|---|---|---|---|---|---|---| | Z1 | Provoz účtu (registrace, přihlášení API klíčem, plán, kredity) | poskytnutí služby | **čl. 6 odst. 1 písm. b)** — plnění smlouvy | identita účtu, autentizace | uživatelé | Google Cloud EMEA | do zrušení účtu (`DELETE /api/me` maže ihned; v zálohách nejdéle 7 dní) | | Z2 | Generování skladeb (fronta jobů, engine, mixáž, mastering, export) | poskytnutí služby | čl. 6 odst. 1 písm. b) | obsah zadání, vygenerovaný obsah | uživatelé | Google Cloud EMEA | do smazání skladby uživatelem, jinak podle §6 | | Z3 | Kontrola novosti (novelty gate) — porovnání fingerprintu proti **vlastní historii uživatele** | klíčová vlastnost produktu („nikdy stejné dvakrát“) | čl. 6 odst. 1 písm. b) | odvozené metriky | uživatelé | — | s příslušnou skladbou | | Z4 | Účtování kreditů, kvóty a globální strop | poskytnutí služby, ochrana před zneužitím | čl. 6 odst. 1 písm. b) + **f)** | identita účtu, počty jobů | uživatelé | — | 30 dní od vytvoření jobu (`ALEATORIA_RETENTION_DAYS_JOBS`) | | Z5 | Bezpečnost, prevence zneužití, ladění chyb (logy, audit přístupů) | oprávněný zájem na bezpečném provozu | **čl. 6 odst. 1 písm. f)** (test vyváženosti v §9) | naše provozní záznamy s anonymizovanou IP; **request logy hostingové platformy s úplnou IP klienta a úplnou adresou požadavku**, které vytváří sám Google a které nelze vypnout (§2, §5) | uživatelé, návštěvníci | Google Cloud EMEA | 30 dní (`ALEATORIA_RETENTION_DAYS_LOGS`, retence log bucketu) | | Z6 | Platby a předplatné | plnění smlouvy | čl. 6 odst. 1 písm. b) | fakturace | platící uživatelé | poskytovatel plateb (EU) | podle Z7 | | Z7 | Účetnictví a DPH (daňové doklady) | **právní povinnost** | **čl. 6 odst. 1 písm. c)** — zák. 563/1991 Sb. o účetnictví, zák. 235/2004 Sb. o DPH | fakturace | platící uživatelé | účetní, správce daně | 10 let od konce zdaňovacího období (k právní revizi) | | Z8 | Vyřizování žádostí subjektů údajů (přístup, přenositelnost, výmaz) | právní povinnost | čl. 6 odst. 1 písm. c) | identita účtu, obsah žádosti | žadatelé | — | 3 roky (prokázání splnění povinnosti; k právní revizi) | | Z9 | Označení obsahu jako vytvořeného AI (`docs/AI_ACT.md`) | právní povinnost podle nařízení (EU) 2024/1689 čl. 50 | čl. 6 odst. 1 písm. c) | metadata souboru (bez osobních údajů) | — | příjemci souboru | trvá po dobu existence souboru | | Z10 | **Autentizace a správa relací** (heslo, jednorázový odkaz, přihlášení Googlem, relační cookie, API klíč) | poskytnutí služby — bez přihlášení není účet | čl. 6 odst. 1 písm. b) | autentizace, relace, federovaná identita, e‑mailové tokeny | uživatelé | Google Cloud EMEA; **Google** (jen u přihlášení Googlem, jako samostatný správce) | relace do expirace (nejdéle 30 dní), tokeny do spotřebování/expirace, otisky do zrušení účtu | | Z11 | **Ochrana přihlášení před zneužitím** (limity pokusů, detekce znovupoužití relace) | oprávněný zájem na bezpečném provozu (test vyváženosti v §9) | **čl. 6 odst. 1 písm. f)** | anonymizovaná IP, otisk e‑mailu, provozní záznamy | uživatelé, návštěvníci | Google Cloud EMEA | do konce okna (nejdéle 24 h) | | Z12 | **Doručení transakční pošty** (ověření adresy, přihlašovací odkaz, obnova hesla, potvrzení objednávky a odstoupení) | poskytnutí služby; u potvrzení objednávky a odstoupení právní povinnost | čl. 6 odst. 1 písm. b), u potvrzení též písm. c) (směrnice 2011/83/EU čl. 8 odst. 7 a čl. 11 odst. 3) | e‑mailová adresa a obsah zprávy | uživatelé | **Resend (Plus Five Five, Inc., USA) od 22. 9. 2026** jako zpracovatel P3 — předání do třetí země podle kapitoly V (SCC modul 2, EU‑US DPF; §5, `SUBPROCESSORS.md`) | u Resendu podle jeho lhůt (**ověřit — k právní kontrole**); u nás adresa příjemce, předmět a značky zprávy v Cloud Logging po dobu retence logů (30 dní), tělo zprávy se mimo vývojový režim neloguje | | Z13 | **Správa předplatného a kreditní knihy** | poskytnutí služby | čl. 6 odst. 1 písm. b) | předplatné a kredity, objednávky | platící uživatelé | poskytovatel plateb (EU) | po dobu trvání účtu | | Z14 | **Záznamy souhlasů podle spotřebitelského práva** (zahájení plnění, poučení o odstoupení, verze podmínek, odstoupení) | právní povinnost — důkazní břemeno nese obchodník | **čl. 6 odst. 1 písm. c)** ve spojení se směrnicí 2011/83/EU a § 1837 písm. l) OZ | souhlasy | platící uživatelé | — | po dobu trvání účtu, u dokladů 10 let | | Z15 | **Psaní textů s AI** („Napsat text s AI“, `POST /api/lyrics/write`) — **jen se zapnutým přepínačem `lyrics_ai`** | poskytnutí služby na žádost uživatele | čl. 6 odst. 1 písm. b) (**k právní kontrole**) | obsah zadání: zadání písně (`brief`, ≤ 500 znaků — studio ho předvyplní promptem písně), žánr, jazyk, nálada, typ hlasu, délka a tempo, u přepisu i **stávající text písně** (≤ 6 000 znaků). **Žádné údaje o účtu** — Anthropic nedostane id uživatele, e‑mail, IP ani nic jiného, co by uživatele identifikovalo; osobní údaj se k němu dostane jen tehdy, když ho uživatel sám napíše do zadání nebo textu | uživatelé, kteří funkci použijí | **Anthropic PBC (USA)** jako zpracovatel — předání do třetí země (§5) | u nás se zadání ani vygenerovaný text neukládají (text se vloží do pole v prohlížeči; do databáze se dostane až s uloženým zadáním skladby, Z2) — v `auth_throttle` zůstává jen počet zápisů za den pod id uživatele (nejdéle 48 h), v logu jen počty tokenů a časy; u Anthropic podle jeho aktuálních podmínek uchovávání dat API (**lhůtu ověřit — k právní kontrole**) | | Z16 | **Zdroj registrace** (odkud noví uživatelé přicházejí; Q10, rozhodnutí ředitele 3. 10. 2026) | oprávněný zájem vědět, které kanály přivádějí uživatele (test vyváženosti v §9a) | **čl. 6 odst. 1 písm. f)** | nepovinná odpověď „Jak jste se o nás dozvěděli?“ při registraci heslem (`users.signup_ref = "self:"`, 8 pevných voleb); u účtů z 3. 10. 2026 do vydání PRIVACY 1.1 starší hodnota `lp-…`. Souhrnné denní počty zobrazení vstupních stránek a stažení (`event_counts`) **nejsou osobní údaje** (žádné id, IP, user agent ani cookie) a uvádíme je jen pro úplnost | uživatelé, kteří odpověď vyplní | Google Cloud EMEA | 366 dní od registrace, pak se hodnota vymaže (`retention.SIGNUP_REF_DAYS`); počty 400 dní | Marketingové e‑maily, profilování ani automatizované rozhodování s právními účinky (čl. 22) **neprovádíme**. Kontrola novosti je automatizované zpracování, ale nemá právní ani obdobně významný účinek na subjekt údajů — maximálně vede k novému pokusu o generování téže skladby. --- ## 4. Kdo má přístup | přístup | kdo | omezení | |---|---|---| | aplikační data (čtení/zápis) | service accounty `aleatoria-api`, `aleatoria-worker` | least privilege (`infra/terraform/README.md`, tabulka IAM); worker nemá přístup k `API_SIGNING_KEY` | | administrativní přístup k DB / bucketu | provozovatel (Owner projektu) | pouze přes IAM účet s 2FA. Změny konfigurace a IAM jdou do **Admin Activity** (`_Required`, 400 dní, nelze vypnout); čtení řádku z Cloud SQL, secretu ze Secret Manageru a `ADMIN_READ` na bucketech jsou **Data Access** logy, které zapíná `google_project_iam_audit_config` (`enable_data_access_audit_logs`, výchozí `true`). Ty dnes končí v `_Default` (filtr sinku `_Default` je nevylučuje); po vypnutí toho sinku končí jen v `aleatoria-eu-logs`. V obou případech platí retence `log_retention_days` (30 dní), ne 400. `DATA_READ` na bucketech je vypnutý úmyslně (`audit_storage_data_read`): je to jeden záznam na každé stažení skladby, tedy provoz produktu, ne administrativní přístup | | audit přístupů ke skladbám v aplikaci | plánováno: `audit_log` tabulka pro administrátorské zásahy (BRIEF „EU‑FIRST“) | dokud není, platí Cloud Audit Logs | | Google Cloud | personál Googlu jen v rozsahu DPA a Access Transparency | [Google Cloud DPA](https://cloud.google.com/terms/data-processing-addendum) | --- ## 5. Umístění dat — EU only Aplikace, databáze, úložiště audia i tajné klíče běží v EU; dvě výjimky u logů jsou pojmenované na konci sekce. Jednotlivé vrstvy a jejich vynucení popisuje `docs/DEPLOY.md` §15 a `infra/terraform/README.md` (sekce „EU residency“). Zdroj pravdy pro audit: ```bash terraform -chdir=infra/terraform output resource_locations ``` | zdroj | lokace | vynuceno | |---|---|---| | org policy `constraints/gcp.resourceLocations` | `in:eu-locations` | `modules/eu_residency` (`enable_eu_residency_policy`) | | Cloud Run `api`, `worker`, `worker-cpu` | `europe-west4` | `var.region` (validace `^europe-`) | | Cloud SQL Postgres 16 | `europe-west4`, jen privátní IP | `modules/cloudsql` | | zálohy DB + PITR logy | `eu` (EU multi‑region) | `var.db_backup_location` | | GCS `audio`, `models`, `cloudbuild` | `EUROPE-WEST4` (nebo `EU` při `gcs_multi_region_eu`) | `modules/storage` | | Secret Manager (`DB_PASSWORD`, `API_SIGNING_KEY`, `HF_TOKEN`) | **user‑managed** repliky `europe-west4` + `europe-west1` | `modules/secrets` | | Artifact Registry | `europe-west4` | `modules/artifact_registry` | | Cloud Logging — aplikační logy | koš `aleatoria-eu-logs` v `europe-west4`, retence 30 dní | `modules/eu_residency` | | Cloud Logging — koše spravované Googlem (`_Required`, `_Default`) | **`global`** — umístění nelze u tohoto projektu nastavit; viz výjimky níže | mimo naši kontrolu | | Terraform state (neobsahuje osobní údaje) | EU bucket v `europe-west4` | `versions.tf`, backend `gcs` | **Vědomé předání do třetí země podle kapitoly V GDPR provádíme jedno: transakční e‑maily** (zpracovatel P3 Resend / Plus Five Five, Inc., USA, od 22. 9. 2026 — adresa příjemce a obsah zprávy; doručení přes Amazon SES v Irsku, účet a metadata v USA; standardní smluvní doložky modul 2 a EU‑US DPF, `docs/legal/SUBPROCESSORS.md`). Platby zpracovává Stripe Payments Europe (Irsko). Další výjimky níže nejsou v naší moci. Google Cloud EMEA Limited je usazen v Irsku; podpora Googlu může teoreticky přistupovat z třetích zemí — kryto standardními smluvními doložkami v Google Cloud DPA a nastavitelné dále přes Access Approval / Assured Workloads for EU (na roadmapě, viz §11). Výjimky, které je nutné hlídat: * **Koše logů `_Required` a `_Default` jsou `global`.** `_Required` (audit logy administrativní činnosti, 400 dní) spravuje Google a nelze ho přesunout ani vypnout. `_Default` (30 dní) přijímá kopii všech záznamů, dokud se jeho sink ve směrovači logů nevypne — vlastní EU koš `aleatoria-eu-logs` má prázdný filtr, takže dostává totéž a nic se vypnutím neztratí (`modules/eu_residency`). `global` neznamená prokázané předání mimo EU, ale znamená, že **EU umístění není zaručeno**; proto je to v `docs/legal/PRIVACY.*` §5 a `docs/legal/DPA.md` §10 uvedeno jako výjimka, ne zamlčeno. * **Request logy platformy** (`run.googleapis.com/requests` a log load balanceru) vytváří sám Google a obsahují **úplnou IP klienta a úplnou adresu požadavku včetně dotazu** — na rozdíl od našeho přístupového logu, který IP zkracuje a dotaz zahazuje (`logsetup.anonymize_ip`, `app.py`). Vypnout je nelze; lze je jen vyloučit filtrem v Cloud Logging. Dokud se tak nestane, je to uvedeno **v každém dokumentu, který se toho týká**: §2 a §3 (záznam Z5) tohoto dokumentu, test vyváženosti v §9, otevřená položka v §11, `docs/legal/PRIVACY.*` §2 a `docs/legal/DPA.md` §1, §4, Annex I a Annex II. Žádný z nich už neslibuje anonymizovanou IP tam, kde ji nemáme. * Fakturační metadata (Cloud Billing, budget) jsou vázaná na fakturační účet, nikoli na region; osobní údaje zákazníků neobsahují. * Volitelné neurální modely se stahují z Hugging Face **jen při buildu image** (`HF_TOKEN`); žádná uživatelská data se přitom neodesílají. Za běhu má worker `worker_vpc_egress = ALL_TRAFFIC` možnost běžet zcela bez internetu. * **Psaní textů s AI (`lyrics_ai`) posílá zadání mimo EU** — **k právní kontrole.** Se zapnutým přepínačem `lyrics_ai` a nastaveným klíčem `ALEATORIA_ANTHROPIC_API_KEY` posílá api na žádost uživatele (tlačítko „Napsat text s AI“) zadání písně, žánr, jazyk, náladu, typ hlasu, délku, tempo a případně stávající text na API společnosti **Anthropic PBC** (`api.anthropic.com`, USA) — záznam Z15. Údaje o účtu se neposílají. Jde o předání do třetí země podle kapitoly V; před zapnutím v produkci musí advokát potvrdit právní titul předání (rámec EU‑US Data Privacy Framework, pokud je Anthropic certifikován, jinak standardní smluvní doložky v DPA Anthropic), doplnit Anthropic do `docs/legal/SUBPROCESSORS.md` a `docs/legal/PRIVACY.*` (oznámení 30 dní předem jako u odesílatele pošty, Z12) a ověřit lhůtu uchovávání dat na straně Anthropic. Dokud je přepínač vypnutý (výchozí stav), neodchází nic. Tento odstavec i řádky v §1 a §3 jsou **návrh k právní kontrole**, ne hotové právní posouzení. --- ## 6. Retenční tabulka Aplikační lhůty vynucuje úklidová úloha `server/aleatoria/retention.py::sweep_retention` (běží ve workeru jednou za hodinu, `RETENTION_SWEEP_INTERVAL_S = 3600`, nejvýše 500 skladeb na jeden průchod) podle proměnných `ALEATORIA_RETENTION_DAYS_*`; **`0` = uchovávat neomezeně**. Infrastrukturní lhůty vynucuje Terraform. | data | proměnná / mechanismus | výchozí | co se stane | |---|---|---|---| | skladby vytvořené na plánu **Free** (řádek, audio objekty, fingerprint) | `ALEATORIA_RETENTION_DAYS_TRACKS_FREE` | **180 dní** | smaže se audio v GCS, fingerprint i řádek skladby | | skladby vytvořené na plánech **Basic / Studio / Pro** | `ALEATORIA_RETENTION_DAYS_TRACKS_PAID` | **0 = neomezeně** | drží se, dokud je uživatel nesmaže; po 30 dnech jde objekt do NEARLINE (levnější třída, stejný obsah). **Rozhoduje plán v době vzniku skladby** (`tracks.meta.license.plan`), ne aktuální: zrušení předplatného na už vytvořené skladby zpětně nedopadá (`gdpr_dao.tracks_due_for_retention`) | | joby (prompt, text písně, log, chyba) | `ALEATORIA_RETENTION_DAYS_JOBS` | **30 dní** | řádek jobu se maže; skladba zůstává | | text logu jobu (`jobs.log` — může obsahovat prompt) | `ALEATORIA_RETENTION_DAYS_LOGS` | **30 dní** | vyprázdní se u jobů, které ještě neuplynuly podle předchozího řádku | | fingerprinty (`fingerprints`) | vázané na skladbu | — | mažou se se skladbou (`ON DELETE CASCADE` i explicitně v `retention.py`) | | stemy — Free | GCS lifecycle `days_since_custom_time` (worker razítkuje `custom_time` u stemů Free uživatelů) | **90 dní** | smazány z bucketu | | stemy — Basic/Studio/Pro | GCS lifecycle, Terraform `stems_delete_after_days` | **180 dní** | smazány z bucketu | | ukázka bez účtu (funkce `anon_trial`, stránka `/try`): řádek jobu bez vlastníka jen se zvoleným presetem a logem pipeline a jeho 30sekundové audio | `trial.RETENTION_H` = 24; hodinový `retention.sweep` → `trial.sweep_trial` (počítadlo `trial_jobs`) | **24 hodin** od žádosti o render | smaže se audio objekt i řádek jobu; zůstává jen denní souhrnný počet podle presetu (`events`, bez vazby na osobu) | | DJ verze skladby (`tracks/{id}/dj/*.flac`, „Drums only“ / „No bass“, BACKLOG #67) | GCS lifecycle jako stemy (nejsou na seznamu trvale držených objektů) | **90 dní** (Free, `custom_time`) / **180 dní** | smazány z bucketu; mažou se i se skladbou (`delete_prefix`) a jsou v exportu podle čl. 20 | | DJ verze AI skladby („Instrumental“ / „Acapella“, BACKLOG #67) | žádný vlastní objekt: skládají se při stažení z oddělených AI stemů (`tracks/{id}/stems/{vocals,drums,bass,other}.flac`, placená úloha `stems`) | jako ty stemy: **180 dní** (AI stemy nemají `custom_time`, platí pravidlo `stems_delete_after_days` na všech plánech) | nabízejí se, dokud jsou stemy v bucketu; v exportu podle čl. 20 jsou ty stemy | | mixy, `score.json`, `score.mid`, immersive mastery | GCS lifecycle → NEARLINE po `mix_nearline_after_days` | 30 dní | jen změna třídy úložiště, obsah zůstává | | immersive mastery (volitelně) | Terraform `immersive_delete_after_days` | `0` = nemazat | volitelné mazání (jsou největší) | | provozní logy — naše i request logy platformy, koš `aleatoria-eu-logs` (`europe-west4`) | Terraform `log_retention_days` (stejné číslo jako `ALEATORIA_RETENTION_DAYS_LOGS`) | **30 dní** | Cloud Logging smaže | | tytéž záznamy, kopie v Googlem spravovaném koši `_Default` (`global`) — **jen dokud je zapnutý sink `_Default`** (dnes ano; po jeho vypnutí žádná kopie nevzniká) | **neřídíme** (`manage_default_log_bucket = false` — koš nelze přemístit ani vytvořit v regionu); platí výchozí retence Cloud Logging | 30 dní (ověřeno 2026‑09‑10 `gcloud logging buckets list`) | Cloud Logging smaže | | audit logy administrativní činnosti (`_Required`) | Google, neměnné | 400 dní | Cloud Logging smaže | | Data Access audit logy (dnes `_Default`; po vypnutí sinku `_Default` už jen `aleatoria-eu-logs` — sink `_Default` je i jejich cestou, jeho filtr je nevylučuje) | `google_project_iam_audit_config` pro Cloud SQL, Secret Manager a GCS | `log_retention_days` (30 dní) v obou případech | Cloud Logging smaže | | relace (`sessions`) | `commerce_sweep.sweep_commerce` → `accounts_dao.purge_expired_auth_rows`, každých 5 minut | expirace, nejdéle **30 dní** | řádek se maže | | jednorázové e‑mailové tokeny (`email_tokens`) | tamtéž | magic link 15 min, ověření adresy 24 h, obnova hesla 1 h (`ALEATORIA_PASSWORD_RESET_TTL_S`) | řádek se maže po spotřebování nebo expiraci | | počítadla ochrany proti zneužití (`auth_throttle`) | tamtéž | konec okna, nejdéle 24 h | řádek se maže | | payload událostí poskytovatele plateb (`stripe_events.payload`) | `ALEATORIA_STRIPE_EVENT_RETENTION_DAYS` | **90 dní** | payload se vyprázdní **a vazba na účet (`user_id`) se odpojí**; zůstává id události, typ, `livemode` a výsledek jako auditní stopa | | předplatné, kreditní kniha, objednávky (`subscriptions`, `credit_ledger`, `checkout_orders`) | vázáno na účet | po dobu trvání účtu | mažou se se zrušením účtu (`ON DELETE CASCADE` i explicitně) | | fronta provozních e‑mailů (`mail_outbox`: id uživatele, druh zprávy, stav odeslání; adresu neobsahuje — z textu chyby ji odstraňujeme) | `retention.MAIL_OUTBOX_DAYS` (BACKLOG #80) | **90 dní** od zařazení | řádek se maže; **záznam o uvítacím e‑mailu** zůstává po dobu trvání účtu bez obsahu (jen id uživatele, druh, časy), aby po změně adresy nepřišlo druhé uvítání | | zdroj registrace (`users.signup_ref`: `lp-…` jen u účtů z 3. 10. 2026 do vydání PRIVACY 1.1; `self:` = nepovinná odpověď „Jak jste se o nás dozvěděli?“, Q10) | `retention.SIGNUP_REF_DAYS` (BACKLOG #80) | **366 dní** od registrace | hodnota se vymaže | | souhrnné počty (`event_counts`: den, druh, klíč, počet — zobrazení vstupních stránek a stažení podle typu; **bez osobních údajů**: bez id uživatele, IP, user agentu a cookies, `aleatoria.events`) | `events.EVENT_COUNTS_DAYS` | **400 dní** | řádek se maže | | souhlasy podle spotřebitelského práva (`consents`) | vázáno na účet | po dobu trvání účtu | doklad o souhlasu a odstoupení; maže se se zrušením účtu (`ON DELETE CASCADE`) | | federované identity (`identities`) | vázáno na účet | po dobu trvání účtu | maže se se zrušením účtu (`ON DELETE CASCADE`) | | EV Drive — licence a zvuky (`drive_licenses`, `drive_sounds`) | vázáno na účet | po dobu trvání účtu | mažou se se zrušením účtu (`drive.dao`, `ON DELETE CASCADE`) | | hodnocení zákazníka (`reviews`: hvězdičky, text ≤ 400 znaků, zvolené zobrazované jméno, souhlas se zveřejněním, příznak ověřeného nákupu, stav moderace; `docs/REVIEWS.md`) | vázáno na účet; `DELETE /api/me/review` kdykoli | po dobu trvání účtu, nebo do stažení uživatelem | zobrazované jméno se zveřejní **jen se souhlasem** a až po ručním schválení vlastníkem; stažení (`withdrawn`) ho okamžitě odstraní z veřejného výpisu (řádek zůstává jako kotva „jedno hodnocení na účet“, dokud uživatel nenapíše nové); zrušení účtu řádek smaže (`gdpr_dao.delete_user_data`, `ON DELETE CASCADE`); export podle čl. 20 ho obsahuje (`review`) | | DJ Sety (`dj_sets`: název, pořadí vlastních skladeb, plán mixu, tracklist; objekty `sets/{id}/mix.flac|mix.mp3|mix.cue|tracklist.txt|set.json`; funkce `dj_set`, BACKLOG #108) | vázáno na účet; `DELETE /api/dj/sets/{id}` kdykoli | po dobu trvání účtu | smazání setu uživatelem odstraní objekty a řádek **ponechá** se stavem `deleted` (odkaz pro kreditní knihu; v seznamu ani v API se už neukazuje); zrušení účtu smaže i řádek (`gdpr_dao.delete_user_data`, objekty přes `deletion_queue`). GCS lifecycle přesouvá `mix.flac` a `mix.mp3` do NEARLINE po `mix_nearline_after_days` (výchozí 30) jako u mixů skladeb; nic pod `sets/` lifecycle nemaže | | faktury (`invoices`) | právní povinnost | **10 let** | výmaz účtu je **pseudonymizuje** (`gdpr_dao.pseudonymise_invoices_of`: `user_id → NULL`, DIČ a URL prázdné), částky a čísla dokladů zůstávají — čl. 17 odst. 3 písm. b) | | zrušený účet | `DELETE /api/me` | okamžitě | audio objekty, fingerprinty, skladby, joby a řádek uživatele se smažou hned. Objekt, který se v tu chvíli nepodaří odstranit (výpadek bucketu), je ve frontě `deletion_queue`, odpověď ho hlásí jako `pending_objects` a retenční úloha ho zkouší znovu každou hodinu, dokud nezmizí; v technických kopiích mohou přetrvat nejdéle podle následujícího řádku | | zálohy DB a PITR logy | Terraform `db_pitr_log_days`, `retained_backups` | **7 dní / 7 záloh** | okno, ve kterém by smazaná data mohla být obnovena při havárii | | daňové doklady a účetní záznamy | právní povinnost | **10 let** (k právní revizi) | uchovává správce mimo aplikaci | | build artefakty (`_cloudbuild`) | GCS lifecycle | 14 dní | smazány | **Poznámka k zálohám:** výmaz podle čl. 17 se v produkčních datech provede okamžitě, ale v automatických zálohách a PITR logech data technicky existují ještě `db_pitr_log_days` dní (7). Zálohy se neobnovují pro účely přístupu k datům; při obnově po havárii se smazané účty odstraní znovu podle seznamu provedených výmazů. Tento postup je v souladu se stanoviskem EDPB, že „výmaz ze záloh“ smí proběhnout v běžném cyklu záloh (k právní revizi). ## 7. Práva subjektů údajů a jejich technické naplnění | právo | článek | jak se uplatní | |---|---|---| | Přístup | čl. 15 | **`GET /api/me`** — účet, plán, kredity, dnešní spotřeba (neurální kredity, procedurální joby) a region uložení dat; `GET /api/tracks` — seznam skladeb s metrikami | | Přenositelnost | čl. 20 | **`GET /api/me/export`** — streamovaný ZIP: `export.json` (uživatel bez API klíče, všechny skladby se `spec`/`meta`, joby, metadata fingerprintů bez vektorů) a všechny audio objekty ve složkách `tracks//`; strojově čitelný, běžně používaný formát | | Výmaz („právo být zapomenut“) | čl. 17 | **`DELETE /api/me?confirm=DELETE`** — smaže audio objekty, fingerprinty, skladby, joby a nakonec řádek uživatele; vrací počty smazaných položek | | Oprava | čl. 16 | e‑mail účtu upraví uživatel přímo na stránce Účet (`PATCH /api/me`; prázdná hodnota adresu odstraní); ostatní údaje na kontaktu pro ochranu údajů | | Omezení zpracování | čl. 18 | na žádost — účet se deaktivuje (generování zakázáno), data zůstanou beze změny | | Námitka | čl. 21 | proti zpracování na základě oprávněného zájmu (Z5) — na kontaktu pro ochranu údajů | | Odvolání souhlasu | čl. 7 odst. 3 | souhlas dnes nepoužíváme jako právní základ pro žádné *zpracování* (žádné cookies, žádný newsletter). Souhlas se zahájením plnění před uplynutím 14denní lhůty (§ 1837 písm. l) OZ) je souhlas *smluvní*, ne podle čl. 6 odst. 1 písm. a): zaznamenává se v tabulce `consents` (kdo, jaký druh, verze dokumentu, kdy), vrací ho `GET /api/me/consents`, odvolání je další řádek s `granted=false` a celá historie je součástí exportu podle čl. 20 | | Stížnost u dozorového úřadu | čl. 77 | **ÚOOÚ**, Pplk. Sochora 27, 170 00 Praha 7, [uoou.gov.cz](https://uoou.gov.cz/) | Export vědomě neobsahuje `users.api_key` (přihlašovací údaj, ne osobní údaj, který subjekt potřebuje přenést) ani samotné vektory fingerprintů (neprůhledné float32/uint32 bloby bez významu mimo náš engine) — jejich existence je v exportu uvedena metadaty. Lhůta pro vyřízení: **1 měsíc** od žádosti (čl. 12 odst. 3), prodloužitelná o 2 měsíce s odůvodněním. Ověření totožnosti žadatele: žádost podaná z přihlášeného účtu (API klíč) je považována za ověřenou; e‑mailová žádost se ověřuje proti `users.email`. Implementace: `server/aleatoria/routes/me.py` + `server/aleatoria/gdpr_dao.py` (testy `server/tests/test_me.py`). --- ## 8. DPIA — posouzení vlivu na ochranu osobních údajů (čl. 35): zpracování fingerprintů **Předmět.** Novelty engine počítá z *vygenerovaného* audia vektor příznaků (`fingerprint`): statistiky log‑mel spektra (64 pásem), chroma (12), rytmické/onsetové příznaky a množinu spektrálních hashů. Vektor se ukládá do tabulky `fingerprints` a porovnává kosinovou podobností **výhradně proti historii téhož uživatele**, aby systém poznal, že nová skladba je příliš podobná některé předchozí, a vynutil mutaci zadání. **1) Je vyžadováno DPIA?** Formálně pravděpodobně ne: nejde o systematické rozsáhlé monitorování veřejně přístupných prostor ani o zvláštní kategorie údajů a zpracování není na seznamu ÚOOÚ pro povinné DPIA (k právní revizi). Provádíme ho dobrovolně, protože „fingerprint zvuku“ zní jako biometrie a chceme mít doloženo, že jí není. **2) Popis a nezbytnost.** Bez fingerprintů nelze doložit hlavní slib produktu (měřitelná novost, „3× lepší než Suno“, `docs/BENCHMARK.md`). Alternativa — porovnávat celé audio — by byla dražší a **invazivnější**. Vektor je řádově menší než audio a je jednosměrný: z ~100 statistik nelze rekonstruovat zvuk ani žádnou promluvu. **3) Nejde o biometrické údaje podle čl. 4 odst. 14.** Biometrické údaje jsou výsledkem *specifického technického zpracování týkajícího se fyzických, fyziologických nebo behaviorálních znaků fyzické osoby*, které umožňuje nebo potvrzuje **jedinečnou identifikaci** osoby. Náš fingerprint: * se počítá z **syntetického** audia vytvořeného enginem, ne z nahrávky člověka; * zpěv v neurálním výstupu je hlas modelu, nikoli konkrétní žijící osoby; * účelem není a technicky nemůže být identifikace osoby — vektor je průměr spektrálních statistik celé skladby. (k právní revizi) **4) Rizika a opatření.** | riziko | dopad | pravděpodobnost | opatření | |---|---|---|---| | Vektor by šel použít k propojení účtů („stejný uživatel“) | nízký | nízká | dotaz je vždy filtrován `user_id`; křížové porovnávání mezi uživateli je zakázáno v `novelty/store.py` a nesmí být zavedeno bez nového posouzení | | Únik databáze fingerprintů | nízký (bez zvuku a bez identity) | nízká | privátní IP, TLS (`ssl_mode = ENCRYPTED_ONLY`), šifrování at rest, least‑privilege SA | | Uživatel nahraje referenční audio s hlasem skutečné osoby (roadmapa: cover / reference) | **střední až vysoký** | střední | *dokud tato funkce není spuštěna:* neexistuje; při spuštění nutné nové DPIA, souhlas a zákaz nahrávat hlas třetích osob v pravidlech užití | | Nesprávné vyhodnocení novosti (falešně pozitivní kopie) | nízký | střední | uživatel může prahové hodnoty změnit (`creativity.novelty_threshold`) a skóre vidí; žádné automatizované rozhodnutí s právním účinkem | | Uchování fingerprintu po smazání skladby | nízký | nízká | `ON DELETE CASCADE` na `tracks`; ověřeno testem výmazu | **5) Závěr.** Zbytkové riziko je **nízké**; konzultace s dozorovým úřadem podle čl. 36 není nutná. DPIA se přehodnotí, jakmile (a) přibude nahrávání referenčního audia uživatelem, (b) fingerprinty se začnou porovnávat napříč uživateli, nebo (c) začneme trénovat vlastní model na uživatelských datech (dnes **netrénujeme**). --- ## 9. Test vyváženosti pro oprávněný zájem (Z5 — logy a bezpečnost) * **Zájem:** provozovat službu bezpečně, odhalit zneužití (obcházení kvót, generování zakázaného obsahu), ladit chyby. * **Nezbytnost:** bez provozních záznamů nelze zjistit příčinu selhání jobu ani zneužití; méně invazivní varianta (žádné logy) by znemožnila provoz. * **Dopad na subjekt — naše záznamy: nízký.** V logách, které píše aplikace, se IP anonymizuje (poslední oktet IPv4 / posledních 80 bitů IPv6 se nuluje, `logsetup.anonymize_ip`), dotaz v URL se zahazuje (`app.py`), logy neobsahují text zadání ani audio a retence je 30 dní. * **Dopad na subjekt — request logy hostingové platformy: vyšší, a nelze ho odstranit anonymizací.** Cloud Run a load balancer zapisují ke každému požadavku **úplnou IP klienta a úplnou adresu požadavku včetně dotazu** (§2, §5). Tyto záznamy nevytváříme my a nelze je vypnout; vzniká z nich po dobu 30 dní stopa, ze které lze odvodit přibližnou polohu a poskytovatele připojení. Zmírnění, která skutečně máme: retence 30 dní, žádné spojování s marketingovými identifikátory, žádné profilování a jediný lidský účet s přístupem — provozovatel, a to **jako Owner projektu** (IAM účet s 2FA). Tuto roli tady neuvádíme jako zúžení: Owner je podstatně **širší** než čtení logů. Nikdo nemá `roles/logging.viewer` a přístup k záznamům plyne z vlastnictví projektu (ověřeno 2026‑09‑10: `gcloud projects get-iam-policy aleatoria-prod` vrací jediného lidského principála `user:support@cloudpeakify.com` s `roles/owner`; totéž říká §4). Do **Admin Activity** (`_Required`, 400 dní, nelze vypnout) se proto zapisuje udělení role **Owner**, ne udělení role pro čtení logů. Co naopak **nemáme**: Data Access audit logy jsou zapnuté pro Cloud SQL, Secret Manager a GCS, **nikoli pro Cloud Logging** — jednotlivé přečtení záznamu se tedy nikde nezaznamená. Zbývající dvě opatření dnes zavedena nejsou: vyloučit request logy filtrem v Cloud Logging (otevřená položka v §11) a zúžit přístup k logům z role Owner na roli jen pro čtení. Obojí je při jediném provozovateli otázka doložitelnosti, ne omezení okruhu osob, ale v tomto testu to hraje **proti** nám, ne pro nás. * **Závěr:** zájem převažuje **u našich vlastních záznamů**. U request logů platformy je zásah větší, ale je nevyhnutelným důsledkem provozu na spravovaném hostingu (čl. 6 odst. 1 písm. f) ve spojení s bodem 49 odůvodnění GDPR — zabezpečení sítě a informací), je časově omezený a nevede k žádnému rozhodnutí o subjektu. Subjekt má právo námitky podle čl. 21; vyhovět mu u těchto záznamů znamená vyloučit je filtrem, ne je dodatečně anonymizovat. **(k právní revizi)** ## 9a. Test vyváženosti pro oprávněný zájem (Z16 — zdroj registrace) * **Zájem:** vědět, které kanály (vyhledávání, AI asistenti, komunity…) přivádějí nové uživatele, a podle toho rozhodovat o obsahu a propagaci. * **Nezbytnost:** méně invazivní cestu jsme zvolili místo sledování v prohlížeči: žádný zápis do zařízení (localStorage a `signupRef` jsou vypnuté), žádné id ani IP u počtů zobrazení. Bez odpovědi by zdroj registrace nebyl známý vůbec. * **Dopad na subjekt: nízký.** Odpověď je **dobrovolná** (výchozí volba „Neuvádět“), je to jedna z osmi pevných kategorií bez volného textu, u formuláře je napsáno, k čemu slouží a jak dlouho ji držíme (12 měsíců). Nevede k žádnému rozhodnutí o uživateli ani k profilování; v KPI se ukazuje jen součet podle odpovědi. * **Námitka (čl. 21):** napsáním na support@aleatoria.io; vyhovět znamená hodnotu vymazat (`signup_ref = NULL`). Kdo odpověď nechce dát, prostě ji nevyplní. * **Závěr:** zájem převažuje. **(k právní revizi spolu s PRIVACY 1.1)** --- ## 10. Bezpečnostní opatření (čl. 32) | oblast | opatření | |---|---| | Šifrování při přenosu | HTTPS/TLS na Cloud Run; Cloud SQL `ssl_mode = ENCRYPTED_ONLY`; podepsané URL (V4, platnost 1 h) | | Šifrování v klidu | výchozí šifrování Google Cloud (AES‑256) pro GCS, Cloud SQL i Secret Manager; CMEK je na roadmapě (§11) | | Síťová izolace | vlastní VPC bez auto‑subnetů, Cloud SQL **jen privátní IP**, worker s interním ingressem, výchozí deny ingress firewall, žádný Cloud NAT (worker může běžet zcela bez internetu) | | Řízení přístupu | tři service accounty s minimálními rolemi (tabulka v `infra/terraform/README.md`), buckety s `uniform_bucket_level_access` a `public_access_prevention = enforced` | | Správa tajemství | Secret Manager s user‑managed replikací jen v EU; hesla generuje Terraform (32 znaků), podpisový klíč 64 znaků; secrety se do kontejnerů předávají jako env z verzí secretů, ne v image | | Autentizace uživatelů | API klíč v hlavičce `X-API-Key`; v produkci `ALEATORIA_AUTH=key` (režim `dev` je zakázán na veřejné URL) | | Izolace úloh | jeden job na instanci workeru (`concurrency = 1`), kontejner běží jako non‑root, zapisuje jen do `/tmp` (tmpfs) | | Označení výstupů | AI označení souborů podle `docs/AI_ACT.md` (integrita informace o původu) | | Logování a audit | strukturované JSON logy s anonymizovanou IP a zahozeným dotazem v URL, směrované do EU koše `aleatoria-eu-logs` (30 dní); Cloud Audit Logs pro administrativní přístup. Request logy platformy a Googlem spravované koše `_Required`/`_Default` jsou mimo naši kontrolu — viz výjimky v §5 | | Zálohy a obnova | denní zálohy Cloud SQL v EU + PITR 7 dní; obnovitelnost se testuje při každé větší změně schématu (k doplnění: pravidelný test obnovy 1×/rok) | | Dostupnost | Cloud Run škáluje z nuly; tvrdé stropy instancí a globální denní strop neurálních generací chrání i před vyčerpáním prostředků útokem | | Vývoj | žádná produkční data ve vývoji (lokálně SQLite + syntetická data), infrastruktura jako kód, code review | --- ## 11. Známé mezery a roadmapa (stav 2026‑09‑10) 1. **Identifikační údaje správce jsou doplněny** (2026‑09‑10, z obchodního rejstříku) a `docs/legal/*` jsou zveřejnitelné. Zbývá **advokátní revize** položek označených **(k právní revizi)** — omezení odpovědnosti, licence k výstupům, rozhodné právo — a doplnění účetní kanceláře a advokáta do `docs/legal/SUBPROCESSORS.md` §2. 2. **`audit_log` pro administrátorské zásahy** v aplikaci (dnes se administrativní přístup zaznamenává jen do Cloud Audit Logs). 3. **Test obnovy ze zálohy** — zavést roční cvičení a zaznamenat výsledek. 4. **Smlouva s poskytovatelem plateb a DPA** — uzavřít před spuštěním plateb (`docs/legal/SUBPROCESSORS.md`). 5. **CMEK** (vlastní klíče v Cloud KMS, EU) a **Assured Workloads for EU** — zvážit, až budou zákazníky subjekty veřejného sektoru; dnes stačí výchozí šifrování Googlu. 6. **`_Default` log bucket v `global`** u projektu založeného před nastavením výchozí lokace organizace. EU koš `aleatoria-eu-logs` existuje a přijímá vše, ale sink `_Default` je stále zapnutý, takže se každý záznam ukládá dvakrát a jedna z kopií je v `global` (ověřeno 2026‑09‑10: `gcloud logging sinks describe _Default --project aleatoria-prod` nemá `disabled`). Do doby, než se vypne, to §5 a `docs/legal/PRIVACY.*` §5 uvádějí jako výjimku. `_Required` (400 dní) zůstane `global` navždy — přesunout ho nelze. **Vypnutí sinku nevyžaduje novou verzi dokumentů.** Všechna místa, kterých se to týká — §2 (oba řádky provozních záznamů), §4, §5, §6 (dva řádky retence), tento bod, bod 9, §12 (krok 3 postupu při porušení), `docs/legal/PRIVACY.*` §2 a §5, `docs/legal/SUBPROCESSORS.md` §1 a §4 a `docs/legal/DPA.md` §10 a Annex II — jsou psaná podmíněně („dokud je zapnutý sink `_Default`“), takže platí před vypnutím i po něm. Po vypnutí se uzavírá jen tento bod; věcně se mění to, že kopie v `global` už nevzniká a záznamy zůstávají jen v EU koši `aleatoria-eu-logs`. Zbývá pak vyloučit request logy filtrem (bod 10). 7. **C2PA podpis a vložení manifestu do souboru** (`docs/AI_ACT.md` §7) — dnes je manifest sidecar bez podpisu. 8. **Nahrávání ve Studiu zůstává v prohlížeči.** Editor (`docs/design/EDITOR.md` §6) umí nahrávat z mikrofonu nebo linkového vstupu, ale zachycený zvuk **nikdy neopouští prohlížeč**: ukládá se do IndexedDB uživatele, exportuje se lokálně do WAV a serverový render ho odmítne s přeloženým vysvětlením. Nezpracováváme ho, a proto k němu nepřibývá řádek v §2 ani v §6 — není to nová kategorie zpracování. Kdyby se to kdykoli mělo změnit, je to změna účelu podle čl. 30 s vlastním právním základem, DPIA a retencí, ne úprava jednoho endpointu. 9. **Odesílatel transakčních e‑mailů je Resend (USA) od 22. 9. 2026** (`ALEATORIA_EMAIL_PROVIDER = resend`, registrace otevřené). V repozitáři to je proměnná Terraformu `email_provider` (výchozí `log`, stejně jako `config.py`), kterou `locals.tf` předává jako `ALEATORIA_EMAIL_PROVIDER` službám api i worker-cpu (worker odesílá potvrzení objednávky při obnově ztraceného webhooku); precondition ve `variables.tf` nedovolí `signup_enabled = true` s `log`. Hodnota `resend` je nastavení produkce v `terraform.tfvars`, ne výchozí hodnota kódu — po každém apply ji ověřuje vlastník z env obou služeb. Otevřené body pro advokáta: lhůty uchování u Resendu, posouzení předání (TIA) a to, že změna nebyla předem oznámena (research R134). Původní text tohoto bodu („není vybrán“) platil do 22. 9. Vedlejší důsledek, který je třeba uvést: `LogEmailSender` píše **adresu příjemce** do Cloud Logging (tělo zprávy jen ve vývojovém režimu `dev`), takže e‑mailová adresa tam po dobu retence logů (30 dní) zůstává — a dokud je zapnutý sink `_Default` (dnes ano), i v kopii v koši `_Default` (`global`); po jeho vypnutí jen v EU koši `aleatoria-eu-logs`. Viz Z12 v §3 a §2. 10. **Request logy platformy obsahují úplnou IP a úplný dotaz** (§2, §5, test vyváženosti v §9). Vypnout je nelze; jediné dostupné opatření je vyloučit je filtrem směrovače logů (`gcloud logging sinks update`). Dokud se tak nestane, je zásah popsán v §9 a v `docs/legal/PRIVACY.*` §2, ne zamlčen. 11. **Placené plány běží naostro od 21. 9. 2026** (Stripe Payments Europe, live režim), do Z6, Z7 a Z13 tedy vstupují údaje reálných zákazníků. Smlouva a DPA se Stripe (bod 4) jsou k ověření u vlastníka. Hotovo (dříve mezery): endpointy `/api/me`, `/api/me/export`, `DELETE /api/me`; retenční úloha `aleatoria/retention.py`; anonymizace IP **v našich vlastních logách** (`logsetup.anonymize_ip`, přístupový log v `app.py`; request logy platformy tím pokryté nejsou — bod 10); manifest původu `GET /api/tracks/{id}/provenance`. ## 12. Postup při porušení zabezpečení (čl. 33 a 34) **Definice.** Porušení = jakékoli narušení bezpečnosti vedoucí k náhodnému nebo protiprávnímu zničení, ztrátě, změně, neoprávněnému zpřístupnění nebo přístupu k osobním údajům (čl. 4 odst. 12). | krok | čas od zjištění | kdo | co | |---|---|---|---| | 1. Detekce a triage | 0 h | provozovatel | zaznamenat čas zjištění (to je start 72h lhůty), rozsah, dotčené systémy | | 2. Zastavení | 0–2 h | provozovatel | odebrat kompromitované klíče (`gcloud secrets versions destroy`), rotovat `API_SIGNING_KEY` a `DB_PASSWORD`, zneplatnit API klíče, případně `ALEATORIA_GLOBAL_DAILY_NEURAL_CAP=0` a odstavení služby | | 3. Zjištění rozsahu | do 24 h | provozovatel | Cloud Audit Logs + provozní logy v koši `aleatoria-eu-logs` (a dokud je zapnutý sink `_Default`, tytéž záznamy i tam): které záznamy, kolik subjektů, jaké kategorie údajů | | 4. Ohlášení ÚOOÚ | **do 72 h** | správce | pokud je pravděpodobné riziko pro práva a svobody — formulář ÚOOÚ; při neúplných informacích ohlásit částečně a doplnit | | 5. Oznámení subjektům | bez zbytečného odkladu | správce | pokud je riziko **vysoké** (čl. 34) — e‑mail na `users.email` a oznámení v aplikaci | | 6. Záznam | do 7 dnů | správce | interní evidence porušení (i těch neohlašovaných) s odůvodněním rozhodnutí — čl. 33 odst. 5 | | 7. Náprava | do 30 dnů | provozovatel | odstranění příčiny, doplnění opatření, aktualizace tohoto dokumentu | **Když porušení nastane u zpracovatele** (Google Cloud, poskytovatel plateb): lhůta 72 h běží od okamžiku, kdy nás zpracovatel informoval; smluvně je zpracovatel povinen informovat **bez zbytečného odkladu** (Google Cloud DPA, čl. „Data Incidents“). **Když je Aleatoria zpracovatelem** (podnikatel používající API pro vlastní uživatele): informujeme správce bez zbytečného odkladu, ohlášení úřadu provádí správce (`docs/legal/DPA.md`, §7). Kontakt pro hlášení bezpečnostních problémů: **support@aleatoria.io**. --- ## 13. Související dokumenty * `docs/AI_ACT.md` — transparentnost obsahu generovaného AI (nařízení (EU) 2024/1689, čl. 50). * `docs/legal/PRIVACY.cs.md` / `PRIVACY.en.md` — zásady ochrany osobních údajů pro uživatele. * `docs/legal/TERMS.cs.md` / `TERMS.en.md` — obchodní podmínky. * `docs/legal/DPA.md` — zpracovatelská smlouva (EN) pro zákazníky, kteří jsou správci. * `docs/legal/SUBPROCESSORS.md` — seznam zpracovatelů a dalších zpracovatelů. * `docs/DEPLOY.md` §15 — jak se EU residency nasazuje a ověřuje. * `infra/terraform/README.md` — mapa zdrojů, lokací a IAM.