Hur vi kodar partiernas positioner
Partiprogrammen bygger uteslutande på partiernas publicerade program och valmanifest. Vi gör inga egna intervjuer och låter inte partierna själva-skatta. Varje position går att spåra till en sida i ett originaldokument — och hela algoritmen är publicerad nedan.
Principer
Vår kompass har fyra orubbliga principer som styr all kodning. Om en princip skulle behöva ändras dokumenteras det i uppdateringsloggen.
- Endast skriftliga program. Varje position måste kunna spåras till ett konkret citat i ett publicerat partidokument. Tweets, debattinlägg, intervjuer eller interna PM räknas inte.
- Tydlig dokumenthierarki. Vi använder valmanifest 2026 i första hand, principprogram som stöd, valmanifest 2022 om aktuella dokument saknas. Saknas ställning även där markeras frågan som “inte upptagen i programmet”.
- Partier bekräftar — men ändrar inte. Partierna får möjlighet att kommentera och bekräfta vår tolkning. Deras egen formulering publiceras intill vår kodning, men de kan inte själva justera positionsvärdet.
- Allt loggas, för evigt. Varje ändring i en position sparas i en append-only historiktabell (
party_position_history). Vad som stod tidigare kan alltid grävas fram.
Frågeurval
Vi använder 30 frågor, fördelade på fem politikområden: ekonomi, välfärd, klimat & energi, migration, samt demokrati & rättsstat. Varje område har 6 frågor.
Frågorna har valts av en oberoende referensgrupp bestående av forskare i statskunskap, journalister med valbevakning som specialitet, och en panel av tidigare väljare. Listan över referensgruppen publiceras på /om-kallorna.
Urvalskriterier: en fråga ska (1) särskilja partierna åt — om alla tycker likadant tas frågan bort, (2) ha en tydlig kopplad position i minst sex partiers publicerade dokument, och (3) vara begriplig för en väljare utan förkunskaper.
Kodningsprocess
- Vi hämtar och arkiverar partiets senaste valmanifest och partiprogram. SHA-256 av PDF:en sparas så att förändringar i originalet kan upptäckas.
- Två kodare läser oberoende av varandra och sätter en position på den femgradiga skalan (−2 till +2) eller markerar att partiet inte tar upp frågan i sitt program.
- Avvikelser löses av referensgruppen. Det ordagranna citatet och sidhänvisningen sparas tillsammans med positionen.
- Partiet får en bekräftelselänk via mail. De kan godkänna kodningen eller lämna en publik kommentar — men inte ändra själva positionsvärdet.
- Om partiets kommentar avviker från vår kodning visas båda intill varandra: ”Vår kodning: +1. Partiets kommentar: vi anser att vi är tydligt positiva men inte kategoriskt …”.
Vi publicerar redaktionens fullständiga arbetsbok — alla 360 kodningsposter (12 partier × 30 frågor), källförteckningen och de interna instruktionerna. Det preliminära utkastet i flikens "Preliminär kodning" är skapat med ChatGPT enbart utifrån frågornas förväntade differentiering och är inte validerat mot primärdokumenten. Slutgiltig kodning sker mot källorna.
Matchningsalgoritm
För varje fråga jämförs ditt svar (−2 till +2) med partiets kodade position. Avståndet är mellan 0 (perfekt match) och 4 (motpoler). Avståndet konverteras till en match-procent och vägs med din viktning av frågan (0,5 / 1 / 2).
Du svarar +2 på frågan om sänkt skatt på arbete. Moderaterna har kodats till +2. Avståndet är 0, vilket ger match 1.0 (100 %). Du markerade frågan som extra viktig (vikt 2.0). Bidraget till Moderaterna blir då 1.0 × 2.0 = 2.0 i täljaren och 2.0 i nämnaren.
Centerpartiet kodas på samma fråga till 0. Avståndet är 2, match 1 − 2/4 = 0.5. Bidraget blir 0.5 × 2.0 = 1.0 i täljaren och 2.0 i nämnaren.
Slutprocenten är (täljare ÷ nämnare) × 100, summerat över alla frågor där partiet har en publicerad position.
Frågor som partiet inte tar upp i sina dokument exkluderas helt — de neutraliseras inte. Det betyder att ett parti som bara tar ställning i 18 frågor jämförs mot dig på exakt de 18 frågorna. På resultatsidan markeras därför partier med få underliggande frågor med ett varningsmönster.
-- Matchningsalgoritm: calculate_match (PostgreSQL, SECURITY DEFINER)
-- För varje fråga som användaren besvarat och som partiet har en publicerad
-- position på:
-- distance = |user.response - party.position| (0..4)
-- match = 1 - distance/4 (0..1)
-- Viktas med användarens importance_weight (0.5 / 1.0 / 2.0).
-- match_percent = sum(match * w) / sum(w) * 100
-- Frågor som partiet inte tar upp exkluderas — de neutraliseras inte.
-- Skippade svar (response IS NULL) exkluderas.
WITH answered AS (
SELECT question_id, response, importance_weight
FROM user_responses
WHERE session_id = _session_id AND response IS NOT NULL
),
per_party AS (
SELECT
p.id AS party_id,
SUM((1.0 - ABS(a.response - pp.position) / 4.0) * a.importance_weight)
AS weighted_sum,
SUM(a.importance_weight) AS total_weight,
COUNT(pp.id) AS used_count
FROM parties p
LEFT JOIN party_positions pp
ON pp.party_id = p.id
AND pp.published = true
AND pp.has_position = true
AND pp.position IS NOT NULL
LEFT JOIN answered a ON a.question_id = pp.question_id
WHERE p.active = true
GROUP BY p.id
)
SELECT
party_id,
CASE WHEN total_weight > 0
THEN ROUND((weighted_sum / total_weight) * 100, 1)
ELSE 0
END AS match_percent,
used_count
FROM per_party
ORDER BY match_percent DESC;Den fullständiga källkoden, inklusive testfall, finns som databasmigrationer i projektets publika GitHub-repo.
Datainsamling och integritet
Vi har designat datainsamlingen för att samla minsta möjliga mängd data. Inga konton, inga kakor för spårning, ingen personlig identifiering.
- Dina 30 svar på den femgradiga skalan
- Din viktning per fråga (0,5 / 1 / 2)
- Vilket län du befinner dig i
- Datum och tid då sessionen startade
- Om du använder mobil, surfplatta eller dator
- Frivilliga svar på två kryptofrågor
- Namn eller e-postadress
- IP-adress (lagras aldrig, loggas aldrig)
- Spårningskakor
- Tredjeparts-analytik
- Kopplingar till sociala medier
Hur länet bestäms
När du startar kompassen läser vår server tillfälligt din IP-adress och slår upp vilket län den tillhör genom en geo-databas. Sedan sparar vi endast länet (t.ex. “Stockholms län”). IP-adressen finns aldrig i någon tabell, ingen server-logg och ingen säkerhetskopia. Detta gör att vi kan visa hur svaren skiljer sig mellan landets regioner — utan att kunna identifiera dig.
Eftersom uppslaget bygger på IP fungerar det inte perfekt: VPN, mobilnät och delade IP-adresser kan ge fel län. Du kan alltid lämna fältet tomt om du inte vill att ditt län sparas.
Krypto-uppföljning
Efter att du sett ditt resultat ställer vi två frivilliga frågor om kryptovaluta. Att svara är helt valfritt och påverkar inte ditt partiresultat. Vi använder svaren för att studera samband mellan politiska åsikter och privatekonomiska vanor — ett tema som hittills fattats i svenska valkompasser.
Aggregerad statistik publiceras öppet på /statistik. Inget enskilt svar går att härleda eftersom statistiken bara visas per län när det finns minst 30 svarande i länet (k-anonymisering).
Lagring och radering
All data lagras inom EU (Lovable Cloud, EU-region). Om du vill att dina svar raderas: kopiera ditt session-token (visas i webbläsarens lokala lagring under nyckeln kompass-store) och mejla oss.
Begränsningar och kritik
- Vi tolkar text — det är inte alltid entydigt. Två kodare kan komma fram till olika positioner. När så sker visas båda i historiken.
- Partier ändrar åsikt mellan dokument. Vår dokumenthierarki ger valmanifestet företräde, men nyanser kan gå förlorade.
- Vissa frågor får få partier att ta tydlig ställning. Då blir matchningen baserad på färre frågor, vilket markeras tydligt på resultatsidan.
- Geo-uppslag via IP är ungefärligt. Använder du VPN eller delar uppkoppling kan du hamna i fel län.
- Vår kompass ersätter inte att läsa partiernas program själv. Den är ett verktyg för att hitta partier vars skriftliga linje liknar din — inte ett facit på deras politiska handling.
Uppdateringslogg
Större metodförändringar listas här. Mindre justeringar (textkorrigeringar, layout) framgår av GitHub-historiken.
- 2026-04 — v1.0 Initial publicering: 30 frågor, 12 partier, kodningsprocess och algoritm enligt ovan.
Vanliga frågor
- Hur kodas partiernas positioner?
- Två oberoende kodare läser varje partis publicerade program och valmanifest, sätter en position på en femgradig skala och citerar källan med sidhänvisning. Konflikter löses av en tredje kodare. Allt arkiveras och versioneras.
- Hur räknas matchningen?
- För varje fråga som du besvarat och som partiet har en publicerad position på beräknas avståndet på den femgradiga skalan. Avståndet konverteras till en matchningsgrad mellan 0 och 1, viktas med din importance_weight (0,5 / 1,0 / 2,0) och summeras till en procentsats per parti.
- Vad händer om ett parti inte har någon position?
- Den frågan exkluderas helt för det partiet — vi neutraliserar inte och gissar inte. Det betyder att olika partier kan matchas på olika många frågor. Antalet använda frågor visas alltid bredvid resultatet.
- Är källkoden öppen?
- Ja. Hela kompassen — inklusive matchningsalgoritmen — är publicerad under MIT-licens. All data är CC BY 4.0 och kan laddas ner via /oppen-data eller anropas via /api-docs.
- Får partierna granska sina positioner innan publicering?
- Ja. Varje parti får en bekräftelselänk där de kan godkänna eller invända mot varje kodad position med kommentar. Eventuell partikommentar visas öppet bredvid positionen.