Privacy by Design — 2026

Sikkerhed er en chokepunkt-strategi

Vi stoler ikke på, at hver enkelt funktion husker at scrubbe PII. Vi bygger ét fælles chokepunkt, alle AI-kald skal igennem — og logger alt.

Syv chokepunkter du kan revidere

Alle vores AI- og dataadgange går igennem disse syv lag. Skoleadmin kan se loggen for egne elever; the platform administrator ser kun pseudonymiseret metadata og skal igennem en audit-logget break-glass-procedure (med skriftlig begrundelse og forældersamtykke for under 13 år) for at læse identificerende data.

AI PII-chokepunkt (aiSafeFetch)

Hver eneste LLM-kald — uden undtagelse — passerer aiSafeFetch. CPR, NHS-numre, e-mails og elevnavne scrubbes eller aliases til 'Elev A' før prompten forlader vores serverless funktion. Detekteres ægte PII, blokeres kaldet med HTTP 422 — det leverer aldrig elevdata til en tredjepart.

AI-prompt-audit (180 dages retention)

Tabellen ai_prompt_audit logger funktion, model, hashet bruger-id, antal blokerede PII-hits og berørte elev-ID'er. Daglig pg_cron sletter alt over 180 dage. Skoleadmin kan trække audit for egne elever; the platform administrator ser kun pseudonymiseret metadata — aldrig prompt-indhold med personoplysninger.

Default-deny PII for vores eget personale

Skoleelev-personale (inkl. the platform administrator) ser som udgangspunkt kun et pseudonymiseret brugerkatalog: UUID, rolle og skole-præfiks — ingen navne, ingen e-mails. For at se identificerende data skal en break-glass-the system kaldes med skriftlig begrundelse (min. 20 tegn), parental-consent-tjek for under 13 år, og forældre/DPO modtager automatisk en notifikation (child_data_breakglass_notice). Tilgang udløber ved session-slut.

Zero-retention hos OpenAI & Gemini

Vi sender altid store:false til OpenAI og bruger den hashede pseudo-bruger som identifier. OpenAI og Google opbevarer hverken prompts eller svar til træning under vores enterprise-DPA.

Sensitive-access-log

Hver læsning af psykologjournal, helbredsdata, bekymringssager og SEN-akkommodationer passerer sikrede server-funktioner, der logger formål, bruger og scope. Skolens DPO kan trække auditen kvartalsvis.

Forældresamtykke for under 13 år

child_data_consents håndterer 6 samtykketyper (AI-personalisering, billede-/lydoptagelse, leaderboards, peer-deling, marketing, eksternt eksport). useChildAgeGate blokerer AI-personalisering, indtil forælderen har bekræftet via /parent/children/:id/samtykker.

Security-invoker views & adgangskontrol

Alle views er bygget med security_invoker=true, så Row-Level Security håndhæves som om brugeren læste direkte. Roller (8 stk.) og scopes er central konfigureret — ingen view kan smutte uden om adgangskontrol.

Sikkerheds-baseline

AES-256 i hvile, TLS 1.3 i transit

EU-hosting (Falkenstein, DE) + cross-region failover + S3-backup i Helsinki, FI (30 dage)

MFA obligatorisk for admin-roller

Private buckets med signed links

24 mdr. admin_audit_log + daglig pg_cron rotation

Brudvarsel < 24 t til skolen (GDPR Art. 33)

Til DPO'en

Brug for dokumentationen?

Vi leverer DPIA, databehandleraftale og Privacy by Design-erklæring (Art. 25) sammen med kontrakten.