Specifikation

Specifikation: Jönköping Kommun - Inlämningsuppgifter (Epic 26 — batchnedladdning och utskrift av inlämningar)

Variant

Vklass V2 (vklassv2).

Roller

  • Lärare (teacher.htmlteacher-detail.html) — ser Prov och uppgifter-listan, öppnar en uppgifts inlämnings-/resultatflik, markerar inlämningar, laddar ned samlad ZIP och skapar sammanslagen PDF.
  • Elev, vårdnadshavare, rektor och admin får inga nya vyer i denna version. Epic 26 ändrar inte elevens inlämningsvy, bedömningsflödet eller andra rollers funktioner (intent-spec §3, AC-20). index.html förklarar detta.

Användningsfall (UC)

UC-1: Se exportstatus per inlämning

  • Aktör: Lärare
  • Förutsättning: Läraren har bedömningsåtkomst (CanAssess) till en uppgift med digital inlämning och står på fliken Inlämningar.
  • Flöde:
    1. Läraren öppnar Bedömning > Prov och uppgifter och klickar "Inlämningar" på uppgiften Novellanalys – Dystopier.
    2. Listan visar en rad per inlämning (gruppinlämning = EN rad) med namn, inlämningsdatum, filstatus, bedömning och publicering.
    3. Radens filstatus visar varför den kan eller inte kan exporteras.
  • Resultat: Läraren ser direkt vilka inlämningar som är exporterbara.
  • Acceptanskriterier:
    • Rad med minst en exporterbar fil/sparad kopia har en aktiv kryssruta (AC-1).
    • Rad utan inlämning har ingen valbar kryssruta och behåller "Lämna in åt elev" (AC-3).
    • Text-only-inlämning visar "Saknar filer" och kan inte väljas (AC-3).
    • Rad med endast filer över 10 MB visar "Fil större än 10 MB" och kan inte väljas (AC-4).
    • Rad med blandade storlekar är valbar och visar att större filer utelämnas (AC-4).
    • Google Drive/OneDrive/Google Classroom med sparad kopia är valbar med källinfo (AC-5).
    • Extern inlämning utan sparad kopia visar "Saknar sparad kopia — hanteras manuellt" och kan inte väljas (AC-6).
    • Gruppinlämning visas som en rad med gruppmedlemmar synliga (§4.2).

UC-2: Markera inlämningar och välj alla

  • Aktör: Lärare
  • Förutsättning: UC-1; minst en exporterbar inlämning finns.
  • Flöde:
    1. Läraren kryssar i enskilda rader, eller använder "Välj alla" i tabellhuvudet.
    2. Antal valda ("N valda") uppdateras direkt och annonseras via polite live region.
    3. Åtgärdsknapparna aktiveras när minst en rad är vald.
  • Resultat: Ett urval av exporterbara inlämningar är markerat.
  • Acceptanskriterier:
    • "Välj alla" väljer alla valbara rader i aktuell lista — aldrig ej valbara rader (AC-2).
    • Antal valda visas och uppdateras tillgängligt (AC-18).
    • Kryssrutor går att nå och växla med tangentbord (Tab + Space) (AC-18).
    • Massvalet blandas inte ihop med befintlig "Expandera alla"-funktion (§4.1).

UC-3: Ladda ned valda som ZIP

  • Aktör: Lärare
  • Förutsättning: UC-2; minst en rad vald.
  • Flöde:
    1. Läraren klickar "Ladda ned valda" (type="button" — submit:ar inte bedömningsformuläret).
    2. En preflight-dialog visar vad som ingår: deterministisk mappstruktur <Uppgiftstitel>/<Elevnamn>_<Datum>_<ID>/<Filnamn> samt sektionen "Utelämnas" med orsak per fil (för stor, saknas i lagring, saknar sparad kopia).
    3. Läraren bekräftar "Ladda ned ZIP"; mockupen simulerar nedladdningen och bekräftar via notifikation. Är exporten delvis komplett sägs det uttryckligen, med hänvisning till README.txt i ZIP:en.
  • Resultat: En samlad ZIP med valda inlämningars filer (simulerad i mockupen).
  • Acceptanskriterier:
    • ZIP-preflighten listar filer per vald inlämning med elevnamn/gruppnamn i mappnamnet (AC-7, AC-8).
    • Utelämnade filer redovisas med orsak innan nedladdning startar (AC-9).
    • Fil som saknas i lagring stoppar inte exporten; den redovisas neutralt (§4.4).
    • Delvis komplett export markeras tydligt i dialog och notifikation (AC-9, risk §9).
    • Knappen submit:ar inte bedömningsformuläret (AC-19).

UC-4: Skriv ut valda som sammanslagen PDF

  • Aktör: Lärare
  • Förutsättning: UC-2; minst en rad vald.
  • Flöde:
    1. Läraren klickar "Skriv ut valda" (type="button").
    2. En dialog visar PDF-sammanställningen: försättssida (uppgiftstitel, kursgrupp, datum, antal valda) och per inlämning status Ingår / Utelämnas (dokumenttyp stöds inte, fil saknas, fil över 10 MB, saknar sparad kopia).
    3. Läraren bekräftar "Skapa PDF"; mockupen simulerar skapandet och bekräftar via notifikation.
  • Resultat: En sammanslagen PDF för stödda filtyper (simulerad), med tydlig statussektion.
  • Acceptanskriterier:
    • PDF-sammanställningen innehåller försättsinformation och per-inlämningsstatus (AC-10, AC-11).
    • Dokumenttyper som inte stöds listas som manuellt hanterade — de blockerar inte flödet (§4.5).
    • Om inget filinnehåll kan ingå visas ett kontrollerat lokaliserat felmeddelande i dialogen (AC-15).
    • Knappen submit:ar inte bedömningsformuläret (AC-19).

UC-5: Felhantering vid inga val

  • Aktör: Lärare
  • Förutsättning: UC-1; inga rader valda.
  • Flöde:
    1. Åtgärdsknapparna är visuellt inaktiva (aria-disabled="true", fortfarande fokuserbara).
    2. Klick/Enter på inaktiv knapp visar meddelandet "Inga inlämningar valda. Markera minst en inlämning i listan." via role="alert".
  • Resultat: Läraren får tydlig, lokaliserad återkoppling utan att någon export startar.
  • Acceptanskriterier:
    • Tydligt lokaliserat meddelande vid 0 valda (AC-14).
    • Meddelandet annonseras för skärmläsare och knappen förblir tangentbordsnåbar (AC-18).

Datamodell

Mock-data i mock-data/inlamningsuppgifter-data.json; personreferenser via userID i consolidated-demo-data.json.

  • Uppgift (exams): assignmentId, title ("Novellanalys – Dystopier"), type ("Läxa (digital inlämning)"), courseID (8004, Svenska 7A), date, maxFileSizeMB (10)
  • Inlämning (assignment): submissionId, studentID (eller groupMembers: [studentID] + submittedBy vid gruppinlämning), submittedAt, source (vklass | googledrive | onedrive | classroom), hasSavedCopy (bool, för externa källor), textOnly (bool), assessed, published
  • Fil (assignmentFiles): fileName, sizeMB, fileType, supportedForPdf (bool), missingInStorage (bool)
  • Härledda fält (beräknas i script.js, speglar AssignmentResultStudentsModelBuilder): selectable, exportableFileCount, skippedFileCount, statusReason (ingen-inlamning | saknar-filer | for-stor | saknar-kopia | ok | delvis)
  • Prov och uppgifter-listan (teacher.html): rader med title, type, date, courseGroup, digitalSubmission (JA/NEJ), action (inlamningar | bedom)
  • Lärare: vänstermeny BEDÖMNING > Prov och uppgifter (markerad aktiv) → teacher.html (lista) → knappen "Inlämningar" på uppgiften → teacher-detail.html (flikar INLÄMNINGAR | KRITERIER).
  • teacher-detail.html har "Tillbaka"-länk till teacher.html.
  • Användarmenyns "Byt vy" → index.html (rollväljare) på alla sidor.

Tillgänglighetskontrakt (a11y baseline)

  • Dialogmodaler i flödet: #download-dialog (ZIP-preflight), #print-dialog (PDF-sammanställning), #not-implemented-dialog. Alla öppnas via shared window.vklassDialogManager.openDialog(id, opener) — ingen lokal DialogManager. Krav: role="dialog" + aria-modal="true" + aria-labelledby, fokus till titel, fokusfälla, Escape stänger, fokus åter till öppnaren, inert.vk-layout medan öppen. Se .cursor/skills/mockup-accessible-dialog/SKILL.md.
  • Tabs i flödet: #submissions-tablist (INLÄMNINGAR | KRITERIER) på teacher-detail.htmlrole="tablist"/tab/tabpanel, roving tabindex, piltangenter, aria-selected-synk. Se mockup-accessible-dynamic-ui/SKILL.md.
  • Filter/sök i flödet: ÄMNESGRUPP-panelen på teacher.html (replikerad V2-trigger) — disclosure-mönster med aria-expanded/aria-controls; gruppval filtrerar listan och resultatet annonseras i polite live region.
  • Massval: kryssrutor är riktiga <input type="checkbox"> med aria-label per elev; "Välj alla" i <thead>; antal valda i #selection-count + polite live region #selection-status.
  • Toolbar flyouts: starter-standard — aria-expanded synkas med --open-klass i samma kodväg (_syncFlyoutAria).
  • Form validation: inga nya formulärfält. Nya åtgärdsknappar har type="button" inuti bedömningsformuläret (AC-19). "Inga val"-fel via role="alert".
  • Skip-link: <a class="skip-link" href="#main-menu"> + <a class="skip-link" href="#main-content"> + <main id="main-content" tabindex="-1">.
  • Keyboard test scope: UC-2 (markera/välj alla), UC-3 (öppna/stänga download-dialog), UC-4 (öppna/stänga print-dialog), UC-5 (inaktiv knapp + alert) måste ingå i Playwright-specen.

Bilder/sketcher

  • V2 references to follow: se 1/epic-files/CLASSIFICATION.md och 1/design-reference-log.md. Primär: nulage-larare-inlamningsuppgifter-inlamningar-resultat.png (inlämningsvyn), nulage-larare-inlamningsuppgifter-lista.png (listan).
  • Inga V1-referenser, inga design-sketcher.

Funktionalitet i scope

Speglar REQUIRED-tabellen i intake.md § Kravklassificering (R-01–R-20): radvalbarhet med statusar, välj alla + antal valda, ZIP-nedladdning med preflight/manifest, sammanslagen PDF med statussida, felhantering (inga val, inget printbart innehåll, delvis komplett), formulärskydd och full tangentbords-/skärmläsarstöd.

Öppna frågor

Inga öppna frågor — specifikationen är fullständig (intent-specens §9 innehåller redan besvarade produktbeslut).