Files
alva/felsokning/services/gemensam/faser.mjs
T
Claude 4dea6d2818 Fackgranskning av metodikinnehållet — ALVA 3.5
Sex oberoende domängranskningar av metodikbiblioteket, den enda text i
systemet som säger åt en tekniker vad den ska göra med ett fordon:
chassi, elsystem, högvolt, motor/drivlina, övriga system, plus en
maskinell granskning av bibliotekets egna tre regler. Varje fynd
verifierat före åtgärd, varje ersättning applicerad med träffkrav.
Bokfört i docs/FACKGRANSKNING-2026-08.md (ALVA-DOC-0009); protokollet
som gör den mänskliga granskningen per marknad utförbar i
docs/FACKGRANSKNINGSPROTOKOLL.md (ALVA-DOC-0010). Granskat-flaggorna
är oförändrade — detta höjer golvet, marknadens fackman sätter flaggan.

Tio kritiska fynd åtgärdade. Tyngst: högvoltens skyddsutrustning och
avspärrning låg SIST i säkerhetssekvensen — efter spänningsfrihets-
mätningen — och står nu först med EN 60903/60900-krav; mätningen
kräver CAT III och prova–mät–prova; frånskiljaren låses mot
återinkoppling; metodiken säger nu vad som är förbjudet utan
behörighet. Därtill: klimatets saknade f-gasgrind (nytt säkerhetssteg,
högvoltens mönster), ADAS-provkörningen som instruerade att provocera
nödbromsingrepp i trafik, öppna-aldrig-varmt för kylsystemet,
trycksänkning och högtrycksförbud för bränsle, deaktiverad tändning/
insprutning före kompressionsprov, avgasutsug, provkörningsförbud vid
bränsle-/bromsvätskeläckage, SRS-mätförbud — och klistringsfelet som
lät engelska styrningsklagomål matcha högvoltsmetodiken (styrningens
nyckelord låg i högvoltens lista; bekräftat av fyra granskare
oberoende av varandra).

Därutöver: referensvärden och villkor på mätningarna (startspänning,
spänningsfall, laddspänning med smart laddning-reservation, vilostrom,
CAN-terminering med gateway-reservation, AC-tryck vid föreskrivet
varvtal), rätt metod där fel stod (säkringar mäts under last, krypström
via mV-fall, spolskifte i stället för resistans, glappkontroll med
avlastning efter fjädringstyp), och 23 nya kontroller där granskningen
fann diagnostiska hål. 153 → 176 kontroller, samtliga med evidenskrav.

Fasmodellen fick sista ordet där den och en granskare drog åt olika
håll: vibrationens provkörning står kvar sist (Action går inte före
Localization) och kör-först-substansen bor i symptomsteget; bromsarnas
nya vägprov heter reproduktion och klassas som lokalisering —
temperaturjämförelsen per hjul är avgränsning, inte åtgärd.

Grindtexten för spänningslöshet kräver nu uttryckligen verifiering
genom mätning, på alla tio språken. Grindfixturen fick sitt tredje
foto när skyddsnätets felkodskontroll kom till — fixturen följer
regeln, inte tvärtom (jfr T-13).

775 enhetstester, genomgång 4/4 inom interaktionsbudgeten (vibration
81/90 med de nya kontrollerna), portalspärr, integrationstest,
typkontroll, lint på baslinjen, artefaktmätning och språkrunda gröna.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
2026-08-07 08:37:25 +00:00

108 lines
4.1 KiB
JavaScript

// ALVA-modellen tillämpad på metodikbiblioteket.
//
// ALVA är en metod, inte ett gränssnitt. Om metoden bara fanns i
// marknadsföringen vore den en etikett på en wizard. Här är den den
// struktur som varje procedur faktiskt följer:
//
// A Analysis Samla fakta. Inte hypoteser.
// L Localization Avgränsa. Identifiera exakt område.
// V Verification Verifiera orsaken. Inte symptomet.
// A Action Utför korrigering. Verifiera resultat. Dokumentera.
//
// Varje steg i varje metodik hör till exakt en fas. Klassificeringen är
// data och inte en gissning i vyn, av två skäl: den ska gå att granska,
// och en procedur vars faser inte går ihop ska falla i test i stället
// för att se rätt ut på skärmen.
//
// ---- Varför just den här indelningen ---------------------------------
//
// Gränsen mellan L och V är den enda som är svår, och den är också den
// som bär hela metoden. Att mäta spänning vid en komponent är
// lokalisering — den avgränsar var felet finns. Att mäta spänningsfall
// över samma komponent under last är verifiering — den fastställer
// varför. Samma instrument, samma komponent, olika fas.
//
// Regeln vi tillämpar: ett steg är Verification när det kan avfärda en
// kandidatorsak. Kan det bara flytta uppmärksamheten är det Localization.
/** Steg-id → fas. Uttömmande; ett okänt steg-id faller i test. */
export const STEGFAS = {
// ---- Analysis: vad hände, när, var. Inga slutsatser. ----------------
sakerhet: "analysis", // Förutsättningen för att få samla fakta alls.
symptom: "analysis",
forutsattningar: "analysis",
grund: "analysis",
// ---- Localization: avgränsa området ---------------------------------
visuell: "localization",
felkoder: "localization",
avlasning: "localization",
koder: "localization",
buss: "localization",
inspelning: "localization",
lokalisering: "localization",
batteri: "localization",
glapp: "localization",
metod: "localization",
reproduktion: "localization", // vägprovet som pekar ut hjulet — avgränsning, inte åtgärd
// ---- Verification: fastställ orsaken --------------------------------
matningar: "verification",
kontroller: "verification",
grundkontroller: "verification",
rela: "verification",
start: "verification",
laddning: "verification",
krypstrom: "verification",
mekanik: "verification",
tandning_bransle: "verification",
packning: "verification",
system: "verification",
styrning: "verification",
orsak: "verification",
installning: "verification",
// ---- Action: korrigera och verifiera resultatet ---------------------
provkorning: "action",
funktionstest: "action",
kalibrering: "action",
};
export const FASORDNING = ["analysis", "localization", "verification", "action"];
/** Fasen för ett steg. Okänt steg → analysis, och testet faller. */
export const fasFor = (stegId) => STEGFAS[stegId] ?? "analysis";
/**
* Faserna en metodik faktiskt innehåller, i ALVA-ordning.
*
* Alla metodiker innehåller inte alla fyra. En läckagemetodik som slutar
* med lokalisering är inte ofullständig — läckan är hittad, åtgärden är
* ett annat arbete. Att tvinga in ett Action-steg där hade varit att
* fylla ut modellen i stället för att tillämpa den.
*/
export function faserI(metodik) {
const funna = new Set((metodik?.steg ?? []).map((s) => fasFor(s.id)));
return FASORDNING.filter((f) => funna.has(f));
}
/**
* Klara faser givet loggen: en fas är klar när metodikens samtliga steg i
* den fasen är dokumenterade.
*/
export function klaraFaser(metodik, handelser) {
const besvarade = new Set();
const utforda = new Set();
for (const h of handelser) {
if (h?.typ === "fraga_besvarad") besvarade.add(`${h.stegId}/${h.frageId}`);
if (h?.typ === "kontroll_utford") utforda.add(`${h.stegId}/${h.kontrollId}`);
}
const klar = (steg) =>
(steg.fragor ?? []).every((f) => besvarade.has(`${steg.id}/${f.id}`)) &&
(steg.kontroller ?? []).every((k) => utforda.has(`${steg.id}/${k.id}`));
return faserI(metodik).filter((fas) =>
(metodik.steg ?? []).filter((s) => fasFor(s.id) === fas).every(klar),
);
}