Förstudie: Jönköping Kommun - Ledighetsansökan (AI-native)

Nuläge

Ledighetsansökan finns redan i Vklass V2 (modul LeaveApplication, tabell dbo.LeaveApplications med ca 907 000 rader). Vårdnadshavare och myndiga elever ansöker via Frånvaro och ledighet > Ledighetsansökan; mentor/lärare ser och hanterar ansökningar för sina klasser i en stripe-tabell; rektor ser enhetens ansökningar med ShowAll-reglage; beslut fattas i en "Hantera ansökan"-dialog med fritextfältet "Anledning till beslut" (idag max 500 tecken via reasonForDecline). Beviljad ansökan genererar föranmäld giltig frånvaro. Skolans policytext (schoolConfig.leaveDescription) visas idag hopfälld bakom ett plustecken. Design-referens: 12 produktions-screenshots i epic-files/.

Problem

Jönköpings kommun (epic 24) behöver mer förutsägbar, spårbar och likvärdig handläggning: rektorer saknar en filtrerbar rektorsvy och måste räkna beviljade dagar manuellt; beslutstexter skrivs för hand utan kommungemensamma mallar; biträdande rektors beslutsrätt är otydlig; och Göteborgs stad rapporterar att vårdnadshavare missar skolans ledighetspolicy eftersom den är dold bakom ett plustecken, vilket leder till ansökningar som inte ryms i skollagens kriterier.

Önskat läge (varför mockupen)

Mockupen visar den befintliga V2-funktionen vidareutvecklad (replicate-then-extend): rektor och biträdande rektor arbetar i en filtrerbar rektorsvy där lista, filtervärden och summering delar samma urval; beviljad ledighet summeras i antal ansökningar och skoldagar; kommunadministratören förvaltar beslutsmallar med whitelistade variabler; beslutsfattaren väljer mall vid beslut, varpå variablerna ersätts och den färdiga texten hamnar i den vanliga redigerbara beslutstextrutan — beslutsfattaren får ändra hela texten och det är den slutliga texten som sparas historiskt och visas för den som ansökt. Vårdnadshavarens ansökningsstart får en policy-gate där policytexten visas direkt och måste bekräftas ("Läst och förstått") innan formuläret blir tillgängligt.

Avgränsning

I scope: lärarens lista/detalj/hantera-dialog/skapa-vy, rektorsvy med filter + summering, beslut med mall och redigerbar beslutstext, malladministration, policy-gate för vårdnadshavare, elevens och vårdnadshavarens historik med slutlig beslutstext, tomlägen och avstängd funktion. Out of scope: export, rapportvy/statistikmodul, ansökan för del av dag, BankID, nya notifieringskanaler, V1-migrering, generell mallmotor, AI-genererad beslutstext, native app, "Frånvarorapport för lärare" (se intake.md § Kravklassificering).

Personas

  • Lärare/mentor: Kerstin Berg (T5004-002), Proximaskolan, ämneslärare SV
  • Rektorsvy: Magnus Widén (T5004-007), biträdande rektor med adminåtkomst, Proximaskolan
  • Myndig elev: Emma Karlsson (S5006-301), 18 år, Teknova Gymnasiet, TE3A
  • Vårdnadshavare: Linda Nilsson (C5002-001A) — Theo Nilsson (S5004-203, åk 2, Proximaskolan) och Alice Nilsson (S5002-001, Trollmånes Förskola — skola utan ledighetsansökan)
  • Kommunadministratör: Anders Bergman (T5000-001), Nordängens kommun
  • Övriga i demo-data: Anna Andersson (S5004-701), Yuki Nguyen (S5004-802), Eva Andersson (C5004-701A), Robert Westberg (T5006-001, mentor för Emma)

Kira-grundning

  • Fråga: Kira MCP är inte tillgängligt i denna runtime. Intent-specens inbäddade Kira-preflight (§ 1 i 1/intent-spec-cursor.md) används som grundning.
  • Sammanfattning av svaret:
    • Beslutsflödet återanvänder POST AbsenceController.Application; beslut attribueras till faktisk användare — chunk 2e563033-28b2-5498-b446-410b5c5c4ea7src/VklassMainWeb/Controllers/AbsenceController.Applications.Application.cs
    • AnswerLeaveApplication skriver idag reasonForDecline (500 tecken) — chunk 28342228-4c9d-58c0-8817-701a96ab3b5esrc/Vklass.Core.Repository/Db/AbsenceRepository.cs
    • Biträdande rektor får beslutsrätt via Principal-/adminåtkomst (IsAdministrator), inte via ContactType.AssistantPrincipal (arkitekturbeslut, certainty 0,823)
    • Inga befintliga generella mallvariabler för ledighetsansökan — whitelist + serverside-rendering måste specas explicit
  • Att verifiera: dagdefinition (skoldagar vs kalenderdagar), policy-gate-scope för myndig elev, mall-lagring i target branch (se intake.md § Tekniska mockup-beslut).