Logga metodikens mätkontroller som mätvärden
En kontroll vars krav är "matvarde" loggade bara kontroll_utford. Det gällde 56 av metodikernas 153 kontroller — drygt en tredjedel — och fick två följder som bägge upptäcktes när tio ärenden kördes igenom gränssnittet: Felorsaksanalysen nekade "Mätresultat" som underlag med motiveringen att underlaget inte finns i loggen, trots att teknikern just hade matat in mätvärdet som kontrollen krävde. Enda vägen förbi var att mata in samma siffra en gång till via dokumentationspanelen. Evidensprofilen i analysvyn underskattade systematiskt hur mycket som faktiskt mäts, eftersom mätningarna aldrig fanns som mätvärden. Mätningen loggas nu som det den är. Utan känt mätdon graderas den E1 och inte E4 (QUALITY-AUDIT M-1) — ett avläst tal utan spårbart instrument är inte en spårbar mätning. Tre tester låser förhållandet mellan metodikernas kravtyper och den evidens de producerar, så att en ny kravtyp inte kan införas utan att någon tar ställning till vad den ska ge för evidens. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
This commit is contained in:
@@ -245,3 +245,42 @@ describe("schemat följer domänmodellen", () => {
|
|||||||
expect([...new Set(avvisade)]).toEqual([]);
|
expect([...new Set(avvisade)]).toEqual([]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ---- En mätning ska loggas som en mätning -------------------------------
|
||||||
|
//
|
||||||
|
// Bakgrund: en kontroll vars krav är "matvarde" loggade bara
|
||||||
|
// kontroll_utford. Följden var att 56 av metodikernas 153 kontroller —
|
||||||
|
// drygt en tredjedel — mätte utan att det syntes någonstans:
|
||||||
|
// felorsaksanalysen nekade "Mätresultat" som underlag trots att
|
||||||
|
// teknikern just hade mätt, och evidensprofilen i analysvyn underskattade
|
||||||
|
// systematiskt hur mycket som faktiskt mäts i verkstaden.
|
||||||
|
//
|
||||||
|
// Testet låser förhållandet mellan metodikernas krav och den evidens de
|
||||||
|
// måste ge, så att en framtida kontrolltyp inte kan införas utan att
|
||||||
|
// någon tar ställning till vilken evidens den producerar.
|
||||||
|
describe("metodikernas mätkontroller producerar mätevidens", () => {
|
||||||
|
it("varje kontroll har ett känt krav", async () => {
|
||||||
|
const { ALLA_METODIKER } = await import("../../../../services/gemensam/metodiker.mjs");
|
||||||
|
const kravtyper = new Set<string>();
|
||||||
|
for (const m of ALLA_METODIKER) {
|
||||||
|
for (const steg of m.steg) {
|
||||||
|
for (const k of steg.kontroller ?? []) if (k.krav) kravtyper.add(k.krav);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
expect([...kravtyper].sort()).toEqual(["foto", "kommentar", "matvarde"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("KontrollKort loggar ett matvarde när kravet är matvarde", () => {
|
||||||
|
const kod = readFileSync("src/pages/felsokning/ArendeSida.tsx", "utf8");
|
||||||
|
expect(kod).toMatch(/krav === "matvarde" && resultat\.trim\(\)/);
|
||||||
|
expect(kod).toMatch(/skicka\(\{ typ: "matvarde", beskrivning: kontroll\.text/);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('underlagskällan "Mätresultat" godtar just den händelsetypen', async () => {
|
||||||
|
const { underlagFinns } = await import("../ecm");
|
||||||
|
const arende = {
|
||||||
|
handelser: [{ id: "1", tidpunkt: "", anvandare: "A", handelse: { typ: "matvarde", beskrivning: "Lufttryck", varde: "2,4 bar" } }],
|
||||||
|
} as never;
|
||||||
|
expect(underlagFinns(arende, "Mätresultat")).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -1527,7 +1527,19 @@ function KontrollKort({ steg, skicka }: { steg: NastaSteg; skicka: (h: Handelse)
|
|||||||
const filRef = useRef<HTMLInputElement>(null);
|
const filRef = useRef<HTMLInputElement>(null);
|
||||||
const krav = kontroll.krav;
|
const krav = kontroll.krav;
|
||||||
|
|
||||||
const utford = () =>
|
const utford = () => {
|
||||||
|
// En kontroll vars krav är ett mätvärde ger ett mätvärde. Tidigare
|
||||||
|
// loggades bara kontroll_utford, med följden att 56 av metodikernas
|
||||||
|
// 153 kontroller — drygt en tredjedel — mätte utan att det syntes:
|
||||||
|
// felorsaksanalysen nekade ”Mätresultat” som underlag, och
|
||||||
|
// evidensprofilen i analysvyn underskattade systematiskt hur mycket
|
||||||
|
// som faktiskt mättes. Mätningen loggas därför som det den är.
|
||||||
|
//
|
||||||
|
// Utan känt mätdon graderas den E1, inte E4 (QUALITY-AUDIT M-1) —
|
||||||
|
// ett avläst tal utan spårbart instrument är inte en spårbar mätning.
|
||||||
|
if (krav === "matvarde" && resultat.trim()) {
|
||||||
|
skicka({ typ: "matvarde", beskrivning: kontroll.text, varde: resultat.trim() });
|
||||||
|
}
|
||||||
skicka({
|
skicka({
|
||||||
typ: "kontroll_utford",
|
typ: "kontroll_utford",
|
||||||
stegId: steg.steg.id,
|
stegId: steg.steg.id,
|
||||||
@@ -1535,6 +1547,7 @@ function KontrollKort({ steg, skicka }: { steg: NastaSteg; skicka: (h: Handelse)
|
|||||||
text: kontroll.text,
|
text: kontroll.text,
|
||||||
resultat: resultat.trim() || undefined,
|
resultat: resultat.trim() || undefined,
|
||||||
});
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const kravUppfyllt = krav === "foto" || !krav || resultat.trim().length > 0;
|
const kravUppfyllt = krav === "foto" || !krav || resultat.trim().length > 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user