Specifikation

Specifikation: Skoladmin flytta till V2

Gäller version 3 (run 037b1402). v1/v2 hade ett bredare rollscope med downstream-vyer — deras leveranser beskrivs i 1/README.md och 2/README.md. Per körningens extra instruktioner omfattar v3 endast administrationsgränssnittet för rektor/skoladmin och organisationsadmin.

Variant

Vklass V2 (vklassv2). Vid konflikt med Modern vinner V2.

Roller

  • Rektor/skoladmin (rektor.html + sektionssidor med ?roll=rektor) — Magnus Widén, Proximaskolan. Ser skolscopade grupper (Användare, Klasser & grupper, Skolan, Bedömning, Kommunikation, Import & synk) för sin skola. Ser INTE Organisation-gruppen.
  • Organisationsadmin (admin.html + sektionssidor utan rollparameter) — Ingrid Sundström, Nordängens kommun. Ser allt ovan för alla skolor i organisationen (skolväljare) plus Organisation-gruppen (inloggning, samtycken, massutskick, övrigt).

Elev-, lärar- och vårdnadshavarvyer ingår inte i denna epik (v3). De downstream-vyer som byggdes i v2 länkas som historik från 3/index.html.

Sidor

Sida Grupp Kontexter
index.html Rollval
rektor.html Adminstart (rektor) rektor
admin.html Adminstart (orgadmin) orgadmin
admin-anvandare.html Användare rektor + orgadmin
admin-klasser.html Klasser & grupper rektor + orgadmin
admin-skolan.html Skolan rektor + orgadmin
admin-bedomning.html Bedömning rektor + orgadmin
admin-kommunikation.html Kommunikation rektor + orgadmin (org-flikar endast orgadmin)
admin-import.html Import & synk rektor + orgadmin
admin-organisation.html Organisation endast orgadmin (rektor får behörighets-tomläge)

Användningsfall (UC)

UC-1: Navigera nya V2-adminmenyn och legacy-bryggan

  • Aktör: Rektor/skoladmin, organisationsadmin.
  • Förutsättning: Användaren har administrativ behörighet (skola resp. organisation).
  • Flöde:
    1. Användaren öppnar sin adminstartsida.
    2. Systemet visar de grupperade adminområdena per intent-spec §3 med länkar till sektionssidorna.
    3. Drawern innehåller "Gamla Vklass Admin" (LegacyAdminUrl-brygga) och "Stäng Vklass Admin".
  • Resultat: Användaren når alla migrerade admindelar utan att lämna V2, och förstår att V1-bryggan finns kvar tills alla etapper är klara.
  • Acceptanskriterier:
    • Gruppkorten/menyn visar Användare, Klasser & grupper, Skolan, Bedömning, Kommunikation, Import & synk (+ Organisation för orgadmin) samt not om befintliga grupper (Export, Mallar, Praktik).
    • "Gamla Vklass Admin" öppnar en förklaringsdialog om LegacyAdminUrl (ingen riktig V1-yta).
    • Rena Vklass-interna delar markeras "Kvar i V1/internt" (flik på översikten).

UC-2: Administrera användare (skolscopat)

  • Aktör: Rektor/skoladmin, organisationsadmin.
  • Förutsättning: En skola är vald (orgadmin väljer via skolväljaren; rektors skola är låst).
  • Flöde:
    1. Användaren öppnar Användare och växlar mellan flikarna Elever/Personal/Vårdnadshavare.
    2. Användaren söker på namn/personnummer/klass och öppnar en användare.
    3. Redigeringsdialogen visar synkade fält låsta med förklaring och kontaktfält redigerbara; Spara ger kvittens (auditloggas via ActionAuditLog i produktion).
    4. "Lägg till användare" visar synkvarning (excludeFromSync).
    5. Underhållsverktygen Återställ lösenord och Godkänn porträtt nås från sidan.
  • Resultat: Rektorn kan sköta användaradministration i V2 med korrekta synk-låsregler.
  • Acceptanskriterier:
    • Minst 10 rader per flik på Proximaskolan; vårdnadshavare visas med barnkopplingar.
    • Låsta fält har lås-markering + förklaring; Spara ger kvittens i live region.
    • Skolvalet scopar listorna (orgadmin); rektor ser endast sin skola.

UC-3: Administrera klasser och kursgrupper

  • Aktör: Rektor/skoladmin, organisationsadmin.
  • Flöde:
    1. Användaren öppnar Klasser & grupper och växlar mellan flikarna Klasser/Kursgrupper.
    2. Synkade klasser visas låsta för strukturändring; manuella grupper/deltagare markeras.
    3. Detaljdialogen förklarar AllowManualCourseparticipants och excludeFromSync.
  • Resultat: Låsregler mot synken är synliga och begripliga.
  • Acceptanskriterier:
    • Minst 10 klasser och 10 kursgrupper på Proximaskolan; tomläge med förklaring för skolor utan data.
    • Käll-badges (Synkad/Manuell/Undantagen) på raderna.

UC-4: Administrera Skolan-gruppen

  • Aktör: Rektor/skoladmin, organisationsadmin.
  • Flöde:
    1. Användaren öppnar Skolan och ser skoluppgifter, nyheter, matsedel, ansökningskategorier och lediga dagar.
    2. Användaren söker i länktabellen (mainMenu) och öppnar en länk.
    3. Detaljdialogen visar målgruppsflaggor, OpenInNewWindow, sortering och cache-not mot MainWeb.
  • Resultat: Skolans innehåll och länkar administreras samlat i V2.
  • Acceptanskriterier:
    • Minst 10 länkar med målgruppstaggar; sök filtrerar tabellen med live region-räkning.
    • Matsedeln visar leverantörsnot (Skolmaten/Mashie/Matilda per skolkonfiguration).

UC-5: Skicka utskick och hantera kommunikation

  • Aktör: Rektor/skoladmin (utskick, blockerade adresser), organisationsadmin (även org-nyheter, delade dokument).
  • Flöde:
    1. Användaren väljer mottagarurval (Alla utom vårdnadshavare / Endast lärare / Endast elever / Endast vårdnadshavare / Endast rektorer) och en eller flera skolor.
    2. Mottagarräknaren uppdateras; användaren väljer kanal (e-post och/eller SMS med kostnadsinfo) och skriver rubrik + meddelande.
    3. Ogiltig submit visar valideringssammanfattning; giltig submit visar bekräftelsedialog med summering; bekräftelse ger kvittens och en rad i utskickshistoriken.
  • Resultat: Utskicksflödet från V1 (MailUsers) fungerar i V2 med kvittens.
  • Acceptanskriterier:
    • Mottagarurvalen matchar V1:s värden (K2 i 3/research-notes.md).
    • Validering pekar på fält via länkar; kvittens visas i live region + historiktabellen uppdateras.
    • Blockerade e-postadresser listas (10+ rader); org-flikar visas endast för orgadmin.

UC-6: Konfigurera bedömning

  • Aktör: Rektor/skoladmin, organisationsadmin.
  • Flöde:
    1. Användaren öppnar Bedömning och växlar mellan Standardgrupper/Standardfraser/Förhandsomdömen/Inställningar.
    2. Standardfraser listas per grupp med sortering; förhandsomdömen visas per kursgrupp och period.
    3. Inställningsfliken visar flytten av befintliga bedömningsinställningar (org-nivå).
  • Resultat: Omdömeskonfigurationen från V1 IUP-sidan är samlad i V2.
  • Acceptanskriterier:
    • Minst 10 standardfraser och 10 förhandsomdömesrader; detaljdialog per rad.

UC-7: Manuell import med synkvakt

  • Aktör: Rektor/skoladmin, organisationsadmin.
  • Flöde:
    1. Användaren väljer skola; för skola med aktiv extern synk spärras importen med förklaring.
    2. För tillåten skola: mall-nedladdning, uppladdning, förhandsgranskning (Ny/Ändrad/Borttagen) med filter.
    3. Bekräfta import visar förklaringsdialog (sp_Import_*-familjen).
    4. Exkluderade från synk listas.
  • Resultat: Endast manuell import migreras; externa synkjobb pekas ut som kvar i V1.
  • Acceptanskriterier:
    • Vakt demonstreras med Evidenskolan (spärrad) vs Proximaskolan (tillåten).
    • Minst 10 förhandsgranskningsrader + 10 exkluderade.

UC-8: Administrera organisationen (endast orgadmin)

  • Aktör: Organisationsadmin.
  • Flöde:
    1. Orgadmin öppnar Organisation och ser inloggningsval (användarnamn per användartyp, mobilt BankID, V2-redirect, alternativ inloggningstext) och org-inställningar.
    2. Samtyckesfliken listar samtycken med scope, giltighetstid, AllMustAnswer och aggregerad svarsstatus.
    3. Massutskicksfliken visar antal utan inloggningsuppgifter per användartyp och kanaler, som villkorad målbild (org-inställning).
    4. Rektor som öppnar sidan får behörighets-tomläge ("saknar behörighet").
  • Resultat: Huvudmannens delar är samlade och rollskyddade.
  • Acceptanskriterier:
    • Minst 10 samtyckesrader med svarsstatus; interna fält markerade "endast Vklass-personal".
    • ?roll=rektor på sidan visar behörighetsvakt i stället för innehåll.

UC-9: Demonstrera a11y- och V2-komponentkontrakt

  • Aktör: Båda rollerna.
  • Flöde:
    1. Användaren navigerar med skip-links och tangentbord.
    2. Tabs, filterchips, sök och dialoger uppdaterar ARIA-state i samma kodväg som visuell state.
    3. Dialoger öppnas via shared window.vklassDialogManager.openDialog(id, opener) och återställer fokus.
  • Resultat: Mockupen visar tillgängliga V2-mönster för hela adminskalet.
  • Acceptanskriterier:
    • Skip-links #main-menu + #main-content; dialoger med role="dialog", aria-modal, aria-labelledby, focus-lifecycle-annotering.
    • Feature-CSS använder inte @media (prefers-color-scheme: dark).

Datamodell (v3-tillägg — bakåtkompatibla nycklar i delad feature-JSON)

  • Utskick: id, subject, audience, schools, channels, sentAt, recipients, status.
  • BlockeradAdress: id, email, reason, blockedAt, source.
  • OrgNyhet: id, title, published, units, status.
  • DelatDokument: id, name, type, updated, audience.
  • Standardgrupp: id, name, sort, phraseCount. Standardfras: id, group, text, sort.
  • Förhandsomdöme: id, courseGroup, period, status, count, teacher.
  • Samtycke: id, title, scope, expires, allMustAnswer, answered, total, status (speglar Consents/UserConsents).
  • Orginställning: id, label, value, editable, internalOnly.
  • Masslogin: userType, withoutCredentials, channels.
  • Person-, skol-, klass- och kursdata från delad consolidated-demo-data.json.
  • Rollväljare: index.htmlrektor.html (rektor) / admin.html (orgadmin).
  • Drawer på alla adminsidor: Översikt, Användare, Klasser & grupper, Skolan, Bedömning, Kommunikation, Import & synk, Organisation (endast orgadmin) + Gamla Vklass Admin + Stäng Vklass Admin.
  • Rektorskontext bärs som ?roll=rektor på sektionssidor; drawer-/undermenylänkar skrivs om av JS så kontexten följer med.

Tillgänglighetskontrakt

  • Dialoger: detail-dialog (read-only, Stäng), edit-user-dialog (Avbryt/Spara), send-confirm-dialog (Avbryt/Skicka) — alla via shared window.vklassDialogManager.openDialog(id, opener), inert på .vk-layout, Escape/scrim stänger, fokus återställs till öppnaren.
  • Tabs: role="tablist"/tab/tabpanel, aria-selected, roving tabindex, piltangenter.
  • Filter/sök: filterchips aria-pressed; sökfält type="search" med label; resultaträkning i polite live region.
  • Formulär (utskick + användarredigering): synliga labels, fieldset/legend för kanal- och skolgrupper, aria-describedby till hjälp-/felttext, aria-invalid endast i felläge, valideringssammanfattning med fältlänkar, submit-kvittens i role="status".
  • Drawer/flyouts: aria-expanded synkas i samma kodväg som klasstoggling.
  • Skip-links: <a class="skip-link" href="#main-menu"> + <a class="skip-link" href="#main-content">
    • <main id="main-content" tabindex="-1">.
  • Dark mode: endast body.dark-mode; inga prefers-color-scheme-regler i feature-CSS.
  • Keyboard test scope: UC-1 till UC-9 täcks i 3/qa/full-coverage.spec.ts.

Bilder/sketcher

Inga epic-files eller screenshots finns. screenshotMatchingStrategy: reference-only — V2 Athena Design System + Kira-grundningen i 3/research-notes.md styr utformningen.

Öppna frågor

Produkt-/arkitekturfrågorna i intent-spec §8.1 (menynamn, synkstatusläsvy, masslogin-våg, samtyckesroll, betyg/statistik-spår) visas som reviewpunkter på översikten och är inte implementerade som färdiga funktioner.

Funktionalitet i scope

Se intake.md § Kravklassificering v3 (R3-01–R3-13).