portfolio-optimiser/docs/presentasjon-bygge-kunnskapsbase.html
Kjell Tore Guttormsen 3340fa19da docs: presentasjonen skrevet om til en gjoer-dette-guide (9 steg) [skip-docs]
Operatoerretning: dropp veglys-eksemplet, gjoer den saa enkel og konkret som mulig, med
fokus paa hva som maa GJOERES for aa faa opp en kunnskapsbase for et optimaliseringsprosjekt.

Omskrevet fra konseptuell gjennomgang til handlingsrettet guide. Filen er doept om
(veglys -> bygge) fordi eksemplet ikke lenger baerer den.

Formen: ni nummererte steg i fire faser (ramme 1-3, innhold 4-6, bind sammen 7-8, kjoer 9).
Hvert steg sier hvem som gjoer det, hva som leveres, og har en 'Ferdig naar'-boks. I tillegg:
rollefordelingen (fagperson eier innhold, teknisk person eier form - og utleder ALDRI et tall),
en sjekkliste hvem-leverer-hva, og de fem dyreste fallgruvene.

Steg 2 (kostnadstallene) er markert gjennomgaaende som det som stopper prosjekter - det er
ogsaa den ene fallgruven som er usynlig i resultatet.

Bro-kolonnen fra forrige versjon er BORTE: tiltakstyper er naa generiske (utskifting til nyere
teknologi, behovsstyring, tilstandsbasert vedlikehold, levetidsforlengelse) med beskjed om at
fagmiljoeet eier listen for sin type. Ingen ufagverifisert domenepaastand staar igjen.

Verifisert: 15 slides, null veglys-referanser, null filnavn eller kommandoer i teksten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DA6HAF8HFQxGYC2h6ypRQe
2026-08-21 12:38:25 +02:00

692 lines
40 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="no">
<meta charset="utf-8">
<title>Kunnskapsbasen for én kjøring</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
:root { color-scheme: light; }
* { box-sizing: border-box; }
body { margin:0; background:#fff; color:#000;
font:17px/1.6 -apple-system, "Segoe UI", system-ui, sans-serif; }
.slide { display:none; min-height:100vh; padding:6vh 6vw 14vh; max-width:54rem; margin:0 auto; }
.slide.on { display:block; }
h1 { font-size:2.1rem; margin:0 0 .5em; line-height:1.2; }
h2 { font-size:1.55rem; margin:0 0 .9em; line-height:1.3; }
.kicker { color:#666; text-transform:uppercase; letter-spacing:.1em;
font-size:.72rem; margin:0 0 1.6em; }
p { margin:0 0 1em; }
ol, ul { padding-left:1.4em; margin:0 0 1em; }
li { margin:.5em 0; }
.lead { font-size:1.15rem; color:#444; }
.ok { font-weight:700; }
.no { font-weight:700; }
.note { border-left:3px solid #ccc; padding:.3em 0 .3em 1.1em;
color:#444; margin:1.6em 0; font-size:.95rem; }
figure { margin:1.8em 0; }
figure svg { width:100%; height:auto; display:block; }
figcaption { font-size:.82rem; color:#666; margin-top:.6em; text-align:center; }
nav { position:fixed; bottom:0; left:0; right:0; padding:.7em 6vw;
background:#fff; border-top:1px solid #ddd;
display:flex; gap:1em; align-items:center; font-size:.85rem; }
button { font:inherit; padding:.3em .9em; cursor:pointer; border:1px solid #bbb;
background:#fff; color:#000; border-radius:4px; }
#pos { color:#666; margin-left:auto; }
/* SVG defaults */
.d { fill:none; stroke:#000; stroke-width:2; }
.dt { fill:#000; font:13px -apple-system,"Segoe UI",system-ui,sans-serif; }
.dt-s { fill:#444; font:11px -apple-system,"Segoe UI",system-ui,sans-serif; }
.dim { stroke:#bbb; }
.dimt { fill:#999; font:12px -apple-system,"Segoe UI",system-ui,sans-serif; }
.fill { fill:#000; }
.hatch { fill:#eee; stroke:#000; stroke-width:2; }
</style>
<section class="slide on">
<p class="kicker">Kunnskapsbasen</p>
<h1>Kunnskapsbasen for én kjøring</h1>
<p class="lead">Hva må være på plass før systemet kan lete etter besparelser i et konkret
prosjekt — og hvordan setter man det sammen?</p>
<p>Gjennomgangen følger ett eksempel hele veien: en fylkeskommunal veglysportefølje som
vurderer å bytte ut 2 500 gamle lyspunkter med LED.</p>
<figure>
<svg viewBox="0 0 720 150" role="img" aria-label="Fire trinn: bestilling, kunnskapsbase, kjøring, dom">
<rect class="d" x="8" y="45" width="150" height="60" rx="4"/>
<text class="dt" x="83" y="72" text-anchor="middle">Bestilling</text>
<text class="dt-s" x="83" y="90" text-anchor="middle">hva skal vurderes</text>
<rect class="d" x="192" y="45" width="150" height="60" rx="4"/>
<text class="dt" x="267" y="72" text-anchor="middle">Kunnskapsbase</text>
<text class="dt-s" x="267" y="90" text-anchor="middle">konteksten</text>
<rect class="d" x="376" y="45" width="150" height="60" rx="4"/>
<text class="dt" x="451" y="72" text-anchor="middle">Kjøring</text>
<text class="dt-s" x="451" y="90" text-anchor="middle">forslag + kontroll</text>
<rect class="d" x="560" y="45" width="150" height="60" rx="4"/>
<text class="dt" x="635" y="72" text-anchor="middle">Dom</text>
<text class="dt-s" x="635" y="90" text-anchor="middle">fagperson</text>
<path class="d" d="M158 75 h26"/><path class="fill" d="M192 75 l-10 -5 v10 z"/>
<path class="d" d="M342 75 h26"/><path class="fill" d="M376 75 l-10 -5 v10 z"/>
<path class="d" d="M526 75 h26"/><path class="fill" d="M560 75 l-10 -5 v10 z"/>
<path class="d dim" d="M635 105 v25 H267 v-25"/>
<path class="fill" d="M267 105 l-5 10 h10 z" opacity=".45"/>
<text class="dimt" x="451" y="145" text-anchor="middle">dommen gjør basen klokere til neste gang</text>
</svg>
</figure>
</section>
<section class="slide">
<p class="kicker">Premisset</p>
<h2>Systemet navigerer. Det søker ikke.</h2>
<p>Kunnskapsbasen er ikke en søkbar dokumentbunke. Den er en liten, kuratert samling som leses
ved å følge lenker: systemet starter i innholdsfortegnelsen, følger lenkene derfra, og leser hver
fil det når — helt, eller ikke i det hele tatt.</p>
<figure>
<svg viewBox="0 0 720 250" role="img" aria-label="Innholdsfortegnelsen lenker til dokumenter; en fil uten lenke nås ikke, og en lenke ut av basen følges ikke">
<rect class="d dim" x="8" y="8" width="500" height="234" rx="6" stroke-dasharray="6 5"/>
<text class="dimt" x="20" y="28">kunnskapsbasen</text>
<rect class="d" x="40" y="95" width="130" height="56" rx="4"/>
<text class="dt" x="105" y="118" text-anchor="middle">Innholds-</text>
<text class="dt" x="105" y="136" text-anchor="middle">fortegnelse</text>
<rect class="d" x="290" y="46" width="150" height="42" rx="4"/>
<text class="dt" x="365" y="72" text-anchor="middle">Anleggsbeskrivelse</text>
<rect class="d" x="290" y="102" width="150" height="42" rx="4"/>
<text class="dt" x="365" y="128" text-anchor="middle">Tiltaksnotat</text>
<rect class="d" x="290" y="158" width="150" height="42" rx="4"/>
<text class="dt" x="365" y="184" text-anchor="middle">Metodenotat</text>
<path class="d" d="M170 118 C 220 118, 230 67, 280 67"/><path class="fill" d="M290 67 l-11 -5 v10 z"/>
<path class="d" d="M170 123 h110"/><path class="fill" d="M290 123 l-11 -5 v10 z"/>
<path class="d" d="M170 128 C 220 128, 230 179, 280 179"/><path class="fill" d="M290 179 l-11 -5 v10 z"/>
<rect class="hatch" x="60" y="185" width="150" height="42" rx="4" stroke-dasharray="5 4"/>
<text class="dimt" x="135" y="205" text-anchor="middle">notat uten lenke</text>
<text class="dimt" x="135" y="220" text-anchor="middle">— finnes ikke</text>
<rect class="d dim" x="558" y="102" width="150" height="42" rx="4" stroke-dasharray="5 4"/>
<text class="dimt" x="633" y="128" text-anchor="middle">nabobase</text>
<path class="d dim" d="M440 123 h100" stroke-dasharray="6 5"/>
<path class="d" d="M482 108 l26 30 M508 108 l-26 30" stroke-width="2.5"/>
<text class="dimt" x="495" y="164" text-anchor="middle">følges aldri</text>
</svg>
<figcaption>Alt som lenkes leses i sin helhet. Det som ikke lenkes, eksisterer ikke.</figcaption>
</figure>
<ul>
<li><strong>Et dokument uten lenke fra innholdsfortegnelsen finnes ikke.</strong> Det hjelper
ikke at det ligger i riktig mappe.</li>
<li><strong>En lenke ut av basen følges aldri.</strong> Den hoppes stille over, uten
feilmelding. Derfor kopieres fagstoff fysisk inn, det lenkes ikke til.</li>
<li><strong>Mengde er ikke kvalitet.</strong> Ti sider støy koster like mye oppmerksomhet som
ti sider substans.</li>
</ul>
<p>Én ting holdes alltid utenfor den løpende lesingen: tidligere ekspertdommer. De hentes for
seg, koblet til det konkrete tiltaket de handler om, og legges foran når systemet skal forme sin
hypotese.</p>
</section>
<section class="slide">
<p class="kicker">Kategoriene</p>
<h2>Fire lag, som skiller seg på hva de følger</h2>
<figure>
<svg viewBox="0 0 720 250" role="img" aria-label="Tre lag ligger inne i basen, kjøringslaget ligger ved siden av">
<rect class="d dim" x="8" y="8" width="450" height="234" rx="6" stroke-dasharray="6 5"/>
<text class="dimt" x="20" y="28">inne i kunnskapsbasen — varig</text>
<rect class="d" x="36" y="44" width="394" height="56" rx="4"/>
<text class="dt" x="52" y="70">Prosjektlaget</text>
<text class="dt-s" x="52" y="88">følger anlegget · prosjekteier og drift</text>
<rect class="d" x="36" y="110" width="394" height="56" rx="4"/>
<text class="dt" x="52" y="136">Faglaget</text>
<text class="dt-s" x="52" y="154">følger fagområdet · fagmiljøet</text>
<rect class="d" x="36" y="176" width="394" height="56" rx="4"/>
<text class="dt" x="52" y="202">Erfaringslaget</text>
<text class="dt-s" x="52" y="220">følger organisasjonen over tid · fagekspertene</text>
<rect class="d" x="500" y="110" width="208" height="56" rx="4" stroke-dasharray="7 4"/>
<text class="dt" x="516" y="136">Kjøringslaget</text>
<text class="dt-s" x="516" y="154">følger denne ene bestillingen</text>
<text class="dimt" x="604" y="188" text-anchor="middle">ved siden av — lagres aldri</text>
</svg>
</figure>
<p><strong>Prosjektlaget</strong> følger anlegget: hva det består av, hvilke tall det har, hvilke
rammer som gjelder. <strong>Faglaget</strong> følger fagområdet, og er i praksis det samme på
tvers av prosjekter i samme fag. <strong>Erfaringslaget</strong> er de tidligere dommene, og det
er dette laget som gjør systemet klokere fra kjøring til kjøring.</p>
<div class="note">Det er én kunnskapsbase per prosjekt. Kjøringslaget ligger utenfor — det er en
instruks for én kjøring, ikke kunnskap. En portefølje er flere baser.</div>
</section>
<section class="slide">
<p class="kicker">Avgjørelsene</p>
<h2>Fjorten spørsmål til fagpersonen</h2>
<p>Hvert spørsmål avgjør én konkret del av basen. De fire første avgjør om kjøringen i det hele
tatt kan starte.</p>
<figure>
<svg viewBox="0 0 720 90" role="img" aria-label="De fire første spørsmålene er blokkerende, de sju neste former innholdet">
<rect class="d" x="8" y="20" width="262" height="46" rx="4" stroke-width="3"/>
<text class="dt" x="139" y="40" text-anchor="middle" font-weight="700">Spørsmål 14</text>
<text class="dt-s" x="139" y="58" text-anchor="middle">uten svar: ingen kjøring</text>
<rect class="d dim" x="298" y="20" width="414" height="46" rx="4"/>
<text class="dt" x="505" y="40" text-anchor="middle">Spørsmål 514</text>
<text class="dt-s" x="505" y="58" text-anchor="middle">former kvaliteten på det som kommer ut</text>
</svg>
</figure>
<ol>
<li>Hvilket prosjekt eller anlegg gjelder det, og hva skal det hete?</li>
<li>Hvilke kostnadslinjer kan tiltakene komme til å treffe — og har vi faktiske tall for dem?</li>
<li>Hvilket tiltak er «det ene» vi regner på?</li>
<li>Hvilke harde rammer gjelder — hva kan ikke fravikes?</li>
<li><strong>Hva er allerede gjennomført på anlegget?</strong></li>
<li><strong>Hvilke tiltakstyper er typiske for denne prosjekttypen?</strong></li>
<li>Hvilke tilnærminger ønsker vi vurdert?</li>
<li>Hvordan skal effekten måles i etterkant?</li>
<li>Hva finnes av litteratur om avviket mellom modellert og faktisk effekt?</li>
<li>Finnes det tidligere erfaring vi kan starte med?</li>
<li>Skal kjøringen avgrenses til én kostnadsakse?</li>
<li>Skal noen datakilder leses maskinelt, eller er alt håndkuratert?</li>
<li><strong>Hvilke eksterne systemer må agentene kunne spørre underveis — og nøyaktig hva skal de få lov til å kalle?</strong></li>
<li>Hvem avgir dommen etterpå?</li>
</ol>
</section>
<section class="slide">
<p class="kicker">Historikken</p>
<h2>«Hva er gjort før?» er to ulike spørsmål</h2>
<p>Begge må besvares, og de havner på hvert sitt sted i basen. Blandes de, blir svaret feil på
en måte som er vanskelig å oppdage.</p>
<figure>
<svg viewBox="0 0 720 215" role="img" aria-label="Gjennomførte tiltak hører i anleggsbeskrivelsen; tidligere vurderinger hører i erfaringslaget">
<rect class="d" x="8" y="24" width="340" height="150" rx="4"/>
<text class="dt" x="178" y="50" text-anchor="middle" font-weight="700">Gjennomførte tiltak</text>
<text class="dt-s" x="178" y="72" text-anchor="middle">hva som faktisk er bygget om</text>
<text class="dt-s" x="178" y="90" text-anchor="middle">når, og på hvor mye av anlegget</text>
<path class="d dim" d="M40 106 h276"/>
<text class="dt-s" x="178" y="130" text-anchor="middle">hører i anleggsbeskrivelsen</text>
<text class="dt-s" x="178" y="150" text-anchor="middle">og i kostnadsgrunnlaget</text>
<rect class="d" x="372" y="24" width="340" height="150" rx="4"/>
<text class="dt" x="542" y="50" text-anchor="middle" font-weight="700">Tidligere vurderinger</text>
<text class="dt-s" x="542" y="72" text-anchor="middle">hva fagfolk mente om et forslag</text>
<text class="dt-s" x="542" y="90" text-anchor="middle">og hvor mye som ble realisert</text>
<path class="d dim" d="M404 106 h276"/>
<text class="dt-s" x="542" y="130" text-anchor="middle">hører i erfaringslaget</text>
<text class="dt-s" x="542" y="150" text-anchor="middle">som tidligere dommer</text>
<text class="dimt" x="360" y="200" text-anchor="middle">to ulike spørsmål — to ulike steder i basen</text>
</svg>
</figure>
<p><strong>Gjennomførte tiltak må inn, ellers foreslås de på nytt.</strong> Systemet vet ingenting
om anlegget utover det basen sier. Er 3 000 av 9 500 lyspunkter allerede byttet til LED, og det
ikke står noe sted, vil et forslag om «å bytte til LED» framstå som friskt — og besparelsen det
lover er allerede tatt ut. Det er dobbelttelling, og den er usynlig i resultatet.</p>
<p><strong>Kostnadsgrunnlaget må vise dagens situasjon</strong>, ikke situasjonen før forrige
tiltak. Ellers avstemmes nye forslag mot et forbruk anlegget ikke lenger har.</p>
<div class="note"><strong>Tommelfingerregel:</strong> alt som endrer hva anlegget <em>er</em>,
hører i anleggsbeskrivelsen. Alt som endrer hva vi <em>tror om</em> et tiltak, hører i
erfaringslaget.</div>
</section>
<section class="slide">
<p class="kicker">Tiltakstypene</p>
<h2>Hva kan man typisk optimalisere — per prosjekttype?</h2>
<p>Fagpersonen trenger ikke finne opp kandidatene fra bunnen. For hver prosjekttype finnes det et
ganske stabilt sett av tiltakstyper, og jobben er å avgjøre hvilke som er aktuelle for
<em>dette</em> anlegget.</p>
<figure>
<svg viewBox="0 0 720 260" role="img" aria-label="Typiske tiltakstyper for veg, tunnel og bro">
<rect class="d" x="8" y="14" width="230" height="230" rx="4"/>
<text class="dt" x="123" y="44" text-anchor="middle" font-weight="700">VEG</text>
<path class="d dim" d="M28 56 h190"/>
<text class="dt-s" x="28" y="82">Belysning: LED, dimming,</text>
<text class="dt-s" x="28" y="99">nattreduksjon</text>
<text class="dt-s" x="28" y="126">Dekke: levetid, dekketype,</text>
<text class="dt-s" x="28" y="143">reasfalteringsintervall</text>
<text class="dt-s" x="28" y="170">Vinterdrift: saltstrategi,</text>
<text class="dt-s" x="28" y="187">rodeinndeling</text>
<text class="dt-s" x="28" y="214">Utstyr: tilstandsbasert</text>
<text class="dt-s" x="28" y="231">framfor intervallbasert</text>
<rect class="d" x="246" y="14" width="230" height="230" rx="4"/>
<text class="dt" x="361" y="44" text-anchor="middle" font-weight="700">TUNNEL</text>
<path class="d dim" d="M266 56 h190"/>
<text class="dt-s" x="266" y="82">Belysning: trinnstyring av</text>
<text class="dt-s" x="266" y="99">innkjøringssone, LED</text>
<text class="dt-s" x="266" y="126">Portalskjerming: passiv</text>
<text class="dt-s" x="266" y="143">reduksjon av lyskrav</text>
<text class="dt-s" x="266" y="170">Ventilasjon: behovsstyring</text>
<text class="dt-s" x="266" y="187">på målt luftkvalitet</text>
<text class="dt-s" x="266" y="214">Stengninger: samordning</text>
<text class="dt-s" x="266" y="231">av vedlikehold</text>
<rect class="d dim" x="484" y="14" width="228" height="230" rx="4" stroke-dasharray="7 4"/>
<text class="dt" x="598" y="44" text-anchor="middle" font-weight="700">BRO</text>
<path class="d dim" d="M504 56 h188"/>
<text class="dt-s" x="504" y="82">Inspeksjonsregime:</text>
<text class="dt-s" x="504" y="99">tilstandsbasert</text>
<text class="dt-s" x="504" y="126">Korrosjonsvern: syklus</text>
<text class="dt-s" x="504" y="143">og systemvalg</text>
<text class="dt-s" x="504" y="170">Fuger og lager:</text>
<text class="dt-s" x="504" y="187">utskiftingsstrategi</text>
<text class="dt-s" x="504" y="214">Levetidsforlengelse</text>
<text class="dt-s" x="504" y="231">framfor utskifting</text>
</svg>
<figcaption>Veg og tunnel er bygget og kjørt som eksempelbaser. Bro-kolonnen er en illustrasjon
av formen — den er ikke fagverifisert, og må erstattes av fagmiljøets egen liste.</figcaption>
</figure>
<p><strong>Det som avgjør om en tiltakstype i det hele tatt kan vurderes, er om den lar seg
uttrykke som en kostnadslinje</strong> — en mengde ganger en enhetspris. Et tiltak som ikke kan
det, kan systemet foreslå, men ikke kontrollere. Da er svaret verdt akkurat like mye som et
vanlig godt råd.</p>
<div class="note">Derfor er spørsmål 2 — «har vi faktiske tall for kostnadslinjene?» — det som i
praksis avgjør hvilke tiltakstyper som er i spill for et gitt anlegg.</div>
</section>
<section class="slide">
<p class="kicker">Innholdet</p>
<h2>Seks typer tekst, og to sett med tall</h2>
<p><strong>Innholdsfortegnelsen</strong> er inngangen. Teksten i den er det aller første systemet
leser, ordrett, og lenkene bestemmer hva som ellers blir lest. Uten den kan kjøringen ikke starte.</p>
<p><strong>Anleggsbeskrivelsen</strong> forteller hva anlegget er, hvilke tall det består av, og
hvilket gulv ingen besparelse kan gå under.</p>
<p><strong>Tiltaksnotatene</strong> beskriver kandidatene med parametere: modellert besparelse,
hva som er usikkert, hva som er utledet. Det er disse forslagene systemet forbedrer, i stedet for
å finne opp sine egne fra bunnen.</p>
<p><strong>Metodenotatet</strong> forklarer hvordan effekten skal måles, og hvilke metoder som er
stengt for akkurat dette anlegget.</p>
<p><strong>Kildenotatet</strong> er verifisert litteratur med årstall og opphav, der eget
materiale er tydelig skilt fra lånt.</p>
<p><strong>Tidligere dommer</strong> er erfaringslaget: en beslutning, en begrunnelse, og hvor
stor andel av den modellerte besparelsen som faktisk pleier å bli realisert.</p>
</section>
<section class="slide">
<p class="kicker">Innholdet</p>
<h2>De to tallfilene</h2>
<p>Ved siden av teksten ligger to sett med tall, og de har helt ulike jobber.</p>
<figure>
<svg viewBox="0 0 720 190" role="img" aria-label="Den regnede kandidaten er forslaget, kostnadsgrunnlaget er fasiten det avstemmes mot">
<rect class="d" x="8" y="30" width="300" height="110" rx="4"/>
<text class="dt" x="158" y="58" text-anchor="middle" font-weight="700">Den regnede kandidaten</text>
<text class="dt-s" x="158" y="80" text-anchor="middle">hvilke kostnadslinjer tiltaket virker på</text>
<text class="dt-s" x="158" y="98" text-anchor="middle">hvor mye det skal spare</text>
<text class="dt-s" x="158" y="116" text-anchor="middle">hvor stort usikkerhetsbåndet er</text>
<text class="dt-s" x="158" y="158" text-anchor="middle" font-weight="700">mangler den: kjøringen nektes</text>
<rect class="d" x="412" y="30" width="300" height="110" rx="4"/>
<text class="dt" x="562" y="58" text-anchor="middle" font-weight="700">Kostnadsgrunnlaget</text>
<text class="dt-s" x="562" y="80" text-anchor="middle">prosjektets faktiske kostnadslinjer</text>
<text class="dt-s" x="562" y="98" text-anchor="middle">mengde og enhetspris per linje</text>
<text class="dt-s" x="562" y="116" text-anchor="middle">fasiten forslaget avstemmes mot</text>
<text class="dt-s" x="562" y="158" text-anchor="middle" font-weight="700">mangler det: kjøringen går likevel</text>
<path class="d" d="M308 85 h94"/><path class="fill" d="M412 85 l-11 -5 v10 z"/>
<text class="dt-s" x="360" y="76" text-anchor="middle">avstemmes</text>
<text class="dt-s" x="360" y="106" text-anchor="middle">mot</text>
</svg>
</figure>
<div class="note">Prosjektnavnet må være identisk på kommandolinjen og i begge tallsettene.
Er det ikke det, nektes kjøringen — bevisst, fordi et forslag som blandes mellom to prosjekter er
verre enn ingen kjøring.</div>
</section>
<section class="slide">
<p class="kicker">Den skarpeste mangelen</p>
<h2>Uten kostnadsgrunnlag dømmer kontrollen bare mot forslagets egne tall</h2>
<figure>
<svg viewBox="0 0 720 250" role="img" aria-label="Med kostnadsgrunnlag avvises et oppdiktet forslag i steg 0; uten det passerer det hele veien">
<text class="dt" x="8" y="22" font-weight="700">MED kostnadsgrunnlag</text>
<rect class="d" x="8" y="34" width="120" height="46" rx="4"/>
<text class="dt" x="68" y="54" text-anchor="middle">Forslag</text>
<text class="dt-s" x="68" y="70" text-anchor="middle">oppdiktet linje</text>
<path class="d" d="M128 57 h34"/><path class="fill" d="M172 57 l-11 -5 v10 z"/>
<rect class="d" x="172" y="34" width="150" height="46" rx="4" stroke-width="3"/>
<text class="dt" x="247" y="54" text-anchor="middle" font-weight="700">Steg 0</text>
<text class="dt-s" x="247" y="70" text-anchor="middle">avstemming mot ekte tall</text>
<path class="d" d="M322 57 h34"/><path class="fill" d="M366 57 l-11 -5 v10 z"/>
<rect class="d" x="366" y="34" width="130" height="46" rx="4"/>
<text class="dt" x="431" y="61" text-anchor="middle" font-weight="700">AVVIST</text>
<text class="dt-s" x="516" y="61">stanser før noe annet regnes</text>
<path class="d dim" d="M8 108 h704" stroke-dasharray="4 4"/>
<text class="dt" x="8" y="140" font-weight="700">UTEN kostnadsgrunnlag</text>
<rect class="d" x="8" y="152" width="120" height="46" rx="4"/>
<text class="dt" x="68" y="172" text-anchor="middle">Forslag</text>
<text class="dt-s" x="68" y="188" text-anchor="middle">oppdiktet linje</text>
<path class="d" d="M128 175 h34"/><path class="fill" d="M172 175 l-11 -5 v10 z"/>
<rect class="d dim" x="172" y="152" width="150" height="46" rx="4" stroke-dasharray="6 5"/>
<text class="dimt" x="247" y="172" text-anchor="middle">Steg 0</text>
<text class="dimt" x="247" y="188" text-anchor="middle">hoppes over</text>
<path class="d" d="M322 175 h34"/><path class="fill" d="M366 175 l-11 -5 v10 z"/>
<rect class="d" x="366" y="152" width="130" height="46" rx="4"/>
<text class="dt" x="431" y="172" text-anchor="middle">Øvrige kontroller</text>
<text class="dt-s" x="431" y="188" text-anchor="middle">forslagets egne tall</text>
<path class="d" d="M496 175 h34"/><path class="fill" d="M540 175 l-11 -5 v10 z"/>
<rect class="d" x="540" y="152" width="172" height="46" rx="4" stroke-width="3"/>
<text class="dt" x="626" y="179" text-anchor="middle" font-weight="700">GODKJENT</text>
<text class="dimt" x="626" y="222" text-anchor="middle">og kjøringen ser helt normal ut</text>
</svg>
</figure>
<p>Med kostnadsgrunnlaget på plass avvises to ting: en kostnadskode prosjektet ikke har, og en
ekte kode der mengden eller prisen ligger mer enn fem prosent unna det virkelige tallet.</p>
<p>Uten det steget resonnerer hele kontrollen bare om tall forslaget selv oppga. Et forslag som
er internt konsistent, men bygget på oppdiktede kostnadslinjer, passerer da hele veien.</p>
<div class="note"><strong>Anbefaling:</strong> skaff tallene. Kan de ikke skaffes, skriv inn i
bestillingen at kjøringen er uforankret — så ingen leser et godkjent-resultat som mer enn det er.</div>
</section>
<section class="slide">
<p class="kicker">Eksempelet</p>
<h2>Hvorfor veglys er et godt eksempel</h2>
<figure>
<svg viewBox="0 0 720 175" role="img" aria-label="I et kontorbygg kan avviket måles; i veglys uten måler er det strukturelt usynlig">
<text class="dt" x="8" y="22" font-weight="700">Kontorbygg</text>
<rect class="d" x="8" y="34" width="140" height="42" rx="4"/>
<text class="dt" x="78" y="60" text-anchor="middle">Forhåndsberegnet</text>
<path class="d" d="M148 55 h30"/><path class="fill" d="M188 55 l-11 -5 v10 z"/>
<rect class="d" x="188" y="34" width="140" height="42" rx="4"/>
<text class="dt" x="258" y="60" text-anchor="middle">Målt i etterkant</text>
<path class="d" d="M328 55 h30"/><path class="fill" d="M368 55 l-11 -5 v10 z"/>
<text class="dt" x="380" y="60">avviket kan ses — hvis noen ser etter</text>
<text class="dt" x="8" y="122" font-weight="700">Veglys uten måler</text>
<rect class="d" x="8" y="134" width="140" height="42" rx="4"/>
<text class="dt" x="78" y="160" text-anchor="middle">Forhåndsberegnet</text>
<path class="d dim" d="M148 155 h30" stroke-dasharray="5 4"/>
<rect class="d dim" x="188" y="134" width="140" height="42" rx="4" stroke-dasharray="6 5"/>
<text class="dimt" x="258" y="160" text-anchor="middle">ingen måling</text>
<path class="d" d="M245 140 l26 30 M271 140 l-26 30" stroke-width="2.5"/>
<text class="dt" x="380" y="160">avviket er strukturelt usynlig</text>
</svg>
</figure>
<p>I et kontorbygg er avviket mellom modellert og realisert besparelse målbart, men sjelden målt.
I norsk veglys er det strengere: mange anlegg mangler måling helt, eller avregnes på estimerte
verdier. Uten måledata finnes det ingen etterprøving å sammenligne forhåndsberegningen med.</p>
<p>Realiseringsgraden er altså ikke ukjent fordi ingen har regnet på den — den er strukturelt
usynlig. Det gjør domenet til et godt utgangspunkt for læringssløyfa: den eneste kilden til
korreksjon er akkumulert ekspertvurdering, og det er nøyaktig det erfaringslaget bærer.</p>
</section>
<section class="slide">
<p class="kicker">Eksempelet</p>
<h2>Spørsmålene, besvart for veglysporteføljen</h2>
<p><strong>Anlegget:</strong> en fylkeskommunal veglysportefølje på 9 500 lyspunkter langs
fylkesveg.</p>
<p><strong>Kostnadslinjen:</strong> én eneste — porteføljens årlige energikostnad. Den er regnet
som 9 500 punkter à 114 watt, i 4 050 brenntimer i året, altså 4 386 150 kilowattimer, til én
krone per kilowattime.</p>
<p><strong>Investeringskostnaden er bevisst utelatt</strong>, fordi ingen kilde i materialet gir
en pris per lyspunkt. En utledet verdi hører ikke hjemme i et kostnadsgrunnlag.</p>
<p><strong>Tiltaket som regnes på:</strong> LED-utskifting av de 2 500 eldste punktene, fra 114
til 70 watt. Det gir en modellert besparelse på 445 500 kroner i året.</p>
<p><strong>Rammene:</strong> lystekniske minstekrav som ikke kan fravikes, og at nattslukking
ikke kan forutsettes.</p>
</section>
<section class="slide">
<p class="kicker">Eksempelet</p>
<h2>De to tallsettene er skrevet fra samme regnestykke</h2>
<figure>
<svg viewBox="0 0 720 200" role="img" aria-label="Ett regnestykke skriver begge tallsettene, så toleransen er lukket ved konstruksjon">
<rect class="d" x="150" y="14" width="420" height="52" rx="4" stroke-width="3"/>
<text class="dt" x="360" y="36" text-anchor="middle" font-weight="700">Ett regnestykke</text>
<text class="dt-s" x="360" y="55" text-anchor="middle">9 500 punkter · 114 W · 4 050 timer = 4 386 150 kWh à 1 krone</text>
<path class="d" d="M280 66 C 280 96, 190 96, 190 118"/><path class="fill" d="M190 128 l-5 -11 h10 z"/>
<path class="d" d="M440 66 C 440 96, 530 96, 530 118"/><path class="fill" d="M530 128 l-5 -11 h10 z"/>
<rect class="d" x="60" y="128" width="260" height="56" rx="4"/>
<text class="dt" x="190" y="152" text-anchor="middle">Kostnadsgrunnlaget</text>
<text class="dt-s" x="190" y="171" text-anchor="middle">mengde og enhetspris</text>
<rect class="d" x="400" y="128" width="260" height="56" rx="4"/>
<text class="dt" x="530" y="152" text-anchor="middle">Den regnede kandidaten</text>
<text class="dt-s" x="530" y="171" text-anchor="middle">samme linje · besparelse 445 500</text>
</svg>
<figcaption>Ikke avstemt i etterkant — skrevet ut fra ett og samme regnestykke.</figcaption>
</figure>
<p>Femprosent-toleransen er altså lukket ved konstruksjon. Det er den disiplinen som gjør at et
avvik senere faktisk betyr noe — hadde tallene vært skrevet inn hver for seg, ville et lite avvik
bare vært slurv, ikke et signal.</p>
<div class="note">Ett valg er verdt å merke seg: besparelsen måles mot <em>hele</em> porteføljens
energikostnad, ikke mot forbruket til de 2 500 punktene alene. Målt mot bare de berørte punktene
ville det riktige forslaget blitt avvist som urealistisk stort.</div>
</section>
<section class="slide">
<p class="kicker">Eksempelet</p>
<h2>Erfaringen: godkjent, med korreksjon</h2>
<figure>
<svg viewBox="0 0 720 175" role="img" aria-label="Modellert 445 500 kroner korrigeres til 81 prosent, altså 360 855 kroner">
<text class="dt" x="8" y="40">Modellert</text>
<rect class="d" x="130" y="22" width="520" height="34"/>
<text class="dt" x="390" y="45" text-anchor="middle" font-weight="700">445 500 kr/år</text>
<text class="dt" x="8" y="110">Forventet faktisk</text>
<rect class="hatch" x="130" y="92" width="421" height="34"/>
<text class="dt" x="340" y="115" text-anchor="middle" font-weight="700">360 855 kr/år</text>
<rect class="d dim" x="551" y="92" width="99" height="34" stroke-dasharray="5 4"/>
<text class="dimt" x="600" y="114" text-anchor="middle">avvik</text>
<path class="d dim" d="M130 140 h421"/>
<text class="dt-s" x="340" y="160" text-anchor="middle">81 % av modellert</text>
</svg>
</figure>
<p>Regnestykket er teknisk riktig ut fra parameterne, men brenntimene er et nasjonalt
tabellanslag — ikke en målt kurve for dette anlegget. Og siden anlegget mangler måler, kan
avviket aldri oppdages i drift.</p>
<div class="note"><strong>Ærlig om grunnlaget:</strong> de 81 prosentene er lånt fra amerikansk
programlitteratur, ikke fra norsk måling — og det står uttrykkelig i dommen. Det finnes ingen
norsk etterprøving for veglys. I drift erstattes en slik startdom av ekte menneskelige
vurderinger.</div>
</section>
<section class="slide">
<p class="kicker">Eksterne systemer</p>
<h2>Hvilke fagsystemer må gjøres tilgjengelige — og når?</h2>
<p>Spørsmålet har to helt ulike svar, avhengig av <em>når</em> systemet skal spørres. Blandes de,
bygges feil integrasjon.</p>
<figure>
<svg viewBox="0 0 720 235" role="img" aria-label="To sømmer: kilder hentes før kjøringen og blir innhold; tjenester spørres under kjøringen og blir verktøy">
<rect class="d" x="8" y="14" width="340" height="180" rx="4"/>
<text class="dt" x="178" y="42" text-anchor="middle" font-weight="700">FØR kjøringen</text>
<text class="dt-s" x="178" y="62" text-anchor="middle">henting av kildedokumenter</text>
<rect class="d" x="40" y="80" width="120" height="40" rx="4"/>
<text class="dt-s" x="100" y="105" text-anchor="middle">Fagsystem</text>
<path class="d" d="M160 100 h36"/><path class="fill" d="M206 100 l-11 -5 v10 z"/>
<rect class="d" x="206" y="80" width="110" height="40" rx="4"/>
<text class="dt-s" x="261" y="105" text-anchor="middle">Basen</text>
<text class="dt-s" x="178" y="146" text-anchor="middle">blir <tspan font-weight="700">innhold</tspan> med opphavsmerking</text>
<text class="dt-s" x="178" y="166" text-anchor="middle">kan leses og korrigeres før kjøring</text>
<text class="dt-s" x="178" y="186" text-anchor="middle">null nettverk under selve kjøringen</text>
<rect class="d" x="372" y="14" width="340" height="180" rx="4"/>
<text class="dt" x="542" y="42" text-anchor="middle" font-weight="700">UNDER kjøringen</text>
<text class="dt-s" x="542" y="62" text-anchor="middle">oppslag mens forslaget formes</text>
<rect class="d" x="404" y="80" width="120" height="40" rx="4"/>
<text class="dt-s" x="464" y="105" text-anchor="middle">Agent</text>
<path class="d" d="M524 100 h36"/><path class="fill" d="M570 100 l-11 -5 v10 z"/>
<rect class="d" x="570" y="80" width="110" height="40" rx="4"/>
<text class="dt-s" x="625" y="105" text-anchor="middle">Tjeneste</text>
<text class="dt-s" x="542" y="146" text-anchor="middle">blir <tspan font-weight="700">verktøy</tspan> agenten kan kalle</text>
<text class="dt-s" x="542" y="166" text-anchor="middle">krever uttrykkelig liste over tillatte kall</text>
<text class="dt-s" x="542" y="186" text-anchor="middle">alt som kan kontaktes navngis på forhånd</text>
<text class="dimt" x="360" y="222" text-anchor="middle">to ulike integrasjoner — velg etter når svaret trengs</text>
</svg>
</figure>
<p><strong>Trengs svaret bare én gang, og er det ferskt nok?</strong> Hent det på forhånd. Da blir
det et dokument i basen, med opphav og dato, som fagpersonen kan lese og korrigere før kjøringen
starter. Selve kjøringen gjør da ingen nettverkskall i det hele tatt.</p>
<p><strong>Må agenten kunne slå opp underveis</strong> — for eksempel en pris eller en
anleggsstatus den ikke kan vite på forhånd — da må systemet gjøres tilgjengelig som et verktøy
under kjøringen. Det koster mer, og krever tre ting: en uttrykkelig liste over hvilke kall som er
tillatt, at alt som kan kontaktes navngis før første kall, og at tørrkjøringen ikke åpner noe som
helst.</p>
<div class="note"><strong>Utgangspunktet er ingen integrasjon.</strong> Uten konfigurasjon gjøres
null nettverkskall. Det er ikke en begrensning man jobber seg rundt — det er det som gjør at man
kan si nøyaktig hva en kjøring har rørt.</div>
</section>
<section class="slide">
<p class="kicker">Kjøreklar</p>
<h2>Sjekken før man kjører</h2>
<p>Det finnes ingen egen «valider basen»-knapp. Det nærmeste er en tørrkjøring: systemet går hele
veien fram til det første kallet mot språkmodellen, og stopper der.</p>
<figure>
<svg viewBox="0 0 720 130" role="img" aria-label="Tørrkjøringen stopper rett før det første betalte kallet">
<rect class="d" x="8" y="34" width="130" height="46" rx="4"/>
<text class="dt" x="73" y="61" text-anchor="middle">Base åpnes</text>
<path class="d" d="M138 57 h24"/><path class="fill" d="M170 57 l-11 -5 v10 z"/>
<rect class="d" x="170" y="34" width="150" height="46" rx="4"/>
<text class="dt" x="245" y="54" text-anchor="middle">Alt kontrolleres</text>
<text class="dt-s" x="245" y="70" text-anchor="middle">navn, tak, tilgang</text>
<path class="d" d="M320 57 h24"/><path class="fill" d="M352 57 l-11 -5 v10 z"/>
<path class="d" d="M392 14 v100" stroke-width="3" stroke-dasharray="8 6"/>
<text class="dt" x="392" y="128" text-anchor="middle" font-weight="700">stopp</text>
<rect class="d dim" x="430" y="34" width="150" height="46" rx="4" stroke-dasharray="6 5"/>
<text class="dimt" x="505" y="61" text-anchor="middle">Første modellkall</text>
<rect class="d dim" x="592" y="34" width="120" height="46" rx="4" stroke-dasharray="6 5"/>
<text class="dimt" x="652" y="61" text-anchor="middle">Resten</text>
<text class="dt-s" x="571" y="18" text-anchor="middle">skjer ikke — koster ingenting</text>
</svg>
</figure>
<p><span class="ok">Det beviser at</span> basen åpner, at den regnede kandidaten finnes og bærer
riktig prosjektnavn, at bestillingen er gyldig, at modellene er oppløst, at takene er satt, og at
ingen ekstern tjeneste vil bli kontaktet.</p>
<p><span class="no">Det beviser ikke at</span> lenkene når alle dokumentene — en brutt lenke
hoppes stille over — og heller ikke at innholdet er godt.</p>
<p>Tørrkjøringen er billig nok til å kjøres hver gang basen endres.</p>
</section>
<section class="slide">
<p class="kicker">Sløyfa</p>
<h2>Etter kjøringen blir basen én versjon klokere</h2>
<figure>
<svg viewBox="0 0 720 240" role="img" aria-label="Kjøring gir artefakt, fagperson gir dom i innboks, neste kjøring leser den, godkjente dommer løftes inn i basen">
<rect class="d" x="30" y="30" width="150" height="50" rx="4"/>
<text class="dt" x="105" y="60" text-anchor="middle">Kjøring</text>
<path class="d" d="M180 55 h64"/><path class="fill" d="M254 55 l-11 -5 v10 z"/>
<rect class="d" x="254" y="30" width="180" height="50" rx="4"/>
<text class="dt" x="344" y="52" text-anchor="middle">Artefakt</text>
<text class="dt-s" x="344" y="70" text-anchor="middle">forslag, tall, kontrollens dom</text>
<path class="d" d="M434 55 h64"/><path class="fill" d="M508 55 l-11 -5 v10 z"/>
<rect class="d" x="508" y="30" width="182" height="50" rx="4" stroke-width="3"/>
<text class="dt" x="599" y="52" text-anchor="middle" font-weight="700">Fagperson</text>
<text class="dt-s" x="599" y="70" text-anchor="middle">skriver dommen</text>
<path class="d" d="M599 80 v40 H344"/><path class="fill" d="M344 120 l11 -5 v10 z"/>
<rect class="d" x="254" y="120" width="180" height="50" rx="4"/>
<text class="dt" x="344" y="150" text-anchor="middle">Innboks</text>
<path class="d" d="M254 145 H105 v-58"/><path class="fill" d="M105 80 l-5 11 h10 z"/>
<text class="dt-s" x="120" y="112">leses før neste hypotese</text>
<path class="d" d="M344 170 v34 h300" stroke-dasharray="6 5"/><path class="fill" d="M654 204 l-11 -5 v10 z"/>
<rect class="d" x="504" y="182" width="190" height="46" rx="4" stroke-dasharray="6 5" fill="none"/>
<text class="dt" x="599" y="200" text-anchor="middle">Løftes inn i basen</text>
<text class="dt-s" x="599" y="218" text-anchor="middle">hvis godkjent for varig bruk</text>
</svg>
</figure>
<p>Neste kjøring leser innboksen <em>før</em> den former sin hypotese. Dommen påvirker altså det
neste forslaget, ikke bare arkivet.</p>
<div class="note"><strong>Rollefordelingen er ufravikelig:</strong> systemet leser innboksen,
mennesket skriver den. En kjøring lagrer aldri sin egen vurdering tilbake som kunnskap. Uten den
regelen ville systemet lært av seg selv.</div>
</section>
<section class="slide">
<p class="kicker">Forventningen</p>
<h2>Hva dette koster, og hva det ikke lover</h2>
<figure>
<svg viewBox="0 0 720 110" role="img" aria-label="Fire faser: inventar, skjelett, første erfaringsfrø, iterasjon — én til to uker">
<rect class="d" x="8" y="30" width="164" height="46" rx="4"/>
<text class="dt" x="90" y="58" text-anchor="middle">Inventar</text>
<path class="d" d="M172 53 h16"/><path class="fill" d="M196 53 l-11 -5 v10 z"/>
<rect class="d" x="196" y="30" width="164" height="46" rx="4"/>
<text class="dt" x="278" y="58" text-anchor="middle">Skjelett</text>
<path class="d" d="M360 53 h16"/><path class="fill" d="M384 53 l-11 -5 v10 z"/>
<rect class="d" x="384" y="30" width="164" height="46" rx="4"/>
<text class="dt" x="466" y="58" text-anchor="middle">Første erfaringsfrø</text>
<path class="d" d="M548 53 h16"/><path class="fill" d="M572 53 l-11 -5 v10 z"/>
<rect class="d" x="572" y="30" width="140" height="46" rx="4"/>
<text class="dt" x="642" y="58" text-anchor="middle">Iterasjon</text>
<text class="dt-s" x="360" y="100" text-anchor="middle">samlet: én til to uker</text>
</svg>
</figure>
<ul>
<li>Det tunge er ikke teknikken. Det er å <strong>få tak i de faktiske kostnadstallene</strong>
og å få en fagperson til å skrive ned rammene sine.</li>
<li>Mangler kostnadsgrunnlaget, er kontrollen uforankret — og det er ikke synlig i resultatet
med mindre man ser etter.</li>
<li>En startdom hentet fra litteratur er et <strong>utgangspunkt, ikke en sannhet</strong>. Den
skal erstattes av egne vurderinger.</li>
<li>Sløyfa beviser at kunnskapen flyter riktig vei. Den beviser ikke at forslagene er kloke —
det avgjør fagpersonen.</li>
</ul>
</section>
<nav>
<button id="prev">← Forrige</button>
<button id="next">Neste →</button>
<span id="pos"></span>
</nav>
<script>
const slides = document.querySelectorAll('.slide');
let i = 0;
function show(n) {
i = Math.max(0, Math.min(slides.length - 1, n));
slides.forEach((s, k) => s.classList.toggle('on', k === i));
document.getElementById('pos').textContent = (i + 1) + ' / ' + slides.length;
window.scrollTo(0, 0);
}
document.getElementById('prev').onclick = () => show(i - 1);
document.getElementById('next').onclick = () => show(i + 1);
document.addEventListener('keydown', e => {
if (e.key === 'ArrowRight' || e.key === 'PageDown' || e.key === ' ') show(i + 1);
if (e.key === 'ArrowLeft' || e.key === 'PageUp') show(i - 1);
});
show(0);
</script>
</html>