Modulkatalog/citizen-dialog
Modul, Offentlig sektor

Medborgardialog

Yttranden, kategori, sentiment, topp-invändningar.

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

citizen-dialog (Medborgardialog)

Module 15 av 16 i kapaciti-modules. Tar en samling yttranden inkomna i ett formellt samrads- eller yttrandeforfarande och producerar ett strukturerat beslutsunderlag som kan ga direkt till namnden, plus signerat audit-bundle.

Use case

En kommun haller samrad pa en detaljplan, motion-svar, policy-yttrande eller budgetsamrad. Hundratals yttranden inkommer via e-tjanst, post, mejl eller personliga moten. Manuell sammanstallning tar dagar och riskerar fa betydelser bort i prioriteringen. Modulen levererar pa minuter:

  • Kategorisering mot kommunens egen taxonomi
  • Sentiment-fordelning per kategori
  • Syntetiserade topp-invandningar med verbatim citat och referens till submission_id
  • Positiva forslag och konstruktiv kritik separerade
  • Flaggning av hot, hatfullt innehall, personangrepp eller misstankt bot
  • GDPR-notering pa personuppgifter funna i yttranden, med rekommendation om maskering enligt OSL
  • Utkast till beslutsunderlag for namnd (300-600 ord)
  • Rekommenderade kommun-svar till de viktigaste invandningarna
  • Osakra klassificeringar markerade for mansklig granskning

Indata

{
  dialog_id: "skell-dp-2026-bonnstan-norra",
  proceeding: {
    type: "detaljplan-samrad" | "motion-svar" | "policy-yttrande" | "budgetsamrad" | "annat",
    title: "Detaljplan for kvarteret Bjorken",
    summary: "Forslag till ca 180 bostader...",
    kommun: "Skelleftea kommun",
    start_date: "2026-04-01",
    end_date: "2026-05-15"
  },
  submissions: [
    {
      submission_id: "yt-001",
      submitter: { name, contact, anonymous, type: "privatperson" | "intressegrupp" | "foretag" | "anonym" },
      submitted_at: "ISO",
      channel: "e-tjanst" | "post" | "email" | "personligt-mote",
      raw_text: "...",
      attachments_count: 0
    }
  ],
  category_taxonomy: ["hojd-och-volym", "trafik-och-parkering", "..."],
  sentiment_options: ["positiv", "neutral", "negativ", "kritisk-konstruktiv"],
  context_documents: [{ title, excerpt }]
}

Validering ar strikt. Dialog-id, proceeding-type, datum, submitter-typ och channel maste falla inom enumererade varden. Duplicerade submission_id forbjudna. Taxonomi och sentiment-options far inte vara tomma.

Utdata

Strukturerad svensk text med fasta sektioner. Parsern i modulen extraherar total-antal, kategori-breakdown, topp-invandningar med citerade submission_id, flaggor och namnd-underlag. Sektioner:

  • TOTAL_INSKICKADE och ANALYSERAT_AV_TOTALEN
  • KATEGORI_BREAKDOWN med antal, procent, sentiment-fordelning
  • TOPP_INVANDNINGAR (3-7 stycken) med verbatim citat och submission_id
  • POSITIVA_FORSLAG (0-5)
  • FLAGGADE_FOR_MANUELL_BEDOMNING (0-10) med anledning, allvar, rekommenderad handling
  • GDPR_OCH_SEKRETESS_NOTERINGAR
  • NAMNDENS_BESLUTSUNDERLAG_UTKAST (300-600 ord svensk prosa)
  • REKOMMENDERADE_KOMMUN_SVAR (3-5 svar)
  • METODOLOGI_NOTERING
  • OSAKERA_KLASSIFICERINGAR

Audit-chain

Varje korning producerar minst sju block: input_received, context_loaded, agent_call, output_generated, voice_validated, output_validated och audit_sealed. Hela kedjan signeras med Ed25519 mot kapaciti-modules signing key och verifieras med verifyBundle. Verifieraren faller om nagon kontent forandras efter signering.

Rattvisa i kategorisering

Automatiserad kategorisering av medborgar-input ar en kanslig operation. Modulen ar designad efter tre principer for att minska risk for systematisk snedvridning:

Forsta, hog recall pa flaggning av hot, hat och personangrepp. Hellre over- flagga och lat manniska avfarda an under-flagga och missa nagot. Flaggningen ar inte censur, det ar bara en routing-rekommendation till manuell handlaggning. Beslut om polisanmalan, juridisk eskalering eller maskering fattas alltid av en mansklig handlaggare.

Andra, verbatim citat preferred over parafraser. Topp-invandningar syntetiseras men ska alltid stodjas med faktiska citat och submission_id sa att en namnd-ledamot kan ga tillbaka till kallan. Detta minskar risk for att modulens tolkning skiljer sig fran yttrarens intention pa ett satt som inte gar att granska.

Tredje, osakra klassificeringar markeras explicit i en egen sektion. Om en yttrande kan tolkas pa flera satt, eller om den ligger i grans till en flagga, sa lyfts den separat for manuell granskning istallet for att tvingas in i en kategori.

Det finns andra fairness-aspekter modulen inte loser. Sprak ar en sadan: yttranden pa andra sprak an svenska kraver oversatting innan modulen kan hantera dem ratt, och oversattningen kan i sig snedvrida tonen. En annan ar att anonyma yttranden inte kan vagas mot upprepad inskickning fran samma person, vilket gor det svart att skilja en aterkommande oroad medborgare fran en koordinerad kampanj. Modulen flaggar misstanke om bot baserat pa mycket grova signaler (kort tid mellan submissions, mycket lika texter) och overlater bedomningen till manniskan.

Konservativ ton i svarsutkast ar ocksa en medveten begransning. Modulen lovar aldrig att kommunen ska justera planen, sanka hojden eller bygga bullerskydd. Allt sant beslut maste komma fran politisk avvagning eller forvaltningens egen prevning. Modulen formulerar bara att fragan kommer att vagas av och hanvisar till nasta steg i planprocessen.

Anvandning

import CitizenDialogModule from "kapaciti-modules/modules/citizen-dialog.mjs";

const mod = new CitizenDialogModule();
const res = await mod.run(input, { writeBundle: "./dialog-bundle.json" });

if (res.error === "usage_cap") {
  // Hantera rate-limit
} else if (!res.validateCheck.ok) {
  console.error("Output failed structural validation", res.validateCheck.violations);
} else {
  console.log(res.output);
  console.log("Bundle written", res.bundle.run_id);
}

// Kontrollera att alla citat ar verifierbara mot original-submissions
const cite = CitizenDialogModule.verifyCitations(res.output, input.submissions);
if (!cite.ok) {
  console.warn("Modulen citerade okanda submission_id:", cite.unknown_ids);
}

Begransningar och nasta steg

Modulen tar inte stallning till offentlighetsprincipen versus GDPR i konkret beslut, den bara lyfter fragan i GDPR_OCH_SEKRETESS_NOTERINGAR. Lokalt prejudikat i nagra kommuner kan kraver hardare maskering an Datainspektionens default-rad. Detta hanteras genom att kommunens jurist gar igenom GDPR- sektionen innan publicering av handlingar.

Andra-versionens roadmap inkluderar: stod for fleranspraktiga yttranden via forsvenskning innan analys, hash-baserad jamforelse for att detektera likadana texter (bot-koordinering), tids-clustering for att se mobilisering runt specifika datum, samt direkt-export till kommunens diariesystem via sa kallad PUL-saker integration.

Prova live

Kör medborgardialog 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 (citizen-dialog schema)

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

Tecken: 6 993 / 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.