Risikostyring og sikkerhetsoppfølging
God sikkerhet starter med forståelse av risiko. Vi bistår prosjekter med å identifisere, vurdere og følge opp forhold som kan påvirke mennesker, verdier, informasjon og gjennomføring.
Bistanden kan omfatte risikovurderinger, identifisering av sårbarheter, vurdering og anbefaling av risikoreduserende tiltak samt løpende oppfølging av prosjektets risikobilde.
Vi legger vekt på at risikostyringen skal være praktisk og inngå som en naturlig del av prosjektstyringen. Tiltak og prioriteringer tilpasses prosjektets utvikling og faktiske behov.
Dette gir prosjektledelsen bedre beslutningsgrunnlag, tydeligere prioriteringer og økt kontroll med sikkerhetsrisiko gjennom prosjektets ulike faser.
← Tilbake til Prosjektsikkerhet
Kontakt oss
Send inn skjemaet under, så tar vi kontakt med deg. (function () { var form = document.getElementById('kontaktskjema'); if (!form) return; // --- Utfylt-markering --- function updateFilled(el) { if (!el || el.type === 'checkbox' || el.type === 'radio' || el.type === 'hidden') return; var v = (el.value || '').toString(); var valid = typeof el.checkValidity === 'function' ? el.checkValidity() : true; if (v.trim() !== '' && valid) el.classList.add('is-filled'); else el.classList.remove('is-filled'); } function updateFieldsetFilled(fs) { if (!fs) return; var inputs = fs.querySelectorAll('input[type=checkbox], input[type=radio]'); var any = false; for (var i = 0; i < inputs.length; i++) { if (inputs[i].checked) { any = true; break; } } if (any) fs.classList.add('is-filled'); else fs.classList.remove('is-filled'); } function updateCheckFilled(cb) { var wrap = cb.closest('.form-check'); if (!wrap) return; if (cb.checked) wrap.classList.add('is-filled'); else wrap.classList.remove('is-filled'); } var fields = form.querySelectorAll('input, select, textarea'); for (var i = 0; i < fields.length; i++) { (function (f) { // Søkefeltet er ikke et skjemafelt som skal merkes som utfylt – // den grønne tilstanden styres kun av om et firma er valgt fra dropdownen. if (f.id === 'firmasoek') return; if (f.type === 'radio' || f.type === 'checkbox') { f.addEventListener('change', function () { var fs = f.closest('fieldset'); if (fs) updateFieldsetFilled(fs); if (!fs) updateCheckFilled(f); // lone checkbox (personvern) }); } else { f.addEventListener('input', function () { updateFilled(f); }); f.addEventListener('change', function () { updateFilled(f); }); } })(fields[i]); } // --- Navnesøk mot Brønnøysundregistrene via internt API --- var sokInput = document.getElementById('firmasoek'); var sokBoks = document.querySelector('.firma-soek'); var sokClear = document.getElementById('firmasoek-clear'); var dropdown = document.getElementById('firmasoek-dropdown'); var firmaStatus = document.getElementById('firma-status'); var orgnrInput = document.getElementById('orgnr'); var firmanavnInput = document.getElementById('firmanavn'); var adresseInput = document.getElementById('adresse'); var postnrInput = document.getElementById('postnr'); var stedInput = document.getElementById('kommune'); var firmaFelter = document.getElementById('firmafelter'); var kontaktFelter = document.getElementById('kontaktfelter'); var firmaSoekBlokk = document.getElementById('firmasoek-blokk'); var privatpersonCheck = document.getElementById('privatperson'); var henvendelsestype = document.getElementById('henvendelsestype'); var kontaktpersonInput = document.getElementById('kontaktperson'); var telefonInput = document.getElementById('telefon'); var epostInput = document.getElementById('epost'); var meldingInput = document.getElementById('melding'); var autoFilled = {}; // husker hva vi sist auto-fylte, så vi ikke overskriver manuelle endringer var debounceTimer = null; var aktivIndeks = -1; var sisteTreff = []; function setStatus(text, color) { if (!firmaStatus) return; firmaStatus.textContent = text || ''; firmaStatus.style.color = color || ''; } function maybeAutoFill(el, nyVerdi) { if (!el || !nyVerdi) return; var current = (el.value || '').toString(); if (current === '' || current === autoFilled[el.id]) { el.value = nyVerdi; autoFilled[el.id] = nyVerdi; updateFilled(el); } } function maybeAutoSelect(sel, nyVerdi) { if (!sel || !nyVerdi) return; var current = (sel.value || '').toString(); if (current === '' || current === autoFilled[sel.id]) { sel.value = nyVerdi; autoFilled[sel.id] = nyVerdi; updateFilled(sel); } } function escapeHtml(s) { return (s || '').replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); } function highlight(text, term) { var safe = escapeHtml(text); if (!term) return safe; var safeTerm = escapeHtml(term); var lower = safe.toLowerCase(); var termLower = safeTerm.toLowerCase(); var idx = lower.indexOf(termLower); if (idx < 0) return safe; return safe.substring(0, idx) + '' + safe.substring(idx, idx + safeTerm.length) + '' + safe.substring(idx + safeTerm.length); } function skjulDropdown() { dropdown.hidden = true; dropdown.innerHTML = ''; aktivIndeks = -1; } function visDropdown() { if (!sisteTreff.length) { skjulDropdown(); return; } dropdown.hidden = false; } function settAktiv(nyIdx) { var items = dropdown.querySelectorAll('li[data-idx]'); if (!items.length) return; if (nyIdx < 0) nyIdx=items.length - 1; if (nyIdx>= items.length) nyIdx = 0; for (var i = 0; i < items.length; i++) items[i].classList.remove('active'); items[nyIdx].classList.add('active'); items[nyIdx].scrollIntoView({ block: 'nearest' }); aktivIndeks = nyIdx; } function settFormDisabled(disabled) { var alle = form.querySelectorAll('input, select, textarea, button'); for (var i = 0; i < alle.length; i++) { var f = alle[i]; if (f.id === 'firmasoek' || f.id === 'firmasoek-clear' || f.id === 'privatperson') continue; if (f.type === 'hidden') continue; f.disabled = disabled; } } function rensFyltFraForrigeValg() { // Tøm felter som ble auto-fylt av forrige valg, slik at nytt valg kan fylle dem ['firmanavn', 'adresse', 'postnr', 'kommune'].forEach(function (id) { var el = document.getElementById(id); if (!el) return; if (el.value && el.value === autoFilled[id]) { el.value = ''; delete autoFilled[id]; updateFilled(el); } }); if (orgnrInput) { orgnrInput.value = ''; } } function velgFirma(enhet) { if (!enhet) return; settFormDisabled(false); rensFyltFraForrigeValg(); if (orgnrInput) orgnrInput.value = enhet.orgnr || ''; if (enhet.navn) maybeAutoFill(firmanavnInput, enhet.navn); var a = enhet.forretningsadresse; if (a) { if (a.linjer && a.linjer.length) maybeAutoFill(adresseInput, a.linjer.join(', ')); if (a.postnummer) maybeAutoFill(postnrInput, a.postnummer); // Fyll «Sted» automatisk med poststed (evt. kommune som reserve) var sted = a.poststed || a.kommune; if (sted) { // Normaliser til pen kapitalisering (Brreg leverer ofte STORE BOKSTAVER) sted = sted.toString().toLowerCase().replace(/(^|[\s\-])([a-zæøå])/g, function (m, p1, p2) { return p1 + p2.toUpperCase(); }); maybeAutoFill(stedInput, sted); } } if (firmaFelter) firmaFelter.hidden = false; if (kontaktFelter) kontaktFelter.hidden = false; sokInput.value = enhet.navn || ''; sokInput.setAttribute('readonly', 'readonly'); sokInput.blur(); if (sokBoks) sokBoks.classList.add('valgt'); if (sokClear) sokClear.hidden = false; setStatus('Valgt: ' + enhet.navn + ' · orgnr. ' + enhet.orgnr + (a && a.poststed ? ' · ' + a.poststed : ''), '#00a870'); skjulDropdown(); sisteTreff = []; } function fjernValg() { rensFyltFraForrigeValg(); if (firmaFelter) firmaFelter.hidden = true; // Skjul kontaktfeltene igjen bare hvis vi IKKE er i privatperson-modus if (kontaktFelter && !(privatpersonCheck && privatpersonCheck.checked)) { kontaktFelter.hidden = true; } sokInput.value = ''; sokInput.removeAttribute('readonly'); if (sokBoks) sokBoks.classList.remove('valgt'); if (sokClear) sokClear.hidden = true; sisteTreff = []; skjulDropdown(); settFormDisabled(true); setStatus('Velg et firma så fyller vi ut firmanavn, adresse og orgnr automatisk.', ''); sokInput.focus(); } function renderDropdown(treff, term) { dropdown.innerHTML = ''; sisteTreff = treff || []; if (!sisteTreff.length) { var empty = document.createElement('li'); empty.className = 'empty'; empty.textContent = 'Ingen treff. Skriv inn firmanavnet manuelt hvis du ikke finner det.'; dropdown.appendChild(empty); dropdown.hidden = false; return; } for (var i = 0; i < sisteTreff.length; i++) { (function (idx, e) { var li = document.createElement('li'); li.setAttribute('data-idx', String(idx)); li.setAttribute('role', 'option'); var dato = e.stiftelsesdato || e.registrertDato; var aar = dato ? (', stiftet ' + dato.substring(0, 4)) : ''; var poststed = (e.forretningsadresse && e.forretningsadresse.poststed) ? e.forretningsadresse.poststed : ''; li.innerHTML = '' + highlight(e.navn, term) + '' + ' orgnr. ' + escapeHtml(e.orgnr) + '' + '' + escapeHtml(e.organisasjonsform || '') + aar + (poststed ? ' · ' + escapeHtml(poststed) : '') + ''; li.addEventListener('mousedown', function (ev) { ev.preventDefault(); // hindre blur før click velgFirma(e); }); dropdown.appendChild(li); })(i, sisteTreff[i]); } dropdown.hidden = false; } function soek(term) { setStatus('Søker…', '#666'); fetch('~/API/BrregSoek?navn=' + encodeURIComponent(term), { headers: { 'Accept': 'application/json' } }) .then(function (r) { return r.json(); }) .then(function (data) { var treff = (data && data.treff) ? data.treff : []; renderDropdown(treff, term); setStatus(treff.length ? (treff.length + ' treff – velg ett for å fylle ut skjemaet') : 'Ingen treff', treff.length ? '' : '#6b7280'); }) .catch(function () { setStatus('Kunne ikke søke nå – prøv igjen senere.', '#b00'); }); } if (sokInput) { sokInput.addEventListener('input', function () { if (sokInput.hasAttribute('readonly')) return; var term = (sokInput.value || '').trim(); if (debounceTimer) clearTimeout(debounceTimer); if (term.length < 2) { skjulDropdown(); setStatus('Velg et firma så fyller vi ut firmanavn, adresse og orgnr automatisk.', ''); return; } debounceTimer=setTimeout(function () { soek(term); }, 300); }); sokInput.addEventListener('focus', function () { if (sokInput.hasAttribute('readonly')) return; if (sisteTreff.length) visDropdown(); }); sokInput.addEventListener('blur', function () { setTimeout(skjulDropdown, 200); }); sokInput.addEventListener('keydown', function (e) { if (sokInput.hasAttribute('readonly')) return; if (dropdown.hidden) return; if (e.key === 'ArrowDown') { e.preventDefault(); settAktiv(aktivIndeks + 1); } else if (e.key === 'ArrowUp') { e.preventDefault(); settAktiv(aktivIndeks - 1); } else if (e.key === 'Enter') { var idx=aktivIndeks>= 0 ? aktivIndeks : 0; if (sisteTreff[idx]) { e.preventDefault(); velgFirma(sisteTreff[idx]); } } else if (e.key === 'Escape') { skjulDropdown(); } }); } if (sokClear) { sokClear.addEventListener('click', fjernValg); } // --- Privatperson / bedrift-veksling --- var firmaPakrevdFelter = [firmanavnInput, adresseInput, postnrInput, stedInput]; function settPrivatperson(erPrivat) { if (henvendelsestype) henvendelsestype.value = erPrivat ? 'Privatperson' : 'Bedrift'; if (erPrivat) { // Skjul alt som har med firma å gjøre if (firmaSoekBlokk) firmaSoekBlokk.hidden = true; if (firmaFelter) firmaFelter.hidden = true; // Fjern «required» og tøm firma-feltene så de ikke blokkerer innsending firmaPakrevdFelter.forEach(function (el) { if (!el) return; el.removeAttribute('required'); el.value = ''; el.disabled = true; updateFilled(el); }); if (orgnrInput) orgnrInput.value = ''; autoFilled = {}; // Vis og aktiver kontaktfeltene + melding for privatperson if (kontaktFelter) kontaktFelter.hidden = false; [kontaktpersonInput, telefonInput, epostInput, meldingInput].forEach(function (el) { if (el) el.disabled = false; }); // Personvern-samtykke må fortsatt kunne krysses av var pv = document.getElementById('personvern'); if (pv) pv.disabled = false; var sendBtn = form.querySelector('button[type=submit]'); if (sendBtn) sendBtn.disabled = false; } else { // Tilbake til bedrift-flyt if (firmaSoekBlokk) firmaSoekBlokk.hidden = false; // Sett «required» tilbake på firma-feltene firmaPakrevdFelter.forEach(function (el) { if (el) el.setAttribute('required', 'required'); }); // Nullstill firmasøk og skjul felter til firma velges på nytt fjernValg(); } } if (privatpersonCheck) { privatpersonCheck.addEventListener('change', function () { settPrivatperson(privatpersonCheck.checked); }); } // Initialtilstand: alt bortsett fra søkefeltet er disablet til et firma er valgt. settFormDisabled(true); })();