Agentvy
Katalogen
catalog · 38 posterid: skal
app: portal
slag: Skal
namn: Skalet (apps/portal)
status: Byggt – fas 1–2 klara
lage: byggd
beskrivning: Next-appen som komponerar allt: sidopanel, AI-fält, rollväxling, modulregister och rutnätet modulerna fyller. Skalet vet vilka slots som finns, aldrig vad en widget innehåller.
kalla: apps/portal/src/shell
relationer: module-sdk, tokens, ui, api-mock
levererar: ShellFrame, AskBand, AskField, Board, FlowBar, registry, getCurrentUser, /sidor/[...vag], shell/sida, Webbmeny, webbplatser, AnpassaBoard, sparaLayout, /verktyg/[...vag], Notiser (klockan), markeraLasta, FokusYta, stangFokus / visaFokusIgen
---
id: tokens
app: gemensam
slag: Paket
namn: @startsidan/tokens
status: Byggt
lage: byggd
beskrivning: Designtokens som Tailwind-tema (@theme) plus basregler. Porterade 1:1 ur prototypens :root. Enda stället där en färg får definieras.
kalla: packages/tokens/src
relationer: ui, skal
levererar: index.css, theme.css, base.css, .wrap, .visually-hidden
---
id: ui
app: gemensam
slag: Paket
namn: @startsidan/ui
status: Byggt – shadcn som grund (ADR-008)
lage: byggd
beskrivning: Primitiverna. Egna komponenter med V3:s mått, byggda ovanpå shadcn/ui så att Radix bär tillgängligheten. Modulerna känner bara till det här API:et.
kalla: packages/ui/src
relationer: tokens, designsystem
levererar: Card, Chip, AiChip, Btn, BtnLink, StatusRow, ListRow, Progress, Avatar, MoreLink, Table, cn
---
id: dokumentation
app: gemensam
slag: Paket
namn: @startsidan/dokumentation
status: Byggt
lage: byggd
beskrivning: Dokumentationsmodellen för båda applikationerna (ADR-011, ADR-040): Katalogpost, Dok, Block och dokumentationskontraktet, textvyerna för agenter och Blockvy för människor. Devportalen och projektportalens /teknik dokumenterar sina delar i samma form och efter samma kontrakt.
kalla: packages/dokumentation/src
relationer: devportal, ui
levererar: Katalogpost, Dok, Block, dokkontrakt, APPAR / appNamn, blockTillText / katalogpostTillText / dokTillText, @startsidan/dokumentation/Blockvy
---
id: gemensamt
app: gemensam
slag: Paket
namn: @startsidan/gemensamt
status: Byggt
lage: byggd
beskrivning: Det som båda applikationerna behöver och som inte är design eller AI (ADR-040): beslutsregistret, kommunens avsändare i toppraden, spärren mot gissningar, kontrollen av ?vidare= och innehållsversionen för agentfilerna. Varje del har en egen exportväg, så att en app bara drar in det den använder.
kalla: packages/gemensamt/src
relationer: devportal, atkomst
levererar: @startsidan/gemensamt/beslut, @startsidan/gemensamt/Varumarke, @startsidan/gemensamt/felforsok, @startsidan/gemensamt/vidare, @startsidan/gemensamt/innehallsversion
---
id: module-sdk
app: portal
slag: Paket
namn: @startsidan/module-sdk
status: Byggt
lage: byggd
beskrivning: Kontraktet mellan skalet och modulerna: ModuleManifest, UserContext, slots, routes, sidor (PageManifest) och flödestyperna. Ett nytt fält här måste bäras av minst två moduler innan det blir permanent.
kalla: packages/module-sdk/src
relationer: skal, ui
levererar: defineModule, ModuleManifest, UserContext, widgetsFor, actionsFor, uppgifterFor, intentsFor, matchaAvsikt, Uppgift, ActionItem.lage/kalla/frist, navFor, routeFor, suggestionsFor, Widget.label, PageManifest.slots, ContentBlock details, Notification, notificationsFor, FokusItem, fokusFor, Genvag, genvagarFor, mode full, RouteComponent, matchaVag, PageManifest, ContentBlock, findPage, pageTrail, resolveContent, FlowDefinition, buildTurnSchema
---
id: flow-engine
app: portal
slag: Paket
namn: @startsidan/flow-engine
status: Planerad – två flöden finns nu, underlaget för M4 är komplett
lage: planerad
beskrivning: Samtalsflödesmotorn. Lyfts ur modulen felanmalan när ett andra flöde kan definieras deklarativt på under en timme utan ny UI-kod. Klarar den inte det testet är den inte redo att lyftas.
kalla: packages/flow-engine (finns ännu inte)
relationer: felanmalan, utvecklingsarende, module-sdk
levererar: FlowDefinition som data, turmotor, formulärspegel
---
id: designsystem
app: gemensam
slag: Yta
namn: Designsystemet
status: Byggt (ADR-009)
lage: byggd
beskrivning: Tokens, primitiver, mönster, regler och felindex som data. Renderas som sida, JSON och plattext ur samma källa.
kalla: apps/portal/src/app/dev/ui
relationer: ui, tokens, devportal
levererar: /dev/ui, /dev/ui/spec.json, /dev/ui/llms.txt
---
id: atkomst
app: portal
slag: Yta
namn: Åtkomstspärren
status: Byggd
lage: byggd
beskrivning: Middleware som låser demon bakom ACCESS_CODE. Projektets yta på roten (utom ritningen och ändringsloggen), prototypens ingång /portal, visionssidan, /dev, healthchecken och upplåsningssidan är öppna; /start, /flode, /verktyg, /sidor och API:erna bakom dem är låsta. En demospärr, inte autentisering – den säger ingenting om vem användaren är.
kalla: apps/portal/src/middleware.ts, apps/projekt/src/atkomst/
relationer: skal, intro, bygge
levererar: /las-upp, ACCESS_CODE, kakan startsidan-atkomst, /robots.txt
---
id: intro
app: portal
slag: Yta
namn: Prototypens ingång
status: Byggd
lage: byggd
beskrivning: Demons ingång på /portal (ADR-029). Rollvalet står först och startar demon; introduktionen till startsidan och ekosystemet ligger under. Startsidan själv ligger på /start.
kalla: apps/portal/src/app/page.tsx
relationer: skal, ui, devportal
levererar: /portal, inloggning via loggaInSom, ingångar till /vision, /dev, /dev/docs, /dev/ui
---
id: devportal
app: portal
slag: Yta
namn: Devportalen
status: Byggd
lage: byggd
beskrivning: Den här ytan. En ingång för den som ska bygga i ekosystemet – människa eller agent. Miniatyr av dev.sundsvall.se, med startsidans ekosystem som innehåll.
kalla: apps/portal/src/app/dev
relationer: designsystem, skal
levererar: /llms.txt, /dev, /dev/spec.json, /dev/llms.txt, katalogen, recepten, antimönsterindexet
---
id: bygge
app: gemensam
slag: Yta
namn: Grindar och bygge
status: Byggt
lage: byggd
beskrivning: Lint, test och typecheck över hela repot från roten, plus standalone-imagen Dokploy bygger. Ett nytt paket täcks utan att något skript läggs till.
kalla: eslint.config.mjs, vitest.config.mts, apps/projekt/next.config.ts, apps/projekt/Dockerfile
relationer: skal, dokploy
levererar: yarn lint, yarn test, yarn typecheck, docker compose up --build
---
id: oversikt
app: portal
slag: Modul
namn: oversikt
status: Byggd
lage: byggd
beskrivning: Nyckeltalsraden: rekryteringar och ledighetsansökningar för chef – chefens budget och sjukfrånvaro kommer ur dialogstod – och saldo och flex för medarbetare.
kalla: packages/modules/oversikt
roller: medarbetare, chef
relationer: api-mock, ui
levererar: slots.kpi: oversikt-nyckeltal, nav: Min översikt
---
id: agera
app: portal
slag: Modul
namn: agera
status: Byggd
lage: byggd
beskrivning: Uppgifterna från alla tjänster: kortet "Att agera på" med det som väntar, och sidan Mina uppgifter med allt – öppet och hanterat, med källa och frist. Äger ingen egen data utan läser det modulerna bidrar med (ADR-007), i samma stund, så listan växer av sig själv när fler moduler byggs och visar alltid tjänsternas läge. Samma lista läser Min AI när användaren frågar om sina uppgifter.
kalla: packages/modules/agera
roller: medarbetare, chef
relationer: arenden, ledighet, kompetens, utvecklingsarende, dialogstod, min-ai, module-sdk
levererar: slots.main: agera-lista, routes: /verktyg/uppgifter (standard), nav: Mina uppgifter
---
id: arenden
app: portal
slag: Modul
namn: arenden
status: Byggd
lage: byggd
beskrivning: Ärendetabellen, plus actions för de ärenden som kräver något av användaren.
kalla: packages/modules/arenden
roller: medarbetare, chef
relationer: api-mock, agera, ui
levererar: slots.main: arenden-tabell, slots.actions, nav: Mina ärenden
---
id: kalender
app: portal
slag: Modul
namn: kalender
status: Byggd
lage: byggd
beskrivning: "Idag"-kortet och återkommande händelser i högerspalten.
kalla: packages/modules/kalender
roller: medarbetare, chef
relationer: api-mock, ui
levererar: slots.side: kalender-idag, slots.side: kalender-aterkommande (chef)
---
id: ledighet
app: portal
slag: Modul
namn: ledighet
status: Byggd
lage: byggd
beskrivning: Ledighetskortet och attestraden för chef när något är klart att godkänna.
kalla: packages/modules/ledighet
roller: medarbetare, chef
relationer: api-mock, agera
levererar: slots.side: ledighet-kort, slots.actions
---
id: kompetens
app: portal
slag: Modul
namn: kompetens
status: Prototyp med fiktiv data – inför mötet 4 november
lage: delvis
beskrivning: Kompetensregistret (ADR-030): vad en person har, vad rollen kräver och när det går ut. Kurserna bor kvar i Lärplattformen (Moodle); registret är eget och delar id med personalakten. Chefen ser det som behöver åtgärdas, täckning per område, andelsmål, professionsprogrammet och planer att bekräfta, och en matris för ett urval av område eller roll; medarbetaren sin egen kompetens och plan. Planen tas fram ur utvecklingssamtalet med ett AI-utkast som chefen justerar och servern prövar. Ersätter modulen utveckling.
kalla: packages/modules/kompetens
roller: medarbetare, chef
relationer: api-mock, agera, personal, anthropic, module-sdk, ui
levererar: routes: /verktyg/kompetens, /verktyg/kompetens/enhet/:enhet, /verktyg/kompetens/enhet/:enhet/matris, /verktyg/kompetens/person/:id, /verktyg/kompetens/person/:id/plan, /verktyg/kompetens/professionsprogrammet, /verktyg/kompetens/om (standard), slots.main: utveckling-kort (id behållet från utveckling), slots.actions: planer att bekräfta, behörigheter som går ut, egna krav och planaktiviteter, notifications: behörigheter som går ut eller gått ut, planer att bekräfta, nav: Min kompetens (medarbetare), Kompetens (chef), POST /api/kompetens/plan/utkast
---
id: felanmalan
app: portal
slag: Modul
namn: felanmalan
status: Byggd t.o.m. M2 – M3 och M4 återstår
lage: delvis
beskrivning: Det första samtalsflödet: chatt plus formulärspegel i fokusläge. Samtalet är inmatningen, formuläret är kvittot, och ärendet skapas aldrig utan uttrycklig bekräftelse.
kalla: packages/modules/felanmalan
roller: medarbetare, chef
relationer: api-felanmalan, module-sdk, flow-engine
levererar: routes: /flode/felanmalan (focus), nås från IT-supportsidan, ai.intents: felanmal-dator, flow.ts
---
id: utvecklingsarende
app: portal
slag: Modul
namn: utvecklingsarende
status: Byggd – M3, ärendeadaptern, återstår
lage: delvis
beskrivning: Beslutsunderlag för utvecklingsinitiativ enligt kommunens mall: fjorton avsnitt där fyra är typade radlistor med summeringar. Assistenten skriver utkastet, användaren granskar rubrik för rubrik, och servern avgör att allt obligatoriskt finns innan ärendet lämnas för beslut.
kalla: packages/modules/utvecklingsarende
roller: medarbetare, chef
relationer: api-utvecklingsarende, api-mock, module-sdk, ui, agera, flow-engine
levererar: routes: /flode/utvecklingsarende (focus), nav: Nytt utvecklingsärende, slots.actions, ai.intents: nytt-utvecklingsarende, flow.ts: MALL, KARNAVSNITT, farLamnas, berakning.ts, regelmotorn bakom AI_PROVIDER=mock
---
id: webbsidor
app: portal
slag: Modul
namn: webbsidor
status: Spik – sundsvall.se och utveckling.sundsvall.se
lage: delvis
beskrivning: Sektionen Sitevision under "Sidor": en ingång som beskriver integrationssätten, och ett levande exempel för vart och ett. Kureringen bestämmer placering, snabbvägar och AI-förslag; Sitevisions headless-API levererar texten, som översätts till block. Första prövningen av PageManifest mot verkligt innehåll (ADR-016).
kalla: packages/modules/webbsidor
roller: medarbetare, chef
relationer: module-sdk, sitevision, skal
levererar: pages: integrera-med-sitevision – sätten med fördelar, nackdelar och exempel, först i sektionen Sitevision, pages: skolavtal (ingång) + tre artiklar under Sitevision, pages: sundsvall-se – webbkarta i tre nivåer under Sitevision, pages: utveckling.sundsvall.se:s meny – en sida via REST, sju i ram (ADR-017), Sitevision-adaptern: schema, översättning, hämtning med reserv, fixturer/: inspelade headless-svar
---
id: nyheter
app: portal
slag: Modul
namn: nyheter
status: Byggd – läser sundsvall.se:s nyhetsflöde
lage: byggd
beskrivning: De fem senaste nyheterna från sundsvall.se i högerspalten på startsidan. Flödet är Sitevisions RSS; varje nyhet öppnas på sundsvall.se. Samma källa, cache och reservordning som webbsidor (ADR-016).
kalla: packages/modules/nyheter
roller: medarbetare, chef
relationer: module-sdk, ui, sitevision
levererar: slots.side: nyheter-flode, notifications: de två senaste nyheterna, hamtaNyheter, tolkaRss
---
id: dialogstod
app: portal
slag: Modul
namn: dialogstod
status: Byggd med fiktiv data
lage: byggd
beskrivning: Dialogstöd för chef, ombyggt ur Dialogstödet (bbb): nyckeltalen för nivån under chefens egen – kommundirektören ser förvaltningarna, förvaltningschefen avdelningarna, avdelningschefen sektionerna – och uppföljningsdialogen om varje enhet i sex områden: ekonomi, HME och sjukfrånvaro med diagram, och verksamhet, digital transformation och kommunikativt ledarskap med frågor och manuell status. Aktiviteter, status och anteckningar sparas, och en aktivitet hamnar hos den ansvariga chefen i Att agera på och som en notis. Startsidans budget och sjukfrånvaro kommer härifrån, för chefens egen enhet. Förvaltningarna har sina riktiga namn; allt annat är fiktivt.
kalla: packages/modules/dialogstod
relationer: module-sdk, ui, api-mock, skal, agera
levererar: routes: /verktyg/dialogstod, /verktyg/dialogstod/:enhet, /verktyg/dialogstod/:enhet/:omrade (standard), nav: Dialogstöd (chef), slots.kpi: ekonomi och sjukfrånvaro för chefens egen enhet, som leder in i dialogen, slots.actions: aktiviteterna för chefens egen enhet – öppna i Att agera på, klarrapporterade som hanterade i Mina uppgifter, notifications: ny aktivitet från uppföljningsdialogen, hamtaOversikt, hamtaDialog, hamtaStartnyckeltal, laggTillAktivitet, andraAktivitet, sattStatus, sparaAnteckning
---
id: personal
app: portal
slag: Modul
namn: personal
status: Byggd med fiktiv data
lage: byggd
beskrivning: Chefens överblick över personalen, med sök och filter, och en personalakt per medarbetare: notiser, ärenden, anställning och vägen in till senaste utvecklingssamtalets dokumentation. Datat är fiktivt men har personalsystemets form.
kalla: packages/modules/personal
roller: chef
relationer: module-sdk, ui, api-mock, skal
levererar: routes: /verktyg/personal, /verktyg/personal/:id, /verktyg/personal/:id/utvecklingssamtal (standard), nav: Personal (chef), hamtaPersonal, hamtaMedarbetare, sammanstall, godkannSamtal, notifications: personalaktens notiser, bl.a. utvecklingssamtal att godkänna
---
id: fokusnyhet
app: portal
slag: Modul
namn: fokusnyhet
status: Byggd med mockad nyhet
lage: byggd
beskrivning: Intranätets fokusnyhet: en nyhet om nya startsidan, med bild och en artikel bakom där rollens avsnitt kommer först. Skalet visar den under AI-fältet tills användaren stänger den (ADR-021).
kalla: packages/modules/fokusnyhet
roller: medarbetare, chef
relationer: module-sdk, skal
levererar: slots.fokus: nyheten om nya startsidan, routes: /verktyg/nyheter/ny-startsida (standard), hamtaFokusnyhet, hamtaArtikel
---
id: itsupport
app: portal
slag: Modul
namn: itsupport
status: Byggd med mockad driftstatus och mockade ärenden
lage: byggd
beskrivning: Den första sidan under Sidor: IT-supportens ingång enligt it-support-prototyp.html, med snabbvägar, vanliga frågor, driftstatus, kontakt och användarens IT-ärenden, och artikeln Prioriteringsordning för IT-ärenden enligt innehallssida-prototyp.html (ADR-003, ADR-022).
kalla: packages/modules/itsupport
roller: medarbetare, chef
relationer: module-sdk, ui, skal, felanmalan
levererar: pages: it-support (ingång) och prioriteringsordning (artikel) under Service, IT och lokaler, slots på ingången: Nytt från IT, Driftstatus, Kontakta supporten, Mina IT-ärenden, hamtaDriftstatus, hamtaSupportkontakt, hamtaItArenden, hamtaItNyheter, oppetLage
---
id: verktygslada
app: portal
slag: Modul
namn: verktygslada
status: Byggd med mockad verktygskatalog och omvärld
lage: byggd
beskrivning: Målgruppsingången för Digitalisering, IT och AI: Verktygslådan, porterad från den fristående verktygslådan, med snabbvägar, vägen från idé till nytta, vanliga frågor, verktygskatalogen, verksamhetsområdena, omvärlden och kontakt – och en artikel per tillgängligt verktyg (ADR-027).
kalla: packages/modules/verktygslada
roller: medarbetare, chef
relationer: module-sdk, ui, skal, utvecklingsarende, itsupport
levererar: pages: verktygsladan (ingång) och en artikel per tillgängligt verktyg under Digitalisering, IT och AI, slots på ingången: Verktygen, Din verksamhet, Kontakta oss, Omvärlden, hamtaVerktyg, hamtaVerksamheter, hamtaOmvarld, hamtaKontakt, omradeEtiketter, verktygFor
---
id: api-felanmalan
app: portal
slag: API
namn: POST /api/flows/felanmalan
status: Byggd (M2)
lage: delvis
beskrivning: Flödets enda serverända. Prompt, profil och beslutet att skapa ärendet bor här. Klienten skickar bara text; servern kontrollerar själv att allt obligatoriskt finns.
kalla: apps/portal/src/app/api/flows/felanmalan/route.ts
relationer: felanmalan, ai-adapter
levererar: turkontraktet, zod-validering, takgräns 40 anrop / 5 min
---
id: api-utvecklingsarende
app: portal
slag: API
namn: POST /api/flows/utvecklingsarende/*
status: Byggd
lage: delvis
beskrivning: Dokumentflödets två serverändar: /utkast skriver hela underlaget ur uppladdat material, /tur ändrar ett avsnitt i samtalet. Samma beslutsordning som felanmälans handler, och samma regel: att modellen säger lamna räcker aldrig.
kalla: apps/portal/src/app/api/flows/utvecklingsarende/
relationer: utvecklingsarende, ai-adapter
levererar: POST /utkast och POST /tur, structured outputs ur MALL, arendeSchema: hela dokumentet valideras innan det når prompten, farLamnas på servern, textuttag ur docx, pptx och xlsx utan beroenden, takgräns 40 anrop / 5 min
---
id: min-ai
app: portal
slag: Modul
namn: min-ai
status: Byggd – demo mot Anthropic API, Eneo planerad
lage: delvis
beskrivning: Medarbetarens personliga AI-assistent – en egen ChatGPT där samtalen i drift hanteras i Eneo. Skiljer sig från AI-fältet, som är startsidans assistent för startsidans funktioner. Kontraktet är Eneos: { question, session_id } in, svaret strömmat och samtalets id i ett svarshuvud (ADR-023).
kalla: packages/modules/min-ai
roller: medarbetare, chef
relationer: module-sdk, ui, api-min-ai, eneo, skal
levererar: routes: /verktyg/min-ai, /verktyg/min-ai/:samtal (full, ADR-025), nav: Min AI, slots.genvag: ✦ Min AI bredvid hälsningen på startsidan (ADR-025), data: listaSamtal, hamtaSamtal, nyttSamtal, sparaUtbyte, raderaSamtal, motor: systemprompt, historik, mockSvar, bitar, Verktyg: Mina uppgifter – användarens samlade uppgifter, lästa vid frågan och visade i samtalet, tolkaMarkdown – modellens svar som typade block, Funktionsmeny: verktyg, skills och MCP-tjänster med reglage per användare (ADR-024), Verktyg: Webbsök, Skapa bild (SVG). Skills: Skapa dokument (.docx), Skapa graf, Graf – stapel- och linjediagram i diagramtokens, med tabellvy, byggDocx – Word-dokument utan beroenden
---
id: api-min-ai
app: portal
slag: API
namn: POST /api/min-ai
status: Byggd
lage: byggd
beskrivning: Min AI:s serverända. Tar { question, session_id? } som Eneos sessions-API, strömmar svaret som text och lämnar samtalets id i X-Session-Id. Prompten, historiken och samtalen bor här; klienten skickar bara frågan. DELETE /api/min-ai/samtal/:id raderar ett av användarens samtal.
kalla: apps/portal/src/app/api/min-ai
relationer: min-ai, ai-adapter
levererar: POST /api/min-ai (NDJSON-händelser, X-Session-Id), DELETE /api/min-ai/samtal/:id, GET/PUT /api/min-ai/funktioner – användarens val, GET /api/min-ai/bilagor/:id – Word-dokument
---
id: api-assistant
app: portal
slag: API
namn: POST /api/assistant
status: Byggd
lage: byggd
beskrivning: AI-fältets serverände: frågan in, ett kort svar med knappar ut – inget samtal. En moduls kända fråga (ai.intents) leder till sitt flöde utan modell. Annars svarar modellen med structured outputs och användarens uppgifter, lästa i samma stund, och knapparna väljs ur de mål användaren når. En allmän fråga lämnas över till Min AI med frågan ifylld.
kalla: apps/portal/src/app/api/assistant, apps/portal/src/ai/assistent.ts
relationer: skal, ai-adapter, agera, min-ai, module-sdk
levererar: POST /api/assistant { question } → AssistentSvar, malFor, svaraAvsikt, svarsschema, byggSvar, regelmotorSvar, AskField: svaret under fältet, märkt ✦, förslagen ställer sin fråga
---
id: ai-adapter
app: gemensam
slag: API
namn: AI-adaptern
status: Byggd
lage: byggd
beskrivning: Anthropic-anropet bakom AI_PROVIDER. Turkontraktet garanteras med structured outputs, inte med en instruktion om att svara med JSON. Nyckeln bor på servern. Den strukturerade kärnan är paketet @startsidan/ai, som båda applikationerna använder – projektstödet också (ADR-040); chatten och flödenas adapter bor i startsideportalen.
kalla: packages/ai/src/strukturerat.ts, apps/portal/src/ai/anthropic.ts, apps/portal/src/ai/chatt.ts
relationer: api-felanmalan, api-utvecklingsarende, api-min-ai, module-sdk
levererar: @startsidan/ai: koraStrukturerat med dokumentblock för PDF, strommaChatt – fri chatt med verktygsloop, webbsök och MCP-connector, avbrytbar, koraAnthropicTur, anvandAnthropic, AI_PROVIDER=mock|anthropic, AI_MODELL
---
id: api-mock
app: portal
slag: API
namn: GET /api/mock/*
status: Byggd – fas 1–3
lage: byggd
beskrivning: Mockdata per modul med samma form som kommunens mikrotjänst-API:er skulle ge. Byts mot riktiga källor i fas 4 – en adapterfråga, inte en omskrivning.
kalla: apps/portal/src/app/api/mock
relationer: oversikt, arenden, kalender, ledighet, kompetens, personal, dialogstod
levererar: /api/mock/oversikt, /api/mock/arenden, /api/mock/kalender, /api/mock/ledighet, /api/mock/kompetens, POST /api/mock/kompetens/:id/plan/bekrafta, POST /api/mock/kompetens/:id/innehav, /api/mock/personal, POST /api/mock/personal/:id/utvecklingssamtal/godkann, /api/mock/dialogstod, POST /api/mock/dialogstod/:enhet/:omrade/aktiviteter, PATCH /api/mock/dialogstod/aktiviteter/:id, POST /api/mock/dialogstod/:enhet/:omrade/status, PUT /api/mock/dialogstod/:enhet/:omrade/anteckningar, /api/health
---
id: anthropic
app: gemensam
slag: Extern
namn: Anthropic API
status: I bruk bakom AI_PROVIDER=anthropic
lage: byggd
beskrivning: Modellen bakom samtalsflödena. Anropas med @anthropic-ai/sdk och structured outputs. Modellvalet styrs av AI_MODELL så det kan bytas utan kodändring.
kalla: ANTHROPIC_API_KEY som miljövariabel i Dokploy
relationer: ai-adapter
levererar: messages.parse, output_config.format, web_search_20260209, MCP-connector (mcp-client-2025-11-20)
---
id: eneo
app: portal
slag: Extern
namn: Eneo via WSO2
status: Framtida alternativ
lage: planerad
beskrivning: Kommunens egen AI-plattform bakom Sundsvalls API-gateway. Ett tredje värde på AI_PROVIDER när prototypen ska köra på kommunens plattform i stället för direkt mot Anthropic.
kalla: api-prod.sundsvall.se (WSO2-abonnemang krävs)
relationer: ai-adapter, min-ai
levererar: assistent-API bakom WSO2-token + Eneo api-key
---
id: sitevision
app: portal
slag: Extern
namn: Sitevision (sundsvall.se)
status: sundsvall.se och utveckling.sundsvall.se läses anonymt; intranätet kräver fas 4
lage: delvis
beskrivning: Kommunens CMS, både för sundsvall.se och intranätet. Model REST API:s headless-endpoint ger sidans egenskaper, undersidor och innehållsmoduler som JSON. Publicerat innehåll på sundsvall.se svarar anonymt; offline-modellen (/1/0/) och utveckling.sundsvall.se svarar 401/403. Inga CORS-headers – allt hämtas på servern.
kalla: https://sundsvall.se/rest-api/1/1/{nodeId}/headless (SITEVISION_BAS_URL)
relationer: webbsidor, nyheter
levererar: headless?textPortletFormat=JSON: properties, nodes, contentNodes, RSS 2.0 ur nyhetsportleten (/rss/nyheter)
---
id: dokploy
app: gemensam
slag: Extern
namn: Dokploy
status: I bruk
lage: byggd
beskrivning: Deployplattformen. Pekar på docker-compose.yml i repot; Git-push ger deploy. Hemligheter läggs som Environment i Dokploy, aldrig i repot.
kalla: docker-compose.yml + apps/projekt/Dockerfile
relationer: skal
levererar: publik URL, healthcheck mot /api/health