# Playground AI Act Integration — Sesjonplan ## Kontekst Playground (`playground/azure-ai-playground.html`, 1850L) har allerede en `ai-act-high` checkbox i Step 1 (intake) og Step 2 (filter). Når den er valgt, vises en gul "AI Act høy-risiko" compliance-sjekk i Step 3. Men dette er bare en passiv indikator — ingen risikonivåer, ingen rollevisning, ingen utvidet eksport. Denne sesjonen utvider Step 3 og Step 5 med AI Act-bevissthet. ## Hva som finnes i dag | Sted | Linje | Innhold | |------|-------|---------| | Step 1 (intake) | L356 | `` | | Step 2 (filter) | L455 | `` | | Step 3 (`getComplianceStatus()`) | L1449-1451 | Gul status-badge: `{ label: 'AI Act hoy-risiko', status: 'yellow' }` | | Step 5 (prompt) | L1639 | Compliance-krav inkluderer `ai-act-high` som tekst | | Step 5 (JSON) | L1765 | `compliance: state.intake.compliance` (inkluderer `ai-act-high`) | ## Endring 1: Step 1 — Utvid AI Act-valg fra checkbox til dropdown **Nå:** Én checkbox (`ai-act-high`). **Etter:** Dropdown med 4 risikonivåer + "Ikke vurdert". ```html
``` **State-utvidelse:** ```javascript // I state.intake (rundt L?? i init/state): aiActLevel: '', // '', 'minimal', 'limited', 'high-risk', 'prohibited' aiActRole: '', // '', 'deployer', 'provider', 'deployer-provider' ``` **Ny funksjon:** ```javascript function updateAiActLevel(level) { state.intake.aiActLevel = level; // Synk legacy compliance-array const idx = state.intake.compliance.indexOf('ai-act-high'); if (level === 'high-risk' || level === 'prohibited') { if (idx === -1) state.intake.compliance.push('ai-act-high'); } else { if (idx !== -1) state.intake.compliance.splice(idx, 1); } } ``` **Filter i Step 2 (L455):** Behold eksisterende `ai-act-high` filter — den fungerer allerede. ## Endring 2: Step 3 — Utvidet compliance-sjekk **Nå:** `getComplianceStatus()` (L1410-1454) viser gul badge. **Etter:** AI Act-sjekken blir dynamisk basert på nivå og rolle. Erstatt L1448-1451 med: ```javascript // AI Act const aiLevel = state.intake.aiActLevel; if (aiLevel === 'high-risk') { checks.push({ label: 'AI Act: Høyrisiko (Annex III)', status: 'red' }); checks.push({ label: 'FRIA påkrevd (Art. 27)', status: 'red' }); if (!hasObservability) { checks.push({ label: 'Logging min. 6 mnd påkrevd (Art. 12/26)', status: 'red' }); } } else if (aiLevel === 'limited') { checks.push({ label: 'AI Act: Begrenset risiko', status: 'yellow' }); checks.push({ label: 'Transparensplikt (Art. 50)', status: 'yellow' }); } else if (aiLevel === 'minimal') { checks.push({ label: 'AI Act: Minimal risiko', status: 'green' }); } else if (aiLevel === 'prohibited') { checks.push({ label: 'AI Act: FORBUDT — kan ikke brukes', status: 'red' }); } else if (state.intake.compliance.includes('ai-act-high')) { // Legacy fallback checks.push({ label: 'AI Act høy-risiko', status: 'yellow' }); } ``` ## Endring 3: Step 3 — AI Act anbefalingspanel Etter compliance-listen i `renderConfigure()` (L1396-1404), legg til et AI Act-panel som vises når nivå er satt: ```javascript // Etter complianceHtml i renderConfigure() let aiActHtml = ''; if (state.intake.aiActLevel) { const level = state.intake.aiActLevel; const role = state.intake.aiActRole || 'deployer'; const cmds = []; if (level === 'high-risk') { cmds.push({ cmd: '/architect:classify', desc: 'Bekreft klassifisering' }); cmds.push({ cmd: '/architect:frimpact', desc: 'FRIA (obligatorisk offentlig sektor)' }); cmds.push({ cmd: '/architect:dpia', desc: 'Personvernkonsekvensvurdering' }); cmds.push({ cmd: '/architect:requirements', desc: 'Konkrete Art. 9-27 krav' }); } else if (level === 'limited') { cmds.push({ cmd: '/architect:classify', desc: 'Bekreft klassifisering' }); cmds.push({ cmd: '/architect:transparency', desc: 'Generer Art. 50 transparensnotis' }); } else if (level === 'minimal') { cmds.push({ cmd: '/architect:classify', desc: 'Dokumenter klassifisering' }); } aiActHtml = `

EU AI Act — Neste steg

${cmds.map(c => `
${c.cmd} — ${c.desc}
`).join('')} ${level === 'high-risk' ? '
Frist: 2. august 2026 (GPAI + Annex III)
' : ''}
`; } ``` Inject `aiActHtml` etter compliance-listen i HTML-template. ## Endring 4: Step 5 — AI Act i alle eksportformater ### 4a. Prompt (L1615-1654) Etter compliance-krav-linjen (L1639), legg til: ```javascript if (state.intake.aiActLevel) { prompt += `EU AI Act risikonivå: ${state.intake.aiActLevel}.\n`; if (state.intake.aiActRole) prompt += `Rolle: ${state.intake.aiActRole}.\n`; if (state.intake.aiActLevel === 'high-risk') { prompt += 'NB: Høyrisiko — FRIA (Art. 27) og samsvarsvurdering (Art. 43) kreves.\n'; } } ``` ### 4b. Pipeline (L1657-1687) I `generatePipelineTab()`, legg til AI Act-commands etter standard pipeline: ```javascript // Etter pipeline.commands mapping if (state.intake.aiActLevel === 'high-risk') { cmds += `
EU AI Act compliance
`; const aiCmds = [ { cmd: 'classify', desc: 'Bekreft AI Act-klassifisering' }, { cmd: 'frimpact', desc: 'FRIA — obligatorisk for offentlig sektor' }, { cmd: 'requirements', desc: 'Konkrete deployer/provider-krav' }, { cmd: 'conformity', desc: 'Samsvarsvurdering (Annex IV)' } ]; cmds += aiCmds.map((c, i) => `
+${i + 1}
/architect:${c.cmd}
${c.desc}
`).join(''); } ``` ### 4c. Brief Markdown (L1701-1737) Etter dataresidens-linjen (L1716), legg til: ```javascript if (state.intake.aiActLevel) { md += `**EU AI Act:** ${state.intake.aiActLevel === 'high-risk' ? 'Høyrisiko (Annex III)' : state.intake.aiActLevel === 'limited' ? 'Begrenset risiko' : state.intake.aiActLevel === 'minimal' ? 'Minimal risiko' : 'Forbudt'}\n`; if (state.intake.aiActRole) md += `**Rolle:** ${state.intake.aiActRole}\n`; } ``` Og etter prompt-seksjonen (L1734), legg til en AI Act-seksjon: ```javascript if (state.intake.aiActLevel === 'high-risk') { md += `\n## EU AI Act — Compliance-krav\n\n`; md += `- [ ] FRIA gjennomført (Art. 27) — /architect:frimpact\n`; md += `- [ ] Samsvarsvurdering (Art. 43) — /architect:conformity\n`; md += `- [ ] Transparensnotis (Art. 50) — /architect:transparency\n`; md += `- [ ] Logging min. 6 mnd (Art. 12/26)\n`; md += `- [ ] Menneskelig tilsyn formalisert (Art. 14)\n`; md += `\n**Frist:** 2. august 2026 (GPAI + Annex III høyrisiko)\n`; } ``` ### 4d. JSON Record (L1752-1803) Legg til `aiAct`-objekt i returverdien: ```javascript aiAct: state.intake.aiActLevel ? { riskLevel: state.intake.aiActLevel, role: state.intake.aiActRole || null, requiresFRIA: state.intake.aiActLevel === 'high-risk', requiresConformity: state.intake.aiActLevel === 'high-risk', deadline: state.intake.aiActLevel === 'high-risk' ? '2026-08-02' : null } : null, ``` ## Endring 5: CSS for AI Act-fargekoding Legg til i `