import { STRUCTURAL, wageChangePct, type ScenarioParams } from "./engine"; /** * Tre AI-scenarier. De är villkorade antaganden, inte prognoser och inte * sannolikhetsbedömningar. Alla förvalda värden är redaktionellt valda * exempelvärden som är synliga och ändringsbara. Både negativa och positiva * utfall kan undersökas. * * Jobbantagandena gäller privat sektor. Offentlig personalminskning styrs bara * av reglaget för offentlig effektivisering. */ export type ScenarioId = "productivity" | "transition" | "capital"; export const SCENARIOS: { id: ScenarioId; label: string; summary: string; why: string; params: ScenarioParams; }[] = [ { id: "productivity", label: "AI stärker människors produktivitet", summary: "AI används mest som stöd i arbetet. Få jobb försvinner, nästan alla ersätts, och de som blir kvar producerar mer.", why: "Exempelvärdena speglar en utveckling där effektiviseringen syns i priser och löner snarare än i minskad sysselsättning.", params: { inputMode: "jobs", jobsLostPct: 6, jobsReplacedPct: 90, retainedJobWagePct: 3, newJobWagePct: 105, wageChangePct: 3, aiImportCost: 40, savingToProfitsPct: 30, savingToPricesPct: 50, publicEfficiencyPct: 1.5, publicImplementationPct: 30, transferSupportPct: 0, consumptionPassthroughPct: 90, dividendToHouseholdsPct: 40, }, }, { id: "transition", label: "Omfattande omställning", summary: "Många jobb försvinner samtidigt som nya växer fram, men inte lika många och delvis till lägre lön. Omställningen kostar.", why: "Exempelvärdena visar ett läge där bortfall och nya inkomster delvis tar ut varandra, men där offentliga stöd behövs under omställningen.", params: { inputMode: "jobs", jobsLostPct: 12, jobsReplacedPct: 60, retainedJobWagePct: 0, newJobWagePct: 90, wageChangePct: -5.5, aiImportCost: 90, savingToProfitsPct: 40, savingToPricesPct: 35, publicEfficiencyPct: 3, publicImplementationPct: 35, transferSupportPct: 35, consumptionPassthroughPct: 90, dividendToHouseholdsPct: 35, }, }, { id: "capital", label: "AI ersätter mycket arbete", summary: "En stor del av arbetet ersätts, färre nya jobb tillkommer och en större del av inkomsterna hamnar hos ägare av kapital.", why: "Exempelvärdena speglar att vinsten av automatiseringen i hög grad tillfaller ägare, och att en del av den inte beskattas i Sverige.", params: { inputMode: "jobs", jobsLostPct: 20, jobsReplacedPct: 35, retainedJobWagePct: 0, newJobWagePct: 85, wageChangePct: -14, aiImportCost: 160, savingToProfitsPct: 45, savingToPricesPct: 15, publicEfficiencyPct: 4, publicImplementationPct: 40, transferSupportPct: 45, consumptionPassthroughPct: 90, dividendToHouseholdsPct: 25, }, }, ]; export function scenarioById(id: string) { return SCENARIOS.find((s) => s.id === id) ?? SCENARIOS[0]!; } const n = (v: number, d = 0) => v.toLocaleString("sv-SE", { minimumFractionDigits: d, maximumFractionDigits: d }); /** * Genererar scenariobeskrivningen ur exakt samma parametrar som beräkningen * använder, så att text och resultat aldrig kan säga olika saker. */ export function describeScenario(p: ScenarioParams): string[] { const out: string[] = []; const pct = wageChangePct(p); if (p.inputMode === "jobs") { const lost = p.jobsLostPct; const added = (lost * p.jobsReplacedPct) / 100; const retained = 100 - lost; out.push( `Av 100 jobb i privat sektor försvinner ${n(lost, 1)}, ${n(retained, 1)} finns kvar och ${n(added, 1)} nya tillkommer.`, ); out.push( p.retainedJobWagePct === 0 ? "De kvarvarande jobben har oförändrad genomsnittlig löneinkomst." : `De kvarvarande jobben får ${n(Math.abs(p.retainedJobWagePct), 1)} procent ${p.retainedJobWagePct > 0 ? "högre" : "lägre"} genomsnittlig löneinkomst.`, ); out.push( p.newJobWagePct === 100 ? "De nya jobben har samma genomsnittliga löneinkomst som de jobb som försvann." : `De nya jobben har ${n(p.newJobWagePct)} procent av de försvunna jobbens genomsnittliga löneinkomst.`, ); out.push( `Samlade löneinkomster i privat sektor förändras därmed med ${n(pct, 1)} procent. Privat sektor antas svara för ${n(STRUCTURAL.privateShareOfWages * 100)} procent av lönesumman.`, ); } else { out.push( `Löneinkomsterna i privat sektor förändras netto med ${n(pct, 1)} procent. Det är en direkt angiven nettoförändring efter förlorade jobb, nya jobb och löneförändringar.`, ); } out.push( `Företag och offentlig sektor köper utländska AI-tjänster för ${n(p.aiImportCost)} miljarder kronor per år.`, ); const other = Math.max(0, 100 - p.savingToProfitsPct - p.savingToPricesPct); out.push( `Av besparingen som återstår efter AI-kostnaden blir ${n(p.savingToProfitsPct)} procent svensk beskattningsbar vinst, ${n(p.savingToPricesPct)} procent lägre priser och ${n(other)} procent annan användning som inte beskattas i Sverige.`, ); out.push( `Offentlig sektor effektiviserar ${n(p.publicEfficiencyPct, 1)} procent av sin konsumtion, med ${n(p.publicImplementationPct)} procent av bruttobesparingen i införandekostnad.`, ); out.push( `Omställningsstöd ersätter ${n(p.transferSupportPct)} procent av bortfallen löneinkomst före skatt. ${n(p.consumptionPassthroughPct)} procent av förändrad disponibel inkomst syns i konsumtionen och ${n(p.dividendToHouseholdsPct)} procent av ökade vinster delas ut till svenska hushåll.`, ); return out; } export const SCENARIO_CAVEAT = "Automatiserade arbetsuppgifter, förlorade jobb och förändrade löneinkomster är tre olika saker. Att en uppgift kan automatiseras betyder inte att jobbet försvinner, och ett borttaget jobb betyder inte att hela löneinkomsten försvinner ur ekonomin.";