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 — chunk2e563033-28b2-5498-b446-410b5c5c4ea7—src/VklassMainWeb/Controllers/AbsenceController.Applications.Application.cs AnswerLeaveApplicationskriver idagreasonForDecline(500 tecken) — chunk28342228-4c9d-58c0-8817-701a96ab3b5e—src/Vklass.Core.Repository/Db/AbsenceRepository.cs- Biträdande rektor får beslutsrätt via Principal-/adminåtkomst (
IsAdministrator), inte viaContactType.AssistantPrincipal(arkitekturbeslut, certainty 0,823) - Inga befintliga generella mallvariabler för ledighetsansökan — whitelist + serverside-rendering måste specas explicit
- Beslutsflödet återanvänder POST
- Att verifiera: dagdefinition (skoldagar vs kalenderdagar), policy-gate-scope för myndig elev, mall-lagring i target branch (se
intake.md§ Tekniska mockup-beslut).