Privatliv og databeskyttelse
Datatyper, behandlingsformål, opbevaring og roller i den aktuelle platform.
Dette dokument beskriver den aktuelle databehandling i beskæftigelse.dk.
Hvem står bag
Beskæftigelse.dk drives af Nordanalyse, CVR 39620189. Kontakt: kontakt@beskaeftigelse.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
Kompetenceprofil
Kompetenceprofil hjælper en borger og en konsulent med at sætte ord på erfaring og undersøge mulige jobretninger. Værktøjet træffer ingen afgørelser om arbejde, ydelser eller egnethed og rangordner ikke personer.
PDF- og Word-filer læses lokalt i browseren. Før et AI-kald ser brugeren teksten og skal gennemgå den, fjerne følsomme oplysninger og bekræfte, at den må deles. Den viste tekst og de valgte kompetencer sendes via beskæftigelse.dk til OpenAI (GPT-5.6 Luna). Fjernelse af navn gør ikke nødvendigvis materialet anonymt. Indsæt ikke CPR, helbredsoplysninger eller andet følsomt indhold.
Vi gemmer ikke filen, teksten, kompetencerne eller AI-udkastene i databasen, chat-historikken eller browserlageret. Profilen findes kun, mens siden er åben, og ryddes ved navigation, genindlæsning eller Start forfra. En hentet PDF opbevares på brugerens egen enhed. Budgetregnskabet gemmer bruger-id, model, tokenantal og pris uden CV-indhold.
OpenAI-kald bruger store: false. API-indhold bruges som udgangspunkt ikke
til træning, men standardvilkårene tillader op til 30 dages sikkerhedsopbevaring
og modelcaching. Vi lover derfor ikke nulopbevaring hos OpenAI. Se
OpenAI datakontroller.
En konsulent skal følge sin arbejdsplads' godkendte rammer, behandlingsgrundlag og leverandøraftaler. Brugerens bekræftelse erstatter ikke disse krav. Se den samlede beskrivelse af Kompetenceprofil.
Excel-tilføjelsen (beskæftigelse.dk for Excel)
Tilføjelsen "beskæftigelse.dk" til Microsoft Excel (BESK-funktionerne og sidepanelet) behandler data efter samme regler som webplatformen og tilføjer ikke nye datakategorier:
- Login sker med brugerens beskæftigelse.dk-konto via OAuth med PKCE. En
kortlivet adgangsnøgle (15 minutter) og en roterende fornyelsesnøgle
opbevares i Office-tilføjelsens eget lager på brugerens maskine og sendes
med hver forespørgsel. Se
docs/addin/auth.md. - Fra Excel sendes formlernes egne argumenter (måling, område, periode,
dimension), sidepanelets søgetekst og valgte skabelon- og
tabelopstillinger. Al kommunikation går til beskæftigelse.dk over HTTPS
(
/api/addin/v1/*). - Regnearkets celleværdier sendes ikke til beskæftigelse.dk. Panelets
statusrapport (bridge) indeholder efter kontrakt kun antal, målings-id'er
og tidsstempler, aldrig celleindhold
(
src/lib/addin/bridge-contract.ts); rapporten regnes som forældet efter 150 sekunder og slettes senest en time efter sidste livstegn. - Serveren kontrollerer identitet, organisationsadgang og forbrug ved hver forespørgsel.
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 til at fortolke og forklare offentlige arbejdsmarkedsdata (Jobindsats.dk / STAR, Danmarks Statistik, KRL og CVR). Kompetenceprofil er en særskilt udvidelse, som behandler brugerens gennemgåede erfaringstekst til et personligt arbejdsark som beskrevet ovenfor. AI træffer ikke automatiske afgørelser om enkeltpersoner. Den hidtidige aggregate-only vurdering omfatter ikke automatisk dette nye formål.
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 sletter konto og ejet indhold; det minimale tekniske AI-regnskab følger undtagelsen nedenfor (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)
- Sentry (inaktiv pilotkandidat) — valgfri manuel serverfejl-rapportering i godkendt Preview; kun fast fejlkategori/-besked, release/buildmetadata og kendte kompilerede JavaScript-offsets. Ingen bruger-/requestkontekst, browsertelemetri, oprindelig fejltekst eller kildeindhold eksporteres i eventpayloaden. Source-map-upload er slået fra. Retention, residency og aftalegrundlag er ikke verificeret af kandidaten; ingen production-aktivering påstås. Se pilotens scope og verifikation.
- 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
Minimalt AI-regnskab efter kontosletning
Ved kontosletning bevares fælles månedlige udgiftssummer uden bruger- eller mål-id, så sletning ikke nulstiller platformens forbrugsgrænse. Et allerede igangsat, uafklaret AI-kald kan beholde den nødvendige tekniske afregningstilstand, men ingen samtale, brugerbudgetfelter eller præcise oprettelsestider. Et opakt afregnings-id kan stadig korreleres med driftslogs. Afsluttede kvitteringer er eligible til daglig oprydning fra UTC-afregningsdato + 2 dage; uafklarede kald beholder reservationen indtil afstemning. Dette tekniske retry-vindue er ikke en juridisk vurdering. Se slette- og afregningskontrakten.