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)
Brug for dokumentationen?
Vi leverer DPIA, databehandleraftale og Privacy by Design-erklæring (Art. 25) sammen med kontrakten.
