test(okr): generiske, fiktive fixturer og testdata
okf-realistic har samme struktur og samme tall som før. Organisasjonen er Fjordvik kommune (fiktiv), og OKR-fila heter okr-vannforsyning.md, så den alfabetiske rekkefølgen mot okr-digitalisering.md holder. KR2 går fra 12 til 20 med nå-verdi 17, og scoren er fortsatt 0.625. Retrieval-testene bruker fortsatt «nullvisjon», og disambigueringen bruker et felles token i tittel og status-kropp, så de tester det samme på nytt innhold. docx-fixturen er bygget på nytt med bare document.xml endret. Øvrige testdata (KR-navn, sektorverdi, eksempeltekst) er nøytrale. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
d71de15d48
commit
6712f855ed
17 changed files with 61 additions and 61 deletions
|
|
@ -103,7 +103,7 @@ test('at-risk telles per status-RAD (tabell), ikke raaforekomster i prosa (B2/M1
|
||||||
'',
|
'',
|
||||||
'| KR | Baseline | Maal | Naa | Score | Status |',
|
'| KR | Baseline | Maal | Naa | Score | Status |',
|
||||||
'|----|----------|------|-----|-------|--------|',
|
'|----|----------|------|-----|-------|--------|',
|
||||||
'| KR1: Redusere ulykker | 40 | 30 | 35 | 0.50 | I fare |',
|
'| KR1: Redusere lekkasjer | 40 | 30 | 35 | 0.50 | I fare |',
|
||||||
'| KR2: Oppetid | 10 | 25 | 22 | 0.80 | Paa sporet |',
|
'| KR2: Oppetid | 10 | 25 | 22 | 0.80 | Paa sporet |',
|
||||||
'| KR3: Tilfredshet | 60% | 90% | 65% | 0.17 | Blokkert |',
|
'| KR3: Tilfredshet | 60% | 90% | 65% | 0.17 | Blokkert |',
|
||||||
'',
|
'',
|
||||||
|
|
@ -134,8 +134,8 @@ test('at-risk telles paa kanonisk 1.8.0-vokabular (At Risk + Off Track, ikke On
|
||||||
'',
|
'',
|
||||||
'| KR | Baseline | Target | Naa | Score | Status |',
|
'| KR | Baseline | Target | Naa | Score | Status |',
|
||||||
'|----|----------|--------|-----|-------|--------|',
|
'|----|----------|--------|-----|-------|--------|',
|
||||||
`| KR1: Redusere ulykker | 40 | 30 | 35 | 0.50 | At Risk ${GUL} |`,
|
`| KR1: Redusere lekkasjer | 40 | 30 | 35 | 0.50 | At Risk ${GUL} |`,
|
||||||
`| KR2: Fartshumper installert | 0% | 100% | 60% | 0.60 | On Track ${GROENN} |`,
|
`| KR2: Hoeydebasseng sikret | 0% | 100% | 60% | 0.60 | On Track ${GROENN} |`,
|
||||||
`| KR3: Foreldre-tilfredshet | 60% | 90% | 65% | 0.17 | Off Track ${ROED} |`,
|
`| KR3: Foreldre-tilfredshet | 60% | 90% | 65% | 0.17 | Off Track ${ROED} |`,
|
||||||
'',
|
'',
|
||||||
].join('\n'));
|
].join('\n'));
|
||||||
|
|
@ -181,12 +181,12 @@ const GENERERT_HODE = [
|
||||||
function generertStatus({ committed = [], aspirational = [] }) {
|
function generertStatus({ committed = [], aspirational = [] }) {
|
||||||
const ut = ['# Statusrapport T2-2026', ''];
|
const ut = ['# Statusrapport T2-2026', ''];
|
||||||
if (committed.length > 0) {
|
if (committed.length > 0) {
|
||||||
ut.push('## Committed Key Results', '', '### Trafikksikkerhet', '', ...GENERERT_HODE.slice(2), ...committed, '');
|
ut.push('## Committed Key Results', '', '### Forsyningssikkerhet', '', ...GENERERT_HODE.slice(2), ...committed, '');
|
||||||
}
|
}
|
||||||
ut.push(
|
ut.push(
|
||||||
'## Avvik som skal forklares',
|
'## Avvik som skal forklares',
|
||||||
'',
|
'',
|
||||||
'- Trafikksikkerhet: KR1 -- naa 17 mot krav 20 (score 0.63)',
|
'- Forsyningssikkerhet: KR1 -- naa 17 mot krav 20 (score 0.63)',
|
||||||
'',
|
'',
|
||||||
);
|
);
|
||||||
if (aspirational.length > 0) {
|
if (aspirational.length > 0) {
|
||||||
|
|
@ -261,7 +261,7 @@ test('fallback: rader uten seksjonsoverskrift telles som committed, ikke bortfil
|
||||||
'# Status T2-2026',
|
'# Status T2-2026',
|
||||||
'',
|
'',
|
||||||
...GENERERT_HODE.slice(2),
|
...GENERERT_HODE.slice(2),
|
||||||
'| KR1: Redusere ulykker | 40 | 30 | 35 | 0.50 | Ja | At Risk |',
|
'| KR1: Redusere lekkasjer | 40 | 30 | 35 | 0.50 | Ja | At Risk |',
|
||||||
'| KR2: Oppetid | 10 | 25 | 22 | 0.80 | Nei | On Track |',
|
'| KR2: Oppetid | 10 | 25 | 22 | 0.80 | Nei | On Track |',
|
||||||
'| KR3: Tilfredshet | 60 | 90 | 65 | 0.17 | Ja | At Risk |',
|
'| KR3: Tilfredshet | 60 | 90 | 65 | 0.17 | Ja | At Risk |',
|
||||||
'',
|
'',
|
||||||
|
|
|
||||||
BIN
tests/fixtures/inbox-sample/dok.docx
vendored
BIN
tests/fixtures/inbox-sample/dok.docx
vendored
Binary file not shown.
2
tests/fixtures/okf-realistic/index.md
vendored
2
tests/fixtures/okf-realistic/index.md
vendored
|
|
@ -1,4 +1,4 @@
|
||||||
# OKF second brain - Vegdirektoratet (realistisk testfixtur)
|
# OKF second brain - Fjordvik kommune (realistisk testfixtur)
|
||||||
|
|
||||||
okf_version: 0.1
|
okf_version: 0.1
|
||||||
okf_layout: kb-layout-2026-06
|
okf_layout: kb-layout-2026-06
|
||||||
|
|
|
||||||
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
* [Tildelingsbrev 2026](tildelingsbrev-2026.md) - Klimaomstilling og sikkerhet.
|
* [Tildelingsbrev 2026](tildelingsbrev-2026.md) - Klimaomstilling og sikkerhet.
|
||||||
* [Virksomhetsplan 2026](virksomhetsplan.md) - Kompetanseloeft og effektivisering.
|
* [Virksomhetsplan 2026](virksomhetsplan.md) - Kompetanseloeft og effektivisering.
|
||||||
* [Organisasjonsprofil](organisasjonsprofil.md) - Vegdirektoratet, offentlig sektor.
|
* [Organisasjonsprofil](organisasjonsprofil.md) - Fjordvik kommune, offentlig sektor.
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,4 @@ timestamp: '2026-01-05T08:00:00+00:00'
|
||||||
---
|
---
|
||||||
# Organisasjonsprofil
|
# Organisasjonsprofil
|
||||||
|
|
||||||
Organisasjonen er Vegdirektoratet, en etat i offentlig sektor.
|
Organisasjonen er Fjordvik kommune, en fiktiv kommune i offentlig sektor.
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,4 @@ timestamp: '2026-01-15T09:00:00+00:00'
|
||||||
---
|
---
|
||||||
# Tildelingsbrev 2026
|
# Tildelingsbrev 2026
|
||||||
|
|
||||||
Hovedprioriteten for 2026 er klimaomstilling i transportsektoren.
|
Hovedprioriteten for 2026 er klimaomstilling i vann- og avloepstjenestene.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
# Syklus T1-2026
|
# Syklus T1-2026
|
||||||
|
|
||||||
* [Trafikksikkerhet og tunnelsikkerhet](okr-trafikksikkerhet.md) - Maal om nullvisjon i tunneler.
|
* [Forsyningssikkerhet for drikkevann](okr-vannforsyning.md) - Maal om nullvisjon for driftsavbrudd.
|
||||||
* [Digitalisering av tjenester](okr-digitalisering.md) - Oekt selvbetjeningsgrad.
|
* [Digitalisering av tjenester](okr-digitalisering.md) - Oekt selvbetjeningsgrad.
|
||||||
* [Statusrapport T1](status.md) - Fremdriftsindikator for tertialet.
|
* [Statusrapport T1](status.md) - Fremdriftsindikator for tertialet.
|
||||||
|
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
---
|
|
||||||
type: OKR
|
|
||||||
resource: local
|
|
||||||
title: Trafikksikkerhet og tunnelsikkerhet
|
|
||||||
description: Tertialmaal for sikrere veier og tunneler.
|
|
||||||
tags:
|
|
||||||
- sikkerhet
|
|
||||||
- tunnel
|
|
||||||
timestamp: '2026-02-01T09:00:00+00:00'
|
|
||||||
kr1_navn: Alvorlige tunnelhendelser (antall)
|
|
||||||
kr1_baseline: 0
|
|
||||||
kr1_target: 0
|
|
||||||
kr1_naa: 0
|
|
||||||
kr1_type: committed
|
|
||||||
kr2_navn: Tunneler med oppgradert sikkerhetsutrustning (antall)
|
|
||||||
kr2_baseline: 12
|
|
||||||
kr2_target: 20
|
|
||||||
kr2_naa: 17
|
|
||||||
kr2_type: committed
|
|
||||||
---
|
|
||||||
# Trafikksikkerhet og tunnelsikkerhet
|
|
||||||
|
|
||||||
Objective: Styrke tunnelsikkerhet i tertialet.
|
|
||||||
KR1: Naa nullvisjon for alvorlige tunnelhendelser.
|
|
||||||
- Maalemetode: Registrerte alvorlige hendelser i hendelsesdatabasen.
|
|
||||||
- Datakilde: Vegtrafikksentralen.
|
|
||||||
- Type: Committed
|
|
||||||
KR2: Oeke antall tunneler med oppgradert sikkerhetsutrustning fra 12 til 20.
|
|
||||||
- Maalemetode: Telling av ferdigattesterte tunneler.
|
|
||||||
- Datakilde: Prosjektportefoeljen.
|
|
||||||
- Type: Committed
|
|
||||||
31
tests/fixtures/okf-realistic/syklus/T1-2026/okr-vannforsyning.md
vendored
Normal file
31
tests/fixtures/okf-realistic/syklus/T1-2026/okr-vannforsyning.md
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
type: OKR
|
||||||
|
resource: local
|
||||||
|
title: Forsyningssikkerhet for drikkevann
|
||||||
|
description: Tertialmaal for sikrere vannforsyning og hoeydebasseng.
|
||||||
|
tags:
|
||||||
|
- sikkerhet
|
||||||
|
- vann
|
||||||
|
timestamp: '2026-02-01T09:00:00+00:00'
|
||||||
|
kr1_navn: Alvorlige driftsavbrudd i vannforsyningen (antall)
|
||||||
|
kr1_baseline: 0
|
||||||
|
kr1_target: 0
|
||||||
|
kr1_naa: 0
|
||||||
|
kr1_type: committed
|
||||||
|
kr2_navn: Hoeydebasseng med oppgradert sikringsutstyr (antall)
|
||||||
|
kr2_baseline: 12
|
||||||
|
kr2_target: 20
|
||||||
|
kr2_naa: 17
|
||||||
|
kr2_type: committed
|
||||||
|
---
|
||||||
|
# Forsyningssikkerhet for drikkevann
|
||||||
|
|
||||||
|
Objective: Styrke forsyningssikkerhet i tertialet.
|
||||||
|
KR1: Naa nullvisjon for alvorlige driftsavbrudd.
|
||||||
|
- Maalemetode: Registrerte alvorlige avbrudd i driftsloggen.
|
||||||
|
- Datakilde: Driftssentralen for vann og avloep.
|
||||||
|
- Type: Committed
|
||||||
|
KR2: Oeke antall hoeydebasseng med oppgradert sikringsutstyr fra 12 til 20.
|
||||||
|
- Maalemetode: Telling av ferdigattesterte hoeydebasseng.
|
||||||
|
- Datakilde: Prosjektportefoeljen.
|
||||||
|
- Type: Committed
|
||||||
|
|
@ -9,4 +9,4 @@ timestamp: '2026-04-30T16:00:00+00:00'
|
||||||
---
|
---
|
||||||
# Statusrapport T1-2026
|
# Statusrapport T1-2026
|
||||||
|
|
||||||
Fremdriftsindikator viser god progresjon. Arbeidet med tunnelsikkerhet ligger noe bak skjema.
|
Fremdriftsindikator viser god progresjon. Arbeidet med forsyningssikkerhet ligger noe bak skjema.
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ function makeFullConfig(workDir, fields = {}) {
|
||||||
navn: 'TestOrg',
|
navn: 'TestOrg',
|
||||||
kortform: 'TO',
|
kortform: 'TO',
|
||||||
gjeldende: 'T2-2026',
|
gjeldende: 'T2-2026',
|
||||||
sektor: 'transport',
|
sektor: 'kommune',
|
||||||
modenhetsnivaa: 'nivaa-2',
|
modenhetsnivaa: 'nivaa-2',
|
||||||
fase: 'utforsker',
|
fase: 'utforsker',
|
||||||
okr_frikoblet_fra_loenn: 'true',
|
okr_frikoblet_fra_loenn: 'true',
|
||||||
|
|
@ -88,7 +88,7 @@ test('full config: alle 9 noekler resolver likt som foer', () => {
|
||||||
const out = runHook(work, home);
|
const out = runHook(work, home);
|
||||||
assert.match(out, /Organisasjon: TestOrg \(TO\)/, 'navn + kortform');
|
assert.match(out, /Organisasjon: TestOrg \(TO\)/, 'navn + kortform');
|
||||||
assert.match(out, /Syklus: T2-2026 \[utforsker\]/, 'gjeldende + fase');
|
assert.match(out, /Syklus: T2-2026 \[utforsker\]/, 'gjeldende + fase');
|
||||||
assert.match(out, /Sektor: transport/, 'sektor');
|
assert.match(out, /Sektor: kommune/, 'sektor');
|
||||||
assert.match(out, /Modenhet: nivaa-2/, 'modenhetsnivaa');
|
assert.match(out, /Modenhet: nivaa-2/, 'modenhetsnivaa');
|
||||||
assert.match(out, /OKR frikoblet fra lonn: true/, 'frikoblet-verdi');
|
assert.match(out, /OKR frikoblet fra lonn: true/, 'frikoblet-verdi');
|
||||||
assert.match(out, /Psykologisk trygghet: hoy/, 'psykologisk_trygghet');
|
assert.match(out, /Psykologisk trygghet: hoy/, 'psykologisk_trygghet');
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ function makeProjectConfig(work, navn = 'CapTestOrg') {
|
||||||
mkdirSync(p, { recursive: true });
|
mkdirSync(p, { recursive: true });
|
||||||
writeFileSync(
|
writeFileSync(
|
||||||
join(p, 'okr.local.md'),
|
join(p, 'okr.local.md'),
|
||||||
`---\nnavn: "${navn}"\ngjeldende: "T1-2026"\nsektor: "transport"\n---\n`,
|
`---\nnavn: "${navn}"\ngjeldende: "T1-2026"\nsektor: "kommune"\n---\n`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ function withBundle(fn) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const TILDELING = '# Tildelingsbrev 2026\n\nStatens vegvesen skal levere paa foelgende maal i 2026.\n';
|
const TILDELING = '# Tildelingsbrev 2026\n\nFjordvik kommune skal levere paa foelgende maal i 2026.\n';
|
||||||
const MERKNAD = '# Generell merknad\n\nEt fritt notat uten foeringsord i tittel.\n';
|
const MERKNAD = '# Generell merknad\n\nEt fritt notat uten foeringsord i tittel.\n';
|
||||||
|
|
||||||
test('writeConcepts: type->nivaa-ruting (strategisk-kontekst + dokumenter)', () => {
|
test('writeConcepts: type->nivaa-ruting (strategisk-kontekst + dokumenter)', () => {
|
||||||
|
|
|
||||||
|
|
@ -89,9 +89,9 @@ test('brukerverdi: token-tabell resolver hver til forventet konsept (okf-realist
|
||||||
const table = [
|
const table = [
|
||||||
{ token: 'klimaomstilling', expect: 'strategisk-kontekst/tildelingsbrev-2026.md' },
|
{ token: 'klimaomstilling', expect: 'strategisk-kontekst/tildelingsbrev-2026.md' },
|
||||||
{ token: 'kompetanseloeft', expect: 'strategisk-kontekst/virksomhetsplan.md' },
|
{ token: 'kompetanseloeft', expect: 'strategisk-kontekst/virksomhetsplan.md' },
|
||||||
{ token: 'Vegdirektoratet', expect: 'strategisk-kontekst/organisasjonsprofil.md' },
|
{ token: 'Fjordvik', expect: 'strategisk-kontekst/organisasjonsprofil.md' },
|
||||||
{ token: 'selvbetjeningsgrad', expect: 'syklus/T1-2026/okr-digitalisering.md' },
|
{ token: 'selvbetjeningsgrad', expect: 'syklus/T1-2026/okr-digitalisering.md' },
|
||||||
{ token: 'nullvisjon', expect: 'syklus/T1-2026/okr-trafikksikkerhet.md' },
|
{ token: 'nullvisjon', expect: 'syklus/T1-2026/okr-vannforsyning.md' },
|
||||||
{ token: 'fremdriftsindikator', expect: 'syklus/T1-2026/status.md' },
|
{ token: 'fremdriftsindikator', expect: 'syklus/T1-2026/status.md' },
|
||||||
{ token: 'laeringssloeyfe', expect: 'historikk/retrospektiv-T3-2025.md' },
|
{ token: 'laeringssloeyfe', expect: 'historikk/retrospektiv-T3-2025.md' },
|
||||||
{ token: 'arbeidsnotat', expect: 'dokumenter/notat.md' },
|
{ token: 'arbeidsnotat', expect: 'dokumenter/notat.md' },
|
||||||
|
|
@ -106,9 +106,9 @@ test('brukerverdi: token-tabell resolver hver til forventet konsept (okf-realist
|
||||||
// (c) DISAMBIGUERING (Pass 2): delt token mellom 2 filer -> index.md-routing/ranking
|
// (c) DISAMBIGUERING (Pass 2): delt token mellom 2 filer -> index.md-routing/ranking
|
||||||
// velger riktig topp-treff (frontmatter+index-entry tie-break).
|
// velger riktig topp-treff (frontmatter+index-entry tie-break).
|
||||||
test('disambiguering: delt token rangerer frontmatter/index-treff over body-treff', () => {
|
test('disambiguering: delt token rangerer frontmatter/index-treff over body-treff', () => {
|
||||||
const hits = retrieve(REALISTIC, 'tunnelsikkerhet');
|
const hits = retrieve(REALISTIC, 'forsyningssikkerhet');
|
||||||
assert.equal(hits.length, 2, 'delt token skal treffe begge filer');
|
assert.equal(hits.length, 2, 'delt token skal treffe begge filer');
|
||||||
assert.equal(rel(REALISTIC, hits[0].path), 'syklus/T1-2026/okr-trafikksikkerhet.md',
|
assert.equal(rel(REALISTIC, hits[0].path), 'syklus/T1-2026/okr-vannforsyning.md',
|
||||||
'frontmatter+index-entry-treff skal rangeres over body-only-treff');
|
'frontmatter+index-entry-treff skal rangeres over body-only-treff');
|
||||||
assert.equal(rel(REALISTIC, hits[1].path), 'syklus/T1-2026/status.md');
|
assert.equal(rel(REALISTIC, hits[1].path), 'syklus/T1-2026/status.md');
|
||||||
assert.ok(hits[0].score > hits[1].score, 'topp-treff skal ha hoyere score (deterministisk tie-break)');
|
assert.ok(hits[0].score > hits[1].score, 'topp-treff skal ha hoyere score (deterministisk tie-break)');
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import { fileURLToPath } from 'node:url';
|
||||||
|
|
||||||
const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
|
const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
|
||||||
const SYKLUS = 'tests/fixtures/okf-realistic/syklus/T1-2026';
|
const SYKLUS = 'tests/fixtures/okf-realistic/syklus/T1-2026';
|
||||||
const OKR_FILER = ['okr-trafikksikkerhet.md', 'okr-digitalisering.md'];
|
const OKR_FILER = ['okr-vannforsyning.md', 'okr-digitalisering.md'];
|
||||||
|
|
||||||
const lesFixture = (navn) => readFileSync(join(ROOT, SYKLUS, navn), 'utf8');
|
const lesFixture = (navn) => readFileSync(join(ROOT, SYKLUS, navn), 'utf8');
|
||||||
|
|
||||||
|
|
@ -87,7 +87,7 @@ test('(B1) lesSyklus leser begge OKR-filene med KR-ene sine', () => {
|
||||||
// arver denne rekkefolgen, saa den er del av kontrakten, ikke en tilfeldighet.
|
// arver denne rekkefolgen, saa den er del av kontrakten, ikke en tilfeldighet.
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
||||||
syklus.okrer.map((o) => o.fil),
|
syklus.okrer.map((o) => o.fil),
|
||||||
['okr-digitalisering.md', 'okr-trafikksikkerhet.md'],
|
['okr-digitalisering.md', 'okr-vannforsyning.md'],
|
||||||
);
|
);
|
||||||
const digi = syklus.okrer[0];
|
const digi = syklus.okrer[0];
|
||||||
assert.equal(digi.tittel, 'Digitalisering av tjenester');
|
assert.equal(digi.tittel, 'Digitalisering av tjenester');
|
||||||
|
|
@ -114,7 +114,7 @@ test('(B2) lesSyklus tolker tallene som tall, ikke strenger', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('(B3) beregnScore: kanonisk formel paa et kjent KR-par', () => {
|
test('(B3) beregnScore: kanonisk formel paa et kjent KR-par', () => {
|
||||||
// Tunneler oppgradert: (17 - 12) / (20 - 12) = 0.625
|
// Hoeydebasseng oppgradert: (17 - 12) / (20 - 12) = 0.625
|
||||||
assert.equal(beregnScore({ baseline: 12, target: 20, naa: 17 }), 0.625);
|
assert.equal(beregnScore({ baseline: 12, target: 20, naa: 17 }), 0.625);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,10 +85,10 @@ test('(2a) invariant 1: typen er merket i rapporteringen', () => {
|
||||||
|
|
||||||
test('(2b) invariant 2: committed rapporteres binaert mot kravet', () => {
|
test('(2b) invariant 2: committed rapporteres binaert mot kravet', () => {
|
||||||
const md = rapport();
|
const md = rapport();
|
||||||
// Avvik-kolonnen finnes, og tunnel-KR2 (17 av 20) er et avvik selv om
|
// Avvik-kolonnen finnes, og hoeydebasseng-KR2 (17 av 20) er et avvik selv om
|
||||||
// scoren er 0.63 -- et krav er naadd eller ikke.
|
// scoren er 0.63 -- et krav er naadd eller ikke.
|
||||||
assert.match(md, /\|\s*Avvik\s*\|/, 'mangler Avvik-kolonne for committed');
|
assert.match(md, /\|\s*Avvik\s*\|/, 'mangler Avvik-kolonne for committed');
|
||||||
const rad = md.split('\n').find((l) => l.includes('oppgradert sikkerhetsutrustning'));
|
const rad = md.split('\n').find((l) => l.includes('oppgradert sikringsutstyr'));
|
||||||
assert.ok(rad, 'fant ikke committed-KR-raden');
|
assert.ok(rad, 'fant ikke committed-KR-raden');
|
||||||
assert.match(rad, /\|\s*Ja\s*\|/, 'committed under target maa merkes som avvik');
|
assert.match(rad, /\|\s*Ja\s*\|/, 'committed under target maa merkes som avvik');
|
||||||
});
|
});
|
||||||
|
|
@ -203,7 +203,7 @@ test('(8a) del III bygger paa aarsrapportens eget anker og en seksjon per Object
|
||||||
assert.match(md, /[Aa]arets aktiviteter og resultater/, 'del III-ankeret mangler');
|
assert.match(md, /[Aa]arets aktiviteter og resultater/, 'del III-ankeret mangler');
|
||||||
const objectives = md.split('\n').filter((l) => /^##\s+(?!Flerarig|Aspirational|Avvik)/.test(l));
|
const objectives = md.split('\n').filter((l) => /^##\s+(?!Flerarig|Aspirational|Avvik)/.test(l));
|
||||||
assert.equal(objectives.length, 2, `forventet 2 Objective-seksjoner, fant ${objectives.length}`);
|
assert.equal(objectives.length, 2, `forventet 2 Objective-seksjoner, fant ${objectives.length}`);
|
||||||
assert.match(md, /Trafikksikkerhet og tunnelsikkerhet/);
|
assert.match(md, /Forsyningssikkerhet for drikkevann/);
|
||||||
assert.match(md, /Digitalisering av tjenester/);
|
assert.match(md, /Digitalisering av tjenester/);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -290,7 +290,7 @@ test('(9c) styringsparametere kobles mot tildelingsbrevet, og oppfinnes ikke', (
|
||||||
// Generatoren leser ikke tildelingsbrevet -- den har bare syklusdataene. Da er
|
// Generatoren leser ikke tildelingsbrevet -- den har bare syklusdataene. Da er
|
||||||
// koblingen et felt den RESERVERER, aldri et den fyller. Hvert Objective staar
|
// koblingen et felt den RESERVERER, aldri et den fyller. Hvert Objective staar
|
||||||
// i tabellen; kravet ved siden av er tomt.
|
// i tabellen; kravet ved siden av er tomt.
|
||||||
assert.match(kropp, /Trafikksikkerhet og tunnelsikkerhet/);
|
assert.match(kropp, /Forsyningssikkerhet for drikkevann/);
|
||||||
assert.match(kropp, /Digitalisering av tjenester/);
|
assert.match(kropp, /Digitalisering av tjenester/);
|
||||||
assert.match(kropp, /[Ff]ylles ut/, 'koblingen maa vaere merket som utfylles av virksomheten');
|
assert.match(kropp, /[Ff]ylles ut/, 'koblingen maa vaere merket som utfylles av virksomheten');
|
||||||
});
|
});
|
||||||
|
|
@ -327,7 +327,7 @@ function avvikKropp(md) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fixturens KR-er, med de rollene steg 7 ga dem.
|
// Fixturens KR-er, med de rollene steg 7 ga dem.
|
||||||
const COMMITTED_UNDER_KRAV = 'Tunneler med oppgradert sikkerhetsutrustning';
|
const COMMITTED_UNDER_KRAV = 'Hoeydebasseng med oppgradert sikringsutstyr';
|
||||||
const ASPIRATIONAL_LAV_SCORE = ['Andel digitale soeknader', 'Gjennomsnittlig saksbehandlingstid'];
|
const ASPIRATIONAL_LAV_SCORE = ['Andel digitale soeknader', 'Gjennomsnittlig saksbehandlingstid'];
|
||||||
|
|
||||||
for (const [navn, bygger] of FORMER) {
|
for (const [navn, bygger] of FORMER) {
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,8 @@ function lagSyklus(t) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const FULL = {
|
const FULL = {
|
||||||
'Alvorlige tunnelhendelser (antall)': 'Off Track',
|
'Alvorlige driftsavbrudd i vannforsyningen (antall)': 'Off Track',
|
||||||
'Tunneler med oppgradert sikkerhetsutrustning (antall)': 'At Risk',
|
'Hoeydebasseng med oppgradert sikringsutstyr (antall)': 'At Risk',
|
||||||
'Andel digitale soeknader (prosent)': 'At Risk',
|
'Andel digitale soeknader (prosent)': 'At Risk',
|
||||||
'Gjennomsnittlig saksbehandlingstid (dager)': 'On Track',
|
'Gjennomsnittlig saksbehandlingstid (dager)': 'On Track',
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue