// kvalitet-data.jsx — Datagrunnlag for Kvalitet (ISO)-modulen.
// Dekker ISO 9001:2015 (kvalitetsledelse) og ISO 14001:2015 (miljøledelse).
// Eiere refererer TEAM-initialer (KK = Kristin Krogh = kvalitetsansvarlig).

const KVAL_IDAG = new Date('2026-05-21');

// ── Standarder ──────────────────────────────────────────────────────────────
const ISO_STANDARDS = {
  '9001': {
    id: '9001', kort: 'ISO 9001', navn: 'ISO 9001:2015', tema: 'Kvalitetsledelse',
    farge: '#28589f', bg: '#e3edfb',
    sertifisert: true, gyldigTil: '2027-03-14', organ: 'DNV', sertNr: 'NO-2018-CERT-9001-4471',
    nesteRevisjon: '2026-10-18', revisjonstype: 'Oppfølgingsrevisjon (år 2 av 3)',
  },
  '14001': {
    id: '14001', kort: 'ISO 14001', navn: 'ISO 14001:2015', tema: 'Miljøledelse',
    farge: '#08605f', bg: '#d7ebe7',
    sertifisert: true, gyldigTil: '2026-11-30', organ: 'DNV', sertNr: 'NO-2023-CERT-14001-8820',
    nesteRevisjon: '2026-10-18', revisjonstype: 'Resertifisering (samordnet m/ 9001)',
  },
};

// Liten ISO-tag-spesifikasjon: standard + klausul
const isoTag = (std, klausul) => ({ std, klausul });

// ── Samsvarsmatrise — kapittel 4–10 for begge standarder ─────────────────────
// status: oppfylt | delvis | mangel
const KVAL_KRAV = [
  // ISO 9001
  { std: '9001', kap: '4',  navn: 'Organisasjonens kontekst',        status: 'oppfylt', dekning: 100, modul: 'rutiner',      evidens: 'Interessentanalyse, kontekstnotat 2026', ansvarlig: 'KS' },
  { std: '9001', kap: '5',  navn: 'Lederskap',                       status: 'oppfylt', dekning: 100, modul: 'protocols',    evidens: 'Kvalitetspolicy, ledelsens gjennomgang', ansvarlig: 'KS' },
  { std: '9001', kap: '6',  navn: 'Planlegging (risiko & mål)',      status: 'delvis',  dekning: 80,  modul: 'kvalitet',     evidens: 'Risikoregister, kvalitetsmål Q1', ansvarlig: 'KK' },
  { std: '9001', kap: '7',  navn: 'Støtte (ressurser, kompetanse)',  status: 'oppfylt', dekning: 95,  modul: 'hr',           evidens: 'Kompetansematrise, opplæringsplan', ansvarlig: 'HM' },
  { std: '9001', kap: '8',  navn: 'Drift (tjenesteleveranse)',       status: 'oppfylt', dekning: 90,  modul: 'rutiner',      evidens: 'Prosedyrer AFT/IPS, stengerutiner', ansvarlig: 'MR' },
  { std: '9001', kap: '9',  navn: 'Evaluering av ytelse',            status: 'delvis',  dekning: 75,  modul: 'kvalitet',     evidens: 'Internrevisjon, KPI-rapport, kundeundersøkelse', ansvarlig: 'KK' },
  { std: '9001', kap: '10', navn: 'Forbedring (avvik & korr. tiltak)', status: 'oppfylt', dekning: 88, modul: 'kvalitet',   evidens: 'Avviksregister, korrigerende tiltak', ansvarlig: 'KK' },
  // ISO 14001
  { std: '14001', kap: '4',  navn: 'Organisasjonens kontekst',       status: 'oppfylt', dekning: 100, modul: 'rutiner',     evidens: 'Miljøkontekst, interessentkrav', ansvarlig: 'KK' },
  { std: '14001', kap: '5',  navn: 'Lederskap & miljøpolicy',        status: 'oppfylt', dekning: 100, modul: 'protocols',   evidens: 'Miljøpolicy signert av daglig leder', ansvarlig: 'KS' },
  { std: '14001', kap: '6',  navn: 'Miljøaspekter, lovkrav & mål',   status: 'delvis',  dekning: 78,  modul: 'kvalitet',    evidens: 'Aspektregister, lovverksoversikt, miljømål', ansvarlig: 'KK' },
  { std: '14001', kap: '7',  navn: 'Støtte & kommunikasjon',         status: 'oppfylt', dekning: 90,  modul: 'intranett',   evidens: 'Miljøopplæring, intern kommunikasjon', ansvarlig: 'HM' },
  { std: '14001', kap: '8',  navn: 'Drift & beredskap',              status: 'delvis',  dekning: 70,  modul: 'rutiner',     evidens: 'Avfallsrutiner, beredskapsplan kjemikalier', ansvarlig: 'KK' },
  { std: '14001', kap: '9',  navn: 'Evaluering (samsvarsvurdering)', status: 'delvis',  dekning: 72,  modul: 'kvalitet',    evidens: 'Samsvarsvurdering lovkrav, miljørevisjon', ansvarlig: 'KK' },
  { std: '14001', kap: '10', navn: 'Forbedring',                     status: 'oppfylt', dekning: 85,  modul: 'kvalitet',    evidens: 'Miljøavvik, forbedringsforslag', ansvarlig: 'KK' },
];

// ── Risikoregister (ISO 9001 §6.1 + ISO 14001 §6.1.2) ────────────────────────
// sann/kons 1–5. type: kvalitet | miljø | hms | informasjon | drift
const KVAL_RISIKO_TYPER = {
  kvalitet:    { label: 'Kvalitet',    farge: '#28589f' },
  miljø:       { label: 'Miljø',       farge: '#08605f' },
  hms:         { label: 'HMS',         farge: '#f2545c' },
  informasjon: { label: 'Informasjon', farge: '#586ba4' },
  drift:       { label: 'Drift',       farge: '#8e5a05' },
};

const KVAL_RISIKO = [
  { id: 'r1', nr: 'RIS-09', navn: 'Tap av AFT-godkjenning ved revisjon', type: 'kvalitet', std: ['9001'], klausul: '8.5',
    beskrivelse: 'NAV-tiltaket AFT krever dokumentert metodikk og resultatoppnåelse. Mangelfull journalføring kan true godkjenningen.',
    sann: 3, kons: 5, eier: 'MR', status: 'aktiv',
    tiltak: [{ t: 'Innskjerpet journalkrav i Rutiner', status: 'done' }, { t: 'Stikkprøvekontroll hver måned', status: 'open' }],
    restSann: 2, restKons: 5, kilde: { modul: 'rutiner', label: 'Rutine: AFT-journalføring' }, opprettet: '2026-02-04' },
  { id: 'r2', nr: 'RIS-12', navn: 'Kjemikaliesøl på sykkelverksted', type: 'miljø', std: ['14001'], klausul: '6.1.2 / 8.2',
    beskrivelse: 'Avfettingsmidler og olje på OK:sykkel kan lekke til avløp. Betydelig miljøaspekt.',
    sann: 2, kons: 4, eier: 'RB', status: 'aktiv',
    tiltak: [{ t: 'Oppsamlingskar montert', status: 'done' }, { t: 'Beredskapsøvelse kjemikaliesøl', status: 'open' }],
    restSann: 1, restKons: 4, kilde: { modul: 'arshjul', label: 'Årshjul: Beredskapsøvelse' }, opprettet: '2026-01-19' },
  { id: 'r3', nr: 'RIS-15', navn: 'Brudd på personvern i deltakerdata', type: 'informasjon', std: ['9001'], klausul: '7.5',
    beskrivelse: 'Sensitive deltakeropplysninger i flere systemer (Visma, fagsystem). Risiko for uautorisert tilgang.',
    sann: 2, kons: 5, eier: 'KK', status: 'aktiv',
    tiltak: [{ t: 'Tilgangsstyring gjennomgått', status: 'open' }, { t: 'Databehandleravtaler verifisert', status: 'done' }],
    restSann: 2, restKons: 4, kilde: { modul: 'agreements', label: 'Databehandleravtaler' }, opprettet: '2026-03-02' },
  { id: 'r4', nr: 'RIS-04', navn: 'Høyt sykefravær svekker leveranse', type: 'hms', std: ['9001'], klausul: '7.1',
    beskrivelse: 'Sykefravær over mål (5,8 % mot 5,5 %) gir kapasitetsrisiko i veilederteam.',
    sann: 4, kons: 3, eier: 'HM', status: 'aktiv',
    tiltak: [{ t: 'IA-tiltak og tett oppfølging', status: 'open' }, { t: 'Stedfortrederordning aktivert', status: 'done' }],
    restSann: 3, restKons: 3, kilde: { modul: 'hr', label: 'HR: Sykefraværsoppfølging' }, opprettet: '2026-04-11' },
  { id: 'r5', nr: 'RIS-18', navn: 'Matsvinn og energibruk OK:bistro', type: 'miljø', std: ['14001'], klausul: '6.1.2',
    beskrivelse: 'Kantinedrift gir matsvinn og høyt energiforbruk. Betydelig miljøaspekt under måling.',
    sann: 3, kons: 2, eier: 'IH', status: 'aktiv',
    tiltak: [{ t: 'Veiing av matsvinn ukentlig', status: 'done' }, { t: 'Energistyring kjøl/frys', status: 'open' }],
    restSann: 2, restKons: 2, kilde: { modul: 'finance', label: 'Energikostnad OK:bistro' }, opprettet: '2026-02-26' },
  { id: 'r6', nr: 'RIS-21', navn: 'Forsinket tertialrapport til styret', type: 'drift', std: ['9001'], klausul: '9.1',
    beskrivelse: 'Manglende datakvalitet i rapportering kan forsinke styrebehandling.',
    sann: 2, kons: 2, eier: 'ØS', status: 'overvåkes',
    tiltak: [{ t: 'Standardisert rapportmal', status: 'done' }],
    restSann: 1, restKons: 2, kilde: { modul: 'finance', label: 'Økonomi: Tertialrapport' }, opprettet: '2026-01-08' },
  { id: 'r7', nr: 'RIS-24', navn: 'Mangelfull avfallssortering Holmlia', type: 'miljø', std: ['14001'], klausul: '8.1',
    beskrivelse: 'Kildesortering ikke implementert fullt ut på avd. Holmlia. Lovkrav fra Oslo kommune.',
    sann: 3, kons: 3, eier: 'TM', status: 'aktiv',
    tiltak: [{ t: 'Sorteringsstasjoner bestilt', status: 'open' }],
    restSann: 2, restKons: 3, kilde: { modul: 'kvalitet', label: 'Miljøaspekt: Avfall' }, opprettet: '2026-04-29' },
  { id: 'r8', nr: 'RIS-27', navn: 'Leverandør uten miljøsertifisering', type: 'miljø', std: ['14001'], klausul: '8.1',
    beskrivelse: 'Vesentlige innkjøp fra leverandør uten dokumentert miljøstyring påvirker eget miljøregnskap.',
    sann: 3, kons: 2, eier: 'ØS', status: 'overvåkes',
    tiltak: [{ t: 'Miljøkrav inn i innkjøpsrutine', status: 'open' }],
    restSann: 2, restKons: 2, kilde: { modul: 'agreements', label: 'Leverandøravtaler' }, opprettet: '2026-03-20' },
  { id: 'r9', nr: 'RIS-30', navn: 'Kompetansetap ved nøkkelpersonell', type: 'kvalitet', std: ['9001'], klausul: '7.2',
    beskrivelse: 'Kritisk metodekompetanse (IPS/AFT) hos få ansatte. Turnover gir leveranserisiko.',
    sann: 2, kons: 4, eier: 'HM', status: 'aktiv',
    tiltak: [{ t: 'Kompetansematrise + backup-roller', status: 'open' }],
    restSann: 2, restKons: 3, kilde: { modul: 'hr', label: 'HR: Kompetansematrise' }, opprettet: '2026-02-14' },
];

// ── Avvik / nonconformities (ISO 9001 §10.2 + ISO 14001 §10.2) ───────────────
const KVAL_AVVIK_STATUS = {
  registrert:       { label: 'Registrert',        farge: '#586ba4', steg: 1 },
  'under-behandling': { label: 'Under behandling', farge: '#8e5a05', steg: 2 },
  tiltak:           { label: 'Korr. tiltak',       farge: '#28589f', steg: 3 },
  verifisering:     { label: 'Verifisering',       farge: '#08605f', steg: 4 },
  lukket:           { label: 'Lukket',             farge: 'rgba(17,24,61,.55)', steg: 5 },
};
const KVAL_ALVOR = {
  kritisk:   { label: 'Kritisk',   farge: '#d32037' },
  vesentlig: { label: 'Vesentlig', farge: '#8e5a05' },
  mindre:    { label: 'Mindre',    farge: '#28589f' },
};

const KVAL_AVVIK = [
  { id: 'a1', nr: 'AVV-2026-031', tittel: 'Manglende signatur på deltakerkontrakt', kategori: 'kvalitet', std: ['9001'], klausul: '8.2',
    alvor: 'vesentlig', status: 'tiltak', melder: 'JN', ansvarlig: 'MR', enhet: 'avd-lamb', opprettet: '2026-05-08', frist: '2026-05-30',
    beskrivelse: '3 av 20 stikkprøver manglet signert deltakerkontrakt før oppstart i AFT.',
    rotarsak: 'Uklar ansvarsfordeling mellom veileder og koordinator ved inntak.',
    tiltak: [{ t: 'Oppdatert sjekkliste ved inntak', status: 'done' }, { t: 'Opplæring av veilederteam', status: 'open' }],
    kilde: { modul: 'rutiner', label: 'Rutine: Inntak AFT' } },
  { id: 'a2', nr: 'AVV-2026-029', tittel: 'Feilsortert farlig avfall', kategori: 'miljø', std: ['14001'], klausul: '8.1',
    alvor: 'vesentlig', status: 'under-behandling', melder: 'RB', ansvarlig: 'KK', enhet: 'ent-sykkel', opprettet: '2026-05-12', frist: '2026-05-28',
    beskrivelse: 'Spillolje levert i restavfall ved OK:sykkel. Avvik fra avfallsforskriften.',
    rotarsak: 'Manglende merking på oppsamlingskar.',
    tiltak: [{ t: 'Ny merking og instruks', status: 'open' }],
    kilde: { modul: 'kvalitet', label: 'Miljøaspekt: Farlig avfall' } },
  { id: 'a3', nr: 'AVV-2026-027', tittel: 'Brannøvelse ikke gjennomført i tide', kategori: 'hms', std: ['9001'], klausul: '8.1',
    alvor: 'mindre', status: 'verifisering', melder: 'KK', ansvarlig: 'MR', enhet: 'avd-lamb', opprettet: '2026-04-22', frist: '2026-05-20',
    beskrivelse: 'Halvårlig brannøvelse på Lambertseter ble 3 uker forsinket.',
    rotarsak: 'Manglende kalenderstyring av HMS-aktiviteter.',
    tiltak: [{ t: 'Lagt inn i Årshjul med varsling', status: 'done' }, { t: 'Øvelse gjennomført 14.5', status: 'done' }],
    kilde: { modul: 'arshjul', label: 'Årshjul: Brannøvelse' } },
  { id: 'a4', nr: 'AVV-2026-024', tittel: 'Avvik i kundeundersøkelse — svartid', kategori: 'kvalitet', std: ['9001'], klausul: '9.1.2',
    alvor: 'mindre', status: 'registrert', melder: 'TM', ansvarlig: 'KK', enhet: 'avd-holm', opprettet: '2026-05-15', frist: '2026-06-12',
    beskrivelse: 'Deltakere rapporterer for lang svartid på henvendelser (snitt 4,2 dager mot mål 2).',
    rotarsak: '',
    tiltak: [],
    kilde: { modul: 'projects', label: 'Prosjekt: IPS Holmlia' } },
  { id: 'a5', nr: 'AVV-2026-022', tittel: 'Overskridelse energiforbruk kjøkken', kategori: 'miljø', std: ['14001'], klausul: '9.1.1',
    alvor: 'mindre', status: 'tiltak', melder: 'IH', ansvarlig: 'IH', enhet: 'ent-bistro', opprettet: '2026-04-30', frist: '2026-06-15',
    beskrivelse: 'Energiforbruk OK:bistro 18 % over miljømål for Q1.',
    rotarsak: 'Eldre kjøl/frys uten nattsenking.',
    tiltak: [{ t: 'Installere nattsenking', status: 'open' }, { t: 'Vurdere utskifting 2027', status: 'open' }],
    kilde: { modul: 'finance', label: 'Energikostnad' } },
  { id: 'a6', nr: 'AVV-2026-019', tittel: 'Utdatert prosedyre i kvalitetshåndbok', kategori: 'kvalitet', std: ['9001'], klausul: '7.5',
    alvor: 'mindre', status: 'lukket', melder: 'KK', ansvarlig: 'KK', enhet: 'stab-kval', opprettet: '2026-03-28', frist: '2026-04-25',
    beskrivelse: 'Prosedyre for dokumentstyring referererte til avviklet system.',
    rotarsak: 'Manglende revisjonssyklus på styrende dokumenter.',
    tiltak: [{ t: 'Revidert og publisert', status: 'done' }, { t: 'Årlig revisjon lagt i Årshjul', status: 'done' }],
    kilde: { modul: 'rutiner', label: 'Rutine: Dokumentstyring' } },
  { id: 'a7', nr: 'AVV-2026-016', tittel: 'Manglende samsvarsvurdering lovkrav', kategori: 'miljø', std: ['14001'], klausul: '9.1.2',
    alvor: 'vesentlig', status: 'under-behandling', melder: 'KK', ansvarlig: 'KK', enhet: 'stab-kval', opprettet: '2026-05-02', frist: '2026-06-01',
    beskrivelse: 'Periodisk samsvarsvurdering mot miljølovverk ikke dokumentert for 2026.',
    rotarsak: 'Ressursmangel i kvalitetsstab.',
    tiltak: [{ t: 'Engasjere LB til gjennomgang', status: 'open' }],
    kilde: { modul: 'kvalitet', label: 'Lovverksregister' } },
];

// ── Revisjoner & ledelsens gjennomgang (ISO 9001 §9.2/9.3, 14001 §9.2/9.3) ────
const KVAL_REVISJON_TYPER = {
  intern:    { label: 'Internrevisjon' },
  ekstern:   { label: 'Ekstern revisjon' },
  ledelse:   { label: 'Ledelsens gjennomgang' },
};
const KVAL_REVISJONER = [
  { id: 'rev1', navn: 'Internrevisjon — AFT-prosess Lambertseter', type: 'intern', std: ['9001'], dato: '2026-03-12', status: 'lukket',
    revisor: 'KK', omfang: 'Kap. 8 Drift, journalføring, inntak', funn: { avvik: 1, obs: 3, forbedring: 2 }, protokollId: null },
  { id: 'rev2', navn: 'Miljørevisjon — avfall & kjemikalier', type: 'intern', std: ['14001'], dato: '2026-04-18', status: 'oppfølging',
    revisor: 'KK', omfang: 'Kap. 8 Drift, aspektregister, beredskapsplan', funn: { avvik: 2, obs: 4, forbedring: 1 }, protokollId: null },
  { id: 'rev3', navn: 'Ledelsens gjennomgang — Q1 2026', type: 'ledelse', std: ['9001', '14001'], dato: '2026-04-25', status: 'lukket',
    revisor: 'KS', omfang: 'Begge ledelsessystemer — input/output iht. §9.3', funn: { avvik: 0, obs: 0, forbedring: 5 }, protokollId: null },
  { id: 'rev4', navn: 'Internrevisjon — kompetanse & opplæring', type: 'intern', std: ['9001'], dato: '2026-06-09', status: 'planlagt',
    revisor: 'KK', omfang: 'Kap. 7 Støtte, kompetansematrise HR', funn: null, protokollId: null },
  { id: 'rev5', navn: 'Ekstern oppfølgingsrevisjon DNV', type: 'ekstern', std: ['9001', '14001'], dato: '2026-10-18', status: 'planlagt',
    revisor: '—', omfang: 'Samordnet 9001 + 14001, alle hovedprosesser', funn: null, protokollId: null },
  { id: 'rev6', navn: 'Ledelsens gjennomgang — Q3 2026', type: 'ledelse', std: ['9001', '14001'], dato: '2026-09-15', status: 'planlagt',
    revisor: 'KS', omfang: 'Forberedelse til ekstern resertifisering', funn: null, protokollId: null },
];

// ── Oppgaver / tiltak (kobler avvik, risiko, revisjon, rutine) ───────────────
const KVAL_OPPG_STATUS = { open: 'Åpen', in_progress: 'Pågår', done: 'Fullført' };
const KVAL_OPPGAVER = [
  { id: 't1', tittel: 'Gjennomføre opplæring veilederteam — inntaksrutine', std: ['9001'], klausul: '7.2', ansvarlig: 'MR', frist: '2026-05-26', status: 'in_progress', prioritet: 'høy', kilde: { type: 'avvik', id: 'a1', label: 'AVV-2026-031' } },
  { id: 't2', tittel: 'Montere merking på oppsamlingskar OK:sykkel', std: ['14001'], klausul: '8.1', ansvarlig: 'RB', frist: '2026-05-24', status: 'open', prioritet: 'høy', kilde: { type: 'avvik', id: 'a2', label: 'AVV-2026-029' } },
  { id: 't3', tittel: 'Stikkprøvekontroll journalføring (månedlig)', std: ['9001'], klausul: '8.5', ansvarlig: 'KK', frist: '2026-05-31', status: 'open', prioritet: 'middels', kilde: { type: 'risiko', id: 'r1', label: 'RIS-09' } },
  { id: 't4', tittel: 'Beredskapsøvelse kjemikaliesøl', std: ['14001'], klausul: '8.2', ansvarlig: 'RB', frist: '2026-06-10', status: 'open', prioritet: 'middels', kilde: { type: 'risiko', id: 'r2', label: 'RIS-12' } },
  { id: 't5', tittel: 'Samsvarsvurdering mot miljølovverk 2026', std: ['14001'], klausul: '9.1.2', ansvarlig: 'KK', frist: '2026-06-01', status: 'open', prioritet: 'høy', kilde: { type: 'avvik', id: 'a7', label: 'AVV-2026-016' } },
  { id: 't6', tittel: 'Installere nattsenking kjøl/frys OK:bistro', std: ['14001'], klausul: '8.1', ansvarlig: 'IH', frist: '2026-06-12', status: 'open', prioritet: 'middels', kilde: { type: 'avvik', id: 'a5', label: 'AVV-2026-022' } },
  { id: 't7', tittel: 'Lukke observasjoner fra miljørevisjon', std: ['14001'], klausul: '9.2', ansvarlig: 'KK', frist: '2026-05-30', status: 'in_progress', prioritet: 'middels', kilde: { type: 'revisjon', id: 'rev2', label: 'Miljørevisjon' } },
  { id: 't8', tittel: 'Bestille sorteringsstasjoner Holmlia', std: ['14001'], klausul: '8.1', ansvarlig: 'TM', frist: '2026-06-06', status: 'open', prioritet: 'middels', kilde: { type: 'risiko', id: 'r7', label: 'RIS-24' } },
  { id: 't9', tittel: 'Tilgangsgjennomgang deltakerdata', std: ['9001'], klausul: '7.5', ansvarlig: 'KK', frist: '2026-06-15', status: 'open', prioritet: 'høy', kilde: { type: 'risiko', id: 'r3', label: 'RIS-15' } },
  { id: 't10', tittel: 'Forberede dokumentpakke til DNV-revisjon', std: ['9001', '14001'], klausul: '9.2', ansvarlig: 'KK', frist: '2026-10-01', status: 'open', prioritet: 'middels', kilde: { type: 'revisjon', id: 'rev5', label: 'DNV ekstern' } },
  { id: 't11', tittel: 'Revider kvalitetsmål Q2', std: ['9001'], klausul: '6.2', ansvarlig: 'KK', frist: '2026-05-22', status: 'open', prioritet: 'middels', kilde: { type: 'revisjon', id: 'rev3', label: 'Ledelsens gjennomgang' } },
  { id: 't12', tittel: 'Oppdater kompetansematrise med backup-roller', std: ['9001'], klausul: '7.2', ansvarlig: 'HM', frist: '2026-06-20', status: 'open', prioritet: 'lav', kilde: { type: 'risiko', id: 'r9', label: 'RIS-30' } },
];

// ── Miljøaspekter (ISO 14001 §6.1.2) ─────────────────────────────────────────
// betydelig: vesentlig miljøaspekt som krever styring
const KVAL_MILJOASPEKT = [
  { id: 'm1', aspekt: 'Farlig avfall (spillolje, kjemikalier)', enhet: 'OK:sykkel', betydelig: true,  paavirkning: 'Forurensning grunn/vann', indikator: 'kg levert til godkjent mottak', maal: '100 % sortert', status: 'tiltak', lovkrav: 'Avfallsforskriften §11' },
  { id: 'm2', aspekt: 'Energiforbruk kantine', enhet: 'OK:bistro', betydelig: true,  paavirkning: 'Klimagassutslipp (indirekte)', indikator: 'kWh/måned', maal: '−10 % vs 2025', status: 'avvik', lovkrav: 'Energiloven' },
  { id: 'm3', aspekt: 'Matsvinn', enhet: 'OK:bistro', betydelig: true,  paavirkning: 'Ressursbruk & utslipp', indikator: 'kg svinn/uke', maal: '−25 % vs 2025', status: 'samsvar', lovkrav: '—' },
  { id: 'm4', aspekt: 'Restavfall & kildesortering', enhet: 'Alle avdelinger', betydelig: true,  paavirkning: 'Deponi/ressurs', indikator: 'sorteringsgrad %', maal: '≥ 70 %', status: 'tiltak', lovkrav: 'Oslo kommune renovasjon' },
  { id: 'm5', aspekt: 'Transport & kjøretøy', enhet: 'OK:sykkel / drift', betydelig: false, paavirkning: 'Utslipp transport', indikator: 'km / drivstoff', maal: 'Elektrifisering 2027', status: 'samsvar', lovkrav: '—' },
  { id: 'm6', aspekt: 'Papir & forbruksmateriell', enhet: 'Stab', betydelig: false, paavirkning: 'Ressursbruk', indikator: 'innkjøp kr', maal: 'Digitalisering', status: 'samsvar', lovkrav: '—' },
  { id: 'm7', aspekt: 'Vannforbruk verksted', enhet: 'OK:sykkel', betydelig: false, paavirkning: 'Ressursbruk vann', indikator: 'm³/måned', maal: 'Stabilt', status: 'samsvar', lovkrav: '—' },
  { id: 'm8', aspekt: 'EE-avfall (elektronikk)', enhet: 'OK:data', betydelig: true,  paavirkning: 'Miljøgifter', indikator: 'enheter ombrukt/resirk.', maal: '100 % forsvarlig', status: 'samsvar', lovkrav: 'Avfallsforskriften kap. 1' },
];

// ── Lovverksregister / samsvarsforpliktelser (ISO 14001 §6.1.3 + §9.1.2) ─────
const KVAL_LOVKRAV = [
  { id: 'l1', navn: 'Avfallsforskriften', type: 'miljø', referanse: 'FOR-2004-06-01-930', status: 'samsvar', ansvarlig: 'KK', vurdert: '2026-04-18' },
  { id: 'l2', navn: 'Forurensningsloven', type: 'miljø', referanse: 'LOV-1981-03-13-6', status: 'samsvar', ansvarlig: 'KK', vurdert: '2026-04-18' },
  { id: 'l3', navn: 'Internkontrollforskriften (HMS)', type: 'hms', referanse: 'FOR-1996-12-06-1127', status: 'samsvar', ansvarlig: 'HM', vurdert: '2026-03-30' },
  { id: 'l4', navn: 'Arbeidsmiljøloven', type: 'hms', referanse: 'LOV-2005-06-17-62', status: 'samsvar', ansvarlig: 'HM', vurdert: '2026-03-30' },
  { id: 'l5', navn: 'Personvernforordningen (GDPR)', type: 'kvalitet', referanse: 'EU 2016/679', status: 'vurderes', ansvarlig: 'KK', vurdert: '2026-02-28' },
  { id: 'l6', navn: 'Energiloven', type: 'miljø', referanse: 'LOV-1990-06-29-50', status: 'avvik', ansvarlig: 'KK', vurdert: '2026-04-30' },
  { id: 'l7', navn: 'Produktkontrolloven (kjemikalier)', type: 'miljø', referanse: 'LOV-1976-06-11-79', status: 'samsvar', ansvarlig: 'RB', vurdert: '2026-04-18' },
];

// ── Kvalitets- & miljømål (ISO 9001 §6.2 / 14001 §6.2) ───────────────────────
const KVAL_MAAL = [
  { id: 'g1', std: '9001', navn: 'Resultatoppnåelse AFT-deltakere i jobb/utdanning', maal: '≥ 55 %', naa: 52, enhet: '%', trend: 'opp' },
  { id: 'g2', std: '9001', navn: 'Lukkede avvik innen frist', maal: '≥ 90 %', naa: 83, enhet: '%', trend: 'opp' },
  { id: 'g3', std: '9001', navn: 'Deltakertilfredshet', maal: '≥ 4,3 / 5', naa: 4.1, enhet: '/5', trend: 'flat' },
  { id: 'g4', std: '14001', navn: 'Sorteringsgrad avfall', maal: '≥ 70 %', naa: 61, enhet: '%', trend: 'opp' },
  { id: 'g5', std: '14001', navn: 'Reduksjon energiforbruk', maal: '−10 %', naa: -4, enhet: '%', trend: 'flat' },
  { id: 'g6', std: '14001', navn: 'Reduksjon matsvinn OK:bistro', maal: '−25 %', naa: -19, enhet: '%', trend: 'opp' },
];

// ── Hjelpere ─────────────────────────────────────────────────────────────────
const kvalDagerTil = (iso) => iso ? Math.round((new Date(iso) - KVAL_IDAG) / 86400000) : null;
const kvalDataFmtDato = (iso) => {
  if (!iso) return '—';
  const d = new Date(iso);
  const mnd = ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'];
  return `${d.getDate()}. ${mnd[d.getMonth()]} ${d.getFullYear()}`;
};
// Risikoscore → nivå
const kvalRisikoNivaa = (s, k) => {
  const v = s * k;
  if (v >= 15) return { label: 'Kritisk', farge: '#d32037', bg: '#f8d3d5' };
  if (v >= 8)  return { label: 'Høy',     farge: '#a01a25', bg: '#fcddde' };
  if (v >= 4)  return { label: 'Middels', farge: '#8e5a05', bg: '#fdeac8' };
  return { label: 'Lav', farge: '#1b6a2e', bg: '#dbeed8' };
};

Object.assign(window, {
  KVAL_IDAG, ISO_STANDARDS, isoTag, KVAL_KRAV,
  KVAL_RISIKO, KVAL_RISIKO_TYPER, KVAL_AVVIK, KVAL_AVVIK_STATUS, KVAL_ALVOR,
  KVAL_REVISJONER, KVAL_REVISJON_TYPER, KVAL_OPPGAVER, KVAL_OPPG_STATUS,
  KVAL_MILJOASPEKT, KVAL_LOVKRAV, KVAL_MAAL,
  kvalDagerTil, kvalRisikoNivaa,
});
