Modulkatalog/diary-ai
Modul, Offentlig sektor

Diarie-AI

Auto-routing till rätt nämnd, dnr och handläggare.

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

Diarie-AI

Modul-ID: diary-ai Version: 1.0.0 Voice: kapaciti (svensk B2B-ton, offentlig sektor) Modell: claude-haiku-4-5

Vad gor modulen

Diarie-AI tar emot en inkommande handling till en svensk kommun, klassificerar den under kommunens namnd-struktur, foreslar ett diarienummer enligt kommunens dnr-monster, identifierar lampligaste handlaggare baserat pa expertis och nuvarande arbetsbelastning, bedomer offentlighetsgrad enligt Offentlighets- och sekretesslagen 2009:400 och producerar ett utkast till bekraftelse till avsandaren. Modulen ar konstruerad for att registrator pa en kommun ska kunna granska forslaget och godkanna det innan registrering i diariesystemet (Public360, W3D3, Ciceron eller eDok).

Varje korning bygger en arkivkompatibel audit-trail. Hash-kedjan, Ed25519-signaturen och de bevarade input-block och output-block enligt kapaciti-modules-standarden uppfyller det Arkivlagen 1990:782 paragraf 3 kraver av systematisk hantering av allmanna handlingar. Audit-bundlen kan verifieras matematiskt aven flera ar efter handelsen.

Indata

{
  intake_id: "string",
  received_at: "ISO timestamp",
  source: {
    channel: "post | email | e-tjanst | fax | personlig-inlamning | telefon-anteckning",
    from_name: "string?",
    from_org: "string?",
    from_email: "string?"
  },
  document: {
    subject_summary: "string",
    body_excerpt: "string (forsta 1-2k tecken)",
    attachments: [{ filename, size_kb, mime_type }],
    contains_personal_data: boolean,
    contains_sensitive_personal_data: boolean,
    contains_secrecy_marker: boolean,
    document_format: "ankommande | upprattat | expedierat | internt"
  },
  context: {
    kommun: "string",
    namnd_options: [{ id, name, scope_keywords: [] }],
    available_handlaggare: [{ id, name, namnd_id, current_workload, expertise: [] }],
    dnr_format: "string template",
    osl_thresholds: { auto_secret_keywords, auto_review_keywords }
  }
}

validateInput kastar fel om intake_id, received_at, source.channel, document, context eller namnd_options saknas eller om typer ar fel. Den whitelistar source.channel och document.document_format.

Utdata

Modellen returnerar plain text i fast struktur. Diariesystem-integrationen parsar nycklarna och skapar diarieposten efter registratorns godkannande.

NAMND_ROUTING: <namnd_id>
NAMND_NAMN: <namnd_namn>
ROUTING_MOTIVERING: <1-2 meningar med matchade scope_keywords>

DNR_FORESLAG: <formaterat dnr>

HANDLAGGARE_FORESLAG:
- PRIMAR: <id> | <namn> | matchade-kompetenser: <lista>
- ALTERNATIV: <id> | <namn>

OFFENTLIGHETSGRAD: offentlig | partiell-sekretess | sekretess-helt
OSL_REFERENS: <kap:paragraf i OSL 2009:400 om ej offentlig>
SEKRETESSANLEDNING: <text>
ALLMAN_HANDLING_STATUS: ja-ankommande | ja-upprattad | nej-arbetsmaterial | osakert

GDPR_BEDOMNING:
- INNEHALLER_PERSONUPPGIFTER, INNEHALLER_KANSLIGA, LAGLIG_GRUND, RETENTION_PERIOD

PRIORITET: hog | normal | lag
HANDLAGGNINGS_TID_INDIKATION_DAGAR: <number>
ARKIVERINGS_KOD: <kod fran arkiveringsplan>

ATGARDER_FORE_HANDLAGGNING:
- <0-5 atgarder>

BEKRAFTELSE_TILL_AVSANDARE_UTKAST:
<100-200 ord>

INTERNA_NOTERINGAR:
- <2-4 punkter for registratorn>

OSL_OCH_ARKIV_REFERENSER:
- <OSL-citat>
- <Arkivlagen-citat>

Routing-logik

Namnd-routing baseras pa overlap mellan subject_summary plus body_excerpt och varje namnd-options scope_keywords. Modellen valjer namnden med flest matchande keywords. Vid tva eller fler trafftal valjer den den mest specifika (snavaste scopet, exempelvis Socialnamnden framfor Kommunfullmaktige). Om ingen klar match finns valjer den namnd_options[0] som default och flaggar osakerhet i ROUTING_MOTIVERING. Detta gor det enkelt for registratorn att fanga upp svaga matchningar.

Handlaggar-routing filtrerar available_handlaggare pa det valda namnd_id, rangordnar pa overlap mellan expertise och arendet, och vid lika expertise pa lagst current_workload. En primar och en alternativ handlaggare returneras nar mer an en matchar. Vid en enda kandidat skrivs "ingen alternativ tillgang".

OSL-bedomning

Modulen foljer offentlighetsprincipen som default. Ankommande handlingar ar allmanna fran och med mottagningstidpunkten enligt Tryckfrihetsforordningen 1949:105 2 kap. Sekretess prevas mot OSL 2009:400 vid kanslig personuppgift eller sekretessmarkering. De vanligaste kapitlen modulen citerar:

| Kapitel | Skydd | |---------|-------| | 18 kap | Forsvar, sakerhet, brottsbekampning | | 21 kap | Skydd for enskild i allmanhet | | 23 kap | Utbildning och forskning | | 25 kap | Halso- och sjukvard, tandvard | | 26 kap | Socialtjanst, LSS, ekonomiskt bistand | | 35 kap | Pagaende myndighetsutovning mot enskild | | 39 kap | Personaladministration |

Konservativ regel: vid osakerhet om sekretess vajls striktare niva och eskaleras till registrator med motivering i SEKRETESSANLEDNING. Modulen klassificerar aldrig automatiskt som "offentlig" nar contains_secrecy_marker ar true.

GDPR och Arkivlagen

Vid personuppgifter anger modulen laglig grund per GDPR artikel 6 (vanligtvis 6.1.c rattslig forpliktelse eller 6.1.e myndighetsutovning) och vid kanslig personuppgift artikel 9.2.b (sociala omraden) eller 9.2.h (halso-och-sjukvard). RETENTION_PERIOD anges per Arkivlagen 1990:782 paragraf 3 och kommunens dossierplan. ARKIVERINGS_KOD hardledes fran subject och namnd-prefix om kommunens arkiveringsplan ar entydig, annars satts "fastlagg-vid-registrering".

DNR-format

Modulen respekterar context.dnr_format exakt. Variablerna ${NAMND_PREFIX} ersattes med namnd_id i versaler, ${YEAR} med fyra-siffrigt ar fran received_at och ${SERIAL} med "XXXX" som placeholder. Registratorn tilldelar serie vid registrering i diariesystemet. Detta separerar AI-forslag fran kommunens autoincrement-logik och undviker dubbletter eller hopp i serien.

Voice-profil

Output passerar validateAgainstVoice("kapaciti"). Forbjudna ord (ensure, crucial, journey, delve, dive, navigate) flaggas. Tankstreck ar forbjudna i hela texten, vilket ar viktigt i bekraftelsebrev som gar ut till medborgare och som arkiveras vid sidan av handlingen.

Audit-chain

Varje korning bygger en audit-trail med blocken input_received, context_loaded, agent_call, output_generated, voice_validated, output_validated, audit_sealed. Bundlen signeras med kapaciti-modules Ed25519-nyckel och verifieras med kapaciti-site/scripts/verify-audit-bundle.mjs eller lib/audit-chain.mjs::verifyBundle. Hash-kedjan ar genesis-baserad sa att ett enda manipulerat block bryter verifieringen fran och med det blocket. Detta tjanar dubbelt syfte: dels matematisk integritet for revisor, dels bevisning vid begaran om JO-anmalan eller forvaltningsbesvar dar processen kring registrering ifragasatts.

Anvandning

import { DiaryAI } from "kapaciti-modules/modules/diary-ai.mjs";

const agent = new DiaryAI();
const res = await agent.run(intakeInput, { writeBundle: "./bundles/ink-2026-05-19-038.json" });

if (res.error === "usage_cap") {
  // retry senare, claude CLI har natt rate-limit
}

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

Begransningar

Modulen ser inte bilagor i klartext, OCR-laget maste leverera body_excerpt. Vid mycket korta subject_summary utan body_excerpt blir routing-bedomningen svagare och osakerhet flaggas. Arkiveringskod hardledes inte alltid, kommunens egen arkiveringsplan ar primarkalla. Periodisering och gallring ar inte modulens ansvar, det hanteras separat i kommunens dossierplan.

v1.1 TODO

  • Stod for komplexa dnr-format med kommunspecifika prefix (t ex KS-styrelsens egen serie)
  • Memory-card for konsistent handlaggar-fordelning over tid (rattvis lastfordelning)
  • Bilage-inlasning via OCR-pipeline integrerad direkt
  • Auto-bedomning mot kommunens egen arkiveringsplan via api
  • Sekretessbedomning forfinad med precedensfall fran tidigare arenden i samma kommun
  • Stod for inkomna handlingar pa flera sprak (engelska, finska, samiska) med routing till kommunens oversattningstjanst
  • Auto-matchning av tidigare sokande for konsistent partsbedomning vid aterkommande arenden
Prova live

Kör diarie-ai 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 (diary-ai schema)

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

Tecken: 2 510 / 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.