GDPR u l-Protezzjoni tad-Data
Privatezza mid-Disinn
qr3.app huwa mibni biex ikun konformi mal-GDPR mill-qiegħ nett:
- Psewdonimizzazzjoni tal-IP — L-indirizzi IP jiġu kkonvertiti immedjatament f’psewdonimi HMAC-SHA-256 tal-jum UTC fl-Edge Worker. L-IP oriġinali qatt ma jinħażen; il-psewdonimu jibqa’ data personali.
- Minimizzazzjoni tad-Data — Tinġabar biss id-data meħtieġa għall-operat.
Privacy-API
Sommarju tad-Data (Art. 15 GDPR)
GET /v1/account/privacy — Jirritorna sommarju tad-data kollha maħżuna.
curl https://qr3.app/v1/account/privacy \ -H "Authorization: Bearer qr3_sk_..."Response:
{ "data": { "workspace_id": "ws_xxx", "organization_id": "org_xxx", "account": { "name": "Alex Example", "locale": "en", "created_at": "2026-01-15T09:00:00.000Z" }, "stored_data": { "qr_codes": 42, "scan_records": 15000, "dpp_scan_records": 3200, "dashboard_activity_records": 0, "dashboard_document_activity_records": 36, "api_operation_records": 180, "webhook_delivery_records": 640, "api_keys": 2, "webhooks": 1, "dpp_passports": 12, "dpp_documents": 30, "files": 4, "gs1_identifiers": 2, "gs1_verification_requests": 1, "code_comments": 5, "audit_log_entries": 0, "dpp_import_jobs": 1, "workspace_members": 3, "scan_quota_alerts": 1 }, "gdpr_rights": { "access": "GET /v1/account/privacy", "export": "GET /v1/account/export", "erasure": "DELETE /v1/account", "consents": "GET /v1/account/privacy/consents" }, "data_processing": { "ip_storage": "Purpose-separated HMAC-SHA-256 UTC-day IP pseudonym — pseudonymous personal data", "scan_retention": "90 days by default", "usage_retention": "90 UTC days", "webhook_delivery_retention": "90 UTC days", "pii_in_export": true, "erasure": "DELETE /v1/account erases the person's account: organizations they own with all workspaces and data (unless another org admin takes them over), their memberships in other organizations, their login and their Stripe customer. A running subscription ends immediately, without refund.", "backup_retention": "Erased rows stay restorable from the database backups (Cloudflare D1 Time Travel) for up to 30 days, then they are gone.", "billing_records": "Invoices stay with Stripe for the statutory retention period (7 years, § 132 BAO)." } }, "meta": { "request_id": "req_xxx" }}stored_data jgħodd l-entrati maħżuna. scan_records huma skens ta’ QR codes, dpp_scan_records huma talbiet lil passaporti tal-prodott permezz tar-resolver DPP pubbliku. It-tnejn fihom il-psewdonimu tal-IP.
dashboard_activity_records u dashboard_document_activity_records jgħoddu l-jiem li fihom membru fetaħ id-dashboard (żewġ tabelli), api_operation_records il-kontaturi ta’ kuljum tat-talbiet għal kull API key, operazzjoni u riżultat, u webhook_delivery_records it-tentattivi ta’ kunsinna tal-webhooks, inklużi dawk ta’ webhooks imħassra. Ebda wieħed minnhom ma jaħżen indirizz IP jew User-Agent; il-log tal-kunsinna, madankollu, jaħżen il-payload tal-avveniment u l-ewwel kilobyte (1 KB) tat-tweġiba tar-riċevitur. L-erbgħa kollha jitħassru wara 90 jum UTC (usage_retention, webhook_delivery_retention).
account isemmi l-persuna wara t-talba — fid-dashboard il-persuna li tkun illoggjata, inkella l-persuna li ħolqot il-key — bl-email, l-isem, il-lingwa u d-data tal-ħolqien; għal Publishable Key il-valur huwa null. Il-kontaturi l-oħra jkopru kull tabella oħra b’data tal-kont: passaporti tal-prodott, dokumenti DPP, fajls, identifikaturi GS1, kummenti, entrati tal-awditu, tħaddim ta’ importazzjonijiet, membri tal-workspace u l-avviżi tal-kwota tal-organizzazzjoni (scan_quota_alerts). Ir-ringieli mħassra b’mod loġiku jingħaddu, għax għadhom maħżuna. erasure, backup_retention u billing_records jiddeskrivu x’iħassar DELETE /v1/account u x’jibqa’ għal xi żmien; pii_in_export huwa true għax l-esportazzjoni ssemmi l-persuna (email, isem) — il-psewdonimi tal-IP qatt ma joħorġu mid-database.
Esportazzjoni tad-Data (Art. 20 GDPR — Portabbiltà tad-Data)
GET /v1/account/export — Iniżżel id-data kollha bħala fajl JSON.
curl https://qr3.app/v1/account/export \ -H "Authorization: Bearer qr3_sk_..." \ -o my-data.jsonL-esportazzjoni tinkludi:
- Il-QR codes kollha (inkluż dawk imħassra)
- Statistika tal-iskannjar aggregata (l-ebda hash tal-IP mhux ipproċessat)
- Talbiet DPP aggregati għal kull passaport tal-prodott (
dpp_scan_aggregates, lanqas b’hash tal-IP) - Statistika tal-użu bħala aggregati (
dashboard_activity_aggregates,api_operation_aggregates): jiem attivi u n-numru ta’ utenti attivi għal kull kanal tad-dashboard, kontaturi tat-talbiet għal kull operazzjoni u riżultat — mingħajr ID tal-utenti u taċ-ċwievet - Tentattivi ta’ kunsinna tal-webhooks għal kull webhook u tip ta’ avveniment (
webhook_delivery_aggregates), mingħajr payload u tweġiba - Il-persuna wara t-talba (
account), l-organizzazzjoni (organization; l-indirizz tal-kontijiet u tan-notifiki biss għall-amministraturi tal-organizzazzjoni) u l-workspace (workspace) - Passaporti tal-prodott, metadata ta’ dokumenti DPP u fajls (mhux il-fajls infushom), identifikaturi GS1, talbiet għall-verifika tagħhom u tħaddim ta’ importazzjonijiet (
dpp_passports,dpp_documents,files,gs1_identifiers,gs1_verification_requests,dpp_import_jobs) - Kummenti mingħajr oqsma tal-awtur (
code_comments), entrati tal-awditu bħala aggregati (audit_log_aggregates) u membri skont ir-rwol (member_aggregates) - API keys mingħajr ID u hash (
api_keys), webhooks mingħajr URL u sigriet (webhooks) u l-avviżi tal-kwota tal-organizzazzjoni (scan_quota_alerts) - Timestamp tal-ħolqien u tal-modifika
Il-Publishable Keys (qr3_pk_) jirċievu 403: il-fajl fih l-indirizzi tad-destinazzjoni u n-noti tal-kodiċijiet kollha.
Ħassar il-Kont (Art. 17 GDPR — Dritt li Tinsesa)
DELETE /v1/account — Iħassar il-kont tal-persuna wara t-talba, minnufih u b’mod irriversibbli: fid-dashboard il-persuna li tkun illoggjata, inkella l-persuna li ħolqot il-key. Talba għat-tħassir permezz ta’ email twassal għall-istess tħassir: l-operatur iħassar il-login ma’ Clerk, u mbagħad qr3 iħassar il-kont.
curl -X DELETE https://qr3.app/v1/account \ -H "Authorization: Bearer qr3_sk_..."X’jiġri:
- L-organizzazzjonijiet li huma tal-persuna jitħassru bil-workspaces, il-kodiċijiet, il-passaporti tal-prodott, il-fajls, l-istatistika u l-logs kollha tagħhom, inklużi l-fajls tagħhom fil-ħażna. Jekk organizzazzjoni bħal din ikollha amministratur attiv ieħor tal-organizzazzjoni, minflok jieħu f’idejh dak bl-itwal anzjanità — flimkien mad-data u l-abbonament.
- Abbonament: abbonament attiv jintemm minnufih, mingħajr rimborż proporzjonali u mingħajr fattura finali; imbagħad jitħassar il-klijent ta’ Stripe. Il-fatturi jibqgħu ma’ Stripe għall-perjodu legali ta’ żamma (7 snin, § 132 BAO).
- Timijiet: is-sħubiji tal-persuna f’organizzazzjonijiet oħra jintemmu; dawk it-timijiet iżommu d-data tagħhom. Il-kummenti tal-persuna ma jsemmu l-ebda awtur aktar, l-entrati tal-awditu tagħha jitilfu l-psewdonimu tal-IP u l-user agent, u l-API keys li ħolqot hemm jiġu revokati.
- Il-persuna: il-login (Clerk) u r-rekord tal-utent jitħassru.
It-tweġiba hija 200 b’status: "completed" u l-kontaturi organizations_deleted, organizations_transferred, memberships_removed u login_deleted. Għal organizzazzjonijiet kbar ħafna talba waħda ma tkunx biżżejjed: it-tweġiba mbagħad tkun 202 b’status: "in_progress", u t-tħassir jitlesta waħdu fi ftit sigħat.
Jeħtieġ Secret Key jew Test Key b’dritt tal-kitba, jew sessjoni tad-dashboard (kwalunkwe rwol, għax huwa l-kont tal-persuna stess). Il-Publishable Keys u l-keys li jaqraw biss jirċievu 403, key mingħajr persuna warajha (created_by = 'system') tirċievi 409. 503 ifisser li l-iskjerament m’għandux sigriet li jeħtieġ it-tħassir; xejn ma tħassar.
Ġestjoni tal-Kunsens
GET /v1/account/privacy/consents — Ikseb il-kunsensi attwali.
POST /v1/account/privacy/consents — Aġġorna l-kunsensi.
# Ikseb il-kunsensi attwalicurl https://qr3.app/v1/account/privacy/consents \ -H "Authorization: Bearer qr3_sk_..."
# Itfi l-emails tal-marketingcurl -X POST https://qr3.app/v1/account/privacy/consents \ -H "Authorization: Bearer qr3_sk_..." \ -H "Content-Type: application/json" \ -d '{ "marketing_emails": false, "analytics": true, "product_updates": true }'Kampi tal-Kunsens:
| Kamp | Default | Deskrizzjoni |
|---|---|---|
marketing_emails | false | Newsletters u emails promozzjonali |
analytics | true | Statistika tal-użu aggregata |
product_updates | true | Aġġornamenti tal-prodott u changelogs |
Il-bidla tal-kunsensi teħtieġ drittijiet tal-kitba: ir-rwol viewer u l-Publishable Keys jirċievu 403.
Implimentazzjoni Teknika tal-GDPR
Psewdonimizzazzjoni tal-IP (Art. 25 GDPR)
Talba HTTP → Cloudflare Edge Worker ↓Intestatura CF-Connecting-IP → HMAC-SHA-256(IP_HASH_SALT, għan, jum UTC, IP) ↓ip_hash (psewdonimu ta' kuljum) → database D1 ↓L-IP oriġinali qatt ma jinħażenIP_HASH_SALT huwa sigriet ewlieni li jdum fit-tul; l-għan u l-jum UTC joħolqu awtomatikament psewdonimi ta’ kuljum separati. Psewdonimi minn jiem UTC differenti mhumiex ugwali direttament, iżda min iżomm is-sigriet jista’ jerġa’ jikkalkula kandidat IP magħruf għal jum speċifiku. Ma jintuża l-ebda melħ ta’ kuljum f’KV jew rotazzjoni manwali ta’ kuljum.
Żamma tad-Data (Awtomatizzata)
| Pjan | Żamma (Retention) |
|---|---|
| Il-pjanijiet kollha | 90 jum |
L-istatistika tal-użu (attività tad-dashboard, kontaturi tal-użu tal-API) u l-logs tal-kunsinna tal-webhooks jinżammu wkoll għal 90 jum UTC: il-jum UTC kurrenti flimkien mad-89 jum ta’ qabel. L-istess cron job ta’ kuljum iħassar ringieli aktar qodma (purgeOldDashboardActivity, purgeOldApiOperationUsage, purgeOldWebhookDeliveries).
DPA tas-Sub-Proċessur
Cloudflare, Inc. jipproċessa d-data bħala proċessur tad-data. Id-DPA hija disponibbli fuq cloudflare.com/cloudflare-customer-dpa.
Cloudflare jipproċessa d-data b’indikazzjoni tal-lokalità lejn ir-reġjun tal-UE (fost l-oħrajn Frankfurt); ġurisdizzjoni tal-UE garantita b’kuntratt bħalissa mhijiex ibbukkjata. Peress li Cloudflare, Inc. hija bbażata fl-Istati Uniti, il-Klawżoli Kuntrattwali Standard (SCCs) skont l-Art. 46 tal-GDPR japplikaw bħala l-bażi għat-trasferiment.
Kuntatt
- Uffiċjal għall-Protezzjoni tad-Data: [email protected]
- Ftehim dwar l-Ipproċessar tad-Data (DPA): [email protected] (fuq talba)
- Politika tal-Privatezza: qr3.app/de/legal/datenschutz