04e0a1e8ec
Guidad Felsökning / test-och-bygg (push) Has been cancelled
Guidad Felsökning / tjanster (push) Has been cancelled
Guidad Felsökning / terraform (push) Has been cancelled
Guidad Felsökning / leverantorskedja (push) Has been cancelled
Guidad Felsökning / aterstallning (push) Has been cancelled
Guidad Felsökning / publicera (push) Has been cancelled
Guidad Felsökning / driftsatt (push) Has been cancelled
75 lines
3.5 KiB
JavaScript
75 lines
3.5 KiB
JavaScript
// ALVA-SPEC-071 · Säkerhetsnivåns tak.
|
|
//
|
|
// ---- Bakgrund (panelgranskningen, garantisätet) --------------------------
|
|
//
|
|
// Säkerhetsnivån i felorsaksanalysen — hög, medel, låg — valdes fritt av
|
|
// teknikern. Ett självskattat värde som ser ut som en mätning är värre än
|
|
// inget värde: en garantihandläggare kan inte prissätta det, och den som
|
|
// har bråttom väljer "hög" av samma skäl som den skriver "klart".
|
|
//
|
|
// Panelens lösning, som blev regeln här: nivån HÄRLEDS ur underlaget och
|
|
// sätter ett TAK. Teknikern kan sänka — den som vet något om fordonets
|
|
// historia som underlaget inte visar ska kunna vara ärligt osäker — men
|
|
// aldrig höja. Asymmetrin är poängen: ingen kan påstå högre säkerhet än
|
|
// evidensen bär, och en sänkning är information i stället för misstanke.
|
|
//
|
|
// ---- Vad taket räknar på -------------------------------------------------
|
|
//
|
|
// HÖG kräver att orsakskedjan är sluten i båda ändar: symptomet
|
|
// reproducerat (inte "delvis" — delvis är ett annat ord för att felet
|
|
// inte är förstått) OCH minst ett spårbart mätvärde (mätdon ur registret,
|
|
// alltså E4). En slutsats utan mätning kan vara rätt, men den kan inte
|
|
// vara HÖG — det är precis skillnaden mellan att veta och att känna igen.
|
|
//
|
|
// MEDEL kräver evidens över E1: foto, video eller mätvärde. Enbart
|
|
// observationer — teknikerns egna påståenden — bär inte medel.
|
|
//
|
|
// LÅG är alltid tillåten. Ett golv vore att tvinga fram falsk säkerhet.
|
|
//
|
|
// Taket är avsiktligt ETT MÅTT PÅ UNDERLAGET, inte på resonemanget.
|
|
// Professorssätet varnade för att en formel som räknar foton utger sig
|
|
// för att mäta diagnostisk säkerhet — det gör den inte, och det står
|
|
// därför i både namn och dokumentation att det är ett TAK, inte ett
|
|
// betyg. Formeln säger vad underlaget som mest kan bära; om slutsatsen
|
|
// förtjänar det avgörs fortfarande av en människa.
|
|
|
|
const ORDNING = ["lag", "medel", "hog"];
|
|
|
|
/** Rangordnar nivåer; okänd nivå räknas som lägst. */
|
|
const rang = (niva) => Math.max(0, ORDNING.indexOf(niva));
|
|
|
|
/**
|
|
* Högsta säkerhetsnivå underlaget bär.
|
|
*
|
|
* @param handelser ärendets händelselogg (klartextform)
|
|
* @returns "hog" | "medel" | "lag"
|
|
*/
|
|
export function sakerhetstak(handelser) {
|
|
const av = (typ) => handelser.filter((h) => h?.typ === typ);
|
|
|
|
const reproducerat = av("reproducering").some((h) => h.status === "ja");
|
|
// Spårbart = mätdonet kommer ur registret OCH kalibreringen gällde
|
|
// när mätningen togs emot. Stämpeln `kalibreradVidMatning` sätts av
|
|
// servern vid uppslaget (TÜV T-2, TÜV-2 T-13) — utan den räknade
|
|
// taket ett instrument med utgången kalibrering som spårbart, och
|
|
// "hög" gick att nå med ett mätdon som evidensmodellen själv graderar
|
|
// E1. Fältet går inte att dikta från klienten: mätdonsFakta skriver
|
|
// alltid över det.
|
|
//
|
|
// Strikt även bakåt: ett mätvärde utan stämpel (skrivet före
|
|
// regeln) räknas INTE som spårbart. Samma princip som för påstådda
|
|
// beteckningar — det som inte kan styrkas bär inte "hög".
|
|
const sparbartMatvarde = av("matvarde").some((h) => h.matdonId && h.kalibreradVidMatning === true);
|
|
const evidensOverE1 =
|
|
sparbartMatvarde || av("matvarde").length > 0 || av("foto").length > 0 || av("video").length > 0;
|
|
|
|
if (reproducerat && sparbartMatvarde) return "hog";
|
|
if (evidensOverE1) return "medel";
|
|
return "lag";
|
|
}
|
|
|
|
/** Är den påstådda nivån inom taket? Sänkning är alltid tillåten. */
|
|
export function inomTak(pastadd, tak) {
|
|
return rang(pastadd) <= rang(tak);
|
|
}
|