Modul B (Barnsjukdomar)
/*
Denna modul är uppdelad i en huvudmodul och sex stycken undermoduler
motsvarande olika barnsjukdomar. Dessa är mässling, röda hund,
scharlakansfeber, vattkoppor, körtelfeber samt tredagarsfeber. Viss redundans
är oundviklig eftersom exempelvis feber ingår som symtom i samtliga diagnoser.
Reglerna i de olika modulerna kommer att bestämma vilka frågor som triggas.
Dessa kan väljas slumpmässigt och sökningen i frågeträdet kan ske både på
djupet och på bredden. Då ett visst antal frågor (eller alla) valts ur trädet
görs en sökning i CBSmodulen efter den diagnos som stämmer in på svarssymtomen.
Innan sökning i slutmodulen kan ske skall ett tillräckligt antal
symtomspecifika frågor ha valts för att sökningen skall lyckas. Sökningen skall
fungera för alla lagrade fallbeskrivningarna, det vill säga vid sökning får
användaren alltid upp ett svarsalternativ utifrån de frågor som valts ur
frågeträdet. I slutmodulen lagras redan förvärvad kunskap som fallbeskrivningar
varför svar alltid erhålles. De enskilda modulerna innehåller enbart de symtom
som gäller för respektive sjukdom. Frågorna kan vara specade och då väljer
användaren ett av två alternativ, Ja (True) eller Nej (False). Vid skalsvar
väljs svar ur ett intervall. Detta sker på samma sätt i alla modulerna.*/
startBarnsjukdomar()
{
private
String mässling, vattkoppor, scharlakansfeber, röda_hund, körtelfeber,
tredagarsfeber;
Start av Modul B
{
IF (mässling) THEN
moduleM.weight := 600;
}
ELSE /* Starta modul M */
IF (scharlakansfeber) THEN
moduleS.weight := 500; /* Starta modul S */
} ELSE
IF (vattkoppor) THEN
moduleV.weight := 400; /* Starta modul V */
} ELSE
IF (röda_hund) THEN
moduleR.weight := 300; /* Starta modul R */
} ELSE
IF (körtelfeber) THEN
moduleK.weight := 200; /* Starta modul K */
} ELSE
IF (tredagarsfeber) THEN
moduleT.weight := 100; /* Starta modul T */
}
weight := 0;
Modul M (Mässling)
Regelbas
IF (first_time) THEN ställ_fråga(initiering);
IF (feber) THEN ställ_fråga (Fråga1);
IF (Fråga 1)=True THEN ställ_fråga (Fråga 2);
IF (allmänpåverkan) THEN ställ_fråga (Fråga 3);
IF NOT (allmänpåverkan) THEN ställ_fråga (Fråga 4);
IF (smärttillstånd) THEN ställ_fråga (Fråga 11);
IF (ögon) AND (irriterad) THEN ställ_fråga (Fråga 12);
IF (ögon) AND (röda) THEN ställ_fråga (Fråga 13);
IF (ögon) AND (ljuskänslig) THEN ställ_fråga (Fråga 14);
IF (rethosta) THEN ställ_fråga (Fråga 10);
IF (snuva) THEN ställ_fråga (Fråga 9);
IF (prickar) AND (insidan av kind) AND (vita) THEN ställ_fråga (Fråga
8);
IF (fläckar) AND (små) AND (röda) AND (upphöjda) THEN ställ_fråga (Fråga
5);
IF (fläckar) AND (börjat) AND (små) AND (upphöjda) AND (bakom öron) THEN
ställ_fråga (Fråga 6);
IF (fläckar) AND (spridning) AND (ansikte) THEN ställ_fråga (Fråga 7);
Fallbeskrivning
/*Frågeträdet gås igenom. Efter fråga 11 görs ett anrop till modulen med
fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills
inga diagnoser finns kvar*/
mässling:=False;
m:=0;
IF ((Fråga1)=True THEN (m :=m+1) AND
IF (Fråga 2)=True THEN (m :=m+1) AND
IF (Fråga 3)=True THEN (m := m+2)
AND
IF (Fråga 5)=True THEN (m:=m+1) AND
IF (Fråga 6)=True THEN (m:=m+2) AND
IF (Fråga 8)=True THEN (m:=m+1) AND
IF (Fråga 9)=True THEN (m:=m+1) AND
IF (Fråga 10)=True THEN (m:=m+1) AND
IF (Fråga 11))=True THEN mässling:=True;
IF (mässling) THEN
moduleCBS.weight:=1000;
Frågeträd
·
Ja (T)
·
Nej (F)
·
< 38.5 grader (T)
·
>= 38.5 grader (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
Modul S (Scharlakansfeber)
Regelbas
IF (first_time) THEN ställ_fråga (initiering);
IF (feber) THEN ställ_fråga (Fråga 1);
IF (Fråga 1)=True THEN ställ_fråga (Fråga 2);
IF (allmänpåverkan) THEN ställ_fråga (Fråga 3);
IF (feber) AND NOT (allmänpåverkan) THEN ställ_fråga (Fråga 4);
IF (utslag) AND (finprickiga) AND (sammanflytande) THEN ställ_fråga
(Fråga 5);
IF (utslag) AND NOT (ansikte) THEN ställ_fråga(Fråga 8);
IF (utslag) AND (börjat) AND ((hals) OR (rygg) OR (bakom öron)) THEN
ställ_fråga (Fråga 9);
IF (utslag) AND (spridning) AND (snabb) THEN ställ_fråga (Fråga 10);
IF (utslag) AND (hudveck) THEN ställ_fråga (Fråga
11);
IF
(fläckar) AND (lätt upphöjda) THEN ställ_fråga(Fråga 7);
IF (hud) AND (torr) AND (fnasig) THEN ställ_fråga (Fråga 12);
IF (hud) AND (blek) AND (runt mun) THEN ställ_fråga (Fråga 14);
IF (ansiktsrodnad) THEN ställ_fråga (Fråga 13);
IF (smärttillstånd) THEN ställ_fråga (Fråga 15);
IF (smärttillstånd) THEN ställ_fråga (Fråga 20);
IF (tunga) AND (beläggning) THEN ställ_fråga (Fråga 16);
IF (tunga) AND ((beläggning) AND (börjat lossna)) THEN ställ_fråga
(Fråga 17);
IF (tunga) AND (starkt röd) THEN ställ_fråga (Fråga 18);
IF (tunga) AND (starkt röd) AND (bleka fält) THEN ställ_fråga (Fråga
19);
Fallbeskrivning
/*Frågeträdet gås igenom. Efter fråga 19 görs ett anrop till modulen med
fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills
inga diagnoser finns kvar*/
scharlakansfeber:=False;
sf:=0;
IF ((Fråga1)=True THEN (sf :=sf+1)
AND
IF (Fråga 2)=True THEN (sf :=sf+3)
AND
IF (Fråga 5)=True THEN (sf := sf+1)
AND
IF (Fråga 6)=True THEN (sf:=sf+2)
AND
IF (Fråga 8)=True THEN (sf:=sf+1)
AND
IF (Fråga 9)=True THEN (sf:=sf+1)
AND
IF (Fråga 10)=True THEN (sf:=sf+1)
AND
IF (Fråga 11)=True THEN (sf:=sf+1)
AND
IF ((Fråga12)=True THEN (sf :=sf+1)
AND
IF (Fråga 13)=True THEN (sf :=sf+3)
AND
IF (Fråga 16)=True THEN (sf := sf+3)
AND
IF (Fråga 19))=True THEN
scharlakansfeber:=True;
IF (scharlakansfeber) THEN
moduleCBS.weight:=1000;
Frågeträd
·
Ja (T)
·
Nej (F)
·
Fråga 2: Om ja, hur hög är temperaturen? : skal_svar (Välj ett alternativ ur
intervallet);
·
< 38.5 grader (T)
·
>= 38.5 grader (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
Modul V (Vattkoppor)
Regelbas
IF (first_time) THEN ställ_fråga (initiering);
IF (feber) THEN ställ_fråga (Fråga 1);
IF (Fråga 1)=True THEN ställ_fråga (Fråga 2);
IF (allmänpåverkan) THEN ställ_fråga (Fråga 3);
IF (feber) AND NOT (allmänpåverkan) THEN ställ_fråga (Fråga 4);
IF (smärttillstånd) THEN ställ_fråga (Fråga 12);
IF (utslag) AND (blåsformiga) THEN ställ_fråga (Fråga 5);
IF (utslag) AND (klåda) THEN ställ_fråga (Fråga 6);
IF (utslag) AND (delvis fallit av) AND (lämnat skorpor) THEN ställ_fråga
(Fråga 7);
IF (utslag) AND (börjat) AND (ansikte) THEN ställ_fråga (Fråga 8);
IF (utslag) AND (spridning) AND ((hårbotten) AND (armar) AND (ben)) THEN
ställ_fråga (Fråga 9);
IF (utslag) AND (spridning) AND ((munslemhinnan) AND (könsorganen)) THEN
ställ_fråga (Fråga 10);
Fallbeskrivning
/*Frågeträdet gås igenom. Efter fråga 7 görs ett anrop till modulen med
fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills
inga diagnoser finns kvar*/
vattkoppor:=False;
v:=0;
IF ((Fråga1)=True THEN (v :=v+1) AND
IF (Fråga 2)=True THEN (v :=v+2) AND
IF (Fråga 4)=True THEN (v :=v+1) AND
IF (Fråga 5)=True THEN (v:=v+1) AND
IF (Fråga 6)=True THEN (v:=v+1) AND
IF (Fråga 7))=True vattkoppor:=True;
IF (vattkoppor) THEN
moduleCBS.weight:=1000;
Frågeträd
·
Ja (T)
·
Nej (F)
·
< 38.5 grader (T)
·
>= 38.5 grader (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
Modul R (Röda
Hund)
Regelbas
IF (first_time) THEN ställ_fråga (initiering);
IF (feber) THEN ställ_fråga (Fråga 1);
IF (Fråga 1)=True THEN ställ_fråga (Fråga 2);
IF (allmänpåverkan) THEN ställ_fråga (Fråga 3);
IF (smärttillstånd) THEN ställ_fråga (Fråga 8);
IF (smärttillstånd) THEN ställ_fråga (Fråga 5);
IF NOT (allmänpåverkan) THEN ställ_fråga (Fråga 4);
IF (smärttillstånd) THEN ställ_fråga (Fråga 6);
IF (smärttillstånd) THEN ställ_fråga (Fråga 7);
IF ((utslag) AND (blekröda)) AND ((fläckar) AND ((fläckar) AND (lätt
upphöjda)) THEN ställ_fråga (Fråga 9);
IF (utslag) AND (börjat) AND (ansikte) THEN ställ_fråga (Fråga 10);
Fallbeskrivning
/*Frågeträdet gås igenom. Efter fråga 9 görs ett anrop till modulen med
fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills
inga diagnoser finns kvar*/
röda_hund:=False;
r:=0;
IF ((Fråga1)=True THEN (r :=r+1) AND
IF (Fråga 2)=True THEN (r:=r+1) AND
IF (Fråga 3)=True THEN (r :=r+2) AND
IF (Fråga 5)=True THEN (r:=r+2) AND
IF (Fråga 7)=True THEN (r:=r+2) AND
IF (Fråga 9))=True THEN
röda_hund:=True;
IF (röda_hund) THEN
moduleCBS.weight:=1000;
Frågeträd
·
Ja (T)
·
Nej (F)
·
Fråga 2: Om ja, hur hög är temperaturen? : skal_svar (Välj ett alternativ ur
intervallet);
·
< 38.5 grader (T)
·
>= 38.5 grader (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
Modul K (Körtelfeber)
Regelbas
IF (first_time) THEN ställ_fråga (initiering);
IF (feber) THEN ställ_fråga (Fråga 1);
IF (Fråga 1)=True THEN ställ_fråga (Fråga 2);
IF (allmänpåverkan) AND (trött) THEN ställ_fråga (Fråga 5);
IF (smärttillstånd) THEN ställ_fråga (Fråga 10);
IF (smärttillstånd) THEN ställ_fråga (Fråga 7);
IF (smärttillstånd) AND (halsont) AND (förstorade mandlar) AND (vit
beläggning) THEN ställ_fråga (Fråga 8);
IF (smärttillstånd) THEN ställ_fråga (Fråga 6);
IF (snuva) THEN ställ_fråga (Fråga 11);
IF (lymfkörtlar) AND (svullna) AND ((ljumskar) OR (hals) OR armhålor))
THEN ställ_fråga(Fråga 9);
IF ((utslag) AND (blekröda)) AND ((fläckar) AND ((fläckar) AND (lätt
upphöjda)) THEN ställ_fråga (Fråga 12);
IF (fläckar) AND (små) AND (röda) AND (upphöjda) THEN ställ_fråga (Fråga
13);
Fallbeskrivning
/*Frågeträdet gås igenom. Efter fråga 13 görs ett anrop till modulen med
fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills
inga diagnoser finns kvar*/
körtelfeber:=False;
k:=0;
IF ((Fråga1)=True THEN (k :=k+1) AND
IF (Fråga 2)=False THEN (k :=k+1)
AND
IF (Fråga 3)=True THEN (k := k+3)
AND
IF (Fråga 6)=True THEN (k:=k+4) AND
IF (Fråga 10)=True THEN (k:=k+1) AND
IF (Fråga 11)=True THEN (k:=k+1) AND
IF (Fråga 12)=True THEN (k:=k+1) AND
IF (Fråga 13))=True THEN
körtelfeber:=True;
IF (körtelfeber) THEN
moduleCBS.weight:=1000;
Frågeträd
·
Ja (T)
·
Nej (F)
·
< 38.5 grader (T)
·
>= 38.5 grader (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
Modul T (Tredagarsfeber)
Regelbas
IF (first_time) THEN ställ_fråga (initiering);
IF (feber) THEN ställ_fråga (Fråga 1);
IF (Fråga 1)=True THEN ställ_fråga (Fråga 2);
IF (feber) AND NOT (allmänpåverkan) THEN ställ_fråga (Fråga 4);
IF (utslag) AND ((småflammiga) AND (blekröda)) THEN ställ_fråga (Fråga
5);
IF (utslag) AND ((bål) AND (överarmar)) THEN ställ_fråga (Fråga 6);
Fallbeskrivning
/*Frågeträdet gås igenom. Efter fråga 6 görs ett anrop till modulen med
fallbeskrivningar där matchning sker. Nästa fall får närmaste lägre vikt tills
inga diagnoser finns kvar*/
tredagarsfeber:=False;
t:=0;
IF ((Fråga1)=True THEN (t :=t+1) AND
IF (Fråga 2)=True THEN (t:=t+2) AND
IF (Fråga 4)=True THEN (t :=t+1) AND
IF (Fråga 5)=True THEN (t:=t+1) AND
IF (Fråga 6))=True THEN
tredagarsfeber:=True;
IF (tredagarsfeber) THEN
moduleCBS.weight:=1000;
Frågeträd
·
Ja (T)
·
Nej (F)
·
>= 38.5 grader (T)
·
< 38.5 grader (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)
·
Ja (T)
·
Nej (F)