8aae3a2a97
ecm.ts bar regelverkets rådtexter: undantagsorsaker, orsakskategorier, underlagskällor, evidensgrader och de meningar som säger vad som fattas. Cirka hundra strängar, nu på engelska tillsammans med serverns ecm-regler.json — klienten och regelpaketet måste säga samma sak, annars är det inte samma regel. Tre av dem var inte text utan DATA, och där gjordes bytet med arv i stället för rakt av. ÄRENDETYPEN ligger i loggen och slår upp regelpaketets extra krav. Ett gammalt garantiärende vars typ heter "Garanti" hade inte matchat "Warranty", fått noll extra krav, och släppts igenom grinden med FÄRRE krav än när det öppnades — utan att någonting i gränssnittet visade det. ARENDETYP_ARV normaliserar typen vid uppslaget, aldrig i loggen. GALLRINGSTIDEN slås upp på samma nyckel, och det var värre. Ett garantiärende hade fallit ur tabellen och tagit standardtiden 36 månader i stället för 120 — alltså raderat garantiunderlaget sju år i förtid, tyst och oåterkalleligt. Ett uppslag som missar ska ge det försiktigaste utfallet; här gav det det farligaste. Två tester låser det. SÄKERHETSSPÄRREN avgörs av en textsträng. När knappen bytte från "Ja" till "Yes" gick klient och server isär: klienten skrev "Yes", servern jämförde mot "Ja". Utfallet blev fail-closed — högvoltsärenden gick inte att avsluta alls — vilket är rätt riktning för ett fel att falla åt, men det var en slump och inte en konstruktion. `arJakande` känner igen ett ja på alla språken. Att en säkerhetsspärr avgörs av fritext är i sig felet; rätt lösning är ett booleskt fält, och att arvet står synligt i koden är en påminnelse om det. Pre-diagnostikens kvitteringar känns igen på sin text och har fått samma behandling: gamla ärenden hade annars visat en ogjord kontroll för arbete som faktiskt utförts, och teknikern hade kvitterat en gång till — två kvitteringar för samma sak i en append-only logg. Genomgången drev gränssnittet på svenska knappnamn och gick sönder på rätt sätt: den hittade "+ Dokumentera felorsak", "Registrera besked" och kundkanalerna "Telefon"/"E-post", som alla missats av de tidigare svepen. Fyra av fyra ärenden avslutas igen. 609 tester, 186 integrationskontroller mot riktig Postgres, genomgång, portalspärr, typkontroll och lint gröna. Mutationsprövat: utan ARENDETYP_ARV faller två tester, utan `arJakande` ett. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012EQg3rJsrQ1ZNTvkzmQAtt
105 lines
3.1 KiB
JSON
105 lines
3.1 KiB
JSON
{
|
|
"version": "2.0",
|
|
"beskrivning": "ECM Knowledge Library — serverdistribuerat regelpaket. Uppdateras utan appändring: redigera filen (eller montera en ConfigMap över den i klustret) och starta om tjänsten. Klienten hämtar paketet vid inloggning och faller tillbaka till sitt inbyggda standardpaket offline.",
|
|
"arendetypRegler": {
|
|
"Warranty": [
|
|
{
|
|
"id": "garanti_miltal",
|
|
"rubrik": "Mileage documented",
|
|
"krav": "miltal",
|
|
"detaljVidBrist": "Warranty cases require a documented odometer reading."
|
|
},
|
|
{
|
|
"id": "garanti_historik",
|
|
"rubrik": "Service history checked",
|
|
"krav": "historik",
|
|
"detaljVidBrist": "Warranty cases require a checked service history."
|
|
},
|
|
{
|
|
"id": "garanti_claim",
|
|
"rubrik": "Claim or warranty number recorded",
|
|
"krav": "claim",
|
|
"detaljVidBrist": "State the claim or warranty number (read from the work order)."
|
|
}
|
|
],
|
|
"Goodwill": [
|
|
{
|
|
"id": "goodwill_miltal",
|
|
"rubrik": "Mileage documented",
|
|
"krav": "miltal",
|
|
"detaljVidBrist": "Goodwill cases require a documented odometer reading."
|
|
},
|
|
{
|
|
"id": "goodwill_historik",
|
|
"rubrik": "Service history checked",
|
|
"krav": "historik",
|
|
"detaljVidBrist": "Goodwill cases require a checked service history."
|
|
}
|
|
],
|
|
"Insurance": [
|
|
{
|
|
"id": "forsakring_skadenummer",
|
|
"rubrik": "Claim number recorded",
|
|
"krav": "skadenummer",
|
|
"detaljVidBrist": "Insurance cases require a claim number (read from the work order)."
|
|
},
|
|
{
|
|
"id": "forsakring_bildbevis",
|
|
"rubrik": "Photographic evidence present",
|
|
"krav": "foto",
|
|
"detaljVidBrist": "Insurance cases require photographic documentation."
|
|
}
|
|
],
|
|
"Complaint": [
|
|
{
|
|
"id": "reklamation_historik",
|
|
"rubrik": "History and previous attempts checked",
|
|
"krav": "historik",
|
|
"detaljVidBrist": "Complaint cases require a checked history (previous repairs and attempts)."
|
|
}
|
|
],
|
|
"Used-vehicle warranty": [
|
|
{
|
|
"id": "begagnat_miltal",
|
|
"rubrik": "Mileage documented",
|
|
"krav": "miltal",
|
|
"detaljVidBrist": "Used-vehicle warranty cases require a documented odometer reading."
|
|
}
|
|
]
|
|
},
|
|
"undantagsorsaker": [
|
|
"The component is inaccessible",
|
|
"The vehicle cannot be lifted safely",
|
|
"The customer declined disassembly",
|
|
"Poor visibility or access",
|
|
"Equipment not available"
|
|
],
|
|
"orsakskategorier": [
|
|
"Normal wear",
|
|
"Age",
|
|
"Distance travelled",
|
|
"Material fatigue",
|
|
"Manufacturing defect",
|
|
"Inadequate maintenance",
|
|
"Faulty previous repair",
|
|
"External influence",
|
|
"Corrosion",
|
|
"Overheating",
|
|
"Contamination",
|
|
"Improper use",
|
|
"Modification",
|
|
"Accident or damage",
|
|
"Unknown cause"
|
|
],
|
|
"underlagskallor": [
|
|
"Foto",
|
|
"Video",
|
|
"Measurement result",
|
|
"Diagnostic readout",
|
|
"Previous history",
|
|
"Service history",
|
|
"Technical documentation",
|
|
"Direct observation"
|
|
]
|
|
}
|