Specifikation

Start / Kursplansöversikt / Specifikation

Kursplansöversikt från skolverket - Mina ämnen

Bakgrund och syfte med funktionen

Dagens hantering av kurs- och ämnesplaner i skolan är splittrad. Lärare hämtar texter från Skolverkets webb och PDF:er, gör egna nedbrytningar i planeringar, och hänvisar ibland till kriteriematriser i Vklass. Elever, vårdnadshavare och skolledning möter däremot sällan en samlad och konsekvent koppling mellan undervisningen i ”Mina ämnen” och de officiella styrdokumenten. Det skapar onödig administration, risk för fel versioner (t.ex. Lgr11 vs Lgr22, Gy11 vs Gy2025, Lspec22), sammanblandning av skolformer (grundskola, anpassad grundskola, specialskola, vuxenutbildning) och otydlighet kring vad undervisningen faktiskt vilar på.

För lärare innebär detta återkommande manuellt arbete: att klippa in och uppdatera kursplanstexter i lokala dokument, presentationer och planeringar, att tolka kodlistor för t.ex. _GSS, _SPEC, modersmål/minoritetsspråk och SFI, samt att själva bevaka reformer. När uppdateringar hanteras ad hoc (t.ex. saknade eller ofullständiga kursplaner i Vklass) ökar risken för att fel kurs-/ämnesplan eller fel skolformsvariant används i grupper, vilket påverkar både likvärdighet och rättssäkerhet.

För elever och vårdnadshavare innebär dagens situation att de ofta ser uppgifter, omdömen, matriser och betyg utan en tydlig, lättillgänglig referens till ”det här säger Skolverket om ämnet/ämnesområdet”. Det försvårar förståelsen av syfte, långsiktig progression och vad som faktiskt bedöms. Utan en enkel kursplansöversikt direkt i ”Mina ämnen” blir deras insyn beroende av enskilda lärares egna sammanfattningar och material, vilket minskar transparens och likvärdighet mellan skolor och lärare.

För rektorer, huvudmän och skolledning är det samtidigt avgörande att snabbt kunna se vilka kurs- och ämnesplaner som ligger till grund för undervisningen i olika grupper, att rätt skolform och rätt version används (inklusive t.ex. AGR/GSS, specialskolans koder och ämnesområden), och att detta kan följas upp samlat per skola eller organisation. Utan en gemensam, systematisk hantering av kursplaner blir det svårt att bedriva systematiskt kvalitetsarbete, hantera reformer som Gy2025 och svara på frågor från tillsynsmyndigheter.

Syftet med Kursplansöversikten är därför att etablera en gemensam, versionshanterad ”single source of truth” för Skolverkets kurs- och ämnesplaner i Vklass. Översikten kopplas automatiskt till undervisningsgrupper i ”Mina ämnen” via officiella ämnes- och kurskoder (inklusive varianter som _GSS, _SPEC, M1/M2 med språkkod, minoritetsspråkskoder och SFI-koder) och uppdateras genom en kontrollerad import- och versionsprocess som ägs av Vklass. Lärare ska inte behöva klistra in texter manuellt, och skolor ska inte behöva ”laga” kursplaner via supportärenden.

Funktionen ska vara roll- och skolformsanpassad, men i grunden stabil och skrivskyddad: den visar Skolverkets originaltexter (syfte, centralt innehåll, kunskapskrav m.m.) i nära anslutning till grupper, planeringar, kriteriematriser och Studieöversikt – utan att skapa nya parallella bedömningsflöden eller generera notiser till elever/vårdnadshavare vid uppdateringar. Lärare får ett snabbt, tillförlitligt stöd i klassrummet; elever och vårdnadshavare får en tydlig referensram till de resultat de ser; skolledningen får trygghet i att undervisningen vilar på korrekta och aktuella styrdokument.

Övergripande är syftet att knyta ihop tre perspektiv i en konsekvent vy i ”Mina ämnen”:

  1. styrdokumenten (Skolverkets kurs- och ämnesplaner, inkl. relevanta skolformsvarianter),
  2. undervisningen (planeringar, lektionsinnehåll, uppgifter, elevlogg) och
  3. resultaten (bedömningar i kriteriematriser, omdömen, betyg).

Genom att alla moduler i Vklass refererar till samma kursplansdatabas skapas förutsättningar för likvärdig bedömning, tydligare kommunikation och robust uppföljning – samtidigt som den administrativa bördan för lärare minskar.

Målgrupp och användarroller

Kursplansöversikten riktar sig till alla roller som arbetar med undervisning, uppföljning eller elevstöd. Samma kurs-/ämnesplan från Skolverket används konsekvent i hela Vklass, men vilken väg in, vilken detaljnivå och vilka kompletterande data som visas styrs av roll, skolform, skola och den specifika elev- eller gruppkopplingen. Alla vyer är skrivskyddade vad gäller Skolverkets texter; rollerna skiljer sig enbart i hur de når och kombinerar informationen med annan data i Vklass.

Lärare/ämneslärare är primär målgrupp. De når kursplanen per undervisningsgrupp via ”Mina ämnen” och ser fullständig kurs-/ämnesplan för rätt skolform och version (t.ex. Lgr22, Gy11, Gy2025, anpassad grundskola, specialskola). I lärarvyn kan kursplanen öppnas från gruppens översikt, planeringar, kriteriematris och schemalagda lektioner. Läraren ser inga aggregerade data om andra grupper än dem hen själv undervisar, men kan se hur gruppens egna planeringar, uppgifter och bedömningar är läroplanskopplade. Detta gäller även vid samundervisning över skolgränser: lärare ser kursplanen för alla undervisningsgrupper de är kopplade till, oavsett skolenhet.

Mentorer/klasslärare och elevhälsopersonal (t.ex. specialpedagog, kurator, skolpsykolog, SYV) når kursplansöversikten primärt via Studieöversikten på individnivå. Från varje ämnesrad ska de kunna öppna den kurs-/ämnesplan som ligger till grund för elevens undervisning i just den skolenheten och skolformen. De ser samma kursplanstext som ämnesläraren, men utan lärarens interna arbetsvyer (t.ex. uppgiftslistor eller gruppspecifik analys). Synligheten begränsas till de elever och skolor de redan har behörighet till; inga aggregerade resultat över flera skolor eller skolformer visas i denna funktion.

Elever når kursplansöversikten via ”Mina ämnen” per ämnes-/kursgrupp och, vid behov, via Studieöversikten. De ser en elevanpassad vy med fokus på syfte, övergripande mål och kunskapskrav/betygskriterier för den nivå och skolform de faktiskt läser. För elever som läser kurs på annan skola (samundervisning/VO‑ämnen) ska kursplanen vara nåbar från den aktuella kursgruppen, även om schemat och studieöversikten i övrigt utgår från hemskolan. Elever ser endast kursplaner för sina egna grupper, utan aggregerad information om andra elever eller grupper.

Vårdnadshavare tar del av kursplaner via respektive barns vy (t.ex. ”Barnets ämnen” eller Studieöversikt). De ser samma elevanpassade kursplansvy som barnet, kopplad till barnets aktuella ämnen på den aktuella skolenheten, och utan insyn i lärarens interna arbetskopplingar eller andra elevers data. Vårdnadshavare ser endast kursplaner för de barn de är vårdnadshavare för; vid kombinationsroller (t.ex. lärare som också är vårdnadshavare) styrs vyn av vald roll/kontoväxling.

Rektor, biträdande rektor och annan skolledning behöver både kunna gå ner på elev- och gruppnivå och få en översikt på skolnivå. De kan öppna kursplanen för en specifik undervisningsgrupp via Skoladmin eller via elevens Studieöversikt, samt se vilka kurs-/ämnesplaner (inkl. varianter som _GSS, _SPEC och specialskolans koder) som är i bruk på skolenheten per skolform, stadium och läsår. I Kursplansöversikten exponeras ingen ny individdata utöver det som redan tillåts av deras roll i Studieöversikten; fokus ligger på att säkerställa att rätt kurs-/ämnesplan används.

Skolchef, förvaltningsledning och huvudman använder kursplansöversikten på aggregerad nivå via centrala uppföljnings- och administrationsvyer. De kan se vilka kurs- och ämnesplaner som används per skolform, skola, program och reformversion (t.ex. Gy11 vs Gy2025) och vid behov öppna själva kursplanstexten för kontroll. På denna nivå visas endast information om användning och täckning (t.ex. ”vilka kursplaner används var”), aldrig elev- eller lärarspecifik resultatdata. Underlaget används för likvärdighetsarbete, kvalitetssäkring och reformhantering.

Systemadministratörer och IT-ansvariga har i huvudsak en konfigurations- och felsökningsroll. De behöver se hur ämnes-/kurskoder från elev- och schemasystem (inkl. suffix som _GSS, _SPEC och koder för modersmål, minoritetsspråk och SFI) är mappade mot kursplansdatabasen, samt kunna verifiera att rätt kursplansvy exponeras per skolform, skola och grupp. Deras åtkomst till kursplanstexterna är läsande och används endast för kontroll och support, inte i pedagogiskt arbete. På huvudmannanivå ska det finnas inställningar som möjliggör att visa eller dölja kursplansfliken för vissa roller eller skolformer, i linje med organisationens önskemål om enkelhet respektive transparens.

Tillgänglighet och förutsättningar

Funktionen är tillgänglig för skolenheter som använder modulen ”Mina ämnen/kurser” och har någon av följande skolformer aktiverad i Vklass: grundskola, anpassad grundskola (grundsärskola), specialskola, gymnasium, anpassad gymnasieskola/gymnasiesärskola samt kommunal vuxenutbildning. För förskola och fritidshem visas kursplansöversikten endast om grupperna explicit är kopplade till en kurs-/ämneskod som representerar relevant läroplan (t.ex. Lgr22/Lgr11 eller Lspec22 som övergripande läroplanskod). Funktionen aktiveras per skolenhet via Skoladmin, och kan rullas ut stegvis (t.ex. endast gymnasiet första läsåret) samt, vid behov, döljas för utvalda roller eller skolformer enligt huvudmannens inställningar.

En grundläggande förutsättning är att undervisningsgrupperna har giltiga ämnes- eller kurskoder enligt Skolverkets kodlistor och att dessa är korrekt inlästa i Vklass kodmappning. Detta omfattar bland annat grundskolans ämneskoder (t.ex. MA, BL, EN samt GRGR…‑varianter), anpassad grundskola med suffixet ”_GSS” eller de nya GRSAXXX‑koderna, specialskolans ”_SPEC”-koder, gymnasiets kurs- och ämneskoder (inklusive Gy2025‑ämnesplaner), modersmål och minoritetsspråk (ML + språkkod, M1/M2 + språkkod, GRSAMOR01 m.fl.) samt SFI‑koder. Om en grupp saknar kod, har en ogiltig kod eller en kod som ännu inte kan mappas mot någon kurs-/ämnesplan visas ingen kursplansöversikt; användaren möter i stället ett informativt tomtillstånd med uppmaning att kontakta skoladministratör. Samma avvikelse flaggas i relevanta adminvyer så att felaktiga eller omappade koder kan rättas utan systemingrepp.

Kursplansöversikten använder samma läroplansdatabas som kriteriematriserna. Modulen för läroplanskoppling/kriteriematriser behöver därför vara aktiverad för att alla kopplingar (t.ex. till planeringar och bedömningar) ska fungera fullt ut. Själva kursplanstexten kan dock visas i ”Mina ämnen” även på skolor som inte använder alla kringliggande moduler. Om Studieöversikten v2 är aktiverad exponeras kursplanerna även där via elevens ämnesrader; i annat fall nås funktionen endast via respektive undervisningsgrupp. Betygsmodul, omdömesmodul och stödinsatsmodul är inte nödvändiga för att visa kursplanstext, men styr vilka ytterligare länkar och ingångar som omger kursplansöversikten.

Behörighet att se kursplansöversikten följer Vklass befintliga åtkomstregler för grupper och Studieöversikt. Lärare och ämneslärare ser kursplaner för de grupper där de är kopplade som undervisande personal, även vid samundervisning över skolgräns. Elever och vårdnadshavare ser endast kursplaner för ämnen där eleven är inskriven och där informationen är publicerad för elev/vårdnadshavare. Rektorer, skolledning och elevhälsopersonal ser kursplaner för de elever och grupper de redan har åtkomst till med sina skolledar‑ eller EHT‑behörigheter; funktionen exponerar ingen ny individdata utöver detta. Skolchefer och centrala huvudmannaroller kan, under förutsättning att deras roll ger läsrätt till enheterna, se aggregerad information om vilka kurs-/ämnesplaner som används per skola och skolform och öppna kursplaner i läsläge, utan utökad insyn i elevnivå. Systemadministratörer har alltid läsrätt till kursplanstexterna för att kunna felsöka, verifiera och konfigurera kodmappningar.

Vid reformer och övergångsperioder, exempelvis Gy11 → Gy2025 eller införandet av Lspec22 och nya koder i anpassad grundskola, styrs vilken kurs-/ämnesplansversion som visas av kombinationen ämnes-/kurskod, skolform, läsår och organisationens reforminställningar i Vklass. Det innebär att två grupper i samma ämne kan visa olika versioner av kursplanen på samma skola, om de är knutna till olika koder eller reforminställningar. För grund- och anpassad grundskola samt specialskola hanteras detta genom separata koder och suffix (t.ex. _GSS, _SPEC samt ämnesområdeskoder), så att rätt variant alltid kan särskiljas och visas.

Kursplansöversikten följer Vklass generella tekniska förutsättningar: den är webbaserad, responsiv och åtkomlig via moderna webbläsare på dator, surfplatta och mobil utan särskilda klientkrav utöver ordinarie åtkomst till Vklass. Funktionens gränssnitt utvecklas i linje med WCAG 2.1 AA, vilket innebär korrekt rubrikstruktur, god kontrast, tangentbordsnavigering och lämplig ARIA‑märkning för exempelvis flikar och expanderbara sektioner. UI‑texter finns som minimum på svenska; stöd för ytterligare språk och eventuella lättlästa sammanfattningar kan erbjudas som tillval. Eventuella AI‑baserade stödfunktioner (t.ex. förklarande texter) är alltid valbara på organisationsnivå och är som standard avstängda; oavsett detta visar kursplansöversikten alltid Skolverkets originaltext som primär informationskälla.

Relation till befintlig funktionalitet i Vklass

Kursplansöversikten bygger vidare på, och knyter ihop, befintlig läroplans‑ och resultatlogik i Vklass. Den introducerar inget eget kursplanslager, utan använder samma datamodell, kursplansservice, läroplanskopplingar och kriteriematriser som redan ligger bakom planeringar, matriser, omdömen och Studieöversikt. Funktionen är ett nytt presentationslager – inte en ny bedömningsmodul – vilket minimerar risk för dubbla definitioner och manuella specialfall.

Relationen till läroplanskopplingar och kriteriematriser är central. Alla texter som visas i kursplansöversikten (syfte, centralt innehåll, kunskapskrav/betygskriterier, kapitel 4 för fritidshem m.m.) hämtas från samma CoursePlan/KnowledgeCriterion som kriteriematriserna använder. När en lärare kopplar en planering, uppgift, elevloggpost eller studiehandledningsanteckning till läroplanen sker det via samma interna ID som kursplansöversikten visar. Därmed blir kursplansvyn den naturliga ”källtexten” bakom alla läroplanskopplingar i systemet.

I ”Mina ämnen/kurser” fungerar kursplansöversikten som ett komplement till befintliga flikar som Översikt, Planeringar, Uppgifter/Inlämningar och Resultat. Per undervisningsgrupp exponeras en tydlig länk/flik ”Kursplan” (eller motsvarande), som visar korrekt kurs-/ämnesplan utifrån gruppens ämnes-/kurskod, skolform och version (t.ex. Lgr22 vs Lgr11, Gy11 vs Gy2025, GSS/SPEC). För grupper med flera ämneskoder (t.ex. NO/SO‑block) visar vyn en kursplan i taget, med enkel växling mellan delämnen. Om giltig kod saknas eller inte kan mappas visas ett informativt tomtillstånd – övriga flikar (Planeringar, Uppgifter, Resultat) påverkas inte.

I Studieöversikten och Ämnesöversikten kompletterar kursplansöversikten dagens fokus på omdömen, betyg, närvaro och stödinsatser. Varje ämnesrad får en konsekvent ingång ”Visa kursplan” som öppnar relevant kurs-/ämnesplan i en panel eller ny vy, baserat på den kurskod och skolform som ämnesraden bygger på. Användaren kan därmed växla mellan ”hur går det?” (resultatvyer) och ”mot vad bedöms?” (kursplan) utan att lämna kontexten. Filtrering på skolform och kursplansversion i dessa vyer ska alltid vara konsekvent: en ämnesrad som bygger på Gy2025 ska inte visa Gy11‑texter, och motsvarande för Lgr22/Lgr11, GSS/SPEC m.fl.

Planeringar, uppgifter/inlämningar, lektionsinnehåll i schema, elevlogg och studiehandledning fortsätter vara de arbetsytor där lärare dokumenterar och konkretiserar undervisningen. Kursplansöversikten ersätter inte dessa, utan fungerar som referenslager: genom att använda samma läroplanskopplings‑API kan alla dessa moduler visa vilka delar av kursplanen en viss aktivitet eller anteckning knyter an till, samtidigt som kursplansöversikten alltid visar originaltexten. Detta gäller även kapitel 4‑mål för fritidshem och ämnesområdesplaner för anpassad gymnasieskola – de exponeras via samma kursplansmotor och kan därmed återanvändas i Dokumentation, planeringar och elevlogg utan egna speciallistor.

För elever och vårdnadshavare placeras befintliga vyer (Planeringar, Uppgifter, Resultat, Studieöversikt) i en tydligare ram. I stället för att möta enbart uppgifter, matriser och betyg får de en rollanpassad kursplansvy direkt knuten till samma ämnesgrupp och ämnesrad som de redan använder. Navigeringsmönstret förändras inte: kursplanen nås via befintliga vyer (t.ex. som knapp eller flik i kursen och som länk i Studieöversikt), och ingen ny, fristående ”styrdokumentssida” behöver läras in. Vyn är alltid skrivskyddad; uppdateringar av kursplanstext eller versioner genererar inte notiser till elever eller vårdnadshavare.

För rektorer, skolledning och huvudman kompletterar kursplansöversikten befintliga uppföljnings- och analysvyer. Aggregerade resultat (omdömen, betyg, närvaro, Hittills uppnådda mål) beräknas som tidigare, men kan nu systematiskt kopplas till vilken kurs-/ämnesplan och vilken version som ligger till grund för respektive grupp. Centrala rapporter och analysvyer kan länka vidare till samma kursplanstext som lärare och elever ser, utan att exponera ytterligare individdata. På sikt ger detta underlag för analyser per kunskapskriterium (t.ex. ”vilka kriterier är oftast otillfredsställande uppfyllda i matematik åk 9?”) baserade på samma ID:n som kursplansöversikten visar.

För skol‑ och systemadministratörer knyts funktionen till befintliga adminvyer för grupper och kodmappning. I gruppadministration ska det tydligt framgå vilken ämnes-/kurskod gruppen har, om denna är mappad till en kurs-/ämnesplan och vilken skolform/version som gäller. Rapporter som listar grupper utan giltig kod eller med kod som saknar kursplan använder samma data som styr kursplansöversikten; om kursplanen inte kan visas för läraren ska motsvarande avvikelse kunna identifieras av admin utan databas‑ingrepp. Koder med suffix (t.ex. _GSS, _SPEC) och specialkoder (minoritetsspråk, SFI, specialskolans ämnesområden) hanteras i samma mappningslager, vilket säkerställer att de både går att hitta i planeringars läroplanssök och i kursplansöversikten.

Övergripande krav på relationen till befintlig funktionalitet är att kursplansöversikten ska:

  • återanvända befintlig läroplansdatabas och kriteriematriser som enda källa för kurs-/ämnesplaner och kunskapskriterier,
  • använda samma läroplanskopplings‑API som planeringar, uppgifter, elevlogg, dokumentation och framtida studieplansvyer,
  • inte introducera nya flöden för omdömen, bedömningar eller betyg, utan endast komplettera dem med kursplanstext,
  • exponeras via konsekventa länkar/flikar i redan etablerade vyer (Mina ämnen/kurser, Studieöversikt/Ämnesöversikt, relevanta adminvyer),
  • säkerställa att samma skolform och kursplansversion alltid visas i alla relaterade vyer för en given grupp/kurskod (inkl. Gy11/Gy2025, Lgr11/Lgr22, GSS/SPEC),
  • fungera även när vissa kringmoduler (betyg, stödinsatser, uppgifter) är avstängda, utan brutna länkar eller förvirrande tomma sektioner,
  • följa befintlig behörighetslogik: den som redan får se en grupp eller en ämnesrad får se tillhörande kursplan, men får inte någon utökad åtkomst till resultat eller elevdata via denna funktion.

Översiktlig funktionsbeskrivning

Kursplansöversikten visar Skolverkets aktuella kurs‑ och ämnesplan direkt i anslutning till undervisningsgrupper i ”Mina ämnen” och i Studieöversikten. För varje grupp presenteras ett skrivskyddat kursplanshuvud med ämnesnamn, skolform, läroplan (t.ex. Lgr22, Gy2025, Lspec22), ämnes-/kurskod (inklusive varianter som _GSS, _SPEC, modersmål/minoritetsspråk och SFI) samt rätt version utifrån skolform, kod och period. Under detta visas kursplanens struktur – syfte, centralt innehåll, kunskapskrav/betygskriterier och där det är aktuellt ämnesområdesplaner eller kapitel‑4‑mål – med möjlighet att växla mellan relevanta nivåer/årskurser och, vid blockämnen (t.ex. NO/SO), mellan delämnen i samma grupp.

Lärare och övrig skolpersonal ser en mer funktionsrik vy där kursplanen är tydligt kopplad till vald undervisningsgrupp och kan nås från gruppens översikt, planeringar, kriteriematris, schema och Studieöversikt. Därifrån kan de snabbt hoppa mellan kursplanen och de aktiviteter som är läroplanskopplade, utan att skapa nya bedömningsflöden eller dubbletter av kriterier. Elever och vårdnadshavare ser samma officiella kurs‑/ämnesplan i en förenklad, elevanpassad presentation kopplad till elevens aktuella och nyligen avslutade ämnen, utan aggregerad information om andra elever eller grupper. Om en grupp saknar giltig kod eller om ingen kursplan kan mappas visas i stället ett tydligt tomtillstånd med förklaring och hänvisning till skoladministratör, samtidigt som ingen felaktig eller ofullständig kursplanstext exponeras.

Datamodell och entiteter

Datamodellen för Kursplansöversikten utgår från befintliga kärnentiteter i Vklass (grupp, elev, kriteriematris, bedömning) och kompletteras med ett tydligt, versionshanterat lager för Skolverkets kurs‑ och ämnesplaner. På serversidan representeras detta som starkt typade .NET‑klasser som serialiseras till motsvarande TypeScript‑modeller; kursplanstexterna hanteras som skrivskyddade referensdata, medan alla kopplingar till grupper, elever och bedömningar sker via redan etablerade relationsstrukturer. En gemensam kursplansservice utgör ”single source of truth” för alla moduler som behöver läroplansdata (planeringar, matriser, studieöversikt, dokumentation m.fl.).

Kärnan är entiteten Subject (ämne) och dess kopplade CoursePlan (kurs-/ämnesplan). Subject beskriver det abstrakta ämnet (t.ex. matematik, kod ”MA”) med fält som SubjectId, SubjectCode (BL, MA, EN, MA_GSS, BI_SPEC, SFIKUB91 osv.), SchoolForm (Grundskola, AnpassadGrundskola, Specialskola, Gymnasium, AnpassadGymnasieskola, Vuxenutbildning) samt officiella namn. CoursePlan beskriver en konkret kurs-/ämnesplan från Skolverket med fält som CoursePlanId, CurriculumCode (t.ex. Lgr22, Gy11, Gy2025, Lspec22), Version, ValidFrom/ValidTo och IsActive. En Subject kan ha flera CoursePlans över tid och per skolformsvariant (t.ex. grundskola vs anpassad grundskola _GSS vs specialskola _SPEC, Gy11 vs Gy2025). Ändringar i CoursePlan‑poster och mappningar loggas för spårbarhet (auditlogg) och används i samband med reformer och tillsyn.

Inom varje CoursePlan struktureras innehållet med en flexibel sektionmodell. CurriculumSection beskriver logiska delar av planen (t.ex. Syfte, Centralt innehåll, Ämnesområdesplan, Kap. 4 fritidshem) med fält som SectionId, CoursePlanId, SectionType, Label, OrderIndex. Syftestexten lagras i CoursePlanPurpose med referens till rätt Section, medan punkter i det centrala innehållet lagras som CentralContentItem med CentralContentItemId, SectionId, GradeSpan/Level eller CourseLevelCode, OrderIndex och text. Denna neutrala struktur gör att samma modell fungerar för ämnesplaner i grundskola/gymnasiet, ämnesområdesplaner i anpassad grundskola och specialskola, SFI samt nya ämnesplaner i Gy2025.

Bedömningsbara kriterier representeras av entiteten KnowledgeCriterion. Varje rad i kunskapskrav/betygskriterier har ett eget KnowledgeCriterionId kopplat till CoursePlanId, SectionId (där så är relevant), GradeSpan/Level (t.ex. åk 6, åk 9, kurs 1, nivå A/B/C i Gy2025), GradeStep (E, C, A eller motsvarande) samt DescriptionHtml och OrderIndex. Kriteriematriser i Vklass (AssessmentMatrix) lagrar endast referenser till KnowledgeCriterionId, inte texter, vilket säkerställer att Kursplansöversikt, matriser, omdömesvyer och analysrapporter alltid pekar mot samma källtext. Detta är särskilt viktigt vid reformer (Gy11/Gy2025, Lgr11/Lgr22) och för varianter som _GSS/_SPEC.

Kopplingen till undervisningen sker via befintlig gruppentitet, här benämnd TeachingGroup (undervisningsgrupp/kursinstans) med fält som GroupId, GroupName, SchoolId, SchoolForm, SubjectCode, CourseCode (t.ex. MATMAT01b, GRGRMAT01) samt en referens till CoursePlanId. Eftersom många skolor arbetar i blockämnen (t.ex. NO/SO) införs en N‑N‑relation TeachingGroupSubject mellan TeachingGroup och Subject: en grupp kan därmed ha flera ämneskoder (BI, FY, KE, GE, HI, SH, RE osv.), och varje relation pekar mot en specifik CoursePlan. Kursplansvyn visar då en kursplan i taget med enkel växling per delämne, medan Resultat‑ och omdömesmoduler kan följa elevens progression per ämne inom samma grupp.

Mappningen mellan koder från elev- och schemasystem och interna kursplaner görs via entiteten SubjectCourseCodeMapping. Den innehåller bl.a. MappingId, SubjectCode, CourseCode, AlternateCode (t.ex. GRGRMAT01, GRSAMAT01, MA_GSS, BI_SPEC, MLFIN, M2FIT, M2SMI, SFIKUB91), SchoolForm, CurriculumCode, CoursePlanId, ValidFrom/ValidTo och ev. SourceSystem. Här hanteras också suffix (_GSS, _SPEC), minoritetsspråk (ML + språkkod, GRSAMOR01 m.fl.) och SFI‑koder. Mappningstabellen är centralt konfigurerbar, versionshanterad och auditloggas; den används konsekvent av Kursplansöversikt, planeringars läroplanssök, kriteriematriser och studieplansvyer. Admin‑ och rapportvyer bygger på samma entitet för att lista koder utan mappad kursplan eller med fel skolform/version.

Elevkopplingar återanvänder befintliga entiteter Student och GroupMembership. GroupMembership binder StudentId till GroupId med StartDate, EndDate och IsActive. Kursplansöversikten använder dessa relationer läsande: för en given elev hämtas de CoursePlans som ligger bakom elevens aktiva och nyligen avslutade grupper i aktuell skolform och skola. I Studieöversikt/Ämnesöversikt representeras detta genom att varje ämnesrad bär en referens till rätt CoursePlanId (och därmed rätt skolformsvariant, t.ex. MA vs MA_GSS), vilket gör att knappen ”Visa kursplan” alltid öppnar korrekt plan oavsett om eleven läser kurs på hemskola eller på annan enhet (samundervisning).

Resultat‑ och bedömningsdata ligger kvar i befintliga entiteter Assessment (omdömen/betyg per ämne/kurs) och CriterionAssessment (bedömning per kunskapskriterium via matris). Dessa entiteter refererar till grupper, elever, AssessmentMatrix och KnowledgeCriterionId. Kursplansöversikten skapar inte nya bedömningsposter utan använder endast de befintliga relationerna för att, där det är relevant, kunna indikera koppling mellan en visad del av kursplanen och förekommande bedömningar (t.ex. ”bedömning finns” i elev-/vårdnadshavarvy eller statusindikatorer i lärar- och rektorsvyer). Filtrering på skolform, kursplansversion och period hanteras i överliggande resultatvyer, men bygger alltid på samma CoursePlan‑ och KnowledgeCriterion‑ID som denna datamodell definierar.

För huvudman, skolledning och systemförvaltning behövs aggregerad information om vilka kursplaner som används, utan individdata. Detta hanteras via en lättviktig entitet CoursePlanUsage (eller materialiserad vy) som för t.ex. CoursePlanId, SchoolId, SchoolForm, AcademicYear och NumberOfGroups/NumberOfStudents beskriver användningen av en viss plan. Samma underlag används också för att identifiera avvikelser, t.ex. grupper med ogiltig kod, grupper med kod utan mappad CoursePlan, eller CoursePlans som saknar innehåll (0 sektioner/kriterier). Sådana fall ska inte exponeras som ”färdiga kursplaner” i Kursplansöversikten utan ge ett definierat tomtillstånd i UI och synas i adminrapporter, vilket stärker både rättssäkerhet och förvaltningsbarhet.

Detaljerad funktionsspecifikation

Kursplansöversikten nås i första hand från undervisningsgrupper under ”Mina ämnen/kurser”. I varje grupp visas en flik/sektion ”Kursplan” som, när den öppnas, hämtar rätt kurs-/ämnesplan utifrån gruppens ämnes-/kurskod, skolform, läsår och reforminställningar (t.ex. Gy11/Gy2025). Om ingen giltig kod kan mappas, eller om den mappade kursplanen saknar innehåll (0 sektioner/kriterier), visas i stället ett tydligt tomtillstånd med förklarande text (t.ex. ”Ingen kursplan kan visas. Kontrollera ämnes-/kurskod eller kontakta skoladministratör.”); sådana fall loggas och exponeras i adminrapporter. Överst i vyn visas alltid en sammanfattande header med officiellt ämnesnamn från Skolverket (t.ex. ”Matematik”), skolform (t.ex. ”Grundskola”), läroplan/version (t.ex. ”Lgr22”, ”Gy2025”, ”Lspec22”), ämnes-/kurskod (inkl. suffix som _GSS/_SPEC eller alternativa GRSAXXX‑koder), giltighetsperiod samt ”Senast uppdaterad i Vklass”. Lokalt gruppnamn (t.ex. ”8C”) visas som tillägg, inte som primär beteckning, för att undvika otydliga listor som ”4, 4, 4…”.

Under headern struktureras innehållet i tydliga sektioner, exempelvis ”Syfte”, ”Centralt innehåll”, ”Kunskapskrav/Betygskriterier” och, där det är relevant, ”Ämnesområden” eller ”Kapitel 4 – Fritidshem”. Sektionerna presenteras som flikar eller expanderbara paneler med korrekt semantisk märkning (rubriknivåer, listor) och kan laddas lazy‑load för prestanda (syfte först, därefter centralt innehåll, sedan kunskapskrav). För kurs-/ämnesplaner med nivåer eller årskursspann (t.ex. F–3, 4–6, 7–9, gymnasiekurser, Gy2025‑nivåer) visas en nivåväljare direkt under rubriken. Systemet förväljer den nivå som motsvarar gruppens årskurs/kursnivå, men låter användaren växla för att se progressionen i ämnet. I Gy2025 exponeras Skolverkets ämnesnivåer (t.ex. ”Engelska nivå 1, 2, 3”) och grupper kopplade till en viss nivå landar automatiskt på rätt del.

För lärare i gruppvyn visas hela kurs-/ämnesplanen i skrivskyddat läsläge, med fokus på snabb navigering i klassrumssituationen och tydlig koppling till den aktuella gruppen. Funktionellt ska lärarvyn:

  • alltid visa korrekt skolformsvariant (grundskola/anpassad grundskola/specialskola/gymnasium/anpassad gymnasieskola/vux) utifrån kod, skolform och inställningar,
  • hantera blockämnen (t.ex. NO/SO) genom att, när gruppen har flera ämneskoder, erbjuda enkel växling mellan delämnen (t.ex. Biologi, Fysik, Kemi) men visa en kursplan i taget,
  • tydligt markera om gruppen följer en äldre reformversion (t.ex. ”Denna grupp följer Gy11 – nyare ämnesplan Gy2025 finns också men används inte för denna grupp”),
  • länka vidare till relevanta arbetsytor (planeringar, matriser, uppgifter) utan att skapa nya bedömningsflöden eller möjligheter att redigera Skolverkets texter.

För elever och vårdnadshavare i gruppvyn presenteras samma kurs-/ämnesplan, men i en förenklad och rollanpassad vy. Här är kravbilden att:

  • endast nivåer som faktiskt berör eleven exponeras i nivåväljaren (ingen växling till t.ex. åk 1–3 för en elev i åk 9 om huvudmannen inte särskilt vill tillåta det),
  • tekniska detaljer som interna versionskoder och giltighetsdatum döljs eller tonas ned,
  • syfte och kunskapskrav/betygskriterier för elevens nivå lyfts fram, med korta förklarande mikrotexter (t.ex. ”Detta är det som Skolverket säger att du ska lära dig i ämnet”),
  • länkar till planeringar/uppgifter (”Se hur vi arbetar med detta i undervisningen”) erbjuds men inte blandas in i själva kursplanstexten.

I Studieöversikten/Ämnesöversikten exponeras kursplansöversikten som en kontextlänk per ämnesrad där giltig kod och kursplan finns. För alla berörda roller (elev, vårdnadshavare, mentor, elevhälsa, rektor) ska ämnesraden kunna visa en ikon/text ”Visa kursplan” som:

  • öppnar kursplanen i en panel/drawer ovanpå Studieöversikten, utan att scroll‑position och filter i listan tappas,
  • förväljer samma skolform, version och nivå som ämnesraden bygger på (t.ex. Gy2025 för en kurs som följer ämnesbetyg),
  • initialt visar en kondenserad vy (syfte + kunskapskrav/betygskriterier för aktuell nivå) med möjlighet att expandera till full kursplan,
  • stänger med ett klick/tangentkommando och återgår till exakt samma plats i Studieöversikten.

Detta gör att exempelvis mentor eller specialpedagog snabbt kan växla mellan resultatdata (omdömen, närvaro, stödinsatser) och de styrdokument som ligger bakom bedömningarna utan att lämna elevkontexten.

För rektor, skolchef, huvudman och systemadministratör erbjuds en aggregerad administrationsvy där kursplansöversikten nås utan elev- eller gruppkontext. Denna vy visar vilka kurs-/ämnesplaner som faktiskt används på en enhet eller inom en organisation och stöder bl.a.:

  • filtrering på skolform (grundskola, anpassad grundskola, specialskola, gymnasieskola, anpassad gymnasieskola, vuxenutbildning),
  • filtrering på skola/skolenhet och läsår/period,
  • fritextsökning på ämneskod och namn, inkl. specialfall (t.ex. ”MA_GSS”, ”GRSPBIO01”, ”SFI”, ”Svenska för invandrare”, ”samiska”, ”meänkieli”),
  • filtrering på läroplan/version (Lgr22, Lgr11, Gy11, Gy2025, Lspec22 m.fl.),
  • filtrering på användningsstatus (kursplaner med/utan aktiva grupper respektive elever),
  • listor över avvikelser: grupper utan ämnes-/kurskod, grupper med kod utan mappad kursplan, kursplaner utan innehåll (0 sektioner/kriterier).

Varje rad i denna vy har åtgärden ”Öppna kursplan” som öppnar samma läs-vy som lärare ser, men frikopplad från elevspecifik information. Detta ger ledning och förvaltning ett gemensamt textunderlag i dialog med rektorer, skolinspektion och politisk nivå.

Innehållet från Skolverket presenteras konsekvent, oförändrat och markerat som myndighetstext. För alla roller gäller att:

  • rubriker som ”Syfte”, ”Centralt innehåll”, ”Kunskapskrav/Betygskriterier” m.fl. återges med semantisk rubrikstruktur (h1–h3) och korrekta listor/tabeller enligt Skolverkets struktur,
  • kursplanstexter är helt skrivskyddade; inga roller kan redigera, kommentera eller ”överstyra” formuleringarna i denna vy,
  • eventuell lokal tolkning, kommentar eller nedbrytning sker i planeringar, dokumentation eller andra lokala ytor, inte i kursplansöversikten,
  • källhänvisning och versionsinformation (”Källa: Skolverket”, ”Version X, gällande från [datum]”) alltid visas, särskilt när flera versioner existerar parallellt (t.ex. Gy11/Gy2025, Lgr11/Lgr22).

Systemet ska hellre visa ”ingen kursplan tillgänglig” än en potentiellt felaktig eller ofullständig text.

Kopplingen till resultat och bedömningar är avsiktligt översiktlig och rollstyrd. I lärarvyn, under sektionen för kunskapskrav/betygskriterier, ska det för varje KnowledgeCriterion kunna visas en statusindikator baserad på gruppens kriteriematriser:

  • indikatorer kan vara t.ex. ”Inga bedömningar”, ”Delvis bedömt” eller ”X av Y elever bedömda i denna grupp under valt läsår”,
  • läraren kan filtrera visningen till ”Alla kriterier”, ”Kriterier utan bedömning i denna grupp” eller ”Kriterier med bedömning i denna grupp” för att se vilka delar av kursplanen som ännu inte har berörts bedömningsmässigt,
  • ett klick på ett kriterium med bedömningar öppnar (eller djuplänkar till) motsvarande kriteriematris i befintlig Resultat-/matrisvy, där det detaljerade arbetet på elevnivå sker,
  • all aggregering filtreras på skolform, kursplansversion och period, så att t.ex. Gy11- och Gy2025‑bedömningar inte blandas i samma indikator.

Kursplansöversikten inför inga nya möjligheter att registrera eller ändra bedömningar; den återanvänder endast befintliga bedömningsdata som kontext kring styrdokumenten.

För elever och vårdnadshavare visas, om skolan använder kriteriematriser och dessa är öppna för elev/vårdnadshavare, en mycket återhållsam bedömningsindikator i kursplanen. Kravbilden är att:

  • kunskapskrav där eleven har minst en bedömning markeras med en enkel ikon eller etikett (t.ex. ”Bedömning finns”),
  • ingen nivå eller betygssteg visas direkt i kursplanstexten; detaljer visas i ordinarie matris-/resultatvyer,
  • en länk (t.ex. ”Visa dina bedömningar i detta ämne”) leder till elevens/målsmans befintliga kriteriematris,
  • om matriser inte används, eller om elev/vårdnadshavare inte ska se dem, visas ingen indikator alls – enbart kursplanstext – för att undvika felaktiga tolkningar eller tomma symboler.

För skolledare och huvudman kan kursplansöversikten kompletteras med aggregerade statusindikatorer på grupp- eller kursplannivå, utan individdata. Exempel på krav:

  • i en gruppkontext får rektor kunna se en summering som ”80 % av kunskapskriterierna har minst en bedömning i denna grupp under valt läsår”,
  • i en kursplansanvändningsvy kan huvudman se andel grupper per kursplan där kriterier överhuvudtaget används,
  • aggregeringen ska alltid vara filtrerbar på skolform, kursplansversion och period, och får inte blanda data från olika reformer eller skolformer.

Mer avancerad analys (t.ex. heatmaps över resultat per kriterium, skolövergripande jämförelser) hanteras i separata uppföljningsmoduler men måste använda samma CoursePlanId och KnowledgeCriterionId som Kursplansöversikten.

Hanteringen av olika skolformsvarianter och specialkoder är explicit och konsekvent. För grundskola, anpassad grundskola och specialskola gäller bl.a.:

  • grupper med ämneskod som slutar på _GSS (t.ex. MA_GSS, EN_GSS, NO_GSS, SO_GSS) ska alltid mappas till rätt anpassad grundskoleplan eller ämnesområdesplan, även om en ”vanlig” grundskoleplan för samma ämneskod finns,
  • grupper markerade som särskolegrupper i Vklass admin, men utan _GSS i kod, kan enligt organisationsinställning forceras mot anpassad grundskoleplan,
  • specialskolans koder (t.ex. BI_SPEC, GRSPBIO01, TN_SPEC) ska mappas till specialskolans kursplaner och tydligt märkas som ”Specialskola” i headern,
  • teckenspråk (TN) med olika koder (GRGRTSP01, TN_Lgr11, TN_SPEC) ska mappas enhetligt utifrån skolform och kod.

För modersmål, minoritetsspråk och SFI gäller att:

  • koder av typen ML + språkkod, M1/M2 + språkkod och särskilda minoritetsspråkskoder (t.ex. GRSAMOR01, MLFIN_SPEC, M2FIT, M2SMI) ska kunna mappas till rätt kurs-/ämnesplan,
  • sök- och listvyer ska stödja både kod och namn (t.ex. ”Meänkieli”, ”Samiska”, ”Svenska för invandrare”),
  • SFI‑koder (t.ex. SFIKUB91) ska kunna hittas även via vanliga termer (”SFI”, ”Svenska för invandrare”).

För fritidshem och förskoleklass används övergripande läroplanskoder (t.ex. Lgr22, Lspec22) enligt Skolverkets struktur; vyn visar då relevanta kapitel/mål i stället för ämnes-/kursplaner, men med samma tekniska kursplansmotor.

Gränssnittet är responsivt och följer Vklass gemensamma UX-principer och WCAG 2.1 AA. På större skärmar visas header, nivåväljare och sektioner parallellt så långt det är möjligt; på mobil och surfplatta komprimeras headern, nivåväljare visas som dropdown eller chips, och sektionerna blir tydliga accordionpaneler. Viktiga interaktioner (byta nivå, expandera sektion, öppna kriteriematris, stänga panel) ska vara fullt möjliga med tangentbord och fungera med skärmläsare. Kursplanstexter bryts inte upp på ett sätt som förstör punktlistor eller tabeller; i stället används horisontell scroll eller omslag som bevarar Skolverkets struktur. Detta säkerställer att både elever, lärare, skolledare och inspektörer kan läsa, söka och hänvisa till kursplanerna direkt i Vklass, oavsett enhet och hjälpmedel.

Kursplansöversikten är inte en fristående sida utan nås alltid från redan etablerade vyer. Funktionen exponeras endast där Vklass med säkerhet kan härleda en giltig ämnes‑/kurskod till en inläst kurs‑/ämnesplan. I vyer för lärare, elever, vårdnadshavare och mentorer innebär det att flik/ikon ”Kursplan”/”Visa kursplan” endast visas när mappning finns. Saknas giltig kod eller mappning (t.ex. rena arbetslagsgrupper, felkodade grupper) visas ingen länk alls, för att undvika döda länkar. Vid djuplänkning direkt till Kursplansöversikten görs alltid serverside‑behörighetskontroll; om grupp/kod inte kan kopplas till en kursplan visas ett informativt tomtillstånd med uppmaning att kontakta skoladministratör.

För lärare och annan undervisande personal är huvudingången ”Mina ämnen/kurser”. När en undervisningsgrupp öppnas visas kursplanen som en egen flik/sektion (t.ex. ”Kursplan”) intill befintliga flikar som Översikt, Planeringar, Uppgifter/Inlämningar och Resultat. Ett klick på fliken laddar rätt kurs‑/ämnesplan baserat på gruppens kod, skolform, skolans reforminställningar och eventuella ämnesblock (NO/SO med flera ämneskoder). Läraren kan när som helst växla tillbaka till andra flikar utan att kontext, filter eller urval i gruppvyn tappas. Vid samundervisning över skolgräns visas kursplansfliken på den faktiska undervisningsgruppen, oavsett på vilken skolenhet läraren är inloggad, under förutsättning att läraren har gruppbehörighet.

Mentorer, klasslärare, elevhälsa och rektor når främst kursplanen via elevens Studieöversikt/Ämnesöversikt. På varje ämnesrad där en giltig kurs‑/ämneskod finns visas en diskret länk eller ikon ”Visa kursplan”. När användaren klickar öppnas kursplanen i en sidopanel (drawer) eller överlägg ovanpå Studieöversikten. Panelen förväljer rätt skolform, version och nivå utifrån ämnesradens data. När panelen stängs – via kryss, Esc eller ”Tillbaka till studieöversikt” – bevaras scroll‑position, filter och elevurval i Studieöversikten. Därmed kan mentor eller EHT snabbt pendla mellan resultat (omdömen, betyg, närvaro, stödinsatser) och styrdokument utan att behöva leta upp varken grupp eller ämne i ”Mina ämnen”.

Elever når kursplansöversikten dels via ”Mina ämnen/kurser” på motsvarande sätt som lärare (fliken ”Kursplan” i respektive ämnes‑/kursgrupp), dels via egen Studieöversikt om den är aktiverad. I Studieöversikten visas ”Visa kursplan” endast för rader som motsvarar elevens egna pågående eller nyligen avslutade ämnen på vald skola. För elever med kurser på annan skolenhet (t.ex. samundervisning eller yrkeskurser) ska länken leda till kursplanen för just den kursinstans där eleven är inskriven, oberoende av primär skolfilter, så länge elevens behörighet omfattar båda skolorna. Elevvyn är förenklad och fokuserar på syfte och kunskapskrav/betygskriterier för den nivå eleven läser.

Vårdnadshavare ser kursplansöversikten via barnets vy, normalt från ”Barnets ämnen” eller Barn > Studieöversikt. Per ämnesrad visas samma typ av länk ”Visa kursplan” som i elevens vy; ett klick öppnar en läsvy med barnets aktuella kurs‑/ämnesplan. Återgång sker genom att stänga panelen eller använda en tydlig ”Tillbaka till studieöversikt för [barnets namn]”. Vårdnadshavare behöver inte använda ”Mina ämnen” och exponeras aldrig för tekniska uppgifter som interna kodmappningar.

Rektor, skolledning, skolchef och annan huvudmannanivå har utöver ovanstående personvyer även administrativa ingångar. I Skoladmin kan undervisningsgrupper och ämnen listas per skola; rader med giltig kod har åtgärden ”Öppna kursplan”, som visar samma skrivskyddade kursplansvy i gruppkontext utan elevdata. På högre nivå finns centrala översikter där kurs‑/ämnesplaner listas per skolform, skola och läsår (CoursePlanUsage); varje rad är klickbar och öppnar motsvarande kursplan i läsläge. Från analyser och rapporter där kurs‑/ämneskoder visas (t.ex. vid uppföljning per ämne) kan djuplänkar till kursplansöversikten exponeras som genvägar, under förutsättning att användaren har läsrätt till berörda skolor.

Systemadministratörer och IT‑ansvariga når kursplansöversikten dels via samma centrala översikter som huvudman, dels via konfigurationsvyer för kodmappningar (SubjectCourseCodeMapping). I dessa vyer kan varje mappad kod ha åtgärden ”Förhandsgranska kursplan”, som öppnar kursplansvyn baserat på vald mappning (inkl. _GSS/_SPEC, minoritetsspråkskoder, SFI). Detta gör det möjligt att verifiera att rätt text och skolformsvariant visas utan att gå via en specifik elev eller undervisningsgrupp.

Navigationen är konsekvent över roller och enheter. Brödsmulor och rubriker visar alltid var användaren befinner sig (t.ex. ”Mina ämnen > 8B Matematik > Kursplan” eller ”Studieöversikt > [Elev] > Svenska > Kursplan”), paneler kan stängas med mus, tangentbord och skärmläsare, och alla interaktiva element följer Vklass gemensamma tillgänglighetsmönster (WCAG 2.1 AA). På mobil och surfplatta öppnas kursplansöversikten som en helsidesvy ovanpå föregående sida; återgång sker via systemets tillbaka‑funktion eller en tydlig ”Tillbaka till …”-knapp högst upp.

Use cases

[01] Ämneslärare i grundskolan slår upp centralt innehåll direkt i ”Mina ämnen”

  • Mål: Snabbt se rätt centrala innehåll och kunskapskrav för matematikgruppen 8C enligt Lgr22.
  • Flöde: Läraren öppnar Mina ämnen, väljer gruppen ”8C Matematik” och klickar på fliken Kursplan. Systemet tolkar ämneskoden (MA/GRGRMAT01), skolform (grundskola) och läsår, väljer Lgr22 och spannet 7–9, och visar syfte, centralt innehåll och kunskapskrav. Läraren växlar vid behov nivå i nivåväljaren men stannar i samma gruppvy.
  • Resultat/nytta: Läraren får omedelbar tillgång till Skolverkets aktuella texter utan att lämna Vklass, slipper manuella PDF‑sökningar och kan direkt använda kursplanen som underlag när planeringar, uppgifter och matriser skapas i samma grupp.

[02] Lärare i anpassad grundskola verifierar att särskoleplanen används (MA_GSS)

  • Mål: Kontrollera att en matematikkurs för anpassad grundskola är kopplad till rätt kursplan (GSS) och inte till grundskolans.
  • Flöde: Läraren öppnar ”7–9A Matematik grundsär” under Mina ämnen och väljer Kursplan. Gruppen har kod MA_GSS, vilket via mappningen leder till GRSAMAT01. Headern visar tydligt ”Anpassad grundskola · Matematik · MA_GSS”. Läraren jämför syfte och centralt innehåll med sina befintliga planeringar.
  • Resultat/nytta: Läraren ser direkt att rätt skolformsvariant används, minskar risken att blanda ihop grundskola/anpassad grundskola och kan visa för elev och vårdnadshavare exakt vilken kursplan eleven följer.

[03] NO‑lärare i blockgrupp växlar mellan delämnenas kursplaner

  • Mål: Kunna slå upp kursplaner för Biologi, Fysik och Kemi i en sammanslagen NO‑grupp utan att lämna gruppen.
  • Flöde: NO‑läraren öppnar gruppen ”7B NO” i Mina ämnen och går till Kursplan. Gruppen är kopplad till flera ämneskoder (BI, FY, KE) via TeachingGroupSubject. I kursplansvyn visas flikar eller väljare för ”Biologi”, ”Fysik” och ”Kemi”. Läraren väljer t.ex. ”Biologi”, ser Lgr22‑planen för åk 7–9 och kan sedan växla till ”Fysik” för motsvarande plan, utan att lämna gruppkontexten.
  • Resultat/nytta: Läraren får en samlad ämnesöversikt för alla delämnen i blocket och kan säkerställa att planeringar och bedömningar per delämne utgår från rätt kursplan, trots att undervisningen sker i en gemensam NO‑grupp.

[04] Elev tar reda på vad som krävs för högre betyg i Kemi

  • Mål: Förstå kunskapskraven för Kemi i åk 9 och se vilka delar som redan är bedömda.
  • Flöde: Eleven öppnar ”9B Kemi” under Mina ämnen och väljer Kursplan. I elevvyn visas kort syftet, därefter kunskapskraven för årskurs 7–9. Kriterier där eleven har minst en bedömning markeras med ”Bedömning finns”. Via länken ”Visa dina bedömningar” går eleven vidare till sin kriteriematris för detaljerad information.
  • Resultat/nytta: Eleven får en samlad, begriplig bild av vad som krävs för olika betygssteg och hur de egna bedömningarna förhåller sig till kursplanen, utan att själv söka upp och tolka Skolverkets material.

[05] Vårdnadshavare sätter omdöme i Svenska i relation till kursplanen

  • Mål: Förstå vad ett omdöme i Svenska åk 7 grundar sig på i Skolverkets styrdokument.
  • Flöde: Vårdnadshavaren öppnar barnets Studieöversikt och ser ett nytt omdöme i Svenska. Hen klickar på Visa kursplan på ämnesraden. En panel öppnas med syftet och kunskapskraven för åk 7–9 i Svenska, utan tekniska uppgifter om koder eller versioner. Panelen stängs med ”Tillbaka till studieöversikt”.
  • Resultat/nytta: Vårdnadshavaren kan relatera omdömet till konkreta formuleringar i kursplanen i stället för till egna skolminnen, vilket ger mer faktabaserade utvecklingssamtal och minskar missförstånd om vad omdömet betyder.

[06] Rektor identifierar felkodat ämne och grupper utan kursplan

  • Mål: Säkerställa att alla undervisningsgrupper på skolan är kopplade till giltiga ämnes-/kurskoder och rätt skolformsvariant (inkl. _GSS/_SPEC).
  • Flöde: Rektorn öppnar skolans kursplansöversikt i Skoladmin, filtrerar på aktuellt läsår och skolformerna ”Grundskola” och ”Anpassad grundskola”. Vyn visar vilka kursplaner som används samt en lista över grupper med ogiltig kod eller utan mappad kursplan (markerade med varningsikon). För en felkodad grupp öppnar hon ”Öppna kursplan” och ser att systemet visar tomtillstånd ”Ingen kursplan kan visas…”. Hon exporterar listan till skoladministratören som uppdaterar koderna i elev-/schemasystemet.
  • Resultat/nytta: Rektorn får en snabb bild av datakvaliteten kring kursplaner på skolan, kan upptäcka felkoder innan de når klassrummet och säkerställa att lärare och elever alltid möter rätt kursplan i Vklass.

[07] Systemadministratör rättar SFI-/modersmålskod så att lärare hittar rätt kursplan

  • Mål: Åtgärda att SFI- och modersmålsgrupper saknar kursplan i Vklass trots att de finns hos Skolverket.
  • Flöde: Admin får en felrapport från en SFI‑lärare som ser tomtillstånd i fliken Kursplan för gruppen med kod SFIKUB91. I adminvyn för kodmappningar söker admin på ”SFIKUB91” och ”SFI” och ser att koden saknar CoursePlanId. Admin kopplar den till rätt SFI‑kursplan och sparar. Läraren öppnar därefter gruppen igen och ser nu kursplanen för ”Svenska för invandrare, kurs B” med korrekt skolform ”Vuxenutbildning”. Samma flöde används senare för en modersmålsgrupp i meänkieli (M2SMI), som mappas till rätt minoritetsspråksplan.
  • Resultat/nytta: Vanliga problem med ”saknad kursplan” kan lösas av lokal admin utan databasingrepp. Lärare inom SFI och modersmål/minoritetsspråk får samma tillförlitliga kursplansöversikt som övriga ämnen, och Vklass kodlista hålls i synk med Skolverkets koder.

User stories

För lärare och ämneslärare i grundskola, anpassad grundskola, specialskola, gymnasium och vuxenutbildning innebär funktionen att de från Mina ämnen vill kunna öppna Skolverkets kurs‑/ämnesplan direkt via en flik ”Kursplan” i respektive undervisningsgrupp, så att syfte, centralt innehåll och kunskapskrav är omedelbart tillgängliga utan att lämna Vklass. De vill att systemet automatiskt använder gruppens ämnes‑/kurskod, skolform, läsår och reforminställning för att välja rätt variant (t.ex. Lgr22, Gy11, Gy2025, MA_GSS, BI_SPEC), så att de inte behöver kunna kodlistor eller riskera att arbeta mot fel kursplan. Gymnasielärare vill tydligt se om en grupp följer en Gy11‑kurs eller en Gy2025‑ämnesnivå, medan lärare i anpassad grundskola och specialskola vill att det ska framgå entydigt att det är särskolans/specialskolans plan (t.ex. MA_GSS, GRSPMAT01) som visas. Lärare vill dessutom kunna se en enkel, översiktlig status för vilka kunskapskrav i just denna grupp som har använts i bedömningar, för att identifiera kriterier där inga bedömningar ännu finns, samt ha en statisk, lättnavigerad läsvy som fungerar även för mindre digitalt vana användare.

Mentorer, klasslärare, elevhälsopersonal och studie‑ och yrkesvägledare vill från elevens Studieöversikt kunna klicka på ”Visa kursplan” vid varje ämnesrad, så att de i möten med elev och vårdnadshavare kan utgå från den faktiska kursplantexten när de diskuterar omdömen, betyg och stödinsatser. De vill kunna växla snabbt mellan resultat (omdömen, närvaro, stöd) och motsvarande kursplan i en sidopanel utan att tappa sin position i översikten. Specialpedagoger vill enkelt kunna öppna kursplanen för de ämnen där eleven har extra anpassningar eller åtgärdsprogram, för att kunna anknyta stödinsatser till ämnets syfte och centrala innehåll. Studie‑ och yrkesvägledare vill kunna se kursplanerna för både pågående och planerade kurser, för att ge elever och vårdnadshavare en korrekt bild av vilka kunskaper och förmågor olika val innebär.

Elever med olika behov vill i sina ämnesgrupper ha en tydlig, lättläst kursplansvy där det framgår vad de förväntas lära sig och vad som krävs för olika betyg på just deras nivå. Elever i högre årskurser vill kunna använda kursplanen för att planera sitt arbete mot önskat betyg, medan elever som tycker skolan är svår vill ha en överskådlig presentation som hjälper dem att förstå vad ämnet går ut på och hur de aktuella arbetsuppgifterna hänger ihop med målen. Elever som ofta är frånvarande vill kunna se helheten i kursen och orientera sig i vad de missat i relation till kursens mål, utan att behöva leta i flera gamla grupper. Elever som läser flera nivåer eller kurser (t.ex. olika engelskanivåer eller Gy2025‑ämnesnivåer) vill tydligt se vilken nivå/årskursspann som gäller för just deras grupp, så att de inte blandar ihop krav mellan kurser.

Vårdnadshavare vill från barnets ämneslista eller Studieöversikt kunna öppna kursplanen för varje ämne, så att de ser vad skolan faktiskt ska bedöma barnet utifrån – inte bara en bokstav eller ett kort omdöme. De vill att det tydligt framgår att kursplanen är aktuell och rätt version (t.ex. Lgr22, Gy11, Gy2025) för att inte behöva förlita sig på egna, äldre skolreferenser. De vill på en översiktlig nivå kunna se vilka delar av kursplanen som barnet fått bedömningar på, utan detaljerad resultatsammanställning direkt i kursplanen, för att kunna följa upp både styrkor och utvecklingsområden på ett konstruktivt sätt. Vårdnadshavare till barn i anpassad grundskola eller specialskola vill dessutom tydligt se att det är särskolans/specialskolans kursplan som gäller, så att de förstår att kraven är anpassade efter rätt skolform.

Rektorer, förskolerektorer och skolledningar på en skola vill kunna se vilka kurs‑ och ämnesplaner som används på enheten per skolform och läsår, för att snabbt upptäcka grupper som saknar kursplan eller är felkodade (t.ex. saknar _GSS trots att gruppen är särskolegrupp). De vill från en specifik undervisningsgrupp kunna öppna dess kursplansöversikt för att kontrollera att rätt skolformsvariant används vid handledning, lektionsbesök och kvalitetsarbete. Förskolerektorer och ansvariga för fritidshem vill, när grupperna kopplas till övergripande läroplanskoder (t.ex. Lgr22, Lspec22), kunna visa dessa texter för personal och vårdnadshavare som gemensam referens i planering och dokumentation. Rektorer vill i sitt analysarbete enkelt kunna växla mellan aggregerade resultat per ämne och motsvarande kursplanstexter, så att uppföljning av resultat alltid görs i relation till faktiskt gällande krav.

Skolchefer, förvaltningsledningar och politiska företrädare vill ha en kommunövergripande bild av vilka kurs‑ och ämnesplaner som används på olika skolor och skolformer, för att kunna bedöma likvärdighet, reformimplementering (t.ex. Gy2025) och resursbehov. De vill kunna filtrera på t.ex. Gy2025‑ämnen, särskoleämnen, SFI eller modersmål/minoritetsspråk och se antal grupper/elever per kursplan, utan att ta del av individdata. Vid strategiska beslut och uppföljning vill de kunna öppna kursplansöversikten för representativa ämnen och använda den som gemensam, versionssäkrad referens när de diskuterar kvalitet, kravnivå och prioriteringar med rektorer och huvudmannens tjänstepersoner.

Systemadministratörer och IT‑ansvariga vill ha en tydlig konfigurationsvy där de ser hur ämnes‑/kurskoder från elev‑ och schemasystem (inklusive suffix som _GSS, _SPEC, Skolverkets GRSAXXX‑koder, SFI‑koder samt modersmål/minoritetsspråk som ML/M1/M2 + språkkod) är mappade mot interna kursplaner. De vill kunna identifiera koder som saknar mappad kursplan eller där kursplanen är tom, och åtgärda detta utan databasingrepp. De vill också kunna förhandsgranska hur en kursplan kommer att visas för användare direkt från mappningsvyn, för att snabbt verifiera att rätt skolformsvariant och version används. Samtidigt vill de att behörigheter för kursplansöversikten automatiskt ska följa befintliga rättigheter till grupper och Studieöversikt, samt att funktionen är robust mot Skolverkets uppdateringar och reformer, så att nya eller ändrade kursplaner kan tas i bruk via en kontrollerad import‑ och versionsprocess utan återkommande speciallösningar.

Lagar, förordningar och myndighetskrav

Kursplansöversikten behöver utformas i enlighet med flera parallella regelverk: skollagen och Skolverkets föreskrifter styr vilka styrdokument som ska ligga till grund för undervisningen, arkiv‑ och dokumentationsregler styr hur länge och i vilken form de ska bevaras, offentlighets‑ och sekretesslagstiftning styr vilken resultatinformation som får sammanställas och visas, och dataskyddsförordningen (GDPR) samt DOS‑lagen med tillhörande WCAG‑krav styr hur personuppgifter respektive innehåll ska hanteras och presenteras tekniskt.

Ur skollagen och Skolverkets beslut om läroplaner, kurs‑ och ämnesplaner följer att undervisning och bedömning ska vila på de nationella styrdokumenten för rätt skolform och rätt version. Kursplansöversikten får därför inte introducera egna eller modifierade varianter av kursplaner, utan ska spegla Skolverkets texter korrekt, versionshanterat och tydligt åtskilda från lokala tolkningar. Det innebär krav på att systemet ska:

  • alltid visa rätt skolformsvariant utifrån gruppens kod, skolform och inställningar (t.ex. grundskola vs anpassad grundskola _GSS vs specialskola _SPEC, gymnasieskola vs anpassad gymnasieskola, vuxenutbildning),
  • hantera reformer och övergångsperioder (t.ex. Lgr11→Lgr22, Gy11→Gy2025) så att rätt version visas för respektive grupp,
  • återge kursplanstexter oförändrade i sak (ingen redigering som ändrar innebörd, struktur eller kunskapskrav),
  • tydligt märka kursplaner med källa (Skolverket), läroplan (t.ex. ”Lgr22”, ”Gy2025”, ”Lspec22”) och giltighet (”gäller från …”),
  • visuellt särskilja officiell text från lokala kommentarer eller lärarstöd som hör hemma i planeringar/dokumentation, inte i kursplansvyn.

Läroplaner och kurs‑/ämnesplaner är normerande handlingar och ingår i underlaget för skolans systematiska kvalitetsarbete, klagomålshantering och tillsyn. Arkivlagen och skollagens bestämmelser om uppföljning och dokumentation innebär att det i efterhand måste gå att fastställa vilken kursplan som gällde när en viss bedömning eller ett betyg sattes. För Kursplansöversikt innebär detta krav på att systemet ska:

  • versionera kurs‑/ämnesplaner och aldrig skriva över äldre texter när Skolverket uppdaterar något,
  • kunna knyta rätt version av kursplanen till rätt grupp, skolform och period,
  • möjliggöra visning av historiska kursplaner vid behov (t.ex. vid granskning av äldre betyg eller omprövningar),
  • undvika att blanda komponenter från olika versioner (t.ex. syfte från ny version och kunskapskrav från gammal) i samma vy.

När kursplanstext kombineras med resultat‑ eller elevinformation aktualiseras både GDPR och offentlighets‑/sekretessregler (för kommunala huvudmän). Själva kursplanerna är offentliga styrdokument och normalt inte personuppgifter, men kopplingar till elever, lärare, grupper och bedömningar är personuppgiftsbehandling. Här gäller att huvudmannen är personuppgiftsansvarig och Vklass AB personuppgiftsbiträde. För Kursplansöversikt innebär det bland annat:

  • Laglig grund: Behandlingen ska ske med stöd av uppgift av allmänt intresse/myndighetsutövning och/eller rättslig förpliktelse enligt skollagen. Funktionen får inte återanvända data för egna syften utanför PUB‑avtalet.
  • Ändamålsbegränsning och dataminimering: Kursplansöversikten ska återanvända befintliga elev‑, lärar‑ och bedömningsdata och inte skapa nya personuppgiftskategorier i onödan. Den får t.ex. inte lagra egna kopior av bedömningar utan ska läsa från befintliga entiteter.
  • Riktighet och rättssäkerhet: Kopplingen mellan grupp, ämnes‑/kurskod, kursplan och resultat måste vara korrekt. Ändringar i kodmappningar och kursplanskopplingar (t.ex. i SubjectCourseCodeMapping) ska loggas med vem/när/vad, så att fel kan spåras och rättas.
  • Integritet och konfidentialitet: Åtkomst till vyer där kursplaner kombineras med individdata ska helt följa Vklass befintliga behörighetsregler (lärare ser sina grupper, elever/vårdnadshavare ser bara egen information, skolledning inom egen skola osv.). All överföring och lagring av personuppgifter ska ske med adekvata säkerhetsåtgärder (t.ex. kryptering, behörighetsstyrning, loggning).
  • Dataskydd genom teknik och standardinställningar (art. 25): Standardvyer ska vara återhållsamma – t.ex. visa endast elevens egna bedömningsmarkörer i elevvyn och endast aggregerad status på ledningsnivå, utan onödig exponering av individdata.

För kommunala huvudmän tillkommer krav enligt offentlighets‑ och sekretesslagen (OSL). Kursplansöversikt får inte utformas så att känsliga uppgifter kan utläsas indirekt ur aggregerade vyer på skol‑ eller huvudmannanivå. Det innebär bl.a. att:

  • aggregerade indikatorer (t.ex. ”X % av kunskapskraven har bedömningar i denna grupp”) endast visas för roller som redan har rätt att se motsvarande elevunderlag,
  • centrala vyer för skolchef/huvudman som visar användning av kursplaner inte innehåller individdata, utan endast antal grupper/elever per kursplan,
  • utformningen tar höjd för att fristående skolor inte omfattas av OSL men ändå behöver skydda elevuppgifter enligt andra sekretess‑ och tystnadspliktsregler – samma försiktighetsprincip tillämpas tekniskt för alla huvudmän.

DOS‑lagen och kraven på WCAG 2.1 nivå AA innebär att kursplansöversikten måste vara tillgänglig för alla användare, inklusive elever och vårdnadshavare med funktionsnedsättning. För funktionen konkretiseras detta i krav på att:

  • kursplanstexterna struktureras med korrekta rubriknivåer, listor och tabeller som bevarar Skolverkets struktur och fungerar med skärmläsare,
  • alla interaktiva element (flikar, nivåväljare, expanders, länkar till matriser/resultat) är fullt användbara med tangentbord och har tydlig fokusmarkering,
  • färg, ikoner och statusindikatorer (t.ex. ”bedömning finns”) alltid kompletteras med text och tillräcklig kontrast,
  • responsiv design säkerställer läsbarhet och navigerbarhet på både stora och små skärmar, inklusive tydliga och tillgängliga fel‑ och tomtillstånd (t.ex. ”Ingen kursplan kan visas – kontakta skoladministratör”).

Ansvarsfördelningen mellan personuppgiftsansvarig huvudman och personuppgiftsbiträdet Vklass AB behöver vara tydlig. Huvudmannen beslutar bl.a. om vilka moduler som används (t.ex. Studieöversikt, kriteriematriser, betyg), hur ämnes‑/kurskoder konfigureras och hur behörigheter sätts för olika roller, samt ansvarar för information till registrerade om behandlingen. Vklass ska å sin sida:

  • implementera Kursplansöversikt i enlighet med gällande lagstiftning och PUB‑avtal (inkl. versionering, loggning, åtkomstkontroll),
  • säkerställa att kursplansdata och kopplingar till personuppgifter hanteras säkert ur ett tekniskt och organisatoriskt perspektiv,
  • inte förändra Skolverkets texter på ett sätt som kan ändra rättslig innebörd eller skapa parallella ”officiella” versioner,
  • inte utöka skolans informationsskyldighet gentemot elever/vårdnadshavare (t.ex. genom att blanda in IUP‑ eller omdömesregler i denna vy – sådana regler hanteras i omdömes‑/IUP‑modulerna).

Sammanfattningsvis ska Kursplansöversikten stödja huvudmannens lagstadgade uppdrag genom att göra det enklare att använda rätt styrdokument på ett likvärdigt, transparent och rättssäkert sätt, utan att skapa nya juridiska risker. Funktionen ska minska risken för felaktig kursplan/skolform, göra det tydligt vilket styrdokument som ligger till grund för en bedömning, och samtidigt respektera dataskydd, sekretess och tillgänglighet så att alla berörda kan ta del av styrdokumenten på likvärdiga villkor.

Kundönskemål och behovsbild

Kunder beskriver återkommande att hanteringen av kurs- och ämnesplaner i dag är fragmenterad och delvis manuell. Lärare hämtar texter från Skolverkets webb och PDF:er, gör egna nedbrytningar i planeringar och matriser och försöker sedan förklara sambandet muntligt för elever och vårdnadshavare. Behovsbilden är en gemensam, digital ”sanningskälla” i Vklass där Skolverkets kurs‑/ämnesplaner alltid finns lätt åtkomliga, är korrekt versionshanterade och automatiskt kopplade till faktiska undervisningsgrupper i Mina ämnen – utan att läraren behöver kopiera, uppdatera eller felsöka texter själv.

Ett centralt önskemål är en tydlig och konsekvent koppling mellan kursplan och elevens resultat. Lärare, mentorer och elevhälsa vill kunna se kunskapskrav/betygskriterier i direkt relation till omdömen, kriteriematriser och betyg, gärna via Studieöversikt och Ämnesöversikt, i stället för att förlita sig på fristående matriser eller externa dokument. Elever och vårdnadshavare efterfrågar å sin sida en begriplig bild av vad ämnet går ut på och vad som krävs för olika nivåer, kopplat till de uppgifter, bedömningar och betyg de ser i Vklass. Önskemål om statiska kursöversikter, uppgiftslistor och aggregerade händelsevyer bottnar i samma behov: att i en och samma kontext kunna se helheten i ett ämne, där styrdokumenten är den självklara referenspunkten men utan att skapa nya, parallella bedömningsflöden.

På skollednings‑ och huvudmannanivå finns ett uttalat behov av likvärdighet och kontroll. Rektorer, skolchefer och nämndspersoner vill snabbt kunna se vilka kurs‑/ämnesplaner som används, var de används och för vilka elevgrupper, samt att rätt skolformsvariant och rätt reformversion är kopplad till respektive grupp (grundskola, anpassad grundskola, specialskola, gymnasium, anpassad gymnasieskola, vux). I samband med ämnesreformen Gy2025 har detta skärpts: kunder vill få stöd för parallell hantering av Gy11‑kurser och Gy2025‑ämnen, tydlig märkning av vilken reform en grupp följer och aggregerade vyer som visar hur införandet fortskrider per skola och huvudman – utan att blanda ihop skolformer eller versioner.

Kunder inom anpassad grundskola, specialskola, SFI och modersmål/minoritetsspråk lyfter särskilda krav. De förväntar sig att koder som MA_GSS, EN_GSS, BL_SPEC, BI_SPEC, GRSAMAT01, GRSAMOR01, M2FIT, M2SMI, SFIKUB91 m.fl. automatiskt leder till rätt kurs‑/ämnesplan och att ämnesområdesplaner (grundsär/gymnasiesär) och specialskolans ämnen är sökbara och valbara i samma logik som övriga ämnen. Flera supportärenden visar att brister i kodmappning och sökbarhet direkt underminerar förtroendet för funktionen; kunder förväntar sig därför att alla koder som nämns i Vklass dokumentation också fungerar fullt ut i kursplansöversikten och i läroplanskopplingar i planeringar.

Ämneslärare efterfrågar dessutom samlade ämnesöversikter över tid. De vill kunna se vad som planerats, genomförts och bedömts i relation till kurs‑/ämnesplanen utan att behöva öppna ett stort antal gamla grupper varje gång de ska göra en summativ bedömning eller planera nytt läsår. Önskemål som ”översikt som ämneslärare”, ”uppgifter i kurs”, sammanställningar av lektionsinnehåll och samlade prov‑/läxvyer pekar mot ett behov av stabila, ämnescentrerade vyer där kursplanen utgör strukturen, medan uppgifter, prov och lektionsinnehåll återanvänds från befintliga moduler.

Slutligen finns en tydlig användbarhets‑ och tillgänghetsdimension. Lärare vill ha en enkel, statisk och pålitlig uppslagsvy för kursplaner direkt i Mina ämnen, med så få klick och så lite teknisk komplexitet som möjligt, även i klassrumssituationer. Elever och vårdnadshavare vill möta ett lättläst, mobilanpassat gränssnitt där de slipper tolka koder och versionsbeteckningar men kan lita på att innehållet är aktuellt, korrekt och kommer från Skolverket. Huvudmän betonar också att funktionen måste följa WCAG/DOS så att alla elever kan ta del av styrdokumenten, och att uppdateringar av kursplanerna inte får skapa onödigt notisbrus – kursplanen ska vara en stabil referens, inte en källa till återkommande notifieringar.

Designprinciper och användbarhet

Kursplansöversikten utformas som en statisk, snabb och förutsägbar referensvy. Grundprincipen är ”så lite som möjligt, men tillräckligt”: användaren ska alltid direkt se vilket ämne, vilken skolform, vilken läroplan/version och vilket nivå-/årskursspann som gäller, utan att behöva göra egna val eller tolkningar. All konfigurering sker i bakgrunden via kodmappning och reforminställningar – i klassrummet ska vyn fungera med ett klick.

Informationshierarkin är konsekvent. I headern visas alltid Skolverkets ämnesnamn, skolform, läroplan (t.ex. Lgr22, Gy2025, Lspec22), ämnes-/kurskod (inkl. _GSS/_SPEC m.fl.) och, där det är relevant, lokal gruppbeteckning som tillägg. Detta minimerar problem som att elever ser ”4, 4, 4 …” istället för tydliga ämnesnamn. Nivå/årskursspann (t.ex. F–3, 4–6, 7–9, kurs 1 / nivå 1–3 i Gy2025) förväljs automatiskt utifrån gruppens data och visas endast som väljare (chips/flikar/dropdown) när flera nivåer faktiskt är relevanta.

Struktur och terminologi följer Skolverket rakt av. Rubriker som ”Syfte”, ”Centralt innehåll”, ”Kunskapskrav” och ”Betygskriterier” återges i rätt ordning och utan redaktionella omskrivningar. Kursplanstexterna är skrivskyddade och presenteras oförändrade i sak. Vklass-specifika begrepp (t.ex. ”kriteriematris”, ”Studieöversikt”) placeras utanför själva texten – i navigations- och hjälpelement – så att det alltid är tydligt vad som är myndighetstext och vad som är systemfunktion.

Interaktionen bygger på ”progressive disclosure”. Grundinnehållet (ämneshuvud, nivå, syfte, centralt innehåll, kunskapskrav/betygskriterier) är alltid synligt utan extra klick, med möjlighet att fälla ut längre avsnitt vid behov. Mer avancerade funktioner – som länkar till kriteriematriser, filtrering av kunskapskrav eller växling mellan delämnen i NO/SO-block – exponeras först när användaren aktivt efterfrågar dem. På så sätt hålls vyerna begripliga även för ovana användare, samtidigt som erfarna lärare snabbt når sina verktyg.

Rollanpassning sker genom olika informationsdjup, inte olika logik. Lärare och skolledning ser fler länkar (t.ex. till matriser, planeringar och uppföljningsvyer) och kan vid behov få enkla statusindikatorer per kunskapskriterium på gruppnivå (t.ex. ”Inga bedömningar” / ”Bedömning finns i gruppen”). Elever och vårdnadshavare ser samma kursplanstext, men med fokus på syfte och de krav som gäller för elevens nivå, kompletterade med enbart enkla markörer av typen ”Bedömning finns” där skolan valt att visa detta. Huvudmannanivå ser endast aggregerad användning per kursplan, aldrig individdata.

Visuell design och komponenter följer Vklass gemensamma designbibliotek. Flikar, accordionpaneler, nivåval (chips/dropdown) och knappar återanvänds från t.ex. Planeringar och Studieöversikt, så att beteenden känns igen. Detta gäller även för ikoner, färger och typografi. Genom att använda samma mönster minimeras inlärningströskeln och behovet av särskild manual – användaren ska i praktiken ”känna igen sig” första gången vyn öppnas.

Responsivitet och mobilanpassning är grundkrav. På mindre skärmar visas kursplanen i en ren en-kolumnslayout: header överst, följt av nivåväljare och fällbara sektioner. Primära åtgärder (t.ex. ”Visa dina bedömningar”, ”Tillbaka till studieöversikt”) placeras högst upp. Alla funktioner är tillgängliga utan hover-beteenden; allt som kan göras med mus ska också kunna göras med pekskärm och tangentbord.

Tillgänglighet enligt WCAG 2.1 AA är inbyggd i designprinciperna. Kursplanstexten struktureras med korrekta rubriknivåer, listor och tabeller som går att navigera med skärmläsare. Fokusordning följer den visuella strukturen, nivåval och sektioner kan styras med tangentbord, och ikoner eller färgkodning kompletteras alltid med text/ARIA-attribut. Exempelvis måste status ”Bedömning finns” vara läsbar både som text och via skärmläsare, inte bara genom färg.

Mikrokopi och tomtillstånd utformas för att reducera supportbehovet. Användaren möter klara, icke-tekniska formuleringar som besvarar vanliga frågor direkt: ”Ingen kursplan kunde visas eftersom gruppen saknar giltig ämnes-/kurskod. Kontakta skoladministratör.” snarare än felkoder. Kort introduktionstext vid första besöket förklarar i 2–3 meningar vad vyn visar och hur den förhåller sig till resultatvyerna. Tooltips används sparsamt för att förklara nödvändiga tekniska begrepp (t.ex. Gy2025, _GSS) när användaren aktivt efterfrågar mer information.

Fel- och undantagshantering följer principen ”hellre inget än fel”. Om en kursplan inte kan läsas in, är tom (endast rubriker) eller inte går att entydigt mappa till gruppens kod, visas inget styrdokumentsinnehåll alls utan ett tydligt tomtillstånd. Användaren får en konkret nästa åtgärd (t.ex. kontakta skoladmin), och samma avvikelse syns i adminrapporter. Detta minskar risken att lärare, elever eller vårdnadshavare arbetar mot fel version eller fel skolform.

Eventuellt AI-stöd (t.ex. förklarande hjälptester) betraktas som ett kompletterande lager, aldrig som del av den officiella kursplanen. Sådana funktioner är som standard avstängda, kan aktiveras per huvudman och märks alltid tydligt som stödmaterial. Originaltexten från Skolverket visas alltid separat och orörd, så att användare och tillsynsmyndigheter utan tvekan kan skilja mellan myndighetstext och automatiskt genererade förklaringar.

Riskanalys och hanteringsstrategier

En primär risk är att fel kurs‑/ämnesplan kopplas till en undervisningsgrupp, särskilt i miljöer med många källsystem, suffix (_GSS, _SPEC), alternativa koder (GRGRMAT01, GRSAMAT01, ML/M1/M2 + språkkod, SFI‑koder) och blockämnen (NO/SO). Fel kod eller felaktig mappning kan innebära att undervisning och bedömning sker mot fel styrdokument. Detta hanteras genom en central, versionshanterad SubjectCourseCodeMapping som ägs av huvudman/admin, automatiska valideringar vid import och gruppskapande (”okänd/otydlig kod” → ingen mappning), nattliga kontroller som flaggar grupper utan giltig mappning samt adminrapporter där sådana avvikelser kan rättas utan DB‑ingrepp. Kursplansöversikten får aldrig ”gissa” kursplan vid osäker kod: om mappning saknas visas ingen kursplan alls, tillsammans med ett tydligt tomtillstånd och varning i admin.

En närliggande risk är sammanblandning av versioner och skolformsvarianter, t.ex. Lgr11/Lgr22, Gy11/Gy2025, grundskola/anpassad grundskola/specialskola (MA vs MA_GSS vs MA_SPEC) eller olika teckenspråkskoder. Om användaren inte ser vilken version/skolform som gäller för en grupp kan fel krav läggas till grund för planering och uppföljning. Detta motverkas genom strikt versionering (CurriculumCode + Version + ValidFrom/ValidTo), tydlig märkning i kursplanshuvudet (”Lgr22 · Grundskola”, ”Anpassad grundskola · MA_GSS”, ”Gy2025 · Ämnesplan”) samt hårda regler för hur grupper mappas mot rätt CoursePlan utifrån skolform, kod och period. Historiska grupper fortsätter alltid peka på den version som gällde när de var aktiva; uppdateringar och reformer (t.ex. Gy2025) aktiveras via kontrollerade migrationsregler och cache‑bust, aldrig retroaktivt.

Tekniska aspekter och beroenden

Kursplansöversikten implementeras som en utökning av befintlig ASP.NET Core‑baserad arkitektur och återanvänder i största möjliga mån dagens tjänstelager för grupper, läroplanskopplingar och resultat. En dedikerad, central CoursePlanService/CurriculumService införs som enda källa för all kurs‑/ämnesplansdata i Vklass. Samtliga moduler som behöver kursplaner (Mina ämnen, Studieöversikt, planeringar, kriteriematriser, adminrapporter m.fl.) ska konsumera denna service, vilket eliminerar parallella datalager och minskar risken för inkonsekventa versioner mellan olika vyer.

På serversidan exponeras kursplaner via MVC‑kontroller och lätta JSON‑endpoints. I Mina ämnen används huvudsakligen serverrenderade partial views som initierar Aurelia‑komponenter med ett starkt typat CoursePlanViewModel. I Studieöversikt/Ämnesöversikt och adminvyer hämtas data on‑demand via JSON‑API:er när användaren öppnar en panel, vilket minimerar initial laddning och möjliggör effektiv caching. Alla endpoints gör behörighetskontroll serverside (roll, skola, grupp/elevkoppling) innan någon kursplans- eller resultatrelaterad data returneras.

Klientlagret byggs som återanvändbara Aurelia‑komponenter i TypeScript (t.ex. course-plan-view, course-plan-panel) som ansvarar för rendering av sektioner (syfte, centralt innehåll, kunskapskrav), nivåväljare, ämnesväxling i blockämnen (NO/SO) och eventuella statusindikatorer. Delade DTO:er (CoursePlanDto, KnowledgeCriterionDto, CentralContentItemDto m.fl.) definieras som .NET‑klasser i ett gemensamt bibliotek och serialiseras med Newtonsoft.Json i camelCase; motsvarande TypeScript‑interface speglar dessa modeller. Detta ger strikt typkontroll och minskar risken för regressionsfel vid schemaändringar. HTML‑fragment från Skolverket hanteras explicit (sanering/escaping där det behövs) och renderas med semantiskt korrekt markup för att stödja WCAG 2.1 AA.

Integrationen med befintliga kodkällor är beroende av ett utbyggt mappningslager, SubjectCourseCodeMapping. Detta lager normaliserar ämnes‑/kurskoder från elev‑ och schemasystem (t.ex. Procapita, Edlevo, IST, Alvis, Skola24, Royal Schedule), inklusive alternativa format och suffix (_GSS, _SPEC), Skolverkets GRGR/GRSA/GRSP‑koder, minoritetsspråkskoder (ML/M1/M2 + språkkod, GRSAMOR01, M2FIT, M2SMI m.fl.) och SFI‑koder (t.ex. SFIKUB91). För varje unik kombination av kod, skolform, källa och ev. alternativ kod pekar en rad i tabellen på ett CoursePlanId samt anger CurriculumCode och giltighetsintervall. Reglerna för prioritering (t.ex. MA_GSS framför MA, BI_SPEC framför BI) implementeras i tjänstelagret så att GUI‑komponenter alltid kan fråga ”ge kursplan för GroupId X” utan att känna till suffixlogik.

Import av kurs‑ och ämnesplaner från Skolverket implementeras som separata backend‑jobb (t.ex. Hangfire/Quartz) som läser in data från de mest robusta källor som finns tillgängliga (XML/JSON‑flöden, strukturerad HTML eller officiella API:er – inte skärm‑scraping). Importflödet parserar paketerade läroplaner (Lgr22, Gy11, Gy2025, grundsär/gy‑sär, specialskola, SFI osv.) till interna entiteter (CoursePlan, CurriculumSection, CentralContentItem, KnowledgeCriterion) och lagrar dem versionshanterat. Varje import kör validering: kursplaner utan innehåll (0 sektioner eller 0 kriterier där sådana ska finnas) markeras som ogiltiga och exponeras varken i mappningsvyer eller i Kursplansöversikt; de flaggas i stället i teknisk logg och adminrapport för manuell hantering. Nya versioner läggs alltid som nya poster; befintliga grupper fortsätter peka på tidigare version tills mappningen ändras enligt tydliga reformregler.

Versions‑ och reformhantering ligger huvudsakligen i CoursePlanService och mappningslagret. Varje kursplan bär fält som CurriculumCode (t.ex. Lgr22, Gy11, Gy2025, GRSA, GRSP), internt Version‑id samt ValidFrom/ValidTo. Vid uppslag från grupp används en regelbaserad algoritm som kombinerar skolform, ämnes‑/kurskod, läsår/termin, eventuella reformflaggor (t.ex. Gy2025 aktiverad från ett visst läsår) och explicita adminöverstyrningar i mappningstabellen. Detta möjliggör parallell existens av t.ex. Gy11‑kurser och Gy2025‑ämnesnivåer, samt tydlig separation mellan grundskola/anpassad grundskola/specialskola utan specialfall i klientlagret. Cache‑nycklar inkluderar både CoursePlanId och versionsinformation för att undvika ”stale content” vid reformer.

Prestanda och skalbarhet hanteras genom aggressiv återanvändning och cache av kursplansdata. Eftersom kurs‑/ämnesplaner är identiska för alla användare och ändras sällan kan de cachas i minne (MemoryCache/Redis) per CoursePlanId och relevant nivå, samt serveras med HTTP‑komprimering (gzip/br) och lämplig cache‑header. UI‑komponenterna använder lazy loading av sektioner (t.ex. syfte först, sedan centralt innehåll, därefter kunskapskrav) och laddar endast den nivå/åk‑span som faktiskt behövs i aktuell vy. Tyngre aggregeringsvyer för huvudman (CoursePlanUsage) kan byggas på materialiserade vyer eller förgenererade tabeller för att klara toppar vid terminsstart och reforminföranden.

Beroendet till andra moduler hålls avsiktligt enkelriktat. Kursplansservicen känner till KnowledgeCriterionId och används av kriteriematris‑modulen för att hämta texter, medan Kursplansöversikten vid behov kan anropa befintliga resultat‑/matristjänster för översiktlig status (t.ex. antal bedömda kriterier i en grupp). Om resultatmodulen tillfälligt är otillgänglig ska kursplansvyn ändå kunna renderas; statusindikatorer faller då bort utan att övrig funktionalitet påverkas. På samma sätt kan Kursplansöversikt visas även om t.ex. betygsmodulen eller stödinsatsmodulen är avstängd; länkar till sådana vyer döljs då dynamiskt.

Felhantering, loggning och övervakning är centrala tekniska beroenden. Alla misslyckade uppslag (GroupId/kod utan mappad kursplan, ogiltig skolform, ogiltig version) loggas strukturerat med korrelerande information (skola, skolform, kod, källsystem) och aggregeras till adminrapporter: ”grupper utan giltig kursplan”, ”koder utan mappning”, ”kursplaner utan innehåll”. Importjobb och kritiska tjänster kopplas till befintlig övervakning (t.ex. Application Insights/ELK) med larm vid återkommande fel eller onormala svarstider. Detta möjliggör proaktiv hantering av datakvalitetsproblem innan de når lärare och elever, och ger support tydliga underlag vid felsökning.

Säkerhet och dataskydd beaktas i alla tekniska gränssnitt. CoursePlanService hanterar i sig inga personuppgifter utan endast referensdata (kursplaner, sektioner, kriterier). När kursplaner kombineras med grupp‑ eller elevinformation sker detta i respektive domänservice (grupp, studieöversikt, resultat), där befintlig behörighetslogik och loggning redan tillämpas. Alla djuplänkar till Kursplansöversikten (t.ex. via GroupId eller ämnesrad i Studieöversikt) går via serverside‑kontrollerade endpoints som verifierar att den inloggade användaren har åtkomst till berörd skola/grupp/elev innan någon data returneras. Detta minimerar risken för otillbörlig exponering av elevnära information via genvägar eller delade länkar.

Ekonomiska och prestanda-relaterade aspekter

Kursplansöversikten innebär främst en initial investeringskostnad i form av ny datamodell, importflöden från Skolverket, mappningslogik för olika källsystem (inkl. _GSS/_SPEC, minoritetsspråk, SFI) samt admin‑ och rapportvyer för felsökning. Dessa delar är medvetet dimensionerade för flera skolformer och reformer (Lgr22, Gy11, Gy2025, Lspec22 m.fl.), vilket driver upp utvecklings‑ och testkostnaden initialt, men minskar behovet av manuella ”brandkårsinsatser” och databas‑ingrepp vid senare ändringar. Särskilt adminrapporter (t.ex. ”grupper utan kursplan”, ”koder utan mappning”) och nattliga valideringsjobb är en avsiktlig kostnad för att sänka supporttryck och felsökningskostnader över tid.

Själva kursplansdatan är begränsad och i praktiken statisk: ett fåtal läroplaner, ett överskådligt antal kurs‑/ämnesplaner och ett fast antal kunskapskriterier per plan. Data är dessutom gemensam för alla kunder. Lagring, indexering och backup av dessa tabeller är därför en marginell del av den totala databaskostnaden, särskilt jämfört med närvaro‑, uppgifts‑ och resultatdata. Ekonomiskt lönar det sig att lägga omsorg på en ren, väldokumenterad och välindekserad modell – fel i mappningslogik eller versionering är dyra först när de leder till fel i klassrummet, tillsynsfrågor eller omfattande datamigreringar.

Prestandamässigt är de kritiska vyerna de som används ofta och av många samtidigt: ”Mina ämnen” och Studieöversikten. Kursplanstexterna är texttunga men få till antalet och oföränderliga över längre perioder, vilket gör dem mycket lämpade för server‑cache (t.ex. MemoryCache/Redis) och HTTP‑komprimering. Strategin är att hämta varje CoursePlan/KnowledgeCriterion från databasen en gång per version och därefter återanvända den i RAM för tusentals anrop. Det kräver något mer minne på webbservrarna, men minskar trycket på databasen (CPU/I/O) och därmed behovet av att skala upp databasklustret – en av de mest kostnadsdrivande delarna i en SaaS‑miljö.

För huvudmannens och rektors mer avancerade översikter (t.ex. CoursePlanUsage per skola, skolform, läsår) är den ekonomiska och prestandamässiga risken kopplad till tunga, ad‑hoc‑frågor mot stora grupp‑ och elevtabeller. Detta hanteras genom materialiserade vyer eller en dedikerad CoursePlanUsage‑tabell som uppdateras periodiskt (t.ex. nattliga jobb). Batchkörningarna innebär en begränsad extra CPU‑kostnad i off‑peak‑tid, men säkerställer att interaktiva vyer för skolledning och huvudman är snabba även under högbelastningsperioder (skolstart, inför betygssättning, reforminföranden) utan att kräva överdimensionerad databaskapacitet.

Integrationen mot Skolverket är primärt en förvaltnings‑ och kvalitetskostnad, inte en driftskostnad. Importjobben körs relativt sällan (vid nya läroplaner, kursplansändringar eller reformer), vilket gör ren CPU‑förbrukning låg. Den verkliga kostnaden ligger i att bevaka förändringar hos Skolverket, uppdatera parse‑logik när format eller struktur ändras, revalidera mappningar (särskilt för GSS/SPEC, SFI, minoritetsspråk) och köra regressions‑tester. Denna kostnad är dock förutsägbar och centraliserad, och vägs upp av minskad manuell hantering ute på skolorna (färre saknade/tomma kursplaner, färre ad‑hoc‑uppdateringar).

På klientsidan hålls resursförbrukningen nere genom ”on demand”-laddning och återanvändning. Kursplanskomponenterna i Aurelia/TypeScript utgör en begränsad ökning av JavaScript‑volymen, och kursplanstext hämtas först när användaren faktiskt öppnar fliken/panelen ”Kursplan”. Kursplansdata cache:as i klienten per session där det är lämpligt, så att upprepad navigering (t.ex. öppna/stänga panelen i Studieöversikten) inte ger nya nätverksanrop. Detta minskar bandbredd, svarstider och last på applikationsservrarna, särskilt under toppar i augusti och vid nationella provperioder.

Eventuella AI‑baserade tillägg (sammanfattningar, förklaringar, flerspråkiga tolkningar) hanteras som separata, tillvalsbara tjänster med tydlig kostnadsbild. De medför potentiella externa API‑kostnader (token‑baserad prissättning mot språkmodeller), behov av egen cache för återanvändbara svar samt förstärkt övervakning. Kärnfunktionen – visning och versionering av kurs‑/ämnesplaner och koppling till grupper – är uttryckligen designad för att fungera helt utan AI‑komponenter, så att kunder kan välja AI‑stöd baserat på betalningsvilja, juridiska förutsättningar och faktisk nytta utan att riskera kärnprestanda eller tillgänglighet.

Slutligen kompletteras designen med telemetri och mätetal (t.ex. svarstider, cache‑träffgrad, andel felaktiga kodmappningar) som underlag för löpande optimering. Detta gör det möjligt att tidigt identifiera flaskhalsar eller onödiga bakgrundsjobb, justera cache‑strategier och dimensionering inför kända peak‑perioder samt balansera mellan infrastrukturkostnad och användarupplevelse på ett kontrollerat sätt.

Teststrategi och testfall

Teststrategin omfattar flera nivåer: automatiska enhets‑ och integrationstester i backend (framför allt CoursePlanService, importflöden och SubjectCourseCodeMapping), komponenttester i Aurelia/TypeScript, system‑ och acceptanstester i UI samt icke‑funktionella tester för prestanda, tillgänglighet (WCAG 2.1 AA), säkerhet och behörighet. Tester körs i separata testmiljöer med representativ data för alla relevanta skolformer (grundskola, anpassad grundskola, specialskola, gymnasieskola, anpassad gymnasieskola, vux/SFI).

Backend‑tester fokuserar på korrekt uppslag av kurs‑/ämnesplan utifrån skolform, ämnes‑/kurskod, läsår/period och reforminställningar. Enhetstester säkerställer att CoursePlanService alltid returnerar förväntad CoursePlanId för t.ex. MA vs MA_GSS vs BI_SPEC, Gy11‑kurser vs Gy2025‑ämnesnivåer, SFI‑koder (t.ex. SFIKUB91) samt modersmål/minoritetsspråk (ML/M1/M2 + språkkod, GRSAMOR01, M2FIT, M2SMI m.fl.). Importflöden från Skolverket testas med integrationstester som verifierar att alla sektioner (syfte, centralt innehåll, kunskapskrav/ämnesområden) parsas korrekt, att versionering (CurriculumCode, Version, ValidFrom/ValidTo) fungerar samt att ”tomma” kursplaner (rubriker utan innehåll/kriterier) spärras och flaggas som fel – de får inte bli valbara i UI.

Front‑end‑ och komponenttester säkerställer att Aurelia‑komponenterna (kursplansflik/panel) renderar rätt data och beter sig konsekvent i alla kontexter. Detta inkluderar: visning av korrekt header (ämnesnamn, skolform, läroplan, kod), nivåväljare (F–3/4–6/7–9, kursnivåer, Gy2025‑nivåer) med förvald nivå utifrån gruppens årskurs/kurs, växling mellan delämnen i blockämnen (NO/SO via TeachingGroupSubject), lazy loading av sektioner samt robust hantering av tomtillstånd (okänd kod, saknad mappning, otillgänglig kursplan). Komponenttester verifierar också att navigationen mellan kursplan och relaterade vyer (planeringar, matriser, Studieöversikt) inte läcker tillstånd eller bryter layout.

Funktionella systemtester genomförs scenariobaserat för alla skolformer och typfall som identifierats i support‑ och utvecklingsärenden. Det omfattar bl.a.:

  • uppslag av kursplan i Mina ämnen för lärare i grundskola, anpassad grundskola (_GSS/GRSA‑koder), specialskola (_SPEC/GRSP‑koder), gymnasium (Gy11), gymnasieskola med Gy2025‑ämnesplaner, vux/SFI samt modersmål/minoritetsspråk,
  • visning av korrekta sektioner/terminologi (inkl. ämnesområdesplaner och kapitel‑4‑mål för fritidshem där de används),
  • djuplänkar från Studieöversikt/Ämnesöversikt till kursplan och tillbaka (bevarad scroll‑position och filter),
  • korrekt tomtillstånd när kod saknas, är ogiltig, inte kan mappas eller kursplanen är spärrad som ”tom”.

Särskilda testfall säkerställer att multi‑ämnesgrupper (NO/SO‑block) visar en kursplan i taget och att rätt delämne (GE/HI/SH/BI/FY/KE/RE) matchar rätt kursplan, samt att grupper märkta som särskolegrupp men utan _GSS följer organisationens inställning.

Regressions‑ och integrationstester fokuserar på att befintliga flöden i Mina ämnen, Studieöversikt, planeringar, kriteriematriser, omdömen och betyg inte påverkas negativt. Det innefattar automatiserade API‑tester och end‑to‑end‑tester (t.ex. med Playwright) som verifierar att:

  • övriga flikar (Planeringar, Uppgifter/Inlämningar, Resultat) fungerar oförändrat,
  • kriteriematriser och omdömesvyer fortsatt visar samma kunskapskriterier som kursplansöversikten (via samma KnowledgeCriterionId),
  • studieöversiktens laddtider och filter beter sig som tidigare, även när kursplanspanelen används,
  • gruppsynk från elev‑/schemasystem (inkl. särskola/specialskola, _OLD‑koder, multi‑årskursgrupper) inte påverkas och att grupper utan giltig kod endast får korrekt tomtillstånd i kursplansvyn.

Roll‑ och behörighetstester är prioriterade utifrån GDPR/OSL‑krav. För varje roll (lärare/ämneslärare, mentor/klasslärare, elev, vårdnadshavare, elevhälsa, rektor, skolchef/huvudman, systemadmin) testas:

  • vilka ingångar som visas (flik ”Kursplan” i grupp, ”Visa kursplan” i Studieöversikt/Ämnesöversikt, adminrapporter/mappningsvyer),
  • vilken detaljnivå som exponeras (ingen/aggregat/individmarkörer),
  • att elev/vårdnadshavare endast når kursplaner för sina egna ämnen/barn,
  • att skolchef/huvudman endast ser aggregerad användning per kursplan utan elevdata,
  • att systemadmin kan förhandsvisa kursplaner via mappningsvyn utan att se elevinformation.

Behörighet testas både genom UI‑navigation och genom direkta URL/API‑anrop för att säkerställa att horisontell och vertikal åtkomsteskalation är förhindrad (t.ex. ingen åtkomst till kursplan via GroupId för en grupp/an skola användaren inte har rätt till).

Tillgänglighets‑ och WCAG‑tester kombinerar automatiska verktyg (t.ex. axe, Lighthouse) med manuell granskning och skärmläsartest. Fokus ligger på: korrekt rubrikstruktur (h1–h3 för ämne/syfte/sektioner), semantisk markup för listor och tabeller i kursplanstexterna, tangentbordsnavigering (inkl. nivåväljare, flikar, expanders och stängning av paneler), tydlig fokusmarkering, ARIA‑roller/‑attribut för flikar/accordioner, färgkontrast för text och indikatorer samt responsivt beteende på mobil (en‑kolumnslayout, inga onödiga horisontella scrollar). Testerna utförs i moderna webbläsare (Chromium/Chrome, Edge, Safari) på både desktop och mobil/surfplatta.

Prestanda‑, last‑ och felhanteringstester säkerställer att kursplansöversikten fungerar robust vid normal och hög belastning. Vi mäter svarstider för första och efterföljande uppslag (cache‑träffar), testar peak‑scenarier (många samtidiga användare som öppnar kursplaner via Studieöversikt och Mina ämnen vid terminsstart) samt verifierar att fallback‑logik fungerar: om kursplansservicen eller importerat innehåll tillfälligt inte är tillgängligt ska vyn visa tydliga, icke‑tekniska fel‑/tommeddelanden utan att påverka andra delar av Mina ämnen eller Studieöversikt. För admin‑ och huvudmannavyn testas att rapporter (t.ex. ”grupper utan kursplan”) genereras inom rimlig tid även i större kommuninstallationer.

Om AI‑baserade hjälpfunktioner aktiveras testas dessa separat. Testerna verifierar att: inga personuppgifter (elev, resultat, lärares namn) inkluderas i promptar; att AI‑svar alltid märks som förklarande stöd och visas separat från Skolverkets originaltext; att AI‑funktionen kan aktiveras/inaktiveras per huvudman; samt att fel i AI‑tjänsten (timeout, otillgänglighet) inte påverkar kärnfunktionen – kursplanstexten ska alltid kunna visas oberoende av AI‑lagret.

Slutligen definieras en uppsättning representativa end‑to‑end‑testfall som referens för manuell acceptans:

  • lärarflöden i alla skolformer (inkl. _GSS/_SPEC, SFI, modersmål/minoritetsspråk, NO/SO‑block, Gy11/Gy2025),
  • elev‑ och vårdnadshavarflöden via både Mina ämnen och Studieöversikt (en‑ och flerbarnsscenarier, kurser på annan skola),
  • mentor‑/EHT‑flöden där kursplan nås i samband med omdömen/stödinsatser,
  • rektors‑ och huvudmannaflöden för att hitta avvikande koder/grupper utan kursplan och för att öppna kursplaner i läsläge utan individdata,
  • adminflöden för att rätta mappningar (t.ex. SFI‑ eller minoritetsspråkskoder) och direkt se effekt i UI.

Dessa scenarier dokumenteras och används både initialt och vid framtida regressionstester, särskilt efter ändringar i importlogik, kodmappning eller reformrelaterade inställningar.

Medskick till teknisk specifikation

Kärnprincipen är att kurs‑ och ämnesplaner hanteras som gemensam, versionerad referensdata i en separat domän (Curriculum/CoursePlan), och att alla vyer (Mina ämnen, Studieöversikt, admin, planeringar, matriser m.fl.) enbart läser från denna domän. Inför ett tydligt tjänstelager, t.ex. ICoursePlanService, som är enda vägen in/ut för kursplansdata. Andra moduler ska aldrig lagra egna kopior av kursplanstext, utan endast referera till CoursePlanId/KnowledgeCriterionId.

Ämnes‑/kurskoder och skolform behöver hanteras explicit och centralt, skilt från presentationen. Använd/inför en tabell SubjectCourseCodeMapping som minst stödjer:

  • separata kodfält: kortkod (MA, EN, BL_SPEC, TN), ”Skolverkets kod” (t.ex. GRGRMAT01, GRSAMAT01, GRSPENG01) samt lokala varianter (MA_GSS, EN_GSS, TN_Lgr11)
  • skolform som dimension (Grundskola, Anpassad grundskola, Specialskola, Gymnasium, Anpassad gymnasieskola, Vux/SFI)
  • alternativa kodformat för modersmål/minoritetsspråk (ML/M1/M2 + språkkod, GRSAMOR01, MLFIN_SPEC, M2FIT, M2SMI m.fl.) och SFI‑koder (t.ex. SFIKUB91)
  • suffixlogik (_GSS, _SPEC) och specialskolans/grundsärskolans versionshanterade koder (GRSA…/GRSP…)
  • explicit länk till CoursePlanId och CurriculumCode (Lgr22, Gy11, Gy2025, Lspec22, GRSA, GRSP …) samt ValidFrom/ValidTo.

All logik för ”vilken kursplan gäller för denna grupp?” ska ligga i detta lager (inkl. prioritering MA_GSS framför MA, BI_SPEC framför BI osv.), inte i vyer eller klientkod. Bygg rapporter/valideringar ovanpå samma tabell:

  • grupper utan giltig ämnes‑/kurskod
  • koder utan mappad kursplan
  • grupper med _OLD/historiska koder där ny kod bör användas.

Versions‑ och reformhantering (Lgr11→Lgr22, Gy11→Gy2025, Lspec22, nya GSS/SPEC‑koder) måste finnas i datamodellen från början:

  • CoursePlan ska minst ha CurriculumCode, intern Version, ValidFrom, ValidTo, SchoolForm
  • uppslag grupp → kursplan ska baseras på kod + skolform + läsår/termin + ev. organisationsinställning (t.ex. ”Gy2025 används från läsår X”)
  • gamla grupper ska fortsatt peka på rätt historisk version efter import av nya texter – inga ”overwrite” av existerande CoursePlan
  • räkna med parallell drift (Gy11/Gy2025, Lgr11/Lgr22) under flera år; cache‑nycklar och API:er måste ta höjd för detta.

Strukturen för kursplaner behöver vara generisk och datadriven för att klara alla skolformer och framtida ändringar:

  • modellera i generiska entiteter som CoursePlan, CurriculumSection, CentralContentItem, KnowledgeCriterion
  • låt SectionType/metadata ange om en sektion är t.ex. ”Syfte”, ”Centralt innehåll”, ”Kunskapskrav/Betygskriterier”, ”Ämnesområden”, ”Kap. 4 Fritidshem”
  • hantera nivå/årskursspann/nivåkod som data (t.ex. gradeSpan, levelCode) i stället för hårdkodade spann (F–3, 4–6, 7–9)
  • bygg inget som förutsätter tre betygssteg E/C/A – låt betygssteg/nivåer vara data.

Detta krävs bl.a. för ämnesområden i anpassad grundskola/gymnasiesärskola, specialskolans ämnen, SFI samt Gy2025‑ämnesnivåer.

Kopplingen kursplan ↔ kriteriematriser/resultat ska alltid gå via KnowledgeCriterionId:

  • importen av kursplaner måste skapa/återanvända samma KnowledgeCriterionId som kriteriematriserna använder idag (ingen parallell, ny uppsättning ”nästan likadana” kriterier)
  • Kursplansöversikten får endast läsa bedömningar via befintliga resultat‑/matristjänster (t.ex. fråga ”finns någon CriterionAssessment för detta kriterium i den här gruppen?”)
  • ingen ny bedömnings‑ eller betygslogik får införas i kursplansvyn – den visualiserar bara status/indikatorer baserat på existerande data.

Detta är centralt för att undvika dubbletter, datainkonsistens och juridiskt otydliga ”parallella” kriterieuppsättningar.

Grupp → ämne/kurs‑kopplingen bör normaliseras och inte förlita sig på gruppnamn. Utgå från tydliga kodfält (t.ex. SubjectCode, CourseCode, ev. särskoleflagga, SchoolForm) kopplade till SubjectCourseCodeMapping. För blockämnen (NO/SO) och Royal Schedule‑liknande namn (t.ex. ”8C SO__GE”) ska importlogik och/eller en relation TeachingGroupSubject:

  • extrahera rätt ämneskoder per grupp (GE, HI, SH, BI, FY, KE, RE …)
  • knyta varje ämneskod i gruppen till rätt CoursePlanId
  • undvika att frontend ”gissar” ämne utifrån gruppnamn.

Bygg valideringar som hittar grupper utan tolkbar kod, med motstridiga skolformsuppgifter eller med flera ämneskoder utan komplett mappning.

Prestanda‑ och payload‑strategin bör utgå från att kursplanerna är få men stora och används i toppvyer (Mina ämnen, Studieöversikt):

  • cache:a CoursePlan/KnowledgeCriterion server‑side per CoursePlanId (MemoryCache/Redis) i stället för DB‑slag vid varje anrop
  • använd ”on demand”-laddning i UI: hämta kursplan först när användaren öppnar flik/panel ”Kursplan”
  • dela upp svaret: t.ex. syfte + centralt innehåll + aktuell nivå i första anropet, andra nivåer/sektioner via separata anrop vid behov.

Mät och övervaka svarstider kring terminsstart/reformperioder; var beredd att justera cache‑strategi och materialiserade vyer (t.ex. CoursePlanUsage).

Behörighet ska vara strikt serverside‑styrd och återanvända befintlig modell:

  • alla nya API:er/endpoints för kursplaner ska göra full auktoriseringskontroll (roll, skolform, skola, grupp/elevrelation) innan någon status eller aggregerad uppföljningsdata returneras
  • centrala/huvudmannaviser visar bara aggregerade räknare per kursplan/skola/läsår, aldrig individidentifierbar data
  • klienten ska inte få mer data än som ska visas; lita inte på att ”dölja” känslig information med CSS/JS.

Djuplänkar (t.ex. via GroupId/SchoolId) måste alltid gå genom dessa kontroller och fungera korrekt i multi‑skole‑/koncernscenarier.

Import av kursplaner från Skolverket bör ses som en frikopplad ETL‑process:

  • implementera separat importjobb/verktyg som läser Skolverkets data (XML/JSON/strukturerad HTML eller API) och mappar till CoursePlan/CurriculumSection/CentralContentItem/KnowledgeCriterion
  • varje import skapar ny version, aldrig overwrite; gamla versioner förblir läsbara för historik
  • bygg automatiserade kontroller (antal sektioner, antal kriterier, rubrikmatchning, koder, skolform) för att fånga strukturella ändringar/tomma planer innan de når produktion
  • använd feature‑togglar/version‑flaggor så att en misslyckad import inte påverkar befintliga grupper; växling till ny version ska vara kontrollerad och reversibel.

Logga importfel, mappningsfel och tomma planer strukturerat och exponera dem i adminrapporter (”kursplan utan innehåll”, ”kod utan kursplan”).

På frontend‑sidan bör kursplanslogiken kapslas i ett fåtal, välavgränsade Aurelia‑komponenter (t.ex. course-plan-view, course-plan-panel) med starkt typade indata‑modeller (CoursePlanDto, KnowledgeCriterionDto osv.). DTO:erna ska vara stabila och smala: metadata + HTML‑fragment för text, ingen domänlogik. Använd befintlig th-aurelia-enhance-module/-data för serverrenderade vyer, och rena JSON‑API:er för paneler (Studieöversikt, admin). Var konsekvent med semantisk HTML (rubriker, listor, tabeller) för att klara WCAG 2.1 AA utan specialfall per kursplan.

Datamodell och API:er bör designas med antagandet att Skolverket kommer att:

  • lägga till och ta bort koder
  • ändra struktur på kursplaner (nya sektionstyper, ändrad ordning)
  • införa nya skolformer/ämnesområden
  • versionera texter oftare i samband med reformer.

Det talar för:

  • datadrivna strukturer (sektionstyper, nivåer, skolformer i data, inte hårdkodade switch (Lgr22) { … })
  • utbyggbara mappningstabeller (nya koder kan konfigureras utan kod‑release)
  • enkel spårbarhet grupp ↔ kod ↔ kursplan (för felsökning, migrering, tillsynsfrågor).

Eventuella framtida AI‑/sammanfattningsfunktioner ska ligga i ett helt separat lager ovanpå denna kärna. De får inte förändra datamodellen för kursplaner eller ersätta originaltext i vyer. All AI‑användning ska vara:

  • valbar per huvudman (feature‑toggle)
  • fri från personuppgifter i promptar (endast offentlig kursplantext + icke‑identifierande metadata)
  • tydligt märkt i UI som ”stöd”, aldrig som officiell text.

Kärnan – kursplaner, koder, mappning, vyer och behörighet – måste vara fullständigt fungerande, rättssäker och testbar oberoende av om AI är aktiverat.