ECM v2.0 som subsystem: sex motorer, pre-diagnostik och ärendeidentitet

Regelmotorn är nu plattformens styrande subsystem — systemet kan inte
skriva en slutsats som ECM inte godkänt.

Sex motorer (src/felsokning/ecm.ts):
- Evidence: evidensposter ur loggen med nivå E0–E6, tekniker och
  deterministisk innehållshash
- Rule: dokumentationskrav + undantagsregeln med obligatorisk orsak
- Compliance: ärendetypen (garanti/goodwill/försäkring/reklamation/
  begagnatgaranti …) styr extra krav — claim, skadenummer, historik,
  miltal, bildbevis
- Validation: "Evidens saknas" i stället för antaganden (orkesterns
  grundprompt + projektioner + grind)
- Completion: utökad kvalitetsgrind som spärrar slutrapporten
- Traceability: spårbarhetspaket (regelversion, grindstatus per
  regel-id, evidensposter med hash) i varje export

Pre-Diagnostic Validation — metodiken låses upp först när:
- fordonshistoriken kontrollerats (eller motiverats: kvalitetsvarning),
  med orsakskedja för tidigare arbeten
- ingående mätarställning fotograferats (bildtolkningen föreslår värdet)
- kundens felbeskrivning verifierats
- tidiga observationer hanterats
Utgående mätarställning fotograferas inför avslut och blir obligatorisk
i grinden när ärendet stängs.

Ärendeidentitet (Case Identity): fordonsobjektet utökat med VIN, miltal,
AO-, claim- och skadenummer (läses ur arbetsordern) — registreras en
gång, synligt i identitetsraden i arbetsytan (med ärendetypsval), låst
panel i Live Share, slutrapportens första sida och exporten.

49 vitest-tester; integrationstest och OpenAPI-validering gröna.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
This commit is contained in:
Claude
2026-08-03 09:18:43 +00:00
parent e8cf6db236
commit bfed5dbd7f
14 changed files with 943 additions and 163 deletions
+3 -1
View File
@@ -34,7 +34,9 @@ Demomanus för visning: [DEMO.md](DEMO.md). Knappen **Skapa demoärende** på st
| Dashboard | ✅ Enligt direktivet: räknare och filter för Alla/Pågående/Klara plus Starta nytt ärende. |
| Ärendestart via arbetsorder | ✅ Primärvägen när ett ärende startas: fota arbetsorderns framsida — orkesterns dokumenttolkning (Claude Sonnet 5, vision) läser kund-, fordons- och verkstadsuppgifter oavsett layout och sätter konfidens per fält. 🟢 ≥95 % godkänns automatiskt, 🟡 8095 % markeras för genomläsning, 🔴 <80 % kräver aktiv bekräftelse — teknikern granskar bara osäkra fält. Visuell granskning med dokumentet bredvid fälten (klick markerar ungefärlig position), sedan skapas hela ärendet med ett tryck. Tolkningen loggas som organisationsintern händelse (`arbetsorder_skannad`) och delas aldrig i kund-/partnervyer. Manuell inmatning finns kvar som andrahandsväg; i lokalt läge visas en tydligt märkt demo-tolkning. Inloggade användare tillfrågas aldrig om namn — kontot vet redan. |
| Inställningar | ✅ Systemadministratören väljer vilka objekttyper och identifieringsmetoder som visas när ett ärende startas (`/felsokning/installningar`). På plattformen gäller valet hela organisationen (sparas på organisationen, endast admin får ändra — verifierat i integrationstestet); i lokalt läge gäller valet enheten. Okända värden filtreras och tomma listor faller tillbaka till standard. |
| Evidensmotor (ECM) | ✅ Versionshanterat regelbibliotek ([moduler/evidensmotor.md](moduler/evidensmotor.md), `src/felsokning/ecm.ts`, ECM v1.0): evidensnivåer E0E6 härledda ur loggen, fullbordansregeln *evidens eller dokumenterat undantag med obligatorisk orsak* ("Underlag kan inte tas fram" i guiden, flaggas ⚠ i brief/rapport), och **kvalitetsgrind före slutrapport** — utskrift spärrad tills objektidentifiering, kontroller, fotokrav och evidensnivå är gröna. Regeln "skriv aldrig OK/kontrollerad/inga fel utan evidens — skriv Evidens saknas" är kodad i orkesterns grundprompt. |
| Evidensmotor (ECM) | ✅ Eget subsystem med sex motorer ([moduler/evidensmotor.md](moduler/evidensmotor.md), `src/felsokning/ecm.ts`, **ECM v2.0**): Evidence (evidensposter med nivå E0E6, tekniker och innehållshash), Rule (dokumentationskrav + undantagsregeln med obligatorisk orsak), Compliance (ärendetypen — garanti/försäkring/reklamation m.fl. — styr extra krav), Validation ("Evidens saknas" i stället för antaganden, kodat i orkesterns grundprompt), Completion (kvalitetsgrind som spärrar slutrapporten) och Traceability (spårbarhetspaket med regelversion + hash i varje export). |
| Pre-diagnostik | ✅ Ingen felsökning förrän grundkontrollerna är gjorda eller motiverade: fordonshistorik (Ja med ev. orsakskedja / Nej med obligatorisk orsak → kvalitetsvarning), **ingående mätarställning** (foto av instrumentpanelen, bildtolkningen föreslår värdet), kundens felbeskrivning verifierad och tidiga observationer hanterade. Metodiken låses upp först därefter. **Utgående mätarställning** fotograferas inför avslut och blir obligatorisk i grinden när ärendet stängs. |
| Ärendeidentitet | ✅ Fordonsobjektet som röd tråd: identiteten (AO-nummer, claim-/garantinummer, skadenummer, regnr, VIN, miltal, kund) registreras en gång — normalt via arbetsorderskanningen — och återanvänds i identitetsraden i arbetsytan (med ärendetypsval), låst panel överst i Live Share, slutrapportens första sida (Ärendeinformation + Fordonsinformation) och exporten. |
| Instrumentavläsning (visual-first) | ✅ Kameran som universellt gränssnitt: `📷 Instrument` i Dokumentera-panelen fotograferar multimetrar, diagnosskärmar, batteritestare m.m. — bildtolkningen identifierar instrumenttyp och extraherar värden/enheter/felkoder med konfidens per värde; teknikern bekräftar innan något loggas. Originalbilden loggas alltid tillsammans med de strukturerade mätvärdena — strukturerad data ersätter aldrig originalevidensen. Ingen integration mot diagnossystem krävs. |
| Utskrift | ✅ Kundrapport och Live Share-vy skrivs ut svart på vitt; interaktiva element döljs automatiskt. Utskriften går genom ECM-kvalitetsgrinden. |
| Öppet API | ✅ Plattforms-API:t är dokumenterat med OpenAPI 3.0 (`services/plattform/openapi.yaml`) — auth, användare, ärenden/händelser (append-only), översikt, publik delning och AI-orkestern, med scheman för alla händelsetyper. Specen valideras maskinellt, paritetstestas mot serverns rutter och serveras live på `GET /api/openapi.yaml`. |
+86 -67
View File
@@ -1,22 +1,22 @@
# Modul: Evidensmotorn (ECM — Evidence & Compliance Matrix)
**Version: ECM v1.0** · Regelbiblioteket är versionshanterat och skilt från
applikationslogiken (`src/felsokning/ecm.ts`). Vyerna anropar bara motorns
rena funktioner — regler kan uppdateras utan att applikationen byggs om.
**Version: ECM v2.0** · ECM är ett eget subsystem — inte en tabell i
databasen — och motorn som styr hela plattformen: den avgör vilken
dokumentation som krävs, när dokumentation saknas, vilken bevisnivå som
uppnåtts, vilka regler som gäller och om ett ärende kan avslutas.
**Systemet kan aldrig skriva en slutsats som ECM inte har godkänt.**
## Grundprincip
Regelbiblioteket är versionshanterat och skilt från applikationslogiken
(`src/felsokning/ecm.ts`); vyerna anropar bara motorns rena funktioner.
**Inget underlag = ingen slutsats.**
## De sex motorerna
Systemet får aldrig anta att en kontroll är utförd eller påstå att
dokumentation finns om den inte faktiskt är insamlad. Varje påstående i
diagnos, brief och slutrapport ska kunna härledas till minst en
evidenspost i händelseloggen. Systemet skriver aldrig "OK",
"kontrollerad", "inga fel" eller "åtgärdad" utan evidens — i stället:
**"Evidens saknas."** Regeln är kodad i orkesterns grundprompt och kan
inte kringgås från klienten.
## Evidensnivåer
### 1. Evidence Engine
Katalogiserar all bevisning ur händelseloggen. Varje evidenspost får
id, tidpunkt, tekniker, kategori, evidensnivå, sammanfattning och
**innehållshash** — samma post ger alltid samma hash, och den
append-only-låsta loggen (databastriggers) gör varje ändringsförsök
omöjligt.
| Nivå | Typ | Bevisvärde |
| --- | --- | --- |
@@ -25,70 +25,98 @@ inte kringgås från klienten.
| E2 | Foto | Medel |
| E3 | Video | Högt |
| E4 | Mätvärde | Högt |
| E5 | Diagnosdata/dokument (t.ex. skannad arbetsorder) | Mycket högt |
| E5 | Diagnosdata/dokument | Mycket högt |
| E6 | Flera oberoende källor | Högsta |
Ärendets nivå härleds ur loggens faktiska innehåll (`evidensNiva`) och
visas i kvalitetsgrinden.
### 2. Rule Engine
Dokumentationskraven: metodikens `krav`-fält per kontroll plus de
automatiska reglerna — *kan det fotograferas → begär foto; låter det →
video med ljud; rör det sig → video; mäts det → mätvärde; visar en
display informationen → fota displayen; finns ett dokument → fota
dokumentet.* Undantagsorsakerna ("Underlag kan inte tas fram") ligger
här.
## Fullbordansregler
### 3. Compliance Engine
Ärendetypen styr vilka regler som gäller utöver metodiken. Ärendetyp
väljs i identitetsraden och loggas (`arendetyp_satt`):
En kontrollpunkt kan bara slutföras när något av följande är sant:
| Ärendetyp | Extra krav (v2.0) |
| --- | --- |
| Garanti | Miltal dokumenterat · servicehistorik kontrollerad · claim-/garantinummer |
| Goodwill | Miltal · servicehistorik |
| Försäkring | Skadenummer · bildbevis |
| Reklamation | Historik och tidigare försök kontrollerade |
| Begagnatgaranti | Miltal |
1. **Krävd evidens är insamlad** — foto för det synliga, mätvärde för det
som mäts, kommentar där inget bättre är möjligt (metodikens
`krav`-fält per kontroll).
2. **Teknikern dokumenterar ett undantag**: *"Underlag kan inte tas
fram"* med **obligatorisk orsak** (komponenten oåtkomlig, fordonet kan
inte lyftas säkert, kunden avböjde demontering, dålig sikt, utrustning
saknas — eller fri text). Undantaget loggas i händelseloggen och
flaggas ⚠ i brief, överlämning och rapport — det redovisas aldrig som
"utförd".
Här ansluter det framtida **ECM Knowledge Library**: serverdistribuerade,
versionerade regelpaket (garantivillkor per tillverkare, försäkringsbolagens
krav, reklamationslagstiftning, OEM-kontrollpunkter) som laddas dynamiskt
utan appändring.
## Kvalitetsgrind före slutrapport
### 4. Validation Engine
Inga påståenden utan underlag, i tre lager: (a) orkesterns grundprompt —
aldrig "OK/kontrollerad/inga fel/åtgärdad" utan evidens, i stället
"Evidens saknas" plus begäran om rätt underlag; (b) projektionerna —
hypoteser kan aldrig bli konstaterade fel; (c) kvalitetsgrinden nedan.
Slutrapporten kan inte genereras förrän grinden är godkänd
(`kvalitetsgrind`/`grindGodkand`):
### 5. Completion Engine
Kvalitetsgrinden före slutrapport/avslut — utskriften är spärrad tills
alla obligatoriska rader är gröna:
| Kontroll | Krav |
| --- | --- |
| Fordons-/objektidentifiering verifierad | Obligatorisk |
| Arbetsorder inläst | Rekommenderas |
| Fordonshistorik kontrollerad eller motiverad | Obligatorisk |
| Ingående mätarställning dokumenterad | Obligatorisk |
| Kundens felbeskrivning verifierad | Rekommenderas |
| Utgående mätarställning | Obligatorisk vid avslut |
| Metodikens kontroller: evidens eller dokumenterat undantag | Obligatorisk |
| Foton finns för fotokrävande kontroller | Obligatorisk |
| Hypoteser redovisas som ej verifierade | Informativ (alltid sant per konstruktion) |
| Foton för fotokrävande kontroller | Obligatorisk |
| Ärendetypens compliance-krav | Obligatoriska |
| Evidensnivå över E0 | Obligatorisk |
Utskriftsknappen är spärrad tills varje obligatorisk rad är grön; varje
röd rad visar exakt vad som saknas.
### 6. Traceability Engine
Varje export bär ett spårbarhetspaket: ECM-version, ärendetyp,
evidensnivå, grindstatus per regel-id och samtliga evidensposter med
hash. Tillsammans med loggen kan varje slutsats härledas: vilken bild →
vilken mätning → vilken tekniker → vilken regel → vilken regelverksversion
→ när.
## Visual-first: kameran är integrationslagret
## Pre-Diagnostic Validation
Plattformen prioriterar visuell insamling framför systemintegrationer.
När information redan visas på en skärm, ett instrument, en utskrift
eller en etikett fotograferas den — bildtolkningen extraherar, validerar
och strukturerar informationen automatiskt. Ingen specialintegration
behövs mot Bosch, TEXA, Autel, Launch, Hella Gutmann m.fl. så länge en
människa kan läsa informationen.
Ingen felsökning påbörjas förrän grundkontrollerna är genomförda eller
dokumenterat motiverade — metodiken låses upp först därefter:
- **Arbetsorder** → ärendestartens dokumenttolkning (fält + konfidens).
- **Instrument/diagnosskärmar** → `📷 Instrument` i Dokumentera-panelen:
foto → typidentifiering (multimeter, diagnosdator, batteritestare,
mätarkluster, manometer …) → värden med enhet och konfidens → teknikern
bekräftar → **originalbilden loggas alltid tillsammans med de
strukturerade värdena** — strukturerad data ersätter aldrig
originalevidensen.
1. **Fordonshistorik** — kontrollerad (tidigare arbeten, återkommande
fel, TSB, kampanjer; relevanta samband kan noteras som orsakskedja)
eller Nej med obligatorisk orsak → kvalitetsvarning.
2. **Ingående mätarställning** — instrumentpanelen fotograferas;
bildtolkningen föreslår värdet, teknikern bekräftar. Fotot blir den
officiella ingående mätarställningen.
3. **Kundens felbeskrivning verifierad** — ytterligare symptom
dokumenteras som separata observationer, aldrig hopblandade med
kundens beskrivning.
4. **Tidiga observationer** — reparationsspår, modifieringar, skador,
läckage m.m. dokumenteras med foto/observation, eller kvitteras
"inga ytterligare".
Värden med hög säkerhet godkänns automatiskt; osäkra markeras för
granskning — samma konfidensmodell som arbetsorderskanningen
(🟢 ≥95 %, 🟡 8095 %, 🔴 <80 %).
**Utgående mätarställning** fotograferas inför avslut och blir
obligatorisk i grinden när ärendet stängs. Rapporten visar in/ut.
## Spårbarhet
## Ärendeidentitet (Case Identity & Vehicle Context)
Varje evidenspost är en händelse i den append-only-loggen med tidpunkt,
tekniker, ärende och innehåll — omöjlig att ändra i efterhand (triggers i
databasen). Det ger varje slutsats juridiskt spårbart underlag för kund,
försäkringsbolag eller domstol.
Fordonsobjektet är den röda tråden: identiteten registreras **en gång**
(normalt via arbetsorderskanningen, som nu även läser claim-/garantinummer
och skadenummer) och återanvänds sedan överallt:
- **Identitetsrad i arbetsytan** — AO, claim, skadenummer, fordon, regnr,
VIN, miltal, ansvarig tekniker + ärendetypsval.
- **Live Share** — låst panel överst med fordon, referenser och status,
härledd ur det nivåfiltrerade underlaget.
- **Slutrapportens första sida** — Ärendeinformation + Fordonsinformation
automatiskt.
- **Exporten** — identitet + spårbarhetspaket i varje JSON.
## Terminologi
@@ -96,13 +124,4 @@ Produkten beskrivs aldrig som en "AI-app" utan som ett **evidensbaserat
diagnossystem** / **intelligent beslutsstöd**. I användargränssnitt och
dokument används *systemet, analysen, bedömningen, tolkningen,
bildtolkningen, beslutsstödet, regelmotorn* — inte "AI", om det inte är
tekniskt nödvändigt (t.ex. i arkitekturdokumentation om modellorkestern).
## Kommande (regelbibliotekets väg framåt)
- Områdesregler per komponent (däck: fyra bilder + DOT + dimension;
bromsar: närbild per ok; motorljud: video med ljud …) som
serverdistribuerade, versionerade regelpaket.
- Video- och ljudevidens (E3) med analys.
- Garanti-/försäkrings-/reklamationsprofiler med egna obligatoriska
fält i kvalitetsgrinden.
tekniskt nödvändigt.