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.