Privatliv og databeskyttelse
Datatyper, behandlingsformål, opbevaring og roller i den aktuelle platform.
Privatliv og Databeskyttelse
Dette dokument beskriver den aktuelle databehandling i beskæftigelse.dk.
Scope
- Produkt: arbejdsmarkedsanalyse og AI-assisteret fortolkning
- Målgruppe: danske kommuner og offentlige institutioner
- Formål: dokumentationsgrundlag til GDPR- og indkøbsvurdering
Datakategorier
1) Offentlige arbejdsmarkedsdata
- Kilde: Jobindsats.dk / STAR
- Datatype: aggregerede statistikker (kommune/region/land)
- Persondata: normalt ikke-personhenførbart
2) Brugerindsendt chatindhold
- Input til
POST /api/chat - AI-svar returneres i session og persisteres i
chat_runs chat_runslagrer prompt, AI-svar og tool-trace pr. kørsel; rækken er ejet afuser_id(FK modusers.id,ON DELETE CASCADE)- Adgang via
GET /api/chat/history*er sessions-cookie-gated og filtrerer påuser_id— anonyme kald får 401 - Retention: 30 dage som standard (
RETENTION_CHAT_RUNS_DAYS); slettes automatisk via/api/jobs/retentioncron og kaskadesletter vedDELETE /api/auth/account(right-to-erasure) - Brugeren kan tilgå og eksportere egne kørsler via
/ai/historikog/ai/historik/[id](per-bruger, ownership-scoped)
3) Frivillig feedback (POST /api/chat/feedback)
Felter i chat_feedback:
message_idfeedback(positive/negative)user_query(valgfri)assistant_response(valgfri, trunceret til 2000 tegn)municipality_slug(valgfri)created_at
Behandlingsformål
- Levere analyser og benchmark af arbejdsmarkedsdata
- Forbedre AI-svarkvalitet via frivillig feedback
- Sikre drift, fejlfinding og sikkerhed
AI-behandling og databehandlere
Formål med AI
AI bruges udelukkende til at fortolke og forklare offentlige arbejdsmarkedsdata (Jobindsats.dk / STAR, Danmarks Statistik, KRL og CVR) i et naturligt sprog — for eksempel at opsummere udvikling, sammenligne kommuner og forklare mønstre. AI træffer ikke automatiske afgørelser om enkeltpersoner og bruges ikke til profilering eller sagsbehandling i henhold til GDPR art. 22.
Eksterne AI-databehandlere (underdatabehandlere)
Når en bruger stiller et spørgsmål i chatten, sendes prompt-tekst og den datakontekst, modellen skal bruge, til en ekstern AI-leverandør, der genererer svaret:
- Anthropic (Claude) — primær AI-leverandør for chat-fallback, peer-analyst, synthesizer, research-scout, historiegenerering og videns-prægenerering.
- OpenAI (GPT-5.2) — reserve-/fallback-leverandør samt default chat-provider; behandler prompts og tool-kontekst når en kørsel ikke route'es til Anthropic.
Begge er opført i underdatabehandlerregisteret nedenfor og i docs/public-sector/data-processing-and-subprocessors.md. I hostet drift (Vercel) går alle AI-kald til disse leverandørers API'er. En lokal abonnements-tilstand (Christians egne CLI-værktøjer) findes kun i lokale udviklingsmiljøer og er ikke tilgængelig i hostet drift.
Opbevaring af prompts (retention)
- Chat-forløb (prompts og AI-svar) gemmes i tabellen
chat_runsog opbevares som standard i ca. 30 dage (RETENTION_CHAT_RUNS_DAYS), hvorefter de slettes automatisk via/api/jobs/retention-cron. De kaskadesletter desuden straks vedDELETE /api/auth/account(retten til sletning). - Efterspørgsels-loggen (demand-ledger) registrerer kun hvad produktet ikke kunne besvare som tællere (kilde, udfald, metric-id, geografi) — den gemmer ikke selve prompt-teksten.
- Selve AI-leverandørernes egen logning/opbevaring er leverandørstyret og fremgår af underdatabehandlerregisteret.
Retention og sletning (aktuel baseline)
chat_runs: 30 dage som standard (konfigurerbar viaRETENTION_CHAT_RUNS_DAYS); slettes via/api/jobs/retentioncron og kaskadesletter vedDELETE /api/auth/accountchat_feedback: 180 dage som standard (konfigurerbar viaRETENTION_CHAT_FEEDBACK_DAYS)sync_runs: 365 dage som standarddata_revisions: 365 dage som standardemail_subscriptions/report_schedules(ikke-bekræftede): 14 dage (RETENTION_UNVERIFIED_SUBSCRIPTIONS_DAYS); aktive rækker hard-deletes ved afmelding viaunsubscribe_token- Infrastruktur-/platformlogs: leverandørstyret retention
Automatisering:
- Retentionjob:
npm run retention:run(src/scripts/run-retention.ts) og/api/jobs/retention(cron) - Right-to-erasure:
DELETE /api/auth/accountkræver re-autentifikation og kaskadesletter alle ejede rækker (sesrc/lib/data-governance/account-erasure.ts) - Targeted deletion workflow:
src/scripts/delete-chat-feedback.ts(dry-run default, guardrails)
Detaljeret tabelinventar med slettevej pr. tabel: docs/public-sector/data-inventory-and-retention.md.
Datadeling og underdatabehandlere
Tekniske leverandører (afhænger af konkret deployment) — denne liste spejler 1:1 underdatabehandlerregisteret i docs/public-sector/data-processing-and-subprocessors.md (samme rækkefølge, samme navne). npm run docs:validate håndhæver pariteten via checkSubprocessorParity:
- Vercel — hosting/runtime (webapp + edge/runtime)
- Vercel Blob — objektlagring (default public bucket) for billed-uploads i dashboard-billedblokke
- Turso/libSQL — databaselagring for tabeller i
src/lib/schema.ts - Anthropic — AI-inferens (chat fallback, peer-analyst, synthesizer brief-generator, research-scout, story-generation, knowledge pre-generation)
- OpenAI — AI-inferens (default chat-provider
GPT-5.2; behandler prompts og tool-kontekst når chat ikke route'es til Anthropic) - Resend — transaktionel e-mail (bekræftelses- og digest-/rapportmails; double-opt-in)
- GitHub (Actions) — CI/CD automation (build, tests, sikkerhedsscanning, SARIF)
Offentlig datakilde (ikke underdatabehandler for denne løsning):
- Jobindsats.dk / STAR
Se detaljeret register med datakategorier, geografi, overførselsgrundlag og sikkerhedskontrol pr. leverandør:
docs/public-sector/data-processing-and-subprocessors.md
Dataminimering
- Brugerkonti understøttes (autentificering via JWT-cookie).
chat_runsejes afuser_idog purges efter 30 dage;email_subscriptionsogreport_scheduleskræver double-opt-in og slettes hard ved afmelding. - Ingen tracking-pixel og ingen tredjeparts-analytics. Vercel Analytics er bevidst fjernet (S-017) for at undgå at kommune- og dashboard-id'er videregives til processor-side analyseinfrastruktur.
- Vercel Blob bruges til billed-uploads i dashboard-billedblokke. Hver upload registreres med
user_idi tabellenuploads;DELETE /api/upload?pathname=…(ejertjekket) og right-to-erasure cascade fjerner både databaserækken og det underliggende blob-objekt. Privat namespace er feature-flag-bundet (BLOB_PRIVATE_UPLOADS_ENABLED) og default off. - Feedbackfelter er frivillige og begrænsede
Sikkerhed og hændelser
- Sikkerhedsproces og SLA:
SECURITY.md - Driftsrunbook:
docs/public-sector/operations-runbook.md
Controlleransvar
Endelig hjemmel, oplysningspligt og håndtering af registreredes rettigheder fastlægges af den konkrete dataansvarlige myndighed i deploymentkonteksten.
Referencer
- DPIA vejledning (Datatilsynet)
- Brud på persondatasikkerhed (Datatilsynet)
docs/public-sector/dpia-summary.mddocs/public-sector/data-inventory-and-retention.mddocs/public-sector/data-retention-and-deletion.md