Modulkatalog/building-permit-triage
Modul, Offentlig sektor

Bygglovs-triage

PBL-klass, saknade bilagor, dnr-route till handläggare.

11/11
Tester godkända
7
Block per bundle
Ed25519
Signering
Produktion
Status
Ladda ner exempel-bundleVerifiera bundleBoka demo
Vad modulen gör

Bygglovs-triage

Modul-ID: building-permit-triage Version: 1.0.0 Voice: kapaciti (svensk B2B-ton) Modell: claude-haiku-4-5 Modul: 13 av 16 i kapaciti-modules katalog

Vad gör modulen

Bygglovs-triage tar emot en bygglovsansökan, antingen direkt från kommunens e-tjänst eller via en digitaliserad pappersblankett, och producerar ett strukturerat triage-beslut för bygglovshandläggaren. Modulen klassificerar ärendet enligt Plan- och bygglagen (PBL) 2010:900, identifierar saknade obligatoriska bilagor, föreslår handläggar-routing baserat på distrikt och komplexitet, listar remissbehov, genererar förslag på diarienummer och utformar ett brevutkast till sökanden.

Modulen ersätter inte handläggaren. Den förbereder beslutet så att handläggaren får en granskningsbar startpunkt istället för en blank ansökan. Varje körning producerar en signerad audit-bundle med hash-chain enligt kapaciti-modules-standarden, vilket gör att överprövningsmyndigheter eller internrevisionen kan rekonstruera triage-processen i efterhand.

Cykeltiden från ansökan inkommen till färdig triage är typiskt under 25 sekunder. Resten av handläggningen sker manuellt av kommunens personal med modulens utkast som underlag.

Indata

{
  application_id: "string",
  arrived_at: "ISO timestamp",
  application_type: "bygglov" | "rivningslov" | "marklov" | "forhandsbesked" | "anmalan",
  property: {
    fastighetsbeteckning: "Skelleftea 5:12",
    address: "Strandvagen 47, Skelleftea",
    kommun: "Skelleftea",
    distrikt: "Centrum-Skelleftea",
    detaljplan_id: "DP-SKE-2018-014",
    detaljplan_status: "gallande" | "saknas" | "pa-grans" | "okand"
  },
  applicant: {
    name: "Erik Andersson",
    organization: "privatperson" | "foretag" | "bostadsrattsforening" | "kommun",
    org_nr_or_personnr: "string (sista 4 hashade for integritet)"
  },
  proposed_action: {
    summary: "string",
    estimated_floor_area_m2: 28,
    estimated_height_m: 3.2,
    affected_buildings: ["enfamiljshus"],
    near_protected_area: false,
    affects_facade: true,
    is_within_existing_byggnadskropp: false
  },
  attached_documents: [{ doc_id, type, filename, uploaded_at }],
  required_documents_list: ["ansokan", "situationsplan", ...]
}

Validering sker i validateInput. Saknas något obligatoriskt fält kastas ett fel innan modellen anropas, och fallet loggas i audit-chain som ett input_received-block följt av ett error-output.

Utdata

Plain text med fast struktur. Bygglovssystemet parsar nycklarna och plockar ut värdena. BREV_TILL_SOKANDE_UTKAST är 150-300 ord svensk prosa, redo att skickas efter handläggar-godkännande.

PBL_KLASSIFICERING: bygglov
PBL_HUVUDPARAGRAF: 9 kap 2 §
KOMPLEXITET: medel

SAKNADE_DOKUMENT:
- DOKUMENTTYP: fasadritning
  PBL_GRUND: 9 kap 20 §
  ATGARD: obligatorisk-innan-bedomning

KRITISKA_FYND:
- <0 till 5 fynd>

GRANNHORANDE_KRAVS: ja
REMISS_KRAVS:
- LANTMATERIET: nej
- TRAFIKVERKET: nej
- LANSSTYRELSEN: nej
- RADDNINGSTJANSTEN: ja

HANDLAGGAR_FORESLAG:
- DISTRIKT: Centrum-Skelleftea
- KOMPETENS_KRAVS: standard-bygglov, brandskydd
- UPPSKATTAD_HANDLAGGNINGSTID_VECKOR: 7

DNR_FORESLAG: BN-2026-892471
NASTA_STEG_FOR_HANDLAGGARE: 1. ... 2. ... 3. ...
BREV_TILL_SOKANDE_UTKAST: <prosa>
INTERNA_NOTERINGAR: <bullets>
PBL_REFERENSER_ANVANDA: <lista>

PBL-referenstabell

Modulen citerar Plan- och bygglagen (2010:900) med formatet N kap M §. Tabellen nedan listar de vanligaste paragraferna som triage-agenten refererar till. Varje hänvisning i utdata valideras mot detta format, och en samlad lista av faktiskt använda referenser ligger i sektionen PBL_REFERENSER_ANVANDA.

| Referens | Innehåll | |----------|----------| | 9 kap 2 § | Huvudregel: bygglov krävs för nybyggnad, tillbyggnad och vissa ändringar | | 9 kap 4 § | Bygglovsbefriade åtgärder för en- och tvåbostadshus (Attefall, friggebod, max 15 m² tillbyggnad) | | 9 kap 5 § | Bygglovsbefriade åtgärder för komplementbyggnader | | 9 kap 17 § | Förhandsbesked utanför detaljplanelagt område | | 9 kap 20 § | Ansökans innehåll och obligatoriska handlingar | | 9 kap 21 § | Komplettering av ofullständig ansökan | | 9 kap 25 § | Grannhörande | | 9 kap 30 § | Förutsättningar för bygglov inom detaljplan | | 9 kap 31 § | Förutsättningar för bygglov utanför detaljplan | | 10 kap 5 § | Kontrollansvarig vid byggåtgärd | | 10 kap 6 § | Kontrollplan | | 11 kap | Tillsyn, ingripanden och påföljder | | 12 kap | Avgifter för byggnadsnämndens handläggning | | 8 kap | Tekniska krav på byggnadsverk (tillgänglighet, energi, brand) |

Beslutsregler

Bygglovsbefriad-test. Klassificering som bygglovsbefriad kräver att alla fyra villkoren är uppfyllda samtidigt: åtgärden ryms inom 9 kap 4-5 § eller inom befintlig byggnadskropp, fasadpåverkan är noll, bruttoarea max 25 m² och fastigheten ligger inte i närheten av ett skyddat område. Faller någon av dessa, klassificeras ärendet som bygglov eller annat.

Detaljplan-styrning. Om detaljplan-status är gallande prövas åtgärden mot 9 kap 30 §. Om status är saknas rekommenderar modulen förhandsbesked enligt 9 kap 17 § och prövning mot 9 kap 31 §. Status pa-grans eskaleras till sarskild-bedomning med kommentar i KRITISKA_FYND. Status okand triggar omedelbar komplettering enligt 9 kap 21 §.

Konservativ klassificering. Vid tvekan mellan bygglov och bygglovsbefriad väljer modulen alltid bygglov. Vid tvekan om komplexitet väljer modulen ett steg uppåt. Auto-godkännande är aldrig möjligt, modulen ger bara handläggar-förslag.

Remissbehov. Lantmäteriet remitteras vid fastighetsgränsfrågor eller ny avstyckning. Trafikverket vid in- eller utfart mot allmän väg eller järnväg. Länsstyrelsen vid riksintresse, strandskydd, kulturmiljö eller fornlämning. Räddningstjänsten vid brandcellpåverkan, samlingslokal, höjd över 8 meter eller närhet till brandfarliga verksamheter.

Diarienummer

Förslaget på diarienummer är deterministiskt utifrån ansöknings-id och ankomstdatum, vilket gör att samma ansökan alltid får samma Dnr-förslag oavsett om triage körs flera gånger. Format: BN-<YYYY>-<NNNNNN> där BN är byggnadsnämnden, YYYY är året från arrived_at och NNNNNN är ett sex-siffrigt löpnummer från en hash av application_id. Det slutgiltiga Dnr sätts av handläggaren när ärendet registreras i kommunens ärendehanteringssystem, men förslaget används som spårnings-id i triage-bundlen.

Handläggar-routing

Distriktet matchas mot property.distrikt om angivet, annars sätts kommun-default. Kompetenskrav identifieras från åtgärdens karaktär: kulturmiljo när åtgärden gäller skyddad miljö, brandskydd vid komplex tillbyggnad eller publik verksamhet, miljovardlig-planering vid närheten till skyddat naturområde, tillganglighet vid publika lokaler, geoteknik vid markarbeten eller känslig grund. Standardärenden får etiketten standard-bygglov.

Uppskattad handläggningstid:

| Komplexitet | Veckor | |-------------|--------| | enkel | 4 | | medel | 6 till 8 | | komplex | 10 till 12 | | sarskild-bedomning | 12 till 20 |

Brev till sökande

Brevet är 150-300 ord, formellt men pedagogiskt. Det öppnar med "Hej <namn>," bekräftar mottagandet, listar saknade bilagor med konkret beskrivning av vad varje handling ska innehålla, anger förväntad handläggningstid efter komplettering och avslutar med kontaktuppgift. Modulen lovar aldrig en snabbare handläggningstid än kommunens normala riktvärde. Inga emojis, inga tankstreck.

Audit-chain

Varje körning bygger en audit-trail med blocken:

  1. input_received
  2. context_loaded
  3. agent_call
  4. output_generated
  5. voice_validated
  6. output_validated
  7. audit_sealed

Bundlen signeras med kapaciti-modules Ed25519-nyckel och verifieras med lib/audit-chain.mjs::verifyBundle eller kapaciti-site/scripts/verify-audit-bundle.mjs. Hash-kedjan är genesis-baserad, så att ett enskilt manipulerat block bryter verifieringen från och med det blocket. Detta är centralt för offentlig sektor: triage-beslut kan granskas av JO, länsstyrelsen eller mark- och miljödomstolen utan att kommunen behöver lita på interna loggar.

Voice-profil

Output passerar validateAgainstVoice("kapaciti"). Förbjudna ord: ensure, crucial, journey, delve, dive, navigate, sammanfattningsvis, TL;DR. Förbjudna tecken: tankstreck. Modellen instrueras att använda komma eller punkt istället.

Användning

import { BuildingPermitTriage } from "kapaciti-modules/modules/building-permit-triage.mjs";

const triage = new BuildingPermitTriage();
const res = await triage.run(ansokanInput, { writeBundle: "./bundles/bl-0044.json" });

if (res.error === "usage_cap") {
  // Claude Code usage-cap, retry senare via kommunens kö
}

console.log(res.output);
console.log("Audit-bundle:", res.bundle.run_id, "blocks:", res.bundle.entries.length);

Begränsningar

Modulen läser inte själva bilagornas innehåll, bara typen som angetts i attached_documents. Saknas en handling som finns med i listan men har felaktig typ-etikett, klassificeras den ändå som saknad. Vision-baserad granskning av ritningar ligger utanför scope och hanteras i en kommande vision-modul.

Modulen tar inte beslut om strandskyddsdispens eller övriga dispenser. Dessa ligger hos länsstyrelsen och remitteras dit via REMISS_KRAVS.LANSSTYRELSEN.

Modulen läser inte detaljplanens fullständiga bestämmelser, bara den status-etikett som kommunen tilldelat. Avvikelse-prövning enligt 9 kap 30 § andra stycket hanteras av handläggaren med modulens KRITISKA_FYND som startpunkt.

v1.1 TODO

  • Vision-API-integration för automatisk granskning av situationsplan och fasadritning
  • Memory-card för historiska Dnr på samma fastighet (återkommande sökande)
  • Detaljplan-bestämmelse-lookup mot kommunens geodatatjänst för automatisk avvikelse-detektion
  • Multi-kommunstöd med distrikts-tabeller per kommun
  • Auto-routing till specialist-handläggare via kommunens HR-system
  • Strandskyddsdispens-modul som komplement för fastigheter nära vatten
Prova live

Kör bygglovs-triage i webbläsaren.

Justera input-objektet eller använd starter-värdena. När du trycker på Kör modulen anropas samma agent som i produktion. Audit-kedjan byggs framför dig och hela sessionen signeras med Ed25519 i samma format som exempel-bundlen ovan.

Input (building-permit-triage schema)

JSON-payload som matchar modulens validateInput. Starter-värdena kommer från en riktig produktionskörning. Max 12 000 tecken.

Tecken: 1 498 / 12 000
Audit-kedja, live

Audit-kedjan visas här när scenariot körs

● Nyhetsbrev

EU AI Act, sandbox-status och svensk AI-infrastruktur.

En sammanfattning ungefär en gång i månaden. Vad förändrats i regelverket, vilka pilot-cases vi sett och vilka vendor-shifts som påverkar svenska bolag. Skickas av oss, inte av en automation som låtsas vara oss.

Uppgifterna används endast för nyhetsbrevet. Inga utskick utöver det utan separat samtycke. Avregistrera när som helst via länk i mailet.